Skip to content

Conversation

@ychnli
Copy link
Contributor

@ychnli ychnli commented Aug 15, 2025

Purpose

This PR closes #1205 and #1185 and implements methods for running standalone canopy at Fluxnet sites.

To-do

  • Plant hydraulics was previously used only to compute the leaf water potential. Now, if our moisture stress function is not a function of $\psi_{leaf}$, there is no need to solve plant hydraulics. We should allow for this flexibility when creating the Canopy model. We would need to move the root distribution function from PlantHydraulics.jl into soil moisture stress.
  • The existing soil moisture stress functions are problematic at several fluxnet sites. We need to think about how we should resolve this for site-level simulations.
  • A global run using the piecewise soil moisture stress and prognostic soil

Content

Main changes

  • Adds modular soil moisture stress: new soil moisture stress parameterizations can be added just like other canopy component models. Instead of computing $\beta_m$ wherever it is used, it is now stored in the cache. The pre-existing soil moisture stress which was based on leaf water potential is represented by the TuzetMoistureStressModel.
  • Adds an empirical soil moisture stress functional form commonly used in other LSMs. This is computed as:
$$\beta_m = \beta_0 \int_{-H}^0 dz\, \left( \frac{\theta(z) - \theta_w(z)}{\theta_c(z) - \theta_w(z)} \right)^c R(z)$$

where $\theta$, $\theta_w$, and $\theta_c$ are (possibly depth-dependent) soil water content, wilting point, and field capacity. The latter are two thresholds that can either be specified by the user or by the soil hydrology model using standard matric potentials. $c > 0$ is a curvature parameter and $\beta_0 \in [0, 1]$ is an "intrinsic moisture stress" used in Mengoli et al. (2025). $R(z)$ is the root probability distribution and integrates to 1.

  • Add an option to construct a soil driver for Fluxnet, so that we can run standalone canopy at Fluxnet sites. This is added as a kwarg for get_data_dates and prescribed_forcing_fluxnet, false by default.
  • Previously, we took $\psi_{root}$ as a driver when constructing PrescribedGroundConditions. This was used in our plant hydraulics scheme to compute leaf water potential. Now, we instead take the soil water content $\theta_{root}$, which is a variable (SWC) provided by most Fluxnet sites. This is converted to $\psi$ via a retention curve supplied by the user.

Smaller changes

  • rename FrequencyBasedCallback to PeriodicCallback, which makes more sense
  • When using LandSimulation, we call make_PModel_callback if we are using the P-model via a new method required_model_callbacks which dispatches on the land component models.
  • Previously, atmospheric CO2 concentration was hardcoded to be a constant in fluxnet. Now, we read in the measured values at each site.
  • In general, fluxnet2015 sites do not have all required forcing variables at the beginning of the record. Typically C_CO2 or SWC will be missing at the beginning. Thus, we now find all times where all variables are available, and take the extrema of this set to get the nominal start_date and stop_date.
  • Some fluxnet2015 sites have non-integer time offsets (e.g., in Australia), which can now be converted to a Dates.Period

  • I have read and checked the items on the review checklist.

@ychnli ychnli force-pushed the yl/soil-moisture-stress branch 2 times, most recently from df7fbc5 to 602babf Compare August 20, 2025 18:54
@ychnli ychnli force-pushed the yl/soil-moisture-stress branch from 3178fa3 to 4ced716 Compare August 20, 2025 20:46
@ychnli ychnli changed the title Soil moisture stress parameterizations Modular soil moisture stress, standalone canopy at fluxnet sites Aug 20, 2025
@ychnli ychnli marked this pull request as ready for review August 20, 2025 20:56
@ychnli ychnli requested review from juliasloan25 and kmdeck August 20, 2025 22:56
@kmdeck kmdeck linked an issue Aug 21, 2025 that may be closed by this pull request
@kmdeck kmdeck mentioned this pull request Aug 21, 2025
31 tasks
AlexisRenchon added a commit that referenced this pull request Aug 28, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractSoilMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: ychnli <[email protected]>
AlexisRenchon added a commit that referenced this pull request Aug 28, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractSoilMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: ychnli <[email protected]>

[skip ci]
AlexisRenchon added a commit that referenced this pull request Aug 29, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractSoilMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: ychnli <[email protected]>

[skip ci]
AlexisRenchon added a commit that referenced this pull request Aug 29, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractSoilMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: ychnli <[email protected]>

[skip ci]
AlexisRenchon added a commit that referenced this pull request Sep 2, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractSoilMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: ychnli <[email protected]>

[skip ci]
Comment on lines +9 to 12
pmodel_cb = ClimaLand.make_PModel_callback(FT, start_date, dt, canopy)

# add this callback to the CallbackSet with driver, diag
cb = SciMLBase.CallbackSet(driver_cb, diag_cb, pmodel_cb);
Copy link
Member

Choose a reason for hiding this comment

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

Since this is handled within LandSimulation after the callback changes, we can omit this here

AlexisRenchon added a commit that referenced this pull request Sep 3, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractSoilMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: ychnli <[email protected]>

[skip ci]
AlexisRenchon added a commit that referenced this pull request Sep 3, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractSoilMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: ychnli <[email protected]>

[skip ci]
AlexisRenchon added a commit that referenced this pull request Sep 3, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractSoilMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

NOTE: some new formatting it seems using JuliaFormatter v1

Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: ychnli <[email protected]>

[skip ci]
AlexisRenchon added a commit that referenced this pull request Sep 3, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractSoilMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

