Soil Biogeochemistry

This component model is available for use, but is still under development and is not yet fully debugged. Note that errors in this component do not propagate back to other component models.

Model Structure

ClimaLand.Soil.Biogeochemistry.SoilCO2ModelType
SoilCO2Model

A model for simulating the production and transport of CO₂ in the soil with dynamic source and diffusion terms.

ClimaLand v1: SoilCO2 is still under testing; in particular, in global runs, an instability appears in some columns, and the prognostic equation does not enforce the positivity of CO2.

  • parameters: the parameter set

  • domain: the soil domain, using ClimaCore.Domains

  • boundary_conditions: the boundary conditions, of type NamedTuple

  • sources: A tuple of sources, each of type AbstractSource

  • drivers: Drivers

  • Δt: Model timestep in seconds (used for the O2_f tendency limiter); pass FT(0) to disable the hard cap

source

Parameter Structure

ClimaLand.Soil.Biogeochemistry.SoilCO2ModelParametersType
SoilCO2ModelParameters{FT <: AbstractFloat, PSE}

A struct for storing parameters of the SoilCO2Model.

All of these parameters are currently treated as global constants.

  • D_ref: Diffusion coefficient for CO₂ in air at standard temperature and pressure (m² s⁻¹)

  • D_ref_o2: Diffusion coefficient for O₂ in air at standard temperature and pressure (m² s⁻¹)

  • D_liq: Diffusivity of soil C substrate in liquid (unitless)

  • V_ref_sx: Maximum respiration rate at Trefsx (kg C m-3 s-1)

  • T_ref_sx: Reference temperature for the centered Arrhenius form (K)

  • Ea_sx: Activation energy (J mol-1)

  • kM_sx: Michaelis constant (kg C m-3)

  • kM_o2: Michaelis constant for O2 (m3 m-3)

  • O2_f_atm: Volumetric fraction of O₂ in atmospheric air (reference value for boundary condition), dimensionless

  • D_oa: Diffusion coefficient of oxygen in air, dimensionless

  • p_sx: Fraction of soil carbon that is considered soluble, dimensionless

  • M_C: Molar mass of carbon (kg/mol)

  • M_O2: Molar mass of oxygen (kg/mol)

  • K_H_co2_298: Henry's law constant for CO2 at 298K (mol/(m³·Pa))

  • dln_K_H_co2_dT: Temperature coefficient for CO2 Henry's law (K)

  • K_H_o2_298: Henry's law constant for O2 at 298K (mol/(m³·Pa))

  • dln_K_H_o2_dT: Temperature coefficient for O2 Henry's law (K)

  • T_ref_henry: Reference temperature for Henry's law (K), Sander (2015)

  • T_exp_diffusivity: Temperature exponent for free-air gas diffusivity correction (dimensionless), Ryan et al. (2018)

  • earth_param_set: Physical constants used Clima-wide

source

Model-specific Types

ClimaLand.Soil.Biogeochemistry.AtmosCO2StateBCType
AtmosCO2StateBC <: ClimaLand.AbstractBC

Set the CO2 concentration to the atmospheric one. Stores physical constants needed for the boundary flux calculation.

  • R: Universal gas constant (J/(mol·K))

  • M_C: Molar mass of carbon (kg/mol)

source
ClimaLand.Soil.Biogeochemistry.AtmosO2StateBCType
AtmosO2StateBC{FT} <: ClimaLand.AbstractBC

Set the O2 mass concentration to the atmospheric one. Stores physical constants needed for the boundary flux calculation.

  • R: Universal gas constant (J/(mol·K))

  • M_O2: Molar mass of oxygen (kg/mol)

  • O2_f_atm: Atmospheric O2 volumetric fraction (dimensionless)

source
ClimaLand.Soil.Biogeochemistry.AbstractSoilDriverType
AbstractSoilDriver

An abstract type for drivers of soil CO2 production and diffusion. These are soil temperature, soil moisture, root carbon, soil organic matter and microbe carbon, and atmospheric pressure. Soil temperature and moisture, as well as soc, vary in space (horizontally and vertically) and time. Atmospheric pressure vary in time (defined at the surface only, not with depth).

source
ClimaLand.Soil.Biogeochemistry.SoilDriversType
SoilDrivers

A container which passes in the soil drivers to the biogeochemistry model. These drivers are either of type Prescribed (for standalone mode) or Prognostic (for running with a prognostic model for soil temp and moisture).

  • met: Soil temperature and moisture drivers - Prescribed or Prognostic

  • atmos: Prescribed or coupled atmospheric variables

source
ClimaLand.Soil.Biogeochemistry.PrescribedMetType
PrescribedMet <: AbstractSoilDriver

