Skip to content

[WIP] Add NVP (Non-Vascular Plant) Layer in CTSM#3927

Draft
huitang-earth wants to merge 121 commits into
ESCOMP:masterfrom
huitang-earth:ctsm5.4.028_nvp
Draft

[WIP] Add NVP (Non-Vascular Plant) Layer in CTSM#3927
huitang-earth wants to merge 121 commits into
ESCOMP:masterfrom
huitang-earth:ctsm5.4.028_nvp

Conversation

@huitang-earth

@huitang-earth huitang-earth commented Apr 13, 2026

Copy link
Copy Markdown

Description:

This PR introduces a physically explicit representation of non-vascular plants (NVP; e.g., moss and lichen) in CTSM–FATES and its biophysical effect by assigning them to a dedicated vertical layer in CTSM, and a NVP PFT in FATES. The core architectural decision is to use layer 0 of the soil-snow layer structure to accommodate NVP and its growth (i.e., changes in height) when it is present. This layer integrates consistently into CLM’s radiation (under snow), thermal, and hydrology schemes, while coupling to FATES (NGEET/fates#1556) for canopy radiation (without snow) and photosynthesis (see the following call graph).
Note: The implementation is not fully ready yet and is still open for discussion.

Key implementation details in CLM:

  • Adds NVP as an explicit surface layer at index 0, controlled by col%nvp_layer_active and col%jbot_sno, with geometry (dz, z, zi) updated each daily timestep via UpdateNVPLayer.
  • Extends snow radiation to include NVP absorption at layer 0 with NVP specific optical parameters (when under snow).
  • Integrates NVP into the thermal solver with its own thermal properties.
  • Adds NVP specific hydraulic properties, water retention curve, and water balance subroutine NVPWaterBalance_Column.
  • Adds interface with FATES for exchanging NVP structure properties, radiation flux, temperature and water status.
diagram

Collaborators:

@rosiealice

Expectation of Answer Changes:

This PR is expected to produce answer changes when NVP is active and NVP layer is present:

  • Surface energy balance modified due to new top boundary condition at layer 0 (CLM, FATES)
  • Soil temperature profiles altered due to NVP thermal properties (CLM)
  • Hydrology affected by additional water storage and evaporation pathway (CLM)
  • Carbon fluxes (GPP/NPP) changed due to NVP photosynthesis and modified PAR environment (FATES)

No answer changes are expected when NVP is disabled.

Description of generative AI usage

Claude code has been used for porting changes into the new CTSM version and designing the overall structure. The call graph is also generated by Claude code.

Any User Interface Changes (namelist or namelist defaults changes): Yes.

Does this create a need to change or add documentation? Yes

… for energy flux (with frac_h2osfc) and solar radiation (implicit)
@samsrabin samsrabin changed the title Add NVP (Non-Vascular Plant) Layer in CTSM [WIP] Add NVP (Non-Vascular Plant) Layer in CTSM Jun 15, 2026
@samsrabin samsrabin marked this pull request as draft June 15, 2026 20:52
huitang-earth and others added 4 commits June 18, 2026 02:06
The description of subroutine NVPColdStartIce() suggests that it is intended to set the NVP layer (0) moisture content to be 100% ice, within the pore space available. However, before this commit, it was setting both liquid AND ICE content to zero. This led to 0/0 later in the code.
@ESCOMP ESCOMP unlocked this conversation Jun 26, 2026
do c = bounds%begc, bounds%endc
if (col%nvp_layer_active(c) .and. col%dz(c,0) > 0._r8) then
max_ice_nvp = watsat_nvp * denice * col%dz(c,0)
waterstate_inst%h2osoi_ice_col(c,0) = max_ice_nvp

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will change this to be frozen only if temperature is ≤ freezing. That would be consistent with WaterStateType%InitCold().

Some text in the subroutine description suggests this is handled elsewhere, but it's cryptic, and I don't understand it. It would be easier to understand if this subroutine chose liquid or frozen itself. (Make sure to update the subroutine description!)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants