From 922a317445ba1d43ccc4c6344dceac9d812d1dcd Mon Sep 17 00:00:00 2001 From: Gregory Lemieux Date: Mon, 9 Dec 2024 16:32:51 -0800 Subject: [PATCH 1/9] add fates daylength factor switch This commit facilitates moving this switch from the fates parameter file to the API. Note that the actual daylength factor value is always passed through the API. This just adds the switch to tell FATES to use it. --- bld/CLMBuildNamelist.pm | 6 ++++-- bld/namelist_files/namelist_defaults_ctsm.xml | 1 + bld/namelist_files/namelist_definition_ctsm.xml | 6 ++++++ src/main/clm_varctl.F90 | 1 + src/main/controlMod.F90 | 3 +++ src/utils/clmfates_interfaceMod.F90 | 9 +++++++++ 6 files changed, 24 insertions(+), 2 deletions(-) diff --git a/bld/CLMBuildNamelist.pm b/bld/CLMBuildNamelist.pm index 07e78952f9..f5ef6dc305 100755 --- a/bld/CLMBuildNamelist.pm +++ b/bld/CLMBuildNamelist.pm @@ -808,7 +808,8 @@ sub setup_cmdl_fates_mode { "use_fates_cohort_age_tracking","use_fates_inventory_init","use_fates_fixed_biogeog", "use_fates_nocomp","use_fates_sp","fates_inventory_ctrl_filename","fates_harvest_mode", "fates_parteh_mode","use_fates_tree_damage","fates_seeddisp_cadence","use_fates_luh","fluh_timeseries", - "flandusepftdat","use_fates_potentialveg","use_fates_lupft","fates_history_dimlevel" ); + "flandusepftdat","use_fates_potentialveg","use_fates_lupft","fates_history_dimlevel", + "use_fates_daylength_factor"); # dis-allow fates specific namelist items with non-fates runs foreach my $var ( @list ) { @@ -4702,7 +4703,8 @@ sub setup_logic_fates { add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'fates_paramfile', 'phys'=>$nl_flags->{'phys'}); my @list = ( "fates_spitfire_mode", "use_fates_planthydro", "use_fates_ed_st3", "use_fates_ed_prescribed_phys", "use_fates_inventory_init","fates_seeddisp_cadence","fates_history_dimlevel", - "fates_harvest_mode","fates_parteh_mode", "use_fates_cohort_age_tracking","use_fates_tree_damage" ); + "fates_harvest_mode","fates_parteh_mode", "use_fates_cohort_age_tracking","use_fates_tree_damage", + "use_fates_daylength_factor"); foreach my $var ( @list ) { add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, $var, 'use_fates'=>$nl_flags->{'use_fates'}, diff --git a/bld/namelist_files/namelist_defaults_ctsm.xml b/bld/namelist_files/namelist_defaults_ctsm.xml index 7c75b471a6..afe897df0e 100644 --- a/bld/namelist_files/namelist_defaults_ctsm.xml +++ b/bld/namelist_files/namelist_defaults_ctsm.xml @@ -2391,6 +2391,7 @@ lnd/clm2/surfdata_esmf/NEON/ctsm5.3.0/surfdata_1x1_NEON_TOOL_hist_2000_78pfts_c2 .false. .false. .false. +.true. .false. .false. .false. diff --git a/bld/namelist_files/namelist_definition_ctsm.xml b/bld/namelist_files/namelist_definition_ctsm.xml index 2d5ab0e4c7..e143d875bd 100644 --- a/bld/namelist_files/namelist_definition_ctsm.xml +++ b/bld/namelist_files/namelist_definition_ctsm.xml @@ -775,6 +775,12 @@ Allowed values are: This option is older than the luhdata options and may be depricated at some point in the future. + +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 diff --git a/src/main/clm_varctl.F90 b/src/main/clm_varctl.F90 index 9539060200..bc28b72e0c 100644 --- a/src/main/clm_varctl.F90 +++ b/src/main/clm_varctl.F90 @@ -338,6 +338,7 @@ module clm_varctl logical, public :: use_fates_inventory_init = .false. ! true => initialize fates from inventory logical, public :: use_fates_fixed_biogeog = .false. ! true => use fixed biogeography mode logical, public :: use_fates_nocomp = .false. ! true => use no comopetition mode + logical, public :: use_fates_daylength_factor = .false. ! true => enable fates to use host land model daylength factor ! FATES history dimension level ! fates can produce history at either the daily timescale (dynamics) diff --git a/src/main/controlMod.F90 b/src/main/controlMod.F90 index 3f5c58ac0e..c940e083e6 100644 --- a/src/main/controlMod.F90 +++ b/src/main/controlMod.F90 @@ -245,6 +245,7 @@ subroutine control_init(dtime) fates_parteh_mode, & fates_seeddisp_cadence, & use_fates_tree_damage, & + use_fates_daylength_factor, & fates_history_dimlevel ! Ozone vegetation stress method @@ -812,6 +813,7 @@ subroutine control_spmd() call mpi_bcast (use_fates_lupft, 1, MPI_LOGICAL, 0, mpicom, ier) call mpi_bcast (use_fates_potentialveg, 1, MPI_LOGICAL, 0, mpicom, ier) call mpi_bcast (use_fates_bgc, 1, MPI_LOGICAL, 0, mpicom, ier) + call mpi_bcast (use_fates_daylength_factor, 1, MPI_LOGICAL, 0, mpicom, ier) call mpi_bcast (fates_inventory_ctrl_filename, len(fates_inventory_ctrl_filename), MPI_CHARACTER, 0, mpicom, ier) call mpi_bcast (fates_paramfile, len(fates_paramfile) , MPI_CHARACTER, 0, mpicom, ier) call mpi_bcast (fluh_timeseries, len(fluh_timeseries) , MPI_CHARACTER, 0, mpicom, ier) @@ -1205,6 +1207,7 @@ subroutine control_print () write(iulog, *) ' use_fates_planthydro = ', use_fates_planthydro write(iulog, *) ' use_fates_tree_damage = ', use_fates_tree_damage write(iulog, *) ' use_fates_cohort_age_tracking = ', use_fates_cohort_age_tracking + write(iulog, *) ' use_fates_daylength_factor = ', use_fates_daylength_factor write(iulog, *) ' use_fates_ed_st3 = ',use_fates_ed_st3 write(iulog, *) ' use_fates_ed_prescribed_phys = ',use_fates_ed_prescribed_phys write(iulog, *) ' use_fates_inventory_init = ',use_fates_inventory_init diff --git a/src/utils/clmfates_interfaceMod.F90 b/src/utils/clmfates_interfaceMod.F90 index 269189d1b7..daea58dc96 100644 --- a/src/utils/clmfates_interfaceMod.F90 +++ b/src/utils/clmfates_interfaceMod.F90 @@ -52,6 +52,7 @@ module CLMFatesInterfaceMod use clm_varctl , only : use_fates_tree_damage use clm_varctl , only : use_fates_planthydro use clm_varctl , only : use_fates_cohort_age_tracking + use clm_varctl , only : use_fates_daylength_factor use clm_varctl , only : use_fates_ed_st3 use clm_varctl , only : use_fates_ed_prescribed_phys use clm_varctl , only : fates_harvest_mode @@ -399,6 +400,7 @@ subroutine CLMFatesGlobals2() integer :: pass_use_potentialveg integer :: pass_num_luh_states integer :: pass_num_luh_transitions + integer :: pass_daylength_factor_switch call t_startf('fates_globals2') @@ -515,6 +517,13 @@ subroutine CLMFatesGlobals2() end if call set_fates_ctrlparms('use_cohort_age_tracking',ival=pass_cohort_age_tracking) + 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) + ! FATES logging and harvest modes pass_logging = 0 pass_lu_harvest = 0 From 4ee63f69505e9b1512922aa55bc291245cf6ec41 Mon Sep 17 00:00:00 2001 From: Gregory Lemieux Date: Mon, 9 Dec 2024 17:00:58 -0800 Subject: [PATCH 2/9] add FATES switch to enable photosynthetic temp acclimation This commit facilitates moving this switch from the FATES parameter file to the namelist --- bld/CLMBuildNamelist.pm | 4 ++-- bld/namelist_files/namelist_defaults_ctsm.xml | 1 + bld/namelist_files/namelist_definition_ctsm.xml | 6 ++++++ src/main/clm_varctl.F90 | 2 ++ src/main/controlMod.F90 | 3 +++ src/utils/clmfates_interfaceMod.F90 | 8 ++++++++ 6 files changed, 22 insertions(+), 2 deletions(-) diff --git a/bld/CLMBuildNamelist.pm b/bld/CLMBuildNamelist.pm index f5ef6dc305..2ff891aef6 100755 --- a/bld/CLMBuildNamelist.pm +++ b/bld/CLMBuildNamelist.pm @@ -809,7 +809,7 @@ sub setup_cmdl_fates_mode { "use_fates_nocomp","use_fates_sp","fates_inventory_ctrl_filename","fates_harvest_mode", "fates_parteh_mode","use_fates_tree_damage","fates_seeddisp_cadence","use_fates_luh","fluh_timeseries", "flandusepftdat","use_fates_potentialveg","use_fates_lupft","fates_history_dimlevel", - "use_fates_daylength_factor"); + "use_fates_daylength_factor", "use_fates_photosynth_acclimation"); # dis-allow fates specific namelist items with non-fates runs foreach my $var ( @list ) { @@ -4704,7 +4704,7 @@ sub setup_logic_fates { my @list = ( "fates_spitfire_mode", "use_fates_planthydro", "use_fates_ed_st3", "use_fates_ed_prescribed_phys", "use_fates_inventory_init","fates_seeddisp_cadence","fates_history_dimlevel", "fates_harvest_mode","fates_parteh_mode", "use_fates_cohort_age_tracking","use_fates_tree_damage", - "use_fates_daylength_factor"); + "use_fates_daylength_factor", "use_fates_photosynth_acclimation"); foreach my $var ( @list ) { add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, $var, 'use_fates'=>$nl_flags->{'use_fates'}, diff --git a/bld/namelist_files/namelist_defaults_ctsm.xml b/bld/namelist_files/namelist_defaults_ctsm.xml index afe897df0e..a24b49ca27 100644 --- a/bld/namelist_files/namelist_defaults_ctsm.xml +++ b/bld/namelist_files/namelist_defaults_ctsm.xml @@ -2386,6 +2386,7 @@ lnd/clm2/surfdata_esmf/NEON/ctsm5.3.0/surfdata_1x1_NEON_TOOL_hist_2000_78pfts_c2 .true. +.false. 0 no_harvest .false. diff --git a/bld/namelist_files/namelist_definition_ctsm.xml b/bld/namelist_files/namelist_definition_ctsm.xml index e143d875bd..68b2b8858e 100644 --- a/bld/namelist_files/namelist_definition_ctsm.xml +++ b/bld/namelist_files/namelist_definition_ctsm.xml @@ -775,6 +775,12 @@ Allowed values are: This option is older than the luhdata options and may be depricated at some point in the future. + +If TRUE, enable FATES to use a 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. diff --git a/src/main/clm_varctl.F90 b/src/main/clm_varctl.F90 index bc28b72e0c..6d62f6450f 100644 --- a/src/main/clm_varctl.F90 +++ b/src/main/clm_varctl.F90 @@ -340,6 +340,8 @@ module clm_varctl logical, public :: use_fates_nocomp = .false. ! true => use no comopetition mode logical, public :: use_fates_daylength_factor = .false. ! true => enable fates to use host land model daylength factor + logical, public :: use_fates_photosynth_acclimation = .false. ! true => enable fates to use photosynthetic temperature acclimation + ! FATES history dimension level ! fates can produce history at either the daily timescale (dynamics) ! and the model step timescale. It can also generate output on the extra dimension diff --git a/src/main/controlMod.F90 b/src/main/controlMod.F90 index c940e083e6..27952e28f7 100644 --- a/src/main/controlMod.F90 +++ b/src/main/controlMod.F90 @@ -246,6 +246,7 @@ subroutine control_init(dtime) fates_seeddisp_cadence, & use_fates_tree_damage, & use_fates_daylength_factor, & + use_fates_photosynth_acclimation, & fates_history_dimlevel ! Ozone vegetation stress method @@ -814,6 +815,7 @@ subroutine control_spmd() call mpi_bcast (use_fates_potentialveg, 1, MPI_LOGICAL, 0, mpicom, ier) call mpi_bcast (use_fates_bgc, 1, MPI_LOGICAL, 0, mpicom, ier) call mpi_bcast (use_fates_daylength_factor, 1, MPI_LOGICAL, 0, mpicom, ier) + call mpi_bcast (use_fates_photosynth_acclimation, 1, MPI_LOGICAL, 0, mpicom, ier) call mpi_bcast (fates_inventory_ctrl_filename, len(fates_inventory_ctrl_filename), MPI_CHARACTER, 0, mpicom, ier) call mpi_bcast (fates_paramfile, len(fates_paramfile) , MPI_CHARACTER, 0, mpicom, ier) call mpi_bcast (fluh_timeseries, len(fluh_timeseries) , MPI_CHARACTER, 0, mpicom, ier) @@ -1208,6 +1210,7 @@ subroutine control_print () write(iulog, *) ' use_fates_tree_damage = ', use_fates_tree_damage write(iulog, *) ' use_fates_cohort_age_tracking = ', use_fates_cohort_age_tracking write(iulog, *) ' use_fates_daylength_factor = ', use_fates_daylength_factor + write(iulog, *) ' use_fates_photosynth_acclimation = ', use_fates_photosynth_acclimation write(iulog, *) ' use_fates_ed_st3 = ',use_fates_ed_st3 write(iulog, *) ' use_fates_ed_prescribed_phys = ',use_fates_ed_prescribed_phys write(iulog, *) ' use_fates_inventory_init = ',use_fates_inventory_init diff --git a/src/utils/clmfates_interfaceMod.F90 b/src/utils/clmfates_interfaceMod.F90 index daea58dc96..2381a9c678 100644 --- a/src/utils/clmfates_interfaceMod.F90 +++ b/src/utils/clmfates_interfaceMod.F90 @@ -53,6 +53,7 @@ module CLMFatesInterfaceMod use clm_varctl , only : use_fates_planthydro use clm_varctl , only : use_fates_cohort_age_tracking use clm_varctl , only : use_fates_daylength_factor + use clm_varctl , only : use_fates_photosynth_acclimation use clm_varctl , only : use_fates_ed_st3 use clm_varctl , only : use_fates_ed_prescribed_phys use clm_varctl , only : fates_harvest_mode @@ -517,6 +518,13 @@ subroutine CLMFatesGlobals2() end if call set_fates_ctrlparms('use_cohort_age_tracking',ival=pass_cohort_age_tracking) + if(use_fates_photosynth_acclimation) then + pass_photosynth_acclimation_switch = 1 + else + pass_photosynth_acclimation_switch = 0 + end if + call set_fates_ctrlparms('use_photosynth_acclimation',ival=pass_photosynth_acclimation_switch) + if(use_fates_daylength_factor) then pass_daylength_factor_switch = 1 else From 344241c40daf6603af098a96cb29c3787f78e355 Mon Sep 17 00:00:00 2001 From: Gregory Lemieux Date: Tue, 10 Dec 2024 12:00:59 -0800 Subject: [PATCH 3/9] pass somatal conductance method to fates This commit facilitates moving this switch from the FATES parameter file to the namelist --- src/biogeophys/PhotosynthesisMod.F90 | 4 ++-- src/utils/clmfates_interfaceMod.F90 | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/biogeophys/PhotosynthesisMod.F90 b/src/biogeophys/PhotosynthesisMod.F90 index 6176668f19..af565b9872 100644 --- a/src/biogeophys/PhotosynthesisMod.F90 +++ b/src/biogeophys/PhotosynthesisMod.F90 @@ -79,8 +79,8 @@ module PhotosynthesisMod integer, parameter, public :: root=4 ! index for root integer, parameter, public :: veg=vegetation_weibull ! index for vegetation integer, parameter, public :: soil=1 ! index for soil - integer, parameter, private :: stomatalcond_mtd_bb1987 = 1 ! Ball-Berry 1987 method for photosynthesis - integer, parameter, private :: stomatalcond_mtd_medlyn2011 = 2 ! Medlyn 2011 method for photosynthesis + integer, parameter, public :: stomatalcond_mtd_bb1987 = 1 ! Ball-Berry 1987 method for photosynthesis + integer, parameter, public :: stomatalcond_mtd_medlyn2011 = 2 ! Medlyn 2011 method for photosynthesis real(r8), parameter, private :: bbbopt_c3 = 10000._r8 ! Ball-Berry Photosynthesis intercept to use for C3 vegetation real(r8), parameter, private :: bbbopt_c4 = 40000._r8 ! Ball-Berry Photosynthesis intercept to use for C4 vegetation diff --git a/src/utils/clmfates_interfaceMod.F90 b/src/utils/clmfates_interfaceMod.F90 index 2381a9c678..e8624684f4 100644 --- a/src/utils/clmfates_interfaceMod.F90 +++ b/src/utils/clmfates_interfaceMod.F90 @@ -83,6 +83,9 @@ module CLMFatesInterfaceMod use clm_varpar , only : nlevdecomp_full use clm_varpar , only : nlevsoi use PhotosynthesisMod , only : photosyns_type + use PhotosynthesisMod , only : stomatalcond_method + use PhotosynthesisMod , only : stomatalcond_mtd_bb1987 + use PhotosynthesisMod , only : stomatalcond_mtd_medlyn2011 use atm2lndType , only : atm2lnd_type use SurfaceAlbedoType , only : surfalb_type use SolarAbsorbedType , only : solarabs_type @@ -402,6 +405,7 @@ subroutine CLMFatesGlobals2() integer :: pass_num_luh_states integer :: pass_num_luh_transitions integer :: pass_daylength_factor_switch + integer :: pass_stomatal_model call t_startf('fates_globals2') @@ -532,6 +536,13 @@ subroutine CLMFatesGlobals2() end if call set_fates_ctrlparms('use_daylength_factor_switch',ival=pass_daylength_factor_switch) + if (trim(stomatalcond_method) == 'Ball-Berry1987') then + pass_stomatal_model = stomatalcond_mtd_bb1987 + else if (trim(stomatalcond_method) == 'Medlyn2011') then + pass_stomatal_model = stomatalcond_mtd_medlyn2011 + end if + call set_fates_ctrlparms('stomatal_model',ival=pass_stomatal_model) + ! FATES logging and harvest modes pass_logging = 0 pass_lu_harvest = 0 From 1ab65144fba771f50ae716c92bafc5566594b341 Mon Sep 17 00:00:00 2001 From: Gregory Lemieux Date: Tue, 10 Dec 2024 12:16:28 -0800 Subject: [PATCH 4/9] add FATES namelist switch for stomatal assimilation This commit facilitates moving this switch from the FATES parameter file to the namelist --- bld/CLMBuildNamelist.pm | 4 ++-- bld/namelist_files/namelist_defaults_ctsm.xml | 1 + bld/namelist_files/namelist_definition_ctsm.xml | 5 +++++ src/main/clm_varctl.F90 | 1 + src/main/controlMod.F90 | 3 +++ src/utils/clmfates_interfaceMod.F90 | 9 +++++++++ 6 files changed, 21 insertions(+), 2 deletions(-) diff --git a/bld/CLMBuildNamelist.pm b/bld/CLMBuildNamelist.pm index 2ff891aef6..699ee8b5f9 100755 --- a/bld/CLMBuildNamelist.pm +++ b/bld/CLMBuildNamelist.pm @@ -809,7 +809,7 @@ sub setup_cmdl_fates_mode { "use_fates_nocomp","use_fates_sp","fates_inventory_ctrl_filename","fates_harvest_mode", "fates_parteh_mode","use_fates_tree_damage","fates_seeddisp_cadence","use_fates_luh","fluh_timeseries", "flandusepftdat","use_fates_potentialveg","use_fates_lupft","fates_history_dimlevel", - "use_fates_daylength_factor", "use_fates_photosynth_acclimation"); + "use_fates_daylength_factor", "use_fates_photosynth_acclimation","fates_stomatal_assimilation"); # dis-allow fates specific namelist items with non-fates runs foreach my $var ( @list ) { @@ -4704,7 +4704,7 @@ sub setup_logic_fates { my @list = ( "fates_spitfire_mode", "use_fates_planthydro", "use_fates_ed_st3", "use_fates_ed_prescribed_phys", "use_fates_inventory_init","fates_seeddisp_cadence","fates_history_dimlevel", "fates_harvest_mode","fates_parteh_mode", "use_fates_cohort_age_tracking","use_fates_tree_damage", - "use_fates_daylength_factor", "use_fates_photosynth_acclimation"); + "use_fates_daylength_factor", "use_fates_photosynth_acclimation","fates_stomatal_assimilation"); foreach my $var ( @list ) { add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, $var, 'use_fates'=>$nl_flags->{'use_fates'}, diff --git a/bld/namelist_files/namelist_defaults_ctsm.xml b/bld/namelist_files/namelist_defaults_ctsm.xml index a24b49ca27..7d56da0b5a 100644 --- a/bld/namelist_files/namelist_defaults_ctsm.xml +++ b/bld/namelist_files/namelist_defaults_ctsm.xml @@ -2389,6 +2389,7 @@ lnd/clm2/surfdata_esmf/NEON/ctsm5.3.0/surfdata_1x1_NEON_TOOL_hist_2000_78pfts_c2 .false. 0 no_harvest +net .false. .false. .false. diff --git a/bld/namelist_files/namelist_definition_ctsm.xml b/bld/namelist_files/namelist_definition_ctsm.xml index 68b2b8858e..49ad64210a 100644 --- a/bld/namelist_files/namelist_definition_ctsm.xml +++ b/bld/namelist_files/namelist_definition_ctsm.xml @@ -775,6 +775,11 @@ Allowed values are: This option is older than the luhdata options and may be depricated at some point in the future. + +Set net or gross asslimiation for the FATES stomatal model + + If TRUE, enable FATES to use a photosynthesis temperature acclimation model. diff --git a/src/main/clm_varctl.F90 b/src/main/clm_varctl.F90 index 6d62f6450f..c348ba7aba 100644 --- a/src/main/clm_varctl.F90 +++ b/src/main/clm_varctl.F90 @@ -331,6 +331,7 @@ module clm_varctl ! see bld/namelist_files/namelist_definition_clm4_5.xml for details logical, public :: use_fates_tree_damage = .false. ! true => turn on tree damage module character(len=256), public :: fates_harvest_mode = '' ! five different harvest modes; see namelist definition + character(len=256), public :: fates_stomatal_assimilation = '' ! net or gross assimilation modes 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 logical, public :: use_fates_ed_st3 = .false. ! true => static stand structure diff --git a/src/main/controlMod.F90 b/src/main/controlMod.F90 index 27952e28f7..e64572909f 100644 --- a/src/main/controlMod.F90 +++ b/src/main/controlMod.F90 @@ -242,6 +242,7 @@ subroutine control_init(dtime) fluh_timeseries, & flandusepftdat, & fates_inventory_ctrl_filename, & + fates_stomatal_assimilation, & fates_parteh_mode, & fates_seeddisp_cadence, & use_fates_tree_damage, & @@ -801,6 +802,7 @@ subroutine control_spmd() call mpi_bcast (fates_spitfire_mode, 1, MPI_INTEGER, 0, mpicom, ier) call mpi_bcast (fates_harvest_mode, len(fates_harvest_mode) , MPI_CHARACTER, 0, mpicom, ier) + call mpi_bcast (fates_stomatal_assimilation, len(fates_stomatal_assimilation) , MPI_CHARACTER, 0, mpicom, ier) call mpi_bcast (use_fates_planthydro, 1, MPI_LOGICAL, 0, mpicom, ier) call mpi_bcast (use_fates_tree_damage, 1, MPI_LOGICAL, 0, mpicom, ier) call mpi_bcast (use_fates_cohort_age_tracking, 1, MPI_LOGICAL, 0, mpicom, ier) @@ -1204,6 +1206,7 @@ subroutine control_print () if (use_fates) then write(iulog, *) ' fates_spitfire_mode = ', fates_spitfire_mode write(iulog, *) ' fates_harvest_mode = ', fates_harvest_mode + write(iulog, *) ' fates_stomatal_assimilation = ', fates_stomatal_assimilation write(iulog, *) ' fates_paramfile = ', fates_paramfile write(iulog, *) ' fates_parteh_mode = ', fates_parteh_mode write(iulog, *) ' use_fates_planthydro = ', use_fates_planthydro diff --git a/src/utils/clmfates_interfaceMod.F90 b/src/utils/clmfates_interfaceMod.F90 index e8624684f4..59f351be51 100644 --- a/src/utils/clmfates_interfaceMod.F90 +++ b/src/utils/clmfates_interfaceMod.F90 @@ -57,6 +57,7 @@ module CLMFatesInterfaceMod use clm_varctl , only : use_fates_ed_st3 use clm_varctl , only : use_fates_ed_prescribed_phys use clm_varctl , only : fates_harvest_mode + use clm_varctl , only : fates_stomatal_assimilation use clm_varctl , only : use_fates_inventory_init use clm_varctl , only : use_fates_fixed_biogeog use clm_varctl , only : use_fates_nocomp @@ -406,6 +407,7 @@ subroutine CLMFatesGlobals2() integer :: pass_num_luh_transitions integer :: pass_daylength_factor_switch integer :: pass_stomatal_model + integer :: pass_stomatal_assimilation call t_startf('fates_globals2') @@ -543,6 +545,13 @@ subroutine CLMFatesGlobals2() end if call set_fates_ctrlparms('stomatal_model',ival=pass_stomatal_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) + ! FATES logging and harvest modes pass_logging = 0 pass_lu_harvest = 0 From e0e60b8130fd1b031dcc4988827ff48c8f5a4918 Mon Sep 17 00:00:00 2001 From: Gregory Lemieux Date: Tue, 10 Dec 2024 12:23:02 -0800 Subject: [PATCH 5/9] pass leaf maintenance respiration model integer to fates This commit facilitates moving this switch from the FATES parameter file to the namelist --- src/utils/clmfates_interfaceMod.F90 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/utils/clmfates_interfaceMod.F90 b/src/utils/clmfates_interfaceMod.F90 index 59f351be51..485fc6d9e7 100644 --- a/src/utils/clmfates_interfaceMod.F90 +++ b/src/utils/clmfates_interfaceMod.F90 @@ -84,6 +84,7 @@ module CLMFatesInterfaceMod use clm_varpar , only : nlevdecomp_full use clm_varpar , only : nlevsoi use PhotosynthesisMod , only : photosyns_type + use PhotosynthesisMod , only : leafresp_method use PhotosynthesisMod , only : stomatalcond_method use PhotosynthesisMod , only : stomatalcond_mtd_bb1987 use PhotosynthesisMod , only : stomatalcond_mtd_medlyn2011 @@ -552,6 +553,8 @@ subroutine CLMFatesGlobals2() end if call set_fates_ctrlparms('stomatal_assim_model',ival=pass_stomatal_assimilation) + call set_fates_ctrlparms('maintresp_leaf_model',ival=leafresp_method) + ! FATES logging and harvest modes pass_logging = 0 pass_lu_harvest = 0 From ca196036387e45f100c27e57170d5d0aedcbd379 Mon Sep 17 00:00:00 2001 From: Gregory Lemieux Date: Tue, 10 Dec 2024 12:34:52 -0800 Subject: [PATCH 6/9] add FATES switch to select carbon starvation model This commit facilitates moving this switch from the FATES parameter file to the namelist --- bld/CLMBuildNamelist.pm | 8 ++++++-- bld/namelist_files/namelist_defaults_ctsm.xml | 1 + bld/namelist_files/namelist_definition_ctsm.xml | 5 +++++ src/main/clm_varctl.F90 | 1 + src/main/controlMod.F90 | 3 +++ src/utils/clmfates_interfaceMod.F90 | 9 +++++++++ 6 files changed, 25 insertions(+), 2 deletions(-) diff --git a/bld/CLMBuildNamelist.pm b/bld/CLMBuildNamelist.pm index 699ee8b5f9..4594e79f17 100755 --- a/bld/CLMBuildNamelist.pm +++ b/bld/CLMBuildNamelist.pm @@ -809,7 +809,9 @@ sub setup_cmdl_fates_mode { "use_fates_nocomp","use_fates_sp","fates_inventory_ctrl_filename","fates_harvest_mode", "fates_parteh_mode","use_fates_tree_damage","fates_seeddisp_cadence","use_fates_luh","fluh_timeseries", "flandusepftdat","use_fates_potentialveg","use_fates_lupft","fates_history_dimlevel", - "use_fates_daylength_factor", "use_fates_photosynth_acclimation","fates_stomatal_assimilation"); + "use_fates_daylength_factor", "use_fates_photosynth_acclimation","fates_stomatal_assimilation", + "fates_cstarvation_model" + ); # dis-allow fates specific namelist items with non-fates runs foreach my $var ( @list ) { @@ -4704,7 +4706,9 @@ sub setup_logic_fates { my @list = ( "fates_spitfire_mode", "use_fates_planthydro", "use_fates_ed_st3", "use_fates_ed_prescribed_phys", "use_fates_inventory_init","fates_seeddisp_cadence","fates_history_dimlevel", "fates_harvest_mode","fates_parteh_mode", "use_fates_cohort_age_tracking","use_fates_tree_damage", - "use_fates_daylength_factor", "use_fates_photosynth_acclimation","fates_stomatal_assimilation"); + "use_fates_daylength_factor", "use_fates_photosynth_acclimation","fates_stomatal_assimilation", + "fates_cstarvation_model" + ); foreach my $var ( @list ) { add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, $var, 'use_fates'=>$nl_flags->{'use_fates'}, diff --git a/bld/namelist_files/namelist_defaults_ctsm.xml b/bld/namelist_files/namelist_defaults_ctsm.xml index 7d56da0b5a..c1c42d2daa 100644 --- a/bld/namelist_files/namelist_defaults_ctsm.xml +++ b/bld/namelist_files/namelist_defaults_ctsm.xml @@ -2390,6 +2390,7 @@ lnd/clm2/surfdata_esmf/NEON/ctsm5.3.0/surfdata_1x1_NEON_TOOL_hist_2000_78pfts_c2 0 no_harvest net +linear .false. .false. .false. diff --git a/bld/namelist_files/namelist_definition_ctsm.xml b/bld/namelist_files/namelist_definition_ctsm.xml index 49ad64210a..78fa40bcfe 100644 --- a/bld/namelist_files/namelist_definition_ctsm.xml +++ b/bld/namelist_files/namelist_definition_ctsm.xml @@ -775,6 +775,11 @@ Allowed values are: This option is older than the luhdata options and may be depricated at some point in the future. + +Set the FATES carbon starvation model + + Set net or gross asslimiation for the FATES stomatal model diff --git a/src/main/clm_varctl.F90 b/src/main/clm_varctl.F90 index c348ba7aba..43370d2c1b 100644 --- a/src/main/clm_varctl.F90 +++ b/src/main/clm_varctl.F90 @@ -332,6 +332,7 @@ module clm_varctl logical, public :: use_fates_tree_damage = .false. ! true => turn on tree damage module character(len=256), public :: fates_harvest_mode = '' ! five different harvest modes; see namelist definition character(len=256), public :: fates_stomatal_assimilation = '' ! net or gross assimilation modes + character(len=256), public :: fates_cstarvation_model = '' ! linear or exponential function 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 logical, public :: use_fates_ed_st3 = .false. ! true => static stand structure diff --git a/src/main/controlMod.F90 b/src/main/controlMod.F90 index e64572909f..643420bea5 100644 --- a/src/main/controlMod.F90 +++ b/src/main/controlMod.F90 @@ -243,6 +243,7 @@ subroutine control_init(dtime) flandusepftdat, & fates_inventory_ctrl_filename, & fates_stomatal_assimilation, & + fates_cstarvation_model, & fates_parteh_mode, & fates_seeddisp_cadence, & use_fates_tree_damage, & @@ -803,6 +804,7 @@ subroutine control_spmd() call mpi_bcast (fates_spitfire_mode, 1, MPI_INTEGER, 0, mpicom, ier) call mpi_bcast (fates_harvest_mode, len(fates_harvest_mode) , MPI_CHARACTER, 0, mpicom, ier) call mpi_bcast (fates_stomatal_assimilation, len(fates_stomatal_assimilation) , MPI_CHARACTER, 0, mpicom, ier) + call mpi_bcast (fates_cstarvation_model, len(fates_cstarvation_model) , MPI_CHARACTER, 0, mpicom, ier) call mpi_bcast (use_fates_planthydro, 1, MPI_LOGICAL, 0, mpicom, ier) call mpi_bcast (use_fates_tree_damage, 1, MPI_LOGICAL, 0, mpicom, ier) call mpi_bcast (use_fates_cohort_age_tracking, 1, MPI_LOGICAL, 0, mpicom, ier) @@ -1207,6 +1209,7 @@ subroutine control_print () write(iulog, *) ' fates_spitfire_mode = ', fates_spitfire_mode write(iulog, *) ' fates_harvest_mode = ', fates_harvest_mode write(iulog, *) ' fates_stomatal_assimilation = ', fates_stomatal_assimilation + write(iulog, *) ' fates_cstarvation_model = ', fates_cstarvation_model write(iulog, *) ' fates_paramfile = ', fates_paramfile write(iulog, *) ' fates_parteh_mode = ', fates_parteh_mode write(iulog, *) ' use_fates_planthydro = ', use_fates_planthydro diff --git a/src/utils/clmfates_interfaceMod.F90 b/src/utils/clmfates_interfaceMod.F90 index 485fc6d9e7..7309543668 100644 --- a/src/utils/clmfates_interfaceMod.F90 +++ b/src/utils/clmfates_interfaceMod.F90 @@ -58,6 +58,7 @@ module CLMFatesInterfaceMod use clm_varctl , only : use_fates_ed_prescribed_phys use clm_varctl , only : fates_harvest_mode use clm_varctl , only : fates_stomatal_assimilation + use clm_varctl , only : fates_cstarvation_model use clm_varctl , only : use_fates_inventory_init use clm_varctl , only : use_fates_fixed_biogeog use clm_varctl , only : use_fates_nocomp @@ -409,6 +410,7 @@ subroutine CLMFatesGlobals2() integer :: pass_daylength_factor_switch integer :: pass_stomatal_model integer :: pass_stomatal_assimilation + integer :: fates_cstarvation_model call t_startf('fates_globals2') @@ -555,6 +557,13 @@ subroutine CLMFatesGlobals2() call set_fates_ctrlparms('maintresp_leaf_model',ival=leafresp_method) + 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) + ! FATES logging and harvest modes pass_logging = 0 pass_lu_harvest = 0 From 7b781334bd7d049c2ce5db48298511dc1c32139d Mon Sep 17 00:00:00 2001 From: Gregory Lemieux Date: Tue, 10 Dec 2024 14:46:19 -0800 Subject: [PATCH 7/9] add FATES seed regeneration model switch to namelist This commit facilitates moving this switch from the FATES parameter file to the namelist --- bld/CLMBuildNamelist.pm | 4 ++-- bld/namelist_files/namelist_defaults_ctsm.xml | 1 + bld/namelist_files/namelist_definition_ctsm.xml | 9 +++++++++ src/main/clm_varctl.F90 | 1 + src/main/controlMod.F90 | 3 +++ src/utils/clmfates_interfaceMod.F90 | 11 +++++++++++ 6 files changed, 27 insertions(+), 2 deletions(-) diff --git a/bld/CLMBuildNamelist.pm b/bld/CLMBuildNamelist.pm index 4594e79f17..43dbda3a3a 100755 --- a/bld/CLMBuildNamelist.pm +++ b/bld/CLMBuildNamelist.pm @@ -810,7 +810,7 @@ sub setup_cmdl_fates_mode { "fates_parteh_mode","use_fates_tree_damage","fates_seeddisp_cadence","use_fates_luh","fluh_timeseries", "flandusepftdat","use_fates_potentialveg","use_fates_lupft","fates_history_dimlevel", "use_fates_daylength_factor", "use_fates_photosynth_acclimation","fates_stomatal_assimilation", - "fates_cstarvation_model" + "fates_cstarvation_model", "fates_regeneration_model" ); # dis-allow fates specific namelist items with non-fates runs @@ -4707,7 +4707,7 @@ sub setup_logic_fates { "use_fates_inventory_init","fates_seeddisp_cadence","fates_history_dimlevel", "fates_harvest_mode","fates_parteh_mode", "use_fates_cohort_age_tracking","use_fates_tree_damage", "use_fates_daylength_factor", "use_fates_photosynth_acclimation","fates_stomatal_assimilation", - "fates_cstarvation_model" + "fates_cstarvation_model", "fates_regeneration_model" ); foreach my $var ( @list ) { diff --git a/bld/namelist_files/namelist_defaults_ctsm.xml b/bld/namelist_files/namelist_defaults_ctsm.xml index c1c42d2daa..1bd53e9a86 100644 --- a/bld/namelist_files/namelist_defaults_ctsm.xml +++ b/bld/namelist_files/namelist_defaults_ctsm.xml @@ -2391,6 +2391,7 @@ lnd/clm2/surfdata_esmf/NEON/ctsm5.3.0/surfdata_1x1_NEON_TOOL_hist_2000_78pfts_c2 no_harvest net linear +default .false. .false. .false. diff --git a/bld/namelist_files/namelist_definition_ctsm.xml b/bld/namelist_files/namelist_definition_ctsm.xml index 78fa40bcfe..08ee5c18c8 100644 --- a/bld/namelist_files/namelist_definition_ctsm.xml +++ b/bld/namelist_files/namelist_definition_ctsm.xml @@ -775,6 +775,15 @@ Allowed values are: This option is older than the luhdata options and may be depricated at some point in the future. + +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 diff --git a/src/main/clm_varctl.F90 b/src/main/clm_varctl.F90 index 43370d2c1b..d2efdd476d 100644 --- a/src/main/clm_varctl.F90 +++ b/src/main/clm_varctl.F90 @@ -333,6 +333,7 @@ module clm_varctl character(len=256), public :: fates_harvest_mode = '' ! five different harvest modes; see namelist definition character(len=256), public :: fates_stomatal_assimilation = '' ! net or gross assimilation modes 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 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 logical, public :: use_fates_ed_st3 = .false. ! true => static stand structure diff --git a/src/main/controlMod.F90 b/src/main/controlMod.F90 index 643420bea5..fca17abff3 100644 --- a/src/main/controlMod.F90 +++ b/src/main/controlMod.F90 @@ -244,6 +244,7 @@ subroutine control_init(dtime) fates_inventory_ctrl_filename, & fates_stomatal_assimilation, & fates_cstarvation_model, & + fates_regeneration_model, & fates_parteh_mode, & fates_seeddisp_cadence, & use_fates_tree_damage, & @@ -805,6 +806,7 @@ subroutine control_spmd() call mpi_bcast (fates_harvest_mode, len(fates_harvest_mode) , MPI_CHARACTER, 0, mpicom, ier) call mpi_bcast (fates_stomatal_assimilation, len(fates_stomatal_assimilation) , 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 (use_fates_planthydro, 1, MPI_LOGICAL, 0, mpicom, ier) call mpi_bcast (use_fates_tree_damage, 1, MPI_LOGICAL, 0, mpicom, ier) call mpi_bcast (use_fates_cohort_age_tracking, 1, MPI_LOGICAL, 0, mpicom, ier) @@ -1210,6 +1212,7 @@ subroutine control_print () write(iulog, *) ' fates_harvest_mode = ', fates_harvest_mode write(iulog, *) ' fates_stomatal_assimilation = ', fates_stomatal_assimilation write(iulog, *) ' fates_cstarvation_model = ', fates_cstarvation_model + write(iulog, *) ' fates_regeneration_model = ', fates_regeneration_model write(iulog, *) ' fates_paramfile = ', fates_paramfile write(iulog, *) ' fates_parteh_mode = ', fates_parteh_mode write(iulog, *) ' use_fates_planthydro = ', use_fates_planthydro diff --git a/src/utils/clmfates_interfaceMod.F90 b/src/utils/clmfates_interfaceMod.F90 index 7309543668..e972ce4fc2 100644 --- a/src/utils/clmfates_interfaceMod.F90 +++ b/src/utils/clmfates_interfaceMod.F90 @@ -59,6 +59,7 @@ module CLMFatesInterfaceMod use clm_varctl , only : fates_harvest_mode use clm_varctl , only : fates_stomatal_assimilation use clm_varctl , only : fates_cstarvation_model + use clm_varctl , only : fates_regeneration_model use clm_varctl , only : use_fates_inventory_init use clm_varctl , only : use_fates_fixed_biogeog use clm_varctl , only : use_fates_nocomp @@ -411,6 +412,7 @@ subroutine CLMFatesGlobals2() integer :: pass_stomatal_model integer :: pass_stomatal_assimilation integer :: fates_cstarvation_model + integer :: fates_regeneration_model call t_startf('fates_globals2') @@ -564,6 +566,15 @@ subroutine CLMFatesGlobals2() end if call set_fates_ctrlparms('mort_cstarvation_model',ival=pass_cstarvation_model) + 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) + ! FATES logging and harvest modes pass_logging = 0 pass_lu_harvest = 0 From 011fbaf684e898848120fa76c9367647f5ff5334 Mon Sep 17 00:00:00 2001 From: Gregory Lemieux Date: Tue, 10 Dec 2024 14:59:30 -0800 Subject: [PATCH 8/9] add FATES hydro solver selection switch to namelist This commit facilitates moving this switch from the FATES parameter file to the namelist --- bld/CLMBuildNamelist.pm | 4 ++-- bld/namelist_files/namelist_defaults_ctsm.xml | 1 + bld/namelist_files/namelist_definition_ctsm.xml | 5 +++++ src/main/clm_varctl.F90 | 1 + src/main/controlMod.F90 | 3 +++ src/utils/clmfates_interfaceMod.F90 | 11 +++++++++++ 6 files changed, 23 insertions(+), 2 deletions(-) diff --git a/bld/CLMBuildNamelist.pm b/bld/CLMBuildNamelist.pm index 43dbda3a3a..72a14e1550 100755 --- a/bld/CLMBuildNamelist.pm +++ b/bld/CLMBuildNamelist.pm @@ -810,7 +810,7 @@ sub setup_cmdl_fates_mode { "fates_parteh_mode","use_fates_tree_damage","fates_seeddisp_cadence","use_fates_luh","fluh_timeseries", "flandusepftdat","use_fates_potentialveg","use_fates_lupft","fates_history_dimlevel", "use_fates_daylength_factor", "use_fates_photosynth_acclimation","fates_stomatal_assimilation", - "fates_cstarvation_model", "fates_regeneration_model" + "fates_cstarvation_model", "fates_regeneration_model", "fates_hydro_solver" ); # dis-allow fates specific namelist items with non-fates runs @@ -4707,7 +4707,7 @@ sub setup_logic_fates { "use_fates_inventory_init","fates_seeddisp_cadence","fates_history_dimlevel", "fates_harvest_mode","fates_parteh_mode", "use_fates_cohort_age_tracking","use_fates_tree_damage", "use_fates_daylength_factor", "use_fates_photosynth_acclimation","fates_stomatal_assimilation", - "fates_cstarvation_model", "fates_regeneration_model" + "fates_cstarvation_model", "fates_regeneration_model", "fates_hydro_solver" ); foreach my $var ( @list ) { diff --git a/bld/namelist_files/namelist_defaults_ctsm.xml b/bld/namelist_files/namelist_defaults_ctsm.xml index 1bd53e9a86..ede704b407 100644 --- a/bld/namelist_files/namelist_defaults_ctsm.xml +++ b/bld/namelist_files/namelist_defaults_ctsm.xml @@ -2392,6 +2392,7 @@ lnd/clm2/surfdata_esmf/NEON/ctsm5.3.0/surfdata_1x1_NEON_TOOL_hist_2000_78pfts_c2 net linear default +1D_Taylor .false. .false. .false. diff --git a/bld/namelist_files/namelist_definition_ctsm.xml b/bld/namelist_files/namelist_definition_ctsm.xml index 08ee5c18c8..ecf4886d60 100644 --- a/bld/namelist_files/namelist_definition_ctsm.xml +++ b/bld/namelist_files/namelist_definition_ctsm.xml @@ -775,6 +775,11 @@ Allowed values are: This option is older than the luhdata options and may be depricated at some point in the future. + +Set the FATES hydro solver method + + Set the FATES seed regeneration model diff --git a/src/main/clm_varctl.F90 b/src/main/clm_varctl.F90 index d2efdd476d..5aac624c04 100644 --- a/src/main/clm_varctl.F90 +++ b/src/main/clm_varctl.F90 @@ -334,6 +334,7 @@ module clm_varctl character(len=256), public :: fates_stomatal_assimilation = '' ! net or gross assimilation modes 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 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 logical, public :: use_fates_ed_st3 = .false. ! true => static stand structure diff --git a/src/main/controlMod.F90 b/src/main/controlMod.F90 index fca17abff3..6cc34d632b 100644 --- a/src/main/controlMod.F90 +++ b/src/main/controlMod.F90 @@ -245,6 +245,7 @@ subroutine control_init(dtime) fates_stomatal_assimilation, & fates_cstarvation_model, & fates_regeneration_model, & + fates_hydro_solver, & fates_parteh_mode, & fates_seeddisp_cadence, & use_fates_tree_damage, & @@ -807,6 +808,7 @@ subroutine control_spmd() call mpi_bcast (fates_stomatal_assimilation, len(fates_stomatal_assimilation) , 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 (use_fates_planthydro, 1, MPI_LOGICAL, 0, mpicom, ier) call mpi_bcast (use_fates_tree_damage, 1, MPI_LOGICAL, 0, mpicom, ier) call mpi_bcast (use_fates_cohort_age_tracking, 1, MPI_LOGICAL, 0, mpicom, ier) @@ -1213,6 +1215,7 @@ subroutine control_print () write(iulog, *) ' fates_stomatal_assimilation = ', fates_stomatal_assimilation 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_paramfile = ', fates_paramfile write(iulog, *) ' fates_parteh_mode = ', fates_parteh_mode write(iulog, *) ' use_fates_planthydro = ', use_fates_planthydro diff --git a/src/utils/clmfates_interfaceMod.F90 b/src/utils/clmfates_interfaceMod.F90 index e972ce4fc2..066711c994 100644 --- a/src/utils/clmfates_interfaceMod.F90 +++ b/src/utils/clmfates_interfaceMod.F90 @@ -60,6 +60,7 @@ module CLMFatesInterfaceMod use clm_varctl , only : fates_stomatal_assimilation use clm_varctl , only : fates_cstarvation_model use clm_varctl , only : fates_regeneration_model + use clm_varctl , only : fates_hydro_solver use clm_varctl , only : use_fates_inventory_init use clm_varctl , only : use_fates_fixed_biogeog use clm_varctl , only : use_fates_nocomp @@ -413,6 +414,7 @@ subroutine CLMFatesGlobals2() integer :: pass_stomatal_assimilation integer :: fates_cstarvation_model integer :: fates_regeneration_model + integer :: pass_hydro_solver call t_startf('fates_globals2') @@ -575,6 +577,15 @@ subroutine CLMFatesGlobals2() end if call set_fates_ctrlparms('regeneration_model',ival=pass_regeneration_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_Taylor') then + pass_hydro_solver = 3 + end if + call set_fates_ctrlparms('hydr_solver',ival=pass_hydro_solver) + ! FATES logging and harvest modes pass_logging = 0 pass_lu_harvest = 0 From 1780cc7f21fe86f419a3cf322854c40f92bb629e Mon Sep 17 00:00:00 2001 From: Gregory Lemieux Date: Tue, 10 Dec 2024 16:23:31 -0800 Subject: [PATCH 9/9] add FATES radiation model switch to the namelist This commit facilitates moving this switch from the FATES parameter file to the namelist --- bld/CLMBuildNamelist.pm | 4 ++-- bld/namelist_files/namelist_defaults_ctsm.xml | 1 + bld/namelist_files/namelist_definition_ctsm.xml | 5 +++++ src/main/clm_varctl.F90 | 1 + src/main/controlMod.F90 | 3 +++ src/utils/clmfates_interfaceMod.F90 | 8 ++++++++ 6 files changed, 20 insertions(+), 2 deletions(-) diff --git a/bld/CLMBuildNamelist.pm b/bld/CLMBuildNamelist.pm index 72a14e1550..ddba1dd4a5 100755 --- a/bld/CLMBuildNamelist.pm +++ b/bld/CLMBuildNamelist.pm @@ -810,7 +810,7 @@ sub setup_cmdl_fates_mode { "fates_parteh_mode","use_fates_tree_damage","fates_seeddisp_cadence","use_fates_luh","fluh_timeseries", "flandusepftdat","use_fates_potentialveg","use_fates_lupft","fates_history_dimlevel", "use_fates_daylength_factor", "use_fates_photosynth_acclimation","fates_stomatal_assimilation", - "fates_cstarvation_model", "fates_regeneration_model", "fates_hydro_solver" + "fates_cstarvation_model", "fates_regeneration_model", "fates_hydro_solver", "fates_radiation_model" ); # dis-allow fates specific namelist items with non-fates runs @@ -4707,7 +4707,7 @@ sub setup_logic_fates { "use_fates_inventory_init","fates_seeddisp_cadence","fates_history_dimlevel", "fates_harvest_mode","fates_parteh_mode", "use_fates_cohort_age_tracking","use_fates_tree_damage", "use_fates_daylength_factor", "use_fates_photosynth_acclimation","fates_stomatal_assimilation", - "fates_cstarvation_model", "fates_regeneration_model", "fates_hydro_solver" + "fates_cstarvation_model", "fates_regeneration_model", "fates_hydro_solver", "fates_radiation_model" ); foreach my $var ( @list ) { diff --git a/bld/namelist_files/namelist_defaults_ctsm.xml b/bld/namelist_files/namelist_defaults_ctsm.xml index ede704b407..4c3378d538 100644 --- a/bld/namelist_files/namelist_defaults_ctsm.xml +++ b/bld/namelist_files/namelist_defaults_ctsm.xml @@ -2392,6 +2392,7 @@ lnd/clm2/surfdata_esmf/NEON/ctsm5.3.0/surfdata_1x1_NEON_TOOL_hist_2000_78pfts_c2 net linear default +norman 1D_Taylor .false. .false. diff --git a/bld/namelist_files/namelist_definition_ctsm.xml b/bld/namelist_files/namelist_definition_ctsm.xml index ecf4886d60..58c030192b 100644 --- a/bld/namelist_files/namelist_definition_ctsm.xml +++ b/bld/namelist_files/namelist_definition_ctsm.xml @@ -775,6 +775,11 @@ Allowed values are: This option is older than the luhdata options and may be depricated at some point in the future. + +Set the FATES radiation model + + Set the FATES hydro solver method diff --git a/src/main/clm_varctl.F90 b/src/main/clm_varctl.F90 index 5aac624c04..319fe89ab9 100644 --- a/src/main/clm_varctl.F90 +++ b/src/main/clm_varctl.F90 @@ -334,6 +334,7 @@ module clm_varctl character(len=256), public :: fates_stomatal_assimilation = '' ! net or gross assimilation modes 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_radiation_model = '' ! Norman or two-stream radiation model character(len=256), public :: fates_hydro_solver = '' ! 1D Taylor, 2D Picard, 2D Newton 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 diff --git a/src/main/controlMod.F90 b/src/main/controlMod.F90 index 6cc34d632b..2f7580f2b6 100644 --- a/src/main/controlMod.F90 +++ b/src/main/controlMod.F90 @@ -245,6 +245,7 @@ subroutine control_init(dtime) fates_stomatal_assimilation, & fates_cstarvation_model, & fates_regeneration_model, & + fates_radiation_model, & fates_hydro_solver, & fates_parteh_mode, & fates_seeddisp_cadence, & @@ -808,6 +809,7 @@ subroutine control_spmd() call mpi_bcast (fates_stomatal_assimilation, len(fates_stomatal_assimilation) , 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_radiation_model, len(fates_radiation_model) , MPI_CHARACTER, 0, mpicom, ier) call mpi_bcast (fates_hydro_solver, len(fates_hydro_solver) , MPI_CHARACTER, 0, mpicom, ier) call mpi_bcast (use_fates_planthydro, 1, MPI_LOGICAL, 0, mpicom, ier) call mpi_bcast (use_fates_tree_damage, 1, MPI_LOGICAL, 0, mpicom, ier) @@ -1215,6 +1217,7 @@ subroutine control_print () write(iulog, *) ' fates_stomatal_assimilation = ', fates_stomatal_assimilation write(iulog, *) ' fates_cstarvation_model = ', fates_cstarvation_model write(iulog, *) ' fates_regeneration_model = ', fates_regeneration_model + write(iulog, *) ' fates_radiation_model = ', fates_radiation_model write(iulog, *) ' fates_hydro_solver = ', fates_hydro_solver write(iulog, *) ' fates_paramfile = ', fates_paramfile write(iulog, *) ' fates_parteh_mode = ', fates_parteh_mode diff --git a/src/utils/clmfates_interfaceMod.F90 b/src/utils/clmfates_interfaceMod.F90 index 066711c994..4d95908f3a 100644 --- a/src/utils/clmfates_interfaceMod.F90 +++ b/src/utils/clmfates_interfaceMod.F90 @@ -415,6 +415,7 @@ subroutine CLMFatesGlobals2() integer :: fates_cstarvation_model integer :: fates_regeneration_model integer :: pass_hydro_solver + integer :: pass_radiation_model call t_startf('fates_globals2') @@ -586,6 +587,13 @@ subroutine CLMFatesGlobals2() end if call set_fates_ctrlparms('hydr_solver',ival=pass_hydro_solver) + 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) + ! FATES logging and harvest modes pass_logging = 0 pass_lu_harvest = 0