Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
78e6a5d
add oversaturation correction to SoilWaterMovementMod
swensosc Jan 7, 2026
9c4b8a3
change from porosity (watsat) to effective porosity (watsat minus soi…
swensosc Jan 8, 2026
57a3e08
Update (irrigated_) rice grnfill and lfemerg.
samsrabin Jan 8, 2026
e67685b
Update ChangeLog/Sum.
samsrabin Jan 9, 2026
99c8612
Merge pull request #3686 from samsrabin/rice-params-from-agu
samsrabin Jan 9, 2026
af5f9c4
Implement dewpoint temperature check for bare ground
olyson Jan 12, 2026
60d62c3
Merge branch 'master' into oversaturation
ekluzek Jan 12, 2026
1c52618
Merge branch 'master' into dew
ekluzek Jan 12, 2026
2290837
Add comment about over_saturation temp variable type declaration and …
ekluzek Jan 12, 2026
91ebfb2
Start change files
ekluzek Jan 13, 2026
77f3013
Change bit about answer changes to reference issues in LWMG_dev
ekluzek Jan 13, 2026
09eec1f
Finalize ChangeLog
ekluzek Jan 13, 2026
19d9b8a
Merge pull request #3683 from swensosc/oversaturation
ekluzek Jan 13, 2026
47c4425
Merge branch 'master' into dew
ekluzek Jan 13, 2026
f873584
Fix for zero forc_q
olyson Jan 14, 2026
336e55f
Merge branch 'dew' of https://github.com/olyson/ctsm into dew
olyson Jan 14, 2026
f497855
Make Magnus coefficients parameters
olyson Jan 15, 2026
cc09973
Bugfix for t_grnd ice/liq coefficient check
olyson Jan 15, 2026
3a8202e
First update of Change files
ekluzek Jan 16, 2026
0af3453
Merge branch 'dew' of github.com:olyson/CTSM into dew
ekluzek Jan 16, 2026
71770fc
Fix top description
ekluzek Jan 16, 2026
271a5af
Update change files
ekluzek Jan 19, 2026
ea96a10
Merge pull request #3688 from olyson/dew
ekluzek Jan 19, 2026
d133024
Fix mksurfdata CMakeLists.txt: use SHARED for .so PIO libraries
Jan 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion bld/namelist_files/namelist_defaults_ctsm.xml
Original file line number Diff line number Diff line change
Expand Up @@ -622,7 +622,7 @@ attributes from the config_cache.xml file (with keys converted to upper-case).
<!-- The default filenames are given relative to the root directory
for the CLM2 data in the CESM distribution -->
<!-- Plant function types (relative to {csmdata}) -->
<paramfile phys="clm6_0" >lnd/clm2/paramdata/ctsm60_params.c251211.nc</paramfile>
<paramfile phys="clm6_0" >lnd/clm2/paramdata/ctsm60_params.c260108.nc</paramfile>
<paramfile phys="clm5_0" >lnd/clm2/paramdata/clm50_params.c250311.nc</paramfile>
<paramfile phys="clm4_5" >lnd/clm2/paramdata/clm45_params.c250311.nc</paramfile>

Expand Down
9 changes: 3 additions & 6 deletions doc/.ChangeLog_template
Original file line number Diff line number Diff line change
Expand Up @@ -146,12 +146,9 @@ Changes answers relative to baseline:
only by roundoff level (because order of operation changes for example). Roundoff
changes to state fields usually grow to greater than roundoff as the simulation progresses.

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:

URL for LMWG diagnostics output used to validate new climate:

If this tag changes climate list the run(s) done to evaluate the new
climate (from https://github.com/NCAR/LMWG_dev)
- issue number(s):

Other details
-------------
Expand Down
247 changes: 247 additions & 0 deletions doc/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,4 +1,251 @@
===============================================================
Tag name: ctsm5.4.009
Originator(s): olyson (Keith Oleson)
Date: Mon Jan 19 12:53:18 PM MST 2026
One-line Summary: Dewpoint Temperature check for bare ground

Purpose and description of changes
----------------------------------

Implement dewpoint temperature check for bare ground to fix RRTMG error

Cecile Hannay reported an RRTMGP crash in this 4xCO2 experiment at year 37:

NCAR/cesm_dev#246

Output from placing write statements in the CAM radiation code show that it's a baresoil patch in
a grid cell in the Arabian Penninsula. The bare soil patch occupies 99.28% of the gridcell.
Solar and longwave forcing and absorbed solar don't appear to be unreasonable, but t_grnd is 358K.

This bug fix eliminates dew flux (sets evaporation conductance to zero) x if t_grnd > forc_dewpoint, where forc_dewpoint is the dewpoint temperature at the forcing height.
This prevents large spurious negative latent heat fluxes that increase heat flux into the soil and signficantly increase surface soil temperature (t_grnd) such that soil temperature > 355K, triggering a RRTMGP error.

Contributors:
-------------
@swensosc , @wwieder , @slevis-lmwg , @dlawrenncar, ekluzek


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
----------

List of CTSM issues fixed (include CTSM Issue # and description) [one per line]:
Fixes #3589 355+ K land temperature triggers RRTMGP error

Notes of particular relevance for users
---------------------------------------

Caveats for users (e.g., need to interpolate initial conditions):
This is currently ONLY done for bare-soil, probably should be done for other landunits.

Changes to documentation: None, but needs to be added

Notes of particular relevance for developers:
---------------------------------------------

Caveats for developers (e.g., code that is duplicated that requires double maintenance):
https://github.com/ESCOMP/CTSM/issues/3694
Documents making this a function added to QSat
This should especially be done when this is added for other landunit types

Testing summary: regular
----------------
[PASS means all tests PASS; OK means tests PASS other than expected fails.]

regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):

derecho ----- OK
izumi ------- OK

If the tag used for baseline comparisons was NOT the previous tag, note that here:


Answer changes
--------------

Changes answers relative to baseline: Yes! Almost ALL cases if run long enough

Summarize any changes to answers, i.e.,
- what code configurations: All
- what platforms/compilers: All
- nature of change: same climate

climate (from https://github.com/NCAR/LMWG_dev)
- issue number(s): 135 and 136

URL for LDF diagnostics output used to validate new climate:

- ILAMB: https://webext.cgd.ucar.edu/I2000/Clm60SP_ctsmdew_1deg_Dew_2000/lnd/BUGFIX/_build_DEW/
- LDF: https://webext.cgd.ucar.edu/I2000/Clm60SP_ctsmdew_1deg_Dew_2000/lnd/BUGFIX/Clm60SP_ctsmdew_1deg_Dew_2000_2005_2019-Clm60SP_ctsmdew_1deg_Control_2000_2005_2019/setsIndex.html

Standard diagnostics results are here
Other details
-------------

Pull Requests that document the changes (include PR ids):
(https://github.com/ESCOMP/ctsm/pull)
#3688 -- Implement dewpoint temperature check for bare ground to fix RRTMGP error


===============================================================
===============================================================
Tag name: ctsm5.4.008
Originator(s): swensosc (Sean Swenson)
Date: Mon Jan 12 11:19:38 PM MST 2026
One-line Summary: Add a correction for oversaturated soil layers in SoilWaterMovement

Purpose and description of changes
----------------------------------

Add a correction for oversaturated soil layers immediately after the soil water flux calculation in SoilWaterMovementMod.

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
----------

List of CTSM issues fixed (include CTSM Issue # and description) [one per line]:
Second checkbox in #3879 -- placeholder issue soil water movement

Notes of particular relevance for users
---------------------------------------

Notes of particular relevance for developers:
---------------------------------------------

Caveats for developers (e.g., code that is duplicated that requires double maintenance):


Testing summary: regular
----------------
[PASS means all tests PASS; OK means tests PASS other than expected fails.]

regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):

derecho ----- OK
izumi ------- OK

If the tag used for baseline comparisons was NOT the previous tag, note that here:

Answer changes
--------------

Changes answers relative to baseline: Yes! Changes in most fields

Summarize any changes to answers, i.e.,
- what code configurations: All
- what platforms/compilers: All
- nature of change (larger than roundoff/same climate)

If this tag changes climate list the run(s) done to evaluate the new
climate (from https://github.com/NCAR/LMWG_dev)
- issue number: 132

URL for LMWG diagnostics output used to validate new climate:
- https://webext.cgd.ucar.edu/I20TR/ctsm5.4.004_bgc_f09_131_HIST/lnd/ctsm5.4.004_bgc_f09_Oversaturation_131b_HIST_1994_2023_vs_ctsm5.4.004_bgc_f09_131_HIST_1994_2023/website/


Other details
-------------

Pull Requests that document the changes (include PR ids):
(https://github.com/ESCOMP/ctsm/pull)
#3683 -- Oversaturation

===============================================================
===============================================================
Tag name: ctsm5.4.007
Originator(s): samrabin (Sam Rabin, UCAR/TSS)
Date: Fri Jan 9 11:53:19 MST 2026
One-line Summary: Update (irrigated_)rice grnfill and lfemerg

Purpose and description of changes
----------------------------------

This brings the parameter file in line with what I used for my AGU 2025 simulations.
- Increases grnfill from ~0.4 to 0.6.
- Increases lfemerg from ~0.01 to 0.05.

These changes should decrease rice yields.

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.)

[X] clm6_0

[ ] clm5_0

[ ] ctsm5_0-nwp

[ ] clm4_5


Notes of particular relevance for users
---------------------------------------

Changes made to namelist defaults (e.g., changed parameter values):
- New clm6_0 paramfile: ctsm60_params.c260108.nc


Testing summary:
----------------

regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):

derecho ----- OK
izumi ------- OK


Answer changes
--------------

Summarize any changes to answers, i.e.,
- what code configurations: Clm60 compsets
- what platforms/compilers: All
- nature of change (roundoff; larger than roundoff/same climate; new climate): At least larger than roundoff

Other details
-------------

Pull Requests that document the changes:
- [ESCOMP/CTSM Pull Request #3686: ctsm5.4.007: Update (irrigated_)rice grnfill and lfemerg](https://github.com/ESCOMP/CTSM/pull/3686)

===============================================================
===============================================================
Tag name: ctsm5.4.006
Originator(s): erik (Erik Kluzek)
Date: Wed Jan 7 02:49:18 PM MST 2026
Expand Down
3 changes: 3 additions & 0 deletions doc/ChangeSum
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
Tag Who Date Summary
============================================================================================================================
ctsm5.4.009 olyson 01/19/2026 Dewpoint Temperature check for bare ground
ctsm5.4.008 swensosc 01/12/2026 Add a correction for oversaturated soil layers in SoilWaterMovement (erik)
ctsm5.4.007 samrabin 01/09/2026 Update (irrigated_)rice grnfill and lfemerg
ctsm5.4.006 erik 01/07/2026 Merge b4b-dev to master
ctsm5.4.005 rgknox 12/19/2025 FATES JSON parameter files
ctsm5.4.004 samrabin 12/12/2025 Update crop parameters and maturity requirements
Expand Down
45 changes: 41 additions & 4 deletions src/biogeophys/BareGroundFluxesMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ subroutine BareGroundFluxes(bounds, num_noexposedvegp, filter_noexposedvegp, &
! !USES:
use shr_const_mod , only : SHR_CONST_RGAS
use clm_varpar , only : nlevgrnd
use clm_varcon , only : cpair, vkc, grav, denice, denh2o
use clm_varcon , only : cpair, vkc, grav, denice, denh2o, tfrz
use clm_varcon , only : beta_param, nu_param, meier_param3
use clm_varctl , only : use_lch4, z0param_method
use landunit_varcon , only : istsoil, istcrop
Expand Down Expand Up @@ -144,6 +144,19 @@ subroutine BareGroundFluxes(bounds, num_noexposedvegp, filter_noexposedvegp, &
real(r8) :: e_ref2m ! 2 m height surface saturated vapor pressure [Pa]
real(r8) :: qsat_ref2m ! 2 m height surface saturated specific humidity [kg/kg]
real(r8) :: www ! surface soil wetness [-]
real(r8) :: forc_dewpoint ! dewpoint temperature at forcing height [K]
real(r8) :: forc_e ! vapor pressure at forcing height [Pa]
real(r8) :: forc_qs ! saturated specific humidity at forcing height [kg/kg]
real(r8) :: forc_esat ! saturated vapor pressure at forcing height [Pa]
! Coefficients from Alduchov and Eskridge (1996) as used by Lawrence (2005) for Magnus dewpoint
! equation over liquid
real(r8), parameter :: A1_liq = 17.625_r8 ! [-]
real(r8), parameter :: B1_liq = 243.04_r8 ! [degC]
real(r8), parameter :: C1_liq = 610.94_r8 ! [Pa]
! Coefficients from Alduchov and Eskridge (1996) for Magnus dewpoint equation over ice
real(r8), parameter :: A1_ice = 22.587_r8 ! [-]
real(r8), parameter :: B1_ice = 273.86_r8 ! [degC]
real(r8), parameter :: C1_ice = 611.21_r8 ! [Pa]
!------------------------------------------------------------------------------

associate( &
Expand Down Expand Up @@ -405,13 +418,37 @@ subroutine BareGroundFluxes(bounds, num_noexposedvegp, filter_noexposedvegp, &
www = (h2osoi_liq(c,1)/denh2o+h2osoi_ice(c,1)/denice)/dz(c,1)/watsat(c,1)
www = min(max(www,0.0_r8),1._r8)

! Get saturated vapor pressure at forcing height
call QSat(forc_t(c), forc_pbot(c), qs = forc_qs, es = forc_esat)

! Calculate vapor pressure at forcing height and restrict to no less than value
! corresponding to 1% relative humidity
forc_e = max( (forc_q(c)*forc_pbot(c)) / (forc_q(c)+0.622_r8), 0.01_r8*forc_esat)

! Magnus expression for dew point
! Equation (7) from Lawrence (2005)
if (t_grnd(c) < tfrz) then ! ice coefficients
forc_dewpoint = B1_ice*log(forc_e/C1_ice) / (A1_ice - log(forc_e/C1_ice))
else ! liquid water coefficients
forc_dewpoint = B1_liq*log(forc_e/C1_liq) / (A1_liq - log(forc_e/C1_liq))
end if
forc_dewpoint = forc_dewpoint + tfrz

!changed by K.Sakaguchi. Soilbeta is used for evaporation
if (dqh(p) > 0._r8) then !dew (beta is not applied, just like rsoil used to be)
raiw = forc_rho(c)/(raw)
if (t_grnd(c) > forc_dewpoint) then ! no dew
raiw = 0._r8
else ! dew
raiw = forc_rho(c)/(raw)
end if
else
if(do_soilevap_beta())then
! Lee and Pielke 1992 beta is applied
raiw = soilbeta(c)*forc_rho(c)/(raw)
if (t_grnd(c) > forc_dewpoint) then ! no dew
raiw = 0._r8
else ! dew
! Lee and Pielke 1992 beta is applied
raiw = soilbeta(c)*forc_rho(c)/(raw)
end if
endif
if(do_soil_resistance_sl14())then
! Swenson & Lawrence 2014 soil resistance is applied
Expand Down
13 changes: 9 additions & 4 deletions src/biogeophys/SoilWaterMovementMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -1147,8 +1147,7 @@ subroutine soilwater_moisture_form(bounds, num_hydrologyc, &
real(r8) :: vLiqIter(bounds%begc:bounds%endc,1:nlevsoi) ! iteration increment for the volumetric liquid water content (v/v)
real(r8) :: vLiqRes(bounds%begc:bounds%endc,1:nlevsoi) ! residual for the volumetric liquid water content (v/v)

real(r8) :: dwat_temp
real(r8) :: over_saturation
real(r8) :: over_saturation ! Amount of water that over saturates this soil layer [kg/m2]
!-----------------------------------------------------------------------

associate(&
Expand All @@ -1163,6 +1162,7 @@ subroutine soilwater_moisture_form(bounds, num_hydrologyc, &
zwt => soilhydrology_inst%zwt_col , & ! Input: [real(r8) (:) ] water table depth (m)
qout_col => soilhydrology_inst%qout_col , & ! Output: [real(r8) (:,:) ] soil water out of the bottom, mm h2o/s
qin_col => soilhydrology_inst%qin_col , & ! Output: [real(r8) (:,:) ] soil water into the bottom, mm h2o/s
eff_porosity => soilstate_inst%eff_porosity_col , & ! Input: [real(r8) (:,:) ] effective porosity = porosity - vol_ice
watsat => soilstate_inst%watsat_col , & ! Input: [real(r8) (:,:) ] volumetric soil water at saturation (porosity)
smp_l => soilstate_inst%smp_l_col , & ! Input: [real(r8) (:,:) ] soil matrix potential [mm]
hk_l => soilstate_inst%hk_l_col , & ! Input: [real(r8) (:,:) ] hydraulic conductivity (mm/s)
Expand All @@ -1183,8 +1183,6 @@ subroutine soilwater_moisture_form(bounds, num_hydrologyc, &
! set number of layers over which to solve soilwater movement
nlayers = nbedrock(c)

dwat_temp = 0.

! initialize the number of substeps
nsubstep=0

Expand Down Expand Up @@ -1403,6 +1401,13 @@ subroutine soilwater_moisture_form(bounds, num_hydrologyc, &
! save number of adaptive substeps used during time step
nsubsteps(c) = nsubstep

! check for over-saturated layers and move excess upward
do j = nlayers,2,-1
over_saturation = max(h2osoi_liq(c,j)-(eff_porosity(c,j)*m_to_mm*dz(c,j)),0._r8)
h2osoi_liq(c,j) = min(eff_porosity(c,j)*m_to_mm*dz(c,j), h2osoi_liq(c,j))
h2osoi_liq(c,j-1) = h2osoi_liq(c,j-1) + over_saturation
end do

! check for negative moisture values
do j = 2, nlayers
if(h2osoi_liq(c,j) < -1e-6_r8) then
Expand Down
Loading