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 @ 3

Last change on this file since 3 was 3, checked in by opalod, 20 years ago

Initial revision

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