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/2015/dev_r5803_NOC_WAD/NEMOGCM/NEMO/OPA_SRC/ZDF – NEMO

source: branches/2015/dev_r5803_NOC_WAD/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfevd.F90 @ 5870

Last change on this file since 5870 was 5870, checked in by acc, 9 years ago

Branch 2015/dev_r5803_NOC_WAD. Merge in trunk changes from 5803 to 5869 in preparation for merge. Also tidied and reorganised some wetting and drying code. Renamed wadlmt.F90 to wetdry.F90. Wetting drying code changes restricted to domzgr.F90, domvvl.F90 nemogcm.F90 sshwzv.F90, dynspg_ts.F90, wetdry.F90 and dynhpg.F90. Code passes full SETTE tests with ln_wd=.false.. Still awaiting test case for checking with ln_wd=.false.

  • Property svn:keywords set to Id
File size: 5.6 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   !!            3.2  !  2009-03  (M. Leclair, G. Madec, R. Benshila) test on both before & after
10   !!----------------------------------------------------------------------
11
12   !!----------------------------------------------------------------------
13   !!   zdf_evd       : increase the momentum and tracer Kz at the location of
14   !!                   statically unstable portion of the water column (ln_zdfevd=T)
15   !!----------------------------------------------------------------------
16   USE oce             ! ocean dynamics and tracers variables
17   USE dom_oce         ! ocean space and time domain variables
18   USE zdf_oce         ! ocean vertical physics variables
19   !
20   USE in_out_manager  ! I/O manager
21   USE iom             ! for iom_put
22   USE lbclnk          ! ocean lateral boundary conditions (or mpp link)
23   USE wrk_nemo        ! work arrays
24   USE timing          ! Timing
25
26   IMPLICIT NONE
27   PRIVATE
28
29   PUBLIC   zdf_evd    ! called by step.F90
30
31   !! * Substitutions
32#  include "domzgr_substitute.h90"
33   !!----------------------------------------------------------------------
34   !! NEMO/OPA 4.0 , NEMO Consortium (2011)
35   !! $Id$
36   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
37   !!----------------------------------------------------------------------
38CONTAINS
39
40   SUBROUTINE zdf_evd( kt )
41      !!----------------------------------------------------------------------
42      !!                  ***  ROUTINE zdf_evd  ***
43      !!                   
44      !! ** Purpose :   Local increased the vertical eddy viscosity and diffu-
45      !!      sivity coefficients when a static instability is encountered.
46      !!
47      !! ** Method  :   avt, avm, and the 4 neighbouring avmu, avmv coefficients
48      !!      are set to avevd (namelist parameter) if the water column is
49      !!      statically unstable (i.e. if rn2 < -1.e-12 )
50      !!
51      !! ** Action  :   avt, avm, avmu, avmv updted in static instability cases
52      !!
53      !! References :   Lazar, A., these de l'universite Paris VI, France, 1997
54      !!----------------------------------------------------------------------
55      INTEGER, INTENT( in ) ::   kt   ! ocean time-step indexocean time step
56      !
57      INTEGER ::   ji, jj, jk   ! dummy loop indices
58      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zavt_evd, zavm_evd
59      !!----------------------------------------------------------------------
60      !
61      IF( nn_timing == 1 )  CALL timing_start('zdf_evd')
62      !
63      IF( kt == nit000 ) THEN
64         IF(lwp) WRITE(numout,*)
65         IF(lwp) WRITE(numout,*) 'zdf_evd : Enhanced Vertical Diffusion (evd)'
66         IF(lwp) WRITE(numout,*) '~~~~~~~ '
67         IF(lwp) WRITE(numout,*)
68      ENDIF
69      !
70      CALL wrk_alloc( jpi,jpj,jpk,   zavt_evd, zavm_evd ) 
71      !
72      zavt_evd(:,:,:) = avt(:,:,:)           ! set avt prior to evd application
73      !
74      SELECT CASE ( nn_evdm )
75      !
76      CASE ( 1 )           ! enhance vertical eddy viscosity and diffusivity (if rn2<-1.e-12)
77         !
78         zavm_evd(:,:,:) = avm(:,:,:)           ! set avm prior to evd application
79         !
80         DO jk = 1, jpkm1 
81            DO jj = 2, jpj             ! no vector opt.
82               DO ji = 2, jpi
83                  IF(  MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) THEN
84                     avt (ji  ,jj  ,jk) = rn_avevd * tmask(ji  ,jj  ,jk)
85                     avm (ji  ,jj  ,jk) = rn_avevd * tmask(ji  ,jj  ,jk)
86                     avmu(ji  ,jj  ,jk) = rn_avevd * umask(ji  ,jj  ,jk)
87                     avmu(ji-1,jj  ,jk) = rn_avevd * umask(ji-1,jj  ,jk)
88                     avmv(ji  ,jj  ,jk) = rn_avevd * vmask(ji  ,jj  ,jk)
89                     avmv(ji  ,jj-1,jk) = rn_avevd * vmask(ji  ,jj-1,jk)
90                  ENDIF
91               END DO
92            END DO
93         END DO
94         CALL lbc_lnk( avt , 'W', 1. )   ;   CALL lbc_lnk( avm , 'W', 1. )   ! Lateral boundary conditions
95         CALL lbc_lnk( avmu, 'U', 1. )   ;   CALL lbc_lnk( avmv, 'V', 1. )
96         !
97         zavm_evd(:,:,:) = avm(:,:,:) - zavm_evd(:,:,:)   ! change in avm due to evd
98         CALL iom_put( "avm_evd", zavm_evd )              ! output this change
99         !
100      CASE DEFAULT         ! enhance vertical eddy diffusivity only (if rn2<-1.e-12)
101         DO jk = 1, jpkm1
102!!!         WHERE( rn2(:,:,jk) <= -1.e-12 ) avt(:,:,jk) = tmask(:,:,jk) * avevd   ! agissant sur T SEUL!
103            DO jj = 1, jpj             ! loop over the whole domain (no lbc_lnk call)
104               DO ji = 1, jpi
105                  IF(  MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 )   &
106                     avt(ji,jj,jk) = rn_avevd * tmask(ji,jj,jk)
107               END DO
108            END DO
109         END DO
110         !
111      END SELECT
112
113      zavt_evd(:,:,:) = avt(:,:,:) - zavt_evd(:,:,:)   ! change in avt due to evd
114      CALL iom_put( "avt_evd", zavt_evd )              ! output this change
115      !
116      CALL wrk_dealloc( jpi,jpj,jpk,   zavt_evd, zavm_evd ) 
117      !
118      IF( nn_timing == 1 )  CALL timing_stop('zdf_evd')
119      !
120   END SUBROUTINE zdf_evd
121
122   !!======================================================================
123END MODULE zdfevd
Note: See TracBrowser for help on using the repository browser.