A container which holds the prescribed functions for soil temperature and moisture.

This is meant for use when running the biogeochemistry model in standalone mode, without a prognostic soil model.

  • temperature: The temperature of the soil, of the form f(z::FT,t) where FT <: AbstractFloat

  • volumetric_liquid_fraction: Soil moisture, of the form f(z::FT,t) FT <: AbstractFloat

  • ν: Soil porosity (m³ m⁻³)

  • θ_a100: Air-filled porosity at soil water potential of -100 cm H₂O (~ 10 Pa)

  • b: Absolute value of the slope of the line relating log(ψ) versus log(S) (unitless)

source

Functions of State

ClimaLand.Soil.Biogeochemistry.volumetric_air_contentFunction
volumetric_air_content(θ_w::FT,
                       ν::FT,
                       ) where {FT}

Computes the volumetric air content (θ_a) in the soil, which is related to the total soil porosity (ν) and volumetric soil water content (θ_w = θ_l+θ_i).

Note: The effectiveporosity function provides numerical stability when θa approaches zero by accounting for dissolved gas in liquid water.

source
ClimaLand.Soil.Biogeochemistry.co2_diffusivityFunction
co2_diffusivity(
                T_soil::FT,
                θ_w::FT,
                P_sfc::FT,
                θ_a100::FT,
                b::FT,
                ν::FT,
                params::SoilCO2ModelParameters{FT},
                ) where {FT}

Computes the diffusivity of CO₂ within the soil (D).

First, D0 is computed using the temperature within the soil (T_soil in K) and pressure at the surface of the soil (P_sfc in Pa), using reference values of T_ref and P_ref (273 K and 101325 Pa). Here, θ_a is the volumetric air content and θ_a100 is the volumetric air content at a soil water potential of 100cm, and b is the pore size distribution of the soil.

This parameterization is from Ryan et al., GMD 11, 1909-1928, 2018, https://doi.org/10.5194/gmd-11-1909-2018.

source
ClimaLand.Soil.Biogeochemistry.o2_diffusivityFunction
o2_diffusivity(
               T_soil::FT,
               θ_w::FT,
               P_sfc::FT,
               θ_a100::FT,
               b::FT,
               ν::FT,
               params::SoilCO2ModelParameters{FT},
              ) where {FT}

Effective diffusivity of O₂ in soil (m² s⁻¹). Uses the same Ryan/Moldrup parameterization as co2_diffusivity but with params.D_ref_o2, the O₂ reference diffusivity in free air at standard conditions (≈ 1.67×10⁻⁵ m² s⁻¹, Davidson et al., 2012).

source
ClimaLand.Soil.Biogeochemistry.microbe_sourceFunction
microbe_source(T_soil::FT,
               θ_l::FT,
               Csom::FT,
               O2_avail::FT,
               params::SoilCO2ModelParameters{FT}
               ) where {FT}

Computes the CO₂ production in the soil by microbes, in depth and time (kg C / m^3/s), using the Dual Arrhenius Michaelis Menten model (Davidson et al., 2012). O2_avail is a dimensionless O₂ availability metric that accounts for tortuosity effects.

The Arrhenius term is written in centered form, Vmax = Vrefsx * exp(-Easx/R * (1/Tsoil - 1/Trefsx)), so that Vrefsx (the rate at Trefsx) and Easx (the temperature sensitivity) are approximately orthogonal under calibration. This is algebraically equivalent to the uncentered form Vmax = αsx * exp(-Easx/(R·Tsoil)) with αsx = Vrefsx * exp(Easx/(R·Trefsx)).

source
ClimaLand.Soil.Biogeochemistry.o2_availabilityFunction
o2_availability(O2_f::FT,
                θ_a::FT,
                D_oa::FT,
                ) where {FT}

Computes the dimensionless O₂ availability for microbial kinetics using the Millington-Quirk tortuosity model.

The O2 availability accounts for diffusion limitations in porous media: O2avail = Doa * O2f * θa^(4/3)

where:

  • O2_f: volumetric fraction of O2 in air (dimensionless, ~0.21)
  • θ_a: volumetric air content (m³ air / m³ soil)
  • D_oa: oxygen diffusion coefficient in air (dimensionless)
  • θ_a^(4/3): Millington-Quirk tortuosity factor

This is used in Michaelis-Menten kinetics for microbial respiration.

source
ClimaLand.Soil.Biogeochemistry.o2_concentrationFunction
o2_concentration(O2_f::FT,
                 T_soil::FT,
                 P_sfc::FT,
                 params::SoilCO2ModelParameters{FT},
                 ) where {FT}

