MODULE zdfini !!====================================================================== !! *** MODULE zdfini *** !! Ocean physics : define vertical mixing variables !!===================================================================== !!---------------------------------------------------------------------- !! zdf_init : initialization, namelist read, and parameters control !!---------------------------------------------------------------------- !! * Modules used USE par_oce ! mesh and scale factors USE ldftra_oce ! ocean active tracers: lateral physics USE ldfdyn_oce ! ocean dynamics lateral physics USE zdf_oce ! TKE vertical mixing USE lib_mpp ! distribued memory computing USE zdftke ! TKE vertical mixing USE zdfkpp ! KPP vertical mixing USE zdfddm ! double diffusion mixing USE zdfevd ! enhanced vertical diffusion USE zdfric ! Richardson vertical mixing USE tranpc ! convection: non penetrative adjustment USE ldfslp ! iso-neutral slopes USE in_out_manager ! I/O manager IMPLICIT NONE PRIVATE !! * Routine accessibility PUBLIC zdf_init ! routine called by opa.F90 !!---------------------------------------------------------------------- !! OPA 9.0 , LOCEAN-IPSL (2005) !!---------------------------------------------------------------------- CONTAINS SUBROUTINE zdf_init !!---------------------------------------------------------------------- !! *** ROUTINE zdf_init *** !! !! ** Purpose : initializations of the vertical ocean physics !! !! ** Method : Read namelist namzdf, control logicals !! !! History : !! ! 97-06 (G. Madec) Original code from inimix !! 8.5 ! 02-08 (G. Madec) F90 : free form !! 9.0 ! 05-06 (C. Ethe) KPP parameterization !!---------------------------------------------------------------------- !! * Local declarations INTEGER :: ioptio ! temporary scalar !! * Namelist NAMELIST/namzdf/ ln_zdfexp, n_zdfexp, ln_zdfevd, ln_zdfnpc, & & avm0 , avt0 , avevd , n_evdm !!---------------------------------------------------------------------- !! OPA 9.0, LODYC-IPSL (2003) !!---------------------------------------------------------------------- ! Read namzdf namelist : vertical mixing parameters ! -------------------- REWIND( numnam ) READ ( numnam, namzdf ) ! Parameter print ! --------------- IF(lwp) THEN WRITE(numout,*) WRITE(numout,*) 'zdf_init: vertical physics' WRITE(numout,*) '~~~~~~~~' WRITE(numout,*) ' Namelist namzdf : set vertical mixing mixing parameters' WRITE(numout,*) ' time splitting / backward scheme ln_zdfexp = ', ln_zdfexp WRITE(numout,*) ' number of time step n_zdfexp = ', n_zdfexp WRITE(numout,*) ' enhanced vertical diffusion ln_zdfevd = ', ln_zdfevd WRITE(numout,*) ' non-penetrative convection ln_zdfnpc = ', ln_zdfnpc WRITE(numout,*) ' vertical eddy viscosity avm0 = ', avm0 WRITE(numout,*) ' vertical eddy diffusivity avt0 = ', avt0 WRITE(numout,*) ' vertical coefficient for evd avevd = ', avevd WRITE(numout,*) ' applied on momentum (=1/0) n_evdm = ', n_evdm ENDIF ! Parameter & logicals controls ! ----------------------------- ! ... check of vertical mixing scheme on tracers ! ==> will be done in trazdf module ! ... check of mixing coefficient IF(lwp) WRITE(numout,*) IF(lwp) WRITE(numout,*) ' vertical mixing option :' ioptio = 0 IF( lk_zdfcst ) THEN IF(lwp) WRITE(numout,*) ' constant eddy diffusion coefficients' ioptio = ioptio+1 ENDIF IF( lk_zdfric ) THEN IF(lwp) WRITE(numout,*) ' Richardson dependent eddy coefficients' ioptio = ioptio+1 ENDIF IF( lk_zdftke ) THEN IF(lwp) WRITE(numout,*) ' TKE dependent eddy coefficients' ioptio = ioptio+1 ENDIF IF( lk_zdfkpp ) THEN IF(lwp) WRITE(numout,*) ' KPP dependent eddy coefficients' ioptio = ioptio+1 ENDIF IF( ioptio == 0 .OR. ioptio > 1 .AND. .NOT. lk_esopa ) & CALL ctl_stop( ' one and only one vertical diffusion option has to be defined ' ) ! ... Convection IF(lwp) WRITE(numout,*) IF(lwp) WRITE(numout,*) ' convection :' ioptio = 0 IF( ln_zdfnpc ) THEN IF(lwp) WRITE(numout,*) ' use non penetrative convective scheme' ioptio = ioptio+1 ENDIF IF( ln_zdfevd ) THEN IF(lwp) WRITE(numout,*) ' use enhanced vertical dif. scheme' ioptio = ioptio+1 ENDIF IF( lk_zdftke ) THEN IF(lwp) WRITE(numout,*) ' use the 1.5 turbulent closure' ENDIF IF( lk_zdfkpp ) THEN IF(lwp) WRITE(numout,*) ' use the KPP closure scheme' IF(lk_mpp) THEN IF(lwp) WRITE(numout,cform_err) IF(lwp) WRITE(numout,*) ' The KPP scheme is not ready to run in MPI' ENDIF ENDIF IF ( ioptio > 1 .AND. .NOT. lk_esopa ) & CALL ctl_stop( ' chose between ln_zdfnpc', ' and ln_zdfevd' ) IF( ioptio == 0 .AND. .NOT.( lk_zdftke .OR. lk_zdfkpp ) ) & CALL ctl_stop( ' except for TKE sor KPP physics, a convection scheme is', & & ' required: ln_zdfevd or ln_zdfnpc logicals' ) END SUBROUTINE zdf_init !!====================================================================== END MODULE zdfini