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

Last change on this file since 13072 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
RevLine 
[3]1MODULE zdfevd
2   !!======================================================================
3   !!                       ***  MODULE  zdfevd  ***
4   !! Ocean physics: parameterization of convection through an enhancement
5   !!                of vertical eddy mixing coefficient
6   !!======================================================================
[1438]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   !!----------------------------------------------------------------------
[3]12
13   !!----------------------------------------------------------------------
[1438]14   !!   zdf_evd      : increase the momentum and tracer Kz at the location of
15   !!                  statically unstable portion of the water column (ln_zdfevd=T)
[3]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
[255]20   USE zdfkpp          ! KPP vertical mixing
[7061]21   USE trd_oce         ! trends: ocean variables
22   USE trdtra          ! trends manager: tracers
[3]23   USE in_out_manager  ! I/O manager
[1482]24   USE iom             ! for iom_put
[3]25   USE lbclnk          ! ocean lateral boundary conditions (or mpp link)
[3294]26   USE timing          ! Timing
[3]27
28   IMPLICIT NONE
29   PRIVATE
30
[1438]31   PUBLIC   zdf_evd    ! called by step.F90
[3]32
[255]33   !! * Substitutions
34#  include "domzgr_substitute.h90"
[3]35   !!----------------------------------------------------------------------
[2715]36   !! NEMO/OPA 4.0 , NEMO Consortium (2011)
[1438]37   !! $Id$
[2715]38   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
[3]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      !!
[1546]49      !! ** Method  :   avt, avm, and the 4 neighbouring avmu, avmv coefficients
[3]50      !!      are set to avevd (namelist parameter) if the water column is
51      !!      statically unstable (i.e. if rn2 < -1.e-12 )
52      !!
[1546]53      !! ** Action  :   avt, avm, avmu, avmv updted in static instability cases
54      !!
[1438]55      !! References :   Lazar, A., these de l'universite Paris VI, France, 1997
[3]56      !!----------------------------------------------------------------------
[2715]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
[3]62      !!----------------------------------------------------------------------
[3294]63      !
64      IF( nn_timing == 1 )  CALL timing_start('zdf_evd')
65      !
[3]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,*)
[11101]71         IF(lwp .AND. lflush) CALL flush(numout)
[3]72      ENDIF
73
[1681]74      zavt_evd(:,:,:) = avt(:,:,:)           ! set avt prior to evd application
[255]75
[1537]76      SELECT CASE ( nn_evdm )
[2715]77      !
[3]78      CASE ( 1 )           ! enhance vertical eddy viscosity and diffusivity (if rn2<-1.e-12)
[2715]79         !
[1681]80         zavm_evd(:,:,:) = avm(:,:,:)           ! set avm prior to evd application
81         !
[1546]82         DO jk = 1, jpkm1 
[3]83            DO jj = 2, jpj             ! no vector opt.
84               DO ji = 2, jpi
[1438]85#if defined key_zdfkpp
[1546]86                  ! no evd mixing in the boundary layer with KPP
[2715]87                  IF(  MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12  .AND.  fsdepw(ji,jj,jk) > hkpp(ji,jj)  ) THEN
[1438]88#else
[2715]89                  IF(  MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) THEN
[1438]90#endif
[1537]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)
[3]97                  ENDIF
98               END DO
99            END DO
[1546]100         END DO
[2715]101         CALL lbc_lnk( avt , 'W', 1. )   ;   CALL lbc_lnk( avm , 'W', 1. )   ! Lateral boundary conditions
[1546]102         CALL lbc_lnk( avmu, 'U', 1. )   ;   CALL lbc_lnk( avmv, 'V', 1. )
103         !
[1681]104         zavm_evd(:,:,:) = avm(:,:,:) - zavm_evd(:,:,:)   ! change in avm due to evd
105         CALL iom_put( "avm_evd", zavm_evd )              ! output this change
106         !
[3]107      CASE DEFAULT         ! enhance vertical eddy diffusivity only (if rn2<-1.e-12)
[1546]108         DO jk = 1, jpkm1
109!!!         WHERE( rn2(:,:,jk) <= -1.e-12 ) avt(:,:,jk) = tmask(:,:,jk) * avevd   ! agissant sur T SEUL!
[3]110            DO jj = 1, jpj             ! loop over the whole domain (no lbc_lnk call)
111               DO ji = 1, jpi
[1438]112#if defined key_zdfkpp
[1546]113                  ! no evd mixing in the boundary layer with KPP
[2715]114                  IF(  MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12  .AND.  fsdepw(ji,jj,jk) > hkpp(ji,jj)  )   &         
[1438]115#else
[2715]116                  IF(  MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 )   &
[1438]117#endif
[1537]118                     avt(ji,jj,jk) = rn_avevd * tmask(ji,jj,jk)
[3]119               END DO
120            END DO
[1546]121         END DO
122         !
[3]123      END SELECT
124
[1681]125      zavt_evd(:,:,:) = avt(:,:,:) - zavt_evd(:,:,:)   ! change in avt due to evd
126      CALL iom_put( "avt_evd", zavt_evd )              ! output this change
[7061]127      IF( l_trdtra ) CALL trd_tra( kt, 'TRA', jp_tem, jptra_evd, zavt_evd )
[1546]128      !
[3294]129      IF( nn_timing == 1 )  CALL timing_stop('zdf_evd')
130      !
[3]131   END SUBROUTINE zdf_evd
132
133   !!======================================================================
134END MODULE zdfevd
Note: See TracBrowser for help on using the repository browser.