diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 00c6e6edb..a0c3aa1e2 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -34,4 +34,5 @@ | thomasmelvin | Thomas Melvin | Met Office | 2026-01-15 | | tinyendian | Wolfgang Hayek | Earth Sciences New Zealand | 2026-02-02 | | DanStoneMO | Daniel Stone | Met Office | 2026-02-26 | -| ericaneininger | Erica Neininger | Met Office | 2026-03-02 | \ No newline at end of file +| ericaneininger | Erica Neininger | Met Office | 2026-03-02 | +| iboutle | Ian Boutle | Met Office | 2026-03-11 | \ No newline at end of file diff --git a/applications/lfric_atm/example/configuration.nml b/applications/lfric_atm/example/configuration.nml index d46ff98c4..3e6fd63ec 100644 --- a/applications/lfric_atm/example/configuration.nml +++ b/applications/lfric_atm/example/configuration.nml @@ -12,7 +12,8 @@ a_ent_2=0.056, a_ent_shr=1.6, bl_levels=50, bl_mix_w=.false., -c_gust=4.0 +bl_res_inv='cosine_inv_flux', +c_gust=4.0, cbl_opt='conventional', dec_thres_cloud=0.1, dec_thres_cu=0.05, @@ -24,13 +25,13 @@ free_atm_mix='to_sharp', fric_heating=.true., interp_local='cf_dbdz', kprof_cu='buoy_integ', -bl_res_inv='cosine_inv_flux', l_converge_ga=.false., l_use_sml_dsc_fixes=.false., near_neut_z_on_l=1.6, new_kcloudtop=.true., +ng_stress='BG97_limited', noice_in_turb=.false., -num_sweeps_bflux=3 +num_sweeps_bflux=3, p_unstable=1.0, reduce_fa_mix='inv_only', sbl_opt='sharp_sea_mes_land', @@ -39,7 +40,7 @@ sg_orog_mixing='none', / &boundaries limited_area=.false., -transport_overwrite_freq='final' +transport_overwrite_freq='final', / &checks limit_cfl=.false., @@ -47,12 +48,15 @@ limit_cfl=.false., §ion_choice aerosol='none', boundary_layer='um', -chemistry='um', +chemistry='none', cloud='um', convection='um', dynamics='none', electric='none', external_forcing=.true., +iau=.false., +iau_sst=.false., +iau_surf=.false., methane_oxidation=.false., microphysics='um', orographic_drag='none', @@ -64,17 +68,17 @@ surface='jules', &cloud cff_spread_rate=1.0e-5, cld_fsd_hill=.true., +cloud_call_b4_conv=.false., cloud_pc2_tol=0.005, cloud_pc2_tol_2=0.001, -cloud_call_b4_conv=.false., dbsdtbs_turb_0=1.5E-4, ez_max=400.0, falliceshear_method='real', filter_optical_depth=.true., -fsd_nonconv_ice_const=1.14, -fsd_nonconv_liq_const=1.14, -fsd_conv_const=2.81, +fsd_conv_const=3.5, fsd_min_conv_frac=0.0, +fsd_nonconv_ice_const=0.75, +fsd_nonconv_liq_const=1.0, i_bm_ez_opt='subcrit', i_pc2_erosion_numerics='implicit', ice_width=0.02, @@ -90,44 +94,54 @@ rh_crit_opt='tke', scheme='pc2', subgrid_qv=.true., turb_var_fac_bm=1.0, -two_d_fsd_factor=1.65, +two_d_fsd_factor=1.6, use_fsd_eff_res=.true., / -&chemistry -chem_scheme='none', -/ &convection +c_mass_sh=0.03, cape_timescale=1800.0, +cca_md_scaling=0.8, +conv_prog_dq=.true., +conv_prog_dtheta=.true., +cpress_term=0.3, cv_scheme='gregory_rowntree', -dx_ref=50000.0, efrac=1.0, +ent_fac_sh=1.0, l_cvdiag_ctop_qmax=.false., +mparwtr=1.0e-3, number_of_convection_substeps=2, -orig_mdet_fac=1.0, -prog_ent_min=0.5, +orig_mdet_fac=1.5, +prog_ent_grad=-1.1, +prog_ent_int=-2.9, +prog_ent_max=2.5, +prog_ent_min=0.3, qlmin=4.0e-4, -resdep_precipramp=.false., +r_det=0.5, +thpixs_mid=0.5, / &cosp l_cosp=.false., / &departure_points -horizontal_limit='none', -horizontal_method='timeaverage', +horizontal_limit='cap', +horizontal_method='ffsl', n_dep_pt_iterations=1, -share_stencil_extent=.true. +share_stencil_extent=.true., vertical_limit='exponential', vertical_method='timeaverage', -vertical_sorting=.false. +vertical_sorting=.false., / &energy_correction encorr_usage='none', -integral_method='fe', +integral_method='fd', / &external_forcing -pc2_force_response=.true. +geostrophic_forcing=.false., +pc2_force_response=.true., theta_forcing='temp_tend', +theta_relaxation=.false., vapour_forcing='none', +vertadvect_forcing=.false., wind_forcing='none', / &extrusion @@ -139,6 +153,7 @@ stretching_height=16641.984, stretching_method='smooth', / &files +ancil_directory='', checkpoint_stem_name='restartLfricAtm', diag_stem_name='diagLfricAtm', start_dump_directory='', @@ -158,8 +173,8 @@ dlayer_on=.false., dry_static_adjust=.true., eos_method='sampled', exner_from_eos=.false., -horizontal_physics_predictor=.false. -horizontal_transport_predictor=.false. +horizontal_physics_predictor=.true., +horizontal_transport_predictor=.true., init_exner_bt=.true., l_multigrid=.false., lagged_orog=.true., @@ -169,7 +184,7 @@ p2theta_vert=.true., rotating=.true., shallow=.true., si_momentum_equation=.false., -theta_moist_source=.true. +theta_moist_source=.true., use_multires_coupling=.false., use_physics=.true., use_wavedynamics=.false., @@ -186,9 +201,21 @@ si_pressure_a_tol=1.0e-8, si_pressure_maximum_iterations=400, si_pressure_tolerance=1.0e-4, / +&iau_addinf_io +/ +&iau_addinf_io +/ +&iau_ainc_io +/ +&iau_ainc_io +/ +&iau_bcorr_io +/ +&iau +/ &idealised f_lon_deg=300.0, -perturb_init=.false. +perturb_init=.false., test='specified_profiles', / &ideal_surface @@ -209,11 +236,14 @@ tile_snow_mass=11*0.0, ancil_option='none', coarse_aerosol_ancil=.false., coarse_orography_ancil=.false., +coarse_ozone_ancil=.false., init_option='analytic', lbc_option='none', ls_option='none', n_orog_smooth=0, read_w2h_wind=.false., +sea_ice_source='ancillary', +snow_source='start_dump', w0_orography_mapping=.false., zero_w2v_wind=.false., / @@ -314,12 +344,15 @@ wind_time_period=0.0, / &io checkpoint_read=.false., +checkpoint_times=, checkpoint_write=.false., counter_output_suffix='counter.txt', diag_active_files='lfric_diag', diag_always_on_sampling=.false., diagnostic_frequency=1, +end_of_run_checkpoint=.true., file_convention='UGRID', +multifile_io=.false., nodal_output_on_w3=.false., subroutine_counters=.false., subroutine_timers=.true., @@ -332,8 +365,8 @@ write_fluxes=.false., write_minmax_tseries=.false., / &jules_hydrology -l_var_rainfrac=.true., l_hydrology=.true., +l_var_rainfrac=.true., / &jules_model_environment_lfric l_jules_parent='lfric', @@ -351,16 +384,16 @@ z0_nvg_io=1.0,1.0e-4,1.0e-3,5.0e-4, z0hm_nvg_io=1.0e-7,2.5e-1,2.0e-1,2.0e-1, / &jules_pftparm +albsnc_max_io=2.5e-1,2.5e-1,6.0e-1,6.0e-1,4.0e-1, alnir_io=0.341,0.272,0.369,0.368,0.395, alpar_io=0.057,0.041,0.071,0.083,0.074, -albsnc_max_io=2.5e-1,2.5e-1,6.0e-1,6.0e-1,4.0e-1, -catch0_io=0.5,0.5,0.5,0.5,0.5, -dcatch_dlai_io=0.05,0.05,0.05,0.05,0.05, +catch0_io=5*0.5, +dcatch_dlai_io=5*0.05, fsmc_p0_io=5*0.6, -knl_io=5*0.2, kext_io=0.5,0.5,1.0,1.0,0.5, -omnir_io=0.788,0.545,0.864,0.787,0.785, +knl_io=5*0.2, omega_io=0.101,0.083,0.132,0.135,0.115, +omnir_io=0.788,0.545,0.864,0.787,0.785, z0hm_pft_io=1.0,1.0,0.01,0.01,0.01, z0v_io=1.1,1.1,0.22,0.22,1.0, / @@ -378,26 +411,31 @@ swdn_frac_albsoil=0.5, &jules_sea_seaice alpham=0.72, amip_ice_thick=.false., +beta_evap=1.0, buddy_sea='Off', cdn_hw_sea=0.002, cdn_max_sea=0.003, dtice=2.0, emis_sea=0.985, emis_sice=0.976, -beta_evap=1.0, i_high_wind_drag='reduced_v1', -l_iceformdrag_lupkes=.true., -l_10m_neut=.true., -nice=1, iseasurfalg='coare', -l_sice_heatflux=.true., -l_stability_lupkes=.true., kappa_seasurf=0.5, kappai=2.09, kappai_snow=0.256, +l_10m_neut=.true., +l_iceformdrag_lupkes=.true., +l_sice_heatflux=.true., +l_stability_lupkes=.true., +l_use_dtstar_sea=.false., +nice=1, u_cdn_hw=55.0, u_cdn_max=33.0, -l_use_dtstar_sea=.false., +/ +&jules_soil +l_dpsids_dsdz=.true., +l_soil_sat_down=.true., +l_vg_soil=.false., / &jules_snow can_clump=8.0,4.0,1.0,1.0,1.0, @@ -426,22 +464,13 @@ i_modiscopt='on', iscrntdiag='decoupled_trans', l_anthrop_heat_src=.false., l_epot_corr=.true., -l_elev_land_ice=.false., -l_elev_lw_down=.false., -l_flake_model=.false., l_land_ice_imp=.true., l_mo_buoyancy_calc=.true., -l_point_data=.false., l_urban2t=.false., l_vary_z0m_soil=.true., orog_drag_param=0.15, srf_ex_cnv_gust=.true., / -&jules_soil -l_dpsids_dsdz=.true., -l_soil_sat_down=.true., -l_vg_soil=.false., -/ &jules_surface_types brd_leaf=1, c3_grass=3, @@ -461,11 +490,14 @@ l_limit_canhc=.true., l_spec_veg_z0=.true., / &logging +log_to_rank_zero_only=.false., run_log_level='info', / µphysics a_ratio_exp=-0.2707, a_ratio_fac=0.0517, +ai=2.57e-2, +aut_qc=2.47, c_r_correl=0.9, ci_input=14.3, cic_input=1024.0, @@ -473,8 +505,8 @@ droplet_tpr=.false., fcrit=1.0, graupel_scheme='none', heavy_rain_evap_fac=0.0, -l_mcr_precfrac=.false. -l_proc_fluxes=.false. +l_mcr_precfrac=.false., +l_proc_fluxes=.false., microphysics_casim=.false., mp_dz_scal=2.0, nscalesf=1.0, @@ -495,7 +527,7 @@ guess_np1=.false., mixed_solver_a_tol=1.0e-3, monitor_convergence=.true., normalise=.true., -reference_reset_time=1200.0, +reference_reset_time=3600.0, si_maximum_iterations=10, si_method='block_gcr', si_preconditioner='pressure', @@ -515,21 +547,27 @@ l_esm_couple_test=.false., orog_init_option='none', / &partitioning +generate_inner_halos=.false., panel_decomposition='auto', panel_xproc=1, panel_yproc=1, partitioner='planar', / &physics +bl_segment=0, blayer_placement='fast', -configure_segments=.false., +configure_segments=.true., +conv_gr_segment=16, convection_placement='fast', +gw_segment=0, limit_drag_incs=.false., lowest_level='gradient', +ls_ppn_segment=0, microphysics_placement='slow', sample_physics_scalars=.true., sample_physics_winds=.true., -sample_physics_winds_correction=.false. +sample_physics_winds_correction=.false., +ussp_segment=0, / &planet cp=1005.0, @@ -575,18 +613,18 @@ vo_rad_opt='off', / &solver gcrk=18, -maximum_iterations=13, +maximum_iterations=7, method='chebyshev', monitor_convergence=.false., preconditioner='diagonal', tolerance=1.0e-6, / &specified_surface +function_name_fluxes='constant', +function_name_sst='constant', +profile_size=1, specified_flux_e=130.052, specified_flux_h=8.04, -function_name_fluxes='constant' -function_name_sst='constant' -profile_size=1 / &surface emis_method_sea='fixed', @@ -611,7 +649,7 @@ timestep_start='1', / ×tepping alpha=0.55, -dt=1200.0, +dt=1200, inner_iterations=2, method='semi_implicit', outer_iterations=1, @@ -624,58 +662,57 @@ tau_u=0.55, &transport adjust_theta=.true., adjust_theta_above=30000.0, -adjust_tracer_equation=.false. -adjust_vhv_wind=.false. +adjust_tracer_equation=.false., +adjust_vhv_wind=.true., ageofair_reset_level=10, broken_w2_projection=.false., calculate_detj='upwind', -cap_density_predictor=0.001, +cap_density_predictor=0.5, cfl_mol_1d_stab=1.0, cfl_mol_2d_stab=1.0, cfl_mol_3d_stab=1.0, cheap_update=.false., consistent_metric=.false., -dep_pt_stencil_extent=3, +dep_pt_stencil_extent=7, dry_field_name='density', enforce_min_value=.false.,.false.,.false.,.true.,.true.,.true., -equation_form=1,2,2,3,2,3, +equation_form=1,3,2,3,3,3, ffsl_inner_order=0, ffsl_outer_order=1, -ffsl_splitting=6*1 -ffsl_unity_3d=.false. -ffsl_vertical_order=2,2,1,2,2,2 +ffsl_splitting=6*1, +ffsl_unity_3d=.true., +ffsl_vertical_order=2,2,1,2,2,2, field_names='density','potential_temperature','wind','moisture', 'adv_tracer','con_tracer', fv_horizontal_order=2, fv_vertical_order=2, -horizontal_method=6*1, -horizontal_monotone=1,3,1,3,3,3, +horizontal_method=6*2, +horizontal_monotone=1,5,1,5,5,5, log_space=.true.,.true.,.false.,.false.,.false.,.false., max_vert_cfl_calc='dep_point', -min_val_abs_tol=-1e-9, -min_val_max_iterations=10, -min_val_method='clipping' +min_val_method='clipping', min_value=0.0,0.0,-99999999.0,0.0,0.0,0.0, oned_reconstruction=.false., operators='fv', panel_edge_high_order=.true., -panel_edge_treatment='none' +panel_edge_treatment='none', profile_size=6, reversible=.true.,.true.,.false.,.true.,.true.,.true., runge_kutta_method='ssp3', scheme=6*3, -si_outer_transport='none', +si_outer_transport='horizontal_sl', slice_order='parabola', -special_edges_monotone=0,0,0,1,1,1 +special_edges_monotone=0,0,0,1,1,1, splitting=6*2, -substep_transport='off', -theta_variable='dry', +substep_transport='adaptive', +theta_dispersion_correction=.true., +theta_variable='virtual_dry', transport_ageofair=.false., -use_density_predictor=.true., -vertical_method=2,3,3,2,3,2, -vertical_monotone=1,4,1,4,4,4, +use_density_predictor=.false., +vertical_method=6*2, +vertical_monotone=1,5,1,5,5,5, vertical_monotone_order=6*3, vertical_sl_order='cubic', -wind_mono_top=.false. -wind_mono_top_depth=5 +wind_mono_top=.true., +wind_mono_top_depth=5, / diff --git a/interfaces/physics_schemes_interface/rose-meta/um-aerosol/HEAD/rose-meta.conf b/interfaces/physics_schemes_interface/rose-meta/um-aerosol/HEAD/rose-meta.conf index 8fa4fa8fb..4b1c04dc6 100644 --- a/interfaces/physics_schemes_interface/rose-meta/um-aerosol/HEAD/rose-meta.conf +++ b/interfaces/physics_schemes_interface/rose-meta/um-aerosol/HEAD/rose-meta.conf @@ -184,6 +184,8 @@ sort-key=Panel-A01 trigger=namelist:aerosol=activation_scheme: 'climatology','dust_and_clim' ; =namelist:aerosol=l_radaer: 'climatology','ukca','dust_and_clim','radaer_test' ; =namelist:aerosol=emissions: 'ukca' ; + =namelist:aerosol=ukca_scale_marine_pom_ems: 'ukca' ; + =namelist:aerosol=ukca_scale_sea_salt_ems: 'ukca' ; =namelist:aerosol=horiz_d: 'ukca','dust_and_clim'; =namelist:aerosol=us_am: 'ukca','dust_and_clim'; value-titles=off,climatology,ukca,dust_and_clim,radaer_test @@ -333,6 +335,51 @@ ns=namelist/Science/UM Aerosol sort-key=Panel-A01 type=integer +[namelist:aerosol=ukca_scale_marine_pom_ems] +compulsory=true +description=Option to scale emission of marine particulate organic matter +help=This logical activates the scaling factor marine_pom_ems_scaling. + =There are large uncertainies in the absolute magnitude of marine + =particulate organic matter emissions. And emissions depend on the 10m + =wind speed, which are generally stronger at higher resolutions. Hence + =it maybe be necessary to scale emissions to gain agreement across + =resolutions. +!kind=default +sort-key=Panel-A02a +trigger=namelist:aerosol=marine_pom_ems_scaling: .true. ; +type=logical + +[namelist:aerosol=ukca_scale_sea_salt_ems] +compulsory=true +description=Option to scale emission of sea salt +help=This logical activates the scaling factor sea_salt_ems_scaling. + =There are large uncertainies in the absolute magnitude of sea salt + =emissions. And emissions depend on the 10m wind speed, which are + =generally stronger at higher resolutions. Hence it maybe be necessary + =to scale emissions to gain agreement across resolutions. +!kind=default +sort-key=Panel-A02c +trigger=namelist:aerosol=sea_salt_ems_scaling: .true. ; +type=logical + +[namelist:aerosol=marine_pom_ems_scaling] +compulsory=true +description=Marine POM emission scale factor +help=Scaling factor for marine particulate organic matter emission +!kind=double +range=0.0:10.0 +sort-key=Panel-A02b +type=real + +[namelist:aerosol=sea_salt_ems_scaling] +compulsory=true +description=Sea salt emission scale factor +help=Scaling factor for sea salt emission +!kind=double +range=0.0:10.0 +sort-key=Panel-A02d +type=real + [namelist:aerosol=us_am] compulsory=true description=Multiplicative ustar correction diff --git a/interfaces/physics_schemes_interface/rose-meta/um-aerosol/versions.py b/interfaces/physics_schemes_interface/rose-meta/um-aerosol/versions.py index 01798ad2b..77bd3ff50 100644 --- a/interfaces/physics_schemes_interface/rose-meta/um-aerosol/versions.py +++ b/interfaces/physics_schemes_interface/rose-meta/um-aerosol/versions.py @@ -17,17 +17,17 @@ def __repr__(self): __str__ = __repr__ +class vn31_t360(MacroUpgrade): + # Upgrade macro for #360 by Ian Boutle -""" -Copy this template and complete to add your macro - -class vnXX_txxx(MacroUpgrade): - # Upgrade macro for by - - BEFORE_TAG = "vnX.X" - AFTER_TAG = "vnX.X_txxx" + BEFORE_TAG = "vn3.1" + AFTER_TAG = "vn3.1_t360" def upgrade(self, config, meta_config=None): # Add settings + self.add_setting(config, ["namelist:aerosol","ukca_scale_marine_pom_ems"],".false.") + self.add_setting(config, ["namelist:aerosol","marine_pom_ems_scaling"],"1.0") + self.add_setting(config, ["namelist:aerosol","ukca_scale_sea_salt_ems"],".false.") + self.add_setting(config, ["namelist:aerosol","sea_salt_ems_scaling"],"1.0") return config, self.reports -""" + diff --git a/interfaces/physics_schemes_interface/rose-meta/um-convection/HEAD/rose-meta.conf b/interfaces/physics_schemes_interface/rose-meta/um-convection/HEAD/rose-meta.conf index b63b84efe..bf6e956d1 100644 --- a/interfaces/physics_schemes_interface/rose-meta/um-convection/HEAD/rose-meta.conf +++ b/interfaces/physics_schemes_interface/rose-meta/um-convection/HEAD/rose-meta.conf @@ -9,6 +9,19 @@ ns=namelist/Science/UM Convection sort-key=Section-A06 title=Convection +[namelist:convection=c_mass_sh] +compulsory=true +description=Cloud-base closure scaling for shallow convection +help=In the 6A shallow convection scheme, the cloud-base mass-flux is given by + = Mb = c_mass_sh w* + = where w* is the surface-flux-based convective velocity scale, + = and c_mass_sh is an assumed cloud-base area fraction scaling. + = The published version of the scheme has this set to 0.03. +!kind=double +range=0.01:0.09 +sort-key=Panel-03j +type=real + [namelist:convection=cape_timescale] compulsory=true description=Timescale in seconds for CAPE closure scheme @@ -21,6 +34,54 @@ range=1:9999999 sort-key=Panel-03 type=real +[namelist:convection=cca_md_scaling] +compulsory=true +description=Mid level convective cloud settings: CCA scaling +!kind=double +range=0:10 +sort-key=Panel-03g +type=real + +[namelist:convection=conv_prog_dq] +compulsory=true +description=Applies time smoothing to the convective + =humidity increment and activates the 3D prognostic + =that holds the increment. +help=Applies time smoothing to the convective + =humidity increment and activates the 3D + =prognostic, conv_prog_dq, that holds the increment. +!kind=default +sort-key=Panel-09 +type=logical + +[namelist:convection=conv_prog_dtheta] +compulsory=true +description=Applies time smoothing to the convective potential + =temperature increment and activates the 3D prognostic + =that holds the increment. +help=Applies time smoothing to the convective + =potential temperature increment and activates the 3D + =prognostic, conv_prog_dtheta, that holds the increment. +!kind=default +sort-key=Panel-09 +type=logical + +[namelist:convection=cpress_term] +compulsory=true +description=Coefficient for pressure term relative to shear term + =in Gregory-Kershaw CMT +help=Coefficient for pressure term relative to shear term as in + =Kershaw & Gregory 1997. GK1997 recommended a value of 0.7. + =Controls the amount of momentum transferred from the + =environment to the updraught parcel due to the horizontal + =pressure gradient acting on the parcel. Larger values + =transfer more momentum and hence reduce the difference + =in winds between parcel and environment. 6a Only. +!kind=double +range=0.0:1.0 +sort-key=Panel-03f +type=real + [namelist:convection=cv_scheme] compulsory=true description=Convection scheme @@ -33,11 +94,23 @@ sort-key=Panel-01 trigger=namelist:convection=number_of_convection_substeps: 'gregory_rowntree'; =namelist:convection=cape_timescale: 'gregory_rowntree'; =namelist:convection=efrac: 'gregory_rowntree'; + =namelist:convection=prog_ent_grad: 'gregory_rowntree'; + =namelist:convection=prog_ent_int: 'gregory_rowntree'; + =namelist:convection=prog_ent_max: 'gregory_rowntree'; =namelist:convection=prog_ent_min: 'gregory_rowntree'; =namelist:convection=orig_mdet_fac: 'gregory_rowntree'; + =namelist:convection=r_det: 'gregory_rowntree'; + =namelist:convection=cca_md_scaling: 'gregory_rowntree'; + =namelist:convection=cpress_term: 'gregory_rowntree'; + =namelist:convection=ent_fac_sh: 'gregory_rowntree'; + =namelist:convection=thpixs_mid: 'gregory_rowntree'; + =namelist:convection=c_mass_sh: 'gregory_rowntree'; + =namelist:convection=conv_prog_dq: 'gregory_rowntree', 'comorph'; + =namelist:convection=conv_prog_dtheta: 'gregory_rowntree', 'comorph'; =namelist:convection=par_gen_mass_fac: 'comorph'; =namelist:convection=par_gen_rhpert: 'comorph'; =namelist:convection=par_radius_ppn_max: 'comorph'; + =namelist:convection=resdep_precipramp: 'comorph'; value-titles=GregoryRowntree, LambertLewis, Comorph values='gregory_rowntree','lambert_lewis','comorph' @@ -66,6 +139,16 @@ range=-10.0:10.0 sort-key=Panel-03b type=real +[namelist:convection=ent_fac_sh] +compulsory=true +description=Controls shallow convection entrainment. +help=Factor multiplying entrainment expression. + = Only applies to 6A convection. +!kind=double +range=0.33:3.00 +sort-key=Panel-03i +type=real + [namelist:convection=l_cvdiag_ctop_qmax] compulsory=true description=Revised check for well-mixed q-profile in convective diagnosis. @@ -82,6 +165,24 @@ help=In the convective diagnosis "cumulus test", use a revised sort-key=Panel-01 type=logical +[namelist:convection=mparwtr] +compulsory=true +description=Maximum critical cloud condensate +help=Maximum Critical Cloud Condensate + = + = This sets the maximum value of the critical cloud condensate profile. + = This is related to the option settings for + = namelist:run_convection=ccw_for_precip_opt . + = This will always be the maximum value for option 4. + = mparwtr will always be used in options 0-3 but because of the + = critical cloud depths (option 0) or other scalings (options 1-3) + = it will not always directly equate to the maximum value of the + = critical cloud condensate. +!kind=double +range=1e-5:1e-2 +sort-key=Panel-03a +type=real + [namelist:convection=number_of_convection_substeps] compulsory=true description=Number of convection substeps per model time step @@ -133,6 +234,43 @@ help=Scales the parcel initial radius, which determines the entrainment rate. sort-key=Panel-06 type=real +[namelist:convection=prog_ent_grad] +compulsory=true +description=Gradient used to calculate entrainment scaling from prognostic field +help=Gradient term used to calculate entrainment scaling from + = 3d prognostic field based on surface precipitation. Usually negative + = because a greater precipitation implies smaller entrainment rates. + = 6a scheme only. Used under ent_opt_md,ent_opt_dp=6 or 7 and needs + = l_conv_prog_precip=T. +!kind=double +range=-3.0:0.0 +sort-key=Panel-03c +type=real + +[namelist:convection=prog_ent_int] +compulsory=true +description=Intercept used to calculate entrainment scaling from prognostic field +help=Intercept term used to calculate entrainment scaling from + = 3d prognostic field based on surface precipitation. + = 6a scheme only. Used under ent_opt_md,ent_opt_dp=6 or 7 and needs + = l_conv_prog_precip=T. +!kind=double +range=-5.0:5.0 +sort-key=Panel-03c +type=real + +[namelist:convection=prog_ent_max] +compulsory=true +description=Maximum scaling when calculating entrainment from prognostic field +help=Maximum scaling applied when calculating entrainment scaling from + = 3d prognostic field based on surface precipitation. + = 6a scheme only. Used under ent_opt_md,ent_opt_dp=6 or 7 and needs + = l_conv_prog_precip=T. +!kind=double +range=0.0:5.0 +sort-key=Panel-03c +type=real + [namelist:convection=prog_ent_min] compulsory=true description=Minimum scaling when calculating entrainment from prognostic field @@ -159,6 +297,14 @@ range=0:1e-3 sort-key=Panel-03a type=real +[namelist:convection=r_det] +compulsory=true +description=Adaptive detrainment control parameter +!kind=double +range=0:1 +sort-key=Panel-03e +type=real + [namelist:convection=resdep_precipramp] compulsory=true description=Include grid-length dependence in Comorph A parcel radius precip ramp @@ -167,4 +313,20 @@ help=Option to make the CoMorph A parcel radius dependence on the =the ability to resolve higher precip rates at higher resolution. !kind=default sort-key=Panel-07 +trigger=namelist:convection=dx_ref: .true.; type=logical + +[namelist:convection=thpixs_mid] +compulsory=true +description=The initial mid-level parcel potential temperature perturbation (K) +help=The initial mid-level temperature perturbation prior to any scaling. + =For md_pert_opt option 0 this just sets the temperature perturbation prior + =to pressure scaling. + =For md_pert_opt options 1 and 2 this ultimately results in a + =buoyancy perturbation of thpixs_mid scaled with pressure thickness, + =with the split between humidity and temperature being controlled via + =the parameter efrac (options 1 and 2) and the surface fluxes (option 2). +!kind=double +range=0.0:2.0 +sort-key=Panel-03h +type=real diff --git a/interfaces/physics_schemes_interface/rose-meta/um-convection/versions.py b/interfaces/physics_schemes_interface/rose-meta/um-convection/versions.py index 01798ad2b..8f0498662 100644 --- a/interfaces/physics_schemes_interface/rose-meta/um-convection/versions.py +++ b/interfaces/physics_schemes_interface/rose-meta/um-convection/versions.py @@ -18,16 +18,32 @@ def __repr__(self): __str__ = __repr__ -""" -Copy this template and complete to add your macro +class vn31_t360(MacroUpgrade): + # Upgrade macro for #360 by Ian Boutle -class vnXX_txxx(MacroUpgrade): - # Upgrade macro for by - - BEFORE_TAG = "vnX.X" - AFTER_TAG = "vnX.X_txxx" + BEFORE_TAG = "vn3.1" + AFTER_TAG = "vn3.1_t360" def upgrade(self, config, meta_config=None): # Add settings + # 0.66 and 1.2 are tuned GC6 values (0.5 and 0.8 originally) + self.add_setting(config, ["namelist:convection","r_det"],"0.5") + self.add_setting(config, ["namelist:convection","cca_md_scaling"],"0.8") + # These settings are unchanged + self.add_setting(config, ["namelist:convection","prog_ent_grad"],"-1.1") + self.add_setting(config, ["namelist:convection","prog_ent_int"],"-2.9") + self.add_setting(config, ["namelist:convection","prog_ent_max"],"2.5") + self.add_setting(config, ["namelist:convection","cpress_term"],"0.3") + self.add_setting(config, ["namelist:convection","ent_fac_sh"],"1.0") + self.add_setting(config, ["namelist:convection","mparwtr"],"1.0e-3") + self.add_setting(config, ["namelist:convection","thpixs_mid"],"0.5") + self.add_setting(config, ["namelist:convection","c_mass_sh"],"0.03") + cv_scheme = self.get_setting_value(config, ["namelist:convection", "cv_scheme"]) + if cv_scheme == "'comorph'": + self.add_setting(config, ["namelist:convection","conv_prog_dtheta"],".false.") + self.add_setting(config, ["namelist:convection","conv_prog_dq"],".false.") + else: + self.add_setting(config, ["namelist:convection","conv_prog_dtheta"],".true.") + self.add_setting(config, ["namelist:convection","conv_prog_dq"],".true.") return config, self.reports -""" + diff --git a/interfaces/physics_schemes_interface/rose-meta/um-microphysics/HEAD/rose-meta.conf b/interfaces/physics_schemes_interface/rose-meta/um-microphysics/HEAD/rose-meta.conf index 0c542ee37..fcb290645 100644 --- a/interfaces/physics_schemes_interface/rose-meta/um-microphysics/HEAD/rose-meta.conf +++ b/interfaces/physics_schemes_interface/rose-meta/um-microphysics/HEAD/rose-meta.conf @@ -45,6 +45,30 @@ range=0:1 sort-key=Panel-A01b type=real +[namelist:microphysics=ai] +compulsory=true +description=Aggregate mass coefficient +help=This allows the explicit input of ice particle mass- + =diameter relationships. The mass-diameter is of ice + =aggregates is defined as m(D) = ai D^bi. This variable + =is ai in this relationship and should take a positive value. +!kind=double +ns=namelist/Science/UM Microphysics +range=0: +sort-key=Panel-A01g +type=real + +[namelist:microphysics=aut_qc] +compulsory=true +description=qcl exponent for autoconversion rate calculation +help=Exponent applied to cloud water content in autoconversion rate calculation + =in Khairoutdinov & Kogan (2000, MWR) parameterization (l_warm_new=.true.) +!kind=double +ns=namelist/Science/UM Microphysics +range=2.0:3.5 +sort-key=Panel-A05 +type=real + [namelist:microphysics=c_r_correl] compulsory=true description=Cloud-rain correlation coefficient @@ -81,7 +105,7 @@ help=When two different ice fall speeds are used, !kind=default ns=namelist/Science/UM Microphysics range=0:1e7 -sort-key=Panel-A01b +sort-key=Panel-A01h type=real [namelist:microphysics=cic_input] @@ -94,7 +118,7 @@ help=When two different ice fall speeds are used, !kind=default ns=namelist/Science/UM Microphysics range=0:1e7 -sort-key=Panel-A01b +sort-key=Panel-A01h type=real [namelist:microphysics=droplet_tpr] @@ -282,8 +306,12 @@ trigger=namelist:microphysics=casim_cdnc_opt: .true.; =namelist:microphysics=orog_rain: .false.; =namelist:microphysics=prog_tnuc: .false.; =namelist:microphysics=c_r_correl: .false.; + =namelist:microphysics=aut_qc: .false.; =namelist:microphysics=l_mcr_precfrac: .false.; =namelist:microphysics=l_proc_fluxes: .false.; + =namelist:microphysics=heavy_rain_evap_fac: .false.; + =namelist:microphysics=ci_input: .false.; + =namelist:microphysics=cic_input: .false.; type=logical [namelist:microphysics=mp_dz_scal] diff --git a/interfaces/physics_schemes_interface/rose-meta/um-microphysics/versions.py b/interfaces/physics_schemes_interface/rose-meta/um-microphysics/versions.py index 01798ad2b..675ac7dae 100644 --- a/interfaces/physics_schemes_interface/rose-meta/um-microphysics/versions.py +++ b/interfaces/physics_schemes_interface/rose-meta/um-microphysics/versions.py @@ -18,16 +18,14 @@ def __repr__(self): __str__ = __repr__ -""" -Copy this template and complete to add your macro +class vn31_t360(MacroUpgrade): + # Upgrade macro for #360 by Ian Boutle -class vnXX_txxx(MacroUpgrade): - # Upgrade macro for by - - BEFORE_TAG = "vnX.X" - AFTER_TAG = "vnX.X_txxx" + BEFORE_TAG = "vn3.1" + AFTER_TAG = "vn3.1_t360" def upgrade(self, config, meta_config=None): # Add settings + self.add_setting(config, ["namelist:microphysics","aut_qc"],"2.47") + self.add_setting(config, ["namelist:microphysics","ai"],"2.57e-2") return config, self.reports -""" diff --git a/interfaces/physics_schemes_interface/rose-meta/um-stochastic_physics/HEAD/rose-meta.conf b/interfaces/physics_schemes_interface/rose-meta/um-stochastic_physics/HEAD/rose-meta.conf index 957c94aad..7620194b5 100644 --- a/interfaces/physics_schemes_interface/rose-meta/um-stochastic_physics/HEAD/rose-meta.conf +++ b/interfaces/physics_schemes_interface/rose-meta/um-stochastic_physics/HEAD/rose-meta.conf @@ -694,6 +694,19 @@ ns=namelist/Science/Stochastic Physics/RP sort-key=Panel-A08 type=real +[namelist:stochastic_physics=rp_mp_ci] +compulsory=true +description=Ice fall speed multiplication factor; min / default / max values +fail-if=(this(1) > this(2)) or (this(3) < this(2)); +help=Parameter controlling ice fall speed in WB Microphysics schemes. + =Min, default and max values of m_ci are set here + =Recommended values are 0.6 /1.0 / 1.4 + =N.B. parameter does not update - only provided for GC6-central +length=3 +ns=namelist/Science/Stochastic Physics/RP +sort-key=Panel-A08 +type=real + [namelist:stochastic_physics=rp_mp_mp_czero] compulsory=true description=Lagrangian structure function parameter; @@ -1203,6 +1216,7 @@ trigger=namelist:stochastic_physics=rp_bl_a_ent_1: .true. ; =namelist:stochastic_physics=rp_lsfc_z0v: .true. ; =namelist:stochastic_physics=rp_mp_ice_fspd: .true. ; =namelist:stochastic_physics=rp_mp_fxd_cld_num: .true. ; + =namelist:stochastic_physics=rp_mp_ci: .true. ; =namelist:stochastic_physics=rp_mp_mp_czero: .true. ; =namelist:stochastic_physics=rp_mp_mpof: .true. ; =namelist:stochastic_physics=rp_mp_ndrop_surf: .true. ; diff --git a/interfaces/physics_schemes_interface/rose-meta/um-stochastic_physics/versions.py b/interfaces/physics_schemes_interface/rose-meta/um-stochastic_physics/versions.py index 01798ad2b..a0364a1b5 100644 --- a/interfaces/physics_schemes_interface/rose-meta/um-stochastic_physics/versions.py +++ b/interfaces/physics_schemes_interface/rose-meta/um-stochastic_physics/versions.py @@ -17,17 +17,18 @@ def __repr__(self): __str__ = __repr__ +class vn31_t360(MacroUpgrade): + # Upgrade macro for #360 by Ian Boutle -""" -Copy this template and complete to add your macro - -class vnXX_txxx(MacroUpgrade): - # Upgrade macro for by - - BEFORE_TAG = "vnX.X" - AFTER_TAG = "vnX.X_txxx" + BEFORE_TAG = "vn3.1" + AFTER_TAG = "vn3.1_t360" def upgrade(self, config, meta_config=None): # Add settings + self.add_setting( + config, + ["namelist:stochastic_physics", "rp_mp_ci"], + "1.0,1.0,1.0", + ) return config, self.reports -""" + 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 b1ca9c1fe..4e61e617d 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 @@ -126,9 +126,20 @@ module um_physics_init_mod number_of_convection_substeps,& cape_timescale_in => cape_timescale, & qlmin_in => qlmin, & + mparwtr_in => mparwtr, & efrac_in => efrac, & + prog_ent_grad_in => prog_ent_grad, & + prog_ent_int_in => prog_ent_int, & + prog_ent_max_in => prog_ent_max, & prog_ent_min_in => prog_ent_min, & orig_mdet_fac_in => orig_mdet_fac, & + r_det_in => r_det, & + cca_md_scaling, & + cpress_term_in => cpress_term, & + ent_fac_sh_in => ent_fac_sh, & + thpixs_mid_in => thpixs_mid, & + c_mass_sh_in => c_mass_sh, & + conv_prog_dtheta, conv_prog_dq, & par_gen_mass_fac_in => par_gen_mass_fac, & par_gen_rhpert_in => par_gen_rhpert, & par_radius_ppn_max_in => par_radius_ppn_max, & @@ -160,6 +171,8 @@ module um_physics_init_mod ci_input_in => ci_input, & cic_input_in => cic_input, & c_r_correl_in => c_r_correl, & + aut_qc_in => aut_qc, & + ai_in => ai, & l_proc_fluxes_in => l_proc_fluxes, & l_mcr_precfrac_in => l_mcr_precfrac, & i_update_precfrac_in => i_update_precfrac,& @@ -254,6 +267,7 @@ module um_physics_init_mod rp_lsfc_z0v, & rp_mp_ice_fspd, & rp_mp_fxd_cld_num, & + rp_mp_ci, & rp_mp_mp_czero, & rp_mp_mpof, & rp_mp_ndrop_surf, & @@ -477,7 +491,7 @@ subroutine um_physics_init() a_ent_shr_rp_max, alnir_rp, alpar_rp, cbl_mix_fac_rp, cs_rp, & fxd_cld_num_rp, g0_rp, g1_rp, ice_fspd_rp, i_rp_scheme, l_rp2, & l_rp2_cycle_in, l_rp2_cycle_out, lai_mult_rp, lambda_min_rp, & - mp_czero_rp, mpof_rp, ndrop_surf_rp, omega_rp, omnir_rp, & + m_ci_rp, mp_czero_rp, mpof_rp, ndrop_surf_rp, omega_rp, omnir_rp, & orog_drag_param_rp, par_mezcla_rp, ran_max, ricrit_rp, & rp2_callfreq, rp2_cycle_tm, rp2_decorr_ts, snow_fspd_rp, & z0_soil_rp, z0_urban_mult_rp, z0hm_soil_rp, z0hm_pft_rp, z0v_rp @@ -812,7 +826,7 @@ subroutine um_physics_init() ! Options needed by all convection schemes l_param_conv = .true. fac_qsat = 0.350_r_um - mparwtr = 1.0000e-3_r_um + mparwtr = mparwtr_in qlmin = qlmin_in ! Options which are bespoke to the choice of scheme @@ -837,6 +851,10 @@ subroutine um_physics_init() l_mom = .true. l_ccrad = .true. l_3d_cca = .true. + l_conv_prog_dtheta = conv_prog_dtheta + l_conv_prog_dq = conv_prog_dq + tau_conv_prog_dtheta = 2700.0_r_um + tau_conv_prog_dq = 2700.0_r_um ! main Comorph options ass_min_radius = 500.0_r_um @@ -897,7 +915,7 @@ subroutine um_physics_init() cca2d_md_opt = 2 cca2d_sh_opt = 2 cca_dp_knob = 0.80_r_um - cca_md_knob = 0.80_r_um + cca_md_knob = cca_md_scaling cca_sh_knob = 0.40_r_um ccw_dp_knob = 1.00_r_um ccw_for_precip_opt = 4 @@ -906,7 +924,7 @@ subroutine um_physics_init() cldbase_opt_md = 2 cnv_cold_pools = 0 cnv_wat_load_opt = 0 - cpress_term = 0.3_r_um + cpress_term = cpress_term_in dd_opt = 1 deep_cmt_opt = 6 eff_dcff = 3.0_r_um @@ -925,8 +943,8 @@ subroutine um_physics_init() l_ccrad = .true. l_cmt_heating = .true. l_conv_prog_precip = .true. - l_conv_prog_dtheta = .true. - l_conv_prog_dq = .true. + l_conv_prog_dtheta = conv_prog_dtheta + l_conv_prog_dq = conv_prog_dq l_cv_conserve_check = .true. l_fcape = .true. l_mom = .true. @@ -941,24 +959,24 @@ subroutine um_physics_init() n_conv_calls = number_of_convection_substeps pr_melt_frz_opt = 2 qstice = 3.5000e-3_r_um - r_det = 0.5000_r_um + r_det = r_det_in rad_cloud_decay_opt = 0 sh_pert_opt = 1 t_melt_snow = 276.15_r_um termconv = 2 tice = 263.1500_r_um - thpixs_mid = 0.5_r_um + thpixs_mid = thpixs_mid_in tower_factor = 1.0000_r_um ud_factor = 1.0000_r_um tau_conv_prog_precip = 10800.0_r_um tau_conv_prog_dtheta = 2700.0_r_um tau_conv_prog_dq = 2700.0_r_um - prog_ent_grad = -1.1_r_um - prog_ent_int = -2.9_r_um + prog_ent_grad = prog_ent_grad_in + prog_ent_int = prog_ent_int_in prog_ent_min = prog_ent_min_in - prog_ent_max = 2.5_r_um - ent_fac_sh = 1.0_r_um - c_mass_sh = 0.03_r_um + prog_ent_max = prog_ent_max_in + ent_fac_sh = ent_fac_sh_in + c_mass_sh = c_mass_sh_in orig_mdet_fac = orig_mdet_fac_in case(cv_scheme_lambert_lewis) @@ -1180,7 +1198,7 @@ subroutine um_physics_init() ! The following are needed by the bimodal cloud scheme, hence we initialise ! them even when microphysics isn't used - ai = 2.5700e-2_r_um + ai = ai_in bi = 2.00_r_um cx(84) = 1.0_r_um constp(35) = 1.0_r_um @@ -1278,7 +1296,7 @@ subroutine um_physics_init() sediment_loc = all_sed_start timestep_mp_in = 120 z_surf = real(z_surf_in, r_um) - aut_qc = 2.47_r_um + aut_qc = aut_qc_in ! Needed by the Seeder Feeder scheme l_orograin = orog_rain l_orogrime = orog_rime @@ -1597,6 +1615,7 @@ subroutine um_physics_init() g1_rp = rp_bl_cld_top_diffusion ice_fspd_rp = rp_mp_ice_fspd lambda_min_rp = rp_bl_min_mix_length + m_ci_rp = rp_mp_ci mp_czero_rp = rp_mp_mp_czero mpof_rp = rp_mp_mpof ndrop_surf_rp = rp_mp_ndrop_surf diff --git a/interfaces/physics_schemes_interface/source/support/um_ukca_init_mod.f90 b/interfaces/physics_schemes_interface/source/support/um_ukca_init_mod.f90 index 351f034ba..200963137 100644 --- a/interfaces/physics_schemes_interface/source/support/um_ukca_init_mod.f90 +++ b/interfaces/physics_schemes_interface/source/support/um_ukca_init_mod.f90 @@ -12,7 +12,11 @@ module um_ukca_init_mod glomap_mode_ukca, & glomap_mode_dust_and_clim, & emissions, emissions_GC3, emissions_GC5,& - easyaerosol_cdnc, ukca_mode_seg_size + easyaerosol_cdnc, ukca_mode_seg_size, & + ukca_scale_marine_pom_ems, & + marine_pom_ems_scaling, & + ukca_scale_sea_salt_ems, & + sea_salt_ems_scaling use section_choice_config_mod, only: aerosol, aerosol_um use chemistry_config_mod, only: chem_scheme, chem_scheme_offline_ox, & chem_scheme_strattrop, chem_scheme_none,& @@ -1039,6 +1043,10 @@ subroutine ukca_init( row_length, rows, model_levels, bl_levels, & l_bcoc_ff=.true., & l_ukca_scale_biom_aer_ems=.true., & biom_aer_ems_scaling=2.0_r_um, & + l_ukca_scale_marine_pom_ems=ukca_scale_marine_pom_ems, & + marine_pom_ems_scaling=marine_pom_ems_scaling, & + l_ukca_scale_sea_salt_ems=ukca_scale_sea_salt_ems, & + sea_salt_ems_scaling=sea_salt_ems_scaling, & ! GLOMAP feedback configuration options l_ukca_radaer=.true., & i_ukca_tune_bc=i_ukca_bc_tuned, &