diff --git a/.gitmodules b/.gitmodules
index 3b7de3fd60..0771c90237 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -28,7 +28,7 @@
[submodule "fates"]
path = src/fates
url = https://github.com/NGEET/fates
-fxtag = sci.1.80.4_api.37.0.0
+fxtag = sci.1.80.11_api.37.0.0
fxrequired = AlwaysRequired
# Standard Fork to compare to with "git fleximod test" to ensure personal forks aren't committed
fxDONOTUSEurl = https://github.com/NCAR/fates-release
diff --git a/bld/CLMBuildNamelist.pm b/bld/CLMBuildNamelist.pm
index ab0aab0cc5..93004ad1c4 100755
--- a/bld/CLMBuildNamelist.pm
+++ b/bld/CLMBuildNamelist.pm
@@ -2118,17 +2118,21 @@ sub setup_logic_roughness_methods {
my ($opts, $nl_flags, $definition, $defaults, $nl, $physv) = @_;
add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'z0param_method',
- 'phys'=>$nl_flags->{'phys'} );
+ 'phys'=>$nl_flags->{'phys'} , 'use_fates'=>$nl_flags->{'use_fates'});
my $var = remove_leading_and_trailing_quotes( $nl->get_value("z0param_method") );
if ( $var ne "Meier2022" && $var ne "ZengWang2007" ) {
$log->fatal_error("$var is incorrect entry for the namelist variable z0param_method; expected Meier2022 or ZengWang2007");
}
my $phys = $physv->as_string();
- if ( $phys eq "clm4_5" || $phys eq "clm5_0" ) {
- if ( $var eq "Meier2022" ) {
+ if ( $var eq "Meier2022" ) {
+ if ( $phys eq "clm4_5" || $phys eq "clm5_0" ) {
$log->fatal_error("z0param_method = $var and phys = $phys, but this method has been tested only with clm6_0 and later versions; to use with earlier versions, disable this error, and add Meier2022 parameters to the corresponding params file");
}
+ # Make sure that fates and meier2022 are not both active due to issue #2932
+ if ( &value_is_true($nl_flags->{'use_fates'}) ) {
+ $log->fatal_error("z0param_method = $var and use_fates currently are not compatible. Please update the z0param_method to ZengWang2007. See issue #2932 for more information.")
+ }
}
}
#-------------------------------------------------------------------------------
diff --git a/bld/namelist_files/namelist_defaults_ctsm.xml b/bld/namelist_files/namelist_defaults_ctsm.xml
index cee72ca5cf..64e00527fe 100644
--- a/bld/namelist_files/namelist_defaults_ctsm.xml
+++ b/bld/namelist_files/namelist_defaults_ctsm.xml
@@ -540,7 +540,7 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
ZengWang2007
-Meier2022
+Meier2022
.true.
.false.
diff --git a/bld/unit_testers/build-namelist_test.pl b/bld/unit_testers/build-namelist_test.pl
index d42487cfdb..a3630f3286 100755
--- a/bld/unit_testers/build-namelist_test.pl
+++ b/bld/unit_testers/build-namelist_test.pl
@@ -163,10 +163,10 @@ sub cat_and_create_namelistinfile {
#
# Figure out number of tests that will run
#
-my $ntests = 3263;
+my $ntests = 3264;
if ( defined($opts{'compare'}) ) {
- $ntests += 1979;
+ $ntests += 1980;
}
plan( tests=>$ntests );
@@ -1185,6 +1185,10 @@ sub cat_and_create_namelistinfile {
namelst=>"use_hydrstress=.true.",
phys=>"clm5_0",
},
+ "useMeierwithFATES" =>{ options=>"-bgc fates -envxml_dir . -no-megan",
+ namelst=>"z0param_method=Meier2022",
+ phys=>"clm5_0",
+ },
"noanthro_w_crop" =>{ options=>"-envxml_dir . -res 0.9x1.25 -bgc bgc -crop -use_case 1850_noanthro_control",
namelst=>"",
phys=>"clm5_0",
diff --git a/cime_config/testdefs/testmods_dirs/clm/FatesColdAllVars/user_nl_clm b/cime_config/testdefs/testmods_dirs/clm/FatesColdAllVars/user_nl_clm
index 92434df000..203aa8f717 100644
--- a/cime_config/testdefs/testmods_dirs/clm/FatesColdAllVars/user_nl_clm
+++ b/cime_config/testdefs/testmods_dirs/clm/FatesColdAllVars/user_nl_clm
@@ -8,7 +8,7 @@ use_fates_tree_damage = .true.
hist_ndens = 1
hist_fincl1 = 'FATES_TLONGTERM',
'FATES_TGROWTH','FATES_SEEDS_IN_GRIDCELL_PF','FATES_SEEDS_OUT_GRIDCELL_PF','FATES_NCL_AP',
-'FATES_NPATCH_AP','FATES_VEGC_AP','FATES_SECONDAREA_ANTHRODIST_AP','FATES_SECONDAREA_DIST_AP',
+'FATES_NPATCH_AP','FATES_VEGC_AP','FATES_SECONDARY_ANTHRODISTAGE_AP','FATES_SECONDARY_AREA_AP',
'FATES_FUEL_AMOUNT_APFC','FATES_STOREC_TF_USTORY_SZPF','FATES_STOREC_TF_CANOPY_SZPF',
'FATES_CROWNAREA_CLLL','FATES_ABOVEGROUND_MORT_SZPF',
'FATES_ABOVEGROUND_PROD_SZPF','FATES_NPLANT_SZAP','FATES_NPLANT_CANOPY_SZAP',
@@ -56,4 +56,5 @@ hist_fincl1 = 'FATES_TLONGTERM',
'FATES_PARSUN_CL','FATES_PARSHA_CL','FATES_LAISUN_CLLL','FATES_LAISHA_CLLL','FATES_LAISUN_CLLLPF',
'FATES_LAISHA_CLLLPF','FATES_PARPROF_DIR_CLLLPF','FATES_PARPROF_DIF_CLLLPF','FATES_LAISUN_CL','FATES_LAISHA_CL',
'FATES_PARPROF_DIR_CLLL','FATES_PARPROF_DIF_CLLL','FATES_NET_C_UPTAKE_CLLL','FATES_CROWNFRAC_CLLLPF',
-'FATES_LBLAYER_COND_AP','FATES_STOMATAL_COND_AP'
+'FATES_LBLAYER_COND_AP','FATES_STOMATAL_COND_AP','FATES_TLONGTERM','FATES_PRIMARY_AREA_AP','FATES_NPP_LU',
+'FATES_GPP_LU'
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 0dc446448b..a79058bf08 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,4 +1,90 @@
===============================================================
+Tag name: ctsm5.3.022
+Originator(s): glemieux (Gregory Lemieux, LBNL, glemieux@lbl.gov)
+Date: Thu Feb 6 11:22:48 MST 2025
+One-line Summary: Update FATES namelist build to avoid Meier2022
+
+Purpose and description of changes
+----------------------------------
+
+This tag brings in three updates, the primary of which is an update to the namelist
+build to avoid running FATES with roughness method Meier2022 in light of recently
+discovered incompatibility between FATES and this method. FATES will now used
+ZengWang2007 for all run mode.
+
+The other two updates are fairly minor changes. One is a B4B change to the order in
+which the use_fates_luh flag is passed to FATES. The other is an update to history
+outputs for the FatesColdAllVars testmod per a recent FATES-side update.
+
+
+Significant changes to scientifically-supported configurations
+--------------------------------------------------------------
+
+Does this tag change answers significantly for any of the following physics configurations?
+(Details of any changes will be given in the "Answer changes" section below.)
+
+ [Put an [X] in the box for any configuration with significant answer changes.]
+
+[ ] clm6_0
+
+[ ] clm5_0
+
+[ ] ctsm5_0-nwp
+
+[ ] clm4_5
+
+
+Bugs fixed
+----------
+
+ #2932 - 'Meier 2022' z0 parameterization causes errors with FATES
+
+Testing summary:
+----------------
+
+ [PASS means all tests PASS; OK means tests PASS other than expected fails.]
+
+ build-namelist tests (if CLMBuildNamelist.pm has changed):
+
+ derecho - PASS
+
+ regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):
+
+ derecho ----- OK
+ izumi ------- OK
+
+ fates tests: (give name of baseline if different from CTSM tagname, normally fates baselines are fates--)
+ derecho ----- OK
+ izumi ------- OK
+
+If the tag used for baseline comparisons was NOT the previous tag, note that here:
+
+ fates suite tested against fates-sci.1.80.10_api.37.0.0-ctsm5.3.021
+
+Answer changes
+--------------
+
+Changes answers relative to baseline: Yes, only some FATES tests
+
+ The FATES tag has been updated from sci.1.80.4_api.37.0.0 to sci.1.80.11_api.37.0.0,
+ which includes a number of bug fixes some of which result in changes to some baselines.
+ Additional, all tests using Clm60Fates based compsets have DIFFs due to the roughness
+ method update.
+
+Other details
+-------------
+List any git submodules updated (cime, rtm, mosart, cism, fates, etc.):
+ fates: sci.1.80.4_api.37.0.0 -> sci.1.80.11_api.37.0.0
+
+Pull Requests that document the changes (include PR ids):
+(https://github.com/ESCOMP/ctsm/pull)
+ https://github.com/ESCOMP/CTSM/pull/2934
+ https://github.com/ESCOMP/CTSM/pull/2936
+ https://github.com/ESCOMP/CTSM/pull/2898
+ https://github.com/NGEET/FATES/pull/1273
+
+===============================================================
+===============================================================
Tag name: ctsm5.3.021
Originator(s): samrabin (Sam Rabin, UCAR/TSS)
Date: Wed 29 Jan 2025 04:21:40 PM MST
diff --git a/doc/ChangeSum b/doc/ChangeSum
index e411947225..e4f4a7455f 100644
--- a/doc/ChangeSum
+++ b/doc/ChangeSum
@@ -1,5 +1,6 @@
Tag Who Date Summary
============================================================================================================================
+ ctsm5.3.022 glemieux 02/06/2025 Update FATES namelist build to avoid Meier2022
ctsm5.3.021 samrabin 01/29/2025 Standardize time metadata (release tag for ctsm5.3)
ctsm5.3.020 samrabin 01/17/2025 Merge b4b-dev
ctsm5.3.019 olyson 01/14/2025 Stop running 0th time step
diff --git a/src/fates b/src/fates
index 296e1d6a45..48b3085f65 160000
--- a/src/fates
+++ b/src/fates
@@ -1 +1 @@
-Subproject commit 296e1d6a45f05a800073d376286d0537d2290e96
+Subproject commit 48b3085f65bd00f7ee1eb2c134a6af188a639dbc
diff --git a/src/main/controlMod.F90 b/src/main/controlMod.F90
index e8121519aa..c07909c67e 100644
--- a/src/main/controlMod.F90
+++ b/src/main/controlMod.F90
@@ -518,6 +518,11 @@ subroutine control_init(dtime)
errMsg(sourcefile, __LINE__))
end if
+ if (z0param_method == 'Meier2022') then
+ call endrun(msg=' ERROR: Surface roughness parameterization Meier2022 is not compatible with FATES.'//&
+ errMsg(sourcefile, __LINE__))
+ end if
+
else
! These do default to false anyway, but this emphasizes they
diff --git a/src/utils/clmfates_interfaceMod.F90 b/src/utils/clmfates_interfaceMod.F90
index 269189d1b7..bee69cce45 100644
--- a/src/utils/clmfates_interfaceMod.F90
+++ b/src/utils/clmfates_interfaceMod.F90
@@ -301,10 +301,11 @@ subroutine CLMFatesGlobals1(surf_numpft,surf_numcft,maxsoil_patches)
integer,intent(in) :: surf_numpft
integer,intent(in) :: surf_numcft
integer,intent(out) :: maxsoil_patches
- integer :: pass_biogeog
- integer :: pass_nocomp
- integer :: pass_sp
+ integer :: pass_use_fixed_biogeog
+ integer :: pass_use_nocomp
+ integer :: pass_use_sp
integer :: pass_masterproc
+ integer :: pass_use_luh2
logical :: verbose_output
type(fates_param_reader_ctsm_impl) :: var_reader
@@ -321,25 +322,25 @@ subroutine CLMFatesGlobals1(surf_numpft,surf_numcft,maxsoil_patches)
! Send parameters individually
if(use_fates_fixed_biogeog)then
- pass_biogeog = 1
+ pass_use_fixed_biogeog = 1
else
- pass_biogeog = 0
+ pass_use_fixed_biogeog = 0
end if
- call set_fates_ctrlparms('use_fixed_biogeog',ival=pass_biogeog)
+ call set_fates_ctrlparms('use_fixed_biogeog',ival=pass_use_fixed_biogeog)
if(use_fates_nocomp)then
- pass_nocomp = 1
+ pass_use_nocomp = 1
else
- pass_nocomp = 0
+ pass_use_nocomp = 0
end if
- call set_fates_ctrlparms('use_nocomp',ival=pass_nocomp)
+ call set_fates_ctrlparms('use_nocomp',ival=pass_use_nocomp)
if(use_fates_sp)then
- pass_sp = 1
+ pass_use_sp = 1
else
- pass_sp = 0
+ pass_use_sp = 0
end if
- call set_fates_ctrlparms('use_sp',ival=pass_sp)
+ call set_fates_ctrlparms('use_sp',ival=pass_use_sp)
if(masterproc)then
pass_masterproc = 1
@@ -348,6 +349,14 @@ subroutine CLMFatesGlobals1(surf_numpft,surf_numcft,maxsoil_patches)
end if
call set_fates_ctrlparms('masterproc',ival=pass_masterproc)
+ ! FATES landuse modes
+ if(use_fates_luh) then
+ pass_use_luh2 = 1
+ else
+ pass_use_luh2 = 0
+ end if
+ call set_fates_ctrlparms('use_luh2',ival=pass_use_luh2)
+
end if
@@ -395,7 +404,6 @@ subroutine CLMFatesGlobals2()
integer :: pass_is_restart
integer :: pass_cohort_age_tracking
integer :: pass_tree_damage
- integer :: pass_use_luh
integer :: pass_use_potentialveg
integer :: pass_num_luh_states
integer :: pass_num_luh_transitions
@@ -540,16 +548,12 @@ subroutine CLMFatesGlobals2()
! FATES landuse modes
if(use_fates_luh) then
- pass_use_luh = 1
pass_num_luh_states = num_landuse_state_vars
pass_num_luh_transitions = num_landuse_transition_vars
else
- pass_use_luh = 0
pass_num_luh_states = 0
pass_num_luh_transitions = 0
end if
-
- call set_fates_ctrlparms('use_luh2',ival=pass_use_luh)
call set_fates_ctrlparms('num_luh2_states',ival=pass_num_luh_states)
call set_fates_ctrlparms('num_luh2_transitions',ival=pass_num_luh_transitions)