Changeset 15540 for NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/ZDF/zdfosm.F90
- Timestamp:
- 2021-11-26T12:27:56+01:00 (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/ZDF/zdfosm.F90
r15066 r15540 101 101 ! ! parameterisation, needed by tra_mle_init in 102 102 ! ! tramle.F90 103 REAL( wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ghamu !: Non-local u-momentum flux104 REAL( wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ghamv !: Non-local v-momentum flux105 REAL( wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ghamt !: Non-local temperature flux (gamma/<ws>o)106 REAL( wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ghams !: Non-local salinity flux (gamma/<ws>o)107 REAL( wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hbl !: Boundary layer depth108 REAL( wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hml !: ML depth109 REAL( wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hmle !: Depth of layer affexted by mixed layer eddies in Fox-Kemper parametrization110 REAL( wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: dbdx_mle !: Zonal buoyancy gradient in ML111 REAL( wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: dbdy_mle !: Meridional buoyancy gradient in ML103 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ghamu !: Non-local u-momentum flux 104 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ghamv !: Non-local v-momentum flux 105 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ghamt !: Non-local temperature flux (gamma/<ws>o) 106 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ghams !: Non-local salinity flux (gamma/<ws>o) 107 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hbl !: Boundary layer depth 108 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hml !: ML depth 109 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hmle !: Depth of layer affexted by mixed layer eddies in Fox-Kemper parametrization 110 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: dbdx_mle !: Zonal buoyancy gradient in ML 111 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: dbdy_mle !: Meridional buoyancy gradient in ML 112 112 INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: mld_prof !: Level of base of MLE layer 113 113 … … 128 128 END INTERFACE 129 129 130 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: etmean ! Averaging operator for avt131 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: dh ! Depth of pycnocline132 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: r1_ft ! Inverse of the modified Coriolis parameter at t-pts130 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: etmean ! Averaging operator for avt 131 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: dh ! Depth of pycnocline 132 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: r1_ft ! Inverse of the modified Coriolis parameter at t-pts 133 133 ! Layer indices 134 134 INTEGER, ALLOCATABLE, SAVE, DIMENSION(:,:) :: nbld ! Level of boundary layer base … … 147 147 LOGICAL, ALLOCATABLE, SAVE, DIMENSION(:,:) :: l_mle ! MLE layer increases in hickness. 148 148 ! Scales 149 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: swth0 ! Surface heat flux (Kinematic)150 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sws0 ! Surface freshwater flux151 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: swb0 ! Surface buoyancy flux152 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: suw0 ! Surface u-momentum flux153 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sustar ! Friction velocity154 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: scos_wind ! Cos angle of surface stress155 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: ssin_wind ! Sin angle of surface stress156 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: swthav ! Heat flux - bl average157 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: swsav ! Freshwater flux - bl average158 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: swbav ! Buoyancy flux - bl average159 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sustke ! Surface Stokes drift160 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: dstokes ! Penetration depth of the Stokes drift161 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: swstrl ! Langmuir velocity scale162 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: swstrc ! Convective velocity scale163 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sla ! Trubulent Langmuir number164 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: svstr ! Velocity scale that tends to sustar for large Langmuir number165 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: shol ! Stability parameter for boundary layer149 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: swth0 ! Surface heat flux (Kinematic) 150 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sws0 ! Surface freshwater flux 151 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: swb0 ! Surface buoyancy flux 152 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: suw0 ! Surface u-momentum flux 153 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sustar ! Friction velocity 154 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: scos_wind ! Cos angle of surface stress 155 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: ssin_wind ! Sin angle of surface stress 156 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: swthav ! Heat flux - bl average 157 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: swsav ! Freshwater flux - bl average 158 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: swbav ! Buoyancy flux - bl average 159 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sustke ! Surface Stokes drift 160 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: dstokes ! Penetration depth of the Stokes drift 161 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: swstrl ! Langmuir velocity scale 162 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: swstrc ! Convective velocity scale 163 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sla ! Trubulent Langmuir number 164 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: svstr ! Velocity scale that tends to sustar for large Langmuir number 165 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: shol ! Stability parameter for boundary layer 166 166 ! Layer averages: BL 167 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_t_bl ! Temperature average168 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_s_bl ! Salinity average169 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_u_bl ! Velocity average (u)170 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_v_bl ! Velocity average (v)171 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_b_bl ! Buoyancy average167 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_t_bl ! Temperature average 168 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_s_bl ! Salinity average 169 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_u_bl ! Velocity average (u) 170 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_v_bl ! Velocity average (v) 171 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_b_bl ! Buoyancy average 172 172 ! Difference between layer average and parameter at the base of the layer: BL 173 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_dt_bl ! Temperature difference174 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_ds_bl ! Salinity difference175 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_du_bl ! Velocity difference (u)176 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_dv_bl ! Velocity difference (v)177 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_db_bl ! Buoyancy difference173 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_dt_bl ! Temperature difference 174 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_ds_bl ! Salinity difference 175 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_du_bl ! Velocity difference (u) 176 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_dv_bl ! Velocity difference (v) 177 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_db_bl ! Buoyancy difference 178 178 ! Layer averages: ML 179 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_t_ml ! Temperature average180 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_s_ml ! Salinity average181 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_u_ml ! Velocity average (u)182 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_v_ml ! Velocity average (v)183 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_b_ml ! Buoyancy average179 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_t_ml ! Temperature average 180 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_s_ml ! Salinity average 181 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_u_ml ! Velocity average (u) 182 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_v_ml ! Velocity average (v) 183 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_b_ml ! Buoyancy average 184 184 ! Difference between layer average and parameter at the base of the layer: ML 185 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_dt_ml ! Temperature difference186 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_ds_ml ! Salinity difference187 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_du_ml ! Velocity difference (u)188 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_dv_ml ! Velocity difference (v)189 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_db_ml ! Buoyancy difference185 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_dt_ml ! Temperature difference 186 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_ds_ml ! Salinity difference 187 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_du_ml ! Velocity difference (u) 188 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_dv_ml ! Velocity difference (v) 189 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_db_ml ! Buoyancy difference 190 190 ! Layer averages: MLE 191 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_t_mle ! Temperature average192 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_s_mle ! Salinity average193 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_u_mle ! Velocity average (u)194 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_v_mle ! Velocity average (v)195 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_b_mle ! Buoyancy average191 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_t_mle ! Temperature average 192 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_s_mle ! Salinity average 193 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_u_mle ! Velocity average (u) 194 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_v_mle ! Velocity average (v) 195 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: av_b_mle ! Buoyancy average 196 196 ! Diagnostic output 197 REAL( WP), ALLOCATABLE, SAVE, DIMENSION(:,:) :: osmdia2d ! Auxiliary array for diagnostic output198 REAL( WP), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: osmdia3d ! Auxiliary array for diagnostic output197 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: osmdia2d ! Auxiliary array for diagnostic output 198 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: osmdia3d ! Auxiliary array for diagnostic output 199 199 LOGICAL :: ln_dia_pyc_scl = .FALSE. ! Output of pycnocline scalar-gradient profiles 200 200 LOGICAL :: ln_dia_pyc_shr = .FALSE. ! Output of pycnocline velocity-shear profiles … … 202 202 ! !!* namelist namzdf_osm * 203 203 LOGICAL :: ln_use_osm_la ! Use namelist rn_osm_la 204 REAL( wp) :: rn_osm_la ! Turbulent Langmuir number205 REAL( wp) :: rn_osm_dstokes ! Depth scale of Stokes drift206 REAL( wp) :: rn_zdfosm_adjust_sd = 1.0_wp ! Factor to reduce Stokes drift by207 REAL( wp) :: rn_osm_hblfrac = 0.1_wp ! For nn_osm_wave = 3/4 specify fraction in top of hbl204 REAL(dp) :: rn_osm_la ! Turbulent Langmuir number 205 REAL(dp) :: rn_osm_dstokes ! Depth scale of Stokes drift 206 REAL(dp) :: rn_zdfosm_adjust_sd = 1.0_wp ! Factor to reduce Stokes drift by 207 REAL(dp) :: rn_osm_hblfrac = 0.1_wp ! For nn_osm_wave = 3/4 specify fraction in top of hbl 208 208 LOGICAL :: ln_zdfosm_ice_shelter ! Flag to activate ice sheltering 209 REAL( wp) :: rn_osm_hbl0 = 10.0_wp ! Initial value of hbl for 1D runs209 REAL(dp) :: rn_osm_hbl0 = 10.0_wp ! Initial value of hbl for 1D runs 210 210 INTEGER :: nn_ave ! = 0/1 flag for horizontal average on avt 211 211 INTEGER :: nn_osm_wave = 0 ! = 0/1/2 flag for getting stokes drift from La# / PM wind-waves/Inputs into … … 214 214 LOGICAL :: ln_dia_osm ! Use namelist rn_osm_la 215 215 LOGICAL :: ln_kpprimix = .TRUE. ! Shear instability mixing 216 REAL( wp) :: rn_riinfty = 0.7_wp ! Local Richardson Number limit for shear instability217 REAL( wp) :: rn_difri = 0.005_wp ! Maximum shear mixing at Rig = 0 (m2/s)216 REAL(dp) :: rn_riinfty = 0.7_wp ! Local Richardson Number limit for shear instability 217 REAL(dp) :: rn_difri = 0.005_wp ! Maximum shear mixing at Rig = 0 (m2/s) 218 218 LOGICAL :: ln_convmix = .TRUE. ! Convective instability mixing 219 REAL( wp) :: rn_difconv = 1.0_wp ! Diffusivity when unstable below BL (m2/s)219 REAL(dp) :: rn_difconv = 1.0_wp ! Diffusivity when unstable below BL (m2/s) 220 220 ! OSMOSIS mixed layer eddy parametrization constants 221 221 INTEGER :: nn_osm_mle ! = 0/1 flag for horizontal average on avt 222 REAL( wp) :: rn_osm_mle_ce ! MLE coefficient222 REAL(dp) :: rn_osm_mle_ce ! MLE coefficient 223 223 ! Parameters used in nn_osm_mle = 0 case 224 REAL( wp) :: rn_osm_mle_lf ! Typical scale of mixed layer front225 REAL( wp) :: rn_osm_mle_time ! Time scale for mixing momentum across the mixed layer224 REAL(dp) :: rn_osm_mle_lf ! Typical scale of mixed layer front 225 REAL(dp) :: rn_osm_mle_time ! Time scale for mixing momentum across the mixed layer 226 226 ! Parameters used in nn_osm_mle = 1 case 227 REAL( wp) :: rn_osm_mle_lat ! Reference latitude for a 5 km scale of ML front227 REAL(dp) :: rn_osm_mle_lat ! Reference latitude for a 5 km scale of ML front 228 228 LOGICAL :: ln_osm_hmle_limit ! If true arbitrarily restrict hmle to rn_osm_hmle_limit*zmld 229 REAL( wp) :: rn_osm_hmle_limit ! If ln_osm_hmle_limit true arbitrarily restrict hmle to rn_osm_hmle_limit*zmld230 REAL( wp) :: rn_osm_mle_rho_c ! Density criterion for definition of MLD used by FK231 REAL( wp) :: rb_c ! ML buoyancy criteria = g rho_c /rho0 where rho_c is defined in zdfmld232 REAL( wp) :: rc_f ! MLE coefficient (= rn_ce / (5 km * fo) ) in nn_osm_mle=1 case233 REAL( wp) :: rn_osm_mle_thresh ! Threshold buoyancy for deepening of MLE layer below OSBL base234 REAL( wp) :: rn_osm_bl_thresh ! Threshold buoyancy for deepening of OSBL base235 REAL( wp) :: rn_osm_mle_tau ! Adjustment timescale for MLE229 REAL(dp) :: rn_osm_hmle_limit ! If ln_osm_hmle_limit true arbitrarily restrict hmle to rn_osm_hmle_limit*zmld 230 REAL(dp) :: rn_osm_mle_rho_c ! Density criterion for definition of MLD used by FK 231 REAL(dp) :: rb_c ! ML buoyancy criteria = g rho_c /rho0 where rho_c is defined in zdfmld 232 REAL(dp) :: rc_f ! MLE coefficient (= rn_ce / (5 km * fo) ) in nn_osm_mle=1 case 233 REAL(dp) :: rn_osm_mle_thresh ! Threshold buoyancy for deepening of MLE layer below OSBL base 234 REAL(dp) :: rn_osm_bl_thresh ! Threshold buoyancy for deepening of OSBL base 235 REAL(dp) :: rn_osm_mle_tau ! Adjustment timescale for MLE 236 236 237 237 ! General constants 238 REAL( wp) :: epsln = 1.0e-20_wp ! A small positive number to ensure no div by zero239 REAL( wp) :: depth_tol = 1.0e-6_wp ! A small-ish positive number to give a hbl slightly shallower than gdepw240 REAL( wp) :: pthird = 1.0_wp/3.0_wp ! 1/3241 REAL( wp) :: p2third = 2.0_wp/3.0_wp ! 2/3238 REAL(dp) :: epsln = 1.0e-20_wp ! A small positive number to ensure no div by zero 239 REAL(dp) :: depth_tol = 1.0e-6_wp ! A small-ish positive number to give a hbl slightly shallower than gdepw 240 REAL(dp) :: pthird = 1.0_wp/3.0_wp ! 1/3 241 REAL(dp) :: p2third = 2.0_wp/3.0_wp ! 2/3 242 242 243 243 !! * Substitutions … … 353 353 INTEGER , INTENT(in ) :: kt ! Ocean time step 354 354 INTEGER , INTENT(in ) :: Kbb, Kmm, Krhs ! Ocean time level indices 355 REAL( wp), DIMENSION(:,:,:), INTENT(inout) :: p_avm, p_avt ! Momentum and tracer Kz (w-points)355 REAL(dp), DIMENSION(:,:,:), INTENT(inout) :: p_avm, p_avt ! Momentum and tracer Kz (w-points) 356 356 !! 357 357 INTEGER :: ji, jj, jk, jl, jm, jkflt ! Dummy loop indices 358 358 !! 359 REAL( wp) :: zthermal, zbeta360 REAL( wp) :: zesh2, zri, zfri ! Interior Richardson mixing359 REAL(dp) :: zthermal, zbeta 360 REAL(dp) :: zesh2, zri, zfri ! Interior Richardson mixing 361 361 !! Scales 362 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zrad0 ! Surface solar temperature flux (deg m/s)363 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zradh ! Radiative flux at bl base (Buoyancy units)364 REAL( wp) :: zradav ! Radiative flux, bl average (Buoyancy Units)365 REAL( wp) :: zvw0 ! Surface v-momentum flux366 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zwb0tot ! Total surface buoyancy flux including insolation367 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zwb_ent ! Buoyancy entrainment flux368 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zwb_min369 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zwb_fk_b ! MLE buoyancy flux averaged over OSBL370 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zwb_fk ! Max MLE buoyancy flux371 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zdiff_mle ! Extra MLE vertical diff372 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zvel_mle ! Velocity scale for dhdt with stable ML and FK362 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zrad0 ! Surface solar temperature flux (deg m/s) 363 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zradh ! Radiative flux at bl base (Buoyancy units) 364 REAL(dp) :: zradav ! Radiative flux, bl average (Buoyancy Units) 365 REAL(dp) :: zvw0 ! Surface v-momentum flux 366 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zwb0tot ! Total surface buoyancy flux including insolation 367 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zwb_ent ! Buoyancy entrainment flux 368 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zwb_min 369 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zwb_fk_b ! MLE buoyancy flux averaged over OSBL 370 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zwb_fk ! Max MLE buoyancy flux 371 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zdiff_mle ! Extra MLE vertical diff 372 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zvel_mle ! Velocity scale for dhdt with stable ML and FK 373 373 !! Mixed-layer variables 374 374 INTEGER, DIMENSION(A2D(nn_hls-1)) :: jk_nlev ! Number of levels 375 375 INTEGER, DIMENSION(A2D(nn_hls-1)) :: jk_ext ! Offset for external level 376 376 !! 377 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zhbl ! BL depth - grid378 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zhml ! ML depth - grid379 !! 380 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zhmle ! MLE depth - grid381 REAL( wp), DIMENSION(A2D(nn_hls)) :: zmld ! ML depth on grid382 !! 383 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zdh ! Pycnocline depth - grid384 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zdhdt ! BL depth tendency385 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zdtdz_bl_ext, zdsdz_bl_ext ! External temperature/salinity gradients386 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zdbdz_bl_ext ! External buoyancy gradients387 REAL( wp), DIMENSION(A2D(nn_hls)) :: zdtdx, zdtdy, zdsdx, zdsdy ! Horizontal gradients for Fox-Kemper parametrization388 !! 389 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zdbds_mle ! Magnitude of horizontal buoyancy gradient377 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zhbl ! BL depth - grid 378 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zhml ! ML depth - grid 379 !! 380 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zhmle ! MLE depth - grid 381 REAL(dp), DIMENSION(A2D(nn_hls)) :: zmld ! ML depth on grid 382 !! 383 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zdh ! Pycnocline depth - grid 384 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zdhdt ! BL depth tendency 385 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zdtdz_bl_ext, zdsdz_bl_ext ! External temperature/salinity gradients 386 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zdbdz_bl_ext ! External buoyancy gradients 387 REAL(dp), DIMENSION(A2D(nn_hls)) :: zdtdx, zdtdy, zdsdx, zdsdy ! Horizontal gradients for Fox-Kemper parametrization 388 !! 389 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zdbds_mle ! Magnitude of horizontal buoyancy gradient 390 390 !! Flux-gradient relationship variables 391 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zshear ! Shear production392 !! 393 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zhbl_t ! Holds boundary layer depth updated by full timestep391 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zshear ! Shear production 392 !! 393 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zhbl_t ! Holds boundary layer depth updated by full timestep 394 394 !! For calculating Ri#-dependent mixing 395 REAL( wp), DIMENSION(A2D(nn_hls)) :: z2du ! u-shear^2396 REAL( wp), DIMENSION(A2D(nn_hls)) :: z2dv ! v-shear^2397 REAL( wp) :: zrimix ! Spatial form of ri#-induced diffusion395 REAL(dp), DIMENSION(A2D(nn_hls)) :: z2du ! u-shear^2 396 REAL(dp), DIMENSION(A2D(nn_hls)) :: z2dv ! v-shear^2 397 REAL(dp) :: zrimix ! Spatial form of ri#-induced diffusion 398 398 !! Temporary variables 399 REAL( wp) :: znd ! Temporary non-dimensional depth400 REAL( wp) :: zz0, zz1, zfac401 REAL( wp) :: zus_x, zus_y ! Temporary Stokes drift402 REAL( wp), DIMENSION(A2D(nn_hls-1),jpk) :: zviscos ! Viscosity403 REAL( wp), DIMENSION(A2D(nn_hls-1),jpk) :: zdiffut ! t-diffusivity404 REAL( wp) :: zabsstke405 REAL( wp) :: zsqrtpi, z_two_thirds, zthickness406 REAL( wp) :: z2k_times_thickness, zsqrt_depth, zexp_depth, zf, zexperfc399 REAL(dp) :: znd ! Temporary non-dimensional depth 400 REAL(dp) :: zz0, zz1, zfac 401 REAL(dp) :: zus_x, zus_y ! Temporary Stokes drift 402 REAL(dp), DIMENSION(A2D(nn_hls-1),jpk) :: zviscos ! Viscosity 403 REAL(dp), DIMENSION(A2D(nn_hls-1),jpk) :: zdiffut ! t-diffusivity 404 REAL(dp) :: zabsstke 405 REAL(dp) :: zsqrtpi, z_two_thirds, zthickness 406 REAL(dp) :: z2k_times_thickness, zsqrt_depth, zexp_depth, zf, zexperfc 407 407 !! For debugging 408 REAL( wp), PARAMETER :: pp_large = -1e10_wp408 REAL(dp), PARAMETER :: pp_large = -1e10_wp 409 409 !!---------------------------------------------------------------------- 410 410 ! … … 1041 1041 INTEGER, INTENT(in ) :: Kbb, Kmm ! Ocean time-level indices 1042 1042 INTEGER, DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: knlev ! Number of levels to average over. 1043 REAL( wp), DIMENSION(jpi,jpj), INTENT( out) :: pt, ps ! Average temperature and salinity1044 REAL( wp), DIMENSION(jpi,jpj), INTENT( out) :: pb ! Average buoyancy1045 REAL( wp), DIMENSION(jpi,jpj), INTENT( out) :: pu, pv ! Average current components1043 REAL(dp), DIMENSION(jpi,jpj), INTENT( out) :: pt, ps ! Average temperature and salinity 1044 REAL(dp), DIMENSION(jpi,jpj), INTENT( out) :: pb ! Average buoyancy 1045 REAL(dp), DIMENSION(jpi,jpj), INTENT( out) :: pu, pv ! Average current components 1046 1046 INTEGER, DIMENSION(A2D(nn_hls-1)), INTENT(in ), OPTIONAL :: kp_ext ! External-level offsets 1047 REAL( wp), DIMENSION(jpi,jpj), INTENT( out), OPTIONAL :: pdt ! Difference between average temperature,1048 REAL( wp), DIMENSION(jpi,jpj), INTENT( out), OPTIONAL :: pds ! salinity,1049 REAL( wp), DIMENSION(jpi,jpj), INTENT( out), OPTIONAL :: pdb ! buoyancy, and1050 REAL( wp), DIMENSION(jpi,jpj), INTENT( out), OPTIONAL :: pdu, pdv ! velocity components and the OSBL1047 REAL(dp), DIMENSION(jpi,jpj), INTENT( out), OPTIONAL :: pdt ! Difference between average temperature, 1048 REAL(dp), DIMENSION(jpi,jpj), INTENT( out), OPTIONAL :: pds ! salinity, 1049 REAL(dp), DIMENSION(jpi,jpj), INTENT( out), OPTIONAL :: pdb ! buoyancy, and 1050 REAL(dp), DIMENSION(jpi,jpj), INTENT( out), OPTIONAL :: pdu, pdv ! velocity components and the OSBL 1051 1051 !! 1052 1052 INTEGER :: jk, jkflt, jkmax, ji, jj ! Loop indices 1053 1053 INTEGER :: ibld_ext ! External-layer index 1054 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zthick ! Layer thickness1055 REAL( wp) :: zthermal ! Thermal expansion coefficient1056 REAL( wp) :: zbeta ! Haline contraction coefficient1054 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zthick ! Layer thickness 1055 REAL(dp) :: zthermal ! Thermal expansion coefficient 1056 REAL(dp) :: zbeta ! Haline contraction coefficient 1057 1057 !!---------------------------------------------------------------------- 1058 1058 ! … … 1144 1144 !! 1145 1145 !!---------------------------------------------------------------------- 1146 REAL( wp), INTENT(inout), DIMENSION(jpi,jpj) :: pu, pv ! Components of current1146 REAL(dp), INTENT(inout), DIMENSION(jpi,jpj) :: pu, pv ! Components of current 1147 1147 LOGICAL, OPTIONAL, INTENT(in ) :: fwd ! Forward (default) or reverse rotation 1148 1148 !! 1149 1149 INTEGER :: ji, jj ! Loop indices 1150 REAL( wp) :: ztmp, zfwd ! Auxiliary variables1150 REAL(dp) :: ztmp, zfwd ! Auxiliary variables 1151 1151 !!---------------------------------------------------------------------- 1152 1152 ! … … 1175 1175 !! 1176 1176 !!---------------------------------------------------------------------- 1177 REAL( wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pu, pv ! Components of current1177 REAL(dp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pu, pv ! Components of current 1178 1178 LOGICAL, OPTIONAL, INTENT(in ) :: fwd ! Forward (default) or reverse rotation 1179 1179 INTEGER, OPTIONAL, INTENT(in ) :: ktop ! Minimum depth index … … 1181 1181 !! 1182 1182 INTEGER :: ji, jj, jk, jktop, jkmax ! Loop indices 1183 REAL( wp) :: ztmp, zfwd ! Auxiliary variables1183 REAL(dp) :: ztmp, zfwd ! Auxiliary variables 1184 1184 LOGICAL :: llkbot ! Auxiliary variable 1185 1185 !!---------------------------------------------------------------------- … … 1223 1223 !!---------------------------------------------------------------------- 1224 1224 INTEGER, INTENT(in ) :: Kmm ! Ocean time-level index 1225 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT( out) :: pwb_ent ! Buoyancy fluxes at base1226 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT( out) :: pwb_min ! of well-mixed layer1227 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT( out) :: pshear ! Production of TKE due to shear across the pycnocline1228 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phbl ! BL depth1229 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phml ! ML depth1230 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdh ! Pycnocline depth1225 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT( out) :: pwb_ent ! Buoyancy fluxes at base 1226 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT( out) :: pwb_min ! of well-mixed layer 1227 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT( out) :: pshear ! Production of TKE due to shear across the pycnocline 1228 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phbl ! BL depth 1229 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phml ! ML depth 1230 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdh ! Pycnocline depth 1231 1231 !! 1232 1232 INTEGER :: jj, ji ! Loop indices 1233 1233 !! 1234 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zekman1235 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zri_p, zri_b ! Richardson numbers1236 REAL( wp) :: zshear_u, zshear_v, zwb_shr1237 REAL( wp) :: zwcor, zrf_conv, zrf_shear, zrf_langmuir, zr_stokes1238 !! 1239 REAL( wp), PARAMETER :: pp_a_shr = 0.4_wp, pp_b_shr = 6.5_wp, pp_a_wb_s = 0.8_wp1240 REAL( wp), PARAMETER :: pp_alpha_c = 0.2_wp, pp_alpha_lc = 0.03_wp1241 REAL( wp), PARAMETER :: pp_alpha_ls = 0.06_wp, pp_alpha_s = 0.15_wp1242 REAL( wp), PARAMETER :: pp_ri_p_thresh = 27.0_wp1243 REAL( wp), PARAMETER :: pp_ri_c = 0.25_wp1244 REAL( wp), PARAMETER :: pp_ek = 4.0_wp1245 REAL( wp), PARAMETER :: pp_large = -1e10_wp1234 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zekman 1235 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zri_p, zri_b ! Richardson numbers 1236 REAL(dp) :: zshear_u, zshear_v, zwb_shr 1237 REAL(dp) :: zwcor, zrf_conv, zrf_shear, zrf_langmuir, zr_stokes 1238 !! 1239 REAL(dp), PARAMETER :: pp_a_shr = 0.4_wp, pp_b_shr = 6.5_wp, pp_a_wb_s = 0.8_wp 1240 REAL(dp), PARAMETER :: pp_alpha_c = 0.2_wp, pp_alpha_lc = 0.03_wp 1241 REAL(dp), PARAMETER :: pp_alpha_ls = 0.06_wp, pp_alpha_s = 0.15_wp 1242 REAL(dp), PARAMETER :: pp_ri_p_thresh = 27.0_wp 1243 REAL(dp), PARAMETER :: pp_ri_c = 0.25_wp 1244 REAL(dp), PARAMETER :: pp_ek = 4.0_wp 1245 REAL(dp), PARAMETER :: pp_large = -1e10_wp 1246 1246 !!---------------------------------------------------------------------- 1247 1247 ! … … 1387 1387 INTEGER, INTENT(in ) :: Kmm ! Ocean time-level index 1388 1388 INTEGER, DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: kbase ! OSBL base layer index 1389 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT( out) :: pdtdz, pdsdz ! External gradients of temperature, salinity1390 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT( out) :: pdbdz ! and buoyancy1389 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT( out) :: pdtdz, pdsdz ! External gradients of temperature, salinity 1390 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT( out) :: pdbdz ! and buoyancy 1391 1391 !! 1392 1392 INTEGER :: ji, jj, jkb, jkb1 1393 REAL( wp) :: zthermal, zbeta1394 !! 1395 REAL( wp), PARAMETER :: pp_large = -1e10_wp1393 REAL(dp) :: zthermal, zbeta 1394 !! 1395 REAL(dp), PARAMETER :: pp_large = -1e10_wp 1396 1396 !!---------------------------------------------------------------------- 1397 1397 ! … … 1430 1430 !! 1431 1431 !!---------------------------------------------------------------------- 1432 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT( out) :: pdhdt ! Rate of change of hbl1433 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phbl ! BL depth1434 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdh ! Pycnocline depth1435 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pwb_ent ! Buoyancy entrainment flux1436 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pwb_min1437 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdbdz_bl_ext ! External buoyancy gradients1438 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT( out) :: pwb_fk_b ! MLE buoyancy flux averaged over OSBL1439 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pwb_fk ! Max MLE buoyancy flux1440 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pvel_mle ! Vvelocity scale for dhdt with stable ML and FK1432 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT( out) :: pdhdt ! Rate of change of hbl 1433 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phbl ! BL depth 1434 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdh ! Pycnocline depth 1435 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pwb_ent ! Buoyancy entrainment flux 1436 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pwb_min 1437 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdbdz_bl_ext ! External buoyancy gradients 1438 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT( out) :: pwb_fk_b ! MLE buoyancy flux averaged over OSBL 1439 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pwb_fk ! Max MLE buoyancy flux 1440 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pvel_mle ! Vvelocity scale for dhdt with stable ML and FK 1441 1441 !! 1442 1442 INTEGER :: jj, ji 1443 REAL( wp) :: zgamma_b_nd, zgamma_dh_nd, zpert, zpsi, zari1444 REAL( wp) :: zvel_max, zddhdt1445 !! 1446 REAL( wp), PARAMETER :: pp_alpha_b = 0.3_wp1447 REAL( wp), PARAMETER :: pp_ddh = 2.5_wp, pp_ddh_2 = 3.5_wp ! Also in pycnocline_depth1448 REAL( wp), PARAMETER :: pp_large = -1e10_wp1443 REAL(dp) :: zgamma_b_nd, zgamma_dh_nd, zpert, zpsi, zari 1444 REAL(dp) :: zvel_max, zddhdt 1445 !! 1446 REAL(dp), PARAMETER :: pp_alpha_b = 0.3_wp 1447 REAL(dp), PARAMETER :: pp_ddh = 2.5_wp, pp_ddh_2 = 3.5_wp ! Also in pycnocline_depth 1448 REAL(dp), PARAMETER :: pp_large = -1e10_wp 1449 1449 !!---------------------------------------------------------------------- 1450 1450 ! … … 1600 1600 !!---------------------------------------------------------------------- 1601 1601 INTEGER, INTENT(in ) :: Kmm ! Ocean time-level index 1602 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) :: pdhdt ! Rates of change of hbl1603 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) :: phbl ! BL depth1604 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phbl_t ! BL depth1605 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pwb_ent ! Buoyancy entrainment flux1606 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pwb_fk_b ! MLE buoyancy flux averaged over OSBL1602 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) :: pdhdt ! Rates of change of hbl 1603 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) :: phbl ! BL depth 1604 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phbl_t ! BL depth 1605 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pwb_ent ! Buoyancy entrainment flux 1606 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pwb_fk_b ! MLE buoyancy flux averaged over OSBL 1607 1607 !! 1608 1608 INTEGER :: jk, jj, ji, jm 1609 REAL( wp) :: zhbl_s, zvel_max, zdb1610 REAL( wp) :: zthermal, zbeta1609 REAL(dp) :: zhbl_s, zvel_max, zdb 1610 REAL(dp) :: zthermal, zbeta 1611 1611 !!---------------------------------------------------------------------- 1612 1612 ! … … 1700 1700 !!---------------------------------------------------------------------- 1701 1701 INTEGER, INTENT(in ) :: Kmm ! Ocean time-level index 1702 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) :: pdh ! Pycnocline thickness1703 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) :: phml ! ML depth1704 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdhdt ! BL depth tendency1705 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phbl ! BL depth1706 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pwb_ent ! Buoyancy entrainment flux1707 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdbdz_bl_ext ! External buoyancy gradients1708 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pwb_fk_b ! MLE buoyancy flux averaged over OSBL1702 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) :: pdh ! Pycnocline thickness 1703 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) :: phml ! ML depth 1704 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdhdt ! BL depth tendency 1705 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phbl ! BL depth 1706 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pwb_ent ! Buoyancy entrainment flux 1707 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdbdz_bl_ext ! External buoyancy gradients 1708 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pwb_fk_b ! MLE buoyancy flux averaged over OSBL 1709 1709 !! 1710 1710 INTEGER :: jj, ji 1711 1711 INTEGER :: inhml 1712 REAL( wp) :: zari, ztau, zdh_ref, zddhdt, zvel_max1713 REAL( wp) :: ztmp ! Auxiliary variable1714 !! 1715 REAL , PARAMETER :: pp_ddh = 2.5_wp, pp_ddh_2 = 3.5_wp! Also in pycnocline_depth1712 REAL(dp) :: zari, ztau, zdh_ref, zddhdt, zvel_max 1713 REAL(dp) :: ztmp ! Auxiliary variable 1714 !! 1715 REAL(dp), PARAMETER :: pp_ddh = 2.5, pp_ddh_2 = 3.5 ! Also in pycnocline_depth 1716 1716 !!---------------------------------------------------------------------- 1717 1717 ! … … 1861 1861 INTEGER, INTENT(in ) :: Kmm ! Ocean time-level index 1862 1862 INTEGER, DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: kp_ext ! External-level offsets 1863 REAL( wp), DIMENSION(A2D(nn_hls-1),jpk), INTENT( out) :: pdbdz ! Gradients in the pycnocline1864 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT( out) :: palpha1865 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdh ! Pycnocline thickness1866 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phbl ! BL depth1867 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdbdz_bl_ext ! External buoyancy gradients1868 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phml ! ML depth1869 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdhdt ! Rates of change of hbl1863 REAL(dp), DIMENSION(A2D(nn_hls-1),jpk), INTENT( out) :: pdbdz ! Gradients in the pycnocline 1864 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT( out) :: palpha 1865 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdh ! Pycnocline thickness 1866 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phbl ! BL depth 1867 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdbdz_bl_ext ! External buoyancy gradients 1868 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phml ! ML depth 1869 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdhdt ! Rates of change of hbl 1870 1870 !! 1871 1871 INTEGER :: jk, jj, ji 1872 REAL( wp) :: zbgrad1873 REAL( wp) :: zgamma_b_nd, znd1874 REAL( wp) :: zzeta_m1875 REAL( wp) :: ztmp ! Auxiliary variable1876 !! 1877 REAL( wp), PARAMETER :: pp_gamma_b = 2.25_wp1878 REAL( wp), PARAMETER :: pp_large = -1e10_wp1872 REAL(dp) :: zbgrad 1873 REAL(dp) :: zgamma_b_nd, znd 1874 REAL(dp) :: zzeta_m 1875 REAL(dp) :: ztmp ! Auxiliary variable 1876 !! 1877 REAL(dp), PARAMETER :: pp_gamma_b = 2.25_wp 1878 REAL(dp), PARAMETER :: pp_large = -1e10_wp 1879 1879 !!---------------------------------------------------------------------- 1880 1880 ! … … 1971 1971 !!---------------------------------------------------------------------- 1972 1972 INTEGER, INTENT(in ) :: Kbb, Kmm ! Ocean time-level indices 1973 REAL( wp), DIMENSION(A2D(nn_hls-1),jpk), INTENT(inout) :: pdiffut ! t-diffusivity1974 REAL( wp), DIMENSION(A2D(nn_hls-1),jpk), INTENT(inout) :: pviscos ! Viscosity1975 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phbl ! BL depth1976 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phml ! ML depth1977 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdh ! Pycnocline depth1978 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdhdt ! BL depth tendency1979 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pshear ! Shear production1980 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pwb_ent ! Buoyancy entrainment flux1981 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pwb_min1973 REAL(dp), DIMENSION(A2D(nn_hls-1),jpk), INTENT(inout) :: pdiffut ! t-diffusivity 1974 REAL(dp), DIMENSION(A2D(nn_hls-1),jpk), INTENT(inout) :: pviscos ! Viscosity 1975 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phbl ! BL depth 1976 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phml ! ML depth 1977 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdh ! Pycnocline depth 1978 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdhdt ! BL depth tendency 1979 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pshear ! Shear production 1980 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pwb_ent ! Buoyancy entrainment flux 1981 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pwb_min 1982 1982 !! 1983 1983 INTEGER :: ji, jj, jk ! Loop indices 1984 1984 !! Scales used to calculate eddy diffusivity and viscosity profiles 1985 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zdifml_sc, zvisml_sc1986 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zdifpyc_n_sc, zdifpyc_s_sc1987 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zvispyc_n_sc, zvispyc_s_sc1988 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zbeta_d_sc, zbeta_v_sc1989 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zb_coup, zc_coup_vis, zc_coup_dif1990 !! 1991 REAL( wp) :: zvel_sc_pyc, zvel_sc_ml, zstab_fac, zz_b1992 REAL( wp) :: za_cubic, zb_d_cubic, zc_d_cubic, zd_d_cubic, & ! Coefficients in cubic polynomial specifying diffusivity1985 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zdifml_sc, zvisml_sc 1986 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zdifpyc_n_sc, zdifpyc_s_sc 1987 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zvispyc_n_sc, zvispyc_s_sc 1988 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zbeta_d_sc, zbeta_v_sc 1989 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zb_coup, zc_coup_vis, zc_coup_dif 1990 !! 1991 REAL(dp) :: zvel_sc_pyc, zvel_sc_ml, zstab_fac, zz_b 1992 REAL(dp) :: za_cubic, zb_d_cubic, zc_d_cubic, zd_d_cubic, & ! Coefficients in cubic polynomial specifying diffusivity 1993 1993 & zb_v_cubic, zc_v_cubic, zd_v_cubic ! and viscosity in pycnocline 1994 REAL( wp) :: zznd_ml, zznd_pyc, ztmp1995 REAL( wp) :: zmsku, zmskv1996 !! 1997 REAL( wp), PARAMETER :: pp_dif_ml = 0.8_wp, pp_vis_ml = 0.375_wp1998 REAL( wp), PARAMETER :: pp_dif_pyc = 0.15_wp, pp_vis_pyc = 0.142_wp1999 REAL( wp), PARAMETER :: pp_vispyc_shr = 0.15_wp1994 REAL(dp) :: zznd_ml, zznd_pyc, ztmp 1995 REAL(dp) :: zmsku, zmskv 1996 !! 1997 REAL(dp), PARAMETER :: pp_dif_ml = 0.8_wp, pp_vis_ml = 0.375_wp 1998 REAL(dp), PARAMETER :: pp_dif_pyc = 0.15_wp, pp_vis_pyc = 0.142_wp 1999 REAL(dp), PARAMETER :: pp_vispyc_shr = 0.15_wp 2000 2000 !!---------------------------------------------------------------------- 2001 2001 ! … … 2167 2167 INTEGER, INTENT(in ) :: Kmm ! Time-level index 2168 2168 INTEGER, DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: kp_ext ! Offset for external level 2169 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phbl ! BL depth2170 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phml ! ML depth2171 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdh ! Pycnocline depth2172 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdhdt ! BL depth tendency2173 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pshear ! Shear production2174 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdtdz_bl_ext ! External temperature gradients2175 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdsdz_bl_ext ! External salinity gradients2176 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdbdz_bl_ext ! External buoyancy gradients2177 REAL( wp), DIMENSION(A2D(nn_hls-1),jpk), INTENT(in ) :: pdiffut ! t-diffusivity2178 REAL( wp), DIMENSION(A2D(nn_hls-1),jpk), INTENT(in ) :: pviscos ! Viscosity2179 !! 2180 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zalpha_pyc !2181 REAL( wp), DIMENSION(A2D(nn_hls-1),jpk) :: zdbdz_pyc ! Parametrised gradient of buoyancy in the pycnocline2182 REAL( wp), DIMENSION(:,:,:), ALLOCATABLE :: z3ddz_pyc_1, z3ddz_pyc_2 ! Pycnocline gradient/shear profiles2169 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phbl ! BL depth 2170 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phml ! ML depth 2171 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdh ! Pycnocline depth 2172 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdhdt ! BL depth tendency 2173 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pshear ! Shear production 2174 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdtdz_bl_ext ! External temperature gradients 2175 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdsdz_bl_ext ! External salinity gradients 2176 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdbdz_bl_ext ! External buoyancy gradients 2177 REAL(dp), DIMENSION(A2D(nn_hls-1),jpk), INTENT(in ) :: pdiffut ! t-diffusivity 2178 REAL(dp), DIMENSION(A2D(nn_hls-1),jpk), INTENT(in ) :: pviscos ! Viscosity 2179 !! 2180 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zalpha_pyc ! 2181 REAL(dp), DIMENSION(A2D(nn_hls-1),jpk) :: zdbdz_pyc ! Parametrised gradient of buoyancy in the pycnocline 2182 REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: z3ddz_pyc_1, z3ddz_pyc_2 ! Pycnocline gradient/shear profiles 2183 2183 !! 2184 2184 INTEGER :: ji, jj, jk, jkm_bld, jkf_mld, jkm_mld ! Loop indices 2185 2185 INTEGER :: istat ! Memory allocation status 2186 REAL( wp) :: zznd_d, zznd_ml, zznd_pyc, znd ! Temporary non-dimensional depths2187 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zsc_wth_1,zsc_ws_1 ! Temporary scales2188 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zsc_uw_1, zsc_uw_2 ! Temporary scales2189 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zsc_vw_1, zsc_vw_2 ! Temporary scales2190 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: ztau_sc_u ! Dissipation timescale at base of WML2191 REAL( wp) :: zbuoy_pyc_sc, zdelta_pyc !2192 REAL( wp) :: zl_c,zl_l,zl_eps ! Used to calculate turbulence length scale2193 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: za_cubic, zb_cubic ! Coefficients in cubic polynomial specifying2194 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zc_cubic, zd_cubic ! diffusivity in pycnocline2195 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zwt_pyc_sc_1, zws_pyc_sc_1 !2196 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zzeta_pyc !2197 REAL( wp) :: zomega, zvw_max !2198 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zuw_bse,zvw_bse ! Momentum, heat, and salinity fluxes2199 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zwth_ent,zws_ent ! at the top of the pycnocline2200 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: zsc_wth_pyc, zsc_ws_pyc ! Scales for pycnocline transport term2201 REAL( wp) :: ztmp !2202 REAL( wp) :: ztgrad, zsgrad, zbgrad ! Variables used to calculate pycnocline2186 REAL(dp) :: zznd_d, zznd_ml, zznd_pyc, znd ! Temporary non-dimensional depths 2187 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zsc_wth_1,zsc_ws_1 ! Temporary scales 2188 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zsc_uw_1, zsc_uw_2 ! Temporary scales 2189 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zsc_vw_1, zsc_vw_2 ! Temporary scales 2190 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: ztau_sc_u ! Dissipation timescale at base of WML 2191 REAL(dp) :: zbuoy_pyc_sc, zdelta_pyc ! 2192 REAL(dp) :: zl_c,zl_l,zl_eps ! Used to calculate turbulence length scale 2193 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: za_cubic, zb_cubic ! Coefficients in cubic polynomial specifying 2194 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zc_cubic, zd_cubic ! diffusivity in pycnocline 2195 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zwt_pyc_sc_1, zws_pyc_sc_1 ! 2196 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zzeta_pyc ! 2197 REAL(dp) :: zomega, zvw_max ! 2198 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zuw_bse,zvw_bse ! Momentum, heat, and salinity fluxes 2199 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zwth_ent,zws_ent ! at the top of the pycnocline 2200 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: zsc_wth_pyc, zsc_ws_pyc ! Scales for pycnocline transport term 2201 REAL(dp) :: ztmp ! 2202 REAL(dp) :: ztgrad, zsgrad, zbgrad ! Variables used to calculate pycnocline 2203 2203 !! ! gradients 2204 REAL( wp) :: zugrad, zvgrad ! Variables for calculating pycnocline shear2205 REAL( wp) :: zdtdz_pyc ! Parametrized gradient of temperature in2204 REAL(dp) :: zugrad, zvgrad ! Variables for calculating pycnocline shear 2205 REAL(dp) :: zdtdz_pyc ! Parametrized gradient of temperature in 2206 2206 !! ! pycnocline 2207 REAL( wp) :: zdsdz_pyc ! Parametrised gradient of salinity in2207 REAL(dp) :: zdsdz_pyc ! Parametrised gradient of salinity in 2208 2208 !! ! pycnocline 2209 REAL( wp) :: zdudz_pyc ! u-shear across the pycnocline2210 REAL( wp) :: zdvdz_pyc ! v-shear across the pycnocline2209 REAL(dp) :: zdudz_pyc ! u-shear across the pycnocline 2210 REAL(dp) :: zdvdz_pyc ! v-shear across the pycnocline 2211 2211 !!---------------------------------------------------------------------- 2212 2212 ! … … 2704 2704 !!---------------------------------------------------------------------- 2705 2705 INTEGER, INTENT(in ) :: Kmm ! Time-level index 2706 REAL( wp), DIMENSION(A2D(nn_hls)), INTENT( out) :: pmld ! == Estimated FK BLD used for MLE horizontal gradients == !2707 REAL( wp), DIMENSION(A2D(nn_hls)), INTENT(inout) :: pdtdx ! Horizontal gradient for Fox-Kemper parametrization2708 REAL( wp), DIMENSION(A2D(nn_hls)), INTENT(inout) :: pdtdy ! Horizontal gradient for Fox-Kemper parametrization2709 REAL( wp), DIMENSION(A2D(nn_hls)), INTENT(inout) :: pdsdx ! Horizontal gradient for Fox-Kemper parametrization2710 REAL( wp), DIMENSION(A2D(nn_hls)), INTENT(inout) :: pdsdy ! Horizontal gradient for Fox-Kemper parametrization2711 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) :: pdbds_mle ! Magnitude of horizontal buoyancy gradient2706 REAL(dp), DIMENSION(A2D(nn_hls)), INTENT( out) :: pmld ! == Estimated FK BLD used for MLE horizontal gradients == ! 2707 REAL(dp), DIMENSION(A2D(nn_hls)), INTENT(inout) :: pdtdx ! Horizontal gradient for Fox-Kemper parametrization 2708 REAL(dp), DIMENSION(A2D(nn_hls)), INTENT(inout) :: pdtdy ! Horizontal gradient for Fox-Kemper parametrization 2709 REAL(dp), DIMENSION(A2D(nn_hls)), INTENT(inout) :: pdsdx ! Horizontal gradient for Fox-Kemper parametrization 2710 REAL(dp), DIMENSION(A2D(nn_hls)), INTENT(inout) :: pdsdy ! Horizontal gradient for Fox-Kemper parametrization 2711 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) :: pdbds_mle ! Magnitude of horizontal buoyancy gradient 2712 2712 !! 2713 2713 INTEGER :: ji, jj, jk ! Dummy loop indices 2714 2714 INTEGER, DIMENSION(A2D(nn_hls)) :: jk_mld_prof ! Base level of MLE layer 2715 2715 INTEGER :: ikt, ikmax ! Local integers 2716 REAL( wp) :: zc2717 REAL( wp) :: zN2_c ! Local buoyancy difference from 10m value2718 REAL( wp), DIMENSION(A2D(nn_hls)) :: ztm2719 REAL( wp), DIMENSION(A2D(nn_hls)) :: zsm2720 REAL( wp), DIMENSION(A2D(nn_hls),jpts) :: ztsm_midu2721 REAL( wp), DIMENSION(A2D(nn_hls),jpts) :: ztsm_midv2722 REAL( wp), DIMENSION(A2D(nn_hls),jpts) :: zabu2723 REAL( wp), DIMENSION(A2D(nn_hls),jpts) :: zabv2724 REAL( wp), DIMENSION(A2D(nn_hls)) :: zmld_midu2725 REAL( wp), DIMENSION(A2D(nn_hls)) :: zmld_midv2716 REAL(dp) :: zc 2717 REAL(dp) :: zN2_c ! Local buoyancy difference from 10m value 2718 REAL(dp), DIMENSION(A2D(nn_hls)) :: ztm 2719 REAL(dp), DIMENSION(A2D(nn_hls)) :: zsm 2720 REAL(dp), DIMENSION(A2D(nn_hls),jpts) :: ztsm_midu 2721 REAL(dp), DIMENSION(A2D(nn_hls),jpts) :: ztsm_midv 2722 REAL(dp), DIMENSION(A2D(nn_hls),jpts) :: zabu 2723 REAL(dp), DIMENSION(A2D(nn_hls),jpts) :: zabv 2724 REAL(dp), DIMENSION(A2D(nn_hls)) :: zmld_midu 2725 REAL(dp), DIMENSION(A2D(nn_hls)) :: zmld_midv 2726 2726 !!---------------------------------------------------------------------- 2727 2727 ! … … 2813 2813 !!---------------------------------------------------------------------- 2814 2814 INTEGER, INTENT(in ) :: Kmm ! Time-level index 2815 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) :: pwb_fk2816 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phbl ! BL depth2817 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phmle ! MLE depth2818 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pwb_ent ! Buoyancy entrainment flux2819 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdbds_mle ! Magnitude of horizontal buoyancy gradient2815 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) :: pwb_fk 2816 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phbl ! BL depth 2817 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phmle ! MLE depth 2818 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pwb_ent ! Buoyancy entrainment flux 2819 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdbds_mle ! Magnitude of horizontal buoyancy gradient 2820 2820 !! 2821 2821 INTEGER :: ji, jj, jk ! Dummy loop indices 2822 REAL( wp), DIMENSION(A2D(nn_hls-1)) :: znd_param2823 REAL( wp) :: zthermal, zbeta2824 REAL( wp) :: zbuoy2825 REAL( wp) :: ztmp2826 REAL( wp) :: zpe_mle_layer2827 REAL( wp) :: zpe_mle_ref2828 REAL( wp) :: zdbdz_mle_int2822 REAL(dp), DIMENSION(A2D(nn_hls-1)) :: znd_param 2823 REAL(dp) :: zthermal, zbeta 2824 REAL(dp) :: zbuoy 2825 REAL(dp) :: ztmp 2826 REAL(dp) :: zpe_mle_layer 2827 REAL(dp) :: zpe_mle_ref 2828 REAL(dp) :: zdbdz_mle_int 2829 2829 !!---------------------------------------------------------------------- 2830 2830 ! … … 2925 2925 !!---------------------------------------------------------------------- 2926 2926 INTEGER, INTENT(in ) :: Kmm ! Time-level index 2927 REAL( wp), DIMENSION(A2D(nn_hls)), INTENT(in ) :: pmld ! == Estimated FK BLD used for MLE horiz gradients == !2928 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) :: phmle ! MLE depth2929 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) :: pvel_mle ! Velocity scale for dhdt with stable ML and FK2930 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) :: pdiff_mle ! Extra MLE vertical diff2931 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdbds_mle ! Magnitude of horizontal buoyancy gradient2932 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phbl ! BL depth2933 REAL( wp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pwb0tot ! Total surface buoyancy flux including insolation2927 REAL(dp), DIMENSION(A2D(nn_hls)), INTENT(in ) :: pmld ! == Estimated FK BLD used for MLE horiz gradients == ! 2928 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) :: phmle ! MLE depth 2929 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) :: pvel_mle ! Velocity scale for dhdt with stable ML and FK 2930 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) :: pdiff_mle ! Extra MLE vertical diff 2931 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pdbds_mle ! Magnitude of horizontal buoyancy gradient 2932 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: phbl ! BL depth 2933 REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in ) :: pwb0tot ! Total surface buoyancy flux including insolation 2934 2934 !! 2935 2935 INTEGER :: ji, jj, jk ! Dummy loop indices 2936 REAL( wp) :: ztmp2937 REAL( wp) :: zdbdz2938 REAL( wp) :: zdtdz2939 REAL( wp) :: zdsdz2940 REAL( wp) :: zthermal2941 REAL( wp) :: zbeta2942 REAL( wp) :: zbuoy2943 REAL( wp) :: zdb_mle2936 REAL(dp) :: ztmp 2937 REAL(dp) :: zdbdz 2938 REAL(dp) :: zdtdz 2939 REAL(dp) :: zdsdz 2940 REAL(dp) :: zthermal 2941 REAL(dp) :: zbeta 2942 REAL(dp) :: zbuoy 2943 REAL(dp) :: zdb_mle 2944 2944 !!---------------------------------------------------------------------- 2945 2945 ! … … 3002 3002 INTEGER :: ios ! Local integer 3003 3003 INTEGER :: ji, jj, jk ! Dummy loop indices 3004 REAL( wp) :: z1_t23005 !! 3006 REAL( wp), PARAMETER :: pp_large = -1e10_wp3004 REAL(dp) :: z1_t2 3005 !! 3006 REAL(dp), PARAMETER :: pp_large = -1e10_wp 3007 3007 !! 3008 3008 NAMELIST/namzdf_osm/ ln_use_osm_la, rn_osm_la, rn_osm_dstokes, nn_ave, nn_osm_wave, & … … 3233 3233 INTEGER :: ji, jj, jk ! Dummy loop indices 3234 3234 INTEGER :: iiki, ikt ! Local integer 3235 REAL( wp) :: zhbf ! Tempory scalars3236 REAL( wp) :: zN2_c ! Local scalar3237 REAL( wp) :: rho_c = 0.01_wp ! Density criterion for mixed layer depth3235 REAL(dp) :: zhbf ! Tempory scalars 3236 REAL(dp) :: zN2_c ! Local scalar 3237 REAL(dp) :: rho_c = 0.01_wp ! Density criterion for mixed layer depth 3238 3238 INTEGER, DIMENSION(jpi,jpj) :: imld_rst ! Level of mixed-layer depth (pycnocline top) 3239 3239 !!---------------------------------------------------------------------- … … 3294 3294 IF( lwp ) WRITE(numout,*) ' ===>>>> : calculating hbl computed from stratification' 3295 3295 ! w-level of the mixing and mixed layers 3296 CALL eos_rab( CASTWP(ts(:,:,:,:,Kmm)), rab_n, Kmm )3296 CALL eos_rab( ts(:,:,:,:,Kmm), rab_n, Kmm ) 3297 3297 CALL bn2( ts(:,:,:,:,Kmm), rab_n, rn2, Kmm ) 3298 3298 imld_rst(:,:) = nlb10 ! Initialization to the number of w ocean point … … 3340 3340 !! 3341 3341 INTEGER :: ji, jj, jk 3342 REAL( wp), DIMENSION(:,:,:), ALLOCATABLE :: ztrdt, ztrds ! 3D workspace3342 REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: ztrdt, ztrds ! 3D workspace 3343 3343 !!---------------------------------------------------------------------- 3344 3344 ! … … 3375 3375 ! 3376 3376 IF ( sn_cfctl%l_prtctl ) THEN 3377 CALL prt_ctl( tab3d_1= CASTWP(pts(:,:,:,jp_tem,Krhs)), clinfo1=' osm - Ta: ', mask1=tmask, &3378 & tab3d_2= CASTWP(pts(:,:,:,jp_sal,Krhs)), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' )3377 CALL prt_ctl( tab3d_1=pts(:,:,:,jp_tem,Krhs), clinfo1=' osm - Ta: ', mask1=tmask, & 3378 & tab3d_2=pts(:,:,:,jp_sal,Krhs), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 3379 3379 END IF 3380 3380 ! … … 3444 3444 !!---------------------------------------------------------------------- 3445 3445 CHARACTER(LEN=*), INTENT(in ) :: cdname 3446 REAL( wp), DIMENSION(:,:), INTENT(in ) :: posmdia2d3446 REAL(dp), DIMENSION(:,:), INTENT(in ) :: posmdia2d 3447 3447 !!---------------------------------------------------------------------- 3448 3448 ! … … 3467 3467 !!---------------------------------------------------------------------- 3468 3468 CHARACTER(LEN=*), INTENT(in ) :: cdname 3469 REAL( wp), DIMENSION(:,:,:), INTENT(in ) :: posmdia3d3469 REAL(dp), DIMENSION(:,:,:), INTENT(in ) :: posmdia3d 3470 3470 !!---------------------------------------------------------------------- 3471 3471 !
Note: See TracChangeset
for help on using the changeset viewer.