Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -257,15 +257,24 @@ help=Relax to SHARPEST: the stable stability function requested relaxes
=above the BL top" is selected this option will also smoothly merge
=to the asymptotic mixing length by 3km above the surface.
=
=Corrected NTML is as the original but corrects the level
=Original with corrected NTML is as the original but corrects the level
=(ntml_local) below which the boundary layer value is used.
=The final option extends this version to use interactively diagnosed
=turbulent layer depths throughout the atmospheric column.
=
=Original with diagnosed turbulent layer depths extends this version to
=use interactively diagnosed turbulent layer depths throughout the
=atmospheric column.
=
=Reduce smoothly towards layer boundaries calculates the lengthscale
=within each turbulent layer (including the surface layer) more smoothly,
=by interpolating between sub- and super- critical levels to find the
=base and top heights, and tapering the mixing length down near the base
=and top.
ns=namelist/Science/UM Boundary layer
sort-key=Panel-A05
value-titles=Relax to SHARPEST,Original with corrected NTML,
=Original with diagnosed turbulent layer depths
values='to_sharp','ntml_corrected','free_trop_layer'
=Original with diagnosed turbulent layer depths,
=Reduce smoothly towards layer boundaries
values='to_sharp','ntml_corrected','free_trop_layer','smooth_to_boundaries'

[namelist:blayer=fric_heating]
compulsory=true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ module um_physics_init_mod
free_atm_mix, free_atm_mix_to_sharp, &
free_atm_mix_ntml_corrected, &
free_atm_mix_free_trop_layer, &
free_atm_mix_smooth_to_boundaries, &
interp_local, interp_local_gradients, &
interp_local_cf_dbdz, &
new_kcloudtop, p_unstable, &
Expand Down Expand Up @@ -336,10 +337,11 @@ subroutine um_physics_init()
DynDiag_ZL_corrn, blend_allpoints, ng_stress, &
BrownGrant97_limited, BrownGrant97_original, lem_std, &
lem_adjust, interactive_fluxes, specified_fluxes_only, &
except_disc_inv, ntml_level_corrn, free_trop_layers, sharpest, &
lem_stability, sg_shear_enh_lambda, l_new_kcloudtop, buoy_integ, &
l_reset_dec_thres, DynDiag_ZL_CuOnly, i_interp_local, &
i_interp_local_gradients, l_noice_in_turb, l_use_var_fixes, &
except_disc_inv, ntml_level_corrn, free_trop_layers, &
smooth_to_bdys, sharpest, lem_stability, sg_shear_enh_lambda, &
l_new_kcloudtop, buoy_integ, l_reset_dec_thres, DynDiag_ZL_CuOnly,&
i_interp_local, i_interp_local_gradients, &
l_noice_in_turb, l_use_var_fixes, &
i_interp_local_cf_dbdz, tke_diag_fac, a_ent_2, dec_thres_cloud, &
dec_thres_cu, near_neut_z_on_l, blend_gridindep_fa, &
specified_fluxes_tstar, buoy_integ_low, num_sweeps_bflux, &
Expand Down Expand Up @@ -731,6 +733,8 @@ subroutine um_physics_init()
local_fa = ntml_level_corrn
case(free_atm_mix_free_trop_layer)
local_fa = free_trop_layers
case(free_atm_mix_smooth_to_boundaries)
local_fa = smooth_to_bdys
end select

pstb = 2.0_r_um
Expand Down Expand Up @@ -765,9 +769,9 @@ subroutine um_physics_init()
sg_orog_mixing = sg_shear_enh_lambda
end select

! Switch for corrections to variance diagnostics
l_use_var_fixes = .true.
! TKE scaling parameter and switch for fixes to variance diagnostics
tke_diag_fac = 1.0_r_bl
l_use_var_fixes = .true.
zhloc_depth_fac = real(zhloc_depth_fac_in, r_bl)

