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/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/ZDF – NEMO

source: branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfevd.F90 @ 7990

Last change on this file since 7990 was 7990, checked in by gm, 7 years ago

#1880 (HPC-09): OPA remove avmu, avmv from zdf modules + move CALL tke(gls)_rst & gls_rst in zdftke(gls) + rename zdftmx and zdfqiao

  • 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   !!            4.0  !  2017-04  (G. Madec)  evd applied on avm (at t-point)
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 trd_oce         ! trends: ocean variables
21   USE trdtra          ! trends manager: tracers
22   !
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   !!----------------------------------------------------------------------
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  :   tracer (and momentum if nn_evdm=1) vertical mixing
48      !!              coefficients are set to rn_evd (namelist parameter)
49      !!              if the water column is statically unstable.
50      !!                The test of static instability is performed using
51      !!              Brunt-Vaisala frequency (rn2 < -1.e-12) of to successive
52      !!              time-step (Leap-Frog environnement): before and
53      !!              now time-step.
54      !!
55      !! ** Action  :   avt, avm   enhanced where static instability occurs
56      !!----------------------------------------------------------------------
57      INTEGER, INTENT(in) ::   kt   ! ocean time-step indexocean time step
58      !
59      INTEGER ::   ji, jj, jk   ! dummy loop indices
60      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zavt_evd, zavm_evd
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      ENDIF
71      !
72      !
73      zavt_evd(:,:,:) = avt(:,:,:)           ! set avt prior to evd application
74      !
75      SELECT CASE ( nn_evdm )
76      !
77      CASE ( 1 )           !==  enhance tracer & momentum Kz  ==!   (if rn2<-1.e-12)
78         !
79         zavm_evd(:,:,:) = avm(:,:,:)           ! set avm prior to evd application
80         !
81!! change last digits results
82!         WHERE( MAX( rn2(2:jpi,2:jpj,2:jpkm1), rn2b(2:jpi,2:jpj,2:jpkm1) )  <= -1.e-12 ) THEN
83!            avt(2:jpi,2:jpj,2:jpkm1) = rn_evd * wmask(2:jpi,2:jpj,2:jpkm1)
84!            avm(2:jpi,2:jpj,2:jpkm1) = rn_evd * wmask(2:jpi,2:jpj,2:jpkm1)
85!         END WHERE
86         !
87         DO jk = 1, jpkm1 
88            DO jj = 2, jpjm1
89               DO ji = 2, jpim1
90                  IF(  MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) THEN
91                     avt(ji,jj,jk) = rn_evd * wmask(ji,jj,jk)
92                     avm(ji,jj,jk) = rn_evd * wmask(ji,jj,jk)
93                  ENDIF
94               END DO
95            END DO
96         END DO 
97         !
98         zavm_evd(:,:,:) = avm(:,:,:) - zavm_evd(:,:,:)   ! change in avm due to evd
99         CALL iom_put( "avm_evd", zavm_evd )              ! output this change
100         !
101      CASE DEFAULT         !==  enhance tracer Kz  ==!   (if rn2<-1.e-12)
102!! change last digits results
103!         WHERE( MAX( rn2(2:jpi,2:jpj,2:jpkm1), rn2b(2:jpi,2:jpj,2:jpkm1) )  <= -1.e-12 )
104!            avt(2:jpi,2:jpj,2:jpkm1) = rn_evd * wmask(2:jpi,2:jpj,2:jpkm1)
105!         END WHERE
106
107         DO jk = 1, jpkm1
108            DO jj = 2, jpjm1
109               DO ji = 2, jpim1
110                  IF(  MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 )   &
111                     avt(ji,jj,jk) = rn_evd * wmask(ji,jj,jk)
112               END DO
113            END DO
114         END DO
115         !
116      END SELECT 
117      !
118      zavt_evd(:,:,:) = avt(:,:,:) - zavt_evd(:,:,:)   ! change in avt due to evd
119      CALL iom_put( "avt_evd", zavt_evd )              ! output this change
120      IF( l_trdtra ) CALL trd_tra( kt, 'TRA', jp_tem, jptra_evd, zavt_evd )
121      !
122      IF( nn_timing == 1 )  CALL timing_stop('zdf_evd')
123      !
124   END SUBROUTINE zdf_evd
125
126   !!======================================================================
127END MODULE zdfevd
Note: See TracBrowser for help on using the repository browser.