New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
zdfqiao.F90 in branches/2015/dev_r5936_INGV1_WAVE/NEMOGCM/NEMO/OPA_SRC/ZDF – NEMO

source: branches/2015/dev_r5936_INGV1_WAVE/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfqiao.F90 @ 7171

Last change on this file since 7171 was 7171, checked in by emanuelaclementi, 7 years ago

#1643 Updates and bug fix on development branch 2015/dev_r5936_INGV1_WAVE

File size: 4.9 KB
Line 
1MODULE zdfqiao
2   !!======================================================================
3   !!                       ***  MODULE  zdfqiao  ***
4   !! Qiao module      : vertical mixing enhancement due to surface waves
5   !!======================================================================
6   !! History :  3.6  !  2014-10  (E. Clementi)  Original code
7   !!----------------------------------------------------------------------
8   !!----------------------------------------------------------------------
9   !!   qiao_init     
10   !!   zdf_qiao        : compute Qiao parameters
11   !!----------------------------------------------------------------------
12
13   USE iom             ! I/O manager library
14   USE in_out_manager  ! I/O manager
15   USE lib_mpp         ! distribued memory computing library
16   USE sbc_oce         ! Surface boundary condition: ocean fields
17   USE zdf_oce
18   USE sbcwave         ! wave module
19   USE dom_oce
20   
21   !!----------------------------------------------------------------------
22   !!   qiao_init       : compute QBv: Qiao terms to be added to vertical eddy
23   !!                     diffusivity and viscosity coefficients
24   !!----------------------------------------------------------------------
25
26   IMPLICIT NONE
27   PRIVATE
28
29   PUBLIC   zdf_qiao    ! routine called in zdf_ric
30
31   REAL(wp),PUBLIC,ALLOCATABLE,DIMENSION (:,:,:)     :: QBv, QBvu, QBvv
32
33   !! * Substitutions
34#  include "domzgr_substitute.h90"
35   !!----------------------------------------------------------------------
36   !! NEMO/OPA 4.0 , NEMO Consortium (2011)
37   !! $Id: $
38   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
39   !!----------------------------------------------------------------------
40
41CONTAINS
42
43   SUBROUTINE zdf_qiao( kt )
44      !!---------------------------------------------------------------------
45      !!                     ***  ROUTINE zdf_qiao ***
46      !!
47      !! ** Purpose :Compute the Qiao term (QBv) to be added to
48      !!             vertical viscosity and diffusivity coeffs. 
49      !!
50      !! ** Method  :QBv = alpha * A * Us(0) * exp (3 * k * z)
51      !!             
52      !! ** action  :Compute the Qiao wave dependent term
53      !!             only if ln_wave=.true.
54      !!               
55      !!---------------------------------------------------------------------
56      INTEGER, INTENT( in  ) ::  kt   ! ocean time step
57      !
58      INTEGER                ::  jj, ji, jk
59      !!---------------------------------------------------------------------
60      !
61      !
62      !                                         ! -------------------- !
63      IF( kt == nit000 ) THEN                   ! First call kt=nit000 !
64         ALLOCATE(QBv(jpi,jpj,jpk))             ! -------------------- !
65         ALLOCATE(QBvu(jpi,jpj,jpk))
66         ALLOCATE(QBvv(jpi,jpj,jpk))
67      ENDIF
68
69      QBv (:,:,:) = 0.0
70      QBvu(:,:,:) = 0.0
71      QBvv(:,:,:) = 0.0
72
73      !
74      ! Compute the Qiao term Bv (QBv) to be added to
75      ! vertical viscosity and diffusivity
76      ! QBv = alpha * A * Us(0) * exp (3 * k * z)
77      ! alpha here is set to 1
78      !---------------------------------------------------------------------------------
79      !
80      IF ( ln_wave ) THEN
81         DO jk = 1, jpk
82            DO jj = 1, jpjm1
83               DO ji = 1, jpim1
84                  QBv(ji,jj,jk) = 1.0 * 0.353553 * swh(ji,jj) * tsd2d(ji,jj) *       &
85               &              exp(3.0 * wnum(ji,jj) *                                &                     
86               &              (-MIN( fsdept(ji  ,jj  ,jk) , fsdept(ji+1,jj  ,jk),    &
87               &                     fsdept(ji  ,jj+1,jk) , fsdept(ji+1,jj+1,jk))))
88               END DO
89            END DO
90         END DO
91
92         QBv(jpi,:,:)=QBv(jpim1,:,:)
93         QBv(:,jpj,:)=QBv(:,jpjm1,:)
94
95         !
96         ! Interpolate Qiao parameter QBv into the grid_U and grid_V
97         !-------------------------------------------------
98         !
99         DO jk = 1, jpk
100            DO jj = 1, jpjm1
101               DO ji = 1, jpim1
102                  QBvu(ji,jj,jk) = 0.5 *  umask(ji,jj,jk)  *               &
103               &           ( QBv(ji  ,jj,jk) * tmask(ji  ,jj,jk)           &
104               &           + QBv(ji+1,jj,jk) * tmask(ji+1,jj,jk) )
105                  QBvv(ji,jj,jk) = 0.5 *  vmask(ji,jj,jk)  *               &
106               &           ( QBv(ji,jj  ,jk) * tmask(ji,jj  ,jk)           &
107               &           + QBv(ji,jj+1,jk) * tmask(ji,jj+1,jk) )
108               END DO
109            END DO
110         END DO
111         !
112         QBvu(jpi,:,:)=QBvu(jpim1,:,:)
113         QBvu(:,jpj,:)=QBvu(:,jpjm1,:)
114         QBvv(jpi,:,:)=QBvv(jpim1,:,:)
115         QBvv(:,jpj,:)=QBvv(:,jpjm1,:)
116
117        ELSE
118           CALL ctl_stop( 'STOP', 'To use Qiao formulation you have to set: ln_wave=.true.')
119        ENDIF
120        !
121   END SUBROUTINE zdf_qiao
122     
123   !!======================================================================
124END MODULE zdfqiao
Note: See TracBrowser for help on using the repository browser.