diff --git a/.gitmodules b/.gitmodules index 23408dcf0c..a2cadc8deb 100644 --- a/.gitmodules +++ b/.gitmodules @@ -36,7 +36,7 @@ fxDONOTUSEurl = https://github.com/NGEET/fates [submodule "cism"] path = components/cism url = https://github.com/ESCOMP/CISM-wrapper -fxtag = cismwrap_2_2_010 +fxtag = cismwrap_2_2_011 fxrequired = ToplevelRequired # Standard Fork to compare to with "git fleximod test" to ensure personal forks aren't committed fxDONOTUSEurl = https://github.com/ESCOMP/CISM-wrapper @@ -68,7 +68,7 @@ fxDONOTUSEurl = https://github.com/ESCOMP/mizuRoute [submodule "ccs_config"] path = ccs_config url = https://github.com/ESMCI/ccs_config_cesm.git -fxtag = ccs_config_cesm1.0.61_add_domain_ne3np4.pg2_1 +fxtag = ccs_config_cesm1.0.66 fxrequired = ToplevelRequired # Standard Fork to compare to with "git fleximod test" to ensure personal forks aren't committed fxDONOTUSEurl = https://github.com/ESMCI/ccs_config_cesm.git diff --git a/WhatsNewInCTSM5.4.md b/WhatsNewInCTSM5.4.md index fe721ae312..28a84b61db 100755 --- a/WhatsNewInCTSM5.4.md +++ b/WhatsNewInCTSM5.4.md @@ -1,4 +1,4 @@ -# What's new in CTSM 5.4 (tag `ctsm5.4.0xx`) +# What's new in CTSM 5.4 (tag `ctsm5.4.002`) # Purpose and description of changes since CTSM 5.3 (tag `ctsm5.3.021`) diff --git a/bld/CLMBuildNamelist.pm b/bld/CLMBuildNamelist.pm index a205dd8ef3..bcf87620c4 100755 --- a/bld/CLMBuildNamelist.pm +++ b/bld/CLMBuildNamelist.pm @@ -4501,7 +4501,7 @@ sub setup_logic_cropcal_streams { 'lnd_tuning_mode'=>$nl_flags->{'lnd_tuning_mode'} ); if ( &value_is_true($cropcals_rx_adapt) ) { - add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'stream_fldFileName_gdd20_baseline', 'stream_gdd20_seasons'=>$stream_gdd20_seasons); + add_default($opts, $nl_flags->{'inputdata_rootdir'}, $definition, $defaults, $nl, 'stream_fldFileName_gdd20_baseline', 'stream_gdd20_seasons'=>$stream_gdd20_seasons, 'lnd_tuning_mode'=>$nl_flags->{'lnd_tuning_mode'}); } } diff --git a/bld/namelist_files/namelist_defaults_ctsm.xml b/bld/namelist_files/namelist_defaults_ctsm.xml index 74f0b9cbb8..df76f2feaf 100644 --- a/bld/namelist_files/namelist_defaults_ctsm.xml +++ b/bld/namelist_files/namelist_defaults_ctsm.xml @@ -455,9 +455,9 @@ attributes from the config_cache.xml file (with keys converted to upper-case). 0.85d00 0.98d00 0.03d00 -0.28d-4 +0.58d-4 0.010d00 -0.71d-4 +0.75d-4 0.34d00 0.33d00 75.d00 @@ -467,7 +467,7 @@ attributes from the config_cache.xml file (with keys converted to upper-case). 95. 1.8d00 0.6d00 - 0.35d00 + 0.3d00 6.5d00 @@ -577,7 +577,7 @@ attributes from the config_cache.xml file (with keys converted to upper-case). Sturm1997 Jordan1991 -Jordan1991 +Sturm1997 Jordan1991 Sturm1997 @@ -622,7 +622,7 @@ attributes from the config_cache.xml file (with keys converted to upper-case). -lnd/clm2/paramdata/clm60_params.ctsm6_li2024.c250822.nc +lnd/clm2/paramdata/ctsm60_params.c251124.nc lnd/clm2/paramdata/clm50_params.c250311.nc lnd/clm2/paramdata/clm45_params.c250311.nc @@ -2280,7 +2280,7 @@ lnd/clm2/surfdata_esmf/NEON/ctsm5.4.0/surfdata_1x1_NEON_TOOL_hist_2000_78pfts_c2 2000 -lnd/clm2/cropdata/calendars/processed/gdds_20250809_025305.tweaked_latlons.nc +lnd/clm2/cropdata/calendars/processed/cultivar_gdds.c251120.tweaked_latlons.nc lnd/clm2/cropdata/calendars/processed/gdds_20230829_161011.tweaked_latlons.nc lnd/clm2/cropdata/calendars/processed/gdds_20230829_161011.tweaked_latlons.nc lnd/clm2/cropdata/calendars/processed/gdds_20230829_161011.tweaked_latlons.nc @@ -2295,7 +2295,10 @@ lnd/clm2/surfdata_esmf/NEON/ctsm5.4.0/surfdata_1x1_NEON_TOOL_hist_2000_78pfts_c2 lnd/clm2/cropdata/calendars/processed/360x720_120830_ESMFmesh_c20210507_cdf5.tweaked_latlons.nc lnd/clm2/cropdata/calendars/processed/swindow_starts_ggcmi_crop_calendar_phase3_v1.01.2000-2000.20231005_145103.tweaked_latlons.nc lnd/clm2/cropdata/calendars/processed/swindow_ends_ggcmi_crop_calendar_phase3_v1.01.2000-2000.20231005_145103.tweaked_latlons.nc -lnd/clm2/cropdata/calendars/processed/20230714_cropcals_pr2_1deg.actually2deg.1980-2009.from_GDDB20.interpd_halfdeg.tweaked_latlons.nc +lnd/clm2/cropdata/calendars/processed/gdd20_baseline.c251120.tweaked_latlons.nc +lnd/clm2/cropdata/calendars/processed/20230714_cropcals_pr2_1deg.actually2deg.1980-2009.from_GDDB20.interpd_halfdeg.tweaked_latlons.nc +lnd/clm2/cropdata/calendars/processed/20230714_cropcals_pr2_1deg.actually2deg.1980-2009.from_GDDB20.interpd_halfdeg.tweaked_latlons.nc +lnd/clm2/cropdata/calendars/processed/20230714_cropcals_pr2_1deg.actually2deg.1980-2009.from_GDDB20.interpd_halfdeg.tweaked_latlons.nc lnd/clm2/cropdata/calendars/processed/gdd20bl.copied_from.gdds_20230829_161011.v2.tweaked_latlons.nc lnd/clm2/cropdata/calendars/processed/sdates_ggcmi_crop_calendar_phase3_v1.01_nninterp-hcru_hcru_mt13.2000-2000.20230728_165845.tweaked_latlons.nc lnd/clm2/cropdata/calendars/processed/hdates_ggcmi_crop_calendar_phase3_v1.01_nninterp-hcru_hcru_mt13.2000-2000.20230728_165845.tweaked_latlons.nc diff --git a/bld/unit_testers/build-namelist_test.pl b/bld/unit_testers/build-namelist_test.pl index 8028b8d8ff..5f08b726d0 100755 --- a/bld/unit_testers/build-namelist_test.pl +++ b/bld/unit_testers/build-namelist_test.pl @@ -845,6 +845,11 @@ sub cat_and_create_namelistinfile { namelst=>"stream_fldfilename_atm_c14='/dev/null'", phys=>"clm6_0", }, + "c14_meshfile_none" =>{ options=>"-envxml_dir . -bgc bgc", + namelst=>"stream_fldfilename_atm_c14='/dev/null', " . + "stream_meshfile_atm_c14='none'", + phys=>"clm6_0", + }, "lightres no cn" =>{ options=>"-bgc sp -envxml_dir . -light_res 360x720", namelst=>"", phys=>"clm5_0", @@ -1447,11 +1452,6 @@ sub cat_and_create_namelistinfile { namelst=>"use_soil_moisture_streams=T,soilm_tintalgo='linear'", phys=>"clm5_0", }, - "c14_meshfile_none" =>{ options=>"-envxml_dir . -bgc bgc", - namelst=>"stream_fldfilename_atm_c14='/dev/null', " . - "stream_meshfile_atm_c14='none'", - phys=>"clm6_0", - }, "missing_ndep_file" =>{ options=>"-envxml_dir . -bgc bgc -ssp_rcp SSP5-3.4", namelst=>"", phys=>"clm5_0", diff --git a/ccs_config b/ccs_config index d686615fac..76370cc085 160000 --- a/ccs_config +++ b/ccs_config @@ -1 +1 @@ -Subproject commit d686615faceac30705b199f592808e3558ac176b +Subproject commit 76370cc08587fd653458cdfb2e0b220b3168ded6 diff --git a/cime_config/config_component.xml b/cime_config/config_component.xml index e991288cc5..2860165114 100644 --- a/cime_config/config_component.xml +++ b/cime_config/config_component.xml @@ -436,7 +436,7 @@ Caveats: char - v1,v2,v3,latest + v1,v2,v3,v4,latest latest run_component_ctsm env_run.xml diff --git a/components/cism b/components/cism index 84767787b7..d18e0a3e1a 160000 --- a/components/cism +++ b/components/cism @@ -1 +1 @@ -Subproject commit 84767787b78a3547497cd3f1b452e775cdc56f95 +Subproject commit d18e0a3e1aa97e8525e239904d6b0dea39886f05 diff --git a/doc/ChangeLog b/doc/ChangeLog index 1d44c7b7c9..926a8c008b 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,4 +1,109 @@ =============================================================== +Tag name: ctsm5.4.003 +Originator(s): (Samuel Levis,UCAR/TSS,303-665-1310) +Date: Thu Dec 11 12:02:28 PM MST 2025 +One-line Summary: Merge post5.4 branch to master + +Purpose and description of changes +---------------------------------- + +Update namelist_defaults: +- parameters for the li2024crujra fire method: PR Post 5.4 namelist updates #3626 by Will Wieder +- snow_thermal_cond_glc_method to Sturm1997 for clm6: PR #3626 by Will Wieder +- clm paramfile to ctsm60_params.c251124.nc for clm6: PR #3626 by Will Wieder +- stream_fldfilename_cultivar_gdds and stream_fldFileName_gdd20_baseline to latest files: PR post-5.4.n00: New crop calendar inputs and updated params (omni02) #3618 by Sam Rabin +- Update default NEON inputs to v4: PR #3626 by Will Wieder + +Update cismwrap_2_2_010 to cismwrap_2_2_011 and ccs_config_cesm1.0.61_add_domain_ne3np4.pg2_1 to ccs_config_cesm1.0.66: PR #3626 by Will Wieder + +Remove fsat effect on baf_peatf in the fire code and update the corresponding documentation in doc/source/tech_note/Fire/CLM50_Tech_Note_Fire.rst: PR #3626 by Will Wieder and Fang Li + +Fix for RRTMGP errors caused by high surface temperatures: PR #3643 by Keith Oleson + +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.] + +[X] clm6_0 + +[X] clm5_0 + +[X] ctsm5_0-nwp + +[ ] clm4_5 + + +Bugs fixed +---------- +List of CTSM issues fixed (include CTSM Issue # and description) [one per line]: +Fixes #3589 355+ K land temperature triggers RRTMGP error, by Keith Oleson +Fixes #3598 Change default snow_thermal_cond_glc_method, by Will Wieder +Fixes #3608 Fire calibration for CLM6 release, by Will Wieder and Fang Li +Fixes #3594 Update NEON data to v4, by Will Wieder +Fixes #3321 Crop calendar inputs needed with CRU-JRA climate, by Sam Rabin +Fixes #3658 Move c14_meshfile_none warning test to fatal error (resolves a build_namelist failure) + +Notes of particular relevance for users +--------------------------------------- +Changes made to namelist defaults (e.g., changed parameter values): + Namelist defaults changes listed in "Purpose and description of changes" +Changes to the datasets (e.g., parameter, surface or initial files): + References to new crop calendar inputs and new paramfile in "Purpose and description of changes" +Changes to documentation: + Updates to documentation mentioned in "Purpose and description of changes" + +Notes of particular relevance for developers: +--------------------------------------------- +Caveats for developers (e.g., code that is duplicated that requires double maintenance): + I will mention here something that took effect with ctsm5.4.000 (today's discussion reminded me): + We made two history fields default inactive (VEGWPLN, VEGWPPD) to allow LII2* tests to pass the COMPARE_base_no_interp phase. The problem and suggested solution appear in issues #3617 #3620. + +Testing summary: +---------------- + [PASS means all tests PASS; OK means tests PASS other than expected fails.] + + build-namelist tests (if CLMBuildNamelist.pm has changed): + + derecho - OK (the usual 2 tests expected to fail) + + python testing (if python code has changed; see instructions in python/README.md; document testing done): + + derecho - PASS + + regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing): + + derecho ----- OK + izumi ------- OK + +Answer changes +-------------- + +Changes answers relative to baseline: Yes + + Summarize any changes to answers, i.e., + - what code configurations: Clm60 due to updates to CLM6 and Clm50*G due to updated cism + - what platforms/compilers: All + - nature of change: larger than roundoff, possibly new climate + + If this tag changes climate describe the run(s) done to evaluate the new + climate (put details of the simulations in the experiment database) + - casename: post-5.4.n02.ctsm5.4.000_HIST_test0 and an issue including links to diagnostics is expeced soon with most likely url https://github.com/NCAR/LMWG_dev/issues/130 + +Other details +------------- +List any git submodules updated (cime, rtm, mosart, cism, fates, etc.): + cismwrap_2_2_010 to cismwrap_2_2_011 + ccs_config_cesm1.0.61_add_domain_ne3np4.pg2_1 to ccs_config_cesm1.0.66 + +Pull Requests that document the changes (include PR ids): + https://github.com/ESCOMP/ctsm/pull/3655 + +=============================================================== +=============================================================== Tag name: ctsm5.4.002 Originator(s): erik (Erik Kluzek,UCAR/TSS,303-497-1326) Date: Wed Dec 10 03:35:12 PM MST 2025 diff --git a/doc/ChangeSum b/doc/ChangeSum index 42d9cfcb0e..d8d0267019 100644 --- a/doc/ChangeSum +++ b/doc/ChangeSum @@ -1,5 +1,6 @@ Tag Who Date Summary ============================================================================================================================ + ctsm5.4.003 multiple 12/11/2025 Merge post5.4 branch to master ctsm5.4.002 erik 12/10/2025 Start using CMIP7 Carbon Isotope datasets ctsm5.4.001 samrabin 12/08/2025 Merge b4b-dev ctsm5.4.000 multiple 12/04/2025 Merge alpha-ctsm5.4.CMIP7 to master diff --git a/doc/source/tech_note/Fire/CLM50_Tech_Note_Fire.rst b/doc/source/tech_note/Fire/CLM50_Tech_Note_Fire.rst index 84dd2bcaaf..0483567ff5 100644 --- a/doc/source/tech_note/Fire/CLM50_Tech_Note_Fire.rst +++ b/doc/source/tech_note/Fire/CLM50_Tech_Note_Fire.rst @@ -354,9 +354,9 @@ The burned area due to peat fires is given as :math:`{A}_{b}`: .. math:: :label: 23.37 - A_{b} = c \ f_{cli,p} f_{peat} (1 - f_{sat} ) A_{g} + A_{b} = c \ f_{cli,p} f_{peat} A_{g} -where :math:`c` (s\ :sup:`-1`) is a constant; :math:`f_{cli,p}` represents the effect of climate on the burned area; :math:`f_{peat}` is the fractional coverage of peatland in the grid cell; and :math:`f_{sat}` is the fraction of the grid cell with a water table at the surface or higher. :math:`c` = 0.17 :math:`\times` 10 :sup:`-3` hr\ :sup:`-1` for tropical peat fires and :math:`c` = 0.9 :math:`\times` 10 :sup:`-5` hr :sup:`-1` for boreal peat fires are derived using an inverse method, by matching simulations to earlier studies: about 2.4 Mha peatland was burned over Indonesia in 1997 (:ref:`Page et al. 2002 `) and the average burned area of peat fires in Western Canada was 0.2 Mha yr :sup:`-1` for 1980-1999 (:ref:`Turetsky et al. 2004 `). +where :math:`c` (s\ :sup:`-1`) is a constant; :math:`f_{cli,p}` represents the effect of climate on the burned area; and :math:`f_{peat}` is the fractional coverage of peatland in the grid cell. :math:`c` = 0.17 :math:`\times` 10 :sup:`-3` hr\ :sup:`-1` for tropical peat fires and :math:`c` = 0.9 :math:`\times` 10 :sup:`-5` hr :sup:`-1` for boreal peat fires are derived using an inverse method, by matching simulations to earlier studies: about 2.4 Mha peatland was burned over Indonesia in 1997 (:ref:`Page et al. 2002 `) and the average burned area of peat fires in Western Canada was 0.2 Mha yr :sup:`-1` for 1980-1999 (:ref:`Turetsky et al. 2004 `). For tropical peat fires, :math:`f_{cli,p}` is set as a function of long-term precipitation :math:`P_{60d}` : diff --git a/python/ctsm/site_and_regional/tower_arg_parse.py b/python/ctsm/site_and_regional/tower_arg_parse.py index 33b3db2afa..10ede664db 100644 --- a/python/ctsm/site_and_regional/tower_arg_parse.py +++ b/python/ctsm/site_and_regional/tower_arg_parse.py @@ -195,7 +195,7 @@ def get_parser(args, description, valid_neon_sites, valid_plumber_sites): dest="user_version", required=False, type=str, - choices=["v1", "v2", "v3"], + choices=["v1", "v2", "v3", "v4"], ) parser.add_argument( diff --git a/src/biogeochem/CNFireLi2024Mod.F90 b/src/biogeochem/CNFireLi2024Mod.F90 index d4c05f63bc..66f5b10fba 100644 --- a/src/biogeochem/CNFireLi2024Mod.F90 +++ b/src/biogeochem/CNFireLi2024Mod.F90 @@ -187,7 +187,6 @@ subroutine CNFireArea (this, bounds, num_soilc, filter_soilc, num_soilp, filter_ rswf_min => pftcon%rswf_min , & ! Input: rswf_max => pftcon%rswf_max , & ! Input: btran2 => this%cnfire_base_type%btran2_patch , & ! Input: [real(r8) (:) ] root zone soil wetness - fsat => saturated_excess_runoff_inst%fsat_col , & ! Input: [real(r8) (:) ] fractional area with water table at surface wf2 => waterdiagnosticbulk_inst%wf2_col , & ! Input: [real(r8) (:) ] soil water as frac. of whc for top 0.17 m is_cwd => decomp_cascade_con%is_cwd , & ! Input: [logical (:) ] TRUE => pool is a cwd pool @@ -517,10 +516,6 @@ subroutine CNFireArea (this, bounds, num_soilc, filter_soilc, num_soilp, filter_ g = col%gridcell(c) ! For crop - ! cropf_col(c) * col%wtgcell(c) > 0.1_r8 is added because fires are rare in - ! gridcells with limited cropland coverage based on GFED5. Also, this helps to - ! avoid abm (crop fire peak month) regridding error from 0.05 degree to lower resolution - ! The condition could be removed if CLM supports the use of mode in abm inputs regridding if( forc_t(c) >= SHR_CONST_TKFRZ .and. patch%itype(p) > nc4_grass .and. & kmo == abm_lf(c) .and. & burndate(p) >= 999 .and. patch%wtcol(p) > 0._r8 )then ! catch crop burn time @@ -556,8 +551,7 @@ subroutine CNFireArea (this, bounds, num_soilc, filter_soilc, num_soilp, filter_ end if else baf_peatf(c) = boreal_peatfire_c/secsphr*exp(-SHR_CONST_PI*(max(wf2(c),0._r8)/borpeat_fire_soilmoist_denom))* & - max(0._r8,min(1._r8,(tsoi17(c)-SHR_CONST_TKFRZ)/10._r8))*peatf_lf(c)* & - (1._r8-fsat(c)) + max(0._r8,min(1._r8,(tsoi17(c)-SHR_CONST_TKFRZ)/10._r8))*peatf_lf(c) end if end do ! diff --git a/src/biogeophys/CanopyFluxesMod.F90 b/src/biogeophys/CanopyFluxesMod.F90 index 3b0d990b21..8b26100284 100644 --- a/src/biogeophys/CanopyFluxesMod.F90 +++ b/src/biogeophys/CanopyFluxesMod.F90 @@ -437,6 +437,8 @@ subroutine CanopyFluxes(bounds, num_exposedvegp, filter_exposedvegp, real(r8), parameter :: k_cyl_area = 1.0_r8 !departure from cylindrical area real(r8), parameter :: k_internal = 0.0_r8 !self-absorbtion of leaf/stem longwave real(r8), parameter :: min_stem_diameter = 0.05_r8 !minimum stem diameter for which to calculate stem interactions + real(r8), parameter :: min_lai = 0.1_r8 !minimum elai threshold to add esai to sa_leaf calculation + !value is arbitrary but has been effective in avoiding RRTMGP errors in CESM3 development simulations integer :: dummy_to_make_pgi_happy !------------------------------------------------------------------------------ @@ -745,15 +747,26 @@ subroutine CanopyFluxes(bounds, num_exposedvegp, filter_exposedvegp, ! adjust for departure of cylindrical stem model sa_stem(p) = k_cyl_area * sa_stem(p) - ! ! only calculate separate leaf/stem heat capacity for trees - ! and shrubs if dbh is greater than some minimum value - ! (set surface area for stem, and fraction absorbed by stem to zero) + ! and shrubs if dbh is greater than some minimum value. + ! otherwise, set surface area for stem and fraction absorbed by stem to zero, + ! and add esai to sa_leaf. if(.not.(is_tree(patch%itype(p)) .or. is_shrub(patch%itype(p))) & .or. dbh(p) < min_stem_diameter) then frac_rad_abs_by_stem(p) = 0.0_r8 sa_stem(p) = 0.0_r8 sa_leaf(p) = sa_leaf(p) + esai(p) + else + ! Add esai to sa_leaf if elai is less than threshold. + ! Intended to avoid small sa_leaf which leads to small leaf conductance + ! and high leaf temperature. This in turn can lead to unrealistically + ! high surface temperatures passed to the atmospheric model (The RRTMGP + ! component in particular, which returns an error and stops the model + ! if the surface temperature is greater than 355K). + ! See https://github.com/ESCOMP/CTSM/issues/3589 for more info. + if(elai(p) < min_lai) then + sa_leaf(p) = sa_leaf(p) + esai(p) + endif endif ! if using Satellite Phenology mode, calculate leaf and stem biomass