diff --git a/rose-meta/jules-lfric/HEAD/rose-meta.conf b/rose-meta/jules-lfric/HEAD/rose-meta.conf index be744372..a187cd38 100644 --- a/rose-meta/jules-lfric/HEAD/rose-meta.conf +++ b/rose-meta/jules-lfric/HEAD/rose-meta.conf @@ -57,466 +57,16 @@ trigger=namelist:jules_pftparm=fsmc_mod_io: 'not_lfric'; value-titles=LFRic values='lfric' -[namelist:jules_pftparm] -description=This section is organised into one panel per PFT using the instance key "pft_name_io". -duplicate=true -!instance_key_member=pft_name_io - -[namelist:jules_pftparm=a_wl_io] -fail-if= -!ns= - -[namelist:jules_pftparm=a_ws_io] -fail-if= -!ns= - -[namelist:jules_pftparm=act_jmax_io] -fail-if= -!ns= - -[namelist:jules_pftparm=act_vcmax_io] -fail-if= -!ns= - -[namelist:jules_pftparm=aef_io] -fail-if= -!ns= - -[namelist:jules_pftparm=albsnc_max_io] -fail-if= -!ns= - -[namelist:jules_pftparm=albsnc_min_io] -fail-if= -!ns= - -[namelist:jules_pftparm=albsnf_max_io] -fail-if= -!ns= - -[namelist:jules_pftparm=albsnf_maxl_io] -fail-if= -!ns= - -[namelist:jules_pftparm=albsnf_maxu_io] -fail-if= -!ns= - -[namelist:jules_pftparm=alnir_io] -fail-if= -!ns= - -[namelist:jules_pftparm=alnirl_io] -fail-if= -!ns= - -[namelist:jules_pftparm=alniru_io] -fail-if= -!ns= - -[namelist:jules_pftparm=alpar_io] -fail-if= -!ns= - -[namelist:jules_pftparm=alparl_io] -fail-if= -!ns= - -[namelist:jules_pftparm=alparu_io] -fail-if= -!ns= - -[namelist:jules_pftparm=alpha_elec_io] -fail-if= -!ns= - -[namelist:jules_pftparm=alpha_io] -fail-if= -!ns= - -[namelist:jules_pftparm=avg_ba_io] -fail-if= -!ns= - -[namelist:jules_pftparm=b_wl_io] -fail-if= -!ns= - [namelist:jules_pftparm=c3_io] -fail-if= -!ns= values='no','yes' -[namelist:jules_pftparm=can_struct_a_io] -fail-if= -!ns= - -[namelist:jules_pftparm=catch0_io] -fail-if= -!ns= - -[namelist:jules_pftparm=ccleaf_max_io] -fail-if= -!ns= - -[namelist:jules_pftparm=ccleaf_min_io] -fail-if= -!ns= - -[namelist:jules_pftparm=ccwood_max_io] -fail-if= -!ns= - -[namelist:jules_pftparm=ccwood_min_io] -fail-if= -!ns= - -[namelist:jules_pftparm=ci_st_io] -fail-if= -!ns= - -[namelist:jules_pftparm=dcatch_dlai_io] -fail-if= -!ns= - -[namelist:jules_pftparm=deact_jmax_io] -fail-if= -!ns= - -[namelist:jules_pftparm=deact_vcmax_io] -fail-if= -!ns= - -[namelist:jules_pftparm=dfp_dcuo_io] -fail-if= -!ns= - -[namelist:jules_pftparm=dgl_dm_io] -fail-if= -!ns= - -[namelist:jules_pftparm=dgl_dt_io] -fail-if= -!ns= - -[namelist:jules_pftparm=dqcrit_io] -fail-if= -!ns= - -[namelist:jules_pftparm=ds_jmax_io] -fail-if= -!ns= - -[namelist:jules_pftparm=ds_vcmax_io] -fail-if= -!ns= - -[namelist:jules_pftparm=dust_veg_scj_io] -fail-if= -!ns= - -[namelist:jules_pftparm=dz0v_dh_io] -fail-if= -!ns= - -[namelist:jules_pftparm=emis_pft_io] -fail-if= -!ns= - -[namelist:jules_pftparm=eta_sl_io] -fail-if= -!ns= - -[namelist:jules_pftparm=f0_io] -fail-if= -!ns= - -[namelist:jules_pftparm=fd_io] -fail-if= -!ns= - -[namelist:jules_pftparm=fef_bc_io] -fail-if= -!ns= - -[namelist:jules_pftparm=fef_c2h4_io] -fail-if= -!ns= - -[namelist:jules_pftparm=fef_c2h6_io] -fail-if= -!ns= - -[namelist:jules_pftparm=fef_c3h8_io] -fail-if= -!ns= - -[namelist:jules_pftparm=fef_ch4_io] -fail-if= -!ns= - -[namelist:jules_pftparm=fef_co2_io] -fail-if= -!ns= - -[namelist:jules_pftparm=fef_co_io] -fail-if= -!ns= - -[namelist:jules_pftparm=fef_dms_io] -fail-if= -!ns= - -[namelist:jules_pftparm=fef_hcho_io] -fail-if= -!ns= - -[namelist:jules_pftparm=fef_mecho_io] -fail-if= -!ns= - -[namelist:jules_pftparm=fef_nh3_io] -fail-if= -!ns= - -[namelist:jules_pftparm=fef_nox_io] -fail-if= -!ns= - -[namelist:jules_pftparm=fef_oc_io] -fail-if= -!ns= - -[namelist:jules_pftparm=fef_so2_io] -fail-if= -!ns= - -[namelist:jules_pftparm=fire_mort_io] -fail-if= -!ns= - -[namelist:jules_pftparm=fl_o3_ct_io] -fail-if= -!ns= - [namelist:jules_pftparm=fsmc_mod_io] fail-if= -!ns= values='weight','average' -[namelist:jules_pftparm=fsmc_of_io] -fail-if= -!ns= - -[namelist:jules_pftparm=fsmc_p0_io] -fail-if= -!ns= - -[namelist:jules_pftparm=g1_stomata_io] -fail-if= -!ns= - -[namelist:jules_pftparm=g_leaf_0_io] -fail-if= -!ns= - -[namelist:jules_pftparm=glmin_io] -fail-if= -!ns= - -[namelist:jules_pftparm=gpp_st_io] -fail-if= -!ns= - -[namelist:jules_pftparm=gsoil_f_io] -fail-if= -!ns= - -[namelist:jules_pftparm=hw_sw_io] -fail-if= -!ns= - -[namelist:jules_pftparm=ief_io] -fail-if= -!ns= - -[namelist:jules_pftparm=infil_f_io] -fail-if= -!ns= - -[namelist:jules_pftparm=jv25_ratio_io] -fail-if= -!ns= - -[namelist:jules_pftparm=kext_io] -fail-if= -!ns= - -[namelist:jules_pftparm=kn_io] -fail-if= -!ns= - -[namelist:jules_pftparm=knl_io] -fail-if= -!ns= - -[namelist:jules_pftparm=kpar_io] -fail-if= -!ns= - -[namelist:jules_pftparm=lai_alb_lim_io] -fail-if= -!ns= - -[namelist:jules_pftparm=lma_io] -fail-if= -!ns= - -[namelist:jules_pftparm=mef_io] -fail-if= -!ns= - -[namelist:jules_pftparm=neff_io] -fail-if= -!ns= - -[namelist:jules_pftparm=nl0_io] -fail-if= -!ns= - -[namelist:jules_pftparm=nmass_io] -fail-if= -!ns= - -[namelist:jules_pftparm=nr_io] -fail-if= -!ns= - -[namelist:jules_pftparm=nr_nl_io] -fail-if= -!ns= - -[namelist:jules_pftparm=ns_nl_io] -fail-if= -!ns= - -[namelist:jules_pftparm=nsw_io] -fail-if= -!ns= - -[namelist:jules_pftparm=omega_io] -fail-if= -!ns= - -[namelist:jules_pftparm=omegal_io] -fail-if= -!ns= - -[namelist:jules_pftparm=omegau_io] -fail-if= -!ns= - -[namelist:jules_pftparm=omnir_io] -fail-if= -!ns= - -[namelist:jules_pftparm=omnirl_io] -fail-if= -!ns= - -[namelist:jules_pftparm=omniru_io] -fail-if= -!ns= - [namelist:jules_pftparm=orient_io] -fail-if= -!ns= values='spherical','horizontal' -[namelist:jules_pftparm=pft_name_io] -fail-if= -!ns= - -[namelist:jules_pftparm=psi_close_io] -fail-if= -!ns= - -[namelist:jules_pftparm=psi_open_io] -fail-if= -!ns= - -[namelist:jules_pftparm=q10_leaf_io] -fail-if= -!ns= - -[namelist:jules_pftparm=r_grow_io] -fail-if= -!ns= - -[namelist:jules_pftparm=rootd_ft_io] -fail-if= -!ns= - -[namelist:jules_pftparm=sigl_io] -fail-if= -!ns= - -[namelist:jules_pftparm=sox_a_io] -fail-if= -!ns= - -[namelist:jules_pftparm=sox_p50_io] -fail-if= -!ns= - -[namelist:jules_pftparm=sox_rp_min_io] -fail-if= -!ns= - -[namelist:jules_pftparm=sug_g0_io] -fail-if= -!ns= - -[namelist:jules_pftparm=sug_grec_io] -fail-if= -!ns= - -[namelist:jules_pftparm=sug_yg_io] -fail-if= -!ns= - -[namelist:jules_pftparm=tef_io] -fail-if= -!ns= - -[namelist:jules_pftparm=tleaf_of_io] -fail-if= -!ns= - -[namelist:jules_pftparm=tlow_io] -fail-if= -!ns= - -[namelist:jules_pftparm=tupp_io] -fail-if= -!ns= - -[namelist:jules_pftparm=vint_io] -fail-if= -!ns= - -[namelist:jules_pftparm=vsl_io] -fail-if= -!ns= - -[namelist:jules_pftparm=z0hm_pft_io] -fail-if= -!ns= - -[namelist:jules_pftparm=z0v_io] -fail-if= -!ns= - [namelist:jules_radiation=fixed_sea_albedo] description=If using i_sea_alb_method='fixed', the global value of albedo to use. diff --git a/rose-meta/jules-shared/jules-model-environment/HEAD/rose-meta.conf b/rose-meta/jules-shared/jules-model-environment/HEAD/rose-meta.conf index adc29f7c..02a82a1e 100644 --- a/rose-meta/jules-shared/jules-model-environment/HEAD/rose-meta.conf +++ b/rose-meta/jules-shared/jules-model-environment/HEAD/rose-meta.conf @@ -23,7 +23,6 @@ trigger=namelist:jules_deposition=l_deposition_from_ukca: 1; =namelist:jules_irrig=l_irrig_limit: 0; =namelist:jules_pftparm=dust_veg_scj_io: 1; =namelist:jules_pftparm=fsmc_mod_io: 0; - =namelist:jules_pftparm=pft_name_io: 3; =namelist:jules_radiation=l_cosz: 0; =namelist:jules_radiation=l_dolr_land_black: 1; =namelist:jules_radiation=l_sea_alb_var_chl: 1; @@ -163,6 +162,7 @@ trigger=namelist:jules_pftparm: 1; =namelist:jules_pftparm=omnirl_io: 1; =namelist:jules_pftparm=omniru_io: 1; =namelist:jules_pftparm=orient_io: 1; + =namelist:jules_pftparm=pft_name_io: 1; =namelist:jules_pftparm=psi_close_io: 1; =namelist:jules_pftparm=psi_open_io: 1; =namelist:jules_pftparm=q10_leaf_io: 1; diff --git a/rose-meta/jules-shared/jules-pftparm/HEAD/rose-meta.conf b/rose-meta/jules-shared/jules-pftparm/HEAD/rose-meta.conf index cb18e53a..7948fb01 100644 --- a/rose-meta/jules-shared/jules-pftparm/HEAD/rose-meta.conf +++ b/rose-meta/jules-shared/jules-pftparm/HEAD/rose-meta.conf @@ -1,8 +1,8 @@ [namelist:jules_pftparm] compulsory=true -description=This section is organised into two panels: - = "Radiation parameters" contains parameters related to radiative transfer in vegetation, - = "Other parameters" contains everything else. +description=This section is organised into one panel per PFT using the instance key "pft_name_io". +duplicate=true +!instance_key_member=pft_name_io ns=namelist/JULES Science Settings/jules_pftparm sort-key=Section-A12l title=PFT parameters @@ -12,9 +12,7 @@ widget[rose-config-edit]=cylc8_compat.PageArrayTable [namelist:jules_pftparm=a_wl_io] compulsory=true description=Allometric coefficient relating the target woody biomass to the leaf area index (kg carbon m-2) -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::a_wl_io @@ -22,9 +20,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=a_ws_io] compulsory=true description=Woody biomass as a multiple of live stem biomass -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::a_ws_io @@ -32,8 +28,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=act_jmax_io] compulsory=true description=Activation energy for temperature response of Jmax -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO20b type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::act_jmax_io @@ -41,8 +35,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=act_vcmax_io] compulsory=true description=Activation energy for temperature response of Vcmax -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO20b type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::act_vcmax_io @@ -50,8 +42,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=aef_io] compulsory=true description=Acetone emission factor per PFT (μgC g-1 h-1) -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO10 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::aef_io @@ -59,9 +49,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=albsnc_max_io] compulsory=true description=Snow-covered albedo for large LAI -fail-if=len(this) != namelist:jules_surface_types=npft !kind=default -ns=namelist/JULES Science Settings/jules_pftparm/Radiation parameters range=0:1 sort-key=Panel-HR03 type=real @@ -70,9 +58,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=albsnc_min_io] compulsory=true description=Snow-covered albedo for zero LAI -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Radiation parameters range=0:1 sort-key=Panel-HR03 type=real @@ -81,8 +67,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=albsnf_max_io] compulsory=true description=Snow-free albedo for large LAI -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Radiation parameters range=0:1 sort-key=Panel-HR03 type=real @@ -91,9 +75,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=albsnf_maxl_io] compulsory=true description=Lower limit on albsnf_max_io -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Radiation parameters range=0:1 sort-key=Panel-HR03 type=real @@ -102,9 +84,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=albsnf_maxu_io] compulsory=true description=Upper limit on albsnf_max_io -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Radiation parameters range=0:1 sort-key=Panel-HR03 type=real @@ -114,9 +94,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES compulsory=true description=NIR Leaf reflection coeff. =Leaf reflection coefficient for Near Infra Red wavelengths > 690nm. -fail-if=len(this) != namelist:jules_surface_types=npft !kind=default -ns=namelist/JULES Science Settings/jules_pftparm/Radiation parameters range=0:1 sort-key=Panel-HR03 type=real @@ -125,9 +103,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=alnirl_io] compulsory=true description=Lower limit on alnir_io -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Radiation parameters range=0:1 sort-key=Panel-HR03 type=real @@ -136,9 +112,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=alniru_io] compulsory=true description=Upper limit on alnir_io -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Radiation parameters range=0:1 sort-key=Panel-HR03 type=real @@ -148,9 +122,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES compulsory=true description=VIS Leaf reflection coeff. =Leaf reflection coefficient for wavelengths < 690nm (Photosyntehtically Active Radiation). -fail-if=len(this) != namelist:jules_surface_types=npft !kind=default -ns=namelist/JULES Science Settings/jules_pftparm/Radiation parameters range=0:1 sort-key=Panel-HR03 type=real @@ -159,9 +131,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=alparl_io] compulsory=true description=Lower limit on alpar_io -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Radiation parameters range=0:1 sort-key=Panel-HR03 type=real @@ -170,9 +140,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=alparu_io] compulsory=true description=Upper limit on alpar_io -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Radiation parameters range=0:1 sort-key=Panel-HR03 type=real @@ -181,8 +149,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=alpha_elec_io] compulsory=true description=Quantum yield of electron transport (mol electrons/mol PAR photons) -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO20 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::alpha_elec_io @@ -190,9 +156,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=alpha_io] compulsory=true description=Quantum efficiency of photosynthesis (mol CO2/mol PAR photons) -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::alpha_io @@ -200,8 +164,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=avg_ba_io] compulsory=true description=Average burnt area on PFTs per fire event (fraction) -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO16 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::avg_ba_io @@ -209,9 +171,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=b_wl_io] compulsory=true description=Allometric exponent relating the target woody biomass to the leaf area index -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::b_wl_io @@ -220,8 +180,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES compulsory=true description=Flag indicating whether PFT is C3 type !enumeration=true -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO03 url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::c3_io value-titles=Not C3,C3 @@ -230,9 +188,7 @@ values=0,1 [namelist:jules_pftparm=can_struct_a_io] compulsory=true description=Canopy structure factor (1.0 is structurally homogeneous). -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Radiation parameters sort-key=Panel-HR02 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::can_struct_a_io @@ -240,9 +196,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=catch0_io] compulsory=true description=Minimum canopy capacity (kg m-2) -fail-if=len(this) != namelist:jules_surface_types=npft !kind=default -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::catch0_io @@ -250,8 +204,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=ccleaf_max_io] compulsory=true description=Leaf maximum combustion completeness -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO16 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::ccleaf_max_io @@ -259,8 +211,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=ccleaf_min_io] compulsory=true description=Leaf minimum combustion completeness -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO16 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::ccleaf_min_io @@ -268,8 +218,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=ccwood_max_io] compulsory=true description=Wood maximum combustion completeness -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO16 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::ccwood_max_io @@ -277,8 +225,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=ccwood_min_io] compulsory=true description=Wood minimum combustion completeness -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO16 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::ccwood_min_io @@ -286,8 +232,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=ci_st_io] compulsory=true description=Leaf-internal CO2 concentration (Pa) -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO10 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::ci_st_io @@ -295,9 +239,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=dcatch_dlai_io] compulsory=true description=Rate of change of canopy capacity with LAI (kg m-2) -fail-if=len(this) != namelist:jules_surface_types=npft !kind=default -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::dcatch_dlai_io @@ -305,8 +247,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=deact_jmax_io] compulsory=true description=Deactivation energy for temperature response of Jmax -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO20 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::deact_jmax_io @@ -314,16 +254,12 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=deact_vcmax_io] compulsory=true description=Deactivation energy for temperature response of Vcmax -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO20 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::deact_vcmax_io [namelist:jules_pftparm=dfp_dcuo_io] compulsory=true -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO11 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::dfp_dcuo_io @@ -331,9 +267,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=dgl_dm_io] compulsory=true description=Rate of change of leaf turnover rate with moisture availability -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::dgl_dm_io @@ -341,9 +275,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=dgl_dt_io] compulsory=true description=Rate of change of leaf turnover rate with temperature (K-1) -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::dgl_dt_io @@ -351,9 +283,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=dqcrit_io] compulsory=true description=Critical humidity deficit (kg H2O per kg air) -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO21a type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::dqcrit_io @@ -361,8 +291,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=ds_jmax_io] compulsory=true description=Entropy factor for temperature response of Jmax -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO20a type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::ds_jmax_io @@ -370,8 +298,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=ds_vcmax_io] compulsory=true description=Entropy factor for temperature response of Vcmax -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO20a type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::ds_vcmax_io @@ -380,12 +306,10 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES compulsory=true description=Dust emissions scaling factor for each pft type =NOT APPLICABLE TO STANDALONE -fail-if=len(this) != namelist:jules_surface_types=npft help=This is applied when dust_veg_emiss is non-zero and =allows the dust emission from different plant functional =types to be reduced/switched off. !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters range=0: sort-key=Panel-HOX type=real @@ -393,9 +317,7 @@ type=real [namelist:jules_pftparm=dz0v_dh_io] compulsory=true description=Rate of change of vegetation roughness length for momentum with height -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::dz0v_dh_io @@ -403,9 +325,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=emis_pft_io] compulsory=true description=Surface emissivity -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Radiation parameters range=0:1 sort-key=Panel-HR04 type=real @@ -414,9 +334,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=eta_sl_io] compulsory=true description=Live stemwood coefficient (kg C/m/LAI) -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::eta_sl_io @@ -424,9 +342,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=f0_io] compulsory=true description=CI / CA for DQ = 0 -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO21a type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::f0_io @@ -434,9 +350,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=fd_io] compulsory=true description=Scale factor for dark respiration -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::fd_io @@ -444,8 +358,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=fef_bc_io] compulsory=true description=Black carbon (BC) emission factor from natural fires (INFERNO) -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters range=0: sort-key=Panel-HO16 type=real @@ -454,8 +366,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=fef_c2h4_io] compulsory=true description=Ethene (C2H4) emission factor from natural fires (INFERNO) -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters range=0: sort-key=Panel-HO16 type=real @@ -464,8 +374,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=fef_c2h6_io] compulsory=true description=Ethane (C2H6) emission factor from natural fires (INFERNO) -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters range=0: sort-key=Panel-HO16 type=real @@ -474,8 +382,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=fef_c3h8_io] compulsory=true description=Propane (C3H8) emission factor from natural fires (INFERNO) -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters range=0: sort-key=Panel-HO16 type=real @@ -484,8 +390,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=fef_ch4_io] compulsory=true description=Methane (CH4) emission factor from natural fires (INFERNO) -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters range=0: sort-key=Panel-HO16 type=real @@ -494,8 +398,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=fef_co2_io] compulsory=true description=Carbon dioxide (CO2) emission factor from natural fires (INFERNO) -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters range=0: sort-key=Panel-HO16 type=real @@ -504,8 +406,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=fef_co_io] compulsory=true description=Carbon monoxide (CO) emission factor from natural fires (INFERNO) -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters range=0: sort-key=Panel-HO16 type=real @@ -514,8 +414,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=fef_dms_io] compulsory=true description=Dimethyl sulfide (DMS) emission factor from natural fires (INFERNO) -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters range=0: sort-key=Panel-HO16 type=real @@ -524,8 +422,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=fef_hcho_io] compulsory=true description=Formaldehyde (HCHO) emission factor from natural fires (INFERNO) -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters range=0: sort-key=Panel-HO16 type=real @@ -534,8 +430,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=fef_mecho_io] compulsory=true description=Acetaldehyde (MeCHO) emission factor from natural fires (INFERNO) -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters range=0: sort-key=Panel-HO16 type=real @@ -544,8 +438,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=fef_nh3_io] compulsory=true description=Ammonia (NH3) emission factor from natural fires (INFERNO) -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters range=0: sort-key=Panel-HO16 type=real @@ -554,8 +446,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=fef_nox_io] compulsory=true description=Nitrogen oxides (NOx) emission factor from natural fires (INFERNO) -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters range=0: sort-key=Panel-HO16 type=real @@ -564,8 +454,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=fef_oc_io] compulsory=true description=Organic carbon (OC) emission factor from natural fires (INFERNO) -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters range=0: sort-key=Panel-HO16 type=real @@ -574,8 +462,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=fef_so2_io] compulsory=true description=Sulphur dioxide (SO2) emission factor from natural fires (INFERNO) -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters range=0: sort-key=Panel-HO16 type=real @@ -583,8 +469,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=fire_mort_io] compulsory=true -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters range=0:1 sort-key=Panel-HO16 type=real @@ -592,8 +476,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=fl_o3_ct_io] compulsory=true -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO11 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::fl_o3_ct_io @@ -603,9 +485,7 @@ compulsory=true description=Switch for method of weighting the contribution that different soil layers make to the soil moisture =availability factor fsmc !enumeration=true -fail-if=len(this) != namelist:jules_surface_types=npft; - =namelist:jules_soil_biogeochem=l_layeredc == '.true.' and namelist:jules_soil_biogeochem=soil_bgc_model == '2' and any(this == 1); # fsmc_mod=1 cannot be used with layered 4-pool soil C model -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters +fail-if=namelist:jules_soil_biogeochem=l_layeredc == '.true.' and namelist:jules_soil_biogeochem=soil_bgc_model == '2' and any(this == 1); # fsmc_mod=1 cannot be used with layered 4-pool soil C model sort-key=Panel-HO05 url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::fsmc_mod_io value-titles=weight water stress in layers by root fraction, use average root zone properties @@ -614,9 +494,7 @@ values=0,1 [namelist:jules_pftparm=fsmc_of_io] compulsory=true description=Moisture availability below which leaves are dropped -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::fsmc_of_io @@ -625,9 +503,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES compulsory=true description=PFT-dependent parameter governing the threshold at which the plant starts to experience water stress =due to lack of water in the soil -fail-if=len(this) != namelist:jules_surface_types=npft !kind=default -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::fsmc_p0_io @@ -635,8 +511,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=g1_stomata_io] compulsory=true description=Parameter g1 of the Medlyn et al. (2011) model of stomatal conductance. -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO21b type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::g1_stomata_io @@ -644,9 +518,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=g_leaf_0_io] compulsory=true description=Minimum turnover rate for leaves (/360days) -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::g_leaf_0_io @@ -654,9 +526,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=glmin_io] compulsory=true description=Minimum leaf conductance for H2O (m s-1) -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::glmin_io @@ -664,8 +534,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=gpp_st_io] compulsory=true description=Gross primary production (GPP) at standard conditions (kgC m-2 s-1 ) -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO10 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::gpp_st_io @@ -673,9 +541,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=gsoil_f_io] compulsory=true description=Soil evaporation enhancement factor -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::gsoil_f_io @@ -683,9 +549,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=hw_sw_io] compulsory=true description=Ratio of N in heartwood:stemwood with trait physiology. -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO07 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::hw_sw_io @@ -693,8 +557,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=ief_io] compulsory=true description=Isoprene emission factor per PFT (μgC g-1 h-1) -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO10 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::ief_io @@ -702,9 +564,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=infil_f_io] compulsory=true description=Infiltration enhancement factor -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::infil_f_io @@ -712,8 +572,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=jv25_ratio_io] compulsory=true description=Ratio of Jmax to Vcmax at 25 degC. -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO20 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::jv25_ratio_io @@ -722,9 +580,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES compulsory=true description=Light extinction coefficient =Used with Beers Law for light absorption through tile canopies -fail-if=len(this) != namelist:jules_surface_types=npft !kind=default -ns=namelist/JULES Science Settings/jules_pftparm/Radiation parameters sort-key=Panel-HR02 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::kext_io @@ -732,9 +588,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=kn_io] compulsory=true description=Decay of nitrogen through the canopy for canopy radiation models 4-5 -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::kn_io @@ -743,9 +597,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES compulsory=true description=Decay of nitrogen through the canopy for canopy radiation model 6 =SHOULD NOT BE THE SAME AS KN! -fail-if=len(this) != namelist:jules_surface_types=npft !kind=default -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::knl_io @@ -753,9 +605,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=kpar_io] compulsory=true description=PAR Extinction coefficient (m2 leaf / m2 ground) -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::kpar_io @@ -763,9 +613,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=lai_alb_lim_io] compulsory=true description=Minimum LAI for plant canopies in the absence of snow. -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Radiation parameters sort-key=Panel-HR02 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::lai_alb_lim_io @@ -773,9 +621,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=lma_io] compulsory=true description=Leaf mass per unit area (kgLeaf m-2) -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO07 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::lma_io @@ -783,8 +629,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=mef_io] compulsory=true description=Methanol emission factor per PFT (μgC g-1 h-1) -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO10 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::mef_io @@ -792,9 +636,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=neff_io] compulsory=true description=Scale factor relating Vcmax with leaf nitrogen concentration -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::neff_io @@ -802,9 +644,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=nl0_io] compulsory=true description=Top leaf nitrogen concentration (kg N/kg C) -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::nl0_io @@ -812,9 +652,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=nmass_io] compulsory=true description=Top leaf nitrogen content per unit mass (kgN kgLeaf-1) -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO07 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::nmass_io @@ -822,9 +660,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=nr_io] compulsory=true description=Root nitrogen concentration with trait physiology -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO07 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::nr_io @@ -832,9 +668,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=nr_nl_io] compulsory=true description=Ratio of root nitrogen concentration to leaf nitrogen concentration -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::nr_nl_io @@ -842,9 +676,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=ns_nl_io] compulsory=true description=Ratio of stem nitrogen concentration to leaf nitrogen concentration -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::ns_nl_io @@ -852,9 +684,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=nsw_io] compulsory=true description=Stemwood nitrogen concentration with trait physiology. -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO07 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::nsw_io @@ -863,9 +693,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES compulsory=true description=VIS Leaf scattering coeff. =Leaf scattering coefficient for wavelengths < 690nm (Photosyntehtically Active Radiation). -fail-if=len(this) != namelist:jules_surface_types=npft !kind=default -ns=namelist/JULES Science Settings/jules_pftparm/Radiation parameters range=0:1 sort-key=Panel-HR03 type=real @@ -874,9 +702,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=omegal_io] compulsory=true description=Lower limit on omega_io -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Radiation parameters range=0:1 sort-key=Panel-HR03 type=real @@ -885,9 +711,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=omegau_io] compulsory=true description=Upper limit on omega_io(kgLeaf m-2) -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Radiation parameters range=0:1 sort-key=Panel-HR03 type=real @@ -897,9 +721,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES compulsory=true description=NIR Leaf scattering coeff. =Leaf scattering coefficient for Near Infra Red wavelengths > 690nm. -fail-if=len(this) != namelist:jules_surface_types=npft !kind=default -ns=namelist/JULES Science Settings/jules_pftparm/Radiation parameters range=0:1 sort-key=Panel-HR03 type=real @@ -908,9 +730,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=omnirl_io] compulsory=true description=Lower limit on omnir_io -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Radiation parameters range=0:1 sort-key=Panel-HR03 type=real @@ -919,9 +739,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=omniru_io] compulsory=true description=Upper limit on omnir_io -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Radiation parameters range=0:1 sort-key=Panel-HR03 type=real @@ -931,8 +749,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES compulsory=true description=Flag indicating leaf angle distribution !enumeration=true -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Radiation parameters sort-key=Panel-HR01 url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::orient_io value-titles=Spherical,Horizontal @@ -941,24 +757,23 @@ values=0,1 [namelist:jules_pftparm=pft_name_io] compulsory=true description=Unique descriptor for plant functional type. - =Allows multiple instances of a namelist; one per PFT (LFRic only). + =Allows multiple instances of a namelist; one per PFT. !kind=default sort-key=Panel-H01 !type=character -values='brd_leaf', 'ndl_leaf', 'c3_grass', 'c4_grass', 'shrub' +values='brd_leaf', 'brd_leaf_dec', 'brd_leaf_eg_temp', 'brd_leaf_eg_trop', + ='c3_crop', 'c3_grass', 'c3_irrig', 'c3_pasture', 'c4_crop', 'c4_grass', + ='c4_irrig', 'c4_pasture', 'ndl_leaf', 'ndl_leaf_dec', 'ndl_leaf_eg', + ='shrub', 'shrub_dec', 'shrub_eg', 'usr_type#1' [namelist:jules_pftparm=psi_close_io] compulsory=true -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO19 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::psi_close_io [namelist:jules_pftparm=psi_open_io] compulsory=true -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO19 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::psi_open_io @@ -966,9 +781,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=q10_leaf_io] compulsory=true description=Q10 factor for plant respiration -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::q10_leaf_io @@ -976,9 +789,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=r_grow_io] compulsory=true description=Growth respiration fraction -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::r_grow_io @@ -986,9 +797,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=rootd_ft_io] compulsory=true description=Root depth (m) -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::rootd_ft_io @@ -996,9 +805,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=sigl_io] compulsory=true description=Specific density of leaf carbon (kg C/m2 leaf) -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::sigl_io @@ -1006,8 +813,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=sox_a_io] compulsory=true description=The shape parameter in the xylem vulnerability curve -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO21c type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::sox_a_io @@ -1015,8 +820,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=sox_p50_io] compulsory=true description=Xylem water potential at which xylem hydraulic conductance is half its maximum value. (MPa) -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO21c type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::sox_p50_io @@ -1024,8 +827,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=sox_rp_min_io] compulsory=true description=Plant minimum hydraulic resistance. (m2 s MPa/mol) -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO21c type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::sox_rp_min_io @@ -1033,8 +834,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=sug_g0_io] compulsory=true description=Specific structural carbon production rate (kgC m-2 s-1) -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO22 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::sug_g0_io @@ -1042,8 +841,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=sug_grec_io] compulsory=true description=Specific structural carbon recycling rate (kgC m-2 s-1) -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO22 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::sug_grec_io @@ -1051,8 +848,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=sug_yg_io] compulsory=true description=Growth yield for SUGAR model -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO22 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::sug_yg_io @@ -1060,8 +855,6 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=tef_io] compulsory=true description=(Mono-)Terpene emission factor per PFT (μgC g-1 h-1) -fail-if=len(this) != namelist:jules_surface_types=npft -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO10 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::tef_io @@ -1069,9 +862,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=tleaf_of_io] compulsory=true description=Temperature below which leaves are dropped (K) -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::tleaf_of_io @@ -1079,9 +870,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=tlow_io] compulsory=true description=Lower temperature for photosynthesis (deg C) -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::tlow_io @@ -1089,9 +878,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=tupp_io] compulsory=true description=Upper temperature for photosynthesis (deg C) -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::tupp_io @@ -1099,9 +886,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=vint_io] compulsory=true description=Intercept in VCMAX and NAREA -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO07 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::vint_io @@ -1109,9 +894,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=vsl_io] compulsory=true description=Slope in VCMAX and NAREA -fail-if=len(this) != namelist:jules_surface_types=npft !kind=double -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO07 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::vsl_io @@ -1119,9 +902,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=z0hm_pft_io] compulsory=true description=Ratio of the roughness length for heat to the roughness length for momentum -fail-if=len(this) != namelist:jules_surface_types=npft !kind=default -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::z0hm_pft_io @@ -1129,9 +910,7 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namelist:jules_pftparm=z0v_io] compulsory=true description=Specified vegetation roughness length for momentum (if l_spec_veg_z0) -fail-if=len(this) != namelist:jules_surface_types=npft !kind=default -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO05 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::z0v_io @@ -1140,11 +919,9 @@ url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES [namespace:pftparm_other] description=Parameters not related to radiative transfer of vegetation. =Related parameters are grouped together where appropriate. -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=02 # Dummy page to force sort order for pftparm radiation parameters [namespace:pftparm_radiation] description=Parameters related to radiative transfer of vegetation -ns=namelist/JULES Science Settings/jules_pftparm/Radiation parameters sort-key=01 diff --git a/rose-meta/jules-standalone/HEAD/rose-meta.conf b/rose-meta/jules-standalone/HEAD/rose-meta.conf index e30a27c5..5c4bd443 100644 --- a/rose-meta/jules-standalone/HEAD/rose-meta.conf +++ b/rose-meta/jules-standalone/HEAD/rose-meta.conf @@ -3275,229 +3275,15 @@ sort-key=5 type=character url=https://metoffice.github.io/jules/latest/namelists/ancillaries.nml.html#JULES_PDM::var_name -[namelist:jules_pftparm=a_wl_io] -length=: - -[namelist:jules_pftparm=a_ws_io] -length=: - -[namelist:jules_pftparm=act_jmax_io] -length=: - -[namelist:jules_pftparm=act_vcmax_io] -length=: - -[namelist:jules_pftparm=aef_io] -length=: - -[namelist:jules_pftparm=albsnc_max_io] -length=: - -[namelist:jules_pftparm=albsnc_min_io] -length=: - -[namelist:jules_pftparm=albsnf_max_io] -length=: - -[namelist:jules_pftparm=albsnf_maxl_io] -length=: - -[namelist:jules_pftparm=albsnf_maxu_io] -length=: - -[namelist:jules_pftparm=alnir_io] -length=: - -[namelist:jules_pftparm=alnirl_io] -length=: - -[namelist:jules_pftparm=alniru_io] -length=: - -[namelist:jules_pftparm=alpar_io] -length=: - -[namelist:jules_pftparm=alparl_io] -length=: - -[namelist:jules_pftparm=alparu_io] -length=: - -[namelist:jules_pftparm=alpha_elec_io] -length=: - -[namelist:jules_pftparm=alpha_io] -length=: - -[namelist:jules_pftparm=avg_ba_io] -length=: - -[namelist:jules_pftparm=b_wl_io] -length=: - -[namelist:jules_pftparm=c3_io] -length=: - -[namelist:jules_pftparm=can_struct_a_io] -length=: - [namelist:jules_pftparm=canht_ft_io] -fail-if=len(this) != namelist:jules_surface_types=npft -length=: -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO01 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::canht_ft_io -[namelist:jules_pftparm=catch0_io] -length=: - -[namelist:jules_pftparm=ccleaf_max_io] -length=: - -[namelist:jules_pftparm=ccleaf_min_io] -length=: - -[namelist:jules_pftparm=ccwood_max_io] -length=: - -[namelist:jules_pftparm=ccwood_min_io] -length=: - -[namelist:jules_pftparm=ci_st_io] -length=: - -[namelist:jules_pftparm=dcatch_dlai_io] -length=: - -[namelist:jules_pftparm=deact_jmax_io] -length=: - -[namelist:jules_pftparm=deact_vcmax_io] -length=: - -[namelist:jules_pftparm=dfp_dcuo_io] -length=: - -[namelist:jules_pftparm=dgl_dm_io] -length=: - -[namelist:jules_pftparm=dgl_dt_io] -length=: - -[namelist:jules_pftparm=dqcrit_io] -length=: - -[namelist:jules_pftparm=ds_jmax_io] -length=: - -[namelist:jules_pftparm=ds_vcmax_io] -length=: - -[namelist:jules_pftparm=dust_veg_scj_io] -length=: - -[namelist:jules_pftparm=dz0v_dh_io] -length=: - -[namelist:jules_pftparm=emis_pft_io] -length=: - -[namelist:jules_pftparm=eta_sl_io] -length=: - -[namelist:jules_pftparm=f0_io] -length=: - -[namelist:jules_pftparm=fd_io] -length=: - -[namelist:jules_pftparm=fef_bc_io] -length=: - -[namelist:jules_pftparm=fef_c2h4_io] -length=: - -[namelist:jules_pftparm=fef_c2h6_io] -length=: - -[namelist:jules_pftparm=fef_c3h8_io] -length=: - -[namelist:jules_pftparm=fef_ch4_io] -length=: - -[namelist:jules_pftparm=fef_co2_io] -length=: - -[namelist:jules_pftparm=fef_co_io] -length=: - -[namelist:jules_pftparm=fef_dms_io] -length=: - -[namelist:jules_pftparm=fef_hcho_io] -length=: - -[namelist:jules_pftparm=fef_mecho_io] -length=: - -[namelist:jules_pftparm=fef_nh3_io] -length=: - -[namelist:jules_pftparm=fef_nox_io] -length=: - -[namelist:jules_pftparm=fef_oc_io] -length=: - -[namelist:jules_pftparm=fef_so2_io] -length=: - -[namelist:jules_pftparm=fire_mort_io] -length=: - -[namelist:jules_pftparm=fl_o3_ct_io] -length=: - -[namelist:jules_pftparm=fsmc_mod_io] -length=: - -[namelist:jules_pftparm=fsmc_of_io] -length=: - -[namelist:jules_pftparm=fsmc_p0_io] -length=: - -[namelist:jules_pftparm=g1_stomata_io] -length=: - -[namelist:jules_pftparm=g_leaf_0_io] -length=: - -[namelist:jules_pftparm=glmin_io] -length=: - -[namelist:jules_pftparm=gpp_st_io] -length=: - -[namelist:jules_pftparm=gsoil_f_io] -length=: - -[namelist:jules_pftparm=hw_sw_io] -length=: - -[namelist:jules_pftparm=ief_io] -length=: - -[namelist:jules_pftparm=infil_f_io] -length=: - [namelist:jules_pftparm=irrig_pft_io] compulsory=true description=Flag indicating whether the pft is irrigated -fail-if=len(this) != namelist:jules_surface_types=npft - =any(this > 0) and namelist:jules_model_environment=l_jules_parent == 1 ; # Tile-based irrigation scheme is not available in UM +fail-if=any(this > 0) and namelist:jules_model_environment=l_jules_parent == 1 ; # Tile-based irrigation scheme is not available in UM =all(this == 0) length=: ns=namelist/JULES Science Settings/jules_pftparm/Other parameters @@ -3505,155 +3291,20 @@ sort-key=Panel-HO05 url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::irrig_pft_io values=0,1 -[namelist:jules_pftparm=jv25_ratio_io] -length=: - -[namelist:jules_pftparm=kext_io] -length=: - -[namelist:jules_pftparm=kn_io] -length=: - -[namelist:jules_pftparm=knl_io] -length=: - -[namelist:jules_pftparm=kpar_io] -length=: - -[namelist:jules_pftparm=lai_alb_lim_io] -length=: - [namelist:jules_pftparm=lai_io] -fail-if=len(this) != namelist:jules_surface_types=npft -length=: -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HO02 type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::lai_io -[namelist:jules_pftparm=lma_io] -length=: - -[namelist:jules_pftparm=mef_io] -length=: - -[namelist:jules_pftparm=neff_io] -length=: - -[namelist:jules_pftparm=nl0_io] -length=: - -[namelist:jules_pftparm=nmass_io] -length=: - -[namelist:jules_pftparm=nr_io] -length=: - -[namelist:jules_pftparm=nr_nl_io] -length=: - -[namelist:jules_pftparm=ns_nl_io] -length=: - -[namelist:jules_pftparm=nsw_io] -length=: - -[namelist:jules_pftparm=omega_io] -length=: - -[namelist:jules_pftparm=omegal_io] -length=: - -[namelist:jules_pftparm=omegau_io] -length=: - -[namelist:jules_pftparm=omnir_io] -length=: - -[namelist:jules_pftparm=omnirl_io] -length=: - -[namelist:jules_pftparm=omniru_io] -length=: - -[namelist:jules_pftparm=orient_io] -length=: - -[namelist:jules_pftparm=pft_name_io] -length=: - -[namelist:jules_pftparm=psi_close_io] -length=: - -[namelist:jules_pftparm=psi_open_io] -length=: - -[namelist:jules_pftparm=q10_leaf_io] -length=: - -[namelist:jules_pftparm=r_grow_io] -length=: - -[namelist:jules_pftparm=rootd_ft_io] -length=: - -[namelist:jules_pftparm=sigl_io] -length=: - -[namelist:jules_pftparm=sox_a_io] -length=: - -[namelist:jules_pftparm=sox_p50_io] -length=: - -[namelist:jules_pftparm=sox_rp_min_io] -length=: - -[namelist:jules_pftparm=sug_g0_io] -length=: - -[namelist:jules_pftparm=sug_grec_io] -length=: - -[namelist:jules_pftparm=sug_yg_io] -length=: - -[namelist:jules_pftparm=tef_io] -length=: - -[namelist:jules_pftparm=tleaf_of_io] -length=: - -[namelist:jules_pftparm=tlow_io] -length=: - -[namelist:jules_pftparm=tupp_io] -length=: - -[namelist:jules_pftparm=vint_io] -length=: - -[namelist:jules_pftparm=vsl_io] -length=: - [namelist:jules_pftparm=z0hm_classic_pft_io] compulsory=true description=Ratio of the roughness length for heat to the roughness length for momentum for the CLASSIC aerosol =scheme only =NOT APPLICABLE TO STANDALONE OR LFRIC (l_aero_classic) -fail-if=len(this) != namelist:jules_surface_types=npft -length=: -ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HOX type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::z0hm_classic_pft_io -[namelist:jules_pftparm=z0hm_pft_io] -length=: - -[namelist:jules_pftparm=z0v_io] -length=: - [namelist:jules_prescribed] compulsory=true ns=namelist/Prescribed data diff --git a/rose-meta/jules-standalone/versions.py b/rose-meta/jules-standalone/versions.py index 1d4c41a9..1ee95e4a 100644 --- a/rose-meta/jules-standalone/versions.py +++ b/rose-meta/jules-standalone/versions.py @@ -45,15 +45,349 @@ from .version81_82 import * -class vnYY_txxxx(MacroUpgrade): +class UpgradeError(Exception): - """Upgrade macro from JULES by Author""" + """Exception created when an upgrade fails.""" - BEFORE_TAG = "vnY.Y" - AFTER_TAG = "vnY.Y_txxxx" + def __init__(self, msg): + self.msg = msg + + def __repr__(self): + sys.tracebacklimit = 0 + return self.msg + + __str__ = __repr__ + + +class vn82_t115a(MacroUpgrade): + """Upgrade macro from JULES by Maggie Hendry""" + + BEFORE_TAG = "vn8.2" + AFTER_TAG = "vn8.2_t115a" def upgrade(self, config, meta_config=None): """Upgrade a JULES runtime app configuration.""" - # Add settings + npft = self.get_setting_value( + config, ["namelist:jules_surface_types", "npft"] + ) + if npft is not None: + npft = int(npft) + # Replace all instances of double space delimiter from jules_pftparm + for keys, sub_node in config.walk(): + # Skip all entries unless contains jules_pftparm + if keys[0].find("namelist:jules_pftparm") > -1: + config_value = str(sub_node.get_value([])) + if len(config_value.split(",")) != npft: + if len(config_value.split(" ")) == npft: + self.change_setting_value( + config, + keys, + ",".join(config_value.split(" ")), + ) + + # Rectify existing incorrect values (there are a lot of them!) + RMDI = str(-(2**30)) + # INFERNO (l_inferno; vn4.4_t136) + jules_pftparm = {} + jules_pftparm["fef_co2_io"] = "" + jules_pftparm["fef_co_io"] = "" + jules_pftparm["fef_ch4_io"] = "" + jules_pftparm["fef_nox_io"] = "" + jules_pftparm["fef_so2_io"] = "" + jules_pftparm["fef_oc_io"] = "" + jules_pftparm["fef_bc_io"] = "" + jules_pftparm["ccleaf_min_io"] = "" + jules_pftparm["ccleaf_max_io"] = "" + jules_pftparm["ccwood_min_io"] = "" + jules_pftparm["ccwood_max_io"] = "" + jules_pftparm["avg_ba_io"] = "" + # Scale albedos of land-surface tiles to agree with observations + # (l_albedo_obs; no macro) + jules_pftparm["albsnf_maxl_io"] = "" + jules_pftparm["albsnf_maxu_io"] = "" + jules_pftparm["alnirl_io"] = "" + jules_pftparm["alniru_io"] = "" + jules_pftparm["alparl_io"] = "" + jules_pftparm["alparu_io"] = "" + jules_pftparm["omegal_io"] = "" + jules_pftparm["omegau_io"] = "" + jules_pftparm["omnirl_io"] = "" + jules_pftparm["omniru_io"] = "" + # Ozone damage for vegetation (l_o3_damage; no macro) + jules_pftparm["dfp_dcuo_io"] = "" + jules_pftparm["fl_o3_ct_io"] = "" + # Explicit vegetation roughness lengths (l_spec_veg_z0; vn5.4_t903) + # Upgrade macro was robust, but some congfigurations of non-standard + # PFTs have incorrect incorrect number, so corrected with missing + # data as per original macro. + jules_pftparm["z0v_io"] = "" + for item, values in jules_pftparm.items(): + config_value = self.get_setting_value( + config, ["namelist:jules_pftparm", item] + ) + if len(config_value.split(",")) != npft: + self.change_setting_value( + config, + ["namelist:jules_pftparm", item], + ",".join([RMDI] * npft), + ) + # Dust emissions scaling factor for each PFT + # (um-atmos dust_veg_emiss; vn6.2_t1206) + item = "dust_veg_scj_io" + config_value = self.get_setting_value( + config, ["namelist:jules_pftparm", item] + ) + if len(config_value.split(",")) != npft: + if npft == 5: + # 5 vegetation types + self.change_setting_value( + config, + ["namelist:jules_pftparm", item], + "0.0,0.0,1.0,1.0,0.5", + ) + elif npft == 9: + # 9 vegetation types + self.change_setting_value( + config, + ["namelist:jules_pftparm", item], + "0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.5,0.5", + ) + elif npft == 10: + # 10 vegetation types + self.change_setting_value( + config, + ["namelist:jules_pftparm", item], + "0.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,0.5,0.5", + ) + elif npft == 13: + # 13 vegetation types + self.change_setting_value( + config, + ["namelist:jules_pftparm", item], + "0.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,0.5,0.5", + ) + else: + # non-standard number for npft: Set all values to missing + # data + self.change_setting_value( + config, + ["namelist:jules_pftparm", item], + ",".join([RMDI] * npft), + ) + msg = ( + f"Non-standard number of npft, setting " + f"dust_veg_scj_io values to missing data." + ) + self.add_report(info=msg, is_warning=True) + # fire_mort_io; original prone to error + # (l_trif_fire; vn5.3_t872) + item = "fire_mort_io" + config_value = self.get_setting_value( + config, ["namelist:jules_pftparm", item] + ) + if len(config_value.split(",")) != npft: + self.change_setting_value( + config, + ["namelist:jules_pftparm", item], + ",".join(["1.0"] * npft), + ) + # SOX (stomata_model = 3; vn7.4_t1491) + jules_pftparm = {} + jules_pftparm["sox_a_io"] = "" + jules_pftparm["sox_p50_io"] = "" + jules_pftparm["sox_rp_min_io"] = "" + for item, values in jules_pftparm.items(): + config_value = self.get_setting_value( + config, ["namelist:jules_pftparm", item] + ) + if len(config_value.split(",")) != npft: + self.change_setting_value( + config, + ["namelist:jules_pftparm", item], + ",".join(["0.0"] * npft), + ) + + # Add the unique descriptor used to identify instances of duplicate + # namelist. + # IGNORED VALUES STILL GET PROCESSED. THERE ARE LEGITIMATE REASONS + # FOR THESE IN OPT FILES SO A WARNING IS ISSUED TO CHECK THE RESULT. + pft_name = [None] * npft + # Define known vegetation types in jules_surface_types + jules_surface_types = {} + jules_surface_types["brd_leaf"] = "" + jules_surface_types["brd_leaf_dec"] = "" + jules_surface_types["brd_leaf_eg_temp"] = "" + jules_surface_types["brd_leaf_eg_trop"] = "" + jules_surface_types["c3_crop"] = "" + jules_surface_types["c3_grass"] = "" + jules_surface_types["c3_irrig"] = "" + jules_surface_types["c3_pasture"] = "" + jules_surface_types["c4_crop"] = "" + jules_surface_types["c4_grass"] = "" + jules_surface_types["c4_irrig"] = "" + jules_surface_types["c4_pasture"] = "" + jules_surface_types["ndl_leaf"] = "" + jules_surface_types["ndl_leaf_dec"] = "" + jules_surface_types["ndl_leaf_eg"] = "" + jules_surface_types["shrub"] = "" + jules_surface_types["shrub_dec"] = "" + jules_surface_types["shrub_eg"] = "" + jules_surface_types["usr_type"] = "" + # Read jules_surface_types into dictionary + nlist = [] + for item, values in jules_surface_types.items(): + levels = self.get_setting_value( + config, ["namelist:jules_surface_types", item] + ) + if levels is not None: + levels = levels.split(",") + for l in range(len(levels)): + n = int(levels[l]) + if n > 0: + if n > npft: + if item == "usr_type": + # usr_type is also used by non-veg varieties + # so need to prevent going out of bounds + msg = ( + f"'usr_type' detected; dealing with " + f"vegetation varieties only." + ) + self.add_report(info=msg, is_warning=True) + else: + raise UpgradeError( + f"{item} is greater than npft" + ) + else: + if n in nlist: + msg = ( + f"\n**********************************" + f"************************************" + f"*********" + f"\nAlready allocated tile number {n} " + f"found in jules_surface_types " + f"'{item}'.\nThis may result in the " + f"incorrect 'pft_name_io', which will " + f"be used to label the\n" + f"'jules_pftparm' instance. Please " + f"check these values against " + f"jules_surface_types\nand manually " + f"correct if required. These are " + f"checked at runtime to ensure\n" + f"compatibility.\nNB. This may result " + f"from user ignored values as the " + f"macro cannot identify them." + f"\n**********************************" + f"************************************" + f"*********" + ) + self.add_report(info=msg, is_warning=True) + nlist.append(n) + pft_name[n - 1] = item + if item == "usr_type": + pft_name[n - 1] += "#" + str(l + 1) + else: + if len(levels) > 1: + raise UpgradeError( + f"{item} cannot be a list" + ) + pft_name[n - 1] = "'{}'".format( + pft_name[n - 1] + ) + if None in pft_name: + raise UpgradeError( + f"\n*************************************************" + f"******************************" + f"\nSurface type is not a known type. " + f"Please correct this, then reapply macro." + f"\n*************************************************" + f"******************************" + ) + self.change_setting_value( + config, + ["namelist:jules_pftparm", "pft_name_io"], + ",".join(pft_name) + ) + + return config, self.reports + + +class vn82_t115(MacroUpgrade): + """Upgrade macro from JULES by Maggie Hendry""" + + BEFORE_TAG = "vn8.2_t115a" + AFTER_TAG = "vn8.2_t115" + + def upgrade(self, config, meta_config=None): + """Upgrade a JULES runtime app configuration.""" + + npft = self.get_setting_value( + config, ["namelist:jules_surface_types", "npft"] + ) + if npft is not None: + npft = int(npft) + lsm_id = int( + self.get_setting_value( + config, ["namelist:jules_model_environment", "lsm_id"] + ) + ) + # The previous macro corrected known errors in jules_pftparm. + # We can now process it into separate instances labelled with + # pft_name previously created from jules_surface_types. + # This macro will fail with an error message for any remaining + # errors for user intervention. CABLE does not use this namelist + # so any incorrect entries are set to missing data. + RMDI = str(-(2**30)) + error = 0 + jules_pftparm = {} + for keys, node in config.walk(): + section = keys[0] + # Skip all entries unless contains jules_pftparm + if section.find("namelist:jules_pftparm") > -1: + item = keys[-1] + if item.find("namelist:jules_pftparm") == -1: + value = str(node.value) + value = value.split(",") + jules_pftparm[item] = value + if len(value) != npft: + if lsm_id == 2: + # jules_pftparm is not required by CABLE. As + # there are too many incorrect items to correct, + # pragmatically set them intead to missing data. + jules_pftparm[item] = [RMDI] * npft + else: + error += 1 + print(f"ERROR: Length {item} is not npft.") + if error > 0: + raise UpgradeError( + f"\n*************************************************" + f"******************************" + f"\n{error} jules_pftparm items do not have the " + f"correct length (see previous messages).\nThese " + f"will need to be corrected before applying macro." + f"\n*************************************************" + f"******************************" + ) + self.remove_setting(config, ["namelist:jules_pftparm"]) + + pft_name = jules_pftparm["pft_name_io"] + for i in range(npft): + nml = "namelist:jules_pftparm({})".format( + pft_name[i].strip("'") + ) + for item, value in jules_pftparm.items(): + self.add_setting(config, [nml, item], value[i]) + + # Replace with multiple namelist in file source + source = self.get_setting_value( + config, ["file:pft_params.nml", "source"] + ) + if "namelist:jules_pftparm(:)" not in source: + source = source.replace( + "namelist:jules_pftparm", "namelist:jules_pftparm(:)" + ) + self.change_setting_value( + config, ["file:pft_params.nml", "source"], source + ) + return config, self.reports diff --git a/rose-meta/jules-um/HEAD/rose-meta.conf b/rose-meta/jules-um/HEAD/rose-meta.conf index 0f8fdd05..5b0da74e 100644 --- a/rose-meta/jules-um/HEAD/rose-meta.conf +++ b/rose-meta/jules-um/HEAD/rose-meta.conf @@ -186,357 +186,16 @@ trigger=namelist:jules_pftparm: 1; =namelist:run_stochastic=z0v_rp_min: 1 ; =namelist:run_stochastic=z0v_rp: 1 ; -[namelist:jules_pftparm=a_wl_io] -length=: - -[namelist:jules_pftparm=a_ws_io] -length=: - -[namelist:jules_pftparm=act_jmax_io] -length=: - -[namelist:jules_pftparm=act_vcmax_io] -length=: - -[namelist:jules_pftparm=aef_io] -length=: - -[namelist:jules_pftparm=albsnc_max_io] -length=: - -[namelist:jules_pftparm=albsnc_min_io] -length=: - -[namelist:jules_pftparm=albsnf_max_io] -length=: - -[namelist:jules_pftparm=albsnf_maxl_io] -length=: - -[namelist:jules_pftparm=albsnf_maxu_io] -length=: - -[namelist:jules_pftparm=alnir_io] -length=: - -[namelist:jules_pftparm=alnirl_io] -length=: - -[namelist:jules_pftparm=alniru_io] -length=: - -[namelist:jules_pftparm=alpar_io] -length=: - -[namelist:jules_pftparm=alparl_io] -length=: - -[namelist:jules_pftparm=alparu_io] -length=: - -[namelist:jules_pftparm=alpha_elec_io] -length=: - -[namelist:jules_pftparm=alpha_io] -length=: - -[namelist:jules_pftparm=avg_ba_io] -length=: - -[namelist:jules_pftparm=b_wl_io] -length=: - -[namelist:jules_pftparm=c3_io] -length=: - -[namelist:jules_pftparm=can_struct_a_io] -length=: - -[namelist:jules_pftparm=catch0_io] -length=: - -[namelist:jules_pftparm=ccleaf_max_io] -length=: - -[namelist:jules_pftparm=ccleaf_min_io] -length=: - -[namelist:jules_pftparm=ccwood_max_io] -length=: - -[namelist:jules_pftparm=ccwood_min_io] -length=: - -[namelist:jules_pftparm=ci_st_io] -length=: - -[namelist:jules_pftparm=dcatch_dlai_io] -length=: - -[namelist:jules_pftparm=deact_jmax_io] -length=: - -[namelist:jules_pftparm=deact_vcmax_io] -length=: - -[namelist:jules_pftparm=dfp_dcuo_io] -length=: - -[namelist:jules_pftparm=dgl_dm_io] -length=: - -[namelist:jules_pftparm=dgl_dt_io] -length=: - -[namelist:jules_pftparm=dqcrit_io] -length=: - -[namelist:jules_pftparm=ds_jmax_io] -length=: - -[namelist:jules_pftparm=ds_vcmax_io] -length=: - -[namelist:jules_pftparm=dust_veg_scj_io] -length=: - -[namelist:jules_pftparm=dz0v_dh_io] -length=: - -[namelist:jules_pftparm=emis_pft_io] -length=: - -[namelist:jules_pftparm=eta_sl_io] -length=: - -[namelist:jules_pftparm=f0_io] -length=: - -[namelist:jules_pftparm=fd_io] -length=: - -[namelist:jules_pftparm=fef_bc_io] -length=: - -[namelist:jules_pftparm=fef_c2h4_io] -length=: - -[namelist:jules_pftparm=fef_c2h6_io] -length=: - -[namelist:jules_pftparm=fef_c3h8_io] -length=: - -[namelist:jules_pftparm=fef_ch4_io] -length=: - -[namelist:jules_pftparm=fef_co2_io] -length=: - -[namelist:jules_pftparm=fef_co_io] -length=: - -[namelist:jules_pftparm=fef_dms_io] -length=: - -[namelist:jules_pftparm=fef_hcho_io] -length=: - -[namelist:jules_pftparm=fef_mecho_io] -length=: - -[namelist:jules_pftparm=fef_nh3_io] -length=: - -[namelist:jules_pftparm=fef_nox_io] -length=: - -[namelist:jules_pftparm=fef_oc_io] -length=: - -[namelist:jules_pftparm=fef_so2_io] -length=: - -[namelist:jules_pftparm=fire_mort_io] -length=: - -[namelist:jules_pftparm=fl_o3_ct_io] -length=: - -[namelist:jules_pftparm=fsmc_mod_io] -length=: - -[namelist:jules_pftparm=fsmc_of_io] -length=: - -[namelist:jules_pftparm=fsmc_p0_io] -length=: - -[namelist:jules_pftparm=g1_stomata_io] -length=: - -[namelist:jules_pftparm=g_leaf_0_io] -length=: - -[namelist:jules_pftparm=glmin_io] -length=: - -[namelist:jules_pftparm=gpp_st_io] -length=: - -[namelist:jules_pftparm=gsoil_f_io] -length=: - -[namelist:jules_pftparm=hw_sw_io] -length=: - -[namelist:jules_pftparm=ief_io] -length=: - -[namelist:jules_pftparm=infil_f_io] -length=: - -[namelist:jules_pftparm=jv25_ratio_io] -length=: - -[namelist:jules_pftparm=kext_io] -length=: - -[namelist:jules_pftparm=kn_io] -length=: - -[namelist:jules_pftparm=knl_io] -length=: - -[namelist:jules_pftparm=kpar_io] -length=: - -[namelist:jules_pftparm=lai_alb_lim_io] -length=: - -[namelist:jules_pftparm=lma_io] -length=: - -[namelist:jules_pftparm=mef_io] -length=: - -[namelist:jules_pftparm=neff_io] -length=: - -[namelist:jules_pftparm=nl0_io] -length=: - -[namelist:jules_pftparm=nmass_io] -length=: - -[namelist:jules_pftparm=nr_io] -length=: - -[namelist:jules_pftparm=nr_nl_io] -length=: - -[namelist:jules_pftparm=ns_nl_io] -length=: - -[namelist:jules_pftparm=nsw_io] -length=: - -[namelist:jules_pftparm=omega_io] -length=: - -[namelist:jules_pftparm=omegal_io] -length=: - -[namelist:jules_pftparm=omegau_io] -length=: - -[namelist:jules_pftparm=omnir_io] -length=: - -[namelist:jules_pftparm=omnirl_io] -length=: - -[namelist:jules_pftparm=omniru_io] -length=: - -[namelist:jules_pftparm=orient_io] -length=: - -[namelist:jules_pftparm=pft_name_io] -length=: - -[namelist:jules_pftparm=psi_close_io] -length=: - -[namelist:jules_pftparm=psi_open_io] -length=: - -[namelist:jules_pftparm=q10_leaf_io] -length=: - -[namelist:jules_pftparm=r_grow_io] -length=: - -[namelist:jules_pftparm=rootd_ft_io] -length=: - -[namelist:jules_pftparm=sigl_io] -length=: - -[namelist:jules_pftparm=sox_a_io] -length=: - -[namelist:jules_pftparm=sox_p50_io] -length=: - -[namelist:jules_pftparm=sox_rp_min_io] -length=: - -[namelist:jules_pftparm=sug_g0_io] -length=: - -[namelist:jules_pftparm=sug_grec_io] -length=: - -[namelist:jules_pftparm=sug_yg_io] -length=: - -[namelist:jules_pftparm=tef_io] -length=: - -[namelist:jules_pftparm=tleaf_of_io] -length=: - -[namelist:jules_pftparm=tlow_io] -length=: - -[namelist:jules_pftparm=tupp_io] -length=: - -[namelist:jules_pftparm=vint_io] -length=: - -[namelist:jules_pftparm=vsl_io] -length=: - [namelist:jules_pftparm=z0hm_classic_pft_io] compulsory=true description=Ratio of the roughness length for heat to the roughness length for momentum for the CLASSIC aerosol =scheme only =NOT APPLICABLE TO STANDALONE OR LFRIC (l_aero_classic) -fail-if=len(this) != namelist:jules_surface_types=npft -length=: ns=namelist/JULES Science Settings/jules_pftparm/Other parameters sort-key=Panel-HOX type=real url=https://metoffice.github.io/jules/latest/namelists/pft_params.nml.html#JULES_PFTPARM::z0hm_classic_pft_io -[namelist:jules_pftparm=z0hm_pft_io] -length=: - -[namelist:jules_pftparm=z0v_io] -length=: - [namelist:jules_rivers_props] compulsory=true description=Configuration of spatially varying rivers properties diff --git a/rose-stem/app/loobos_gl8/opt/rose-app-irrigon_5050irrigtiles.conf b/rose-stem/app/loobos_gl8/opt/rose-app-irrigon_5050irrigtiles.conf index e027319a..5310d8b5 100644 --- a/rose-stem/app/loobos_gl8/opt/rose-app-irrigon_5050irrigtiles.conf +++ b/rose-stem/app/loobos_gl8/opt/rose-app-irrigon_5050irrigtiles.conf @@ -68,6 +68,7 @@ fd_io=0.015,0.015,0.015,0.015,0.025,0.025,0.015 fsmc_mod_io=7*0 fsmc_of_io=7*0.00 fsmc_p0_io=7*0.0 +!!g1_stomata_io=7*2.0 g_leaf_0_io=7*0.25 glmin_io=7*1.0e-6 !!gpp_st_io=1.29E-07,2.58E-08,2.07E-07,2.07E-07,3.42E-07,3.42E-07, @@ -100,6 +101,8 @@ omnir_io=0.70,0.45,5*0.83 !!omnirl_io=0.50,0.30,5*0.53 !!omniru_io=0.90,0.65,5*0.98 orient_io=7*0 +!!psi_close_io=7*-1.5E6 +!!psi_open_io=7*-0.033E6 q10_leaf_io=7*2.00 r_grow_io=7*0.25 rootd_ft_io=3.00000,1.00000,5*5.00000e-1 diff --git a/rose-stem/app/loobos_jules_es_1p0_biocrop/rose-app.conf b/rose-stem/app/loobos_jules_es_1p0_biocrop/rose-app.conf index e01d474c..2eaaaab6 100644 --- a/rose-stem/app/loobos_jules_es_1p0_biocrop/rose-app.conf +++ b/rose-stem/app/loobos_jules_es_1p0_biocrop/rose-app.conf @@ -769,8 +769,8 @@ nvars=0 [namelist:jules_pftparm] a_wl_io=0.78,0.845,0.78,0.8,0.65,6*0.005,0.13,0.13,0.07 a_ws_io=12,13,12,10,10,6*1,13,13,1 -!!act_jmax_io=13*50.0e3 -!!act_vcmax_io=13*72.0e3 +!!act_jmax_io=14*50.0e3 +!!act_vcmax_io=14*72.0e3 aef_io=0.48,0.29,0.43,0.87,0.87,0.29,0.07,0.07,0.43,0.07,0.07,1.2, =1.2,0.07 albsnc_max_io=5*0.25,6*0.6,0.4,0.4,0.6 @@ -786,7 +786,7 @@ alnir_io=0.45,0.45,0.45,0.35,0.35,9*0.58 alpar_io=0.1,0.1,0.1,0.07,0.07,9*0.1 !!alparl_io=0.06,0.06,0.06,0.04,0.04,8*0.06 !!alparu_io=0.15,0.15,0.15,0.11,0.11,8*0.15 -!!alpha_elec_io=13*0.4 +!!alpha_elec_io=14*0.4 alpha_io=0.064,0.064,0.048,0.08,0.064,0.048,0.048,0.048,0.04,0.04, =0.04,0.064,0.048,0.067 !!avg_ba_io=13*0 @@ -795,23 +795,23 @@ c3_io=8*1,0,0,0,1,1,1 can_struct_a_io=13*1.0,1 canht_ft_io=13*10.,1.26 catch0_io=14*0.5 -!!ccleaf_max_io=14*0 +!!ccleaf_max_io=13*0 !!ccleaf_min_io=13*0 !!ccwood_max_io=13*0 !!ccwood_min_io=13*0 ci_st_io=35.64,35.64,36.27,35.64,35.64,37.71,37.71,37.71,32.21,32.21, =32.21,35.64,35.64,37.71 dcatch_dlai_io=13*0.05,0.2 -!!deact_jmax_io=13*200.0e3 -!!deact_vcmax_io=13*200.0e3 +!!deact_jmax_io=14*200.0e3 +!!deact_vcmax_io=14*200.0e3 !!dfp_dcuo_io=0.04,0.04,0.04,0.02,0.02,0.25,0.25,0.25,0.13,0.13,0.13,0.03, =0.03 dgl_dm_io=14*0 dgl_dt_io=5*9,6*0,9,9,0 dqcrit_io=0.09,0.09,0.09,0.041,0.06,0.051,0.051,0.051,0.075,0.075, =0.075,0.03,0.044,0.075 -!!ds_jmax_io=13*646.0 -!!ds_vcmax_io=13*649.0 +!!ds_jmax_io=14*646.0 +!!ds_vcmax_io=14*649.0 !!dust_veg_scj_io=5*0,6*1,0.5,0.5,1 dz0v_dh_io=5*0.05,9*0.1 emis_pft_io=14*0.98 @@ -840,7 +840,7 @@ fd_io=0.01,0.01,0.01,0.015,0.015,6*0.019,0.015,0.015,0.019 fsmc_mod_io=14*0 fsmc_of_io=14*0 fsmc_p0_io=13*0.0,0 -!!g1_stomata_io=13*2.0 +!!g1_stomata_io=14*2.0 g_leaf_0_io=0.25,0.25,0.5,0.25,0.25,6*3,0.25,0.66,2 glmin_io=14*1.00E-06 gpp_st_io=1.66E-07,1.58E-07,1.59E-07,1.01E-07,1.19E-07,2.61E-07, @@ -851,13 +851,13 @@ hw_sw_io=13*0.5,5.00E-01 ief_io=35,24,16,8,8,16,5,5,24,5,5,10,20,5 infil_f_io=5*4,9*2 !!irrig_pft_io=14*0 -!!jv25_ratio_io=13*1.97 +!!jv25_ratio_io=14*1.97 kext_io=14*0.5 kn_io=14*0.78 knl_io=14*0.2 kpar_io=13*0.5,0.3 lai_alb_lim_io=14*0.005 -lai_io=13*1.,1 +lai_io=14*1.0 lma_io=0.0823,0.1039,0.1403,0.1006,0.2263,0.0495,0.0495,0.0495, =0.137,0.137,0.137,0.0709,0.1515,0.065 mef_io=1,0.6,0.9,1.8,1.8,0.6,2,2,0.9,2,2,4.5,4.5,2 @@ -880,8 +880,8 @@ omnir_io=0.7,0.7,0.7,0.45,0.45,9*0.83 !!omniru_io=0.9,0.9,0.9,0.65,0.65,8*0.98 orient_io=14*0 !!pft_name_io=14*'' -!!psi_close_io=13*0 -!!psi_open_io=13*0 +!!psi_close_io=14*0 +!!psi_open_io=14*0 q10_leaf_io=14*2 r_grow_io=13*0.25,0.1 rootd_ft_io=2,3,2,2,1.8,8*0.5,1.7 diff --git a/rose-stem/app/loobos_jules_es_1p0_biocrop_agexpand/rose-app.conf b/rose-stem/app/loobos_jules_es_1p0_biocrop_agexpand/rose-app.conf index ddf3faf8..a872c0aa 100644 --- a/rose-stem/app/loobos_jules_es_1p0_biocrop_agexpand/rose-app.conf +++ b/rose-stem/app/loobos_jules_es_1p0_biocrop_agexpand/rose-app.conf @@ -769,8 +769,8 @@ nvars=0 [namelist:jules_pftparm] a_wl_io=0.78,0.845,0.78,0.8,0.65,6*0.005,0.13,0.13,0.07 a_ws_io=12,13,12,10,10,6*1,13,13,1 -!!act_jmax_io=13*50.0e3 -!!act_vcmax_io=13*72.0e3 +!!act_jmax_io=14*50.0e3 +!!act_vcmax_io=14*72.0e3 aef_io=0.48,0.29,0.43,0.87,0.87,0.29,0.07,0.07,0.43,0.07,0.07,1.2, =1.2,0.07 albsnc_max_io=5*0.25,6*0.6,0.4,0.4,0.6 @@ -786,7 +786,7 @@ alnir_io=0.45,0.45,0.45,0.35,0.35,9*0.58 alpar_io=0.1,0.1,0.1,0.07,0.07,9*0.1 !!alparl_io=0.06,0.06,0.06,0.04,0.04,8*0.06 !!alparu_io=0.15,0.15,0.15,0.11,0.11,8*0.15 -!!alpha_elec_io=13*0.4 +!!alpha_elec_io=14*0.4 alpha_io=0.064,0.064,0.048,0.08,0.064,0.048,0.048,0.048,0.04,0.04, =0.04,0.064,0.048,0.067 !!avg_ba_io=13*0 @@ -795,23 +795,23 @@ c3_io=8*1,0,0,0,1,1,1 can_struct_a_io=13*1.0,1 canht_ft_io=13*10.,1.26 catch0_io=14*0.5 -!!ccleaf_max_io=14*0 +!!ccleaf_max_io=13*0 !!ccleaf_min_io=13*0 !!ccwood_max_io=13*0 !!ccwood_min_io=13*0 ci_st_io=35.64,35.64,36.27,35.64,35.64,37.71,37.71,37.71,32.21,32.21, =32.21,35.64,35.64,37.71 dcatch_dlai_io=13*0.05,0.2 -!!deact_jmax_io=13*200.0e3 -!!deact_vcmax_io=13*200.0e3 +!!deact_jmax_io=14*200.0e3 +!!deact_vcmax_io=14*200.0e3 !!dfp_dcuo_io=0.04,0.04,0.04,0.02,0.02,0.25,0.25,0.25,0.13,0.13,0.13,0.03, =0.03 dgl_dm_io=14*0 dgl_dt_io=5*9,6*0,9,9,0 dqcrit_io=0.09,0.09,0.09,0.041,0.06,0.051,0.051,0.051,0.075,0.075, =0.075,0.03,0.044,0.075 -!!ds_jmax_io=13*646.0 -!!ds_vcmax_io=13*649.0 +!!ds_jmax_io=14*646.0 +!!ds_vcmax_io=14*649.0 !!dust_veg_scj_io=5*0,6*1,0.5,0.5,1 dz0v_dh_io=5*0.05,9*0.1 emis_pft_io=14*0.98 @@ -840,7 +840,7 @@ fd_io=0.01,0.01,0.01,0.015,0.015,6*0.019,0.015,0.015,0.019 fsmc_mod_io=14*0 fsmc_of_io=14*0 fsmc_p0_io=13*0.0,0 -!!g1_stomata_io=13*2.0 +!!g1_stomata_io=14*2.0 g_leaf_0_io=0.25,0.25,0.5,0.25,0.25,6*3,0.25,0.66,2 glmin_io=14*1.00E-06 gpp_st_io=1.66E-07,1.58E-07,1.59E-07,1.01E-07,1.19E-07,2.61E-07, @@ -851,13 +851,13 @@ hw_sw_io=13*0.5,5.00E-01 ief_io=35,24,16,8,8,16,5,5,24,5,5,10,20,5 infil_f_io=5*4,9*2 !!irrig_pft_io=14*0 -!!jv25_ratio_io=13*1.97 +!!jv25_ratio_io=14*1.97 kext_io=14*0.5 kn_io=14*0.78 knl_io=14*0.2 kpar_io=13*0.5,0.3 lai_alb_lim_io=14*0.005 -lai_io=13*1.,1 +lai_io=14*1.0 lma_io=0.0823,0.1039,0.1403,0.1006,0.2263,0.0495,0.0495,0.0495, =0.137,0.137,0.137,0.0709,0.1515,0.065 mef_io=1,0.6,0.9,1.8,1.8,0.6,2,2,0.9,2,2,4.5,4.5,2 @@ -880,8 +880,8 @@ omnir_io=0.7,0.7,0.7,0.45,0.45,9*0.83 !!omniru_io=0.9,0.9,0.9,0.65,0.65,8*0.98 orient_io=14*0 !!pft_name_io=14*'' -!!psi_close_io=13*0 -!!psi_open_io=13*0 +!!psi_close_io=14*0 +!!psi_open_io=14*0 q10_leaf_io=14*2 r_grow_io=13*0.25,0.1 rootd_ft_io=2,3,2,2,1.8,8*0.5,1.7 diff --git a/rose-stem/app/loobos_jules_es_1p0_biocrop_spinup/rose-app.conf b/rose-stem/app/loobos_jules_es_1p0_biocrop_spinup/rose-app.conf index a24d7007..8f9f0c70 100644 --- a/rose-stem/app/loobos_jules_es_1p0_biocrop_spinup/rose-app.conf +++ b/rose-stem/app/loobos_jules_es_1p0_biocrop_spinup/rose-app.conf @@ -774,8 +774,8 @@ nvars=0 [namelist:jules_pftparm] a_wl_io=0.78,0.845,0.78,0.8,0.65,6*0.005,0.13,0.13,0.07 a_ws_io=12,13,12,10,10,6*1,13,13,1 -!!act_jmax_io=13*50.0e3 -!!act_vcmax_io=13*72.0e3 +!!act_jmax_io=14*50.0e3 +!!act_vcmax_io=14*72.0e3 aef_io=0.48,0.29,0.43,0.87,0.87,0.29,0.07,0.07,0.43,0.07,0.07,1.2, =1.2,0.07 albsnc_max_io=5*0.25,6*0.6,0.4,0.4,0.6 @@ -791,7 +791,7 @@ alnir_io=0.45,0.45,0.45,0.35,0.35,9*0.58 alpar_io=0.1,0.1,0.1,0.07,0.07,9*0.1 !!alparl_io=0.06,0.06,0.06,0.04,0.04,8*0.06 !!alparu_io=0.15,0.15,0.15,0.11,0.11,8*0.15 -!!alpha_elec_io=13*0.4 +!!alpha_elec_io=14*0.4 alpha_io=0.064,0.064,0.048,0.08,0.064,0.048,0.048,0.048,0.04,0.04, =0.04,0.064,0.048,0.067 !!avg_ba_io=13*0 @@ -800,23 +800,23 @@ c3_io=8*1,0,0,0,1,1,1 can_struct_a_io=13*1.0,1 canht_ft_io=13*10.,1.26 catch0_io=14*0.5 -!!ccleaf_max_io=14*0 +!!ccleaf_max_io=13*0 !!ccleaf_min_io=13*0 !!ccwood_max_io=13*0 !!ccwood_min_io=13*0 ci_st_io=35.64,35.64,36.27,35.64,35.64,37.71,37.71,37.71,32.21,32.21, =32.21,35.64,35.64,37.71 dcatch_dlai_io=13*0.05,0.2 -!!deact_jmax_io=13*200.0e3 -!!deact_vcmax_io=13*200.0e3 +!!deact_jmax_io=14*200.0e3 +!!deact_vcmax_io=14*200.0e3 !!dfp_dcuo_io=0.04,0.04,0.04,0.02,0.02,0.25,0.25,0.25,0.13,0.13,0.13,0.03, =0.03 dgl_dm_io=14*0 dgl_dt_io=5*9,6*0,9,9,0 dqcrit_io=0.09,0.09,0.09,0.041,0.06,0.051,0.051,0.051,0.075,0.075, =0.075,0.03,0.044,0.075 -!!ds_jmax_io=13*646.0 -!!ds_vcmax_io=13*649.0 +!!ds_jmax_io=14*646.0 +!!ds_vcmax_io=14*649.0 !!dust_veg_scj_io=5*0,6*1,0.5,0.5,1 dz0v_dh_io=5*0.05,9*0.1 emis_pft_io=14*0.98 @@ -845,7 +845,7 @@ fd_io=0.01,0.01,0.01,0.015,0.015,6*0.019,0.015,0.015,0.019 fsmc_mod_io=14*0 fsmc_of_io=14*0 fsmc_p0_io=13*0.0,0 -!!g1_stomata_io=13*2.0 +!!g1_stomata_io=14*2.0 g_leaf_0_io=0.25,0.25,0.5,0.25,0.25,6*3,0.25,0.66,2 glmin_io=14*1.00E-06 gpp_st_io=1.66E-07,1.58E-07,1.59E-07,1.01E-07,1.19E-07,2.61E-07, @@ -855,14 +855,13 @@ gsoil_f_io=14*1.0 hw_sw_io=13*0.5,5.00E-01 ief_io=35,24,16,8,8,16,5,5,24,5,5,10,20,5 infil_f_io=5*4,9*2 -!!irrig_pft_io=14*0 -!!jv25_ratio_io=13*1.97 +!!jv25_ratio_io=14*1.97 kext_io=14*0.5 kn_io=14*0.78 knl_io=14*0.2 kpar_io=13*0.5,0.3 lai_alb_lim_io=14*0.005 -lai_io=13*1.,1 +lai_io=14*1.0 lma_io=0.0823,0.1039,0.1403,0.1006,0.2263,0.0495,0.0495,0.0495, =0.137,0.137,0.137,0.0709,0.1515,0.065 mef_io=1,0.6,0.9,1.8,1.8,0.6,2,2,0.9,2,2,4.5,4.5,2 @@ -885,8 +884,8 @@ omnir_io=0.7,0.7,0.7,0.45,0.45,9*0.83 !!omniru_io=0.9,0.9,0.9,0.65,0.65,8*0.98 orient_io=14*0 !!pft_name_io=14*'' -!!psi_close_io=13*0 -!!psi_open_io=13*0 +!!psi_close_io=14*0 +!!psi_open_io=14*0 q10_leaf_io=14*2 r_grow_io=13*0.25,0.1 rootd_ft_io=2,3,2,2,1.8,8*0.5,1.7 diff --git a/src/control/shared/jules_surface_types_mod.F90 b/src/control/shared/jules_surface_types_mod.F90 index 19192d29..01fb9d5c 100644 --- a/src/control/shared/jules_surface_types_mod.F90 +++ b/src/control/shared/jules_surface_types_mod.F90 @@ -30,6 +30,8 @@ MODULE jules_surface_types_mod !----------------------------------------------------------------------------- ! Module variables. !----------------------------------------------------------------------------- +INTEGER, PARAMETER :: nml_instance_len = 30 + INTEGER :: & nnpft, & ! Number of natural pfts @@ -704,4 +706,98 @@ SUBROUTINE read_nml_jules_surface_types(nml_dir) END SUBROUTINE read_nml_jules_surface_types #endif +FUNCTION map_nml_instance_to_tile_number ( NML, nml_instance ) & + RESULT( tile_number ) + +! Description: +! Maps instance of duplicate namelist to tile number in surface configuration + +USE ereport_mod, ONLY: ereport +USE jules_print_mgr, ONLY: jules_message + +IMPLICIT NONE + +CHARACTER(LEN=*), INTENT(IN) :: & + ! Namelist being read + NML, & + ! Identifier of the namelist instance e.g. pft_name_io + nml_instance +INTEGER :: i, p, tile_number + +INTEGER :: errorstatus + +CHARACTER(LEN=*), PARAMETER :: & + RoutineName = 'map_nml_instance_to_tile_number' + +SELECT CASE ( TRIM( nml_instance ) ) +CASE ( 'brd_leaf' ) + tile_number = brd_leaf +CASE ( 'brd_leaf_dec' ) + tile_number = brd_leaf_dec +CASE ( 'brd_leaf_eg_temp' ) + tile_number = brd_leaf_eg_temp +CASE ( 'brd_leaf_eg_trop' ) + tile_number = brd_leaf_eg_trop +CASE ( 'c3_crop' ) + tile_number = c3_crop +CASE ( 'c3_grass' ) + tile_number = c3_grass +CASE ( 'c3_irrig' ) + tile_number = c3_irrig +CASE ( 'c3_pasture' ) + tile_number = c3_pasture +CASE ( 'c4_crop' ) + tile_number = c4_crop +CASE ( 'c4_grass' ) + tile_number = c4_grass +CASE ( 'c4_irrig' ) + tile_number = c4_irrig +CASE ( 'c4_pasture' ) + tile_number = c4_pasture +CASE ( 'ndl_leaf' ) + tile_number = ndl_leaf +CASE ( 'ndl_leaf_dec' ) + tile_number = ndl_leaf_dec +CASE ( 'ndl_leaf_eg' ) + tile_number = ndl_leaf_eg +CASE ( 'shrub' ) + tile_number = shrub +CASE ( 'shrub_dec' ) + tile_number = shrub_dec +CASE ( 'shrub_eg' ) + tile_number = shrub_eg +CASE DEFAULT + IF ( INDEX(nml_instance, 'usr_type') > 0 ) THEN + p = INDEX(nml_instance, '#') + READ(nml_instance(p+1:),'(I2)') i + tile_number = usr_type(i) + ! For now, only dealing with PFTs so issue an error if a non-PFT is + ! encountered + IF ( tile_number > npft ) THEN + errorstatus = 101 + WRITE(jules_message,'(2(A,I0))') TRIM( nml_instance ) // & + ' is a non-veg variety (n > npft); the code requires development' // & + ' to handle non-veg types. npft = ', npft, ', n = ', tile_number + CALL ereport(RoutineName, errorstatus, jules_message) + END IF + ELSE + errorstatus = 101 + WRITE(jules_message,'(A)') & + TRIM( NML ) // ' namelist instance not recognised: ' // & + TRIM( nml_instance ) + CALL ereport(RoutineName, errorstatus, jules_message) + END IF +END SELECT + +! Range of specified types checked by check_jules_surface_types +IF ( tile_number < 1 ) THEN + errorstatus = 101 + WRITE(jules_message,'(A)') & + TRIM( NML ) // ' and jules_surface_types inputs are inconsistent; '// & + TRIM( nml_instance ) // ' is not specified in jules_surface_types' + CALL ereport(RoutineName, errorstatus, jules_message) +END IF + +END FUNCTION map_nml_instance_to_tile_number + END MODULE jules_surface_types_mod diff --git a/src/initialisation/shared/allocate_jules_arrays.F90 b/src/initialisation/shared/allocate_jules_arrays.F90 index 533ff2f7..ae218226 100644 --- a/src/initialisation/shared/allocate_jules_arrays.F90 +++ b/src/initialisation/shared/allocate_jules_arrays.F90 @@ -222,10 +222,6 @@ SUBROUTINE allocate_jules_arrays(crop_vars_data,psparms_data,top_pdm_data, & CALL fire_vars_alloc(land_pts,npft, fire_vars_data) -CALL c_z0h_z0m_alloc(ntype) - -CALL c_irrigation_alloc(ntype) - CALL jules_vars_alloc(land_pts,ntype,nsurft,rad_nband,nsoilt,sm_levels, & t_i_length, t_j_length, npft, bl_levels, pdims_s, pdims, & l_albedo_obs, cansnowtile, l_deposition, & @@ -233,7 +229,14 @@ SUBROUTINE allocate_jules_arrays(crop_vars_data,psparms_data,top_pdm_data, & CALL nvegparm_alloc(nnvg) +#if !defined(UM_JULES) +! The call sequence for initialisation differs between UM-JULES & standalone. +! In standalone, these routines are called when the namelists are read before +! this routine is called. CALL pftparm_alloc(npft) +CALL c_z0h_z0m_alloc(ntype) +CALL c_irrigation_alloc(ntype) +#endif CALL psparms_alloc(land_pts,t_i_length,t_j_length, & nsoilt,sm_levels,dim_cslayer,nsurft,npft, & diff --git a/src/initialisation/standalone/initial_conditions/init_ic_mod.F90 b/src/initialisation/standalone/initial_conditions/init_ic_mod.F90 index 15fc5381..9ada1430 100644 --- a/src/initialisation/standalone/initial_conditions/init_ic_mod.F90 +++ b/src/initialisation/standalone/initial_conditions/init_ic_mod.F90 @@ -87,8 +87,6 @@ SUBROUTINE init_ic(nml_dir,crop_vars,psparms,toppdm,ainfo,trif_vars, & USE ancil_info, ONLY: land_pts, lice_pts, soil_pts, nsoilt, & dim_cslayer -USE prognostics, ONLY: l_broadcast_soilt_in_mod => l_broadcast_soilt - USE crop_vars_mod, ONLY: startyr, startmon, startday, & starttime diff --git a/src/initialisation/standalone/params/init_pftparm.inc b/src/initialisation/standalone/params/init_pftparm.inc index 8c39dfe6..12bc3d76 100644 --- a/src/initialisation/standalone/params/init_pftparm.inc +++ b/src/initialisation/standalone/params/init_pftparm.inc @@ -12,18 +12,14 @@ USE missing_data_mod, ONLY: & ! imported scalar parameters rmdi -USE io_constants, ONLY: namelist_unit - -USE string_utils_mod, ONLY: to_string - USE jules_surface_types_mod, ONLY: npft, nnpft USE ancil_info, ONLY: land_pts -USE pftparm_io, ONLY: jules_pftparm, init_pftparm_allocated, & - canht_ft_io, lai_io +USE pftparm_io, ONLY: read_nml_jules_pftparm -USE pftparm, ONLY: print_nlist_jules_pftparm, check_jules_pftparm +USE pftparm, ONLY: print_nlist_jules_pftparm, check_jules_pftparm, & + canht_pft, lai_pft USE errormessagelength_mod, ONLY: errormessagelength @@ -59,66 +55,16 @@ CHARACTER(LEN=errormessagelength) :: iomessage CHARACTER(LEN=*), PARAMETER :: routinename='INIT_PFTPARM_JULES' -!----------------------------------------------------------------------------- -! Read namelist -!----------------------------------------------------------------------------- -CALL log_info(routinename, "Reading JULES_PFTPARM namelist...") - -! Open the pft parameters namelist file -OPEN(namelist_unit, FILE=(TRIM(nml_dir) // '/' // 'pft_params.nml'), & - STATUS='old', POSITION='rewind', ACTION='read', IOSTAT = ERROR, & - IOMSG = iomessage) -IF ( ERROR /= 0 ) & - CALL log_fatal(routinename, & - "Error opening namelist file pft_params.nml " // & - "(IOSTAT=" // TRIM(to_string(ERROR)) // " IOMSG=" // & - TRIM(iomessage) // ")") - -READ(namelist_unit, NML = jules_pftparm, IOSTAT = ERROR, IOMSG = iomessage) -IF ( ERROR /= 0 ) & - CALL log_fatal(routinename, & - "Error reading namelist JULES_PFTPARM " // & - "(IOSTAT=" // TRIM(to_string(ERROR)) // " IOMSG=" // & - TRIM(iomessage) // ")") - -! Close the namelist file -CLOSE(namelist_unit, IOSTAT = ERROR, IOMSG = iomessage) -IF ( ERROR /= 0 ) & - CALL log_fatal(routinename, & - "Error closing namelist file pft_params.nml " // & - "(IOSTAT=" // TRIM(to_string(ERROR)) // " IOMSG=" // & - TRIM(iomessage) // ")") - +CALL read_nml_jules_pftparm (nml_dir) !----------------------------------------------------------------------------- ! Process the namelist values !----------------------------------------------------------------------------- -CALL init_pftparm_allocated() CALL print_nlist_jules_pftparm() - -! Print members of pftparm_io not copied to pftparm_mod. -CALL jules_print('pftparm', & - 'Contents of namelist jules_pftparm (standalone only)') -WRITE(iomessage,*)' canht_ft = ',canht_ft_io(1:npft) -CALL jules_print('pftparm',iomessage) -WRITE(iomessage,*)' lai = ',lai_io(1:npft) -CALL jules_print('pftparm',iomessage) -CALL jules_print('pftparm', & - '- - - - - - end of namelist - - - - - -') - -CALL check_jules_pftparm(npft,nnpft) -! Check values of pftparm_io not copied to pftparm_mod before spreading -IF ( ANY( ABS( canht_ft_io(1:npft) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for canht_ft") -END IF -IF ( ANY( ABS( lai_io(1:npft) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for lai") -END IF +CALL check_jules_pftparm() ! Spread over land_pts array -progs%canht_pft(:,:) = SPREAD(canht_ft_io(1:npft), 1, land_pts) -progs%lai_pft(:,:) = SPREAD(lai_io(1:npft), 1, land_pts) +progs%canht_pft(:,:) = SPREAD(canht_pft(:), 1, land_pts) +progs%lai_pft(:,:) = SPREAD(lai_pft(:), 1, land_pts) RETURN diff --git a/src/initialisation/um/read_jules_namelists_mod.F90 b/src/initialisation/um/read_jules_namelists_mod.F90 index 5b0f9cc3..18bae74c 100644 --- a/src/initialisation/um/read_jules_namelists_mod.F90 +++ b/src/initialisation/um/read_jules_namelists_mod.F90 @@ -258,6 +258,8 @@ SUBROUTINE read_jules_pftparm (unitnumber) USE pftparm_io, ONLY: & read_nml_jules_pftparm +USE pftparm, ONLY: & + print_nlist_jules_pftparm, check_jules_pftparm IMPLICIT NONE @@ -269,7 +271,12 @@ SUBROUTINE read_jules_pftparm (unitnumber) IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_in,zhook_handle) +! Reading the jules_pftparm namelist now allocates and fills pftparm arrays CALL read_nml_jules_pftparm(unitnumber) +IF (PrintStatus >= PrStatus_Oper .AND. mype == 0) THEN + CALL print_nlist_jules_pftparm() +END IF +CALL check_jules_pftparm() IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) RETURN diff --git a/src/initialisation/um/surf_couple_allocate_mod.F90 b/src/initialisation/um/surf_couple_allocate_mod.F90 index 56174ac5..f6928789 100644 --- a/src/initialisation/um/surf_couple_allocate_mod.F90 +++ b/src/initialisation/um/surf_couple_allocate_mod.F90 @@ -51,7 +51,6 @@ SUBROUTINE surf_couple_allocate (land_field, ntiles, sm_levels, & USE metstats_mod, ONLY: metstats_allocate -USE pftparm_io, ONLY: init_pftparm_allocated USE pftparm, ONLY: print_nlist_jules_pftparm, check_jules_pftparm USE nvegparm_io, ONLY: init_nvegparm_allocated @@ -288,12 +287,6 @@ SUBROUTINE surf_couple_allocate (land_field, ntiles, sm_levels, & ! Begin initialising arrays from: -! jules_pftparm -CALL init_pftparm_allocated() -IF (PrintStatus >= PrStatus_Oper .AND. mype == 0) THEN - CALL print_nlist_jules_pftparm() -END IF - ! jules_nvegparm CALL init_nvegparm_allocated() IF (PrintStatus >= PrStatus_Oper .AND. mype == 0) THEN @@ -427,7 +420,6 @@ SUBROUTINE surf_couple_allocate (land_field, ntiles, sm_levels, & z0_soil = z0_nvg(soil - npft) ! Now that the arrays have been allocated and filled we can check them -CALL check_jules_pftparm(npft,nnpft) CALL check_jules_nvegparm(nnvg) CALL check_jules_red_parms() CALL c_z0h_z0m_check(ntype) diff --git a/src/science/params/c_irrigation_mod.F90 b/src/science/params/c_irrigation_mod.F90 index e659f14a..c2c10fcd 100644 --- a/src/science/params/c_irrigation_mod.F90 +++ b/src/science/params/c_irrigation_mod.F90 @@ -147,5 +147,65 @@ SUBROUTINE c_irrigation_print() END SUBROUTINE c_irrigation_print #endif +#if defined(UM_JULES) && !defined(LFRIC) +SUBROUTINE read_nml_c_irrigation_bcast(ntype) + +USE setup_namelist, ONLY: setup_nml_type +USE UM_parcore, ONLY: mype +USE parkind1, ONLY: jprb, jpim +USE yomhook, ONLY: lhook, dr_hook +USE errormessagelength_mod, ONLY: errormessagelength +USE max_dimensions, ONLY: ntype_max + +IMPLICIT NONE + +!Arguments +INTEGER, INTENT(IN) :: ntype + +! Local variables +INTEGER :: my_comm +INTEGER :: mpl_nml_type +INTEGER :: icode + +CHARACTER(LEN=*), PARAMETER :: RoutineName='READ_NML_C_IRRIGATION_BCAST' +INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0 +INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1 +REAL(KIND=jprb) :: zhook_handle +CHARACTER(LEN=errormessagelength) :: iomessage + +! set number of each type of variable in my_namelist type +INTEGER, PARAMETER :: no_of_types = 1 +INTEGER, PARAMETER :: n_int = ntype_max + +TYPE :: my_namelist + SEQUENCE + INTEGER :: irrig_tile(ntype_max) +END TYPE my_namelist + +TYPE (my_namelist) :: my_nml + +IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_in,zhook_handle) + +CALL gc_get_communicator(my_comm, icode) + +CALL setup_nml_type(no_of_types, mpl_nml_type, n_int_in = n_int) + +IF ( mype == 0 ) THEN + my_nml % irrig_tile(1:ntype) = irrig_tile(:) +END IF + +CALL mpl_bcast(my_nml,1,mpl_nml_type,0,my_comm,icode) + +IF (mype /= 0) THEN + irrig_tile(:) = my_nml % irrig_tile(1:ntype) +END IF + +CALL mpl_type_free(mpl_nml_type,icode) + +IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) +RETURN + +END SUBROUTINE read_nml_c_irrigation_bcast +#endif END MODULE c_irrigation_mod diff --git a/src/science/params/c_z0h_z0m_mod.F90 b/src/science/params/c_z0h_z0m_mod.F90 index 7362d91e..e40e873e 100644 --- a/src/science/params/c_z0h_z0m_mod.F90 +++ b/src/science/params/c_z0h_z0m_mod.F90 @@ -79,12 +79,12 @@ SUBROUTINE c_z0h_z0m_check(ntype) INTEGER :: errorstatus = 0 CHARACTER(LEN=*), PARAMETER :: RoutineName='C_Z0H_Z0M_CHECK' -IF ( SIZE( z0h_z0m(:) ) > 0 ) & - CALL check_jules_nml_values ( z0h_z0m(:), 'z0h_z0m', ntype, & - 0.0, HUGE(1.0), RoutineName, errorstatus ) IF ( SIZE( z0h_z0m_classic(:) ) > 0 ) & CALL check_jules_nml_values ( z0h_z0m_classic(:), & 'z0h_z0m_classic', ntype, 0.0, HUGE(1.0), RoutineName, errorstatus ) +IF ( SIZE( z0h_z0m(:) ) > 0 ) & + CALL check_jules_nml_values ( z0h_z0m(:), 'z0h_z0m', ntype, & + 0.0, HUGE(1.0), RoutineName, errorstatus ) IF ( errorstatus > 0 ) & CALL ereport(RoutineName, errorstatus, & @@ -114,4 +114,68 @@ SUBROUTINE c_z0h_z0m_print() END SUBROUTINE c_z0h_z0m_print #endif +#if defined(UM_JULES) && !defined(LFRIC) +SUBROUTINE read_nml_c_z0h_z0m_bcast(ntype) + +USE setup_namelist, ONLY: setup_nml_type +USE UM_parcore, ONLY: mype +USE parkind1, ONLY: jprb, jpim +USE yomhook, ONLY: lhook, dr_hook +USE errormessagelength_mod, ONLY: errormessagelength +USE max_dimensions, ONLY: ntype_max + +IMPLICIT NONE + +!Arguments +INTEGER, INTENT(IN) :: ntype + +! Local variables +INTEGER :: my_comm +INTEGER :: mpl_nml_type +INTEGER :: icode + +CHARACTER(LEN=*), PARAMETER :: RoutineName='READ_NML_C_Z0H_Z0M_BCAST' +INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0 +INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1 +REAL(KIND=jprb) :: zhook_handle +CHARACTER(LEN=errormessagelength) :: iomessage + +! set number of each type of variable in my_namelist type +INTEGER, PARAMETER :: no_of_types = 1 +INTEGER, PARAMETER :: n_real = 2 * ntype_max + +TYPE :: my_namelist + SEQUENCE + REAL(KIND=real_jlslsm) :: z0h_z0m_classic(ntype_max) + REAL(KIND=real_jlslsm) :: z0h_z0m(ntype_max) +END TYPE my_namelist + +TYPE (my_namelist) :: my_nml + +IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_in,zhook_handle) + +CALL gc_get_communicator(my_comm, icode) + +CALL setup_nml_type(no_of_types, mpl_nml_type, n_real_in = n_real) + +IF ( mype == 0 ) THEN + my_nml % z0h_z0m_classic(1:ntype) = z0h_z0m_classic(:) + my_nml % z0h_z0m(1:ntype) = z0h_z0m(:) +END IF + +CALL mpl_bcast(my_nml,1,mpl_nml_type,0,my_comm,icode) + +IF (mype /= 0) THEN + z0h_z0m_classic(:) = my_nml % z0h_z0m_classic(1:ntype) + z0h_z0m(:) = my_nml % z0h_z0m(1:ntype) +END IF + +CALL mpl_type_free(mpl_nml_type,icode) + +IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) +RETURN + +END SUBROUTINE read_nml_c_z0h_z0m_bcast +#endif + END MODULE c_z0h_z0m diff --git a/src/science/params/pftparm_io_mod.F90 b/src/science/params/pftparm_io_mod.F90 index c2786e96..499f1fa9 100644 --- a/src/science/params/pftparm_io_mod.F90 +++ b/src/science/params/pftparm_io_mod.F90 @@ -14,587 +14,330 @@ MODULE pftparm_io -USE max_dimensions, ONLY: & - npft_max USE missing_data_mod, ONLY: imdi, rmdi USE um_types, ONLY: real_jlslsm +USE jules_surface_types_mod, ONLY: nml_instance_len IMPLICIT NONE !--------------------------------------------------------------------- -! Set up variables to use in IO (a fixed size version of each array -! in pftparm that we want to initialise). +! Set up variables to use in IO - scalars as one namelist per PFT. !--------------------------------------------------------------------- #if !defined(UM_JULES) INTEGER :: & - fsmc_mod_io(npft_max) = imdi + fsmc_mod_io = imdi REAL(KIND=real_jlslsm) :: & - canht_ft_io(npft_max) = rmdi, & - lai_io(npft_max) = rmdi, & - psi_close_io(npft_max) = rmdi, & - psi_open_io(npft_max) = rmdi + canht_ft_io = rmdi, & + lai_io = rmdi, & + psi_close_io = rmdi, & + psi_open_io = rmdi #endif INTEGER :: & - c3_io(npft_max) = imdi, & - irrig_pft_io(npft_max) = imdi, & - orient_io(npft_max) = imdi + c3_io = imdi, & + irrig_pft_io = imdi, & + orient_io = imdi REAL(KIND=real_jlslsm) :: & - a_wl_io(npft_max) = rmdi, & - a_ws_io(npft_max) = rmdi, & - act_jmax_io(npft_max) = rmdi, & - act_vcmax_io(npft_max) = rmdi, & - aef_io(npft_max) = rmdi, & - albsnc_max_io(npft_max) = rmdi, & - albsnc_min_io(npft_max) = rmdi, & - albsnf_max_io(npft_max) = rmdi, & - albsnf_maxl_io(npft_max) = rmdi, & - albsnf_maxu_io(npft_max) = rmdi, & - alpha_io(npft_max) = rmdi, & - alpha_elec_io(npft_max) = rmdi, & - alnir_io(npft_max) = rmdi, & - alnirl_io(npft_max) = rmdi, & - alniru_io(npft_max) = rmdi, & - alpar_io(npft_max) = rmdi, & - alparl_io(npft_max) = rmdi, & - alparu_io(npft_max) = rmdi, & - avg_ba_io(npft_max) = rmdi, & - b_wl_io(npft_max) = rmdi, & - can_struct_a_io(npft_max) = rmdi, & - catch0_io(npft_max) = rmdi, & - ccleaf_min_io(npft_max) = rmdi, & - ccleaf_max_io(npft_max) = rmdi, & - ccwood_min_io(npft_max) = rmdi, & - ccwood_max_io(npft_max) = rmdi, & - ci_st_io(npft_max) = rmdi, & - dcatch_dlai_io(npft_max) = rmdi, & - deact_jmax_io(npft_max) = rmdi, & - deact_vcmax_io(npft_max) = rmdi, & - dfp_dcuo_io(npft_max) = rmdi, & - dgl_dm_io(npft_max) = rmdi, & - dgl_dt_io(npft_max) = rmdi, & - dqcrit_io(npft_max) = rmdi, & - ds_jmax_io(npft_max) = rmdi, & - ds_vcmax_io(npft_max) = rmdi, & - dust_veg_scj_io(npft_max) = rmdi, & - dz0v_dh_io(npft_max) = rmdi, & - emis_pft_io(npft_max) = rmdi, & - eta_sl_io(npft_max) = rmdi, & - f0_io(npft_max) = rmdi, & - fef_bc_io(npft_max) = rmdi, & - fef_c2h4_io(npft_max) = rmdi, & - fef_c2h6_io(npft_max) = rmdi, & - fef_c3h8_io(npft_max) = rmdi, & - fef_ch4_io(npft_max) = rmdi, & - fef_co_io(npft_max) = rmdi, & - fef_co2_io(npft_max) = rmdi, & - fef_dms_io(npft_max) = rmdi, & - fef_hcho_io(npft_max) = rmdi, & - fef_mecho_io(npft_max) = rmdi, & - fef_nh3_io(npft_max) = rmdi, & - fef_nox_io(npft_max) = rmdi, & - fef_oc_io(npft_max) = rmdi, & - fef_so2_io(npft_max) = rmdi, & - fd_io(npft_max) = rmdi, & - fire_mort_io(npft_max) = rmdi, & - fl_o3_ct_io(npft_max) = rmdi, & - fsmc_of_io(npft_max) = rmdi, & - fsmc_p0_io(npft_max) = rmdi, & - sug_g0_io(npft_max) = rmdi, & - g1_stomata_io(npft_max) = rmdi, & - g_leaf_0_io(npft_max) = rmdi, & - glmin_io(npft_max) = rmdi, & - gpp_st_io(npft_max) = rmdi, & - sug_grec_io(npft_max) = rmdi, & - gsoil_f_io(npft_max) = rmdi, & - hw_sw_io(npft_max) = rmdi, & - ief_io(npft_max) = rmdi, & - infil_f_io(npft_max) = rmdi, & - jv25_ratio_io(npft_max) = rmdi, & - kext_io(npft_max) = rmdi, & - kn_io(npft_max) = rmdi, & - knl_io(npft_max) = rmdi, & - kpar_io(npft_max) = rmdi, & - lai_alb_lim_io(npft_max) = rmdi, & - lma_io(npft_max) = rmdi, & - mef_io(npft_max) = rmdi, & - neff_io(npft_max) = rmdi, & - nl0_io(npft_max) = rmdi, & - nmass_io(npft_max) = rmdi, & - nr_nl_io(npft_max) = rmdi, & - ns_nl_io(npft_max) = rmdi, & - nsw_io(npft_max) = rmdi, & - nr_io(npft_max) = rmdi, & - omega_io(npft_max) = rmdi, & - omegal_io(npft_max) = rmdi, & - omegau_io(npft_max) = rmdi, & - omnir_io(npft_max) = rmdi, & - omnirl_io(npft_max) = rmdi, & - omniru_io(npft_max) = rmdi, & - q10_leaf_io(npft_max) = rmdi, & - r_grow_io(npft_max) = rmdi, & - rootd_ft_io(npft_max) = rmdi, & - sigl_io(npft_max) = rmdi, & - tef_io(npft_max) = rmdi, & - tleaf_of_io(npft_max) = rmdi, & - tlow_io(npft_max) = rmdi, & - tupp_io(npft_max) = rmdi, & - vint_io(npft_max) = rmdi, & - vsl_io(npft_max) = rmdi, & - sug_yg_io(npft_max) = rmdi, & - z0hm_pft_io(npft_max) = rmdi, & - z0hm_classic_pft_io(npft_max) = rmdi, & - z0v_io(npft_max) = rmdi, & - sox_a_io(npft_max) = rmdi, & - sox_p50_io(npft_max) = rmdi, & - sox_rp_min_io(npft_max) = rmdi + a_wl_io = rmdi, & + a_ws_io = rmdi, & + act_jmax_io = rmdi, & + act_vcmax_io = rmdi, & + aef_io = rmdi, & + albsnc_max_io = rmdi, & + albsnc_min_io = rmdi, & + albsnf_max_io = rmdi, & + albsnf_maxl_io = rmdi, & + albsnf_maxu_io = rmdi, & + alpha_io = rmdi, & + alpha_elec_io = rmdi, & + alnir_io = rmdi, & + alnirl_io = rmdi, & + alniru_io = rmdi, & + alpar_io = rmdi, & + alparl_io = rmdi, & + alparu_io = rmdi, & + avg_ba_io = rmdi, & + b_wl_io = rmdi, & + can_struct_a_io = rmdi, & + catch0_io = rmdi, & + ccleaf_min_io = rmdi, & + ccleaf_max_io = rmdi, & + ccwood_min_io = rmdi, & + ccwood_max_io = rmdi, & + ci_st_io = rmdi, & + dcatch_dlai_io = rmdi, & + deact_jmax_io = rmdi, & + deact_vcmax_io = rmdi, & + dfp_dcuo_io = rmdi, & + dgl_dm_io = rmdi, & + dgl_dt_io = rmdi, & + dqcrit_io = rmdi, & + ds_jmax_io = rmdi, & + ds_vcmax_io = rmdi, & + dust_veg_scj_io = rmdi, & + dz0v_dh_io = rmdi, & + emis_pft_io = rmdi, & + eta_sl_io = rmdi, & + f0_io = rmdi, & + fef_bc_io = rmdi, & + fef_c2h4_io = rmdi, & + fef_c2h6_io = rmdi, & + fef_c3h8_io = rmdi, & + fef_ch4_io = rmdi, & + fef_co_io = rmdi, & + fef_co2_io = rmdi, & + fef_dms_io = rmdi, & + fef_hcho_io = rmdi, & + fef_mecho_io = rmdi, & + fef_nh3_io = rmdi, & + fef_nox_io = rmdi, & + fef_oc_io = rmdi, & + fef_so2_io = rmdi, & + fd_io = rmdi, & + fire_mort_io = rmdi, & + fl_o3_ct_io = rmdi, & + fsmc_of_io = rmdi, & + fsmc_p0_io = rmdi, & + sug_g0_io = rmdi, & + g1_stomata_io = rmdi, & + g_leaf_0_io = rmdi, & + glmin_io = rmdi, & + gpp_st_io = rmdi, & + sug_grec_io = rmdi, & + gsoil_f_io = rmdi, & + hw_sw_io = rmdi, & + ief_io = rmdi, & + infil_f_io = rmdi, & + jv25_ratio_io = rmdi, & + kext_io = rmdi, & + kn_io = rmdi, & + knl_io = rmdi, & + kpar_io = rmdi, & + lai_alb_lim_io = rmdi, & + lma_io = rmdi, & + mef_io = rmdi, & + neff_io = rmdi, & + nl0_io = rmdi, & + nmass_io = rmdi, & + nr_nl_io = rmdi, & + ns_nl_io = rmdi, & + nsw_io = rmdi, & + nr_io = rmdi, & + omega_io = rmdi, & + omegal_io = rmdi, & + omegau_io = rmdi, & + omnir_io = rmdi, & + omnirl_io = rmdi, & + omniru_io = rmdi, & + q10_leaf_io = rmdi, & + r_grow_io = rmdi, & + rootd_ft_io = rmdi, & + sigl_io = rmdi, & + tef_io = rmdi, & + tleaf_of_io = rmdi, & + tlow_io = rmdi, & + tupp_io = rmdi, & + vint_io = rmdi, & + vsl_io = rmdi, & + sug_yg_io = rmdi, & + z0hm_pft_io = rmdi, & + z0hm_classic_pft_io = rmdi, & + z0v_io = rmdi, & + sox_a_io = rmdi, & + sox_p50_io = rmdi, & + sox_rp_min_io = rmdi + +CHARACTER(LEN=nml_instance_len) :: pft_name_io + !--------------------------------------------------------------------- ! Set up a namelist for reading and writing these arrays !--------------------------------------------------------------------- NAMELIST / jules_pftparm/ & #if !defined(UM_JULES) canht_ft_io, lai_io, & - fsmc_mod_io, psi_close_io, psi_open_io, & + fsmc_mod_io, psi_close_io, psi_open_io, & #endif - a_wl_io, a_ws_io, aef_io, & - act_jmax_io, act_vcmax_io, albsnc_max_io, & - albsnc_min_io, albsnf_max_io, albsnf_maxl_io, & - albsnf_maxu_io, alpha_io, alpha_elec_io, & - alnir_io, alnirl_io, alniru_io, & - alpar_io, alparl_io, alparu_io, & - avg_ba_io, b_wl_io, c3_io, & - can_struct_a_io, catch0_io, ccleaf_max_io, & - ccleaf_min_io, ccwood_max_io, ccwood_min_io, & - ci_st_io, dcatch_dlai_io, deact_jmax_io, & - deact_vcmax_io, dfp_dcuo_io, dgl_dm_io, & - dgl_dt_io, dqcrit_io, ds_jmax_io, & - ds_vcmax_io, dust_veg_scj_io, dz0v_dh_io, & - emis_pft_io, eta_sl_io, f0_io, & - fef_bc_io, fef_ch4_io, fef_co_io, & - fef_co2_io, fef_nox_io, fef_oc_io, & - fef_c2h4_io, fef_c2h6_io, fef_c3h8_io, & - fef_hcho_io, fef_mecho_io, & - fef_nh3_io, fef_dms_io, & - fef_so2_io, fd_io, fire_mort_io, & - fl_o3_ct_io, fsmc_of_io, fsmc_p0_io, & - sug_g0_io, g1_stomata_io, g_leaf_0_io, & - glmin_io, gpp_st_io, sug_grec_io, & - gsoil_f_io, hw_sw_io, ief_io, & - infil_f_io, irrig_pft_io, jv25_ratio_io, & - kext_io, kn_io, knl_io, & - kpar_io, lai_alb_lim_io, lma_io, & - mef_io, neff_io, nl0_io, & - nmass_io, nr_io, nr_nl_io, & - ns_nl_io, nsw_io, omega_io, & - omegal_io, omegau_io, omnir_io, & - omnirl_io, omniru_io, orient_io, & - q10_leaf_io, r_grow_io, rootd_ft_io, & - sigl_io, tef_io, tleaf_of_io, & - tlow_io, tupp_io, vint_io, & - vsl_io, sug_yg_io, z0hm_pft_io, & - z0hm_classic_pft_io, z0v_io, sox_a_io, & - sox_p50_io, sox_rp_min_io + a_wl_io, a_ws_io, act_jmax_io, & + act_vcmax_io, aef_io, albsnc_max_io, & + albsnc_min_io, albsnf_max_io, albsnf_maxl_io, & + albsnf_maxu_io, alnir_io, alnirl_io, & + alniru_io, alpar_io, alparl_io, & + alparu_io, alpha_elec_io, alpha_io, & + avg_ba_io, b_wl_io, c3_io, & + can_struct_a_io, catch0_io, ccleaf_max_io, & + ccleaf_min_io, ccwood_max_io, ccwood_min_io, & + ci_st_io, dcatch_dlai_io, deact_jmax_io, & + deact_vcmax_io, dfp_dcuo_io, dgl_dm_io, & + dgl_dt_io, dqcrit_io, ds_jmax_io, & + ds_vcmax_io, dust_veg_scj_io, dz0v_dh_io, & + emis_pft_io, eta_sl_io, f0_io, & + fd_io, fef_bc_io, fef_c2h4_io, & + fef_c2h6_io, fef_c3h8_io, fef_ch4_io, & + fef_co2_io, fef_co_io, fef_dms_io, & + fef_hcho_io, fef_mecho_io, fef_nh3_io, & + fef_nox_io, fef_oc_io, fef_so2_io, & + fire_mort_io, fl_o3_ct_io, fsmc_of_io, & + fsmc_p0_io, g1_stomata_io, g_leaf_0_io, & + glmin_io, gpp_st_io, gsoil_f_io, & + hw_sw_io, ief_io, infil_f_io, & + irrig_pft_io, jv25_ratio_io, kext_io, & + kn_io, knl_io, kpar_io, & + lai_alb_lim_io, lma_io, mef_io, & + neff_io, nl0_io, nmass_io, & + nr_io, nr_nl_io, ns_nl_io, & + nsw_io, omega_io, omegal_io, & + omegau_io, omnir_io, omnirl_io, & + omniru_io, orient_io, pft_name_io, & + q10_leaf_io, r_grow_io, rootd_ft_io, & + sigl_io, sox_a_io, sox_p50_io, & + sox_rp_min_io, sug_g0_io, sug_grec_io, & + sug_yg_io, tef_io, tleaf_of_io, & + tlow_io, tupp_io, vint_io, & + vsl_io, z0hm_classic_pft_io, z0hm_pft_io, & + z0v_io CHARACTER(LEN=*), PARAMETER, PRIVATE :: ModuleName='PFTPARM_IO' CONTAINS +#if !defined(UM_JULES) +SUBROUTINE read_nml_jules_pftparm (nml_dir) + +USE jules_surface_types_mod, ONLY: npft + +USE io_constants, ONLY: namelist_unit + +USE string_utils_mod, ONLY: to_string + +USE logging_mod, ONLY: log_info, log_fatal + +USE errormessagelength_mod, ONLY: errormessagelength + +IMPLICIT NONE + +! Arguments +CHARACTER(LEN=*), INTENT(IN) :: nml_dir ! The directory containing the + ! namelists +! Work variables +INTEGER :: i, ERROR ! Error indicator +CHARACTER(LEN=errormessagelength) :: iomessage + +CHARACTER(LEN=*), PARAMETER :: RoutineName='READ_NML_JULES_PFTPARM' + +!----------------------------------------------------------------------------- +! Read namelist +!----------------------------------------------------------------------------- +CALL log_info(routinename, "Reading JULES_PFTPARM namelist...") + +! Open the pft parameters namelist file +OPEN(namelist_unit, FILE=(TRIM(nml_dir) // '/' // 'pft_params.nml'), & + STATUS='old', POSITION='rewind', ACTION='read', IOSTAT = ERROR, & + IOMSG = iomessage) +IF ( ERROR /= 0 ) & + CALL log_fatal(routinename, & + "Error opening namelist file pft_params.nml " // & + "(IOSTAT=" // TRIM(to_string(ERROR)) // " IOMSG=" // & + TRIM(iomessage) // ")") + +DO i = 1, npft + CALL reset_jules_pftparm() + READ(namelist_unit, NML = jules_pftparm, IOSTAT = ERROR, IOMSG = iomessage) + IF ( ERROR /= 0 ) THEN + CALL log_fatal(routinename, & + "Error reading namelist JULES_PFTPARM " // & + "(IOSTAT=" // TRIM(to_string(ERROR)) // " IOMSG=" // & + TRIM(iomessage) // ")") + END IF + CALL init_pftparm_allocated() +END DO + +! Close the namelist file +CLOSE(namelist_unit, IOSTAT = ERROR, IOMSG = iomessage) +IF ( ERROR /= 0 ) & + CALL log_fatal(routinename, & + "Error closing namelist file pft_params.nml " // & + "(IOSTAT=" // TRIM(to_string(ERROR)) // " IOMSG=" // & + TRIM(iomessage) // ")") + +END SUBROUTINE read_nml_jules_pftparm +#endif + #if defined(UM_JULES) SUBROUTINE read_nml_jules_pftparm (unitnumber) ! Description: ! Read the JULES_PFTPARM namelist -USE setup_namelist, ONLY: setup_nml_type USE check_iostat_mod, ONLY: check_iostat USE UM_parcore, ONLY: mype USE parkind1, ONLY: jprb, jpim USE yomhook, ONLY: lhook, dr_hook USE errormessagelength_mod, ONLY: errormessagelength +USE pftparm, ONLY: pftparm_alloc, read_nml_jules_pftparm_bcast +USE c_z0h_z0m, ONLY: c_z0h_z0m_alloc, read_nml_c_z0h_z0m_bcast, z0h_z0m +USE c_irrigation_mod, ONLY: c_irrigation_alloc, read_nml_c_irrigation_bcast, & + irrig_tile +USE jules_surface_types_mod, ONLY: npft, ntype +USE ereport_mod, ONLY: ereport + +USE, INTRINSIC :: ISO_FORTRAN_ENV, ONLY: IOSTAT_END + IMPLICIT NONE ! Subroutine arguments INTEGER, INTENT(IN) :: unitnumber -INTEGER :: my_comm -INTEGER :: mpl_nml_type -INTEGER :: ErrorStatus -INTEGER :: icode -REAL(KIND=jprb) :: zhook_handle +INTEGER :: ErrorStatus, errcode, i +REAL(KIND=jprb) :: zhook_handle CHARACTER(LEN=*), PARAMETER :: RoutineName='READ_NML_JULES_PFTPARM' INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0 INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1 CHARACTER(LEN=errormessagelength) :: iomessage -! set number of each type of variable in my_namelist type -INTEGER, PARAMETER :: no_of_types = 2 -INTEGER, PARAMETER :: n_int = 3 * npft_max -INTEGER, PARAMETER :: n_real = 108 * npft_max - -TYPE :: my_namelist - SEQUENCE - INTEGER :: c3_io(npft_max) - INTEGER :: irrig_pft_io(npft_max) - INTEGER :: orient_io(npft_max) - REAL(KIND=real_jlslsm) :: a_wl_io(npft_max) - REAL(KIND=real_jlslsm) :: a_ws_io(npft_max) - REAL(KIND=real_jlslsm) :: act_jmax_io(npft_max) - REAL(KIND=real_jlslsm) :: act_vcmax_io(npft_max) - REAL(KIND=real_jlslsm) :: aef_io(npft_max) - REAL(KIND=real_jlslsm) :: albsnc_max_io(npft_max) - REAL(KIND=real_jlslsm) :: albsnc_min_io(npft_max) - REAL(KIND=real_jlslsm) :: albsnf_max_io(npft_max) - REAL(KIND=real_jlslsm) :: albsnf_maxl_io(npft_max) - REAL(KIND=real_jlslsm) :: albsnf_maxu_io(npft_max) - REAL(KIND=real_jlslsm) :: alpha_io(npft_max) - REAL(KIND=real_jlslsm) :: alpha_elec_io(npft_max) - REAL(KIND=real_jlslsm) :: alnir_io(npft_max) - REAL(KIND=real_jlslsm) :: alnirl_io(npft_max) - REAL(KIND=real_jlslsm) :: alniru_io(npft_max) - REAL(KIND=real_jlslsm) :: alpar_io(npft_max) - REAL(KIND=real_jlslsm) :: alparl_io(npft_max) - REAL(KIND=real_jlslsm) :: alparu_io(npft_max) - REAL(KIND=real_jlslsm) :: avg_ba_io(npft_max) - REAL(KIND=real_jlslsm) :: b_wl_io(npft_max) - REAL(KIND=real_jlslsm) :: can_struct_a_io(npft_max) - REAL(KIND=real_jlslsm) :: catch0_io(npft_max) - REAL(KIND=real_jlslsm) :: ccleaf_min_io(npft_max) - REAL(KIND=real_jlslsm) :: ccleaf_max_io(npft_max) - REAL(KIND=real_jlslsm) :: ccwood_min_io(npft_max) - REAL(KIND=real_jlslsm) :: ccwood_max_io(npft_max) - REAL(KIND=real_jlslsm) :: ci_st_io(npft_max) - REAL(KIND=real_jlslsm) :: dcatch_dlai_io(npft_max) - REAL(KIND=real_jlslsm) :: deact_jmax_io(npft_max) - REAL(KIND=real_jlslsm) :: deact_vcmax_io(npft_max) - REAL(KIND=real_jlslsm) :: dfp_dcuo_io(npft_max) - REAL(KIND=real_jlslsm) :: dgl_dm_io(npft_max) - REAL(KIND=real_jlslsm) :: dgl_dt_io(npft_max) - REAL(KIND=real_jlslsm) :: dqcrit_io(npft_max) - REAL(KIND=real_jlslsm) :: ds_jmax_io(npft_max) - REAL(KIND=real_jlslsm) :: ds_vcmax_io(npft_max) - REAL(KIND=real_jlslsm) :: dust_veg_scj_io(npft_max) - REAL(KIND=real_jlslsm) :: dz0v_dh_io(npft_max) - REAL(KIND=real_jlslsm) :: emis_pft_io(npft_max) - REAL(KIND=real_jlslsm) :: eta_sl_io(npft_max) - REAL(KIND=real_jlslsm) :: f0_io(npft_max) - REAL(KIND=real_jlslsm) :: fd_io(npft_max) - REAL(KIND=real_jlslsm) :: fef_bc_io(npft_max) - REAL(KIND=real_jlslsm) :: fef_ch4_io(npft_max) - REAL(KIND=real_jlslsm) :: fef_co_io(npft_max) - REAL(KIND=real_jlslsm) :: fef_co2_io(npft_max) - REAL(KIND=real_jlslsm) :: fef_nox_io(npft_max) - REAL(KIND=real_jlslsm) :: fef_oc_io(npft_max) - REAL(KIND=real_jlslsm) :: fef_so2_io(npft_max) - REAL(KIND=real_jlslsm) :: fef_c2h4_io(npft_max) - REAL(KIND=real_jlslsm) :: fef_c2h6_io(npft_max) - REAL(KIND=real_jlslsm) :: fef_c3h8_io(npft_max) - REAL(KIND=real_jlslsm) :: fef_hcho_io(npft_max) - REAL(KIND=real_jlslsm) :: fef_mecho_io(npft_max) - REAL(KIND=real_jlslsm) :: fef_nh3_io(npft_max) - REAL(KIND=real_jlslsm) :: fef_dms_io(npft_max) - REAL(KIND=real_jlslsm) :: fire_mort_io(npft_max) - REAL(KIND=real_jlslsm) :: fl_o3_ct_io(npft_max) - REAL(KIND=real_jlslsm) :: fsmc_of_io(npft_max) - REAL(KIND=real_jlslsm) :: fsmc_p0_io(npft_max) - REAL(KIND=real_jlslsm) :: sug_g0_io(npft_max) - REAL(KIND=real_jlslsm) :: g1_stomata_io(npft_max) - REAL(KIND=real_jlslsm) :: g_leaf_0_io(npft_max) - REAL(KIND=real_jlslsm) :: glmin_io(npft_max) - REAL(KIND=real_jlslsm) :: gpp_st_io(npft_max) - REAL(KIND=real_jlslsm) :: sug_grec_io(npft_max) - REAL(KIND=real_jlslsm) :: gsoil_f_io(npft_max) - REAL(KIND=real_jlslsm) :: hw_sw_io(npft_max) - REAL(KIND=real_jlslsm) :: ief_io(npft_max) - REAL(KIND=real_jlslsm) :: infil_f_io(npft_max) - REAL(KIND=real_jlslsm) :: jv25_ratio_io(npft_max) - REAL(KIND=real_jlslsm) :: kext_io(npft_max) - REAL(KIND=real_jlslsm) :: kn_io(npft_max) - REAL(KIND=real_jlslsm) :: knl_io(npft_max) - REAL(KIND=real_jlslsm) :: kpar_io(npft_max) - REAL(KIND=real_jlslsm) :: lai_alb_lim_io(npft_max) - REAL(KIND=real_jlslsm) :: lma_io(npft_max) - REAL(KIND=real_jlslsm) :: mef_io(npft_max) - REAL(KIND=real_jlslsm) :: neff_io(npft_max) - REAL(KIND=real_jlslsm) :: nl0_io(npft_max) - REAL(KIND=real_jlslsm) :: nmass_io(npft_max) - REAL(KIND=real_jlslsm) :: nr_io(npft_max) - REAL(KIND=real_jlslsm) :: nr_nl_io(npft_max) - REAL(KIND=real_jlslsm) :: ns_nl_io(npft_max) - REAL(KIND=real_jlslsm) :: nsw_io(npft_max) - REAL(KIND=real_jlslsm) :: omega_io(npft_max) - REAL(KIND=real_jlslsm) :: omegal_io(npft_max) - REAL(KIND=real_jlslsm) :: omegau_io(npft_max) - REAL(KIND=real_jlslsm) :: omnir_io(npft_max) - REAL(KIND=real_jlslsm) :: omnirl_io(npft_max) - REAL(KIND=real_jlslsm) :: omniru_io(npft_max) - REAL(KIND=real_jlslsm) :: q10_leaf_io(npft_max) - REAL(KIND=real_jlslsm) :: r_grow_io(npft_max) - REAL(KIND=real_jlslsm) :: rootd_ft_io(npft_max) - REAL(KIND=real_jlslsm) :: sigl_io(npft_max) - REAL(KIND=real_jlslsm) :: tef_io(npft_max) - REAL(KIND=real_jlslsm) :: tleaf_of_io(npft_max) - REAL(KIND=real_jlslsm) :: tlow_io(npft_max) - REAL(KIND=real_jlslsm) :: tupp_io(npft_max) - REAL(KIND=real_jlslsm) :: vint_io(npft_max) - REAL(KIND=real_jlslsm) :: vsl_io(npft_max) - REAL(KIND=real_jlslsm) :: sug_yg_io(npft_max) - REAL(KIND=real_jlslsm) :: z0hm_pft_io(npft_max) - REAL(KIND=real_jlslsm) :: z0hm_classic_pft_io(npft_max) - REAL(KIND=real_jlslsm) :: z0v_io(npft_max) - REAL(KIND=real_jlslsm) :: sox_a_io(npft_max) - REAL(KIND=real_jlslsm) :: sox_p50_io(npft_max) - REAL(KIND=real_jlslsm) :: sox_rp_min_io(npft_max) -END TYPE my_namelist - -TYPE (my_namelist) :: my_nml - IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_in,zhook_handle) -CALL gc_get_communicator(my_comm, icode) - -CALL setup_nml_type(no_of_types, mpl_nml_type, n_int_in = n_int, & - n_real_in = n_real) - -IF (mype == 0) THEN - - READ (UNIT = unitnumber, NML = jules_pftparm, IOSTAT = errorstatus, & - IOMSG = iomessage) - CALL check_iostat(errorstatus, "namelist jules_pftparm", & - iomessage) - - my_nml % a_wl_io = a_wl_io - my_nml % a_ws_io = a_ws_io - my_nml % act_jmax_io = act_jmax_io - my_nml % act_vcmax_io = act_vcmax_io - my_nml % aef_io = aef_io - my_nml % albsnc_max_io = albsnc_max_io - my_nml % albsnc_min_io = albsnc_min_io - my_nml % albsnf_max_io = albsnf_max_io - my_nml % albsnf_maxl_io = albsnf_maxl_io - my_nml % albsnf_maxu_io = albsnf_maxu_io - my_nml % alpha_io = alpha_io - my_nml % alpha_elec_io = alpha_elec_io - my_nml % alnir_io = alnir_io - my_nml % alnirl_io = alnirl_io - my_nml % alniru_io = alniru_io - my_nml % alpar_io = alpar_io - my_nml % alparl_io = alparl_io - my_nml % alparu_io = alparu_io - my_nml % avg_ba_io = avg_ba_io - my_nml % b_wl_io = b_wl_io - my_nml % c3_io = c3_io - my_nml % can_struct_a_io = can_struct_a_io - my_nml % catch0_io = catch0_io - my_nml % ccleaf_min_io = ccleaf_min_io - my_nml % ccleaf_max_io = ccleaf_max_io - my_nml % ccwood_min_io = ccwood_min_io - my_nml % ccwood_max_io = ccwood_max_io - my_nml % ci_st_io = ci_st_io - my_nml % dcatch_dlai_io = dcatch_dlai_io - my_nml % deact_jmax_io = deact_jmax_io - my_nml % deact_vcmax_io = deact_vcmax_io - my_nml % dfp_dcuo_io = dfp_dcuo_io - my_nml % dgl_dm_io = dgl_dm_io - my_nml % dgl_dt_io = dgl_dt_io - my_nml % dqcrit_io = dqcrit_io - my_nml % ds_jmax_io = ds_jmax_io - my_nml % ds_vcmax_io = ds_vcmax_io - my_nml % dust_veg_scj_io = dust_veg_scj_io - my_nml % dz0v_dh_io = dz0v_dh_io - my_nml % emis_pft_io = emis_pft_io - my_nml % eta_sl_io = eta_sl_io - my_nml % f0_io = f0_io - my_nml % fd_io = fd_io - my_nml % fef_bc_io = fef_bc_io - my_nml % fef_ch4_io = fef_ch4_io - my_nml % fef_co_io = fef_co_io - my_nml % fef_co2_io = fef_co2_io - my_nml % fef_nox_io = fef_nox_io - my_nml % fef_oc_io = fef_oc_io - my_nml % fef_so2_io = fef_so2_io - my_nml % fef_c2h4_io = fef_c2h4_io - my_nml % fef_c2h6_io = fef_c2h6_io - my_nml % fef_c3h8_io = fef_c3h8_io - my_nml % fef_hcho_io = fef_hcho_io - my_nml % fef_mecho_io = fef_mecho_io - my_nml % fef_nh3_io = fef_nh3_io - my_nml % fef_dms_io = fef_dms_io - my_nml % fire_mort_io = fire_mort_io - my_nml % fl_o3_ct_io = fl_o3_ct_io - my_nml % fsmc_of_io = fsmc_of_io - my_nml % fsmc_p0_io = fsmc_p0_io - my_nml % sug_g0_io = sug_g0_io - my_nml % g1_stomata_io = g1_stomata_io - my_nml % g_leaf_0_io = g_leaf_0_io - my_nml % glmin_io = glmin_io - my_nml % gpp_st_io = gpp_st_io - my_nml % sug_grec_io = sug_grec_io - my_nml % gsoil_f_io = gsoil_f_io - my_nml % hw_sw_io = hw_sw_io - my_nml % ief_io = ief_io - my_nml % infil_f_io = infil_f_io - my_nml % irrig_pft_io = irrig_pft_io - my_nml % jv25_ratio_io = jv25_ratio_io - my_nml % kext_io = kext_io - my_nml % kn_io = kn_io - my_nml % knl_io = knl_io - my_nml % kpar_io = kpar_io - my_nml % lai_alb_lim_io = lai_alb_lim_io - my_nml % lma_io = lma_io - my_nml % mef_io = mef_io - my_nml % neff_io = neff_io - my_nml % nl0_io = nl0_io - my_nml % nmass_io = nmass_io - my_nml % nr_io = nr_io - my_nml % nr_nl_io = nr_nl_io - my_nml % ns_nl_io = ns_nl_io - my_nml % nsw_io = nsw_io - my_nml % omega_io = omega_io - my_nml % omegal_io = omegal_io - my_nml % omegau_io = omegau_io - my_nml % omnir_io = omnir_io - my_nml % omnirl_io = omnirl_io - my_nml % omniru_io = omniru_io - my_nml % orient_io = orient_io - my_nml % q10_leaf_io = q10_leaf_io - my_nml % r_grow_io = r_grow_io - my_nml % rootd_ft_io = rootd_ft_io - my_nml % sigl_io = sigl_io - my_nml % tef_io = tef_io - my_nml % tleaf_of_io = tleaf_of_io - my_nml % tlow_io = tlow_io - my_nml % tupp_io = tupp_io - my_nml % vint_io = vint_io - my_nml % vsl_io = vsl_io - my_nml % sug_yg_io = sug_yg_io - my_nml % z0hm_pft_io = z0hm_pft_io - my_nml % z0hm_classic_pft_io = z0hm_classic_pft_io - my_nml % z0v_io = z0v_io - my_nml % sox_a_io = sox_a_io - my_nml % sox_p50_io = sox_p50_io - my_nml % sox_rp_min_io = sox_rp_min_io +CALL pftparm_alloc(npft) +! Not allocated added so this routine and non-veg equivalent can be called in +! any order +IF ( .NOT. ALLOCATED(z0h_z0m) ) THEN + CALL c_z0h_z0m_alloc(ntype) +END IF +IF ( .NOT. ALLOCATED(irrig_tile) ) THEN + CALL c_irrigation_alloc(ntype) END IF -CALL mpl_bcast(my_nml,1,mpl_nml_type,0,my_comm,icode) - -IF (mype /= 0) THEN - - a_wl_io = my_nml % a_wl_io - a_ws_io = my_nml % a_ws_io - act_jmax_io = my_nml % act_jmax_io - act_vcmax_io = my_nml % act_vcmax_io - aef_io = my_nml % aef_io - albsnc_max_io = my_nml % albsnc_max_io - albsnc_min_io = my_nml % albsnc_min_io - albsnf_max_io = my_nml % albsnf_max_io - albsnf_maxl_io = my_nml % albsnf_maxl_io - albsnf_maxu_io = my_nml % albsnf_maxu_io - alpha_io = my_nml % alpha_io - alpha_elec_io = my_nml % alpha_elec_io - alnir_io = my_nml % alnir_io - alnirl_io = my_nml % alnirl_io - alniru_io = my_nml % alniru_io - alpar_io = my_nml % alpar_io - alparl_io = my_nml % alparl_io - alparu_io = my_nml % alparu_io - avg_ba_io = my_nml % avg_ba_io - b_wl_io = my_nml % b_wl_io - c3_io = my_nml % c3_io - can_struct_a_io = my_nml % can_struct_a_io - catch0_io = my_nml % catch0_io - ccleaf_min_io = my_nml % ccleaf_min_io - ccleaf_max_io = my_nml % ccleaf_max_io - ccwood_min_io = my_nml % ccwood_min_io - ccwood_max_io = my_nml % ccwood_max_io - ci_st_io = my_nml % ci_st_io - dcatch_dlai_io = my_nml % dcatch_dlai_io - deact_jmax_io = my_nml % deact_jmax_io - deact_vcmax_io = my_nml % deact_vcmax_io - dfp_dcuo_io = my_nml % dfp_dcuo_io - dgl_dm_io = my_nml % dgl_dm_io - dgl_dt_io = my_nml % dgl_dt_io - dqcrit_io = my_nml % dqcrit_io - ds_jmax_io = my_nml % ds_jmax_io - ds_vcmax_io = my_nml % ds_vcmax_io - dust_veg_scj_io = my_nml % dust_veg_scj_io - dz0v_dh_io = my_nml % dz0v_dh_io - emis_pft_io = my_nml % emis_pft_io - eta_sl_io = my_nml % eta_sl_io - f0_io = my_nml % f0_io - fd_io = my_nml % fd_io - fef_bc_io = my_nml % fef_bc_io - fef_ch4_io = my_nml % fef_ch4_io - fef_co_io = my_nml % fef_co_io - fef_co2_io = my_nml % fef_co2_io - fef_nox_io = my_nml % fef_nox_io - fef_oc_io = my_nml % fef_oc_io - fef_so2_io = my_nml % fef_so2_io - fef_c2h4_io = my_nml % fef_c2h4_io - fef_c2h6_io = my_nml % fef_c2h6_io - fef_c3h8_io = my_nml % fef_c3h8_io - fef_hcho_io = my_nml % fef_hcho_io - fef_mecho_io = my_nml % fef_mecho_io - fef_nh3_io = my_nml % fef_nh3_io - fef_dms_io = my_nml % fef_dms_io - fire_mort_io = my_nml % fire_mort_io - fl_o3_ct_io = my_nml % fl_o3_ct_io - fsmc_of_io = my_nml % fsmc_of_io - fsmc_p0_io = my_nml % fsmc_p0_io - g1_stomata_io = my_nml % g1_stomata_io - sug_g0_io = my_nml % sug_g0_io - g_leaf_0_io = my_nml % g_leaf_0_io - glmin_io = my_nml % glmin_io - gpp_st_io = my_nml % gpp_st_io - sug_grec_io = my_nml % sug_grec_io - gsoil_f_io = my_nml % gsoil_f_io - hw_sw_io = my_nml % hw_sw_io - ief_io = my_nml % ief_io - infil_f_io = my_nml % infil_f_io - irrig_pft_io = my_nml % irrig_pft_io - jv25_ratio_io = my_nml % jv25_ratio_io - kext_io = my_nml % kext_io - kn_io = my_nml % kn_io - knl_io = my_nml % knl_io - kpar_io = my_nml % kpar_io - lai_alb_lim_io = my_nml % lai_alb_lim_io - lma_io = my_nml % lma_io - mef_io = my_nml % mef_io - neff_io = my_nml % neff_io - nl0_io = my_nml % nl0_io - nmass_io = my_nml % nmass_io - nr_io = my_nml % nr_io - nr_nl_io = my_nml % nr_nl_io - ns_nl_io = my_nml % ns_nl_io - nsw_io = my_nml % nsw_io - omega_io = my_nml % omega_io - omegal_io = my_nml % omegal_io - omegau_io = my_nml % omegau_io - omnir_io = my_nml % omnir_io - omnirl_io = my_nml % omnirl_io - omniru_io = my_nml % omniru_io - orient_io = my_nml % orient_io - q10_leaf_io = my_nml % q10_leaf_io - r_grow_io = my_nml % r_grow_io - rootd_ft_io = my_nml % rootd_ft_io - sigl_io = my_nml % sigl_io - tef_io = my_nml % tef_io - tleaf_of_io = my_nml % tleaf_of_io - tlow_io = my_nml % tlow_io - tupp_io = my_nml % tupp_io - vint_io = my_nml % vint_io - vsl_io = my_nml % vsl_io - sug_yg_io = my_nml % sug_yg_io - z0hm_pft_io = my_nml % z0hm_pft_io - z0hm_classic_pft_io = my_nml % z0hm_classic_pft_io - z0v_io = my_nml % z0v_io - sox_a_io = my_nml % sox_a_io - sox_p50_io = my_nml % sox_p50_io - sox_rp_min_io = my_nml % sox_rp_min_io +IF (mype == 0) THEN + i = 0 + DO ! loop over jules_pftparm instances + CALL reset_jules_pftparm() + READ (UNIT = unitnumber, NML = jules_pftparm, IOSTAT = errorstatus, & + IOMSG = iomessage) + + IF (errorstatus == IOSTAT_END) THEN + EXIT + ELSE IF (errorstatus == 0) THEN + i = i + 1 + IF ( i > npft ) THEN + errcode = 101 + WRITE(iomessage,*) & + "Number of instances of jules_pftparm exceeds npft." + CALL ereport(RoutineName, errcode, iomessage) + END IF + ELSE + CALL check_iostat(errorstatus, "namelist jules_pftparm", iomessage) + END IF + ! Map to correct position in allocated array + CALL init_pftparm_allocated() + END DO ! loop over jules_pftparm instances + REWIND(UNIT = unitnumber) END IF -CALL mpl_type_free(mpl_nml_type,icode) +! Now the allocated arrays are filled, broadcast these to other processors +CALL read_nml_jules_pftparm_bcast(npft) +CALL read_nml_c_z0h_z0m_bcast(ntype) +CALL read_nml_c_irrigation_bcast(ntype) IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) RETURN @@ -611,6 +354,7 @@ SUBROUTINE init_pftparm_allocated() USE pftparm, ONLY: & ! namelist variables: #if !defined(UM_JULES) + canht_pft, lai_pft, & fsmc_mod, psi_close, psi_open, & #endif a_wl, a_ws, aef, & @@ -651,13 +395,15 @@ SUBROUTINE init_pftparm_allocated() sug_yg, z0v, sox_a, & sox_p50, sox_rp_min +USE c_z0h_z0m, ONLY: z0h_z0m, z0h_z0m_classic, c_z0h_z0m_alloc USE c_irrigation_mod, ONLY: irrig_tile -USE c_z0h_z0m, ONLY: z0h_z0m, z0h_z0m_classic -USE jules_surface_types_mod, ONLY: npft +USE jules_surface_types_mod, ONLY: map_nml_instance_to_tile_number, ntype IMPLICIT NONE +INTEGER :: i, errorstatus + INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0 INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1 REAL(KIND=jprb) :: zhook_handle @@ -668,150 +414,284 @@ SUBROUTINE init_pftparm_allocated() IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_in,zhook_handle) +i = map_nml_instance_to_tile_number ( 'jules_pftparm', pft_name_io ) + ! Radiation and albedo parameters. -albsnc_max(:) = albsnc_max_io(1:npft) -albsnc_min(:) = albsnc_min_io(1:npft) -albsnf_max(:) = albsnf_max_io(1:npft) -albsnf_maxl(:) = albsnf_maxl_io(1:npft) -albsnf_maxu(:) = albsnf_maxu_io(1:npft) -alnir(:) = alnir_io(1:npft) -alnirl(:) = alnirl_io(1:npft) -alniru(:) = alniru_io(1:npft) -alpar(:) = alpar_io(1:npft) -alparl(:) = alparl_io(1:npft) -alparu(:) = alparu_io(1:npft) -kext(:) = kext_io(1:npft) -kpar(:) = kpar_io(1:npft) -lai_alb_lim(:) = lai_alb_lim_io(1:npft) -omega(:) = omega_io(1:npft) -omegal(:) = omegal_io(1:npft) -omegau(:) = omegau_io(1:npft) -omnir(:) = omnir_io(1:npft) -omnirl(:) = omnirl_io(1:npft) -omniru(:) = omniru_io(1:npft) -orient(:) = orient_io(1:npft) +albsnc_max(i) = albsnc_max_io +albsnc_min(i) = albsnc_min_io +albsnf_max(i) = albsnf_max_io +albsnf_maxl(i) = albsnf_maxl_io +albsnf_maxu(i) = albsnf_maxu_io +alnir(i) = alnir_io +alnirl(i) = alnirl_io +alniru(i) = alniru_io +alpar(i) = alpar_io +alparl(i) = alparl_io +alparu(i) = alparu_io +kext(i) = kext_io +kpar(i) = kpar_io +lai_alb_lim(i) = lai_alb_lim_io +omega(i) = omega_io +omegal(i) = omegal_io +omegau(i) = omegau_io +omnir(i) = omnir_io +omnirl(i) = omnirl_io +omniru(i) = omniru_io +orient(i) = orient_io ! Photosynthesis and respiration parameters. -act_jmax(:) = act_jmax_io(1:npft) -act_vcmax(:) = act_vcmax_io(1:npft) -alpha(:) = alpha_io(1:npft) -alpha_elec(:) = alpha_elec_io(1:npft) -c3(:) = c3_io(1:npft) -can_struct_a(:) = can_struct_a_io(1:npft) -deact_jmax(:) = deact_jmax_io(1:npft) -deact_vcmax(:)= deact_vcmax_io(1:npft) -dqcrit(:) = dqcrit_io(1:npft) -ds_jmax(:) = ds_jmax_io(1:npft) -ds_vcmax(:) = ds_vcmax_io(1:npft) -f0(:) = f0_io(1:npft) -fd(:) = fd_io(1:npft) -g1_stomata(:) = g1_stomata_io(1:npft) -jv25_ratio(:) = jv25_ratio_io(1:npft) -kn(:) = kn_io(1:npft) -knl(:) = knl_io(1:npft) -neff(:) = neff_io(1:npft) -nl0(:) = nl0_io(1:npft) -nr_nl(:) = nr_nl_io(1:npft) -ns_nl(:) = ns_nl_io(1:npft) -r_grow(:) = r_grow_io(1:npft) -tlow(:) = tlow_io(1:npft) -tupp(:) = tupp_io(1:npft) +act_jmax(i) = act_jmax_io +act_vcmax(i) = act_vcmax_io +alpha(i) = alpha_io +alpha_elec(i) = alpha_elec_io +c3(i) = c3_io +can_struct_a(i) = can_struct_a_io +deact_jmax(i) = deact_jmax_io +deact_vcmax(i) = deact_vcmax_io +dqcrit(i) = dqcrit_io +ds_jmax(i) = ds_jmax_io +ds_vcmax(i) = ds_vcmax_io +f0(i) = f0_io +fd(i) = fd_io +g1_stomata(i) = g1_stomata_io +jv25_ratio(i) = jv25_ratio_io +kn(i) = kn_io +knl(i) = knl_io +neff(i) = neff_io +nl0(i) = nl0_io +nr_nl(i) = nr_nl_io +ns_nl(i) = ns_nl_io +r_grow(i) = r_grow_io +tlow(i) = tlow_io +tupp(i) = tupp_io ! Trait physiology parameters -hw_sw(:) = hw_sw_io(1:npft) -lma(:) = lma_io(1:npft) -nmass(:) = nmass_io(1:npft) -nr(:) = nr_io(1:npft) -nsw(:) = nsw_io(1:npft) -q10_leaf(:) = q10_leaf_io(1:npft) -vint(:) = vint_io(1:npft) -vsl(:) = vsl_io(1:npft) +hw_sw(i) = hw_sw_io +lma(i) = lma_io +nmass(i) = nmass_io +nr(i) = nr_io +nsw(i) = nsw_io +q10_leaf(i) = q10_leaf_io +vint(i) = vint_io +vsl(i) = vsl_io ! Allometric and other parameters. -a_wl(:) = a_wl_io(1:npft) -a_ws(:) = a_ws_io(1:npft) -b_wl(:) = b_wl_io(1:npft) -eta_sl(:) = eta_sl_io(1:npft) -sigl(:) = sigl_io(1:npft) +a_wl(i) = a_wl_io +a_ws(i) = a_ws_io +b_wl(i) = b_wl_io +eta_sl(i) = eta_sl_io +sigl(i) = sigl_io ! Phenology parameters. -dgl_dm(:) = dgl_dm_io(1:npft) -dgl_dt(:) = dgl_dt_io(1:npft) -fsmc_of(:) = fsmc_of_io(1:npft) -g_leaf_0(:) = g_leaf_0_io(1:npft) -tleaf_of(:) = tleaf_of_io(1:npft) +dgl_dm(i) = dgl_dm_io +dgl_dt(i) = dgl_dt_io +fsmc_of(i) = fsmc_of_io +g_leaf_0(i) = g_leaf_0_io +tleaf_of(i) = tleaf_of_io ! Hydrological, thermal and other "physical" characteristics. #if !defined(UM_JULES) -fsmc_mod(:) = fsmc_mod_io(1:npft) -psi_close(:) = psi_close_io(1:npft) -psi_open(:) = psi_open_io(1:npft) +! *** Just adding these here for now *** +canht_pft(i) = canht_ft_io +lai_pft(i) = lai_io +! *** Just adding these here for now *** +fsmc_mod(i) = fsmc_mod_io +psi_close(i) = psi_close_io +psi_open(i) = psi_open_io #endif -catch0(:) = catch0_io(1:npft) -dcatch_dlai(:) = dcatch_dlai_io(1:npft) -dust_veg_scj(:) = dust_veg_scj_io(1:npft) -dz0v_dh(:) = dz0v_dh_io(1:npft) -emis_pft(:) = emis_pft_io(1:npft) -fsmc_p0(:) = fsmc_p0_io(1:npft) -glmin(:) = glmin_io(1:npft) -gsoil_f(:) = gsoil_f_io(1:npft) -infil_f(:) = infil_f_io(1:npft) -irrig_tile(1:npft) = irrig_pft_io(1:npft) -rootd_ft(:) = rootd_ft_io(1:npft) -z0v(:) = z0v_io(1:npft) -z0h_z0m(1:npft) = z0hm_pft_io(1:npft) -z0h_z0m_classic(1:npft) = z0hm_classic_pft_io(1:npft) - +catch0(i) = catch0_io +dcatch_dlai(i) = dcatch_dlai_io +dust_veg_scj(i) = dust_veg_scj_io +dz0v_dh(i) = dz0v_dh_io +emis_pft(i) = emis_pft_io +fsmc_p0(i) = fsmc_p0_io +glmin(i) = glmin_io +gsoil_f(i) = gsoil_f_io +infil_f(i) = infil_f_io +irrig_tile(i) = irrig_pft_io +rootd_ft(i) = rootd_ft_io +z0v(i) = z0v_io +z0h_z0m(i) = z0hm_pft_io +z0h_z0m_classic(i) = z0hm_classic_pft_io ! Ozone damage parameters. -dfp_dcuo(:) = dfp_dcuo_io(1:npft) -fl_o3_ct(:) = fl_o3_ct_io(1:npft) +dfp_dcuo(i) = dfp_dcuo_io +fl_o3_ct(i) = fl_o3_ct_io ! BVOC emission parameters. -aef(:) = aef_io(1:npft) -ci_st(:) = ci_st_io(1:npft) -gpp_st(:) = gpp_st_io(1:npft) -ief(:) = ief_io(1:npft) -mef(:) = mef_io(1:npft) -tef(:) = tef_io(1:npft) +aef(i) = aef_io +ci_st(i) = ci_st_io +gpp_st(i) = gpp_st_io +ief(i) = ief_io +mef(i) = mef_io +tef(i) = tef_io ! INFERNO combustion parameters -avg_ba(:) = avg_ba_io(1:npft) -ccleaf_max(:) = ccleaf_max_io(1:npft) -ccleaf_min(:) = ccleaf_min_io(1:npft) -ccwood_max(:) = ccwood_max_io(1:npft) -ccwood_min(:) = ccwood_min_io(1:npft) -fire_mort(:) = fire_mort_io(1:npft) +avg_ba(i) = avg_ba_io +ccleaf_max(i) = ccleaf_max_io +ccleaf_min(i) = ccleaf_min_io +ccwood_max(i) = ccwood_max_io +ccwood_min(i) = ccwood_min_io +fire_mort(i) = fire_mort_io ! INFERNO emission parameters -fef_bc(:) = fef_bc_io(1:npft) -fef_ch4(:) = fef_ch4_io(1:npft) -fef_co(:) = fef_co_io(1:npft) -fef_co2(:) = fef_co2_io(1:npft) -fef_nox(:) = fef_nox_io(1:npft) -fef_oc(:) = fef_oc_io(1:npft) -fef_so2(:) = fef_so2_io(1:npft) -fef_c2h4(:) = fef_c2h4_io(1:npft) -fef_c2h6(:) = fef_c2h6_io(1:npft) -fef_c3h8(:) = fef_c3h8_io(1:npft) -fef_hcho(:) = fef_hcho_io(1:npft) -fef_mecho(:) = fef_mecho_io(1:npft) -fef_nh3(:) = fef_nh3_io(1:npft) -fef_dms(:) = fef_dms_io(1:npft) +fef_bc(i) = fef_bc_io +fef_ch4(i) = fef_ch4_io +fef_co(i) = fef_co_io +fef_co2(i) = fef_co2_io +fef_nox(i) = fef_nox_io +fef_oc(i) = fef_oc_io +fef_so2(i) = fef_so2_io +fef_c2h4(i) = fef_c2h4_io +fef_c2h6(i) = fef_c2h6_io +fef_c3h8(i) = fef_c3h8_io +fef_hcho(i) = fef_hcho_io +fef_mecho(i) = fef_mecho_io +fef_nh3(i) = fef_nh3_io +fef_dms(i) = fef_dms_io ! SUGAR parameters -sug_g0(:) = sug_g0_io(1:npft) -sug_grec(:) = sug_grec_io(1:npft) -sug_yg(:) = sug_yg_io(1:npft) +sug_g0(i) = sug_g0_io +sug_grec(i) = sug_grec_io +sug_yg(i) = sug_yg_io ! SOX parameters -sox_a(:) = sox_a_io(1:npft) -sox_p50(:) = sox_p50_io(1:npft) -sox_rp_min(:) = sox_rp_min_io(1:npft) +sox_a(i) = sox_a_io +sox_p50(i) = sox_p50_io +sox_rp_min(i) = sox_rp_min_io IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) RETURN END SUBROUTINE init_pftparm_allocated + +SUBROUTINE reset_jules_pftparm() + +IMPLICIT NONE + +pft_name_io = '' + +#if !defined(UM_JULES) +fsmc_mod_io = imdi +canht_ft_io = rmdi +lai_io = rmdi +psi_close_io = rmdi +psi_open_io = rmdi +#endif + +c3_io = imdi +irrig_pft_io = imdi +orient_io = imdi +a_wl_io = rmdi +a_ws_io = rmdi +act_jmax_io = rmdi +act_vcmax_io = rmdi +aef_io = rmdi +albsnc_max_io = rmdi +albsnc_min_io = rmdi +albsnf_max_io = rmdi +albsnf_maxl_io = rmdi +albsnf_maxu_io = rmdi +alpha_io = rmdi +alpha_elec_io = rmdi +alnir_io = rmdi +alnirl_io = rmdi +alniru_io = rmdi +alpar_io = rmdi +alparl_io = rmdi +alparu_io = rmdi +avg_ba_io = rmdi +b_wl_io = rmdi +can_struct_a_io = rmdi +catch0_io = rmdi +ccleaf_min_io = rmdi +ccleaf_max_io = rmdi +ccwood_min_io = rmdi +ccwood_max_io = rmdi +ci_st_io = rmdi +dcatch_dlai_io = rmdi +deact_jmax_io = rmdi +deact_vcmax_io = rmdi +dfp_dcuo_io = rmdi +dgl_dm_io = rmdi +dgl_dt_io = rmdi +dqcrit_io = rmdi +ds_jmax_io = rmdi +ds_vcmax_io = rmdi +dust_veg_scj_io = rmdi +dz0v_dh_io = rmdi +emis_pft_io = rmdi +eta_sl_io = rmdi +f0_io = rmdi +fef_bc_io = rmdi +fef_c2h4_io = rmdi +fef_c2h6_io = rmdi +fef_c3h8_io = rmdi +fef_ch4_io = rmdi +fef_co_io = rmdi +fef_co2_io = rmdi +fef_dms_io = rmdi +fef_hcho_io = rmdi +fef_mecho_io = rmdi +fef_nh3_io = rmdi +fef_nox_io = rmdi +fef_oc_io = rmdi +fef_so2_io = rmdi +fd_io = rmdi +fire_mort_io = rmdi +fl_o3_ct_io = rmdi +fsmc_of_io = rmdi +fsmc_p0_io = rmdi +sug_g0_io = rmdi +g1_stomata_io = rmdi +g_leaf_0_io = rmdi +glmin_io = rmdi +gpp_st_io = rmdi +sug_grec_io = rmdi +gsoil_f_io = rmdi +hw_sw_io = rmdi +ief_io = rmdi +infil_f_io = rmdi +jv25_ratio_io = rmdi +kext_io = rmdi +kn_io = rmdi +knl_io = rmdi +kpar_io = rmdi +lai_alb_lim_io = rmdi +lma_io = rmdi +mef_io = rmdi +neff_io = rmdi +nl0_io = rmdi +nmass_io = rmdi +nr_nl_io = rmdi +ns_nl_io = rmdi +nsw_io = rmdi +nr_io = rmdi +omega_io = rmdi +omegal_io = rmdi +omegau_io = rmdi +omnir_io = rmdi +omnirl_io = rmdi +omniru_io = rmdi +q10_leaf_io = rmdi +r_grow_io = rmdi +rootd_ft_io = rmdi +sigl_io = rmdi +tef_io = rmdi +tleaf_of_io = rmdi +tlow_io = rmdi +tupp_io = rmdi +vint_io = rmdi +vsl_io = rmdi +sug_yg_io = rmdi +z0hm_pft_io = rmdi +z0hm_classic_pft_io = rmdi +z0v_io = rmdi +sox_a_io = rmdi +sox_p50_io = rmdi +sox_rp_min_io = rmdi + +END SUBROUTINE reset_jules_pftparm + END MODULE pftparm_io diff --git a/src/science/params/pftparm_mod.F90 b/src/science/params/pftparm_mod.F90 index 68978848..1f4ecea1 100644 --- a/src/science/params/pftparm_mod.F90 +++ b/src/science/params/pftparm_mod.F90 @@ -27,6 +27,13 @@ MODULE pftparm ! Flag for leaf orientation: 1 for horizontal, ! 0 for spherical. +! Only required by JULES standalone before spreading over land_pts arrays +REAL(KIND=real_jlslsm), ALLOCATABLE :: & + canht_pft(:) & + ! Canopy height (m). +,lai_pft(:) + ! Leaf Area Index (LAI) + REAL(KIND=real_jlslsm), ALLOCATABLE :: & albsnc_max(:) & ! Snow-covered albedo for large LAI. @@ -400,6 +407,12 @@ SUBROUTINE pftparm_alloc(npft) ! ====pftparm module common==== +! JULES standalone IO variables; required before spreading over land_pts arrays +ALLOCATE( canht_pft(npft)) +ALLOCATE( lai_pft(npft)) +canht_pft(:) = rmdi +lai_pft(:) = rmdi + ! Radiation and albedo parameters. ALLOCATE( albsnc_max(npft)) ALLOCATE( albsnc_min(npft)) @@ -671,10 +684,13 @@ SUBROUTINE print_nlist_jules_pftparm() CHARACTER(LEN=50000) :: lineBuffer -CALL jules_print('pftparm', & - 'Contents of namelist jules_pftparm') +CALL jules_print('pftparm', 'Contents of namelist jules_pftparm') #if !defined(UM_JULES) +WRITE(lineBuffer,*)' canht_pft = ',canht_pft +CALL jules_print('pftparm',lineBuffer) +WRITE(lineBuffer,*)' lai_pft = ',lai_pft +CALL jules_print('pftparm',lineBuffer) WRITE(lineBuffer,*)' fsmc_mod = ',fsmc_mod CALL jules_print('pftparm',lineBuffer) WRITE(lineBuffer,*)' psi_close = ',psi_close @@ -683,7 +699,6 @@ SUBROUTINE print_nlist_jules_pftparm() CALL jules_print('pftparm',lineBuffer) #endif - WRITE(lineBuffer,*)' a_wl = ',a_wl CALL jules_print('pftparm',lineBuffer) WRITE(lineBuffer,*)' a_ws = ',a_ws @@ -887,7 +902,7 @@ SUBROUTINE print_nlist_jules_pftparm() END SUBROUTINE print_nlist_jules_pftparm -SUBROUTINE check_jules_pftparm(npft,nnpft) +SUBROUTINE check_jules_pftparm() USE jules_soil_biogeochem_mod, ONLY: l_layeredC, soil_bgc_model, & soil_model_4pool @@ -903,6 +918,8 @@ SUBROUTINE check_jules_pftparm(npft,nnpft) USE jules_radiation_mod, ONLY: l_spec_albedo, l_albedo_obs, l_snow_albedo +USE jules_surface_types_mod, ONLY: npft, nnpft + USE missing_data_mod, ONLY: rmdi USE ereport_mod, ONLY: ereport @@ -910,9 +927,6 @@ SUBROUTINE check_jules_pftparm(npft,nnpft) IMPLICIT NONE -!Arguments -INTEGER, INTENT(IN) :: npft, nnpft - ! Work variables INTEGER :: ERROR ! Error indicator @@ -930,6 +944,14 @@ SUBROUTINE check_jules_pftparm(npft,nnpft) ! and other triggered off option to check the value if any > rmdi and then ! check if they should have a value in check_available_options or based on ! science options. +IF ( ANY( ABS( canht_pft(:) - rmdi ) < EPSILON(1.0) ) ) THEN + ERROR = 1 + CALL jules_print(routinename, "No value for canht_pft") +END IF +IF ( ANY( ABS( lai_pft(:) - rmdi ) < EPSILON(1.0) ) ) THEN + ERROR = 1 + CALL jules_print(routinename, "No value for lai_pft") +END IF IF ( ANY( fsmc_mod(:) < 0 ) ) THEN ! fsmc_mod was initialised to < 0 ERROR = 1 CALL jules_print(routinename, "No value for fsmc_mod") @@ -1329,6 +1351,10 @@ SUBROUTINE check_jules_pftparm(npft,nnpft) END IF IF ( l_inferno ) THEN + IF ( ANY( ABS( fef_bc(:) - rmdi ) < EPSILON(1.0) ) ) THEN + ERROR = 1 + CALL jules_print(routinename, "No value for fef_bc") + END IF IF ( ANY( ABS( fef_co2(:) - rmdi ) < EPSILON(1.0) ) ) THEN ERROR = 1 CALL jules_print(routinename, "No value for fef_co2") @@ -1345,6 +1371,10 @@ SUBROUTINE check_jules_pftparm(npft,nnpft) ERROR = 1 CALL jules_print(routinename, "No value for fef_nox") END IF + IF ( ANY( ABS( fef_oc(:) - rmdi ) < EPSILON(1.0) ) ) THEN + ERROR = 1 + CALL jules_print(routinename, "No value for fef_oc") + END IF IF ( ANY( ABS( fef_so2(:) - rmdi ) < EPSILON(1.0) ) ) THEN ERROR = 1 CALL jules_print(routinename, "No value for fef_so2") @@ -1525,4 +1555,388 @@ SUBROUTINE check_jules_pftparm(npft,nnpft) END SUBROUTINE check_jules_pftparm + +#if defined(UM_JULES) && !defined(LFRIC) +SUBROUTINE read_nml_jules_pftparm_bcast(npft) + +USE setup_namelist, ONLY: setup_nml_type +USE UM_parcore, ONLY: mype +USE parkind1, ONLY: jprb, jpim +USE yomhook, ONLY: lhook, dr_hook +USE errormessagelength_mod, ONLY: errormessagelength +USE max_dimensions, ONLY: npft_max + +IMPLICIT NONE + +!Arguments +INTEGER, INTENT(IN) :: npft + +! Local variables +INTEGER :: my_comm +INTEGER :: mpl_nml_type +INTEGER :: icode + +CHARACTER(LEN=*), PARAMETER :: RoutineName='READ_NML_JULES_PFTPARM_BCAST' +INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0 +INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1 +REAL(KIND=jprb) :: zhook_handle +CHARACTER(LEN=errormessagelength) :: iomessage + +! set number of each type of variable in my_namelist type +INTEGER, PARAMETER :: no_of_types = 2 +INTEGER, PARAMETER :: n_int = 2 * npft_max +INTEGER, PARAMETER :: n_real = 106 * npft_max + +TYPE :: my_namelist + SEQUENCE + INTEGER :: c3(npft_max) + INTEGER :: orient(npft_max) + REAL(KIND=real_jlslsm) :: a_wl(npft_max) + REAL(KIND=real_jlslsm) :: a_ws(npft_max) + REAL(KIND=real_jlslsm) :: act_jmax(npft_max) + REAL(KIND=real_jlslsm) :: act_vcmax(npft_max) + REAL(KIND=real_jlslsm) :: aef(npft_max) + REAL(KIND=real_jlslsm) :: albsnc_max(npft_max) + REAL(KIND=real_jlslsm) :: albsnc_min(npft_max) + REAL(KIND=real_jlslsm) :: albsnf_max(npft_max) + REAL(KIND=real_jlslsm) :: albsnf_maxl(npft_max) + REAL(KIND=real_jlslsm) :: albsnf_maxu(npft_max) + REAL(KIND=real_jlslsm) :: alpha(npft_max) + REAL(KIND=real_jlslsm) :: alpha_elec(npft_max) + REAL(KIND=real_jlslsm) :: alnir(npft_max) + REAL(KIND=real_jlslsm) :: alnirl(npft_max) + REAL(KIND=real_jlslsm) :: alniru(npft_max) + REAL(KIND=real_jlslsm) :: alpar(npft_max) + REAL(KIND=real_jlslsm) :: alparl(npft_max) + REAL(KIND=real_jlslsm) :: alparu(npft_max) + REAL(KIND=real_jlslsm) :: avg_ba(npft_max) + REAL(KIND=real_jlslsm) :: b_wl(npft_max) + REAL(KIND=real_jlslsm) :: can_struct_a(npft_max) + REAL(KIND=real_jlslsm) :: catch0(npft_max) + REAL(KIND=real_jlslsm) :: ccleaf_min(npft_max) + REAL(KIND=real_jlslsm) :: ccleaf_max(npft_max) + REAL(KIND=real_jlslsm) :: ccwood_min(npft_max) + REAL(KIND=real_jlslsm) :: ccwood_max(npft_max) + REAL(KIND=real_jlslsm) :: ci_st(npft_max) + REAL(KIND=real_jlslsm) :: dcatch_dlai(npft_max) + REAL(KIND=real_jlslsm) :: deact_jmax(npft_max) + REAL(KIND=real_jlslsm) :: deact_vcmax(npft_max) + REAL(KIND=real_jlslsm) :: dfp_dcuo(npft_max) + REAL(KIND=real_jlslsm) :: dgl_dm(npft_max) + REAL(KIND=real_jlslsm) :: dgl_dt(npft_max) + REAL(KIND=real_jlslsm) :: dqcrit(npft_max) + REAL(KIND=real_jlslsm) :: ds_jmax(npft_max) + REAL(KIND=real_jlslsm) :: ds_vcmax(npft_max) + REAL(KIND=real_jlslsm) :: dust_veg_scj(npft_max) + REAL(KIND=real_jlslsm) :: dz0v_dh(npft_max) + REAL(KIND=real_jlslsm) :: emis_pft(npft_max) + REAL(KIND=real_jlslsm) :: eta_sl(npft_max) + REAL(KIND=real_jlslsm) :: f0(npft_max) + REAL(KIND=real_jlslsm) :: fd(npft_max) + REAL(KIND=real_jlslsm) :: fef_bc(npft_max) + REAL(KIND=real_jlslsm) :: fef_ch4(npft_max) + REAL(KIND=real_jlslsm) :: fef_co(npft_max) + REAL(KIND=real_jlslsm) :: fef_co2(npft_max) + REAL(KIND=real_jlslsm) :: fef_nox(npft_max) + REAL(KIND=real_jlslsm) :: fef_oc(npft_max) + REAL(KIND=real_jlslsm) :: fef_so2(npft_max) + REAL(KIND=real_jlslsm) :: fef_c2h4(npft_max) + REAL(KIND=real_jlslsm) :: fef_c2h6(npft_max) + REAL(KIND=real_jlslsm) :: fef_c3h8(npft_max) + REAL(KIND=real_jlslsm) :: fef_hcho(npft_max) + REAL(KIND=real_jlslsm) :: fef_mecho(npft_max) + REAL(KIND=real_jlslsm) :: fef_nh3(npft_max) + REAL(KIND=real_jlslsm) :: fef_dms(npft_max) + REAL(KIND=real_jlslsm) :: fire_mort(npft_max) + REAL(KIND=real_jlslsm) :: fl_o3_ct(npft_max) + REAL(KIND=real_jlslsm) :: fsmc_of(npft_max) + REAL(KIND=real_jlslsm) :: fsmc_p0(npft_max) + REAL(KIND=real_jlslsm) :: sug_g0(npft_max) + REAL(KIND=real_jlslsm) :: g1_stomata(npft_max) + REAL(KIND=real_jlslsm) :: g_leaf_0(npft_max) + REAL(KIND=real_jlslsm) :: glmin(npft_max) + REAL(KIND=real_jlslsm) :: gpp_st(npft_max) + REAL(KIND=real_jlslsm) :: sug_grec(npft_max) + REAL(KIND=real_jlslsm) :: gsoil_f(npft_max) + REAL(KIND=real_jlslsm) :: hw_sw(npft_max) + REAL(KIND=real_jlslsm) :: ief(npft_max) + REAL(KIND=real_jlslsm) :: infil_f(npft_max) + REAL(KIND=real_jlslsm) :: jv25_ratio(npft_max) + REAL(KIND=real_jlslsm) :: kext(npft_max) + REAL(KIND=real_jlslsm) :: kn(npft_max) + REAL(KIND=real_jlslsm) :: knl(npft_max) + REAL(KIND=real_jlslsm) :: kpar(npft_max) + REAL(KIND=real_jlslsm) :: lai_alb_lim(npft_max) + REAL(KIND=real_jlslsm) :: lma(npft_max) + REAL(KIND=real_jlslsm) :: mef(npft_max) + REAL(KIND=real_jlslsm) :: neff(npft_max) + REAL(KIND=real_jlslsm) :: nl0(npft_max) + REAL(KIND=real_jlslsm) :: nmass(npft_max) + REAL(KIND=real_jlslsm) :: nr(npft_max) + REAL(KIND=real_jlslsm) :: nr_nl(npft_max) + REAL(KIND=real_jlslsm) :: ns_nl(npft_max) + REAL(KIND=real_jlslsm) :: nsw(npft_max) + REAL(KIND=real_jlslsm) :: omega(npft_max) + REAL(KIND=real_jlslsm) :: omegal(npft_max) + REAL(KIND=real_jlslsm) :: omegau(npft_max) + REAL(KIND=real_jlslsm) :: omnir(npft_max) + REAL(KIND=real_jlslsm) :: omnirl(npft_max) + REAL(KIND=real_jlslsm) :: omniru(npft_max) + REAL(KIND=real_jlslsm) :: q10_leaf(npft_max) + REAL(KIND=real_jlslsm) :: r_grow(npft_max) + REAL(KIND=real_jlslsm) :: rootd_ft(npft_max) + REAL(KIND=real_jlslsm) :: sigl(npft_max) + REAL(KIND=real_jlslsm) :: tef(npft_max) + REAL(KIND=real_jlslsm) :: tleaf_of(npft_max) + REAL(KIND=real_jlslsm) :: tlow(npft_max) + REAL(KIND=real_jlslsm) :: tupp(npft_max) + REAL(KIND=real_jlslsm) :: vint(npft_max) + REAL(KIND=real_jlslsm) :: vsl(npft_max) + REAL(KIND=real_jlslsm) :: sug_yg(npft_max) + REAL(KIND=real_jlslsm) :: z0v(npft_max) + REAL(KIND=real_jlslsm) :: sox_a(npft_max) + REAL(KIND=real_jlslsm) :: sox_p50(npft_max) + REAL(KIND=real_jlslsm) :: sox_rp_min(npft_max) +END TYPE my_namelist + +TYPE (my_namelist) :: my_nml + +IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_in,zhook_handle) + +CALL gc_get_communicator(my_comm, icode) + +CALL setup_nml_type(no_of_types, mpl_nml_type, n_int_in = n_int, & + n_real_in = n_real) + +IF ( mype == 0 ) THEN + my_nml % a_wl(1:npft) = a_wl(:) + my_nml % a_ws(1:npft) = a_ws(:) + my_nml % act_jmax(1:npft) = act_jmax(:) + my_nml % act_vcmax(1:npft) = act_vcmax(:) + my_nml % aef(1:npft) = aef(:) + my_nml % albsnc_max(1:npft) = albsnc_max(:) + my_nml % albsnc_min(1:npft) = albsnc_min(:) + my_nml % albsnf_max(1:npft) = albsnf_max(:) + my_nml % albsnf_maxl(1:npft) = albsnf_maxl(:) + my_nml % albsnf_maxu(1:npft) = albsnf_maxu(:) + my_nml % alpha(1:npft) = alpha(:) + my_nml % alpha_elec(1:npft) = alpha_elec(:) + my_nml % alnir(1:npft) = alnir(:) + my_nml % alnirl(1:npft) = alnirl(:) + my_nml % alniru(1:npft) = alniru(:) + my_nml % alpar(1:npft) = alpar(:) + my_nml % alparl(1:npft) = alparl(:) + my_nml % alparu(1:npft) = alparu(:) + my_nml % avg_ba(1:npft) = avg_ba(:) + my_nml % b_wl(1:npft) = b_wl(:) + my_nml % c3(1:npft) = c3(:) + my_nml % can_struct_a(1:npft) = can_struct_a(:) + my_nml % catch0(1:npft) = catch0(:) + my_nml % ccleaf_min(1:npft) = ccleaf_min(:) + my_nml % ccleaf_max(1:npft) = ccleaf_max(:) + my_nml % ccwood_min(1:npft) = ccwood_min(:) + my_nml % ccwood_max(1:npft) = ccwood_max(:) + my_nml % ci_st(1:npft) = ci_st(:) + my_nml % dcatch_dlai(1:npft) = dcatch_dlai(:) + my_nml % deact_jmax(1:npft) = deact_jmax(:) + my_nml % deact_vcmax(1:npft) = deact_vcmax(:) + my_nml % dfp_dcuo(1:npft) = dfp_dcuo(:) + my_nml % dgl_dm(1:npft) = dgl_dm(:) + my_nml % dgl_dt(1:npft) = dgl_dt(:) + my_nml % dqcrit(1:npft) = dqcrit(:) + my_nml % ds_jmax(1:npft) = ds_jmax(:) + my_nml % ds_vcmax(1:npft) = ds_vcmax(:) + my_nml % dust_veg_scj(1:npft) = dust_veg_scj(:) + my_nml % dz0v_dh(1:npft) = dz0v_dh(:) + my_nml % emis_pft(1:npft) = emis_pft(:) + my_nml % eta_sl(1:npft) = eta_sl(:) + my_nml % f0(1:npft) = f0(:) + my_nml % fd(1:npft) = fd(:) + my_nml % fef_bc(1:npft) = fef_bc(:) + my_nml % fef_ch4(1:npft) = fef_ch4(:) + my_nml % fef_co(1:npft) = fef_co(:) + my_nml % fef_co2(1:npft) = fef_co2(:) + my_nml % fef_nox(1:npft) = fef_nox(:) + my_nml % fef_oc(1:npft) = fef_oc(:) + my_nml % fef_so2(1:npft) = fef_so2(:) + my_nml % fef_c2h4(1:npft) = fef_c2h4(:) + my_nml % fef_c2h6(1:npft) = fef_c2h6(:) + my_nml % fef_c3h8(1:npft) = fef_c3h8(:) + my_nml % fef_hcho(1:npft) = fef_hcho(:) + my_nml % fef_mecho(1:npft) = fef_mecho(:) + my_nml % fef_nh3(1:npft) = fef_nh3(:) + my_nml % fef_dms(1:npft) = fef_dms(:) + my_nml % fire_mort(1:npft) = fire_mort(:) + my_nml % fl_o3_ct(1:npft) = fl_o3_ct(:) + my_nml % fsmc_of(1:npft) = fsmc_of(:) + my_nml % fsmc_p0(1:npft) = fsmc_p0(:) + my_nml % sug_g0(1:npft) = sug_g0(:) + my_nml % g1_stomata(1:npft) = g1_stomata(:) + my_nml % g_leaf_0(1:npft) = g_leaf_0(:) + my_nml % glmin(1:npft) = glmin(:) + my_nml % gpp_st(1:npft) = gpp_st(:) + my_nml % sug_grec(1:npft) = sug_grec(:) + my_nml % gsoil_f(1:npft) = gsoil_f(:) + my_nml % hw_sw(1:npft) = hw_sw(:) + my_nml % ief(1:npft) = ief(:) + my_nml % infil_f(1:npft) = infil_f(:) + my_nml % jv25_ratio(1:npft) = jv25_ratio(:) + my_nml % kext(1:npft) = kext(:) + my_nml % kn(1:npft) = kn(:) + my_nml % knl(1:npft) = knl(:) + my_nml % kpar(1:npft) = kpar(:) + my_nml % lai_alb_lim(1:npft) = lai_alb_lim(:) + my_nml % lma(1:npft) = lma(:) + my_nml % mef(1:npft) = mef(:) + my_nml % neff(1:npft) = neff(:) + my_nml % nl0(1:npft) = nl0(:) + my_nml % nmass(1:npft) = nmass(:) + my_nml % nr(1:npft) = nr(:) + my_nml % nr_nl(1:npft) = nr_nl(:) + my_nml % ns_nl(1:npft) = ns_nl(:) + my_nml % nsw(1:npft) = nsw(:) + my_nml % omega(1:npft) = omega(:) + my_nml % omegal(1:npft) = omegal(:) + my_nml % omegau(1:npft) = omegau(:) + my_nml % omnir(1:npft) = omnir(:) + my_nml % omnirl(1:npft) = omnirl(:) + my_nml % omniru(1:npft) = omniru(:) + my_nml % orient(1:npft) = orient(:) + my_nml % q10_leaf(1:npft) = q10_leaf(:) + my_nml % r_grow(1:npft) = r_grow(:) + my_nml % rootd_ft(1:npft) = rootd_ft(:) + my_nml % sigl(1:npft) = sigl(:) + my_nml % tef(1:npft) = tef(:) + my_nml % tleaf_of(1:npft) = tleaf_of(:) + my_nml % tlow(1:npft) = tlow(:) + my_nml % tupp(1:npft) = tupp(:) + my_nml % vint(1:npft) = vint(:) + my_nml % vsl(1:npft) = vsl(:) + my_nml % sug_yg(1:npft) = sug_yg(:) + my_nml % z0v(1:npft) = z0v(:) + my_nml % sox_a(1:npft) = sox_a(:) + my_nml % sox_p50(1:npft) = sox_p50(:) + my_nml % sox_rp_min(1:npft) = sox_rp_min(:) +END IF + +CALL mpl_bcast(my_nml,1,mpl_nml_type,0,my_comm,icode) + +IF (mype /= 0) THEN + a_wl(:) = my_nml % a_wl(1:npft) + a_ws(:) = my_nml % a_ws(1:npft) + act_jmax(:) = my_nml % act_jmax(1:npft) + act_vcmax(:) = my_nml % act_vcmax(1:npft) + aef(:) = my_nml % aef(1:npft) + albsnc_max(:) = my_nml % albsnc_max(1:npft) + albsnc_min(:) = my_nml % albsnc_min(1:npft) + albsnf_max(:) = my_nml % albsnf_max(1:npft) + albsnf_maxl(:) = my_nml % albsnf_maxl(1:npft) + albsnf_maxu(:) = my_nml % albsnf_maxu(1:npft) + alpha(:) = my_nml % alpha(1:npft) + alpha_elec(:) = my_nml % alpha_elec(1:npft) + alnir(:) = my_nml % alnir(1:npft) + alnirl(:) = my_nml % alnirl(1:npft) + alniru(:) = my_nml % alniru(1:npft) + alpar(:) = my_nml % alpar(1:npft) + alparl(:) = my_nml % alparl(1:npft) + alparu(:) = my_nml % alparu(1:npft) + avg_ba(:) = my_nml % avg_ba(1:npft) + b_wl(:) = my_nml % b_wl(1:npft) + c3(:) = my_nml % c3(1:npft) + can_struct_a(:)= my_nml % can_struct_a(1:npft) + catch0(:) = my_nml % catch0(1:npft) + ccleaf_min(:) = my_nml % ccleaf_min(1:npft) + ccleaf_max(:) = my_nml % ccleaf_max(1:npft) + ccwood_min(:) = my_nml % ccwood_min(1:npft) + ccwood_max(:) = my_nml % ccwood_max(1:npft) + ci_st(:) = my_nml % ci_st(1:npft) + dcatch_dlai(:) = my_nml % dcatch_dlai(1:npft) + deact_jmax(:) = my_nml % deact_jmax(1:npft) + deact_vcmax(:) = my_nml % deact_vcmax(1:npft) + dfp_dcuo(:) = my_nml % dfp_dcuo(1:npft) + dgl_dm(:) = my_nml % dgl_dm(1:npft) + dgl_dt(:) = my_nml % dgl_dt(1:npft) + dqcrit(:) = my_nml % dqcrit(1:npft) + ds_jmax(:) = my_nml % ds_jmax(1:npft) + ds_vcmax(:) = my_nml % ds_vcmax(1:npft) + dust_veg_scj(:)= my_nml % dust_veg_scj(1:npft) + dz0v_dh(:) = my_nml % dz0v_dh(1:npft) + emis_pft(:) = my_nml % emis_pft(1:npft) + eta_sl(:) = my_nml % eta_sl(1:npft) + f0(:) = my_nml % f0(1:npft) + fd(:) = my_nml % fd(1:npft) + fef_bc(:) = my_nml % fef_bc(1:npft) + fef_ch4(:) = my_nml % fef_ch4(1:npft) + fef_co(:) = my_nml % fef_co(1:npft) + fef_co2(:) = my_nml % fef_co2(1:npft) + fef_nox(:) = my_nml % fef_nox(1:npft) + fef_oc(:) = my_nml % fef_oc(1:npft) + fef_so2(:) = my_nml % fef_so2(1:npft) + fef_c2h4(:) = my_nml % fef_c2h4(1:npft) + fef_c2h6(:) = my_nml % fef_c2h6(1:npft) + fef_c3h8(:) = my_nml % fef_c3h8(1:npft) + fef_hcho(:) = my_nml % fef_hcho(1:npft) + fef_mecho(:) = my_nml % fef_mecho(1:npft) + fef_nh3(:) = my_nml % fef_nh3(1:npft) + fef_dms(:) = my_nml % fef_dms(1:npft) + fire_mort(:) = my_nml % fire_mort(1:npft) + fl_o3_ct(:) = my_nml % fl_o3_ct(1:npft) + fsmc_of(:) = my_nml % fsmc_of(1:npft) + fsmc_p0(:) = my_nml % fsmc_p0(1:npft) + sug_g0(:) = my_nml % sug_g0(1:npft) + g1_stomata(:) = my_nml % g1_stomata(1:npft) + g_leaf_0(:) = my_nml % g_leaf_0(1:npft) + glmin(:) = my_nml % glmin(1:npft) + gpp_st(:) = my_nml % gpp_st(1:npft) + sug_grec(:) = my_nml % sug_grec(1:npft) + gsoil_f(:) = my_nml % gsoil_f(1:npft) + hw_sw(:) = my_nml % hw_sw(1:npft) + ief(:) = my_nml % ief(1:npft) + infil_f(:) = my_nml % infil_f(1:npft) + jv25_ratio(:) = my_nml % jv25_ratio(1:npft) + kext(:) = my_nml % kext(1:npft) + kn(:) = my_nml % kn(1:npft) + knl(:) = my_nml % knl(1:npft) + kpar(:) = my_nml % kpar(1:npft) + lai_alb_lim(:) = my_nml % lai_alb_lim(1:npft) + lma(:) = my_nml % lma(1:npft) + mef(:) = my_nml % mef(1:npft) + neff(:) = my_nml % neff(1:npft) + nl0(:) = my_nml % nl0(1:npft) + nmass(:) = my_nml % nmass(1:npft) + nr(:) = my_nml % nr(1:npft) + nr_nl(:) = my_nml % nr_nl(1:npft) + ns_nl(:) = my_nml % ns_nl(1:npft) + nsw(:) = my_nml % nsw(1:npft) + omega(:) = my_nml % omega(1:npft) + omegal(:) = my_nml % omegal(1:npft) + omegau(:) = my_nml % omegau(1:npft) + omnir(:) = my_nml % omnir(1:npft) + omnirl(:) = my_nml % omnirl(1:npft) + omniru(:) = my_nml % omniru(1:npft) + orient(:) = my_nml % orient(1:npft) + q10_leaf(:) = my_nml % q10_leaf(1:npft) + r_grow(:) = my_nml % r_grow(1:npft) + rootd_ft(:) = my_nml % rootd_ft(1:npft) + sigl(:) = my_nml % sigl(1:npft) + tef(:) = my_nml % tef(1:npft) + tleaf_of(:) = my_nml % tleaf_of(1:npft) + tlow(:) = my_nml % tlow(1:npft) + tupp(:) = my_nml % tupp(1:npft) + vint(:) = my_nml % vint(1:npft) + vsl(:) = my_nml % vsl(1:npft) + sug_yg(:) = my_nml % sug_yg(1:npft) + z0v(:) = my_nml % z0v(1:npft) + sox_a(:) = my_nml % sox_a(1:npft) + sox_p50(:) = my_nml % sox_p50(1:npft) + sox_rp_min(:) = my_nml % sox_rp_min(1:npft) +END IF + +CALL mpl_type_free(mpl_nml_type,icode) + +IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) +RETURN +END SUBROUTINE read_nml_jules_pftparm_bcast +#endif + END MODULE pftparm