- Timestamp:
- 2017-04-23T09:30:41+02:00 (7 years ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfphy.F90
r7931 r7953 1 MODULE zdf ini1 MODULE zdfphy 2 2 !!====================================================================== 3 !! *** MODULE zdf ini***4 !! Ocean physics : read vertical mixing namelist and check consistancy3 !! *** MODULE zdfphy *** 4 !! Ocean physics : manager of vertical mixing parametrizations 5 5 !!====================================================================== 6 !! History : 8.0 ! 1997-06 (G. Madec) Original code from inimix 7 !! 1.0 ! 2002-08 (G. Madec) F90 : free form 8 !! - ! 2005-06 (C. Ethe) KPP scheme 9 !! - ! 2009-07 (G. Madec) add avmb, avtb in restart for cen2 advection 10 !! 3.7 ! 2014-12 (G. Madec) remove KPP scheme 11 !!---------------------------------------------------------------------- 12 13 !!---------------------------------------------------------------------- 14 !! zdf_init : initialization, namelist read, and parameters control 15 !!---------------------------------------------------------------------- 16 USE par_oce ! mesh and scale factors 17 USE zdf_oce ! TKE vertical mixing 18 USE sbc_oce ! surface module (only for nn_isf in the option compatibility test) 19 USE zdftke ! TKE vertical mixing 20 USE zdfgls ! GLS vertical mixing 21 USE zdfric ! Richardson vertical mixing 22 USE zdfddm ! double diffusion mixing 23 USE zdfevd ! enhanced vertical diffusion 24 USE tranpc ! convection: non penetrative adjustment 25 USE ldfslp ! iso-neutral slopes 6 !! History : 4.0 ! 2017-04 (G. Madec) original code 7 !!---------------------------------------------------------------------- 8 9 !!---------------------------------------------------------------------- 10 !! zdf_phy_init : initialization of all vertical physics pakages 11 !! zdf_phy : upadate at each time-step the vertical mixing coeff. 12 !!---------------------------------------------------------------------- 13 USE par_oce ! mesh and scale factors 14 USE zdf_oce ! TKE vertical mixing 15 USE sbc_oce ! surface module (only for nn_isf in the option compatibility test) 16 USE zdfbfr ! bottom friction 17 USE zdftke ! TKE vertical mixing 18 USE zdfgls ! GLS vertical mixing 19 USE zdfric ! Richardson vertical mixing 20 USE zdfddm ! double diffusion mixing 21 USE zdfevd ! enhanced vertical diffusion 22 USE zdftmx ! internal tide-induced mixing 23 USE zdfqiao !Qiao module wave induced mixing (zdf_qiao routine) 24 USE zdfmxl ! Mixed-layer depth (zdf_mxl routine) 25 USE tranpc ! convection: non penetrative adjustment 26 USE sbcrnf ! surface boundary condition: runoff variables 26 27 ! 27 USE in_out_manager 28 USE iom 29 USE lib_mpp 28 USE in_out_manager ! I/O manager 29 USE iom ! IOM library 30 USE lib_mpp ! distribued memory computing 30 31 31 32 IMPLICIT NONE 32 33 PRIVATE 33 34 34 PUBLIC zdf_init ! routine called by opa.F90 35 PUBLIC zdf_phy_init ! routine called by nemogcm.F90 36 PUBLIC zdf_phy ! routine called by step.F90 37 35 38 36 39 !!---------------------------------------------------------------------- … … 41 44 CONTAINS 42 45 43 SUBROUTINE zdf_ init44 !!---------------------------------------------------------------------- 45 !! *** ROUTINE zdf_ init ***46 SUBROUTINE zdf_phy_init 47 !!---------------------------------------------------------------------- 48 !! *** ROUTINE zdf_phy_init *** 46 49 !! 47 50 !! ** Purpose : initializations of the vertical ocean physics … … 49 52 !! ** Method : Read namelist namzdf, control logicals 50 53 !!---------------------------------------------------------------------- 51 INTEGER :: ioptio, ios 54 INTEGER :: ioptio, ios ! local integers 52 55 !! 53 56 NAMELIST/namzdf/ ln_zdfcst, ln_zdfric, ln_zdftke, ln_zdfgls, & ! type of closure scheme … … 77 80 IF(lwp) THEN !* Parameter print 78 81 WRITE(numout,*) 79 WRITE(numout,*) 'zdf_ init : vertical physics'82 WRITE(numout,*) 'zdf_phy_init : vertical physics' 80 83 WRITE(numout,*) '~~~~~~~~' 81 84 WRITE(numout,*) ' Namelist namzdf : set vertical mixing mixing parameters' … … 106 109 ENDIF 107 110 108 IF(ln_zdfddm) THEN ! double diffusive mixing' 109 ALLOCATE( avs(jpi,jpj,jpk) ) 110 avs(:,:,:) = rn_avt0 * wmask(:,:,:) 111 ENDIF 112 111 !!gm IF(ln_zdfddm) THEN ! double diffusive mixing' 112 ! avs(:,:,:) = rn_avt0 * wmask(:,:,:) 113 !!gm ENDIF 113 114 114 115 ! !* Parameter & logical controls … … 122 123 IF(lwp) WRITE(numout,*) ' vertical mixing option :' 123 124 ioptio = 0 124 IF( l k_zdfcst ) THEN125 IF( ln_zdfcst ) THEN 125 126 IF(lwp) WRITE(numout,*) ' constant eddy diffusion coefficients' 126 127 ioptio = ioptio+1 127 128 ENDIF 128 IF( l k_zdfric ) THEN129 IF( ln_zdfric ) THEN 129 130 IF(lwp) WRITE(numout,*) ' Richardson dependent eddy coefficients' 130 131 ioptio = ioptio+1 131 132 ENDIF 132 IF( l k_zdftke ) THEN133 IF( ln_zdftke ) THEN 133 134 IF(lwp) WRITE(numout,*) ' TKE dependent eddy coefficients' 134 135 ioptio = ioptio+1 135 136 ENDIF 136 IF( l k_zdfgls ) THEN137 IF( ln_zdfgls ) THEN 137 138 IF(lwp) WRITE(numout,*) ' GLS dependent eddy coefficients' 138 139 ioptio = ioptio+1 … … 140 141 IF( ioptio == 0 .OR. ioptio > 1 ) & 141 142 & CALL ctl_stop( ' one and only one vertical diffusion option has to be defined ' ) 142 IF( ( l k_zdfric .OR. lk_zdfgls ) .AND. ln_isfcav ) &143 IF( ( ln_zdfric .OR. ln_zdfgls ) .AND. ln_isfcav ) & 143 144 & CALL ctl_stop( ' only zdfcst and zdftke were tested with ice shelves cavities ' ) 144 145 ! … … 148 149 ! 149 150 #if defined key_top 150 IF( ln_zdfnpc ) CALL ctl_stop( ' zdf_ init: npc scheme is not working with key_top' )151 IF( ln_zdfnpc ) CALL ctl_stop( ' zdf_phy_init: npc scheme is not working with key_top' ) 151 152 #endif 152 153 ! … … 160 161 ioptio = ioptio+1 161 162 ENDIF 162 IF( l k_zdftke ) THEN163 IF( ln_zdftke ) THEN 163 164 IF(lwp) WRITE(numout,*) ' use the 1.5 turbulent closure' 164 165 ENDIF 165 IF( l k_zdfgls ) THEN166 IF( ln_zdfgls ) THEN 166 167 IF(lwp) WRITE(numout,*) ' use the GLS closure scheme' 167 168 ENDIF 168 169 IF ( ioptio > 1 ) CALL ctl_stop( ' chose between ln_zdfnpc and ln_zdfevd' ) 169 IF( ioptio == 0 .AND. .NOT.( l k_zdftke .OR. lk_zdfgls ) ) &170 IF( ioptio == 0 .AND. .NOT.( ln_zdftke .OR. ln_zdfgls ) ) & 170 171 CALL ctl_stop( ' except for TKE or GLS physics, a convection scheme is', & 171 172 & ' required: ln_zdfevd or ln_zdfnpc logicals' ) … … 202 203 ENDIF 203 204 ! 204 END SUBROUTINE zdf_init 205 206 !!gm moved into zdf_phy_init 207 ! 208 CALL zdf_bfr_init ! bottom friction 209 210 ioptio = 0 !== type of vertical turbulent closure ==! (set nzdfphy) 211 ! 212 ! IF( ln_zdfcst ) THEN ; ioptio = ioptio + 1 ; nzdf_phy = np_CST ; ENDIF 213 ! IF( ln_zdfric ) THEN ; ioptio = ioptio + 1 ; nzdf_phy = np_RIC ; CALL zdf_ric_init ; ENDIF 214 ! IF( ln_zdftke ) THEN ; ioptio = ioptio + 1 ; nzdf_phy = np_TKE ; CALL zdf_tke_init ; ENDIF 215 ! IF( ln_zdfgls ) THEN ; ioptio = ioptio + 1 ; nzdf_phy = np_GLS ; CALL zdf_gls_init ; ENDIF 216 217 218 ! 219 IF( ln_zdfric ) CALL zdf_ric_init ! Richardson number dependent Kz 220 IF( ln_zdftke ) CALL zdf_tke_init ! TKE closure scheme 221 IF( ln_zdfgls ) CALL zdf_gls_init ! GLS closure scheme 222 IF( ln_zdftmx ) CALL zdf_tmx_init ! tidal vertical mixing 223 !!gm 224 ! 225 END SUBROUTINE zdf_phy_init 226 227 228 SUBROUTINE zdf_phy( kstp ) 229 !!---------------------------------------------------------------------- 230 !! *** ROUTINE zdf_phy *** 231 !! 232 !! ** Purpose : Update ocean physics at each time-step 233 !! 234 !! ** Method : 235 !! 236 !! ** Action : avm, avt vertical eddy viscosity and diffusivity at w-points 237 !! nmld ??? mixed layer depth in level and meters <<<<====verifier ! 238 !! bottom stress..... <<<<====verifier ! 239 !!---------------------------------------------------------------------- 240 INTEGER, INTENT(in) :: kstp ! ocean time-step index 241 ! 242 INTEGER :: ji, jj, jk ! dummy loop indice 243 !!---------------------------------------------------------------------- 244 ! 245 CALL zdf_bfr( kstp ) ! bottom friction (if quadratic) 246 ! ! Vertical eddy viscosity and diffusivity coefficients 247 IF( ln_zdfric ) CALL zdf_ric ( kstp ) ! Richardson number dependent Kz 248 IF( ln_zdftke ) CALL zdf_tke ( kstp ) ! TKE closure scheme for Kz 249 IF( ln_zdfgls ) CALL zdf_gls ( kstp ) ! GLS closure scheme for Kz 250 IF( ln_zdfqiao ) CALL zdf_qiao( kstp ) ! Qiao vertical mixing 251 ! 252 IF( ln_zdfcst ) THEN ! Constant Kz (reset avt, avm[uv] to the background value) 253 avt (:,:,:) = rn_avt0 * wmask (:,:,:) 254 avm (:,:,:) = rn_avm0 * wmask (:,:,:) 255 avmu(:,:,:) = rn_avm0 * wumask(:,:,:) 256 avmv(:,:,:) = rn_avm0 * wvmask(:,:,:) 257 ENDIF 258 ! 259 IF( ln_rnf_mouth ) THEN ! increase diffusivity at rivers mouths 260 DO jk = 2, nkrnf ; avt(:,:,jk) = avt(:,:,jk) + 2._wp * rn_avt_rnf * rnfmsk(:,:) * tmask(:,:,jk) ; END DO 261 ENDIF 262 ! 263 IF( ln_zdfevd ) CALL zdf_evd( kstp ) ! enhanced vertical eddy diffusivity 264 ! 265 IF( ln_zdfddm ) THEN ! double diffusive mixing 266 CALL zdf_ddm( kstp ) 267 ELSE ! avs=avt 268 DO jk = 2, jpkm1 ; avs(:,:,jk) = avt(:,:,jk) ; END DO 269 ENDIF 270 ! 271 IF( ln_zdftmx ) CALL zdf_tmx( kstp ) ! tidal vertical mixing 272 273 CALL zdf_mxl( kstp ) ! mixed layer depth 274 275 ! write TKE or GLS information in the restart file 276 IF( lrst_oce .AND. ln_zdftke ) CALL tke_rst( kstp, 'WRITE' ) 277 IF( lrst_oce .AND. ln_zdfgls ) CALL gls_rst( kstp, 'WRITE' ) 278 ! 279 END SUBROUTINE zdf_phy 205 280 206 281 !!====================================================================== 207 END MODULE zdf ini282 END MODULE zdfphy
Note: See TracChangeset
for help on using the changeset viewer.