user/gm/Misc.Items: zdf_oce+style.F90

File zdf_oce+style.F90, 7.9 KB (added by gm, 11 years ago)

merge zdfini.F90 with zdf_oce.F90 ==⇒ with style improvement

Line 
1MODULE zdf_oce
2   !!======================================================================
3   !!              ***  MODULE  zdf_oce  ***
4   !! Ocean physics : define vertical mixing variables
5   !!=====================================================================
6   !! History :  1.0  ! 2002-08  (G. Madec)  original code
7   !!             -   ! 2005-06  (C. Ethe)  KPP parameterization
8   !!            3.2  ! 2009-06  (G. Madec) Style + tidal mixing + mege with zdfini.F90
9   !!----------------------------------------------------------------------
10
11   !!----------------------------------------------------------------------
12   !!   zdf_init    : initialization, namelist read, and parameters control
13   !!----------------------------------------------------------------------
14   USE par_oce         ! mesh and scale factors
15   USE zdf_oce         ! TKE vertical mixing         
16   USE zdftke          ! TKE  vertical mixing 
17   USE zdftke2         ! TKE2 vertical mixing
18   USE zdfkpp          ! KPP vertical mixing         
19   USE zdfevd          ! enhanced vertical diffusion 
20   USE zdfric          ! Richardson vertical mixing   
21   USE tranpc          ! convection: non penetrative adjustment
22   USE lib_mpp         ! distribued memory computing
23   USE in_out_manager  ! I/O manager
24
25   IMPLICIT NONE
26   PRIVATE
27
28   PUBLIC   zdf_init   ! routine called by opa.F90
29
30   IMPLICIT NONE
31   PRIVATE
32
33#if defined key_zdfcst   ||   defined key_esopa
34   LOGICAL, PARAMETER, PUBLIC ::   lk_zdfcst = .TRUE.    !: constant vertical mixing flag
35#else
36   LOGICAL, PARAMETER, PUBLIC ::   lk_zdfcst = .FALSE.   !: constant vertical mixing flag
37#endif
38
39   !                                           !!* namelist namzdf: vertical diffusion *
40   LOGICAL , PUBLIC ::   ln_zdfexp = .FALSE.    !: explicit vertical diffusion scheme flag
41   LOGICAL , PUBLIC ::   ln_zdfevd = .TRUE.     !: convection: enhanced vertical diffusion flag
42   LOGICAL , PUBLIC ::   ln_zdfnpc = .FALSE.    !: convection: non-penetrative convection flag
43   INTEGER , PUBLIC ::   n_zdfexp  = 3          !: number of sub-time step (explicit time stepping)
44   INTEGER , PUBLIC ::   n_evdm    = 1          !: =0/1 flag to apply enhanced vertical diffusiob on momemtum or not
45   REAL(wp), PUBLIC ::   avm0      = 1.e-4_wp   !: vertical eddy viscosity                       [m2/s]
46   REAL(wp), PUBLIC ::   avt0      = 1.e-5_wp   !: vertical eddy diffusivity                     [m2/s]
47   REAL(wp), PUBLIC ::   avevd     = 1._wp      !: vertical eddy coeff. for enhanced vert. diff. [m2/s]
48
49   REAL(wp), PUBLIC, DIMENSION(jpk)         ::   avmb, avtb   !: background profile of avm and avt
50   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   avmu, avmv   !: vertical viscosity coeff. at uw-, vw-points
51   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   avt          !: vertical diffusivity coeff. at w-point
52   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   avt_evd      !: convection: enhanced vertical diffusivity coeff. at w-point
53   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   avmu_evd     !: convection: enhanced vertical viscosity   coeff. at w-point
54
55#if defined key_zdftmx
56   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   av_tide      !: Tidal mixing coefficient
57   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   av_tide_itf  !: Tidal mixing coefficient in Indonesian through-Flow
58#endif
59 
60   !!----------------------------------------------------------------------
61   !! NEMO/OPA 3.2 , LOCEAN-IPSL (2009)
62   !! $Id$
63   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
64   !!----------------------------------------------------------------------
65   
66CONTAINS
67
68   SUBROUTINE zdf_init
69      !!----------------------------------------------------------------------
70      !!                  ***  ROUTINE zdf_init  ***
71      !!
72      !! ** Purpose :   initializations of the vertical ocean physics
73      !!
74      !! ** Method  :   Read namelist namzdf, control logicals
75      !!----------------------------------------------------------------------
76      INTEGER ::   ioptio       ! temporary scalar
77      !!
78      NAMELIST/namzdf/ ln_zdfexp, n_zdfexp, ln_zdfevd, ln_zdfnpc, avm0, avt0, avevd, n_evdm
79      !!----------------------------------------------------------------------
80
81      REWIND( numnam )              !* Read namzdf namelist : vertical mixing parameters
82      READ  ( numnam, namzdf )
83
84      IF(lwp) THEN                  !* Parameter print
85         WRITE(numout,*)
86         WRITE(numout,*) 'zdf_init: vertical physics'
87         WRITE(numout,*) '~~~~~~~~'
88         WRITE(numout,*) '   Namelist namzdf : set vertical mixing mixing parameters'
89         WRITE(numout,*) '      time splitting / backward scheme    ln_zdfexp = ', ln_zdfexp
90         WRITE(numout,*) '      number of time step                  n_zdfexp = ', n_zdfexp
91         WRITE(numout,*) '      enhanced vertical diffusion         ln_zdfevd = ', ln_zdfevd
92         WRITE(numout,*) '      non-penetrative convection          ln_zdfnpc = ', ln_zdfnpc
93         WRITE(numout,*) '      vertical eddy viscosity             avm0      = ', avm0
94         WRITE(numout,*) '      vertical eddy diffusivity           avt0      = ', avt0
95         WRITE(numout,*) '      vertical coefficient for evd        avevd     = ', avevd
96         WRITE(numout,*) '         applied on momentum (=1/0)       n_evdm    = ', n_evdm
97      ENDIF
98
99      !                             !* Parameter & logicals controls
100      !                                  ! ... check of vertical mixing scheme on tracers
101      !                                                 ==> will be done in trazdf module
102      !                                  ! ... check of mixing coefficient
103      IF(lwp) WRITE(numout,*)
104      IF(lwp) WRITE(numout,*) '          vertical mixing option :'
105      ioptio = 0
106      IF( lk_zdfcst ) THEN
107         IF(lwp) WRITE(numout,*) '             constant eddy diffusion coefficients'
108         ioptio = ioptio+1
109      ENDIF
110      IF( lk_zdfric ) THEN
111         IF(lwp) WRITE(numout,*) '             Richardson dependent eddy coefficients'
112         ioptio = ioptio+1
113      ENDIF
114      IF( lk_zdftke ) THEN
115         IF(lwp) WRITE(numout,*) '             TKE dependent eddy coefficients'
116         ioptio = ioptio+1
117      ENDIF
118      IF( lk_zdftke2 ) THEN
119         IF(lwp) WRITE(numout,*) '             TKE2 dependent eddy coefficients'
120         ioptio = ioptio+1
121      ENDIF
122      IF( lk_zdfkpp ) THEN
123         IF(lwp) WRITE(numout,*) '             KPP dependent eddy coefficients'
124         ioptio = ioptio+1
125      ENDIF
126      IF( ioptio == 0 .OR. ioptio > 1 .AND. .NOT. lk_esopa ) &
127         CALL ctl_stop( ' one and only one vertical diffusion option has to be defined ' )
128
129      !                                  ! ... Convection
130      IF(lwp) WRITE(numout,*)
131      IF(lwp) WRITE(numout,*) '          convection :'
132      ioptio = 0
133      IF( ln_zdfnpc ) THEN
134         IF(lwp) WRITE(numout,*) '             use non penetrative convective scheme'
135         ioptio = ioptio+1
136      ENDIF
137      IF( ln_zdfevd ) THEN
138         IF(lwp) WRITE(numout,*) '             use enhanced vertical dif. scheme'
139         ioptio = ioptio+1
140      ENDIF
141      IF( lk_zdftke .OR. lk_zdftke2 ) THEN
142         IF(lwp) WRITE(numout,*) '             use the 1.5 turbulent closure'
143      ENDIF
144      IF( lk_zdfkpp ) THEN
145         IF(lwp) WRITE(numout,*) '             use the KPP closure scheme'
146         IF(lk_mpp) THEN
147            IF(lwp) WRITE(numout,cform_err)
148            IF(lwp) WRITE(numout,*) '             The KPP scheme is not ready to run in MPI'
149         ENDIF
150      ENDIF
151      IF ( ioptio > 1 .AND. .NOT. lk_esopa )   CALL ctl_stop( ' chose between ln_zdfnpc and ln_zdfevd' )
152      IF( ioptio == 0 .AND. .NOT.( lk_zdftke .OR. lk_zdftke2 .OR. lk_zdfkpp ) )    &
153         CALL ctl_stop( ' except for TKE sor KPP physics, a convection scheme is', &
154         &              ' required: ln_zdfevd or ln_zdfnpc logicals' )
155
156   END SUBROUTINE zdf_init
157
158   !!======================================================================
159END MODULE zdf_oce