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.
zdfevd.F90 in branches/2012/dev_v3_4_STABLE_2012/NEMOGCM/NEMO/OPA_SRC/ZDF – NEMO

source: branches/2012/dev_v3_4_STABLE_2012/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfevd.F90 @ 3804

Last change on this file since 3804 was 3804, checked in by cbricaud, 11 years ago

add same modifications than TKE to have any impact of evd,tmx,ddm on the turbulent closure solution ; see ticket 954

  • Property svn:keywords set to Id
File size: 6.4 KB
Line 
1MODULE zdfevd
2   !!======================================================================
3   !!                       ***  MODULE  zdfevd  ***
4   !! Ocean physics: parameterization of convection through an enhancement
5   !!                of vertical eddy mixing coefficient
6   !!======================================================================
7   !! History :  OPA  !  1997-06  (G. Madec, A. Lazar)  Original code
8   !!   NEMO     1.0  !  2002-06  (G. Madec)  F90: Free form and module
9   !!             -   !  2005-06  (C. Ethe) KPP parameterization
10   !!            3.2  !  2009-03  (M. Leclair, G. Madec, R. Benshila) test on both before & after
11   !!----------------------------------------------------------------------
12
13   !!----------------------------------------------------------------------
14   !!   zdf_evd      : increase the momentum and tracer Kz at the location of
15   !!                  statically unstable portion of the water column (ln_zdfevd=T)
16   !!----------------------------------------------------------------------
17   USE oce             ! ocean dynamics and tracers variables
18   USE dom_oce         ! ocean space and time domain variables
19   USE zdf_oce         ! ocean vertical physics variables
20   USE zdfkpp          ! KPP vertical mixing
21   USE zdfgls          ! GLS vertical mixing
22   USE in_out_manager  ! I/O manager
23   USE iom             ! for iom_put
24   USE lbclnk          ! ocean lateral boundary conditions (or mpp link)
25   USE timing          ! Timing
26
27   IMPLICIT NONE
28   PRIVATE
29
30   PUBLIC   zdf_evd    ! called by step.F90
31
32   !! * Substitutions
33#  include "domzgr_substitute.h90"
34   !!----------------------------------------------------------------------
35   !! NEMO/OPA 4.0 , NEMO Consortium (2011)
36   !! $Id$
37   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
38   !!----------------------------------------------------------------------
39CONTAINS
40
41   SUBROUTINE zdf_evd( kt )
42      !!----------------------------------------------------------------------
43      !!                  ***  ROUTINE zdf_evd  ***
44      !!                   
45      !! ** Purpose :   Local increased the vertical eddy viscosity and diffu-
46      !!      sivity coefficients when a static instability is encountered.
47      !!
48      !! ** Method  :   avt, avm, and the 4 neighbouring avmu, avmv coefficients
49      !!      are set to avevd (namelist parameter) if the water column is
50      !!      statically unstable (i.e. if rn2 < -1.e-12 )
51      !!
52      !! ** Action  :   avt, avm, avmu, avmv updted in static instability cases
53      !!
54      !! References :   Lazar, A., these de l'universite Paris VI, France, 1997
55      !!----------------------------------------------------------------------
56      USE oce,   zavt_evd => ua , zavm_evd => va  ! (ua,va) used ua workspace
57      !
58      INTEGER, INTENT( in ) ::   kt   ! ocean time-step indexocean time step
59      !
60      INTEGER ::   ji, jj, jk   ! dummy loop indices
61      !!----------------------------------------------------------------------
62      !
63      IF( nn_timing == 1 )  CALL timing_start('zdf_evd')
64      !
65      IF( kt == nit000 ) THEN
66         IF(lwp) WRITE(numout,*)
67         IF(lwp) WRITE(numout,*) 'zdf_evd : Enhanced Vertical Diffusion (evd)'
68         IF(lwp) WRITE(numout,*) '~~~~~~~ '
69         IF(lwp) WRITE(numout,*)
70         !
71         IF(lwp .AND. lk_zdfgls )   CALL ctl_warn(' No need zdf_evd with GLS closures ')
72         !
73      ENDIF
74
75      zavt_evd(:,:,:) = avt(:,:,:)           ! set avt prior to evd application
76
77      SELECT CASE ( nn_evdm )
78      !
79      CASE ( 1 )           ! enhance vertical eddy viscosity and diffusivity (if rn2<-1.e-12)
80         !
81         zavm_evd(:,:,:) = avm(:,:,:)           ! set avm prior to evd application
82         !
83         DO jk = 1, jpkm1 
84#if defined key_vectopt_loop
85            DO jj = 1, 1                     ! big loop forced
86               DO ji = jpi+2, jpij   
87#else
88            DO jj = 2, jpj             ! no vector opt.
89               DO ji = 2, jpi
90#endif
91#if defined key_zdfkpp
92                  ! no evd mixing in the boundary layer with KPP
93                  IF(  MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12  .AND.  fsdepw(ji,jj,jk) > hkpp(ji,jj)  ) THEN
94#else
95                  IF(  MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) THEN
96#endif
97                     avt (ji  ,jj  ,jk) = rn_avevd * tmask(ji  ,jj  ,jk)
98                     avm (ji  ,jj  ,jk) = rn_avevd * tmask(ji  ,jj  ,jk)
99                     avmu(ji  ,jj  ,jk) = rn_avevd * umask(ji  ,jj  ,jk)
100                     avmu(ji-1,jj  ,jk) = rn_avevd * umask(ji-1,jj  ,jk)
101                     avmv(ji  ,jj  ,jk) = rn_avevd * vmask(ji  ,jj  ,jk)
102                     avmv(ji  ,jj-1,jk) = rn_avevd * vmask(ji  ,jj-1,jk)
103                  ENDIF
104               END DO
105            END DO
106         END DO
107         CALL lbc_lnk( avt , 'W', 1. )   ;   CALL lbc_lnk( avm , 'W', 1. )   ! Lateral boundary conditions
108         CALL lbc_lnk( avmu, 'U', 1. )   ;   CALL lbc_lnk( avmv, 'V', 1. )
109         !
110         zavm_evd(:,:,:) = avm(:,:,:) - zavm_evd(:,:,:)   ! change in avm due to evd
111         CALL iom_put( "avm_evd", zavm_evd )              ! output this change
112         !
113      CASE DEFAULT         ! enhance vertical eddy diffusivity only (if rn2<-1.e-12)
114         DO jk = 1, jpkm1
115!!!         WHERE( rn2(:,:,jk) <= -1.e-12 ) avt(:,:,jk) = tmask(:,:,jk) * avevd   ! agissant sur T SEUL!
116#if defined key_vectopt_loop
117            DO jj = 1, 1                     ! big loop forced
118               DO ji = 1, jpij   
119#else
120            DO jj = 1, jpj             ! loop over the whole domain (no lbc_lnk call)
121               DO ji = 1, jpi
122#endif
123#if defined key_zdfkpp
124                  ! no evd mixing in the boundary layer with KPP
125                  IF(  MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12  .AND.  fsdepw(ji,jj,jk) > hkpp(ji,jj)  )   &         
126#else
127                  IF(  MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 )   &
128#endif
129                     avt(ji,jj,jk) = rn_avevd * tmask(ji,jj,jk)
130               END DO
131            END DO
132         END DO
133         !
134      END SELECT
135
136      zavt_evd(:,:,:) = avt(:,:,:) - zavt_evd(:,:,:)   ! change in avt due to evd
137      CALL iom_put( "avt_evd", zavt_evd )              ! output this change
138      !
139      IF( nn_timing == 1 )  CALL timing_stop('zdf_evd')
140      !
141   END SUBROUTINE zdf_evd
142
143   !!======================================================================
144END MODULE zdfevd
Note: See TracBrowser for help on using the repository browser.