if (topography == topography_horizon) then
Expand Down
1 change: 1 addition & 0 deletions rose-stem/app/lfric_atm/opt/rose-app-comorph_dev.conf
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
[namelist:blayer]
dzrad_disc_opt='smooth_1p5'
entr_smooth_dec='taper_zh'
free_atm_mix='smooth_to_boundaries'
kprof_cu='buoy_integ_low'
l_converge_ga=.true.
l_use_sml_dsc_fixes=.true.
Expand Down
20 changes: 12 additions & 8 deletions science/physics_schemes/source/boundary_layer/bdy_expl2.F90
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ subroutine bdy_expl2 ( &
nl_bl_levels, local_fa, free_trop_layers, to_sharp_across_1km, &
sbl_op, equilibrium_sbl, one_third, two_thirds, blending_option, &
blend_except_cu, blend_cth_shcu_only, sg_shear, sg_shear_enh_lambda, &
max_tke, tke_diag_fac, &
max_tke, tke_diag_fac, smooth_to_bdys, &
i_interp_local, i_interp_local_gradients, i_interp_local_cf_dbdz, &
shallow_cu_maxtop, sc_cftol, near_neut_z_on_l, zero, one, one_half
use cloud_inputs_mod, only: i_rhcpt, forced_cu, i_cld_vn, i_pc2_init_method, &
Expand Down Expand Up @@ -670,6 +670,8 @@ subroutine bdy_expl2 ( &
! boundary layer (metres) as
! determined from the local
! Richardson number profile.
zdsc_base(pdims%i_start:pdims%i_end,pdims%j_start:pdims%j_end), &
! Height of base of K_top in DSC
dsldz(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end, &
bl_levels), &
! TL+gz/cp gradient between
Expand Down Expand Up @@ -945,7 +947,7 @@ subroutine bdy_expl2 ( &
! heterogeneous land surface this is poorly defined and we can't use Rib
! from the surface scheme as vertically averaging Ri is numerically
! unstable. So, over land, only the average temperature gradient is used
if (.not. l_use_surf_in_ri) then
if ( .not. l_use_surf_in_ri ) then
! if not using surface variables in Ri (l_use_surf_in_ri=false) we
! extrapolate dbdz itself from level 2, with the sl and qw gradients being
! used in the variance calculations and with i_interp_local_cf_dbdz
Expand Down Expand Up @@ -1859,7 +1861,7 @@ subroutine bdy_expl2 ( &
! INOUT fields
ftl,fqw,zhnl,dzh,cumulus,ntml_nl,w,etadot,t1_sd,q1_sd,wtrac_bl, &
! out fields
rhokmz,rhokhz,rhokm_top,rhokh_top,zhsc, &
rhokmz,rhokhz,rhokm_top,rhokh_top,zhsc,zdsc_base, &
unstable,dsc,coupled,sml_disc_inv,dsc_disc_inv, &
ntdsc,nbdsc,f_ngstress,tke_nl, &
grad_t_adj, grad_q_adj, &
Expand All @@ -1882,7 +1884,7 @@ subroutine bdy_expl2 ( &
!$OMP SHARED(pdims,unstable,fb_surf,cumulus,l_shallow,sml_disc_inv,ntpar, &
!$OMP ntml_nl,zhnl,grad_t_adj,grad_q_adj,dsc,dsc_disc_inv,ntdsc,nbdsc, &
!$OMP zhsc,dzh,coupled,kent,kent_dsc,t_frac,zrzi,we_lim,t_frac_dsc, &
!$OMP zrzi_dsc,we_lim_dsc,kplume)
!$OMP zdsc_base,zrzi_dsc,we_lim_dsc,kplume)
!$OMP do SCHEDULE(STATIC)
do j = pdims%j_start, pdims%j_end
do i = pdims%i_start, pdims%i_end
Expand All @@ -1903,6 +1905,7 @@ subroutine bdy_expl2 ( &
ntdsc(i,j) = 0
nbdsc(i,j) = 0
zhsc(i,j) = zero
zdsc_base(i,j) = zero
coupled(i,j) = .false.
! entrainment variables for non-local tracer mixing
kent(i,j) = 2
Expand Down Expand Up @@ -1988,8 +1991,9 @@ subroutine bdy_expl2 ( &
! in levels/logicals
bl_levels,k_log_layr,BL_diag, &
! in fields
sigma_h,flandg,dvdzm,ri,rho_wet_tq,z_uv,z_tq,z0m_eff_gb,zhpar,ntpar, &
ntml_nl,ntdsc,nbdsc,l_shallow_cth,rmlmax2,rneutml_sq,delta_smag, &
sigma_h,flandg,dvdzm,ri,rho_wet_tq,z_uv,z_tq,z0m_eff_gb,zhnl,zhpar,zhsc, &
zdsc_base,ntpar,ntml_nl,ntdsc,nbdsc,l_shallow_cth,rmlmax2,rneutml_sq, &
delta_smag, &
! in/out fields
cumulus,weight_1dbl, &
! out fields
Expand Down Expand Up @@ -2025,7 +2029,7 @@ subroutine bdy_expl2 ( &
+ (weight2/weight1)*weight_1dbl(i,j,k)
end if

if (local_fa == free_trop_layers) then
if (local_fa == free_trop_layers .or. local_fa == smooth_to_bdys) then
! elh already included in rhokh_th so no need to calculate
! here, but interpolate elh separately for diagnostic
if (BL_diag%l_elh3d) then
Expand Down Expand Up @@ -2076,7 +2080,7 @@ subroutine bdy_expl2 ( &
rhokh(i,j,k) = elh_rho(i,j,k) * rhokh(i,j,k)

end if ! test on sbl_op
end if ! test on local_fa = free_trop_layers
end if ! test on local_fa = free_trop_layers or smooth_to_bdys

! Finally multiply RHOKH by dry density
if (l_mr_physics) &
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,10 @@ module bl_option_mod
! free_trop_layers (=3) => as "ntml_level_corrn" but also diagnose
! FA turbulent layer depths
integer, parameter :: free_trop_layers = 3
! smooth_to_bdys (=4) => as "free_trop_layers" but smoothly interpolate
! between sub- and super-critical model-levels to find depth of turbulent
! layers, and taper the mixing-length down near top and bottom of each layer.
integer, parameter :: smooth_to_bdys = 4

! 10 Switch to keep local mixing in free atmosphere
integer :: Keep_Ri_FA = imdi
Expand Down
Loading
Loading