From d8b0feebc04660c2496408992afb6380c30aa76f Mon Sep 17 00:00:00 2001 From: Gregory Lemieux Date: Tue, 10 Dec 2024 14:59:30 -0800 Subject: [PATCH] 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 | 10 ++++++++++ 6 files changed, 22 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 d039f97214..03b9a6732d 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 @@ -570,6 +571,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