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 trunk/NEMO/OPA_SRC/ZDF – NEMO

source: trunk/NEMO/OPA_SRC/ZDF/zdfevd.F90 @ 247

Last change on this file since 247 was 247, checked in by opalod, 19 years ago

CL : Add CVS Header and CeCILL licence information

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.2 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
8   !!----------------------------------------------------------------------
9   !!   zdf_evd      : update momentum and tracer Kz at the location of
10   !!                  statically unstable portion of the water column
11   !!                  (called if ln_zdfevd=T)
12   !!----------------------------------------------------------------------
13   !! * Modules used
14   USE oce             ! ocean dynamics and tracers variables
15   USE dom_oce         ! ocean space and time domain variables
16   USE zdf_oce         ! ocean vertical physics variables
17   USE in_out_manager  ! I/O manager
18   USE lbclnk          ! ocean lateral boundary conditions (or mpp link)
19
20   IMPLICIT NONE
21   PRIVATE
22
23   !! * Routine accessibility
24   PUBLIC zdf_evd      ! called by step.F90
25
26   !!----------------------------------------------------------------------
27   !!   OPA 9.0 , LOCEAN-IPSL (2005)
28   !! $Header$
29   !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt
30   !!----------------------------------------------------------------------
31
32CONTAINS
33
34   SUBROUTINE zdf_evd( kt )
35      !!----------------------------------------------------------------------
36      !!                  ***  ROUTINE zdf_evd  ***
37      !!                   
38      !! ** Purpose :   Local increased the vertical eddy viscosity and diffu-
39      !!      sivity coefficients when a static instability is encountered.
40      !!
41      !! ** Method  :   avt, and the 4 neighbouring avmu, avmv coefficients
42      !!      are set to avevd (namelist parameter) if the water column is
43      !!      statically unstable (i.e. if rn2 < -1.e-12 )
44      !!
45      !! ** Action  :   Update avt, avmu, avmv in statically instable cases
46      !!
47      !! References :
48      !!      Lazar, A., these de l'universite Paris VI, France, 1997
49      !! History :
50      !!   7.0  !  97-06  (G. Madec, A. Lazar)  Original code
51      !!   8.5  !  02-06  (G. Madec)  F90: Free form and module
52      !!----------------------------------------------------------------------
53      !! * Arguments
54      INTEGER, INTENT( in ) ::   kt         ! ocean time-step indexocean time step
55
56      !! * Local declarations
57      INTEGER ::   ji, jj, jk               ! dummy loop indices
58      !!----------------------------------------------------------------------
59
60      IF( kt == nit000 ) THEN
61         IF(lwp) WRITE(numout,*)
62         IF(lwp) WRITE(numout,*) 'zdf_evd : Enhanced Vertical Diffusion (evd)'
63         IF(lwp) WRITE(numout,*) '~~~~~~~ '
64         IF(lwp) WRITE(numout,*)
65      ENDIF
66
67      SELECT CASE ( nevdm )
68 
69      CASE ( 1 )           ! enhance vertical eddy viscosity and diffusivity (if rn2<-1.e-12)
70         !                                                ! ===============
71         DO jk = 1, jpkm1                                 ! Horizontal slab
72            !                                             ! ===============
73#   if defined key_vectopt_loop   &&   ! defined key_autotasking
74!!!         WHERE( rn2(:,:,jk) <= -1.e-12 ) avt(:,:,jk) = tmask(:,:,jk) * avevd   ! agissant sur T SEUL!
75            jj = 1                     ! big loop forced
76            DO ji = jpi+2, jpij   
77               IF( rn2(ji,jj,jk) <= -1.e-12 ) THEN
78                  avt (ji  ,jj  ,jk) = avevd * tmask(ji  ,jj  ,jk)
79                  avmu(ji  ,jj  ,jk) = avevd * umask(ji  ,jj  ,jk)
80                  avmu(ji-1,jj  ,jk) = avevd * umask(ji-1,jj  ,jk)
81                  avmv(ji  ,jj  ,jk) = avevd * vmask(ji  ,jj  ,jk)
82                  avmv(ji  ,jj-1,jk) = avevd * vmask(ji  ,jj-1,jk)
83               ENDIF
84            END DO
85#   else
86            DO jj = 2, jpj             ! no vector opt.
87               DO ji = 2, jpi
88                  IF( rn2(ji,jj,jk) <= -1.e-12 ) THEN
89                     avt (ji  ,jj  ,jk) = avevd * tmask(ji  ,jj  ,jk)
90                     avmu(ji  ,jj  ,jk) = avevd * umask(ji  ,jj  ,jk)
91                     avmu(ji-1,jj  ,jk) = avevd * umask(ji-1,jj  ,jk)
92                     avmv(ji  ,jj  ,jk) = avevd * vmask(ji  ,jj  ,jk)
93                     avmv(ji  ,jj-1,jk) = avevd * vmask(ji  ,jj-1,jk)
94                  ENDIF
95               END DO
96            END DO
97#   endif
98            !                                             ! ===============
99         END DO                                           !   End of slab
100         !                                                ! ===============
101
102         ! Lateral boundary conditions on ( avt, avmu, avmv )   (unchanged sign)
103         ! -------------------------------===================
104         CALL lbc_lnk( avt , 'W', 1. )
105         CALL lbc_lnk( avmu, 'U', 1. )
106         CALL lbc_lnk( avmv, 'V', 1. )
107
108      CASE DEFAULT         ! enhance vertical eddy diffusivity only (if rn2<-1.e-12)
109         !                                                ! ===============
110         DO jk = 1, jpkm1                                 ! Horizontal slab
111            !                                             ! ===============
112!!!         WHERE( rn2(:,:,jk) <= -1.e-12 ) avt(:,:,jk) = tmask(:,:,jk) * avevd   ! agissant sur T SEUL!
113#   if defined key_vectopt_loop   &&   ! defined key_autotasking
114            jj = 1                     ! big loop forced
115            DO ji = 1, jpij   
116               IF( rn2(ji,jj,jk) <= -1.e-12 )   avt(ji,jj,jk) = avevd * tmask(ji,jj,jk)
117            END DO
118#   else
119            DO jj = 1, jpj             ! loop over the whole domain (no lbc_lnk call)
120               DO ji = 1, jpi
121                  IF( rn2(ji,jj,jk) <= -1.e-12 )   avt(ji,jj,jk) = avevd * tmask(ji,jj,jk)
122               END DO
123            END DO
124#   endif
125            !                                             ! ===============
126         END DO                                           !   End of slab
127         !                                                ! ===============
128      END SELECT
129
130   END SUBROUTINE zdf_evd
131
132   !!======================================================================
133END MODULE zdfevd
Note: See TracBrowser for help on using the repository browser.