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 NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/ZDF – NEMO

source: NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/ZDF/zdfevd.F90 @ 10946

Last change on this file since 10946 was 10946, checked in by acc, 5 years ago

2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps : Convert STO, TRD and USR modules and all knock on effects of these conversions. Note change to USR module may have implications for the TEST CASES (not tested yet). Standard SETTE tested only

  • Property svn:keywords set to Id
File size: 5.7 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/OCE 4.0 , NEMO Consortium (2018)
35   !! $Id$
36   !! Software governed by the CeCILL license (see ./LICENSE)
37   !!----------------------------------------------------------------------
38CONTAINS
39
40   SUBROUTINE zdf_evd( kt, Kmm, Krhs, p_avm, p_avt )
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      INTEGER                    , INTENT(in   ) ::   Kmm, Krhs      ! time level indices
59      REAL(wp), DIMENSION(:,:,:) , INTENT(inout) ::   p_avm, p_avt   !  momentum and tracer Kz (w-points)
60      !
61      INTEGER ::   ji, jj, jk   ! dummy loop indices
62      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zavt_evd, zavm_evd
63      !!----------------------------------------------------------------------
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(:,:,:) = p_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(:,:,:) = p_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!            p_avt(2:jpi,2:jpj,2:jpkm1) = rn_evd * wmask(2:jpi,2:jpj,2:jpkm1)
84!            p_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                     p_avt(ji,jj,jk) = rn_evd * wmask(ji,jj,jk)
92                     p_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(:,:,:) = p_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!            p_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                     p_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(:,:,:) = p_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, Kmm, Krhs, 'TRA', jp_tem, jptra_evd, zavt_evd )
121      !
122   END SUBROUTINE zdf_evd
123
124   !!======================================================================
125END MODULE zdfevd
Note: See TracBrowser for help on using the repository browser.