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.
zdfini.F90 in trunk/NEMO/OPA_SRC/ZDF – NEMO

source: trunk/NEMO/OPA_SRC/ZDF/zdfini.F90 @ 1465

Last change on this file since 1465 was 1239, checked in by ctlod, 15 years ago

this version allows to stabilize the computation of En production term, see ticket: #281

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 6.3 KB
Line 
1MODULE zdfini
2   !!======================================================================
3   !!              ***  MODULE  zdfini  ***
4   !! Ocean physics : define vertical mixing variables
5   !!=====================================================================
6
7   !!----------------------------------------------------------------------
8   !!   zdf_init    : initialization, namelist read, and parameters control
9   !!----------------------------------------------------------------------
10   !! * Modules used
11   USE par_oce         ! mesh and scale factors
12   USE ldftra_oce      ! ocean active tracers: lateral physics
13   USE ldfdyn_oce      ! ocean dynamics lateral physics
14   USE zdf_oce         ! TKE vertical mixing         
15   USE lib_mpp         ! distribued memory computing
16   USE zdftke          ! TKE  vertical mixing 
17   USE zdftke2         ! TKE2 vertical mixing
18   USE zdfkpp          ! KPP vertical mixing         
19   USE zdfddm          ! double diffusion mixing     
20   USE zdfevd          ! enhanced vertical diffusion 
21   USE zdfric          ! Richardson vertical mixing   
22   USE tranpc          ! convection: non penetrative adjustment
23   USE ldfslp          ! iso-neutral slopes
24
25   USE in_out_manager  ! I/O manager
26
27   IMPLICIT NONE
28   PRIVATE
29
30   !! *  Routine accessibility
31   PUBLIC zdf_init          ! routine called by opa.F90
32   !!----------------------------------------------------------------------
33   !!   OPA 9.0 , LOCEAN-IPSL (2005)
34   !! $Id$
35   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
36   !!----------------------------------------------------------------------
37   
38CONTAINS
39
40   SUBROUTINE zdf_init
41      !!----------------------------------------------------------------------
42      !!                  ***  ROUTINE zdf_init  ***
43      !!
44      !! ** Purpose :   initializations of the vertical ocean physics
45      !!
46      !! ** Method  :   Read namelist namzdf, control logicals
47      !!
48      !! History :
49      !!        !  97-06  (G. Madec)  Original code from inimix
50      !!   8.5  !  02-08  (G. Madec)  F90 : free form
51      !!   9.0  !  05-06  (C. Ethe) KPP parameterization
52      !!----------------------------------------------------------------------
53      !! * Local declarations
54      INTEGER ::   ioptio       ! temporary scalar
55
56      !! * Namelist
57      NAMELIST/namzdf/ ln_zdfexp, n_zdfexp, ln_zdfevd, ln_zdfnpc,   &
58         &             avm0     , avt0    , avevd    , n_evdm
59      !!----------------------------------------------------------------------
60      !!  OPA 9.0, LODYC-IPSL (2003)
61      !!
62      !!----------------------------------------------------------------------
63
64      ! Read namzdf namelist : vertical mixing parameters
65      ! --------------------
66      REWIND( numnam )
67      READ  ( numnam, namzdf )
68
69      ! Parameter print
70      ! ---------------
71      IF(lwp) THEN
72         WRITE(numout,*)
73         WRITE(numout,*) 'zdf_init: vertical physics'
74         WRITE(numout,*) '~~~~~~~~'
75         WRITE(numout,*) '   Namelist namzdf : set vertical mixing mixing parameters'
76         WRITE(numout,*) '      time splitting / backward scheme    ln_zdfexp = ', ln_zdfexp
77         WRITE(numout,*) '      number of time step                  n_zdfexp = ', n_zdfexp
78         WRITE(numout,*) '      enhanced vertical diffusion         ln_zdfevd = ', ln_zdfevd
79         WRITE(numout,*) '      non-penetrative convection          ln_zdfnpc = ', ln_zdfnpc
80         WRITE(numout,*) '      vertical eddy viscosity             avm0      = ', avm0
81         WRITE(numout,*) '      vertical eddy diffusivity           avt0      = ', avt0
82         WRITE(numout,*) '      vertical coefficient for evd        avevd     = ', avevd
83         WRITE(numout,*) '         applied on momentum (=1/0)       n_evdm    = ', n_evdm
84      ENDIF
85
86      ! Parameter & logicals controls
87      ! -----------------------------
88      ! ... check of vertical mixing scheme on tracers
89      !           ==> will be done in trazdf module
90
91      ! ... check of mixing coefficient
92      IF(lwp) WRITE(numout,*)
93      IF(lwp) WRITE(numout,*) '          vertical mixing option :'
94      ioptio = 0
95      IF( lk_zdfcst ) THEN
96         IF(lwp) WRITE(numout,*) '             constant eddy diffusion coefficients'
97         ioptio = ioptio+1
98      ENDIF
99      IF( lk_zdfric ) THEN
100         IF(lwp) WRITE(numout,*) '             Richardson dependent eddy coefficients'
101         ioptio = ioptio+1
102      ENDIF
103      IF( lk_zdftke ) THEN
104         IF(lwp) WRITE(numout,*) '             TKE dependent eddy coefficients'
105         ioptio = ioptio+1
106      ENDIF
107      IF( lk_zdftke2 ) THEN
108         IF(lwp) WRITE(numout,*) '             TKE2 dependent eddy coefficients'
109         ioptio = ioptio+1
110      ENDIF
111      IF( lk_zdfkpp ) THEN
112         IF(lwp) WRITE(numout,*) '             KPP dependent eddy coefficients'
113         ioptio = ioptio+1
114      ENDIF
115      IF( ioptio == 0 .OR. ioptio > 1 .AND. .NOT. lk_esopa ) &
116         CALL ctl_stop( ' one and only one vertical diffusion option has to be defined ' )
117
118      ! ... Convection
119      IF(lwp) WRITE(numout,*)
120      IF(lwp) WRITE(numout,*) '          convection :'
121      ioptio = 0
122      IF( ln_zdfnpc ) THEN
123         IF(lwp) WRITE(numout,*) '             use non penetrative convective scheme'
124         ioptio = ioptio+1
125      ENDIF
126      IF( ln_zdfevd ) THEN
127         IF(lwp) WRITE(numout,*) '             use enhanced vertical dif. scheme'
128         ioptio = ioptio+1
129      ENDIF
130      IF( lk_zdftke .OR. lk_zdftke2 ) THEN
131         IF(lwp) WRITE(numout,*) '             use the 1.5 turbulent closure'
132      ENDIF
133      IF( lk_zdfkpp ) THEN
134         IF(lwp) WRITE(numout,*) '             use the KPP closure scheme'
135         IF(lk_mpp) THEN
136            IF(lwp) WRITE(numout,cform_err)
137            IF(lwp) WRITE(numout,*) '             The KPP scheme is not ready to run in MPI'
138         ENDIF
139      ENDIF
140      IF ( ioptio > 1 .AND. .NOT. lk_esopa ) &
141           CALL ctl_stop( ' chose between ln_zdfnpc', '           and ln_zdfevd' )
142      IF( ioptio == 0 .AND. .NOT.( lk_zdftke .OR. lk_zdftke2 .OR. lk_zdfkpp ) ) &
143         CALL ctl_stop( ' except for TKE sor KPP physics, a convection scheme is', &
144         &              ' required: ln_zdfevd or ln_zdfnpc logicals' )
145
146   END SUBROUTINE zdf_init
147
148   !!======================================================================
149END MODULE zdfini
Note: See TracBrowser for help on using the repository browser.