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 @ 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: 7.1 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      ! ???
13   USE ldfdyn_oce      ! ???
14   USE zdf_oce         ! TKE vertical mixing         
15   USE zdftke          ! TKE vertical mixing         
16   USE zdfddm          ! double diffusion mixing     
17   USE zdfevd          ! enhanced vertical diffusion 
18   USE zdfric          ! Richardson vertical mixing   
19   USE tranpc          ! convection: non penetrative adjustment
20   USE ldfslp          ! ???
21
22   USE in_out_manager  ! I/O manager
23
24   IMPLICIT NONE
25   PRIVATE
26
27   !! *  Routine accessibility
28   PUBLIC zdf_init          ! routine called by opa.F90
29   !!----------------------------------------------------------------------
30   !!   OPA 9.0 , LOCEAN-IPSL (2005)
31   !! $Header$
32   !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt
33   !!----------------------------------------------------------------------
34   
35CONTAINS
36
37   SUBROUTINE zdf_init
38      !!----------------------------------------------------------------------
39      !!                  ***  ROUTINE zdf_init  ***
40      !!
41      !! ** Purpose :   initializations of the vertical ocean physics
42      !!
43      !! ** Method  :   Read namelist namzdf, control cpp keys
44      !!
45      !! History :
46      !!        !  97-06  (G. Madec)  Original code from inimix
47      !!   8.5  !  02-08  (G. Madec)  F90 : free form
48      !!----------------------------------------------------------------------
49      !! * Local declarations
50      INTEGER ::   ioptio       ! temporary scalar
51      LOGICAL ::           & !!! namzdf: vertical diffusion
52         ln_zdfexp = .FALSE.   ! explicit vertical diffusion scheme flag
53
54      !! * Namelist
55      NAMELIST/namzdf/ ln_zdfevd, ln_zdfnpc,   &
56         &             avm0, avt0, avevd, nevdm, ln_zdfexp, n_zdfexp
57      !!----------------------------------------------------------------------
58      !!  OPA 9.0, LODYC-IPSL (2003)
59      !!----------------------------------------------------------------------
60
61      ! Read namzdf namelist : vertical mixing parameters
62      ! --------------------
63      REWIND( numnam )
64      READ  ( numnam, namzdf )
65
66      ! Parameter print
67      ! ---------------
68      IF(lwp) THEN
69         WRITE(numout,*)
70         WRITE(numout,*) 'zdf_init: vertical physics'
71         WRITE(numout,*) '~~~~~~~~'
72         WRITE(numout,*) '          Namelist namzdf : set vertical mixing mixing parameters'
73         WRITE(numout,*) '             enhanced vertical diffusion      ln_zdfevd = ', ln_zdfevd
74         WRITE(numout,*) '             non-penetrative convection       ln_zdfnpc = ', ln_zdfnpc
75         WRITE(numout,*) '             vertical eddy viscosity             avm0   = ', avm0
76         WRITE(numout,*) '             vertical eddy diffusivity           avt0   = ', avt0
77         WRITE(numout,*) '             vertical coefficient for evd        avevd  = ', avevd
78         WRITE(numout,*) '                applied on momentum (=1/0)       nevdm  = ', nevdm
79         WRITE(numout,*) '             time splitting / backward scheme ln_zdfexp = ', ln_zdfexp
80         WRITE(numout,*) '             number of time step               n_zdfexp = ', n_zdfexp
81      ENDIF
82
83      ! Parameter & key controls
84      ! ------------------------
85      ! ... vertical mixing
86      ! time stepping scheme (N.B. TKE scheme => force the use of implicit scheme)
87      IF( ln_zdfexp .AND. .NOT.lk_zdftke ) THEN 
88         l_trazdf_exp = .TRUE.           ! use explicit scheme
89         l_trazdf_imp = .FALSE.
90         l_dynzdf_exp = .TRUE.           ! use explicit scheme
91         l_dynzdf_imp = .FALSE.
92      ELSE
93         l_trazdf_exp = .FALSE.          ! use implicit scheme
94         l_trazdf_imp = .TRUE. 
95         l_dynzdf_exp = .FALSE.          ! use implicit scheme
96         l_dynzdf_imp = .TRUE. 
97      ENDIF
98      IF( l_trazdf_iso .OR. l_trazdf_iso_vo ) THEN 
99         l_trazdf_exp = .FALSE.          ! iso-neutral diffusion :
100         l_trazdf_imp = .FALSE.          ! implicit scheme included in iso-neutral routine
101      ENDIF
102      IF( l_dynldf_iso ) THEN 
103         l_dynzdf_exp = .FALSE.          ! iso-neutral diffusion :
104         l_dynzdf_imp = .FALSE.          ! implicit scheme included in iso-neutral routine
105      ENDIF
106#if defined key_autotasking
107      IF( l_dynzdf_imp ) THEN
108         l_dynzdf_imp     = .FALSE.
109         l_dynzdf_imp_tsk = .TRUE.
110      ENDIF
111#else
112      l_dynzdf_imp_tsk = .FALSE.
113#endif
114      IF( lk_esopa  ) THEN
115         l_trazdf_exp = .TRUE.           ! esopa: use all options
116         l_trazdf_imp = .TRUE.
117         l_dynzdf_exp     = .TRUE.           ! esopa: use all options
118         l_dynzdf_imp     = .TRUE.
119         l_dynzdf_imp_tsk = .TRUE.
120      ENDIF
121
122      IF(lwp) WRITE(numout,*)
123      IF(lwp) WRITE(numout,*) '          vertical mixing option :'
124      ioptio = 0
125      IF( lk_zdfcst ) THEN
126         IF(lwp) WRITE(numout,*) '             constant eddy diffusion coef.'
127         ioptio = ioptio+1
128      ENDIF
129      IF( lk_zdfric ) THEN
130         IF(lwp) WRITE(numout,*) '             Richardson dependent eddy coef.'
131         ioptio = ioptio+1
132      ENDIF
133      IF( lk_zdftke ) THEN
134         IF(lwp) WRITE(numout,*) '             TKE dependent eddy coef.'
135         ioptio = ioptio+1
136      ENDIF
137      IF( ioptio == 0 .OR. ioptio > 1 .AND. .NOT. lk_esopa ) THEN
138          IF(lwp) WRITE(numout,cform_err)
139          IF(lwp) WRITE(numout,*) ' one and only one vertical diffusion option has to be defined '
140          nstop = nstop + 1
141      ENDIF
142
143      ! ... Convection
144      IF(lwp) WRITE(numout,*)
145      IF(lwp) WRITE(numout,*) '          convection :'
146      ioptio = 0
147      IF( ln_zdfnpc ) THEN
148         IF(lwp) WRITE(numout,*) '             use non penetrative convective scheme'
149         ioptio = ioptio+1
150      ENDIF
151      IF( ln_zdfevd ) THEN
152         IF(lwp) WRITE(numout,*) '             use enhanced vertical dif. scheme'
153         ioptio = ioptio+1
154      ENDIF
155      IF( lk_zdftke ) THEN
156         IF(lwp) WRITE(numout,*) '             use the 1.5 turbulent closure'
157      ENDIF
158      IF ( ioptio > 1 .AND. .NOT. lk_esopa ) THEN
159          IF(lwp) WRITE(numout,cform_err)
160          IF(lwp) WRITE(numout,*) ' chose between key_convnpc'
161          IF(lwp) WRITE(numout,*) '           and key_convevd'
162          nstop = nstop + 1
163      ENDIF
164      IF( ioptio == 0 .AND. .NOT. lk_zdftke ) THEN
165         IF(lwp) WRITE(numout,cform_err)
166         IF(lwp) WRITE(numout,*) ' except for TKE scheme, a convection scheme is'
167         IF(lwp) WRITE(numout,*) ' required: convevd or convnpc keys'
168         nstop = nstop + 1
169      ENDIF
170
171   END SUBROUTINE zdf_init
172
173   !!======================================================================
174END MODULE zdfini
Note: See TracBrowser for help on using the repository browser.