Computes the O₂ mass concentration in air (kg O2/m³ air) from the volumetric fraction O2_f, using the ideal gas law.

The O2 mass concentration in the air phase is: ρO2air = O2f * P * MO2 / (R * T)

where:

  • O2_f : volumetric fraction of O2 in air (dimensionless, ~0.21)
  • P: pressure (Pa)
  • M_O2: molar mass of O2 (kg/mol) - from parameters
  • R: universal gas constant (J/(mol·K)) - from ClimaParams
  • T: temperature (K)

Note: This returns concentration per m³ of air, not per m³ of soil. For diffusion in soil, the effective concentration per m³ of soil would be θa * ρO2_air, but that multiplication is handled separately in the diffusion equation.

source
ClimaLand.Soil.Biogeochemistry.o2_fraction_from_concentrationFunction
o2_fraction_from_concentration(ρ_O2_air::FT,
                                T_soil::FT,
                                P_sfc::FT,
                                params::SoilCO2ModelParameters{FT},
                                ) where {FT}

Computes the O₂ volumetric fraction (dimensionless) from the O₂ mass concentration in air, using the ideal gas law. This is the inverse of o2_concentration.

The O2 volumetric fraction is: O2f =ρO2air * R * T / (P * MO2)

where:

  • ρO2air: O2 mass concentration in air (kg O2/m³ air)
  • P: pressure (Pa)
  • M_O2: molar mass of O2 (kg/mol) - from parameters
  • R: universal gas constant (J/(mol·K)) - from ClimaParams
  • T: temperature (K)
source
ClimaLand.Soil.Biogeochemistry.henry_constantFunction
henry_constant(K_H_298::FT, dln_K_H_dT::FT, T::FT, T_ref::FT) where {FT}

Compute temperature-dependent Henry's law constant using van 't Hoff equation. Returns K_H in mol/(m³·Pa).

The temperature dependence follows: KH(T) = KH(Tref) * exp[dlnKHdT * (1/T - 1/T_ref)]

where Tref is the Sander reference temperature (298.15 K) and dlnKHdT is the temperature coefficient.

Reference: Sander (2015), Atmos. Chem. Phys., 15, 4399-4981.

source
ClimaLand.Soil.Biogeochemistry.beta_gasFunction
beta_gas(K_H::FT, R::FT, T::FT) where {FT}

Compute dimensionless Henry's law factor β = K_H * R * T.

This converts liquid water storage to air-equivalent storage capacity. For CO2 at 20-25°C: β ≈ 0.7-0.9 (significant buffering) For O2 at 20°C: β ≈ 0.03 (less buffering, but still helps)

Arguments:

  • K_H: Henry's law constant (mol/(m³·Pa))
  • R: Universal gas constant (J/(mol·K))
  • T: Temperature (K)
source
ClimaLand.Soil.Biogeochemistry.effective_porosityFunction
effective_porosity(θ_a::FT, θ_l::FT, β::FT) where {FT}

Compute effective porosity accounting for gas and dissolved storage.

θ_eff = max(θ_a + β * θ_l, θ_eff_min)

When θa → 0 (saturated soil) but θl > 0, θeff remains finite, preventing blow-up in concentration calculations. A minimum floor of 1e-4 is applied for numerical stability in extreme conditions (e.g., very dry desert soils where both θa and θ_l are small).

Arguments:

  • θ_a: Volumetric air content (m³/m³)
  • θ_l: Volumetric liquid water content (m³/m³)
  • β: Dimensionless Henry's law factor
source

Extendible Functions

ClimaLand.Soil.Biogeochemistry.soil_moistureFunction
soil_moisture(driver::PrognosticSoil, p, Y, t, z)

Returns the volumetric liquid fraction, computed by the soil model from the prognostic liquid and ice fractions.

source
soil_moisture(driver::PrescribedMet, p, Y, t, z)

Returns the soil moisture at location (z) and time (t) for the prescribed soil case.

source
ClimaLand.Soil.Biogeochemistry.soil_temperatureFunction
soil_temperature(driver::PrognosticSoil, p, Y, t, z)

Returns the prognostic soil temperature.

source
soil_temperature(driver::PrescribedMet, p, Y, t, z)

Returns the soil temperature at location (z) and time (t) for the prescribed soil case.

source
ClimaLand.Soil.Biogeochemistry.soil_iceFunction
soil_ice(driver::PrognosticMet, p, Y, t, z)

Returns the prognostic ice content from coupled soil model.

source
soil_ice(driver::PrescribedMet, p, Y, t, z)

Returns zero ice content for prescribed soil case (standalone mode has no ice).

source