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

source: branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfevd.F90 @ 11101

Last change on this file since 11101 was 11101, checked in by frrh, 5 years ago

Merge changes from Met Office GMED ticket 450 to reduce unnecessary
text output from NEMO.
This output, which is typically not switchable, is rarely of interest
in normal (non-debugging) runs and simply redunantley consumes extra
file space.
Further, the presence of this text output has been shown to
significantly degrade performance of models which are run during
Met Office HPC RAID (disk) checks.
The new code introduces switches which are configurable via the
changes made in the associated Met Office MOCI ticket 399.

File size: 6.1 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 trd_oce         ! trends: ocean variables
22   USE trdtra          ! trends manager: tracers
23   USE in_out_manager  ! I/O manager
24   USE iom             ! for iom_put
25   USE lbclnk          ! ocean lateral boundary conditions (or mpp link)
26   USE timing          ! Timing
27
28   IMPLICIT NONE
29   PRIVATE
30
31   PUBLIC   zdf_evd    ! called by step.F90
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   !!----------------------------------------------------------------------
40CONTAINS
41
42   SUBROUTINE zdf_evd( kt )
43      !!----------------------------------------------------------------------
44      !!                  ***  ROUTINE zdf_evd  ***
45      !!                   
46      !! ** Purpose :   Local increased the vertical eddy viscosity and diffu-
47      !!      sivity coefficients when a static instability is encountered.
48      !!
49      !! ** Method  :   avt, avm, and the 4 neighbouring avmu, avmv coefficients
50      !!      are set to avevd (namelist parameter) if the water column is
51      !!      statically unstable (i.e. if rn2 < -1.e-12 )
52      !!
53      !! ** Action  :   avt, avm, avmu, avmv updted in static instability cases
54      !!
55      !! References :   Lazar, A., these de l'universite Paris VI, France, 1997
56      !!----------------------------------------------------------------------
57      USE oce,   zavt_evd => ua , zavm_evd => va  ! (ua,va) used ua workspace
58      !
59      INTEGER, INTENT( in ) ::   kt   ! ocean time-step indexocean time step
60      !
61      INTEGER ::   ji, jj, jk   ! dummy loop indices
62      !!----------------------------------------------------------------------
63      !
64      IF( nn_timing == 1 )  CALL timing_start('zdf_evd')
65      !
66      IF( kt == nit000 ) THEN
67         IF(lwp) WRITE(numout,*)
68         IF(lwp) WRITE(numout,*) 'zdf_evd : Enhanced Vertical Diffusion (evd)'
69         IF(lwp) WRITE(numout,*) '~~~~~~~ '
70         IF(lwp) WRITE(numout,*)
71         IF(lwp .AND. lflush) CALL flush(numout)
72      ENDIF
73
74      zavt_evd(:,:,:) = avt(:,:,:)           ! set avt prior to evd application
75
76      SELECT CASE ( nn_evdm )
77      !
78      CASE ( 1 )           ! enhance vertical eddy viscosity and diffusivity (if rn2<-1.e-12)
79         !
80         zavm_evd(:,:,:) = avm(:,:,:)           ! set avm prior to evd application
81         !
82         DO jk = 1, jpkm1 
83            DO jj = 2, jpj             ! no vector opt.
84               DO ji = 2, jpi
85#if defined key_zdfkpp
86                  ! no evd mixing in the boundary layer with KPP
87                  IF(  MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12  .AND.  fsdepw(ji,jj,jk) > hkpp(ji,jj)  ) THEN
88#else
89                  IF(  MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) THEN
90#endif
91                     avt (ji  ,jj  ,jk) = rn_avevd * tmask(ji  ,jj  ,jk)
92                     avm (ji  ,jj  ,jk) = rn_avevd * tmask(ji  ,jj  ,jk)
93                     avmu(ji  ,jj  ,jk) = rn_avevd * umask(ji  ,jj  ,jk)
94                     avmu(ji-1,jj  ,jk) = rn_avevd * umask(ji-1,jj  ,jk)
95                     avmv(ji  ,jj  ,jk) = rn_avevd * vmask(ji  ,jj  ,jk)
96                     avmv(ji  ,jj-1,jk) = rn_avevd * vmask(ji  ,jj-1,jk)
97                  ENDIF
98               END DO
99            END DO
100         END DO
101         CALL lbc_lnk( avt , 'W', 1. )   ;   CALL lbc_lnk( avm , 'W', 1. )   ! Lateral boundary conditions
102         CALL lbc_lnk( avmu, 'U', 1. )   ;   CALL lbc_lnk( avmv, 'V', 1. )
103         !
104         zavm_evd(:,:,:) = avm(:,:,:) - zavm_evd(:,:,:)   ! change in avm due to evd
105         CALL iom_put( "avm_evd", zavm_evd )              ! output this change
106         !
107      CASE DEFAULT         ! enhance vertical eddy diffusivity only (if rn2<-1.e-12)
108         DO jk = 1, jpkm1
109!!!         WHERE( rn2(:,:,jk) <= -1.e-12 ) avt(:,:,jk) = tmask(:,:,jk) * avevd   ! agissant sur T SEUL!
110            DO jj = 1, jpj             ! loop over the whole domain (no lbc_lnk call)
111               DO ji = 1, jpi
112#if defined key_zdfkpp
113                  ! no evd mixing in the boundary layer with KPP
114                  IF(  MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12  .AND.  fsdepw(ji,jj,jk) > hkpp(ji,jj)  )   &         
115#else
116                  IF(  MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 )   &
117#endif
118                     avt(ji,jj,jk) = rn_avevd * tmask(ji,jj,jk)
119               END DO
120            END DO
121         END DO
122         !
123      END SELECT
124
125      zavt_evd(:,:,:) = avt(:,:,:) - zavt_evd(:,:,:)   ! change in avt due to evd
126      CALL iom_put( "avt_evd", zavt_evd )              ! output this change
127      IF( l_trdtra ) CALL trd_tra( kt, 'TRA', jp_tem, jptra_evd, zavt_evd )
128      !
129      IF( nn_timing == 1 )  CALL timing_stop('zdf_evd')
130      !
131   END SUBROUTINE zdf_evd
132
133   !!======================================================================
134END MODULE zdfevd
Note: See TracBrowser for help on using the repository browser.