From 878b733254d2cdd3be92d545cd9b0b145964e554 Mon Sep 17 00:00:00 2001 From: Adrian Lock <87426032+Adrian-Lock@users.noreply.github.com> Date: Tue, 30 Jun 2026 18:41:12 +0100 Subject: [PATCH 01/26] Add meta data fro blending option 4 --- .../source/support/um_physics_init_mod.f90 | 6 ++++++ .../lfric-gungho/HEAD/rose-meta.conf | 20 +++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/interfaces/physics_schemes_interface/source/support/um_physics_init_mod.f90 b/interfaces/physics_schemes_interface/source/support/um_physics_init_mod.f90 index b1ca9c1fe0..ff596e0990 100644 --- a/interfaces/physics_schemes_interface/source/support/um_physics_init_mod.f90 +++ b/interfaces/physics_schemes_interface/source/support/um_physics_init_mod.f90 @@ -342,6 +342,7 @@ subroutine um_physics_init() 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, & + blend_cth_shcu_only, shallow_cu_maxtop, & specified_fluxes_tstar, buoy_integ_low, num_sweeps_bflux, & l_use_sml_dsc_fixes, l_converge_ga use cloud_inputs_mod, only: i_cld_vn, forced_cu, i_rhcpt, i_cld_area, & @@ -1552,6 +1553,11 @@ subroutine um_physics_init() l_subfilter_horiz = .true. l_subfilter_vert = .true. blending_option = blend_gridindep_fa + case( method_blend_cth_shcu_only ) + l_subfilter_horiz = .true. + l_subfilter_vert = .true. + blending_option = blend_cth_shcu_only + shallow_cu_maxtop = method_shallow_cu_maxtop end select else ! not Smagorinsky diff --git a/science/gungho/rose-meta/lfric-gungho/HEAD/rose-meta.conf b/science/gungho/rose-meta/lfric-gungho/HEAD/rose-meta.conf index 4380951b78..7c84845e15 100644 --- a/science/gungho/rose-meta/lfric-gungho/HEAD/rose-meta.conf +++ b/science/gungho/rose-meta/lfric-gungho/HEAD/rose-meta.conf @@ -3583,12 +3583,28 @@ help=Options for Smagorinsky subgrid mixing scheme: =_________________________________________________________________ =Blended scheme + 1D BL above = As above, but relaxes to 1D BL above BL + =_________________________________________________________________ + =Blended scheme + cloud-top of for shallow cu + = As above, but use cloud-top as blending length-scale only for + = shallow cu = = WARNING: This option currently does not conserve energy and as = a result may be unstable. sort-key=Panel-A05 -value-titles=3D Smagorinsky, 2D Smagorinsky + 1D BL, Blended scheme + Smag above, Blended scheme + 1D BL above -values='3d_smag', '2d_smag', 'blend_smag_fa','blend_1dbl_fa' +trigger=namelist:mixing=shallow_cu_maxtop: 'blend_cth_shcu_only' ; +value-titles=3D Smagorinsky, 2D Smagorinsky + 1D BL, Blended scheme + Smag above, + =Blended scheme + 1D BL above, Blended scheme with CTH for shallow cu only +values='3d_smag', '2d_smag', 'blend_smag_fa','blend_1dbl_fa','blend_cth_shcu_only' + +[namelist:mixing=shallow_cu_maxtop] +compulsory=true +description=Max permitted cloud top height for shallow cu blending +help=The maximum permitted cloud top height (in metres) for shallow cumulus + =to be diagosed, as then used for method=blending_option=blend_cth_shcu_only + =to use the cumulus parcel top height as the length scale in the blending weight +!kind=default +sort-key=Panel-A05a +type=real [namelist:mixing=mix_factor] compulsory=true From ab43d37d5fc00616ee501c2a8f7568325a83113d Mon Sep 17 00:00:00 2001 From: Adrian Lock <87426032+Adrian-Lock@users.noreply.github.com> Date: Tue, 30 Jun 2026 22:48:29 +0100 Subject: [PATCH 02/26] Bug fixes --- .../source/support/um_physics_init_mod.f90 | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/interfaces/physics_schemes_interface/source/support/um_physics_init_mod.f90 b/interfaces/physics_schemes_interface/source/support/um_physics_init_mod.f90 index ff596e0990..532828f06a 100644 --- a/interfaces/physics_schemes_interface/source/support/um_physics_init_mod.f90 +++ b/interfaces/physics_schemes_interface/source/support/um_physics_init_mod.f90 @@ -168,14 +168,16 @@ module um_physics_init_mod heavy_rain_evap_fac_in => & heavy_rain_evap_fac - use mixing_config_mod, only : smagorinsky, & - mixing_method => method, & - method_3d_smag, & - method_2d_smag, & - method_blend_smag_fa, & - method_blend_1dbl_fa, & - mix_factor_in => mix_factor, & - leonard_term + use mixing_config_mod, only : smagorinsky, & + mixing_method => method, & + method_3d_smag, & + method_2d_smag, & + method_blend_smag_fa, & + method_blend_1dbl_fa, & + method_blend_cth_shcu_only, & + shallow_cu_maxtop_in => shallow_cu_maxtop, & + mix_factor_in => mix_factor, & + leonard_term use radiation_config_mod, only : topography, topography_horizon @@ -1557,7 +1559,7 @@ subroutine um_physics_init() l_subfilter_horiz = .true. l_subfilter_vert = .true. blending_option = blend_cth_shcu_only - shallow_cu_maxtop = method_shallow_cu_maxtop + shallow_cu_maxtop = real(shallow_cu_maxtop_in, r_bl) end select else ! not Smagorinsky From 3a5cf6e0bbc2042006928573691c8b438d5f66af Mon Sep 17 00:00:00 2001 From: Adrian Lock <87426032+Adrian-Lock@users.noreply.github.com> Date: Thu, 2 Jul 2026 16:08:40 +0100 Subject: [PATCH 03/26] Extras for blending opt4: include blended L cap by 1d L; use actual shallow CTH instead of zhpar --- .../source/boundary_layer/ex_coef.F90 | 94 ++++++++++--------- 1 file changed, 52 insertions(+), 42 deletions(-) diff --git a/science/physics_schemes/source/boundary_layer/ex_coef.F90 b/science/physics_schemes/source/boundary_layer/ex_coef.F90 index 01164c3149..abd6fd8612 100644 --- a/science/physics_schemes/source/boundary_layer/ex_coef.F90 +++ b/science/physics_schemes/source/boundary_layer/ex_coef.F90 @@ -27,7 +27,7 @@ subroutine ex_coef ( & bl_levels, k_log_layr, BL_diag, & ! in fields sigma_h,flandg,dvdzm,ri,rho_wet_tq,z_uv,z_tq,z0m,zhpar,ntpar, & - ntml_nl,ntdsc,nbdsc,l_shallow_cth,rmlmax2,rneutml_sq, delta_smag, & + ntml_nl,ntdsc,nbdsc,shallow_cth,rmlmax2,rneutml_sq, delta_smag, & ! in/out fields cumulus,weight_1dbl, & ! out fields @@ -48,7 +48,7 @@ subroutine ex_coef ( & lambda_fac, beta_bl, beta_fa, rlinfac, linear0, & to_sharp_across_1km, ntml_level_corrn, free_trop_layers, two_thirds, & blending_option, blend_except_cu, blend_gridindep_fa, blend_cth_shcu_only, & - extended_tail, zero, one, one_half + shallow_cu_maxtop, extended_tail, zero, one, one_half use conversions_mod, only: pi => pi_bl use gen_phys_inputs_mod, only: l_mr_physics @@ -70,56 +70,54 @@ subroutine ex_coef ( & integer, intent(in) :: & bl_levels, & - ! in maximum number of boundary layer levels + ! IN maximum number of boundary layer levels k_log_layr - ! in num of levs requiring log-profile correction + ! IN num of levs requiring log-profile correction integer, intent(in) :: & ntml_nl(pdims%i_start:pdims%i_end,pdims%j_start:pdims%j_end), & - ! in Number of model layers in the turbulently + ! IN Number of model layers in the turbulently ! mixed layer as determined from the non-local ! scheme. ntdsc(pdims%i_start:pdims%i_end,pdims%j_start:pdims%j_end), & - ! in Top level of any decoupled Sc + ! IN Top level of any decoupled Sc nbdsc(pdims%i_start:pdims%i_end,pdims%j_start:pdims%j_end), & - ! in Bottom level of any decoupled Sc layer. + ! IN Bottom level of any decoupled Sc layer. ntpar(pdims%i_start:pdims%i_end,pdims%j_start:pdims%j_end) - ! in Top level of parcel ascent + ! IN Top level of parcel ascent real(kind=r_bl), intent(in) :: & sigma_h(pdims%i_start:pdims%i_end,pdims%j_start:pdims%j_end), & - ! in Standard deviation of subgrid + ! IN Standard deviation of subgrid ! orography (m) rho_wet_tq(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end, & bl_levels), & - ! in density on theta levels; + ! IN density on theta levels; ! used in RHOKM so wet density rmlmax2(pdims%i_start:pdims%i_end,pdims%j_start:pdims%j_end,bl_levels), & - ! in Square of asymptotic mixing length for Smagorinsky scheme + ! IN Square of asymptotic mixing length for Smagorinsky scheme z_uv(pdims%i_start:pdims%i_end,pdims%j_start:pdims%j_end,bl_levels+1), & - ! in Z_UV(K) is height of u level k + ! IN Z_UV(K) is height of u level k z_tq(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end,bl_levels), & - ! in Z_TQ(K) is height of T,Q level k + ! IN Z_TQ(K) is height of T,Q level k ! NOTE: RI(K) is held at Z_TQ(K-1) zhpar(pdims%i_start:pdims%i_end,pdims%j_start:pdims%j_end), & - ! in Height of top of initial parcel ascent + ! IN Height of top of initial parcel ascent z0m(pdims%i_start:pdims%i_end,pdims%j_start:pdims%j_end), & - ! in Roughness length for momentum (m). + ! IN Roughness length for momentum (m). dvdzm(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end, & 2:bl_levels), & - ! in Modulus of wind shear. + ! IN Modulus of wind shear. ri(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end,2:bl_levels), & - ! in Local Richardson number. + ! IN Local Richardson number. flandg(pdims_s%i_start:pdims_s%i_end,pdims_s%j_start:pdims_s%j_end), & - ! in Land fraction on all tiles. + ! IN Land fraction on all tiles. rneutml_sq(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end,bl_levels), & - ! in Square of the neutral mixing length for Smagorinsky - delta_smag(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) - ! in delta_x used by Smagorinsky - -logical, intent(in) :: & - l_shallow_cth(pdims%i_start:pdims%i_end,pdims%j_start:pdims%j_end) - ! in Flag to indicate shallow convection based on cl-top + ! IN Square of the neutral mixing length for Smagorinsky + delta_smag(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end), & + ! IN delta_x used by Smagorinsky + shallow_cth(pdims%i_start:pdims%i_end,pdims%j_start:pdims%j_end) + ! IN cloud-top height for identifying shallow cu in blending ! Declaration of new BL diagnostics. type (strnewbldiag), intent(in out) :: BL_diag @@ -140,44 +138,44 @@ subroutine ex_coef ( & real(kind=r_bl), intent(out) :: & rhokm(pdims_s%i_start:pdims_s%i_end,pdims_s%j_start:pdims_s%j_end, & bl_levels), & - ! out Layer K-1 - to - layer K exchange coefficient + ! OUT Layer K-1 - to - layer K exchange coefficient ! for momentum, on UV-grid with first and last ! levels set to "missing data" rhokh(pdims%i_start:pdims%i_end,pdims%j_start:pdims%j_end, & bl_levels), & - ! out Layer K-1 - to - layer K exchange coefficient + ! OUT Layer K-1 - to - layer K exchange coefficient ! for scalars (but currently on th-levels) ! On out: still to be multiplied by rho(if l_mr_physics) ! and, for Ri-based scheme, interpolated to ! rho levels in BDY_EXPL2 zh_local(pdims%i_start:pdims%i_end,pdims%j_start:pdims%j_end) - ! out Mixing layer height (m). + ! OUT Mixing layer height (m). integer, intent(out) :: & ntml_local(pdims%i_start:pdims%i_end,pdims%j_start:pdims%j_end) - ! out Number of model layers in the turbulently + ! OUT Number of model layers in the turbulently ! mixed layer as determined from the local ! Richardson number profile. real(kind=r_bl), intent(out) :: & lambda_min, & - ! out Min value of length scale LAMBDA. + ! OUT Min value of length scale LAMBDA. fm_3d(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end,bl_levels), & - ! out stability function for momentum transport. + ! OUT stability function for momentum transport. ! level 1 value is dummy for use in diagnostics fh_3d(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end,bl_levels), & - ! out stability function for heat and moisture. + ! OUT stability function for heat and moisture. ! level 1 value is dummy for use in diagnostics tke_loc(pdims%i_start:pdims%i_end,pdims%j_start:pdims%j_end, & 2:bl_levels), & - ! out Ri-based scheme diagnosed TKE + ! OUT Ri-based scheme diagnosed TKE elm(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end,2:bl_levels), & - ! out Mixing length for momentum + ! OUT Mixing length for momentum elh(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end,2:bl_levels), & - ! out Mixing length for scalars on theta levels + ! OUT Mixing length for scalars on theta levels elh_rho(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end, & 2:bl_levels) - ! out Mixing length for scalars on rho levels + ! OUT Mixing length for scalars on rho levels !----------------------------------------------------------------------- ! Local and other symbolic constants :- @@ -187,6 +185,7 @@ subroutine ex_coef ( & real(kind=r_bl) :: eh,em,g0,dh,dm,r_c_tke real(kind=r_bl) :: subbmin,subbmax,subcmin,subcmax real(kind=r_bl) :: a_ri,b_ri +real(kind=r_bl) :: elm_1d, elh_1d parameter ( & eh=25.0_r_bl, & @@ -651,12 +650,13 @@ subroutine ex_coef ( & !----------------------------------------------------------------------- do k = 2, bl_levels !$OMP PARALLEL DEFAULT(none) & -!$OMP PRIVATE(z_scale,j,i,lambdam,lambdah, & -!$OMP lambdah_rho,vkz,f_log,zz,zht,zfa,beta) & +!$OMP PRIVATE(z_scale,j,i,lambdam,lambdah,lambdah_rho,elm_1d,elh_1d, & +!$OMP vkz,f_log,zz,zht,zfa,beta) & !$OMP SHARED(k,pdims,ri,ricrit,flandg,ntml_local,ntml_nl,z_tq, & !$OMP l_rp2,lambda_min,par_mezcla_rp,zh_local,turb_length,k_log_layr, & -!$OMP z_uv,z0m,elm,elh,elh_rho,blending_option,cumulus,l_shallow_cth,zhpar, & -!$OMP ntdsc,weight_1dbl,weight_bltop,delta_smag,rneutml_sq,BL_diag,local_fa) +!$OMP z_uv,z0m,elm,elh,elh_rho,blending_option,cumulus,shallow_cth,zhpar, & +!$OMP ntdsc,weight_1dbl,weight_bltop,delta_smag,rneutml_sq,BL_diag,local_fa, & +!$OMP shallow_cu_maxtop) !----------------------------------------------------------------- ! 2.1 Calculate asymptotic mixing lengths LAMBDAM and LAMBDAH !----------------------------------------------------------------- @@ -733,10 +733,13 @@ subroutine ex_coef ( & ! zht = interface between BL and FA zht = max( z_uv(i,j,ntml_nl(i,j)+1) , zh_local(i,j) ) ! Relevant scale in cumulus layers can be cloud top height, zhpar - if ( cumulus(i,j) .and. ( blending_option /= blend_cth_shcu_only .or. & - l_shallow_cth(i,j) ) ) then + if ( cumulus(i,j) .and. blending_option /= blend_cth_shcu_only ) then z_scale = max( z_scale, zhpar(i,j) ) zht = max( zht, zhpar(i,j) ) + else if ( cumulus(i,j) .and. blending_option == blend_cth_shcu_only & + .and. shallow_cth(i,j) < shallow_cu_maxtop ) THEN + z_scale = max( z_scale, shallow_cth(i,j) ) + zht = max( zht, shallow_cth(i,j) ) end if ! BL top includes decoupled stratocu layer, if it exists if (ntdsc(i,j) > 0) zht = max( zht, z_uv(i,j,ntdsc(i,j)+1) ) @@ -809,10 +812,17 @@ subroutine ex_coef ( & end if end if + elm_1d = elm(i,j,k) + elh_1d = elh(i,j,k) elm(i,j,k) = elm(i,j,k)*weight_1dbl(i,j,k) + & sqrt(rneutml_sq(i,j,k-1))*(one-weight_1dbl(i,j,k)) elh(i,j,k) = elh(i,j,k)*weight_1dbl(i,j,k) + & sqrt(rneutml_sq(i,j,k-1))*(one-weight_1dbl(i,j,k)) + if (blending_option == blend_cth_shcu_only ) then + ! restrict blended lengthscale to be at most the 1d + elm(i,j,k) = MIN( elm_1d, elm(i,j,k) ) + elh(i,j,k) = MIN( elh_1d, elh(i,j,k) ) + end if end do end do !$OMP end do From 3874e79f3beb9226c24a595e636f379dc869f39a Mon Sep 17 00:00:00 2001 From: Adrian Lock <87426032+Adrian-Lock@users.noreply.github.com> Date: Thu, 2 Jul 2026 18:25:47 +0100 Subject: [PATCH 04/26] Add code needed in bdy_expl2 --- .../source/boundary_layer/bdy_expl2.F90 | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/science/physics_schemes/source/boundary_layer/bdy_expl2.F90 b/science/physics_schemes/source/boundary_layer/bdy_expl2.F90 index 557125c8ad..bbe0def88a 100644 --- a/science/physics_schemes/source/boundary_layer/bdy_expl2.F90 +++ b/science/physics_schemes/source/boundary_layer/bdy_expl2.F90 @@ -611,6 +611,9 @@ subroutine bdy_expl2 ( & 2:bl_levels), & ! Mixing length for heat (m), ! held on theta and rho levels, resp. + shallow_cth(pdims%i_start:pdims%i_end,pdims%j_start:pdims%j_end), & + ! cf_bulk cloud top height used in blended BL + ! for shallow convection fm_3d(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end,bl_levels), & ! stability function for momentum transport ! level 1 value is dummy @@ -726,9 +729,6 @@ subroutine bdy_expl2 ( & ! Flag for having reached ! the top of the turbulently mixed ! layer. - l_shallow_cth(pdims%i_start:pdims%i_end,pdims%j_start:pdims%j_end), & - ! Flag to indicate shallow convection based on - ! cf_bulk cloud top height cloud_base_found(pdims%i_start:pdims%i_end,pdims%j_start:pdims%j_end), & ! Flag for having reached cloud base cloud_top_found(pdims%i_start:pdims%i_end,pdims%j_start:pdims%j_end) @@ -1943,10 +1943,11 @@ subroutine bdy_expl2 ( & !$OMP SCHEDULE(STATIC) & !$OMP DEFAULT(none) & !$OMP private(j,i) & -!$OMP SHARED(pdims,l_shallow_cth) +!$OMP SHARED(pdims,shallow_cth) do j = pdims%j_start, pdims%j_end do i = pdims%i_start, pdims%i_end - l_shallow_cth(i,j) = .false. + shallow_cth(i,j) = zero ! initialise to zero for case of no cloud + ! - will then blend using BL depth end do end do !$OMP end PARALLEL do @@ -1958,8 +1959,8 @@ subroutine bdy_expl2 ( & !$OMP PARALLEL & !$OMP DEFAULT(none) & !$OMP private(i,j,k) & -!$OMP SHARED(pdims,bl_levels,z_uv,l_shallow_cth,cumulus,ntml,cf_bulk, & -!$OMP shallow_cu_maxtop,cloud_base_found,cloud_top_found) +!$OMP SHARED(pdims,bl_levels,z_uv,shallow_cth,cumulus,ntml,cf_bulk, & +!$OMP cloud_base_found,cloud_top_found) !$OMP do SCHEDULE(STATIC) do j = pdims%j_start, pdims%j_end do i = pdims%i_start, pdims%i_end @@ -1982,7 +1983,7 @@ subroutine bdy_expl2 ( & cf_bulk(i,j,k+1) < sc_cftol ) then ! got to cloud-top cloud_top_found(i,j) = .true. - l_shallow_cth(i,j) = z_uv(i,j,k+1) < shallow_cu_maxtop + shallow_cth(i,j) = z_uv(i,j,k+1) end if end do end do @@ -1998,7 +1999,7 @@ subroutine bdy_expl2 ( & 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, & + ntml_nl,ntdsc,nbdsc,shallow_cth,rmlmax2,rneutml_sq,delta_smag, & ! in/out fields cumulus,weight_1dbl, & ! out fields @@ -2620,7 +2621,7 @@ subroutine bdy_expl2 ( & bl_type_6(i,j) = one ! Label this shallow regime as 2.0_r_bl here, to be able to identify it ! in diagnostics_bl, but the "cumulus" stash output will still be 1.0 - if (l_shallow_cth(i,j)) bl_type_6(i,j) = 2.0_r_bl + if (shallow_cth(i,j) < shallow_cu_maxtop) bl_type_6(i,j) = 2.0_r_bl end if end if From 270f63c53b01a350f9b074b85dfbb0dc9467e537 Mon Sep 17 00:00:00 2001 From: Adrian Lock <87426032+Adrian-Lock@users.noreply.github.com> Date: Mon, 6 Jul 2026 13:55:06 +0100 Subject: [PATCH 05/26] Put mixing length cap on its own switch, cap_blended_ml --- .../source/support/um_physics_init_mod.f90 | 6 +++++- .../gungho/rose-meta/lfric-gungho/HEAD/rose-meta.conf | 11 ++++++++++- .../source/boundary_layer/bl_option_mod.F90 | 7 ++++++- .../physics_schemes/source/boundary_layer/ex_coef.F90 | 6 +++--- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/interfaces/physics_schemes_interface/source/support/um_physics_init_mod.f90 b/interfaces/physics_schemes_interface/source/support/um_physics_init_mod.f90 index 532828f06a..ff0ff0fdbd 100644 --- a/interfaces/physics_schemes_interface/source/support/um_physics_init_mod.f90 +++ b/interfaces/physics_schemes_interface/source/support/um_physics_init_mod.f90 @@ -175,6 +175,7 @@ module um_physics_init_mod method_blend_smag_fa, & method_blend_1dbl_fa, & method_blend_cth_shcu_only, & + cap_blended_ml_in => cap_blended_ml, & shallow_cu_maxtop_in => shallow_cu_maxtop, & mix_factor_in => mix_factor, & leonard_term @@ -344,7 +345,7 @@ subroutine um_physics_init() 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, & - blend_cth_shcu_only, shallow_cu_maxtop, & + blend_cth_shcu_only, shallow_cu_maxtop, cap_blended_ml, & specified_fluxes_tstar, buoy_integ_low, num_sweeps_bflux, & l_use_sml_dsc_fixes, l_converge_ga use cloud_inputs_mod, only: i_cld_vn, forced_cu, i_rhcpt, i_cld_area, & @@ -1533,6 +1534,9 @@ subroutine um_physics_init() mix_factor = real(mix_factor_in, r_um) turb_startlev_vert = 2 turb_endlev_vert = bl_levels + if (mixing_method /= method_3d_smag) then + cap_blended_ml = cap_blended_ml_in + end if ! Options which are bespoke to the choice of scheme select case ( mixing_method ) diff --git a/science/gungho/rose-meta/lfric-gungho/HEAD/rose-meta.conf b/science/gungho/rose-meta/lfric-gungho/HEAD/rose-meta.conf index 7c84845e15..5b67b623e8 100644 --- a/science/gungho/rose-meta/lfric-gungho/HEAD/rose-meta.conf +++ b/science/gungho/rose-meta/lfric-gungho/HEAD/rose-meta.conf @@ -3596,6 +3596,15 @@ value-titles=3D Smagorinsky, 2D Smagorinsky + 1D BL, Blended scheme + Smag above =Blended scheme + 1D BL above, Blended scheme with CTH for shallow cu only values='3d_smag', '2d_smag', 'blend_smag_fa','blend_1dbl_fa','blend_cth_shcu_only' +[namelist:mixing=cap_blended_ml] +compulsory=true +description=Cap the blended mixing length by the 1D +help=If true this caps the magnitude of the blended 1D-3D mixing length + =by the 1D mixing length +!kind=default +sort-key=Panel-A05a +type=logical + [namelist:mixing=shallow_cu_maxtop] compulsory=true description=Max permitted cloud top height for shallow cu blending @@ -3603,7 +3612,7 @@ help=The maximum permitted cloud top height (in metres) for shallow cumulus =to be diagosed, as then used for method=blending_option=blend_cth_shcu_only =to use the cumulus parcel top height as the length scale in the blending weight !kind=default -sort-key=Panel-A05a +sort-key=Panel-A05b type=real [namelist:mixing=mix_factor] diff --git a/science/physics_schemes/source/boundary_layer/bl_option_mod.F90 b/science/physics_schemes/source/boundary_layer/bl_option_mod.F90 index faaa5a96ad..ec127d77d4 100644 --- a/science/physics_schemes/source/boundary_layer/bl_option_mod.F90 +++ b/science/physics_schemes/source/boundary_layer/bl_option_mod.F90 @@ -278,7 +278,10 @@ module bl_option_mod ! as minimum, and use cloud-top as blending length-scale only for shallow cu integer, parameter :: blend_cth_shcu_only =4 -! 11a max permitted cloud top height in metres for shallow cu, used for +! 11a switch to cap the blended mixing length by the 1D +LOGICAL :: cap_blended_ml = .FALSE. + +! 11b max permitted cloud top height in metres for shallow cu, used for ! blending_option=blend_cth_shcu_only real(kind=r_bl) :: shallow_cu_maxtop = rmdi @@ -631,6 +634,8 @@ subroutine print_nlist_run_bl() call umprint(linebuffer,src='bl_option_mod') write(lineBuffer,'(A,ES12.4)') 'shallow_cu_maxtop = ',shallow_cu_maxtop call umprint(linebuffer,src='bl_option_mod') +write(lineBuffer,'(A,L1)') ' cap_blended_ml = ',cap_blended_ml +call umprint(linebuffer,src='bl_option_mod') write(lineBuffer,'(2(A,F0.5))') 'alpha_cd_in = ', & alpha_cd_in(1),' ',alpha_cd_in(2) call umPrint(lineBuffer,src='bl_option_mod') diff --git a/science/physics_schemes/source/boundary_layer/ex_coef.F90 b/science/physics_schemes/source/boundary_layer/ex_coef.F90 index abd6fd8612..7c3c9f8766 100644 --- a/science/physics_schemes/source/boundary_layer/ex_coef.F90 +++ b/science/physics_schemes/source/boundary_layer/ex_coef.F90 @@ -48,7 +48,7 @@ subroutine ex_coef ( & lambda_fac, beta_bl, beta_fa, rlinfac, linear0, & to_sharp_across_1km, ntml_level_corrn, free_trop_layers, two_thirds, & blending_option, blend_except_cu, blend_gridindep_fa, blend_cth_shcu_only, & - shallow_cu_maxtop, extended_tail, zero, one, one_half + shallow_cu_maxtop, extended_tail, zero, one, one_half, cap_blended_ml use conversions_mod, only: pi => pi_bl use gen_phys_inputs_mod, only: l_mr_physics @@ -656,7 +656,7 @@ subroutine ex_coef ( & !$OMP l_rp2,lambda_min,par_mezcla_rp,zh_local,turb_length,k_log_layr, & !$OMP z_uv,z0m,elm,elh,elh_rho,blending_option,cumulus,shallow_cth,zhpar, & !$OMP ntdsc,weight_1dbl,weight_bltop,delta_smag,rneutml_sq,BL_diag,local_fa, & -!$OMP shallow_cu_maxtop) +!$OMP shallow_cu_maxtop,cap_blended_ml) !----------------------------------------------------------------- ! 2.1 Calculate asymptotic mixing lengths LAMBDAM and LAMBDAH !----------------------------------------------------------------- @@ -818,7 +818,7 @@ subroutine ex_coef ( & sqrt(rneutml_sq(i,j,k-1))*(one-weight_1dbl(i,j,k)) elh(i,j,k) = elh(i,j,k)*weight_1dbl(i,j,k) + & sqrt(rneutml_sq(i,j,k-1))*(one-weight_1dbl(i,j,k)) - if (blending_option == blend_cth_shcu_only ) then + if (cap_blended_ml) then ! restrict blended lengthscale to be at most the 1d elm(i,j,k) = MIN( elm_1d, elm(i,j,k) ) elh(i,j,k) = MIN( elh_1d, elh(i,j,k) ) From 813ed933846d3e5ca6527b44c37adad5719fe65a Mon Sep 17 00:00:00 2001 From: Adrian Lock <87426032+Adrian-Lock@users.noreply.github.com> Date: Wed, 2 Sep 2026 13:07:48 +0100 Subject: [PATCH 06/26] Add upgrade macro --- .../rose-meta/lfric-gungho/HEAD/rose-meta.conf | 4 ++-- science/gungho/rose-meta/lfric-gungho/versions.py | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/science/gungho/rose-meta/lfric-gungho/HEAD/rose-meta.conf b/science/gungho/rose-meta/lfric-gungho/HEAD/rose-meta.conf index 26e9a1fb5e..c47e7b0431 100644 --- a/science/gungho/rose-meta/lfric-gungho/HEAD/rose-meta.conf +++ b/science/gungho/rose-meta/lfric-gungho/HEAD/rose-meta.conf @@ -3723,8 +3723,8 @@ help=Options for Smagorinsky subgrid mixing scheme: = As above, but use cloud-top as blending length-scale only for = shallow cu = - = WARNING: This option currently does not conserve energy and as - = a result may be unstable. + = WARNING: This option will only conserve if + = conservative_diffusion is true sort-key=Panel-A05 trigger=namelist:mixing=shallow_cu_maxtop: 'blend_cth_shcu_only' ; value-titles=3D Smagorinsky, 2D Smagorinsky + 1D BL, Blended scheme + Smag above, diff --git a/science/gungho/rose-meta/lfric-gungho/versions.py b/science/gungho/rose-meta/lfric-gungho/versions.py index 01e65a2b91..1ebed8202b 100644 --- a/science/gungho/rose-meta/lfric-gungho/versions.py +++ b/science/gungho/rose-meta/lfric-gungho/versions.py @@ -31,3 +31,15 @@ def upgrade(self, config, meta_config=None): # Add settings return config, self.reports """ +class vn32_t752(MacroUpgrade): + # Upgrade macro for #752 by Adrian Lock + + BEFORE_TAG = "vn3.2" + AFTER_TAG = "vn3.2_t752" + + def upgrade(self, config, meta_config=None): + # Add settings + self.add_setting( + config, ["namelist:mixing", "cap_blended_ml"], ".false." + ) + return config, self.reports From da7a76a0b165dc97432815bcb6e61a7f03f06be5 Mon Sep 17 00:00:00 2001 From: Adrian Lock <87426032+Adrian-Lock@users.noreply.github.com> Date: Thu, 3 Sep 2026 10:38:45 +0100 Subject: [PATCH 07/26] Add new code documentation --- .../turbulence_schemes/bl_scheme_doc.rst | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/documentation/source/science_guide/turbulence_schemes/bl_scheme_doc.rst b/documentation/source/science_guide/turbulence_schemes/bl_scheme_doc.rst index 300bbaf98c..de35ed00c7 100644 --- a/documentation/source/science_guide/turbulence_schemes/bl_scheme_doc.rst +++ b/documentation/source/science_guide/turbulence_schemes/bl_scheme_doc.rst @@ -1986,7 +1986,7 @@ length, :math:`S` is the wind shear, :math:`f_\chi(Ri)` is the stability function and :math:`\chi` represents conserved heat and moisture variables, or momentum. Both schemes use the same stability function, and both schemes can use the full 3D shear for :math:`S`. Therefore the -only difference is in the mixing length, which is calculated as +only difference is in the mixing length, which is initially calculated as .. math:: :label: eq-lblend @@ -2119,18 +2119,27 @@ boundary layer depth and type `) but alternatively (``blending_option``\ :math:`=`\ 4) this can be restricted to strictly shallow cumulus clouds, defined as contiguously cloudy levels (cloud fraction greater than SC_CFTOL) with cloud top -height below input parameter ``shallow_cu_maxtop``. Note that the +height below the input parameter ``shallow_cu_maxtop``. Note that the diagnosis of shallow cumulus from the diagnosis parcel ascent (that was -used to identify a cumulus regime) was found frequently to indicate deep +used to identify a cumulus regime) has frequently been found to indicate deep convection even when the resolved clouds were shallow because the diagnosis parcel, being undilute, would penetrate to the tropopause. -However, having decided the regime is shallow convection, we do still -set :math:`z_{\mathrm{turb}}` to the diagnosis parcel top height because, for -current km-scale configurations (without a cumulus convection -parametrization), it was found that the resulting stronger parametrized -vertical mixing was beneficial for the development of the convection, -and that without this a widespread stratiform cloud layer could develop -instead. +Under ``blending_option``\ :math:`=`\ 4, then, if such a shallow cumulus +regime is diagnosed, :math:`z_{\mathrm{turb}}` is set to the resolved cloud +top height. + +One less desirable feature of the combination of the forms of the blended +mixing length :eq:`eq-lblend` and :math:`W_{1D}` :eq:`eq-tanh` functions +is that the resulting mixing length does not simply increase monotonically +towards :math:`l_{\mathrm{bl}}` as :math:`z_{\mathrm{turb}}` reduces (and +the turbulence becomes entirely unresolved). To illustrate this, consider +the case of :math:`\Delta x= z_{\mathrm{turb}} = 1` km, which gives +:math:`W_{1D} \approx 0.9` (see :numref:`Figure %s `\ a). +Ignoring the reduction in length scales towards the surface, we find +:math:`l_{\mathrm{bl}}=150` m and :math:`l_{\mathrm{smag}}=200` m such that +:math:`l_{\mathrm{blend}} = 155` m. A simple way to avoid this is to cap +the blended length scale explicitly by :math:`l_{\mathrm{bl}}` via the +namelist switch ``cap_blended_ml``. Above the boundary layer top, `Boutle et al. (2014)`_ aimed for any free atmospheric mixing to be done by the 3D Smagorinsky scheme. From 60dcdc6c2c427ada76bb885700829dd5ff3fb764 Mon Sep 17 00:00:00 2001 From: Adrian Lock <87426032+Adrian-Lock@users.noreply.github.com> Date: Thu, 3 Sep 2026 11:55:20 +0100 Subject: [PATCH 08/26] Add rose stem test for new options --- rose-stem/app/lfric_atm/opt/README | 2 ++ .../site/common/lfric_atm/tasks_lfric_atm.cylc | 14 ++++++++++++++ rose-stem/site/meto/groups/groups_lfric_atm.cylc | 2 ++ 3 files changed, 18 insertions(+) diff --git a/rose-stem/app/lfric_atm/opt/README b/rose-stem/app/lfric_atm/opt/README index 30874e6ad7..2004bb3780 100644 --- a/rose-stem/app/lfric_atm/opt/README +++ b/rose-stem/app/lfric_atm/opt/README @@ -55,6 +55,8 @@ Science settings - ral3 - regional configuration - ral3_ens - extra config for regional ensembles (including stochastic physics) - ral3_scm - single column regional physics (includes convection scheme) +- ral3_blopt4 - development version of blended turbulence scheme in regional + configuration - ral_mixmol_opts - extra options for regional models when using the MoL transport scheme and mixed solver configuration - ral_opts - extra options for regional models, including LBC blending weights diff --git a/rose-stem/site/common/lfric_atm/tasks_lfric_atm.cylc b/rose-stem/site/common/lfric_atm/tasks_lfric_atm.cylc index a37b78aceb..ecf4bb58b3 100644 --- a/rose-stem/site/common/lfric_atm/tasks_lfric_atm.cylc +++ b/rose-stem/site/common/lfric_atm/tasks_lfric_atm.cylc @@ -776,6 +776,20 @@ "plot_str": "plot_map.py -ral $NODAL_DATA_DIR/lfric_diagnostics.nc $PLOT_DIR", }) %} +{% elif task_ns.conf_name == "ral3_blopt4-seuk_MG" %} + + {% do task_dict.update({ + "opt_confs": ["l70_40km","ral3_blopt4","ral_opts","hh_solve"], + "resolution": "seuk_MG", + "DT": 60, + "tsteps": 120, + "crun": 2, + "crun_compare": false, + "mpi_parts": 16, + "kgo_checks": ["checksum"], + "plot_str": "plot_map.py -ral $NODAL_DATA_DIR/lfric_diagnostics.nc $PLOT_DIR", + }) %} + {% elif task_ns.conf_name == "ral3_mixmol-seuk_MG" %} {% do task_dict.update({ diff --git a/rose-stem/site/meto/groups/groups_lfric_atm.cylc b/rose-stem/site/meto/groups/groups_lfric_atm.cylc index 17717320f0..420359abe5 100644 --- a/rose-stem/site/meto/groups/groups_lfric_atm.cylc +++ b/rose-stem/site/meto/groups/groups_lfric_atm.cylc @@ -37,6 +37,7 @@ "lfric_atm_ral_azspice_developer": [ "lfric_atm_ral3-seuk_MG_azspice_gnu_fast-debug-32bit", "lfric_atm_ral3_ens-seuk_MG_azspice_gnu_fast-debug-32bit", + "lfric_atm_ral3_blopt4-seuk_MG_azspice_gnu_fast-debug-32bit", "lfric_atm_ral3_mixmol-seuk_MG_azspice_gnu_fast-debug-32bit", ], "lfric_atm_scm_azspice_developer": [ @@ -140,6 +141,7 @@ "lfric_atm_ral_ex1a_developer": [ "lfric_atm_ral3-seuk_MG_ex1a_cce_fast-debug-32bit", "lfric_atm_ral3_ens-seuk_MG_ex1a_cce_fast-debug-32bit", + "lfric_atm_ral3_blopt4-seuk_MG_ex1a_cce_fast-debug-32bit", "lfric_atm_ral3_mixmol-seuk_MG_ex1a_cce_fast-debug-32bit", ], "lfric_atm_ral_ex1a_weekly": [ From ffb85222cdb57d6252f090af968bf15db38d15fd Mon Sep 17 00:00:00 2001 From: Adrian Lock <87426032+Adrian-Lock@users.noreply.github.com> Date: Thu, 3 Sep 2026 14:29:57 +0100 Subject: [PATCH 09/26] Add rose stem test resources --- .../lfric_atm/opt/rose-app-ral3_blopt4.conf | 193 ++++++++++++++++++ .../meto/lfric_atm/tasks_lfric_atm_ex1a.cylc | 6 + 2 files changed, 199 insertions(+) create mode 100644 rose-stem/app/lfric_atm/opt/rose-app-ral3_blopt4.conf diff --git a/rose-stem/app/lfric_atm/opt/rose-app-ral3_blopt4.conf b/rose-stem/app/lfric_atm/opt/rose-app-ral3_blopt4.conf new file mode 100644 index 0000000000..1ba5e14922 --- /dev/null +++ b/rose-stem/app/lfric_atm/opt/rose-app-ral3_blopt4.conf @@ -0,0 +1,193 @@ +[file:iodef.xml] +source=$ROSE_SUITE_DIR/app/lfric_atm/file/iodef_ral.xml + +[namelist:aerosol] +activation_scheme='off' +glomap_mode='climatology' +!!horiz_d=2.25 +n_radaer_step=4 +prec_file='precalc/RADAER_pcalc_wvbnd-avg.ukca' +!!us_am=1.45 + +[namelist:blayer] +bl_levels=69 +bl_mix_w=.true. +free_atm_mix='free_trop_layer' +interp_local='gradients' +noice_in_turb=.true. +p_unstable=0.5 +sbl_opt='sharpest' +sc_diag_opt='cu_relax' +sg_orog_mixing='shear_plus_lambda' + +[namelist:cloud] +bm_ez_opt='orig' +cld_fsd_hill=.false. +cloud_horizontal_ice_fsd=0.0 +cloud_horizontal_liq_fsd=0.65 +!!dbsdtbs_turb_0=1.5E-4 +!!fsd_conv_const=2.81 +!!fsd_min_conv_frac=0.0 +!!fsd_nonconv_ice_const=1.14 +!!fsd_nonconv_liq_const=1.14 +!!ice_width=0.02 +!!l_ensure_max_in_cloud_pc2=.false. +!!pc2_erosion_numerics='implicit' +!!pc2_homog_g_method='cf' +!!pc2_init_logic='original' +!!pc2_init_method='bimodal' +!!pc2_turb_horiz=.false. +rh_crit=0.960,0.940,0.920,0.900,0.890,0.880,0.870,0.860,0.850,0.840, + =0.840,0.830,0.820,0.810,56*0.800 +rh_crit_opt='namelist' +scheme='bimodal' +subgrid_qv=.false. +use_fsd_eff_res=.false. + +[namelist:convection] +!!c_mass_sh=0.03 +!!cape_timescale=1800.0 +!!cca_md_scaling=0.8 +!!cpress_term=0.3 +!!cv_scheme='gregory_rowntree' +!!efrac=1.0 +!!ent_fac_sh=1.0 +!!l_conv_prog_dq=.true. +!!l_conv_prog_dtheta=.true. +!!number_of_convection_substeps=2 +!!orig_mdet_fac=1.0 +!!prog_ent_grad=-1.1 +!!prog_ent_int=-2.9 +!!prog_ent_max=2.5 +!!prog_ent_min=0.5 +!!r_det=0.5 +!!thpixs_mid=0.5 + +[namelist:files] +!!orography_mean_ancil_path='orography/gmted_ramp2/qrparm.orog.ugrid' +!!soil_rough_ancil_path='soil_roughness/prigent12/qrparm.soil_roughness' + +[namelist:jules_nvegparm] +albsnc_nvg_io=0.4,0.06,0.8,0.8 +albsnf_nvg_io=0.18,0.06,-1.0,0.75 +ch_nvg_io=2.8e5,4.18e6,0.0,0.0 + +[namelist:jules_pftparm(brd_leaf)] +albsnc_max_io=1.5e-1 +z0hm_pft_io=1.00 + +[namelist:jules_pftparm(c3_grass)] +z0hm_pft_io=0.022 +z0v_io=0.1 + +[namelist:jules_pftparm(c4_grass)] +z0hm_pft_io=0.022 +z0v_io=0.1 + +[namelist:jules_pftparm(ndl_leaf)] +albsnc_max_io=1.5e-1 +z0hm_pft_io=1.00 + +[namelist:jules_pftparm(shrub)] +z0hm_pft_io=0.025 +z0v_io=0.4 + +[namelist:jules_sea_seaice] +buddy_sea='Off' + +[namelist:jules_snow] +rho_snow_fresh=170.0 + +[namelist:jules_surface] +l_vary_z0m_soil=.false. +srf_ex_cnv_gust=.false. + +[namelist:microphysics] +!!aut_qc=2.47 +!!c_r_correl=0.9 +casim_cdnc_opt='fixed' +!!ci_input=14.3 +!!cic_input=1024.0 +droplet_tpr=.true. +!!fcrit=1.0 +!!graupel_scheme='modified' +!!heavy_rain_evap_fac=0.0 +!!l_mcr_precfrac=.false. +!!l_proc_fluxes=.false. +microphysics_casim=.true. +!!mp_dz_scal=2.0 +ndrop_surf=10.0e6 +!!nscalesf=1.0 +!!nsigmasf=2.82843 +!!orog_block=.false. +!!orog_rain=.false. +!!orog_rime=.false. +!!prog_tnuc=.false. +!!shape_rime=.true. +turb_gen_mixph=.false. +z_surf=50.0 + +[namelist:mixed_solver] +reference_reset_time=$DT + +[namelist:mixing] +cap_blended_ml=.true. +conservative_diffusion=.true. +density_weighted=.true. +leonard_kl=2.0 +leonard_term=.true. +max_diff_factor=1.0 +method='blend_cth_shcu_only' +mix_factor=0.2 +shallow_cu_maxtop=3000.0 +smag_l_calc='UseDx' +smagorinsky=.true. + +[namelist:multigrid] +n_postsmooth=6 + +[!!namelist:orographic_drag] + +[namelist:orography] +orog_init_option='start_dump' + +[namelist:physics] +!!convection_placement='fast' +electric_placement='slow' +!!orographic_drag_placement='slow' +smagorinsky_placement='fast' +!!spectral_gwd_placement='slow' + +[namelist:radiation] +cloud_entrapment='zero' +cloud_inhomogeneity='scaling' +cloud_overlap='maximum_random' +cloud_representation='liquid_and_ice' +!!cloud_vertical_decorr=10000.0 +i_cloud_ice_type_lw=13 +i_cloud_ice_type_lwinc=13 +i_cloud_ice_type_sw=13 +i_cloud_ice_type_swinc=13 +i_cloud_liq_type_lwinc=5 +i_cloud_liq_type_swinc=5 +l_inc_radstep=.true. +liu_aparam=0.07 +liu_bparam=-0.14 +n_horiz_ang=16 +n_horiz_layer=1 +n_inc_radstep=5 +n_radstep=15 +scatter_method_lwinc='approx' +spectral_file_lwinc='spec/sp_lw_cloud9' +spectral_file_swinc='spec/sp_sw_cloud9' +topography='horizon' + +[namelist:section_choice] +convection='none' +electric='um' +methane_oxidation=.false. +orographic_drag='none' +spectral_gwd='none' + +[!!namelist:spectral_gwd] +!!cgw_scale_factor=1.05 diff --git a/rose-stem/site/meto/lfric_atm/tasks_lfric_atm_ex1a.cylc b/rose-stem/site/meto/lfric_atm/tasks_lfric_atm_ex1a.cylc index 5238590dfb..f75fa74c04 100644 --- a/rose-stem/site/meto/lfric_atm/tasks_lfric_atm_ex1a.cylc +++ b/rose-stem/site/meto/lfric_atm/tasks_lfric_atm_ex1a.cylc @@ -64,6 +64,12 @@ "memory": [24, "GB"], }) %} +{% elif task_ns.conf_name == "ral3_blopt4-seuk_MG" %} + + {% do task_dict.update({ + "memory": [24, "GB"], + }) %} + {% elif task_ns.conf_name == "ral3_mixmol-seuk_MG" %} {% do task_dict.update({ From c6fdd1feac36ab1d405180f90fd7e788400041a9 Mon Sep 17 00:00:00 2001 From: Adrian Lock <87426032+Adrian-Lock@users.noreply.github.com> Date: Thu, 3 Sep 2026 17:22:56 +0100 Subject: [PATCH 10/26] Add checksums for new rose stem tasks --- ..._ral3_blopt4-seuk_MG_azspice_gnu_fast-debug-32bit.txt | 9 +++++++++ ...atm_ral3_blopt4-seuk_MG_ex1a_cce_fast-debug-32bit.txt | 9 +++++++++ 2 files changed, 18 insertions(+) create mode 100644 rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_ral3_blopt4-seuk_MG_azspice_gnu_fast-debug-32bit.txt create mode 100644 rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_ral3_blopt4-seuk_MG_ex1a_cce_fast-debug-32bit.txt diff --git a/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_ral3_blopt4-seuk_MG_azspice_gnu_fast-debug-32bit.txt b/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_ral3_blopt4-seuk_MG_azspice_gnu_fast-debug-32bit.txt new file mode 100644 index 0000000000..b42c710939 --- /dev/null +++ b/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_ral3_blopt4-seuk_MG_azspice_gnu_fast-debug-32bit.txt @@ -0,0 +1,9 @@ +Inner product checksum rho = 48399775 +Inner product checksum theta = 5135493C +Inner product checksum u = 612F4564 +Inner product checksum mr1 = 4090F446 +Inner product checksum mr2 = 35A4820F +Inner product checksum mr3 = 2FA55337 +Inner product checksum mr4 = 33F4FD71 +Inner product checksum mr5 = BEDF836 +Inner product checksum mr6 = 0 diff --git a/rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_ral3_blopt4-seuk_MG_ex1a_cce_fast-debug-32bit.txt b/rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_ral3_blopt4-seuk_MG_ex1a_cce_fast-debug-32bit.txt new file mode 100644 index 0000000000..77e231da05 --- /dev/null +++ b/rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_ral3_blopt4-seuk_MG_ex1a_cce_fast-debug-32bit.txt @@ -0,0 +1,9 @@ +Inner product checksum rho = 483997BE +Inner product checksum theta = 5135495E +Inner product checksum u = 612F491A +Inner product checksum mr1 = 4090F9AF +Inner product checksum mr2 = 35B4CF9B +Inner product checksum mr3 = 2FA591F0 +Inner product checksum mr4 = 33F4FE3C +Inner product checksum mr5 = BECFCD9 +Inner product checksum mr6 = 0 From 0fb3ab283997ba8b6a073e077c9b38827c0b36a1 Mon Sep 17 00:00:00 2001 From: Adrian Lock <87426032+Adrian-Lock@users.noreply.github.com> Date: Fri, 4 Sep 2026 13:38:18 +0100 Subject: [PATCH 11/26] Fixes for unit tests --- .../kernel/diffusion/leonard_term_kl_kernel_mod_test.pf | 1 + .../kernel/diffusion/tracer_smagorinsky_diff_kernel_mod_test.pf | 1 + 2 files changed, 2 insertions(+) diff --git a/science/gungho/unit-test/kernel/diffusion/leonard_term_kl_kernel_mod_test.pf b/science/gungho/unit-test/kernel/diffusion/leonard_term_kl_kernel_mod_test.pf index 81a5e5c019..0e8587ccfe 100644 --- a/science/gungho/unit-test/kernel/diffusion/leonard_term_kl_kernel_mod_test.pf +++ b/science/gungho/unit-test/kernel/diffusion/leonard_term_kl_kernel_mod_test.pf @@ -55,6 +55,7 @@ contains leonard_kl = 4.0_r_def, & conservative_diffusion = .false., & density_weighted = .false., & + cap_blended_ml = .false., & max_diff_factor = 1.0_r_def ) call feign_finite_element_config( & diff --git a/science/gungho/unit-test/kernel/diffusion/tracer_smagorinsky_diff_kernel_mod_test.pf b/science/gungho/unit-test/kernel/diffusion/tracer_smagorinsky_diff_kernel_mod_test.pf index b89e30e9db..adb13c1eb4 100644 --- a/science/gungho/unit-test/kernel/diffusion/tracer_smagorinsky_diff_kernel_mod_test.pf +++ b/science/gungho/unit-test/kernel/diffusion/tracer_smagorinsky_diff_kernel_mod_test.pf @@ -56,6 +56,7 @@ contains leonard_kl = 1.0_r_def, & conservative_diffusion = .false., & density_weighted = .false., & + cap_blended_ml = .false., & max_diff_factor = 1.0_r_def ) call feign_finite_element_config( & From d0f6bcd85e807fb2da3162dc66a1a96b1e83d148 Mon Sep 17 00:00:00 2001 From: Adrian Lock <87426032+Adrian-Lock@users.noreply.github.com> Date: Fri, 4 Sep 2026 15:19:14 +0100 Subject: [PATCH 12/26] And add my other new namelist variable to the unit tests --- .../kernel/diffusion/leonard_term_kl_kernel_mod_test.pf | 7 ++++--- .../diffusion/tracer_smagorinsky_diff_kernel_mod_test.pf | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/science/gungho/unit-test/kernel/diffusion/leonard_term_kl_kernel_mod_test.pf b/science/gungho/unit-test/kernel/diffusion/leonard_term_kl_kernel_mod_test.pf index 0e8587ccfe..eaf257949b 100644 --- a/science/gungho/unit-test/kernel/diffusion/leonard_term_kl_kernel_mod_test.pf +++ b/science/gungho/unit-test/kernel/diffusion/leonard_term_kl_kernel_mod_test.pf @@ -54,9 +54,10 @@ contains leonard_term = .false., & leonard_kl = 4.0_r_def, & conservative_diffusion = .false., & - density_weighted = .false., & - cap_blended_ml = .false., & - max_diff_factor = 1.0_r_def ) + density_weighted = .false., & + cap_blended_ml = .false., & + shallow_cu_maxtop = 0.0_r_def, & + max_diff_factor = 1.0_r_def ) call feign_finite_element_config( & cellshape=cellshape_quadrilateral, & diff --git a/science/gungho/unit-test/kernel/diffusion/tracer_smagorinsky_diff_kernel_mod_test.pf b/science/gungho/unit-test/kernel/diffusion/tracer_smagorinsky_diff_kernel_mod_test.pf index adb13c1eb4..96b1059721 100644 --- a/science/gungho/unit-test/kernel/diffusion/tracer_smagorinsky_diff_kernel_mod_test.pf +++ b/science/gungho/unit-test/kernel/diffusion/tracer_smagorinsky_diff_kernel_mod_test.pf @@ -55,9 +55,10 @@ contains leonard_term = .false., & leonard_kl = 1.0_r_def, & conservative_diffusion = .false., & - density_weighted = .false., & - cap_blended_ml = .false., & - max_diff_factor = 1.0_r_def ) + density_weighted = .false., & + cap_blended_ml = .false., & + shallow_cu_maxtop = 0.0_r_def, & + max_diff_factor = 1.0_r_def ) call feign_finite_element_config( & cellshape=cellshape_quadrilateral, & From b44202e6bb09cded18d117567baa02eba09d2bc8 Mon Sep 17 00:00:00 2001 From: Adrian Lock <87426032+Adrian-Lock@users.noreply.github.com> Date: Mon, 7 Sep 2026 16:24:08 +0100 Subject: [PATCH 13/26] Following reviewer suggestion to add a ral_dev task and include my new options under a better named blend_shcu opt file --- rose-stem/app/lfric_atm/opt/README | 3 +- .../app/lfric_atm/opt/rose-app-blendshcu.conf | 5 + .../lfric_atm/opt/rose-app-ral3_blopt4.conf | 193 ------------------ .../common/lfric_atm/tasks_lfric_atm.cylc | 4 +- .../site/meto/groups/groups_lfric_atm.cylc | 4 +- ...4-seuk_MG_azspice_gnu_fast-debug-32bit.txt | 9 - ...opt4-seuk_MG_ex1a_cce_fast-debug-32bit.txt | 9 - .../meto/lfric_atm/tasks_lfric_atm_ex1a.cylc | 2 +- 8 files changed, 11 insertions(+), 218 deletions(-) create mode 100644 rose-stem/app/lfric_atm/opt/rose-app-blendshcu.conf delete mode 100644 rose-stem/app/lfric_atm/opt/rose-app-ral3_blopt4.conf delete mode 100644 rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_ral3_blopt4-seuk_MG_azspice_gnu_fast-debug-32bit.txt delete mode 100644 rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_ral3_blopt4-seuk_MG_ex1a_cce_fast-debug-32bit.txt diff --git a/rose-stem/app/lfric_atm/opt/README b/rose-stem/app/lfric_atm/opt/README index 2004bb3780..c7ce2df800 100644 --- a/rose-stem/app/lfric_atm/opt/README +++ b/rose-stem/app/lfric_atm/opt/README @@ -55,8 +55,7 @@ Science settings - ral3 - regional configuration - ral3_ens - extra config for regional ensembles (including stochastic physics) - ral3_scm - single column regional physics (includes convection scheme) -- ral3_blopt4 - development version of blended turbulence scheme in regional - configuration +- ral_dev - development version regional configuration - ral_mixmol_opts - extra options for regional models when using the MoL transport scheme and mixed solver configuration - ral_opts - extra options for regional models, including LBC blending weights diff --git a/rose-stem/app/lfric_atm/opt/rose-app-blendshcu.conf b/rose-stem/app/lfric_atm/opt/rose-app-blendshcu.conf new file mode 100644 index 0000000000..81dbeceaf8 --- /dev/null +++ b/rose-stem/app/lfric_atm/opt/rose-app-blendshcu.conf @@ -0,0 +1,5 @@ +[namelist:mixing] +cap_blended_ml=.true. +method='blend_cth_shcu_only' +shallow_cu_maxtop=3000.0 +smagorinsky=.true. diff --git a/rose-stem/app/lfric_atm/opt/rose-app-ral3_blopt4.conf b/rose-stem/app/lfric_atm/opt/rose-app-ral3_blopt4.conf deleted file mode 100644 index 1ba5e14922..0000000000 --- a/rose-stem/app/lfric_atm/opt/rose-app-ral3_blopt4.conf +++ /dev/null @@ -1,193 +0,0 @@ -[file:iodef.xml] -source=$ROSE_SUITE_DIR/app/lfric_atm/file/iodef_ral.xml - -[namelist:aerosol] -activation_scheme='off' -glomap_mode='climatology' -!!horiz_d=2.25 -n_radaer_step=4 -prec_file='precalc/RADAER_pcalc_wvbnd-avg.ukca' -!!us_am=1.45 - -[namelist:blayer] -bl_levels=69 -bl_mix_w=.true. -free_atm_mix='free_trop_layer' -interp_local='gradients' -noice_in_turb=.true. -p_unstable=0.5 -sbl_opt='sharpest' -sc_diag_opt='cu_relax' -sg_orog_mixing='shear_plus_lambda' - -[namelist:cloud] -bm_ez_opt='orig' -cld_fsd_hill=.false. -cloud_horizontal_ice_fsd=0.0 -cloud_horizontal_liq_fsd=0.65 -!!dbsdtbs_turb_0=1.5E-4 -!!fsd_conv_const=2.81 -!!fsd_min_conv_frac=0.0 -!!fsd_nonconv_ice_const=1.14 -!!fsd_nonconv_liq_const=1.14 -!!ice_width=0.02 -!!l_ensure_max_in_cloud_pc2=.false. -!!pc2_erosion_numerics='implicit' -!!pc2_homog_g_method='cf' -!!pc2_init_logic='original' -!!pc2_init_method='bimodal' -!!pc2_turb_horiz=.false. -rh_crit=0.960,0.940,0.920,0.900,0.890,0.880,0.870,0.860,0.850,0.840, - =0.840,0.830,0.820,0.810,56*0.800 -rh_crit_opt='namelist' -scheme='bimodal' -subgrid_qv=.false. -use_fsd_eff_res=.false. - -[namelist:convection] -!!c_mass_sh=0.03 -!!cape_timescale=1800.0 -!!cca_md_scaling=0.8 -!!cpress_term=0.3 -!!cv_scheme='gregory_rowntree' -!!efrac=1.0 -!!ent_fac_sh=1.0 -!!l_conv_prog_dq=.true. -!!l_conv_prog_dtheta=.true. -!!number_of_convection_substeps=2 -!!orig_mdet_fac=1.0 -!!prog_ent_grad=-1.1 -!!prog_ent_int=-2.9 -!!prog_ent_max=2.5 -!!prog_ent_min=0.5 -!!r_det=0.5 -!!thpixs_mid=0.5 - -[namelist:files] -!!orography_mean_ancil_path='orography/gmted_ramp2/qrparm.orog.ugrid' -!!soil_rough_ancil_path='soil_roughness/prigent12/qrparm.soil_roughness' - -[namelist:jules_nvegparm] -albsnc_nvg_io=0.4,0.06,0.8,0.8 -albsnf_nvg_io=0.18,0.06,-1.0,0.75 -ch_nvg_io=2.8e5,4.18e6,0.0,0.0 - -[namelist:jules_pftparm(brd_leaf)] -albsnc_max_io=1.5e-1 -z0hm_pft_io=1.00 - -[namelist:jules_pftparm(c3_grass)] -z0hm_pft_io=0.022 -z0v_io=0.1 - -[namelist:jules_pftparm(c4_grass)] -z0hm_pft_io=0.022 -z0v_io=0.1 - -[namelist:jules_pftparm(ndl_leaf)] -albsnc_max_io=1.5e-1 -z0hm_pft_io=1.00 - -[namelist:jules_pftparm(shrub)] -z0hm_pft_io=0.025 -z0v_io=0.4 - -[namelist:jules_sea_seaice] -buddy_sea='Off' - -[namelist:jules_snow] -rho_snow_fresh=170.0 - -[namelist:jules_surface] -l_vary_z0m_soil=.false. -srf_ex_cnv_gust=.false. - -[namelist:microphysics] -!!aut_qc=2.47 -!!c_r_correl=0.9 -casim_cdnc_opt='fixed' -!!ci_input=14.3 -!!cic_input=1024.0 -droplet_tpr=.true. -!!fcrit=1.0 -!!graupel_scheme='modified' -!!heavy_rain_evap_fac=0.0 -!!l_mcr_precfrac=.false. -!!l_proc_fluxes=.false. -microphysics_casim=.true. -!!mp_dz_scal=2.0 -ndrop_surf=10.0e6 -!!nscalesf=1.0 -!!nsigmasf=2.82843 -!!orog_block=.false. -!!orog_rain=.false. -!!orog_rime=.false. -!!prog_tnuc=.false. -!!shape_rime=.true. -turb_gen_mixph=.false. -z_surf=50.0 - -[namelist:mixed_solver] -reference_reset_time=$DT - -[namelist:mixing] -cap_blended_ml=.true. -conservative_diffusion=.true. -density_weighted=.true. -leonard_kl=2.0 -leonard_term=.true. -max_diff_factor=1.0 -method='blend_cth_shcu_only' -mix_factor=0.2 -shallow_cu_maxtop=3000.0 -smag_l_calc='UseDx' -smagorinsky=.true. - -[namelist:multigrid] -n_postsmooth=6 - -[!!namelist:orographic_drag] - -[namelist:orography] -orog_init_option='start_dump' - -[namelist:physics] -!!convection_placement='fast' -electric_placement='slow' -!!orographic_drag_placement='slow' -smagorinsky_placement='fast' -!!spectral_gwd_placement='slow' - -[namelist:radiation] -cloud_entrapment='zero' -cloud_inhomogeneity='scaling' -cloud_overlap='maximum_random' -cloud_representation='liquid_and_ice' -!!cloud_vertical_decorr=10000.0 -i_cloud_ice_type_lw=13 -i_cloud_ice_type_lwinc=13 -i_cloud_ice_type_sw=13 -i_cloud_ice_type_swinc=13 -i_cloud_liq_type_lwinc=5 -i_cloud_liq_type_swinc=5 -l_inc_radstep=.true. -liu_aparam=0.07 -liu_bparam=-0.14 -n_horiz_ang=16 -n_horiz_layer=1 -n_inc_radstep=5 -n_radstep=15 -scatter_method_lwinc='approx' -spectral_file_lwinc='spec/sp_lw_cloud9' -spectral_file_swinc='spec/sp_sw_cloud9' -topography='horizon' - -[namelist:section_choice] -convection='none' -electric='um' -methane_oxidation=.false. -orographic_drag='none' -spectral_gwd='none' - -[!!namelist:spectral_gwd] -!!cgw_scale_factor=1.05 diff --git a/rose-stem/site/common/lfric_atm/tasks_lfric_atm.cylc b/rose-stem/site/common/lfric_atm/tasks_lfric_atm.cylc index ecf4bb58b3..a9594492ca 100644 --- a/rose-stem/site/common/lfric_atm/tasks_lfric_atm.cylc +++ b/rose-stem/site/common/lfric_atm/tasks_lfric_atm.cylc @@ -776,10 +776,10 @@ "plot_str": "plot_map.py -ral $NODAL_DATA_DIR/lfric_diagnostics.nc $PLOT_DIR", }) %} -{% elif task_ns.conf_name == "ral3_blopt4-seuk_MG" %} +{% elif task_ns.conf_name == "ral_dev-seuk_MG" %} {% do task_dict.update({ - "opt_confs": ["l70_40km","ral3_blopt4","ral_opts","hh_solve"], + "opt_confs": ["l70_40km","ral3","ral_blendshcu","ral_opts","hh_solve"], "resolution": "seuk_MG", "DT": 60, "tsteps": 120, diff --git a/rose-stem/site/meto/groups/groups_lfric_atm.cylc b/rose-stem/site/meto/groups/groups_lfric_atm.cylc index 420359abe5..9b99e63948 100644 --- a/rose-stem/site/meto/groups/groups_lfric_atm.cylc +++ b/rose-stem/site/meto/groups/groups_lfric_atm.cylc @@ -37,7 +37,7 @@ "lfric_atm_ral_azspice_developer": [ "lfric_atm_ral3-seuk_MG_azspice_gnu_fast-debug-32bit", "lfric_atm_ral3_ens-seuk_MG_azspice_gnu_fast-debug-32bit", - "lfric_atm_ral3_blopt4-seuk_MG_azspice_gnu_fast-debug-32bit", + "lfric_atm_ral_dev-seuk_MG_azspice_gnu_fast-debug-32bit", "lfric_atm_ral3_mixmol-seuk_MG_azspice_gnu_fast-debug-32bit", ], "lfric_atm_scm_azspice_developer": [ @@ -141,7 +141,7 @@ "lfric_atm_ral_ex1a_developer": [ "lfric_atm_ral3-seuk_MG_ex1a_cce_fast-debug-32bit", "lfric_atm_ral3_ens-seuk_MG_ex1a_cce_fast-debug-32bit", - "lfric_atm_ral3_blopt4-seuk_MG_ex1a_cce_fast-debug-32bit", + "lfric_atm_ral_dev-seuk_MG_ex1a_cce_fast-debug-32bit", "lfric_atm_ral3_mixmol-seuk_MG_ex1a_cce_fast-debug-32bit", ], "lfric_atm_ral_ex1a_weekly": [ diff --git a/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_ral3_blopt4-seuk_MG_azspice_gnu_fast-debug-32bit.txt b/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_ral3_blopt4-seuk_MG_azspice_gnu_fast-debug-32bit.txt deleted file mode 100644 index b42c710939..0000000000 --- a/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_ral3_blopt4-seuk_MG_azspice_gnu_fast-debug-32bit.txt +++ /dev/null @@ -1,9 +0,0 @@ -Inner product checksum rho = 48399775 -Inner product checksum theta = 5135493C -Inner product checksum u = 612F4564 -Inner product checksum mr1 = 4090F446 -Inner product checksum mr2 = 35A4820F -Inner product checksum mr3 = 2FA55337 -Inner product checksum mr4 = 33F4FD71 -Inner product checksum mr5 = BEDF836 -Inner product checksum mr6 = 0 diff --git a/rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_ral3_blopt4-seuk_MG_ex1a_cce_fast-debug-32bit.txt b/rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_ral3_blopt4-seuk_MG_ex1a_cce_fast-debug-32bit.txt deleted file mode 100644 index 77e231da05..0000000000 --- a/rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_ral3_blopt4-seuk_MG_ex1a_cce_fast-debug-32bit.txt +++ /dev/null @@ -1,9 +0,0 @@ -Inner product checksum rho = 483997BE -Inner product checksum theta = 5135495E -Inner product checksum u = 612F491A -Inner product checksum mr1 = 4090F9AF -Inner product checksum mr2 = 35B4CF9B -Inner product checksum mr3 = 2FA591F0 -Inner product checksum mr4 = 33F4FE3C -Inner product checksum mr5 = BECFCD9 -Inner product checksum mr6 = 0 diff --git a/rose-stem/site/meto/lfric_atm/tasks_lfric_atm_ex1a.cylc b/rose-stem/site/meto/lfric_atm/tasks_lfric_atm_ex1a.cylc index f75fa74c04..feb679b3aa 100644 --- a/rose-stem/site/meto/lfric_atm/tasks_lfric_atm_ex1a.cylc +++ b/rose-stem/site/meto/lfric_atm/tasks_lfric_atm_ex1a.cylc @@ -64,7 +64,7 @@ "memory": [24, "GB"], }) %} -{% elif task_ns.conf_name == "ral3_blopt4-seuk_MG" %} +{% elif task_ns.conf_name == "ral_dev-seuk_MG" %} {% do task_dict.update({ "memory": [24, "GB"], From 0ae32084888b34398ea2d74873acd7e2fb43ed87 Mon Sep 17 00:00:00 2001 From: Adrian Lock <87426032+Adrian-Lock@users.noreply.github.com> Date: Tue, 8 Sep 2026 08:56:57 +0100 Subject: [PATCH 14/26] Correct name of opt file --- rose-stem/site/common/lfric_atm/tasks_lfric_atm.cylc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rose-stem/site/common/lfric_atm/tasks_lfric_atm.cylc b/rose-stem/site/common/lfric_atm/tasks_lfric_atm.cylc index a9594492ca..8351f47532 100644 --- a/rose-stem/site/common/lfric_atm/tasks_lfric_atm.cylc +++ b/rose-stem/site/common/lfric_atm/tasks_lfric_atm.cylc @@ -779,7 +779,7 @@ {% elif task_ns.conf_name == "ral_dev-seuk_MG" %} {% do task_dict.update({ - "opt_confs": ["l70_40km","ral3","ral_blendshcu","ral_opts","hh_solve"], + "opt_confs": ["l70_40km","ral3","blendshcu","ral_opts","hh_solve"], "resolution": "seuk_MG", "DT": 60, "tsteps": 120, From f625c5530f8fbe3c83c227c915ba72f720cf0516 Mon Sep 17 00:00:00 2001 From: Adrian Lock <87426032+Adrian-Lock@users.noreply.github.com> Date: Tue, 8 Sep 2026 09:04:26 +0100 Subject: [PATCH 15/26] Change name to cumulus_cth, as suggested by sci-tech reviewer --- .../source/boundary_layer/bdy_expl2.F90 | 14 +++++++------- .../source/boundary_layer/ex_coef.F90 | 12 ++++++------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/science/physics_schemes/source/boundary_layer/bdy_expl2.F90 b/science/physics_schemes/source/boundary_layer/bdy_expl2.F90 index 189b7b87e6..6b862d4fb7 100644 --- a/science/physics_schemes/source/boundary_layer/bdy_expl2.F90 +++ b/science/physics_schemes/source/boundary_layer/bdy_expl2.F90 @@ -605,7 +605,7 @@ subroutine bdy_expl2 ( & 2:bl_levels), & ! Mixing length for heat (m), ! held on theta and rho levels, resp. - shallow_cth(pdims%i_start:pdims%i_end,pdims%j_start:pdims%j_end), & + cumulus_cth(pdims%i_start:pdims%i_end,pdims%j_start:pdims%j_end), & ! cf_bulk cloud top height used in blended BL ! for shallow convection fm_3d(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end,bl_levels), & @@ -1935,10 +1935,10 @@ subroutine bdy_expl2 ( & !$OMP SCHEDULE(STATIC) & !$OMP DEFAULT(none) & !$OMP private(j,i) & -!$OMP SHARED(pdims,shallow_cth) +!$OMP SHARED(pdims,cumulus_cth) do j = pdims%j_start, pdims%j_end do i = pdims%i_start, pdims%i_end - shallow_cth(i,j) = zero ! initialise to zero for case of no cloud + cumulus_cth(i,j) = zero ! initialise to zero for case of no cloud ! - will then blend using BL depth end do end do @@ -1951,7 +1951,7 @@ subroutine bdy_expl2 ( & !$OMP PARALLEL & !$OMP DEFAULT(none) & !$OMP private(i,j,k) & -!$OMP SHARED(pdims,bl_levels,z_uv,shallow_cth,cumulus,ntml,cf_bulk, & +!$OMP SHARED(pdims,bl_levels,z_uv,cumulus_cth,cumulus,ntml,cf_bulk, & !$OMP cloud_base_found,cloud_top_found) !$OMP do SCHEDULE(STATIC) do j = pdims%j_start, pdims%j_end @@ -1975,7 +1975,7 @@ subroutine bdy_expl2 ( & cf_bulk(i,j,k+1) < sc_cftol ) then ! got to cloud-top cloud_top_found(i,j) = .true. - shallow_cth(i,j) = z_uv(i,j,k+1) + cumulus_cth(i,j) = z_uv(i,j,k+1) end if end do end do @@ -1991,7 +1991,7 @@ subroutine bdy_expl2 ( & bl_levels,k_log_layr,BL_diag, & ! in fields 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,shallow_cth,rmlmax2,rneutml_sq, & + zdsc_base,ntpar,ntml_nl,ntdsc,nbdsc,cumulus_cth,rmlmax2,rneutml_sq, & delta_smag, & ! in/out fields cumulus,weight_1dbl, & @@ -2637,7 +2637,7 @@ subroutine bdy_expl2 ( & bl_type_6(i,j) = one ! Label this shallow regime as 2.0_r_bl here, to be able to identify it ! in diagnostics_bl, but the "cumulus" stash output will still be 1.0 - if (shallow_cth(i,j) < shallow_cu_maxtop) bl_type_6(i,j) = 2.0_r_bl + if (cumulus_cth(i,j) < shallow_cu_maxtop) bl_type_6(i,j) = 2.0_r_bl end if end if diff --git a/science/physics_schemes/source/boundary_layer/ex_coef.F90 b/science/physics_schemes/source/boundary_layer/ex_coef.F90 index fa7995acc9..91496490f0 100644 --- a/science/physics_schemes/source/boundary_layer/ex_coef.F90 +++ b/science/physics_schemes/source/boundary_layer/ex_coef.F90 @@ -27,7 +27,7 @@ subroutine ex_coef ( & bl_levels, k_log_layr, BL_diag, & ! in fields sigma_h,flandg,dvdzm,ri,rho_wet_tq,z_uv,z_tq,z0m,zhnl,zhpar,zhsc,zdsc_base, & - ntpar,ntml_nl,ntdsc,nbdsc,shallow_cth,rmlmax2,rneutml_sq,delta_smag, & + ntpar,ntml_nl,ntdsc,nbdsc,cumulus_cth,rmlmax2,rneutml_sq,delta_smag, & ! in/out fields cumulus,weight_1dbl, & ! out fields @@ -121,7 +121,7 @@ subroutine ex_coef ( & ! IN Square of the neutral mixing length for Smagorinsky delta_smag(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end), & ! IN delta_x used by Smagorinsky - shallow_cth(pdims%i_start:pdims%i_end,pdims%j_start:pdims%j_end) + cumulus_cth(pdims%i_start:pdims%i_end,pdims%j_start:pdims%j_end) ! IN cloud-top height for identifying shallow cu in blending ! Declaration of new BL diagnostics. @@ -796,7 +796,7 @@ subroutine ex_coef ( & !$OMP elh_1d) & !$OMP SHARED(k,pdims,ri,ricrit,flandg,ntml_local,ntml_nl,z_tq, & !$OMP l_rp2,lambda_min,par_mezcla_rp,zh_local,turb_length,k_log_layr, & -!$OMP z_uv,z0m,elm,elh,elh_rho,blending_option,cumulus,shallow_cth,zhpar, & +!$OMP z_uv,z0m,elm,elh,elh_rho,blending_option,cumulus,cumulus_cth,zhpar, & !$OMP ntdsc,weight_1dbl,weight_bltop,delta_smag,rneutml_sq,BL_diag,local_fa, & !$OMP lambda_min_use,shallow_cu_maxtop,cap_blended_ml) !$OMP do SCHEDULE(STATIC) @@ -894,9 +894,9 @@ subroutine ex_coef ( & z_scale = max( z_scale, zhpar(i,j) ) zht = max( zht, zhpar(i,j) ) else if ( cumulus(i,j) .and. blending_option == blend_cth_shcu_only & - .and. shallow_cth(i,j) < shallow_cu_maxtop ) THEN - z_scale = max( z_scale, shallow_cth(i,j) ) - zht = max( zht, shallow_cth(i,j) ) + .and. cumulus_cth(i,j) < shallow_cu_maxtop ) THEN + z_scale = max( z_scale, cumulus_cth(i,j) ) + zht = max( zht, cumulus_cth(i,j) ) end if ! BL top includes decoupled stratocu layer, if it exists From ca0fc68d0d494574a70e1b70c2249682ac5baa48 Mon Sep 17 00:00:00 2001 From: Adrian Lock <87426032+Adrian-Lock@users.noreply.github.com> Date: Tue, 8 Sep 2026 10:03:03 +0100 Subject: [PATCH 16/26] Manual merge from #730, increase build times on AzSpice --- rose-stem/site/meto/common/default_directives.cylc | 10 +++++----- ...tm_ral_dev-seuk_MG_azspice_gnu_fast-debug-32bit.txt | 9 +++++++++ .../templates/runtime/generate_runtime_scripts.cylc | 2 +- 3 files changed, 15 insertions(+), 6 deletions(-) create mode 100644 rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_ral_dev-seuk_MG_azspice_gnu_fast-debug-32bit.txt diff --git a/rose-stem/site/meto/common/default_directives.cylc b/rose-stem/site/meto/common/default_directives.cylc index 21a2f8fb7b..e77d6ba798 100644 --- a/rose-stem/site/meto/common/default_directives.cylc +++ b/rose-stem/site/meto/common/default_directives.cylc @@ -10,22 +10,22 @@ "memory": [6, "GB"], "wallclock": 20, "build_memory": [1, "GB"], - "build_wallclock": 25, + "build_wallclock": 45, "build_cpus": 6, "gen_weights_tasks": 4, "gen_weights_memory": [4, "GB"], "lfric_atm": { - "build_wallclock": 45, + "build_wallclock": 65, }, "linear_model": { - "build_wallclock": 45, + "build_wallclock": 65, }, "jules": { - "build_wallclock": 35, + "build_wallclock": 60, }, "ngarch": { - "build_wallclock": 45, + "build_wallclock": 65, }, "mesh": { "mesh_wallclock": 20, diff --git a/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_ral_dev-seuk_MG_azspice_gnu_fast-debug-32bit.txt b/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_ral_dev-seuk_MG_azspice_gnu_fast-debug-32bit.txt new file mode 100644 index 0000000000..b42c710939 --- /dev/null +++ b/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_ral_dev-seuk_MG_azspice_gnu_fast-debug-32bit.txt @@ -0,0 +1,9 @@ +Inner product checksum rho = 48399775 +Inner product checksum theta = 5135493C +Inner product checksum u = 612F4564 +Inner product checksum mr1 = 4090F446 +Inner product checksum mr2 = 35A4820F +Inner product checksum mr3 = 2FA55337 +Inner product checksum mr4 = 33F4FD71 +Inner product checksum mr5 = BEDF836 +Inner product checksum mr6 = 0 diff --git a/rose-stem/templates/runtime/generate_runtime_scripts.cylc b/rose-stem/templates/runtime/generate_runtime_scripts.cylc index 9a127471e2..b837448bfc 100644 --- a/rose-stem/templates/runtime/generate_runtime_scripts.cylc +++ b/rose-stem/templates/runtime/generate_runtime_scripts.cylc @@ -111,7 +111,7 @@ {% endif %} inherit={{local_build_inherit|upper}} - execution time limit = PT25M + execution time limit = PT40M script = """ cp -r $CYLC_WORKFLOW_SHARE_DIR/source/lfric_apps $CYLC_TASK_WORK_DIR/apps_local_build_source cp -r $CYLC_WORKFLOW_SHARE_DIR/source/lfric_core $CYLC_TASK_WORK_DIR/core_local_build_source From 883e980500f28bf793028c1f00bee0afeb94ca77 Mon Sep 17 00:00:00 2001 From: Adrian Lock <87426032+Adrian-Lock@users.noreply.github.com> Date: Tue, 8 Sep 2026 10:22:47 +0100 Subject: [PATCH 17/26] Add checksum for new ral_dev task --- ...ric_atm_ral_dev-seuk_MG_ex1a_cce_fast-debug-32bit.txt | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_ral_dev-seuk_MG_ex1a_cce_fast-debug-32bit.txt diff --git a/rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_ral_dev-seuk_MG_ex1a_cce_fast-debug-32bit.txt b/rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_ral_dev-seuk_MG_ex1a_cce_fast-debug-32bit.txt new file mode 100644 index 0000000000..7cdb60d61b --- /dev/null +++ b/rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_ral_dev-seuk_MG_ex1a_cce_fast-debug-32bit.txt @@ -0,0 +1,9 @@ +Inner product checksum rho = 483997BC +Inner product checksum theta = 51354960 +Inner product checksum u = 612F492E +Inner product checksum mr1 = 4090F9FA +Inner product checksum mr2 = 35B4A04B +Inner product checksum mr3 = 2FA5A582 +Inner product checksum mr4 = 33F4FE3E +Inner product checksum mr5 = BECFCFF +Inner product checksum mr6 = 0 From 5c1d52581229908dac54f2bf20993236a7931bab Mon Sep 17 00:00:00 2001 From: Adrian Lock <87426032+Adrian-Lock@users.noreply.github.com> Date: Tue, 8 Sep 2026 14:50:16 +0100 Subject: [PATCH 18/26] Update checksum for azspice --- ..._dev-seuk_MG_azspice_gnu_fast-debug-32bit.txt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_ral_dev-seuk_MG_azspice_gnu_fast-debug-32bit.txt b/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_ral_dev-seuk_MG_azspice_gnu_fast-debug-32bit.txt index b42c710939..fc65ba0cff 100644 --- a/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_ral_dev-seuk_MG_azspice_gnu_fast-debug-32bit.txt +++ b/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_ral_dev-seuk_MG_azspice_gnu_fast-debug-32bit.txt @@ -1,9 +1,9 @@ -Inner product checksum rho = 48399775 -Inner product checksum theta = 5135493C -Inner product checksum u = 612F4564 -Inner product checksum mr1 = 4090F446 -Inner product checksum mr2 = 35A4820F -Inner product checksum mr3 = 2FA55337 -Inner product checksum mr4 = 33F4FD71 -Inner product checksum mr5 = BEDF836 +Inner product checksum rho = 48399774 +Inner product checksum theta = 5135493D +Inner product checksum u = 612F4555 +Inner product checksum mr1 = 4090F4C2 +Inner product checksum mr2 = 35AE1FCE +Inner product checksum mr3 = 2FA57BD6 +Inner product checksum mr4 = 33F4FD79 +Inner product checksum mr5 = BEDF8CA Inner product checksum mr6 = 0 From 33b4eb00cb987388e1b2e61d7d3ea6e540e0ac79 Mon Sep 17 00:00:00 2001 From: Adrian Lock <87426032+Adrian-Lock@users.noreply.github.com> Date: Tue, 8 Sep 2026 15:09:31 +0100 Subject: [PATCH 19/26] Update checksum and correct README file --- rose-stem/app/lfric_atm/opt/README | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rose-stem/app/lfric_atm/opt/README b/rose-stem/app/lfric_atm/opt/README index c7ce2df800..bdae146538 100644 --- a/rose-stem/app/lfric_atm/opt/README +++ b/rose-stem/app/lfric_atm/opt/README @@ -55,7 +55,8 @@ Science settings - ral3 - regional configuration - ral3_ens - extra config for regional ensembles (including stochastic physics) - ral3_scm - single column regional physics (includes convection scheme) -- ral_dev - development version regional configuration +- ral_blendshcu - development version of the turbulence blending for shallow + cumulus regimes - ral_mixmol_opts - extra options for regional models when using the MoL transport scheme and mixed solver configuration - ral_opts - extra options for regional models, including LBC blending weights From 60a23e80210fb2fe7edf569b471ed267e4eacc55 Mon Sep 17 00:00:00 2001 From: Adrian Lock <87426032+Adrian-Lock@users.noreply.github.com> Date: Wed, 9 Sep 2026 16:09:52 +0100 Subject: [PATCH 20/26] Suggestions from sci-tech review --- science/gungho/rose-meta/lfric-gungho/HEAD/rose-meta.conf | 1 + science/physics_schemes/source/boundary_layer/bdy_expl2.F90 | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/science/gungho/rose-meta/lfric-gungho/HEAD/rose-meta.conf b/science/gungho/rose-meta/lfric-gungho/HEAD/rose-meta.conf index c47e7b0431..553feba02c 100644 --- a/science/gungho/rose-meta/lfric-gungho/HEAD/rose-meta.conf +++ b/science/gungho/rose-meta/lfric-gungho/HEAD/rose-meta.conf @@ -3727,6 +3727,7 @@ help=Options for Smagorinsky subgrid mixing scheme: = conservative_diffusion is true sort-key=Panel-A05 trigger=namelist:mixing=shallow_cu_maxtop: 'blend_cth_shcu_only' ; + =namelist:mixing=cap_blended_ml: 'blend_smag_fa', 'blend_1dbl_fa', 'blend_cth_shcu_only' ; value-titles=3D Smagorinsky, 2D Smagorinsky + 1D BL, Blended scheme + Smag above, =Blended scheme + 1D BL above, Blended scheme with CTH for shallow cu only values='3d_smag', '2d_smag', 'blend_smag_fa','blend_1dbl_fa','blend_cth_shcu_only' diff --git a/science/physics_schemes/source/boundary_layer/bdy_expl2.F90 b/science/physics_schemes/source/boundary_layer/bdy_expl2.F90 index 6b862d4fb7..96788b5cab 100644 --- a/science/physics_schemes/source/boundary_layer/bdy_expl2.F90 +++ b/science/physics_schemes/source/boundary_layer/bdy_expl2.F90 @@ -1945,7 +1945,7 @@ subroutine bdy_expl2 ( & !$OMP end PARALLEL do if (blending_option == blend_cth_shcu_only) then - ! only going to use the parcel top as the length scale in blending + ! going to use cloud top height as the length scale in blending only ! if the convection is shallow, where we define shallow convection here ! as the resolved cloud top (from cf_bluk) being below shallow_cu_maxtop !$OMP PARALLEL & From f0ca8a87568d383963e7e9a30cc1d33403aebdbb Mon Sep 17 00:00:00 2001 From: Adrian Lock <87426032+Adrian-Lock@users.noreply.github.com> Date: Wed, 9 Sep 2026 16:51:00 +0100 Subject: [PATCH 21/26] Update new lfric unit tests with my new namelist variables --- .../diffusion/diffusion_momentum_flux_kernel_mod_test.pf | 4 +++- .../diffusion/divergence_momentum_flux_kernel_mod_test.pf | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/science/gungho/unit-test/kernel/diffusion/diffusion_momentum_flux_kernel_mod_test.pf b/science/gungho/unit-test/kernel/diffusion/diffusion_momentum_flux_kernel_mod_test.pf index b54a69d32d..d3f0a15c20 100644 --- a/science/gungho/unit-test/kernel/diffusion/diffusion_momentum_flux_kernel_mod_test.pf +++ b/science/gungho/unit-test/kernel/diffusion/diffusion_momentum_flux_kernel_mod_test.pf @@ -128,7 +128,9 @@ contains leonard_kl = 4.0_r_def, & conservative_diffusion = .true., & density_weighted = .true., & - max_diff_factor=1.0_r_def ) + max_diff_factor = 1.0_r_def, & + cap_blended_ml = .false., & + shallow_cu_maxtop= 0.0_r_def ) ! Variables for testing momentum_smagorinsky ! Get sizes of everything diff --git a/science/gungho/unit-test/kernel/diffusion/divergence_momentum_flux_kernel_mod_test.pf b/science/gungho/unit-test/kernel/diffusion/divergence_momentum_flux_kernel_mod_test.pf index 68b710ddab..d53d998fdc 100644 --- a/science/gungho/unit-test/kernel/diffusion/divergence_momentum_flux_kernel_mod_test.pf +++ b/science/gungho/unit-test/kernel/diffusion/divergence_momentum_flux_kernel_mod_test.pf @@ -115,7 +115,9 @@ contains leonard_kl = 4.0_r_def, & conservative_diffusion = .true., & density_weighted = .true., & - max_diff_factor=1.0_r_def ) + max_diff_factor = 1.0_r_def, & + cap_blended_ml = .false., & + shallow_cu_maxtop= 0.0_r_def ) ! Variables for testing momentum_smagorinsky ! Get sizes of everything From b8fe7768e1f97232b4d4cc9be67ce14a7312edda Mon Sep 17 00:00:00 2001 From: Adrian Lock <87426032+Adrian-Lock@users.noreply.github.com> Date: Wed, 9 Sep 2026 16:59:04 +0100 Subject: [PATCH 22/26] Correct upgrade macro --- science/gungho/rose-meta/lfric-gungho/versions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/science/gungho/rose-meta/lfric-gungho/versions.py b/science/gungho/rose-meta/lfric-gungho/versions.py index a8dbaa8ec3..a82866c6b7 100644 --- a/science/gungho/rose-meta/lfric-gungho/versions.py +++ b/science/gungho/rose-meta/lfric-gungho/versions.py @@ -64,7 +64,7 @@ def upgrade(self, config, meta_config=None): class vn32_t752(MacroUpgrade): # Upgrade macro for #752 by Adrian Lock - BEFORE_TAG = "vn3.2" + BEFORE_TAG = "vn3.2_t479" AFTER_TAG = "vn3.2_t752" def upgrade(self, config, meta_config=None): From a8deda2ca12b5627c475c1be9badf5d01a0f24f1 Mon Sep 17 00:00:00 2001 From: Adrian Lock <87426032+Adrian-Lock@users.noreply.github.com> Date: Wed, 9 Sep 2026 22:30:59 +0100 Subject: [PATCH 23/26] Bug fix --- science/physics_schemes/source/boundary_layer/bdy_expl2.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/science/physics_schemes/source/boundary_layer/bdy_expl2.F90 b/science/physics_schemes/source/boundary_layer/bdy_expl2.F90 index b1b2991b66..7b6c572763 100644 --- a/science/physics_schemes/source/boundary_layer/bdy_expl2.F90 +++ b/science/physics_schemes/source/boundary_layer/bdy_expl2.F90 @@ -1829,7 +1829,7 @@ subroutine bdy_expl2 ( & !$OMP SCHEDULE(STATIC) & !$OMP DEFAULT(none) & !$OMP private(i) & -!$OMP SHARED(pdims,l_shallow_cth) +!$OMP SHARED(pdims,cumulus_cth) do i = pdims%i_start, pdims%i_end cumulus_cth(i,j) = zero ! initialise to zero for case of no cloud ! - will then blend using BL depth From 942c88effcd25cfe0a65a8ac8da119e4e6513917 Mon Sep 17 00:00:00 2001 From: Adrian Lock <87426032+Adrian-Lock@users.noreply.github.com> Date: Thu, 10 Sep 2026 10:03:43 +0100 Subject: [PATCH 24/26] Add revised checksums to be consistent with changes on main --- ..._dev-seuk_MG_azspice_gnu_fast-debug-32bit.txt | 16 ++++++++-------- ...ral_dev-seuk_MG_ex1a_cce_fast-debug-32bit.txt | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_ral_dev-seuk_MG_azspice_gnu_fast-debug-32bit.txt b/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_ral_dev-seuk_MG_azspice_gnu_fast-debug-32bit.txt index fc65ba0cff..d0c68159dd 100644 --- a/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_ral_dev-seuk_MG_azspice_gnu_fast-debug-32bit.txt +++ b/rose-stem/site/meto/kgos/lfric_atm/azspice/checksum_lfric_atm_ral_dev-seuk_MG_azspice_gnu_fast-debug-32bit.txt @@ -1,9 +1,9 @@ -Inner product checksum rho = 48399774 -Inner product checksum theta = 5135493D -Inner product checksum u = 612F4555 -Inner product checksum mr1 = 4090F4C2 -Inner product checksum mr2 = 35AE1FCE -Inner product checksum mr3 = 2FA57BD6 -Inner product checksum mr4 = 33F4FD79 -Inner product checksum mr5 = BEDF8CA +Inner product checksum rho = 4839977E +Inner product checksum theta = 5135493C +Inner product checksum u = 612F4556 +Inner product checksum mr1 = 4090F41B +Inner product checksum mr2 = 35AC7EDC +Inner product checksum mr3 = 2FA559EC +Inner product checksum mr4 = 33F4FDAE +Inner product checksum mr5 = BEDF860 Inner product checksum mr6 = 0 diff --git a/rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_ral_dev-seuk_MG_ex1a_cce_fast-debug-32bit.txt b/rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_ral_dev-seuk_MG_ex1a_cce_fast-debug-32bit.txt index 7cdb60d61b..391df8e30f 100644 --- a/rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_ral_dev-seuk_MG_ex1a_cce_fast-debug-32bit.txt +++ b/rose-stem/site/meto/kgos/lfric_atm/ex1a/checksum_lfric_atm_ral_dev-seuk_MG_ex1a_cce_fast-debug-32bit.txt @@ -1,9 +1,9 @@ -Inner product checksum rho = 483997BC -Inner product checksum theta = 51354960 -Inner product checksum u = 612F492E -Inner product checksum mr1 = 4090F9FA -Inner product checksum mr2 = 35B4A04B -Inner product checksum mr3 = 2FA5A582 -Inner product checksum mr4 = 33F4FE3E -Inner product checksum mr5 = BECFCFF +Inner product checksum rho = 483997BF +Inner product checksum theta = 5135495F +Inner product checksum u = 612F491D +Inner product checksum mr1 = 4090F962 +Inner product checksum mr2 = 35B6E523 +Inner product checksum mr3 = 2FA5A395 +Inner product checksum mr4 = 33F4FE66 +Inner product checksum mr5 = BECFC40 Inner product checksum mr6 = 0 From f7eda4e1876a60f7fe49556c1abf9f364749f37c Mon Sep 17 00:00:00 2001 From: Adrian Lock <87426032+Adrian-Lock@users.noreply.github.com> Date: Fri, 11 Sep 2026 11:42:49 +0100 Subject: [PATCH 25/26] Code reviewer responses: correct upgrade macro and revert AzSpice time increases --- rose-stem/site/meto/common/default_directives.cylc | 10 +++++----- .../templates/runtime/generate_runtime_scripts.cylc | 2 +- science/gungho/rose-meta/lfric-gungho/versions.py | 6 ++++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/rose-stem/site/meto/common/default_directives.cylc b/rose-stem/site/meto/common/default_directives.cylc index aeac4cb65d..b95810eaea 100644 --- a/rose-stem/site/meto/common/default_directives.cylc +++ b/rose-stem/site/meto/common/default_directives.cylc @@ -10,22 +10,22 @@ "memory": [6, "GB"], "wallclock": 20, "build_memory": [1, "GB"], - "build_wallclock": 45, + "build_wallclock": 25, "build_cpus": 6, "gen_weights_tasks": 4, "gen_weights_memory": [4, "GB"], "lfric_atm": { - "build_wallclock": 65, + "build_wallclock": 45, }, "linear_model": { - "build_wallclock": 65, + "build_wallclock": 45, }, "jules": { - "build_wallclock": 60, + "build_wallclock": 35, }, "ngarch": { - "build_wallclock": 65, + "build_wallclock": 45, }, "jedi_lfric_tests": { "build_wallclock": 45, diff --git a/rose-stem/templates/runtime/generate_runtime_scripts.cylc b/rose-stem/templates/runtime/generate_runtime_scripts.cylc index b837448bfc..9a127471e2 100644 --- a/rose-stem/templates/runtime/generate_runtime_scripts.cylc +++ b/rose-stem/templates/runtime/generate_runtime_scripts.cylc @@ -111,7 +111,7 @@ {% endif %} inherit={{local_build_inherit|upper}} - execution time limit = PT40M + execution time limit = PT25M script = """ cp -r $CYLC_WORKFLOW_SHARE_DIR/source/lfric_apps $CYLC_TASK_WORK_DIR/apps_local_build_source cp -r $CYLC_WORKFLOW_SHARE_DIR/source/lfric_core $CYLC_TASK_WORK_DIR/core_local_build_source diff --git a/science/gungho/rose-meta/lfric-gungho/versions.py b/science/gungho/rose-meta/lfric-gungho/versions.py index a82866c6b7..b95c77f85b 100644 --- a/science/gungho/rose-meta/lfric-gungho/versions.py +++ b/science/gungho/rose-meta/lfric-gungho/versions.py @@ -70,5 +70,7 @@ class vn32_t752(MacroUpgrade): def upgrade(self, config, meta_config=None): # Add settings self.add_setting( - config, ["namelist:mixing", "cap_blended_ml"], ".false." - ) + config, ["namelist:mixing", "cap_blended_ml"], ".false.") + self.add_setting( + config, ["namelist:mixing", "shallow_cu_maxtop"], "3000.0") + return config, self.reports From ed48fbf097a1588848966888fd8b814b95dbbed9 Mon Sep 17 00:00:00 2001 From: Adrian Lock <87426032+Adrian-Lock@users.noreply.github.com> Date: Mon, 14 Sep 2026 10:28:12 +0100 Subject: [PATCH 26/26] Remove end-of-line whitespace from new documentation --- .../turbulence_schemes/bl_scheme_doc.rst | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/documentation/source/science_guide/turbulence_schemes/bl_scheme_doc.rst b/documentation/source/science_guide/turbulence_schemes/bl_scheme_doc.rst index de35ed00c7..50b5e8234e 100644 --- a/documentation/source/science_guide/turbulence_schemes/bl_scheme_doc.rst +++ b/documentation/source/science_guide/turbulence_schemes/bl_scheme_doc.rst @@ -2124,21 +2124,21 @@ diagnosis of shallow cumulus from the diagnosis parcel ascent (that was used to identify a cumulus regime) has frequently been found to indicate deep convection even when the resolved clouds were shallow because the diagnosis parcel, being undilute, would penetrate to the tropopause. -Under ``blending_option``\ :math:`=`\ 4, then, if such a shallow cumulus -regime is diagnosed, :math:`z_{\mathrm{turb}}` is set to the resolved cloud +Under ``blending_option``\ :math:`=`\ 4, then, if such a shallow cumulus +regime is diagnosed, :math:`z_{\mathrm{turb}}` is set to the resolved cloud top height. -One less desirable feature of the combination of the forms of the blended -mixing length :eq:`eq-lblend` and :math:`W_{1D}` :eq:`eq-tanh` functions -is that the resulting mixing length does not simply increase monotonically -towards :math:`l_{\mathrm{bl}}` as :math:`z_{\mathrm{turb}}` reduces (and -the turbulence becomes entirely unresolved). To illustrate this, consider -the case of :math:`\Delta x= z_{\mathrm{turb}} = 1` km, which gives -:math:`W_{1D} \approx 0.9` (see :numref:`Figure %s `\ a). -Ignoring the reduction in length scales towards the surface, we find -:math:`l_{\mathrm{bl}}=150` m and :math:`l_{\mathrm{smag}}=200` m such that -:math:`l_{\mathrm{blend}} = 155` m. A simple way to avoid this is to cap -the blended length scale explicitly by :math:`l_{\mathrm{bl}}` via the +One less desirable feature of the combination of the forms of the blended +mixing length :eq:`eq-lblend` and :math:`W_{1D}` :eq:`eq-tanh` functions +is that the resulting mixing length does not simply increase monotonically +towards :math:`l_{\mathrm{bl}}` as :math:`z_{\mathrm{turb}}` reduces (and +the turbulence becomes entirely unresolved). To illustrate this, consider +the case of :math:`\Delta x= z_{\mathrm{turb}} = 1` km, which gives +:math:`W_{1D} \approx 0.9` (see :numref:`Figure %s `\ a). +Ignoring the reduction in length scales towards the surface, we find +:math:`l_{\mathrm{bl}}=150` m and :math:`l_{\mathrm{smag}}=200` m such that +:math:`l_{\mathrm{blend}} = 155` m. A simple way to avoid this is to cap +the blended length scale explicitly by :math:`l_{\mathrm{bl}}` via the namelist switch ``cap_blended_ml``. Above the boundary layer top, `Boutle et al. (2014)`_ aimed