diff --git a/components/elm/bld/ELMBuildNamelist.pm b/components/elm/bld/ELMBuildNamelist.pm
index cbf067e67607..50d173fbc603 100755
--- a/components/elm/bld/ELMBuildNamelist.pm
+++ b/components/elm/bld/ELMBuildNamelist.pm
@@ -830,7 +830,17 @@ sub setup_cmdl_fates_mode {
"use_fates_tree_damage",
"use_century_decomp",
"use_snicar_ad",
- "use_vertsoilc");
+ "use_vertsoilc",
+ "use_fates_daylength_factor",
+ "fates_photosynth_acclimation",
+ "fates_stomatal_model",
+ "fates_stomatal_assimilation",
+ "fates_leafresp_model",
+ "fates_cstarvation_model",
+ "fates_regeneration_model",
+ "fates_hydro_solver",
+ "fates_radiation_model");
+
foreach my $var ( @list ) {
if ( defined($nl->get_value($var)) ) {
$nl_flags->{$var} = $nl->get_value($var);
@@ -3429,7 +3439,16 @@ sub setup_logic_fates {
"use_fates_planthydro",
"use_fates_potentialveg",
"use_fates_sp",
- "use_fates_tree_damage");
+ "use_fates_tree_damage",
+ "use_fates_daylength_factor",
+ "fates_photosynth_acclimation",
+ "fates_stomatal_model",
+ "fates_stomatal_assimilation",
+ "fates_leafresp_model",
+ "fates_cstarvation_model",
+ "fates_regeneration_model",
+ "fates_hydro_solver",
+ "fates_radiation_model");
foreach my $var (@list) {
add_default($test_files, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, $var,'use_fates'=>$nl_flags->{'use_fates'});
diff --git a/components/elm/bld/namelist_files/namelist_defaults.xml b/components/elm/bld/namelist_files/namelist_defaults.xml
index 3e3ce90223f7..d58f5108d7ec 100644
--- a/components/elm/bld/namelist_files/namelist_defaults.xml
+++ b/components/elm/bld/namelist_files/namelist_defaults.xml
@@ -2226,6 +2226,15 @@ this mask will have smb calculated over the entire global land surface
.false.
.false.
.false.
+.true.
+nonacclimating
+ballberry1987
+net
+ryan1991
+linear
+default
+1D_Taylor
+norman
.true.
.true.
.true.
diff --git a/components/elm/bld/namelist_files/namelist_definition.xml b/components/elm/bld/namelist_files/namelist_definition.xml
index 87a6da722af1..78563ddca7c0 100644
--- a/components/elm/bld/namelist_files/namelist_definition.xml
+++ b/components/elm/bld/namelist_files/namelist_definition.xml
@@ -359,6 +359,57 @@ Toggle to turn on FATES no competition mode (only relevant if FATES is being use
Toggle to turn on FATES satellite phenology mode (only relevant if FATES is being used).
+
+Set the FATES radiation model
+
+
+
+Set the FATES hydro solver method
+
+
+
+Set the FATES seed regeneration model
+Valid values:
+ default: default scheme
+ trs: Tree Recruitment Scheme (Hanbury-Brown et al., 2022)
+ trs_no_seed_dyn: Tree Recruitment Scheme (Hanbury-Brown et al., 2022) without seed dynamics
+
+
+
+Set the FATES carbon starvation model
+
+
+
+Set the FATES leaf maintenance respiration model
+
+
+
+Set net or gross asslimiation for the FATES stomatal model
+
+
+
+Set the FATES stomatal conductance model
+
+
+
+Set the FATES photosynthesis temperature acclimation model.
+(Only relevant if FATES is on)
+
+
+
+If TRUE, enable FATES to utilize the day length factor from the host land model.
+(Only relevant if FATES is on)
+
+
Toggle to turn on plant hydraulics (only relevant if FATES is on).
diff --git a/components/elm/src/main/controlMod.F90 b/components/elm/src/main/controlMod.F90
index dc7fa975dbb4..285ab360b9f9 100755
--- a/components/elm/src/main/controlMod.F90
+++ b/components/elm/src/main/controlMod.F90
@@ -272,6 +272,15 @@ subroutine control_init( )
fates_parteh_mode, &
fates_seeddisp_cadence, &
use_fates_tree_damage, &
+ use_fates_daylength_factor, &
+ fates_photosynth_acclimation, &
+ fates_stomatal_model, &
+ fates_stomatal_assimilation, &
+ fates_leafresp_model, &
+ fates_cstarvation_model, &
+ fates_regeneration_model, &
+ fates_hydro_solver, &
+ fates_radiation_model, &
fates_history_dimlevel
namelist /elm_inparm / use_betr
@@ -829,6 +838,15 @@ subroutine control_spmd()
call mpi_bcast (use_fates_potentialveg, 1, MPI_LOGICAL, 0, mpicom, ier)
call mpi_bcast (use_fates_ed_prescribed_phys, 1, MPI_LOGICAL, 0, mpicom, ier)
call mpi_bcast (use_fates_inventory_init, 1, MPI_LOGICAL, 0, mpicom, ier)
+ call mpi_bcast (use_fates_daylength_factor, 1, MPI_LOGICAL, 0, mpicom, ier)
+ call mpi_bcast (fates_photosynth_acclimation, len(fates_photosynth_acclimation), MPI_CHARACTER, 0, mpicom, ier)
+ call mpi_bcast (fates_stomatal_model, len(fates_stomatal_model) , MPI_CHARACTER, 0, mpicom, ier)
+ call mpi_bcast (fates_stomatal_assimilation, len(fates_stomatal_assimilation) , MPI_CHARACTER, 0, mpicom, ier)
+ call mpi_bcast (fates_leafresp_model, len(fates_leafresp_model) , MPI_CHARACTER, 0, mpicom, ier)
+ call mpi_bcast (fates_cstarvation_model, len(fates_cstarvation_model) , MPI_CHARACTER, 0, mpicom, ier)
+ call mpi_bcast (fates_regeneration_model, len(fates_regeneration_model) , MPI_CHARACTER, 0, mpicom, ier)
+ call mpi_bcast (fates_hydro_solver, len(fates_hydro_solver) , MPI_CHARACTER, 0, mpicom, ier)
+ call mpi_bcast (fates_radiation_model, len(fates_radiation_model) , MPI_CHARACTER, 0, mpicom, ier)
call mpi_bcast (fates_inventory_ctrl_filename, len(fates_inventory_ctrl_filename), &
MPI_CHARACTER, 0, mpicom, ier)
call mpi_bcast (fates_parteh_mode, 1, MPI_INTEGER, 0, mpicom, ier)
@@ -1251,6 +1269,15 @@ subroutine control_print ()
write(iulog, *) ' use_fates_luh = ', use_fates_luh
write(iulog, *) ' use_fates_lupft = ', use_fates_lupft
write(iulog, *) ' use_fates_potentialveg = ', use_fates_potentialveg
+ write(iulog, *) ' use_fates_daylength_factor = ', use_fates_daylength_factor
+ write(iulog, *) ' fates_photosynth_acclimation = ', trim(fates_photosynth_acclimation)
+ write(iulog, *) ' fates_stomatal_model = ', fates_stomatal_model
+ write(iulog, *) ' fates_stomatal_assimilation = ', fates_stomatal_assimilation
+ write(iulog, *) ' fates_leafresp_model = ', fates_leafresp_model
+ write(iulog, *) ' fates_cstarvation_model = ', fates_cstarvation_model
+ write(iulog, *) ' fates_regeneration_model = ', fates_regeneration_model
+ write(iulog, *) ' fates_hydro_solver = ', fates_hydro_solver
+ write(iulog, *) ' fates_radiation_model = ', fates_radiation_model
write(iulog, *) ' fates_inventory_ctrl_filename = ',fates_inventory_ctrl_filename
write(iulog, *) ' fates_seeddisp_cadence = ', fates_seeddisp_cadence
write(iulog, *) ' fates_seeddisp_cadence: 0, 1, 2, 3 => off, daily, monthly, or yearly dispersal'
diff --git a/components/elm/src/main/elm_varctl.F90 b/components/elm/src/main/elm_varctl.F90
index 69a3209e52fe..c36a04984b43 100644
--- a/components/elm/src/main/elm_varctl.F90
+++ b/components/elm/src/main/elm_varctl.F90
@@ -222,6 +222,14 @@ module elm_varctl
logical, public :: use_fates = .false. ! true => use ED
integer, public :: fates_spitfire_mode = 0 ! 0 for no fire; 1 for constant ignitions
character(len=256), public :: fates_harvest_mode = '' ! five different harvest modes; see namelist_definitions
+ character(len=256), public :: fates_photosynth_acclimation = '' ! nonacclimating, kumarathunge2019
+ character(len=256), public :: fates_stomatal_model = '' ! stomatal conductance model, Ball-berry or Medlyn
+ character(len=256), public :: fates_stomatal_assimilation = '' ! net or gross assimilation modes
+ character(len=256), public :: fates_leafresp_model = '' ! Leaf maintenance respiration model, Ryan or Atkin
+ character(len=256), public :: fates_cstarvation_model = '' ! linear or exponential function
+ character(len=256), public :: fates_regeneration_model = '' ! default, TRS, or TRS without seed dynamics
+ character(len=256), public :: fates_hydro_solver = '' ! 1D Taylor, 2D Picard, 2D Newton
+ character(len=256), public :: fates_radiation_model = '' ! Norman or two-stream radiation model
logical, public :: use_fates_fixed_biogeog = .false. ! true => use fixed biogeography mode
logical, public :: use_fates_planthydro = .false. ! true => turn on fates hydro
logical, public :: use_fates_cohort_age_tracking = .false. ! true => turn on cohort age tracking
@@ -234,6 +242,7 @@ module elm_varctl
logical, public :: use_fates_luh = .false. ! true => FATES land use transitions mode
logical, public :: use_fates_lupft = .false. ! true => FATES land use x pft mode
logical, public :: use_fates_potentialveg = .false. ! true => FATES potential veg only
+ logical, public :: use_fates_daylength_factor = .false. ! true => enable fates to use host land model daylength factor
character(len=256), public :: fluh_timeseries = '' ! filename for land use harmonization data
character(len=256), public :: flandusepftdat = '' ! filename for fates landuse x pft data
character(len=256), public :: fates_inventory_ctrl_filename = '' ! filename for inventory control
diff --git a/components/elm/src/main/elmfates_interfaceMod.F90 b/components/elm/src/main/elmfates_interfaceMod.F90
index e7134a580fdc..455ad5456ebb 100644
--- a/components/elm/src/main/elmfates_interfaceMod.F90
+++ b/components/elm/src/main/elmfates_interfaceMod.F90
@@ -58,6 +58,15 @@ module ELMFatesInterfaceMod
use elm_varctl , only : use_fates_luh
use elm_varctl , only : use_fates_lupft
use elm_varctl , only : use_fates_potentialveg
+ use elm_varctl , only : use_fates_daylength_factor
+ use elm_varctl , only : fates_photosynth_acclimation
+ use elm_varctl , only : fates_stomatal_model
+ use elm_varctl , only : fates_stomatal_assimilation
+ use elm_varctl , only : fates_leafresp_model
+ use elm_varctl , only : fates_cstarvation_model
+ use elm_varctl , only : fates_regeneration_model
+ use elm_varctl , only : fates_hydro_solver
+ use elm_varctl , only : fates_radiation_model
use elm_varctl , only : flandusepftdat
use elm_varctl , only : use_fates_tree_damage
use elm_varctl , only : nsrest, nsrBranch
@@ -410,6 +419,16 @@ subroutine ELMFatesGlobals2()
integer :: pass_num_luh_states
integer :: pass_num_luh_transitions
integer :: pass_lupftdat
+ integer :: pass_daylength_factor_switch
+ integer :: pass_photosynth_acclimation_switch
+ integer :: pass_stomatal_model
+ integer :: pass_stomatal_assimilation
+ integer :: pass_leafresp_model
+ integer :: pass_cstarvation_model
+ integer :: pass_regeneration_model
+ integer :: pass_hydro_solver
+ integer :: pass_radiation_model
+
! ----------------------------------------------------------------------------------
! FATES lightning definitions
! 1 : use a global constant lightning rate found in fates_params.
@@ -594,6 +613,75 @@ subroutine ELMFatesGlobals2()
end if
call set_fates_ctrlparms('use_cohort_age_tracking',ival=pass_cohort_age_tracking)
+ if (trim(fates_radiation_model) == 'norman') then
+ pass_radiation_model = 1
+ else if (trim(fates_hydro_solver) == 'twostream') then
+ pass_radiation_model = 2
+ end if
+ call set_fates_ctrlparms('radiation_model',ival=pass_radiation_model)
+
+ if (trim(fates_hydro_solver) == '1D_Taylor') then
+ pass_hydro_solver = 1
+ else if (trim(fates_hydro_solver) == '2D_Picard') then
+ pass_hydro_solver = 2
+ else if (trim(fates_hydro_solver) == '2D_Newton') then
+ pass_hydro_solver = 3
+ end if
+ call set_fates_ctrlparms('hydr_solver',ival=pass_hydro_solver)
+
+
+ if (trim(fates_regeneration_model) == 'default') then
+ pass_regeneration_model = 1
+ else if (trim(fates_regeneration_model) == 'trs') then
+ pass_regeneration_model = 2
+ else if (trim(fates_regeneration_model) == 'trs_no_seed_dyn') then
+ pass_regeneration_model = 3
+ end if
+ call set_fates_ctrlparms('regeneration_model',ival=pass_regeneration_model)
+
+
+ if (trim(fates_cstarvation_model) == 'linear') then
+ pass_cstarvation_model = 1
+ else if (trim(fates_cstarvation_model) == 'expontential') then
+ pass_cstarvation_model = 2
+ end if
+ call set_fates_ctrlparms('mort_cstarvation_model',ival=pass_cstarvation_model)
+
+ if (trim(fates_leafresp_model) == 'ryan1991') then
+ pass_leafresp_model = 1
+ else if (trim(fates_leafresp_model) == 'atkin2017') then
+ pass_leafresp_model = 2
+ end if
+ call set_fates_ctrlparms('maintresp_leaf_model',ival=pass_leafresp_model)
+
+ if (trim(fates_stomatal_assimilation) == 'net') then
+ pass_stomatal_assimilation = 1
+ else if (trim(fates_stomatal_assimilation) == 'gross') then
+ pass_stomatal_assimilation = 2
+ end if
+ call set_fates_ctrlparms('stomatal_assim_model',ival=pass_stomatal_assimilation)
+
+ if (trim(fates_stomatal_model) == 'ballberry1987') then
+ pass_stomatal_model = 1
+ else if (trim(fates_stomatal_model) == 'medlyn2011') then
+ pass_stomatal_model = 2
+ end if
+ call set_fates_ctrlparms('stomatal_model',ival=pass_stomatal_model)
+
+ if(trim(fates_photosynth_acclimation) == 'kumarathunge2019') then
+ pass_photosynth_acclimation_switch = 1
+ else if(trim(fates_photosynth_acclimation) == 'nonacclimating') then
+ pass_photosynth_acclimation_switch = 0
+ end if
+ call set_fates_ctrlparms('photosynth_acclimation',ival=pass_photosynth_acclimation_switch)
+
+ if(use_fates_daylength_factor) then
+ pass_daylength_factor_switch = 1
+ else
+ pass_daylength_factor_switch = 0
+ end if
+ call set_fates_ctrlparms('use_daylength_factor_switch',ival=pass_daylength_factor_switch)
+
if(use_fates_inventory_init) then
pass_inventory_init = 1
else