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 @ 7340

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

#1643 Correction after review in development branch 2015/dev_r5936_INGV1_WAVE

File size: 5.3 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   !!   zdf_qiao        : compute Qiao parameters
9   !!----------------------------------------------------------------------
10
11   USE in_out_manager  ! I/O manager
12   USE lib_mpp         ! distribued memory computing library
13   USE sbc_oce         ! Surface boundary condition: ocean fields
14   USE zdf_oce
15   USE sbcwave         ! wave module
16   USE dom_oce
17   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
18   
19   IMPLICIT NONE
20   PRIVATE
21
22   PUBLIC zdf_qiao    ! routine called in step
23
24   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:,:) :: qbv, qbvu, qbvv
25
26   !! * Substitutions
27#  include "domzgr_substitute.h90"
28#  include "vectopt_loop_substitute.h90"
29   !!----------------------------------------------------------------------
30   !! NEMO/OPA 4.0 , NEMO Consortium (2011)
31   !! $Id: $
32   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
33   !!----------------------------------------------------------------------
34
35CONTAINS
36
37   SUBROUTINE zdf_qiao( kt )
38      !!---------------------------------------------------------------------
39      !!                     ***  ROUTINE zdf_qiao ***
40      !!
41      !! ** Purpose :Compute the Qiao term (qbv) to be added to
42      !!             vertical viscosity and diffusivity coeffs. 
43      !!
44      !! ** Method  :qbv = alpha * A * Us(0) * exp (3 * k * z)
45      !!             
46      !! ** action  :Compute the Qiao wave dependent term
47      !!             only if ln_wave=.true.
48      !!               
49      !!---------------------------------------------------------------------
50      INTEGER, INTENT( in  ) ::  kt   ! ocean time step
51      !
52      INTEGER :: jj, ji, jk   ! dummy loop indices
53      !!---------------------------------------------------------------------
54      !
55      IF( kt == nit000 ) THEN                   ! First call kt=nit000 !
56         IF( .NOT. ( ln_wave .AND. ln_sdw ) )   &
57            &   CALL ctl_stop ( 'Ask for wave Qiao enhanced turbulence but ln_wave   &
58            &                    and ln_sdw have to be activated')
59         IF( zdf_qiao_alloc() /= 0 )   &
60            &   CALL ctl_stop( 'STOP', 'zdf_qiao : unable to allocate arrays' )
61      ENDIF
62
63      !
64      ! Compute the Qiao term Bv (qbv) to be added to
65      ! vertical viscosity and diffusivity
66      ! qbv = alpha * A * Us(0) * exp (3 * k * z)
67      ! alpha here is set to 1
68      !---------------------------------------------------------------------------------
69      !
70      DO jk = 1, jpk
71         DO jj = 1, jpjm1
72            DO ji = 1, fs_jpim1
73               qbv(ji,jj,jk) = 1.0 * 0.353553 * swh(ji,jj) * tsd2d(ji,jj) *           &
74            &                  EXP(3.0 * wnum(ji,jj) *                                &                     
75            &                  (-MIN( fsdepw(ji  ,jj  ,jk), fsdepw(ji+1,jj  ,jk),     &
76            &                         fsdepw(ji  ,jj+1,jk), fsdepw(ji+1,jj+1,jk))))   &
77            &                          * wmask(ji,jj,jk)
78            END DO
79         END DO
80      END DO
81      !
82      CALL lbc_lnk( qbv, 'W', 1. )   ! Lateral boundary conditions
83         
84      !
85      ! Interpolate Qiao parameter qbv into the grid_U and grid_V
86      !----------------------------------------------------------
87      !
88      DO jk = 1, jpk
89         DO jj = 1, jpjm1
90            DO ji = 1, fs_jpim1
91               qbvu(ji,jj,jk) = 0.5 * wumask(ji,jj,jk)  *              & 
92            &                  ( qbv(ji,jj,jk) + qbv(ji+1,jj  ,jk) )
93               qbvv(ji,jj,jk) = 0.5 * wvmask(ji,jj,jk)  *              &
94            &                  ( qbv(ji,jj,jk) + qbv(ji  ,jj+1,jk) )
95            END DO
96         END DO
97      END DO
98      !
99      CALL lbc_lnk( qbvu, 'U', 1. ) ; CALL lbc_lnk( qbvv, 'V', 1. )   ! Lateral boundary conditions
100
101      ! Enhance vertical mixing coeff.         
102      !-------------------------------
103      !
104      DO jk = 1, jpkm1
105         DO jj = 1, jpj
106            DO ji = 1, jpi
107               avmu(ji,jj,jk) = ( avmu(ji,jj,jk) + qbvu(ji,jj,jk) ) * umask(ji,jj,jk)
108               avmv(ji,jj,jk) = ( avmv(ji,jj,jk) + qbvv(ji,jj,jk) ) * vmask(ji,jj,jk)
109               avt (ji,jj,jk) = ( avt (ji,jj,jk) + qbv (ji,jj,jk) ) * tmask(ji,jj,jk)
110            END DO
111         END DO
112      END DO
113      !
114   END SUBROUTINE zdf_qiao
115
116   INTEGER FUNCTION zdf_qiao_alloc()
117      !!----------------------------------------------------------------------
118      !!                ***  FUNCTION zdf_qiao_alloc  ***
119      !!----------------------------------------------------------------------
120      ALLOCATE( qbv(jpi,jpj,jpk), qbvu(jpi,jpj,jpk), qbvv(jpi,jpj,jpk),   &
121         &      STAT = zdf_qiao_alloc )
122      !
123      IF( lk_mpp             )  CALL mpp_sum ( zdf_qiao_alloc )
124      IF( zdf_qiao_alloc > 0 )  CALL ctl_warn('zdf_qiao_alloc: allocation of arrays failed.')
125      !
126   END FUNCTION zdf_qiao_alloc
127     
128   !!======================================================================
129END MODULE zdfqiao
Note: See TracBrowser for help on using the repository browser.