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/UKMO/r5518_INGV1_WAVE-coupling/NEMOGCM/NEMO/OPA_SRC/ZDF – NEMO

source: branches/UKMO/r5518_INGV1_WAVE-coupling/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfqiao.F90 @ 7099

Last change on this file since 7099 was 7099, checked in by jcastill, 7 years ago

Changes as in r7078 of the original ING branch: branches/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   !!----------------------------------------------------------------------
34   !! NEMO/OPA 4.0 , NEMO Consortium (2011)
35   !! $Id: $
36   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
37   !!----------------------------------------------------------------------
38
39CONTAINS
40
41   SUBROUTINE zdf_qiao( kt )
42      !!---------------------------------------------------------------------
43      !!                     ***  ROUTINE zdf_qiao ***
44      !!
45      !! ** Purpose :Compute the Qiao term (QBv) to be added to
46      !!             vertical viscosity and diffusivity coeffs. 
47      !!
48      !! ** Method  :QBv = alpha * A * Us(0) * exp (3 * k * z)
49      !!             
50      !! ** action  :Compute the Qiao wave dependent term
51      !!             only if ln_wave=.true.
52      !!               
53      !!---------------------------------------------------------------------
54      INTEGER, INTENT( in  ) ::  kt   ! ocean time step
55      !
56      INTEGER                ::  jj, ji, jk
57      !!---------------------------------------------------------------------
58      !
59      !
60      !                                         ! -------------------- !
61      IF( kt == nit000 ) THEN                   ! First call kt=nit000 !
62         ALLOCATE(QBv(jpi,jpj,jpk))             ! -------------------- !
63         ALLOCATE(QBvu(jpi,jpj,jpk))
64         ALLOCATE(QBvv(jpi,jpj,jpk))
65      ENDIF
66
67      QBv (:,:,:) = 0.0
68      QBvu(:,:,:) = 0.0
69      QBvv(:,:,:) = 0.0
70
71      !
72      ! Compute the Qiao term Bv (QBv) to be added to
73      ! vertical viscosity and diffusivity
74      ! QBv = alpha * A * Us(0) * exp (3 * k * z)
75      ! alpha here is set to 1
76      !---------------------------------------------------------------------------------
77      !
78      IF ( ln_wave ) THEN
79         DO jk = 1, jpk
80            DO jj = 1, jpjm1
81               DO ji = 1, jpim1
82                  QBv(ji,jj,jk) = 1.0 * 0.353553 * swh(ji,jj) * tsd2d(ji,jj) *       &
83               &              exp(3.0 * wnum(ji,jj) *                                &                     
84               &              (-MIN( gdept_0(ji  ,jj  ,jk) , gdept_0(ji+1,jj  ,jk),  & 
85               &               gdept_0(ji  ,jj+1,jk),gdept_0(ji+1,jj+1,jk))))
86               END DO
87            END DO
88         END DO
89
90         QBv(jpi,:,:)=QBv(jpim1,:,:)
91         QBv(:,jpj,:)=QBv(:,jpjm1,:)
92
93         !
94         ! Interpolate Qiao parameter QBv into the grid_U and grid_V
95         !-------------------------------------------------
96         !
97         DO jk = 1, jpk
98            DO jj = 1, jpjm1
99               DO ji = 1, jpim1
100                  QBvu(ji,jj,jk)=0.5 * ( 2. - umask(ji,jj,jk) ) *                 &
101               &           ( QBv(ji,jj,jk) * tmask(ji,jj,jk)                      & 
102               &           + QBv(ji+1,jj,jk) * tmask(ji+1,jj,jk) )               
103                  QBvv(ji,jj,jk)=0.5 * ( 2. - vmask(ji,jj,jk) ) *                 &
104               &           ( QBv(ji,jj,jk) * tmask(ji,jj,jk)                      &
105               &           + QBv(ji,jj+1,jk) * tmask(ji,jj+1,jk) )
106
107               END DO
108            END DO
109         END DO
110         !
111         QBvu(jpi,:,:)=QBvu(jpim1,:,:)
112         QBvu(:,jpj,:)=QBvu(:,jpjm1,:)
113         QBvv(jpi,:,:)=QBvv(jpim1,:,:)
114         QBvv(:,jpj,:)=QBvv(:,jpjm1,:)
115
116        ELSE
117           CALL ctl_stop( 'STOP', 'To use Qiao formulation you have to set: ln_wave=.true.')
118        ENDIF
119        !
120   END SUBROUTINE zdf_qiao
121     
122   !!======================================================================
123END MODULE zdfqiao
Note: See TracBrowser for help on using the repository browser.