diff --git a/bld/CLMBuildNamelist.pm b/bld/CLMBuildNamelist.pm index 083ce3b667..b7b183be3e 100755 --- a/bld/CLMBuildNamelist.pm +++ b/bld/CLMBuildNamelist.pm @@ -816,7 +816,7 @@ sub setup_cmdl_fates_mode { } else { # dis-allow fates specific namelist items with non-fates runs my @list = ( "fates_spitfire_mode", "use_fates_planthydro", "use_fates_ed_st3", "use_fates_ed_prescribed_phys", - "use_fates_cohort_age_tracking","use_fates_inventory_init","use_fates_fixed_biogeog", + "use_fates_cohort_age_tracking","use_fates_inventory_init","use_fates_dbh_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", @@ -4896,7 +4896,7 @@ sub setup_logic_fates { if (&value_is_true( $nl_flags->{'use_fates'}) ) { add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'fates_paramfile', 'phys'=>$nl_flags->{'phys'}); my @list = ( "use_fates_planthydro", "use_fates_ed_st3", "use_fates_ed_prescribed_phys", - "use_fates_inventory_init","fates_seeddisp_cadence","fates_history_dimlevel", + "use_fates_inventory_init","use_fates_dbh_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", "fates_photosynth_acclimation", "fates_stomatal_model", "fates_stomatal_assimilation", "fates_leafresp_model", "fates_cstarvation_model", @@ -4961,6 +4961,10 @@ sub setup_logic_fates { } } } + my $var = "use_fates_dbh_init"; + if ( &value_is_true($nl->get_value($var)) && ( !&value_is_true($nl->get_value("use_fates_nocomp")))) { + $log->fatal_error("$var can only be .true. use_fates_nocomp is .true." ); + } # make sure that fates landuse x pft mode has the necessary run mode configurations my $var = "use_fates_lupft"; if ( defined($nl->get_value($var)) ) { diff --git a/bld/namelist_files/namelist_defaults_ctsm.xml b/bld/namelist_files/namelist_defaults_ctsm.xml index ef5e6919db..9bd99600db 100644 --- a/bld/namelist_files/namelist_defaults_ctsm.xml +++ b/bld/namelist_files/namelist_defaults_ctsm.xml @@ -2715,6 +2715,7 @@ lnd/clm2/surfdata_esmf/NEON/ctsm5.4.0/surfdata_1x1_NEON_TOOL_hist_2000_78pfts_c2 .false. .false. .false. +.false. .false. .false. .false. diff --git a/bld/namelist_files/namelist_definition_ctsm.xml b/bld/namelist_files/namelist_definition_ctsm.xml index 179704e518..75a96a6c5f 100644 --- a/bld/namelist_files/namelist_definition_ctsm.xml +++ b/bld/namelist_files/namelist_definition_ctsm.xml @@ -881,6 +881,14 @@ Full pathname to the inventory initialization control file. (Only relevant if FATES is on). + + +Initialize cohorts at coldstart with diameter at breast height instead of density +(Applies only if use_fates_nocomp=.true.) +(Only relevant if FATES is on). + + Setting for what types of FATES history to be allocate and diff --git a/cime_config/testdefs/testlist_clm.xml b/cime_config/testdefs/testlist_clm.xml index f4648c5c4d..90f6ca000b 100644 --- a/cime_config/testdefs/testlist_clm.xml +++ b/cime_config/testdefs/testlist_clm.xml @@ -4104,6 +4104,14 @@ + + + + + + + + diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdNoCompInitDbh/include_user_mods b/cime_config/testdefs/testmods_dirs/clm/FatesColdNoCompInitDbh/include_user_mods new file mode 100644 index 0000000000..ea160c525f --- /dev/null +++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdNoCompInitDbh/include_user_mods @@ -0,0 +1 @@ +../FatesColdNoComp \ No newline at end of file diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdNoCompInitDbh/shell_commands b/cime_config/testdefs/testmods_dirs/clm/FatesColdNoCompInitDbh/shell_commands new file mode 100644 index 0000000000..438b95731f --- /dev/null +++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdNoCompInitDbh/shell_commands @@ -0,0 +1,10 @@ +SRCDIR=`./xmlquery SRCROOT --value` +CASEDIR=`./xmlquery CASEROOT --value` +FATESDIR=$SRCDIR/src/fates/ +FATESPARAMFILE=$CASEDIR/fates_params_init_dbh.json + +cp $FATESDIR/parameter_files/fates_params_default.json $FATESPARAMFILE + +$FATESDIR/tools/modify_fates_paramfile.py --overwrite --fin $FATESPARAMFILE --param fates_recruit_init_seed --values 0.01 --indices all + +echo "fates_paramfile = '$FATESPARAMFILE'" >> $CASEDIR/user_nl_clm \ No newline at end of file diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdNoCompInitDbh/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdNoCompInitDbh/user_nl_clm new file mode 100644 index 0000000000..9450396fc4 --- /dev/null +++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdNoCompInitDbh/user_nl_clm @@ -0,0 +1 @@ +use_fates_dbh_init = .true. \ No newline at end of file diff --git a/src/main/clm_varctl.F90 b/src/main/clm_varctl.F90 index 4c36cb21d1..9e42c3ff21 100644 --- a/src/main/clm_varctl.F90 +++ b/src/main/clm_varctl.F90 @@ -357,6 +357,7 @@ module clm_varctl logical, public :: use_fates_ed_st3 = .false. ! true => static stand structure logical, public :: use_fates_ed_prescribed_phys = .false. ! true => prescribed physiology logical, public :: use_fates_inventory_init = .false. ! true => initialize fates from inventory + logical, public :: use_fates_dbh_init = .false. ! true => initialize cohorts with dbh instead of density (nocomp only) 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 diff --git a/src/main/controlMod.F90 b/src/main/controlMod.F90 index fc8036e75f..70cf132dc7 100644 --- a/src/main/controlMod.F90 +++ b/src/main/controlMod.F90 @@ -239,6 +239,7 @@ subroutine control_init(dtime) use_fates_cohort_age_tracking, & use_fates_ed_prescribed_phys, & use_fates_inventory_init, & + use_fates_dbh_init, & use_fates_fixed_biogeog, & use_fates_nocomp, & use_fates_sp, & @@ -845,6 +846,7 @@ subroutine control_spmd() call mpi_bcast (use_fates_ed_st3, 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_dbh_init, 1, MPI_LOGICAL, 0, mpicom, ier) call mpi_bcast (use_fates_fixed_biogeog, 1, MPI_LOGICAL, 0, mpicom, ier) call mpi_bcast (use_fates_nocomp, 1, MPI_LOGICAL, 0, mpicom, ier) call mpi_bcast (use_fates_sp, 1, MPI_LOGICAL, 0, mpicom, ier) @@ -1266,6 +1268,7 @@ subroutine control_print () 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 + write(iulog, *) ' use_fates_dbh_init = ',use_fates_dbh_init write(iulog, *) ' use_fates_fixed_biogeog = ', use_fates_fixed_biogeog write(iulog, *) ' use_fates_nocomp = ', use_fates_nocomp write(iulog, *) ' use_fates_sp = ', use_fates_sp diff --git a/src/utils/clmfates_interfaceMod.F90 b/src/utils/clmfates_interfaceMod.F90 index 5584ff1705..ae2a409f7c 100644 --- a/src/utils/clmfates_interfaceMod.F90 +++ b/src/utils/clmfates_interfaceMod.F90 @@ -68,6 +68,7 @@ module CLMFatesInterfaceMod use clm_varctl , only : fates_radiation_model use clm_varctl , only : fates_electron_transport_model use clm_varctl , only : use_fates_inventory_init + use clm_varctl , only : use_fates_dbh_init use clm_varctl , only : use_fates_fixed_biogeog use clm_varctl , only : use_fates_nocomp use clm_varctl , only : use_fates_sp @@ -430,6 +431,7 @@ subroutine CLMFatesGlobals2() integer :: pass_ed_prescribed_phys integer :: pass_planthydro integer :: pass_inventory_init + integer :: pass_dbh_init integer :: pass_is_restart integer :: pass_cohort_age_tracking integer :: pass_tree_damage @@ -674,6 +676,12 @@ subroutine CLMFatesGlobals2() call set_fates_ctrlparms('inventory_ctrl_file',cval=fates_inventory_ctrl_filename) + if(use_fates_dbh_init) then + pass_dbh_init = 1 + else + pass_dbh_init = 0 + end if + call set_fates_ctrlparms('use_dbh_init',ival=pass_dbh_init) ! Check through FATES parameters to see if all have been set call set_fates_ctrlparms('check_allset')