From 42b595b6479a5559d522f153ad94e6d9a86a2de2 Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Thu, 20 Aug 2026 16:00:22 +0100 Subject: [PATCH 01/31] added all the extra variables definitions and passed to most/all routines --- src/science/surface/fcdch.F90 | 12 +++++-- .../surface/jules_land_sf_explicit_jls.F90 | 32 +++++++++++++++++-- .../surface/jules_ssi_sf_explicit_jls.F90 | 17 +++++++--- src/science/surface/physiol_jls_mod.F90 | 26 ++++++++++++++- src/science/surface/sf_evap_jls.F90 | 3 ++ src/science/surface/sf_flux_mod.F90 | 15 ++++++++- src/science/surface/sf_resist_jls.F90 | 8 ++++- 7 files changed, 100 insertions(+), 13 deletions(-) diff --git a/src/science/surface/fcdch.F90 b/src/science/surface/fcdch.F90 index 9f460f7f..9549618c 100644 --- a/src/science/surface/fcdch.F90 +++ b/src/science/surface/fcdch.F90 @@ -33,10 +33,10 @@ SUBROUTINE fcdch ( & wind_profile_factor,ddmfx,i_surfalg,charnock, & charnock_w,l_vegdrag,canht,lai, & nsnow,n,l_mo_buoyancy_calc,cansnowtile,l_soil_point, & - canopy,catch,flake,gc,snowdep,snow,canhc, & + canopy,catch,flake,gc,gc_irr_surft,frac_irr_surft,snowdep,snow,canhc, & dzsurf,qstar,q_elev,radnet,snowdepth,timestep, & t_elev,tsurf,tstar,vfrac,emis,emis_soil, & - anthrop_heat,scaling_urban,alpha1,hcons,ashtf, & + anthrop_heat,scaling_urban,alpha1,hcons,ashtf,ashtf_irr,ashtf_nir, & rhostar,bq_1,bt_1, & cdv,chv,cdv_std,v_s,v_s_std,recip_l_mo,u_s_std & ) @@ -155,6 +155,8 @@ SUBROUTINE fcdch ( & ,gc(points) & ! IN Interactive canopy conductance ! ! to evaporation (m/s) +,gc_irr_surft(points) & +,frac_irr_surft(points) & ,snowdep(points) & ! IN Snow depth (m) ,snow(points) & @@ -207,6 +209,8 @@ SUBROUTINE fcdch ( & ! IN Soil thermal conductivity (W/m/K). ,ashtf(points) & ! IN Adjusted SEB coefficient +,ashtf_irr(points) & +,ashtf_nir(points) & ,rhostar(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & ! IN Surface air density ,bq_1(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & @@ -588,6 +592,7 @@ SUBROUTINE fcdch ( & CALL sf_resist ( & points,surft_pts,pts_index,surft_index,cansnowtile, & canopy,catch,chv_dim,dq,epdt,flake,gc,gc_stom_surft, & + gc_irr_surft,frac_irr_surft, & snowdep,snow,vshr,tstar,fracaero_t,fracaero_s, & resfs,resft,resfs_stom,.FALSE.,.FALSE.) @@ -620,6 +625,7 @@ SUBROUTINE fcdch ( & points,surft_pts, & pts_index,surft_index, & nsnow,n,canhc,dzsurf,hcons,ashtf, & + ashtf_irr,ashtf_nir,frac_irr_surft, & qstemp,q_elev, & radnet,resft,fracaero_s(:),rhokh,l_soil_point, & snowdepth,timestep,t_elev,tsurf, & @@ -1009,6 +1015,7 @@ SUBROUTINE fcdch ( & CALL sf_resist ( & points,surft_pts,pts_index,surft_index,cansnowtile, & canopy,catch,chv_dim,dq,epdt,flake,gc,gc_stom_surft, & + gc_irr_surft,frac_irr_surft, & snowdep,snow,vshr,tstar,fracaero_t,fracaero_s, & resfs,resft,resfs_stom,.FALSE.,.FALSE.) @@ -1041,6 +1048,7 @@ SUBROUTINE fcdch ( & points,surft_pts, & pts_index,surft_index, & nsnow,n,canhc,dzsurf,hcons,ashtf, & + ashtf,ashtf,frac_irr_surft, & qstemp,q_elev, & radnet,resft,fracaero_s(:),rhokh,l_soil_point, & snowdepth,timestep,t_elev,tsurf, & diff --git a/src/science/surface/jules_land_sf_explicit_jls.F90 b/src/science/surface/jules_land_sf_explicit_jls.F90 index 6cf33e11..0191bfb6 100644 --- a/src/science/surface/jules_land_sf_explicit_jls.F90 +++ b/src/science/surface/jules_land_sf_explicit_jls.F90 @@ -93,6 +93,7 @@ SUBROUTINE jules_land_sf_explicit ( & resfs_irr_surft, & !crop_vars_mod (OUT) gs_irr_surft, smc_irr_soilt, wt_ext_irr_surft, gc_irr_surft, & + gs_nir_surft, gc_nir_surft, & !p_s_parms (IN) bexp_soilt, sathh_soilt, v_close_pft, v_open_pft, & !urban_param (IN) @@ -806,12 +807,23 @@ SUBROUTINE jules_land_sf_explicit ( & ! Areal heat capacity of snow (J/K/m2) ,ksnow(land_pts,nsmax) & ! Thermal conductivity of snow (W/m/K) +,ashtf_irr_surft(land_pts,nsurft) & +,ashtf_nir_surft(land_pts,nsurft) & +,hcons_irr_surf(land_pts,nsurft) & +,hcons_nir_surf(land_pts,nsurft) & +,hcons_irr_soilt(land_pts,nsoilt) & +,hcons_nir_soilt(land_pts,nsoilt) & +,sthu1_nir_soilt(land_pts) & +,sthf1_nir_soilt(land_pts) & +,sthf1_irr_soilt(land_pts) & ,hcons_snow(land_pts,nsurft) & ! Snow thermal conductivity ,resp_frac(land_pts,dim_cslayer) & ! respired fraction of RESP_S ,gc_stom_surft(land_pts,nsurft) & ! canopy conductance +,gs_nir_surft(land_pts,nsurft) & +,gc_nir_surft(land_pts,nsurft) & ,sice_surft_tmp(land_pts,nsmax) & ! Ice content of snow layers (kg/m2) ,sliq_surft_tmp(land_pts,nsmax) & @@ -1247,6 +1259,7 @@ SUBROUTINE jules_land_sf_explicit ( & rootc_cpft, sthu_irr_soilt, frac_irr_soilt, frac_irr_surft, dvi_cpft, & !crop_vars_mod (OUT) gs_irr_surft, smc_irr_soilt, wt_ext_irr_surft, gc_irr_surft, & + gs_nir_surft, gc_nir_surft, & !p_s_parms (IN) bexp_soilt, sathh_soilt, v_close_pft, v_open_pft, & !ancil_info @@ -2023,9 +2036,13 @@ SUBROUTINE jules_land_sf_explicit ( & ! Set up surface soil condictivity ashtf_surft(l,n) = 2.0 * hcons_surf(l,n) / dzsurf(l,n) + ashtf_nir_surft(l,n) = ashtf_surft(l,n) + ashtf_irr_surft(l,n) = ashtf_surft(l,n) ! Except when n == urban_canyon when MORUSES is used ! scaling_urban(l) = 1.0 ashtf_surft(l,n) = ashtf_surft(l,n) * scaling_urban(l,n) + ashtf_nir_surft(l,n) = ashtf_surft(l,n) + ashtf_irr_surft(l,n) = ashtf_surft(l,n) ! Adjust surface soil condictivity for snow IF (snowdepth_surft(l,n) > 0.0 .AND. l_soil_point(l) & @@ -2247,7 +2264,8 @@ SUBROUTINE jules_land_sf_explicit ( & CALL sf_resist ( & land_pts,surft_pts(n),land_index,surft_index(:,n),cansnowtile(n), & canopy(:,n),catch(:,n),chn(:,n),dq(:,n),epdt,flake(:,n),gc_surft(:,n), & - gc_stom_surft(:,n),snowdep_surft(:,n),snow_surft(:,n),vshr_land, & + gc_stom_surft(:,n),gc_irr_surft(:,n),frac_irr_surft(:,n), & + snowdep_surft(:,n),snow_surft(:,n),vshr_land, & tstar_surft(:,n),fracaero_t(:,n),fracaero_s(:,n),resfs(:,n),resft(:,n), & sf_diag%resfs_stom(:,n_diag),sf_diag%l_et_stom,sf_diag%l_et_stom_surft) @@ -2306,11 +2324,13 @@ SUBROUTINE jules_land_sf_explicit ( & l_vegdrag_surft(n),canht_pft(:,n_veg),lai_pft(:,n_veg), & nsnow_surft(:,n),n,l_mo_buoyancy_calc,cansnowtile(n),l_soil_point, & canopy(:,n),catch(:,n),flake(:,n),gc_surft(:,n), & + gc_irr_surft(:,n),frac_irr_surft(:,n), & snowdep_surft(:,n),snow_surft(:,n),canhc_surf(:,n), & dzsurf(:,n),qstar_surft(:,n),q_elev(:,n),radnet_surft(:,n), & snowdepth_surft(:,n),timestep,t_elev(:,n),tsurf(:,n),tstar_surft(:,n), & vfrac_surft(:,n),emis_surft(:,n),emis_soil,anthrop_heat_surft(:,n), & scaling_urban(:,n),alpha1(:,n),hcons_surf(:,n),ashtf_surft(:,n), & + ashtf_irr_surft(:,n),ashtf_nir_surft(:,n), & rhostar,bq_1,bt_1, & cd_surft(:,n),ch_surft(:,n),cd_std(:,n), & v_s_surft(:,n),v_s_std(:,n),recip_l_mo_surft(:,n), & @@ -2409,11 +2429,13 @@ SUBROUTINE jules_land_sf_explicit ( & l_vegdrag_active_here,array_zero,array_zero, & nsnow_surft(:,n),n,.FALSE.,cansnowtile(n),l_soil_point, & canopy(:,n),catch(:,n),flake(:,n),gc_surft(:,n), & + gc_irr_surft(:,n),frac_irr_surft(:,n), & snowdep_surft(:,n),snow_surft(:,n),canhc_surf(:,n), & dzsurf(:,n),qstar_surft(:,n),q_elev(:,n),radnet_surft(:,n), & snowdepth_surft(:,n),timestep,t_elev(:,n),tsurf(:,n),tstar_surft(:,n), & vfrac_surft(:,n),emis_surft(:,n),emis_soil,anthrop_heat_surft(:,n), & scaling_urban(:,n),alpha1(:,n),hcons_surf(:,n),ashtf_surft(:,n), & + ashtf_irr_surft(:,n),ashtf_nir_surft(:,n), & rhostar,bq_1,bt_1, & ! Following tiled outputs (except v_s_std_soil and u_s_iter_soil) ! are dummy variables not needed from this call @@ -2475,11 +2497,13 @@ SUBROUTINE jules_land_sf_explicit ( & l_vegdrag_active_here,array_zero,array_zero, & nsnow_surft(:,n),n,.FALSE.,cansnowtile(n),l_soil_point, & canopy(:,n),catch(:,n),flake(:,n),gc_surft(:,n), & + gc_irr_surft(:,n),frac_irr_surft(:,n), & snowdep_surft(:,n),snow_surft(:,n),canhc_surf(:,n), & dzsurf(:,n),qstar_surft(:,n),q_elev(:,n),radnet_surft(:,n), & snowdepth_surft(:,n),timestep,t_elev(:,n),tsurf(:,n),tstar_surft(:,n), & vfrac_surft(:,n),emis_surft(:,n),emis_soil,anthrop_heat_surft(:,n), & scaling_urban(:,n),alpha1(:,n),hcons_surf(:,n),ashtf_surft(:,n), & + ashtf_irr_surft(:,n),ashtf_nir_surft(:,n), & rhostar,bq_1,bt_1, & ! Following tiled outputs (except cd_std_classic and ch_surft_classic) ! are dummy variables not needed from this call @@ -2601,7 +2625,8 @@ SUBROUTINE jules_land_sf_explicit ( & CALL sf_resist ( & land_pts,surft_pts(n),land_index,surft_index(:,n),cansnowtile(n), & canopy(:,n),catch(:,n),ch_surft(:,n),dq(:,n),epdt,flake(:,n),gc_surft(:,n), & - gc_stom_surft(:,n),snowdep_surft(:,n),snow_surft(:,n),vshr_land, & + gc_stom_surft(:,n),gc_irr_surft(:,n),frac_irr_surft(:,n), & + snowdep_surft(:,n),snow_surft(:,n),vshr_land, & tstar_surft(:,n),fracaero_t(:,n),fracaero_s(:,n),resfs(:,n),resft(:,n), & sf_diag%resfs_stom(:,n_diag),sf_diag%l_et_stom,sf_diag%l_et_stom_surft) @@ -2609,7 +2634,8 @@ SUBROUTINE jules_land_sf_explicit ( & land_pts,surft_pts(n), & land_index,surft_index(:,n), & nsnow_surft(:,n),n,canhc_surf(:,n),dzsurf(:,n),hcons_surf(:,n), & - ashtf_surft(:,n),qstar_surft(:,n),q_elev(:,n), & + ashtf_surft(:,n),ashtf_irr_surft(:,n),ashtf_nir_surft(:,n), & + frac_irr_surft(:,n),qstar_surft(:,n),q_elev(:,n), & radnet_surft(:,n),resft(:,n),fracaero_s(:,n),rhokh_surft(:,n),l_soil_point, & snowdepth_surft(:,n),timestep,t_elev(:,n),tsurf(:,n), & tstar_surft(:,n),vfrac_surft(:,n),rhokh_can(:,n),z0h_surft(:,n), & diff --git a/src/science/surface/jules_ssi_sf_explicit_jls.F90 b/src/science/surface/jules_ssi_sf_explicit_jls.F90 index 0c536dbb..3bd03add 100644 --- a/src/science/surface/jules_ssi_sf_explicit_jls.F90 +++ b/src/science/surface/jules_ssi_sf_explicit_jls.F90 @@ -1436,11 +1436,11 @@ SUBROUTINE jules_ssi_sf_explicit ( & l_vegdrag_ssi,array_zero,array_zero, & array_zero_int,0,.FALSE.,.FALSE.,array_false, & array_zero,array_zero,array_zero,array_zero, & - array_zero,array_zero,canhc_sea, & + array_zero,array_zero,array_zero,array_zero,canhc_sea, & dzssi,qstar_sea,qw_1,radnet_sea, & array_zero,timestep,tl_1,tstar_sea,tstar_sea, & array_zero,array_emis,array_one,array_zero, & - array_one,alpha1_sea,hcons_sea,ashtf_sea, & + array_one,alpha1_sea,hcons_sea,ashtf_sea,ashtf_sea,ashtf_sea, & rhostar,bq_1,bt_1, & cd_sea,ch_sea,cd_std_sea, & v_s_sea,v_s_std_sea,recip_l_mo_sea, & @@ -1461,11 +1461,12 @@ SUBROUTINE jules_ssi_sf_explicit ( & l_vegdrag_ssi,array_zero,array_zero, & array_zero_int,0,.FALSE.,.FALSE.,array_false, & array_zero,array_zero,array_zero,array_zero, & - array_zero,array_zero,array_zero, & + array_zero,array_zero,array_zero,array_zero,array_zero, & dzdummy,qstar_ice_cat(:,:,n),qw_1,radnet_sice(:,:,n), & array_zero,timestep,tl_1,ti_cat(:,:,n),tstar_sice_cat(:,:,n), & array_zero,array_emis,array_one,array_zero, & array_one,alpha1_sice(:,:,n),k_sice(:,:,n),ashtf(:,:,n), & + ashtf(:,:,n),ashtf(:,:,n), & rhostar,bq_1,bt_1, & cd_ice(:,:,n),ch_ice(:,:,n),cd_std_ice(:,n), & v_s_ice(:,:,n),v_s_std_ice(:,n),recip_l_mo_ice(:,:,n), & @@ -1484,11 +1485,12 @@ SUBROUTINE jules_ssi_sf_explicit ( & l_vegdrag_ssi,array_zero,array_zero, & array_zero_int,0,.FALSE.,.FALSE.,array_false, & array_zero,array_zero,array_zero,array_zero, & - array_zero,array_zero,array_zero, & + array_zero,array_zero,array_zero,array_zero,array_zero, & dzdummy,qstar_ice_cat(:,:,1),qw_1,radnet_sice(:,:,1), & array_zero,timestep,tl_1,ti_cat(:,:,1),tstar_sice_cat(:,:,1), & array_zero,array_emis,array_one,array_zero, & array_one,alpha1_sice(:,:,1),k_sice(:,:,1),ashtf(:,:,1), & + ashtf(:,:,1),ashtf(:,:,1), & rhostar,bq_1,bt_1, & cd_ice(:,:,1),ch_ice(:,:,1),cd_std_ice(:,1), & v_s_ice(:,:,1),v_s_std_ice(:,1),recip_l_mo_ice(:,:,1), & @@ -1527,11 +1529,12 @@ SUBROUTINE jules_ssi_sf_explicit ( & l_vegdrag_ssi,array_zero,array_zero, & array_zero_int,0,.FALSE.,.FALSE.,array_false, & array_zero,array_zero,array_zero,array_zero, & - array_zero,array_zero,array_zero, & + array_zero,array_zero,array_zero,array_zero,array_zero, & dzdummy,qstar_ice_cat(:,:,1),qw_1,radnet_sice(:,:,1), & array_zero,timestep,tl_1,ti_cat(:,:,1),tstar_sice_cat(:,:,1), & array_zero,array_emis,array_one,array_zero, & array_one,alpha1_sice(:,:,1),k_sice(:,:,1),ashtf(:,:,1), & + ashtf(:,:,1),ashtf(:,:,1), & rhostar,bq_1,bt_1, & cd_miz,ch_miz,cd_std_miz, & v_s_miz,v_s_std_miz,recip_l_mo_miz, & @@ -1776,6 +1779,7 @@ SUBROUTINE jules_ssi_sf_explicit ( & ssi_pts,sea_pts, & ssi_index,sea_index, & array_zero_int,0,canhc_sea,dzssi,hcons_sea,ashtf_sea, & + ashtf_sea,ashtf_sea,array_zero, & qstar_sea,qw_1,radnet_sea, & array_one * beta_evap,array_zero,rhokh_sea,array_false,array_zero, & timestep,tl_1,tstar_sea,tstar_sea, & @@ -1821,6 +1825,7 @@ SUBROUTINE jules_ssi_sf_explicit ( & ssi_pts,sea_pts, & ssi_index,sea_index, & array_zero_int,0,canhc_sea,dzssi,hcons_sea,ashtf_sea, & + ashtf_sea,ashtf_sea,array_zero, & qstar_sea,qw_1,radnet_sea, & array_one * beta_evap,array_zero,rhokh_1_sice,array_false,array_zero, & timestep,tl_1,tstar_sea,tstar_sea, & @@ -1916,6 +1921,7 @@ SUBROUTINE jules_ssi_sf_explicit ( & ssi_pts,sice_pts_ncat(n), & ssi_index,sice_index_ncat(:,n), & array_zero_int,0,array_zero,dzdummy,k_sice(:,:,n),ashtf(:,:,n), & + ashtf(:,:,n),ashtf(:,:,n),array_zero, & qstar_ice_cat(:,:,n),qw_1,radnet_sice(:,:,n),array_one,array_one, & rhokh_1_sice_ncats(:,:,n),array_false,array_zero, & timestep,tl_1,ti_cat(:,:,n), & @@ -1951,6 +1957,7 @@ SUBROUTINE jules_ssi_sf_explicit ( & ssi_pts,sice_pts_ncat(1), & ssi_index,sice_index_ncat(:,1), & array_zero_int,0,array_zero,dzdummy,k_sice(:,:,1),ashtf(:,:,1), & + ashtf(:,:,1),ashtf(:,:,1),array_zero, & qstar_ice,qw_1,radnet_sice(:,:,1),array_one,array_one, & rhokh_1_sice_ncats(:,:,1),array_false,array_zero, & timestep,tl_1,ti,tstar_sice_cat(:,:,1), & diff --git a/src/science/surface/physiol_jls_mod.F90 b/src/science/surface/physiol_jls_mod.F90 index 00caf8cf..8cb3427b 100644 --- a/src/science/surface/physiol_jls_mod.F90 +++ b/src/science/surface/physiol_jls_mod.F90 @@ -54,6 +54,7 @@ SUBROUTINE physiol ( & rootc_cpft, sthu_irr_soilt, frac_irr_soilt, frac_irr_surft, dvi_cpft, & !crop_vars_mod (OUT) gs_irr_surft, smc_irr_soilt, wt_ext_irr_surft, gc_irr_surft, & + gs_nir_surft, gc_nir_surft, & !p_s_parms (IN) bexp_soilt, sathh_soilt, v_close_pft, v_open_pft, & !ancil_info (IN) @@ -358,6 +359,8 @@ SUBROUTINE physiol ( & REAL(KIND=real_jlslsm), INTENT(OUT) :: & wt_ext_irr_surft(land_pts,sm_levels,nsurft) REAL(KIND=real_jlslsm), INTENT(OUT) :: gc_irr_surft(land_pts,nsurft) +REAL(KIND=real_jlslsm), INTENT(OUT) :: gs_nir_surft(land_pts,nsurft) +REAL(KIND=real_jlslsm), INTENT(OUT) :: gc_nir_surft(land_pts,nsurft) !ancil_info (IN) LOGICAL, INTENT(IN) :: l_soil_point(land_pts) @@ -445,22 +448,39 @@ SUBROUTINE physiol ( & ! was calculated from psi_close for that ! soil tile and pft. REAL(KIND=real_jlslsm) :: & -fsmc_irr(land_pts,npft) & +fsmc_nir(land_pts,npft) & +! ! WORK Soil moisture availability +! ! factor over non-irrigated fraction. +,fsmc_irr(land_pts,npft) & ! ! WORK Soil moisture availability ! ! factor over irrigated fraction. ,sthu_nir_soilt(land_pts,nsoilt,sm_levels) & ,sthu_surft(land_pts,nsoilt,sm_levels) & +,wt_ext_nir_soilt(land_pts,nsoilt,sm_levels) & +! ! WORK Fraction of transpiration over +! ! non-irrigated fraction extracted +! ! from each soil layer. ,wt_ext_irr_soilt(land_pts,nsoilt,sm_levels) & ! ! WORK Fraction of transpiration over ! ! irrigated fraction extracted ! ! from each soil layer. +,wt_ext_nir_type(land_pts,sm_levels,ntype) & +! ! WORK Fraction of transpiration over +! ! non-irrigated area extracted from +! ! each soil layer (kg/m2/s). ,wt_ext_irr_type(land_pts,sm_levels,ntype) & ! ! WORK Fraction of transpiration over ! ! irrigated area extracted from ! ! each soil layer (kg/m2/s). +,smc_nir_soilt(land_pts,nsoilt) & +,gs_nir_type(land_pts,ntype) & +! ! WORK Conductance for non-irrigated surface types ,gs_irr_type(land_pts,ntype) & ! ! WORK Conductance for irrigated surface types +,gsoil_nir_soilt(land_pts,nsoilt) & +! ! WORK Bare soil conductance over +! ! non-irrigated fraction. ,gsoil_irr_soilt(land_pts,nsoilt) & ! ! WORK Bare soil conductance over ! ! irrigated fraction. @@ -518,6 +538,8 @@ SUBROUTINE physiol ( & ! WORK Fractional canopy coverage. ,vf_type(land_pts,ntype) & ! WORK VFRAC for surface types. +,sthu_nir_soilt(land_pts,nsoilt,sm_levels) & +,wt_ext_type_tmp(land_pts,sm_levels,ntype) & ,wt_ext_type(land_pts,sm_levels,ntype) & ! ! WORK WT_EXT for surface types. ,wt_ext_soilt(land_pts,nsoilt,sm_levels) & @@ -525,6 +547,8 @@ SUBROUTINE physiol ( & ,fsoil(land_pts,npft) & ! WORK Fraction of ground below canopy ! ! contributing to evaporation. +,fsoil_irr_tot(land_pts) & +,fsoil_nir_tot(land_pts) & ,fsoil_tot(land_pts) & ! WORK Total fraction of soil ! ! contributing to evaporation diff --git a/src/science/surface/sf_evap_jls.F90 b/src/science/surface/sf_evap_jls.F90 index e7c06103..5eb20ec3 100644 --- a/src/science/surface/sf_evap_jls.F90 +++ b/src/science/surface/sf_evap_jls.F90 @@ -188,6 +188,9 @@ SUBROUTINE sf_evap ( & ! ! WORK Evapotranspiration from soil ! ! moisture through non-irrigated ! ! fraction of land tiles (kg/m2/s). +,ext_nir_soilt(land_pts,nsoilt,sm_levels) & +,wt_ext_nir_surft(land_pts,sm_levels,nsurft) & +,resfs_nir_surft(land_pts,nsurft) & ,smc_nir_soilt(land_pts,nsoilt) ! ! WORK Available soil moisture (kg/m2). ! ! fraction (kg/m2/s). diff --git a/src/science/surface/sf_flux_mod.F90 b/src/science/surface/sf_flux_mod.F90 index b41ae51f..7ca3e33b 100644 --- a/src/science/surface/sf_flux_mod.F90 +++ b/src/science/surface/sf_flux_mod.F90 @@ -14,7 +14,8 @@ MODULE sf_flux_mod CONTAINS SUBROUTINE sf_flux ( & points,surft_pts,pts_index,surft_index, & - nsnow,n,canhc,dzsurf,hcons,ashtf,qstar,q_elev,radnet,resft,fracs, & + nsnow,n,canhc,dzsurf,hcons,ashtff,ashtf_irr,ashtf_nir,frac_irr, & + qstar,q_elev,radnet,resft,fracs, & rhokh_1,l_soil_point,snowdepth,timestep, & t_elev,ts1_elev,tstar,vfrac,rhokh_can, & z0h,z0m_eff,zdt,z1_tq,lh0,emis_surft,emis_soil, & @@ -35,6 +36,7 @@ SUBROUTINE sf_flux ( & USE jules_surface_mod, ONLY: l_aggregate, l_epot_corr USE jules_science_fixes_mod, ONLY: l_fix_moruses_roof_rad_coupling, & l_fix_neg_snow +USE jules_irrig_mod, ONLY: l_irrig_dmd USE parkind1, ONLY: jprb, jpim USE yomhook, ONLY: lhook, dr_hook @@ -70,6 +72,9 @@ SUBROUTINE sf_flux ( & ,ashtf(points) & ! IN Coefficient to calculate surface ! heat flux into soil (W/m2/K). +,ashtf_irr(points) & +,ashtf_nir(points) & +,frac_irr(points) & ,qstar(points) & ! IN Surface qsat. ,q_elev(points) & @@ -162,6 +167,14 @@ SUBROUTINE sf_flux ( & dtstar_pot(points) & ! Change in TSTAR over timestep that is ! appropriate for the potential evaporation +,ddtstar(points) & +,dtstar_nir(points) & +,dtstar_irr(points) & +,dtstar_new(points) & +,ashtf_prime_nir(points) & +,ashtf_prime_irr(points) & +,surf_ht_flux_nir & +,surf_ht_flux_irr & ,surf_ht_flux ! Flux of heat from surface to sub-surface ! Scalars diff --git a/src/science/surface/sf_resist_jls.F90 b/src/science/surface/sf_resist_jls.F90 index 1ff6b897..16701a72 100644 --- a/src/science/surface/sf_resist_jls.F90 +++ b/src/science/surface/sf_resist_jls.F90 @@ -19,7 +19,8 @@ MODULE sf_resist_mod ! Arguments -------------------------------------------------------- SUBROUTINE sf_resist ( & land_pts,surft_pts,land_index,surft_index,cansnowtile, & - canopy,catch,ch,dq,epdt,flake,gc,gc_stom_surft,snowdep_surft,snow_surft, & + canopy,catch,ch,dq,epdt,flake,gc,gc_stom_surft,gc_irr_surft,frac_irr_surft, & + snowdep_surft,snow_surft, & vshr,tstar,fracaero_t, fracaero_s,resfs,resft, & resfs_stom,l_et_stom,l_et_stom_surft) @@ -31,6 +32,7 @@ SUBROUTINE sf_resist ( & USE water_constants_mod, ONLY: tm, rho_ice USE jules_surface_mod, ONLY: l_aggregate USE jules_vegetation_mod, ONLY: can_model +USE jules_irrig_mod, ONLY: l_irrig_dmd USE parkind1, ONLY: jprb, jpim USE yomhook, ONLY: lhook, dr_hook IMPLICIT NONE @@ -74,6 +76,9 @@ SUBROUTINE sf_resist ( & ,gc(land_pts) & ! IN Interactive canopy conductance ! ! to evaporation (m/s) +,frac_irr_surft(land_pts) & +,gc_irr_surft(land_pts) & + ! IN canopy conductance over irrigated frac ,gc_stom_surft(land_pts) & ! IN canopy conductance (excluding soil) (m/s) ,snowdep_surft(land_pts) & @@ -123,6 +128,7 @@ SUBROUTINE sf_resist ( & INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0 INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1 REAL(KIND=jprb) :: zhook_handle +REAL(KIND=real_jlslsm) :: gc_nir_surft(land_pts) CHARACTER(LEN=*), PARAMETER :: RoutineName='SF_RESIST' From 34f29ccc74fa4270bcfc31d2aad5772957d7e287 Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Thu, 20 Aug 2026 16:23:34 +0100 Subject: [PATCH 02/31] fix compiler bug --- src/science/surface/physiol_jls_mod.F90 | 12 ++++++++---- src/science/surface/sf_flux_mod.F90 | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/science/surface/physiol_jls_mod.F90 b/src/science/surface/physiol_jls_mod.F90 index 8cb3427b..26c4a993 100644 --- a/src/science/surface/physiol_jls_mod.F90 +++ b/src/science/surface/physiol_jls_mod.F90 @@ -487,6 +487,7 @@ SUBROUTINE physiol ( & ,gsoil_under_canopy(land_pts) & ! ! WORK Bare soil conductance under ! ! canopy +,gsoil_nir_under_canopy(land_pts) & ,gsoil_irr_under_canopy(land_pts) ! ! WORK Bare soil conductance under ! ! canopy on irrigated fraction. @@ -538,7 +539,7 @@ SUBROUTINE physiol ( & ! WORK Fractional canopy coverage. ,vf_type(land_pts,ntype) & ! WORK VFRAC for surface types. -,sthu_nir_soilt(land_pts,nsoilt,sm_levels) & +!!!,sthu_nir_soilt(land_pts,nsoilt,sm_levels) & ,wt_ext_type_tmp(land_pts,sm_levels,ntype) & ,wt_ext_type(land_pts,sm_levels,ntype) & ! ! WORK WT_EXT for surface types. @@ -1091,7 +1092,8 @@ SUBROUTINE physiol ( & v_open,smvcst_soilt(:,m,:), & v_close, & bexp_soilt(:,m,:), sathh_soilt(:,m,:), & - wt_ext_type(:,:,n),fsmc_pft(:,n),psi_root_zone_pft(:,n)) + wt_ext_type(:,:,n),fsmc_pft(:,n), & + psi_root_zone_pft(:,n)) END IF IF (l_irrig_dmd) THEN @@ -1252,8 +1254,10 @@ SUBROUTINE physiol ( & CALL soil_evap (land_pts,sm_levels,surft_pts(n),surft_index(:,n), & irrig_tile(n),gsoil_under_canopy(:),lai_pft_soil_evap(:,n), & - gs_type(:,n), wt_ext_type(:,:,n), & - fsoil(:,n),gsoil_irr_under_canopy(:), & + gs_type(:,n), wt_ext_type(:,:,n),fsoil(:,n), & + frac_irr_surft(:,n),gsoil_nir_under_canopy(:), & + gs_nir_type(:,n),wt_ext_nir_type(:,:,n), & + gsoil_irr_under_canopy(:), & gs_irr_type(:,n),wt_ext_irr_type(:,:,n)) CALL leaf_lit (land_pts,surft_pts(n),surft_index(:,n) & diff --git a/src/science/surface/sf_flux_mod.F90 b/src/science/surface/sf_flux_mod.F90 index 7ca3e33b..7b422b5d 100644 --- a/src/science/surface/sf_flux_mod.F90 +++ b/src/science/surface/sf_flux_mod.F90 @@ -14,7 +14,7 @@ MODULE sf_flux_mod CONTAINS SUBROUTINE sf_flux ( & points,surft_pts,pts_index,surft_index, & - nsnow,n,canhc,dzsurf,hcons,ashtff,ashtf_irr,ashtf_nir,frac_irr, & + nsnow,n,canhc,dzsurf,hcons,ashtf,ashtf_irr,ashtf_nir,frac_irr, & qstar,q_elev,radnet,resft,fracs, & rhokh_1,l_soil_point,snowdepth,timestep, & t_elev,ts1_elev,tstar,vfrac,rhokh_can, & From ff478327333760d3605cea70d0254447c05f6038 Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Thu, 20 Aug 2026 17:00:58 +0100 Subject: [PATCH 03/31] more bug fixes --- .../surface/jules_land_sf_explicit_jls.F90 | 3 +-- src/science/surface/soil_evap_jls.F90 | 20 +++++++++++++++---- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/science/surface/jules_land_sf_explicit_jls.F90 b/src/science/surface/jules_land_sf_explicit_jls.F90 index 0191bfb6..ebddc924 100644 --- a/src/science/surface/jules_land_sf_explicit_jls.F90 +++ b/src/science/surface/jules_land_sf_explicit_jls.F90 @@ -93,7 +93,6 @@ SUBROUTINE jules_land_sf_explicit ( & resfs_irr_surft, & !crop_vars_mod (OUT) gs_irr_surft, smc_irr_soilt, wt_ext_irr_surft, gc_irr_surft, & - gs_nir_surft, gc_nir_surft, & !p_s_parms (IN) bexp_soilt, sathh_soilt, v_close_pft, v_open_pft, & !urban_param (IN) @@ -1976,7 +1975,7 @@ SUBROUTINE jules_land_sf_explicit ( & !$OMP n, m, ts1_lake_gb, hcon_lake, l_elev_land_ice, l_lice_point, & !$OMP tsurf_elev_surft, dzsoil_elev, l_lice_surft, hcondeep, & !$OMP l_moruses_storage, urban_roof, l_fix_moruses_roof_rad_coupling, & -!$OMP vfrac_surft, ashtf_surft, scaling_urban, l_soil_point) & +!$OMP vfrac_surft, ashtf_surft, ashtf_nir_surft, ashtf_irr_surft, &!$OMP scaling_urban, l_soil_point) & !$OMP SCHEDULE(STATIC) DO l = 1,land_pts j = (land_index(l) - 1) / t_i_length + 1 diff --git a/src/science/surface/soil_evap_jls.F90 b/src/science/surface/soil_evap_jls.F90 index 1d62399e..d1662ecb 100644 --- a/src/science/surface/soil_evap_jls.F90 +++ b/src/science/surface/soil_evap_jls.F90 @@ -21,8 +21,9 @@ MODULE soil_evap_mod ! ********************************************************************* SUBROUTINE soil_evap (npnts,nshyd,surft_pts,surft_index, & - irrig_tile,gsoil,lai,gs,wt_ext,fsoil & - ,gsoil_irr,gs_irr,wt_ext_irr & + irrig_tile,gsoil,lai,gs,wt_ext,fsoil,frac_irr, & + gsoil_nir,gs_nir,wt_ext_nir, & + gsoil_irr,gs_irr,wt_ext_irr & ) USE jules_irrig_mod, ONLY: l_irrig_dmd @@ -48,12 +49,16 @@ SUBROUTINE soil_evap (npnts,nshyd,surft_pts,surft_index, & REAL(KIND=real_jlslsm), INTENT(IN) :: & gsoil(npnts) & ! IN Soil surface conductance (m/s). +,frac_irr(npnts) & ,lai(npnts) ! IN Leaf area index. REAL(KIND=real_jlslsm), INTENT(IN) :: & -gsoil_irr(npnts) ! IN Soil surface conductance (m/s) over + gsoil_irr(npnts) & +! ! IN Soil surface conductance (m/s) over ! irrigated fraction. +,gsoil_nir(npnts) ! IN Soil surface conductance (m/s) over +! non-irrigated fraction. REAL(KIND=real_jlslsm), INTENT(IN OUT) :: & gs(npnts) & @@ -67,9 +72,16 @@ SUBROUTINE soil_evap (npnts,nshyd,surft_pts,surft_index, & ! ! INOUT Fraction of evapotranspiration ! ! extracted from each soil layer ! ! over irrigated area. -,gs_irr(npnts) +,wt_ext_nir(npnts,nshyd) & +! ! INOUT Fraction of evapotranspiration +! ! extracted from each soil layer +! ! over non-irrigated area. +,gs_irr(npnts) & ! ! INOUT Conductance for irrigated ! ! surface fraction. +,gs_nir(npnts) +! ! INOUT Conductance for non-irrigated +! ! surface fraction. REAL(KIND=real_jlslsm), INTENT(OUT) :: & fsoil(npnts) ! Fraction of ground below canopy From 91429bff492e7ff0d868f920068a1093eaeeaeb3 Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Thu, 20 Aug 2026 17:10:33 +0100 Subject: [PATCH 04/31] correcting one typo --- src/science/surface/jules_land_sf_explicit_jls.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/science/surface/jules_land_sf_explicit_jls.F90 b/src/science/surface/jules_land_sf_explicit_jls.F90 index ebddc924..41d5ebca 100644 --- a/src/science/surface/jules_land_sf_explicit_jls.F90 +++ b/src/science/surface/jules_land_sf_explicit_jls.F90 @@ -1975,7 +1975,7 @@ SUBROUTINE jules_land_sf_explicit ( & !$OMP n, m, ts1_lake_gb, hcon_lake, l_elev_land_ice, l_lice_point, & !$OMP tsurf_elev_surft, dzsoil_elev, l_lice_surft, hcondeep, & !$OMP l_moruses_storage, urban_roof, l_fix_moruses_roof_rad_coupling, & -!$OMP vfrac_surft, ashtf_surft, ashtf_nir_surft, ashtf_irr_surft, &!$OMP scaling_urban, l_soil_point) & +!$OMP vfrac_surft, ashtf_surft, ashtf_nir_surft, ashtf_irr_surft, &!$OMP scaling_urban, l_soil_point) !$OMP SCHEDULE(STATIC) DO l = 1,land_pts j = (land_index(l) - 1) / t_i_length + 1 From 26f839ec6ad1fd0cb64a2e16bd389fd46fd7302e Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Thu, 20 Aug 2026 17:37:47 +0100 Subject: [PATCH 05/31] OMP typo fixed --- src/science/surface/jules_land_sf_explicit_jls.F90 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/science/surface/jules_land_sf_explicit_jls.F90 b/src/science/surface/jules_land_sf_explicit_jls.F90 index 41d5ebca..ba4a755f 100644 --- a/src/science/surface/jules_land_sf_explicit_jls.F90 +++ b/src/science/surface/jules_land_sf_explicit_jls.F90 @@ -1975,7 +1975,8 @@ SUBROUTINE jules_land_sf_explicit ( & !$OMP n, m, ts1_lake_gb, hcon_lake, l_elev_land_ice, l_lice_point, & !$OMP tsurf_elev_surft, dzsoil_elev, l_lice_surft, hcondeep, & !$OMP l_moruses_storage, urban_roof, l_fix_moruses_roof_rad_coupling, & -!$OMP vfrac_surft, ashtf_surft, ashtf_nir_surft, ashtf_irr_surft, &!$OMP scaling_urban, l_soil_point) +!$OMP vfrac_surft, ashtf_surft, ashtf_nir_surft, ashtf_irr_surft, & +!$OMP scaling_urban, l_soil_point) !$OMP SCHEDULE(STATIC) DO l = 1,land_pts j = (land_index(l) - 1) / t_i_length + 1 From 7d95d7c5c21e99d71ffe30c650fe91c4829f5ef6 Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Thu, 20 Aug 2026 17:50:41 +0100 Subject: [PATCH 06/31] OMP typo fixed --- src/science/surface/jules_land_sf_explicit_jls.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/science/surface/jules_land_sf_explicit_jls.F90 b/src/science/surface/jules_land_sf_explicit_jls.F90 index ba4a755f..aebcce9e 100644 --- a/src/science/surface/jules_land_sf_explicit_jls.F90 +++ b/src/science/surface/jules_land_sf_explicit_jls.F90 @@ -1975,8 +1975,8 @@ SUBROUTINE jules_land_sf_explicit ( & !$OMP n, m, ts1_lake_gb, hcon_lake, l_elev_land_ice, l_lice_point, & !$OMP tsurf_elev_surft, dzsoil_elev, l_lice_surft, hcondeep, & !$OMP l_moruses_storage, urban_roof, l_fix_moruses_roof_rad_coupling, & -!$OMP vfrac_surft, ashtf_surft, ashtf_nir_surft, ashtf_irr_surft, & -!$OMP scaling_urban, l_soil_point) +!$OMP vfrac_surft, ashtf_surft, ashtf_irr_surft, ashtf_nir_surft, & +!$OMP scaling_urban, l_soil_point) & !$OMP SCHEDULE(STATIC) DO l = 1,land_pts j = (land_index(l) - 1) / t_i_length + 1 From 4fe1ce2e3b3951dc6364146b21b085731ce6ad26 Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Fri, 21 Aug 2026 15:07:31 +0100 Subject: [PATCH 07/31] added first attempt of code additions to physiol --- src/control/shared/jules_hydrology_mod.F90 | 6 +- src/science/surface/physiol_jls_mod.F90 | 264 ++++++++++++++++++--- 2 files changed, 230 insertions(+), 40 deletions(-) diff --git a/src/control/shared/jules_hydrology_mod.F90 b/src/control/shared/jules_hydrology_mod.F90 index f1d360b4..7bb08015 100644 --- a/src/control/shared/jules_hydrology_mod.F90 +++ b/src/control/shared/jules_hydrology_mod.F90 @@ -47,8 +47,12 @@ MODULE jules_hydrology_mod ! Only used if l_top=.T. l_limit_gsoil = .FALSE., & ! Switch for limiting gsoil above theta_crit - l_inland = .FALSE. + l_inland = .FALSE., & ! Switch for putting inland water from from rivers into soil moisture + l_soil_evap_irrig_expl = .FALSE. + ! Switch for explcitly calculating bare soil evaporation over the + ! separate irrigated and non-irrigated fractions of the grid box. + ! (Default used the grid box mean soil moisture). !----------------------------------------------------------------------------- ! PDM parameters diff --git a/src/science/surface/physiol_jls_mod.F90 b/src/science/surface/physiol_jls_mod.F90 index 26c4a993..48bf0f56 100644 --- a/src/science/surface/physiol_jls_mod.F90 +++ b/src/science/surface/physiol_jls_mod.F90 @@ -109,7 +109,7 @@ SUBROUTINE physiol ( & USE jules_irrig_mod, ONLY: l_irrig_dmd -USE jules_hydrology_mod, ONLY: l_limit_gsoil +USE jules_hydrology_mod, ONLY: l_limit_gsoil, l_soil_evap_irrig_expl USE pftparm, ONLY: emis_pft, fsmc_p0, rootd_ft, gsoil_f @@ -637,17 +637,20 @@ SUBROUTINE physiol ( & !$OMP resp_l_pft,resp_r_pft,fsmc_pft,apar_diag_pft,isoprene_pft,terpene_pft, & !$OMP methanol_pft,acetone_pft, nsoilt,smc_soilt,g_leaf,fsmc_irr,root_param, & !$OMP sm_levels,rib,f_root,tdims, ilayers,faparv,nsurft,gc_stom_surft, & -!$OMP smc_irr_soilt,ntype,alb_type_dummy,fapar_dir,fapar_dif, & +!$OMP smc_irr_soilt,smc_nir_soilt,ntype,alb_type_dummy,fapar_dir,fapar_dif, & !$OMP wt_ext_soilt,wt_ext_irr_soilt,wt_ext_irr_type,wt_ext_type, & !$OMP dim_cs1,resp_s_soilt,gpp,npp,resp_p,ra,canhc,vfrac,apar_diag_gb, & !$OMP isoprene_gb,terpene_gb,methanol_gb,acetone_gb,fsoil_tot,frac, & !$OMP land_index, t_i_length, pstar_land, pstar, ipar_land, & !$OMP photosynth_act_rad, q1_land, qw_1, gs_type, gs, & -!$OMP l_irrig_dmd, gs_irr_type, cosz_gb, cos_zenith_angle, & +!$OMP l_irrig_dmd, l_soil_evap_irrig_expl, gs_irr_type, & +!$OMP cosz_gb, cos_zenith_angle, & !$OMP gsoil_irr_soilt, smvccl_soilt, gs_nvg, soil, l_limit_gsoil, & !$OMP sthu_irr_soilt, smvcst_soilt, gsoil_soilt, sthu_soilt, & !$OMP gc_corr, n_wtrac_jls, smc_soilt_wtrac, growth_sug_pft, growth_sug_gb, & -!$OMP lwp_c_pft,l_wtrac_jls) +!$OMP fsmc_nir, wt_ext_nir_soilt, wt_ext_nir_type, sthu_nir_soilt, & +!$OMP frac_irr_soilt,fsoil_irr_tot,fsoil_nir_tot, gs_nir_type, & +!$OMP gsoil_nir_soilt,lwp_c_pft,l_wtrac_jls,frac_irr_surft) DO n = 1,npft !$OMP DO SCHEDULE(STATIC) @@ -665,6 +668,7 @@ SUBROUTINE physiol ( & methanol_pft(l,n) = 0.0 acetone_pft(l,n) = 0.0 g_leaf(l,n) = 0.0 + fsmc_nir(l,n) = 0.0 fsmc_irr(l,n) = 0.0 root_param(l,n) = 0.0 gc_corr(l,n) = 0.0 @@ -700,6 +704,7 @@ SUBROUTINE physiol ( & DO l = 1,land_pts smc_soilt(l,m) = 0.0 smc_irr_soilt(l,m) = 0.0 + smc_nir_soilt(l,m) = 0.0 END DO !$OMP END DO NOWAIT END DO @@ -775,6 +780,7 @@ SUBROUTINE physiol ( & DO l = 1,land_pts wt_ext_soilt(l,m,k) = 0.0 wt_ext_irr_soilt(l,m,k) = 0.0 + wt_ext_nir_soilt(l,m,k) = 0.0 END DO !$OMP END DO NOWAIT END DO @@ -785,6 +791,7 @@ SUBROUTINE physiol ( & !$OMP DO SCHEDULE(STATIC) DO l = 1,land_pts wt_ext_irr_type(l,k,n) = 0.0 + wt_ext_nir_type(l,k,n) = 0.0 wt_ext_type(l,k,n) = 0.0 END DO !$OMP END DO NOWAIT @@ -803,6 +810,26 @@ SUBROUTINE physiol ( & END DO END DO +IF (l_soil_evap_irrig_expl) THEN + DO k = 1,sm_levels + DO m = 1,nsoilt + DO l = 1,land_pts + sthu_nir_soilt(l,m,k) = sthu_soilt(l,m,k) + IF ( l_irrig_dmd ) THEN + sthu_nir_soilt(l,m,k) = sthu_soilt(l,m,k) + IF ( frac_irr_soilt(l,m) < 1.0 ) THEN + sthu_nir_soilt(l,m,k) = & + (sthu_soilt(l,m,k) - frac_irr_soilt(l,m) & + * sthu_irr_soilt(l,m,k)) & + / (1.0 - frac_irr_soilt(l,m)) + ELSE + sthu_nir_soilt(l,m,k) = sthu_irr_soilt(l,m,k) + END IF + END IF + END DO + END DO + END DO +END IF DO n = 1,ntype !$OMP DO SCHEDULE(STATIC) @@ -810,7 +837,10 @@ SUBROUTINE physiol ( & gs_type(l,n) = gs(l) IF (l_irrig_dmd) THEN gs_irr_type(l,n) = gs(l) - END IF + IF ( l_soil_evap_irrig_expl ) THEN + gs_nir_type(l,n) = gs(l) + END IF + END IF END DO !$OMP END DO NOWAIT END DO @@ -848,6 +878,19 @@ SUBROUTINE physiol ( & * smvcst_soilt(l,m,1) / smvccl_soilt(l,m,1))**2 ! ELSE Do nothing END IF + IF ( l_soil_evap_irrig_expl ) THEN + gsoil_nir_soilt(l,m) = 0.0 + IF (smvccl_soilt(l,m,1) > 0.0 .AND. l_limit_gsoil) THEN + gsoil_nir_soilt(l,m) = gs_nvg(soil - npft) * & + MIN(1.0, (sthu_nir_soilt(l,m,1) & + * smvcst_soilt(l,m,1) / smvccl_soilt(l,m,1))**2) + ELSE IF (smvccl_soilt(l,m,1) > 0.0) THEN + gsoil_nir_soilt(l,m) = gs_nvg(soil - npft) * & + (sthu_nir_soilt(l,m,1) & + * smvcst_soilt(l,m,1) / smvccl_soilt(l,m,1))**2 + ! ELSE Do nothing + END IF + END IF END DO !$OMP END DO NOWAIT END DO @@ -864,6 +907,10 @@ SUBROUTINE physiol ( & q1_land(l) = qw_1(i,j) cosz_gb(l) = cos_zenith_angle(i,j) fsoil_tot(l) = frac(l,soil) + IF ( l_soil_evap_irrig_expl ) THEN + fsoil_irr_tot(l) = frac(l,soil)*frac_irr_surft(l,soil) + fsoil_nir_tot(l) = frac(l,soil)*(1.-frac_irr_surft(l,soil)) + END IF gs(l) = 0.0 END DO !$OMP END DO NOWAIT @@ -1035,7 +1082,8 @@ SUBROUTINE physiol ( & ! is the same as in the overall gridbox irrigated fraction !$OMP PARALLEL IF(l_do_omp) DEFAULT(NONE) PRIVATE(l, k) & !$OMP SHARED(frac_irr_soilt, frac_irr_surft, land_pts, v_open, & -!$OMP l_irrig_dmd, n, m,l_use_pft_psi, v_close, v_close_pft, & +!$OMP l_irrig_dmd, l_soil_evap_irrig_expl, & +!$OMP n, m, l_use_pft_psi, v_close, v_close_pft, & !$OMP sm_levels, sthu_soilt, sthu_irr_soilt, sthu_nir_soilt, & !$OMP l_do_omp, sthu_surft, v_open_pft, smvcwt_soilt, smvccl_soilt, fsmc_p0) DO k = 1,sm_levels @@ -1048,16 +1096,22 @@ SUBROUTINE physiol ( & IF ( l_irrig_dmd ) THEN !$OMP DO SCHEDULE(STATIC) DO l = 1,land_pts - sthu_nir_soilt(l,m,k) = sthu_soilt(l,m,k) - IF ( frac_irr_soilt(l,m) < 1.0 ) THEN - sthu_nir_soilt(l,m,k) = (sthu_soilt(l,m,k) - frac_irr_soilt(l,m) & - * sthu_irr_soilt(l,m,k)) & - / (1.0 - frac_irr_soilt(l,m)) - ELSE - sthu_nir_soilt(l,m,k) = sthu_irr_soilt(l,m,k) - END IF - sthu_surft(l,m,k) = frac_irr_surft(l,n) * sthu_irr_soilt(l,m,k) & - + (1.0 - frac_irr_surft(l,n)) * sthu_nir_soilt(l,m,k) + IF ( l_soil_evap_irrig_expl ) THEN + sthu_surft(l,m,k) = frac_irr_surft(l,n) * sthu_irr_soilt(l,m,k) & + + (1.0 - frac_irr_surft(l,n)) * sthu_nir_soilt(l,m,k) + ELSE +! MAY Be ABLE to remove the following section (calc of sthu_nir done above with l_bare_soil_evap_irr)*** check with rose stem?*** + sthu_nir_soilt(l,m,k) = sthu_soilt(l,m,k) + IF ( frac_irr_soilt(l,m) < 1.0 ) THEN + sthu_nir_soilt(l,m,k) = (sthu_soilt(l,m,k) - frac_irr_soilt(l,m)& + * sthu_irr_soilt(l,m,k)) & + / (1.0 - frac_irr_soilt(l,m)) + ELSE + sthu_nir_soilt(l,m,k) = sthu_irr_soilt(l,m,k) + END IF + sthu_surft(l,m,k) = frac_irr_surft(l,n) * sthu_irr_soilt(l,m,k) & + + (1.0 - frac_irr_surft(l,n)) * sthu_nir_soilt(l,m,k) + END IF END DO !$OMP END DO END IF @@ -1104,7 +1158,27 @@ SUBROUTINE physiol ( & bexp_soilt(:,m,:), sathh_soilt(:,m,:), & wt_ext_irr_type(:,:,n),fsmc_irr(:,n), & psi_root_zone_pft(:,n)) - END IF + + IF ( l_soil_evap_irrig_expl ) THEN + CALL smc_ext (land_pts,sm_levels,surft_pts(n),surft_index(:,n), n, & + f_root,sthu_nir_soilt(:,m,:), & + v_open,smvcst_soilt(:,m,:), & + v_close, & + bexp_soilt(:,m,:), sathh_soilt(:,m,:), & + wt_ext_nir_type(:,:,n),fsmc_nir(:,n), & + psi_root_zone_pft(:,n)) + + DO l = 1,land_pts + fsmc_pft(l,n) = fsmc_nir(l,n)*(1.-frac_irr_surft(l,n)) & + + fsmc_irr(l,n)*frac_irr_surft(l,n) + DO k = 1,sm_levels + wt_ext_type(l,k,n) = & + wt_ext_nir_type(l,k,n)*(1.-frac_irr_surft(l,n)) & + + wt_ext_irr_type(l,k,n)*frac_irr_surft(l,n) + END DO + END DO + END IF + END IF CALL raero (land_pts,land_index,surft_pts(n),surft_index(:,n) & , rib,vshr,z0,z0,z1_uv_ij,ra) @@ -1204,10 +1278,12 @@ SUBROUTINE physiol ( & IF (l_irrig_dmd) THEN ! adjust conductance for irrigated fraction !$OMP PARALLEL DO IF(surft_pts(n) > 1) DEFAULT(NONE) PRIVATE(k, l) & -!$OMP SHARED(gs_irr_type, gs_type, n, surft_index, surft_pts) & +!$OMP SHARED(gs_irr_type, gs_nir_type, gs_type, n, surft_index, & +!$OMP surft_pts) & !$OMP SCHEDULE(STATIC) DO k = 1,surft_pts(n) l = surft_index(k,n) + gs_nir_type(l,n) = gs_type(l,n) gs_irr_type(l,n) = gs_type(l,n) END DO !$OMP END PARALLEL DO @@ -1218,7 +1294,10 @@ SUBROUTINE physiol ( & IF ( frac_irr_surft(l,n) > 0.0 ) THEN IF ( fsmc_pft(l,n) > 0.0 ) THEN gs_irr_type(l,n) = gs_type(l,n) * fsmc_irr(l,n) / fsmc_pft(l,n) - + IF ( l_soil_evap_irrig_expl ) THEN + gs_nir_type(l,n) = gs_type(l,n) * fsmc_nir(l,n) / fsmc_pft(l,n) + END IF + ELSE ! hadrd - this should only happen if sthu is 0.0, see smc_ext WRITE (ERRMSG,*) 'tile:', n, 'point:',l, 'fsmc:', fsmc_pft(l,n), & @@ -1247,9 +1326,15 @@ SUBROUTINE physiol ( & ! with code before gsoil_f parameter was added gsoil_under_canopy(:) = gsoil_soilt(:,m) gsoil_irr_under_canopy(:) = gsoil_irr_soilt(:,m) - ELSE + IF ( l_soil_evap_irrig_expl ) THEN + gsoil_nir_under_canopy(:) = gsoil_nir_soilt(:,m) + END IF + ELSE gsoil_under_canopy(:) = gsoil_soilt(:,m) * gsoil_f(n) gsoil_irr_under_canopy(:) = gsoil_irr_soilt(:,m) * gsoil_f(n) + IF ( l_soil_evap_irrig_expl ) THEN + gsoil_nir_under_canopy(:) = gsoil_nir_soilt(:,m) * gsoil_f(n) + END IF END IF CALL soil_evap (land_pts,sm_levels,surft_pts(n),surft_index(:,n), & @@ -1271,10 +1356,18 @@ SUBROUTINE physiol ( & dvi_cpft) !$OMP PARALLEL DO IF(l_do_omp) DEFAULT(NONE) PRIVATE(l) SHARED(frac, & -!$OMP l_do_omp, fsoil, fsoil_tot, land_pts, n) SCHEDULE(STATIC) +!$OMP l_do_omp, fsoil, fsoil_tot, fsoil_irr_tot, fsoil_nir_tot, & +!$OMP l_soil_evap_irrig_expl, frac_irr_surft, land_pts, n) SCHEDULE(STATIC) DO l = 1,land_pts fsoil_tot(l) = fsoil_tot(l) + frac(l,n) * fsoil(l,n) - END DO + IF ( l_soil_evap_irrig_expl ) THEN + fsoil_irr_tot(l) = fsoil_irr_tot(l) + frac(l,n) * fsoil(l,n) * & + frac_irr_surft(l,n) + fsoil_nir_tot(l) = fsoil_nir_tot(l) + frac(l,n) * fsoil(l,n) * & + (1.-frac_irr_surft(l,n)) + + END IF + END DO !$OMP END PARALLEL DO END DO @@ -1288,13 +1381,18 @@ SUBROUTINE physiol ( & !---------------------------------------------------------------------- DO n = npft+1,ntype !$OMP PARALLEL DO IF(surft_pts(n) > 1) DEFAULT(NONE) PRIVATE(l, j) & -!$OMP SHARED(gs_irr_type, gs_nvg, gs_type, l_irrig_dmd, n, npft, & -!$OMP surft_index, surft_pts) SCHEDULE(STATIC) +!$OMP SHARED(gs_irr_type, gs_nir_type, gs_nvg, gs_type, & +!$OMP l_irrig_dmd, l_soil_evap_irrig_expl, & +!$OMP n, npft, surft_index, surft_pts) & +!$OMP SCHEDULE(STATIC) DO j = 1,surft_pts(n) l = surft_index(j,n) gs_type(l,n) = gs_nvg(n - npft) IF (l_irrig_dmd) THEN gs_irr_type(l,n) = gs_nvg(n - npft) ! irrigation + IF (l_soil_evap_irrig_expl ) THEN + gs_nir_type(l,n) = gs_nvg(n - npft) ! non-irrigation + END IF END IF END DO !$OMP END PARALLEL DO @@ -1337,9 +1435,10 @@ SUBROUTINE physiol ( & n = soil !$OMP PARALLEL DO IF (surft_pts(n) > 1) DEFAULT(NONE) PRIVATE(l, j) & !$OMP SHARED(gs_irr_type, gs_type, gsoil_soilt, gsoil_irr_soilt, & -!$OMP l_irrig_dmd, irrig_tile, & +!$OMP l_irrig_dmd, l_soil_evap_irrig_expl, frac_irr_surft, & +!$OMP gsoil_nir_soilt, irrig_tile, & !$OMP n, m, surft_index, surft_pts, wt_ext_type, & -!$OMP wt_ext_irr_type) SCHEDULE(STATIC) +!$OMP wt_ext_irr_type, gs_nir_type) SCHEDULE(STATIC) DO j = 1,surft_pts(n) l = surft_index(j,n) gs_type(l,n) = gsoil_soilt(l,m) @@ -1347,6 +1446,11 @@ SUBROUTINE physiol ( & wt_ext_type(l,1,n) = 1.0 END IF IF (l_irrig_dmd) THEN + IF ( l_soil_evap_irrig_expl )THEN + gs_type(l,n) = frac_irr_surft(l,n)*gsoil_irr_soilt(l,m) & + +(1.0-frac_irr_surft(l,n))*gsoil_nir_soilt(l,m) + gs_nir_type(l,n) = gsoil_nir_soilt(l,m) ! non-irrigation + END IF gs_irr_type(l,n) = gsoil_irr_soilt(l,m) ! irrigation wt_ext_irr_type(l,1,n) = 1.0 ! irrigation END IF @@ -1634,9 +1738,11 @@ SUBROUTINE physiol ( & m = 1 DO n = 1,ntype !$OMP PARALLEL DO IF(surft_pts(n) > 1) DEFAULT(NONE) PRIVATE(l, j) & -!$OMP SHARED(canhc, ch_type, frac, l_irrig_dmd, n, sm_levels, & +!$OMP SHARED(canhc, ch_type, frac, n, sm_levels, & +!$OMP l_irrig_dmd, l_soil_evap_irrig_expl, & !$OMP surft_index, surft_pts, vfrac, vf_type, wt_ext_soilt, & !$OMP frac_irr_surft, frac_irr_soilt, & +!$OMP wt_ext_nir_soilt, wt_ext_nir_type, & !$OMP wt_ext_irr_soilt, wt_ext_type, wt_ext_irr_type, m) & !$OMP SCHEDULE(STATIC) DO j = 1,surft_pts(n) @@ -1653,7 +1759,19 @@ SUBROUTINE physiol ( & / frac_irr_soilt(l,m) & * frac(l,n) * wt_ext_irr_type(l,k,n) END IF - END IF + IF ( l_soil_evap_irrig_expl) THEN + IF ((1.-frac_irr_soilt(l,m)) > EPSILON(1.0)) THEN + wt_ext_nir_soilt(l,m,k) = wt_ext_nir_soilt(l,m,k) & + + (1.-frac_irr_surft(l,n)) & + / (1.-frac_irr_soilt(l,m)) & + * frac(l,n) * wt_ext_nir_type(l,k,n) + END IF + wt_ext_soilt(l,m,k) = frac_irr_soilt(l,m)*wt_ext_irr_soilt(l,m,k) & + + (1.-frac_irr_soilt(l,m)) & + * wt_ext_nir_soilt(l,m,k) + + END IF + END IF END DO END DO !$OMP END PARALLEL DO @@ -1726,10 +1844,13 @@ SUBROUTINE physiol ( & !$OMP PARALLEL DO IF(surft_pts(n) > 1) DEFAULT(NONE) PRIVATE(k, l, j) & !$OMP SHARED(surft_pts, surft_index, flake, gc_surft, gs_type, l_irrig_dmd, & -!$OMP gs_irr_surft, gs_irr_type, canhc_surft, ch_type, vfrac_surft, & +!$OMP l_soil_evap_irrig_expl, gs_irr_surft, gs_irr_type, & +!$OMP canhc_surft, ch_type, vfrac_surft, & !$OMP vf_type, sm_levels, wt_ext_soilt, frac, wt_ext_type, & !$OMP wt_ext_surft, frac_irr_surft, frac_irr_soilt, & -!$OMP wt_ext_irr_soilt, wt_ext_irr_type, wt_ext_irr_surft, n, m, lake, & +!$OMP wt_ext_irr_soilt, wt_ext_irr_type, wt_ext_irr_surft, & +!$OMP wt_ext_nir_soilt, wt_ext_nir_type, gs_nir_surft, gc_irr_surft, & +!$OMP gs_nir_type, n, m, lake, & !$OMP l_flake_model, non_lake_frac) & !$OMP SCHEDULE(STATIC) DO j = 1,surft_pts(n) @@ -1738,6 +1859,10 @@ SUBROUTINE physiol ( & gc_surft(l,n) = gs_type(l,n) IF (l_irrig_dmd) THEN gs_irr_surft(l,n) = gs_irr_type(l,n) ! irrigation + IF (l_soil_evap_irrig_expl) THEN + gs_nir_surft(l,n) = gs_nir_type(l,n) ! non irrigation + gc_irr_surft(l,n) = gs_irr_surft(l,n) + END IF END IF canhc_surft(l,n) = ch_type(l,n) vfrac_surft(l,n) = vf_type(l,n) @@ -1756,6 +1881,17 @@ SUBROUTINE physiol ( & * frac(l,n) * wt_ext_irr_type(l,k,n) END IF wt_ext_irr_surft(l,k,n) = wt_ext_irr_type(l,k,n) + IF (l_soil_evap_irrig_expl) THEN + IF ((1.-frac_irr_soilt(l,m)) > EPSILON(1.0)) THEN + wt_ext_nir_soilt(l,m,k) = wt_ext_nir_soilt(l,m,k) & + + (1.-frac_irr_surft(l,n)) & + / (1.-frac_irr_soilt(l,m)) & + * frac(l,n) * wt_ext_nir_type(l,k,n) + END IF + wt_ext_soilt(l,m,k) = frac_irr_soilt(l,m)*wt_ext_irr_soilt(l,m,k) & + + (1.-frac_irr_soilt(l,m)) & + * wt_ext_nir_soilt(l,m,k) + END IF END IF END DO !sm_levels END DO !surf_pts @@ -2039,9 +2175,10 @@ SUBROUTINE physiol ( & DO k = 1,sm_levels !$OMP PARALLEL DO IF(l_do_omp) DEFAULT(NONE) PRIVATE(l) SHARED(dzsoil, & -!$OMP land_pts, k, n, m, smc_irr_soilt, sthu_irr_soilt, frac, & -!$OMP frac_irr_surft, frac_irr_soilt, l_do_omp, & -!$OMP smvcst_soilt, v_close_pft, wt_ext_irr_type) & +!$OMP land_pts, k, n, m, smc_irr_soilt, sthu_irr_soilt, & +!$OMP smc_nir_soilt, sthu_nir_soilt, frac, frac_irr_surft, & +!$OMP frac_irr_soilt, l_do_omp,smvcst_soilt, v_close_pft, & +!$OMP l_soil_evap_irrig_expl, wt_ext_irr_type, wt_ext_nir_type) & !$OMP SCHEDULE(STATIC) DO l = 1,land_pts IF ( frac_irr_soilt(l,m) > EPSILON(1.0) ) THEN @@ -2054,6 +2191,18 @@ SUBROUTINE physiol ( & * smvcst_soilt(l,m,k) & - v_close_pft(l,k,n))) END IF + IF (l_soil_evap_irrig_expl) THEN + IF (1. - frac_irr_soilt(l,m) > EPSILON(1.0) ) THEN + smc_nir_soilt(l,m) = smc_nir_soilt(l,m) & + + MAX(0.0,(1.-frac_irr_surft(l,n)) & + / (1.-frac_irr_soilt(l,m)) & + * frac(l,n) * wt_ext_nir_type(l,k,n) & + * rho_water * dzsoil(k) & + * (sthu_nir_soilt(l,m,k) & + * smvcst_soilt(l,m,k) & + - v_close_pft(l,k,n))) + END IF + END IF END DO !$OMP END PARALLEL DO END DO @@ -2063,8 +2212,9 @@ SUBROUTINE physiol ( & DO k = 1,sm_levels DO m = 1,nsoilt !$OMP PARALLEL DO IF(l_do_omp) DEFAULT(NONE) PRIVATE(l) SHARED(dzsoil, & -!$OMP land_pts, k, n, smc_irr_soilt, sthu_irr_soilt, smvcst_soilt, & -!$OMP smvcwt_soilt,wt_ext_irr_soilt,m, l_do_omp) & +!$OMP land_pts, k, n, smc_irr_soilt, sthu_irr_soilt, & +!$OMP smc_nir_soilt, sthu_nir_soilt,smvcst_soilt, & +!$OMP smvcwt_soilt,wt_ext_irr_soilt,wt_ext_nir_soilt,m,l_do_omp) & !$OMP SCHEDULE(STATIC) DO l = 1,land_pts smc_irr_soilt(l,m) = smc_irr_soilt(l,m) & @@ -2074,6 +2224,15 @@ SUBROUTINE physiol ( & * (sthu_irr_soilt(l,m,k) & * smvcst_soilt(l,m,k) & - smvcwt_soilt(l,m,k))) + IF (l_soil_evap_irrig_expl) THEN + smc_nir_soilt(l,m) = smc_nir_soilt(l,m) & + + MAX(0.0 , & + wt_ext_nir_soilt(l,m,k) * rho_water & + * dzsoil(k) & + * (sthu_nir_soilt(l,m,k) & + * smvcst_soilt(l,m,k) & + - smvcwt_soilt(l,m,k))) + END IF END DO !$OMP END PARALLEL DO END DO @@ -2082,14 +2241,41 @@ SUBROUTINE physiol ( & ! Add available water for evaporation from bare soil in irrig frac. !$OMP PARALLEL IF(l_do_omp) DEFAULT(NONE) PRIVATE(l,m,n) SHARED(dzsoil, & -!$OMP fsoil_tot, land_pts, smc_irr_soilt, sthu_irr_soilt,nsoilt, & -!$OMP smvcst_soilt, gs_irr_surft,gc_irr_surft, nsurft,l_do_omp) +!$OMP fsoil_tot, land_pts, smc_irr_soilt, sthu_irr_soilt, nsoilt, & +!$OMP smc_nir_soilt, smc_soilt, sthu_nir_soilt, & +!$OMP smvcst_soilt, gs_irr_surft, gc_irr_surft, nsurft, l_do_omp, & +!$OMP fsoil_irr_tot, fsoil_nir_tot, frac_irr_soilt, & +!$OMP frac_irr_surft, l_soil_evap_irrig_expl) DO m = 1,nsoilt !$OMP DO SCHEDULE(STATIC) - DO l = 1,land_pts - smc_irr_soilt(l,m) = (1.0 - fsoil_tot(l)) * smc_irr_soilt(l,m) + & + DO l = 1,land_pts + IF (l_soil_evap_irrig_expl) THEN + IF (frac_irr_soilt(l,m) > 0.0) THEN + fsoil_irr_tot(l) = fsoil_irr_tot(l)/frac_irr_soilt(l,m) + smc_irr_soilt(l,m) = (1.0 - fsoil_irr_tot(l) ) * & + smc_irr_soilt(l,m) + fsoil_irr_tot(l) * & + rho_water * dzsoil(1) * & + MAX(0.0,sthu_irr_soilt(l,m,1)) * smvcst_soilt(l,m,1) + ELSE + smc_irr_soilt(l,m) = 0.0 + END IF + IF (1.0 - frac_irr_soilt(l,m) > 0.0) THEN + fsoil_nir_tot(l) = fsoil_nir_tot(l)/(1.-frac_irr_soilt(l,m)) + smc_nir_soilt(l,m) = (1.0 - fsoil_nir_tot(l)) * & + smc_nir_soilt(l,m) + fsoil_nir_tot(l) * & + rho_water * dzsoil(1) * & + MAX(0.0,sthu_nir_soilt(l,m,1)) * smvcst_soilt(l,m,1) + ELSE + smc_nir_soilt(l,m) = 0.0 + END IF + + smc_soilt(l,m) = frac_irr_soilt(l,m) * smc_irr_soilt(l,m) + & + (1.0 - frac_irr_soilt(l,m)) * smc_nir_soilt(l,m) + ELSE + smc_irr_soilt(l,m) = (1.0 - fsoil_tot(l)) * smc_irr_soilt(l,m) + & fsoil_tot(l) * rho_water * dzsoil(1) * & MAX(0.0,sthu_irr_soilt(l,m,1)) * smvcst_soilt(l,m,1) + END IF END DO !$OMP END DO END DO From 985b90a953bceba29e95622180b0d45779440c42 Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Fri, 21 Aug 2026 17:03:20 +0100 Subject: [PATCH 08/31] basic code passes rose stem tests --- src/control/shared/jules_hydrology_mod.F90 | 6 +-- src/control/shared/jules_irrig_mod.F90 | 6 ++- src/science/surface/physiol_jls_mod.F90 | 5 ++- src/science/surface/sf_evap_jls.F90 | 48 +++++++++++++++++++++- src/science/surface/sf_resist_jls.F90 | 36 ++++++++++++++-- src/science/surface/soil_evap_jls.F90 | 33 ++++++++++++++- 6 files changed, 120 insertions(+), 14 deletions(-) diff --git a/src/control/shared/jules_hydrology_mod.F90 b/src/control/shared/jules_hydrology_mod.F90 index 7bb08015..f1d360b4 100644 --- a/src/control/shared/jules_hydrology_mod.F90 +++ b/src/control/shared/jules_hydrology_mod.F90 @@ -47,12 +47,8 @@ MODULE jules_hydrology_mod ! Only used if l_top=.T. l_limit_gsoil = .FALSE., & ! Switch for limiting gsoil above theta_crit - l_inland = .FALSE., & + l_inland = .FALSE. ! Switch for putting inland water from from rivers into soil moisture - l_soil_evap_irrig_expl = .FALSE. - ! Switch for explcitly calculating bare soil evaporation over the - ! separate irrigated and non-irrigated fractions of the grid box. - ! (Default used the grid box mean soil moisture). !----------------------------------------------------------------------------- ! PDM parameters diff --git a/src/control/shared/jules_irrig_mod.F90 b/src/control/shared/jules_irrig_mod.F90 index 74cd8f3a..fef9aa7b 100644 --- a/src/control/shared/jules_irrig_mod.F90 +++ b/src/control/shared/jules_irrig_mod.F90 @@ -47,8 +47,12 @@ MODULE jules_irrig_mod LOGICAL :: & l_irrig_dmd = .FALSE., & ! Switch for using irrigation demand code - l_irrig_limit = .FALSE. + l_irrig_limit = .FALSE., & ! Switch for limiting irrigation supply + l_soil_evap_irrig_expl = .FALSE. + ! Switch for explcitly calculating bare soil evaporation over the + ! separate irrigated and non-irrigated fractions of the grid box. + ! (Default used the grid box mean soil moisture). INTEGER :: nirrtile = imdi ! Number of tiles that can have irrigated fraction diff --git a/src/science/surface/physiol_jls_mod.F90 b/src/science/surface/physiol_jls_mod.F90 index 48bf0f56..c952ab89 100644 --- a/src/science/surface/physiol_jls_mod.F90 +++ b/src/science/surface/physiol_jls_mod.F90 @@ -107,9 +107,9 @@ SUBROUTINE physiol ( & ! imported variables l_crop, l_use_pft_psi, l_triffid -USE jules_irrig_mod, ONLY: l_irrig_dmd +USE jules_irrig_mod, ONLY: l_irrig_dmd, l_soil_evap_irrig_expl -USE jules_hydrology_mod, ONLY: l_limit_gsoil, l_soil_evap_irrig_expl +USE jules_hydrology_mod, ONLY: l_limit_gsoil USE pftparm, ONLY: emis_pft, fsmc_p0, rootd_ft, gsoil_f @@ -2213,6 +2213,7 @@ SUBROUTINE physiol ( & DO m = 1,nsoilt !$OMP PARALLEL DO IF(l_do_omp) DEFAULT(NONE) PRIVATE(l) SHARED(dzsoil, & !$OMP land_pts, k, n, smc_irr_soilt, sthu_irr_soilt, & +!$OMP l_soil_evap_irrig_expl, & !$OMP smc_nir_soilt, sthu_nir_soilt,smvcst_soilt, & !$OMP smvcwt_soilt,wt_ext_irr_soilt,wt_ext_nir_soilt,m,l_do_omp) & !$OMP SCHEDULE(STATIC) diff --git a/src/science/surface/sf_evap_jls.F90 b/src/science/surface/sf_evap_jls.F90 index 5eb20ec3..b420d606 100644 --- a/src/science/surface/sf_evap_jls.F90 +++ b/src/science/surface/sf_evap_jls.F90 @@ -47,7 +47,7 @@ SUBROUTINE sf_evap ( & USE ancil_info, ONLY: nsoilt -USE jules_irrig_mod, ONLY: l_irrig_dmd +USE jules_irrig_mod, ONLY: l_irrig_dmd, l_soil_evap_irrig_expl USE jules_surface_mod, ONLY: l_aggregate, l_flake_model USE jules_surface_types_mod, ONLY: lake @@ -691,6 +691,9 @@ SUBROUTINE sf_evap ( & DO l = 1,land_pts ext_soilt(l,:,m) = 0.0 ext_irr_soilt(l,:,m) = 0.0 + IF ( l_soil_evap_irrig_expl ) THEN + ext_nir_soilt(l,:,m) = 0.0 + END IF END DO !$OMP END DO END DO @@ -712,6 +715,15 @@ SUBROUTINE sf_evap ( & ext_soilt(l,mm,m) = ext_soilt(l,mm,m) & + tile_frac(l,n) * wt_ext_surft(l,m,n) & * esoil_surft(l,n) + + IF ( l_soil_evap_irrig_expl ) THEN + wt_ext_nir_surft(l,m,n) = wt_ext_surft(l,m,n) + IF (1.- frac_irr_surft(l,n) > EPSILON(1.0) ) THEN + wt_ext_nir_surft(l,m,n) = (wt_ext_surft(l,m,n) - & + wt_ext_irr_surft(l,m,n) * frac_irr_surft(l,n)) / & + (1.- frac_irr_surft(l,n)) + END IF + END IF END DO !$OMP END DO END IF @@ -764,6 +776,23 @@ SUBROUTINE sf_evap ( & !$OMP DO SCHEDULE(STATIC) DO k = 1,surft_pts(n) l = surft_index(k,n) + IF ( l_soil_evap_irrig_expl ) THEN + wt_ext_nir_surft(l,m,n) = wt_ext_surft(l,m,n) + IF ((1.- frac_irr_surft(l,n)) > EPSILON(1.0) ) THEN + wt_ext_nir_surft(l,m,n) = (wt_ext_surft(l,m,n) - & + wt_ext_irr_surft(l,m,n) * frac_irr_surft(l,n)) / & + (1.- frac_irr_surft(l,n)) + END IF + IF (1. - frac_irr_soilt(l,mm) > EPSILON(1.0) ) THEN + ext_nir_soilt(l,mm,m) = ext_nir_soilt(l,mm,m) & + + tile_frac(l,n) & + * wt_ext_nir_surft(l,m,n) & + * esoil_nir_surft(l,n) & + * (1.0 - frac_irr_surft(l,n)) & + / (1.0 - frac_irr_soilt(l,mm)) + END IF + END IF + IF ( frac_irr_soilt(l,mm) > EPSILON(1.0) ) THEN ext_irr_soilt(l,mm,m) = ext_irr_soilt(l,mm,m) & + tile_frac(l,n) & @@ -783,6 +812,23 @@ SUBROUTINE sf_evap ( & !$OMP DO SCHEDULE(STATIC) DO k = 1,surft_pts(n) l = surft_index(k,n) + + IF ( l_soil_evap_irrig_expl ) THEN + wt_ext_nir_surft(l,m,n) = wt_ext_surft(l,m,n) + IF (1.- frac_irr_surft(l,n) > EPSILON(1.0) ) THEN + wt_ext_nir_surft(l,m,n) = (wt_ext_surft(l,m,n) - & + wt_ext_irr_surft(l,m,n) * frac_irr_surft(l,n)) / & + (1.- frac_irr_surft(l,n)) + end if + IF (1.- frac_irr_soilt(l,mm) > EPSILON(1.0) ) THEN + ext_nir_soilt(l,mm,m) = ext_nir_soilt(l,mm,m) & + + wt_ext_nir_surft(l,m,n) & + * esoil_nir_surft(l,n) & + * (1.0 - frac_irr_surft(l,n)) & + / (1.0 - frac_irr_soilt(l,mm)) + END IF + END IF + IF ( frac_irr_soilt(l,mm) > EPSILON(1.0) ) THEN ext_irr_soilt(l,mm,m) = ext_irr_soilt(l,mm,m) & + wt_ext_irr_surft(l,m,n) & diff --git a/src/science/surface/sf_resist_jls.F90 b/src/science/surface/sf_resist_jls.F90 index 16701a72..0843e256 100644 --- a/src/science/surface/sf_resist_jls.F90 +++ b/src/science/surface/sf_resist_jls.F90 @@ -32,7 +32,7 @@ SUBROUTINE sf_resist ( & USE water_constants_mod, ONLY: tm, rho_ice USE jules_surface_mod, ONLY: l_aggregate USE jules_vegetation_mod, ONLY: can_model -USE jules_irrig_mod, ONLY: l_irrig_dmd +USE jules_irrig_mod, ONLY: l_soil_evap_irrig_expl USE parkind1, ONLY: jprb, jpim USE yomhook, ONLY: lhook, dr_hook IMPLICIT NONE @@ -146,7 +146,8 @@ SUBROUTINE sf_resist ( & !$OMP SHARED(surft_pts,surft_index,land_index,t_i_length,fracaero_t,fracaero_s,& !$OMP dq,snowdep_surft,tstar,snow_surft, & !$OMP catch,frac_snow_subl_melt,maskd,resfs,gc,ch,vshr,l_et_stom, & -!$OMP l_et_stom_surft,resfs_stom,gc_stom_surft,flake, & +!$OMP l_et_stom_surft,resfs_stom,gc_stom_surft,frac_irr_surft, & +!$OMP gc_irr_surft,gc_nir_surft,l_soil_evap_irrig_expl,flake, & !$OMP canopy,epdt,resft,l_fix_snow_frac, l_fix_neg_snow) DO k = 1,surft_pts l = surft_index(k) @@ -231,6 +232,20 @@ SUBROUTINE sf_resist ( & ! and bare soil evaporation from soil tiles. !----------------------------------------------------------------------- resfs(l) = gc(l) / ( gc(l) + ch(l) * vshr(i,j) ) + IF ( l_soil_evap_irrig_expl ) THEN + gc_nir_surft(l) = gc(l) + IF ( frac_irr_surft(l) < 1.0 ) THEN + gc_nir_surft(l) = (gc(l) - frac_irr_surft(l) & + * gc_irr_surft(l)) & + / (1.0 - frac_irr_surft(l)) + ELSE + gc_nir_surft(l) = gc_irr_surft(l) + END IF + resfs(l) = frac_irr_surft(l)*gc_irr_surft(l) & + / ( gc_irr_surft(l) + ch(l) * vshr(i,j) ) & + +(1.-frac_irr_surft(l))*gc_nir_surft(l) & + / ( gc_nir_surft(l) + ch(l) * vshr(i,j) ) + END IF IF (l_et_stom .OR. l_et_stom_surft) THEN resfs_stom(l) = gc_stom_surft(l) / ( gc_stom_surft(l) + ch(l) * vshr(i,j) ) END IF @@ -248,7 +263,8 @@ SUBROUTINE sf_resist ( & !$OMP PARALLEL DO IF(surft_pts > 1) DEFAULT(NONE) PRIVATE(i, j, k, l) & !$OMP SHARED(surft_pts, surft_index, land_index, t_i_length, & !$OMP snow_surft, gc, vshr, fracaero_t, & -!$OMP resfs, ch, resft) SCHEDULE(STATIC) +!$OMP resfs, ch, resft, gc_nir_surft, frac_irr_surft, & +!$OMP gc_irr_surft, l_soil_evap_irrig_expl) SCHEDULE(STATIC) DO k = 1,surft_pts l = surft_index(k) IF (snow_surft(l) > 0.0) THEN @@ -257,6 +273,20 @@ SUBROUTINE sf_resist ( & fracaero_t(l) = 0.0 resfs(l) = gc(l) / & (gc(l) + ch(l) * vshr(i,j)) + IF ( l_soil_evap_irrig_expl ) THEN + gc_nir_surft(l) = gc(l) + IF ( frac_irr_surft(l) < 1.0 ) THEN + gc_nir_surft(l) = (gc(l) - frac_irr_surft(l) & + * gc_irr_surft(l)) & + / (1.0 - frac_irr_surft(l)) + ELSE + gc_nir_surft(l) = gc_irr_surft(l) + END IF + resfs(l) = frac_irr_surft(l)*gc_irr_surft(l) & + / ( gc_irr_surft(l) + ch(l) * vshr(i,j) ) & + +(1.-frac_irr_surft(l))*gc_nir_surft(l) & + / ( gc_nir_surft(l) + ch(l) * vshr(i,j) ) + END IF resft(l) = resfs(l) END IF END DO diff --git a/src/science/surface/soil_evap_jls.F90 b/src/science/surface/soil_evap_jls.F90 index d1662ecb..1454843c 100644 --- a/src/science/surface/soil_evap_jls.F90 +++ b/src/science/surface/soil_evap_jls.F90 @@ -26,7 +26,7 @@ SUBROUTINE soil_evap (npnts,nshyd,surft_pts,surft_index, & gsoil_irr,gs_irr,wt_ext_irr & ) -USE jules_irrig_mod, ONLY: l_irrig_dmd +USE jules_irrig_mod, ONLY: l_irrig_dmd, l_soil_evap_irrig_expl USE yomhook, ONLY: lhook, dr_hook USE parkind1, ONLY: jprb, jpim IMPLICIT NONE @@ -104,7 +104,8 @@ SUBROUTINE soil_evap (npnts,nshyd,surft_pts,surft_index, & !$OMP DEFAULT(NONE) & !$OMP PRIVATE(l,j,k) & !$OMP SHARED(npnts,fsoil,surft_pts,surft_index,lai,nshyd,wt_ext,gs,gsoil, & -!$OMP wt_ext_irr,gs_irr,gsoil_irr,l_irrig_dmd,irrig_tile) +!$OMP frac_irr,gsoil_nir,gs_nir,wt_ext_nir,irrig_tile, & +!$OMP wt_ext_irr,gs_irr,gsoil_irr,l_irrig_dmd,l_soil_evap_irrig_expl) ! Initialisations @@ -138,6 +139,17 @@ SUBROUTINE soil_evap (npnts,nshyd,surft_pts,surft_index, & wt_ext_irr(l,k) = gs_irr(l) * wt_ext_irr(l,k) & / (gs_irr(l) + fsoil(l) * gsoil_irr(l)) END DO +!$OMP END DO NOWAIT + END IF + IF (l_soil_evap_irrig_expl) THEN +!$OMP DO SCHEDULE(STATIC) + DO j = 1,surft_pts + l = surft_index(j) + wt_ext_nir(l,k) = gs_nir(l) * wt_ext_nir(l,k) & + / (gs_nir(l) + fsoil(l) * gsoil_nir(l)) + wt_ext(l,k) = frac_irr(l)*wt_ext_irr(l,k) & + +(1.0-frac_irr(l))*wt_ext_nir(l,k) + END DO !$OMP END DO NOWAIT END IF END DO @@ -179,6 +191,23 @@ SUBROUTINE soil_evap (npnts,nshyd,surft_pts,surft_index, & !$OMP END DO NOWAIT END IF +! Transpiration and soil conductances over irrigated fraction of tile +! relative to tile mean conductance (scaled by relative area later). +! Soil evaporation does not use grid box mean soil moisture: +IF (l_soil_evap_irrig_expl) THEN +!$OMP DO SCHEDULE(STATIC) + !CDIR NODEP + DO j = 1,surft_pts + l = surft_index(j) + wt_ext_nir(l,1) = (gs_nir(l) * wt_ext_nir(l,1) + fsoil(l) * gsoil_nir(l)) & + / (gs_nir(l) + fsoil(l) * gsoil_nir(l)) + gs_nir(l) = gs_nir(l) + fsoil(l) * gsoil_nir(l) + wt_ext(l,1) = frac_irr(l)*wt_ext_irr(l,1)+(1.0-frac_irr(l))*wt_ext_nir(l,1) + gs(l) = frac_irr(l)*gs_irr(l)+(1.0-frac_irr(l))*gs_nir(l) + END DO +!$OMP END DO NOWAIT +END IF + !$OMP END PARALLEL IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) RETURN From 50ba4db21b558a1f93f8bc5e2235c94641d82adc Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Mon, 24 Aug 2026 14:00:54 +0100 Subject: [PATCH 09/31] add variable descriptions --- src/science/surface/fcdch.F90 | 4 ++++ .../surface/jules_land_sf_explicit_jls.F90 | 16 ++++++---------- src/science/surface/sf_evap_jls.F90 | 10 +++++++++- src/science/surface/sf_flux_mod.F90 | 8 -------- src/science/surface/sf_resist_jls.F90 | 1 + src/science/surface/soil_evap_jls.F90 | 1 + 6 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/science/surface/fcdch.F90 b/src/science/surface/fcdch.F90 index 9549618c..13791f52 100644 --- a/src/science/surface/fcdch.F90 +++ b/src/science/surface/fcdch.F90 @@ -156,7 +156,11 @@ SUBROUTINE fcdch ( & ! IN Interactive canopy conductance ! ! to evaporation (m/s) ,gc_irr_surft(points) & + ! IN Interactive canopy conductance +! ! to evaporation over irrigated +! ! part of tile (m/s) ,frac_irr_surft(points) & +! ! IN Irrigation fraction in tile ,snowdep(points) & ! IN Snow depth (m) ,snow(points) & diff --git a/src/science/surface/jules_land_sf_explicit_jls.F90 b/src/science/surface/jules_land_sf_explicit_jls.F90 index aebcce9e..44350f62 100644 --- a/src/science/surface/jules_land_sf_explicit_jls.F90 +++ b/src/science/surface/jules_land_sf_explicit_jls.F90 @@ -806,23 +806,17 @@ SUBROUTINE jules_land_sf_explicit ( & ! Areal heat capacity of snow (J/K/m2) ,ksnow(land_pts,nsmax) & ! Thermal conductivity of snow (W/m/K) -,ashtf_irr_surft(land_pts,nsurft) & -,ashtf_nir_surft(land_pts,nsurft) & -,hcons_irr_surf(land_pts,nsurft) & -,hcons_nir_surf(land_pts,nsurft) & -,hcons_irr_soilt(land_pts,nsoilt) & -,hcons_nir_soilt(land_pts,nsoilt) & -,sthu1_nir_soilt(land_pts) & -,sthf1_nir_soilt(land_pts) & -,sthf1_irr_soilt(land_pts) & ,hcons_snow(land_pts,nsurft) & ! Snow thermal conductivity ,resp_frac(land_pts,dim_cslayer) & ! respired fraction of RESP_S ,gc_stom_surft(land_pts,nsurft) & ! canopy conductance -,gs_nir_surft(land_pts,nsurft) & ,gc_nir_surft(land_pts,nsurft) & + ! canopy conductance over irrigated part + ! of tile +,gs_nir_surft(land_pts,nsurft) & + ! Conductance for non-irrigated part of tile ,sice_surft_tmp(land_pts,nsmax) & ! Ice content of snow layers (kg/m2) ,sliq_surft_tmp(land_pts,nsmax) & @@ -964,6 +958,8 @@ SUBROUTINE jules_land_sf_explicit ( & ,ashtf_surft(land_pts,nsurft) & ! Coefficient to calculate surface ! heat flux into soil (W/m2/K). +,ashtf_irr_surft(land_pts,nsurft) & +,ashtf_nir_surft(land_pts,nsurft) & ,lw_down_surftsum(land_pts) & ! Gridbox sum of elevation corrections to ! downward longwave radiation diff --git a/src/science/surface/sf_evap_jls.F90 b/src/science/surface/sf_evap_jls.F90 index b420d606..1c4b0534 100644 --- a/src/science/surface/sf_evap_jls.F90 +++ b/src/science/surface/sf_evap_jls.F90 @@ -160,7 +160,6 @@ SUBROUTINE sf_evap ( & ! soil layer (kg/m2/s). ! of land tiles. - !New arguments replacing USE statements ! crop_vars_mod (IN) REAL(KIND=real_jlslsm), INTENT(IN) :: frac_irr_soilt(land_pts,nsoilt) @@ -189,8 +188,17 @@ SUBROUTINE sf_evap ( & ! ! moisture through non-irrigated ! ! fraction of land tiles (kg/m2/s). ,ext_nir_soilt(land_pts,nsoilt,sm_levels) & +! ! WORK Extraction of water from each +! ! soil layer from non-irrigated +! ! fraction of land tiles (kg/m2/s). ,wt_ext_nir_surft(land_pts,sm_levels,nsurft) & +! ! WORK Fraction of transpiration +! ! extracted from each soil layer +! ! by non-irrigated part of each tile. ,resfs_nir_surft(land_pts,nsurft) & +! ! WORK Combined soil, stomatal and aerodynam. +! ! resistance factor for fraction 1-fracaero_t +! ! of non-irrigated part of each land tile. ,smc_nir_soilt(land_pts,nsoilt) ! ! WORK Available soil moisture (kg/m2). ! ! fraction (kg/m2/s). diff --git a/src/science/surface/sf_flux_mod.F90 b/src/science/surface/sf_flux_mod.F90 index 7b422b5d..526480a3 100644 --- a/src/science/surface/sf_flux_mod.F90 +++ b/src/science/surface/sf_flux_mod.F90 @@ -167,14 +167,6 @@ SUBROUTINE sf_flux ( & dtstar_pot(points) & ! Change in TSTAR over timestep that is ! appropriate for the potential evaporation -,ddtstar(points) & -,dtstar_nir(points) & -,dtstar_irr(points) & -,dtstar_new(points) & -,ashtf_prime_nir(points) & -,ashtf_prime_irr(points) & -,surf_ht_flux_nir & -,surf_ht_flux_irr & ,surf_ht_flux ! Flux of heat from surface to sub-surface ! Scalars diff --git a/src/science/surface/sf_resist_jls.F90 b/src/science/surface/sf_resist_jls.F90 index 0843e256..50315a77 100644 --- a/src/science/surface/sf_resist_jls.F90 +++ b/src/science/surface/sf_resist_jls.F90 @@ -77,6 +77,7 @@ SUBROUTINE sf_resist ( & ! IN Interactive canopy conductance ! ! to evaporation (m/s) ,frac_irr_surft(land_pts) & + ! IN Irrigation fraction in tile ,gc_irr_surft(land_pts) & ! IN canopy conductance over irrigated frac ,gc_stom_surft(land_pts) & diff --git a/src/science/surface/soil_evap_jls.F90 b/src/science/surface/soil_evap_jls.F90 index 1454843c..b348fa1b 100644 --- a/src/science/surface/soil_evap_jls.F90 +++ b/src/science/surface/soil_evap_jls.F90 @@ -50,6 +50,7 @@ SUBROUTINE soil_evap (npnts,nshyd,surft_pts,surft_index, & gsoil(npnts) & ! IN Soil surface conductance (m/s). ,frac_irr(npnts) & + ! IN Irrigation fraction in tile ,lai(npnts) ! IN Leaf area index. From 90e7ffcbb4d478604fbbcb034bcb87a88c7147ff Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Mon, 24 Aug 2026 14:22:51 +0100 Subject: [PATCH 10/31] rose-meta info added --- rose-meta/jules-standalone/HEAD/rose-meta.conf | 8 ++++++++ rose-meta/jules-standalone/versions.py | 8 +++++--- src/control/shared/jules_irrig_mod.F90 | 3 ++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/rose-meta/jules-standalone/HEAD/rose-meta.conf b/rose-meta/jules-standalone/HEAD/rose-meta.conf index e30a27c5..42794694 100644 --- a/rose-meta/jules-standalone/HEAD/rose-meta.conf +++ b/rose-meta/jules-standalone/HEAD/rose-meta.conf @@ -2646,6 +2646,7 @@ trigger=namelist:jules_irrig=irr_crop: .true.; =namelist:jules_irrig=nstep_irrig: .true.; =namelist:jules_irrig_props: .true.; =namelist:jules_irrig=irrig_option: .false.; + =namelist:jules_irrig=l_soil_evap_irrig_expl: .false.; type=logical url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::l_irrig_dmd @@ -2687,6 +2688,13 @@ sort-key=g type=logical url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::set_irrfrac_on_irrtiles +[namelist:jules_irrig=l_soil_evap_irrig_expl] +compulsory=true +description=logical to decide whether bare soil evaporation is calculated over the grid-box mean (false) or explicitly irrigated and non-irrigated fractions (true) +sort-key=h +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::l_soil_evap_irrig_expl + [namelist:jules_irrig_props] compulsory=true description=Configuration of irrigation properties diff --git a/rose-meta/jules-standalone/versions.py b/rose-meta/jules-standalone/versions.py index 1d4c41a9..9e103106 100644 --- a/rose-meta/jules-standalone/versions.py +++ b/rose-meta/jules-standalone/versions.py @@ -49,11 +49,13 @@ class vnYY_txxxx(MacroUpgrade): """Upgrade macro from JULES by Author""" - BEFORE_TAG = "vnY.Y" - AFTER_TAG = "vnY.Y_txxxx" + BEFORE_TAG = "vn8.2" + AFTER_TAG = "vn8.2_t139" def upgrade(self, config, meta_config=None): """Upgrade a JULES runtime app configuration.""" - # Add settings + # Add l_soil_evap_irrig_expl to namelist jules_irrig + self.add_setting(config, ["namelist:jules_irrig","l_soil_evap_irrig_expl"], ".false.") + return config, self.reports diff --git a/src/control/shared/jules_irrig_mod.F90 b/src/control/shared/jules_irrig_mod.F90 index fef9aa7b..cfc8e5c8 100644 --- a/src/control/shared/jules_irrig_mod.F90 +++ b/src/control/shared/jules_irrig_mod.F90 @@ -85,7 +85,8 @@ MODULE jules_irrig_mod !----------------------------------------------------------------------------- NAMELIST / jules_irrig/ l_irrig_dmd, l_irrig_limit, irr_crop, & frac_irrig_all_tiles, nirrtile, irrigtiles, & - set_irrfrac_on_irrtiles, nstep_irrig, irrig_option + set_irrfrac_on_irrtiles, nstep_irrig, irrig_option, & + l_soil_evap_irrig_expl CHARACTER(LEN=*), PARAMETER, PRIVATE :: ModuleName='JULES_IRRIG_MOD' From 8884cf6b85615c27146fdb8d8372fb316600a358 Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Mon, 24 Aug 2026 15:25:25 +0100 Subject: [PATCH 11/31] attempt to remove ashtf_nir and ashtf_irr --- src/science/surface/fcdch.F90 | 5 +---- .../surface/jules_land_sf_explicit_jls.F90 | 15 ++------------- src/science/surface/jules_ssi_sf_explicit_jls.F90 | 9 +-------- src/science/surface/sf_flux_mod.F90 | 5 +---- 4 files changed, 5 insertions(+), 29 deletions(-) diff --git a/src/science/surface/fcdch.F90 b/src/science/surface/fcdch.F90 index 13791f52..c8b57145 100644 --- a/src/science/surface/fcdch.F90 +++ b/src/science/surface/fcdch.F90 @@ -36,7 +36,7 @@ SUBROUTINE fcdch ( & canopy,catch,flake,gc,gc_irr_surft,frac_irr_surft,snowdep,snow,canhc, & dzsurf,qstar,q_elev,radnet,snowdepth,timestep, & t_elev,tsurf,tstar,vfrac,emis,emis_soil, & - anthrop_heat,scaling_urban,alpha1,hcons,ashtf,ashtf_irr,ashtf_nir, & + anthrop_heat,scaling_urban,alpha1,hcons,ashtf, & rhostar,bq_1,bt_1, & cdv,chv,cdv_std,v_s,v_s_std,recip_l_mo,u_s_std & ) @@ -213,8 +213,6 @@ SUBROUTINE fcdch ( & ! IN Soil thermal conductivity (W/m/K). ,ashtf(points) & ! IN Adjusted SEB coefficient -,ashtf_irr(points) & -,ashtf_nir(points) & ,rhostar(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & ! IN Surface air density ,bq_1(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & @@ -629,7 +627,6 @@ SUBROUTINE fcdch ( & points,surft_pts, & pts_index,surft_index, & nsnow,n,canhc,dzsurf,hcons,ashtf, & - ashtf_irr,ashtf_nir,frac_irr_surft, & qstemp,q_elev, & radnet,resft,fracaero_s(:),rhokh,l_soil_point, & snowdepth,timestep,t_elev,tsurf, & diff --git a/src/science/surface/jules_land_sf_explicit_jls.F90 b/src/science/surface/jules_land_sf_explicit_jls.F90 index 44350f62..8edd15ab 100644 --- a/src/science/surface/jules_land_sf_explicit_jls.F90 +++ b/src/science/surface/jules_land_sf_explicit_jls.F90 @@ -958,8 +958,6 @@ SUBROUTINE jules_land_sf_explicit ( & ,ashtf_surft(land_pts,nsurft) & ! Coefficient to calculate surface ! heat flux into soil (W/m2/K). -,ashtf_irr_surft(land_pts,nsurft) & -,ashtf_nir_surft(land_pts,nsurft) & ,lw_down_surftsum(land_pts) & ! Gridbox sum of elevation corrections to ! downward longwave radiation @@ -1971,8 +1969,7 @@ SUBROUTINE jules_land_sf_explicit ( & !$OMP n, m, ts1_lake_gb, hcon_lake, l_elev_land_ice, l_lice_point, & !$OMP tsurf_elev_surft, dzsoil_elev, l_lice_surft, hcondeep, & !$OMP l_moruses_storage, urban_roof, l_fix_moruses_roof_rad_coupling, & -!$OMP vfrac_surft, ashtf_surft, ashtf_irr_surft, ashtf_nir_surft, & -!$OMP scaling_urban, l_soil_point) & +!$OMP vfrac_surft, ashtf_surft, scaling_urban, l_soil_point) & !$OMP SCHEDULE(STATIC) DO l = 1,land_pts j = (land_index(l) - 1) / t_i_length + 1 @@ -2032,13 +2029,9 @@ SUBROUTINE jules_land_sf_explicit ( & ! Set up surface soil condictivity ashtf_surft(l,n) = 2.0 * hcons_surf(l,n) / dzsurf(l,n) - ashtf_nir_surft(l,n) = ashtf_surft(l,n) - ashtf_irr_surft(l,n) = ashtf_surft(l,n) ! Except when n == urban_canyon when MORUSES is used ! scaling_urban(l) = 1.0 ashtf_surft(l,n) = ashtf_surft(l,n) * scaling_urban(l,n) - ashtf_nir_surft(l,n) = ashtf_surft(l,n) - ashtf_irr_surft(l,n) = ashtf_surft(l,n) ! Adjust surface soil condictivity for snow IF (snowdepth_surft(l,n) > 0.0 .AND. l_soil_point(l) & @@ -2326,7 +2319,6 @@ SUBROUTINE jules_land_sf_explicit ( & snowdepth_surft(:,n),timestep,t_elev(:,n),tsurf(:,n),tstar_surft(:,n), & vfrac_surft(:,n),emis_surft(:,n),emis_soil,anthrop_heat_surft(:,n), & scaling_urban(:,n),alpha1(:,n),hcons_surf(:,n),ashtf_surft(:,n), & - ashtf_irr_surft(:,n),ashtf_nir_surft(:,n), & rhostar,bq_1,bt_1, & cd_surft(:,n),ch_surft(:,n),cd_std(:,n), & v_s_surft(:,n),v_s_std(:,n),recip_l_mo_surft(:,n), & @@ -2431,7 +2423,6 @@ SUBROUTINE jules_land_sf_explicit ( & snowdepth_surft(:,n),timestep,t_elev(:,n),tsurf(:,n),tstar_surft(:,n), & vfrac_surft(:,n),emis_surft(:,n),emis_soil,anthrop_heat_surft(:,n), & scaling_urban(:,n),alpha1(:,n),hcons_surf(:,n),ashtf_surft(:,n), & - ashtf_irr_surft(:,n),ashtf_nir_surft(:,n), & rhostar,bq_1,bt_1, & ! Following tiled outputs (except v_s_std_soil and u_s_iter_soil) ! are dummy variables not needed from this call @@ -2499,7 +2490,6 @@ SUBROUTINE jules_land_sf_explicit ( & snowdepth_surft(:,n),timestep,t_elev(:,n),tsurf(:,n),tstar_surft(:,n), & vfrac_surft(:,n),emis_surft(:,n),emis_soil,anthrop_heat_surft(:,n), & scaling_urban(:,n),alpha1(:,n),hcons_surf(:,n),ashtf_surft(:,n), & - ashtf_irr_surft(:,n),ashtf_nir_surft(:,n), & rhostar,bq_1,bt_1, & ! Following tiled outputs (except cd_std_classic and ch_surft_classic) ! are dummy variables not needed from this call @@ -2630,8 +2620,7 @@ SUBROUTINE jules_land_sf_explicit ( & land_pts,surft_pts(n), & land_index,surft_index(:,n), & nsnow_surft(:,n),n,canhc_surf(:,n),dzsurf(:,n),hcons_surf(:,n), & - ashtf_surft(:,n),ashtf_irr_surft(:,n),ashtf_nir_surft(:,n), & - frac_irr_surft(:,n),qstar_surft(:,n),q_elev(:,n), & + ashtf_surft(:,n),qstar_surft(:,n),q_elev(:,n), & radnet_surft(:,n),resft(:,n),fracaero_s(:,n),rhokh_surft(:,n),l_soil_point, & snowdepth_surft(:,n),timestep,t_elev(:,n),tsurf(:,n), & tstar_surft(:,n),vfrac_surft(:,n),rhokh_can(:,n),z0h_surft(:,n), & diff --git a/src/science/surface/jules_ssi_sf_explicit_jls.F90 b/src/science/surface/jules_ssi_sf_explicit_jls.F90 index 3bd03add..024648ab 100644 --- a/src/science/surface/jules_ssi_sf_explicit_jls.F90 +++ b/src/science/surface/jules_ssi_sf_explicit_jls.F90 @@ -1440,7 +1440,7 @@ SUBROUTINE jules_ssi_sf_explicit ( & dzssi,qstar_sea,qw_1,radnet_sea, & array_zero,timestep,tl_1,tstar_sea,tstar_sea, & array_zero,array_emis,array_one,array_zero, & - array_one,alpha1_sea,hcons_sea,ashtf_sea,ashtf_sea,ashtf_sea, & + array_one,alpha1_sea,hcons_sea,ashtf_sea, & rhostar,bq_1,bt_1, & cd_sea,ch_sea,cd_std_sea, & v_s_sea,v_s_std_sea,recip_l_mo_sea, & @@ -1466,7 +1466,6 @@ SUBROUTINE jules_ssi_sf_explicit ( & array_zero,timestep,tl_1,ti_cat(:,:,n),tstar_sice_cat(:,:,n), & array_zero,array_emis,array_one,array_zero, & array_one,alpha1_sice(:,:,n),k_sice(:,:,n),ashtf(:,:,n), & - ashtf(:,:,n),ashtf(:,:,n), & rhostar,bq_1,bt_1, & cd_ice(:,:,n),ch_ice(:,:,n),cd_std_ice(:,n), & v_s_ice(:,:,n),v_s_std_ice(:,n),recip_l_mo_ice(:,:,n), & @@ -1490,7 +1489,6 @@ SUBROUTINE jules_ssi_sf_explicit ( & array_zero,timestep,tl_1,ti_cat(:,:,1),tstar_sice_cat(:,:,1), & array_zero,array_emis,array_one,array_zero, & array_one,alpha1_sice(:,:,1),k_sice(:,:,1),ashtf(:,:,1), & - ashtf(:,:,1),ashtf(:,:,1), & rhostar,bq_1,bt_1, & cd_ice(:,:,1),ch_ice(:,:,1),cd_std_ice(:,1), & v_s_ice(:,:,1),v_s_std_ice(:,1),recip_l_mo_ice(:,:,1), & @@ -1534,7 +1532,6 @@ SUBROUTINE jules_ssi_sf_explicit ( & array_zero,timestep,tl_1,ti_cat(:,:,1),tstar_sice_cat(:,:,1), & array_zero,array_emis,array_one,array_zero, & array_one,alpha1_sice(:,:,1),k_sice(:,:,1),ashtf(:,:,1), & - ashtf(:,:,1),ashtf(:,:,1), & rhostar,bq_1,bt_1, & cd_miz,ch_miz,cd_std_miz, & v_s_miz,v_s_std_miz,recip_l_mo_miz, & @@ -1779,7 +1776,6 @@ SUBROUTINE jules_ssi_sf_explicit ( & ssi_pts,sea_pts, & ssi_index,sea_index, & array_zero_int,0,canhc_sea,dzssi,hcons_sea,ashtf_sea, & - ashtf_sea,ashtf_sea,array_zero, & qstar_sea,qw_1,radnet_sea, & array_one * beta_evap,array_zero,rhokh_sea,array_false,array_zero, & timestep,tl_1,tstar_sea,tstar_sea, & @@ -1825,7 +1821,6 @@ SUBROUTINE jules_ssi_sf_explicit ( & ssi_pts,sea_pts, & ssi_index,sea_index, & array_zero_int,0,canhc_sea,dzssi,hcons_sea,ashtf_sea, & - ashtf_sea,ashtf_sea,array_zero, & qstar_sea,qw_1,radnet_sea, & array_one * beta_evap,array_zero,rhokh_1_sice,array_false,array_zero, & timestep,tl_1,tstar_sea,tstar_sea, & @@ -1921,7 +1916,6 @@ SUBROUTINE jules_ssi_sf_explicit ( & ssi_pts,sice_pts_ncat(n), & ssi_index,sice_index_ncat(:,n), & array_zero_int,0,array_zero,dzdummy,k_sice(:,:,n),ashtf(:,:,n), & - ashtf(:,:,n),ashtf(:,:,n),array_zero, & qstar_ice_cat(:,:,n),qw_1,radnet_sice(:,:,n),array_one,array_one, & rhokh_1_sice_ncats(:,:,n),array_false,array_zero, & timestep,tl_1,ti_cat(:,:,n), & @@ -1957,7 +1951,6 @@ SUBROUTINE jules_ssi_sf_explicit ( & ssi_pts,sice_pts_ncat(1), & ssi_index,sice_index_ncat(:,1), & array_zero_int,0,array_zero,dzdummy,k_sice(:,:,1),ashtf(:,:,1), & - ashtf(:,:,1),ashtf(:,:,1),array_zero, & qstar_ice,qw_1,radnet_sice(:,:,1),array_one,array_one, & rhokh_1_sice_ncats(:,:,1),array_false,array_zero, & timestep,tl_1,ti,tstar_sice_cat(:,:,1), & diff --git a/src/science/surface/sf_flux_mod.F90 b/src/science/surface/sf_flux_mod.F90 index 526480a3..0aa969ca 100644 --- a/src/science/surface/sf_flux_mod.F90 +++ b/src/science/surface/sf_flux_mod.F90 @@ -14,7 +14,7 @@ MODULE sf_flux_mod CONTAINS SUBROUTINE sf_flux ( & points,surft_pts,pts_index,surft_index, & - nsnow,n,canhc,dzsurf,hcons,ashtf,ashtf_irr,ashtf_nir,frac_irr, & + nsnow,n,canhc,dzsurf,hcons,ashtf, & qstar,q_elev,radnet,resft,fracs, & rhokh_1,l_soil_point,snowdepth,timestep, & t_elev,ts1_elev,tstar,vfrac,rhokh_can, & @@ -72,9 +72,6 @@ SUBROUTINE sf_flux ( & ,ashtf(points) & ! IN Coefficient to calculate surface ! heat flux into soil (W/m2/K). -,ashtf_irr(points) & -,ashtf_nir(points) & -,frac_irr(points) & ,qstar(points) & ! IN Surface qsat. ,q_elev(points) & From ac7b60d5db1f4bfacc7d88880222c3305ab083b7 Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Mon, 24 Aug 2026 15:31:44 +0100 Subject: [PATCH 12/31] remove inconsistent variables in calls to fcdch --- src/science/surface/fcdch.F90 | 1 - src/science/surface/jules_ssi_sf_explicit_jls.F90 | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/science/surface/fcdch.F90 b/src/science/surface/fcdch.F90 index c8b57145..761289eb 100644 --- a/src/science/surface/fcdch.F90 +++ b/src/science/surface/fcdch.F90 @@ -1049,7 +1049,6 @@ SUBROUTINE fcdch ( & points,surft_pts, & pts_index,surft_index, & nsnow,n,canhc,dzsurf,hcons,ashtf, & - ashtf,ashtf,frac_irr_surft, & qstemp,q_elev, & radnet,resft,fracaero_s(:),rhokh,l_soil_point, & snowdepth,timestep,t_elev,tsurf, & diff --git a/src/science/surface/jules_ssi_sf_explicit_jls.F90 b/src/science/surface/jules_ssi_sf_explicit_jls.F90 index 024648ab..0c536dbb 100644 --- a/src/science/surface/jules_ssi_sf_explicit_jls.F90 +++ b/src/science/surface/jules_ssi_sf_explicit_jls.F90 @@ -1436,7 +1436,7 @@ SUBROUTINE jules_ssi_sf_explicit ( & l_vegdrag_ssi,array_zero,array_zero, & array_zero_int,0,.FALSE.,.FALSE.,array_false, & array_zero,array_zero,array_zero,array_zero, & - array_zero,array_zero,array_zero,array_zero,canhc_sea, & + array_zero,array_zero,canhc_sea, & dzssi,qstar_sea,qw_1,radnet_sea, & array_zero,timestep,tl_1,tstar_sea,tstar_sea, & array_zero,array_emis,array_one,array_zero, & @@ -1461,7 +1461,7 @@ SUBROUTINE jules_ssi_sf_explicit ( & l_vegdrag_ssi,array_zero,array_zero, & array_zero_int,0,.FALSE.,.FALSE.,array_false, & array_zero,array_zero,array_zero,array_zero, & - array_zero,array_zero,array_zero,array_zero,array_zero, & + array_zero,array_zero,array_zero, & dzdummy,qstar_ice_cat(:,:,n),qw_1,radnet_sice(:,:,n), & array_zero,timestep,tl_1,ti_cat(:,:,n),tstar_sice_cat(:,:,n), & array_zero,array_emis,array_one,array_zero, & @@ -1484,7 +1484,7 @@ SUBROUTINE jules_ssi_sf_explicit ( & l_vegdrag_ssi,array_zero,array_zero, & array_zero_int,0,.FALSE.,.FALSE.,array_false, & array_zero,array_zero,array_zero,array_zero, & - array_zero,array_zero,array_zero,array_zero,array_zero, & + array_zero,array_zero,array_zero, & dzdummy,qstar_ice_cat(:,:,1),qw_1,radnet_sice(:,:,1), & array_zero,timestep,tl_1,ti_cat(:,:,1),tstar_sice_cat(:,:,1), & array_zero,array_emis,array_one,array_zero, & @@ -1527,7 +1527,7 @@ SUBROUTINE jules_ssi_sf_explicit ( & l_vegdrag_ssi,array_zero,array_zero, & array_zero_int,0,.FALSE.,.FALSE.,array_false, & array_zero,array_zero,array_zero,array_zero, & - array_zero,array_zero,array_zero,array_zero,array_zero, & + array_zero,array_zero,array_zero, & dzdummy,qstar_ice_cat(:,:,1),qw_1,radnet_sice(:,:,1), & array_zero,timestep,tl_1,ti_cat(:,:,1),tstar_sice_cat(:,:,1), & array_zero,array_emis,array_one,array_zero, & From 098437946be0cd6ca4deb15c53a12932aa26ff15 Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Tue, 25 Aug 2026 15:03:11 +0100 Subject: [PATCH 13/31] added text to documentation --- doc/source/namelists/jules_irrig.nml.rst | 18 ++++++++++++++++++ .../surface/jules_ssi_sf_explicit_jls.F90 | 8 ++++---- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/doc/source/namelists/jules_irrig.nml.rst b/doc/source/namelists/jules_irrig.nml.rst index e1c55478..dd017f3b 100644 --- a/doc/source/namelists/jules_irrig.nml.rst +++ b/doc/source/namelists/jules_irrig.nml.rst @@ -148,6 +148,24 @@ This namelist specifies the different options available for setting up the irrig :nml:mem:`nstep_irrig` = NINT(frequency of irrigation update (in sec)) / :nml:mem:`JULES_TIME::timestep_len` +.. nml:member:: l_soil_evap_irrig_expl + + :type: logical + :default: F + + Switch controlling whether the bare soil evaporation from the irrigated and non-irrigated part of the grid-box (or soil tile) is controlled by the mean soil moisture or the separate irrigated and non-irrigated soil moisture columns. + + TRUE + Bare soil evaporation is explicitly calculated from the irrigated and non-irrigated soil moisture columns. + + FALSE + No effect. + + This must be set to FALSE if :nml:mem:`JULES_IRRIG::irrig_option` = 0. + This must be set to FALSE if :nml:mem:`JULES_IRRIG::irrig_option` = 2. + + + .. _References_irrig: ``JULES_IRRIG`` references diff --git a/src/science/surface/jules_ssi_sf_explicit_jls.F90 b/src/science/surface/jules_ssi_sf_explicit_jls.F90 index 0c536dbb..d17e15ce 100644 --- a/src/science/surface/jules_ssi_sf_explicit_jls.F90 +++ b/src/science/surface/jules_ssi_sf_explicit_jls.F90 @@ -1436,7 +1436,7 @@ SUBROUTINE jules_ssi_sf_explicit ( & l_vegdrag_ssi,array_zero,array_zero, & array_zero_int,0,.FALSE.,.FALSE.,array_false, & array_zero,array_zero,array_zero,array_zero, & - array_zero,array_zero,canhc_sea, & + array_zero,array_zero,array_zero,array_zero,canhc_sea, & dzssi,qstar_sea,qw_1,radnet_sea, & array_zero,timestep,tl_1,tstar_sea,tstar_sea, & array_zero,array_emis,array_one,array_zero, & @@ -1461,7 +1461,7 @@ SUBROUTINE jules_ssi_sf_explicit ( & l_vegdrag_ssi,array_zero,array_zero, & array_zero_int,0,.FALSE.,.FALSE.,array_false, & array_zero,array_zero,array_zero,array_zero, & - array_zero,array_zero,array_zero, & + array_zero,array_zero,array_zero,array_zero,array_zero, & dzdummy,qstar_ice_cat(:,:,n),qw_1,radnet_sice(:,:,n), & array_zero,timestep,tl_1,ti_cat(:,:,n),tstar_sice_cat(:,:,n), & array_zero,array_emis,array_one,array_zero, & @@ -1484,7 +1484,7 @@ SUBROUTINE jules_ssi_sf_explicit ( & l_vegdrag_ssi,array_zero,array_zero, & array_zero_int,0,.FALSE.,.FALSE.,array_false, & array_zero,array_zero,array_zero,array_zero, & - array_zero,array_zero,array_zero, & + array_zero,array_zero,array_zero,array_zero,array_zero, & dzdummy,qstar_ice_cat(:,:,1),qw_1,radnet_sice(:,:,1), & array_zero,timestep,tl_1,ti_cat(:,:,1),tstar_sice_cat(:,:,1), & array_zero,array_emis,array_one,array_zero, & @@ -1527,7 +1527,7 @@ SUBROUTINE jules_ssi_sf_explicit ( & l_vegdrag_ssi,array_zero,array_zero, & array_zero_int,0,.FALSE.,.FALSE.,array_false, & array_zero,array_zero,array_zero,array_zero, & - array_zero,array_zero,array_zero, & + array_zero,array_zero,array_zero,array_zero,array_zero, & dzdummy,qstar_ice_cat(:,:,1),qw_1,radnet_sice(:,:,1), & array_zero,timestep,tl_1,ti_cat(:,:,1),tstar_sice_cat(:,:,1), & array_zero,array_emis,array_one,array_zero, & From 07a99353228bc2988d0bbe7c99e176cf7271c6cf Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Tue, 25 Aug 2026 16:15:02 +0100 Subject: [PATCH 14/31] ran umdp3_fixer.py --- .../surface/jules_ssi_sf_explicit_jls.F90 | 8 +- src/science/surface/physiol_jls_mod.F90 | 246 +++++++++--------- src/science/surface/sf_evap_jls.F90 | 70 ++--- src/science/surface/sf_resist_jls.F90 | 48 ++-- 4 files changed, 186 insertions(+), 186 deletions(-) diff --git a/src/science/surface/jules_ssi_sf_explicit_jls.F90 b/src/science/surface/jules_ssi_sf_explicit_jls.F90 index d17e15ce..024648ab 100644 --- a/src/science/surface/jules_ssi_sf_explicit_jls.F90 +++ b/src/science/surface/jules_ssi_sf_explicit_jls.F90 @@ -1436,7 +1436,7 @@ SUBROUTINE jules_ssi_sf_explicit ( & l_vegdrag_ssi,array_zero,array_zero, & array_zero_int,0,.FALSE.,.FALSE.,array_false, & array_zero,array_zero,array_zero,array_zero, & - array_zero,array_zero,array_zero,array_zero,canhc_sea, & + array_zero,array_zero,array_zero,array_zero,canhc_sea, & dzssi,qstar_sea,qw_1,radnet_sea, & array_zero,timestep,tl_1,tstar_sea,tstar_sea, & array_zero,array_emis,array_one,array_zero, & @@ -1461,7 +1461,7 @@ SUBROUTINE jules_ssi_sf_explicit ( & l_vegdrag_ssi,array_zero,array_zero, & array_zero_int,0,.FALSE.,.FALSE.,array_false, & array_zero,array_zero,array_zero,array_zero, & - array_zero,array_zero,array_zero,array_zero,array_zero, & + array_zero,array_zero,array_zero,array_zero,array_zero, & dzdummy,qstar_ice_cat(:,:,n),qw_1,radnet_sice(:,:,n), & array_zero,timestep,tl_1,ti_cat(:,:,n),tstar_sice_cat(:,:,n), & array_zero,array_emis,array_one,array_zero, & @@ -1484,7 +1484,7 @@ SUBROUTINE jules_ssi_sf_explicit ( & l_vegdrag_ssi,array_zero,array_zero, & array_zero_int,0,.FALSE.,.FALSE.,array_false, & array_zero,array_zero,array_zero,array_zero, & - array_zero,array_zero,array_zero,array_zero,array_zero, & + array_zero,array_zero,array_zero,array_zero,array_zero, & dzdummy,qstar_ice_cat(:,:,1),qw_1,radnet_sice(:,:,1), & array_zero,timestep,tl_1,ti_cat(:,:,1),tstar_sice_cat(:,:,1), & array_zero,array_emis,array_one,array_zero, & @@ -1527,7 +1527,7 @@ SUBROUTINE jules_ssi_sf_explicit ( & l_vegdrag_ssi,array_zero,array_zero, & array_zero_int,0,.FALSE.,.FALSE.,array_false, & array_zero,array_zero,array_zero,array_zero, & - array_zero,array_zero,array_zero,array_zero,array_zero, & + array_zero,array_zero,array_zero,array_zero,array_zero, & dzdummy,qstar_ice_cat(:,:,1),qw_1,radnet_sice(:,:,1), & array_zero,timestep,tl_1,ti_cat(:,:,1),tstar_sice_cat(:,:,1), & array_zero,array_emis,array_one,array_zero, & diff --git a/src/science/surface/physiol_jls_mod.F90 b/src/science/surface/physiol_jls_mod.F90 index c952ab89..2bb82918 100644 --- a/src/science/surface/physiol_jls_mod.F90 +++ b/src/science/surface/physiol_jls_mod.F90 @@ -811,24 +811,24 @@ SUBROUTINE physiol ( & END DO IF (l_soil_evap_irrig_expl) THEN - DO k = 1,sm_levels - DO m = 1,nsoilt - DO l = 1,land_pts - sthu_nir_soilt(l,m,k) = sthu_soilt(l,m,k) - IF ( l_irrig_dmd ) THEN - sthu_nir_soilt(l,m,k) = sthu_soilt(l,m,k) - IF ( frac_irr_soilt(l,m) < 1.0 ) THEN - sthu_nir_soilt(l,m,k) = & - (sthu_soilt(l,m,k) - frac_irr_soilt(l,m) & - * sthu_irr_soilt(l,m,k)) & - / (1.0 - frac_irr_soilt(l,m)) - ELSE - sthu_nir_soilt(l,m,k) = sthu_irr_soilt(l,m,k) - END IF - END IF - END DO + DO k = 1,sm_levels + DO m = 1,nsoilt + DO l = 1,land_pts + sthu_nir_soilt(l,m,k) = sthu_soilt(l,m,k) + IF ( l_irrig_dmd ) THEN + sthu_nir_soilt(l,m,k) = sthu_soilt(l,m,k) + IF ( frac_irr_soilt(l,m) < 1.0 ) THEN + sthu_nir_soilt(l,m,k) = & + (sthu_soilt(l,m,k) - frac_irr_soilt(l,m) & + * sthu_irr_soilt(l,m,k)) & + / (1.0 - frac_irr_soilt(l,m)) + ELSE + sthu_nir_soilt(l,m,k) = sthu_irr_soilt(l,m,k) + END IF + END IF END DO - END DO + END DO + END DO END IF DO n = 1,ntype @@ -838,9 +838,9 @@ SUBROUTINE physiol ( & IF (l_irrig_dmd) THEN gs_irr_type(l,n) = gs(l) IF ( l_soil_evap_irrig_expl ) THEN - gs_nir_type(l,n) = gs(l) + gs_nir_type(l,n) = gs(l) END IF - END IF + END IF END DO !$OMP END DO NOWAIT END DO @@ -881,14 +881,14 @@ SUBROUTINE physiol ( & IF ( l_soil_evap_irrig_expl ) THEN gsoil_nir_soilt(l,m) = 0.0 IF (smvccl_soilt(l,m,1) > 0.0 .AND. l_limit_gsoil) THEN - gsoil_nir_soilt(l,m) = gs_nvg(soil - npft) * & - MIN(1.0, (sthu_nir_soilt(l,m,1) & - * smvcst_soilt(l,m,1) / smvccl_soilt(l,m,1))**2) + gsoil_nir_soilt(l,m) = gs_nvg(soil - npft) * & + MIN(1.0, (sthu_nir_soilt(l,m,1) & + * smvcst_soilt(l,m,1) / smvccl_soilt(l,m,1))**2) ELSE IF (smvccl_soilt(l,m,1) > 0.0) THEN - gsoil_nir_soilt(l,m) = gs_nvg(soil - npft) * & - (sthu_nir_soilt(l,m,1) & - * smvcst_soilt(l,m,1) / smvccl_soilt(l,m,1))**2 - ! ELSE Do nothing + gsoil_nir_soilt(l,m) = gs_nvg(soil - npft) * & + (sthu_nir_soilt(l,m,1) & + * smvcst_soilt(l,m,1) / smvccl_soilt(l,m,1))**2 + ! ELSE Do nothing END IF END IF END DO @@ -908,8 +908,8 @@ SUBROUTINE physiol ( & cosz_gb(l) = cos_zenith_angle(i,j) fsoil_tot(l) = frac(l,soil) IF ( l_soil_evap_irrig_expl ) THEN - fsoil_irr_tot(l) = frac(l,soil)*frac_irr_surft(l,soil) - fsoil_nir_tot(l) = frac(l,soil)*(1.-frac_irr_surft(l,soil)) + fsoil_irr_tot(l) = frac(l,soil)*frac_irr_surft(l,soil) + fsoil_nir_tot(l) = frac(l,soil)*(1.0-frac_irr_surft(l,soil)) END IF gs(l) = 0.0 END DO @@ -1096,22 +1096,22 @@ SUBROUTINE physiol ( & IF ( l_irrig_dmd ) THEN !$OMP DO SCHEDULE(STATIC) DO l = 1,land_pts - IF ( l_soil_evap_irrig_expl ) THEN - sthu_surft(l,m,k) = frac_irr_surft(l,n) * sthu_irr_soilt(l,m,k) & - + (1.0 - frac_irr_surft(l,n)) * sthu_nir_soilt(l,m,k) - ELSE -! MAY Be ABLE to remove the following section (calc of sthu_nir done above with l_bare_soil_evap_irr)*** check with rose stem?*** - sthu_nir_soilt(l,m,k) = sthu_soilt(l,m,k) - IF ( frac_irr_soilt(l,m) < 1.0 ) THEN - sthu_nir_soilt(l,m,k) = (sthu_soilt(l,m,k) - frac_irr_soilt(l,m)& - * sthu_irr_soilt(l,m,k)) & - / (1.0 - frac_irr_soilt(l,m)) - ELSE - sthu_nir_soilt(l,m,k) = sthu_irr_soilt(l,m,k) - END IF - sthu_surft(l,m,k) = frac_irr_surft(l,n) * sthu_irr_soilt(l,m,k) & - + (1.0 - frac_irr_surft(l,n)) * sthu_nir_soilt(l,m,k) - END IF + IF ( l_soil_evap_irrig_expl ) THEN + sthu_surft(l,m,k) = frac_irr_surft(l,n) * sthu_irr_soilt(l,m,k) & + + (1.0 - frac_irr_surft(l,n)) * sthu_nir_soilt(l,m,k) + ELSE + ! MAY Be ABLE to remove the following section (calc of sthu_nir done above with l_bare_soil_evap_irr)*** check with rose stem?*** + sthu_nir_soilt(l,m,k) = sthu_soilt(l,m,k) + IF ( frac_irr_soilt(l,m) < 1.0 ) THEN + sthu_nir_soilt(l,m,k) = (sthu_soilt(l,m,k) - frac_irr_soilt(l,m) & + * sthu_irr_soilt(l,m,k)) & + / (1.0 - frac_irr_soilt(l,m)) + ELSE + sthu_nir_soilt(l,m,k) = sthu_irr_soilt(l,m,k) + END IF + sthu_surft(l,m,k) = frac_irr_surft(l,n) * sthu_irr_soilt(l,m,k) & + + (1.0 - frac_irr_surft(l,n)) * sthu_nir_soilt(l,m,k) + END IF END DO !$OMP END DO END IF @@ -1160,25 +1160,25 @@ SUBROUTINE physiol ( & psi_root_zone_pft(:,n)) IF ( l_soil_evap_irrig_expl ) THEN - CALL smc_ext (land_pts,sm_levels,surft_pts(n),surft_index(:,n), n, & - f_root,sthu_nir_soilt(:,m,:), & - v_open,smvcst_soilt(:,m,:), & - v_close, & - bexp_soilt(:,m,:), sathh_soilt(:,m,:), & - wt_ext_nir_type(:,:,n),fsmc_nir(:,n), & - psi_root_zone_pft(:,n)) - - DO l = 1,land_pts - fsmc_pft(l,n) = fsmc_nir(l,n)*(1.-frac_irr_surft(l,n)) & - + fsmc_irr(l,n)*frac_irr_surft(l,n) - DO k = 1,sm_levels - wt_ext_type(l,k,n) = & - wt_ext_nir_type(l,k,n)*(1.-frac_irr_surft(l,n)) & - + wt_ext_irr_type(l,k,n)*frac_irr_surft(l,n) - END DO - END DO + CALL smc_ext (land_pts,sm_levels,surft_pts(n),surft_index(:,n), n, & + f_root,sthu_nir_soilt(:,m,:), & + v_open,smvcst_soilt(:,m,:), & + v_close, & + bexp_soilt(:,m,:), sathh_soilt(:,m,:), & + wt_ext_nir_type(:,:,n),fsmc_nir(:,n), & + psi_root_zone_pft(:,n)) + + DO l = 1,land_pts + fsmc_pft(l,n) = fsmc_nir(l,n)*(1.0-frac_irr_surft(l,n)) & + + fsmc_irr(l,n)*frac_irr_surft(l,n) + DO k = 1,sm_levels + wt_ext_type(l,k,n) = & + wt_ext_nir_type(l,k,n)*(1.0-frac_irr_surft(l,n)) & + + wt_ext_irr_type(l,k,n)*frac_irr_surft(l,n) + END DO + END DO END IF - END IF + END IF CALL raero (land_pts,land_index,surft_pts(n),surft_index(:,n) & , rib,vshr,z0,z0,z1_uv_ij,ra) @@ -1295,9 +1295,9 @@ SUBROUTINE physiol ( & IF ( fsmc_pft(l,n) > 0.0 ) THEN gs_irr_type(l,n) = gs_type(l,n) * fsmc_irr(l,n) / fsmc_pft(l,n) IF ( l_soil_evap_irrig_expl ) THEN - gs_nir_type(l,n) = gs_type(l,n) * fsmc_nir(l,n) / fsmc_pft(l,n) + gs_nir_type(l,n) = gs_type(l,n) * fsmc_nir(l,n) / fsmc_pft(l,n) END IF - + ELSE ! hadrd - this should only happen if sthu is 0.0, see smc_ext WRITE (ERRMSG,*) 'tile:', n, 'point:',l, 'fsmc:', fsmc_pft(l,n), & @@ -1327,13 +1327,13 @@ SUBROUTINE physiol ( & gsoil_under_canopy(:) = gsoil_soilt(:,m) gsoil_irr_under_canopy(:) = gsoil_irr_soilt(:,m) IF ( l_soil_evap_irrig_expl ) THEN - gsoil_nir_under_canopy(:) = gsoil_nir_soilt(:,m) + gsoil_nir_under_canopy(:) = gsoil_nir_soilt(:,m) END IF - ELSE + ELSE gsoil_under_canopy(:) = gsoil_soilt(:,m) * gsoil_f(n) gsoil_irr_under_canopy(:) = gsoil_irr_soilt(:,m) * gsoil_f(n) IF ( l_soil_evap_irrig_expl ) THEN - gsoil_nir_under_canopy(:) = gsoil_nir_soilt(:,m) * gsoil_f(n) + gsoil_nir_under_canopy(:) = gsoil_nir_soilt(:,m) * gsoil_f(n) END IF END IF @@ -1361,13 +1361,13 @@ SUBROUTINE physiol ( & DO l = 1,land_pts fsoil_tot(l) = fsoil_tot(l) + frac(l,n) * fsoil(l,n) IF ( l_soil_evap_irrig_expl ) THEN - fsoil_irr_tot(l) = fsoil_irr_tot(l) + frac(l,n) * fsoil(l,n) * & - frac_irr_surft(l,n) - fsoil_nir_tot(l) = fsoil_nir_tot(l) + frac(l,n) * fsoil(l,n) * & - (1.-frac_irr_surft(l,n)) + fsoil_irr_tot(l) = fsoil_irr_tot(l) + frac(l,n) * fsoil(l,n) * & + frac_irr_surft(l,n) + fsoil_nir_tot(l) = fsoil_nir_tot(l) + frac(l,n) * fsoil(l,n) * & + (1.0-frac_irr_surft(l,n)) END IF - END DO + END DO !$OMP END PARALLEL DO END DO @@ -1391,7 +1391,7 @@ SUBROUTINE physiol ( & IF (l_irrig_dmd) THEN gs_irr_type(l,n) = gs_nvg(n - npft) ! irrigation IF (l_soil_evap_irrig_expl ) THEN - gs_nir_type(l,n) = gs_nvg(n - npft) ! non-irrigation + gs_nir_type(l,n) = gs_nvg(n - npft) ! non-irrigation END IF END IF END DO @@ -1446,7 +1446,7 @@ SUBROUTINE physiol ( & wt_ext_type(l,1,n) = 1.0 END IF IF (l_irrig_dmd) THEN - IF ( l_soil_evap_irrig_expl )THEN + IF ( l_soil_evap_irrig_expl ) THEN gs_type(l,n) = frac_irr_surft(l,n)*gsoil_irr_soilt(l,m) & +(1.0-frac_irr_surft(l,n))*gsoil_nir_soilt(l,m) gs_nir_type(l,n) = gsoil_nir_soilt(l,m) ! non-irrigation @@ -1760,18 +1760,18 @@ SUBROUTINE physiol ( & * frac(l,n) * wt_ext_irr_type(l,k,n) END IF IF ( l_soil_evap_irrig_expl) THEN - IF ((1.-frac_irr_soilt(l,m)) > EPSILON(1.0)) THEN + IF ((1.0-frac_irr_soilt(l,m)) > EPSILON(1.0)) THEN wt_ext_nir_soilt(l,m,k) = wt_ext_nir_soilt(l,m,k) & - + (1.-frac_irr_surft(l,n)) & - / (1.-frac_irr_soilt(l,m)) & + + (1.0-frac_irr_surft(l,n)) & + / (1.0-frac_irr_soilt(l,m)) & * frac(l,n) * wt_ext_nir_type(l,k,n) - END IF - wt_ext_soilt(l,m,k) = frac_irr_soilt(l,m)*wt_ext_irr_soilt(l,m,k) & - + (1.-frac_irr_soilt(l,m)) & - * wt_ext_nir_soilt(l,m,k) + END IF + wt_ext_soilt(l,m,k) = frac_irr_soilt(l,m)*wt_ext_irr_soilt(l,m,k) & + + (1.0-frac_irr_soilt(l,m)) & + * wt_ext_nir_soilt(l,m,k) - END IF - END IF + END IF + END IF END DO END DO !$OMP END PARALLEL DO @@ -1882,15 +1882,15 @@ SUBROUTINE physiol ( & END IF wt_ext_irr_surft(l,k,n) = wt_ext_irr_type(l,k,n) IF (l_soil_evap_irrig_expl) THEN - IF ((1.-frac_irr_soilt(l,m)) > EPSILON(1.0)) THEN - wt_ext_nir_soilt(l,m,k) = wt_ext_nir_soilt(l,m,k) & - + (1.-frac_irr_surft(l,n)) & - / (1.-frac_irr_soilt(l,m)) & - * frac(l,n) * wt_ext_nir_type(l,k,n) - END IF - wt_ext_soilt(l,m,k) = frac_irr_soilt(l,m)*wt_ext_irr_soilt(l,m,k) & - + (1.-frac_irr_soilt(l,m)) & - * wt_ext_nir_soilt(l,m,k) + IF ((1.0-frac_irr_soilt(l,m)) > EPSILON(1.0)) THEN + wt_ext_nir_soilt(l,m,k) = wt_ext_nir_soilt(l,m,k) & + + (1.0-frac_irr_surft(l,n)) & + / (1.0-frac_irr_soilt(l,m)) & + * frac(l,n) * wt_ext_nir_type(l,k,n) + END IF + wt_ext_soilt(l,m,k) = frac_irr_soilt(l,m)*wt_ext_irr_soilt(l,m,k) & + + (1.0-frac_irr_soilt(l,m)) & + * wt_ext_nir_soilt(l,m,k) END IF END IF END DO !sm_levels @@ -2192,10 +2192,10 @@ SUBROUTINE physiol ( & - v_close_pft(l,k,n))) END IF IF (l_soil_evap_irrig_expl) THEN - IF (1. - frac_irr_soilt(l,m) > EPSILON(1.0) ) THEN + IF (1.0 - frac_irr_soilt(l,m) > EPSILON(1.0) ) THEN smc_nir_soilt(l,m) = smc_nir_soilt(l,m) & - + MAX(0.0,(1.-frac_irr_surft(l,n)) & - / (1.-frac_irr_soilt(l,m)) & + + MAX(0.0,(1.0-frac_irr_surft(l,n)) & + / (1.0-frac_irr_soilt(l,m)) & * frac(l,n) * wt_ext_nir_type(l,k,n) & * rho_water * dzsoil(k) & * (sthu_nir_soilt(l,m,k) & @@ -2249,34 +2249,34 @@ SUBROUTINE physiol ( & !$OMP frac_irr_surft, l_soil_evap_irrig_expl) DO m = 1,nsoilt !$OMP DO SCHEDULE(STATIC) - DO l = 1,land_pts - IF (l_soil_evap_irrig_expl) THEN - IF (frac_irr_soilt(l,m) > 0.0) THEN - fsoil_irr_tot(l) = fsoil_irr_tot(l)/frac_irr_soilt(l,m) - smc_irr_soilt(l,m) = (1.0 - fsoil_irr_tot(l) ) * & - smc_irr_soilt(l,m) + fsoil_irr_tot(l) * & - rho_water * dzsoil(1) * & - MAX(0.0,sthu_irr_soilt(l,m,1)) * smvcst_soilt(l,m,1) - ELSE - smc_irr_soilt(l,m) = 0.0 - END IF - IF (1.0 - frac_irr_soilt(l,m) > 0.0) THEN - fsoil_nir_tot(l) = fsoil_nir_tot(l)/(1.-frac_irr_soilt(l,m)) - smc_nir_soilt(l,m) = (1.0 - fsoil_nir_tot(l)) * & - smc_nir_soilt(l,m) + fsoil_nir_tot(l) * & - rho_water * dzsoil(1) * & - MAX(0.0,sthu_nir_soilt(l,m,1)) * smvcst_soilt(l,m,1) - ELSE - smc_nir_soilt(l,m) = 0.0 - END IF - - smc_soilt(l,m) = frac_irr_soilt(l,m) * smc_irr_soilt(l,m) + & - (1.0 - frac_irr_soilt(l,m)) * smc_nir_soilt(l,m) - ELSE - smc_irr_soilt(l,m) = (1.0 - fsoil_tot(l)) * smc_irr_soilt(l,m) + & - fsoil_tot(l) * rho_water * dzsoil(1) * & - MAX(0.0,sthu_irr_soilt(l,m,1)) * smvcst_soilt(l,m,1) - END IF + DO l = 1,land_pts + IF (l_soil_evap_irrig_expl) THEN + IF (frac_irr_soilt(l,m) > 0.0) THEN + fsoil_irr_tot(l) = fsoil_irr_tot(l)/frac_irr_soilt(l,m) + smc_irr_soilt(l,m) = (1.0 - fsoil_irr_tot(l) ) * & + smc_irr_soilt(l,m) + fsoil_irr_tot(l) * & + rho_water * dzsoil(1) * & + MAX(0.0,sthu_irr_soilt(l,m,1)) * smvcst_soilt(l,m,1) + ELSE + smc_irr_soilt(l,m) = 0.0 + END IF + IF (1.0 - frac_irr_soilt(l,m) > 0.0) THEN + fsoil_nir_tot(l) = fsoil_nir_tot(l)/(1.0-frac_irr_soilt(l,m)) + smc_nir_soilt(l,m) = (1.0 - fsoil_nir_tot(l)) * & + smc_nir_soilt(l,m) + fsoil_nir_tot(l) * & + rho_water * dzsoil(1) * & + MAX(0.0,sthu_nir_soilt(l,m,1)) * smvcst_soilt(l,m,1) + ELSE + smc_nir_soilt(l,m) = 0.0 + END IF + + smc_soilt(l,m) = frac_irr_soilt(l,m) * smc_irr_soilt(l,m) + & + (1.0 - frac_irr_soilt(l,m)) * smc_nir_soilt(l,m) + ELSE + smc_irr_soilt(l,m) = (1.0 - fsoil_tot(l)) * smc_irr_soilt(l,m) + & + fsoil_tot(l) * rho_water * dzsoil(1) * & + MAX(0.0,sthu_irr_soilt(l,m,1)) * smvcst_soilt(l,m,1) + END IF END DO !$OMP END DO END DO diff --git a/src/science/surface/sf_evap_jls.F90 b/src/science/surface/sf_evap_jls.F90 index 1c4b0534..57b3e723 100644 --- a/src/science/surface/sf_evap_jls.F90 +++ b/src/science/surface/sf_evap_jls.F90 @@ -700,7 +700,7 @@ SUBROUTINE sf_evap ( & ext_soilt(l,:,m) = 0.0 ext_irr_soilt(l,:,m) = 0.0 IF ( l_soil_evap_irrig_expl ) THEN - ext_nir_soilt(l,:,m) = 0.0 + ext_nir_soilt(l,:,m) = 0.0 END IF END DO !$OMP END DO @@ -723,14 +723,14 @@ SUBROUTINE sf_evap ( & ext_soilt(l,mm,m) = ext_soilt(l,mm,m) & + tile_frac(l,n) * wt_ext_surft(l,m,n) & * esoil_surft(l,n) - + IF ( l_soil_evap_irrig_expl ) THEN - wt_ext_nir_surft(l,m,n) = wt_ext_surft(l,m,n) - IF (1.- frac_irr_surft(l,n) > EPSILON(1.0) ) THEN - wt_ext_nir_surft(l,m,n) = (wt_ext_surft(l,m,n) - & - wt_ext_irr_surft(l,m,n) * frac_irr_surft(l,n)) / & - (1.- frac_irr_surft(l,n)) - END IF + wt_ext_nir_surft(l,m,n) = wt_ext_surft(l,m,n) + IF (1.0- frac_irr_surft(l,n) > EPSILON(1.0) ) THEN + wt_ext_nir_surft(l,m,n) = (wt_ext_surft(l,m,n) - & + wt_ext_irr_surft(l,m,n) * frac_irr_surft(l,n)) / & + (1.0- frac_irr_surft(l,n)) + END IF END IF END DO !$OMP END DO @@ -785,20 +785,20 @@ SUBROUTINE sf_evap ( & DO k = 1,surft_pts(n) l = surft_index(k,n) IF ( l_soil_evap_irrig_expl ) THEN - wt_ext_nir_surft(l,m,n) = wt_ext_surft(l,m,n) - IF ((1.- frac_irr_surft(l,n)) > EPSILON(1.0) ) THEN - wt_ext_nir_surft(l,m,n) = (wt_ext_surft(l,m,n) - & - wt_ext_irr_surft(l,m,n) * frac_irr_surft(l,n)) / & - (1.- frac_irr_surft(l,n)) - END IF - IF (1. - frac_irr_soilt(l,mm) > EPSILON(1.0) ) THEN - ext_nir_soilt(l,mm,m) = ext_nir_soilt(l,mm,m) & - + tile_frac(l,n) & - * wt_ext_nir_surft(l,m,n) & - * esoil_nir_surft(l,n) & - * (1.0 - frac_irr_surft(l,n)) & - / (1.0 - frac_irr_soilt(l,mm)) - END IF + wt_ext_nir_surft(l,m,n) = wt_ext_surft(l,m,n) + IF ((1.0- frac_irr_surft(l,n)) > EPSILON(1.0) ) THEN + wt_ext_nir_surft(l,m,n) = (wt_ext_surft(l,m,n) - & + wt_ext_irr_surft(l,m,n) * frac_irr_surft(l,n)) / & + (1.0- frac_irr_surft(l,n)) + END IF + IF (1.0 - frac_irr_soilt(l,mm) > EPSILON(1.0) ) THEN + ext_nir_soilt(l,mm,m) = ext_nir_soilt(l,mm,m) & + + tile_frac(l,n) & + * wt_ext_nir_surft(l,m,n) & + * esoil_nir_surft(l,n) & + * (1.0 - frac_irr_surft(l,n)) & + / (1.0 - frac_irr_soilt(l,mm)) + END IF END IF IF ( frac_irr_soilt(l,mm) > EPSILON(1.0) ) THEN @@ -822,19 +822,19 @@ SUBROUTINE sf_evap ( & l = surft_index(k,n) IF ( l_soil_evap_irrig_expl ) THEN - wt_ext_nir_surft(l,m,n) = wt_ext_surft(l,m,n) - IF (1.- frac_irr_surft(l,n) > EPSILON(1.0) ) THEN - wt_ext_nir_surft(l,m,n) = (wt_ext_surft(l,m,n) - & - wt_ext_irr_surft(l,m,n) * frac_irr_surft(l,n)) / & - (1.- frac_irr_surft(l,n)) - end if - IF (1.- frac_irr_soilt(l,mm) > EPSILON(1.0) ) THEN - ext_nir_soilt(l,mm,m) = ext_nir_soilt(l,mm,m) & - + wt_ext_nir_surft(l,m,n) & - * esoil_nir_surft(l,n) & - * (1.0 - frac_irr_surft(l,n)) & - / (1.0 - frac_irr_soilt(l,mm)) - END IF + wt_ext_nir_surft(l,m,n) = wt_ext_surft(l,m,n) + IF (1.0- frac_irr_surft(l,n) > EPSILON(1.0) ) THEN + wt_ext_nir_surft(l,m,n) = (wt_ext_surft(l,m,n) - & + wt_ext_irr_surft(l,m,n) * frac_irr_surft(l,n)) / & + (1.0- frac_irr_surft(l,n)) + END IF + IF (1.0- frac_irr_soilt(l,mm) > EPSILON(1.0) ) THEN + ext_nir_soilt(l,mm,m) = ext_nir_soilt(l,mm,m) & + + wt_ext_nir_surft(l,m,n) & + * esoil_nir_surft(l,n) & + * (1.0 - frac_irr_surft(l,n)) & + / (1.0 - frac_irr_soilt(l,mm)) + END IF END IF IF ( frac_irr_soilt(l,mm) > EPSILON(1.0) ) THEN diff --git a/src/science/surface/sf_resist_jls.F90 b/src/science/surface/sf_resist_jls.F90 index 50315a77..78b7e864 100644 --- a/src/science/surface/sf_resist_jls.F90 +++ b/src/science/surface/sf_resist_jls.F90 @@ -234,18 +234,18 @@ SUBROUTINE sf_resist ( & !----------------------------------------------------------------------- resfs(l) = gc(l) / ( gc(l) + ch(l) * vshr(i,j) ) IF ( l_soil_evap_irrig_expl ) THEN - gc_nir_surft(l) = gc(l) - IF ( frac_irr_surft(l) < 1.0 ) THEN - gc_nir_surft(l) = (gc(l) - frac_irr_surft(l) & - * gc_irr_surft(l)) & - / (1.0 - frac_irr_surft(l)) - ELSE - gc_nir_surft(l) = gc_irr_surft(l) - END IF - resfs(l) = frac_irr_surft(l)*gc_irr_surft(l) & - / ( gc_irr_surft(l) + ch(l) * vshr(i,j) ) & - +(1.-frac_irr_surft(l))*gc_nir_surft(l) & - / ( gc_nir_surft(l) + ch(l) * vshr(i,j) ) + gc_nir_surft(l) = gc(l) + IF ( frac_irr_surft(l) < 1.0 ) THEN + gc_nir_surft(l) = (gc(l) - frac_irr_surft(l) & + * gc_irr_surft(l)) & + / (1.0 - frac_irr_surft(l)) + ELSE + gc_nir_surft(l) = gc_irr_surft(l) + END IF + resfs(l) = frac_irr_surft(l)*gc_irr_surft(l) & + / ( gc_irr_surft(l) + ch(l) * vshr(i,j) ) & + +(1.0-frac_irr_surft(l))*gc_nir_surft(l) & + / ( gc_nir_surft(l) + ch(l) * vshr(i,j) ) END IF IF (l_et_stom .OR. l_et_stom_surft) THEN resfs_stom(l) = gc_stom_surft(l) / ( gc_stom_surft(l) + ch(l) * vshr(i,j) ) @@ -275,18 +275,18 @@ SUBROUTINE sf_resist ( & resfs(l) = gc(l) / & (gc(l) + ch(l) * vshr(i,j)) IF ( l_soil_evap_irrig_expl ) THEN - gc_nir_surft(l) = gc(l) - IF ( frac_irr_surft(l) < 1.0 ) THEN - gc_nir_surft(l) = (gc(l) - frac_irr_surft(l) & - * gc_irr_surft(l)) & - / (1.0 - frac_irr_surft(l)) - ELSE - gc_nir_surft(l) = gc_irr_surft(l) - END IF - resfs(l) = frac_irr_surft(l)*gc_irr_surft(l) & - / ( gc_irr_surft(l) + ch(l) * vshr(i,j) ) & - +(1.-frac_irr_surft(l))*gc_nir_surft(l) & - / ( gc_nir_surft(l) + ch(l) * vshr(i,j) ) + gc_nir_surft(l) = gc(l) + IF ( frac_irr_surft(l) < 1.0 ) THEN + gc_nir_surft(l) = (gc(l) - frac_irr_surft(l) & + * gc_irr_surft(l)) & + / (1.0 - frac_irr_surft(l)) + ELSE + gc_nir_surft(l) = gc_irr_surft(l) + END IF + resfs(l) = frac_irr_surft(l)*gc_irr_surft(l) & + / ( gc_irr_surft(l) + ch(l) * vshr(i,j) ) & + +(1.0-frac_irr_surft(l))*gc_nir_surft(l) & + / ( gc_nir_surft(l) + ch(l) * vshr(i,j) ) END IF resft(l) = resfs(l) END IF From 4dd9e4e1a0a7b73416fe365e23fe9e4a831e6c72 Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Tue, 25 Aug 2026 16:54:11 +0100 Subject: [PATCH 15/31] comment out additional code fro sthu_nir calc in physiol --- src/science/surface/physiol_jls_mod.F90 | 39 ++++++++++++++----------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/src/science/surface/physiol_jls_mod.F90 b/src/science/surface/physiol_jls_mod.F90 index 2bb82918..b4426a19 100644 --- a/src/science/surface/physiol_jls_mod.F90 +++ b/src/science/surface/physiol_jls_mod.F90 @@ -455,7 +455,13 @@ SUBROUTINE physiol ( & ! ! WORK Soil moisture availability ! ! factor over irrigated fraction. ,sthu_nir_soilt(land_pts,nsoilt,sm_levels) & + ! WORK Soil moisture content in each layer +! ! in the non-irrigated soil column +! ! as a fraction of saturation ,sthu_surft(land_pts,nsoilt,sm_levels) & + ! WORK Soil moisture content in each layer +! ! as a fraction of saturation +! ! on surface tiles ,wt_ext_nir_soilt(land_pts,nsoilt,sm_levels) & ! ! WORK Fraction of transpiration over ! ! non-irrigated fraction extracted @@ -539,8 +545,6 @@ SUBROUTINE physiol ( & ! WORK Fractional canopy coverage. ,vf_type(land_pts,ntype) & ! WORK VFRAC for surface types. -!!!,sthu_nir_soilt(land_pts,nsoilt,sm_levels) & -,wt_ext_type_tmp(land_pts,sm_levels,ntype) & ,wt_ext_type(land_pts,sm_levels,ntype) & ! ! WORK WT_EXT for surface types. ,wt_ext_soilt(land_pts,nsoilt,sm_levels) & @@ -810,7 +814,8 @@ SUBROUTINE physiol ( & END DO END DO -IF (l_soil_evap_irrig_expl) THEN +!!!***??IF (l_soil_evap_irrig_expl) THEN +IF ( l_irrig_dmd ) THEN DO k = 1,sm_levels DO m = 1,nsoilt DO l = 1,land_pts @@ -1096,22 +1101,22 @@ SUBROUTINE physiol ( & IF ( l_irrig_dmd ) THEN !$OMP DO SCHEDULE(STATIC) DO l = 1,land_pts - IF ( l_soil_evap_irrig_expl ) THEN - sthu_surft(l,m,k) = frac_irr_surft(l,n) * sthu_irr_soilt(l,m,k) & + !!!IF ( l_soil_evap_irrig_expl ) THEN + sthu_surft(l,m,k) = frac_irr_surft(l,n) * sthu_irr_soilt(l,m,k) & + (1.0 - frac_irr_surft(l,n)) * sthu_nir_soilt(l,m,k) - ELSE + !!!ELSE ! MAY Be ABLE to remove the following section (calc of sthu_nir done above with l_bare_soil_evap_irr)*** check with rose stem?*** - sthu_nir_soilt(l,m,k) = sthu_soilt(l,m,k) - IF ( frac_irr_soilt(l,m) < 1.0 ) THEN - sthu_nir_soilt(l,m,k) = (sthu_soilt(l,m,k) - frac_irr_soilt(l,m) & - * sthu_irr_soilt(l,m,k)) & - / (1.0 - frac_irr_soilt(l,m)) - ELSE - sthu_nir_soilt(l,m,k) = sthu_irr_soilt(l,m,k) - END IF - sthu_surft(l,m,k) = frac_irr_surft(l,n) * sthu_irr_soilt(l,m,k) & - + (1.0 - frac_irr_surft(l,n)) * sthu_nir_soilt(l,m,k) - END IF + !!!sthu_nir_soilt(l,m,k) = sthu_soilt(l,m,k) + !!!IF ( frac_irr_soilt(l,m) < 1.0 ) THEN + !!! sthu_nir_soilt(l,m,k) = (sthu_soilt(l,m,k) - frac_irr_soilt(l,m) & + !!! * sthu_irr_soilt(l,m,k)) & + !!! / (1.0 - frac_irr_soilt(l,m)) + !!!ELSE + !!! sthu_nir_soilt(l,m,k) = sthu_irr_soilt(l,m,k) + !!!END IF + !!!sthu_surft(l,m,k) = frac_irr_surft(l,n) * sthu_irr_soilt(l,m,k) & + !!! + (1.0 - frac_irr_surft(l,n)) * sthu_nir_soilt(l,m,k) + !!!END IF END DO !$OMP END DO END IF From 2d264728d6f06356449d9044095dec3221cae0ed Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Wed, 26 Aug 2026 10:04:30 +0100 Subject: [PATCH 16/31] remove comments from physiol --- src/science/surface/physiol_jls_mod.F90 | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/src/science/surface/physiol_jls_mod.F90 b/src/science/surface/physiol_jls_mod.F90 index b4426a19..7393fa33 100644 --- a/src/science/surface/physiol_jls_mod.F90 +++ b/src/science/surface/physiol_jls_mod.F90 @@ -814,7 +814,6 @@ SUBROUTINE physiol ( & END DO END DO -!!!***??IF (l_soil_evap_irrig_expl) THEN IF ( l_irrig_dmd ) THEN DO k = 1,sm_levels DO m = 1,nsoilt @@ -1101,22 +1100,8 @@ SUBROUTINE physiol ( & IF ( l_irrig_dmd ) THEN !$OMP DO SCHEDULE(STATIC) DO l = 1,land_pts - !!!IF ( l_soil_evap_irrig_expl ) THEN sthu_surft(l,m,k) = frac_irr_surft(l,n) * sthu_irr_soilt(l,m,k) & + (1.0 - frac_irr_surft(l,n)) * sthu_nir_soilt(l,m,k) - !!!ELSE - ! MAY Be ABLE to remove the following section (calc of sthu_nir done above with l_bare_soil_evap_irr)*** check with rose stem?*** - !!!sthu_nir_soilt(l,m,k) = sthu_soilt(l,m,k) - !!!IF ( frac_irr_soilt(l,m) < 1.0 ) THEN - !!! sthu_nir_soilt(l,m,k) = (sthu_soilt(l,m,k) - frac_irr_soilt(l,m) & - !!! * sthu_irr_soilt(l,m,k)) & - !!! / (1.0 - frac_irr_soilt(l,m)) - !!!ELSE - !!! sthu_nir_soilt(l,m,k) = sthu_irr_soilt(l,m,k) - !!!END IF - !!!sthu_surft(l,m,k) = frac_irr_surft(l,n) * sthu_irr_soilt(l,m,k) & - !!! + (1.0 - frac_irr_surft(l,n)) * sthu_nir_soilt(l,m,k) - !!!END IF END DO !$OMP END DO END IF From f0969a43272bc217967c314df5d686a6e25ef0ee Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Tue, 1 Sep 2026 12:04:03 +0100 Subject: [PATCH 17/31] typo and namelist checks --- doc/source/namelists/jules_irrig.nml.rst | 2 +- src/control/shared/jules_irrig_mod.F90 | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/doc/source/namelists/jules_irrig.nml.rst b/doc/source/namelists/jules_irrig.nml.rst index dd017f3b..ff1d7e22 100644 --- a/doc/source/namelists/jules_irrig.nml.rst +++ b/doc/source/namelists/jules_irrig.nml.rst @@ -153,7 +153,7 @@ This namelist specifies the different options available for setting up the irrig :type: logical :default: F - Switch controlling whether the bare soil evaporation from the irrigated and non-irrigated part of the grid-box (or soil tile) is controlled by the mean soil moisture or the separate irrigated and non-irrigated soil moisture columns. + Switch controlling whether the bare soil evaporation from the irrigated and non-irrigated parts of the grid-box (or soil tile) is controlled by the mean soil moisture or the separate irrigated and non-irrigated soil moisture columns. TRUE Bare soil evaporation is explicitly calculated from the irrigated and non-irrigated soil moisture columns. diff --git a/src/control/shared/jules_irrig_mod.F90 b/src/control/shared/jules_irrig_mod.F90 index cfc8e5c8..a4cd8ab2 100644 --- a/src/control/shared/jules_irrig_mod.F90 +++ b/src/control/shared/jules_irrig_mod.F90 @@ -239,6 +239,12 @@ SUBROUTINE check_jules_irrig() 'l_irrig_limit=T requires l_irrig_dmd=T ') END IF +IF ( l_soil_evap_irrig_expl .AND. .NOT. l_irrig_dmd ) THEN + errcode = 101 + CALL ereport(RoutineName, errcode, & + 'l_soil_evap_irrig_expl=T requires l_irrig_dmd=T ') +END IF + IF ( l_irrig_limit .AND. .NOT. l_top ) THEN errcode = 101 CALL ereport(RoutineName, errcode, & @@ -375,6 +381,7 @@ SUBROUTINE read_nml_jules_irrig (unitnumber) SEQUENCE LOGICAL :: l_irrig_dmd LOGICAL :: l_irrig_limit + LOGICAL :: l_soil_evap_irrig_expl LOGICAL :: frac_irrig_all_tiles LOGICAL :: set_irrfrac_on_irrtiles INTEGER :: irr_crop From 3b1fe31f6ccf9926d2bc28fbd3873388572744e3 Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Tue, 1 Sep 2026 13:00:36 +0100 Subject: [PATCH 18/31] deal with John Edwards's comments --- src/science/surface/sf_flux_mod.F90 | 1 - src/science/surface/soil_evap_jls.F90 | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/science/surface/sf_flux_mod.F90 b/src/science/surface/sf_flux_mod.F90 index 0aa969ca..593795bf 100644 --- a/src/science/surface/sf_flux_mod.F90 +++ b/src/science/surface/sf_flux_mod.F90 @@ -36,7 +36,6 @@ SUBROUTINE sf_flux ( & USE jules_surface_mod, ONLY: l_aggregate, l_epot_corr USE jules_science_fixes_mod, ONLY: l_fix_moruses_roof_rad_coupling, & l_fix_neg_snow -USE jules_irrig_mod, ONLY: l_irrig_dmd USE parkind1, ONLY: jprb, jpim USE yomhook, ONLY: lhook, dr_hook diff --git a/src/science/surface/soil_evap_jls.F90 b/src/science/surface/soil_evap_jls.F90 index b348fa1b..48bc914a 100644 --- a/src/science/surface/soil_evap_jls.F90 +++ b/src/science/surface/soil_evap_jls.F90 @@ -148,8 +148,8 @@ SUBROUTINE soil_evap (npnts,nshyd,surft_pts,surft_index, & l = surft_index(j) wt_ext_nir(l,k) = gs_nir(l) * wt_ext_nir(l,k) & / (gs_nir(l) + fsoil(l) * gsoil_nir(l)) - wt_ext(l,k) = frac_irr(l)*wt_ext_irr(l,k) & - +(1.0-frac_irr(l))*wt_ext_nir(l,k) + wt_ext(l,k) = frac_irr(l) * wt_ext_irr(l,k) & + + (1.0 - frac_irr(l)) * wt_ext_nir(l,k) END DO !$OMP END DO NOWAIT END IF From cae1b4f081b1bcc6abc1a86ed2677f6bf4e3b807 Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Tue, 1 Sep 2026 14:40:02 +0100 Subject: [PATCH 19/31] added a comment --- src/science/surface/physiol_jls_mod.F90 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/science/surface/physiol_jls_mod.F90 b/src/science/surface/physiol_jls_mod.F90 index 7393fa33..34bf942a 100644 --- a/src/science/surface/physiol_jls_mod.F90 +++ b/src/science/surface/physiol_jls_mod.F90 @@ -494,6 +494,8 @@ SUBROUTINE physiol ( & ! ! WORK Bare soil conductance under ! ! canopy ,gsoil_nir_under_canopy(land_pts) & +! ! WORK Bare soil conductance under +! ! canopy on non-irrigated fraction. ,gsoil_irr_under_canopy(land_pts) ! ! WORK Bare soil conductance under ! ! canopy on irrigated fraction. From 4b8814e78425d0f04c89417063380bf562cdaa04 Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Tue, 1 Sep 2026 15:24:56 +0100 Subject: [PATCH 20/31] add some of copilot suggested changes --- doc/source/namelists/jules_irrig.nml.rst | 18 ------------------ src/control/shared/jules_irrig_mod.F90 | 13 +++++++++---- .../surface/jules_land_sf_explicit_jls.F90 | 11 ++++++----- src/science/surface/physiol_jls_mod.F90 | 12 ++++++++++-- src/science/surface/sf_evap_jls.F90 | 4 ---- 5 files changed, 25 insertions(+), 33 deletions(-) diff --git a/doc/source/namelists/jules_irrig.nml.rst b/doc/source/namelists/jules_irrig.nml.rst index ff1d7e22..e1c55478 100644 --- a/doc/source/namelists/jules_irrig.nml.rst +++ b/doc/source/namelists/jules_irrig.nml.rst @@ -148,24 +148,6 @@ This namelist specifies the different options available for setting up the irrig :nml:mem:`nstep_irrig` = NINT(frequency of irrigation update (in sec)) / :nml:mem:`JULES_TIME::timestep_len` -.. nml:member:: l_soil_evap_irrig_expl - - :type: logical - :default: F - - Switch controlling whether the bare soil evaporation from the irrigated and non-irrigated parts of the grid-box (or soil tile) is controlled by the mean soil moisture or the separate irrigated and non-irrigated soil moisture columns. - - TRUE - Bare soil evaporation is explicitly calculated from the irrigated and non-irrigated soil moisture columns. - - FALSE - No effect. - - This must be set to FALSE if :nml:mem:`JULES_IRRIG::irrig_option` = 0. - This must be set to FALSE if :nml:mem:`JULES_IRRIG::irrig_option` = 2. - - - .. _References_irrig: ``JULES_IRRIG`` references diff --git a/src/control/shared/jules_irrig_mod.F90 b/src/control/shared/jules_irrig_mod.F90 index a4cd8ab2..8f21756c 100644 --- a/src/control/shared/jules_irrig_mod.F90 +++ b/src/control/shared/jules_irrig_mod.F90 @@ -50,9 +50,9 @@ MODULE jules_irrig_mod l_irrig_limit = .FALSE., & ! Switch for limiting irrigation supply l_soil_evap_irrig_expl = .FALSE. - ! Switch for explcitly calculating bare soil evaporation over the - ! separate irrigated and non-irrigated fractions of the grid box. - ! (Default used the grid box mean soil moisture). + ! Switch for explicitly calculating bare soil evaporation + ! over the separate irrigated and non-irrigated fractions of + ! the grid box. (Default uses the grid box mean soil moisture). INTEGER :: nirrtile = imdi ! Number of tiles that can have irrigated fraction @@ -334,6 +334,9 @@ SUBROUTINE print_nlist_jules_irrig() WRITE(lineBuffer,*)' irrig_option = ',irrig_option CALL jules_print('jules_irrig',lineBuffer) +WRITE(lineBuffer,*) ' l_soil_evap_irrig_expl = ',l_soil_evap_irrig_expl +CALL jules_print('jules_irrig',lineBuffer) + CALL jules_print('jules_irrig', & '- - - - - - end of namelist - - - - - -') @@ -381,9 +384,9 @@ SUBROUTINE read_nml_jules_irrig (unitnumber) SEQUENCE LOGICAL :: l_irrig_dmd LOGICAL :: l_irrig_limit - LOGICAL :: l_soil_evap_irrig_expl LOGICAL :: frac_irrig_all_tiles LOGICAL :: set_irrfrac_on_irrtiles + LOGICAL :: l_soil_evap_irrig_expl INTEGER :: irr_crop INTEGER :: nirrtile INTEGER :: irrigtiles(npft_max) @@ -409,6 +412,7 @@ SUBROUTINE read_nml_jules_irrig (unitnumber) my_nml % l_irrig_limit = l_irrig_limit my_nml % frac_irrig_all_tiles = frac_irrig_all_tiles my_nml % set_irrfrac_on_irrtiles = set_irrfrac_on_irrtiles + my_nml % l_soil_evap_irrig_expl = l_soil_evap_irrig_expl my_nml % irr_crop = irr_crop my_nml % nirrtile = nirrtile my_nml % irrigtiles = irrigtiles @@ -424,6 +428,7 @@ SUBROUTINE read_nml_jules_irrig (unitnumber) l_irrig_limit = my_nml % l_irrig_limit frac_irrig_all_tiles = my_nml % frac_irrig_all_tiles set_irrfrac_on_irrtiles = my_nml % set_irrfrac_on_irrtiles + l_soil_evap_irrig_expl = my_nml % l_soil_evap_irrig_expl irr_crop = my_nml % irr_crop nirrtile = my_nml % nirrtile irrigtiles = my_nml % irrigtiles diff --git a/src/science/surface/jules_land_sf_explicit_jls.F90 b/src/science/surface/jules_land_sf_explicit_jls.F90 index 8edd15ab..37c389a5 100644 --- a/src/science/surface/jules_land_sf_explicit_jls.F90 +++ b/src/science/surface/jules_land_sf_explicit_jls.F90 @@ -812,11 +812,11 @@ SUBROUTINE jules_land_sf_explicit ( & ! respired fraction of RESP_S ,gc_stom_surft(land_pts,nsurft) & ! canopy conductance -,gc_nir_surft(land_pts,nsurft) & - ! canopy conductance over irrigated part - ! of tile +!! not needed? ,gc_nir_surft(land_pts,nsurft) & +!! ! canopy conductance over non-irrigated part +!! ! of tile ,gs_nir_surft(land_pts,nsurft) & - ! Conductance for non-irrigated part of tile + ! Conductance for non-irrigated part of tile ,sice_surft_tmp(land_pts,nsmax) & ! Ice content of snow layers (kg/m2) ,sliq_surft_tmp(land_pts,nsmax) & @@ -1252,7 +1252,8 @@ SUBROUTINE jules_land_sf_explicit ( & rootc_cpft, sthu_irr_soilt, frac_irr_soilt, frac_irr_surft, dvi_cpft, & !crop_vars_mod (OUT) gs_irr_surft, smc_irr_soilt, wt_ext_irr_surft, gc_irr_surft, & - gs_nir_surft, gc_nir_surft, & + gs_nir_surft, & +!! not needed? gc_nir_surft, & !p_s_parms (IN) bexp_soilt, sathh_soilt, v_close_pft, v_open_pft, & !ancil_info diff --git a/src/science/surface/physiol_jls_mod.F90 b/src/science/surface/physiol_jls_mod.F90 index 34bf942a..660cc3ec 100644 --- a/src/science/surface/physiol_jls_mod.F90 +++ b/src/science/surface/physiol_jls_mod.F90 @@ -54,7 +54,8 @@ SUBROUTINE physiol ( & rootc_cpft, sthu_irr_soilt, frac_irr_soilt, frac_irr_surft, dvi_cpft, & !crop_vars_mod (OUT) gs_irr_surft, smc_irr_soilt, wt_ext_irr_surft, gc_irr_surft, & - gs_nir_surft, gc_nir_surft, & + gs_nir_surft, & + !!gc_nir_surft, not needed? & !p_s_parms (IN) bexp_soilt, sathh_soilt, v_close_pft, v_open_pft, & !ancil_info (IN) @@ -360,7 +361,8 @@ SUBROUTINE physiol ( & wt_ext_irr_surft(land_pts,sm_levels,nsurft) REAL(KIND=real_jlslsm), INTENT(OUT) :: gc_irr_surft(land_pts,nsurft) REAL(KIND=real_jlslsm), INTENT(OUT) :: gs_nir_surft(land_pts,nsurft) -REAL(KIND=real_jlslsm), INTENT(OUT) :: gc_nir_surft(land_pts,nsurft) + +!! not needed? REAL(KIND=real_jlslsm), INTENT(OUT) :: gc_nir_surft(land_pts,nsurft) !ancil_info (IN) LOGICAL, INTENT(IN) :: l_soil_point(land_pts) @@ -555,7 +557,13 @@ SUBROUTINE physiol ( & ! WORK Fraction of ground below canopy ! ! contributing to evaporation. ,fsoil_irr_tot(land_pts) & + ! WORK Fraction of ground below canopy +! ! contributing to evaporation +! ! over irrigated fraction. ,fsoil_nir_tot(land_pts) & + ! WORK Fraction of ground below canopy +! ! contributing to evaporation +! ! over non-irrigated fraction. ,fsoil_tot(land_pts) & ! WORK Total fraction of soil ! ! contributing to evaporation diff --git a/src/science/surface/sf_evap_jls.F90 b/src/science/surface/sf_evap_jls.F90 index 57b3e723..186bdb98 100644 --- a/src/science/surface/sf_evap_jls.F90 +++ b/src/science/surface/sf_evap_jls.F90 @@ -195,10 +195,6 @@ SUBROUTINE sf_evap ( & ! ! WORK Fraction of transpiration ! ! extracted from each soil layer ! ! by non-irrigated part of each tile. -,resfs_nir_surft(land_pts,nsurft) & -! ! WORK Combined soil, stomatal and aerodynam. -! ! resistance factor for fraction 1-fracaero_t -! ! of non-irrigated part of each land tile. ,smc_nir_soilt(land_pts,nsoilt) ! ! WORK Available soil moisture (kg/m2). ! ! fraction (kg/m2/s). From b75bb9b65b348994c4cb2d211d022a3945798471 Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Tue, 1 Sep 2026 15:59:11 +0100 Subject: [PATCH 21/31] fix bug copilot found --- src/science/surface/physiol_jls_mod.F90 | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/science/surface/physiol_jls_mod.F90 b/src/science/surface/physiol_jls_mod.F90 index 660cc3ec..4e4c6995 100644 --- a/src/science/surface/physiol_jls_mod.F90 +++ b/src/science/surface/physiol_jls_mod.F90 @@ -564,6 +564,14 @@ SUBROUTINE physiol ( & ! WORK Fraction of ground below canopy ! ! contributing to evaporation ! ! over non-irrigated fraction. +,fsoil_irr_tot_tmp & + ! WORK Fraction of ground below canopy +! ! contributing to evaporation +! ! over irrigated fraction. +,fsoil_nir_tot_tmp & + ! WORK Fraction of ground below canopy +! ! contributing to evaporation +! ! over non-irrigated fraction. ,fsoil_tot(land_pts) & ! WORK Total fraction of soil ! ! contributing to evaporation @@ -2252,18 +2260,18 @@ SUBROUTINE physiol ( & DO l = 1,land_pts IF (l_soil_evap_irrig_expl) THEN IF (frac_irr_soilt(l,m) > 0.0) THEN - fsoil_irr_tot(l) = fsoil_irr_tot(l)/frac_irr_soilt(l,m) - smc_irr_soilt(l,m) = (1.0 - fsoil_irr_tot(l) ) * & - smc_irr_soilt(l,m) + fsoil_irr_tot(l) * & + fsoil_irr_tot_tmp = fsoil_irr_tot(l)/frac_irr_soilt(l,m) + smc_irr_soilt(l,m) = (1.0 - fsoil_irr_tot_tmp ) * & + smc_irr_soilt(l,m) + fsoil_irr_tot_tmp * & rho_water * dzsoil(1) * & MAX(0.0,sthu_irr_soilt(l,m,1)) * smvcst_soilt(l,m,1) ELSE smc_irr_soilt(l,m) = 0.0 END IF IF (1.0 - frac_irr_soilt(l,m) > 0.0) THEN - fsoil_nir_tot(l) = fsoil_nir_tot(l)/(1.0-frac_irr_soilt(l,m)) - smc_nir_soilt(l,m) = (1.0 - fsoil_nir_tot(l)) * & - smc_nir_soilt(l,m) + fsoil_nir_tot(l) * & + fsoil_nir_tot_tmp = fsoil_nir_tot(l)/(1.0-frac_irr_soilt(l,m)) + smc_nir_soilt(l,m) = (1.0 - fsoil_nir_tot_tmp) * & + smc_nir_soilt(l,m) + fsoil_nir_tot_tmp * & rho_water * dzsoil(1) * & MAX(0.0,sthu_nir_soilt(l,m,1)) * smvcst_soilt(l,m,1) ELSE From 8dfe983e99c1e32a93712b97548c72761e1384cb Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Tue, 1 Sep 2026 16:15:48 +0100 Subject: [PATCH 22/31] omp fixes --- src/science/surface/physiol_jls_mod.F90 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/science/surface/physiol_jls_mod.F90 b/src/science/surface/physiol_jls_mod.F90 index 4e4c6995..718a8280 100644 --- a/src/science/surface/physiol_jls_mod.F90 +++ b/src/science/surface/physiol_jls_mod.F90 @@ -671,7 +671,7 @@ SUBROUTINE physiol ( & !$OMP sthu_irr_soilt, smvcst_soilt, gsoil_soilt, sthu_soilt, & !$OMP gc_corr, n_wtrac_jls, smc_soilt_wtrac, growth_sug_pft, growth_sug_gb, & !$OMP fsmc_nir, wt_ext_nir_soilt, wt_ext_nir_type, sthu_nir_soilt, & -!$OMP frac_irr_soilt,fsoil_irr_tot,fsoil_nir_tot, gs_nir_type, & +!$OMP frac_irr_soilt, fsoil_irr_tot, fsoil_nir_tot, gs_nir_type, & !$OMP gsoil_nir_soilt,lwp_c_pft,l_wtrac_jls,frac_irr_surft) DO n = 1,npft @@ -2254,7 +2254,8 @@ SUBROUTINE physiol ( & !$OMP smc_nir_soilt, smc_soilt, sthu_nir_soilt, & !$OMP smvcst_soilt, gs_irr_surft, gc_irr_surft, nsurft, l_do_omp, & !$OMP fsoil_irr_tot, fsoil_nir_tot, frac_irr_soilt, & -!$OMP frac_irr_surft, l_soil_evap_irrig_expl) +!$OMP fsoil_irr_tot_tmp, fsoil_nir_tot_tmp, frac_irr_surft, & +!$OMP l_soil_evap_irrig_expl) DO m = 1,nsoilt !$OMP DO SCHEDULE(STATIC) DO l = 1,land_pts From 6ef67ee055d2669517062bfc85b9c14036e8196e Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Tue, 1 Sep 2026 17:05:42 +0100 Subject: [PATCH 23/31] tidy up --- src/science/surface/jules_land_sf_explicit_jls.F90 | 4 ---- src/science/surface/physiol_jls_mod.F90 | 3 --- 2 files changed, 7 deletions(-) diff --git a/src/science/surface/jules_land_sf_explicit_jls.F90 b/src/science/surface/jules_land_sf_explicit_jls.F90 index 37c389a5..c00b5568 100644 --- a/src/science/surface/jules_land_sf_explicit_jls.F90 +++ b/src/science/surface/jules_land_sf_explicit_jls.F90 @@ -812,9 +812,6 @@ SUBROUTINE jules_land_sf_explicit ( & ! respired fraction of RESP_S ,gc_stom_surft(land_pts,nsurft) & ! canopy conductance -!! not needed? ,gc_nir_surft(land_pts,nsurft) & -!! ! canopy conductance over non-irrigated part -!! ! of tile ,gs_nir_surft(land_pts,nsurft) & ! Conductance for non-irrigated part of tile ,sice_surft_tmp(land_pts,nsmax) & @@ -1253,7 +1250,6 @@ SUBROUTINE jules_land_sf_explicit ( & !crop_vars_mod (OUT) gs_irr_surft, smc_irr_soilt, wt_ext_irr_surft, gc_irr_surft, & gs_nir_surft, & -!! not needed? gc_nir_surft, & !p_s_parms (IN) bexp_soilt, sathh_soilt, v_close_pft, v_open_pft, & !ancil_info diff --git a/src/science/surface/physiol_jls_mod.F90 b/src/science/surface/physiol_jls_mod.F90 index 718a8280..5bad9a6a 100644 --- a/src/science/surface/physiol_jls_mod.F90 +++ b/src/science/surface/physiol_jls_mod.F90 @@ -55,7 +55,6 @@ SUBROUTINE physiol ( & !crop_vars_mod (OUT) gs_irr_surft, smc_irr_soilt, wt_ext_irr_surft, gc_irr_surft, & gs_nir_surft, & - !!gc_nir_surft, not needed? & !p_s_parms (IN) bexp_soilt, sathh_soilt, v_close_pft, v_open_pft, & !ancil_info (IN) @@ -362,8 +361,6 @@ SUBROUTINE physiol ( & REAL(KIND=real_jlslsm), INTENT(OUT) :: gc_irr_surft(land_pts,nsurft) REAL(KIND=real_jlslsm), INTENT(OUT) :: gs_nir_surft(land_pts,nsurft) -!! not needed? REAL(KIND=real_jlslsm), INTENT(OUT) :: gc_nir_surft(land_pts,nsurft) - !ancil_info (IN) LOGICAL, INTENT(IN) :: l_soil_point(land_pts) From 4e3cdc0c7cf4e7b75706e599df35470c1effb902 Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Tue, 1 Sep 2026 17:20:52 +0100 Subject: [PATCH 24/31] nml.rst updated --- doc/source/namelists/jules_irrig.nml.rst | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/doc/source/namelists/jules_irrig.nml.rst b/doc/source/namelists/jules_irrig.nml.rst index e1c55478..dd017f3b 100644 --- a/doc/source/namelists/jules_irrig.nml.rst +++ b/doc/source/namelists/jules_irrig.nml.rst @@ -148,6 +148,24 @@ This namelist specifies the different options available for setting up the irrig :nml:mem:`nstep_irrig` = NINT(frequency of irrigation update (in sec)) / :nml:mem:`JULES_TIME::timestep_len` +.. nml:member:: l_soil_evap_irrig_expl + + :type: logical + :default: F + + Switch controlling whether the bare soil evaporation from the irrigated and non-irrigated part of the grid-box (or soil tile) is controlled by the mean soil moisture or the separate irrigated and non-irrigated soil moisture columns. + + TRUE + Bare soil evaporation is explicitly calculated from the irrigated and non-irrigated soil moisture columns. + + FALSE + No effect. + + This must be set to FALSE if :nml:mem:`JULES_IRRIG::irrig_option` = 0. + This must be set to FALSE if :nml:mem:`JULES_IRRIG::irrig_option` = 2. + + + .. _References_irrig: ``JULES_IRRIG`` references From 0134f31025062d01e20219657ec34ae977ee9a65 Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Tue, 1 Sep 2026 18:09:00 +0100 Subject: [PATCH 25/31] add name to contributors list --- CONTRIBUTORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index db1cc110..7e80955c 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -5,3 +5,4 @@ | yaswant | Yaswant Pradhan | Met Office | 2026-06-30 | | doucla | Douglas Clark | UKCEH | 2026-07-03 | | james-bruten-mo | James Bruten | Met Office | 2026-07-09 | +| nicgedney | Nic Gedney | Met Office | 2026-09-01 | From c613116f589e60c14d479597a35ec62438490e4f Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Wed, 2 Sep 2026 09:28:31 +0100 Subject: [PATCH 26/31] remove trailing space --- doc/source/namelists/jules_irrig.nml.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/namelists/jules_irrig.nml.rst b/doc/source/namelists/jules_irrig.nml.rst index dd017f3b..cbccf2fd 100644 --- a/doc/source/namelists/jules_irrig.nml.rst +++ b/doc/source/namelists/jules_irrig.nml.rst @@ -164,7 +164,7 @@ This namelist specifies the different options available for setting up the irrig This must be set to FALSE if :nml:mem:`JULES_IRRIG::irrig_option` = 0. This must be set to FALSE if :nml:mem:`JULES_IRRIG::irrig_option` = 2. - + .. _References_irrig: From 77ddb9a01edf88d82e9873057395e3805ce8d6a9 Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Fri, 11 Sep 2026 10:57:21 +0100 Subject: [PATCH 27/31] changes required from Maggie's review --- doc/source/namelists/jules_irrig.nml.rst | 8 +-- .../jules-standalone/HEAD/rose-meta.conf | 11 ++-- rose-meta/jules-standalone/versions.py | 4 +- src/control/shared/jules_irrig_mod.F90 | 18 +++--- src/science/surface/physiol_jls_mod.F90 | 58 ++++++++++--------- src/science/surface/sf_evap_jls.F90 | 10 ++-- src/science/surface/sf_resist_jls.F90 | 11 ++-- src/science/surface/soil_evap_jls.F90 | 9 +-- 8 files changed, 68 insertions(+), 61 deletions(-) diff --git a/doc/source/namelists/jules_irrig.nml.rst b/doc/source/namelists/jules_irrig.nml.rst index cbccf2fd..ab1c6cdc 100644 --- a/doc/source/namelists/jules_irrig.nml.rst +++ b/doc/source/namelists/jules_irrig.nml.rst @@ -50,7 +50,7 @@ This namelist specifies the different options available for setting up the irrig 1. Not available yet. In a future release this will replace :nml:mem:`l_irrig_dmd`. 2. Apply irrigation to irrigated surface types C3_irrig and/or C4_irrig. This option requires :nml:mem:`JULES_IRRIG::l_irrig_dmd` = FALSE and :nml:mem:`JULES_PFTPARM::irrig_pft_io` = 0 or 1. - When :nml:mem:`JULES_IRRIG::l_irrig_dmd` = TRUE, :nml:mem:`JULES_IRRIG::irrig_option` is not available. + When :nml:mem:`JULES_IRRIG::l_irrig_dmd` = TRUE, :nml:mem:`JULES_IRRIG::irrig_option` is not available. .. nml:member:: l_irrig_limit @@ -148,7 +148,7 @@ This namelist specifies the different options available for setting up the irrig :nml:mem:`nstep_irrig` = NINT(frequency of irrigation update (in sec)) / :nml:mem:`JULES_TIME::timestep_len` -.. nml:member:: l_soil_evap_irrig_expl +.. nml:member:: l_soil_evap_irrig_separate :type: logical :default: F @@ -158,11 +158,11 @@ This namelist specifies the different options available for setting up the irrig TRUE Bare soil evaporation is explicitly calculated from the irrigated and non-irrigated soil moisture columns. + Only available when :nml:mem:`l_irrig_dmd` = TRUE FALSE No effect. - This must be set to FALSE if :nml:mem:`JULES_IRRIG::irrig_option` = 0. - This must be set to FALSE if :nml:mem:`JULES_IRRIG::irrig_option` = 2. + This must be set to FALSE if :nml:mem:`irrig_option` = No irrigation (0) or Surface tile-based irrigation (2). diff --git a/rose-meta/jules-standalone/HEAD/rose-meta.conf b/rose-meta/jules-standalone/HEAD/rose-meta.conf index 42794694..b53d6199 100644 --- a/rose-meta/jules-standalone/HEAD/rose-meta.conf +++ b/rose-meta/jules-standalone/HEAD/rose-meta.conf @@ -2646,7 +2646,7 @@ trigger=namelist:jules_irrig=irr_crop: .true.; =namelist:jules_irrig=nstep_irrig: .true.; =namelist:jules_irrig_props: .true.; =namelist:jules_irrig=irrig_option: .false.; - =namelist:jules_irrig=l_soil_evap_irrig_expl: .false.; + =namelist:jules_irrig=l_soil_evap_irrig_separate: .true.; type=logical url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::l_irrig_dmd @@ -2688,12 +2688,15 @@ sort-key=g type=logical url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::set_irrfrac_on_irrtiles -[namelist:jules_irrig=l_soil_evap_irrig_expl] +[namelist:jules_irrig=l_soil_evap_irrig_separate] compulsory=true -description=logical to decide whether bare soil evaporation is calculated over the grid-box mean (false) or explicitly irrigated and non-irrigated fractions (true) +description=logical to decide whether bare soil evaporation is + =calculated over the grid-box mean (false) or + =explicitly irrigated and non-irrigated fractions (true) +fail-if=this == '.true.' and namelist:jules_irrig=l_irrig_dmd == '.false.' sort-key=h type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::l_soil_evap_irrig_expl +url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::l_soil_evap_irrig_separate [namelist:jules_irrig_props] compulsory=true diff --git a/rose-meta/jules-standalone/versions.py b/rose-meta/jules-standalone/versions.py index 9e103106..37b0b699 100644 --- a/rose-meta/jules-standalone/versions.py +++ b/rose-meta/jules-standalone/versions.py @@ -55,7 +55,7 @@ class vnYY_txxxx(MacroUpgrade): def upgrade(self, config, meta_config=None): """Upgrade a JULES runtime app configuration.""" - # Add l_soil_evap_irrig_expl to namelist jules_irrig - self.add_setting(config, ["namelist:jules_irrig","l_soil_evap_irrig_expl"], ".false.") + # Add l_soil_evap_irrig_separate to namelist jules_irrig + self.add_setting(config, ["namelist:jules_irrig","l_soil_evap_irrig_separate"], ".false.") return config, self.reports diff --git a/src/control/shared/jules_irrig_mod.F90 b/src/control/shared/jules_irrig_mod.F90 index 8f21756c..af0ab074 100644 --- a/src/control/shared/jules_irrig_mod.F90 +++ b/src/control/shared/jules_irrig_mod.F90 @@ -49,7 +49,7 @@ MODULE jules_irrig_mod ! Switch for using irrigation demand code l_irrig_limit = .FALSE., & ! Switch for limiting irrigation supply - l_soil_evap_irrig_expl = .FALSE. + l_soil_evap_irrig_separate = .FALSE. ! Switch for explicitly calculating bare soil evaporation ! over the separate irrigated and non-irrigated fractions of ! the grid box. (Default uses the grid box mean soil moisture). @@ -86,7 +86,7 @@ MODULE jules_irrig_mod NAMELIST / jules_irrig/ l_irrig_dmd, l_irrig_limit, irr_crop, & frac_irrig_all_tiles, nirrtile, irrigtiles, & set_irrfrac_on_irrtiles, nstep_irrig, irrig_option, & - l_soil_evap_irrig_expl + l_soil_evap_irrig_separate CHARACTER(LEN=*), PARAMETER, PRIVATE :: ModuleName='JULES_IRRIG_MOD' @@ -239,10 +239,10 @@ SUBROUTINE check_jules_irrig() 'l_irrig_limit=T requires l_irrig_dmd=T ') END IF -IF ( l_soil_evap_irrig_expl .AND. .NOT. l_irrig_dmd ) THEN +IF ( l_soil_evap_irrig_separate .AND. .NOT. l_irrig_dmd ) THEN errcode = 101 CALL ereport(RoutineName, errcode, & - 'l_soil_evap_irrig_expl=T requires l_irrig_dmd=T ') + 'l_soil_evap_irrig_separate=T requires l_irrig_dmd=T ') END IF IF ( l_irrig_limit .AND. .NOT. l_top ) THEN @@ -334,7 +334,7 @@ SUBROUTINE print_nlist_jules_irrig() WRITE(lineBuffer,*)' irrig_option = ',irrig_option CALL jules_print('jules_irrig',lineBuffer) -WRITE(lineBuffer,*) ' l_soil_evap_irrig_expl = ',l_soil_evap_irrig_expl +WRITE(lineBuffer,*) ' l_soil_evap_irrig_separate = ',l_soil_evap_irrig_separate CALL jules_print('jules_irrig',lineBuffer) CALL jules_print('jules_irrig', & @@ -377,7 +377,7 @@ SUBROUTINE read_nml_jules_irrig (unitnumber) ! set number of each type of variable in my_namelist type INTEGER, PARAMETER :: no_of_types = 2 -INTEGER, PARAMETER :: n_log = 4 +INTEGER, PARAMETER :: n_log = 5 INTEGER, PARAMETER :: n_int = 4 + npft_max TYPE :: my_namelist @@ -386,7 +386,7 @@ SUBROUTINE read_nml_jules_irrig (unitnumber) LOGICAL :: l_irrig_limit LOGICAL :: frac_irrig_all_tiles LOGICAL :: set_irrfrac_on_irrtiles - LOGICAL :: l_soil_evap_irrig_expl + LOGICAL :: l_soil_evap_irrig_separate INTEGER :: irr_crop INTEGER :: nirrtile INTEGER :: irrigtiles(npft_max) @@ -412,7 +412,7 @@ SUBROUTINE read_nml_jules_irrig (unitnumber) my_nml % l_irrig_limit = l_irrig_limit my_nml % frac_irrig_all_tiles = frac_irrig_all_tiles my_nml % set_irrfrac_on_irrtiles = set_irrfrac_on_irrtiles - my_nml % l_soil_evap_irrig_expl = l_soil_evap_irrig_expl + my_nml % l_soil_evap_irrig_separate = l_soil_evap_irrig_separate my_nml % irr_crop = irr_crop my_nml % nirrtile = nirrtile my_nml % irrigtiles = irrigtiles @@ -428,7 +428,7 @@ SUBROUTINE read_nml_jules_irrig (unitnumber) l_irrig_limit = my_nml % l_irrig_limit frac_irrig_all_tiles = my_nml % frac_irrig_all_tiles set_irrfrac_on_irrtiles = my_nml % set_irrfrac_on_irrtiles - l_soil_evap_irrig_expl = my_nml % l_soil_evap_irrig_expl + l_soil_evap_irrig_separate = my_nml % l_soil_evap_irrig_separate irr_crop = my_nml % irr_crop nirrtile = my_nml % nirrtile irrigtiles = my_nml % irrigtiles diff --git a/src/science/surface/physiol_jls_mod.F90 b/src/science/surface/physiol_jls_mod.F90 index 5bad9a6a..469a995c 100644 --- a/src/science/surface/physiol_jls_mod.F90 +++ b/src/science/surface/physiol_jls_mod.F90 @@ -107,7 +107,7 @@ SUBROUTINE physiol ( & ! imported variables l_crop, l_use_pft_psi, l_triffid -USE jules_irrig_mod, ONLY: l_irrig_dmd, l_soil_evap_irrig_expl +USE jules_irrig_mod, ONLY: l_irrig_dmd, l_soil_evap_irrig_separate USE jules_hydrology_mod, ONLY: l_limit_gsoil @@ -662,7 +662,7 @@ SUBROUTINE physiol ( & !$OMP isoprene_gb,terpene_gb,methanol_gb,acetone_gb,fsoil_tot,frac, & !$OMP land_index, t_i_length, pstar_land, pstar, ipar_land, & !$OMP photosynth_act_rad, q1_land, qw_1, gs_type, gs, & -!$OMP l_irrig_dmd, l_soil_evap_irrig_expl, gs_irr_type, & +!$OMP l_irrig_dmd, l_soil_evap_irrig_separate, gs_irr_type, & !$OMP cosz_gb, cos_zenith_angle, & !$OMP gsoil_irr_soilt, smvccl_soilt, gs_nvg, soil, l_limit_gsoil, & !$OMP sthu_irr_soilt, smvcst_soilt, gsoil_soilt, sthu_soilt, & @@ -856,7 +856,7 @@ SUBROUTINE physiol ( & gs_type(l,n) = gs(l) IF (l_irrig_dmd) THEN gs_irr_type(l,n) = gs(l) - IF ( l_soil_evap_irrig_expl ) THEN + IF ( l_soil_evap_irrig_separate ) THEN gs_nir_type(l,n) = gs(l) END IF END IF @@ -897,7 +897,7 @@ SUBROUTINE physiol ( & * smvcst_soilt(l,m,1) / smvccl_soilt(l,m,1))**2 ! ELSE Do nothing END IF - IF ( l_soil_evap_irrig_expl ) THEN + IF ( l_soil_evap_irrig_separate ) THEN gsoil_nir_soilt(l,m) = 0.0 IF (smvccl_soilt(l,m,1) > 0.0 .AND. l_limit_gsoil) THEN gsoil_nir_soilt(l,m) = gs_nvg(soil - npft) * & @@ -926,7 +926,7 @@ SUBROUTINE physiol ( & q1_land(l) = qw_1(i,j) cosz_gb(l) = cos_zenith_angle(i,j) fsoil_tot(l) = frac(l,soil) - IF ( l_soil_evap_irrig_expl ) THEN + IF ( l_soil_evap_irrig_separate ) THEN fsoil_irr_tot(l) = frac(l,soil)*frac_irr_surft(l,soil) fsoil_nir_tot(l) = frac(l,soil)*(1.0-frac_irr_surft(l,soil)) END IF @@ -1101,7 +1101,7 @@ SUBROUTINE physiol ( & ! is the same as in the overall gridbox irrigated fraction !$OMP PARALLEL IF(l_do_omp) DEFAULT(NONE) PRIVATE(l, k) & !$OMP SHARED(frac_irr_soilt, frac_irr_surft, land_pts, v_open, & -!$OMP l_irrig_dmd, l_soil_evap_irrig_expl, & +!$OMP l_irrig_dmd, l_soil_evap_irrig_separate, & !$OMP n, m, l_use_pft_psi, v_close, v_close_pft, & !$OMP sm_levels, sthu_soilt, sthu_irr_soilt, sthu_nir_soilt, & !$OMP l_do_omp, sthu_surft, v_open_pft, smvcwt_soilt, smvccl_soilt, fsmc_p0) @@ -1164,7 +1164,7 @@ SUBROUTINE physiol ( & wt_ext_irr_type(:,:,n),fsmc_irr(:,n), & psi_root_zone_pft(:,n)) - IF ( l_soil_evap_irrig_expl ) THEN + IF ( l_soil_evap_irrig_separate ) THEN CALL smc_ext (land_pts,sm_levels,surft_pts(n),surft_index(:,n), n, & f_root,sthu_nir_soilt(:,m,:), & v_open,smvcst_soilt(:,m,:), & @@ -1299,7 +1299,7 @@ SUBROUTINE physiol ( & IF ( frac_irr_surft(l,n) > 0.0 ) THEN IF ( fsmc_pft(l,n) > 0.0 ) THEN gs_irr_type(l,n) = gs_type(l,n) * fsmc_irr(l,n) / fsmc_pft(l,n) - IF ( l_soil_evap_irrig_expl ) THEN + IF ( l_soil_evap_irrig_separate ) THEN gs_nir_type(l,n) = gs_type(l,n) * fsmc_nir(l,n) / fsmc_pft(l,n) END IF @@ -1331,13 +1331,13 @@ SUBROUTINE physiol ( & ! with code before gsoil_f parameter was added gsoil_under_canopy(:) = gsoil_soilt(:,m) gsoil_irr_under_canopy(:) = gsoil_irr_soilt(:,m) - IF ( l_soil_evap_irrig_expl ) THEN + IF ( l_soil_evap_irrig_separate ) THEN gsoil_nir_under_canopy(:) = gsoil_nir_soilt(:,m) END IF ELSE gsoil_under_canopy(:) = gsoil_soilt(:,m) * gsoil_f(n) gsoil_irr_under_canopy(:) = gsoil_irr_soilt(:,m) * gsoil_f(n) - IF ( l_soil_evap_irrig_expl ) THEN + IF ( l_soil_evap_irrig_separate ) THEN gsoil_nir_under_canopy(:) = gsoil_nir_soilt(:,m) * gsoil_f(n) END IF END IF @@ -1362,10 +1362,11 @@ SUBROUTINE physiol ( & !$OMP PARALLEL DO IF(l_do_omp) DEFAULT(NONE) PRIVATE(l) SHARED(frac, & !$OMP l_do_omp, fsoil, fsoil_tot, fsoil_irr_tot, fsoil_nir_tot, & -!$OMP l_soil_evap_irrig_expl, frac_irr_surft, land_pts, n) SCHEDULE(STATIC) +!$OMP l_soil_evap_irrig_separate, frac_irr_surft, & +!$OMP land_pts, n) SCHEDULE(STATIC) DO l = 1,land_pts fsoil_tot(l) = fsoil_tot(l) + frac(l,n) * fsoil(l,n) - IF ( l_soil_evap_irrig_expl ) THEN + IF ( l_soil_evap_irrig_separate ) THEN fsoil_irr_tot(l) = fsoil_irr_tot(l) + frac(l,n) * fsoil(l,n) * & frac_irr_surft(l,n) fsoil_nir_tot(l) = fsoil_nir_tot(l) + frac(l,n) * fsoil(l,n) * & @@ -1387,7 +1388,7 @@ SUBROUTINE physiol ( & DO n = npft+1,ntype !$OMP PARALLEL DO IF(surft_pts(n) > 1) DEFAULT(NONE) PRIVATE(l, j) & !$OMP SHARED(gs_irr_type, gs_nir_type, gs_nvg, gs_type, & -!$OMP l_irrig_dmd, l_soil_evap_irrig_expl, & +!$OMP l_irrig_dmd, l_soil_evap_irrig_separate, & !$OMP n, npft, surft_index, surft_pts) & !$OMP SCHEDULE(STATIC) DO j = 1,surft_pts(n) @@ -1395,7 +1396,7 @@ SUBROUTINE physiol ( & gs_type(l,n) = gs_nvg(n - npft) IF (l_irrig_dmd) THEN gs_irr_type(l,n) = gs_nvg(n - npft) ! irrigation - IF (l_soil_evap_irrig_expl ) THEN + IF (l_soil_evap_irrig_separate ) THEN gs_nir_type(l,n) = gs_nvg(n - npft) ! non-irrigation END IF END IF @@ -1440,8 +1441,8 @@ SUBROUTINE physiol ( & n = soil !$OMP PARALLEL DO IF (surft_pts(n) > 1) DEFAULT(NONE) PRIVATE(l, j) & !$OMP SHARED(gs_irr_type, gs_type, gsoil_soilt, gsoil_irr_soilt, & -!$OMP l_irrig_dmd, l_soil_evap_irrig_expl, frac_irr_surft, & -!$OMP gsoil_nir_soilt, irrig_tile, & +!$OMP l_irrig_dmd, l_soil_evap_irrig_separate, & +!$OMP frac_irr_surft,gsoil_nir_soilt, irrig_tile, & !$OMP n, m, surft_index, surft_pts, wt_ext_type, & !$OMP wt_ext_irr_type, gs_nir_type) SCHEDULE(STATIC) DO j = 1,surft_pts(n) @@ -1451,7 +1452,7 @@ SUBROUTINE physiol ( & wt_ext_type(l,1,n) = 1.0 END IF IF (l_irrig_dmd) THEN - IF ( l_soil_evap_irrig_expl ) THEN + IF ( l_soil_evap_irrig_separate ) THEN gs_type(l,n) = frac_irr_surft(l,n)*gsoil_irr_soilt(l,m) & +(1.0-frac_irr_surft(l,n))*gsoil_nir_soilt(l,m) gs_nir_type(l,n) = gsoil_nir_soilt(l,m) ! non-irrigation @@ -1744,7 +1745,7 @@ SUBROUTINE physiol ( & DO n = 1,ntype !$OMP PARALLEL DO IF(surft_pts(n) > 1) DEFAULT(NONE) PRIVATE(l, j) & !$OMP SHARED(canhc, ch_type, frac, n, sm_levels, & -!$OMP l_irrig_dmd, l_soil_evap_irrig_expl, & +!$OMP l_irrig_dmd, l_soil_evap_irrig_separate, & !$OMP surft_index, surft_pts, vfrac, vf_type, wt_ext_soilt, & !$OMP frac_irr_surft, frac_irr_soilt, & !$OMP wt_ext_nir_soilt, wt_ext_nir_type, & @@ -1764,7 +1765,7 @@ SUBROUTINE physiol ( & / frac_irr_soilt(l,m) & * frac(l,n) * wt_ext_irr_type(l,k,n) END IF - IF ( l_soil_evap_irrig_expl) THEN + IF ( l_soil_evap_irrig_separate) THEN IF ((1.0-frac_irr_soilt(l,m)) > EPSILON(1.0)) THEN wt_ext_nir_soilt(l,m,k) = wt_ext_nir_soilt(l,m,k) & + (1.0-frac_irr_surft(l,n)) & @@ -1849,7 +1850,7 @@ SUBROUTINE physiol ( & !$OMP PARALLEL DO IF(surft_pts(n) > 1) DEFAULT(NONE) PRIVATE(k, l, j) & !$OMP SHARED(surft_pts, surft_index, flake, gc_surft, gs_type, l_irrig_dmd, & -!$OMP l_soil_evap_irrig_expl, gs_irr_surft, gs_irr_type, & +!$OMP l_soil_evap_irrig_separate, gs_irr_surft, gs_irr_type, & !$OMP canhc_surft, ch_type, vfrac_surft, & !$OMP vf_type, sm_levels, wt_ext_soilt, frac, wt_ext_type, & !$OMP wt_ext_surft, frac_irr_surft, frac_irr_soilt, & @@ -1864,7 +1865,7 @@ SUBROUTINE physiol ( & gc_surft(l,n) = gs_type(l,n) IF (l_irrig_dmd) THEN gs_irr_surft(l,n) = gs_irr_type(l,n) ! irrigation - IF (l_soil_evap_irrig_expl) THEN + IF (l_soil_evap_irrig_separate) THEN gs_nir_surft(l,n) = gs_nir_type(l,n) ! non irrigation gc_irr_surft(l,n) = gs_irr_surft(l,n) END IF @@ -1886,7 +1887,7 @@ SUBROUTINE physiol ( & * frac(l,n) * wt_ext_irr_type(l,k,n) END IF wt_ext_irr_surft(l,k,n) = wt_ext_irr_type(l,k,n) - IF (l_soil_evap_irrig_expl) THEN + IF (l_soil_evap_irrig_separate) THEN IF ((1.0-frac_irr_soilt(l,m)) > EPSILON(1.0)) THEN wt_ext_nir_soilt(l,m,k) = wt_ext_nir_soilt(l,m,k) & + (1.0-frac_irr_surft(l,n)) & @@ -2183,7 +2184,8 @@ SUBROUTINE physiol ( & !$OMP land_pts, k, n, m, smc_irr_soilt, sthu_irr_soilt, & !$OMP smc_nir_soilt, sthu_nir_soilt, frac, frac_irr_surft, & !$OMP frac_irr_soilt, l_do_omp,smvcst_soilt, v_close_pft, & -!$OMP l_soil_evap_irrig_expl, wt_ext_irr_type, wt_ext_nir_type) & +!$OMP l_soil_evap_irrig_separate, wt_ext_irr_type, & +!$OMP wt_ext_nir_type) & !$OMP SCHEDULE(STATIC) DO l = 1,land_pts IF ( frac_irr_soilt(l,m) > EPSILON(1.0) ) THEN @@ -2196,7 +2198,7 @@ SUBROUTINE physiol ( & * smvcst_soilt(l,m,k) & - v_close_pft(l,k,n))) END IF - IF (l_soil_evap_irrig_expl) THEN + IF (l_soil_evap_irrig_separate) THEN IF (1.0 - frac_irr_soilt(l,m) > EPSILON(1.0) ) THEN smc_nir_soilt(l,m) = smc_nir_soilt(l,m) & + MAX(0.0,(1.0-frac_irr_surft(l,n)) & @@ -2218,7 +2220,7 @@ SUBROUTINE physiol ( & DO m = 1,nsoilt !$OMP PARALLEL DO IF(l_do_omp) DEFAULT(NONE) PRIVATE(l) SHARED(dzsoil, & !$OMP land_pts, k, n, smc_irr_soilt, sthu_irr_soilt, & -!$OMP l_soil_evap_irrig_expl, & +!$OMP l_soil_evap_irrig_separate, & !$OMP smc_nir_soilt, sthu_nir_soilt,smvcst_soilt, & !$OMP smvcwt_soilt,wt_ext_irr_soilt,wt_ext_nir_soilt,m,l_do_omp) & !$OMP SCHEDULE(STATIC) @@ -2230,7 +2232,7 @@ SUBROUTINE physiol ( & * (sthu_irr_soilt(l,m,k) & * smvcst_soilt(l,m,k) & - smvcwt_soilt(l,m,k))) - IF (l_soil_evap_irrig_expl) THEN + IF (l_soil_evap_irrig_separate) THEN smc_nir_soilt(l,m) = smc_nir_soilt(l,m) & + MAX(0.0 , & wt_ext_nir_soilt(l,m,k) * rho_water & @@ -2252,11 +2254,11 @@ SUBROUTINE physiol ( & !$OMP smvcst_soilt, gs_irr_surft, gc_irr_surft, nsurft, l_do_omp, & !$OMP fsoil_irr_tot, fsoil_nir_tot, frac_irr_soilt, & !$OMP fsoil_irr_tot_tmp, fsoil_nir_tot_tmp, frac_irr_surft, & -!$OMP l_soil_evap_irrig_expl) +!$OMP l_soil_evap_irrig_separate) DO m = 1,nsoilt !$OMP DO SCHEDULE(STATIC) DO l = 1,land_pts - IF (l_soil_evap_irrig_expl) THEN + IF (l_soil_evap_irrig_separate) THEN IF (frac_irr_soilt(l,m) > 0.0) THEN fsoil_irr_tot_tmp = fsoil_irr_tot(l)/frac_irr_soilt(l,m) smc_irr_soilt(l,m) = (1.0 - fsoil_irr_tot_tmp ) * & diff --git a/src/science/surface/sf_evap_jls.F90 b/src/science/surface/sf_evap_jls.F90 index 186bdb98..3b211e04 100644 --- a/src/science/surface/sf_evap_jls.F90 +++ b/src/science/surface/sf_evap_jls.F90 @@ -47,7 +47,7 @@ SUBROUTINE sf_evap ( & USE ancil_info, ONLY: nsoilt -USE jules_irrig_mod, ONLY: l_irrig_dmd, l_soil_evap_irrig_expl +USE jules_irrig_mod, ONLY: l_irrig_dmd, l_soil_evap_irrig_separate USE jules_surface_mod, ONLY: l_aggregate, l_flake_model USE jules_surface_types_mod, ONLY: lake @@ -695,7 +695,7 @@ SUBROUTINE sf_evap ( & DO l = 1,land_pts ext_soilt(l,:,m) = 0.0 ext_irr_soilt(l,:,m) = 0.0 - IF ( l_soil_evap_irrig_expl ) THEN + IF ( l_soil_evap_irrig_separate ) THEN ext_nir_soilt(l,:,m) = 0.0 END IF END DO @@ -720,7 +720,7 @@ SUBROUTINE sf_evap ( & + tile_frac(l,n) * wt_ext_surft(l,m,n) & * esoil_surft(l,n) - IF ( l_soil_evap_irrig_expl ) THEN + IF ( l_soil_evap_irrig_separate ) THEN wt_ext_nir_surft(l,m,n) = wt_ext_surft(l,m,n) IF (1.0- frac_irr_surft(l,n) > EPSILON(1.0) ) THEN wt_ext_nir_surft(l,m,n) = (wt_ext_surft(l,m,n) - & @@ -780,7 +780,7 @@ SUBROUTINE sf_evap ( & !$OMP DO SCHEDULE(STATIC) DO k = 1,surft_pts(n) l = surft_index(k,n) - IF ( l_soil_evap_irrig_expl ) THEN + IF ( l_soil_evap_irrig_separate ) THEN wt_ext_nir_surft(l,m,n) = wt_ext_surft(l,m,n) IF ((1.0- frac_irr_surft(l,n)) > EPSILON(1.0) ) THEN wt_ext_nir_surft(l,m,n) = (wt_ext_surft(l,m,n) - & @@ -817,7 +817,7 @@ SUBROUTINE sf_evap ( & DO k = 1,surft_pts(n) l = surft_index(k,n) - IF ( l_soil_evap_irrig_expl ) THEN + IF ( l_soil_evap_irrig_separate ) THEN wt_ext_nir_surft(l,m,n) = wt_ext_surft(l,m,n) IF (1.0- frac_irr_surft(l,n) > EPSILON(1.0) ) THEN wt_ext_nir_surft(l,m,n) = (wt_ext_surft(l,m,n) - & diff --git a/src/science/surface/sf_resist_jls.F90 b/src/science/surface/sf_resist_jls.F90 index 78b7e864..a9b81528 100644 --- a/src/science/surface/sf_resist_jls.F90 +++ b/src/science/surface/sf_resist_jls.F90 @@ -32,7 +32,7 @@ SUBROUTINE sf_resist ( & USE water_constants_mod, ONLY: tm, rho_ice USE jules_surface_mod, ONLY: l_aggregate USE jules_vegetation_mod, ONLY: can_model -USE jules_irrig_mod, ONLY: l_soil_evap_irrig_expl +USE jules_irrig_mod, ONLY: l_soil_evap_irrig_separate USE parkind1, ONLY: jprb, jpim USE yomhook, ONLY: lhook, dr_hook IMPLICIT NONE @@ -148,7 +148,7 @@ SUBROUTINE sf_resist ( & !$OMP dq,snowdep_surft,tstar,snow_surft, & !$OMP catch,frac_snow_subl_melt,maskd,resfs,gc,ch,vshr,l_et_stom, & !$OMP l_et_stom_surft,resfs_stom,gc_stom_surft,frac_irr_surft, & -!$OMP gc_irr_surft,gc_nir_surft,l_soil_evap_irrig_expl,flake, & +!$OMP gc_irr_surft,gc_nir_surft,l_soil_evap_irrig_separate,flake, & !$OMP canopy,epdt,resft,l_fix_snow_frac, l_fix_neg_snow) DO k = 1,surft_pts l = surft_index(k) @@ -233,7 +233,7 @@ SUBROUTINE sf_resist ( & ! and bare soil evaporation from soil tiles. !----------------------------------------------------------------------- resfs(l) = gc(l) / ( gc(l) + ch(l) * vshr(i,j) ) - IF ( l_soil_evap_irrig_expl ) THEN + IF ( l_soil_evap_irrig_separate ) THEN gc_nir_surft(l) = gc(l) IF ( frac_irr_surft(l) < 1.0 ) THEN gc_nir_surft(l) = (gc(l) - frac_irr_surft(l) & @@ -265,7 +265,8 @@ SUBROUTINE sf_resist ( & !$OMP SHARED(surft_pts, surft_index, land_index, t_i_length, & !$OMP snow_surft, gc, vshr, fracaero_t, & !$OMP resfs, ch, resft, gc_nir_surft, frac_irr_surft, & -!$OMP gc_irr_surft, l_soil_evap_irrig_expl) SCHEDULE(STATIC) +!$OMP gc_irr_surft, l_soil_evap_irrig_separate) & +!$OMP SCHEDULE(STATIC) DO k = 1,surft_pts l = surft_index(k) IF (snow_surft(l) > 0.0) THEN @@ -274,7 +275,7 @@ SUBROUTINE sf_resist ( & fracaero_t(l) = 0.0 resfs(l) = gc(l) / & (gc(l) + ch(l) * vshr(i,j)) - IF ( l_soil_evap_irrig_expl ) THEN + IF ( l_soil_evap_irrig_separate ) THEN gc_nir_surft(l) = gc(l) IF ( frac_irr_surft(l) < 1.0 ) THEN gc_nir_surft(l) = (gc(l) - frac_irr_surft(l) & diff --git a/src/science/surface/soil_evap_jls.F90 b/src/science/surface/soil_evap_jls.F90 index 48bc914a..b31ec52d 100644 --- a/src/science/surface/soil_evap_jls.F90 +++ b/src/science/surface/soil_evap_jls.F90 @@ -26,7 +26,7 @@ SUBROUTINE soil_evap (npnts,nshyd,surft_pts,surft_index, & gsoil_irr,gs_irr,wt_ext_irr & ) -USE jules_irrig_mod, ONLY: l_irrig_dmd, l_soil_evap_irrig_expl +USE jules_irrig_mod, ONLY: l_irrig_dmd, l_soil_evap_irrig_separate USE yomhook, ONLY: lhook, dr_hook USE parkind1, ONLY: jprb, jpim IMPLICIT NONE @@ -106,7 +106,8 @@ SUBROUTINE soil_evap (npnts,nshyd,surft_pts,surft_index, & !$OMP PRIVATE(l,j,k) & !$OMP SHARED(npnts,fsoil,surft_pts,surft_index,lai,nshyd,wt_ext,gs,gsoil, & !$OMP frac_irr,gsoil_nir,gs_nir,wt_ext_nir,irrig_tile, & -!$OMP wt_ext_irr,gs_irr,gsoil_irr,l_irrig_dmd,l_soil_evap_irrig_expl) +!$OMP wt_ext_irr,gs_irr,gsoil_irr,l_irrig_dmd, & +!$OMP l_soil_evap_irrig_separate) ! Initialisations @@ -142,7 +143,7 @@ SUBROUTINE soil_evap (npnts,nshyd,surft_pts,surft_index, & END DO !$OMP END DO NOWAIT END IF - IF (l_soil_evap_irrig_expl) THEN + IF (l_soil_evap_irrig_separate) THEN !$OMP DO SCHEDULE(STATIC) DO j = 1,surft_pts l = surft_index(j) @@ -195,7 +196,7 @@ SUBROUTINE soil_evap (npnts,nshyd,surft_pts,surft_index, & ! Transpiration and soil conductances over irrigated fraction of tile ! relative to tile mean conductance (scaled by relative area later). ! Soil evaporation does not use grid box mean soil moisture: -IF (l_soil_evap_irrig_expl) THEN +IF (l_soil_evap_irrig_separate) THEN !$OMP DO SCHEDULE(STATIC) !CDIR NODEP DO j = 1,surft_pts From 9537e94c5572d13b917de9d77446ebb86bc87f39 Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Fri, 11 Sep 2026 12:16:17 +0100 Subject: [PATCH 28/31] required to deal with conflicts --- CONTRIBUTORS.md | 3 + .../jules-irrig/HEAD/rose-meta.conf | 115 +++++++++++++++++ .../jules-standalone/HEAD/rose-meta.conf | 118 +----------------- 3 files changed, 119 insertions(+), 117 deletions(-) create mode 100644 rose-meta/jules-shared/jules-irrig/HEAD/rose-meta.conf diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 7e80955c..67fd44ea 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -5,4 +5,7 @@ | yaswant | Yaswant Pradhan | Met Office | 2026-06-30 | | doucla | Douglas Clark | UKCEH | 2026-07-03 | | james-bruten-mo | James Bruten | Met Office | 2026-07-09 | +| maggiehendry | Maggie Hendry | Met Office | 2026-08-21 | +| DanCopsey | Dan Copsey | Met Office | 2026-08-24 | +| Pierre-siddall | Pierre Siddall | Met Office | 2026-08-26 | | nicgedney | Nic Gedney | Met Office | 2026-09-01 | diff --git a/rose-meta/jules-shared/jules-irrig/HEAD/rose-meta.conf b/rose-meta/jules-shared/jules-irrig/HEAD/rose-meta.conf new file mode 100644 index 00000000..b2d23bea --- /dev/null +++ b/rose-meta/jules-shared/jules-irrig/HEAD/rose-meta.conf @@ -0,0 +1,115 @@ +[namelist:jules_irrig] +compulsory=true +description=Configuration of irrigation demand code +ns=namelist/JULES Science Settings/jules_irrig +sort-key=21 +title=Irrigation options +url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#namelist-JULES_IRRIG + +[namelist:jules_irrig=frac_irrig_all_tiles] +compulsory=true +description=Irrigate all tiles + =NOT AVAILABLE TO UM +fail-if=namelist:jules_irrig=set_irrfrac_on_irrtiles == '.true.' and this == '.true.'; # cannot set both frac_irrig_all_tiles and set_irrfrac_on_irrtiles to TRUE +sort-key=f +trigger=namelist:jules_irrig=nirrtile: .false.; + = namelist:jules_irrig=irrigtiles: .false.; +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::frac_irrig_all_tiles + +[namelist:jules_irrig=irr_crop] +compulsory=true +description=Switch for how the irrigation model determines when to irrigate. + =0 is the only option available in the UM +sort-key=c +url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::irr_crop +values=0,1,2 + +[namelist:jules_irrig=irrig_option] +compulsory=true +description=Options for applying irrigation + =0: No irrigation + =1: In a future release this will replace l_irrig_dmd (NOT AVAILABLE YET) + =2: Apply irrigation to available irrigated surface types +fail-if=this == 2 and namelist:jules_soil=l_tile_soil == '.true.'; # Tile-based irrigation is not available with soil tiling. +sort-key=b +trigger=namelist:jules_pftparm=irrig_pft_io: 2; + =namelist:jules_surface_types=c3_irrig: 2; + =namelist:jules_surface_types=c4_irrig: 2; +url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::irrig_option +value-titles=No Irrigation, Tile based irrigation +values=0,2 + +[namelist:jules_irrig=irrigtiles] +compulsory=true +description=indices of tiles to be irrigated +fail-if=len(this) != namelist:jules_irrig=nirrtile +length=: +range=1: +sort-key=e +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::irrigtiles + +[namelist:jules_irrig=l_irrig_dmd] +compulsory=true +description=Use fraction-based irrigation demand code +fail-if=namelist:jules_soil=l_holdwater == '.true.' and this == '.true.'; # Irrigation can't be used with l_holdwater = TRUE + =namelist:jules_water_resources=l_water_irrigation == '.true.' and this == '.false.'; # Irrigation in water resources code requires l_irrig_dmd = TRUE +sort-key=a +trigger=namelist:jules_irrig=irr_crop: .true.; + =namelist:jules_irrig=l_irrig_limit: .true.; + =namelist:jules_irrig=frac_irrig_all_tiles: .true.; + =namelist:jules_irrig=set_irrfrac_on_irrtiles: .true.; + =namelist:jules_irrig=nstep_irrig: .true.; + =namelist:jules_irrig_props: .true.; + =namelist:jules_irrig=irrig_option: .false.; +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::l_irrig_dmd + +[namelist:jules_irrig=l_irrig_limit] +compulsory=true +description=Limit irrigation supply + =NOT AVAILABLE TO UM +fail-if=namelist:jules_rivers=l_rivers == '.false.' and this == '.true.'; # l_rivers must TRUE if l_irrig_limit = TRUE + =namelist:jules_rivers=i_river_vn != 3 and this == '.true.'; # i_river_vn must be 3 (trip) if l_irrig_limit = TRUE + =namelist:jules_hydrology=l_top == '.false.' and this == '.true.'; # l_top must TRUE if l_irrig_limit = TRUE + =namelist:jules_water_resources=l_water_irrigation == '.true.' and this == '.true.'; # l_irrig_limit must be F if l_water_irrigation=T + =this == '.true.' and namelist:jules_model_environment=l_jules_parent == 1; # Irrigation limitation is not tested in the UM yet. +sort-key=b +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::l_irrig_limit + +[namelist:jules_irrig=nirrtile] +compulsory=true +description=Number of tile to be irrigated +range=0: +sort-key=d +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::nirrtile + +[namelist:jules_irrig=nstep_irrig] +compulsory=true +description=Number of model timesteps per irrigation update step +range=1: +sort-key=h +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::nstep_irrig + +[namelist:jules_irrig=set_irrfrac_on_irrtiles] +compulsory=true +description=Irrigate only irrigated tiles + =NOT AVAILABLE TO UM +fail-if=namelist:jules_irrig=frac_irrig_all_tiles == '.true.' and this == '.true.'; # cannot set both frac_irrig_all_tiles and set_irrfrac_on_irrtiles to TRUE +sort-key=g +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::set_irrfrac_on_irrtiles + +[namelist:jules_irrig=l_soil_evap_irrig_separate] +compulsory=true +description=logical to decide whether bare soil evaporation is + =calculated over the grid-box mean (false) or + =explicitly irrigated and non-irrigated fractions (true) +fail-if=this == '.true.' and namelist:jules_irrig=l_irrig_dmd == '.false.' +sort-key=h +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::l_soil_evap_irrig_separate diff --git a/rose-meta/jules-standalone/HEAD/rose-meta.conf b/rose-meta/jules-standalone/HEAD/rose-meta.conf index b53d6199..b32562d9 100644 --- a/rose-meta/jules-standalone/HEAD/rose-meta.conf +++ b/rose-meta/jules-standalone/HEAD/rose-meta.conf @@ -1,6 +1,7 @@ # Please see jules:wiki:SharingJULESmetadata import=jules-shared/jules-hydrology/HEAD + =jules-shared/jules-irrig/HEAD =jules-shared/jules-model-environment/HEAD =jules-shared/jules-nvegparm/HEAD =jules-shared/jules-pftparm/HEAD @@ -2581,123 +2582,6 @@ sort-key=05 type=character url=https://metoffice.github.io/jules/latest/namelists/model_grid.nml.html#JULES_INPUT_GRID::y_dim_name -[namelist:jules_irrig] -compulsory=true -description=Configuration of irrigation demand code -ns=namelist/JULES Science Settings/jules_irrig -sort-key=21 -title=Irrigation options -url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#namelist-JULES_IRRIG - -[namelist:jules_irrig=frac_irrig_all_tiles] -compulsory=true -description=Irrigate all tiles - =NOT AVAILABLE TO UM -fail-if=namelist:jules_irrig=set_irrfrac_on_irrtiles == '.true.' and this == '.true.'; # cannot set both frac_irrig_all_tiles and set_irrfrac_on_irrtiles to TRUE -sort-key=f -trigger=namelist:jules_irrig=nirrtile: .false.; - = namelist:jules_irrig=irrigtiles: .false.; -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::frac_irrig_all_tiles - -[namelist:jules_irrig=irr_crop] -compulsory=true -description=Switch for how the irrigation model determines when to irrigate. - =0 is the only option available in the UM -sort-key=c -url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::irr_crop -values=0,1,2 - -[namelist:jules_irrig=irrig_option] -compulsory=true -description=Options for applying irrigation - =0: No irrigation - =1: In a future release this will replace l_irrig_dmd (NOT AVAILABLE YET) - =2: Apply irrigation to available irrigated surface types -fail-if=this == 2 and namelist:jules_soil=l_tile_soil == '.true.'; # Tile-based irrigation is not available with soil tiling. -sort-key=b -trigger=namelist:jules_pftparm=irrig_pft_io: 2; - =namelist:jules_surface_types=c3_irrig: 2; - =namelist:jules_surface_types=c4_irrig: 2; -url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::irrig_option -value-titles=No Irrigation, Tile based irrigation -values=0,2 - -[namelist:jules_irrig=irrigtiles] -compulsory=true -description=indices of tiles to be irrigated -fail-if=len(this) != namelist:jules_irrig=nirrtile -length=: -range=1: -sort-key=e -type=integer -url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::irrigtiles - -[namelist:jules_irrig=l_irrig_dmd] -compulsory=true -description=Use fraction-based irrigation demand code -fail-if=namelist:jules_soil=l_holdwater == '.true.' and this == '.true.'; # Irrigation can't be used with l_holdwater = TRUE - =namelist:jules_water_resources=l_water_irrigation == '.true.' and this == '.false.'; # Irrigation in water resources code requires l_irrig_dmd = TRUE -sort-key=a -trigger=namelist:jules_irrig=irr_crop: .true.; - =namelist:jules_irrig=l_irrig_limit: .true.; - =namelist:jules_irrig=frac_irrig_all_tiles: .true.; - =namelist:jules_irrig=set_irrfrac_on_irrtiles: .true.; - =namelist:jules_irrig=nstep_irrig: .true.; - =namelist:jules_irrig_props: .true.; - =namelist:jules_irrig=irrig_option: .false.; - =namelist:jules_irrig=l_soil_evap_irrig_separate: .true.; -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::l_irrig_dmd - -[namelist:jules_irrig=l_irrig_limit] -compulsory=true -description=Limit irrigation supply - =NOT AVAILABLE TO UM -fail-if=namelist:jules_rivers=l_rivers == '.false.' and this == '.true.'; # l_rivers must TRUE if l_irrig_limit = TRUE - =namelist:jules_rivers=i_river_vn != 3 and this == '.true.'; # i_river_vn must be 3 (trip) if l_irrig_limit = TRUE - =namelist:jules_hydrology=l_top == '.false.' and this == '.true.'; # l_top must TRUE if l_irrig_limit = TRUE - =namelist:jules_water_resources=l_water_irrigation == '.true.' and this == '.true.'; # l_irrig_limit must be F if l_water_irrigation=T - =this == '.true.' and namelist:jules_model_environment=l_jules_parent == 1; # Irrigation limitation is not tested in the UM yet. -sort-key=b -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::l_irrig_limit - -[namelist:jules_irrig=nirrtile] -compulsory=true -description=Number of tile to be irrigated -range=0: -sort-key=d -type=integer -url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::nirrtile - -[namelist:jules_irrig=nstep_irrig] -compulsory=true -description=Number of model timesteps per irrigation update step -range=1: -sort-key=h -type=integer -url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::nstep_irrig - -[namelist:jules_irrig=set_irrfrac_on_irrtiles] -compulsory=true -description=Irrigate only irrigated tiles - =NOT AVAILABLE TO UM -fail-if=namelist:jules_irrig=frac_irrig_all_tiles == '.true.' and this == '.true.'; # cannot set both frac_irrig_all_tiles and set_irrfrac_on_irrtiles to TRUE -sort-key=g -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::set_irrfrac_on_irrtiles - -[namelist:jules_irrig=l_soil_evap_irrig_separate] -compulsory=true -description=logical to decide whether bare soil evaporation is - =calculated over the grid-box mean (false) or - =explicitly irrigated and non-irrigated fractions (true) -fail-if=this == '.true.' and namelist:jules_irrig=l_irrig_dmd == '.false.' -sort-key=h -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_irrig.nml.html#JULES_IRRIG::l_soil_evap_irrig_separate - [namelist:jules_irrig_props] compulsory=true description=Configuration of irrigation properties From 04d2ecc07dd40f8dfd7f005079dede879c3530ff Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Fri, 11 Sep 2026 12:19:57 +0100 Subject: [PATCH 29/31] versions.py changed to deal with conflict --- rose-meta/jules-standalone/versions.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rose-meta/jules-standalone/versions.py b/rose-meta/jules-standalone/versions.py index 37b0b699..f6e4338a 100644 --- a/rose-meta/jules-standalone/versions.py +++ b/rose-meta/jules-standalone/versions.py @@ -47,10 +47,10 @@ class vnYY_txxxx(MacroUpgrade): - """Upgrade macro from JULES by Author""" + """Upgrade macro from JULES by Nic Gedney""" - BEFORE_TAG = "vn8.2" - AFTER_TAG = "vn8.2_t139" + BEFORE_TAG = "vn8.2_t141" + AFTER_TAG = "vn8.2_t155" def upgrade(self, config, meta_config=None): """Upgrade a JULES runtime app configuration.""" From c87799062c8a79a78f9db227c691cf17bd6d3874 Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Fri, 11 Sep 2026 14:17:22 +0100 Subject: [PATCH 30/31] deal with rose-meta data conflicts --- .../jules-vegetation/HEAD/rose-meta.conf | 6 + .../jules-standalone/HEAD/rose-meta.conf | 2025 ++--------------- rose-meta/jules-standalone/versions.py | 26 +- 3 files changed, 234 insertions(+), 1823 deletions(-) diff --git a/rose-meta/jules-shared/jules-vegetation/HEAD/rose-meta.conf b/rose-meta/jules-shared/jules-vegetation/HEAD/rose-meta.conf index 5c8f7f03..26149cc3 100644 --- a/rose-meta/jules-shared/jules-vegetation/HEAD/rose-meta.conf +++ b/rose-meta/jules-shared/jules-vegetation/HEAD/rose-meta.conf @@ -11,11 +11,15 @@ compulsory=true description=Vegetation canopy radiation model !enumeration=true sort-key=Panel-I13 +trigger=namelist:jules_vegetation=ilayers: 4,5,6; + =namelist:jules_pftparm=knl_io: 6; url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::can_rad_mod value-titles=1: Single canopy layer, =4: Multi-layer two stream approach, =5: Multi-layer with Sunfleck penetration and sunlit and shaded leaves, =6: Multi-layer with exponential decline in leaf N +values=1,4,5,6 +widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget [namelist:jules_vegetation=l_bvoc_emis] compulsory=true @@ -81,6 +85,8 @@ compulsory=true description=Logical switch for setting explicit vegetation roughness lengths !kind=default sort-key=Panel-I05 +trigger=namelist:jules_pftparm=dz0v_dh_io: .false.; + =namelist:jules_pftparm=z0v_io: .true.; type=logical url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::l_spec_veg_z0 diff --git a/rose-meta/jules-standalone/HEAD/rose-meta.conf b/rose-meta/jules-standalone/HEAD/rose-meta.conf index b32562d9..32948207 100644 --- a/rose-meta/jules-standalone/HEAD/rose-meta.conf +++ b/rose-meta/jules-standalone/HEAD/rose-meta.conf @@ -1,17 +1,36 @@ -# Please see jules:wiki:SharingJULESmetadata - -import=jules-shared/jules-hydrology/HEAD +############################################################################### +# This is the "standalone" flavour of the JULES metadata +############################################################################### +# This should only contain: +# * Import statements from jules-shared. +# * JULES specific amendments to the imported metadata. +# The majority of the metadata should be under rose-meta/jules-shared. +# +# Please see https://github.com/MetOffice/jules/wiki/Sharing-JULES-metadata +############################################################################### + +import=jules-shared/jules-deposition/HEAD + =jules-shared/jules-deposition-species/HEAD + =jules-shared/jules-deposition-species-specific/HEAD + =jules-shared/jules-hydrology/HEAD =jules-shared/jules-irrig/HEAD =jules-shared/jules-model-environment/HEAD =jules-shared/jules-nvegparm/HEAD + =jules-shared/jules-overbank/HEAD =jules-shared/jules-pftparm/HEAD =jules-shared/jules-radiation/HEAD + =jules-shared/jules-red/HEAD + =jules-shared/jules-rivers/HEAD =jules-shared/jules-snow/HEAD =jules-shared/jules-soil/HEAD + =jules-shared/jules-soil-biogeochem/HEAD + =jules-shared/jules-soil-ecosse/HEAD =jules-shared/jules-surface/HEAD =jules-shared/jules-surface-types/HEAD + =jules-shared/jules-temp-fixes/HEAD =jules-shared/jules-urban/HEAD =jules-shared/jules-vegetation/HEAD + =jules-shared/jules-water-resources/HEAD [command] ns=Execution command @@ -666,64 +685,6 @@ length=: type=integer url=https://metoffice.github.io/jules/latest/namelists/cable_surface_types.nml.html#CABLE_SURFACE_TYPES::urban_cable -[namelist:fire_switches] -compulsory=true -description=Switches for controlling activation of the fire module -ns=namelist/JULES Science Settings/fire_switches -sort-key=16 -title=Fire options -url=https://metoffice.github.io/jules/latest/namelists/fire.nml.html#namelist-FIRE_SWITCHES - -[namelist:fire_switches=canadian_flag] -compulsory=true -description=Switch for Canadian Fire Weather Index (FWI) -sort-key=04 -trigger=namelist:fire_switches=canadian_hemi_opt: .true.; -type=logical -url=https://metoffice.github.io/jules/latest/namelists/fire.nml.html#FIRE_SWITCHES::canadian_flag - -[namelist:fire_switches=canadian_hemi_opt] -compulsory=true -description=If TRUE, apply 6-month offset to S-hemisphere month-dependent parameters -sort-key=05 -type=logical -url=https://metoffice.github.io/jules/latest/namelists/fire.nml.html#FIRE_SWITCHES::canadian_hemi_opt - -[namelist:fire_switches=l_fire] -compulsory=true -description=Switch to enable the fire module -sort-key=01 -trigger=namelist:fire_switches=mcarthur_flag: .true.; - =namelist:fire_switches=mcarthur_opt: .true.; - =namelist:fire_switches=canadian_flag: .true.; - =namelist:fire_switches=nesterov_flag: .true.; -type=logical -url=https://metoffice.github.io/jules/latest/namelists/fire.nml.html#FIRE_SWITCHES::l_fire - -[namelist:fire_switches=mcarthur_flag] -compulsory=true -description=Switch for McArthur Forest Fire Danger Index (FFDI) -sort-key=02 -trigger=namelist:fire_switches=mcarthur_opt: .true.; -type=logical -url=https://metoffice.github.io/jules/latest/namelists/fire.nml.html#FIRE_SWITCHES::mcarthur_flag - -[namelist:fire_switches=mcarthur_opt] -compulsory=true -description=Method for soil moisture deficit in McArthur FFDI -sort-key=03 -url=https://metoffice.github.io/jules/latest/namelists/fire.nml.html#FIRE_SWITCHES::mcarthur_opt -value-titles=Model value,Fixed at 120 mm -values=1,2 -widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget - -[namelist:fire_switches=nesterov_flag] -compulsory=true -description=Switch for Nesterov Index -sort-key=06 -type=logical -url=https://metoffice.github.io/jules/latest/namelists/fire.nml.html#FIRE_SWITCHES::nesterov_flag - [namelist:imogen_anlg_vals_list] compulsory=true ns=namelist/IMOGEN/GCM Analogue configuration @@ -1476,304 +1437,6 @@ length=: type=real url=https://metoffice.github.io/jules/latest/namelists/crop_params.nml.html#JULES_CROPPARM::yield_frac_io -[namelist:jules_deposition] -compulsory=true -description=Configuration of atmospheric deposition -ns=namelist/JULES Science Settings/jules_deposition -title=Deposition -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#namelist-JULES_DEPOSITION - -[namelist:jules_deposition=dep_h2_soil_scheme] -compulsory=true -description=Scheme for H2 soil deposition -fail-if=( this == 2 and namelist:jules_model_environment=l_jules_parent == 1 ) ; # The Paulot et al. H2 scheme is not yet fully implemented for UM-coupled JULES applications (when JULES deposition called from UKCA): only Conrad & Seiler scheme available, dep_h2_soil_scheme = 1 -sort-key=5f -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION::dep_h2_soil_scheme -value-titles=Conrad & Seiler H2 deposition scheme,Paulot et al. H2 deposition scheme -values=1,2 - -[namelist:jules_deposition=dry_dep_model] -compulsory=true -description=Dry deposition model -sort-key=2 -trigger=namelist:jules_deposition_species=dd_ice_coeff_io: 2; - =namelist:jules_deposition_species=dep_species_name_io: 1,2; - =namelist:jules_deposition_species=dep_species_rmm_io: 2; - =namelist:jules_deposition_species=diffusion_coeff_io: 2; - =namelist:jules_deposition_species=diffusion_corr_io: 2; - =namelist:jules_deposition_species=r_tundra_io: 2; - =namelist:jules_deposition_species=rsurf_std_io: 2; - =namelist:jules_deposition_species_specific=ch4_mml_io: 2; - =namelist:jules_deposition_species_specific=ch4_scaling_io: 2; - =namelist:jules_deposition_species_specific=ch4_up_flux_io: 2; - =namelist:jules_deposition_species_specific=ch4dd_tundra_io: 2; - =namelist:jules_deposition_species_specific=cuticle_o3_io: 2; - =namelist:jules_deposition_species_specific=h2dd_c_io: 2; - =namelist:jules_deposition_species_specific=h2dd_m_io: 2; - =namelist:jules_deposition_species_specific=h2dd_q_io: 2; - =namelist:jules_deposition_species_specific=r_wet_soil_o3_io: 2; -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION::dry_dep_model -value-titles=JULES with restricted UKCA deposition,JULES with flexible UKCA deposition -values=1,2 -widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget - -[namelist:jules_deposition=dzl_const] -compulsory=true -description=Constant separation for boundary layer levels (m) -range=0: -sort-key=6 -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION::dzl_const - -[namelist:jules_deposition=l_deposition] -compulsory=true -description=Switch to enable JULES-based atmospheric dry deposition -fail-if=(this == '.true.' and namelist:jules_surface=l_aggregate == ".true.") ; # Deposition does not work with aggregated tile -sort-key=1 -trigger=namelist:jules_deposition=dep_h2_soil_scheme: .true.; - =namelist:jules_deposition=dry_dep_model: .true.; - =namelist:jules_deposition=dzl_const: .true.; - =namelist:jules_deposition=l_deposition_flux: .true.; - =namelist:jules_deposition=l_deposition_gc_corr: .true.; - =namelist:jules_deposition=l_ukca_ddep_lev1: .true.; - =namelist:jules_deposition=l_ukca_ddepo3_ocean: .true.; - =namelist:jules_deposition=l_ukca_dry_dep_so2wet: .true.; - =namelist:jules_deposition=l_ukca_emsdrvn_ch4: .true.; - =namelist:jules_deposition=ndry_dep_species: .true.; - =namelist:jules_deposition=tundra_s_limit: .true.; - =namelist:jules_deposition_species: .true.; - =namelist:jules_deposition_species_specific: .true.; - =namelist:jules_temp_fixes=l_fix_drydep_so2_water: .true.; - =namelist:jules_temp_fixes=l_fix_improve_drydep: .true.; - =namelist:jules_temp_fixes=l_fix_ukca_h2dd_x: .true.; -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION::l_deposition - -[namelist:jules_deposition=l_deposition_flux] -compulsory=true -description=Switch to enable calculation of deposition fluxes -sort-key=4a -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION::l_deposition_flux - -[namelist:jules_deposition=l_deposition_from_ukca] -compulsory=true -description=Switch to call JULES-based deposition routines from ukca_chemistry_ctl -fail-if=( this == '.false.' and namelist:jules_model_environment=l_jules_parent == 1 ) ; # For UM_JULES applications, only the call to the deposition routines from the UKCA is currently available - =( this == '.true.' and namelist:jules_model_environment=l_jules_parent == 0 ) ; # Deposition switch cannot be true in JULES standalone as JULES-based deposition routines called from UKCA -sort-key=5a -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION::l_deposition_from_ukca - -[namelist:jules_deposition=l_deposition_gc_corr] -compulsory=true -description=Switch to correct stomatal conductance for bare soil evaporation -fail-if=( this == '.true.' and namelist:jules_model_environment=l_jules_parent == 1 ) ; # For UM_JULES applications, stomatal conductance corrected for bare soil evaporation is not available in the UKCA -sort-key=4b -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION::l_deposition_gc_corr - -[namelist:jules_deposition=l_ukca_ddep_lev1] -compulsory=true -description=Apply dry deposition losses only from the lowest level (true) or all levels (false) in the atmospheric boundary layer -sort-key=5b -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION::l_ukca_ddep_lev1 - -[namelist:jules_deposition=l_ukca_ddepo3_ocean] -compulsory=true -description=Use a mechanistic calculation for ocean ozone deposition -fail-if=( this == '.true.' and namelist:jules_model_environment=l_jules_parent == 0 ) ; # Deposition switch not available in JULES standalone as requires >75% open water fraction -sort-key=5c -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION::l_ukca_ddepo3 - -[namelist:jules_deposition=l_ukca_dry_dep_so2wet] -compulsory=true -description=Accounting for surface wetness in the dry deposition for SO2 -fail-if=( this == '.true.' and namelist:jules_model_environment=l_jules_parent == 0 ) ; # Deposition switch not fully implemented in JULES standalone -sort-key=5d -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION::l_ukca_dry_dep_so2wet - -[namelist:jules_deposition=l_ukca_emsdrvn_ch4] -compulsory=true -description=CH4 emission driven UKCA -sort-key=5e -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION::l_ukca_emsdrvn_ch4 - -[namelist:jules_deposition=ndry_dep_species] -compulsory=true -description=Number of species for dry deposition -range=1:200 -sort-key=3 -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION::ndry_dep_species - -[namelist:jules_deposition=tundra_s_limit] -compulsory=true -description=sine of latitude of southern limit of tundra -range=-1:1 -sort-key=7 -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION::tundra_s_limit - -[namelist:jules_deposition_species] -compulsory=true -description=Deposition parameters that depend on species -duplicate=true -ns=namelist/JULES Science Settings/jules_deposition/jules_deposition_species -title=Deposition Species -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#namelist-JULES_DEPOSITION_SPECIES - -[namelist:jules_deposition_species=dd_ice_coeff_io] -compulsory=true -description=Coefficients for quadratic dependency of dry deposition to ice -fail-if=any(this == -1073741824.0) ; # Invalid parameter value(s) -length=3 -sort-key=6 -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION_SPECIES::dd_ice_coeff_io - -[namelist:jules_deposition_species=dep_species_name_io] -compulsory=true -description=Name of chemical species to be deposited -fail-if=(this == "'unset'") ; # Invalid name for deposited species -sort-key=01 -trigger=namelist:jules_deposition_species=dd_ice_coeff_io: this == "'SO2'" or this == "'HNO3'" or this == "'HONO2'" or this == "'ISON'" or this == "'HCl'" or this == "'HOCl'" or this == "'HBr'" or this == "'HOBr'" ; - =namelist:jules_deposition_species=diffusion_corr_io: this == "'NO2'" or this == "'O3'" or this == "'SO2'" or this == "'NH3'" or this == "'PAN'" or this == "'MPAN'" or this == "'PPAN'" or this == "'ONITU'" ; - =namelist:jules_deposition_species=r_tundra_io: this == "'NO2'" or this == "'O3'" or this == "'CO'" or this == "'H2'" or this == "'PAN'" or this == "'MPAN'" or this == "'PPAN'" or this == "'ONITU'" ; -type=character -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION_SPECIES::dep_species_name_io - -[namelist:jules_deposition_species=dep_species_rmm_io] -compulsory=true -description=Relative molecular mass (g mol-1), used in calculation of quasi-laminar resistance (Rb) -range=0: -sort-key=02a -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION_SPECIES::dep_species_rmm_io - -[namelist:jules_deposition_species=diffusion_coeff_io] -compulsory=true -description=Diffusion coefficient (m2 s-1), used in calculation of quasi-laminar resistance (Rb) -range=-1,0: -sort-key=02b -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION_SPECIES::diffusion_coeff_io - -[namelist:jules_deposition_species=diffusion_corr_io] -compulsory=true -description=Diffusion correction for stomatal conductance -range=0: -sort-key=04 -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION_SPECIES::diffusion_corr_io - -[namelist:jules_deposition_species=r_tundra_io] -compulsory=true -description=Surface resistance used in tundra region (s m-1) -range=0:1.0e+30 -sort-key=05 -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION_SPECIES::r_tundra_io - -[namelist:jules_deposition_species=rsurf_std_io] -compulsory=true -description=Standard values of surface resistance (s m-1) -fail-if=len(this) != (namelist:jules_surface_types=npft)+(namelist:jules_surface_types=nnvg) -length=: -range=0:1.0e+30 -sort-key=03 -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION_SPECIES::rsurf_std_io - -[namelist:jules_deposition_species_specific] -compulsory=true -description=Deposition parameters that depend on species -ns=namelist/JULES Science Settings/jules_deposition/jules_deposition_species_specific -title=Deposition Species Specific -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#namelist-JULES_DEPOSITION_SPECIES - -[namelist:jules_deposition_species_specific=ch4_mml_io] -compulsory=true -description=Factor to convert methane flux to dry dep velocity -range=0: -sort-key=02b -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION_SPECIES::ch4_mml_io - -[namelist:jules_deposition_species_specific=ch4_scaling_io] -compulsory=true -description=Scaling applied to CH4 soil uptake -range=0: -sort-key=02a -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION_SPECIES::ch4_scaling_io - -[namelist:jules_deposition_species_specific=ch4_up_flux_io] -compulsory=true -description=Uptake of methane to different surface types -fail-if=len(this) != (namelist:jules_surface_types=npft)+(namelist:jules_surface_types=nnvg) -length=: -range=0: -sort-key=02c -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION_SPECIES::ch4_up_flux_io - -[namelist:jules_deposition_species_specific=ch4dd_tundra_io] -compulsory=true -description=Coefficients of cubic fit for CH4 loss to tundra -fail-if=any(this == -1073741824.0) ; # Invalid parameter value(s) -length=4 -sort-key=02d -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION_SPECIES::ch4dd_tundra_io - -[namelist:jules_deposition_species_specific=cuticle_o3_io] -compulsory=true -description=Constant in calculation of cuticular resistance for ozone (s m-1) -range=0:1.0e+30 -sort-key=1a -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION_SPECIES::cuticle_o3_io - -[namelist:jules_deposition_species_specific=h2dd_c_io] -compulsory=true -description=Constant in quadratic function for hydrogen deposition -fail-if=len(this) != (namelist:jules_surface_types=npft)+(namelist:jules_surface_types=nnvg) - =any(this == -1073741824.0) ; # Invalid parameter value(s) -length=: -sort-key=03a -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION_SPECIES::h2dd_c_io - -[namelist:jules_deposition_species_specific=h2dd_m_io] -compulsory=true -description=Coefficient of first order term in quadratic function for hydrogen deposition -fail-if=len(this) != (namelist:jules_surface_types=npft)+(namelist:jules_surface_types=nnvg) - =any(this == -1073741824.0) ; # Invalid parameter value(s) -length=: -sort-key=03b -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION_SPECIES::h2dd_m_io - -[namelist:jules_deposition_species_specific=h2dd_q_io] -compulsory=true -description=Coefficient of second order term in quadratic function for hydrogen deposition -fail-if=len(this) != (namelist:jules_surface_types=npft)+(namelist:jules_surface_types=nnvg) - =any(this == -1073741824.0) ; # Invalid parameter value(s) -length=: -sort-key=03c -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION_SPECIES::h2dd_q_io - -[namelist:jules_deposition_species_specific=r_wet_soil_o3_io] -compulsory=true -description=Wet soil surface resistance for ozone (s m-1) -range=0:1.0e+30 -sort-key=01b -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_deposition.nml.html#JULES_DEPOSITION_SPECIES::r_wet_soil_o3_io - [namelist:jules_drive] compulsory=true description=Configuration of meteorological forcing data @@ -2057,6 +1720,64 @@ sort-key=13 type=real url=https://metoffice.github.io/jules/latest/namelists/drive.nml.html#JULES_DRIVE::z1_uv_in +[namelist:jules_fire_weather_index] +compulsory=true +description=Switches for controlling activation of the fire module +ns=namelist/JULES Science Settings/jules_fire_weather_index +sort-key=16 +title=Fire Weather Index options +url=https://metoffice.github.io/jules/latest/namelists/fire.nml.html#namelist-JULES_FIRE_WEATHER_INDEX + +[namelist:jules_fire_weather_index=canadian_flag] +compulsory=true +description=Switch for Canadian Fire Weather Index (FWI) +sort-key=04 +trigger=namelist:jules_fire_weather_index=canadian_hemi_opt: .true.; +type=logical +url=https://metoffice.github.io/jules/latest/namelists/fire.nml.html#JULES_FIRE_WEATHER_INDEX::canadian_flag + +[namelist:jules_fire_weather_index=canadian_hemi_opt] +compulsory=true +description=If TRUE, apply 6-month offset to S-hemisphere month-dependent parameters +sort-key=05 +type=logical +url=https://metoffice.github.io/jules/latest/namelists/fire.nml.html#JULES_FIRE_WEATHER_INDEX::canadian_hemi_opt + +[namelist:jules_fire_weather_index=l_fire_weather_index] +compulsory=true +description=Switch to enable the fire module +sort-key=01 +trigger=namelist:jules_fire_weather_index=mcarthur_flag: .true.; + =namelist:jules_fire_weather_index=mcarthur_opt: .true.; + =namelist:jules_fire_weather_index=canadian_flag: .true.; + =namelist:jules_fire_weather_index=nesterov_flag: .true.; +type=logical +url=https://metoffice.github.io/jules/latest/namelists/fire.nml.html#JULES_FIRE_WEATHER_INDEX::l_fire_weather_index + +[namelist:jules_fire_weather_index=mcarthur_flag] +compulsory=true +description=Switch for McArthur Forest Fire Danger Index (FFDI) +sort-key=02 +trigger=namelist:jules_fire_weather_index=mcarthur_opt: .true.; +type=logical +url=https://metoffice.github.io/jules/latest/namelists/fire.nml.html#JULES_FIRE_WEATHER_INDEX::mcarthur_flag + +[namelist:jules_fire_weather_index=mcarthur_opt] +compulsory=true +description=Method for soil moisture deficit in McArthur FFDI +sort-key=03 +url=https://metoffice.github.io/jules/latest/namelists/fire.nml.html#JULES_FIRE_WEATHER_INDEX::mcarthur_opt +value-titles=Model value,Fixed at 120 mm +values=1,2 +widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget + +[namelist:jules_fire_weather_index=nesterov_flag] +compulsory=true +description=Switch for Nesterov Index +sort-key=06 +type=logical +url=https://metoffice.github.io/jules/latest/namelists/fire.nml.html#JULES_FIRE_WEATHER_INDEX::nesterov_flag + [namelist:jules_flake] compulsory=true description=Configuration of the FLake model, only required if l_flake_model=true @@ -3004,87 +2725,6 @@ sort-key=12 type=character url=https://metoffice.github.io/jules/latest/namelists/output.nml.html#JULES_OUTPUT_PROFILE::var_name -[namelist:jules_overbank] -compulsory=true -ns=namelist/JULES Science Settings/jules_overbank -sort-key=14 -title=River overbank inundation options -url=https://metoffice.github.io/jules/latest/namelists/jules_rivers.nml.html#namelist-JULES_overbank - -[namelist:jules_overbank=coef_b] -compulsory=true -description=Coefficient in the QBF (=bankfull discharge) allometry. -range=0: -sort-key=f -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_rivers.nml.html#JULES_overbank::coef_b - -[namelist:jules_overbank=ent_ratio] -compulsory=true -description=Rosgen entrenchment ratio (= ratio of flood-prone width to bankfull width - = of a channel, where flood-prone width = when the channel depth is - = 2x bankfull depth) -range=0: -sort-key=g -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_rivers.nml.html#JULES_overbank::ent_ratio - -[namelist:jules_overbank=exp_c] -compulsory=true -description=Exponent in the QBF (=bankfull discharge) allometry. -range=0: -sort-key=h -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_rivers.nml.html#JULES_overbank::exp_c - -[namelist:jules_overbank=overbank_model] -compulsory=true -description=Choice of overbank inundation model -sort-key=a -trigger=namelist:jules_overbank=coef_b: 2; - = namelist:jules_overbank=ent_ratio: 2; - = namelist:jules_overbank=exp_c: 2; - = namelist:jules_overbank=riv_a: 1, 2; - = namelist:jules_overbank=riv_b: 1, 2; - = namelist:jules_overbank=riv_c: 2, 3; - = namelist:jules_overbank=riv_f: 2, 3; -url=https://metoffice.github.io/jules/latest/namelists/jules_rivers.nml.html#JULES_overbank::overbank_model -value-titles=Simple, Simple with Rosgen, Hypsometric integral -values=1,2,3 -widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget - -[namelist:jules_overbank=riv_a] -compulsory=true -description=Coefficient in the allometry for river width -range=0: -sort-key=d -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_rivers.nml.html#JULES_overbank::riv_a - -[namelist:jules_overbank=riv_b] -compulsory=true -description=Exponent in the allometry for river width -range=0: -sort-key=e -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_rivers.nml.html#JULES_overbank::riv_b - -[namelist:jules_overbank=riv_c] -compulsory=true -description=Coefficient in the allometry for river depth -range=0: -sort-key=b -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_rivers.nml.html#JULES_overbank::riv_c - -[namelist:jules_overbank=riv_f] -compulsory=true -description=Exponent in the allometry for river depth -range=0: -sort-key=c -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_rivers.nml.html#JULES_overbank::riv_f - [namelist:jules_pdm] compulsory=true description=Configuration of spatially varying PDM properties @@ -3170,6 +2810,7 @@ sort-key=5 type=character url=https://metoffice.github.io/jules/latest/namelists/ancillaries.nml.html#JULES_PDM::var_name +#[namelist:jules_pftparm] has moved to jules-shared/jules-pftparm [namelist:jules_pftparm=a_wl_io] length=: @@ -3769,319 +3410,32 @@ sort-key=Panel-BR01 type=real url=https://metoffice.github.io/jules/latest/namelists/jules_surface.nml.html#JULES_RADIATION::wght_alb -[namelist:jules_red] +[namelist:jules_rivers_props] compulsory=true -description=All parameters in this section are required to use the Robust Ecosystem Demography - = calculation. - = - =Click on names for more details - = -ns=namelist/JULES Science Settings/jules_red -sort-key=10 -title=RED PFT parameters -url=https://metoffice.github.io/jules/latest/namelists/red_params.nml.html#namelist-JULES_RED +description=Configuration of spatially varying rivers properties including inundation +ns=namelist/Ancillary data/Rivers properties +sort-key=24 +url=https://metoffice.github.io/jules/latest/namelists/ancillaries.nml.html#namelist-JULES_RIVERS_PROPS +widget[rose-config-edit]=pages.PageWithVariableTable --nvar nvars var use_file is_climatology var_name tpl_name const_val -[namelist:jules_red=alpha_recrt] +[namelist:jules_rivers_props=const_val] compulsory=true -description=The fraction of PFT carbon assimilate devoted to reproduction -fail-if=len(this) != (namelist:jules_surface_types=npft) +description=Constant value for all points (used if use_file = .false.) +fail-if=len(this) != namelist:jules_rivers_props=nvars length=: -sort-key=PANEL-I02da +sort-key=7 type=real -url=https://metoffice.github.io/jules/latest/namelists/red_params.nml.html#JULES_RED::alpha_recrt +url=https://metoffice.github.io/jules/latest/namelists/ancillaries.nml.html#JULES_RIVERS_PROPS::const_val -[namelist:jules_red=crwn_area0] +[namelist:jules_rivers_props=coordinate_file] compulsory=true -description=The lowest PFT crown area, value corresponds to the mass0 class (m2) -fail-if=len(this) != (namelist:jules_surface_types=npft) -length=: -sort-key=PANEL-I02db -type=real -url=https://metoffice.github.io/jules/latest/namelists/red_params.nml.html#JULES_RED::crwn_area0 +description=File from which to read river routing coordinates (if templating is used or reading a list of files) +fail-if='%vv' in this; # Coordinate file cannot contain variable name template. +sort-key=17b +type=character +url=https://metoffice.github.io/jules/latest/namelists/ancillaries.nml.html#JULES_RIVERS_PROPS::coordinate_file -[namelist:jules_red=dom_order] -compulsory=true -description=The value that describes the competitive hierarchy of PFTs competition in - =JULES-RED, the higher the value the more dominant. -fail-if=len(this) != (namelist:jules_surface_types=npft) -length=: -sort-key=PANEL-I02dc -type=integer -url=https://metoffice.github.io/jules/latest/namelists/red_params.nml.html#JULES_RED::dom_order - -[namelist:jules_red=height0] -compulsory=true -description=The lowest PFT height, value corresponds to the mass0 class (m) -fail-if=len(this) != (namelist:jules_surface_types=npft) -length=: -sort-key=PANEL-I02dd -type=real -url=https://metoffice.github.io/jules/latest/namelists/red_params.nml.html#JULES_RED::height0 - -[namelist:jules_red=lai_bal0] -compulsory=true -description=The lowest PFT balanced LAI, which corresponds to the mass0 class (m2/m2) -fail-if=len(this) != (namelist:jules_surface_types=npft) -length=: -sort-key=PANEL-I02de -type=real -url=https://metoffice.github.io/jules/latest/namelists/red_params.nml.html#JULES_RED::lai_bal0 - -[namelist:jules_red=mass0] -compulsory=true -description=The lowest PFT mass class (kg C) -fail-if=len(this) != (namelist:jules_surface_types=npft) -length=: -sort-key=PANEL-I02df -type=real -url=https://metoffice.github.io/jules/latest/namelists/red_params.nml.html#JULES_RED::mass0 - -[namelist:jules_red=massi] -compulsory=true -description=The highest PFT mass class (kg C) -fail-if=len(this) != (namelist:jules_surface_types=npft) -length=: -sort-key=PANEL-I02dg -type=real -url=https://metoffice.github.io/jules/latest/namelists/red_params.nml.html#JULES_RED::massi - -[namelist:jules_red=mclass] -compulsory=true -description=Number of mass classes for each PFT -fail-if=len(this) != (namelist:jules_surface_types=npft) -length=: -sort-key=PANEL-I02dh -type=integer -url=https://metoffice.github.io/jules/latest/namelists/red_params.nml.html#JULES_RED::mclass - -[namelist:jules_red=mort_base] -compulsory=true -description=The baseline PFT mortality rate (/360 days) -fail-if=len(this) != (namelist:jules_surface_types=npft) -length=: -sort-key=PANEL-I02di -type=real -url=https://metoffice.github.io/jules/latest/namelists/red_params.nml.html#JULES_RED::mort_base - -[namelist:jules_red=phi_a] -compulsory=true -description=The allometric/power scaling of PFT mass to PFT height -fail-if=len(this) != (namelist:jules_surface_types=npft) -length=: -sort-key=PANEL-I02dj -type=real -url=https://metoffice.github.io/jules/latest/namelists/red_params.nml.html#JULES_RED::phi_a - -[namelist:jules_red=phi_g] -compulsory=true -description=The allometric/power scaling of PFT mass to PFT mass growth rate -fail-if=len(this) != (namelist:jules_surface_types=npft) -length=: -sort-key=PANEL-I02dk -type=real -url=https://metoffice.github.io/jules/latest/namelists/red_params.nml.html#JULES_RED::phi_g - -[namelist:jules_red=phi_h] -compulsory=true -description=The allometric/power scaling of PFT mass to PFT height -fail-if=len(this) != (namelist:jules_surface_types=npft) -length=: -sort-key=PANEL-I02dl -type=real -url=https://metoffice.github.io/jules/latest/namelists/red_params.nml.html#JULES_RED::phi_h - -[namelist:jules_red=phi_l] -compulsory=true -description=The allometric/power scaling of PFT mass to PFT leaf area index -fail-if=len(this) != (namelist:jules_surface_types=npft) -length=: -sort-key=PANEL-I02dm -type=real -url=https://metoffice.github.io/jules/latest/namelists/red_params.nml.html#JULES_RED::phi_l - -[namelist:jules_rivers] -compulsory=true -ns=namelist/JULES Science Settings/jules_rivers -sort-key=06 -title=River routing options -url=https://metoffice.github.io/jules/latest/namelists/jules_rivers.nml.html#namelist-JULES_RIVERS - -[namelist:jules_rivers=a_thresh] -compulsory=true -description=The threshold drainage area (specified in number of cells) - = draining to a gridbox above which the gridbox is - = considered to be a river point -sort-key=j -type=integer -url=https://metoffice.github.io/jules/latest/namelists/jules_rivers.nml.html#JULES_RIVERS::a_thresh - -[namelist:jules_rivers=cbland] -compulsory=true -description=The subsurface land wave speed (kinematic wave speed for subsurface flow in a land grid box on the river routing grid, m s-1) -range=this>0 -sort-key=f -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_rivers.nml.html#JULES_RIVERS::cbland - -[namelist:jules_rivers=cbriver] -compulsory=true -description=The subsurface river wave speed (kinematic wave speed for subsurface flow in a river grid box on the river routing grid, m s-1) -range=this>0 -sort-key=g -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_rivers.nml.html#JULES_RIVERS::cbriver - -[namelist:jules_rivers=cland] -compulsory=true -description=The land wave speed (kinematic wave speed for surface flow in a land grid box on the river routing grid, m s-1) -range=this>0 -sort-key=d -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_rivers.nml.html#JULES_RIVERS::cland - -[namelist:jules_rivers=criver] -compulsory=true -description=The river wave speed (kinematic wave speed for surface flow in a river grid box on the river routing grid, m s-1) -range=this>0 -sort-key=e -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_rivers.nml.html#JULES_RIVERS::criver - -[namelist:jules_rivers=i_river_vn] -compulsory=true -description=Routing algorithm to use -fail-if=this == 1 and namelist:jules_model_environment=l_jules_parent == 0; # UM_TRIP is not compatible with standalone. - =(this !=1 and this !=2) and namelist:jules_model_environment=l_jules_parent == 1; # UM_TRIP and RFM are the only options compatible with the UM. -sort-key=b -trigger=namelist:jules_rivers=cland: 2; - = namelist:jules_rivers=criver: 2; - = namelist:jules_rivers=cbland: 2; - = namelist:jules_rivers=cbriver: 2; - = namelist:jules_rivers=retl: 2; - = namelist:jules_rivers=retr: 2; - = namelist:jules_rivers=a_thresh: 2; - = namelist:jules_rivers=runoff_factor: 2; - = namelist:jules_rivers=rivers_speed: 1,3; - = namelist:jules_rivers=rivers_meander: 1,3; - = namelist:jules_rivers_props=l_use_area: 2; - = namelist:jules_rivers=lake_water_conserve_method: 1; - = namelist:jules_rivers=trip_globe_shape: 1; -url=https://metoffice.github.io/jules/latest/namelists/jules_rivers.nml.html#JULES_RIVERS::i_river_vn -value-titles=RFM,TRIP -values=2,3 -widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget - -[namelist:jules_rivers=l_riv_overbank] -compulsory=true -description=Enable overbank inundation -fail-if=this == '.true.' and namelist:jules_model_environment=l_jules_parent != 0; # Overbank inundation is not available to the UM or OASIS. -sort-key=n -trigger=namelist:jules_overbank=overbank_model: .true.; -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_rivers.nml.html#JULES_RIVERS::l_riv_overbank - -[namelist:jules_rivers=l_rivers] -compulsory=true -description=Enable river routing -sort-key=a -trigger=namelist:jules_rivers=i_river_vn: .true.; - = namelist:jules_rivers=nstep_rivers: .true.; - = namelist:jules_rivers=l_riv_overbank: .true.; - = namelist:jules_overbank: .true.; - = namelist:jules_rivers_props: .true.; -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_rivers.nml.html#JULES_RIVERS::l_rivers - -[namelist:jules_rivers=lake_water_conserve_method] -compulsory=true -description=Selects different fields for use in water conservation of lake evaporation -fail-if=this > 0 and namelist:jules_rivers=i_river_vn > 1; # lake_water_conserve_method is not compatible with standalone rivers -url=https://metoffice.github.io/jules/latest/namelists/jules_rivers.nml.html#JULES_RIVERS::lake_water_conserve_method -value-titles=Use fqw_surft,Use elake_surft -values=1,2 - -[namelist:jules_rivers=nstep_rivers] -compulsory=true -description=Number of model timesteps per routing timestep -range=1: -sort-key=c -type=integer -url=https://metoffice.github.io/jules/latest/namelists/jules_rivers.nml.html#JULES_RIVERS::nstep_rivers - -[namelist:jules_rivers=retl] -compulsory=true -description=The (resolution dependent) land return flow fraction -range=-1:1 -sort-key=h -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_rivers.nml.html#JULES_RIVERS::retl - -[namelist:jules_rivers=retr] -compulsory=true -description=The (resolution dependent) river return flow fraction -range=-1:1 -sort-key=i -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_rivers.nml.html#JULES_RIVERS::retr - -[namelist:jules_rivers=rivers_meander] -compulsory=true -description=Ratio of the actual to calculated river lengths in a river routing gridbox -range=this>0 -sort-key=m -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_rivers.nml.html#JULES_RIVERS::rivers_meander - -[namelist:jules_rivers=rivers_speed] -compulsory=true -description=The effective river velocity (m/s) -range=this>0 -sort-key=l -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_rivers.nml.html#JULES_RIVERS::rivers_speed - -[namelist:jules_rivers=runoff_factor] -compulsory=true -description=A runoff volume factor (recommended setting=1) -range=this>0 -sort-key=k -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_rivers.nml.html#JULES_RIVERS::runoff_factor - -[namelist:jules_rivers=trip_globe_shape] -compulsory=true -description=The shape of the Earth in the TRIP river routing scheme -sort-key=j -url=https://metoffice.github.io/jules/latest/namelists/jules_rivers.nml.html#JULES_RIVERS::trip_globe_shape -value-titles=Spherical,Ellipsoidal -values=1,2 - -[namelist:jules_rivers_props] -compulsory=true -description=Configuration of spatially varying rivers properties including inundation -ns=namelist/Ancillary data/Rivers properties -sort-key=24 -url=https://metoffice.github.io/jules/latest/namelists/ancillaries.nml.html#namelist-JULES_RIVERS_PROPS -widget[rose-config-edit]=pages.PageWithVariableTable --nvar nvars var use_file is_climatology var_name tpl_name const_val - -[namelist:jules_rivers_props=const_val] -compulsory=true -description=Constant value for all points (used if use_file = .false.) -fail-if=len(this) != namelist:jules_rivers_props=nvars -length=: -sort-key=7 -type=real -url=https://metoffice.github.io/jules/latest/namelists/ancillaries.nml.html#JULES_RIVERS_PROPS::const_val - -[namelist:jules_rivers_props=coordinate_file] -compulsory=true -description=File from which to read river routing coordinates (if templating is used or reading a list of files) -fail-if='%vv' in this; # Coordinate file cannot contain variable name template. -sort-key=17b -type=character -url=https://metoffice.github.io/jules/latest/namelists/ancillaries.nml.html#JULES_RIVERS_PROPS::coordinate_file - -[namelist:jules_rivers_props=file] +[namelist:jules_rivers_props=file] compulsory=true description=If read_list = TRUE, file to read list of file names =If read_list = FALSE, file or file name template @@ -4530,859 +3884,154 @@ description=Constant in relationship between canopy snow unloading and canopy sn ns=namelist/JULES Science Settings/jules_snow/Other parameters sort-key=Panel-D05 type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::snowunloadfact - -[namelist:jules_snow=unload_rate_cnst] -compulsory=true -description=Constant term in background unloading rate of snow on canopies -fail-if=len(this) != namelist:jules_surface_types=npft; # A value must be given for each PFT -length=: -ns=namelist/JULES Science Settings/jules_snow/Other parameters -sort-key=Panel-D13 -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::unload_rate_cnst - -#[namelist:jules_soil] has moved to jules-shared/jules-soil -[namelist:jules_soil=confrac] -compulsory=true -description=Fraction of the gridbox assumed to be covered by convective precipitation -range=0.0:1.0 -sort-key=Panel-E10 -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::confrac - -[namelist:jules_soil=cs_min] -compulsory=true -description=Minimum allowed soil carbon (kg m-2) -range=0.000001: -sort-key=Panel-E07 -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::cs_min - -[namelist:jules_soil=dzdeep] -compulsory=true -description=Thickness of bedrock (m) -range=0.01: -sort-key=Panel-E06d -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::dzdeep - -[namelist:jules_soil=dzsoil_elev] -compulsory=true -description=Depth (m) of tiled bedrock subsurfaces under elevated tiles. -fail-if=this <= 0 ; # Must have positive value -range=0.01: -sort-key=Panel-E12 -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::dzsoil_elev - -[namelist:jules_soil=dzsoil_io] -compulsory=true -description=Soil layer depths (m), starting with the uppermost layer -fail-if=len(this) != namelist:jules_soil=sm_levels; # Must have a value for each soil level -length=: -sort-key=Panel-E11 -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::dzsoil_io - -[namelist:jules_soil=hcapdeep] -compulsory=true -description=Heat capacity of bedrock (J K-1 m-3) -range=100000:8000000 -sort-key=Panel-E06b -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::hcapdeep - -[namelist:jules_soil=hcondeep] -compulsory=true -description=Thermal conductivity of bedrock (W m-2 K-1) -range=0.4:12.0 -sort-key=Panel-E06c -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::hcondeep - -[namelist:jules_soil=l_bedrock] -compulsory=true -description=Include bedrock below soil column with thermal diffusion; does not include hydrology - =NOT AVAILABLE TO UM -sort-key=Panel-E06 -trigger=namelist:jules_soil=ns_deep: .true.; - = namelist:jules_soil=hcapdeep: .true.; - = namelist:jules_soil=hcondeep: .true.; - = namelist:jules_soil=dzdeep: .true.; -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::l_bedrock - -[namelist:jules_soil=l_broadcast_ancils] -description=Switch to broadcast non-soil tiled ancillary data to all soil tiles (if read from ancil files) -sort-key=Panel-E14a -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::l_broadcast_ancils - -[namelist:jules_soil=l_holdwater] -compulsory=true -description=Stops water being pushed out of the soil column when a single layer is supersaturated -sort-key=Panel-E13 -url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::l_holdwater -value-titles=Bug fixed,Original -values=.true.,.false. -widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget - -[namelist:jules_soil=l_tile_soil] -compulsory=true -description=Switch to set the number of soil tiles to equal the number of surface tiles -fail-if=this == '.true.' and namelist:jules_model_environment=l_jules_parent == 1; # Not available in the UM -sort-key=Panel-E14 -trigger=namelist:jules_soil=l_broadcast_ancils: .true.; - =namelist:jules_initial=l_broadcast_soilt: .true. -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::l_tile_soil - -[namelist:jules_soil=ns_deep] -compulsory=true -description=Number of bedrock layers -range=1: -sort-key=Panel-E06a -type=integer -url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::ns_deep - -[namelist:jules_soil=sm_levels] -compulsory=true -description=Number of soil layers -range=1: -sort-key=Panel-E01 -type=integer -url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::sm_levels - -[namelist:jules_soil=soilhc_method] -compulsory=true -description=Choice of soil thermal conductivity model -sort-key=Panel-E05 -url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::soilhc_method -value-titles=Cox et al (1999),Simplified Johansen (1975),Chadburn et al (2015) -values=1,2,3 -widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget - -[namelist:jules_soil=zsmc] -compulsory=true -description=Depth of layer over which soil moisture diagnostic is averaged (m) -range=0.01: -sort-key=Panel-E08 -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::zsmc - -[namelist:jules_soil=zst] -compulsory=true -description=Depth of layer over which soil temperature diagnostic is averaged (m) -range=0.01: -sort-key=Panel-E09 -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::zst - -[namelist:jules_soil_biogeochem] -compulsory=true -ns=namelist/JULES Science Settings/jules_soil_biogeochem -sort-key=07 -title=Soil biogeochemistry options -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#namelist-JULES_SOIL_BIOGEOCHEM - -[namelist:jules_soil_biogeochem=alpha_ch4] -compulsory=true -description=Ratio between maintenance and growth respiration rates for methanogens -range=0.00001:0.1 -sort-key=8i -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::alpha_ch4 - -[namelist:jules_soil_biogeochem=bio_hum_cn] -compulsory=true -description=Bio and Hum Soil Carbon pools CN ratio -range=1:301 -sort-key=g -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::bio_hum_cn - -[namelist:jules_soil_biogeochem=ch4_cpow] -compulsory=true -description=Power of soil carbon used for anaerobic decomposition (default 1, could be 2/3 for organic soils) -range=0.01:5 -sort-key=r -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::ch4_cpow - -[namelist:jules_soil_biogeochem=ch4_substrate] -compulsory=true -description=Choose substrate for interactive methane -sort-key=o -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::ch4_substrate -value-titles=Soil carbon,NPP,Soil respiration -values=1,2,3 -widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget - -[namelist:jules_soil_biogeochem=const_ch4_cs] -compulsory=true -description=Scale factor for soil carbon substrate CH4 emissions -range=1.0e-14:1.0e-6 -sort-key=2c -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::const_ch4_cs - -[namelist:jules_soil_biogeochem=const_ch4_npp] -compulsory=true -description=Scale factor for NPP substrate CH4 emissions -range=1.0e-5:0.01 -sort-key=2d -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::const_ch4_npp - -[namelist:jules_soil_biogeochem=const_ch4_resps] -compulsory=true -description=Scale factor for soil respiration substrate CH4 emissions -range=1.0e-5:0.01 -sort-key=2e -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::const_ch4_resps - -[namelist:jules_soil_biogeochem=cs_decomp_soil_moist_func] -compulsory=true -description=Switch for moisture function for soil decomposition -sort-key=m1 -trigger=namelist:jules_soil_biogeochem=fsthsat_cs_decomp_opt1: 1; -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::cs_decomp_soil_moist_func -value-titles=Clark (2011) function, Modified Chadburn (2022) function -values=0,1 -widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget - -[namelist:jules_soil_biogeochem=cue_ch4] -compulsory=true -description=Carbon use efficiency of methanogenic growth -range=0.001:0.5 -sort-key=8f -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::cue_ch4 - -[namelist:jules_soil_biogeochem=diff_n_pft] -compulsory=true -description=Inorganic N diffusion in soil (360 days-1) -range=0.1:1500 -sort-key=b2 -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::diff_n_pft - -[namelist:jules_soil_biogeochem=ev_ch4] -compulsory=true -description=Timescale over which methanogenic traits adapt to temperature change (yr) -range=0.1:10.0 -sort-key=8j -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::ev_ch4 - -[namelist:jules_soil_biogeochem=frz_ch4] -compulsory=true -description=Factor to reduce CH4 substrate production when soil is sufficiently frozen (only in microbial scheme) -range=0:1 -sort-key=8h -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::frz_ch4 - -[namelist:jules_soil_biogeochem=fsthsat_cs_decomp_opt1] -compulsory=true -description=Soil decomposition factor when soil is saturated (proportion of maximum) -range=0.0:1.0 -sort-key=m1a -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::fsthsat_cs_decomp_opt1 - -[namelist:jules_soil_biogeochem=heat_of_respiration] -compulsory=true -description=The heat released during respiration (J/kg C) -range=0: -sort-key=c1a -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::heat_of_respiration - -[namelist:jules_soil_biogeochem=k2_ch4] -compulsory=true -description=Scale factor for methanogenic respiration rate (hr-1) -range=0.001:0.5 -sort-key=8b -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::k2_ch4 - -[namelist:jules_soil_biogeochem=kaps] -compulsory=true -description=Specific soil respiration rate at 25 degC and optimum soil moisture (s-1) for 1-pool model -range=1.0e-12:1.0e-4 -sort-key=e -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::kaps - -[namelist:jules_soil_biogeochem=kaps_4pool] -compulsory=true -description=Specific soil respiration rates for the four pools of the 4-pool model (s-1) -length=4 -range=1.0e-12:1.0e-4 -sort-key=f -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::kaps_4pool - -[namelist:jules_soil_biogeochem=kd_ch4] -compulsory=true -description=Scale factor for methanogenic death/turnover rate (hr-1) -range=0.000001:0.01 -sort-key=8c -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::kd_ch4 - -[namelist:jules_soil_biogeochem=l_bgc_heat] -compulsory=true -description=Switch for release of biogeochemical heat into the soil. - =Not available to the UM. -fail-if=this == '.true.' and namelist:jules_model_environment=l_jules_parent == 1; #Biogenic heating scheme is not available to the UM -sort-key=c1 -trigger=namelist:jules_soil_biogeochem=heat_of_respiration: .true.; -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::l_bgc_heat - -[namelist:jules_soil_biogeochem=l_ch4_interactive] -compulsory=true -description=Switch on interactive methane -fail-if=this == '.true.' and namelist:jules_soil_biogeochem=l_ch4_tlayered == '.false.' -sort-key=n -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::l_ch4_interactive -value-titles=Methane flux updates soil C, Methane flux does not update soil C -values=.true.,.false. -widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget - -[namelist:jules_soil_biogeochem=l_ch4_microbe] -compulsory=true -description=Use microbial methane model - =NOT AVAILABLE TO UM -sort-key=8a -trigger=namelist:jules_soil_biogeochem=k2_ch4: .true.; - =namelist:jules_soil_biogeochem=kd_ch4: .true.; - =namelist:jules_soil_biogeochem=rho_ch4: .true.; - =namelist:jules_soil_biogeochem=q10_mic_ch4: .true.; - =namelist:jules_soil_biogeochem=cue_ch4: .true.; - =namelist:jules_soil_biogeochem=mu_ch4: .true.; - =namelist:jules_soil_biogeochem=frz_ch4: .true.; - =namelist:jules_soil_biogeochem=alpha_ch4: .true.; - =namelist:jules_soil_biogeochem=ev_ch4: .true.; - =namelist:jules_soil_biogeochem=q10_ev_ch4: .true.; -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::l_ch4_microbe -warn-if=this== '.true.' and namelist:jules_soil_biogeochem=ch4_substrate != 1 # microbial model only tuned for ch4_substrate=1 - -[namelist:jules_soil_biogeochem=l_ch4_tlayered] -compulsory=true -description=Calculate methane emissions from layered soil temperature (vs 1m average) -sort-key=p -trigger=namelist:jules_soil_biogeochem=tau_ch4: .true.; -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::l_ch4_tlayered -value-titles=Use layered soil temperature, Use depth-averaged soil temperature -values=.true.,.false. -widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget - -[namelist:jules_soil_biogeochem=l_label_frac_cs] -compulsory=true -description=Label and trace a fraction of soil carbon - =NOT AVAILABLE TO UM -sort-key=b1 -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::l_label_frac_cs - -[namelist:jules_soil_biogeochem=l_layeredc] -compulsory=true -description=Use layered soil carbon model -fail-if=this == '.true.' and namelist:jules_soil_biogeochem=soil_bgc_model == 3 -sort-key=b -trigger=namelist:jules_soil_biogeochem=tau_resp: .true.; - =namelist:jules_soil_biogeochem=l_label_frac_cs: .true.; - =namelist:jules_soil_biogeochem=diff_n_pft: .true.; - =namelist:jules_soil_biogeochem=z_burn_max: .true.; -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::l_layeredc - -[namelist:jules_soil_biogeochem=l_q10] -compulsory=true -description=Choose soil decomposition dependence on temperature -sort-key=c -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::l_q10 -value-titles=Q10 temperature function,Clark et al. (2011) temperature function -values=.true.,.false. -warn-if=this == '.false.' and namelist:jules_soil_biogeochem=l_bgc_heat == '.true.' -widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget - -[namelist:jules_soil_biogeochem=l_soil_resp_lev2] -compulsory=true -description=Soil respiration calculated using temperature and moisture from layer 2 -sort-key=m -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::l_soil_resp_lev2 -value-titles=Use 2nd soil layer + total moisture content for respiration, Use top soil layer + unfrozen moisture content for respiration -values=.true.,.false. -widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget - -[namelist:jules_soil_biogeochem=mu_ch4] -compulsory=true -description=Threshold growth rate below which methanogens die (hr-1) -range=0.000001:0.01 -sort-key=8g -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::mu_ch4 - -[namelist:jules_soil_biogeochem=n_inorg_turnover] -compulsory=true -description=Inorganic Nitrogren Turnover rate (360 days-1) -range=0.01:100 -sort-key=i -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::n_inorg_turnover - -[namelist:jules_soil_biogeochem=q10_ch4_cs] -compulsory=true -description=Q10 factor for soil carbon substrate CH4 emissions -range=0.1:10.0 -sort-key=2f -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::q10_ch4_cs - -[namelist:jules_soil_biogeochem=q10_ch4_npp] -compulsory=true -description=Q10 factor for NPP substrate CH4 emissions -range=0.1:10.0 -sort-key=2g -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::q10_ch4_npp - -[namelist:jules_soil_biogeochem=q10_ch4_resps] -compulsory=true -description=Q10 factor for soil respiration substrate CH4 emissions -range=0.1:10.0 -sort-key=2h -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::q10_ch4_resps - -[namelist:jules_soil_biogeochem=q10_ev_ch4] -compulsory=true -description=Q10 for temperature response of methanogenic traits under adaptation -range=0.1:10.0 -sort-key=8k -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::q10_ev_ch4 - -[namelist:jules_soil_biogeochem=q10_mic_ch4] -compulsory=true -description=Q10 factor for methanogens -range=0.1:10.0 -sort-key=8e -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::q10_mic_ch4 - -[namelist:jules_soil_biogeochem=q10_soil] -compulsory=true -description=Q10 factor for soil respiration -range=0.1:10.0 -sort-key=d -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::q10_soil - -[namelist:jules_soil_biogeochem=rho_ch4] -compulsory=true -description=Factor in substrate limitation function (related to half saturation of substrate for methanogenic respiration) -range=1.0:1000.0 -sort-key=8d -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::rho_ch4 - -[namelist:jules_soil_biogeochem=soil_bgc_model] -compulsory=true -description=Choice of soil biogeochemistry model -fail-if=this == 1 and namelist:jules_vegetation=l_triffid == '.true.'; # Can't use 1-pool with TRIFFID - =this == 2 and namelist:jules_vegetation=l_triffid != '.true.'; # Can't use 4-pool soil C without TRIFFID - =this == 3 and namelist:jules_vegetation=l_triffid != '.true.'; # Can't use ECOSSE without TRIFFID -sort-key=a -trigger=namelist:jules_soil_biogeochem=l_q10: 1, 2; - =namelist:jules_soil_biogeochem=q10_soil: 1, 2, 3; - =namelist:jules_soil_biogeochem=l_soil_resp_lev2: 1, 2; - =namelist:jules_soil_biogeochem=cs_decomp_soil_moist_func: 1, 2; - =namelist:jules_soil_biogeochem=kaps: 1; - =namelist:jules_soil_biogeochem=kaps_4pool: 2; - =namelist:jules_soil_biogeochem=sorp: 2; - =namelist:jules_soil_biogeochem=n_inorg_turnover: 2; - =namelist:jules_soil_biogeochem=bio_hum_cn: 2; - =namelist:jules_soil_biogeochem=diff_n_pft: 2; - =namelist:jules_soil_biogeochem=tau_lit: 2, 3; - =namelist:jules_soil_biogeochem=tau_resp: 2; - =namelist:jules_soil_ecosse=l_soil_n: 3; - =namelist:jules_soil_ecosse=depo_nit_frac: 3; - =namelist:jules_soil_ecosse=l_match_layers: 3; - =namelist:jules_soil_ecosse=dt_soilc: 3; - =namelist:jules_soil_ecosse=dz_soilc_io: 3; - =namelist:jules_soil_ecosse=plant_input_profile: 3; - =namelist:jules_soil_ecosse=pi_sfc_depth: 3; - =namelist:jules_soil_ecosse=pi_sfc_frac: 3; - =namelist:jules_soil_ecosse=bacteria_min_frac: 3; - =namelist:jules_soil_ecosse=bacteria_max_frac: 3; - =namelist:jules_soil_ecosse=bacteria_min_frac_ph: 3; - =namelist:jules_soil_ecosse=bacteria_max_frac_ph: 3; - =namelist:jules_soil_ecosse=cn_bacteria: 3; - =namelist:jules_soil_ecosse=cn_fungi: 3; - =namelist:jules_soil_ecosse=decomp_rate: 3; - =namelist:jules_soil_ecosse=decomp_wrate_min_smith: 3; - =namelist:jules_soil_ecosse=decomp_wrate_min_clark: 3; - =namelist:jules_soil_ecosse=decomp_temp_coeff_smith: 3; - =namelist:jules_soil_ecosse=decomp_ph_min: 3; - =namelist:jules_soil_ecosse=decomp_ph_max: 3; - =namelist:jules_soil_ecosse=decomp_ph_rate_min: 3; - =namelist:jules_soil_ecosse=depth_nitrif: 3; - =namelist:jules_soil_ecosse=nitrif_frac_n2o_fc: 3; - =namelist:jules_soil_ecosse=nitrif_frac_gas: 3; - =namelist:jules_soil_ecosse=nitrif_frac_no: 3; - =namelist:jules_soil_ecosse=nitrif_max_factor: 3; - =namelist:jules_soil_ecosse=nitrif_rate: 3; - =namelist:jules_soil_ecosse=nitrif_wrate_min: 3; - =namelist:jules_soil_ecosse=denit50: 3; - =namelist:jules_soil_ecosse=denit_frac_n2_fc: 3; - =namelist:jules_soil_ecosse=denit_nitrate_equal: 3; - =namelist:jules_soil_ecosse=denit_water_coeff: 3; - =namelist:jules_soil_ecosse=denit_bio_factor: 3; - =namelist:jules_soil_ecosse=amm_leach_min: 3; - =namelist:jules_soil_ecosse=n_inorg_max_conc: 3; - =namelist:jules_soil_ecosse=l_driver_ave: 3; - =namelist:jules_soil_ecosse=l_decomp_slow: 3; - =namelist:jules_soil_ecosse=temp_modifier: 3; - =namelist:jules_soil_ecosse=water_modifier: 3; - =namelist:jules_soil_ecosse=dim_cslayer: 3; -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::soil_bgc_model -value-titles=Single pool model,4-pool model,ECOSSE -values=1,2,3 -widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget - -[namelist:jules_soil_biogeochem=sorp] -compulsory=true -description=Soil leaching N Retention factor -range=0.01:100.0 -sort-key=h -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::sorp - -[namelist:jules_soil_biogeochem=t0_ch4] -compulsory=true -description=Reference temperature for Q10 function CH4 emissions -range=250:320 -sort-key=2b -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::t0_ch4 - -[namelist:jules_soil_biogeochem=tau_ch4] -compulsory=true -description=Decay factor with depth representing methane oxidation -range=0.01:100.0 -sort-key=q -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::tau_ch4 - -[namelist:jules_soil_biogeochem=tau_lit] -compulsory=true -description=Exponential decay constant for reduction of litter inputs with depth -range=0.01:100.0 -sort-key=b2 -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::tau_lit - -[namelist:jules_soil_biogeochem=tau_resp] -compulsory=true -description=Exponential decay constant for reduction of respiration with depth -range=0.01:100.0 -sort-key=b2 -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::tau_resp - -[namelist:jules_soil_biogeochem=z_burn_max] -compulsory=true -description=Maximum burn depth for soil - soil carbon is burned above this level -range=0.0:10.0 -sort-key=b2 -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_biogeochem.nml.html#JULES_SOIL_BIOGEOCHEM::z_burn_max - -[namelist:jules_soil_ecosse] -compulsory=true -ns=namelist/JULES Science Settings/jules_soil_ecosse -sort-key=07 -title=Soil ECOSSE model options - -[namelist:jules_soil_ecosse=amm_leach_min] -compulsory=true -description=Minimum allowed amount of N in NH4 after leaching (kg m-3) -range=0: -type=real - -[namelist:jules_soil_ecosse=bacteria_max_frac] -compulsory=true -description=Maximum fraction of decomposer community that are bacteria -range=0:1 -type=real - -[namelist:jules_soil_ecosse=bacteria_max_frac_ph] -compulsory=true -description=Soil pH at or above which the fraction of bacteria is at a maximum -range=0:14 -type=real - -[namelist:jules_soil_ecosse=bacteria_min_frac] -compulsory=true -description=Minimum fraction of decomposer community that are bacteria -range=0:1 -type=real - -[namelist:jules_soil_ecosse=bacteria_min_frac_ph] -compulsory=true -description=Soil pH at or below which the fraction of bacteria is at a minimum -range=0:14 -type=real - -[namelist:jules_soil_ecosse=cn_bacteria] -compulsory=true -description=C:N ratio of soil bacteria -range=0.1: -type=real - -[namelist:jules_soil_ecosse=cn_fungi] -compulsory=true -description=C:N ratio of soil fungi -range=0.1: -type=real - -[namelist:jules_soil_ecosse=decomp_ph_max] -compulsory=true -description=pH above which rate of decomposition is maximum -range=0:14 -type=real - -[namelist:jules_soil_ecosse=decomp_ph_min] -compulsory=true -description=pH below which rate of decomposition is minimum -range=0:14 -type=real - -[namelist:jules_soil_ecosse=decomp_ph_rate_min] -compulsory=true -description=Minimum allowed value of pH rate modifier for decomposition -range=0:1 -type=real - -[namelist:jules_soil_ecosse=decomp_rate] -compulsory=true -description=Rate constants for decomposition of each pool (s-1) -length=4 -type=real - -[namelist:jules_soil_ecosse=decomp_temp_coeff_smith] -compulsory=true -description=Constants in Smith et al. (2010) soil C decomposition rate temperature modifier -length=3 -type=real - -[namelist:jules_soil_ecosse=decomp_wrate_min_clark] -compulsory=true -description=Minimum allowed value of the JULES form for water rate modifier for decomposition -range=0:1 -type=real - -[namelist:jules_soil_ecosse=decomp_wrate_min_smith] -compulsory=true -description=Minimum allowed value of the Smith et al. (2010) water rate modifier for decomposition -range=0:1 -type=real - -[namelist:jules_soil_ecosse=denit50] -compulsory=true -description=Amount of nitrate at which denitrification rate is 50% of the potential rate (kg m-3) -range=0: -type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::snowunloadfact -[namelist:jules_soil_ecosse=denit_bio_factor] +[namelist:jules_snow=unload_rate_cnst] compulsory=true -description=Factor in denitrification calculation to convert C flux into a representation of biological activity -range=0: +description=Constant term in background unloading rate of snow on canopies +fail-if=len(this) != namelist:jules_surface_types=npft; # A value must be given for each PFT +length=: +ns=namelist/JULES Science Settings/jules_snow/Other parameters +sort-key=Panel-D13 type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::unload_rate_cnst -[namelist:jules_soil_ecosse=denit_frac_n2_fc] +#[namelist:jules_soil] has moved to jules-shared/jules-soil +[namelist:jules_soil=confrac] compulsory=true -description=Fraction of denitrified N that becomes N2 when soil moisture is at field capacity -range=0:1 +description=Fraction of the gridbox assumed to be covered by convective precipitation +range=0.0:1.0 +sort-key=Panel-E10 type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::confrac -[namelist:jules_soil_ecosse=denit_nitrate_equal] +[namelist:jules_soil=cs_min] compulsory=true -description=Amount of N in soil nitrate at which denitrified N is released as equal amounts of N2 and N2O (kg m-3) -range=0: +description=Minimum allowed soil carbon (kg m-2) +range=0.000001: +sort-key=Panel-E07 type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::cs_min -[namelist:jules_soil_ecosse=denit_water_coeff] +[namelist:jules_soil=dzdeep] compulsory=true -description=Fitted constants describing water modifier for denitrification -length=3 +description=Thickness of bedrock (m) +range=0.01: +sort-key=Panel-E06d type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::dzdeep -[namelist:jules_soil_ecosse=depo_nit_frac] +[namelist:jules_soil=dzsoil_elev] compulsory=true -description=Fraction of total N deposition that is added to soil nitrate -range=0:1 +description=Depth (m) of tiled bedrock subsurfaces under elevated tiles. +fail-if=this <= 0 ; # Must have positive value +range=0.01: +sort-key=Panel-E12 type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::dzsoil_elev -[namelist:jules_soil_ecosse=depth_nitrif] +[namelist:jules_soil=dzsoil_io] compulsory=true -description=Greatest depth at which nitrification and denitrification are allowed (m) -range=0: +description=Soil layer depths (m), starting with the uppermost layer +fail-if=len(this) != namelist:jules_soil=sm_levels; # Must have a value for each soil level +length=: +sort-key=Panel-E11 type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::dzsoil_io -[namelist:jules_soil_ecosse=dim_cslayer] -compulsory=true -description=Number of soil carbon layers -range=1: -type=integer - -[namelist:jules_soil_ecosse=dt_soilc] +[namelist:jules_soil=hcapdeep] compulsory=true -description=Timestep length for soil biogeochemistry model (s) +description=Heat capacity of bedrock (J K-1 m-3) +range=100000:8000000 +sort-key=Panel-E06b type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::hcapdeep -[namelist:jules_soil_ecosse=dz_soilc_io] +[namelist:jules_soil=hcondeep] compulsory=true -description=Thicknesses of the soil biogeochemistry layers (m) -fail-if=len(this) != dim_cslayer; # Must have a value for each layer -length=: +description=Thermal conductivity of bedrock (W m-2 K-1) +range=0.4:12.0 +sort-key=Panel-E06c type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::hcondeep -[namelist:jules_soil_ecosse=l_decomp_slow] +[namelist:jules_soil=l_bedrock] compulsory=true -description=Switch to slow decomposition when N is limiting -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_ecosse.nml.html#JULES_SOIL_ECOSSE::l_decomp_slow -value-titles=Decomposition slowed, Decomposition less efficient -values=.true.,.false. -widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget +description=Include bedrock below soil column with thermal diffusion; does not include hydrology + =NOT AVAILABLE TO UM +sort-key=Panel-E06 +trigger=namelist:jules_soil=ns_deep: .true.; + = namelist:jules_soil=hcapdeep: .true.; + = namelist:jules_soil=hcondeep: .true.; + = namelist:jules_soil=dzdeep: .true.; +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::l_bedrock -[namelist:jules_soil_ecosse=l_driver_ave] -compulsory=true -description=Switch for time-averaging of ECOSSE driving variables -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_ecosse.nml.html#JULES_SOIL_ECOSSE::l_driver_ave -value-titles=Time average, Instantaneous values -values=.true.,.false. -widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget +[namelist:jules_soil=l_broadcast_ancils] +description=Switch to broadcast non-soil tiled ancillary data to all soil tiles (if read from ancil files) +sort-key=Panel-E14a +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::l_broadcast_ancils -[namelist:jules_soil_ecosse=l_match_layers] +[namelist:jules_soil=l_holdwater] compulsory=true -description=Switch to match soil C and N layers to soil moisture layers -trigger=namelist:jules_soil_ecosse=dim_cslayer: .false.; - =namelist:jules_soil_ecosse=dz_soilc_io: .false.; -url=https://metoffice.github.io/jules/latest/namelists/jules_soil_ecosse.nml.html#JULES_SOIL_ECOSSE::l_match_layers -value-titles=Match to soil moisture layers, Specify layers +description=Stops water being pushed out of the soil column when a single layer is supersaturated +sort-key=Panel-E13 +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::l_holdwater +value-titles=Bug fixed,Original values=.true.,.false. widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget -[namelist:jules_soil_ecosse=l_soil_n] -compulsory=true -description=Switch for a prognostic model of soil Nitrogen -trigger=namelist:jules_soil_ecosse=depo_nit_frac: .true.; - =namelist:jules_soil_ecosse=l_decomp_slow: .true.; - =namelist:jules_soil_ecosse=bacteria_min_frac: .true.; - =namelist:jules_soil_ecosse=bacteria_max_frac: .true.; - =namelist:jules_soil_ecosse=bacteria_min_frac_ph: .true.; - =namelist:jules_soil_ecosse=bacteria_max_frac_ph: .true.; - =namelist:jules_soil_ecosse=cn_bacteria: .true.; - =namelist:jules_soil_ecosse=cn_fungi: .true.; - =namelist:jules_soil_ecosse=depth_nitrif: .true.; - =namelist:jules_soil_ecosse=nitrif_frac_n2o_fc: .true.; - =namelist:jules_soil_ecosse=nitrif_rate: .true.; - =namelist:jules_soil_ecosse=nitrif_frac_gas: .true.; - =namelist:jules_soil_ecosse=nitrif_frac_no: .true.; - =namelist:jules_soil_ecosse=nitrif_max_factor: .true.; - =namelist:jules_soil_ecosse=nitrif_wrate_min: .true.; - =namelist:jules_soil_ecosse=denit50: .true.; - =namelist:jules_soil_ecosse=denit_frac_n2_fc: .true.; - =namelist:jules_soil_ecosse=denit_nitrate_equal: .true.; - =namelist:jules_soil_ecosse=denit_water_coeff: .true.; - =namelist:jules_soil_ecosse=denit_bio_factor: .true.; - =namelist:jules_soil_ecosse=amm_leach_min: .true.; - =namelist:jules_soil_ecosse=n_inorg_max_conc: .true.; -type=logical - -[namelist:jules_soil_ecosse=n_inorg_max_conc] -compulsory=true -description=Maximum-allowed concentration of inorganic N in a layer (kg m-3) -type=real - -[namelist:jules_soil_ecosse=nitrif_frac_gas] -compulsory=true -description=Fraction of nitrification lost as gas through full nitrification -range=0:1 -type=real - -[namelist:jules_soil_ecosse=nitrif_frac_n2o_fc] -compulsory=true -description=Fraction of nitrification lost as N2O by partial nitrification at field capacity -range=0:1 -type=real - -[namelist:jules_soil_ecosse=nitrif_frac_no] +[namelist:jules_soil=l_tile_soil] compulsory=true -description=Fraction of nitrification gas loss through full nitrification that is NO -range=0:1 -type=real +description=Switch to set the number of soil tiles to equal the number of surface tiles +fail-if=this == '.true.' and namelist:jules_model_environment=l_jules_parent == 1; # Not available in the UM +sort-key=Panel-E14 +trigger=namelist:jules_soil=l_broadcast_ancils: .true.; + =namelist:jules_initial=l_broadcast_soilt: .true. +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::l_tile_soil -[namelist:jules_soil_ecosse=nitrif_max_factor] +[namelist:jules_soil=ns_deep] compulsory=true -description=Shape factor in rate modifier for nitrification (kg m-3) -range=0:1 -type=real +description=Number of bedrock layers +range=1: +sort-key=Panel-E06a +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::ns_deep -[namelist:jules_soil_ecosse=nitrif_rate] +[namelist:jules_soil=sm_levels] compulsory=true -description=Rate constant for nitrification (s-1) -range=0: -type=real +description=Number of soil layers +range=1: +sort-key=Panel-E01 +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::sm_levels -[namelist:jules_soil_ecosse=nitrif_wrate_min] +[namelist:jules_soil=soilhc_method] compulsory=true -description=Minimum allowed value of water rate modifier for nitrification when Smith et al., 2010 form is used -range=0: -type=real +description=Choice of soil thermal conductivity model +sort-key=Panel-E05 +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::soilhc_method +value-titles=Cox et al (1999),Simplified Johansen (1975),Chadburn et al (2015) +values=1,2,3 +widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget -[namelist:jules_soil_ecosse=pi_sfc_depth] +[namelist:jules_soil=zsmc] compulsory=true -description=Depth of soil over which fraction pi_sfc_frac of plant litterfall is added (m). +description=Depth of layer over which soil moisture diagnostic is averaged (m) +range=0.01: +sort-key=Panel-E08 type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::zsmc -[namelist:jules_soil_ecosse=pi_sfc_frac] +[namelist:jules_soil=zst] compulsory=true -description=Fraction of plant litterfall that is added to the surface soil layer (of depth pi_sfc_depth). -range=0:1 +description=Depth of layer over which soil temperature diagnostic is averaged (m) +range=0.01: +sort-key=Panel-E09 type=real - -[namelist:jules_soil_ecosse=plant_input_profile] -compulsory=true -description=Switch for distribution of litterfall inputs to the soil. -trigger=namelist:jules_soil_ecosse=pi_sfc_depth: 1; - =namelist:jules_soil_ecosse=pi_sfc_frac: 1; -value-titles=RootProfile,Exponential -values=1,2 -widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget - -[namelist:jules_soil_ecosse=temp_modifier] -compulsory=true -description=Switch for form of temperature rate modifier for decomposition -value-titles=Q10,Smith -values=1,2 -widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget - -[namelist:jules_soil_ecosse=water_modifier] -compulsory=true -description=Switch for form of water rate modifier for decomposition -value-titles=Clark,Smith -values=1,2 -widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::zst [namelist:jules_soil_props] compulsory=true @@ -5623,6 +4272,7 @@ trigger=namelist:jules_surf_hgt=l_elev_absolute_height: .false.; type=logical url=https://metoffice.github.io/jules/latest/namelists/model_grid.nml.html#JULES_SURF_HGT::zero_height +#[namelist:jules_surface] has moved to jules-shared/jules-surface [namelist:jules_surface=i_aggregate_opt] compulsory=true description=Method of aggregating tiled properties @@ -5816,114 +4466,6 @@ sort-key=Panel-A0e type=integer url=https://metoffice.github.io/jules/latest/namelists/jules_surface_types.nml.html#JULES_SURFACE_TYPES::usr_type -[namelist:jules_temp_fixes] -compulsory=true -description=To assist managing science fixes across JULES versions -ns=namelist/JULES Science Settings/jules_temp_fixes -sort-key=00 -title=Short term logicals -url=https://metoffice.github.io/jules/latest/namelists/science_fixes.nml.html#namelist-JULES_TEMP_SWITCHES - -[namelist:jules_temp_fixes=ctile_orog_fix] -compulsory=true -description=Fix surface exchange in coastally tiled grid-boxes -fail-if=(this == '0' or this == '1') and namelist:jules_model_environment=l_jules_parent == 0; # This should be 2 in JULES standalone. -url=https://metoffice.github.io/jules/latest/namelists/science_fixes.nml.html#JULES_TEMP_FIXES::ctile_orog_fix -value-titles=No fix,Correct sea adjust land,Correct sea only -values=0,1,2 - -[namelist:jules_temp_fixes=l_accurate_rho] -compulsory=true -description=Improve the accuracy of air density in surface fluxes -type=logical -url=https://metoffice.github.io/jules/latest/namelists/science_fixes.nml.html#JULES_TEMP_FIXES::l_accurate_rho - -[namelist:jules_temp_fixes=l_dtcanfix] -compulsory=true -description=Correct the evolution of the skin temperature in the implicit solver -fail-if=this == '.false.' and namelist:jules_model_environment=l_jules_parent == 0; # This should be .true. in JULES standalone. -type=logical -url=https://metoffice.github.io/jules/latest/namelists/science_fixes.nml.html#JULES_TEMP_FIXES::l_dtcanfix - -[namelist:jules_temp_fixes=l_fix_alb_ice_thick] -compulsory=true -description=Fix bug in ice thickness used for sea ice albedo calculation. -fail-if=this == '.false.' and namelist:jules_model_environment=l_jules_parent == 0; # This should be .true. in JULES standalone. -type=logical -url=https://metoffice.github.io/jules/latest/namelists/science_fixes.nml.html#JULES_TEMP_FIXES::l_fix_alb_ice_thick - -[namelist:jules_temp_fixes=l_fix_albsnow_ts] -compulsory=true -description=Fix bug in the two-stream calculation of the albedo of snow. -fail-if=this == '.false.' and namelist:jules_model_environment=l_jules_parent == 0; # This should be .true. in JULES standalone. -type=logical -url=https://metoffice.github.io/jules/latest/namelists/science_fixes.nml.html#JULES_TEMP_FIXES::l_fix_albsnow_ts - -[namelist:jules_temp_fixes=l_fix_drydep_so2_water] -compulsory=true -description=Use correct surface resistance of water when calculating the dry deposition of SO2 -type=logical -url=https://metoffice.github.io/jules/latest/namelists/science_fixes.nml.html#JULES_TEMP_FIXES::l_fix_drydep_so2_water - -[namelist:jules_temp_fixes=l_fix_improve_drydep] -compulsory=true -description=Fix dry deposition velocities -type=logical -url=https://metoffice.github.io/jules/latest/namelists/science_fixes.nml.html#JULES_TEMP_FIXES::l_fix_improve_drydep - -[namelist:jules_temp_fixes=l_fix_lake_ice_temperatures] -compulsory=true -description=Fix evolution of lake ice temperatures -help=Allow sea ice temperatures in lakes to evolve over time for atmosphere-ocean coupled - =models when the lake is defined as a sea point but is not coupled to an ocean model. -type=logical -url=https://metoffice.github.io/jules/latest/namelists/science_fixes.nml.html#JULES_TEMP_FIXES::l_fix_lake_ice_temperatures - -[namelist:jules_temp_fixes=l_fix_moruses_roof_rad_coupling] -compulsory=true -description=Correction to the roof radiative coupling of MORUSES -type=logical -url=https://metoffice.github.io/jules/latest/namelists/science_fixes.nml.html#JULES_TEMP_FIXES::l_fix_moruses_roof_rad_coupling - -[namelist:jules_temp_fixes=l_fix_neg_snow] -compulsory=true -description=Activate corrections to avoid the generation of negative amounts of snow. -fail-if=this == '.false.' and namelist:jules_model_environment=l_jules_parent == 0; # This should be .true. in JULES standalone. -type=logical -url=https://metoffice.github.io/jules/latest/namelists/science_fixes.nml.html#JULES_TEMP_FIXES::l_fix_neg_snow - -[namelist:jules_temp_fixes=l_fix_osa_chloro] -compulsory=true -description=Correct the units of chlorophyll in the ocean surface albedo -type=logical -url=https://metoffice.github.io/jules/latest/namelists/science_fixes.nml.html#JULES_TEMP_FIXES::l_fix_osa_chloro - -[namelist:jules_temp_fixes=l_fix_snow_frac] -compulsory=true -description=Correction to prevent persistent small snow amounts when using the frac_snow_subl_melt=1 option -type=logical -url=https://metoffice.github.io/jules/latest/namelists/science_fixes.nml.html#JULES_TEMP_FIXES::l_fix_snow_frac - -[namelist:jules_temp_fixes=l_fix_ukca_h2dd_x] -compulsory=true -description=Fix for UKCA deposition of H2. -type=logical -url=https://metoffice.github.io/jules/latest/namelists/science_fixes.nml.html#JULES_TEMP_FIXES::l_fix_h2dd_x - -[namelist:jules_temp_fixes=l_fix_ustar_dust] -compulsory=true -description=Fix surface exchange for dust deposition -fail-if=this == '.false.' and namelist:jules_model_environment=l_jules_parent == 0; # This should be .true. in JULES standalone. -type=logical -url=https://metoffice.github.io/jules/latest/namelists/science_fixes.nml.html#JULES_TEMP_FIXES::l_fix_ustar_dust - -[namelist:jules_temp_fixes=l_fix_wind_snow] -compulsory=true -description=Fix to ensure wind speed is provided for snow unloading from vegetation -fail-if=this == '.false.' and namelist:jules_model_environment=l_jules_parent == 0; # This should be .true. in JULES standalone. -type=logical -url=https://metoffice.github.io/jules/latest/namelists/science_fixes.nml.html#JULES_TEMP_FIXES::l_fix_wind_snow - [namelist:jules_time] compulsory=true ns=namelist/Timestepping information @@ -6307,12 +4849,6 @@ values=1,2,3,4 warn-if=this == 3; # can_model = 3 is deprecated, with 4 preferred widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget -[namelist:jules_vegetation=can_rad_mod] -trigger=namelist:jules_vegetation=ilayers: 4,5,6; - =namelist:jules_pftparm=knl_io: 6; -values=1,4,5,6 -widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget - [namelist:jules_vegetation=cd_leaf] compulsory=true description=Leaf level drag coefficient @@ -6509,10 +5045,6 @@ sort-key=Panel-I18 type=logical url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::l_scale_resp_pm -[namelist:jules_vegetation=l_spec_veg_z0] -trigger=namelist:jules_pftparm=dz0v_dh_io: .false.; - =namelist:jules_pftparm=z0v_io: .true.; - [namelist:jules_vegetation=l_stem_resp_fix] compulsory=true description=Switch for bug fix for stem respiration to use balanced LAI to @@ -6818,157 +5350,6 @@ sort-key=6 type=character url=https://metoffice.github.io/jules/latest/namelists/ancillaries.nml.html#JULES_VEGETATION_PROPS::var_name -[namelist:jules_water_resources] -compulsory=true -description=Configuration of water resource modelling -ns=namelist/JULES Science Settings/jules_water_resources -sort-key=15 -title=Water resources -url=https://metoffice.github.io/jules/latest/namelists/jules_water_resources.nml.html#namelist-JULES_WATER_RESOURCES - -[namelist:jules_water_resources=l_prioritise] -compulsory=true -description=Switch to specify the priority of water demands -sort-key=a8 -trigger=namelist:jules_water_resources=priority: .true.; -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_water_resources.nml.html#JULES_WATER_RESOURCES::l_prioritise - -[namelist:jules_water_resources=l_water_domestic] -compulsory=true -description=Switch for modelling of water for domestic use -sort-key=a2 -trigger=namelist:jules_water_resources=rf_domestic: .true.; -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_water_resources.nml.html#JULES_WATER_RESOURCES::l_water_domestic - -[namelist:jules_water_resources=l_water_environment] -compulsory=true -description=Switch for modelling of water for environmental use -fail-if=this == '.true.'; # code is not yet complete -sort-key=a3 -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_water_resources.nml.html#JULES_WATER_RESOURCES::l_water_environment - -[namelist:jules_water_resources=l_water_industry] -compulsory=true -description=Switch for modelling of water for industrial use -sort-key=a4 -trigger=namelist:jules_water_resources=rf_industry: .true.; -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_water_resources.nml.html#JULES_WATER_RESOURCES::l_water_industry - -[namelist:jules_water_resources=l_water_irrigation] -compulsory=true -description=Switch for modelling of water for irrigation -fail-if=namelist:jules_irrig=l_irrig_limit == '.true.' and this == '.true.'; # l_irrig_limit must be F if l_water_irrigation=T -sort-key=a5 -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_water_resources.nml.html#JULES_WATER_RESOURCES::l_water_irrigation - -[namelist:jules_water_resources=l_water_livestock] -compulsory=true -description=Switch for modelling of water for livestock -sort-key=a6 -trigger=namelist:jules_water_resources=rf_livestock: .true.; -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_water_resources.nml.html#JULES_WATER_RESOURCES::l_water_livestock - -[namelist:jules_water_resources=l_water_resources] -compulsory=true -description=Switch for modelling of water resource modelling - =This must be .false. in the UM until further testing. -fail-if=this == '.true.' and namelist:jules_model_environment=l_jules_parent == 1; # Must be false in the UM. -sort-key=a1 -trigger=namelist:jules_water_resources=l_prioritise: .true.; - =namelist:jules_water_resources=l_water_domestic: .true.; - =namelist:jules_water_resources=l_water_environment: .true.; - =namelist:jules_water_resources=l_water_industry: .true.; - =namelist:jules_water_resources=l_water_irrigation: .true.; - =namelist:jules_water_resources=l_water_livestock: .true.; - =namelist:jules_water_resources=l_water_transfers: .true.; - =namelist:jules_water_resources=nr_gwater_model: .true.; - =namelist:jules_water_resources=nstep_water_res: .true.; - =namelist:jules_water_resources=partition_method: .true.; - =namelist:jules_water_resources_props: .true.; -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_water_resources.nml.html#JULES_WATER_RESOURCES::l_water_resources - -[namelist:jules_water_resources=l_water_transfers] -compulsory=true -description=Switch for modelling of water for water transfers -fail-if=this == '.true.'; # code is not yet complete -sort-key=a7 -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_water_resources.nml.html#JULES_WATER_RESOURCES::l_water_transfers - -[namelist:jules_water_resources=nr_gwater_model] -compulsory=true -description=Model for non-renewable groundwater -sort-key=b2 -url=https://metoffice.github.io/jules/latest/namelists/jules_water_resources.nml.html#JULES_WATER_RESOURCES::nr_gwater_model -value-titles=None,Last resort,Mix -values=0,1,2 -widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget - -[namelist:jules_water_resources=nstep_water_res] -compulsory=true -description=Timestep length for water resource model (number of main model timesteps) -range=1: -sort-key=b1 -type=integer -url=https://metoffice.github.io/jules/latest/namelists/jules_water_resources.nml.html#JULES_WATER_RESOURCES::nstep_water_res - -[namelist:jules_water_resources=partition_method] -compulsory=true -description=Method used to get the target fraction of demand to be met from surface water -sort-key=b6 -trigger=namelist:jules_water_resources=sfc_water_factor: 2; -url=https://metoffice.github.io/jules/latest/namelists/jules_water_resources.nml.html#JULES_WATER_RESOURCES::partition_method -value-titles=None,Use ancillary file,Calculate from stores -values=0,1,2 -widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget - -[namelist:jules_water_resources=priority] -compulsory=true -description=Water sector names, in order of decreasing priority -length=: -sort-key=a9 -url=https://metoffice.github.io/jules/latest/namelists/jules_water_resources.nml.html#JULES_WATER_RESOURCES::priority -values='dom','env','ind','irr','liv','tra' - -[namelist:jules_water_resources=rf_domestic] -compulsory=true -description=Fraction of water that is returned after abstraction for domestic use -range=0:1 -sort-key=b3 -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_water_resources.nml.html#JULES_WATER_RESOURCES::rf_domestic - -[namelist:jules_water_resources=rf_industry] -compulsory=true -description=Fraction of water that is returned after abstraction for industrial purposes -range=0:1 -sort-key=b4 -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_water_resources.nml.html#JULES_WATER_RESOURCES::rf_industry - -[namelist:jules_water_resources=rf_livestock] -compulsory=true -description=Fraction of water that is returned after abstraction for livestock -range=0:1 -sort-key=b5 -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_water_resources.nml.html#JULES_WATER_RESOURCES::rf_livestock - -[namelist:jules_water_resources=sfc_water_factor] -compulsory=true -description=Weight applied to surface water when calculating target fraction for surface water -range=0: -sort-key=b7 -type=real -url=https://metoffice.github.io/jules/latest/namelists/jules_water_resources.nml.html#JULES_WATER_RESOURCES::sfc_water_factor - [namelist:jules_water_resources_props] compulsory=true description=Configuration of spatially-varying water resource properties diff --git a/rose-meta/jules-standalone/versions.py b/rose-meta/jules-standalone/versions.py index f6e4338a..74b29ad9 100644 --- a/rose-meta/jules-standalone/versions.py +++ b/rose-meta/jules-standalone/versions.py @@ -45,7 +45,31 @@ from .version81_82 import * -class vnYY_txxxx(MacroUpgrade): +class vn82_t141(MacroUpgrade): + + """Upgrade macro from JULES by Maggie Hendry""" + + BEFORE_TAG = "vn8.2" + AFTER_TAG = "vn8.2_t141" + + def upgrade(self, config, meta_config=None): + """Upgrade a JULES runtime app configuration.""" + + self.rename_setting(config, ["namelist:fire_switches"], + ["namelist:jules_fire_weather_index"]) + self.rename_setting(config, ["namelist:jules_fire_weather_index", + "l_fire"], + ["namelist:jules_fire_weather_index", + "l_fire_weather_index"]) + + source = self.get_setting_value(config, ["file:fire.nml","source"]) + source = source.replace("namelist:fire_switches", + "namelist:jules_fire_weather_index") + self.change_setting_value(config, ["file:fire.nml","source"], source) + + return config, self.reports + +class vn82_t155(MacroUpgrade): """Upgrade macro from JULES by Nic Gedney""" From d4ef237e8fb1bad72aaffc6ef2a2f523dde45e41 Mon Sep 17 00:00:00 2001 From: nicgedney <131251916+nicgedney@users.noreply.github.com> Date: Mon, 14 Sep 2026 13:11:48 +0100 Subject: [PATCH 31/31] jules-shared changes --- rose-meta/jules-um/HEAD/rose-meta.conf | 2291 +++++++++++++++++++++++- 1 file changed, 2264 insertions(+), 27 deletions(-) diff --git a/rose-meta/jules-um/HEAD/rose-meta.conf b/rose-meta/jules-um/HEAD/rose-meta.conf index 0f8fdd05..f32ae979 100644 --- a/rose-meta/jules-um/HEAD/rose-meta.conf +++ b/rose-meta/jules-um/HEAD/rose-meta.conf @@ -5,20 +5,75 @@ # * Import statements from jules-shared. # * UM specific amendments to the imported metadata. # The majority of the metadata should be under rose-meta/jules-shared. -# Please see jules:wiki:SharingJULESmetadata +# +# This file is imported by um-atmos in the UM repository. +# +# Please see https://github.com/MetOffice/jules/wiki/Sharing-JULES-metadata ############################################################################### -import=jules-shared/jules-hydrology/HEAD +import=jules-shared/jules-deposition/HEAD + =jules-shared/jules-deposition-species/HEAD + =jules-shared/jules-deposition-species-specific/HEAD + =jules-shared/jules-hydrology/HEAD + =jules-shared/jules-irrig/HEAD =jules-shared/jules-model-environment/HEAD =jules-shared/jules-nvegparm/HEAD + =jules-shared/jules-overbank/HEAD =jules-shared/jules-pftparm/HEAD =jules-shared/jules-radiation/HEAD + =jules-shared/jules-red/HEAD + =jules-shared/jules-rivers/HEAD =jules-shared/jules-snow/HEAD =jules-shared/jules-soil/HEAD + =jules-shared/jules-soil-biogeochem/HEAD =jules-shared/jules-surface/HEAD =jules-shared/jules-surface-types/HEAD + =jules-shared/jules-temp-fixes/HEAD =jules-shared/jules-urban/HEAD =jules-shared/jules-vegetation/HEAD + =jules-shared/jules-water-resources/HEAD + +#[namelist:jules_deposition] has moved to jules-shared/jules-deposition +[namelist:jules_deposition=l_deposition] +fail-if=(this == '.true.' and namelist:jules_surface=l_aggregate == ".true.") ; # Deposition does not work with aggregated tile + =(this == '.true.' and namelist:run_ukca=l_ukca_intdd == '.false.') ; # UKCA needs to be available and used with interactive dry deposition + +[namelist:jules_deposition=l_ukca_ddep_lev1] +fail-if=( this != namelist:run_ukca=l_ukca_ddep_lev1 ) ; # For UM_JULES applications, code uses setting of equivalent deposition switch in run_ukca namelist + +[namelist:jules_deposition=l_ukca_ddepo3_ocean] +fail-if=( this == '.true.' and namelist:jules_model_environment=l_jules_parent == 0 ) ; # Deposition switch not available in JULES standalone as requires >75% open water fraction + =( this != namelist:run_ukca=l_ukca_ddepo3_ocean ) ; # For UM_JULES applications, code uses setting of equivalent deposition switch in run_ukca namelist + +[namelist:jules_deposition=l_ukca_dry_dep_so2wet] +fail-if=( this == '.true.' and namelist:jules_model_environment=l_jules_parent == 0 ) ; # Deposition switch not fully implemented in JULES standalone + =( this != namelist:run_ukca=l_ukca_dry_dep_so2wet ) ; # For UM_JULES applications, code uses setting of equivalent deposition switch in run_ukca namelist + +[namelist:jules_deposition=l_ukca_emsdrvn_ch4] +fail-if=( this != namelist:run_ukca=l_ukca_emsdrvn_ch4 ) ; # For UM_JULES applications, code uses setting of equivalent deposition switch in run_ukca namelist + +[namelist:jules_elevate] +compulsory=true +ns=namelist/JULES Science Settings/jules_elevate +title=Tile elevations + +[namelist:jules_elevate=l_elev_absolute_height] +compulsory=true +description=Interpret tile elevations as absolute values above sea-level rather than relative to grid-box mean +fail-if=len(this) != namelist:jules_surface_types=npft + namelist:jules_surface_types=nnvg +help=Only used when jules_surface=l_aggregate is false +length=: +sort-key=1 +type=logical + +[namelist:jules_elevate=surf_hgt_io] +compulsory=true +description=Height of tile above mean gridbox surface (m) +fail-if=len(this) != namelist:jules_surface_types=npft + namelist:jules_surface_types=nnvg +help=Only used when jules_surface=l_aggregate is false +length=: +sort-key=2 +type=real [namelist:jules_flake] description=Configuration of the FLake model, only required if l_flake_model=true @@ -34,6 +89,133 @@ description=Number of FLake variables that will be provided =INCLUDED TO ALLOW TRIGGER LISTS TO BE SHARED url=https://metoffice.github.io/jules/latest/namelists/ancillaries.nml.html#JULES_FLAKE::nvars +#[namelist:jules_hydrology] has moved to jules-shared/jules-hydrology +[namelist:jules_hydrology=b_pdm] +compulsory=true +description=Shape factor for the pdf +sort-key=Panel-G04a +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_hydrology.nml.html#JULES_HYDROLOGY::b_pdm + +[namelist:jules_hydrology=dz_pdm] +compulsory=true +description=Depth of soil considered by PDM (m) +sort-key=Panel-G04a +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_hydrology.nml.html#JULES_HYDROLOGY::dz_pdm + +[namelist:jules_hydrology=l_baseflow_corr] +compulsory=false +description=Use a correction to the calculation of baseflow +type=logical + +[namelist:jules_hydrology=l_inland] +fail-if=this == '.true.' and namelist:jules_rivers=l_rivers == '.false.'; # The inland water correction needs to be use in conjunction with river routing. + +[namelist:jules_hydrology=l_limit_gsoil] +compulsory=true +description=Limit soil conductance above critical soil moisture. +sort-key=Panel-G05 +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_hydrology.nml.html#JULES_HYDROLOGY::l_limit_gsoil + +[namelist:jules_hydrology=l_pdm] +compulsory=true +description=Use PDM scheme +sort-key=Panel-G04 +trigger=namelist:jules_hydrology=b_pdm: .true.; + = namelist:jules_hydrology=dz_pdm: .true.; + = namelist:jules_hydrology=l_spdmvar: .true.; +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_hydrology.nml.html#JULES_HYDROLOGY::l_pdm + +[namelist:jules_hydrology=l_spdmvar] +compulsory=true +description=Use a linear function of topographic slope to calculate S0/Smax within the PDM scheme +fail-if=this == '.true.' and namelist:jules_hydrology=l_pdm == '.false.'; # clarify that l_spdmvar=T can only be used with l_pdm=T +sort-key=Panel-G04b +trigger=namelist:jules_hydrology=slope_pdm_max: .true.; + =namelist:jules_hydrology=s_pdm: .false.; +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_hydrology.nml.html#JULES_HYDROLOGY::l_spdmvar + +[namelist:jules_hydrology=l_top] +compulsory=true +description=Use TOPMODEL scheme +fail-if=this == '.true.' and namelist:jules_hydrology=l_pdm == '.true.'; # Can't have TOPMODEL and PDM together +sort-key=Panel-G03 +trigger=namelist:jules_hydrology=zw_max: .true.; + = namelist:jules_hydrology=ti_max: .true.; + = namelist:jules_hydrology=ti_wetl: .true.; + = namelist:jules_hydrology=nfita: .true.; + = namelist:jules_hydrology=l_wetland_unfrozen: .true.; + = namelist:jules_soil_biogeochem=ch4_substrate: .true.; + = namelist:jules_soil_biogeochem=l_ch4_tlayered: .true.; + = namelist:jules_soil_biogeochem=l_ch4_interactive: .true.; + = namelist:jules_hydrology=l_baseflow_corr: .true.; +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_hydrology.nml.html#JULES_HYDROLOGY::l_top + +[namelist:jules_hydrology=l_wetland_unfrozen] +compulsory=true +description=Use unfrozen wetland TOPMODEL scheme +sort-key=Panel-G03a +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_hydrology.nml.html#JULES_HYDROLOGY::l_wetland_unfrozen + +[namelist:jules_hydrology=nfita] +compulsory=true +description=Number of values tried in the fitting of exponential wetland/ + =saturation fraction functions with water table depth. +sort-key=Panel-G03b +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_hydrology.nml.html#JULES_HYDROLOGY::nfita + +[namelist:jules_hydrology=s_pdm] +compulsory=true +description=Minimum storage below which there is no surface saturation + =considered by PDM (fraction of maximum storage, as S0/Smax) +sort-key=Panel-G04b1 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_hydrology.nml.html#JULES_HYDROLOGY::s_pdm + +[namelist:jules_hydrology=slope_pdm_max] +compulsory=true +description=Maximum slope (degrees) that will produce a S0/Smax value of zero + =in the linear function of topographic slope to calculate S0/Smax + =within the PDM scheme. +sort-key=Panel-G04b1 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_hydrology.nml.html#JULES_HYDROLOGY::slope_pdm_max + +[namelist:jules_hydrology=ti_max] +compulsory=true +description=Maximum possible value of the topographic index +sort-key=Panel-G03b +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_hydrology.nml.html#JULES_HYDROLOGY::ti_max + +[namelist:jules_hydrology=ti_wetl] +compulsory=true +description=Calibration parameter used in calculation of the wetland fraction +sort-key=Panel-G03b +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_hydrology.nml.html#JULES_HYDROLOGY::ti_wetl + +[namelist:jules_hydrology=zw_max] +compulsory=true +description=Maximum allowed depth to the water table (m) +sort-key=Panel-G03b +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_hydrology.nml.html#JULES_HYDROLOGY::zw_max + +[namelist:jules_irrig_props] +description=Configuration of irrigation properties + =NOT AVAILABLE TO UM + =READ BY STANDALONE EXECUTABLES ONLY + =INCLUDED TO ALLOW TRIGGER LISTS TO BE SHARED +url=https://metoffice.github.io/jules/latest/namelists/ancillaries.nml.html#namelist-JULES_IRRIG_PROPS + [namelist:jules_model_environment=l_jules_parent] fail-if=this == 0; # This should be 1 to indicate UM-JULES. =this == 2 and namelist:jules_model_environment=lsm_id != 3; # The OASIS coupler can only be used with Rivers-only (OASIS-Rivers). @@ -186,6 +368,16 @@ trigger=namelist:jules_pftparm: 1; =namelist:run_stochastic=z0v_rp_min: 1 ; =namelist:run_stochastic=z0v_rp: 1 ; +#[namelist:jules_nvegparm] has moved to jules-shared/jules-nvegparm +[namelist:jules_nvegparm=z0hm_classic_nvg_io] +compulsory=true +description=Ratio of the roughness length for heat to the roughness length for momentum for the CLASSIC aerosol scheme only +fail-if=len(this) != namelist:jules_surface_types=nnvg +length=: +type=real +url=https://metoffice.github.io/jules/latest/namelists/nveg_params.nml.html#JULES_NVEGPARM::z0hm_classic_nvg_io + +#[namelist:jules_pftparm] has moved to jules-shared/jules-pftparm [namelist:jules_pftparm=a_wl_io] length=: @@ -396,6 +588,18 @@ 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 + =all(this == 0) +length=: +ns=namelist/JULES Science Settings/jules_pftparm/Other parameters +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=: @@ -537,6 +741,85 @@ length=: [namelist:jules_pftparm=z0v_io] length=: +#[namelist:jules_radiation] has moved to jules-shared/jules-radiation +[namelist:jules_radiation=l_cosz] +compulsory=true +description=Calculate solar zenith angle in standalone. + =STANDALONE ONLY: This is not applicable to UM as the solar zenith + =angle is implicitly calculated by the UM. To create an equivalent + =standalone app it must be .true. +sort-key=Panel-BS01 +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_radiation.nml.html#JULES_RADIATION::l_cosz + +[namelist:jules_radiation=l_dolr_land_black] +compulsory=true +description=If true, + =do not use the surface emissivity in adjusting the OLR at land points + =HAS NO EFFECT IN STANDALONE +sort-key=Panel-BX01 +type=logical + +[namelist:jules_radiation=l_embedded_snow] +compulsory=true +description=Use embedded canopy snow albedo scheme. +fail-if=this == '.true.' and namelist:jules_radiation=l_spec_albedo != '.true.'; # If l_embedded_snow = T then l_spec_albedo must also be T + =this == '.true.' and namelist:jules_radiation=l_snow_albedo == '.true.'; # Embedded canopy snow albedo model is exclusive of l_snow_albedo. +sort-key=Panel-B02a +trigger=namelist:jules_snow=can_clump: .true.; + =namelist:jules_snow=n_lai_exposed: .true.; +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_radiation.nml.html#JULES_RADIATION::l_embedded_snow + +[namelist:jules_radiation=l_mask_snow_orog] +compulsory=true +description=Include orographic masking of snow. +sort-key=Panel-B06 +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_radiation.nml.html#JULES_RADIATION::l_mask_snow_orog + +[namelist:jules_radiation=l_sea_alb_var_chl] +fail-if=this == '.true.' and namelist:jules_model_environment=l_jules_parent == 0; # This is not currently available to standalone. + +[namelist:jules_radiation=l_snow_albedo] +compulsory=true +description=Include prognostic snow albedos. +fail-if=this == '.true.' and namelist:jules_radiation=l_spec_albedo == '.false.' # Prognostic snow albedo can only be used when l_spec_albedo=T +sort-key=Panel-B02 +# Only available when namelist:jules_radiation=l_spec_albedo is true, however it is not trigger-ignored as the trigger cascade results in albsnc not being available when namelist:jules_radiation=l_spec_albedo is false. +trigger=namelist:jules_snow=r0: .true.; + =namelist:jules_snow=rmax: .true.; + =namelist:jules_snow=snow_ggr: .true.; + =namelist:jules_snow=amax: .true.; + =namelist:jules_snow=dtland: .false.; + =namelist:jules_snow=kland_numerator: .false.; + =namelist:jules_pftparm=albsnc_max_io: .false.; + =namelist:jules_pftparm=albsnc_min_io: .false.; + =namelist:jules_nvegparm=albsnc_nvg_io: .false.; + =namelist:jules_radiation=l_embedded_snow: .false.; +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_radiation.nml.html#JULES_RADIATION::l_snow_albedo + +[namelist:jules_radiation=l_spec_sea_alb] +compulsory=true +description=Use spectrally varying open sea albedos +sort-key=Panel-B05c +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_radiation.nml.html#JULES_RADIATION::l_spec_sea_alb + +[namelist:jules_radiation=wght_alb] +compulsory=true +description=Weights for disaggregation of SW flux in the standard order VIS direct, VIS diffuse, NIR direct, NIR diffuse +length=4 +sort-key=Panel-BR01 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_surface.nml.html#JULES_RADIATION::wght_alb + +#[namelist:jules_rivers] has moved to jules-shared/jules-rivers +[namelist:jules_rivers=i_river_vn] +value-titles=UM_TRIP,RFM +values=1,2 + [namelist:jules_rivers_props] compulsory=true description=Configuration of spatially varying rivers properties @@ -544,6 +827,13 @@ description=Configuration of spatially varying rivers properties =READ BY STANDALONE EXECUTABLES ONLY url=https://metoffice.github.io/jules/latest/namelists/ancillaries.nml.html#namelist-JULES_RIVERS_PROPS +[namelist:jules_rivers_props=l_use_area] +description=Switch to use a drainage area ancillary field to identify river points + =NOT AVAILABLE TO UM + =READ BY STANDALONE EXECUTABLES ONLY + =INCLUDED TO ALLOW TRIGGER LISTS TO BE SHARED +url=https://metoffice.github.io/jules/latest/namelists/ancillaries.nml.html#JULES_RIVERS_PROPS::l_use_area + [namelist:jules_rivers_props=rivers_regrid] compulsory=true description=Regridding is required between model input and river routing grids @@ -551,40 +841,1987 @@ description=Regridding is required between model input and river routing grids =USED BY STANDALONE EXECUTABLES ONLY url=https://metoffice.github.io/jules/latest/namelists/ancillaries.nml.html#JULES_RIVERS_PROPS::rivers_regrid -[namelist:jules_surface=i_aggregate_opt] +[namelist:jules_sea_seaice] compulsory=true -description=Method of aggregating tiled properties -sort-key=Panel-F02a -url=https://metoffice.github.io/jules/latest/namelists/jules_surface.nml.html#JULES_SURFACE::i_aggregate_opt -value-titles=Original option,Separate aggregation -values=0,1 +ns=namelist/JULES Science Settings/jules_sea_seaice +title=Sea and sea-ice options -[namelist:jules_surface=l_aggregate] +[namelist:jules_sea_seaice=a_chrn_coare] compulsory=true -description=Use aggregate surface scheme -sort-key=Panel-F02 -trigger=namelist:jules_surface=i_aggregate_opt: .true.; - =namelist:recon_science=l_canopy_snow_throughfall: .false.; - =namelist:jules_elevate=surf_hgt_io: .false.; - =namelist:jules_elevate=l_elev_absolute_height: .false.; -type=logical -url=https://metoffice.github.io/jules/latest/namelists/jules_surface.nml.html#JULES_SURFACE::l_aggregate +description=Coefficient of 10m wind speed in expression for + =Charnock's coefficient in COARE algorithm. +help=Only used if namelist:jules_sea_seaice=iseasurfalg = 3 +sort-key=01 +type=real -[namelist:jules_surface=l_elev_land_ice] -# This trigger list is different, but may just be an oversight. Leave for now. -trigger=namelist:jules_soil=dzsoil_elev: .true.; - =namelist:jules_surface_types=elev_ice: .true.; - =namelist:jules_surface_types=elev_rock: .true.; +[namelist:jules_sea_seaice=ahmax] +compulsory=true +description=4-band sea ice albedo scheme: thickness above which + =underlying ocean doesn't affect sea ice albedo (m) +range=0:30 +sort-key=02 +type=real -[namelist:jules_surface=l_vary_z0m_soil] -help=Allows the bare soil momentum roughness length (z0(m)) to - =vary. This field needs to be input/reconfigured in as an - =ancillary field in the soil parameters file as STASH item 97. +[namelist:jules_sea_seaice=albicei_cice] +compulsory=true +description=4-band sea ice albedo scheme: bare ice albedo (near-IR) +range=0:1 +sort-key=04 +type=real -[namelist:jules_surface=srf_ex_cnv_gust] +[namelist:jules_sea_seaice=albicev_cice] +compulsory=true +description=4-band sea ice albedo scheme: bare ice albedo (visible) +range=0:1 +sort-key=03 +type=real + +[namelist:jules_sea_seaice=albpondi_cice] +compulsory=true +description=4-band sea ice albedo scheme: meltpond albedo (near-IR) +range=0:1 +sort-key=08 +type=real + +[namelist:jules_sea_seaice=albpondv_cice] +compulsory=true +description=4-band sea ice albedo scheme: meltpond albedo (visible) +range=0:1 +sort-key=07 +type=real + +[namelist:jules_sea_seaice=albsnowi_cice] +compulsory=true +description=4-band sea ice albedo scheme: snow albedo (near-IR) +range=0:1 +sort-key=06 +type=real + +[namelist:jules_sea_seaice=albsnowv_cice] +compulsory=true +description=4-band sea ice albedo scheme: snow albedo (visible) +range=0:1 +sort-key=05 +type=real + +[namelist:jules_sea_seaice=alphab] +# This needs triggers for NEMO, CICE, SSICEALBEDO +# [namelist:jules_sea_seaice=l_ssice_albedo] trigger=namelist_jules_sea_seaice=alphab: .true. +compulsory=true +description=Original HadGEM sea ice albedo scheme: Albedo of snow free ('bare') sea-ice +range=0:1 +sort-key=09 +type=real + +[namelist:jules_sea_seaice=alphac] +compulsory=true +description=Original HadGEM sea ice albedo scheme: Albedo of sea-ice at and + =below odegC-dtice if .not.l_ssice_albedo, + =or albedo of snow on sea-ice + =at and below 0degC-dtice if l_ssice_albedo ("C" for "cold") +range=0:1 +sort-key=10 +type=real + +[namelist:jules_sea_seaice=alpham] +compulsory=true +description=Original HadGEM sea ice albedo scheme: Albedo of sea-ice at melting point (TM) + =if .not.l_ssice_albedo, + =or albedo of snow on sea-ice at melting point (TM) if + =l_ssice_albedo. ("M" for "melting") +range=0:1 +sort-key=11 +type=real + +[namelist:jules_sea_seaice=b_chrn_coare] +compulsory=true +description=Constant term in expression for + =Charnock`s coefficient in COARE algorithm. +help=Only used if namelist:jules_sea_seaice=iseasurfalg = 3 +sort-key=12 +type=real + +[namelist:jules_sea_seaice=beta_evap] +compulsory=true +description=Efficiency of evaporation from sea-surface +help=This parameter controls the efficiency with which water can evaporate from a sea-surface. + = The default value is 1.0, moisture availability is effectively unrestricted. + = However lower values can be useful for idealised modelling, + = restricting the evaporation rate. + = For example, a value of 0.0 would result in no evaporation +range=0.0:1.0 +sort-key=12a +type=real + +[namelist:jules_sea_seaice=beta_floe] +compulsory=true +description=Constant in parametrization of crosswind length of floe +sort-key=62 +type=real + +[namelist:jules_sea_seaice=buddy_sea] +compulsory=true +description=Use neighbouring sea point wind-speeds in coastal grid points +sort-key=13 value-titles=Off,On values=0,1 +[namelist:jules_sea_seaice=cdn_hw_sea] +compulsory=true +description="High-wind limit of the neutral drag coefficient over the sea" +fail-if=this > namelist:jules_sea_seaice=cdn_max_sea; # Must not exceed cdn_max_sea +help=At very high wind speeds, the drag coefficient is not well-known, + =though observations suggest a reduction below the maximum value. + =This parameter specifies the value taken at wind speeds greater than + =u_cdn_max. +sort-key=25c +type=real + +[namelist:jules_sea_seaice=cdn_max_sea] +compulsory=true +description="Maximum neutral drag coefficient over the sea" +help=The maximum value that the 10-m neutral drag coefficient + =is permitted to take. Drag coefficients are not well-known + =at high wind speeds though evidence generally suggests that + =the drag coefficient does not increase above about 33 ms-1, + =so that it does not exceed about 0.0024, based on laboratory + =measurements. The limit in open seas seems a little higher, + =about 0.003, because the fetch is not so limited. +sort-key=25b +type=real + +[namelist:jules_sea_seaice=ce_floe] +compulsory=true +description=Effective resistance coefficient. NB. The full logarithmic + =form of the integral of U^2 is used, so this will need to + =be scaled if taken from a source where the integral has + =been approximated. +sort-key=66 +type=real + +[namelist:jules_sea_seaice=charnock] +compulsory=false +description=Charnock parameter for roughness length of sea points +range=0.0:1.0 +sort-key=14 +type=real + +[namelist:jules_sea_seaice=d_floe_max] +compulsory=true +description=Maximum crosswind length of floe +sort-key=64 +type=real + +[namelist:jules_sea_seaice=d_floe_min] +compulsory=true +description=Minimum crosswind length of floe +sort-key=63 +type=real + +[namelist:jules_sea_seaice=dalb_bare_wet] +compulsory=true +description=Original HadGEM sea ice albedo scheme: Increment to albedo + =for each degree temperature rises above 0degC-dt_bare. + =Only used if l_sice_meltponds and l_ssice_albedo +range=-1.0:0 +sort-key=15 +type=real + +[namelist:jules_sea_seaice=dalb_mlt_cice] +compulsory=true +description=4-band sea ice albedo scheme: Increment to sea ice albedo for + =each degree temperature rises above 0degC-dt_bare (not used + =when explicit meltponds are in use) +range=-1:0 +sort-key=16 +type=real + +[namelist:jules_sea_seaice=dalb_mlts_i_cice] +compulsory=true +description=4-band sea ice albedo scheme: Increment to near-IR snow albedo + =for each degree temperature rises above 0degC-dt_bare +range=-1:0 +sort-key=18 +type=real + +[namelist:jules_sea_seaice=dalb_mlts_v_cice] +compulsory=true +description=4-band sea ice albedo scheme: Increment to visible snow albedo + =for each degree temperature rises above 0degC-dt_bare +range=-1:0 +sort-key=17 +type=real + +[namelist:jules_sea_seaice=dt_bare] +# dependent on namelist:jules_sea_seaice=l_ssice_albedo +compulsory=true +description=Original HadGEM sea ice albedo scheme: Temperature below freezing + =at which melt ponds form if l_sice_meltponds and + =l_ssice_albedo (degC) +range=0:100 +sort-key=19 +type=real + +[namelist:jules_sea_seaice=dt_bare_cice] +compulsory=true +description=CICE sea ice albedo scheme: Temperature below freezing at which + =melt ponds form +range=0:100 +sort-key=20 +type=real + +[namelist:jules_sea_seaice=dt_snow_cice] +compulsory=true +description=CICE sea ice albedo scheme: Temperature range in which albedo of + =sea-ice, + =if .not. l_ssice_albedo, + =or of snow on sea-ice varies + =between its limits. +range=0:100 +sort-key=21 +type=real + +[namelist:jules_sea_seaice=dtice] +compulsory=true +description=Original HadGEM sea ice albedo scheme: Temperature range in which + =albedo of sea-ice, + =if .not.l_ssice_albedo,or of snow on sea-ice, + =if l_ssice_albedo, + =varies between its limits. Recommended range + =5-10K +range=0.1:50 +sort-key=22 +type=real + +[namelist:jules_sea_seaice=emis_sea] +compulsory=false +description=Emissivity of open sea +sort-key=23 +type=real + +[namelist:jules_sea_seaice=emis_sice] +compulsory=false +description=Emissivity of sea-ice +sort-key=24 +type=real + +[namelist:jules_sea_seaice=h_freeboard_max] +compulsory=true +description=Maximum height of freeboard +sort-key=61 +type=real + +[namelist:jules_sea_seaice=h_freeboard_min] +compulsory=true +description=Minimum height of freeboard +sort-key=60 +type=real + +[namelist:jules_sea_seaice=hcap_sea] +compulsory=true +description=Heat capacity of open sea +sort-key=68 +type=real + +[namelist:jules_sea_seaice=i_high_wind_drag] +compulsory=true +description=Option for treating drag at high wind speeds +sort-key=25a +trigger=namelist:jules_sea_seaice=cdn_max_sea: 1, 2; + =namelist:jules_sea_seaice=cdn_hw_sea: 2; + =namelist:jules_sea_seaice=u_cdn_max: 2; + =namelist:jules_sea_seaice=u_cdn_hw: 2; +value-titles="No special treatment of high winds", + ="Maximum neutral drag coefficient specified", + ="Maximum neutral drag coefficient and reduction at very high wind speeds" +values=0,1,2 + +[namelist:jules_sea_seaice=iseasurfalg] +compulsory=true +description=Algorithm for surface exchange over the sea. +help=The most basic option for surface transfer at the sea surface + =consists of a specification of Charnock's coefficient for the + =momentum roughness length, including the aerodynamically smooth + =contribution in light winds, and a fixed thermal roughness length. + =Surface divergence theory allows for a variable thermal roughness + =length that follows the aerodynamicall smooth limit in light winds + =and decreases in stronger winds, giving a slower increase in the + =exchange coefficient for moisture as the wind rises. Historically, + =roughness lengths that depend on the friction velocity have not + =been iterated within the calculation of the Obukhov length, though + =this is more consistent: an iterative option is therefore provided. + =The COARE algorithm is based on a range of observations and exists + =in various forms. It features a dependence of Charnock's coefficient + =on the wind speed and a dependence of the thermal roughness length + =on the roughness Reynolds number. Extra parameters allow different + =versions of the algorithm to be used. +sort-key=25 +trigger=namelist:jules_sea_seaice=charnock: 0,1, + =2; + =namelist:jules_sea_seaice=l_10m_neut: 3; + =namelist:jules_sea_seaice=a_chrn_coare: 3; + =namelist:jules_sea_seaice=b_chrn_coare: 3; + =namelist:jules_sea_seaice=u10_max_coare: 3; + =namelist:jules_sea_seaice=u10_min_coare: 3; +value-titles="Fixed values of Charnock's coefficient and + =thermal roughness length", + ="Fixed value of Charnock's coefficient with thermal + =roughness from surface divergence theory (non-iterative)", + ="Fixed value of Charnock's coefficient with thermal + =roughness from surface divergence theory (iterative)", + ="Roughness lengths follow functional forms of the COARE + =algorithm", + ="Variable value of Charnock's coefficient with thermal + =roughness from surface divergence theory (iterative)", + ="Variable value of Charnock's coefficient with thermal + =roughness from surface divergence theory (non-iterative)" +values=0,1,2,3,4,5 + +[namelist:jules_sea_seaice=kappa_seasurf] +compulsory=false +description=Effective thermal conductivity of sea surface layer (W / m / K) +sort-key=26 +type=real + +[namelist:jules_sea_seaice=kappai] +compulsory=false +description=Thermal conductivity of sea-ice (W / m / K) +sort-key=27 +type=real + +[namelist:jules_sea_seaice=kappai_snow] +compulsory=false +description=Thermal conductivity of snow on zero layer sea-ice (W / m / K) +sort-key=28 +type=real + +[namelist:jules_sea_seaice=l_10m_neut] +compulsory=true +description=Flag to use true neutral 10m wind speeds. +help=Only used if namelist:jules_sea_seaice=iseasurfalg = 3 + =The 10m wind speed in the COARE algorithm should strictly be + =a neutral wind speed. Historically in the UM system, + =the + =distinction between stability-adjusted and neutral 10m + =winds has been ignored, + =eg. in assimilation. This switch + =enables the distinction to be made or ignored as desired. +sort-key=29 +type=logical + +[namelist:jules_sea_seaice=l_cice_alb] +compulsory=true +description=Use sea-ice albedo scheme from the CICE model +sort-key=30 +trigger=namelist:jules_sea_seaice=alphab: .false.; + =namelist:jules_sea_seaice=alphac: .false.; + =namelist:jules_sea_seaice=alpham: .false.; + =namelist:jules_sea_seaice=dalb_bare_wet: .false.; + =namelist:jules_sea_seaice=dtice: .false.; + =namelist:jules_sea_seaice=dt_bare: .false.; + =namelist:jules_sea_seaice=pen_rad_frac: .false.; + =namelist:jules_sea_seaice=ssalphac: .false.; + =namelist:jules_sea_seaice=ssalpham: .false.; + =namelist:jules_sea_seaice=ssdtice: .false.; + =namelist:jules_sea_seaice=sw_beta: .false.; + =namelist:jules_sea_seaice=ahmax: .true.; + =namelist:jules_sea_seaice=albicei_cice: .true.; + =namelist:jules_sea_seaice=albicev_cice: .true.; + =namelist:jules_sea_seaice=albsnowi_cice: .true.; + =namelist:jules_sea_seaice=albsnowv_cice: .true.; + =namelist:jules_sea_seaice=albpondi_cice: .true.; + =namelist:jules_sea_seaice=albpondv_cice: .true.; + =namelist:jules_sea_seaice=dalb_mlt_cice: .true.; + =namelist:jules_sea_seaice=dalb_mlts_i_cice: .true.; + =namelist:jules_sea_seaice=dalb_mlts_v_cice: .true.; + =namelist:jules_sea_seaice=dt_bare_cice: .true.; + =namelist:jules_sea_seaice=dt_snow_cice: .true.; + =namelist:jules_sea_seaice=pen_rad_frac_cice: .true.; + =namelist:jules_sea_seaice=snowpatch: .true.; + =namelist:jules_sea_seaice=sw_beta_cice: .true.; + =namelist:jules_sea_seaice=l_sice_swpen: .true. +type=logical + +[namelist:jules_sea_seaice=l_ctile] +compulsory=true +description=Enable coastal tiling +sort-key=31 +trigger=namelist:run_convection=l_ccp_seabreeze: .true.; +type=logical + +[namelist:jules_sea_seaice=l_iceformdrag_lupkes] +compulsory=true +description=Switch for diagnostic form drag following Lupkes et al. (2012) + =and Lupkes & Gryanik (2015) +sort-key=58 +trigger=namelist:jules_sea_seaice=l_stability_lupkes: .true.; + =namelist:jules_sea_seaice=h_freeboard_min: .true.; + =namelist:jules_sea_seaice=h_freeboard_max: .true.; + =namelist:jules_sea_seaice=beta_floe: .true.; + =namelist:jules_sea_seaice=d_floe_min: .true.; + =namelist:jules_sea_seaice=d_floe_max: .true.; + =namelist:jules_sea_seaice=ss_floe: .true.; + =namelist:jules_sea_seaice=ce_floe: .true. ; + =namelist:jules_sea_seaice=z0h_z0m_miz: .false. ; + =namelist:jules_sea_seaice=z0miz: .false. +type=logical + +[namelist:jules_sea_seaice=l_icerough_prognostic] +compulsory=true +description=Switch for prognostic form drag +sort-key=58 +type=logical + +[namelist:jules_sea_seaice=l_saldep_freeze] +compulsory=true +description=Ocean freezing temperature (and thus sea ice formation) is salinity-dependent +sort-key=32 +type=logical + +[namelist:jules_sea_seaice=l_sice_heatflux] +compulsory=true +description=Do semi-implicit update of ti for sea-ice +sort-key=33 +type=logical + +[namelist:jules_sea_seaice=l_sice_meltponds] +compulsory=true +description=Sea-ice albedo is affected by meltponds (simple parametrization) +sort-key=34 +trigger=namelist:jules_sea_seaice=dalb_bare_wet: .true.; + =namelist:jules_sea_seaice=dt_bare: .true. +type=logical + +[namelist:jules_sea_seaice=l_sice_meltponds_cice] +compulsory=true +description=Sea-ice albedo is affected by meltponds (from CICE meltponds scheme) +sort-key=35 +trigger=namelist:jules_sea_seaice=albpondi_cice: .true.; + =namelist:jules_sea_seaice=albpondi_cice: .true.; + =namelist:jules_sea_seaice=dalb_bare_wet: .false.; + =namelist:jules_sea_seaice=dt_bare: .false.; + =namelist:jules_sea_seaice=dt_bare_cice: .false. +type=logical + +[namelist:jules_sea_seaice=l_sice_multilayers] +compulsory=true +description=Coupled to sea-ice multilayer model +sort-key=36 +type=logical + +[namelist:jules_sea_seaice=l_sice_scattering] +compulsory=true +description=Use sea-ice albedo internal scatter +sort-key=37 +trigger=namelist:jules_sea_seaice=pen_rad_frac: .true.; + =namelist:jules_sea_seaice=pen_rad_frac_cice: .true.; + =namelist:jules_sea_seaice=sw_beta: .true.; + =namelist:jules_sea_seaice=sw_beta_cice: .true.; + =namelist:jules_sea_seaice=l_sice_swpen: .true. +type=logical + +[namelist:jules_sea_seaice=l_sice_swpen] +compulsory=true +description=Penetration of SW radiation into sea ice included explicitly +help=Allow some of the penetrating solar radiation to be absorbed below the + =sea ice surface skin. This means removing this component from the surface + =net solar and passing this energy to the sea ice model through the coupler + =so that it can be absorbed within the sea ice layers. +sort-key=38 +type=logical + +[namelist:jules_sea_seaice=l_ssice_albedo] +compulsory=true +description=Include the effect of snow on the sea-ice albedo +sort-key=39 +trigger=namelist:jules_sea_seaice=alphab: .true.; + =namelist:jules_sea_seaice=alphac: .false.; + =namelist:jules_sea_seaice=alpham: .false.; + =namelist:jules_sea_seaice=dtice: .false.; + =namelist:jules_sea_seaice=dalb_bare_wet: .true.; + =namelist:jules_sea_seaice=dt_bare: .true.; + =namelist:jules_sea_seaice=ssalphac: .true.; + =namelist:jules_sea_seaice=ssalpham: .true.; + =namelist:jules_sea_seaice=ssdtice: .true.; + =namelist:jules_sea_seaice=pen_rad_frac: .true.; + =namelist:jules_sea_seaice=sw_beta: .true. +type=logical + +[namelist:jules_sea_seaice=l_stability_lupkes] +compulsory=true +description=Switch to include the stability dependence in the parametrization + =of ice form drag +sort-key=59 +type=logical + +[namelist:jules_sea_seaice=l_tstar_sice_new] +compulsory=true +description=Calculate sea-ice surface temperature in scheme compatible with multi-categories + =This logical is only used in a single category run +sort-key=40 +type=logical + +[namelist:jules_sea_seaice=l_use_dtstar_sea] +compulsory=true +description=Use the calculated change in SST from sf_flux +sort-key=67 +trigger=namelist:jules_sea_seaice=kappa_seasurf: .true.; +type=logical + +[namelist:jules_sea_seaice=nice] +compulsory=true +description=The total number of sea-ice categories +range=1:25 +sort-key=41 +type=integer + +[namelist:jules_sea_seaice=nice_use] +compulsory=true +description=The number of sea-ice categories used in surface exchange + =(should be equal to either 1 or nice) +range=1:25 +sort-key=42 +type=integer + +[namelist:jules_sea_seaice=pen_rad_frac] +compulsory=true +description=Original HadGEM sea ice albedo scheme: Fraction of SW radiation + =that penetrates seaice and scatters back causing an addition to + =the albedo. Only active if l_ssice_albedo and l_sice_scattering +range=0:1 +sort-key=43 +type=real + +[namelist:jules_sea_seaice=pen_rad_frac_cice] +compulsory=true +description=4-band sea ice albedo scheme: Fraction of SW radiation that + =penetrates seaice and scatters back causing an addition to the + =albedo in CICE multi-band scheme (not used when internal + =scattering in sea ice is modelled explicitly) +range=0:1 +sort-key=44 +type=real + +[namelist:jules_sea_seaice=seasalinityfactor] +compulsory=false +description=Scaling of qsat in sea-surface evaporation to allow for + =the salinity of sea water +range=0.0:1.0 +sort-key=45 +type=real + +[namelist:jules_sea_seaice=snowpatch] +compulsory=true +description=4-band sea ice albedo scheme: Length scale for parameterizing + =non uniform snow coverage (m) +range=0:1 +sort-key=46 +type=real + +[namelist:jules_sea_seaice=ss_floe] +compulsory=true +description=Sheltering constant +sort-key=65 +type=real + +[namelist:jules_sea_seaice=ssalphac] +compulsory=true +description=Original HadGEM sea ice albedo scheme: Namelist input for alphac + =if l_ssice_albedo - assigned to alphac in readlsta.F90 +range=0:1 +sort-key=47 +type=real + +[namelist:jules_sea_seaice=ssalpham] +compulsory=true +description=Original HadGEM sea ice albedo scheme: Namelist input for alpham + =if l_ssice_albedo - assigned to alpham in readlsta.F90 +range=0:1 +sort-key=48 +type=real + +[namelist:jules_sea_seaice=ssdtice] +compulsory=true +description=Original HadGEM sea ice albedo scheme: Namelist input for dtice if + =l_ssice_albedo - assignd to dtice in readlsta.F90. Recommended + =range 5-10K +range=0.1:50 +sort-key=49 +type=real + +[namelist:jules_sea_seaice=sw_beta] +compulsory=true +description=Original HadGEM sea ice albedo scheme: Attenutation parameter for + =SW in seaice which controls the additional albedo due to internal + =scattering +range=0:1 +sort-key=50 +type=real + +[namelist:jules_sea_seaice=sw_beta_cice] +compulsory=true +description=4-band sea ice albedo scheme: Attenutation parameter for SW in + =seaice which controls the additional albedo due to internal + =scattering in the CICE multi-band scheme (not used when internal + =scattering in sea ice is modelled explicitly) +range=0:1 +sort-key=51 +type=real + +[namelist:jules_sea_seaice=u10_max_coare] +compulsory=true +description=Highest wind speed for linear variation of Charnock's + =coefficient in COARE algorithm. +help=Only used if namelist:jules_sea_seaice=iseasurfalg = 3 + =Generically in the COARE algorithm, + =Charnock's coefficient + =exhibits a linear dependence on the 10m wind speed + =over a specified range, with constant values above and + =below. Precise values vary with the version of the COARE + =algorithm. This variable provides the upper limit of the + =linear range. +sort-key=52 +type=real + +[namelist:jules_sea_seaice=u10_min_coare] +compulsory=true +description=Lowest wind speed for linear variation of Charnock's + =coefficient in COARE algorithm. +help=Only used if namelist:jules_sea_seaice=iseasurfalg = 3 + =Generically in the COARE algorithm, + =Charnock's coefficient + =exhibits a linear dependence on the 10m wind speed + =over a specified range, with constant values above and + =below. Precise values vary with the version of the COARE + =algorithm. This variable provides the lower limit of the + =linear range. +sort-key=53 +type=real + +[namelist:jules_sea_seaice=u_cdn_hw] +compulsory=true +description="Wind speed above which the drag coefficient takes the limiting value" +fail-if=this < namelist:jules_sea_seaice=u_cdn_max; # Must exceed u_cdn_max +help=This is the wind speed at which the drag coefficient attains its limiting + =value for very high wind speeds. +sort-key=25d +type=real + +[namelist:jules_sea_seaice=u_cdn_max] +compulsory=true +description="Wind speed above which the drag coefficient begins to decrease" +help=This is the wind speed at which the drag coefficient Begins to decrease + =from its maximum value to the limiting value for very high wind speeds. + =The decrease is linear in the wind speed. +sort-key=25e +type=real + +[namelist:jules_sea_seaice=z0h_z0m_miz] +compulsory=false +description=Ratio of thermal to momentum roughness lengths for marginal ice +sort-key=54 +type=real + +[namelist:jules_sea_seaice=z0h_z0m_sice] +compulsory=false +description=Ratio of thermal to momentum roughness lengths for sea ice +sort-key=55 +type=real + +[namelist:jules_sea_seaice=z0hsea] +compulsory=true +description=Roughness length for heat over open sea (m) +sort-key=55a +type=real + +[namelist:jules_sea_seaice=z0miz] +compulsory=false +description=Roughness length for heat, + =moisture and momentum over the Marginal Ice Zone (m) +sort-key=56 +type=real + +[namelist:jules_sea_seaice=z0sice] +compulsory=false +description=Roughness length for heat, + =moisture and momentum over sea-ice (m) +sort-key=57 +type=real + +#[namelist:jules_snow] has moved to jules-shared/jules-snow +[namelist:jules_snow=a_snow_et] +compulsory=true +description=Constant in Parametrization of equitemperature metamorphism +ns=namelist/JULES Science Settings/jules_snow/Other parameters +sort-key=Panel-D14a +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::a_snow_et + +[namelist:jules_snow=aicemax] +compulsory=true +description=Maximum albedos (VIS and NIR) for bare ice +length=2 +ns=namelist/JULES Science Settings/jules_snow/Radiation parameters +range=0.01:0.99 +sort-key=Panel-D08 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::aicemax + +[namelist:jules_snow=amax] +compulsory=false +description=Maximum albedos (VIS and NIR) for fresh snow +length=2 +ns=namelist/JULES Science Settings/jules_snow/Radiation parameters +sort-key=Panel-D06 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::amax + +[namelist:jules_snow=b_snow_et] +compulsory=true +description=Constant in Parametrization of equitemperature metamorphism +ns=namelist/JULES Science Settings/jules_snow/Other parameters +sort-key=Panel-D14a +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::b_snow_et + +[namelist:jules_snow=c_snow_et] +compulsory=true +description=Constant in Parametrization of equitemperature metamorphism +ns=namelist/JULES Science Settings/jules_snow/Other parameters +sort-key=Panel-D14a +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::c_snow_et + +[namelist:jules_snow=dtland] +compulsory=false +description=Degrees Celsius below zero at which snow albedo equals cold deep snow albedo +ns=namelist/JULES Science Settings/jules_snow/Radiation parameters +sort-key=Panel-D07 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::dtland + +[namelist:jules_snow=dzsnow] +compulsory=true +description=Prescribed thickness of each snow layer (m) when the multilayer scheme is enabled. +fail-if=len(this) != namelist:jules_snow=nsmax; # A value must be given for each snow layer +length=: +sort-key=Panel-D01a +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::dzsnow + +[namelist:jules_snow=frac_snow_subl_melt] +compulsory=true +description=Switch for use of snow-cover fraction in the calculation of sublimation and melting +sort-key=Panel-D03 +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::frac_snow_subl_melt +value-titles=Off,On +values=0,1 + +[namelist:jules_snow=graupel_options] +compulsory=true +description=Switch for treatment of graupel in the snow scheme +sort-key=Panel-D04 +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::graupel_options +value-titles=Include graupel as snowfall,Ignore graupel in the surface snowfall, + =Treat graupel separately +values=0,1,2 + +[namelist:jules_snow=i_snow_cond_parm] +compulsory=true +description=Identifier for parametrization of snow conductivity. +ns=namelist/JULES Science Settings/jules_snow/Other parameters +sort-key=Panel-D01d +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::i_snow_cond_parm +value-titles=Yen1981,Calonne2011 +values=0,1 + +[namelist:jules_snow=kland_numerator] +compulsory=false +description=Used in snow-ageing effect on albedo in the diagnostic albedo scheme. +ns=namelist/JULES Science Settings/jules_snow/Radiation parameters +sort-key=Panel-D07 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::kland_numerator + +[namelist:jules_snow=l_et_metamorph] +compulsory=true +description=Switch for the inclusion of equitemperature metamorphism. +ns=namelist/JULES Science Settings/jules_snow/Other parameters +sort-key=Panel-D14 +trigger=namelist:jules_snow=a_snow_et: .true.; + = namelist:jules_snow=b_snow_et: .true.; + = namelist:jules_snow=c_snow_et: .true.; + = namelist:jules_snow=rho_snow_et_crit: .true.; +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::l_et_metamorph + +[namelist:jules_snow=l_rho_snow_corr] +compulsory=false +description=Switch for using a correction to the density of the snow pack +help=Switch for using a correction to the density of the snow pack when nsnow=0 + =when relayering in the new snow scheme. + = + =Has no effect for nsmax < 1. +type=logical + +[namelist:jules_snow=l_snow_infilt] +compulsory=true +description=Switch to allow the infiltration of rain and canopy melting into the snowpack. +ns=namelist/JULES Science Settings/jules_snow/Other parameters +sort-key=Panel-D15 +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::l_snow_infilt + +[namelist:jules_snow=l_snow_nocan_hc] +compulsory=true +description=Switch to ignore heat capacity of the canopy above the snowpack on tiles where a canopy model is not used. +ns=namelist/JULES Science Settings/jules_snow/Other parameters +sort-key=Panel-D16 +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::l_snow_nocan_hc + +[namelist:jules_snow=l_snowdep_surf] +compulsory=true +description=Use equivalent canopy snow depth for surface calculations on tiles with a snow canopy +sort-key=Panel-D02 +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::l_snowdep_surf + +[namelist:jules_snow=lai_alb_lim_sn] +compulsory=true +description=Minimum LAI applied to plant canopies in the presence of snow to represent stems. +fail-if=len(this) != namelist:jules_surface_types=npft; # A value must be given for each PFT +length=: +ns=namelist/JULES Science Settings/jules_snow/Radiation parameters +sort-key=Panel-D10 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::lai_alb_lim_sn + +[namelist:jules_snow=maskd] +compulsory=false +description=Used in exponent of equation weighting snow-covered and snow-free albedo, sublimation and melting. +ns=namelist/JULES Science Settings/jules_snow/Radiation parameters +sort-key=Panel-D05 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::maskd + +[namelist:jules_snow=nsmax] +compulsory=true +description=Maximum number of layers in the snow pack when the mutilayer scheme is enabled. +range=0: +sort-key=Panel-D01 +trigger=namelist:jules_snow=dzsnow: this > 0; + =namelist:jules_snow=rho_snow_fresh: this > 0; + =namelist:jules_snow=snowliqcap: this > 0; + =namelist:jules_snow=i_relayer_opt: this > 0; + =namelist:jules_snow=i_grain_growth_opt: this > 0; + =namelist:jules_snow=i_snow_cond_parm: this > 0; + =namelist:jules_snow=l_snow_nocan_hc: this > 0; + =namelist:jules_snow=l_rho_snow_corr: this > 0; + =namelist:recon_science=l_regularize_landice_all_soil_pts: this == 0; + =namelist:recon_science=l_regularize_landice_all_lice_pts: this == 0; +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::nsmax + +[namelist:jules_snow=r0] +compulsory=false +description=Grain size for fresh snow (um) +ns=namelist/JULES Science Settings/jules_snow/Radiation parameters +sort-key=Panel-D06 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::r0 + +[namelist:jules_snow=rho_firn_albedo] +compulsory=true +description=Threshold density for the firn albedo parameterisation to replace that for snow +ns=namelist/JULES Science Settings/jules_snow/Radiation parameters +range=0.01:1000. +sort-key=Panel-D08 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::rho_firn_albedo + +[namelist:jules_snow=rho_snow_const] +compulsory=false +description=Constant density of lying snow (kg m-3), used on canopies and for very thin snow. +ns=namelist/JULES Science Settings/jules_snow/Other parameters +sort-key=Panel-D01b +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::rho_snow_const + +[namelist:jules_snow=rho_snow_et_crit] +compulsory=true +description=Constant in Parametrization of equitemperature metamorphism +ns=namelist/JULES Science Settings/jules_snow/Other parameters +sort-key=Panel-D14a +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::rho_snow_et_crit + +[namelist:jules_snow=rmax] +compulsory=false +description=Maximum snow grain size (um) +ns=namelist/JULES Science Settings/jules_snow/Radiation parameters +sort-key=Panel-D06 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::rmax + +[namelist:jules_snow=snow_ggr] +compulsory=false +description=Snow grain area growth rates (um2 s-1) +length=3 +ns=namelist/JULES Science Settings/jules_snow/Radiation parameters +sort-key=Panel-D06 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::snow_ggr + +[namelist:jules_snow=snow_hcap] +compulsory=false +description=Thermal capacity of lying snow (J K-1 m-3) +ns=namelist/JULES Science Settings/jules_snow/Other parameters +sort-key=Panel-D12 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::snow_hcap + +[namelist:jules_snow=snow_hcon] +compulsory=false +description=Default thermal conductivity of lying snow (W m-1 K-1). +ns=namelist/JULES Science Settings/jules_snow/Other parameters +sort-key=Panel-D11 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::snow_hcon + +[namelist:jules_snow=snowinterceptfact] +compulsory=false +description=Constant in relationship between mass of intercepted snow and snowfall rate +ns=namelist/JULES Science Settings/jules_snow/Other parameters +sort-key=Panel-D05 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::snowinterceptfact + +[namelist:jules_snow=snowliqcap] +compulsory=false +description=Liquid water holding capacity of lying snow, as a fraction of snow mass +ns=namelist/JULES Science Settings/jules_snow/Other parameters +sort-key=Panel-D01c +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::snowliqcap + +[namelist:jules_snow=snowloadlai] +description=Ratio of maximum canopy snow load to leaf area index (kg m-2) +ns=namelist/JULES Science Settings/jules_snow/Other parameters +sort-key=Panel-D05 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::snowloadlai + +[namelist:jules_snow=snowunloadfact] +description=Constant in relationship between canopy snow unloading and canopy snow melt rate +ns=namelist/JULES Science Settings/jules_snow/Other parameters +sort-key=Panel-D05 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::snowunloadfact + +[namelist:jules_snow=unload_rate_cnst] +compulsory=true +description=Constant term in background unloading rate of snow on canopies +fail-if=len(this) != namelist:jules_surface_types=npft; # A value must be given for each PFT +length=: +ns=namelist/JULES Science Settings/jules_snow/Other parameters +sort-key=Panel-D13 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_snow.nml.html#JULES_SNOW::unload_rate_cnst + +#[namelist:jules_soil] has moved to jules-shared/jules-soil +[namelist:jules_soil=confrac] +compulsory=true +description=Fraction of the gridbox assumed to be covered by convective precipitation +range=0.0:1.0 +sort-key=Panel-E10 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::confrac + +[namelist:jules_soil=cs_min] +compulsory=true +description=Minimum allowed soil carbon (kg m-2) +range=0.000001: +sort-key=Panel-E07 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::cs_min + +[namelist:jules_soil=dzdeep] +compulsory=true +description=Thickness of bedrock (m) +range=0.01: +sort-key=Panel-E06d +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::dzdeep + +[namelist:jules_soil=dzsoil_elev] +compulsory=true +description=Depth (m) of tiled bedrock subsurfaces under elevated tiles. +fail-if=this <= 0 ; # Must have positive value +range=0.01: +sort-key=Panel-E12 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::dzsoil_elev + +[namelist:jules_soil=dzsoil_io] +compulsory=true +description=Soil layer depths (m), starting with the uppermost layer +fail-if=len(this) != namelist:jules_soil=sm_levels; # Must have a value for each soil level +length=: +sort-key=Panel-E11 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::dzsoil_io + +[namelist:jules_soil=hcapdeep] +compulsory=true +description=Heat capacity of bedrock (J K-1 m-3) +range=100000:8000000 +sort-key=Panel-E06b +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::hcapdeep + +[namelist:jules_soil=hcondeep] +compulsory=true +description=Thermal conductivity of bedrock (W m-2 K-1) +range=0.4:12.0 +sort-key=Panel-E06c +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::hcondeep + +[namelist:jules_soil=l_bedrock] +compulsory=true +description=Include bedrock below soil column with thermal diffusion; does not include hydrology + =NOT AVAILABLE TO UM +sort-key=Panel-E06 +trigger=namelist:jules_soil=ns_deep: .true.; + = namelist:jules_soil=hcapdeep: .true.; + = namelist:jules_soil=hcondeep: .true.; + = namelist:jules_soil=dzdeep: .true.; +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::l_bedrock + +[namelist:jules_soil=l_holdwater] +compulsory=true +description=Stops water being pushed out of the soil column when a single layer is supersaturated +sort-key=Panel-E13 +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::l_holdwater +value-titles=Bug fixed,Original +values=.true.,.false. +widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget + +[namelist:jules_soil=l_tile_soil] +compulsory=true +description=Switch to set the number of soil tiles to equal the number of surface tiles +fail-if=this == '.true.' and namelist:jules_model_environment=l_jules_parent == 1; # Not available in the UM +sort-key=Panel-E14 +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::l_tile_soil + +[namelist:jules_soil=ns_deep] +compulsory=true +description=Number of bedrock layers +range=1: +sort-key=Panel-E06a +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::ns_deep + +[namelist:jules_soil=sm_levels] +compulsory=true +description=Number of soil layers +range=1: +sort-key=Panel-E01 +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::sm_levels + +[namelist:jules_soil=soilhc_method] +compulsory=true +description=Choice of soil thermal conductivity model +sort-key=Panel-E05 +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::soilhc_method +value-titles=Cox et al (1999),Simplified Johansen (1975),Chadburn et al (2015) +values=1,2,3 +widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget + +[namelist:jules_soil=zsmc] +compulsory=true +description=Depth of layer over which soil moisture diagnostic is averaged (m) +range=0.01: +sort-key=Panel-E08 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::zsmc + +[namelist:jules_soil=zst] +compulsory=true +description=Depth of layer over which soil temperature diagnostic is averaged (m) +range=0.01: +sort-key=Panel-E09 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_soil.nml.html#JULES_SOIL::zst + +#[namelist:jules_soil_biogeochem] has moved to jules-shared/jules-soil-biogeochem +[namelist:jules_soil_biogeochem=soil_bgc_model] +fail-if=this == 1 and namelist:jules_vegetation=l_triffid == '.true.'; # Can't use 1-pool with TRIFFID + =this == 2 and namelist:jules_vegetation=l_triffid != '.true.'; # Can't use 4-pool soil C without TRIFFID +trigger=namelist:jules_soil_biogeochem=l_q10: 1, 2; + =namelist:jules_soil_biogeochem=q10_soil: 1, 2; + =namelist:jules_soil_biogeochem=l_soil_resp_lev2: 1, 2; + =namelist:jules_soil_biogeochem=kaps: 1; + =namelist:jules_soil_biogeochem=kaps_4pool: 2; + =namelist:jules_soil_biogeochem=sorp: 2; + =namelist:jules_soil_biogeochem=n_inorg_turnover: 2; + =namelist:jules_soil_biogeochem=bio_hum_cn: 2; + =namelist:jules_soil_biogeochem=diff_n_pft: 2; + =namelist:jules_soil_biogeochem=tau_lit: 2; + =namelist:jules_soil_biogeochem=tau_resp: 2; +value-titles=Single pool model,4-pool model +values=1,2 + +#[namelist:jules_surface] has moved to jules-shared/jules-surface +[namelist:jules_surface=i_aggregate_opt] +compulsory=true +description=Method of aggregating tiled properties +sort-key=Panel-F02a +url=https://metoffice.github.io/jules/latest/namelists/jules_surface.nml.html#JULES_SURFACE::i_aggregate_opt +value-titles=Original option,Separate aggregation +values=0,1 + +[namelist:jules_surface=l_aggregate] +compulsory=true +description=Use aggregate surface scheme +sort-key=Panel-F02 +trigger=namelist:jules_surface=i_aggregate_opt: .true.; + =namelist:recon_science=l_canopy_snow_throughfall: .false.; + =namelist:jules_elevate=surf_hgt_io: .false.; + =namelist:jules_elevate=l_elev_absolute_height: .false.; +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_surface.nml.html#JULES_SURFACE::l_aggregate + +[namelist:jules_surface=l_elev_land_ice] +# This trigger list is different, but may just be an oversight. Leave for now. +trigger=namelist:jules_soil=dzsoil_elev: .true.; + =namelist:jules_surface_types=elev_ice: .true.; + =namelist:jules_surface_types=elev_rock: .true.; + +[namelist:jules_surface=l_vary_z0m_soil] +help=Allows the bare soil momentum roughness length (z0(m)) to + =vary. This field needs to be input/reconfigured in as an + =ancillary field in the soil parameters file as STASH item 97. + +[namelist:jules_surface=srf_ex_cnv_gust] +value-titles=Off,On +values=0,1 + +#[namelist:jules_surface_types] has moved to jules-shared/jules-surface-types +[namelist:jules_surface_types=brd_leaf_dec] +description=Pseudo level of broadleaf (decidous) PFT +fail-if=this > namelist:jules_surface_types=npft; # Pseudo level must be less than or equal to npft +range=1: +sort-key=Panel-A1b +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_surface_types.nml.html#JULES_SURFACE_TYPES::brd_leaf_dec + +[namelist:jules_surface_types=brd_leaf_eg_temp] +description=Pseudo level of broadleaf (evergreen temperate) PFT +fail-if=this > namelist:jules_surface_types=npft; # Pseudo level must be less than or equal to npft +range=1: +sort-key=Panel-A1d +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_surface_types.nml.html#JULES_SURFACE_TYPES::brd_leaf_eg_temp + +[namelist:jules_surface_types=brd_leaf_eg_trop] +description=Pseudo level of broadleaf (evergreen tropical) PFT +fail-if=this > namelist:jules_surface_types=npft; # Pseudo level must be less than or equal to npft +help=Must have value <= npft +range=1: +sort-key=Panel-A1c +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_surface_types.nml.html#JULES_SURFACE_TYPES::brd_leaf_eg_trop + +[namelist:jules_surface_types=c3_crop] +description=Pseudo level of C3 crop PFT +fail-if=this > namelist:jules_surface_types=npft; # Pseudo level must be less than or equal to npft +range=1: +sort-key=Panel-A3b +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_surface_types.nml.html#JULES_SURFACE_TYPES::c3_crop + +[namelist:jules_surface_types=c3_irrig] +compulsory=true +description=Pseudo level of C3 irrig PFT +fail-if=this > namelist:jules_surface_types=npft; # Pseudo level must be less than or equal to npft +range=1: +sort-key=Panel-A3d +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_surface_types.nml.html#JULES_SURFACE_TYPES::c3_irrig + +[namelist:jules_surface_types=c3_pasture] +description=Pseudo level of C3 pasture PFT +fail-if=this > namelist:jules_surface_types=npft; # Pseudo level must be less than or equal to npft +range=1: +sort-key=Panel-A3c +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_surface_types.nml.html#JULES_SURFACE_TYPES::c3_pasture + +[namelist:jules_surface_types=c4_crop] +description=Pseudo level of C4 crop PFT +fail-if=this > namelist:jules_surface_types=npft; # Pseudo level must be less than or equal to npft +range=1: +sort-key=Panel-A4b +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_surface_types.nml.html#JULES_SURFACE_TYPES::c4_crop + +[namelist:jules_surface_types=c4_irrig] +compulsory=true +description=Pseudo level of C4 irrig PFT +fail-if=this > namelist:jules_surface_types=npft; # Pseudo level must be less than or equal to npft +range=1: +sort-key=Panel-A4d +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_surface_types.nml.html#JULES_SURFACE_TYPES::c4_irrig + +[namelist:jules_surface_types=c4_pasture] +description=Pseudo level of C4 pasture PFT +fail-if=this > namelist:jules_surface_types=npft; # Pseudo level must be less than or equal to npft +range=1: +sort-key=Panel-A4c +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_surface_types.nml.html#JULES_SURFACE_TYPES::c4_pasture + +[namelist:jules_surface_types=elev_ice] +compulsory=true +description=Pseudo levels of elevated ice surface type (Glacier/Icesheet model) +fail-if=any(this > namelist:jules_surface_types=npft + namelist:jules_surface_types=nnvg); # Pseudo level must be less than or equal to npft+nnvg + =any(this <= namelist:jules_surface_types=npft and this != -1); # PFTs must be grouped together first with non-vegetated tiles following +length=: +range=-1,1: +sort-key=Panel-A9b +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_surface_types.nml.html#JULES_SURFACE_TYPES::elev_ice + +[namelist:jules_surface_types=elev_rock] +compulsory=true +description=Pseudo levels of elevated bedrock surface type (Glacier/Icesheet model) +fail-if=any(this > namelist:jules_surface_types=npft + namelist:jules_surface_types=nnvg); # Pseudo level must be less than or equal to npft+nnvg + =any(this <= namelist:jules_surface_types=npft and this != -1); # PFTs must be grouped together first with non-vegetated tiles following +length=: +range=-1,1: +sort-key=Panel-A9c +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_surface_types.nml.html#JULES_SURFACE_TYPES::elev_rock + +[namelist:jules_surface_types=ncpft] +description=Number of crop plant functional types to be modelled + =NOT AVAILABLE TO THE UM +fail-if=this > namelist:jules_surface_types=npft; # Number of crop PFTs must be less than total number of PFTs + =this > 0 and namelist:jules_model_environment=l_jules_parent == 1; # This is not available to the UM. Should be zero. +range=0: +sort-key=Panel-A0c +trigger=namelist:jules_vegetation=l_prescsow: this > 0; +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_surface_types.nml.html#JULES_SURFACE_TYPES::ncpft + +[namelist:jules_surface_types=ndl_leaf_dec] +description=Pseudo level of needleleaf (deciduous) PFT +fail-if=this > namelist:jules_surface_types=npft; # Pseudo level must be less than or equal to npft +range=1: +sort-key=Panel-A2b +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_surface_types.nml.html#JULES_SURFACE_TYPES::ndl_leaf_dec + +[namelist:jules_surface_types=ndl_leaf_eg] +description=Pseudo level of needleleaf (evergreen) PFT +fail-if=this > namelist:jules_surface_types=npft; # Pseudo level must be less than or equal to npft +range=1: +sort-key=Panel-A2c +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_surface_types.nml.html#JULES_SURFACE_TYPES::ndl_leaf_eg + +[namelist:jules_surface_types=nnvg] +help=Currently nnvg has a minumum value of 2 as soil and ice must be specified. + =See "Web Help" for general help. For UM specific help concerning pslist see + =namelist:jules_surface_types=npft +range=2: + +[namelist:jules_surface_types=npft] +help=Care has to be taken when changing the npft and nnvg values to ensure that + =they are consistent with the requested diagnostic output. The user should + =ammend if appropriate the pslist, which defines the diagnostic output on + =pseudo levels, in each domain profile (e.g. DTILE, DPFT, lt19, TILES). + =The pslist should contain pseudo level numbers, not tile ID numbers and + =can contain a subset of the available pseudo levels. + +[namelist:jules_surface_types=shrub_dec] +description=Pseudo level of shrub (deciduous) PFT +fail-if=this > namelist:jules_surface_types=npft; # Pseudo level must be less than or equal to npft +range=1: +sort-key=Panel-A5b +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_surface_types.nml.html#JULES_SURFACE_TYPES::shrub_dec + +[namelist:jules_surface_types=shrub_eg] +description=Pseudo level of shrub (evergreen) PFT +fail-if=this > namelist:jules_surface_types=npft; # Pseudo level must be less than or equal to npft +range=1: +sort-key=Panel-A5c +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_surface_types.nml.html#JULES_SURFACE_TYPES::shrub_eg + +[namelist:jules_surface_types=tile_map_ids] +description=Tile mapping array from input to output dump surface type configuration + =NOT AVAILABLE TO STANDALONE +fail-if=len(this) != namelist:jules_surface_types=npft + namelist:jules_surface_types=nnvg +help=Mapping array, containing tile ID numbers, used by the reconfiguration to determine which + =tile in the input dump should be used to initialise each tile in the output dump. The + =reconfiguration determines the corresponding pseudo level map (tile_map_pslevs) containing + =the pseudo levels where the tile types from tile_map_ids reside in the input dump. + =Allows new tiles added (e.g. urban_canyon and urban_roof) to be initialised from existing + =tiles (e.g. urban) or an old dump with the incorrect labelling to be used. Depends on the + =input dump so if an option file is used to change the input dump, tile_map_ids will also + =need to be ammended. +length=: +range=1: +sort-key=Panel-A0d +type=integer + +[namelist:jules_surface_types=usr_type] +description=Pseudo level of user surface types +fail-if=any(this > namelist:jules_surface_types=npft + namelist:jules_surface_types=nnvg); # Pseudo level must be less than or equal to npft+nnvg +help=Must have value less than or equal to ntype +length=: +range=1: +sort-key=Panel-A0e +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_surface_types.nml.html#JULES_SURFACE_TYPES::usr_type + +#[namelist:jules_temp_fixes] has moved to jules-shared/jules-temp-fixes +[namelist:jules_temp_fixes=l_fix_drydep_so2_water] +fail-if=( this != namelist:temp_fixes=l_fix_drydep_so2_water ) ; # For UM_JULES applications, code uses setting of equivalent deposition switch in UM temp_fixes namelist +help=When calculating the dry deposition of SO2, the surface resistance of + =water was wrongly set to 148.9 s/m. This is used in UKESM1.0, and so + =needs to be maintained. Setting this logical to true, will set the + =surface resistance of water for the dry deposition of SO2 to 10 s/m + =instead. + +[namelist:jules_temp_fixes=l_fix_improve_drydep] +fail-if=( this != namelist:temp_fixes=l_fix_improve_drydep ) ; # For UM_JULES applications, code uses setting of equivalent deposition switch in UM temp_fixes namelist +help=Non zero dry deposition velocities are set for HCl, HOCl, HBr, HOBr, + = H2SO4, MeOH and Sec_Org. + = + = Dry deposition velocities for 9 tiles are made consistant with those of + = 13 / 17 / 27 tiles. + +[namelist:jules_temp_fixes=l_fix_ukca_h2dd_x] +fail-if=( this != namelist:temp_fixes=l_fix_ukca_h2dd_x ) ; # For UM_JULES applications, code uses setting of equivalent deposition switch in UM temp_fixes namelist +help=When set to true, this corrects a bug in the element of + = h2dd_c and h2dd_m used for the calculation of H2 dry deposition to + = shrub and bare soil. + +[namelist:jules_triffid] +compulsory=true +description=Most parameters in this section are required, even if they are not used + =However, they can be left at their default value + = + =Click on names for more details + = +ns=namelist/JULES Science Settings/jules_triffid +sort-key=10 +title=TRIFFID PFT parameters +url=https://metoffice.github.io/jules/latest/namelists/triffid_params.nml.html#namelist-JULES_TRIFFID + +[namelist:jules_triffid=ag_expand_io] +compulsory=true +description=Type of agricultural expansion employed when l_ag_expand=T. + =0 means PFTs grow into the increased agricultural area naturally (default) + =1 means new agricultural area is automatically filled with the selected PFT. +fail-if=len(this) != namelist:jules_surface_types=npft +length=: +url=https://metoffice.github.io/jules/latest/namelists/triffid_params.nml.html#JULES_TRIFFID::ag_expand_io +values=0,1 + +[namelist:jules_triffid=crop_io] +description=Flag indicating whether the PFT is crop, pasture, bioenergy/forestry, or natural. +fail-if=any(this > 1) and (namelist:jules_vegetation=l_trif_crop == '.false.') or (len(this) != namelist:jules_surface_types=npft) +length=: +url=https://metoffice.github.io/jules/latest/namelists/triffid_params.nml.html#JULES_TRIFFID::crop_io +value-titles=Natural,Crop,Pasture,Bioenergy/Forestry +values=0,1,2,3 + +[namelist:jules_triffid=g_area_io] +description=Disturbance rate (/360days) +fail-if=len(this) != namelist:jules_surface_types=npft +length=: +type=real +url=https://metoffice.github.io/jules/latest/namelists/triffid_params.nml.html#JULES_TRIFFID::g_area_io + +[namelist:jules_triffid=g_grow_io] +description=Rate of leaf growth (/360days) +fail-if=len(this) != namelist:jules_surface_types=npft +length=: +type=real +url=https://metoffice.github.io/jules/latest/namelists/triffid_params.nml.html#JULES_TRIFFID::g_grow_io + +[namelist:jules_triffid=g_root_io] +description=Turnover rate for root biomass (/360days) +fail-if=len(this) != namelist:jules_surface_types=npft +length=: +type=real +url=https://metoffice.github.io/jules/latest/namelists/triffid_params.nml.html#JULES_TRIFFID::g_root_io + +[namelist:jules_triffid=g_wood_io] +description=Turnover rate for woody biomass (/360days) +fail-if=len(this) != namelist:jules_surface_types=npft +length=: +type=real +url=https://metoffice.github.io/jules/latest/namelists/triffid_params.nml.html#JULES_TRIFFID::g_wood_io + +[namelist:jules_triffid=harvest_freq_io] +compulsory=true +description=Frequency of harvest of crops. +fail-if=len(this) != namelist:jules_surface_types=npft +length=: +sort-key=01a +url=https://metoffice.github.io/jules/latest/namelists/triffid_params.nml.html#JULES_TRIFFID::harvest_freq_io + +[namelist:jules_triffid=harvest_ht_io] +compulsory=true +description=Height to which the PFT is reduced at each harvest cycle. +fail-if=len(this) != namelist:jules_surface_types=npft +length=: +sort-key=01a +type=real +url=https://metoffice.github.io/jules/latest/namelists/triffid_params.nml.html#JULES_TRIFFID::harvest_ht_io + +[namelist:jules_triffid=harvest_type_io] +compulsory=true +description=Type of harvesting, set to 0 for natural PFTs. + =0: No harvesting (default) + =1: Continuous harvesting from litter, as historically used in TRIFFID crop scheme + =2: Periodic harvesting with harvest frequency set to harvest_freq_io. +fail-if=len(this) != namelist:jules_surface_types=npft +length=: +sort-key=01 +trigger=namelist:jules_triffid=harvest_freq_io: any(this == 2); + =namelist:jules_triffid=harvest_ht_io: any(this == 2); +url=https://metoffice.github.io/jules/latest/namelists/triffid_params.nml.html#JULES_TRIFFID::harvest_type_io +values=0,1,2 + +[namelist:jules_triffid=lai_max_io] +description=Maximum LAI +fail-if=len(this) != namelist:jules_surface_types=npft +length=: +type=real +url=https://metoffice.github.io/jules/latest/namelists/triffid_params.nml.html#JULES_TRIFFID::lai_max_io + +[namelist:jules_triffid=lai_min_io] +description=Minimum LAI +fail-if=len(this) != namelist:jules_surface_types=npft +length=: +type=real +url=https://metoffice.github.io/jules/latest/namelists/triffid_params.nml.html#JULES_TRIFFID::lai_min_io + +[namelist:jules_triffid=retran_l_io] +description=Leaf N retranslocation +fail-if=len(this) != namelist:jules_surface_types=npft +length=: +type=real +url=https://metoffice.github.io/jules/latest/namelists/triffid_params.nml.htm#JULES_TRIFFID::retran_l_io + +[namelist:jules_triffid=retran_r_io] +description=Root N retranslocation +fail-if=len(this) != namelist:jules_surface_types=npft +length=: +type=real +url=https://metoffice.github.io/jules/latest/namelists/triffid_params.nml.htm#JULES_TRIFFID::retran_r_io + +#[namelist:jules_urban] has moved to jules-shared/jules-urban +[namelist:jules_urban=l_moruses_macdonald] +compulsory=true +description=Use MacDonald et al. (1998) to calculate effective roughness length and displacement height +fail-if=namelist:jules_urban=l_urban_empirical == '.true.' and this == '.false.'; # Must be true if l_urban_empirical is true +type=logical +url=https://metoffice.github.io/jules/latest/namelists/urban.nml.html#JULES_URBAN::l_moruses_macdonald + +[namelist:jules_urban=l_urban_empirical] +compulsory=true +description=Use empirical relationships for urban geometry + =NOT AVAILABLE TO UM +type=logical +url=https://metoffice.github.io/jules/latest/namelists/urban.nml.html#JULES_URBAN::l_urban_empirical + +#[namelist:jules_vegetation] has moved to jules-shared/jules-vegetation +[namelist:jules_vegetation=act_j_coef] +compulsory=true +description=Coefficients for the activation energy of Jmax. +length=3 +sort-key=Panel-I20b1 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::act_j_coef + +[namelist:jules_vegetation=act_v_coef] +compulsory=true +description=Coefficients for the activation energy of Vcmax. +length=3 +sort-key=Panel-I20b2 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::act_v_coef + +[namelist:jules_vegetation=c1_usuh] +compulsory=true +description=Ratio of friction velocity to wind speed at the top of a dense canopy +range=0: +sort-key=Panel-I09b +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::c1_usuh + +[namelist:jules_vegetation=c2_usuh] +compulsory=true +description=Ratio of friction velocity to wind speed at the surface of the substrate under the canopy +range=0: +sort-key=Panel-I09b +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::c2_usuh + +[namelist:jules_vegetation=c3_usuh] +compulsory=true +description=Used in the exponent of the equation weighting dense and sparse vegetation + = to get u*/U(h) in neutral conditions +range=0: +sort-key=Panel-I09b +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::c3_usuh + +[namelist:jules_vegetation=can_model] +compulsory=true +description=Choice of canopy model for vegetation +sort-key=Panel-I12 +trigger=namelist:jules_snow=cansnowpft: 4; + =namelist:jules_snow=snowinterceptfact: 4; + =namelist:jules_snow=snowloadlai: 4; + =namelist:jules_snow=snowunloadfact: 4; + =namelist:jules_surface=hleaf: 3,4; + =namelist:jules_surface=hwood: 3,4; +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::can_model +value-titles=No distinct canopy,Radiative canopy with no heat capacity,Radiative canopy with heat capacity,As 3 but with snow beneath canopy +values=1,2,3,4 +#warn-if=this == 3; # can_model = 3 is deprecated, with 4 preferred (cannot be added to UM metadata as breaks Rose stem as mutually exclusive of l_aggregate). +widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget + +[namelist:jules_vegetation=cd_leaf] +compulsory=true +description=Leaf level drag coefficient +range=0:1 +sort-key=Panel-I09b +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::cd_leaf + +[namelist:jules_vegetation=dsj_coef] +compulsory=true +description=Coefficients for the rate of change with leaf temperature of the Jmax entropy factor. +length=3 +sort-key=Panel-I20a1 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::dsj_coef + +[namelist:jules_vegetation=dsv_coef] +compulsory=true +description=Coefficients for the rate of change with leaf temperature of the Vcmax entropy factor. +length=3 +sort-key=Panel-I20a1 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::dsv_coef + +[namelist:jules_vegetation=frac_min] +compulsory=true +description=Minimum fraction that a PFT is allowed to cover if TRIFFID is used +sort-key=Panel-I02b +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::frac_min + +[namelist:jules_vegetation=frac_seed] +compulsory=true +description=Seed fraction for TRIFFID +sort-key=Panel-I02b +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::frac_seed + +[namelist:jules_vegetation=fsmc_shape] +compulsory=true +description=Shape of soil moisture stress on vegetation function +fail-if=namelist:jules_vegetation=l_use_pft_psi == ".false." and this == 1; # 1. Piece-wise linear in soil potential. Currently only allowed when const_z = T and l_use_pft_psi = T. + =this == 1 and namelist:jules_model_environment=l_jules_parent == 1; # Piece-wise linear in soil potential is not currently available to the UM. Should be 0 (volumetric soil moisture). +sort-key=Panel-I17 +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::fsmc_shape +value-titles=Piece-wise linear in volumetric soil moisture +values=0 +widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget + +[namelist:jules_vegetation=ignition_method] +compulsory=true +description=The method to use for ignitions +sort-key=Panel-I16a +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::ignition_method +value-titles=(1) constant human and natural ignition sources, + =(2) constant human varying natural ignition sources, + =(3) varying human and natural ignition sources +values=1,2,3 + +[namelist:jules_vegetation=ilayers] +compulsory=true +description=Number of layers for canopy radiation model +range=1:100 +sort-key=Panel-I13a +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::ilayers + +[namelist:jules_vegetation=jv25_coef] +compulsory=true +description=Coefficients for the ratio Jmax:Vcmax at 25 degC. +length=3 +sort-key=Panel-I20a1 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::jv25_coef + +[namelist:jules_vegetation=l_ag_expand] +compulsory=true +description=Allow assisted expansion of agricultural crop areas. + =The type of expansion is set with ag_expand_io. +fail-if=this == '.true.' and namelist:jules_vegetation=l_trif_biocrop == '.false.'; +sort-key=Panel-I02c1a1 +trigger=namelist:jules_triffid=ag_expand_io: .true.; +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::l_ag_expand + +[namelist:jules_vegetation=l_croprotate] +compulsory=true +description=Switch to allow double cropping in JULES + =NOT AVAILABLE TO UM +fail-if=namelist:jules_vegetation=l_prescsow == '.false.' and this == '.true.'; # l_prescsow must be TRUE if l_croprotate = TRUE +sort-key=Panel-I14 +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::l_croprotate + +[namelist:jules_vegetation=l_gleaf_fix] +compulsory=true +description=Use fix for accumulating g_leaf_phen_acc between calls to TRIFFID + =Standalone only bug fix. +sort-key=Panel-I15 +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::l_gleaf_fix + +[namelist:jules_vegetation=l_ht_compete] +compulsory=true +description=Switch for using height based competition in TRIFFID +sort-key=Panel-I02c +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::l_ht_compete + +[namelist:jules_vegetation=l_landuse] +compulsory=true +description=Switch for using landuse change in conjunction with TRIFFID +sort-key=Panel-I02c +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::l_landuse + +[namelist:jules_vegetation=l_leaf_n_resp_fix] +compulsory=true +description=Switch to use correct forms for canopy-average leaf nitrogen + =(for plant maintenance resp and N demand). + =This affects can_rad_mod = 1, 4 and 5, not 6 (which is correct). +sort-key=Panel-I03 +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::l_leaf_n_resp_fix + +[namelist:jules_vegetation=l_nitrogen] +compulsory=true +description=Use the TRIFFID Nitrogen limitation scheme for interactive carbon cycle +sort-key=Panel-I02c +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::l_nitrogen + +[namelist:jules_vegetation=l_nrun_mid_trif] +compulsory=true +description=Start an NRUN mid way through a TRIFFID calling period + =ONLY APPLICABLE TO UM +sort-key=Panel-I02c +type=logical + +[namelist:jules_vegetation=l_phenol] +compulsory=true +description=Include leaf phenology +sort-key=Panel-I01 +trigger=namelist:jules_vegetation=phenol_period: .true.; +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::l_phenol + +[namelist:jules_vegetation=l_prescsow] +compulsory=true +description=Use prescribed sowing dates for crops + =NOT AVAILABLE TO THE UM +sort-key=Panel-I14 +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::l_prescsow + +[namelist:jules_vegetation=l_red] +compulsory=true +description=Switch for using the Robust Ecosystem Demography (RED). + = RED is not available to the UM. +fail-if=this == '.true.' and namelist:jules_model_environment=l_jules_parent == 1; # RED is not available to the UM. + =this == '.true.' and namelist:jules_surface_types=ncpft > 0; +sort-key=Panel-I02d +trigger=namelist:jules_red: .true.; + =namelist:jules_red=alpha_recrt: .true.; + =namelist:jules_red=crwn_area0: .true.; + =namelist:jules_red=dom_order: .true.; + =namelist:jules_red=height0: .true.; + =namelist:jules_red=lai_bal0: .true.; + =namelist:jules_red=mass0: .true.; + =namelist:jules_red=massi: .true.; + =namelist:jules_red=mclass: .true.; + =namelist:jules_red=mort_base: .true.; + =namelist:jules_red=phi_a: .true.; + =namelist:jules_red=phi_g: .true.; + =namelist:jules_red=phi_h: .true.; + =namelist:jules_red=phi_l: .true.; +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::l_red + +[namelist:jules_vegetation=l_rsl_scalar] +compulsory=true +description=Switch for using roughness sublayer correction scheme in scalar + = variables. This is triggered if vegetative drag scheme is used. +sort-key=Panel-I09a +trigger=namelist:jules_vegetation=stanton_leaf: .true.; +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::l_rsl_scalar + +[namelist:jules_vegetation=l_scale_resp_pm] +compulsory=true +description=Scale whole plant maintenance respiration by the soil moisture + =stress factor, instead of only scaling leaf respiration. +sort-key=Panel-I18 +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::l_scale_resp_pm + +[namelist:jules_vegetation=l_spec_veg_z0] +trigger=namelist:jules_pftparm=dz0v_dh_io: .false.; + =namelist:jules_pftparm=z0v_io: .true.; + =namelist:run_stochastic=z0v_rp: .true.; + =namelist:run_stochastic=z0v_rp_min: .true.; + =namelist:run_stochastic=z0v_rp_max: .true.; + +[namelist:jules_vegetation=l_stem_resp_fix] +compulsory=true +description=Switch for bug fix for stem respiration to use balanced LAI to + =derive respiring stem mass. +sort-key=Panel-I06 +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::l_stem_resp_fix + +[namelist:jules_vegetation=l_trait_phys] +compulsory=true +description=Switch for using trait-based physiology. +sort-key=Panel-I07 +trigger=namelist:jules_pftparm=hw_sw_io: .true.; + =namelist:jules_pftparm=lma_io: .true.; + =namelist:jules_pftparm=nmass_io: .true.; + =namelist:jules_pftparm=nr_io: .true.; + =namelist:jules_pftparm=nsw_io: .true.; + =namelist:jules_pftparm=vint_io: .true.; + =namelist:jules_pftparm=vsl_io: .true.; + =namelist:jules_pftparm=neff_io: .false.; + =namelist:jules_pftparm=nl0_io: .false.; + =namelist:jules_pftparm=sigl_io: .false.; +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::l_trait_phys + +[namelist:jules_vegetation=l_trif_biocrop] +compulsory=true +description=Allow periodic harvesting of biocrops +fail-if=this == '.true.' and namelist:jules_vegetation=l_trif_crop == '.false.'; +sort-key=Panel-I02c1a +trigger=namelist:jules_triffid=harvest_type_io: .true.; + =namelist:jules_vegetation=l_ag_expand: .true.; +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::l_trif_biocrop + +[namelist:jules_vegetation=l_trif_crop] +compulsory=true +description=Use agricultural PFTs +fail-if=this == '.true.' and namelist:jules_vegetation=l_trif_eq == '.true.'; +sort-key=Panel-I02c1 +trigger=namelist:jules_vegetation=l_trif_biocrop: .true.; +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::l_trif_crop + +[namelist:jules_vegetation=l_trif_eq] +compulsory=true +description=Run TRIFFID in equilibrium mode +sort-key=Panel-I02c +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::l_trif_eq + +[namelist:jules_vegetation=l_trif_init_accum] +compulsory=true +description=Start a NRUN resetting accumulated Carbon fluxes to zero + =ONLY APPLICABLE TO THE UM +fail-if=this == '.true.' and namelist:jules_model_environment=l_jules_parent == 0; # This is only applicable to the UM so should be false in standalone +help=TRUE: Reset accumulated npp and respiration fluxes to 0. in an NRUN. This is the default + =FALSE: Accumulated fluxes are read from the dump. This is required for a NRUN-NRUN simulation to + =be bit comparable to a NRUN-CRUN experiment + =In a CRUN accumulated fluxes are always read from the dump +sort-key=Panel-I02c +type=logical + +[namelist:jules_vegetation=l_triffid] +compulsory=true +description=Use the TRIFFID dynamic vegetation model, except for competition +sort-key=Panel-I02 +trigger=namelist:jules_vegetation=l_nrun_mid_trif: .true.; + =namelist:jules_vegetation=l_trif_eq: .true.; + =namelist:jules_vegetation=triffid_period: .true.; + =namelist:jules_vegetation=l_veg_compete: .true.; + =namelist:jules_vegetation=l_landuse: .true.; + =namelist:jules_vegetation=l_ht_compete: .true.; + =namelist:jules_vegetation=l_nitrogen: .true.; + =namelist:jules_vegetation=l_red: .true.; + =namelist:jules_vegetation=l_trif_crop: .true.; + =namelist:jules_vegetation=l_trif_fire: .true.; + =namelist:jules_vegetation=l_trif_init_accum: .true.; + =namelist:jules_vegetation=frac_min: .true.; + =namelist:jules_vegetation=frac_seed: .true.; + =namelist:jules_vegetation=pow: .true.; + =namelist:jules_triffid: .true.; +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::l_triffid + +[namelist:jules_vegetation=l_veg_compete] +compulsory=true +description=Use competing vegetation +sort-key=Panel-I02c +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::l_veg_compete + +[namelist:jules_vegetation=l_vegcan_soilfx] +compulsory=true +description=Allow for conduction in the soil below the vegetative canopy. +sort-key=Panel-I08 +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::l_vegcan_soilfx + +[namelist:jules_vegetation=l_vegdrag_pft] +compulsory=true +description=Switch for using vegetation canopy drag scheme for each PFT +fail-if=len(this) != namelist:jules_surface_types=npft; # A value must be given for each PFT +length=: +sort-key=Panel-I09 +trigger=namelist:jules_vegetation=c1_usuh: any(this == '.true.'); + = namelist:jules_vegetation=c2_usuh: any(this == '.true.'); + = namelist:jules_vegetation=c3_usuh: any(this == '.true.'); + = namelist:jules_vegetation=cd_leaf: any(this == '.true.'); + = namelist:jules_vegetation=l_rsl_scalar: any(this == '.true.'); +type=logical +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::l_vegdrag_pft + +[namelist:jules_vegetation=n_alloc_jmax] +compulsory=true +description=Constant relating nitrogen allocation to Jmax +sort-key=Panel-I20c1 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::n_alloc_jmax + +[namelist:jules_vegetation=n_alloc_vcmax] +compulsory=true +description=Constant relating nitrogen allocation to Vcmax +sort-key=Panel-I20c1 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::n_alloc_vcmax + +[namelist:jules_vegetation=n_day_photo_acclim] +compulsory=true +description=Time constant for moving average of temperature (days) +sort-key=Panel-I20a1 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::n_day_photo_acclim + +[namelist:jules_vegetation=phenol_period] +compulsory=true +description=Update frequency for leaf phenology (days) +range=1:365 +sort-key=Panel-I01a +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::phenol_period + +[namelist:jules_vegetation=photo_acclim_model] +compulsory=true +description=Choice of model for acclimation of photosynthesis +sort-key=Panel-I20a +trigger=namelist:jules_pftparm=ds_jmax_io: 0; + =namelist:jules_pftparm=ds_vcmax_io: 0; + =namelist:jules_vegetation=dsj_coef: this > 0; + =namelist:jules_vegetation=dsv_coef: this > 0; + =namelist:jules_vegetation=jv25_coef: this > 0; + =namelist:jules_vegetation=n_day_photo_acclim: 2, 3; +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::photo_acclim_model +value-titles=No acclimation, Thermal adaptation, Thermal acclimation, Thermal adaptation and acclimation +values=0,1,2,3 +widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget + +[namelist:jules_vegetation=photo_act_model] +compulsory=true +description=Choice of model for the activation energies of Jmax and Vcmax. +fail-if=namelist:jules_vegetation=photo_acclim_model == 0 and this != 1; +sort-key=Panel-I20b +trigger=namelist:jules_pftparm=act_jmax_io: 1; + =namelist:jules_pftparm=act_vcmax_io: 1; + =namelist:jules_vegetation=act_j_coef: 2; + =namelist:jules_vegetation=act_v_coef: 2; +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::photo_act_model +value-titles=Vary by PFT only, Vary by acclimation only +values=1,2 +widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget + +[namelist:jules_vegetation=photo_jv_model] +compulsory=true +description=Choice of model for the variation of J25:V25 +fail-if=namelist:jules_vegetation=photo_acclim_model == 0 and this != 1; +sort-key=Panel-I20c +trigger=namelist:jules_vegetation=n_alloc_jmax: 2; + =namelist:jules_vegetation=n_alloc_vcmax: 2; +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::photo_jv_model +value-titles=Jmax only, total N constant +values=1,2 +widget[rose-config-edit]=cylc8_compat.ComboBoxValueWidget + +[namelist:jules_vegetation=pow] +compulsory=true +description=Power in sigmodial function used to get competition coefficients +sort-key=Panel-I02b +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::pow + +[namelist:jules_vegetation=stanton_leaf] +compulsory=true +description=Leaf-level Stanton number +range=0:1 +sort-key=Panel-I09a1 +type=real +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::stanton_leaf + +[namelist:jules_vegetation=triffid_period] +compulsory=true +description=Update frequency for TRIFFID (days) +range=1:10000 +sort-key=Panel-I02a +type=integer +url=https://metoffice.github.io/jules/latest/namelists/jules_vegetation.nml.html#JULES_VEGETATION::triffid_period + +[namelist:jules_water_resources_props] +description=Configuration of spatially-varying water resource properties + =NOT AVAILABLE TO UM + =READ BY STANDALONE EXECUTABLES ONLY + =INCLUDED TO ALLOW TRIGGER LISTS TO BE SHARED +url=https://metoffice.github.io/jules/latest/namelists/ancillaries.nml.html#namelist-JULES_WATER_RESOURCES_PROPS + [namelist:urban_properties] description=Configuration of spatially varying urban properties =NOT AVAILABLE TO UM