NOTE: some new formatting it seems using JuliaFormatter v1

Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: ychnli <[email protected]>

[skip ci]
AlexisRenchon added a commit that referenced this pull request Sep 3, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractSoilMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

NOTE: some new formatting it seems using JuliaFormatter v1

Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: ychnli <[email protected]>

[skip ci]
AlexisRenchon added a commit that referenced this pull request Sep 3, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractSoilMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

NOTE: some new formatting it seems using JuliaFormatter v1

Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: ychnli <[email protected]>

[skip ci]
AlexisRenchon added a commit that referenced this pull request Sep 5, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractSoilMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

NOTE: some new formatting it seems using JuliaFormatter v1

Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: ychnli <[email protected]>

[skip ci]
AlexisRenchon added a commit that referenced this pull request Sep 5, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractSoilMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

NOTE: some new formatting it seems using JuliaFormatter v1

Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: ychnli <[email protected]>

[skip ci]
AlexisRenchon added a commit that referenced this pull request Sep 5, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractSoilMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

NOTE: some new formatting it seems using JuliaFormatter v1

Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: ychnli <[email protected]>

[skip ci]
AlexisRenchon added a commit that referenced this pull request Sep 5, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractSoilMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

NOTE: some new formatting it seems using JuliaFormatter v1

Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: ychnli <[email protected]>

[skip ci]
AlexisRenchon added a commit that referenced this pull request Sep 5, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractSoilMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

NOTE: some new formatting it seems using JuliaFormatter v1

Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: ychnli <[email protected]>

[skip ci]
AlexisRenchon added a commit that referenced this pull request Sep 5, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractSoilMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

NOTE: some new formatting it seems using JuliaFormatter v1

Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: ychnli <[email protected]>
AlexisRenchon added a commit that referenced this pull request Sep 8, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractSoilMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

Co-authored-by: ychnli <[email protected]>
Co-authored-by: kmdeck <[email protected]>
Co-authored-by: AlexisRenchon <[email protected]>
AlexisRenchon added a commit that referenced this pull request Sep 8, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractSoilMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

Co-authored-by: ychnli <[email protected]>
Co-authored-by: kmdeck <[email protected]>
Co-authored-by: AlexisRenchon <[email protected]>
juliasloan25 pushed a commit that referenced this pull request Sep 12, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractSoilMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

Co-authored-by: ychnli <[email protected]>
Co-authored-by: kmdeck <[email protected]>
Co-authored-by: AlexisRenchon <[email protected]>
juliasloan25 added a commit that referenced this pull request Sep 12, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component type: AbstractMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

Co-authored-by: ychnli <[email protected]>
Co-authored-by: kmdeck <[email protected]>
Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: juliasloan25 <[email protected]>
juliasloan25 added a commit that referenced this pull request Sep 12, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

Co-authored-by: ychnli <[email protected]>
Co-authored-by: kmdeck <[email protected]>
Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: juliasloan25 <[email protected]>
juliasloan25 added a commit that referenced this pull request Sep 12, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

Co-authored-by: ychnli <[email protected]>
Co-authored-by: kmdeck <[email protected]>
Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: juliasloan25 <[email protected]>
juliasloan25 added a commit that referenced this pull request Sep 12, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

Co-authored-by: ychnli <[email protected]>
Co-authored-by: kmdeck <[email protected]>
Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: juliasloan25 <[email protected]>
juliasloan25 added a commit that referenced this pull request Sep 12, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

Co-authored-by: ychnli <[email protected]>
Co-authored-by: kmdeck <[email protected]>
Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: juliasloan25 <[email protected]>
juliasloan25 added a commit that referenced this pull request Sep 12, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

Co-authored-by: ychnli <[email protected]>
Co-authored-by: kmdeck <[email protected]>
Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: juliasloan25 <[email protected]>
juliasloan25 added a commit that referenced this pull request Sep 13, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

Co-authored-by: ychnli <[email protected]>
Co-authored-by: kmdeck <[email protected]>
Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: juliasloan25 <[email protected]>
kmdeck added a commit that referenced this pull request Sep 14, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

Co-authored-by: ychnli <[email protected]>
Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: juliasloan25 <[email protected]>
Co-authored-by: kmdeck <[email protected]>
kmdeck added a commit that referenced this pull request Sep 15, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

Co-authored-by: ychnli <[email protected]>
Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: juliasloan25 <[email protected]>
Co-authored-by: kmdeck <[email protected]>
kmdeck added a commit that referenced this pull request Sep 15, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

Co-authored-by: ychnli <[email protected]>
Co-authored-by: juliasloan25 <[email protected]>
Co-authored-by: kmdeck <[email protected]>
juliasloan25 added a commit that referenced this pull request Sep 15, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

Co-authored-by: ychnli <[email protected]>
Co-authored-by: kmdeck <[email protected]>
Co-authored-by: AlexisRenchon <[email protected]>
Co-authored-by: juliasloan25 <[email protected]>
ThanhNguyen428 pushed a commit that referenced this pull request Oct 29, 2025
This commits adds a portion of Yuchen Li PR #1330,
a new Canopy component: AbstractMoistureStressModel,
with 3 methods: the existing one (Tuzet) which was previously
in PlantHydraulics, a Piecewise method using dry to wet soil moisture,
and no moisture stress.

Co-authored-by: ychnli <[email protected]>
Co-authored-by: juliasloan25 <[email protected]>
Co-authored-by: kmdeck <[email protected]>
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.

Soil moisture stress parameterization Moisture factor

3 participants