SindbadTEM.Processes Module
ProcessesThe core module for defining and implementing models and approaches of ecosystem processes in the SINDBAD framework.
Purpose:
The Processes module provides the infrastructure for defining and implementing terrestrial ecosystem models within the SINDBAD framework. It includes tools for process definition, parameter management, and method implementation. All SINDBAD models inherit from LandEcosystem and implement standardized methods for model execution.
Dependencies:
SindbadTEM: Provides the core SINDBAD models and types, includingLandEcosystemandpurposefunction.FieldMetadata: Enables metadata annotations for model parameters (bounds, units, timescale, descriptions).Parameters: Provides the@with_kwmacro for keyword argument construction.
Included Files:
The module dynamically includes all process implementations from subdirectories under src/Processes/.
Each process directory follows the convention:
A main process file:
Processes/<process>/<process>.jldefining the abstract process typeOne or more approach files:
Processes/<process>/<process>_*.jlimplementing specific approaches
Key processes include:
Carbon cycle processes (GPP, respiration, allocation, turnover)
Water cycle processes (evapotranspiration, runoff, soil water)
Vegetation processes (LAI, fAPAR, phenology)
And many more ecosystem processes
Notes:
All models must implement at least one of the following methods:
define,precompute,compute, orupdate.Parameters should use metadata macros (
@bounds,@describe,@units,@timescale) for proper documentation and validation.Processes should follow SINDBAD modeling conventions for consistency and maintainability.
The module provides
getModelDocStringandgetApproachDocStringhelpers for automatic documentation generation of models and approaches.
Examples:
julia> using SindbadTEM.Processes
julia> # Define a new process
julia> abstract type MyProcess <: LandEcosystem end
julia> purpose(::Type{MyProcess}) = "Description of my process."
julia> # Define an approach with parameters (example structure)
julia> # @bounds @describe @units @timescale @with_kw struct MyProcess_v1{T} <: MyProcess
julia> # param1::T = 1.0 | (0.0, 2.0) | "Description" | "units" | "timescale"
julia> # end
julia> # Implement required methods (example)
julia> # function define(params::MyProcess_v1, forcing, land, helpers)
julia> # # Initialize arrays and variables
julia> # return land
julia> # endProcesses (models + approaches)
EVI
SindbadTEM.Processes.EVI Type
Enhanced Vegetation IndexApproaches
EVI_constant: Sets EVI as a constant value.EVI_forcing: Gets EVI from forcing data.
EVI approaches
SindbadTEM.Processes.EVI_constant Type
Sets EVI as a constant value.
Parameters
- Fields
constant_EVI: 1.0 ∈ [0.0, 1.0] => EVI (unitless@alltimescales)
Methods:
precompute:
Inputs
- None
Outputs
states.EVI: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:states, :EVI)for information on how to add the variable to the catalog.
define, compute, update methods are not defined
End of getModelDocString-generated docstring for EVI_constant.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 11.11.2019 [skoirala | @dr-ko]: cleaned up the code
Created by
- skoirala | @dr-ko
LAI
SindbadTEM.Processes.LAI Type
Leaf Area IndexApproaches
LAI_cVegLeaf: LAI as a function of cVegLeaf and SLA.LAI_constant: sets LAI as a constant value.LAI_forcing: Gets LAI from forcing data.
LAI approaches
SindbadTEM.Processes.LAI_cVegLeaf Type
LAI as a function of cVegLeaf and SLA.
Parameters
- Fields
SLA: 0.016 ∈ [0.01, 0.024] => specific leaf area (units:m^2.gC^-1@alltimescales)
Methods:
compute:
Inputs
pools.cEco: carbon content of cEco pool(s)states.frac_vegetation: fractional coverage of grid with vegetation
Outputs
states.LAI: leaf area indexstates.LAI_grid: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:states, :LAI_grid)for information on how to add the variable to the catalog.diagnostics.SLA: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :SLA)for information on how to add the variable to the catalog.
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for LAI_cVegLeaf.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 05.05.2020 [sbesnard]
Created by
- sbesnard
Calculated using:
Inputs: :pools => :cEco, :states => :frac_vegetation
Outputs: :states => :LAI, :states => :LAI_grid, :diagnostics => :SLANDVI
SindbadTEM.Processes.NDVI Type
Normalized Difference Vegetation Index.Approaches
NDVI_constant: Sets NDVI as a constant value.NDVI_forcing: Gets NDVI from forcing data.
NDVI approaches
SindbadTEM.Processes.NDVI_constant Type
Sets NDVI as a constant value.
Parameters
- Fields
constant_NDVI: 1.0 ∈ [0.0, 1.0] => NDVI (unitless@alltimescales)
Methods:
precompute:
Inputs
- None
Outputs
states.NDVI: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:states, :NDVI)for information on how to add the variable to the catalog.
define, compute, update methods are not defined
End of getModelDocString-generated docstring for NDVI_constant.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 29.04.2020 [sbesnard]: new module
Created by
- sbesnard
NDWI
SindbadTEM.Processes.NDWI Type
Normalized Difference Water Index.Approaches
NDWI_constant: Sets NDWI as a constant value.NDWI_forcing: Gets NDWI from forcing data.
NDWI approaches
SindbadTEM.Processes.NDWI_constant Type
Sets NDWI as a constant value.
Parameters
- Fields
constant_NDWI: 1.0 ∈ [0.0, 1.0] => NDWI (unitless@alltimescales)
Methods:
precompute:
Inputs
- None
Outputs
states.NDWI: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:states, :NDWI)for information on how to add the variable to the catalog.
define, compute, update methods are not defined
End of getModelDocString-generated docstring for NDWI_constant.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 29.04.2020 [sbesnard]: new module
Created by
- sbesnard
NIRv
SindbadTEM.Processes.NIRv Type
Near-infrared reflectance of terrestrial vegetation.Approaches
NIRv_constant: Sets NIRv as a constant value.NIRv_forcing: Gets NIRv from forcing data.
NIRv approaches
SindbadTEM.Processes.NIRv_constant Type
Sets NIRv as a constant value.
Parameters
- Fields
constant_NIRv: 1.0 ∈ [0.0, 1.0] => NIRv (unitless@alltimescales)
Methods:
precompute:
Inputs
- None
Outputs
states.NIRv: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:states, :NIRv)for information on how to add the variable to the catalog.
define, compute, update methods are not defined
End of getModelDocString-generated docstring for NIRv_constant.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 29.04.2020 [sbesnard]: new module
Created by
- sbesnard
PET
SindbadTEM.Processes.PET Type
Potential evapotranspiration.Approaches
PET_Lu2005: Calculates PET using Lu et al. (2005) method.PET_PriestleyTaylor1972: Calculates PET using Priestley-Taylor (1972) method.PET_forcing: Gets PET from forcing data.
PET approaches
SindbadTEM.Processes.PET_Lu2005 Type
Calculates PET using Lu et al. (2005) method.
Parameters
- Fields
α: 1.26 ∈ [0.1, 2.0] => calibration constant: α = 1.26 for wet or humid (unitless@alltimescales)svp_1: 0.2 ∈ [-Inf, Inf] => saturation vapor pressure temperature curve parameter 1 (unitless@alltimescales)svp_2: 0.00738 ∈ [-Inf, Inf] => saturation vapor pressure temperature curve parameter 2 (unitless@alltimescales)svp_3: 0.8072 ∈ [-Inf, Inf] => saturation vapor pressure temperature curve parameter 3 (unitless@alltimescales)svp_4: 7.0 ∈ [-Inf, Inf] => saturation vapor pressure temperature curve parameter 4 (unitless@alltimescales)svp_5: 0.000116 ∈ [-Inf, Inf] => saturation vapor pressure temperature curve parameter 5 (unitless@alltimescales)sh_cp: 0.001013 ∈ [-Inf, Inf] => specific heat of moist air at constant pressure (1.013 kJ/kg/°C) (units:MJ/kg/°C@alltimescales)elev: 0.0 ∈ [0.0, 8848.0] => elevation (units:m@alltimescales)pres_sl: 101.29 ∈ [0.0, 101.3] => atmospheric pressure at sea level (units:kpa@alltimescales)pres_elev: 0.01055 ∈ [-Inf, Inf] => rate of change of atmospheric pressure with elevation (units:kpa/m@alltimescales)λ_base: 2.501 ∈ [-Inf, Inf] => latent heat of vaporization (units:MJ/kg@alltimescales)λ_airT: 0.002361 ∈ [-Inf, Inf] => rate of change of latent heat of vaporization with temperature (units:MJ/kg/°C@alltimescales)γ_resistance: 0.622 ∈ [-Inf, Inf] => ratio of canopy resistance to atmospheric resistance (unitless@alltimescales)Δt: 2.0 ∈ [-Inf, Inf] => time delta for calculation of G (units:day@alltimescales)G_base: 4.2 ∈ [-Inf, Inf] => base groundheat flux (unitless@alltimescales)
Methods:
define:
Inputs
forcing.f_airT: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_airT)for information on how to add the variable to the catalog.
Outputs
fluxes.PET: potential evapotranspirationstates.Tair_prev: air temperature in the previous time step
compute:
Inputs
forcing.f_rn: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_rn)for information on how to add the variable to the catalog.forcing.f_airT: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_airT)for information on how to add the variable to the catalog.states.Tair_prev: air temperature in the previous time step
Outputs
fluxes.PET: potential evapotranspirationstates.Tair_prev: air temperature in the previous time step
precompute, update methods are not defined
End of getModelDocString-generated docstring for PET_Lu2005.jl. Check the Extended help for user-defined information.
Extended help
References
- Lu
Versions
- 1.0 on 11.11.2019 [skoirala | @dr-ko]
Created by
- skoirala | @dr-ko
Calculated using:
Inputs: :forcing => :f_rn, :forcing => :f_airT, :states => :Tair_prev
Outputs: :fluxes => :PET, :states => :Tair_prevWUE
SindbadTEM.Processes.WUE Type
Water Use Efficiency (WUE).Approaches
WUE_Farquhar1980: Calculates WUE as a function of WUE at zero VPD, daily mean VPD, and a CO₂ effect proportional to ambient CO₂.WUE_Medlyn2011: Calculates WUE as a function of daytime mean VPD and ambient CO₂, following Medlyn et al. (2011).WUE_VPDDay: Calculates WUE as a function of WUE at 1 hPa and daily mean VPD.WUE_VPDDayCo2: Calculates WUE as a function of WUE at 1 hPa daily mean VPD and linear CO₂ relationship.WUE_constant: Sets WUE as a constant value.WUE_expVPDDayCo2: Calculates WUE as a function of WUE at 1 hPa, daily mean VPD, and an exponential CO₂ relationship.
WUE approaches
SindbadTEM.Processes.WUE_Farquhar1980 Type
Calculates WUE as a function of WUE at zero VPD, daily mean VPD, and a CO₂ effect proportional to ambient CO₂.
Parameters
- Fields
WUE_base: 9.2 ∈ [2.0, 20.0] => WUE at zero VPD and the reference ambient CO2 (units:gC/mmH2O@alltimescales)κ: 0.4 ∈ [0.06, 0.7] => sensitivity of WUE to VPD (units:kPa-1@alltimescales)ref_ambient_CO2: 380.0 ∈ [-Inf, Inf] => ambient CO2 at which the CO2 effect is one (units:ppm@alltimescales)
Methods:
compute:
Inputs
forcing.f_VPD_day: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_VPD_day)for information on how to add the variable to the catalog.states.ambient_CO2: ambient co2 concentration
Outputs
diagnostics.WUENoCO2: water use efficiency of the ecosystem without CO2 effectdiagnostics.WUE: water use efficiency of the ecosystem
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for WUE_Farquhar1980.jl. Check the Extended help for user-defined information.
Extended help
The CO2 effect is ambient_CO2 / ref_ambient_CO2. With a fixed ratio χ of leaf internal to ambient CO2, assimilation is g_s Ca (1 - χ) and transpiration is 1.6 g_s VPD, so WUE grows in proportion to Ca. This is the assumption of gppVPD_Farquhar1980, whose ref_ambient_CO2 should have the same value. The effect has no free parameter. ref_ambient_CO2 is not meant to be calibrated, since only its ratio to WUE_base is identifiable.
The VPD effect exp(-κ VPD) is empirical, with VPD in kPa and κ in kPa-1, so WUE_base is WUE at zero VPD. At a fixed χ, theory gives WUE proportional to 1 / VPD, and with the optimal χ of Medlyn et al. (2011) it gives Ca / (1.6 (g1 sqrt(VPD) + VPD)). The exponential stays finite at low VPD and decays more weakly, and κ is calibrated against transpiration and evapotranspiration. CO2 and VPD act on WUE independently, as in both theoretical forms.
With gpp_coupled and transpiration_coupled, demand limited transpiration is gpp / WUE and varies with VPD as exp(-(κ_gpp - κ) VPD), where κ_gpp is the VPD sensitivity of GPP. Transpiration then rises with VPD only when κ is larger than κ_gpp. With gppVPD_Farquhar1980, κ_gpp is scaled down at higher CO2.
WUE is gpp over transpiration, in gC per mm of water, so it does not depend on the model time step.
References
Farquhar, G. D., von Caemmerer, S., & Berry, J. A. (1980). A biochemical model of photosynthetic CO2 assimilation in leaves of C3 species. Planta, 149, 78-90.
Medlyn, B. E., Duursma, R. A., Eamus, D., et al. (2011). Reconciling the optimal and empirical approaches to modelling stomatal conductance. Global Change Biology, 17, 2134-2144.
Versions
1.0 on 03.11.2026 [skoirala | @dr-ko]
1.1 on 05.11.2026 [skoirala | @dr-ko]: renamed from WUE_expVPDDayCo2Linear, and WUE_one_hpa renamed to WUE_base, since exp(-κ VPD) is one at zero VPD.
Created by
- skoirala | @dr-ko
Calculated using:
Inputs: :forcing => :f_VPD_day, :states => :ambient_CO2
Outputs: :diagnostics => :WUENoCO2, :diagnostics => :WUEambientCO2
SindbadTEM.Processes.ambientCO2 Type
Ambient CO₂ concentration.Approaches
ambientCO2_constant: Sets ambient CO₂ to a constant value.ambientCO2_forcing: Gets ambient CO₂ from forcing data.
ambientCO2 approaches
SindbadTEM.Processes.ambientCO2_constant Type
Sets ambient CO₂ to a constant value.
Parameters
- Fields
constant_ambient_CO2: 400.0 ∈ [200.0, 5000.0] => atmospheric CO2 concentration (units:ppm@alltimescales)
Methods:
precompute:
Inputs
- None
Outputs
states.ambient_CO2: ambient co2 concentration
define, compute, update methods are not defined
End of getModelDocString-generated docstring for ambientCO2_constant.jl. Check the Extended help for user-defined information.
Extended help
This function assigns a constant value of ambient CO2 concentration to the land model state. The value is derived from the constant_ambient_CO2 parameter defined in the ambientCO2_constant structure.
References
- None
Versions
- 1.0 on 11.11.2019 [skoirala | @dr-ko]
Created by
- skoirala | @dr-ko
autoRespiration
SindbadTEM.Processes.autoRespiration Type
Autotrophic respiration for growth and maintenance.Approaches
autoRespiration_Thornley2000A: Calculates autotrophic maintenance and growth respiration using Thornley and Cannell (2000) Model A, where maintenance respiration is prioritized.autoRespiration_Thornley2000B: Calculates autotrophic maintenance and growth respiration using Thornley and Cannell (2000) Model B, where growth respiration is prioritized.autoRespiration_Thornley2000C: Calculates autotrophic maintenance and growth respiration using Thornley and Cannell (2000) Model C, which includes growth, degradation, and resynthesis.autoRespiration_none: Sets autotrophic respiration fluxes to 0.
autoRespiration approaches
SindbadTEM.Processes.autoRespiration_Thornley2000A Type
Calculates autotrophic maintenance and growth respiration using Thornley and Cannell (2000) Model A, where maintenance respiration is prioritized.
Parameters
- Fields
RMN: 0.009085714285714286 ∈ [0.0009085714285714285, 0.09085714285714286] => Nitrogen efficiency rate of maintenance respiration (units:gC/gN/day@daytimescale)YG: 0.75 ∈ [0.0, 1.0] => growth yield coefficient, or growth efficiency. Loosely: (1-YG)*GPP is growth respiration (units:gC/gC@alltimescales)
Methods:
define:
Inputs
pools.cEco: carbon content of cEco pool(s)
Outputs
diagnostics.k_respiration_maintain: metabolism rate for maintenance respirationdiagnostics.k_respiration_maintain_su: metabolism rate for maintenance respiration to be used in old analytical solution to steady statefluxes.auto_respiration_growth: growth respiration per vegetation poolfluxes.auto_respiration_maintain: maintenance respiration per vegetation poolfluxes.c_eco_efflux: losss of carbon from (live) vegetation pools due to autotrophic respiration
compute:
Inputs
diagnostics.k_respiration_maintain: metabolism rate for maintenance respirationdiagnostics.k_respiration_maintain_su: metabolism rate for maintenance respiration to be used in old analytical solution to steady statefluxes.c_eco_efflux: losss of carbon from (live) vegetation pools due to autotrophic respirationfluxes.auto_respiration_growth: growth respiration per vegetation poolfluxes.auto_respiration_maintain: maintenance respiration per vegetation poolpools.cEco: carbon content of cEco pool(s)pools.cVeg: carbon content of cVeg pool(s)fluxes.gpp: gross primary prorDcutivitydiagnostics.CN_ratio_cVeg: carbon to nitrogen ratio in the vegetation poolsdiagnostics.c_allocation: fraction of gpp allocated to different (live) carbon poolsdiagnostics.auto_respiration_f_airT: effect of air temperature on autotrophic respiration. 0: no decomposition, >1 increase in decomposition rate
Outputs
diagnostics.k_respiration_maintain: metabolism rate for maintenance respirationdiagnostics.k_respiration_maintain_su: metabolism rate for maintenance respiration to be used in old analytical solution to steady statefluxes.auto_respiration_growth: growth respiration per vegetation poolfluxes.auto_respiration_maintain: maintenance respiration per vegetation poolfluxes.c_eco_efflux: losss of carbon from (live) vegetation pools due to autotrophic respiration
precompute, update methods are not defined
End of getModelDocString-generated docstring for autoRespiration_Thornley2000A.jl. Check the Extended help for user-defined information.
Extended help
References
Amthor, J. S. (2000), The McCree-de Wit-Penning de Vries-Thornley respiration paradigms: 30 years later, Ann Bot-London, 86[1], 1-20. Ryan, M. G. (1991), Effects of Climate Change on Plant Respiration, Ecol Appl, 1[2], 157-167.
Thornley, J. H. M., & M. G. R. Cannell [2000], Modelling the components of plant respiration: Representation & realism, Ann Bot-London, 85[1] 55-67.
Versions
- 1.0 on 06.05.2022 [ncarvalhais/skoirala]: cleaned up the code
Created by
- ncarvalhais
Notes
- Questions - practical - leave raAct per pool; | make a field land.fluxes.ra that has all the autotrophic respiration components together?
Calculated using:
Inputs: :diagnostics => :k_respiration_maintain, :diagnostics => :k_respiration_maintain_su, :fluxes => :c_eco_efflux, :fluxes => :auto_respiration_growth, :fluxes => :auto_respiration_maintain, :pools => :cEco, :pools => :cVeg, :fluxes => :gpp, :diagnostics => :CN_ratio_cVeg, :diagnostics => :c_allocation, :diagnostics => :auto_respiration_f_airT
Outputs: :diagnostics => :k_respiration_maintain, :diagnostics => :k_respiration_maintain_su, :fluxes => :auto_respiration_growth, :fluxes => :auto_respiration_maintain, :fluxes => :c_eco_effluxautoRespirationAirT
SindbadTEM.Processes.autoRespirationAirT Type
Effect of air temperature on autotrophic respiration.Approaches
autoRespirationAirT_Q10: Calculates the effect of air temperature on maintenance respiration using a Q10 function.autoRespirationAirT_none: No air temperature effect on autotrophic respiration.
autoRespirationAirT approaches
SindbadTEM.Processes.autoRespirationAirT_Q10 Type
Calculates the effect of air temperature on maintenance respiration using a Q10 function.
Parameters
- Fields
Q10: 2.0 ∈ [1.05, 3.0] => Q10 parameter for maintenance respiration (unitless@alltimescales)ref_airT: 20.0 ∈ [0.0, 40.0] => Reference temperature for the maintenance respiration (units:°C@alltimescales)Q10_base: 10.0 ∈ [-Inf, Inf] => base temperature difference (units:°C@alltimescales)
Methods:
compute:
Inputs
forcing.f_airT: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_airT)for information on how to add the variable to the catalog.
Outputs
diagnostics.auto_respiration_f_airT: effect of air temperature on autotrophic respiration. 0: no decomposition, >1 increase in decomposition rate
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for autoRespirationAirT_Q10.jl. Check the Extended help for user-defined information.
Extended help
References
Amthor, J. S. (2000), The McCree-de Wit-Penning de Vries-Thornley respiration paradigms: 30 years later, Ann Bot-London, 86[1], 1-20.
Ryan, M. G. (1991), Effects of Climate Change on Plant Respiration, Ecol Appl, 1[2], 157-167.
Thornley, J. H. M., & M. G. R. Cannell [2000], Modelling the components of plant respiration: Representation & realism, Ann Bot-London, 85[1] 55-67.
Versions
- 1.0 on 22.11.2019 [skoirala | @dr-ko]: clean up
Created by
- ncarvalhais
Notes
sourceCalculated using:
Inputs: :forcing => :f_airT
Outputs: :diagnostics => :auto_respiration_f_airTcAllocation
SindbadTEM.Processes.cAllocation Type
Allocation fraction of NPP to different vegetation pools.Approaches
cAllocation_Friedlingstein1999: Dynamically allocates carbon based on LAI, moisture, and nutrient availability, following Friedlingstein et al. (1999).cAllocation_GSI: Dynamically allocates carbon based on temperature, water, and radiation stressors following the GSI approach.cAllocation_fixed: Sets carbon allocation to each pool using fixed allocation parameters.cAllocation_none: Sets carbon allocation to 0.
cAllocation approaches
SindbadTEM.Processes.cAllocation_Friedlingstein1999 Type
Dynamically allocates carbon based on LAI, moisture, and nutrient availability, following Friedlingstein et al. (1999).
Parameters
- Fields
so: 0.3 ∈ [0.0, 1.0] => fractional carbon allocation to stem for non-limiting conditions (units:fractional@alltimescales)ro: 0.3 ∈ [0.0, 1.0] => fractional carbon allocation to root for non-limiting conditions (units:fractional@alltimescales)rel_Y: 2.0 ∈ [1.0, Inf] => normalization parameter (units:dimensionless@alltimescales)
Methods:
define:
Inputs
pools.cEco: carbon content of cEco pool(s)
Outputs
diagnostics.c_allocation: fraction of gpp allocated to different (live) carbon poolscAllocation.cVeg_names: name of vegetation carbon pools used for carbon allocationcAllocation.cVeg_nzix: number of pools/layers in each vegetation carbon componentcAllocation.cVeg_zix: number of pools/layers in each vegetation carbon componentcAllocation.c_allocation_to_veg: carbon allocation to each vvegetation pool
compute:
Inputs
diagnostics.c_allocation: fraction of gpp allocated to different (live) carbon poolscAllocation.cVeg_nzix: number of pools/layers in each vegetation carbon componentcAllocation.cVeg_zix: number of pools/layers in each vegetation carbon componentcAllocation.c_allocation_to_veg: carbon allocation to each vvegetation pooldiagnostics.c_allocation_f_W_N: effect of water and nutrient on carbon allocation. 1: no stress, 0: complete stressdiagnostics.c_allocation_f_LAI: effect of LAI on carbon allocation. 1: no stress, 0: complete stressconstants.z_zero: a helper type stable 0 to be used across all modelsconstants.o_one: a helper type stable 1 to be used across all modelspools.cVegRoot: carbon content of cVegRoot pool(s)pools.cVegWood: carbon content of cVegWood pool(s)pools.cVegLeaf: carbon content of cVegLeaf pool(s)
Outputs
diagnostics.c_allocation: fraction of gpp allocated to different (live) carbon pools
precompute, update methods are not defined
End of getModelDocString-generated docstring for cAllocation_Friedlingstein1999.jl. Check the Extended help for user-defined information.
Extended help
References
- Friedlingstein; P.; G. Joel; C.B. Field; & I.Y. Fung; 1999: Toward an allocation scheme for global terrestrial carbon models. Glob. Change Biol.; 5; 755-770; doi:10.1046/j.1365-2486.1999.00269.x.
Versions
- 1.0 on 12.01.2020 [sbesnard]
Created by
- ncarvalhais
Calculated using:
Inputs: :diagnostics => :c_allocation, :cAllocation => :cVeg_nzix, :cAllocation => :cVeg_zix, :cAllocation => :c_allocation_to_veg, :diagnostics => :c_allocation_f_W_N, :diagnostics => :c_allocation_f_LAI, :constants => :z_zero, :constants => :o_one, :pools => :cVegRoot, :pools => :cVegWood, :pools => :cVegLeaf
Outputs: :diagnostics => :c_allocationcAllocationLAI
SindbadTEM.Processes.cAllocationLAI Type
Estimates allocation to the leaf pool given light limitation constraints to photosynthesis, using LAI dynamics.Approaches
cAllocationLAI_Friedlingstein1999: Estimates the effect of light limitation on carbon allocation via LAI, based on Friedlingstein et al. (1999).cAllocationLAI_none: Sets the LAI effect on allocation to 1 (no effect).
cAllocationLAI approaches
SindbadTEM.Processes.cAllocationLAI_Friedlingstein1999 Type
Estimates the effect of light limitation on carbon allocation via LAI, based on Friedlingstein et al. (1999).
Parameters
- Fields
kext: 0.5 ∈ [0.0, 1.0] => extinction coefficient of LAI effect on allocation (unitless@alltimescales)min_f_LAI: 0.1 ∈ [0.0, 1.0] => minimum LAI effect on allocation (unitless@alltimescales)max_f_LAI: 1.0 ∈ [0.0, 1.0] => maximum LAI effect on allocation (unitless@alltimescales)
Methods:
compute:
Inputs
states.LAI: leaf area index
Outputs
diagnostics.c_allocation_f_LAI: effect of LAI on carbon allocation. 1: no stress, 0: complete stress
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for cAllocationLAI_Friedlingstein1999.jl. Check the Extended help for user-defined information.
Extended help
References
- Friedlingstein; P.; G. Joel; C.B. Field; & I.Y. Fung; 1999: Toward an allocation scheme for global terrestrial carbon models. Glob. Change Biol.; 5; 755-770; doi:10.1046/j.1365-2486.1999.00269.x.
Versions
- 1.0 on 12.01.2020 [sbesnard]
Created by
- ncarvalhais
Calculated using:
Inputs: :states => :LAI
Outputs: :diagnostics => :c_allocation_f_LAIcAllocationNutrients
SindbadTEM.Processes.cAllocationNutrients Type
Pseudo-effect of nutrients on carbon allocation.Approaches
cAllocationNutrients_Friedlingstein1999: Calculates pseudo-nutrient limitation based on Friedlingstein et al. (1999).cAllocationNutrients_none: Sets the pseudo-nutrient limitation to 1 (no effect).
cAllocationNutrients approaches
SindbadTEM.Processes.cAllocationNutrients_Friedlingstein1999 Type
Calculates pseudo-nutrient limitation based on Friedlingstein et al. (1999).
Parameters
- Fields
min_L: 0.1 ∈ [0.0, 1.0] => (unitless@alltimescales)max_L: 1.0 ∈ [0.0, 1.0] => (unitless@alltimescales)
Methods:
compute:
Inputs
states.PAW: amount of water available for transpiration per soil layerproperties.∑w_awc: total amount of water available for vegetation/transpirationdiagnostics.c_allocation_f_soilW: effect of soil moisture on carbon allocation. 1: no stress, 0: complete stressdiagnostics.c_allocation_f_soilT: effect of soil temperature on carbon allocation. 1: no stress, 0: complete stressfluxes.PET: potential evapotranspirationconstants.z_zero: a helper type stable 0 to be used across all modelsconstants.o_one: a helper type stable 1 to be used across all models
Outputs
cAllocationNutrients.c_allocation_f_W_N: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:cAllocationNutrients, :c_allocation_f_W_N)for information on how to add the variable to the catalog.
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for cAllocationNutrients_Friedlingstein1999.jl. Check the Extended help for user-defined information.
Extended help
References
- Friedlingstein; P.; G. Joel; C.B. Field; & I.Y. Fung; 1999: Toward an allocation scheme for global terrestrial carbon models. Glob. Change Biol.; 5; 755-770; doi:10.1046/j.1365-2486.1999.00269.x.
Notes
- "There is no explicit estimate of soil mineral nitrogen in the version of CASA used for these simulations. As a surrogate; we assume that spatial variability in nitrogen mineralization & soil organic matter decomposition are identical [Townsend et al. 1995]. Nitrogen availability; N; is calculated as the product of the temperature & moisture abiotic factors used in CASA for the calculation of microbial respiration [Potter et al. 1993]." in Friedlingstein et al., 1999.#
Versions
- 1.0 on 12.01.2020 [sbesnard]
Created by
- ncarvalhais
Calculated using:
Inputs: :states => :PAW, :properties => :∑w_awc, :diagnostics => :c_allocation_f_soilW, :diagnostics => :c_allocation_f_soilT, :fluxes => :PET, :constants => :z_zero, :constants => :o_one
Outputs: :cAllocationNutrients => :c_allocation_f_W_NcAllocationRadiation
SindbadTEM.Processes.cAllocationRadiation Type
Effect of radiation on carbon allocation.Approaches
cAllocationRadiation_GSI: Calculates the radiation effect on allocation using the GSI method.cAllocationRadiation_RgPot: Calculates the radiation effect on allocation using potential radiation instead of actual radiation.cAllocationRadiation_gpp: Sets the radiation effect on allocation equal to that for GPP.cAllocationRadiation_none: Sets the radiation effect on allocation to 1 (no effect).
cAllocationRadiation approaches
SindbadTEM.Processes.cAllocationRadiation_GSI Type
Calculates the radiation effect on allocation using the GSI method.
Parameters
- Fields
τ_rad: 0.02 ∈ [0.001, 1.0] => temporal change rate for the light-limiting function (unitless@alltimescales)slope_rad: 1.0 ∈ [0.01, 200.0] => slope parameters of a logistic function based on mean daily y shortwave downward radiation (unitless@alltimescales)base_rad: 10.0 ∈ [0.0, 100.0] => inflection point parameters of a logistic function based on mean daily y shortwave downward radiation (unitless@alltimescales)
Methods:
define:
Inputs
- None
Outputs
diagnostics.c_allocation_f_cloud_prev: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_allocation_f_cloud_prev)for information on how to add the variable to the catalog.
compute:
Inputs
forcing.f_PAR: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_PAR)for information on how to add the variable to the catalog.diagnostics.c_allocation_f_cloud_prev: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_allocation_f_cloud_prev)for information on how to add the variable to the catalog.constants.z_zero: a helper type stable 0 to be used across all modelsconstants.o_one: a helper type stable 1 to be used across all models
Outputs
diagnostics.c_allocation_f_cloud: effect of cloud on carbon allocation. 1: no stress, 0: complete stressdiagnostics.c_allocation_f_cloud_prev: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_allocation_f_cloud_prev)for information on how to add the variable to the catalog.
precompute, update methods are not defined
End of getModelDocString-generated docstring for cAllocationRadiation_GSI.jl. Check the Extended help for user-defined information.
Extended help
References
Forkel M, Carvalhais N, Schaphoff S, von Bloh W, Migliavacca M, Thurner M, Thonicke K [2014] Identifying environmental controls on vegetation greenness phenology through model–data integration. Biogeosciences, 11, 7025–7050.
Forkel, M., Migliavacca, M., Thonicke, K., Reichstein, M., Schaphoff, S., Weber, U., Carvalhais, N. (2015). Codominant water control on global interannual variability and trends in land surface phenology & greenness.
Jolly, William M., Ramakrishna Nemani, & Steven W. Running. "A generalized, bioclimatic index to predict foliar phenology in response to climate." Global Change Biology 11.4 [2005]: 619-632.
Versions
- 1.0 on 12.01.2020 [skoirala | @dr-ko]
Created by
- ncarvalhais, sbesnard, skoirala
Calculated using:
Inputs: :forcing => :f_PAR, :diagnostics => :c_allocation_f_cloud_prev, :constants => :z_zero, :constants => :o_one
Outputs: :diagnostics => :c_allocation_f_cloud, :diagnostics => :c_allocation_f_cloud_prevcAllocationSoilT
SindbadTEM.Processes.cAllocationSoilT Type
Effect of soil temperature on carbon allocation.Approaches
cAllocationSoilT_Friedlingstein1999: Calculates the partial temperature effect on decomposition and mineralization based on Friedlingstein et al. (1999).cAllocationSoilT_gpp: Sets the temperature effect on allocation equal to that for GPP.cAllocationSoilT_gppGSI: Calculates the temperature effect on allocation as for GPP using the GSI approach.cAllocationSoilT_none: Sets the temperature effect on allocation to 1 (no effect).
cAllocationSoilT approaches
SindbadTEM.Processes.cAllocationSoilT_Friedlingstein1999 Type
Calculates the partial temperature effect on decomposition and mineralization based on Friedlingstein et al. (1999).
Parameters
- Fields
min_f_soilT: 0.5 ∈ [0.0, 1.0] => minimum allocation coefficient from temperature stress (unitless@alltimescales)max_f_soilT: 1.0 ∈ [0.0, 1.0] => maximum allocation coefficient from temperature stress (unitless@alltimescales)
Methods:
compute:
Inputs
diagnostics.c_eco_k_f_soilT: effect of soil temperature on heterotrophic respiration respiration. 0: no decomposition, >1 increase in decomposition
Outputs
diagnostics.c_allocation_f_soilT: effect of soil temperature on carbon allocation. 1: no stress, 0: complete stress
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for cAllocationSoilT_Friedlingstein1999.jl. Check the Extended help for user-defined information.
Extended help
References
- Friedlingstein; P.; G. Joel; C.B. Field; & I.Y. Fung; 1999: Toward an allocation scheme for global terrestrial carbon models. Glob. Change Biol.; 5; 755-770; doi:10.1046/j.1365-2486.1999.00269.x.
Versions
- 1.0 on 12.01.2020 [sbesnard]
Created by
- ncarvalhais
Calculated using:
Inputs: :diagnostics => :c_eco_k_f_soilT
Outputs: :diagnostics => :c_allocation_f_soilTcAllocationSoilW
SindbadTEM.Processes.cAllocationSoilW Type
Effect of soil moisture on carbon allocation.Approaches
cAllocationSoilW_Friedlingstein1999: Calculates the partial moisture effect on decomposition and mineralization based on Friedlingstein et al. (1999).cAllocationSoilW_gpp: Sets the moisture effect on allocation equal to that for GPP.cAllocationSoilW_gppGSI: Calculates the moisture effect on allocation as for GPP using the GSI approach.cAllocationSoilW_none: Sets the moisture effect on allocation to 1 (no effect).
cAllocationSoilW approaches
SindbadTEM.Processes.cAllocationSoilW_Friedlingstein1999 Type
Calculates the partial moisture effect on decomposition and mineralization based on Friedlingstein et al. (1999).
Parameters
- Fields
min_f_soilW: 0.5 ∈ [0.0, 1.0] => minimum value for moisture stressor (unitless@alltimescales)max_f_soilW: 0.8 ∈ [0.0, 1.0] => maximum value for moisture stressor (unitless@alltimescales)
Methods:
compute:
Inputs
diagnostics.c_eco_k_f_soilW: effect of soil moisture on carbon decomposition rate. 1: no stress, 0: complete stress
Outputs
diagnostics.c_allocation_f_soilW: effect of soil moisture on carbon allocation. 1: no stress, 0: complete stress
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for cAllocationSoilW_Friedlingstein1999.jl. Check the Extended help for user-defined information.
Extended help
References
- Friedlingstein; P.; G. Joel; C.B. Field; & I.Y. Fung; 1999: Toward an allocation scheme for global terrestrial carbon models. Glob. Change Biol.; 5; 755-770; doi:10.1046/j.1365-2486.1999.00269.x.
Versions
- 1.0 on 12.01.2020 [sbesnard]
Created by
- ncarvalhais
Calculated using:
Inputs: :diagnostics => :c_eco_k_f_soilW
Outputs: :diagnostics => :c_allocation_f_soilWcAllocationTreeFraction
SindbadTEM.Processes.cAllocationTreeFraction Type
Adjusts carbon allocation according to tree cover.Approaches
cAllocationTreeFraction_Friedlingstein1999: Adjusts allocation coefficients according to the fraction of trees to herbaceous plants and fine to coarse root partitioning.
cAllocationTreeFraction approaches
SindbadTEM.Processes.cAllocationTreeFraction_Friedlingstein1999 Type
Adjusts allocation coefficients according to the fraction of trees to herbaceous plants and fine to coarse root partitioning.
Parameters
- Fields
frac_fine_to_coarse: 1.0 ∈ [0.0, 1.0] => carbon fraction allocated to fine roots (units:fraction@alltimescales)
Methods:
define:
Inputs
- None
Outputs
cAllocationTreeFraction.cVeg_names_for_c_allocation_frac_tree: name of vegetation carbon pools used in tree fraction correction for carbon allocation
compute:
Inputs
states.frac_tree: fractional coverage of grid with treesdiagnostics.c_allocation: fraction of gpp allocated to different (live) carbon poolscAllocationTreeFraction.cVeg_names_for_c_allocation_frac_tree: name of vegetation carbon pools used in tree fraction correction for carbon allocationconstants.z_zero: a helper type stable 0 to be used across all modelsconstants.o_one: a helper type stable 1 to be used across all models
Outputs
diagnostics.c_allocation: fraction of gpp allocated to different (live) carbon pools
precompute, update methods are not defined
End of getModelDocString-generated docstring for cAllocationTreeFraction_Friedlingstein1999.jl. Check the Extended help for user-defined information.
Extended help
References
- Friedlingstein; P.; G. Joel; C.B. Field; & I.Y. Fung; 1999: Toward an allocation scheme for global terrestrial carbon models. Glob. Change Biol.; 5; 755-770; doi:10.1046/j.1365-2486.1999.00269.x.
Versions
- 1.0 on 12.01.2020 [sbesnard]
Created by
- ncarvalhais
Calculated using:
Inputs: :states => :frac_tree, :diagnostics => :c_allocation, :cAllocationTreeFraction => :cVeg_names_for_c_allocation_frac_tree, :constants => :z_zero, :constants => :o_one
Outputs: :diagnostics => :c_allocationcBiomass
SindbadTEM.Processes.cBiomass Type
Computes aboveground biomass (AGB).Approaches
cBiomass_simple: Calculates AGBsimplyas the sum of wood and leaf carbon pools.cBiomass_treeGrass: Considers the tree-grass fraction to include different vegetation pools while calculating AGB. For Eddy Covariance sites with tree cover, AGB = leaf + wood biomass. For grass-only sites, AGB is set to the wood biomass, which is constrained to be near 0 after optimization.cBiomass_treeGrass_cVegReserveScaling: Same ascBiomass_treeGrass.jl, but includes scaling for the relative fraction of the reserve carbon to not allow for large reserve compared to the rest of the vegetation carbol pool.cBiomass_vegType: Same ascBiomass_treeGrass_cVegReserveScaling, but selects herbaceous vegetation fromland.states.veg_type_namebeing:herbinstead of fromfrac_tree.
cBiomass approaches
SindbadTEM.Processes.cBiomass_simple Type
Calculates AGB simply as the sum of wood and leaf carbon pools.
Parameters
- None
Methods:
compute:
Inputs
pools.cEco: carbon content of cEco pool(s)
Outputs
states.aboveground_biomass: carbon content on the cVegWood component
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for cBiomass_simple.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
Created by
sourceCalculated using:
Inputs: :pools => :cEco
Outputs: :states => :aboveground_biomasscCropHarvest
SindbadTEM.Processes.cCropHarvest Type
Carbon loss due to harvest events.Approaches
cCropHarvest_simple: This is used for crop and Crop harvest events. Moves carbon to export and decomposable pools, according to their respective carbon flow target pools, during harvest events.
cCropHarvest approaches
SindbadTEM.Processes.cCropHarvest_simple Type
This is used for crop and Crop harvest events. Moves carbon to export and decomposable pools, according to their respective carbon flow target pools, during harvest events.
Parameters
- None
Methods:
define:
Inputs
pools.cEco: carbon content of cEco pool(s)cCycleBase.c_taker: index of the receiving carbon pool for a given flow
Outputs
diagnostics.c_Crop_Harvest_Product: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_Crop_Harvest_Product)for information on how to add the variable to the catalog.diagnostics.c_Crop_Harvest_Mortality: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_Crop_Harvest_Mortality)for information on how to add the variable to the catalog.diagnostics.c_Crop_Harvest_Flow: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_Crop_Harvest_Flow)for information on how to add the variable to the catalog.
compute:
Inputs
diagnostics.c_Crop_Harvest_Product: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_Crop_Harvest_Product)for information on how to add the variable to the catalog.diagnostics.c_Crop_Harvest_Mortality: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_Crop_Harvest_Mortality)for information on how to add the variable to the catalog.diagnostics.frac_crop_harvest_intensity: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :frac_crop_harvest_intensity)for information on how to add the variable to the catalog.diagnostics.frac_crop_harvest_efficiency: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :frac_crop_harvest_efficiency)for information on how to add the variable to the catalog.diagnostics.is_crop_harvested: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :is_crop_harvested)for information on how to add the variable to the catalog.pools.cEco: carbon content of cEco pool(s)states.c_remain: amount of carbon to keep in the ecosystem vegetation pools in case of disturbancescCycleBase.c_giver: index of the source carbon pool for a given flowcCycleBase.c_taker: index of the receiving carbon pool for a given flowconstants.z_zero: a helper type stable 0 to be used across all modelsconstants.o_one: a helper type stable 1 to be used across all modelsmodels.c_model: a base carbon cycle model to loop through the pools and fill the main or component pools needed for using static arrays. A mandatory field for every carbon model realizationdiagnostics.c_Crop_Harvest_Flow: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_Crop_Harvest_Flow)for information on how to add the variable to the catalog.
Outputs
diagnostics.c_Crop_Harvest_Product: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_Crop_Harvest_Product)for information on how to add the variable to the catalog.diagnostics.c_Crop_Harvest_Mortality: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_Crop_Harvest_Mortality)for information on how to add the variable to the catalog.diagnostics.c_Crop_Harvest_Flow: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_Crop_Harvest_Flow)for information on how to add the variable to the catalog.diagnostics.actual_crop_harvest_intensity: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :actual_crop_harvest_intensity)for information on how to add the variable to the catalog.diagnostics.cCropProducts: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :cCropProducts)for information on how to add the variable to the catalog.
precompute, update methods are not defined
End of getModelDocString-generated docstring for cCropHarvest_simple.jl. Check the Extended help for user-defined information.
Extended help
Created by - Nuno | nunocarvalhais
sourceCalculated using:
Inputs: :diagnostics => :c_Crop_Harvest_Product, :diagnostics => :c_Crop_Harvest_Mortality, :diagnostics => :frac_crop_harvest_intensity, :diagnostics => :frac_crop_harvest_efficiency, :diagnostics => :is_crop_harvested, :pools => :cEco, :states => :c_remain, :cCycleBase => :c_giver, :cCycleBase => :c_taker, :constants => :z_zero, :constants => :o_one, :models => :c_model, :diagnostics => :c_Crop_Harvest_Flow
Outputs: :diagnostics => :c_Crop_Harvest_Product, :diagnostics => :c_Crop_Harvest_Mortality, :diagnostics => :c_Crop_Harvest_Flow, :diagnostics => :actual_crop_harvest_intensity, :diagnostics => :cCropProductscCropHarvestEfficiency
SindbadTEM.Processes.cCropHarvestEfficiency Type
Appropriation of carbon for crop products.Approaches
cCropHarvestEfficiency_constant: To determine globally constant fractions of crop harvest efficiency and intensity. Intensity reflects how much of the live cVegPools is killed/damaged during a harvest event; in an area basis, this would reflect a portion of the crop that would not die during harvest. Efficiency reflects how much of the killed cVegPools is removed from the system, turned into crop products.cCropHarvestEfficiency_forcing: Load the harvest fraction efficiency from the forcing. Harvest fraction efficiency is the proportion of the cVegPool killed for crops that is abstracted from the system.cCropHarvestEfficiency_none: No crop harvest efficiency.
cCropHarvestEfficiency approaches
SindbadTEM.Processes.cCropHarvestEfficiency_constant Type
To determine globally constant fractions of crop harvest efficiency and intensity. Intensity reflects how much of the live cVegPools is killed/damaged during a harvest event; in an area basis, this would reflect a portion of the crop that would not die during harvest. Efficiency reflects how much of the killed cVegPools is removed from the system, turned into crop products.
Parameters
- Fields
constant_frac_crop_harvest_efficiency: 0.8 ∈ [0.0, 0.99] => Fraction of the harvestable killed vegetation carbon pools that is removed from an ecosystem in a harvest event (units:fraction@alltimescales)
Methods:
precompute:
Inputs
- None
Outputs
diagnostics.frac_crop_harvest_efficiency: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :frac_crop_harvest_efficiency)for information on how to add the variable to the catalog.
define, compute, update methods are not defined
End of getModelDocString-generated docstring for cCropHarvestEfficiency_constant.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 26.08.2026 [sol]
Created by
- sol
cCropHarvestEvent
SindbadTEM.Processes.cCropHarvestEvent Type
Approaches
cCropHarvestEvent_forcing:cCropHarvestEvent_none:
cCropHarvestEvent approaches
SindbadTEM.Processes.cCropHarvestEvent_forcing Type
Parameters
- None
Methods:
compute:
Inputs
forcing.f_is_crop_harvested: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_is_crop_harvested)for information on how to add the variable to the catalog.
Outputs
diagnostics.is_crop_harvested: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :is_crop_harvested)for information on how to add the variable to the catalog.
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for cCropHarvestEvent_forcing.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 31.08.2026 [sol]
Created by
- sol
Calculated using:
Inputs: :forcing => :f_is_crop_harvested
Outputs: :diagnostics => :is_crop_harvestedcCropHarvestIntensity
SindbadTEM.Processes.cCropHarvestIntensity Type
Appropriation of carbon for crop products.Approaches
cCropHarvestIntensity_constant: To determine globally constant fractions of crop harvest efficiency and intensity. Intensity reflects how much of the live cVegPools is killed/damaged during a harvest event; in an area basis, this would reflect a portion of the crop that would not die during harvest. Intensity reflects how much of the killed cVegPools is removed from the system, turned into crop products.cCropHarvestIntensity_forcing: Load the harvest intensity fraction from the forcing. Harvest fraction intensity is the proportion of the cVegPools that is killed during a harvest event.cCropHarvestIntensity_none: No crop harvest.
cCropHarvestIntensity approaches
SindbadTEM.Processes.cCropHarvestIntensity_constant Type
To determine globally constant fractions of crop harvest efficiency and intensity. Intensity reflects how much of the live cVegPools is killed/damaged during a harvest event; in an area basis, this would reflect a portion of the crop that would not die during harvest. Intensity reflects how much of the killed cVegPools is removed from the system, turned into crop products.
Parameters
- Fields
constant_frac_crop_harvest_intensity: 0.9 ∈ [0.0, 0.99] => Fraction of the harvestable vegetation live carbon pools carbon pools that is killed by the harvest event (units:fraction@alltimescales)
Methods:
precompute:
Inputs
- None
Outputs
diagnostics.frac_crop_harvest_intensity: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :frac_crop_harvest_intensity)for information on how to add the variable to the catalog.
define, compute, update methods are not defined
End of getModelDocString-generated docstring for cCropHarvestIntensity_constant.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 26.08.2026 [sol]
Created by
- sol
cCycle
SindbadTEM.Processes.cCycle Type
Compute fluxes and changes (cycling) of carbon pools.Approaches
cCycle_simple: Carbon cycle with components based on the cCycleBase approach, including carbon allocation, transfers, and turnover rates.
cCycle approaches
SindbadTEM.Processes.cCycle_simple Type
Carbon cycle with components based on the cCycleBase approach, including carbon allocation, transfers, and turnover rates.
Parameters
- None
Methods:
define:
Inputs
pools.cEco: carbon content of cEco pool(s)
Outputs
fluxes.c_eco_flow: flow of carbon to a given carbon pool from other carbon poolsfluxes.c_eco_influx: net influx from allocation and efflux (npp) to each (live) carbon poolfluxes.c_eco_out: outflux of carbon from each carbol poolfluxes.c_eco_npp: npp of each carbon poolfluxes.zero_c_eco_flow: helper for resetting c_eco_flow in every time stepfluxes.zero_c_eco_influx: helper for resetting c_eco_influx in every time stepstates.cEco_prev: ecosystem carbon content of the previous time steppools.ΔcEco: change in water storage in cEco pool(s)
compute:
Inputs
diagnostics.c_allocation: fraction of gpp allocated to different (live) carbon poolsdiagnostics.c_eco_k: decomposition rate of carbon per pooldiagnostics.c_flow_A_vec: fraction of the carbon loss fron a (giver) pool that flows to a (taker) pooldiagnostics.c_flow_ME_vec: fraction of the carbon leaving a (giver) pool along each of its outgoing transfers that is retained by the (taker) pool rather than respired; allocated as one per flow by cCycleBase and filled in by cMicrobialEfficiencydiagnostics.c_flow_QP_vec: fraction of the carbon loss from a (giver) pool that is routed along each of its outgoing transfers by carbon quality; allocated as one per flow by cCycleBase and filled in by cQualityPartitionfluxes.c_eco_efflux: losss of carbon from (live) vegetation pools due to autotrophic respirationfluxes.c_eco_flow: flow of carbon to a given carbon pool from other carbon poolsfluxes.c_eco_influx: net influx from allocation and efflux (npp) to each (live) carbon poolfluxes.c_eco_out: outflux of carbon from each carbol poolfluxes.c_eco_npp: npp of each carbon poolfluxes.zero_c_eco_flow: helper for resetting c_eco_flow in every time stepfluxes.zero_c_eco_influx: helper for resetting c_eco_influx in every time steppools.cEco: carbon content of cEco pool(s)pools.cVeg: carbon content of cVeg pool(s)pools.ΔcEco: change in water storage in cEco pool(s)states.cEco_prev: ecosystem carbon content of the previous time stepfluxes.gpp: gross primary prorDcutivitycCycleBase.c_flow_order: order of pooling while calculating the carbon flowcCycleBase.c_giver: index of the source carbon pool for a given flowcCycleBase.c_taker: index of the receiving carbon pool for a given flowmodels.c_model: a base carbon cycle model to loop through the pools and fill the main or component pools needed for using static arrays. A mandatory field for every carbon model realizationcCycleBase.zix_cNonVeg: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:cCycleBase, :zix_cNonVeg)for information on how to add the variable to the catalog.cCycleBase.zix_cNatural: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:cCycleBase, :zix_cNatural)for information on how to add the variable to the catalog.cCycleBase.zix_cHeterotrophic: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:cCycleBase, :zix_cHeterotrophic)for information on how to add the variable to the catalog.cCycleBase.zix_cProducts: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:cCycleBase, :zix_cProducts)for information on how to add the variable to the catalog.
Outputs
pools.cEco: carbon content of cEco pool(s)fluxes.nee: net ecosystem carbon exchange for the ecosystem. negative value indicates carbon sink.fluxes.npp: net primary prorDcutivityfluxes.auto_respiration: carbon loss due to autotrophic respirationfluxes.eco_respiration: carbon loss due to ecosystem respirationfluxes.hetero_respiration: carbon loss due to heterotrophic respirationfluxes.product_respiration: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:fluxes, :product_respiration)for information on how to add the variable to the catalog.fluxes.nbp: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:fluxes, :nbp)for information on how to add the variable to the catalog.fluxes.c_eco_efflux: losss of carbon from (live) vegetation pools due to autotrophic respirationfluxes.c_eco_flow: flow of carbon to a given carbon pool from other carbon poolsfluxes.c_eco_influx: net influx from allocation and efflux (npp) to each (live) carbon poolfluxes.c_eco_out: outflux of carbon from each carbol poolfluxes.c_eco_npp: npp of each carbon poolstates.cEco_prev: ecosystem carbon content of the previous time steppools.ΔcEco: change in water storage in cEco pool(s)
precompute, update methods are not defined
End of getModelDocString-generated docstring for cCycle_simple.jl. Check the Extended help for user-defined information.
Extended help
References
- Potter; C. S.; J. T. Randerson; C. B. Field; P. A. Matson; P. M. Vitousek; H. A. Mooney; & S. A. Klooster. 1993. Terrestrial ecosystem production: A process model based on global satellite & surface data. Global Biogeochemical Cycles. 7: 811-841.
Versions
- 1.0 on 28.02.2020 [sbesnard]
Created by
- ncarvalhais
Calculated using:
Inputs: :diagnostics => :c_allocation, :diagnostics => :c_eco_k, :diagnostics => :c_flow_A_vec, :diagnostics => :c_flow_ME_vec, :diagnostics => :c_flow_QP_vec, :fluxes => :c_eco_efflux, :fluxes => :c_eco_flow, :fluxes => :c_eco_influx, :fluxes => :c_eco_out, :fluxes => :c_eco_npp, :fluxes => :zero_c_eco_flow, :fluxes => :zero_c_eco_influx, :pools => :cEco, :pools => :cVeg, :pools => :ΔcEco, :states => :cEco_prev, :fluxes => :gpp, :cCycleBase => :c_flow_order, :cCycleBase => :c_giver, :cCycleBase => :c_taker, :models => :c_model, :cCycleBase => :zix_cNonVeg, :cCycleBase => :zix_cNatural, :cCycleBase => :zix_cHeterotrophic, :cCycleBase => :zix_cProducts
Outputs: :pools => :cEco, :fluxes => :nee, :fluxes => :npp, :fluxes => :auto_respiration, :fluxes => :eco_respiration, :fluxes => :hetero_respiration, :fluxes => :product_respiration, :fluxes => :nbp, :fluxes => :c_eco_efflux, :fluxes => :c_eco_flow, :fluxes => :c_eco_influx, :fluxes => :c_eco_out, :fluxes => :c_eco_npp, :states => :cEco_prev, :pools => :ΔcEcocCycleBase
SindbadTEM.Processes.cCycleBase Type
Defines the base properties of the carbon cycle components. For example, components of carbon pools, their turnover rates, and flow matrix.Approaches
cCycleBase_CASA: Structure and properties of the carbon cycle components used in the CASA approach.cCycleBase_GSI: Structure and properties of the carbon cycle components as needed for a dynamic phenology-based carbon cycle in the GSI approach.cCycleBase_MGMT: Same as GSI, additionally allowing for scaling of turnover parameters based on plant forms.
cCycleBase approaches
SindbadTEM.Processes.cCycleBase_CASA Type
Structure and properties of the carbon cycle components used in the CASA approach.
Parameters
- Fields
k_c_rootfine_scalar: 1.0 ∈ [0.25, 4.0] => scalar for the per-vegetation-type turnover rate of fine roots (units:year-1@yeartimescale)k_c_rootcoarse_scalar: 1.0 ∈ [0.25, 4.0] => scalar for the per-vegetation-type turnover rate of coarse roots (units:year-1@yeartimescale)k_c_wood_scalar: 1.0 ∈ [0.25, 4.0] => scalar for the per-vegetation-type turnover rate of wood (units:year-1@yeartimescale)k_c_leaf_scalar: 1.0 ∈ [0.25, 4.0] => scalar for the per-vegetation-type turnover rate of leaves (units:year-1@yeartimescale)k_c_litfast_scalar: 1.0 ∈ [0.25, 4] => scalar for turnover rate of fast litter carbon pools (units:year-1@yeartimescale)k_c_litslow_scalar: 1.0 ∈ [0.25, 4] => scalar for turnover rate of slow litter carbon pools (units:year-1@yeartimescale)k_c_micsurf_scalar: 1.0 ∈ [0.25, 4.0] => scalar for the per-pool turnover rate of ecosystem carbon pools (units:year-1@yeartimescale)k_c_micsoil_scalar: 1.0 ∈ [0.25, 4.0] => scalar for the per-pool turnover rate of ecosystem carbon pools (units:year-1@yeartimescale)k_c_soilslow_scalar: 1.0 ∈ [0.25, 4] => scalar for turnover rate of soil slow carbon pool (units:year-1@yeartimescale)k_c_soilold_scalar: 1.0 ∈ [0.25, 4] => scalar for turnover rate of soil old carbon pool (units:year-1@yeartimescale)α_k_cVeg: 1.0 ∈ [0.25, 4.0] => scalar for turnover rate of all vegetation carbon pools; it has no timescale, since it scales the original pool level k. (units:-@alltimescales)α_k_cLit: 1.0 ∈ [0.25, 4] => scalar for turnover rate of all litter carbon pools; it has no timescale, since it scales the original pool level k. (units:-@alltimescales)α_k_cSoil: 1.0 ∈ [0.25, 4] => scalar for turnover rate of all soil carbon pools; it has no timescale, since it scales the original pool level k. (units:-@alltimescales)α_k_cMic: 1.0 ∈ [0.25, 4] => scalar for turnover rate of all microbial carbon pools; it has no timescale, since it scales the original pool level k. (units:-@alltimescales)CN_ratio_scalar: 1.0 ∈ [0.25, 4.0] => scalar for the vegetation carbon-to-nitrogen ratio (units:-@alltimescales)eff_cLit_to_cMicSurf: 0.4 ∈ [0.0, 1.0] => Microbial carbon-transfer efficiency of litter decomposition into the surface microbial pool. (units:fraction@alltimescales)eff_cLitRootFine_to_cMicSoil: 0.45 ∈ [0.0, 1.0] => Microbial carbon-transfer efficiency of fine-root litter decomposition into the soil microbial pool. (units:fraction@alltimescales)eff_cLitRootCoarse_to_cMicSoil: 0.4 ∈ [0.0, 1.0] => Microbial carbon-transfer efficiency of coarse-root litter decomposition into the soil microbial pool. (units:fraction@alltimescales)eff_cLit_to_cSoilSlow: 0.6 ∈ [0.0, 1.0] => Microbial carbon-transfer efficiency of structural and woody litter decomposition into the slow soil pool. (units:fraction@alltimescales)eff_cLitRootFine_to_cSoilSlow: 0.55 ∈ [0.0, 1.0] => Microbial carbon-transfer efficiency of fine-root structural litter decomposition into the slow soil pool. (units:fraction@alltimescales)eff_cMicSurf_to_cSoilSlow: 0.4 ∈ [0.0, 1.0] => Microbial carbon-transfer efficiency of surface microbial turnover into the slow soil pool. (units:fraction@alltimescales)eff_cSoil_to_cMicSoil: 0.45 ∈ [0.0, 1.0] => Microbial carbon-transfer efficiency of slow and old soil decomposition returning to the soil microbial pool. (units:fraction@alltimescales)eff_cSoilSlow_to_cSoilOld: 0.45 ∈ [0.0, 1.0] => Microbial carbon-transfer efficiency of slow soil decomposition stabilized into old soil carbon. (units:fraction@alltimescales)c_remain_scalar: 1.0 ∈ [0.1, 10.0] => scalar for the per-vegetation-type minimum remaining carbon after disturbance (units:-@alltimescales)k_hilo_scalar: 1.0 ∈ [-Inf, Inf] => timescale factor for split of high and low turnover rates (units:-@yeartimescale)
Methods:
define:
Inputs
pools.cEco: carbon content of cEco pool(s)vegClass.veg_type_class_map: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:vegClass, :veg_type_class_map)for information on how to add the variable to the catalog.
Outputs
diagnostics.CN_ratio_cVeg: carbon to nitrogen ratio in the vegetation poolsdiagnostics.c_eco_k_base: base carbon decomposition rate of the carbon poolsdiagnostics.c_flow_A_vec: fraction of the carbon loss fron a (giver) pool that flows to a (taker) pooldiagnostics.c_flow_QP_vec: fraction of the carbon loss from a (giver) pool that is routed along each of its outgoing transfers by carbon quality; allocated as one per flow by cCycleBase and filled in by cQualityPartitiondiagnostics.c_flow_ME_vec: fraction of the carbon leaving a (giver) pool along each of its outgoing transfers that is retained by the (taker) pool rather than respired; allocated as one per flow by cCycleBase and filled in by cMicrobialEfficiencydiagnostics.rootfine_age_per_vegtype: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :rootfine_age_per_vegtype)for information on how to add the variable to the catalog.diagnostics.leaf_age_per_vegtype: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :leaf_age_per_vegtype)for information on how to add the variable to the catalog.diagnostics.rootcoarse_age_per_vegtype: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :rootcoarse_age_per_vegtype)for information on how to add the variable to the catalog.diagnostics.wood_age_per_vegtype: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :wood_age_per_vegtype)for information on how to add the variable to the catalog.diagnostics.c_remain_per_vegtype: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_remain_per_vegtype)for information on how to add the variable to the catalog.cCycleBase.c_flow_order: order of pooling while calculating the carbon flowcCycleBase.c_taker: index of the receiving carbon pool for a given flowcCycleBase.c_giver: index of the source carbon pool for a given flowcCycleBase.pool_names: cEco_index => pool_name pair for each carbon pool – informational only, for inspecting land.cCycleBase; no process matches pools by thiscCycleBase.flow_edges: flow_order => (giver_name => taker_name) pair for each carbon flow, in flow-vector order – informational only, for inspecting land.cCycleBase; no process matches flows by thiscCycleBase.c_flow_taker_turnover_rank: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:cCycleBase, :c_flow_taker_turnover_rank)for information on how to add the variable to the catalog.cCycleBase.zix_cNonVeg: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:cCycleBase, :zix_cNonVeg)for information on how to add the variable to the catalog.cCycleBase.zix_cNatural: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:cCycleBase, :zix_cNatural)for information on how to add the variable to the catalog.cCycleBase.zix_cHeterotrophic: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:cCycleBase, :zix_cHeterotrophic)for information on how to add the variable to the catalog.cCycleBase.zix_cProducts: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:cCycleBase, :zix_cProducts)for information on how to add the variable to the catalog.models.c_model: a base carbon cycle model to loop through the pools and fill the main or component pools needed for using static arrays. A mandatory field for every carbon model realization
precompute:
Inputs
diagnostics.CN_ratio_cVeg: carbon to nitrogen ratio in the vegetation poolsdiagnostics.c_eco_k_base: base carbon decomposition rate of the carbon poolsdiagnostics.c_flow_ME_vec: fraction of the carbon leaving a (giver) pool along each of its outgoing transfers that is retained by the (taker) pool rather than respired; allocated as one per flow by cCycleBase and filled in by cMicrobialEfficiencydiagnostics.rootfine_age_per_vegtype: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :rootfine_age_per_vegtype)for information on how to add the variable to the catalog.diagnostics.leaf_age_per_vegtype: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :leaf_age_per_vegtype)for information on how to add the variable to the catalog.diagnostics.rootcoarse_age_per_vegtype: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :rootcoarse_age_per_vegtype)for information on how to add the variable to the catalog.diagnostics.wood_age_per_vegtype: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :wood_age_per_vegtype)for information on how to add the variable to the catalog.diagnostics.c_remain_per_vegtype: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_remain_per_vegtype)for information on how to add the variable to the catalog.cCycleBase.c_flow_order: order of pooling while calculating the carbon flowcCycleBase.c_giver: index of the source carbon pool for a given flowcCycleBase.c_taker: index of the receiving carbon pool for a given flowcCycleBase.c_flow_taker_turnover_rank: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:cCycleBase, :c_flow_taker_turnover_rank)for information on how to add the variable to the catalog.states.veg_type_name: vegetation type class of the pixel, the single source of vegetation type for downstream processes
Outputs
diagnostics.CN_ratio_cVeg: carbon to nitrogen ratio in the vegetation poolsdiagnostics.c_eco_k_base: base carbon decomposition rate of the carbon poolsdiagnostics.c_flow_ME_vec: fraction of the carbon leaving a (giver) pool along each of its outgoing transfers that is retained by the (taker) pool rather than respired; allocated as one per flow by cCycleBase and filled in by cMicrobialEfficiencystates.c_remain: amount of carbon to keep in the ecosystem vegetation pools in case of disturbancescCycleBase.c_flow_taker_turnover_rank: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:cCycleBase, :c_flow_taker_turnover_rank)for information on how to add the variable to the catalog.cCycleBase.k_hilo_lit_split: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:cCycleBase, :k_hilo_lit_split)for information on how to add the variable to the catalog.
compute, update methods are not defined
End of getModelDocString-generated docstring for cCycleBase_CASA.jl. Check the Extended help for user-defined information.
Extended help
Pool topology
The 22 giver-to-taker links of this approach are declared as CASA_FLOW_EDGES in poolConfigurations/CASA.jl, and the pools they name as poolStructure(CASA) beside it. cFlowMatrix(cCycleBase_CASA, pool_names) returns them as a [taker, giver] matrix of flow indices, and plotCarbonFlows draws them.
Microbial efficiency
precompute carries CASA's static microbial-carbon-transfer-efficiency table as ordinary bounded parameters (eff_cLit_to_cMicSurf and the other seven) and writes them into c_flow_ME_vec, giving CASA a realistic default with no cMicrobialEfficiency approach selected. Only the soil-microbial pool's texture response is left out; select cMicrobialEfficiencycMic_texture for it. This lives in precompute, not define, since the eff_* fields are optimizable parameters and define runs once ever.
Turnover rate and carbon-to-nitrogen ratio
k_c_scalar, CN_ratio_scalar, and the four *_age_scalar fields are likewise resolved in precompute: define only allocates the zero-initialized c_eco_k_base/CN_ratio_cVeg arrays and the flow topology, and precompute writes their actual values by pool name via @rep_elem (the land arrays are immutable SVectors). CASA_TAU_NON_VEG_POOLS/CASA_CN_ratio (in poolConfigurations/CASA.jl) carry the fixed per-pool turnover-time and C:N-ratio data; only the scalars are optimizable.
The four vegetation-compartment pools' turnover (cVegRootFine, cVegRootCoarse, cVegWood, cVegLeaf) is not in CASA_TAU_NON_VEG_POOLS: it varies by land.states.veg_type_name. define re-keys CVEG_ROOTFINE_AGE_PER_VEGTYPE/CVEG_LEAF_AGE_PER_VEGTYPE/ CVEG_ROOTCOARSE_AGE_PER_VEGTYPE/CVEG_WOOD_AGE_PER_VEGTYPE (ParamsForVegClasses.jl) onto the experiment's resolved vegClass classification via getParamsPerVegType, and precompute looks the pixel's veg_type_name up in each and applies the matching *_age_scalar through getKfromTau.
k_c_scalar and the four *_age_scalar fields declare "year" as their timescale, so getTypedModel/getParameters rescale their default and bounds to the model's configured timestep before a run starts.
References
Carvalhais; N.; Reichstein; M.; Seixas; J.; Collatz; G. J.; Pereira; J. S.; Berbigier; P. & Rambal, S. (2008). Implications of the carbon cycle steady state assumption for biogeochemical modeling performance & inverse parameter retrieval. Global Biogeochemical Cycles, 22[2].
Potter, C., Klooster, S., Myneni, R., Genovese, V., Tan, P. N., & Kumar, V. (2003). Continental-scale comparisons of terrestrial carbon sinks estimated from satellite data & ecosystem modeling 1982–1998. Global & Planetary Change, 39[3-4], 201-213.
Potter; C. S.; Randerson; J. T.; Field; C. B.; Matson; P. A.; Vitousek; P. M.; Mooney; H. A. & Klooster, S. A. (1993). Terrestrial ecosystem production: a process model based on global satellite & surface data. Global Biogeochemical Cycles, 7[4], 811-841.
Versions
1.0 on 28.05.2022 [skoirala | @dr-ko]: migrate to julia
1.1 on 04.09.2026 [skoirala]: allocate
c_flow_ME_vechere; remove the deadc_flow_MEQP_arrayparameter and the transcribedc_flow_A_array1.2 on 09.09.2026 [skoirala]: fold
cMicrobialEfficiency_CASA's 8 static constants in as parameters, applied toc_flow_ME_vecindefine; remove the now-duplicatecMicrobialEfficiency_CASAand its three per-group factors1.3 on 10.09.2026 [skoirala]: key the four
*_age_per_PFTfields by canonical PFT name instead of position; replace with fixed named lookups plus bounded scalar multipliers1.4 on 10.09.2026 [skoirala]: port onto the working
cCycleBase_GSI_PlantForm.jlpattern (this approach had never been run end to end):annkbecomesCASA_ANNKplusannk_scalar; the ME-table and turnover computation move fromdefinetoprecompute; replace bulk.=/tuple-indexed assignment with@rep_elemloops (land.diagnosticsarrays are immutableSVectors); allocatec_eco_k_base1.5 on 10.09.2026 [skoirala]: move
meCASAFlowsLitter/meCASAFlowsSoilhere fromcMicrobialEfficiencycLit/cSoil, their only caller1.6 on 10.09.2026 [skoirala]: move the
*_age_per_PFTtables to the consolidatedvegTypeParamCatalog.jl; the four*_age_scalarfields stay here, still unwired intoprecompute1.7 on 11.09.2026 [skoirala]: rename
CASA_ANNKtoCASA_TAU_NON_VEG_POOLS(turnover time, not rate) andannk_scalartok_c_scalar; replace the 4-elementp_CN_ratio_cVegwith the full-coverageCASA_CN_ratiotable plusCN_ratio_scalar; freeze prior behavior ascCycleBase_CASA_Legacy;define'sc_modelnow packsparamsitself rather than a fresh instance; rename the four*_age_scalarfields to thek_c_*convention1.8 on 11.09.2026 [skoirala]: fix a pre-existing bug (never exercised end to end, see 1.4):
k_c_scalarhad no declared timescale, so turnover was never rescaled to the model's timestep; declaring"year"fixes it1.9 on 11.09.2026 [skoirala]: wire the four
*_age_scalarfields intoprecompute(dead since 1.6); vegetation-compartment turnover now varies byveg_type_nameviagetParamsPerVegType; declare"year"timescale on the four scalars; freeze prior behavior ascCycleBase_CASA_Legacy2.0 on 15.09.2026 [skoirala]: replace the flat
c_remainparameter withc_remain_scalar, following the per-vegetation-type pattern of the turnover ages above (C_REMAIN_PER_VEGTYPE,getParamForVegType)
Created by
- ncarvalhais
cCycleConsistency
SindbadTEM.Processes.cCycleConsistency Type
Consistency and sanity checks in carbon allocation and transfers.Approaches
cCycleConsistency_simple: Checks consistency in the cCycle vector, including c_allocation and cFlow.
cCycleConsistency approaches
SindbadTEM.Processes.cCycleConsistency_simple Type
Checks consistency in the cCycle vector, including c_allocation and cFlow.
Parameters
- None
Methods:
define:
Inputs
pools.cEco: carbon content of cEco pool(s)cCycleBase.c_giver: index of the source carbon pool for a given flowcCycleBase.c_taker: index of the receiving carbon pool for a given flow
Outputs
cCycleConsistency.giver_lower_unique: unique indices of carbon pools whose flow is >0 below the diagonal in carbon flow matrixcCycleConsistency.giver_upper_unique: unique indices of carbon pools whose flow is >0 above the diagonal in carbon flow matrix
precompute, compute, update methods are not defined
End of getModelDocString-generated docstring for cCycleConsistency_simple.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 12.05.2022: skoirala: julia implementation
Created by
- sbesnard
cCycleDisturbance
SindbadTEM.Processes.cCycleDisturbance Type
Disturbance of the carbon cycle pools.Approaches
cCycleDisturbance_simple: Moves carbon in vegetation pools to their non-vegetation carbon-flow target pools during disturbance events while allowing a parameterized fraction of the reserve pool to survive.
cCycleDisturbance approaches
SindbadTEM.Processes.cCycleDisturbance_simple Type
Moves carbon in vegetation pools to their non-vegetation carbon-flow target pools during disturbance events while allowing a parameterized fraction of the reserve pool to survive.
Parameters
- None
Methods:
define:
Inputs
pools.cEco: carbon content of cEco pool(s)
Outputs
- None
compute:
Inputs
pools.cEco: carbon content of cEco pool(s)models.c_model: a base carbon cycle model to loop through the pools and fill the main or component pools needed for using static arrays. A mandatory field for every carbon model realization
Outputs
pools.cEco: carbon content of cEco pool(s)
precompute, update methods are not defined
End of getModelDocString-generated docstring for cCycleDisturbance_simple.jl. Check the Extended help for user-defined information.
Extended help
This approach is called ImplicitResprout because post-disturbance recovery is represented implicitly through survival of a fraction frac_reserve_survival of cVegReserve, rather than through an explicit resprouting via seed pools. The non-surviving fraction follows the existing vegetation-to-litter flow pathways. frac_reserve_survival = 0 reduces to NoRecovery for the reserve pool, while frac_reserve_survival = 1 gives complete reserve survival.
References
- Carvalhais; N.; Reichstein; M.; Seixas; J.; Collatz; G. J.; Pereira; J. S.; Berbigier; P. & Rambal, S. (2008). Implications of the carbon cycle steady state assumption for biogeochemical modeling performance & inverse parameter retrieval. Global Biogeochemical Cycles, 22[2].
Versions
1.0 on 23.04.2021 [skoirala | @dr-ko]
1.0 on 23.04.2021 [skoirala | @dr-ko]
1.1 on 29.11.2021 [skoirala | @dr-ko]: moved the scaling parameters to ccyclebase_gsi [land.diagnostics.ηA & land.diagnostics.ηH]
Created by
- skoirala | @dr-ko
Calculated using:
Inputs: :pools => :cEco, :models => :c_model
Outputs: :pools => :cEcocCycleManagement
SindbadTEM.Processes.cCycleManagement Type
Agriculture and forestryApproaches
cCycleManagement_none: No management.cCycleManagement_simple: This is used for crop and forestry harvest events. Moves carbon to export and decomposable pools, according to their respective carbon flow target pools, during harvest events.
cCycleManagement approaches
SindbadTEM.Processes.cCycleManagement_none Type
No management.
Parameters
- None
Methods:
define, precompute, compute, update methods are not defined
End of getModelDocString-generated docstring for cCycleManagement_none.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 26.08.2026 [sol]
Created by
- sol
cDieBack
SindbadTEM.Processes.cDieBack Type
Disturbance of the carbon cycle pools.Approaches
cDieBack_ImplicitResprout: Unspecified mortality. Could be a storm. Moves carbon in vegetation pools to their non-vegetation carbon-flow target pools during disturbance events while allowing a parameterized fraction of the reserve pool to survive.
cDieBack approaches
SindbadTEM.Processes.cDieBack_ImplicitResprout Type
Unspecified mortality. Could be a storm. Moves carbon in vegetation pools to their non-vegetation carbon-flow target pools during disturbance events while allowing a parameterized fraction of the reserve pool to survive.
Parameters
- Fields
frac_reserve_survival: 1.0 ∈ [0.0, 1.0] => fraction of the reserve carbon pools that survives upon a disturbance (unitless@alltimescales)
Methods:
define:
Inputs
pools.cEco: carbon content of cEco pool(s)
Outputs
diagnostics.c_disturbance_mortality: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_disturbance_mortality)for information on how to add the variable to the catalog.diagnostics.c_disturbance_flow: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_disturbance_flow)for information on how to add the variable to the catalog.diagnostics.c_disturbance_efflux: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_disturbance_efflux)for information on how to add the variable to the catalog.
compute:
Inputs
cCycleBase.c_flow_order: order of pooling while calculating the carbon flowcCycleBase.c_giver: index of the source carbon pool for a given flowcCycleBase.c_taker: index of the receiving carbon pool for a given flowcCycleBase.zix_cHeterotrophic: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:cCycleBase, :zix_cHeterotrophic)for information on how to add the variable to the catalog.pools.cEco: carbon content of cEco pool(s)states.c_remain: amount of carbon to keep in the ecosystem vegetation pools in case of disturbancesconstants.z_zero: a helper type stable 0 to be used across all modelsdiagnostics.c_f_cVeg_dieOff: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_f_cVeg_dieOff)for information on how to add the variable to the catalog.diagnostics.c_flow_QP_vec: fraction of the carbon loss from a (giver) pool that is routed along each of its outgoing transfers by carbon quality; allocated as one per flow by cCycleBase and filled in by cQualityPartitiondiagnostics.c_disturbance_mortality: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_disturbance_mortality)for information on how to add the variable to the catalog.diagnostics.c_disturbance_flow: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_disturbance_flow)for information on how to add the variable to the catalog.diagnostics.c_disturbance_efflux: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_disturbance_efflux)for information on how to add the variable to the catalog.
Outputs
diagnostics.c_disturbance_mortality: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_disturbance_mortality)for information on how to add the variable to the catalog.diagnostics.c_disturbance_flow: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_disturbance_flow)for information on how to add the variable to the catalog.diagnostics.c_disturbance_efflux: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_disturbance_efflux)for information on how to add the variable to the catalog.
precompute, update methods are not defined
End of getModelDocString-generated docstring for cDieBack_ImplicitResprout.jl. Check the Extended help for user-defined information.
Extended help
This approach is called ImplicitResprout because post-disturbance recovery is represented implicitly through survival of a fraction frac_reserve_survival of cVegReserve, rather than through an explicit resprouting via seed pools. The non-surviving fraction follows the existing vegetation-to-litter flow pathways. frac_reserve_survival = 0 reduces to NoRecovery for the reserve pool, while frac_reserve_survival = 1 gives complete reserve survival.
References
- Carvalhais; N.; Reichstein; M.; Seixas; J.; Collatz; G. J.; Pereira; J. S.; Berbigier; P. & Rambal, S. (2008). Implications of the carbon cycle steady state assumption for biogeochemical modeling performance & inverse parameter retrieval. Global Biogeochemical Cycles, 22[2].
Versions
1.0 on 23.04.2021 [skoirala | @dr-ko]
1.0 on 23.04.2021 [skoirala | @dr-ko]
1.1 on 29.11.2021 [skoirala | @dr-ko]: moved the scaling parameters to ccyclebase_gsi [land.diagnostics.ηA & land.diagnostics.ηH]
Created by
- skoirala | @dr-ko
Calculated using:
Inputs: :cCycleBase => :c_flow_order, :cCycleBase => :c_giver, :cCycleBase => :c_taker, :cCycleBase => :zix_cHeterotrophic, :pools => :cEco, :states => :c_remain, :constants => :z_zero, :diagnostics => :c_f_cVeg_dieOff, :diagnostics => :c_flow_QP_vec, :diagnostics => :c_disturbance_mortality, :diagnostics => :c_disturbance_flow, :diagnostics => :c_disturbance_efflux
Outputs: :diagnostics => :c_disturbance_mortality, :diagnostics => :c_disturbance_flow, :diagnostics => :c_disturbance_effluxcFire
SindbadTEM.Processes.cFire Type
Carbon loss due to fire disturbance events.Approaches
cFire_simple: This is used for vegetation die-off and fire disturbance events. Moves carbon in reserve pool to slow litter pool, and all other carbon pools except reserve pool to their respective carbon flow target pools during disturbance events.
cFire approaches
SindbadTEM.Processes.cFire_simple Type
This is used for vegetation die-off and fire disturbance events. Moves carbon in reserve pool to slow litter pool, and all other carbon pools except reserve pool to their respective carbon flow target pools during disturbance events.
Parameters
- None
Methods:
define:
Inputs
pools.cEco: carbon content of cEco pool(s)
Outputs
diagnostics.c_fire_mortality: total carbon lost by each vegetation pool to fire or die-off, the combusted part plus the flow to litter and soildiagnostics.c_fire_efflux: carbon of each pool combusted by fire and emitted to the atmospherediagnostics.c_fire_flow: carbon of vegetation killed by fire or die-off but not combusted, received by each litter and soil pool
compute:
Inputs
diagnostics.c_f_cVeg_dieOff: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_f_cVeg_dieOff)for information on how to add the variable to the catalog.diagnostics.c_fire_mortality: total carbon lost by each vegetation pool to fire or die-off, the combusted part plus the flow to litter and soildiagnostics.c_fire_efflux: carbon of each pool combusted by fire and emitted to the atmospherediagnostics.c_fire_flow: carbon of vegetation killed by fire or die-off but not combusted, received by each litter and soil pooldiagnostics.c_fire_fba: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_fire_fba)for information on how to add the variable to the catalog.diagnostics.c_flow_QP_vec: fraction of the carbon loss from a (giver) pool that is routed along each of its outgoing transfers by carbon quality; allocated as one per flow by cCycleBase and filled in by cQualityPartitiondiagnostics.c_Fire_cci: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_Fire_cci)for information on how to add the variable to the catalog.diagnostics.c_Fire_k: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_Fire_k)for information on how to add the variable to the catalog.pools.cEco: carbon content of cEco pool(s)states.c_remain: amount of carbon to keep in the ecosystem vegetation pools in case of disturbancescCycleBase.c_flow_order: order of pooling while calculating the carbon flowcCycleBase.c_giver: index of the source carbon pool for a given flowcCycleBase.c_taker: index of the receiving carbon pool for a given flowcCycleBase.zix_cHeterotrophic: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:cCycleBase, :zix_cHeterotrophic)for information on how to add the variable to the catalog.constants.z_zero: a helper type stable 0 to be used across all models
Outputs
fluxes.cFireTotal: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:fluxes, :cFireTotal)for information on how to add the variable to the catalog.diagnostics.c_fire_mortality: total carbon lost by each vegetation pool to fire or die-off, the combusted part plus the flow to litter and soildiagnostics.c_fire_efflux: carbon of each pool combusted by fire and emitted to the atmospherediagnostics.c_fire_flow: carbon of vegetation killed by fire or die-off but not combusted, received by each litter and soil pool
precompute, update methods are not defined
End of getModelDocString-generated docstring for cFire_simple.jl. Check the Extended help for user-defined information.
Extended help
Created by - Nuno | nunocarvalhais
sourceCalculated using:
Inputs: :diagnostics => :c_f_cVeg_dieOff, :diagnostics => :c_fire_mortality, :diagnostics => :c_fire_efflux, :diagnostics => :c_fire_flow, :diagnostics => :c_fire_fba, :diagnostics => :c_flow_QP_vec, :diagnostics => :c_Fire_cci, :diagnostics => :c_Fire_k, :pools => :cEco, :states => :c_remain, :cCycleBase => :c_flow_order, :cCycleBase => :c_giver, :cCycleBase => :c_taker, :cCycleBase => :zix_cHeterotrophic, :constants => :z_zero
Outputs: :fluxes => :cFireTotal, :diagnostics => :c_fire_mortality, :diagnostics => :c_fire_efflux, :diagnostics => :c_fire_flowcFireBurnedArea
SindbadTEM.Processes.cFireBurnedArea Type
Accounts for carbon emissions due to fireApproaches
cFireBurnedArea_forcing: Uses fire forcing data to calculate emissions.cFireBurnedArea_none: No fire forcing, and therefore, no fire emissions.
Extended help
Approaches:
none: no fire forcing, no emissions
forcing: uses fire forcing data to calculate emissions
Created by
- Nuno | nunocarvalhais
cFireBurnedArea approaches
SindbadTEM.Processes.cFireBurnedArea_forcing Type
Uses fire forcing data to calculate emissions.
Parameters
- None
Methods:
define:
Inputs
forcing.f_burnt_area: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_burnt_area)for information on how to add the variable to the catalog.
Outputs
diagnostics.c_fire_fba: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_fire_fba)for information on how to add the variable to the catalog.
compute:
Inputs
forcing.f_burnt_area: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_burnt_area)for information on how to add the variable to the catalog.
Outputs
diagnostics.c_fire_fba: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_fire_fba)for information on how to add the variable to the catalog.
precompute, update methods are not defined
End of getModelDocString-generated docstring for cFireBurnedArea_forcing.jl. Check the Extended help for user-defined information.
Extended help
Created by
- Nuno | nunocarvalhais
Calculated using:
Inputs: :forcing => :f_burnt_area
Outputs: :diagnostics => :c_fire_fbacFireCombustionCompleteness
SindbadTEM.Processes.cFireCombustionCompleteness Type
Accounts for carbon emissions due to fire, combustion completeness.Approaches
cFireCombustionCompleteness_none: No fire forcing, no emissionscFireCombustionCompleteness_vanDerWerf2006: Uses the van der Werf et al. (2006) method to calculate combustion completeness.
Extended help
Approaches:
none: no fire forcing, no emissions
vanDerWerf2006: uses the van der Werf et al. (2006) method to calculate combustion completeness.
Created by
- Nuno | nunocarvalhais
cFireCombustionCompleteness approaches
SindbadTEM.Processes.cFireCombustionCompleteness_none Type
No fire forcing, no emissions
Parameters
- None
Methods:
define, precompute, compute, update methods are not defined
End of getModelDocString-generated docstring for cFireCombustionCompleteness_none.jl. Check the Extended help for user-defined information.
Extended help
Created by
- Nuno | nunocarvalhais
cFireMortality
SindbadTEM.Processes.cFireMortality Type
Disturbance of the carbon cycle pools due to fire.Approaches
cFireMortality_none: No fire mortality, no emissionscFireMortality_vanDerWerf2004: Uses the van der Werf et al. (2004) method to calculate fire mortality.
Approaches:
none
vanDerWerf2004: uses the van der Werf et al. (2004) method to calculate fire mortality.
Created by - Nuno | nunocarvalhais
sourcecFireMortality approaches
SindbadTEM.Processes.cFireMortality_none Type
No fire mortality, no emissions
Parameters
- None
Methods:
define, precompute, compute, update methods are not defined
End of getModelDocString-generated docstring for cFireMortality_none.jl. Check the Extended help for user-defined information.
Extended help
Created by - Nuno | nunocarvalhais
sourcecFlow
SindbadTEM.Processes.cFlow Type
Transfer rates for carbon flow between different vegetation pools.Approaches
cFlow_GSI: Carbon transfer rates related to vegetation pools.cFlow_GSIMP: Carbon transfer rates related to vegetation pools.
cFlow approaches
SindbadTEM.Processes.cFlow_GSI Type
Carbon transfer rates related to vegetation pools.
Parameters
- None
Methods:
compute:
Inputs
cCycleBase.c_giver: index of the source carbon pool for a given flowcCycleBase.c_taker: index of the receiving carbon pool for a given flowdiagnostics.c_eco_k: decomposition rate of carbon per pooldiagnostics.c_flow_A_vec: fraction of the carbon loss fron a (giver) pool that flows to a (taker) pool
Outputs
diagnostics.c_flow_A_vec: fraction of the carbon loss fron a (giver) pool that flows to a (taker) pool
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for cFlow_GSI.jl. Check the Extended help for user-defined information.
Extended help
The reserve-pool exchange and leaf/root shedding this approach models are located by pool membership (edgesBetween), not by naming an exact <giver>_to_<taker> edge, so the same code applies unchanged whether Leaf's shedding lands in one pool (GSI's cLitFast) or several (CASA's cLitLeafFast/cLitLeafSlow), and whether a reserve pool exists at all: an absent one (CASA has none) makes every reserve-related edge lookup return no matches, so those terms simply contribute nothing rather than erroring or silently mismatching the wrong edge.
References
Versions
1.0 on 13.01.2020 [sbesnard]
1.1 on 05.02.2021 [skoirala | @dr-ko]: changes with stressors & smoothing as well as handling the activation of leaf/root to reserve | reserve to leaf/root switches. Adjustment of total flow rates [cTau] of relevant pools
1.1 on 05.02.2021 [skoirala | @dr-ko]: move code from dyna. Add table etc.
1.2 on 10.09.2026 [skoirala]: edge selection generalized from exact
c_flow_named_edges.<giver>_to_<taker>name lookups (which errored on any pool structure without a literal edge of that exact name, e.g. CASA's absent cVegReserve or its split cLitLeafFast/cLitLeafSlow in place of cLitFast) toedgesBetween, a giver/taker pool-membership match
Created by
- ncarvalhais, sbesnard, skoirala
Notes
sourceCalculated using:
Inputs: :cCycleBase => :c_giver, :cCycleBase => :c_taker, :diagnostics => :c_eco_k, :diagnostics => :c_flow_A_vec
Outputs: :diagnostics => :c_flow_A_veccFlowLitterfall
SindbadTEM.Processes.cFlowLitterfall Type
Vegetation carbon loss rates to litter, including background turnover and phenological shedding.Approaches
cFlowLitterfall_CASA: Seasonally distributes CASA vegetation turnover into leaf and fine-root litterfall using LAI dynamics. NOT TESTEDcFlowLitterfall_GSI: .cFlowLitterfall_none: .
cFlowLitterfall approaches
SindbadTEM.Processes.cFlowLitterfall_CASA Type
Seasonally distributes CASA vegetation turnover into leaf and fine-root litterfall using LAI dynamics. NOT TESTED
Parameters
- Fields
max_min_LAI: 12.0 ∈ [11.0, 13.0] => maximum value for the minimum LAI for litter scalars (units:m2/m2@alltimescales)
Methods:
define:
Inputs
pools.cEco: carbon content of cEco pool(s)states.LAI: leaf area index
Outputs
diagnostics.leaf_shedding_frac: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :leaf_shedding_frac)for information on how to add the variable to the catalog.diagnostics.root_shedding_frac: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :root_shedding_frac)for information on how to add the variable to the catalog.states.LAI13: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:states, :LAI13)for information on how to add the variable to the catalog.
compute:
Inputs
states.LAI: leaf area indexstates.LAI13: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:states, :LAI13)for information on how to add the variable to the catalog.
Outputs
- None
precompute, update methods are not defined
End of getModelDocString-generated docstring for cFlowLitterfall_CASA.jl. Check the Extended help for user-defined information.
Extended help
References
Carvalhais; N.; Reichstein; M.; Seixas; J.; Collatz; G. J.; Pereira; J. S.; Berbigier; P. & Rambal, S. (2008). Implications of the carbon cycle steady state assumption for biogeochemical modeling performance & inverse parameter retrieval. Global Biogeochemical Cycles, 22[2].
Potter, C., Klooster, S., Myneni, R., Genovese, V., Tan, P. N., & Kumar, V. (2003). Continental-scale comparisons of terrestrial carbon sinks estimated from satellite data & ecosystem modeling 1982–1998. Global & Planetary Change, 39[3-4], 201-213.
Potter; C. S.; J. T. Randerson; C. B. Field; P. A. Matson; P. M. Vitousek; H. A. Mooney; & S. A. Klooster. 1993. Terrestrial ecosystem production: A process model based on global satellite & surface data. Global Biogeochemical Cycles. 7: 811-841.
Potter; C. S.; Randerson; J. T.; Field; C. B.; Matson; P. A.; Vitousek; P. M.; Mooney; H. A. & Klooster, S. A. (1993). Terrestrial ecosystem production: a process model based on global satellite & surface data. Global Biogeochemical Cycles, 7[4], 811-841.
Versions
1.0 on 12.01.2020 [sbesnard]
1.0 on 12.01.2020 [sbesnard]
1.1 on 05.11.2020 [skoirala | @dr-ko]: speedup
Created by
- ncarvalhais
Calculated using:
Inputs: :states => :LAI, :states => :LAI13cFlowReserves
SindbadTEM.Processes.cFlowReserves Type
Internal vegetation carbon transfers to and from reserve pools.Approaches
cFlowReserves_GSI: Carbon transfer rates between pools based on the GSI approach, using stressors such as soil moisture, temperature, and light.cFlowReserves_none: .
cFlowReserves approaches
SindbadTEM.Processes.cFlowReserves_GSI Type
Carbon transfer rates between pools based on the GSI approach, using stressors such as soil moisture, temperature, and light.
Parameters
- Fields
slope_leaf_root_to_reserve: 0.14 ∈ [0.033, 0.33] => Leaf-Root to Reserve (units:fraction@daytimescale)slope_reserve_to_leaf_root: 0.14 ∈ [0.033, 0.33] => Reserve to Leaf-Root (units:fraction@daytimescale)f_τ: 0.03 ∈ [0.01, 0.1] => contribution factor for current stressor (units:fraction@daytimescale)
Methods:
compute:
Inputs
diagnostics.slope_eco_stressor: potential rate of change in ecosystem stress on carbon flow
Outputs
- None
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for cFlowReserves_GSI.jl. Check the Extended help for user-defined information.
Extended help
The reserve-pool exchange and leaf/root shedding this approach models are located by pool membership (edgesBetween), not by naming an exact <giver>_to_<taker> edge, so the same code applies unchanged whether Leaf's shedding lands in one pool (GSI's cLitFast) or several (CASA's cLitLeafFast/cLitLeafSlow), and whether a reserve pool exists at all: an absent one (CASA has none) makes every reserve-related edge lookup return no matches, so those terms simply contribute nothing rather than erroring or silently mismatching the wrong edge.
References
Versions
1.0 on 13.01.2020 [sbesnard]
1.1 on 05.02.2021 [skoirala | @dr-ko]: changes with stressors & smoothing as well as handling the activation of leaf/root to reserve | reserve to leaf/root switches. Adjustment of total flow rates [cTau] of relevant pools
1.1 on 05.02.2021 [skoirala | @dr-ko]: move code from dyna. Add table etc.
1.2 on 10.09.2026 [skoirala]: edge selection generalized from exact
c_flow_named_edges.<giver>_to_<taker>name lookups (which errored on any pool structure without a literal edge of that exact name, e.g. CASA's absent cVegReserve or its split cLitLeafFast/cLitLeafSlow in place of cLitFast) toedgesBetween, a giver/taker pool-membership match
Created by
- ncarvalhais, sbesnard, skoirala
Notes
sourceCalculated using:
Inputs: :diagnostics => :slope_eco_stressorcFlowStress
SindbadTEM.Processes.cFlowStress Type
Carbon transfer stressor from environmental factors.Approaches
cFlowStress_GSI: Carbon transfer rates between pools based on the GSI approach, using stressors such as soil moisture, temperature, and light.cFlowStress_none: .
cFlowStress approaches
SindbadTEM.Processes.cFlowStress_GSI Type
Carbon transfer rates between pools based on the GSI approach, using stressors such as soil moisture, temperature, and light.
Parameters
- Fields
f_τ: 0.03 ∈ [0.01, 0.1] => contribution factor for current stressor (units:fraction@daytimescale)
Methods:
define:
Inputs
pools.soilW: water storage in soilW pool(s)properties.∑w_sat: total amount of water in the soil at saturation
Outputs
diagnostics.eco_stressor_prev: ecosystem stress on carbon flow in the previous time stepdiagnostics.slope_eco_stressor_prev: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :slope_eco_stressor_prev)for information on how to add the variable to the catalog.
compute:
Inputs
forcing.f_rg_pot: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_rg_pot)for information on how to add the variable to the catalog.diagnostics.eco_stressor_prev: ecosystem stress on carbon flow in the previous time stepdiagnostics.slope_eco_stressor_prev: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :slope_eco_stressor_prev)for information on how to add the variable to the catalog.
Outputs
- None
precompute, update methods are not defined
End of getModelDocString-generated docstring for cFlowStress_GSI.jl. Check the Extended help for user-defined information.
Extended help
The reserve-pool exchange and leaf/root shedding this approach models are located by pool membership (edgesBetween), not by naming an exact <giver>_to_<taker> edge, so the same code applies unchanged whether Leaf's shedding lands in one pool (GSI's cLitFast) or several (CASA's cLitLeafFast/cLitLeafSlow), and whether a reserve pool exists at all: an absent one (CASA has none) makes every reserve-related edge lookup return no matches, so those terms simply contribute nothing rather than erroring or silently mismatching the wrong edge.
References
Versions
1.0 on 13.01.2020 [sbesnard]
1.1 on 05.02.2021 [skoirala | @dr-ko]: changes with stressors & smoothing as well as handling the activation of leaf/root to reserve | reserve to leaf/root switches. Adjustment of total flow rates [cTau] of relevant pools
1.1 on 05.02.2021 [skoirala | @dr-ko]: move code from dyna. Add table etc.
1.2 on 10.09.2026 [skoirala]: edge selection generalized from exact
c_flow_named_edges.<giver>_to_<taker>name lookups (which errored on any pool structure without a literal edge of that exact name, e.g. CASA's absent cVegReserve or its split cLitLeafFast/cLitLeafSlow in place of cLitFast) toedgesBetween, a giver/taker pool-membership match1.3 on 11.10.2026 [skoirala]: stressor and its smoothing memory are held, and the slope set to zero, during completely dark time steps (
f_rg_potof zero)
Created by
- ncarvalhais, sbesnard, skoirala
Notes
sourceCalculated using:
Inputs: :forcing => :f_rg_pot, :diagnostics => :eco_stressor_prev, :diagnostics => :slope_eco_stressor_prevcForestryHarvest
SindbadTEM.Processes.cForestryHarvest Type
Carbon loss due to harvest events.Approaches
cForestryHarvest_simple: This is used for crop and forestry harvest events. Moves carbon to export and decomposable pools, according to their respective carbon flow target pools, during harvest events.
cForestryHarvest approaches
SindbadTEM.Processes.cForestryHarvest_simple Type
This is used for crop and forestry harvest events. Moves carbon to export and decomposable pools, according to their respective carbon flow target pools, during harvest events.
Parameters
- None
Methods:
define:
Inputs
pools.cEco: carbon content of cEco pool(s)cCycleBase.c_taker: index of the receiving carbon pool for a given flow
Outputs
diagnostics.c_Wood_Harvest_Product: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_Wood_Harvest_Product)for information on how to add the variable to the catalog.diagnostics.c_Wood_Harvest_Mortality: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_Wood_Harvest_Mortality)for information on how to add the variable to the catalog.diagnostics.c_Wood_Harvest_Flow: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_Wood_Harvest_Flow)for information on how to add the variable to the catalog.
compute:
Inputs
diagnostics.c_Wood_Harvest_Product: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_Wood_Harvest_Product)for information on how to add the variable to the catalog.diagnostics.c_Wood_Harvest_Mortality: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_Wood_Harvest_Mortality)for information on how to add the variable to the catalog.diagnostics.frac_wood_harvest_intensity: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :frac_wood_harvest_intensity)for information on how to add the variable to the catalog.diagnostics.frac_wood_harvest_efficiency: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :frac_wood_harvest_efficiency)for information on how to add the variable to the catalog.diagnostics.is_wood_harvested: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :is_wood_harvested)for information on how to add the variable to the catalog.pools.cEco: carbon content of cEco pool(s)states.c_remain: amount of carbon to keep in the ecosystem vegetation pools in case of disturbancescCycleBase.c_giver: index of the source carbon pool for a given flowcCycleBase.c_taker: index of the receiving carbon pool for a given flowconstants.z_zero: a helper type stable 0 to be used across all modelsconstants.o_one: a helper type stable 1 to be used across all modelsmodels.c_model: a base carbon cycle model to loop through the pools and fill the main or component pools needed for using static arrays. A mandatory field for every carbon model realizationdiagnostics.c_Wood_Harvest_Flow: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_Wood_Harvest_Flow)for information on how to add the variable to the catalog.
Outputs
diagnostics.c_Wood_Harvest_Product: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_Wood_Harvest_Product)for information on how to add the variable to the catalog.diagnostics.c_Wood_Harvest_Mortality: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_Wood_Harvest_Mortality)for information on how to add the variable to the catalog.diagnostics.c_Wood_Harvest_Flow: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_Wood_Harvest_Flow)for information on how to add the variable to the catalog.diagnostics.actual_wood_harvest_intensity: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :actual_wood_harvest_intensity)for information on how to add the variable to the catalog.diagnostics.cWoodProducts: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :cWoodProducts)for information on how to add the variable to the catalog.
precompute, update methods are not defined
End of getModelDocString-generated docstring for cForestryHarvest_simple.jl. Check the Extended help for user-defined information.
Extended help
Created by - Nuno | nunocarvalhais
sourceCalculated using:
Inputs: :diagnostics => :c_Wood_Harvest_Product, :diagnostics => :c_Wood_Harvest_Mortality, :diagnostics => :frac_wood_harvest_intensity, :diagnostics => :frac_wood_harvest_efficiency, :diagnostics => :is_wood_harvested, :pools => :cEco, :states => :c_remain, :cCycleBase => :c_giver, :cCycleBase => :c_taker, :constants => :z_zero, :constants => :o_one, :models => :c_model, :diagnostics => :c_Wood_Harvest_Flow
Outputs: :diagnostics => :c_Wood_Harvest_Product, :diagnostics => :c_Wood_Harvest_Mortality, :diagnostics => :c_Wood_Harvest_Flow, :diagnostics => :actual_wood_harvest_intensity, :diagnostics => :cWoodProductscForestryHarvestEfficiency
SindbadTEM.Processes.cForestryHarvestEfficiency Type
Appropriation of carbon for wood products.Approaches
cForestryHarvestEfficiency_constant: To determine globally constant fractions of wood harvest efficiency and intensity from forestry activities. Intensity reflects how much of the live cVegPools is killed/damaged during a harvest event; in an area basis, this would reflect a portion of the wood / forest that would not die during harvest. Efficiency reflects how much of the killed cVegPools is removed from the system, turned into wood products.cForestryHarvestEfficiency_forcing: Load the harvest fraction efficiency from the forcing. Harvest fraction efficiency is the proportion of the cVegPool killed by forestry activities that is abstracted from the system.cForestryHarvestEfficiency_none: No forestry wood harvest efficiency.
cForestryHarvestEfficiency approaches
SindbadTEM.Processes.cForestryHarvestEfficiency_constant Type
To determine globally constant fractions of wood harvest efficiency and intensity from forestry activities. Intensity reflects how much of the live cVegPools is killed/damaged during a harvest event; in an area basis, this would reflect a portion of the wood / forest that would not die during harvest. Efficiency reflects how much of the killed cVegPools is removed from the system, turned into wood products.
Parameters
- Fields
constant_frac_wood_harvest_efficiency: 0.8 ∈ [0.0, 0.99] => Fraction of the killed harvestable vegetation carbon pools that is removed from an ecosystem in a harvest event (units:fraction@alltimescales)
Methods:
precompute:
Inputs
- None
Outputs
diagnostics.frac_wood_harvest_efficiency: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :frac_wood_harvest_efficiency)for information on how to add the variable to the catalog.
define, compute, update methods are not defined
End of getModelDocString-generated docstring for cForestryHarvestEfficiency_constant.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 26.08.2026 [sol]
Created by
- sol
cForestryHarvestEvent
SindbadTEM.Processes.cForestryHarvestEvent Type
Approaches
cForestryHarvestEvent_forcing:cForestryHarvestEvent_none:
cForestryHarvestEvent approaches
SindbadTEM.Processes.cForestryHarvestEvent_forcing Type
Parameters
- None
Methods:
compute:
Inputs
forcing.f_is_wood_harvested: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_is_wood_harvested)for information on how to add the variable to the catalog.
Outputs
diagnostics.is_wood_harvested: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :is_wood_harvested)for information on how to add the variable to the catalog.
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for cForestryHarvestEvent_forcing.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 31.08.2026 [sol]
Created by
- sol
Calculated using:
Inputs: :forcing => :f_is_wood_harvested
Outputs: :diagnostics => :is_wood_harvestedcForestryHarvestIntensity
SindbadTEM.Processes.cForestryHarvestIntensity Type
Appropriation of carbon for wood products.Approaches
cForestryHarvestIntensity_constant: To determine globally constant fractions of wood harvest efficiency and intensity from forestry. Intensity reflects how much of the live cVegPools is killed/damaged during a harvest event; in an area basis, this would reflect a portion of the wood/forest that would not die during harvest. Intensity reflects how much of the killed cVegPools is removed from the system, turned into wood/forestry products.cForestryHarvestIntensity_forcing: Load the harvest intensity fraction from the forcing. Harvest fraction intensity is the proportion of the cVegPools that is killed during a harvest event.cForestryHarvestIntensity_none: No wood / forestry harvest.
cForestryHarvestIntensity approaches
SindbadTEM.Processes.cForestryHarvestIntensity_constant Type
To determine globally constant fractions of wood harvest efficiency and intensity from forestry. Intensity reflects how much of the live cVegPools is killed/damaged during a harvest event; in an area basis, this would reflect a portion of the wood/forest that would not die during harvest. Intensity reflects how much of the killed cVegPools is removed from the system, turned into wood/forestry products.
Parameters
- Fields
constant_frac_wood_harvest_intensity: 0.9 ∈ [0.0, 0.99] => Fraction of the harvestable vegetation live carbon pools carbon pools that is killed by the harvest event (units:fraction@alltimescales)
Methods:
precompute:
Inputs
- None
Outputs
diagnostics.frac_wood_harvest_intensity: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :frac_wood_harvest_intensity)for information on how to add the variable to the catalog.
define, compute, update methods are not defined
End of getModelDocString-generated docstring for cForestryHarvestIntensity_constant.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 26.08.2026 [sol]
Created by
- sol
cMicrobialEfficiency
SindbadTEM.Processes.cMicrobialEfficiency Type
Assemble the flow-specific microbial carbon-transfer efficiency of litter and soil decomposition from the per-pool-group factors. The diagnostic c_flow_ME_vec is aligned with c_flow_order/c_giver/c_taker and represents the old CASA p_E efficiency term.Approaches
cMicrobialEfficiency_constant: A single constant microbial carbon-transfer efficiency for every decomposition flow, whichever pool group it leaves.cMicrobialEfficiency_sum: Combines the litter, microbial, and soil pool-group controls of microbial carbon-transfer efficiency.
Extended help
cMicrobialEfficiency fills in c_flow_ME_vec, a flow-aligned diagnostic containing one efficiency value for each active carbon transfer defined by c_flow_order, c_giver, and c_taker. The vector itself is allocated neutral, one per flow, by cCycleBase, so cCycle reads a valid efficiency even when no cMicrobialEfficiency model is selected.
Vegetation-to-vegetation and vegetation-to-litter transfers are not microbial decomposition and therefore keep that neutral efficiency of one. In the legacy SINDBAD CASA implementation, the corresponding quantity was p_E_vec.
The efficiency splits by the pool group the carbon leaves, each a process of its own:
cMicrobialEfficiencycLit: the transfers leaving the litter pools.cMicrobialEfficiencycMic: the transfers leaving the microbial pools.cMicrobialEfficiencycSoil: the transfers leaving the soil carbon pools.
cMicrobialEfficiency_sum combines the three, the way cQualityPartition_mult combines the quality-partition factors and cTau_mult the decomposition-rate stressors.
cMicrobialEfficiency_constant bypasses the factors instead of combining them: one constant on every decomposition transfer, whichever group it leaves. Leaving cMicrobialEfficiency out of the model structure keeps every transfer at the neutral efficiency of one.
CASA does not need a third: cCycleBase_CASA itself carries the 14 statically-known CASA transfers as ordinary bounded parameters and writes them into c_flow_ME_vec in define. Only the soil-microbial pool's texture response, driven by st_clay/st_silt, still needs one: select cMicrobialEfficiencycMic_texture.
Notes:
Split by giver pool group rather than by control, since a group is a pool-name prefix and so well defined on every pool structure.
Within each group,
_none,_constantand_texturefind their transfers throughzixand so hold on any structure. CASA's exact, per-edge treatment has no group-factor form; it lives entirely incCycleBase_CASA's own parameters instead.
cMicrobialEfficiency approaches
SindbadTEM.Processes.cMicrobialEfficiency_constant Type
A single constant microbial carbon-transfer efficiency for every decomposition flow, whichever pool group it leaves.
Parameters
- Fields
constant_MicEff: 0.5 ∈ [0.0, 1.0] => Microbial carbon-transfer efficiency of every decomposition flow, whichever pool group it leaves. (units:fraction@alltimescales)
Methods:
precompute:
Inputs
diagnostics.c_flow_ME_vec: fraction of the carbon leaving a (giver) pool along each of its outgoing transfers that is retained by the (taker) pool rather than respired; allocated as one per flow by cCycleBase and filled in by cMicrobialEfficiencycCycleBase.c_flow_order: order of pooling while calculating the carbon flowcCycleBase.c_giver: index of the source carbon pool for a given flowcCycleBase.zix_cHeterotrophic: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:cCycleBase, :zix_cHeterotrophic)for information on how to add the variable to the catalog.
Outputs
diagnostics.c_flow_ME_vec: fraction of the carbon leaving a (giver) pool along each of its outgoing transfers that is retained by the (taker) pool rather than respired; allocated as one per flow by cCycleBase and filled in by cMicrobialEfficiency
define, compute, update methods are not defined
End of getModelDocString-generated docstring for cMicrobialEfficiency_constant.jl. Check the Extended help for user-defined information.
Extended help
constant_MicEff is written into every active transfer whose giver is a litter, microbial or soil carbon pool. Transfers leaving vegetation keep the neutral efficiency of one, since litterfall is not microbial decomposition.
Set it to zero for the endpoint where all decomposed carbon respires and none is retained by the receiving pool.
This is the one-parameter alternative to composing the three pool-group factors through cMicrobialEfficiency_sum. It ignores them, so it can be selected whether or not they are, and it is equivalent to selecting _constant with the same value in all three groups.
References
Versions
- 1.0 on 04.09.2026 [skoirala]
Created by
- skoirala
cMicrobialEfficiencycLit
SindbadTEM.Processes.cMicrobialEfficiencycLit Type
Microbial carbon-transfer efficiency of the decomposition flows leaving the litter pools.Approaches
cMicrobialEfficiencycLit_constant: A single constant microbial carbon-transfer efficiency for every transfer leaving the litter pools.cMicrobialEfficiencycLit_none: Applies no control from the litter pools: the transfers leaving them keep an efficiency of one.cMicrobialEfficiencycLit_texture: Texture-dependent microbial carbon-transfer efficiency for every transfer leaving the litter pools.
Extended help
cMicrobialEfficiencycLit provides c_flow_ME_f_cLit, a flow-aligned factor of the microbial carbon-transfer efficiency with one entry per active carbon transfer, in the same order as c_flow_order, c_giver and c_taker.
The factor is one everywhere except on the transfers leaving the litter pools, and cMicrobialEfficiency_sum combines it with the other two pool-group factors to form c_flow_ME_vec. No other factor touches a cLit giver, which is what lets the three be combined.
Every pool structure has litter pools, so this factor is active on all of them: the ten CASA litter transfers under CASA, and the two aggregated cLitFast/cLitSlow transfers into slow soil under the GSI structures.
_none, _constant and _texture decide which transfers are theirs from helpers.pools.zix.cLit, so they need no edge list and hold on any pool structure. CASA's own per-pathway litter table lives in cCycleBase_CASA as defaults instead of a group factor here.
cMicrobialEfficiencycLit approaches
SindbadTEM.Processes.cMicrobialEfficiencycLit_constant Type
A single constant microbial carbon-transfer efficiency for every transfer leaving the litter pools.
Parameters
- Fields
constant_MicEff_cLit: 0.5 ∈ [0.0, 1.0] => Microbial carbon-transfer efficiency of every decomposition flow leaving a litter pool. (units:fraction@alltimescales)
Methods:
define:
Inputs
cCycleBase.c_taker: index of the receiving carbon pool for a given flowpools.cEco: carbon content of cEco pool(s)
Outputs
diagnostics.c_flow_ME_f_cLit: litter pool control of the microbial carbon-transfer efficiency, per active carbon transfer; sets the efficiency of the transfers leaving the litter pools, and is one on every other transfer
precompute:
Inputs
diagnostics.c_flow_ME_f_cLit: litter pool control of the microbial carbon-transfer efficiency, per active carbon transfer; sets the efficiency of the transfers leaving the litter pools, and is one on every other transfercCycleBase.c_flow_order: order of pooling while calculating the carbon flowcCycleBase.c_giver: index of the source carbon pool for a given flow
Outputs
diagnostics.c_flow_ME_f_cLit: litter pool control of the microbial carbon-transfer efficiency, per active carbon transfer; sets the efficiency of the transfers leaving the litter pools, and is one on every other transfer
compute, update methods are not defined
End of getModelDocString-generated docstring for cMicrobialEfficiencycLit_constant.jl. Check the Extended help for user-defined information.
Extended help
constant_MicEff_cLit is written into every active transfer whose giver is one of the litter pools. Set it to zero for the behaviour where all carbon decomposing out of this group respires rather than arriving in the receiving pool.
References
Versions
- 1.0 on 04.09.2026 [skoirala]
Created by
- skoirala
cMicrobialEfficiencycMic
SindbadTEM.Processes.cMicrobialEfficiencycMic Type
Microbial carbon-transfer efficiency of the flows leaving the microbial pools.Approaches
cMicrobialEfficiencycMic_constant: A single constant microbial carbon-transfer efficiency for every transfer leaving the microbial pools.cMicrobialEfficiencycMic_none: Applies no control from the microbial pools: the transfers leaving them keep an efficiency of one.cMicrobialEfficiencycMic_texture: Texture-dependent microbial carbon-transfer efficiency for every transfer leaving the microbial pools.
Extended help
cMicrobialEfficiencycMic provides c_flow_ME_f_cMic, a flow-aligned factor of the microbial carbon-transfer efficiency with one entry per active carbon transfer, in the same order as c_flow_order, c_giver and c_taker.
The factor is one everywhere except on the transfers leaving the microbial pools, and cMicrobialEfficiency_sum combines it with the other two pool-group factors to form c_flow_ME_vec. No other factor touches a cMic giver, which is what lets the three be combined.
Only CASA has explicit microbial pools. Under the GSI structures zix.cMic is empty, no flow matches, and this factor stays neutral with no special case, because microbial mediation there is folded into the litter and soil transfers.
_none, _constant and _texture decide which transfers are theirs from helpers.pools.zix.cMic, so they need no edge list and hold on any pool structure. CASA's own fixed surface-pathway constant lives in cCycleBase_CASA as a default instead of a group factor here; _texture is the group-wide texture response, applied uniformly to every cMic transfer rather than singling out the soil-microbial pool the way CASA's original table did.
cMicrobialEfficiencycMic approaches
SindbadTEM.Processes.cMicrobialEfficiencycMic_constant Type
A single constant microbial carbon-transfer efficiency for every transfer leaving the microbial pools.
Parameters
- Fields
constant_MicEff_cMic: 0.45 ∈ [0.0, 1.0] => Microbial carbon-transfer efficiency of every flow leaving a microbial pool. (units:fraction@alltimescales)
Methods:
define:
Inputs
cCycleBase.c_taker: index of the receiving carbon pool for a given flowpools.cEco: carbon content of cEco pool(s)
Outputs
diagnostics.c_flow_ME_f_cMic: microbial pool control of the microbial carbon-transfer efficiency, per active carbon transfer; sets the efficiency of the transfers leaving the microbial pools, where the soil texture response acts, and is one on every other transfer
precompute:
Inputs
diagnostics.c_flow_ME_f_cMic: microbial pool control of the microbial carbon-transfer efficiency, per active carbon transfer; sets the efficiency of the transfers leaving the microbial pools, where the soil texture response acts, and is one on every other transfercCycleBase.c_flow_order: order of pooling while calculating the carbon flowcCycleBase.c_giver: index of the source carbon pool for a given flow
Outputs
diagnostics.c_flow_ME_f_cMic: microbial pool control of the microbial carbon-transfer efficiency, per active carbon transfer; sets the efficiency of the transfers leaving the microbial pools, where the soil texture response acts, and is one on every other transfer
compute, update methods are not defined
End of getModelDocString-generated docstring for cMicrobialEfficiencycMic_constant.jl. Check the Extended help for user-defined information.
Extended help
constant_MicEff_cMic is written into every active transfer whose giver is one of the microbial pools. Set it to zero for the behaviour where all carbon decomposing out of this group respires rather than arriving in the receiving pool.
References
Versions
- 1.0 on 04.09.2026 [skoirala]
Created by
- skoirala
cMicrobialEfficiencycSoil
SindbadTEM.Processes.cMicrobialEfficiencycSoil Type
Microbial carbon-transfer efficiency of the decomposition flows leaving the soil carbon pools.Approaches
cMicrobialEfficiencycSoil_constant: A single constant microbial carbon-transfer efficiency for every transfer leaving the soil carbon pools.cMicrobialEfficiencycSoil_none: Applies no control from the soil carbon pools: the transfers leaving them keep an efficiency of one.cMicrobialEfficiencycSoil_texture: Texture-dependent microbial carbon-transfer efficiency for every transfer leaving the soil carbon pools.
Extended help
cMicrobialEfficiencycSoil provides c_flow_ME_f_cSoil, a flow-aligned factor of the microbial carbon-transfer efficiency with one entry per active carbon transfer, in the same order as c_flow_order, c_giver and c_taker.
The factor is one everywhere except on the transfers leaving the soil carbon pools, and cMicrobialEfficiency_sum combines it with the other two pool-group factors to form c_flow_ME_vec. No other factor touches a cSoil giver, which is what lets the three be combined.
Every pool structure has soil pools, so this factor is active on all of them: the three CASA soil transfers under CASA, and cSoilSlow into cSoilOld alone under the GSI structures.
_none, _constant and _texture decide which transfers are theirs from helpers.pools.zix.cSoil, so they need no edge list and hold on any pool structure. CASA's own per-pathway soil table lives in cCycleBase_CASA as defaults instead of a group factor here.
cMicrobialEfficiencycSoil approaches
SindbadTEM.Processes.cMicrobialEfficiencycSoil_constant Type
A single constant microbial carbon-transfer efficiency for every transfer leaving the soil carbon pools.
Parameters
- Fields
constant_MicEff_cSoil: 0.45 ∈ [0.0, 1.0] => Microbial carbon-transfer efficiency of every decomposition flow leaving a soil carbon pool. (units:fraction@alltimescales)
Methods:
define:
Inputs
cCycleBase.c_taker: index of the receiving carbon pool for a given flowpools.cEco: carbon content of cEco pool(s)
Outputs
diagnostics.c_flow_ME_f_cSoil: soil pool control of the microbial carbon-transfer efficiency, per active carbon transfer; sets the efficiency of the transfers leaving the soil carbon pools, and is one on every other transfer
precompute:
Inputs
diagnostics.c_flow_ME_f_cSoil: soil pool control of the microbial carbon-transfer efficiency, per active carbon transfer; sets the efficiency of the transfers leaving the soil carbon pools, and is one on every other transfercCycleBase.c_flow_order: order of pooling while calculating the carbon flowcCycleBase.c_giver: index of the source carbon pool for a given flow
Outputs
diagnostics.c_flow_ME_f_cSoil: soil pool control of the microbial carbon-transfer efficiency, per active carbon transfer; sets the efficiency of the transfers leaving the soil carbon pools, and is one on every other transfer
compute, update methods are not defined
End of getModelDocString-generated docstring for cMicrobialEfficiencycSoil_constant.jl. Check the Extended help for user-defined information.
Extended help
constant_MicEff_cSoil is written into every active transfer whose giver is one of the soil carbon pools. Set it to zero for the behaviour where all carbon decomposing out of this group respires rather than arriving in the receiving pool.
References
Versions
- 1.0 on 04.09.2026 [skoirala]
Created by
- skoirala
cQualityPartition
SindbadTEM.Processes.cQualityPartition Type
Determine the fraction of carbon flowing between labile and recalcitrant pools.Approaches
cQualityPartition_equal: Use a neutral carbon-quality partition: every giver divides its carbon equally among its active outgoing transfers to non-vegetation pools, with no preference for any pathway.cQualityPartition_mult: Combines the cVeg, cLit, cMic, and cSoil giver-group controls of the carbon-quality partition by multiplication.
Extended help
cQualityPartition fills in c_flow_QP_vec, a diagnostic vector with one entry for every active carbon transfer defined by c_flow_order, c_giver, and c_taker in the selected carbon-cycle structure. The vector itself is allocated neutral, one per flow, by cCycleBase, so cCycle reads a valid partition even when no cQualityPartition model is selected.
The process separates carbon-quality/routing effects from the transfer-rate calculation itself. In the legacy SINDBAD CASA implementation, the corresponding quantity was p_F_vec.
The partition splits along four independent controls, each of which owns a disjoint giver pool group and is a process of its own, named after that group the way cMicrobialEfficiency's factors are:
cQualityPartitioncVeg: the metabolic/structural split of leaf and fine-root litterfall.cQualityPartitioncLit: the lignin control of structural and woody litter decomposition.cQualityPartitioncMic: the clay control of soil-microbial stabilization.cQualityPartitioncSoil: the clay control of slow-soil stabilization.
cQualityPartition_mult multiplies the four factors, the way cTau_mult multiplies the decomposition-rate stressors. There is no self-contained single-table alternative: composing cQualityPartitioncVeg_vegQualityTraits, cQualityPartitioncLit_vegQualityTraits, cQualityPartitioncMic_texture and cQualityPartitioncSoil_texture through cQualityPartition_mult reproduces the old CASA table exactly, so the separate cQualityPartition_CASA approach that used to declare it in one table was removed.
cQualityPartition approaches
SindbadTEM.Processes.cQualityPartition_equal Type
Use a neutral carbon-quality partition: every giver divides its carbon equally among its active outgoing transfers to non-vegetation pools, with no preference for any pathway.
Parameters
- None
Methods:
precompute:
Inputs
cCycleBase.c_flow_order: order of pooling while calculating the carbon flowcCycleBase.c_giver: index of the source carbon pool for a given flowcCycleBase.c_taker: index of the receiving carbon pool for a given flowdiagnostics.c_flow_QP_vec: fraction of the carbon loss from a (giver) pool that is routed along each of its outgoing transfers by carbon quality; allocated as one per flow by cCycleBase and filled in by cQualityPartition
Outputs
diagnostics.c_flow_QP_vec: fraction of the carbon loss from a (giver) pool that is routed along each of its outgoing transfers by carbon quality; allocated as one per flow by cCycleBase and filled in by cQualityPartition
define, compute, update methods are not defined
End of getModelDocString-generated docstring for cQualityPartition_equal.jl. Check the Extended help for user-defined information.
Extended help
This approach introduces no labile/recalcitrant preference: each giver splits its carbon equally over its active outgoing flows to non-vegetation pools. Flows whose taker is a vegetation pool are not modified by quality partitioning. A giver with a single non-vegetation outgoing flow keeps the neutral partition of one, while a giver with several non-vegetation outgoing flows conserves mass across them.
The vector itself is allocated neutral by cCycleBase, so leaving cQualityPartition out of the model structure entirely gives every flow a partition of one. That differs from selecting this approach, which still splits multi-outflow givers.
Versions
1.0 on 27.08.2026 [sol]
1.1 on 04.09.2026 [skoirala]: c_flow_QP_vec allocated by cCycleBase; split moved to precompute
1.2 on 14.09.2026 [s&s]: TO SIMPLIFY - simplify and tidy up
Created by
- sol
cQualityPartitioncLit
SindbadTEM.Processes.cQualityPartitioncLit Type
Effect of litter lignin content on the carbon-quality partition: the split of structural and woody litter decomposition between the slow soil pool and the microbial pools.Approaches
cQualityPartitioncLit_constant: Sets the lignin control of the carbon-quality partition to uniform constants for structural and woody litter.cQualityPartitioncLit_equal: .cQualityPartitioncLit_vegQualityTraits: Lignin control of the carbon-quality partition, read directly from vegQualityTraits so the partition always matches the litter chemistry actually in use.
Extended help
cQualityPartitioncLit provides c_flow_QP_f_cLit, a flow-aligned factor of the carbon-quality partition. The approach operates on flows whose giver belongs to cLit and uses land.cCycleBase.c_flow_taker_turnover_rank to select the fast or slow taker without identifying takers by pool name.
For each flow, c_flow_taker_turnover_rank is 1 for the faster of two non-vegetation takers, -1 for the slower taker, and 0 when the flow is not a two-taker quality partition. Lignin controls the slow share, while its complement is the fast share. The existing structural-versus-woody litter distinction remains a giver-side ecological distinction because those two litter classes use different lignin fractions; it is independent of identifying the taker.
cQualityPartition_mult multiplies this factor with the cVeg, cMic and cSoil factors to form c_flow_QP_vec.
cQualityPartitioncLit approaches
SindbadTEM.Processes.cQualityPartitioncLit_constant Type
Sets the lignin control of the carbon-quality partition to uniform constants for structural and woody litter.
Parameters
- Fields
frac_lignin_struct: 0.3 ∈ [0.0, 1.0] => lignin as a fraction of structural litter carbon (units:fraction@alltimescales)frac_lignin_wood: 0.4 ∈ [0.0, 1.0] => lignin fraction of woody litter (units:fraction@alltimescales)
Methods:
define:
Inputs
cCycleBase.c_taker: index of the receiving carbon pool for a given flowpools.cEco: carbon content of cEco pool(s)
Outputs
diagnostics.c_flow_QP_f_cLit: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_flow_QP_f_cLit)for information on how to add the variable to the catalog.
precompute:
Inputs
diagnostics.c_flow_QP_f_cLit: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_flow_QP_f_cLit)for information on how to add the variable to the catalog.diagnostics.c_eco_k_base: base carbon decomposition rate of the carbon poolscCycleBase.c_flow_order: order of pooling while calculating the carbon flowcCycleBase.c_giver: index of the source carbon pool for a given flowcCycleBase.c_taker: index of the receiving carbon pool for a given flowcCycleBase.c_flow_taker_turnover_rank: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:cCycleBase, :c_flow_taker_turnover_rank)for information on how to add the variable to the catalog.cCycleBase.k_hilo_lit_split: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:cCycleBase, :k_hilo_lit_split)for information on how to add the variable to the catalog.constants.o_one: a helper type stable 1 to be used across all models
Outputs
diagnostics.c_flow_QP_f_cLit: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_flow_QP_f_cLit)for information on how to add the variable to the catalog.
compute, update methods are not defined
End of getModelDocString-generated docstring for cQualityPartitioncLit_constant.jl. Check the Extended help for user-defined information.
Extended help
Use this approach to prescribe the two lignin fractions directly instead of reading them from vegQualityTraits or varying them with PFT class. The defaults are those of vegQualityTraits_constant's lignin fields.
References
- Potter, C. S., Randerson, J. T., Field, C. B., Matson, P. A., Vitousek, P. M., Mooney, H. A., & Klooster, S. A. (1993). Terrestrial ecosystem production: a process model based on global satellite and surface data. Global Biogeochemical Cycles, 7(4), 811-841.
Versions
1.0 on 04.09.2026 [skoirala]: as cQualityPartitionLignin_constant
2.0 on 10.09.2026 [skoirala]: renamed/relocated into cQualityPartitioncLit
Created by
- skoirala
cQualityPartitioncMic
SindbadTEM.Processes.cQualityPartitioncMic Type
Effect of soil texture on the carbon-quality partition: the split of soil-microbial decomposition between stabilization into old soil carbon and the remaining pathway.Approaches
cQualityPartitioncMic_constant: Sets the stabilization of soil-microbial decomposition into old soil carbon to a uniform constant.cQualityPartitioncMic_equal: .cQualityPartitioncMic_texture: Clay-dependent stabilization of soil-microbial decomposition into old soil carbon, as modeled in CASA.
Extended help
cQualityPartitioncMic provides c_flow_QP_f_cMic, a flow-aligned factor of the carbon-quality partition. The approach operates on flows whose giver belongs to cMic and uses land.cCycleBase.c_flow_taker_turnover_rank to select the fast or slow share without identifying a particular taker pool by name.
For each flow, c_flow_taker_turnover_rank is 1 for the faster of two non-vegetation takers, -1 for the slower taker, and 0 when the flow is not a two-taker quality partition. The soil-stabilization fraction is therefore assigned as slowPart; its complement is fastPart.
cQualityPartition_mult multiplies this factor with the cVeg, cLit and cSoil factors to form c_flow_QP_vec.
cQualityPartitioncMic approaches
SindbadTEM.Processes.cQualityPartitioncMic_constant Type
Sets the stabilization of soil-microbial decomposition into old soil carbon to a uniform constant.
Parameters
- Fields
frac_cMicSoil_to_cSoilOld: 0.003 ∈ [0.0, 1.0] => fraction of soil-microbial decomposition partitioned to old soil carbon (units:fraction@alltimescales)
Methods:
define:
Inputs
cCycleBase.c_taker: index of the receiving carbon pool for a given flowpools.cEco: carbon content of cEco pool(s)
Outputs
diagnostics.c_flow_QP_f_cMic: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_flow_QP_f_cMic)for information on how to add the variable to the catalog.
precompute:
Inputs
diagnostics.c_flow_QP_f_cMic: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_flow_QP_f_cMic)for information on how to add the variable to the catalog.cCycleBase.c_flow_order: order of pooling while calculating the carbon flowcCycleBase.c_giver: index of the source carbon pool for a given flowcCycleBase.c_taker: index of the receiving carbon pool for a given flowcCycleBase.c_flow_taker_turnover_rank: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:cCycleBase, :c_flow_taker_turnover_rank)for information on how to add the variable to the catalog.constants.o_one: a helper type stable 1 to be used across all models
Outputs
diagnostics.c_flow_QP_f_cMic: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_flow_QP_f_cMic)for information on how to add the variable to the catalog.
compute, update methods are not defined
End of getModelDocString-generated docstring for cQualityPartitioncMic_constant.jl. Check the Extended help for user-defined information.
Extended help
Use this approach to prescribe the stabilization fraction directly instead of deriving it from clay content. The default is the intercept of cQualityPartitioncMic_texture, which is what that approach returns on a soil with no clay.
References
- Potter, C. S., Randerson, J. T., Field, C. B., Matson, P. A., Vitousek, P. M., Mooney, H. A., & Klooster, S. A. (1993). Terrestrial ecosystem production: a process model based on global satellite and surface data. Global Biogeochemical Cycles, 7(4), 811-841.
Versions
1.0 on 04.09.2026 [skoirala]: as the cMicSoil half of cQualityPartitionSoilProperties_constant
2.0 on 10.09.2026 [skoirala]: split off into its own cQualityPartitioncMic factor
Created by
- skoirala
cQualityPartitioncSoil
SindbadTEM.Processes.cQualityPartitioncSoil Type
Effect of soil texture on the carbon-quality partition: the split of slow-soil decomposition between stabilization into old soil carbon and the remaining pathway.Approaches
cQualityPartitioncSoil_constant: Sets the stabilization of slow-soil decomposition into old soil carbon to a uniform constant.cQualityPartitioncSoil_equal: .cQualityPartitioncSoil_texture: Clay-dependent stabilization of slow-soil decomposition into old soil carbon, as modeled in CASA.
Extended help
cQualityPartitioncSoil provides c_flow_QP_f_cSoil, a flow-aligned factor of the carbon-quality partition with one entry per active carbon transfer, in the same order as c_flow_order, c_giver and c_taker.
The factor is one everywhere except on the flows leaving cSoilSlow, in land.cCycleBase.c_flow_qp_groups.cSoil: clay-rich soils stabilize a larger share of decomposing slow-soil carbon into the old soil pool. cQualityPartition_mult multiplies this factor with the cVeg, cLit and cMic factors to form c_flow_QP_vec.
c_flow_qp_groups.cSoil is derived once, from the resolved flow topology, by deriveQPGroups (cCycleBase/poolConfigurations/poolConfigurations.jl): it is the (stabilized_positions, other_positions) pair for the giver named cSoilSlow, present only when that giver has more than one outgoing edge. On a structure where cSoilSlow has only a single outflow – such as GSI, where cSoilSlow feeds only cSoilOld – this resolves to an empty group and simply keeps its neutral partition of one on that flow.
Named after the giver pool group it owns (cSoil), the way cMicrobialEfficiencycLit/cMic/cSoil are. This and cQualityPartitioncMic used to be combined into one process, cQualityPartitionSoilProperties, which mixed the cSoilSlow and cMicSoil giver groups; splitting them apart keeps every cQualityPartition factor strictly single-giver-group, as cMicrobialEfficiency's already are.
This is the partition counterpart of cTauSoilProperties, which carries the texture control of decomposition rates.
cQualityPartitioncSoil approaches
SindbadTEM.Processes.cQualityPartitioncSoil_constant Type
Sets the stabilization of slow-soil decomposition into old soil carbon to a uniform constant.
Parameters
- Fields
frac_cSoilSlow_to_cSoilOld: 0.003 ∈ [0.0, 1.0] => fraction of slow-soil decomposition partitioned to old soil carbon (units:fraction@alltimescales)
Methods:
define:
Inputs
cCycleBase.c_taker: index of the receiving carbon pool for a given flowpools.cEco: carbon content of cEco pool(s)
Outputs
diagnostics.c_flow_QP_f_cSoil: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_flow_QP_f_cSoil)for information on how to add the variable to the catalog.
precompute:
Inputs
diagnostics.c_flow_QP_f_cSoil: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_flow_QP_f_cSoil)for information on how to add the variable to the catalog.cCycleBase.c_flow_order: order of pooling while calculating the carbon flowcCycleBase.c_giver: index of the source carbon pool for a given flowcCycleBase.c_taker: index of the receiving carbon pool for a given flowcCycleBase.c_flow_taker_turnover_rank: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:cCycleBase, :c_flow_taker_turnover_rank)for information on how to add the variable to the catalog.constants.o_one: a helper type stable 1 to be used across all models
Outputs
diagnostics.c_flow_QP_f_cSoil: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_flow_QP_f_cSoil)for information on how to add the variable to the catalog.
compute, update methods are not defined
End of getModelDocString-generated docstring for cQualityPartitioncSoil_constant.jl. Check the Extended help for user-defined information.
Extended help
Use this approach to prescribe the stabilization fraction directly instead of deriving it from clay content. The default is the intercept of cQualityPartitioncSoil_texture, which is what that approach returns on a soil with no clay.
References
- Potter, C. S., Randerson, J. T., Field, C. B., Matson, P. A., Vitousek, P. M., Mooney, H. A., & Klooster, S. A. (1993). Terrestrial ecosystem production: a process model based on global satellite and surface data. Global Biogeochemical Cycles, 7(4), 811-841.
Versions
1.0 on 04.09.2026 [skoirala]: as the cSoilSlow half of cQualityPartitionSoilProperties_constant
2.0 on 10.09.2026 [skoirala]: split off into its own cQualityPartitioncSoil factor
Created by
- skoirala
cQualityPartitioncVeg
SindbadTEM.Processes.cQualityPartitioncVeg Type
Effect of the metabolic litter fraction on the carbon-quality partition: the split of leaf and fine-root litterfall between the metabolic and structural litter pools.Approaches
cQualityPartitioncVeg_constant: Sets the metabolic litter fraction of the carbon-quality partition to a uniform constant.cQualityPartitioncVeg_equal: .cQualityPartitioncVeg_vegQualityTraits: Metabolic litter fraction of the carbon-quality partition, read directly from vegQualityTraits so the partition always matches the litter chemistry actually in use.
Extended help
cQualityPartitioncVeg provides c_flow_QP_f_cVeg, a flow-aligned factor of the carbon-quality partition. The approach operates on flows whose giver belongs to cVeg and uses land.cCycleBase.c_flow_taker_turnover_rank to select the fast or slow share without identifying takers by pool name.
For each flow, c_flow_taker_turnover_rank is 1 for the faster of two non-vegetation takers, -1 for the slower taker, and 0 when the flow is not a two-taker quality partition. A rank of zero therefore leaves the flow neutral (QP = 1), including GSI transfers to vegetation and one-taker litterfall.
The individual approaches only determine fastPart and slowPart (for example, from the metabolic litter fraction); the same rank-based equation is then applied to every cVeg flow.
cQualityPartitioncVeg approaches
SindbadTEM.Processes.cQualityPartitioncVeg_constant Type
Sets the metabolic litter fraction of the carbon-quality partition to a uniform constant.
Parameters
- Fields
lit_frac_metabolic: 0.85 ∈ [0.0, 1.0] => fraction of leaf and fine-root litterfall routed to the metabolic litter pools (units:fraction@alltimescales)
Methods:
define:
Inputs
cCycleBase.c_taker: index of the receiving carbon pool for a given flowpools.cEco: carbon content of cEco pool(s)
Outputs
diagnostics.c_flow_QP_f_cVeg: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_flow_QP_f_cVeg)for information on how to add the variable to the catalog.
precompute:
Inputs
diagnostics.c_flow_QP_f_cVeg: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_flow_QP_f_cVeg)for information on how to add the variable to the catalog.cCycleBase.c_flow_order: order of pooling while calculating the carbon flowcCycleBase.c_giver: index of the source carbon pool for a given flowcCycleBase.c_taker: index of the receiving carbon pool for a given flowcCycleBase.c_flow_taker_turnover_rank: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:cCycleBase, :c_flow_taker_turnover_rank)for information on how to add the variable to the catalog.constants.o_one: a helper type stable 1 to be used across all models
Outputs
diagnostics.c_flow_QP_f_cVeg: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_flow_QP_f_cVeg)for information on how to add the variable to the catalog.
compute, update methods are not defined
End of getModelDocString-generated docstring for cQualityPartitioncVeg_constant.jl. Check the Extended help for user-defined information.
Extended help
Use this approach to hold the metabolic/structural split of leaf and fine-root litterfall at a prescribed value instead of reading it from vegQualityTraits or varying it with PFT class. The default of 0.85 is the CASA intercept, which vegQualityTraits_vegType returns when litter contains no lignin.
References
- Potter, C. S., Randerson, J. T., Field, C. B., Matson, P. A., Vitousek, P. M., Mooney, H. A., & Klooster, S. A. (1993). Terrestrial ecosystem production: a process model based on global satellite and surface data. Global Biogeochemical Cycles, 7(4), 811-841.
Versions
1.0 on 04.09.2026 [skoirala]: as cQualityPartitionMetabolicFraction_constant
2.0 on 10.09.2026 [skoirala]: renamed/relocated into cQualityPartitioncVeg
Created by
- skoirala
cTau
SindbadTEM.Processes.cTau Type
Actual decomposition/turnover rates of all carbon pools considering the effect of stressors.Approaches
cTau_mult: Combines all effects that change the turnover rates by multiplication.cTau_none: Sets the decomposition/turnover rates of all carbon pools to 0, i.e., no carbon decomposition and flow.
cTau approaches
SindbadTEM.Processes.cTau_mult Type
Combines all effects that change the turnover rates by multiplication.
Parameters
- None
Methods:
define:
Inputs
pools.cEco: carbon content of cEco pool(s)
Outputs
diagnostics.c_eco_k: decomposition rate of carbon per pool
compute:
Inputs
diagnostics.c_eco_k_f_veg_props: effect of veg_props on carbon decomposition rate. 1: no stress, 0: complete stressdiagnostics.c_eco_k_f_soilW: effect of soil moisture on carbon decomposition rate. 1: no stress, 0: complete stressdiagnostics.c_eco_k_f_soilT: effect of soil temperature on heterotrophic respiration respiration. 0: no decomposition, >1 increase in decompositiondiagnostics.c_eco_k_f_soil_props: effect of soil_props on carbon decomposition rate. 1: no stress, 0: complete stressdiagnostics.c_eco_k_base: base carbon decomposition rate of the carbon poolsdiagnostics.c_eco_k: decomposition rate of carbon per pool
Outputs
diagnostics.c_eco_k: decomposition rate of carbon per pool
precompute, update methods are not defined
End of getModelDocString-generated docstring for cTau_mult.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 12.01.2020 [sbesnard]
Created by
- ncarvalhais
Notes:
sourceCalculated using:
Inputs: :diagnostics => :c_eco_k_f_veg_props, :diagnostics => :c_eco_k_f_soilW, :diagnostics => :c_eco_k_f_soilT, :diagnostics => :c_eco_k_f_soil_props, :diagnostics => :c_eco_k_base, :diagnostics => :c_eco_k
Outputs: :diagnostics => :c_eco_kcTauSoilProperties
SindbadTEM.Processes.cTauSoilProperties Type
Effect of soil texture on soil decomposition ratesApproaches
cTauSoilProperties_CASA: Compute soil texture effects on turnover rates [k] of cMicSoilcTauSoilProperties_none: Set soil texture effects to ones (ineficient, should be pix zix_mic)
cTauSoilProperties approaches
SindbadTEM.Processes.cTauSoilProperties_CASA Type
Compute soil texture effects on turnover rates [k] of cMicSoil
Parameters
- Fields
TEXTEFFA: 0.75 ∈ [0.0, 1.0] => effect of soil texture on turnove times (unitless@alltimescales)
Methods:
define:
Inputs
pools.cEco: carbon content of cEco pool(s)
Outputs
diagnostics.c_eco_k_f_soil_props: effect of soil_props on carbon decomposition rate. 1: no stress, 0: complete stress
compute:
Inputs
diagnostics.c_eco_k_f_soil_props: effect of soil_props on carbon decomposition rate. 1: no stress, 0: complete stressproperties.st_clay: fraction of clay content in the soilproperties.st_silt: fraction of silt content in the soil per layer
Outputs
diagnostics.c_eco_k_f_soil_props: effect of soil_props on carbon decomposition rate. 1: no stress, 0: complete stress
precompute, update methods are not defined
End of getModelDocString-generated docstring for cTauSoilProperties_CASA.jl. Check the Extended help for user-defined information.
Extended help
References
Carvalhais; N.; Reichstein; M.; Seixas; J.; Collatz; G. J.; Pereira; J. S.; Berbigier; P. & Rambal, S. (2008). Implications of the carbon cycle steady state assumption for biogeochemical modeling performance & inverse parameter retrieval. Global Biogeochemical Cycles, 22[2].
Potter, C., Klooster, S., Myneni, R., Genovese, V., Tan, P. N., & Kumar, V. (2003). Continental-scale comparisons of terrestrial carbon sinks estimated from satellite data & ecosystem modeling 1982–1998. Global & Planetary Change, 39[3-4], 201-213.
Potter; C. S.; Randerson; J. T.; Field; C. B.; Matson; P. A.; Vitousek; P. M.; Mooney; H. A. & Klooster, S. A. (1993). Terrestrial ecosystem production: a process model based on global satellite & surface data. Global Biogeochemical Cycles, 7[4], 811-841.
Versions
- 1.0 on 12.01.2020 [sbesnard]
Created by
- ncarvalhais
Calculated using:
Inputs: :diagnostics => :c_eco_k_f_soil_props, :properties => :st_clay, :properties => :st_silt
Outputs: :diagnostics => :c_eco_k_f_soil_propscTauSoilT
SindbadTEM.Processes.cTauSoilT Type
Effect of soil temperature on decomposition rates.Approaches
cTauSoilT_Q10: Effect of soil temperature on decomposition rates using a Q10 function.cTauSoilT_none: Sets the effect of soil temperature on decomposition rates to 1 (no temperature effect).
cTauSoilT approaches
SindbadTEM.Processes.cTauSoilT_Q10 Type
Effect of soil temperature on decomposition rates using a Q10 function.
Parameters
- Fields
Q10: 1.4 ∈ [1.05, 3.0] => (unitless@alltimescales)ref_airT: 30.0 ∈ [0.01, 40.0] => (units:°C@alltimescales)Q10_base: 10.0 ∈ [-Inf, Inf] => base temperature difference (units:°C@alltimescales)
Methods:
compute:
Inputs
forcing.f_airT: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_airT)for information on how to add the variable to the catalog.
Outputs
diagnostics.c_eco_k_f_soilT: effect of soil temperature on heterotrophic respiration respiration. 0: no decomposition, >1 increase in decomposition
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for cTauSoilT_Q10.jl. Check the Extended help for user-defined information.
Extended help
References
Davidson, E. A. and Janssens, I. A. (2006). Temperature sensitivity of soil carbon decomposition and feedbacks to climate change. Nature, 440, 165–173. https://doi.org/10.1038/nature04514
Frøseth, R. B. and Bleken, M. A. (2015). Effect of low temperature and soil type on the decomposition rate of soil organic carbon and clover leaves, and related priming effect. Soil Biology and Biochemistry, 80, 156–166. https://doi.org/10.1016/j.soilbio.2014.10.004
Dehaen, E. M., Burke, E. J., Chadburn, S. E., Kaduk, J., Sitch, S., Smith, N. D., and Gallego-Sala, A. V. (2025). Drivers of soil heterotrophic respiration in tropical peatlands: a review to inform peat carbon accumulation modelling. Frontiers in Geochemistry, 3, 1492386. https://doi.org/10.3389/fgeoc.2025.1492386
Versions
- 1.0 on 12.01.2020 [sbesnard]
Created by
- ncarvalhais
Notes
sourceCalculated using:
Inputs: :forcing => :f_airT
Outputs: :diagnostics => :c_eco_k_f_soilTcTauSoilW
SindbadTEM.Processes.cTauSoilW Type
Effect of soil moisture on decomposition rates.Approaches
cTauSoilW_CASA: Effect of soil moisture on decomposition rates as modeled in CASA, using the belowground moisture effect (BGME) from the Century model.cTauSoilW_GSI: Effect of soil moisture on decomposition rates based on the GSI approach.cTauSoilW_none: Sets the effect of soil moisture on decomposition rates to 1 (no moisture effect).
cTauSoilW approaches
SindbadTEM.Processes.cTauSoilW_CASA Type
Effect of soil moisture on decomposition rates as modeled in CASA, using the belowground moisture effect (BGME) from the Century model.
Parameters
- Fields
Aws: 1.0 ∈ [0.001, 1000.0] => curve (expansion/contraction) controlling parameter (unitless@alltimescales)
Methods:
define:
Inputs
pools.soilW: water storage in soilW pool(s)pools.cEco: carbon content of cEco pool(s)constants.o_one: a helper type stable 1 to be used across all models
Outputs
diagnostics.c_eco_k_f_soilW: effect of soil moisture on carbon decomposition rate. 1: no stress, 0: complete stressdiagnostics.fsoilW: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :fsoilW)for information on how to add the variable to the catalog.diagnostics.fsoilW_prev: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :fsoilW_prev)for information on how to add the variable to the catalog.cTauSoilW.soilW_prev: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:cTauSoilW, :soilW_prev)for information on how to add the variable to the catalog.cTauSoilW.timesteps_per_month: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:cTauSoilW, :timesteps_per_month)for information on how to add the variable to the catalog.
compute:
Inputs
diagnostics.c_eco_k_f_soilW: effect of soil moisture on carbon decomposition rate. 1: no stress, 0: complete stressdiagnostics.fsoilW_prev: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :fsoilW_prev)for information on how to add the variable to the catalog.cTauSoilW.soilW_prev: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:cTauSoilW, :soilW_prev)for information on how to add the variable to the catalog.cTauSoilW.timesteps_per_month: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:cTauSoilW, :timesteps_per_month)for information on how to add the variable to the catalog.pools.soilW: water storage in soilW pool(s)fluxes.rain: amount of precipitation in liquid formfluxes.PET: potential evapotranspirationconstants.z_zero: a helper type stable 0 to be used across all modelsconstants.o_one: a helper type stable 1 to be used across all models
Outputs
diagnostics.c_eco_k_f_soilW: effect of soil moisture on carbon decomposition rate. 1: no stress, 0: complete stressdiagnostics.fsoilW: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :fsoilW)for information on how to add the variable to the catalog.diagnostics.fsoilW_prev: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :fsoilW_prev)for information on how to add the variable to the catalog.cTauSoilW.soilW_prev: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:cTauSoilW, :soilW_prev)for information on how to add the variable to the catalog.
precompute, update methods are not defined
End of getModelDocString-generated docstring for cTauSoilW_CASA.jl. Check the Extended help for user-defined information.
Extended help
References
Carvalhais; N.; Reichstein; M.; Seixas; J.; Collatz; G. J.; Pereira; J. S.; Berbigier; P. & Rambal, S. (2008). Implications of the carbon cycle steady state assumption for biogeochemical modeling performance & inverse parameter retrieval. Global Biogeochemical Cycles, 22[2].
Potter, C., Klooster, S., Myneni, R., Genovese, V., Tan, P. N., & Kumar, V. (2003). Continental-scale comparisons of terrestrial carbon sinks estimated from satellite data & ecosystem modeling 1982–1998. Global & Planetary Change, 39[3-4], 201-213.
Potter; C. S.; Randerson; J. T.; Field; C. B.; Matson; P. A.; Vitousek; P. M.; Mooney; H. A. & Klooster, S. A. (1993). Terrestrial ecosystem production: a process model based on global satellite & surface data. Global Biogeochemical Cycles, 7[4], 811-841.
Versions
1.0 on 12.01.2020 [sbesnard]
1.1 on 11.10.2026 [skoirala]: ported the vectorized BGME code to a per time step scalar form, with the previous total soil water kept in land.cTauSoilW and the time steps per month taken from the model time step
Created by
- ncarvalhais
Notesthe BGME is used as a scalar dependent on soil moisture; as the sum of soil moisture for all layers. This can be partitioned into different soil layers in the soil & affect independently the decomposition processes of pools that are at the surface & deeper in the soils.
sourceCalculated using:
Inputs: :diagnostics => :c_eco_k_f_soilW, :diagnostics => :fsoilW_prev, :cTauSoilW => :soilW_prev, :cTauSoilW => :timesteps_per_month, :pools => :soilW, :fluxes => :rain, :fluxes => :PET, :constants => :z_zero, :constants => :o_one
Outputs: :diagnostics => :c_eco_k_f_soilW, :diagnostics => :fsoilW, :diagnostics => :fsoilW_prev, :cTauSoilW => :soilW_prevcTauVegProperties
SindbadTEM.Processes.cTauVegProperties Type
Effect of vegetation properties on soil decomposition rates.Approaches
cTauVegProperties_CASA: Effect of litter lignin content on the decomposition rates of the structural litter pools, as modeled in CASA.cTauVegProperties_none: Sets the effect of vegetation properties on decomposition rates to 1 (no vegetation effect).
cTauVegProperties approaches
SindbadTEM.Processes.cTauVegProperties_CASA Type
Effect of litter lignin content on the decomposition rates of the structural litter pools, as modeled in CASA.
Parameters
- None
Methods:
define:
Inputs
pools.cEco: carbon content of cEco pool(s)
Outputs
diagnostics.c_eco_k_f_veg_props: effect of veg_props on carbon decomposition rate. 1: no stress, 0: complete stress
precompute:
Inputs
diagnostics.c_eco_k_f_veg_props: effect of veg_props on carbon decomposition rate. 1: no stress, 0: complete stressproperties.lit_k_f_lignin: multiplicative effect of lignin content on the decomposition rate of the structural litter pools; one means no effect
Outputs
diagnostics.c_eco_k_f_veg_props: effect of veg_props on carbon decomposition rate. 1: no stress, 0: complete stress
compute, update methods are not defined
End of getModelDocString-generated docstring for cTauVegProperties_CASA.jl. Check the Extended help for user-defined information.
Extended help
The approach applies lit_k_f_lignin, published by the vegQualityTraits process, to the structural litter pools cLitLeafSlow and cLitRootFineSlow.
This approach previously owned the whole lignin calculation, with seven parameters of its own. Those now live in vegQualityTraits, so the lignin chemistry is declared once and shared with cQualityPartition, which needs the same quantities.
It also previously contained a PFT-dependent turnover block that derived c_eco_τ from a per-pool AGE. That block was a partial MATLAB translation which read p.cCycleBase and p.vegProperties, neither of which exists in SINDBAD, and packed a c_eco_τ that was never assigned, so the approach could not run at all. It has been removed rather than guessed at; turnover rates come from cTau and its cTauSoilT/cTauSoilW/cTauLAI factors.
References
Carvalhais; N.; Reichstein; M.; Seixas; J.; Collatz; G. J.; Pereira; J. S.; Berbigier; P. & Rambal, S. (2008). Implications of the carbon cycle steady state assumption for biogeochemical modeling performance & inverse parameter retrieval. Global Biogeochemical Cycles, 22[2].
Potter, C., Klooster, S., Myneni, R., Genovese, V., Tan, P. N., & Kumar, V. (2003). Continental-scale comparisons of terrestrial carbon sinks estimated from satellite data & ecosystem modeling 1982–1998. Global & Planetary Change, 39[3-4], 201-213.
Potter; C. S.; Randerson; J. T.; Field; C. B.; Matson; P. A.; Vitousek; P. M.; Mooney; H. A. & Klooster, S. A. (1993). Terrestrial ecosystem production: a process model based on global satellite & surface data. Global Biogeochemical Cycles, 7[4], 811-841.
Versions
1.0 on 12.01.2020 [sbesnard]
2.0 on 04.09.2026 [skoirala]: lignin properties moved to the lignin process; dead turnover block removed
2.1 on 09.09.2026 [skoirala]: metabolicFraction and lignin merged into vegQualityTraits
Created by
- ncarvalhais
cVegetationDieOff
SindbadTEM.Processes.cVegetationDieOff Type
Fraction of vegetation pools that die off.Approaches
cVegetationDieOff_forcing: Get the fraction of vegetation that die off from forcing data.cVegetationDieOff_none: Set the fraction of vegetation that die off to zero.
cVegetationDieOff approaches
SindbadTEM.Processes.cVegetationDieOff_forcing Type
Get the fraction of vegetation that die off from forcing data.
Parameters
- None
Methods:
define:
Inputs
forcing.f_dist_intensity: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_dist_intensity)for information on how to add the variable to the catalog.
Outputs
diagnostics.c_f_cVeg_dieOff: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_f_cVeg_dieOff)for information on how to add the variable to the catalog.
compute:
Inputs
forcing.f_dist_intensity: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_dist_intensity)for information on how to add the variable to the catalog.
Outputs
diagnostics.c_f_cVeg_dieOff: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :c_f_cVeg_dieOff)for information on how to add the variable to the catalog.
precompute, update methods are not defined
End of getModelDocString-generated docstring for cVegetationDieOff_forcing.jl. Check the Extended help for user-defined information.
Extended help
References
- Carvalhais; N.; Reichstein; M.; Seixas; J.; Collatz; G. J.; Pereira; J. S.; Berbigier; P. & Rambal, S. (2008). Implications of the carbon cycle steady state assumption for biogeochemical modeling performance & inverse parameter retrieval. Global Biogeochemical Cycles, 22[2].
Versions
- 1.0 on summer 2024
Created by:
- Nuno
Calculated using:
Inputs: :forcing => :f_dist_intensity
Outputs: :diagnostics => :c_f_cVeg_dieOffcapillaryFlow
SindbadTEM.Processes.capillaryFlow Type
Capillary flux of water from lower to upper soil layers (upward soil moisture movement).Approaches
capillaryFlow_VanDijk2010: Computes the upward capillary flux of water through soil layers using the Van Dijk (2010) method.
capillaryFlow approaches
SindbadTEM.Processes.capillaryFlow_VanDijk2010 Type
Computes the upward capillary flux of water through soil layers using the Van Dijk (2010) method.
Parameters
- Fields
max_frac: 0.95 ∈ [0.02, 0.98] => max fraction of soil moisture that can be lost as capillary flux (unitless@alltimescales)
Methods:
define:
Inputs
pools.soilW: water storage in soilW pool(s)
Outputs
fluxes.soil_capillary_flux: soil capillary flux per layer
compute:
Inputs
properties.k_fc: hydraulic conductivity of soil at field capacity per layerproperties.w_sat: amount of water in the soil at saturation per layerproperties.idx_soilW_end: index of the deepest soil layer with non-zero thickness, which exchanges water with groundwaterfluxes.soil_capillary_flux: soil capillary flux per layerpools.soilW: water storage in soilW pool(s)pools.ΔsoilW: change in water storage in soilW pool(s)constants.z_zero: a helper type stable 0 to be used across all modelsconstants.o_one: a helper type stable 1 to be used across all models
Outputs
fluxes.soil_capillary_flux: soil capillary flux per layerpools.ΔsoilW: change in water storage in soilW pool(s)
precompute, update methods are not defined
End of getModelDocString-generated docstring for capillaryFlow_VanDijk2010.jl. Check the Extended help for user-defined information.
Extended help
References
AIJM Van Dijk, 2010, The Australian Water Resources Assessment System Technical Report 3. Landscape Model [version 0.5] Technical Description
Versions
- 1.0 on 18.11.2019 [skoirala | @dr-ko]
Created by
- skoirala | @dr-ko
Calculated using:
Inputs: :properties => :k_fc, :properties => :w_sat, :properties => :idx_soilW_end, :fluxes => :soil_capillary_flux, :pools => :soilW, :pools => :ΔsoilW, :constants => :z_zero, :constants => :o_one
Outputs: :fluxes => :soil_capillary_flux, :pools => :ΔsoilWconstants
SindbadTEM.Processes.constants Type
Defines constants and variables that are independent of model structure.Approaches
constants_numbers: Includes constants for numbers such as 1 to 10.
constants approaches
SindbadTEM.Processes.constants_numbers Type
Includes constants for numbers such as 1 to 10.
Parameters
- None
Methods:
define:
Inputs
- None
Outputs
constants.z_zero: a helper type stable 0 to be used across all modelsconstants.o_one: a helper type stable 1 to be used across all modelsconstants.t_two: a type stable 2constants.t_three: a type stable 3
precompute, compute, update methods are not defined
End of getModelDocString-generated docstring for constants_numbers.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 14.05.2025 [skoirala]
Created by
- skoirala
deriveVariables
SindbadTEM.Processes.deriveVariables Type
Derives additional variables based on other SINDBAD models and saves them into land.deriveVariables.Approaches
deriveVariables_simple: Incudes derivation of few variables that may be commonly needed for optimization against some datasets.
deriveVariables approaches
SindbadTEM.Processes.deriveVariables_simple Type
Incudes derivation of few variables that may be commonly needed for optimization against some datasets.
Parameters
- None
Methods:
define, precompute, compute, update methods are not defined
End of getModelDocString-generated docstring for deriveVariables_simple.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 19.07.2023 [skoirala | @dr-ko]:
Created by
- skoirala | @dr-ko
drainage
SindbadTEM.Processes.drainage Type
Drainage flux of water from upper to lower soil layers.Approaches
drainage_dos: Drainage flux based on an exponential function of soil moisture degree of saturation.drainage_kUnsat: Drainage flux based on unsaturated hydraulic conductivity.drainage_wFC: Drainage flux based on overflow above field capacity.
drainage approaches
SindbadTEM.Processes.drainage_dos Type
Drainage flux based on an exponential function of soil moisture degree of saturation.
Parameters
- Fields
dos_exp: 1.5 ∈ [0.1, 3.0] => exponent of non-linearity for dos influence on drainage in soil (unitless@alltimescales)n24: 1.0 ∈ [-Inf, Inf] => Time scale (day to hour) Parameters (unitless@daytimescale)
Methods:
define:
Inputs
pools.ΔsoilW: change in water storage in soilW pool(s)
Outputs
fluxes.drainage: soil moisture drainage per soil layer
compute:
Inputs
fluxes.drainage: soil moisture drainage per soil layerproperties.w_sat: amount of water in the soil at saturation per layerproperties.soil_β: beta parameter of soil per layerproperties.w_fc: amount of water in the soil at field capacity per layerproperties.idx_soilW_end: index of the deepest soil layer with non-zero thickness, which exchanges water with groundwaterpools.soilW: water storage in soilW pool(s)pools.ΔsoilW: change in water storage in soilW pool(s)constants.z_zero: a helper type stable 0 to be used across all modelsconstants.o_one: a helper type stable 1 to be used across all models
Outputs
fluxes.drainage: soil moisture drainage per soil layerpools.ΔsoilW: change in water storage in soilW pool(s)
precompute, update methods are not defined
End of getModelDocString-generated docstring for drainage_dos.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 18.11.2019 [skoirala | @dr-ko]
Created by
- skoirala | @dr-ko
Calculated using:
Inputs: :fluxes => :drainage, :properties => :w_sat, :properties => :soil_β, :properties => :w_fc, :properties => :idx_soilW_end, :pools => :soilW, :pools => :ΔsoilW, :constants => :z_zero, :constants => :o_one
Outputs: :fluxes => :drainage, :pools => :ΔsoilWevaporation
SindbadTEM.Processes.evaporation Type
Bare soil evaporation.Approaches
evaporation_Snyder2000: Bare soil evaporation using the relative drying rate of soil following Snyder (2000).evaporation_bareFraction: Bare soil evaporation from the non-vegetated fraction of the grid as a linear function of soil moisture and potential evaporation.evaporation_demandSupply: Bare soil evaporation using a demand-supply limited approach.evaporation_fAPAR: Bare soil evaporation from the non-absorbed fAPAR (as a proxy for vegetation fraction) and potential evaporation.evaporation_none: Bare soil evaporation set to 0.evaporation_vegFraction: Bare soil evaporation from the non-vegetated fraction and potential evaporation.
evaporation approaches
SindbadTEM.Processes.evaporation_Snyder2000 Type
Bare soil evaporation using the relative drying rate of soil following Snyder (2000).
Parameters
- Fields
α: 1.0 ∈ [0.5, 1.5] => scaling factor for PET to account for maximum bare soil evaporation (unitless@alltimescales)β: 3.0 ∈ [1.0, 5.0] => soil moisture resistance factor for soil evapotranspiration (units:mm^0.5@alltimescales)
Methods:
define:
Inputs
constants.z_zero: a helper type stable 0 to be used across all models
Outputs
fluxes.sPET_prev: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:fluxes, :sPET_prev)for information on how to add the variable to the catalog.
compute:
Inputs
states.fAPAR: fraction of absorbed photosynthetically active radiationpools.soilW: water storage in soilW pool(s)pools.ΔsoilW: change in water storage in soilW pool(s)fluxes.PET: potential evapotranspirationfluxes.sPET_prev: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:fluxes, :sPET_prev)for information on how to add the variable to the catalog.constants.z_zero: a helper type stable 0 to be used across all modelsconstants.o_one: a helper type stable 1 to be used across all models
Outputs
fluxes.sET: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:fluxes, :sET)for information on how to add the variable to the catalog.fluxes.sPET_prev: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:fluxes, :sPET_prev)for information on how to add the variable to the catalog.fluxes.evaporation: evaporation from the first soil layerpools.ΔsoilW: change in water storage in soilW pool(s)
precompute, update methods are not defined
End of getModelDocString-generated docstring for evaporation_Snyder2000.jl. Check the Extended help for user-defined information.
Extended help
References
- Snyder, R. L., Bali, K., Ventura, F., & Gomez-MacPherson, H. (2000). Estimating evaporation from bare - nearly bare soil. Journal of irrigation & drainage engineering, 126[6], 399-403.
Versions
- 1.0 on 11.11.2019 [skoirala | @dr-ko]: transfer from to accommodate land.states.fAPAR
Created by
mjung
skoirala | @dr-ko
Calculated using:
Inputs: :states => :fAPAR, :pools => :soilW, :pools => :ΔsoilW, :fluxes => :PET, :fluxes => :sPET_prev, :constants => :z_zero, :constants => :o_one
Outputs: :fluxes => :sET, :fluxes => :sPET_prev, :fluxes => :evaporation, :pools => :ΔsoilWevapotranspiration
SindbadTEM.Processes.evapotranspiration Type
Evapotranspiration.Approaches
evapotranspiration_simple: calculates evapotranspiration as a simple linear function of soil moistureevapotranspiration_sum: Evapotranspiration as a sum of all potential components
evapotranspiration approaches
SindbadTEM.Processes.evapotranspiration_simple Type
calculates evapotranspiration as a simple linear function of soil moisture
Parameters
- Fields
k_evapotranspiration: 0.001 ∈ [0.001, 0.1] => evapotranspiration supplyrate (units:day-1@daytimescale)d_evapotranspiration: 0.01 ∈ [0.001, 0.98] => evapotranspiration demand rate (units:-@daytimescale)mj_to_mm: 2.45 ∈ [-Inf, Inf] => conversion factor from MJ to mm (units:MJ/mm@alltimescales)
Methods:
compute:
Inputs
pools.soilW: water storage in soilW pool(s)pools.ΔsoilW: change in water storage in soilW pool(s)forcing.f_rn: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_rn)for information on how to add the variable to the catalog.
Outputs
fluxes.evapotranspiration: total land evaporation including soil evaporation, vegetation transpiration, snow sublimation, and interception losspools.ΔsoilW: change in water storage in soilW pool(s)
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for evapotranspiration_simple.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 16.12.2025 [skoirala]
Created by
- skoirala
Calculated using:
Inputs: :pools => :soilW, :pools => :ΔsoilW, :forcing => :f_rn
Outputs: :fluxes => :evapotranspiration, :pools => :ΔsoilWfAPAR
SindbadTEM.Processes.fAPAR Type
Fraction of absorbed photosynthetically active radiation.Approaches
fAPAR_EVI: fAPAR as a linear function of EVI.fAPAR_LAI: fAPAR as a function of LAI.fAPAR_LAIBareFrac: fAPAR of the vegetated area as a function of LAI, and fAPAR of the grid cell scaled by the vegetation fractionfAPAR_cVegLeaf: fAPAR based on the carbon pool of leaves, specific leaf area (SLA), and kLAI.fAPAR_cVegLeafBareFrac: fAPAR of the vegetated area based on the carbon pool of leaves, and fAPAR of the grid cell scaled by the vegetation fraction.fAPAR_constant: Sets fAPAR as a constant value.fAPAR_forcing: Gets fAPAR from forcing data.fAPAR_vegFraction: fAPAR as a linear function of vegetation fraction.
fAPAR approaches
SindbadTEM.Processes.fAPAR_EVI Type
fAPAR as a linear function of EVI.
Parameters
- Fields
EVI_to_fAPAR_c: 0.0 ∈ [-0.2, 0.3] => intercept of the linear function (unitless@alltimescales)EVI_to_fAPAR_m: 1.0 ∈ [0.5, 5] => slope of the linear function (unitless@alltimescales)
Methods:
compute:
Inputs
states.EVI: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:states, :EVI)for information on how to add the variable to the catalog.
Outputs
states.fAPAR: fraction of absorbed photosynthetically active radiation
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for fAPAR_EVI.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 11.11.2019 [skoirala | @dr-ko]
Created by
- skoirala | @dr-ko
Calculated using:
Inputs: :states => :EVI
Outputs: :states => :fAPARfrozenFraction
SindbadTEM.Processes.frozenFraction Type
Frozen fraction of the soilApproaches
frozenFraction_forcing: Gets frozen fraction from forcing
frozenFraction approaches
SindbadTEM.Processes.frozenFraction_forcing Type
Gets frozen fraction from forcing
Parameters
- None
Methods:
precompute:
Inputs
constants.z_zero: a helper type stable 0 to be used across all models
Outputs
states.frac_frozen_soil: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:states, :frac_frozen_soil)for information on how to add the variable to the catalog.
compute:
Inputs
forcing.f_frac_frozen_soil: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_frac_frozen_soil)for information on how to add the variable to the catalog.
Outputs
states.frac_frozen_soil: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:states, :frac_frozen_soil)for information on how to add the variable to the catalog.
define, update methods are not defined
End of getModelDocString-generated docstring for frozenFraction_forcing.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 04.08.2026 [skoirala]
Created by
- skoirala
Calculated using:
Inputs: :forcing => :f_frac_frozen_soil
Outputs: :states => :frac_frozen_soilgetPools
SindbadTEM.Processes.getPools Type
Retrieves the amount of water at the beginning of the time step.Approaches
getPools_simple: Simply take throughfall as the maximum available water.
getPools approaches
SindbadTEM.Processes.getPools_simple Type
Simply take throughfall as the maximum available water.
Parameters
- None
Methods:
define:
Inputs
constants.z_zero: a helper type stable 0 to be used across all models
Outputs
states.WBP: water balance tracker pool that starts with rain and ends up with 0 after allocating to soil percolation
compute:
Inputs
fluxes.rain: amount of precipitation in liquid formstates.WBP: water balance tracker pool that starts with rain and ends up with 0 after allocating to soil percolation
Outputs
states.WBP: water balance tracker pool that starts with rain and ends up with 0 after allocating to soil percolation
precompute, update methods are not defined
End of getModelDocString-generated docstring for getPools_simple.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 19.11.2019 [skoirala | @dr-ko]: added the documentation & cleaned the code, added json with development stage
Created by
mjung
ncarvalhais
skoirala | @dr-ko
Calculated using:
Inputs: :fluxes => :rain, :states => :WBP
Outputs: :states => :WBPgpp
SindbadTEM.Processes.gpp Type
Gross Primary Productivity (GPP).Approaches
gpp_coupled: GPP based on transpiration supply and water use efficiency (coupled).gpp_min: GPP with potential scaled by the minimum stress scalar of demand and supply for uncoupled model structures.gpp_mult: GPP with potential scaled by the product of stress scalars of demand and supply for uncoupled model structures.gpp_neuralNetwork: GPP predicted directly by a pretrained neural network model.define,precompute, andcomputefor this approach are implemented in theSindbadFluxExtpackage extension (activates onceusing Fluxis loaded alongsideusing Sindbad).gpp_none: Sets GPP to 0.gpp_transpirationWUE: GPP based on transpiration and water use efficiency.
gpp approaches
SindbadTEM.Processes.gpp_coupled Type
GPP based on transpiration supply and water use efficiency (coupled).
Parameters
- None
Methods:
compute:
Inputs
diagnostics.transpiration_supply: total amount of water available in soil for transpirationdiagnostics.gpp_f_soilW: effect of soil moisture on gpp. 1: no stress, 0: complete stressdiagnostics.gpp_demand: demand driven gross primary prorDuctivitydiagnostics.WUE: water use efficiency of the ecosystem
Outputs
fluxes.gpp: gross primary prorDcutivity
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for gpp_coupled.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 22.11.2019 [skoirala | @dr-ko]
Created by
mjung
skoirala | @dr-ko
Notes
sourceCalculated using:
Inputs: :diagnostics => :transpiration_supply, :diagnostics => :gpp_f_soilW, :diagnostics => :gpp_demand, :diagnostics => :WUE
Outputs: :fluxes => :gppgppAirT
SindbadTEM.Processes.gppAirT Type
Effect of temperature on GPP: 1 indicates no temperature stress, 0 indicates complete stress.Approaches
gppAirT_CASA: Temperature effect on GPP based as implemented in CASA.gppAirT_De2025: Using Ranit's corrected approach, i.e. 1 + exp(x) ^ 2 instead of 1 + exp(x^2)gppAirT_GSI: Temperature effect on GPP based on the GSI implementation of LPJ.gppAirT_MOD17: Temperature effect on GPP based on the MOD17 model.gppAirT_Maekelae2008: Temperature effect on GPP based on Maekelae (2008).gppAirT_TEM: Temperature effect on GPP based on the TEM model.gppAirT_Wang2014: Temperature effect on GPP based on Wang (2014).gppAirT_none: Sets temperature stress on GPP to 1 (no stress).
gppAirT approaches
SindbadTEM.Processes.gppAirT_CASA Type
Temperature effect on GPP based as implemented in CASA.
Parameters
- Fields
opt_airT: 25.0 ∈ [5.0, 35.0] => check in CASA code (units:°C@alltimescales)opt_airT_A: 0.2 ∈ [0.01, 0.3] => increasing slope of sensitivity (unitless@alltimescales)opt_airT_B: 0.3 ∈ [0.01, 0.5] => decreasing slope of sensitivity (unitless@alltimescales)exp_airT: 10.0 ∈ [9.0, 11.0] => reference for exponent of sensitivity (unitless@alltimescales)
Methods:
compute:
Inputs
forcing.f_airT_day: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_airT_day)for information on how to add the variable to the catalog.constants.o_one: a helper type stable 1 to be used across all models
Outputs
diagnostics.gpp_f_airT: effect of air temperature on gpp. 1: no stress, 0: complete stress
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for gppAirT_CASA.jl. Check the Extended help for user-defined information.
Extended help
References
Carvalhais; N.; Reichstein; M.; Seixas; J.; Collatz; G. J.; Pereira; J. S.; Berbigier; P. & Rambal, S. (2008). Implications of the carbon cycle steady state assumption for biogeochemical modeling performance & inverse parameter retrieval. Global Biogeochemical Cycles, 22[2].
Potter, C., Klooster, S., Myneni, R., Genovese, V., Tan, P. N., & Kumar, V. (2003). Continental-scale comparisons of terrestrial carbon sinks estimated from satellite data & ecosystem modeling 1982–1998. Global & Planetary Change, 39[3-4], 201-213.
Potter; C. S.; Randerson; J. T.; Field; C. B.; Matson; P. A.; Vitousek; P. M.; Mooney; H. A. & Klooster, S. A. (1993). Terrestrial ecosystem production: a process model based on global satellite & surface data. Global Biogeochemical Cycles, 7[4], 811-841.
Versions
- 1.0 on 22.11.2019 [skoirala | @dr-ko]: documentation & clean up
Created by
- ncarvalhais
Notes
sourceCalculated using:
Inputs: :forcing => :f_airT_day, :constants => :o_one
Outputs: :diagnostics => :gpp_f_airTgppDemand
SindbadTEM.Processes.gppDemand Type
Combined effect of environmental demand on GPP.Approaches
gppDemand_min: Demand GPP as the minimum of all stress scalars (most limiting factor).gppDemand_mult: Demand GPP as the product of all stress scalars.gppDemand_none: Sets the scalar for demand GPP to 1 and demand GPP to 0.
gppDemand approaches
SindbadTEM.Processes.gppDemand_min Type
Demand GPP as the minimum of all stress scalars (most limiting factor).
Parameters
- None
Methods:
define:
Inputs
forcing.f_VPD_day: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_VPD_day)for information on how to add the variable to the catalog.pools.soilW: water storage in soilW pool(s)
Outputs
diagnostics.gpp_climate_stressors: a collection of all gpp climate stressors including light, temperature, radiation, and vpd
compute:
Inputs
states.fAPAR: fraction of absorbed photosynthetically active radiationdiagnostics.gpp_f_cloud: effect of cloud on gpp. 1: no stress, 0: complete stressdiagnostics.gpp_potential: potential gross primary prorDcutivitydiagnostics.gpp_f_light: effect of light on gpp. 1: no stress, 0: complete stressdiagnostics.gpp_climate_stressors: a collection of all gpp climate stressors including light, temperature, radiation, and vpddiagnostics.gpp_f_airT: effect of air temperature on gpp. 1: no stress, 0: complete stressdiagnostics.gpp_f_vpd: effect of vpd on gpp. 1: no stress, 0: complete stress
Outputs
diagnostics.gpp_f_climate: effect of climate on gpp. 1: no stress, 0: complete stressdiagnostics.gpp_demand: demand driven gross primary prorDuctivity
precompute, update methods are not defined
End of getModelDocString-generated docstring for gppDemand_min.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 22.11.2019 [skoirala | @dr-ko]: documentation & clean up
Created by
- ncarvalhais
Notes
sourceCalculated using:
Inputs: :states => :fAPAR, :diagnostics => :gpp_f_cloud, :diagnostics => :gpp_potential, :diagnostics => :gpp_f_light, :diagnostics => :gpp_climate_stressors, :diagnostics => :gpp_f_airT, :diagnostics => :gpp_f_vpd
Outputs: :diagnostics => :gpp_f_climate, :diagnostics => :gpp_demandgppDiffRadiation
SindbadTEM.Processes.gppDiffRadiation Type
Effect of diffuse radiation (Cloudiness scalar) on GPP: 1 indicates no diffuse radiation effect, 0 indicates complete effect.Approaches
gppDiffRadiation_De2025_Enhancement: Cloudiness as an enhancement of GPP potential, 1 + α CI^μ, with values of 1 at CI = 0 and 1 + α at CI = 1.gppDiffRadiation_GSI: Cloudiness scalar (radiation diffusion) on GPP potential based on the GSI implementation of LPJ.gppDiffRadiation_Turner2006: Cloudiness scalar (radiation diffusion) on GPP potential based on Turner (2006).gppDiffRadiation_Turner2006Exp: Cloudiness scalar (radiation diffusion) on GPP potential based on Turner (2006), with a power-law response to the scaled cloudiness index.gppDiffRadiation_Wang2015: Cloudiness scalar (radiation diffusion) on GPP potential based on Wang (2015).gppDiffRadiation_none: Sets the cloudiness scalar (radiation diffusion) for GPP potential to 1.
gppDiffRadiation approaches
SindbadTEM.Processes.gppDiffRadiation_De2025_Enhancement Type
Cloudiness as an enhancement of GPP potential, 1 + α CI^μ, with values of 1 at CI = 0 and 1 + α at CI = 1.
Parameters
- Fields
α: 0.4 ∈ [0.0, 2.0] => relative enhancement of LUE at CI = 1 over LUE at CI = 0 (unitless@alltimescales)μ: 1.0 ∈ [0.2, 5.0] => shape exponent of the response to cloudiness index (unitless@alltimescales)
Methods:
precompute:
Inputs
- None
Outputs
diagnostics.gpp_f_cloud: effect of cloud on gpp. 1: no stress, 0: complete stress
compute:
Inputs
forcing.f_rg: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_rg)for information on how to add the variable to the catalog.forcing.f_rg_pot: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_rg_pot)for information on how to add the variable to the catalog.constants.z_zero: a helper type stable 0 to be used across all models
Outputs
diagnostics.gpp_f_cloud: effect of cloud on gpp. 1: no stress, 0: complete stress
define, update methods are not defined
End of getModelDocString-generated docstring for gppDiffRadiation_De2025_Enhancement.jl. Check the Extended help for user-defined information.
Extended help
gpp_f_cloud = 1 + α * CI^μ, where CI = 1 - f_rg/f_rg_pot is the cloudiness index. CI = 0 gives 1 and CI = 1 gives 1 + α. μ < 1 makes the enhancement saturate under light cloud, μ = 1 is linear, and μ > 1 limits it to heavy cloud.
The scalar exceeds 1, so it suits gppDemand_mult. With gppDemand_min it is never the minimum and has no effect. Under this framing gpp_potential is the clear sky potential, not the maximum under diffuse light.
Reported enhancements of overcast over clear sky LUE at equal PAR are 6 to 33% for forests in Alton et al. (2007), 12 to 80% across 38 FLUXNET sites in Alton (2008), and 30 to 45% for winter wheat in van Diepen et al. (2025). Observed CI only spans about 0.25 under clear sky to 0.83 under overcast in van Diepen et al. (2025), so with μ = 1 these enhancements need α of about 0.1 to 2.1, which sets the bounds of α.
References
Alton, P. B., North, P. R., & Los, S. O. (2007). The impact of diffuse sunlight on canopy light-use efficiency, gross photosynthetic product and net ecosystem exchange in three forest biomes. Global Change Biology, 13[4], 776-787.
Alton, P. B. (2008). Reduced carbon sequestration in terrestrial ecosystems under overcast skies compared to clear skies. Agricultural and Forest Meteorology, 148[10], 1641-1653.
Gu, L., Baldocchi, D. D., Wofsy, S. C., Munger, J. W., Michalsky, J. J., Urbanski, S. P., & Boden, T. A. (2003). Response of a deciduous forest to the Mount Pinatubo eruption: enhanced photosynthesis. Science, 299[5615], 2035-2038. DOI: 10.1126/science.1078366
Knohl, A., & Baldocchi, D. D. (2008). Effects of diffuse radiation on canopy gas exchange processes in a forest ecosystem. Journal of Geophysical Research: Biogeosciences, 113, G02023. DOI: 10.1029/2007JG000663
van Diepen, K. H. H., Kaiser, E., Hartogensis, O. K., Graf, A., Vilà-Guerau de Arellano, J., & Moene, A. F. (2025). When do clouds and aerosols lead to higher canopy photosynthesis? Agricultural and Forest Meteorology, 370, 110597. DOI: 10.1016/j.agrformet.2025.110597
Mercado, L. M., Bellouin, N., Sitch, S., Boucher, O., Huntingford, C., Wild, M., & Cox, P. M. (2009). Impact of changes in diffuse radiation on the global land carbon sink. Nature, 458[7241], 1014-1017. DOI: 10.1038/nature07949
Versions
- 1.0 on 27.10.2026 [skoirala | @dr-ko]: variant of gppDiffRadiation_exp with cloudiness as an enhancement
Created by
- skoirala
Calculated using:
Inputs: :forcing => :f_rg, :forcing => :f_rg_pot, :constants => :z_zero
Outputs: :diagnostics => :gpp_f_cloudgppDirRadiation
SindbadTEM.Processes.gppDirRadiation Type
Effect of direct radiation (light effect) on GPP: 1 indicates no direct radiation effect, 0 indicates complete effect.Approaches
gppDirRadiation_Maekelae2008: Light saturation scalar (light effect) on GPP potential based on Maekelae (2008).gppDirRadiation_none: Sets the light saturation scalar (light effect) on GPP potential to 1.
gppDirRadiation approaches
SindbadTEM.Processes.gppDirRadiation_Maekelae2008 Type
Light saturation scalar (light effect) on GPP potential based on Maekelae (2008).
Parameters
- Fields
γ: 0.002 ∈ [0.0, 0.05] => empirical light response parameter (unitless@alltimescales)
Methods:
compute:
Inputs
forcing.f_PAR: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_PAR)for information on how to add the variable to the catalog.states.fAPAR: fraction of absorbed photosynthetically active radiation
Outputs
diagnostics.gpp_f_light: effect of light on gpp. 1: no stress, 0: complete stress
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for gppDirRadiation_Maekelae2008.jl. Check the Extended help for user-defined information.
Extended help
References
- Mäkelä, A., Pulkkinen, M., Kolari, P., et al. (2008). Developing an empirical model of stand GPP with the LUE approachanalysis of eddy covariance data at five contrasting conifer sites in Europe. Global change biology, 14[1], 92-108.
Versions
- 1.0 on 22.11.2019 [skoirala | @dr-ko]: documentation & clean up
Created by
mjung
ncarvalhais
Notes
- γ is between [0.007 0.05], median !0.04 [m2/mol] in Maekelae et al 2008.
Calculated using:
Inputs: :forcing => :f_PAR, :states => :fAPAR
Outputs: :diagnostics => :gpp_f_lightgppPotential
SindbadTEM.Processes.gppPotential Type
Potential GPP based on maximum instantaneous radiation use efficiency.Approaches
gppPotential_Monteith: Potential GPP based on radiation use efficiency model/concept of Monteith.
gppPotential approaches
SindbadTEM.Processes.gppPotential_Monteith Type
Potential GPP based on radiation use efficiency model/concept of Monteith.
Parameters
- Fields
εmax: 1.0 ∈ [0.632, 3.2] => Maximum Radiation Use Efficiency (units:gC/MJ@alltimescales)
Methods:
compute:
Inputs
forcing.f_PAR: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_PAR)for information on how to add the variable to the catalog.
Outputs
diagnostics.gpp_potential: potential gross primary prorDcutivity
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for gppPotential_Monteith.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 22.11.2019 [skoirala | @dr-ko]: documentation & clean up
Created by
mjung
ncarvalhais
Notes
no crontrols for fPAR | meteo factors
set the potential GPP as maxRUE * f_PAR [gC/m2/dat]
usually GPP = e_max x f[clim] x FAPAR x f_PAR here GPP = GPPpot x f[clim] x FAPAR GPPpot = e_max x f_PAR f[clim] & FAPAR are [maybe] calculated dynamically
Calculated using:
Inputs: :forcing => :f_PAR
Outputs: :diagnostics => :gpp_potentialgppSoilW
SindbadTEM.Processes.gppSoilW Type
Effect of soil moisture on GPP: 1 indicates no soil water stress, 0 indicates complete stress.Approaches
gppSoilW_CASA: Soil moisture stress on GPP potential based on base stress and the relative ratio of PET and PAW (CASA).gppSoilW_GSI: Soil moisture stress on GPP potential based on the GSI implementation of LPJ.gppSoilW_Horn: Soil moisture stress on GPP using Horn and Schulz (2011a) filtered-moisture sigmoid response.gppSoilW_Keenan2009: Soil moisture stress on GPP potential based on Keenan (2009).gppSoilW_Stocker2020: Soil moisture stress on GPP potential based on Stocker (2020).gppSoilW_none: Sets soil moisture stress on GPP potential to 1 (no stress).
gppSoilW approaches
SindbadTEM.Processes.gppSoilW_CASA Type
Soil moisture stress on GPP potential based on base stress and the relative ratio of PET and PAW (CASA).
Parameters
- Fields
base_f_soilW: 0.2 ∈ [0, 1] => base water stress (unitless@alltimescales)
Methods:
define:
Inputs
constants.z_zero: a helper type stable 0 to be used across all models
Outputs
diagnostics.gpp_f_soilW_prev: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :gpp_f_soilW_prev)for information on how to add the variable to the catalog.
compute:
Inputs
forcing.f_airT: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_airT)for information on how to add the variable to the catalog.diagnostics.gpp_f_soilW_prev: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :gpp_f_soilW_prev)for information on how to add the variable to the catalog.states.PAW: amount of water available for transpiration per soil layerfluxes.PET: potential evapotranspirationconstants.z_zero: a helper type stable 0 to be used across all modelsconstants.o_one: a helper type stable 1 to be used across all models
Outputs
diagnostics.OmBweOPET: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :OmBweOPET)for information on how to add the variable to the catalog.diagnostics.gpp_f_soilW: effect of soil moisture on gpp. 1: no stress, 0: complete stressdiagnostics.gpp_f_soilW_prev: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :gpp_f_soilW_prev)for information on how to add the variable to the catalog.
precompute, update methods are not defined
End of getModelDocString-generated docstring for gppSoilW_CASA.jl. Check the Extended help for user-defined information.
Extended help
References
- Forkel; M.; Carvalhais; N.; Schaphoff; S.; v. Bloh; W.; Migliavacca; M. Thurner; M.; & Thonicke; K.: Identifying environmental controls on vegetation greenness phenology through model–data integration Biogeosciences; 11; 7025–7050; https://doi.org/10.5194/bg-11-7025-2014;2014.
Versions
- 1.1 on 22.01.2021 [skoirala | @dr-ko]
Created by
- skoirala | @dr-ko
Notes
sourceCalculated using:
Inputs: :forcing => :f_airT, :diagnostics => :gpp_f_soilW_prev, :states => :PAW, :fluxes => :PET, :constants => :z_zero, :constants => :o_one
Outputs: :diagnostics => :OmBweOPET, :diagnostics => :gpp_f_soilW, :diagnostics => :gpp_f_soilW_prevgppVPD
SindbadTEM.Processes.gppVPD Type
Effect of vapor pressure deficit (VPD) on GPP: 1 indicates no VPD stress, 0 indicates complete stress.Approaches
gppVPD_Farquhar1980: VPD stress on GPP potential based on Maekelae (2008), with the CO₂ effect of light limited C3 photosynthesis of Farquhar et al. (1980).gppVPD_MOD17: VPD stress on GPP potential based on the MOD17 model.gppVPD_Maekelae2008: VPD stress on GPP potential based on Maekelae (2008).gppVPD_PRELES: VPD stress on GPP potential based on Maekelae (2008) and includes the CO₂ effect based on the PRELES model.gppVPD_expco2: VPD stress on GPP potential based on Maekelae (2008) and includes the CO₂ effect.gppVPD_none: Sets VPD stress on GPP potential to 1 (no stress).
gppVPD approaches
SindbadTEM.Processes.gppVPD_Farquhar1980 Type
VPD stress on GPP potential based on Maekelae (2008), with the CO₂ effect of light limited C3 photosynthesis of Farquhar et al. (1980).
Parameters
- Fields
κ: 0.4 ∈ [0.06, 0.7] => sensitivity of GPP to VPD at the reference ambient CO2 (units:kPa-1@alltimescales)χ: 0.7 ∈ [0.4, 0.9] => ratio of leaf internal to ambient CO2 (unitless@alltimescales)ref_ambient_CO2: 380.0 ∈ [300.0, 500.0] => ambient CO2 at which the CO2 effect is one (units:ppm@alltimescales)Γ_star_25: 42.75 ∈ [-Inf, Inf] => CO2 compensation point at 25 °C (units:ppm@alltimescales)ΔH_Γ_star: 37830.0 ∈ [-Inf, Inf] => activation energy of the CO2 compensation point (units:J mol-1@alltimescales)gas_constant: 8.314 ∈ [-Inf, Inf] => universal gas constant (units:J mol-1 K-1@alltimescales)
Methods:
define:
Inputs
- None
Outputs
gppVPD.T_25: 25 °C in K, the reference temperature of the CO2 compensation point Γ_star_25gppVPD.T_0: 0 °C in K, to convert the air temperature for the CO2 compensation point
compute:
Inputs
forcing.f_airT_day: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_airT_day)for information on how to add the variable to the catalog.forcing.f_VPD_day: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_VPD_day)for information on how to add the variable to the catalog.states.ambient_CO2: ambient co2 concentrationconstants.t_two: a type stable 2constants.t_three: a type stable 3gppVPD.T_25: 25 °C in K, the reference temperature of the CO2 compensation point Γ_star_25gppVPD.T_0: 0 °C in K, to convert the air temperature for the CO2 compensation point
Outputs
diagnostics.gpp_f_co2: effect of ambient co2 on gpp relative to a reference co2. 1: at the reference co2diagnostics.gpp_f_vpd: effect of vpd on gpp. 1: no stress, 0: complete stress
precompute, update methods are not defined
End of getModelDocString-generated docstring for gppVPD_Farquhar1980.jl. Check the Extended help for user-defined information.
Extended help
The CO2 effect is m(Ca) / m(ref_ambient_CO2), where m = (Ci - Γ_) / (Ci + 2Γ_) is the CO2 dependence of the light limited rate of C3 photosynthesis and Ci = χ Ca. The CO2 effect is one at ref_ambient_CO2, stays positive for Ci above Γ*, and saturates at high CO2. Its sensitivity, d ln m / d ln Ca, is about 0.4 at 400 ppm and 25 °C.
The VPD stress is exp(-κ VPD s(Ca) / s(ref_ambient_CO2)), the stress of gppVPD_Maekelae2008 scaled by s = d ln m / d ln χ = 3Γ* Ci / ((Ci - Γ_)(Ci + 2Γ_)). VPD closes stomata and lowers χ, and the relative loss of photosynthesis for a given drop of χ is s, which falls as CO2 rises. The scale is one at ref_ambient_CO2, is close to ref_ambient_CO2 / Ca when Γ* is small, and has no free parameter. It replaces the calibrated exponent c_κ of gppVPD_PRELES, which is not identifiable from the narrow CO2 range of the calibration period and extrapolates badly to the CO2 of 1700 or 1901.
Γ* follows the air temperature with the Arrhenius function of Bernacchi et al. (2001). The reference uses the same Γ*, so both factors are one at ref_ambient_CO2 at every temperature, and a higher temperature only makes GPP more sensitive to CO2.
χ and ref_ambient_CO2 are not meant to be calibrated, since both effects are close to one over the calibration period. WUE_Farquhar1980 uses the same fixed χ, under which WUE grows in proportion to Ca, and its ref_ambient_CO2 should have the same value.
The CO2 effect is that of C3 plants. C4 plants respond much less to CO2.
References
Farquhar, G. D., von Caemmerer, S., & Berry, J. A. (1980). A biochemical model of photosynthetic CO2 assimilation in leaves of C3 species. Planta, 149, 78-90.
Bernacchi, C. J., Singsaas, E. L., Pimentel, C., Portis Jr, A. R., & Long, S. P. (2001). Improved temperature response functions for models of Rubisco-limited photosynthesis. Plant, Cell & Environment, 24, 253-259.
Mäkelä, A., Pulkkinen, M., Kolari, P., et al. (2008). Developing an empirical model of stand GPP with the LUE approach: analysis of eddy covariance data at five contrasting conifer sites in Europe. Global Change Biology, 14, 92-108.
Versions
1.0 on 02.11.2026 [skoirala | @dr-ko]
1.1 on 05.11.2026 [skoirala | @dr-ko]: the CO2 dependence of the VPD stress is s(Ca) / s(ref_ambient_CO2) of the light limited rate instead of the calibrated power (Ca / ref_ambient_CO2)^c_κ.
Created by
- skoirala | @dr-ko
Calculated using:
Inputs: :forcing => :f_airT_day, :forcing => :f_VPD_day, :states => :ambient_CO2, :constants => :t_two, :constants => :t_three, :gppVPD => :T_25, :gppVPD => :T_0
Outputs: :diagnostics => :gpp_f_co2, :diagnostics => :gpp_f_vpdgroundWRecharge
SindbadTEM.Processes.groundWRecharge Type
Groundwater recharge.Approaches
groundWRecharge_dos: Groundwater recharge as an exponential function of the degree of saturation of the lowermost soil layer.groundWRecharge_fraction: Groundwater recharge as a fraction of the moisture in the lowermost soil layer.groundWRecharge_kUnsat: Groundwater recharge as the unsaturated hydraulic conductivity of the lowermost soil layer.groundWRecharge_none: Sets groundwater recharge to 0.
groundWRecharge approaches
SindbadTEM.Processes.groundWRecharge_dos Type
Groundwater recharge as an exponential function of the degree of saturation of the lowermost soil layer.
Parameters
- Fields
dos_exp: 1.5 ∈ [1.0, 3.0] => exponent of non-linearity for dos influence on drainage to groundwater (unitless@alltimescales)n24: 1.0 ∈ [-Inf, Inf] => Time scale (day to hour) Parameters (unitless@daytimescale)
Methods:
define:
Inputs
constants.z_zero: a helper type stable 0 to be used across all models
Outputs
fluxes.gw_recharge: net groundwater recharge from the lowermost soil layer, positive => soil to groundwater
compute:
Inputs
properties.idx_soilW_end: index of the deepest soil layer with non-zero thickness, which exchanges water with groundwaterproperties.w_sat: amount of water in the soil at saturation per layerproperties.soil_β: beta parameter of soil per layerpools.ΔsoilW: change in water storage in soilW pool(s)pools.soilW: water storage in soilW pool(s)pools.ΔgroundW: change in water storage in groundW pool(s)pools.groundW: water storage in groundW pool(s)constants.z_zero: a helper type stable 0 to be used across all modelsconstants.o_one: a helper type stable 1 to be used across all models
Outputs
fluxes.gw_recharge: net groundwater recharge from the lowermost soil layer, positive => soil to groundwaterpools.ΔsoilW: change in water storage in soilW pool(s)pools.ΔgroundW: change in water storage in groundW pool(s)
precompute, update methods are not defined
End of getModelDocString-generated docstring for groundWRecharge_dos.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 11.11.2019 [skoirala | @dr-ko]: clean up
Created by
- skoirala | @dr-ko
Calculated using:
Inputs: :properties => :idx_soilW_end, :properties => :w_sat, :properties => :soil_β, :pools => :ΔsoilW, :pools => :soilW, :pools => :ΔgroundW, :pools => :groundW, :constants => :z_zero, :constants => :o_one
Outputs: :fluxes => :gw_recharge, :pools => :ΔsoilW, :pools => :ΔgroundWgroundWSoilWInteraction
SindbadTEM.Processes.groundWSoilWInteraction Type
Groundwater-soil moisture interactions (e.g., capillary flux, water exchange).Approaches
groundWSoilWInteraction_VanDijk2010: Upward flow of water from groundwater to the lowermost soil layer using the Van Dijk (2010) method.groundWSoilWInteraction_gradient: Delayed/Buffer storage that gives water to the soil when the soil is dry and receives water from the soil when the buffer is low.groundWSoilWInteraction_gradientNeg: Delayed/Buffer storage that does not give water to the soil when the soil is dry, but receives water from the soil when the soil is wet and the buffer is low.groundWSoilWInteraction_none: Sets groundwater capillary flux to 0 for no interaction between soil moisture and groundwater.
groundWSoilWInteraction approaches
SindbadTEM.Processes.groundWSoilWInteraction_VanDijk2010 Type
Upward flow of water from groundwater to the lowermost soil layer using the Van Dijk (2010) method.
Parameters
- Fields
max_fraction: 0.5 ∈ [0.001, 0.98] => fraction of groundwater that can be lost to capillary flux (unitless@alltimescales)
Methods:
define:
Inputs
- None
Outputs
fluxes.gw_recharge: net groundwater recharge from the lowermost soil layer, positive => soil to groundwater
compute:
Inputs
properties.idx_soilW_end: index of the deepest soil layer with non-zero thickness, which exchanges water with groundwaterproperties.k_fc: hydraulic conductivity of soil at field capacity per layerproperties.k_sat: hydraulic conductivity of soil at saturation per layerproperties.w_sat: amount of water in the soil at saturation per layerpools.ΔsoilW: change in water storage in soilW pool(s)pools.ΔgroundW: change in water storage in groundW pool(s)pools.groundW: water storage in groundW pool(s)pools.soilW: water storage in soilW pool(s)models.unsat_k_model: name of the model used to calculate unsaturated hydraulic conductivityconstants.z_zero: a helper type stable 0 to be used across all modelsconstants.o_one: a helper type stable 1 to be used across all modelsfluxes.gw_recharge: net groundwater recharge from the lowermost soil layer, positive => soil to groundwater
Outputs
fluxes.gw_capillary_flux: capillary flux from top groundwater layer to the lowermost soil layerfluxes.gw_recharge: net groundwater recharge from the lowermost soil layer, positive => soil to groundwaterpools.ΔsoilW: change in water storage in soilW pool(s)pools.ΔgroundW: change in water storage in groundW pool(s)
precompute, update methods are not defined
End of getModelDocString-generated docstring for groundWSoilWInteraction_VanDijk2010.jl. Check the Extended help for user-defined information.
Extended help
References
AIJM Van Dijk, 2010, The Australian Water Resources Assessment System Technical Report 3. Landscape Model [version 0.5] Technical Description
Versions
- 1.0 on 18.11.2019 [skoirala | @dr-ko]
Created by
- skoirala | @dr-ko
Calculated using:
Inputs: :properties => :idx_soilW_end, :properties => :k_fc, :properties => :k_sat, :properties => :w_sat, :pools => :ΔsoilW, :pools => :ΔgroundW, :pools => :groundW, :pools => :soilW, :models => :unsat_k_model, :constants => :z_zero, :constants => :o_one, :fluxes => :gw_recharge
Outputs: :fluxes => :gw_capillary_flux, :fluxes => :gw_recharge, :pools => :ΔsoilW, :pools => :ΔgroundWgroundWSurfaceWInteraction
SindbadTEM.Processes.groundWSurfaceWInteraction Type
Water exchange between surface and groundwater.Approaches
groundWSurfaceWInteraction_fracGradient: Moisture exchange between groundwater and surface water as a fraction of the difference between their storages.groundWSurfaceWInteraction_fracGroundW: Depletion of groundwater to surface water as a fraction of groundwater storage.
groundWSurfaceWInteraction approaches
SindbadTEM.Processes.groundWSurfaceWInteraction_fracGradient Type
Moisture exchange between groundwater and surface water as a fraction of the difference between their storages.
Parameters
- Fields
k_gw_to_suw: 0.001 ∈ [0.0001, 0.01] => maximum transfer rate between GW and surface water (units:/d@alltimescales)
Methods:
compute:
Inputs
pools.ΔsurfaceW: change in water storage in surfaceW pool(s)pools.ΔgroundW: change in water storage in groundW pool(s)pools.groundW: water storage in groundW pool(s)pools.surfaceW: water storage in surfaceW pool(s)
Outputs
fluxes.gw_to_suw_flux: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:fluxes, :gw_to_suw_flux)for information on how to add the variable to the catalog.pools.ΔsurfaceW: change in water storage in surfaceW pool(s)pools.ΔgroundW: change in water storage in groundW pool(s)
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for groundWSurfaceWInteraction_fracGradient.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 18.11.2019 [skoirala | @dr-ko]
Created by
- skoirala | @dr-ko
Calculated using:
Inputs: :pools => :ΔsurfaceW, :pools => :ΔgroundW, :pools => :groundW, :pools => :surfaceW
Outputs: :fluxes => :gw_to_suw_flux, :pools => :ΔsurfaceW, :pools => :ΔgroundWinterception
SindbadTEM.Processes.interception Type
Interception loss.Approaches
interception_Miralles2010: Interception loss according to the Gash model of Miralles, 2010.interception_fAPAR: Interception loss as a fraction of fAPAR.interception_none: Sets interception loss to 0.interception_vegFraction: Interception loss as a fraction of vegetation cover.
interception approaches
SindbadTEM.Processes.interception_Miralles2010 Type
Interception loss according to the Gash model of Miralles, 2010.
Parameters
- Fields
canopy_storage: 1.2 ∈ [0.4, 2.0] => Canopy storage (units:mm@alltimescales)fte: 0.02 ∈ [0.02, 0.02] => fraction of trunk evaporation (unitless@alltimescales)evap_rate: 0.3 ∈ [0.1, 0.5] => mean evaporation rate (units:mm/hr@alltimescales)trunk_capacity: 0.02 ∈ [0.02, 0.02] => trunk capacity (units:mm@alltimescales)pd: 0.02 ∈ [0.02, 0.02] => fraction rain to trunks (unitless@alltimescales)
Methods:
compute:
Inputs
states.WBP: water balance tracker pool that starts with rain and ends up with 0 after allocating to soil percolationstates.fAPAR: fraction of absorbed photosynthetically active radiationfluxes.rain: amount of precipitation in liquid formstates.rain_int: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:states, :rain_int)for information on how to add the variable to the catalog.
Outputs
fluxes.interception: interception evaporation lossstates.WBP: water balance tracker pool that starts with rain and ends up with 0 after allocating to soil percolation
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for interception_Miralles2010.jl. Check the Extended help for user-defined information.
Extended help
References
- Miralles, D. G., Gash, J. H., Holmes, T. R., de Jeu, R. A., & Dolman, A. J. (2010). Global canopy interception from satellite observations. Journal of Geophysical ResearchAtmospheres, 115[D16].
Versions
1.0 on 18.11.2019 [ttraut]: cleaned up the code
1.1 on 22.11.2019 [skoirala | @dr-ko]: handle land.states.fAPAR, rainfall intensity & rainfall
Created by
- mjung
Notes
sourceCalculated using:
Inputs: :states => :WBP, :states => :fAPAR, :fluxes => :rain, :states => :rain_int
Outputs: :fluxes => :interception, :states => :WBPpercolation
SindbadTEM.Processes.percolation Type
Percolation through the top of soilApproaches
percolation_WBP: Percolation as a difference of throughfall and surface runoff loss.percolation_rain: calculate percolation = rain, assuming no surface runoff losses
percolation approaches
SindbadTEM.Processes.percolation_WBP Type
Percolation as a difference of throughfall and surface runoff loss.
Parameters
- None
Methods:
compute:
Inputs
pools.ΔgroundW: change in water storage in groundW pool(s)pools.ΔsoilW: change in water storage in soilW pool(s)pools.soilW: water storage in soilW pool(s)pools.groundW: water storage in groundW pool(s)states.WBP: water balance tracker pool that starts with rain and ends up with 0 after allocating to soil percolationconstants.o_one: a helper type stable 1 to be used across all modelsproperties.w_sat: amount of water in the soil at saturation per layer
Outputs
fluxes.percolation: amount of moisture percolating to the top soil layerstates.WBP: water balance tracker pool that starts with rain and ends up with 0 after allocating to soil percolationpools.ΔgroundW: change in water storage in groundW pool(s)pools.ΔsoilW: change in water storage in soilW pool(s)
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for percolation_WBP.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 18.11.2019 [skoirala | @dr-ko]
Created by
- skoirala | @dr-ko
Calculated using:
Inputs: :pools => :ΔgroundW, :pools => :ΔsoilW, :pools => :soilW, :pools => :groundW, :states => :WBP, :constants => :o_one, :properties => :w_sat
Outputs: :fluxes => :percolation, :states => :WBP, :pools => :ΔgroundW, :pools => :ΔsoilWrainIntensity
SindbadTEM.Processes.rainIntensity Type
Rainfall intensity.Approaches
rainIntensity_forcing: Gets rainfall intensity from forcing data.rainIntensity_simple: Rainfall intensity as a linear function of rainfall amount.
rainIntensity approaches
SindbadTEM.Processes.rainIntensity_forcing Type
Gets rainfall intensity from forcing data.
Parameters
- None
Methods:
compute:
Inputs
forcing.f_rain_int: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_rain_int)for information on how to add the variable to the catalog.
Outputs
states.rain_int: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:states, :rain_int)for information on how to add the variable to the catalog.
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for rainIntensity_forcing.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 11.11.2019 [skoirala | @dr-ko]: creation of approach
Created by
- skoirala | @dr-ko
Calculated using:
Inputs: :forcing => :f_rain_int
Outputs: :states => :rain_intrainSnow
SindbadTEM.Processes.rainSnow Type
Rain and snow partitioning.Approaches
rainSnow_Tair: Rain and snow partitioning based on a temperature threshold.rainSnow_forcing: Sets rainfall and snowfall from forcing data, with snowfall scaled if the snowfall_scalar parameter is optimized.rainSnow_rain: All precipitation is assumed to be liquid rain with 0 snowfall.
rainSnow approaches
SindbadTEM.Processes.rainSnow_Tair Type
Rain and snow partitioning based on a temperature threshold.
Parameters
- Fields
airT_thres: 0.0 ∈ [-5.0, 5.0] => threshold for separating rain and snow (units:°C@alltimescales)
Methods:
compute:
Inputs
forcing.f_rain: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_rain)for information on how to add the variable to the catalog.forcing.f_airT: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_airT)for information on how to add the variable to the catalog.pools.snowW: water storage in snowW pool(s)pools.ΔsnowW: change in water storage in snowW pool(s)
Outputs
fluxes.precip: total land precipitation including snow and rainfluxes.rain: amount of precipitation in liquid formfluxes.snow: amount of precipitation in solid formpools.ΔsnowW: change in water storage in snowW pool(s)
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for rainSnow_Tair.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 11.11.2019 [skoirala | @dr-ko]: creation of approach
Created by
- skoirala | @dr-ko
Calculated using:
Inputs: :forcing => :f_rain, :forcing => :f_airT, :pools => :snowW, :pools => :ΔsnowW
Outputs: :fluxes => :precip, :fluxes => :rain, :fluxes => :snow, :pools => :ΔsnowWrootMaximumDepth
SindbadTEM.Processes.rootMaximumDepth Type
Maximum rooting depth.Approaches
rootMaximumDepth_fracSoilD: Maximum rooting depth as a fraction of total soil depth.
rootMaximumDepth approaches
SindbadTEM.Processes.rootMaximumDepth_fracSoilD Type
Maximum rooting depth as a fraction of total soil depth.
Parameters
- Fields
constant_frac_max_root_depth: 0.5 ∈ [0.1, 0.8] => root depth as a fraction of soil depth (unitless@alltimescales)
Methods:
define:
Inputs
properties.soil_layer_thickness: thickness of each soil layer
Outputs
properties.∑soil_depth: total depth of soil
precompute:
Inputs
properties.soil_layer_thickness: thickness of each soil layer
Outputs
properties.∑soil_depth: total depth of soildiagnostics.max_root_depth: maximum depth of root
compute, update methods are not defined
End of getModelDocString-generated docstring for rootMaximumDepth_fracSoilD.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 21.11.2019
Created by
- skoirala | @dr-ko
rootWaterEfficiency
SindbadTEM.Processes.rootWaterEfficiency Type
Water uptake efficiency by roots for each soil layer.Approaches
rootWaterEfficiency_constant: Water uptake efficiency by roots set as a constant for each soil layer.rootWaterEfficiency_expCvegRoot: Water uptake efficiency by roots set according to total root carbon.rootWaterEfficiency_k2Layer: Water uptake efficiency by roots set as a calibration parameter for each soil layer (for two soil layers).rootWaterEfficiency_k2fRD: Water uptake efficiency by roots set as a function of vegetation fraction, and for the second soil layer, as a function of rooting depth from different datasets.rootWaterEfficiency_k2fvegFraction: Water uptake efficiency by roots set as a function of vegetation fraction, and for the second soil layer, as a function of rooting depth from different datasets, which is further scaled by the vegetation fraction.
rootWaterEfficiency approaches
SindbadTEM.Processes.rootWaterEfficiency_constant Type
Water uptake efficiency by roots set as a constant for each soil layer.
Parameters
- Fields
constant_root_water_efficiency: 0.99 ∈ [0.001, 0.999] => root fraction (unitless@alltimescales)
Methods:
define:
Inputs
pools.soilW: water storage in soilW pool(s)
Outputs
diagnostics.root_water_efficiency: a efficiency like number that indicates the ease/fraction of soil water that can extracted by the root per layer
precompute:
Inputs
properties.cumulative_soil_depths: the depth to the bottom of each soil layerdiagnostics.root_water_efficiency: a efficiency like number that indicates the ease/fraction of soil water that can extracted by the root per layerpools.soilW: water storage in soilW pool(s)constants.z_zero: a helper type stable 0 to be used across all modelsdiagnostics.max_root_depth: maximum depth of root
Outputs
diagnostics.root_water_efficiency: a efficiency like number that indicates the ease/fraction of soil water that can extracted by the root per layer
compute, update methods are not defined
End of getModelDocString-generated docstring for rootWaterEfficiency_constant.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 21.11.2019
Created by
- skoirala | @dr-ko
rootWaterUptake
SindbadTEM.Processes.rootWaterUptake Type
Root water uptake from soil.Approaches
rootWaterUptake_proportion: Root uptake from each soil layer proportional to the relative plant water availability in the layer.rootWaterUptake_topBottom: Root uptake from each soil layer from top to bottom, using maximul available water in each layer.
rootWaterUptake approaches
SindbadTEM.Processes.rootWaterUptake_proportion Type
Root uptake from each soil layer proportional to the relative plant water availability in the layer.
Parameters
- None
Methods:
define:
Inputs
pools.soilW: water storage in soilW pool(s)
Outputs
fluxes.root_water_uptake: amount of water uptaken for transpiration per soil layer
compute:
Inputs
states.PAW: amount of water available for transpiration per soil layerpools.soilW: water storage in soilW pool(s)pools.ΔsoilW: change in water storage in soilW pool(s)fluxes.transpiration: transpirationfluxes.root_water_uptake: amount of water uptaken for transpiration per soil layerconstants.z_zero: a helper type stable 0 to be used across all modelsconstants.o_one: a helper type stable 1 to be used across all models
Outputs
fluxes.root_water_uptake: amount of water uptaken for transpiration per soil layerpools.ΔsoilW: change in water storage in soilW pool(s)
precompute, update methods are not defined
End of getModelDocString-generated docstring for rootWaterUptake_proportion.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 13.03.2020 [ttraut]
Created by
- ttraut
Notes
- assumes that the uptake from each layer remains proportional to the root fraction
Calculated using:
Inputs: :states => :PAW, :pools => :soilW, :pools => :ΔsoilW, :fluxes => :transpiration, :fluxes => :root_water_uptake, :constants => :z_zero, :constants => :o_one
Outputs: :fluxes => :root_water_uptake, :pools => :ΔsoilWrunoff
SindbadTEM.Processes.runoff Type
Total runoff.Approaches
runoff_simple: calculates runoff as a simple linear function of soil moisturerunoff_sum: Runoff as a sum of all potential components.
runoff approaches
SindbadTEM.Processes.runoff_simple Type
calculates runoff as a simple linear function of soil moisture
Parameters
- Fields
k_runoff: 0.001 ∈ [0.001, 0.1] => runoff rate (units:day-1@daytimescale)
Methods:
compute:
Inputs
pools.soilW: water storage in soilW pool(s)pools.ΔsoilW: change in water storage in soilW pool(s)
Outputs
fluxes.runoff: total runoffpools.ΔsoilW: change in water storage in soilW pool(s)
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for runoff_simple.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 16.12.2025 [skoirala]
Created by
- skoirala
Calculated using:
Inputs: :pools => :soilW, :pools => :ΔsoilW
Outputs: :fluxes => :runoff, :pools => :ΔsoilWrunoffBase
SindbadTEM.Processes.runoffBase Type
Baseflow.Approaches
runoffBase_Zhang2008: Baseflow from a linear groundwater storage following Zhang (2008).runoffBase_none: Sets base runoff to 0.
runoffBase approaches
SindbadTEM.Processes.runoffBase_Zhang2008 Type
Baseflow from a linear groundwater storage following Zhang (2008).
Parameters
- Fields
k_baseflow: 0.001 ∈ [1.0e-5, 0.02] => base flow coefficient (units:day-1@daytimescale)
Methods:
compute:
Inputs
pools.groundW: water storage in groundW pool(s)pools.ΔgroundW: change in water storage in groundW pool(s)
Outputs
fluxes.base_runoff: base runoffpools.ΔgroundW: change in water storage in groundW pool(s)
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for runoffBase_Zhang2008.jl. Check the Extended help for user-defined information.
Extended help
References
- Zhang, Y. Q., Chiew, F. H. S., Zhang, L., Leuning, R., & Cleugh, H. A. (2008). Estimating catchment evaporation and runoff using MODIS leaf area index & the Penman‐Monteith equation. Water Resources Research, 44[10].
Versions
- 1.0 on 18.11.2019 [ttraut]: cleaned up the code
Created by
- mjung
Calculated using:
Inputs: :pools => :groundW, :pools => :ΔgroundW
Outputs: :fluxes => :base_runoff, :pools => :ΔgroundWrunoffInfiltrationExcess
SindbadTEM.Processes.runoffInfiltrationExcess Type
Infiltration excess runoff.Approaches
runoffInfiltrationExcess_Jung: Infiltration excess runoff as a function of rain intensity and vegetated fraction.runoffInfiltrationExcess_kUnsat: Infiltration excess runoff based on unsaturated hydraulic conductivity.runoffInfiltrationExcess_none: Sets infiltration excess runoff to 0.
runoffInfiltrationExcess approaches
SindbadTEM.Processes.runoffInfiltrationExcess_Jung Type
Infiltration excess runoff as a function of rain intensity and vegetated fraction.
Parameters
- None
Methods:
compute:
Inputs
states.WBP: water balance tracker pool that starts with rain and ends up with 0 after allocating to soil percolationstates.fAPAR: fraction of absorbed photosynthetically active radiationproperties.k_sat: hydraulic conductivity of soil at saturation per layerfluxes.rain: amount of precipitation in liquid formstates.rain_int: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:states, :rain_int)for information on how to add the variable to the catalog.constants.z_zero: a helper type stable 0 to be used across all modelsconstants.o_one: a helper type stable 1 to be used across all models
Outputs
fluxes.inf_excess_runoff: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:fluxes, :inf_excess_runoff)for information on how to add the variable to the catalog.states.WBP: water balance tracker pool that starts with rain and ends up with 0 after allocating to soil percolation
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for runoffInfiltrationExcess_Jung.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
1.0 on 18.11.2019 [ttraut]: cleaned up the code
1.1 on 22.11.2019 [skoirala | @dr-ko]: moved from prec to dyna to handle land.states.fAPAR which is nPix, 1
Created by
- mjung
Calculated using:
Inputs: :states => :WBP, :states => :fAPAR, :properties => :k_sat, :fluxes => :rain, :states => :rain_int, :constants => :z_zero, :constants => :o_one
Outputs: :fluxes => :inf_excess_runoff, :states => :WBPrunoffInterflow
SindbadTEM.Processes.runoffInterflow Type
Interflow runoff.Approaches
runoffInterflow_none: Sets interflow runoff to 0.runoffInterflow_residual: Interflow as a fraction of the available water balance pool.
runoffInterflow approaches
SindbadTEM.Processes.runoffInterflow_none Type
Sets interflow runoff to 0.
Parameters
- None
Methods:
define:
Inputs
constants.z_zero: a helper type stable 0 to be used across all models
Outputs
fluxes.interflow_runoff: runoff loss from interflow in soil layers
precompute, compute, update methods are not defined
End of getModelDocString-generated docstring for runoffInterflow_none.jl. Check the Extended help for user-defined information.
Extended help
sourcerunoffOverland
SindbadTEM.Processes.runoffOverland Type
Total overland runoff that passes to surface storage.Approaches
runoffOverland_Inf: Overland flow due to infiltration excess runoff.runoffOverland_InfIntSat: Overland flow as the sum of infiltration excess, interflow, and saturation excess runoffs.runoffOverland_Sat: Overland flow due to saturation excess runoff.runoffOverland_none: Sets overland runoff to 0.
runoffOverland approaches
SindbadTEM.Processes.runoffOverland_Inf Type
Overland flow due to infiltration excess runoff.
Parameters
- None
Methods:
compute:
Inputs
fluxes.inf_excess_runoff: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:fluxes, :inf_excess_runoff)for information on how to add the variable to the catalog.
Outputs
fluxes.overland_runoff: overland runoff as a fraction of incoming water
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for runoffOverland_Inf.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 18.11.2019 [skoirala | @dr-ko]
Created by
- skoirala | @dr-ko
Calculated using:
Inputs: :fluxes => :inf_excess_runoff
Outputs: :fluxes => :overland_runoffrunoffSaturationExcess
SindbadTEM.Processes.runoffSaturationExcess Type
Saturation excess runoff.Approaches
runoffSaturationExcess_Bergstroem1992: Saturation excess runoff using the original Bergström method.runoffSaturationExcess_Bergstroem1992MixedVegFraction: Saturation excess runoff using the Bergström method with separate parameters for vegetated and non-vegetated fractions.runoffSaturationExcess_Bergstroem1992VegFraction: Saturation excess runoff using the Bergström method with parameters scaled by vegetation fraction.runoffSaturationExcess_Bergstroem1992VegFractionFroSoil: Saturation excess runoff using the Bergström method with parameters scaled by vegetation fraction and frozen soil fraction.runoffSaturationExcess_Bergstroem1992VegFractionPFT: Saturation excess runoff using the Bergström method with parameters scaled by vegetation fraction separated by different PFTs.runoffSaturationExcess_Zhang2008: Saturation excess runoff as a function of incoming water and PET following Zhang (2008).runoffSaturationExcess_none: Sets saturation excess runoff to 0.runoffSaturationExcess_satFraction: Saturation excess runoff as a fraction of the saturated fraction of a grid-cell.
runoffSaturationExcess approaches
SindbadTEM.Processes.runoffSaturationExcess_Bergstroem1992 Type
Saturation excess runoff using the original Bergström method.
Parameters
- Fields
β: 1.1 ∈ [0.1, 5.0] => berg exponential parameter (unitless@alltimescales)
Methods:
compute:
Inputs
states.WBP: water balance tracker pool that starts with rain and ends up with 0 after allocating to soil percolationproperties.w_sat: amount of water in the soil at saturation per layerpools.soilW: water storage in soilW pool(s)pools.ΔsoilW: change in water storage in soilW pool(s)
Outputs
fluxes.sat_excess_runoff: saturation excess runoffstates.WBP: water balance tracker pool that starts with rain and ends up with 0 after allocating to soil percolation
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for runoffSaturationExcess_Bergstroem1992.jl. Check the Extended help for user-defined information.
Extended help
References
- Bergström, S. (1992). The HBV model–its structure & applications. SMHI.
Versions
1.0 on 18.11.2019 [ttraut]: cleaned up the code
1.1 on 27.11.2019 [skoirala | @dr-ko]: changed to handle any number of soil layers
1.2 on 10.02.2020 [ttraut]: modyfying variable name to match the new SINDBAD version
Created by
- ttraut
Calculated using:
Inputs: :states => :WBP, :properties => :w_sat, :pools => :soilW, :pools => :ΔsoilW
Outputs: :fluxes => :sat_excess_runoff, :states => :WBPrunoffSurface
SindbadTEM.Processes.runoffSurface Type
Surface runoff generation.Approaches
runoffSurface_Orth2013: Surface runoff directly calculated using delay coefficient for the last 60 days based on the Orth et al. (2013) method.runoffSurface_Trautmann2018: Surface runoff directly calculated using delay coefficient for the last 60 days based on the Orth et al. (2013) method, but with a different delay coefficient as implemented in Trautmann et al. (2018).runoffSurface_all: All overland runoff generates surface runoff.runoffSurface_directIndirect: Surface runoff as the sum of the direct fraction of overland runoff and the indirect fraction of surface water storage.runoffSurface_directIndirectFroSoil: Surface runoff as the sum of the direct fraction of overland runoff and the indirect fraction of surface water storage, with the direct fraction additionally dependent on the frozen fraction of the grid.runoffSurface_indirect: All overland runoff is collected in surface water storage first, which in turn generates indirect surface runoff.runoffSurface_none: Sets surface runoff to 0.
runoffSurface approaches
SindbadTEM.Processes.runoffSurface_Orth2013 Type
Surface runoff directly calculated using delay coefficient for the last 60 days based on the Orth et al. (2013) method.
Parameters
- Fields
qt: 2.0 ∈ [0.5, 100.0] => delay parameter for land runoff (units:time@alltimescales)
Methods:
define:
Inputs
- None
Outputs
surface_runoff.z: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:surface_runoff, :z)for information on how to add the variable to the catalog.surface_runoff.Rdelay: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:surface_runoff, :Rdelay)for information on how to add the variable to the catalog.
compute:
Inputs
surface_runoff.z: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:surface_runoff, :z)for information on how to add the variable to the catalog.surface_runoff.Rdelay: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:surface_runoff, :Rdelay)for information on how to add the variable to the catalog.pools.surfaceW: water storage in surfaceW pool(s)fluxes.overland_runoff: overland runoff as a fraction of incoming water
Outputs
fluxes.surface_runoff: total surface runoffsurface_runoff.Rdelay: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:surface_runoff, :Rdelay)for information on how to add the variable to the catalog.
precompute, update methods are not defined
End of getModelDocString-generated docstring for runoffSurface_Orth2013.jl. Check the Extended help for user-defined information.
Extended help
References
Orth, R., Koster, R. D., & Seneviratne, S. I. (2013). Inferring soil moisture memory from streamflow observations using a simple water balance model. Journal of Hydrometeorology, 14[6], 1773-1790.
used in Trautmann et al. 2018
Versions
- 1.0 on 18.11.2019 [ttraut]
Created by
- ttraut
Notes
- how to handle 60days?!?!
Calculated using:
Inputs: :surface_runoff => :z, :surface_runoff => :Rdelay, :pools => :surfaceW, :fluxes => :overland_runoff
Outputs: :fluxes => :surface_runoff, :surface_runoff => :RdelaysaturatedFraction
SindbadTEM.Processes.saturatedFraction Type
Saturated fraction of a grid-cell.Approaches
saturatedFraction_none: Sets the saturated soil fraction to 0.
saturatedFraction approaches
SindbadTEM.Processes.saturatedFraction_none Type
Sets the saturated soil fraction to 0.
Parameters
- None
Methods:
define:
Inputs
constants.z_zero: a helper type stable 0 to be used across all models
Outputs
states.frac_saturation: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:states, :frac_saturation)for information on how to add the variable to the catalog.
precompute, compute, update methods are not defined
End of getModelDocString-generated docstring for saturatedFraction_none.jl. Check the Extended help for user-defined information.
Extended help
sourcesnowFraction
SindbadTEM.Processes.snowFraction Type
Snow cover fraction.Approaches
snowFraction_HTESSEL: Snow cover fraction following the HTESSEL approach.snowFraction_binary: Snow cover fraction using a binary approach.snowFraction_none: Sets the snow cover fraction to 0.
snowFraction approaches
SindbadTEM.Processes.snowFraction_HTESSEL Type
Snow cover fraction following the HTESSEL approach.
Parameters
- Fields
snow_cover_param: 15.0 ∈ [1.0, 100.0] => Snow Cover Parameter (units:mm@alltimescales)
Methods:
compute:
Inputs
pools.snowW: water storage in snowW pool(s)pools.ΔsnowW: change in water storage in snowW pool(s)constants.o_one: a helper type stable 1 to be used across all models
Outputs
states.frac_snow: fractional coverage of grid with snow
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for snowFraction_HTESSEL.jl. Check the Extended help for user-defined information.
Extended help
References
- H-TESSEL = land surface scheme of the European Centre for Medium- Range Weather Forecasts" operational weather forecast system Balsamo et al.; 2009
Versions
- 1.0 on 18.11.2019 [ttraut]: cleaned up the code
Created by
- mjung
Calculated using:
Inputs: :pools => :snowW, :pools => :ΔsnowW, :constants => :o_one
Outputs: :states => :frac_snowsnowMelt
SindbadTEM.Processes.snowMelt Type
Snowmelt.Approaches
snowMelt_Tair: Snowmelt as a function of air temperature.snowMelt_TairRn: Snowmelt based on temperature and net radiation when air temperature exceeds 0°C.
snowMelt approaches
SindbadTEM.Processes.snowMelt_Tair Type
Snowmelt as a function of air temperature.
Parameters
- Fields
rate: 1.0 ∈ [0.1, 10.0] => snow melt rate (units:mm/°C/day@daytimescale)
Methods:
compute:
Inputs
forcing.f_airT: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_airT)for information on how to add the variable to the catalog.states.WBP: water balance tracker pool that starts with rain and ends up with 0 after allocating to soil percolationstates.frac_snow: fractional coverage of grid with snowpools.snowW: water storage in snowW pool(s)pools.ΔsnowW: change in water storage in snowW pool(s)constants.z_zero: a helper type stable 0 to be used across all models
Outputs
fluxes.snow_melt: snow meltfluxes.Tterm: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:fluxes, :Tterm)for information on how to add the variable to the catalog.states.WBP: water balance tracker pool that starts with rain and ends up with 0 after allocating to soil percolationpools.ΔsnowW: change in water storage in snowW pool(s)
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for snowMelt_Tair.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
1.0 on 18.11.2019 [ttraut]: cleaned up the code
1.0 on 18.11.2019 [ttraut]: cleaned up the code
Created by
- mjung
Notes
may not be working well for longer time scales (like for weekly | longer time scales). Warnings needs to be set accordingly.
may not be working well for longer time scales (like for weekly | longer time scales). Warnings needs to be set accordingly.
Calculated using:
Inputs: :forcing => :f_airT, :states => :WBP, :states => :frac_snow, :pools => :snowW, :pools => :ΔsnowW, :constants => :z_zero
Outputs: :fluxes => :snow_melt, :fluxes => :Tterm, :states => :WBP, :pools => :ΔsnowWsoilProperties
SindbadTEM.Processes.soilProperties Type
Soil hydraulic properties.Approaches
soilProperties_Saxton1986: Soil hydraulic properties based on Saxton (1986).soilProperties_Saxton2006: Soil hydraulic properties based on Saxton (2006).
soilProperties approaches
SindbadTEM.Processes.soilProperties_Saxton1986 Type
Soil hydraulic properties based on Saxton (1986).
Parameters
- Fields
ψ_fc: 33.0 ∈ [30.0, 35.0] => matric potential at field capacity (units:kPa@alltimescales)ψ_wp: 1500.0 ∈ [1000.0, 1800.0] => matric potential at wilting point (units:kPa@alltimescales)ψ_sat: 0.0 ∈ [0.0, 5.0] => matric potential at saturation (units:kPa@alltimescales)a1: -4.396 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)a2: -0.0715 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)a3: -0.000488 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)a4: -4.285e-5 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)b1: -3.14 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)b2: -0.00222 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)b3: -3.484e-5 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)c1: 0.332 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)c2: -0.0007251 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)c3: 0.1276 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)d1: -0.108 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)d2: 0.341 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)e1: 2.778e-6 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)e2: 12.012 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)e3: -0.0755 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)e4: -3.895 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)e5: 0.03671 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)e6: -0.1103 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)e7: 0.00087546 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)f1: 2.302 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)n2: 2.0 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)n24: 24.0 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)n10: 10.0 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)n100: 100.0 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)n1000: 1000.0 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)n1500: 1000.0 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)n3600: 3600.0 ∈ [-Inf, Inf] => Saxton Parameters (unitless@alltimescales)
Methods:
define:
Inputs
pools.soilW: water storage in soilW pool(s)
Outputs
properties.sp_k_fc: calculated/input hydraulic conductivity of soil at field capacity per layerproperties.sp_k_sat: calculated/input hydraulic conductivity of soil at saturation per layerproperties.sp_k_wp: calculated/input hydraulic conductivity of soil at wilting point per layerproperties.sp_α: calculated/input alpha parameter of soil per layerproperties.sp_β: calculated/input beta parameter of soil per layerproperties.sp_θ_fc: calculated/input moisture content of soil at field capacity per layerproperties.sp_θ_sat: calculated/input moisture content of soil at saturation (porosity) per layerproperties.sp_θ_wp: calculated/input moisture content of soil at wilting point per layerproperties.sp_ψ_fc: calculated/input matric potential of soil at field capacity per layerproperties.sp_ψ_sat: calculated/input matric potential of soil at saturation per layerproperties.sp_ψ_wp: calculated/input matric potential of soil at wiliting point per layersoilProperties.n100: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:soilProperties, :n100)for information on how to add the variable to the catalog.soilProperties.n1000: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:soilProperties, :n1000)for information on how to add the variable to the catalog.soilProperties.n2: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:soilProperties, :n2)for information on how to add the variable to the catalog.soilProperties.n24: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:soilProperties, :n24)for information on how to add the variable to the catalog.soilProperties.n3600: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:soilProperties, :n3600)for information on how to add the variable to the catalog.soilProperties.e1: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:soilProperties, :e1)for information on how to add the variable to the catalog.soilProperties.e2: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:soilProperties, :e2)for information on how to add the variable to the catalog.soilProperties.e3: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:soilProperties, :e3)for information on how to add the variable to the catalog.soilProperties.e4: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:soilProperties, :e4)for information on how to add the variable to the catalog.soilProperties.e5: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:soilProperties, :e5)for information on how to add the variable to the catalog.soilProperties.e6: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:soilProperties, :e6)for information on how to add the variable to the catalog.soilProperties.e7: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:soilProperties, :e7)for information on how to add the variable to the catalog.models.unsat_k_model: name of the model used to calculate unsaturated hydraulic conductivity
precompute:
Inputs
properties.sp_α: calculated/input alpha parameter of soil per layerproperties.sp_β: calculated/input beta parameter of soil per layerproperties.sp_k_fc: calculated/input hydraulic conductivity of soil at field capacity per layerproperties.sp_θ_fc: calculated/input moisture content of soil at field capacity per layerproperties.sp_ψ_fc: calculated/input matric potential of soil at field capacity per layerproperties.sp_k_wp: calculated/input hydraulic conductivity of soil at wilting point per layerproperties.sp_θ_wp: calculated/input moisture content of soil at wilting point per layerproperties.sp_ψ_wp: calculated/input matric potential of soil at wiliting point per layerproperties.sp_k_sat: calculated/input hydraulic conductivity of soil at saturation per layerproperties.sp_θ_sat: calculated/input moisture content of soil at saturation (porosity) per layerproperties.sp_ψ_sat: calculated/input matric potential of soil at saturation per layerpools.soilW: water storage in soilW pool(s)
Outputs
properties.sp_k_fc: calculated/input hydraulic conductivity of soil at field capacity per layerproperties.sp_k_sat: calculated/input hydraulic conductivity of soil at saturation per layerproperties.sp_k_wp: calculated/input hydraulic conductivity of soil at wilting point per layerproperties.sp_α: calculated/input alpha parameter of soil per layerproperties.sp_β: calculated/input beta parameter of soil per layerproperties.sp_θ_fc: calculated/input moisture content of soil at field capacity per layerproperties.sp_θ_sat: calculated/input moisture content of soil at saturation (porosity) per layerproperties.sp_θ_wp: calculated/input moisture content of soil at wilting point per layerproperties.sp_ψ_fc: calculated/input matric potential of soil at field capacity per layerproperties.sp_ψ_sat: calculated/input matric potential of soil at saturation per layerproperties.sp_ψ_wp: calculated/input matric potential of soil at wiliting point per layer
compute, update methods are not defined
End of getModelDocString-generated docstring for soilProperties_Saxton1986.jl. Check the Extended help for user-defined information.
Extended help
References
- Saxton, K. E., Rawls, W., Romberger, J. S., & Papendick, R. I. (1986). Estimating generalized soil‐water characteristics from texture. Soil science society of America Journal, 50(4), 1031-1036.
Versions
1.0 on 21.11.2019
1.1 on 03.12.2019 [skoirala | @dr-ko]: handling potentail vertical distribution of soil texture
Created by
- skoirala | @dr-ko
soilTexture
SindbadTEM.Processes.soilTexture Type
Soil texture (sand, silt, clay, and organic matter fraction).Approaches
soilTexture_constant: Sets soil texture properties as constant values over all soil layers.soilTexture_forcing: Gets Soil texture properties from forcing data.
soilTexture approaches
SindbadTEM.Processes.soilTexture_constant Type
Sets soil texture properties as constant values over all soil layers.
Parameters
- Fields
clay: 0.2 ∈ [0.0, 1.0] => Clay content (unitless@alltimescales)silt: 0.3 ∈ [0.0, 1.0] => Silt content (unitless@alltimescales)sand: 0.5 ∈ [0.0, 1.0] => Sand content (unitless@alltimescales)orgm: 0.0 ∈ [0.0, 1.0] => Organic matter content (unitless@alltimescales)
Methods:
define:
Inputs
pools.soilW: water storage in soilW pool(s)
Outputs
properties.st_clay: fraction of clay content in the soilproperties.st_sand: fraction of sand content in the soil per layerproperties.st_silt: fraction of silt content in the soil per layerproperties.st_orgm: fraction of organic matter content in the soil per layer
precompute:
Inputs
properties.st_clay: fraction of clay content in the soilproperties.st_sand: fraction of sand content in the soil per layerproperties.st_silt: fraction of silt content in the soil per layerproperties.st_orgm: fraction of organic matter content in the soil per layer
Outputs
properties.st_clay: fraction of clay content in the soilproperties.st_sand: fraction of sand content in the soil per layerproperties.st_silt: fraction of silt content in the soil per layerproperties.st_orgm: fraction of organic matter content in the soil per layer
compute, update methods are not defined
End of getModelDocString-generated docstring for soilTexture_constant.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 21.11.2019
Created by
- skoirala | @dr-ko
Notes
- texture does not change with space & depth
soilWBase
SindbadTEM.Processes.soilWBase Type
Base soil hydraulic properties over soil layers.Approaches
soilWBase_smax1Layer: Maximum soil water content of one soil layer as a fraction of total soil depth, based on the Trautmann et al. (2018) model.soilWBase_smax2Layer: Maximum soil water content of two soil layers as fractions of total soil depth, based on the older version of the Pre-Tokyo Model.soilWBase_smax2fRD4: Maximum soil water content of two soil layers: the first layer as a fraction of soil depth, the second as a linear combination of scaled rooting depth data from forcing.soilWBase_soilDepth: Soil hydraulic properties for different soil layers assuming a uniform vertical distribution, with the soil column truncated at the soil depth from forcing.soilWBase_uniform: Soil hydraulic properties distributed for different soil layers assuming a uniform vertical distribution.
soilWBase approaches
SindbadTEM.Processes.soilWBase_smax1Layer Type
Maximum soil water content of one soil layer as a fraction of total soil depth, based on the Trautmann et al. (2018) model.
Parameters
- Fields
smax: 1.0 ∈ [0.001, 10.0] => maximum soil water holding capacity of 1st soil layer, as % of defined soil depth (unitless@alltimescales)
Methods:
define:
Inputs
pools.soilW: water storage in soilW pool(s)
Outputs
properties.cumulative_soil_depths: the depth to the bottom of each soil layerproperties.idx_soilW_end: index of the deepest soil layer with non-zero thickness, which exchanges water with groundwaterproperties.soil_depth: total soil depth of the location as the sum of soil layer thicknessesproperties.soil_layer_thickness: thickness of each soil layerproperties.w_sat: amount of water in the soil at saturation per layerproperties.w_fc: amount of water in the soil at field capacity per layerproperties.w_wp: amount of water in the soil at wiliting point per layer
compute:
Inputs
properties.soil_layer_thickness: thickness of each soil layerproperties.w_sat: amount of water in the soil at saturation per layerproperties.w_fc: amount of water in the soil at field capacity per layerproperties.w_wp: amount of water in the soil at wiliting point per layer
Outputs
properties.w_awc: maximum amount of water available for vegetation/transpiration per soil layer (w_sat-_wp)properties.w_fc: amount of water in the soil at field capacity per layerproperties.w_sat: amount of water in the soil at saturation per layerproperties.w_wp: amount of water in the soil at wiliting point per layer
precompute, update methods are not defined
End of getModelDocString-generated docstring for soilWBase_smax1Layer.jl. Check the Extended help for user-defined information.
Extended help
References
- Trautmann et al. 2018
Versions
- 1.0 on 09.01.2020 [ttraut]: clean up & consistency
Created by
- ttraut
Calculated using:
Inputs: :properties => :soil_layer_thickness, :properties => :w_sat, :properties => :w_fc, :properties => :w_wp
Outputs: :properties => :w_awc, :properties => :w_fc, :properties => :w_sat, :properties => :w_wpsublimation
SindbadTEM.Processes.sublimation Type
Snow sublimation.Approaches
sublimation_GLEAM: Sublimation using the Priestley-Taylor term following the GLEAM approach.sublimation_none: Sets snow sublimation to 0.
sublimation approaches
SindbadTEM.Processes.sublimation_GLEAM Type
Sublimation using the Priestley-Taylor term following the GLEAM approach.
Parameters
- Fields
α: 0.95 ∈ [0.0, 3.0] => Priestley Taylor Coefficient for Sublimation (units:none@alltimescales)deg_to_k: 273.15 ∈ [-Inf, Inf] => degree to Kelvin conversion (units:none@alltimescales)Δ_1: 5723.265 ∈ [-Inf, Inf] => first parameter of Δ from Murphy & Koop [2005] (units:none@alltimescales)Δ_2: 3.53068 ∈ [-Inf, Inf] => second parameter of Δ from Murphy & Koop [2005] (units:none@alltimescales)Δ_3: 0.00728332 ∈ [-Inf, Inf] => third parameter of Δ from Murphy & Koop [2005] (units:none@alltimescales)Δ_4: 9.550426 ∈ [-Inf, Inf] => fourth parameter of Δ from Murphy & Koop [2005] (units:none@alltimescales)pa_to_kpa: 0.001 ∈ [-Inf, Inf] => pascal to kilopascal conversion (units:none@alltimescales)λ_1: 46782.5 ∈ [-Inf, Inf] => first parameter of λ from Murphy & Koop [2005] (units:none@alltimescales)λ_2: 35.8925 ∈ [-Inf, Inf] => second parameter of λ from Murphy & Koop [2005] (units:none@alltimescales)λ_3: 0.07414 ∈ [-Inf, Inf] => third parameter of λ from Murphy & Koop [2005] (units:none@alltimescales)λ_4: 541.5 ∈ [-Inf, Inf] => fourth parameter of λ from Murphy & Koop [2005] (units:none@alltimescales)λ_5: 123.75 ∈ [-Inf, Inf] => fifth parameter of λ from Murphy & Koop [2005] (units:none@alltimescales)j_to_mj: 1.0e-6 ∈ [-Inf, Inf] => joule to megajoule conversion (units:none@alltimescales)g_to_kg: 0.001 ∈ [-Inf, Inf] => joule to megajoule conversion (units:none@alltimescales)mol_mass_water: 18.01528 ∈ [-Inf, Inf] => molecular mass of water (units:gram@alltimescales)sp_heat_air: 0.001 ∈ [-Inf, Inf] => specific heat of air (units:MJ/kg/K@alltimescales)γ_1: 0.001 ∈ [-Inf, Inf] => first parameter of γ from Brunt [1952] (units:none@alltimescales)γ_2: 0.622 ∈ [-Inf, Inf] => second parameter of γ from Brunt [1952] (units:none@alltimescales)
Methods:
compute:
Inputs
forcing.f_psurf_day: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_psurf_day)for information on how to add the variable to the catalog.forcing.f_rn: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_rn)for information on how to add the variable to the catalog.forcing.f_airT_day: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:forcing, :f_airT_day)for information on how to add the variable to the catalog.states.frac_snow: fractional coverage of grid with snowpools.snowW: water storage in snowW pool(s)pools.ΔsnowW: change in water storage in snowW pool(s)constants.z_zero: a helper type stable 0 to be used across all modelsconstants.o_one: a helper type stable 1 to be used across all modelsconstants.t_two: a type stable 2
Outputs
fluxes.sublimation: sublimation of the snowsublimation.PTtermSub: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:sublimation, :PTtermSub)for information on how to add the variable to the catalog.pools.ΔsnowW: change in water storage in snowW pool(s)
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for sublimation_GLEAM.jl. Check the Extended help for user-defined information.
Extended help
References
Miralles; D. G.; De Jeu; R. A. M.; Gash; J. H.; Holmes; T. R. H. & Dolman, A. J. (2011). An application of GLEAM to estimating global evaporation. Hydrology & Earth System Sciences Discussions, 8[1].
Murphy, D. M., & Koop, T. (2005). Review of the vapour pressures of ice and supercooled water for atmospheric applications. Quarterly Journal of the Royal Meteorological Society: A journal of the atmospheric sciences, applied meteorology and physical oceanography, 131(608), 1539-1565. https://patarnott.com/atms360/pdf_atms360/class2017/VaporPressureIce_SupercooledH20_Murphy.pdf
Versions
- 1.0 on 18.11.2019 [ttraut]: cleaned up the code
Created by
- mjung
Calculated using:
Inputs: :forcing => :f_psurf_day, :forcing => :f_rn, :forcing => :f_airT_day, :states => :frac_snow, :pools => :snowW, :pools => :ΔsnowW, :constants => :z_zero, :constants => :o_one, :constants => :t_two
Outputs: :fluxes => :sublimation, :sublimation => :PTtermSub, :pools => :ΔsnowWtranspiration
SindbadTEM.Processes.transpiration Type
Transpiration.Approaches
transpiration_coupled: Transpiration as a function of GPP and WUE.transpiration_demandSupply: Transpiration as the minimum of supply and demand.transpiration_none: Sets transpiration to 0.
transpiration approaches
SindbadTEM.Processes.transpiration_coupled Type
Transpiration as a function of GPP and WUE.
Parameters
- None
Methods:
compute:
Inputs
fluxes.gpp: gross primary prorDcutivitydiagnostics.WUE: water use efficiency of the ecosystem
Outputs
fluxes.transpiration: transpiration
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for transpiration_coupled.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 22.11.2019 [skoirala | @dr-ko]
Created by
mjung
skoirala | @dr-ko
Notes
sourceCalculated using:
Inputs: :fluxes => :gpp, :diagnostics => :WUE
Outputs: :fluxes => :transpirationtranspirationDemand
SindbadTEM.Processes.transpirationDemand Type
Demand-limited transpiration.Approaches
transpirationDemand_CASA: Demand-limited transpiration as a function of volumetric soil content and soil properties, as in the CASA model.transpirationDemand_PET: Demand-limited transpiration as a function of PET and a vegetation parameter.transpirationDemand_PETfAPAR: Demand-limited transpiration as a function of PET and fAPAR.transpirationDemand_PETvegFraction: Demand-limited transpiration as a function of PET, a vegetation parameter, and vegetation fraction.
transpirationDemand approaches
SindbadTEM.Processes.transpirationDemand_CASA Type
Demand-limited transpiration as a function of volumetric soil content and soil properties, as in the CASA model.
Parameters
- None
Methods:
compute:
Inputs
states.PAW: amount of water available for transpiration per soil layerproperties.w_awc: maximum amount of water available for vegetation/transpiration per soil layer (w_sat-_wp)properties.soil_α: alpha parameter of soil per layerproperties.soil_β: beta parameter of soil per layerfluxes.percolation: amount of moisture percolating to the top soil layerfluxes.PET: potential evapotranspiration
Outputs
diagnostics.transpiration_demand: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:diagnostics, :transpiration_demand)for information on how to add the variable to the catalog.
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for transpirationDemand_CASA.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 22.11.2019 [skoirala | @dr-ko]: split the original transpiration_supply of CASA into demand supply: actual [minimum] is now just demandSupply approach of transpiration
Created by
ncarvalhais
skoirala | @dr-ko
Notes
- The supply limit has non-linear relationship with moisture state over the root zone
Calculated using:
Inputs: :states => :PAW, :properties => :w_awc, :properties => :soil_α, :properties => :soil_β, :fluxes => :percolation, :fluxes => :PET
Outputs: :diagnostics => :transpiration_demandtranspirationSupply
SindbadTEM.Processes.transpirationSupply Type
Supply-limited transpiration.Approaches
transpirationSupply_CASA: Supply-limited transpiration as a function of volumetric soil content and soil properties, as in the CASA model.transpirationSupply_Federer1982: Supply-limited transpiration as a function of a maximum rate parameter and available water, following Federer (1982).transpirationSupply_wAWC: Supply-limited transpiration as the minimum of the fraction of total available water capacity and available moisture.transpirationSupply_wAWCvegFraction: Supply-limited transpiration as the minimum of the fraction of total available water capacity and available moisture, scaled by vegetated fractions.
transpirationSupply approaches
SindbadTEM.Processes.transpirationSupply_CASA Type
Supply-limited transpiration as a function of volumetric soil content and soil properties, as in the CASA model.
Parameters
- None
Methods:
compute:
Inputs
states.PAW: amount of water available for transpiration per soil layer
Outputs
diagnostics.transpiration_supply: total amount of water available in soil for transpiration
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for transpirationSupply_CASA.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 22.11.2019 [skoirala | @dr-ko]: split the original transpiration_supply of CASA into demand supply: actual [minimum] is now just demSup approach of transpiration
Created by
ncarvalhais
skoirala | @dr-ko
Notes
- The supply limit has non-linear relationship with moisture state over the root zone
Calculated using:
Inputs: :states => :PAW
Outputs: :diagnostics => :transpiration_supplytreeFraction
SindbadTEM.Processes.treeFraction Type
Tree cover fraction.Approaches
treeFraction_constant: Sets tree cover fraction as a constant value.treeFraction_forcing: Gets tree cover fraction from forcing data.
treeFraction approaches
SindbadTEM.Processes.treeFraction_constant Type
Sets tree cover fraction as a constant value.
Parameters
- Fields
constant_frac_tree: 1.0 ∈ [0.3, 1.0] => Tree fraction (unitless@alltimescales)
Methods:
precompute:
Inputs
- None
Outputs
states.frac_tree: fractional coverage of grid with trees
define, compute, update methods are not defined
End of getModelDocString-generated docstring for treeFraction_constant.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 11.11.2019 [skoirala | @dr-ko]: cleaned up the code
Created by
- skoirala | @dr-ko
vegAvailableWater
SindbadTEM.Processes.vegAvailableWater Type
Plant available water (PAW), i.e., the amount of water available for transpiration.Approaches
vegAvailableWater_rootWaterEfficiency: PAW as a function of soil moisture and root water extraction efficiency.vegAvailableWater_sigmoid: PAW using a sigmoid function of soil moisture.
vegAvailableWater approaches
SindbadTEM.Processes.vegAvailableWater_rootWaterEfficiency Type
PAW as a function of soil moisture and root water extraction efficiency.
Parameters
- None
Methods:
define:
Inputs
pools.soilW: water storage in soilW pool(s)
Outputs
states.PAW: amount of water available for transpiration per soil layer
compute:
Inputs
properties.w_wp: amount of water in the soil at wiliting point per layerdiagnostics.root_water_efficiency: a efficiency like number that indicates the ease/fraction of soil water that can extracted by the root per layerpools.soilW: water storage in soilW pool(s)pools.ΔsoilW: change in water storage in soilW pool(s)states.PAW: amount of water available for transpiration per soil layer
Outputs
states.PAW: amount of water available for transpiration per soil layer
precompute, update methods are not defined
End of getModelDocString-generated docstring for vegAvailableWater_rootWaterEfficiency.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 21.11.2019
Created by
- skoirala | @dr-ko
Calculated using:
Inputs: :properties => :w_wp, :diagnostics => :root_water_efficiency, :pools => :soilW, :pools => :ΔsoilW, :states => :PAW
Outputs: :states => :PAWvegClass
SindbadTEM.Processes.vegClass Type
Vegetation-type classification of the pixel: resolves land.states.veg_type (set by vegDynamics) to a canonical name, then optionally crosswalks that into a coarser classification.Approaches
vegClass_MODIS_BGC: Gets the vegetation type from BIOME-BGC-classified forcing data.vegClass_MODIS_IGBP: Gets the vegetation type from IGBP-classified forcing data.vegClass_MODIS_IGBP_PlantForm: Gets the vegetation type from IGBP-classified forcing data, grouped into tree/shrub/herb plant forms.vegClass_MODIS_LAI: Gets the vegetation type from LAI/fPAR-biome-classified forcing data.vegClass_MODIS_PFT: Gets the vegetation type from Plant-Functional-Type-classified (MCD12Q1 Type 5) forcing data.vegClass_MODIS_UMD: Gets the vegetation type from UMD-classified forcing data.vegClass_SINDBAD: Resolves a vegetation-type code already given in SINDBAD's own canonical vocabulary.
Extended help
Resolves the raw vegetation-classification code that vegDynamics published to land.states.veg_type and, optionally, groups the result into a coarser classification, writing land.states.veg_type_name (plus veg_type_name_source for provenance) that every downstream science approach reads. vegClass never reads forcing or a parameter itself; obtaining the raw code is vegDynamics's job.
Each concrete approach declares two traits: vegTypeCatalog, the source catalog its raw code is interpreted against, and vegTypeClassification, the target classification to crosswalk into (defaulting to Classification_SINDBAD, i.e. no grouping, when unset). A _PlantForm-suffixed approach (e.g. vegClass_MODIS_IGBP_PlantForm) is the same resolution with vegTypeClassification set to Classification_PlantForm instead.
Known limitation: because land.states.veg_type_name is a single field, one experiment cannot combine a consumer that expects the fine canonical vocabulary (e.g. vegQualityTraits_vegType) with one that expects a grouped classification (e.g. cCycleBase_GSI_PlantForm/_MGMT) in the same run.
Versions
1.0 on 10.09.2026 [skoirala]: merged from the former
PFTandplantFormprocesses into one, with a formal one-to-many crosswalk mechanism (Classification_PlantForm) replacingplantForm_PFT's inline grouping table2.0 on 11.09.2026 [skoirala]: split raw-code extraction out into the new
vegTypeDynamicsprocess;vegTypesapproaches now depend only onland.states.veg_type, never onforcing, and are named after their source catalog alone (e.g.vegTypes_MODIS_BGC, wasvegTypes_forcing_MODIS_BGC)3.0 on 12.09.2026 [skoirala]: renamed from
vegTypestovegClass(paired processvegTypeDynamics->vegClassDynamics)4.0 on 12.09.2026 [skoirala]: paired process renamed again,
vegClassDynamics->vegDynamics(too easily confused withvegClass)
Created by
- skoirala
vegClass approaches
SindbadTEM.Processes.vegClass_MODIS_BGC Type
Gets the vegetation type from BIOME-BGC-classified forcing data.
Parameters
- None
Methods:
define:
Inputs
- None
Outputs
vegClass.veg_type_class_map: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:vegClass, :veg_type_class_map)for information on how to add the variable to the catalog.
precompute:
Inputs
states.veg_type: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:states, :veg_type)for information on how to add the variable to the catalog.
Outputs
states.veg_type_name: vegetation type class of the pixel, the single source of vegetation type for downstream processesstates.veg_type_name_source: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:states, :veg_type_name_source)for information on how to add the variable to the catalog.
compute, update methods are not defined
End of getModelDocString-generated docstring for vegClass_MODIS_BGC.jl. Check the Extended help for user-defined information.
Extended help
Same as vegClass_MODIS_IGBP, interpreting land.states.veg_type against the BIOME-Biogeochemical Cycles legend (Classification_MODIS_BGC) instead of IGBP. Pair with vegDynamics_forcing, which sets veg_type from f_pft.
References
Versions
1.0 on 10.09.2026 [skoirala]
2.0 on 10.09.2026 [skoirala]: merged into the unified
vegTypesprocess (wasPFT_forcing_MODIS_BGC)3.0 on 11.09.2026 [skoirala]: renamed from
vegTypes_forcing_MODIS_BGCand split out of its raw-code extraction (nowvegTypeDynamics_forcing); readsland.states.veg_typeinstead of unpackingforcingdirectly4.0 on 12.09.2026 [skoirala]:
precomputehoisted to the shared, genericvegTypes.jl(every approach did exactly the same thing, modulo the two traits declared above) – this file now only declares those traits5.0 on 12.09.2026 [skoirala]: renamed from
vegTypes_MODIS_BGC(processvegTypes->vegClass, paired processvegTypeDynamics->vegClassDynamics)6.0 on 12.09.2026 [skoirala]: paired process renamed again,
vegClassDynamics->vegDynamics(too easily confused withvegClass)
Created by
- skoirala
vegDynamics
SindbadTEM.Processes.vegDynamics Type
Obtains the raw vegetation-type class code for the pixel -- from forcing or a constant parameter -- and publishes it as land.states.veg_type for vegClass to resolve into a catalog-based classification.Approaches
vegDynamics_constant: Sets a uniform vegetation-type class code, given as a canonical vegetation-type class number.vegDynamics_forcing: Gets the raw vegetation-type class code from forcing data, independent of which legend it was classified against.
Extended help
Split from the former, combined vegClass process so that obtaining the raw class code (this process, catalog-agnostic) is independent of interpreting it against a source legend and crosswalking it into a target classification (vegClass, code-agnostic). Every approach here does exactly one thing: read a raw numeric code, from f_pft in forcing or from a constant parameter, and pack it into land.states.veg_type, unchanged and uninterpreted. No approach in this process references a VegClassification.
vegDynamics must run before vegClass in the model's process order (see standardSindbadTEM.jl), since vegClass reads land.states.veg_type from land.states rather than unpacking forcing itself.
Versions
1.0 on 11.09.2026 [skoirala]: split out of the former combined
vegTypesprocess, which coupled raw-code extraction to catalog resolution2.0 on 12.09.2026 [skoirala]: renamed from
vegTypeDynamicstovegClassDynamics(paired processvegTypes->vegClass)3.0 on 12.09.2026 [skoirala]: renamed again,
vegClassDynamics->vegDynamics(too easily confused withvegClass)
Created by
- skoirala
vegDynamics approaches
SindbadTEM.Processes.vegDynamics_constant Type
Sets a uniform vegetation-type class code, given as a canonical vegetation-type class number.
Parameters
- Fields
veg_type: 1.0 ∈ [1.0, 17.0] => Vegetation type class, per SINDBAD's canonical vegetation-type vocabulary (Classification_SINDBAD) (units:class@alltimescales)
Methods:
precompute:
Inputs
- None
Outputs
states.veg_type: No description available insrc/sindbadVariableCatalog.jlcatalog. RunwhatIs(:states, :veg_type)for information on how to add the variable to the catalog.
define, compute, update methods are not defined
End of getModelDocString-generated docstring for vegDynamics_constant.jl. Check the Extended help for user-defined information.
Extended help
Unlike vegDynamics_forcing, this approach has no real data source to read a raw code from, so veg_type is a calibratable parameter, rounded to the nearest integer class number and published as-is. Pair with vegClass_SINDBAD, which interprets a vegDynamics_constant-produced code directly against the canonical Classification_SINDBAD vocabulary.
References
Versions
1.0 on 18.11.2019 [ttraut]: cleaned up the code
2.0 on 10.09.2026 [skoirala]: resolved through the PFT catalog machinery instead of publishing a raw numeric code with no declared classification
3.0 on 10.09.2026 [skoirala]: collapsed the five catalog-specific variants back into one approach, written directly against the canonical PFTCatalog_SINDBAD_PFT vocabulary, since this approach has no real data source to interpret a raw code against
4.0 on 10.09.2026 [skoirala]: merged into the unified
vegTypesprocess (wasPFT_constant), resolving through the two-stepvegTypeCatalog/vegTypeClassificationmechanism5.0 on 11.09.2026 [skoirala]: split from
vegTypes_constantinto this, the raw-code half of the former approach – catalog resolution moved tovegTypes_SINDBAD6.0 on 12.09.2026 [skoirala]: renamed from
vegTypeDynamics_constant(processvegTypeDynamics->vegClassDynamics, paired processvegTypes->vegClass)7.0 on 12.09.2026 [skoirala]: process renamed again,
vegClassDynamics->vegDynamics(too easily confused withvegClass)
Created by
- unknown [xxx]
vegFraction
SindbadTEM.Processes.vegFraction Type
Vegetation cover fraction.Approaches
vegFraction_constant: Sets vegetation fraction as a constant value.vegFraction_forcing: Gets vegetation fraction from forcing data.vegFraction_scaledEVI: Vegetation fraction as a linear function of EVI.vegFraction_scaledLAI: Vegetation fraction as a linear function of LAI.vegFraction_scaledNDVI: Vegetation fraction as a linear function of NDVI.vegFraction_scaledNIRv: Vegetation fraction as a linear function of NIRv.vegFraction_scaledfAPAR: Vegetation fraction as a linear function of fAPAR.
vegFraction approaches
SindbadTEM.Processes.vegFraction_constant Type
Sets vegetation fraction as a constant value.
Parameters
- Fields
constant_frac_vegetation: 0.5 ∈ [0.3, 0.9] => Vegetation fraction (unitless@alltimescales)
Methods:
precompute:
Inputs
- None
Outputs
states.frac_vegetation: fractional coverage of grid with vegetation
define, compute, update methods are not defined
End of getModelDocString-generated docstring for vegFraction_constant.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 11.11.2019 [skoirala | @dr-ko]: cleaned up the code
Created by
- skoirala | @dr-ko
vegQualityTraits
SindbadTEM.Processes.vegQualityTraits Type
Determine litter chemistry, the metabolic litter fraction, and the lignin effects on carbon-flow partitioning and decomposition rates.Approaches
vegQualityTraits_constant: Sets the metabolic litter fraction and structural lignin fraction, and the litter chemistry they derive from, to uniform constant values.vegQualityTraits_none: Sets the metabolic litter fraction and the lignin content to 0, and leaves decomposition rates unchanged (no lignin effect).vegQualityTraits_vegType: Metabolic litter fraction and the structural lignin fraction, with vegetation-type-dependent litter chemistry, and the lignin effect on decomposition rate, as modeled in CASA.
Extended help
vegQualityTraits publishes the litter-quality properties that the carbon-flow partitioning and decomposition-rate processes need:
lit_frac_metabolic: fraction of leaf and fine-root litterfall routed to the metabolic litter pools. The complement,1 - lit_frac_metabolic, goes to the structural pools.lit_CN_ratio: carbon-to-nitrogen ratio of litter.lit_frac_lignin: fraction of litter that is lignin.lit_nonsol_to_sol_lignin: scalar converting nonsoluble to soluble lignin.lit_frac_lignin_struct: lignin as a fraction of structural litter carbon, which controls how structural litter decomposition is split between the slow soil pool and the microbial pools.lit_k_f_lignin: multiplicative effect of lignin content on the decomposition rate of the structural litter pools. One means no effect.lit_frac_C_lignin: carbon fraction of lignin.lit_frac_lignin_wood: lignin fraction of woody litter, which controls the partitioning of woody and coarse-root litter decomposition.
This was previously two separately-selected processes, metabolicFraction and lignin. They were never really independent: lignin as a fraction of structural litter depends on how much litter is structural in the first place, so lignin's CASA approach read metabolicFraction's output back from land.properties, and a mismatched pair of selections (lignin: CASA with metabolicFraction: none, say) silently produced wrong numbers rather than an error. One approach now computes both together, so a valid combination is the only combination there is.
In the legacy SINDBAD CASA implementation these quantities were MTF, LITC2N, LIGNIN, NONSOL2SOLLIGNIN, SCLIGNIN, LIGEFF, C2LIGNIN and frac_lignin_wood, all computed inside cTauVegProperties_CASA (and cQualityPartition_CASA, cFlowVegProperties_CASA for two of them).
vegQualityTraits approaches
SindbadTEM.Processes.vegQualityTraits_constant Type
Sets the metabolic litter fraction and structural lignin fraction, and the litter chemistry they derive from, to uniform constant values.
Parameters
- Fields
lit_frac_metabolic: 0.85 ∈ [0.0, 1.0] => fraction of leaf and fine-root litterfall routed to the metabolic litter pools (units:fraction@alltimescales)lit_CN_ratio: 50.0 ∈ [10.0, 150.0] => carbon-to-nitrogen ratio of litter (units:gC/gN@alltimescales)lit_frac_lignin: 0.2 ∈ [0.0, 1.0] => fraction of litter that is lignin (units:fraction@alltimescales)lit_nonsol_to_sol_lignin: 2.22 ∈ [1.0, 5.0] => scalar converting nonsoluble to soluble lignin (units:fraction@alltimescales)lit_frac_lignin_struct: 0.3 ∈ [0.0, 1.0] => lignin as a fraction of structural litter carbon (units:fraction@alltimescales)lit_frac_C_lignin: 0.65 ∈ [0.0, 1.0] => carbon fraction of lignin (units:fraction@alltimescales)lit_frac_lignin_wood: 0.4 ∈ [0.0, 1.0] => lignin fraction of woody litter (units:fraction@alltimescales)lit_k_f_lignin_A: 3.0 ∈ [0.0, 10.0] => sensitivity of the structural litter decomposition rate to the structural lignin fraction (unitless@alltimescales)
Methods:
precompute:
Inputs
- None
Outputs
properties.lit_CN_ratio: carbon-to-nitrogen ratio of litterproperties.lit_frac_lignin: fraction of litter that is ligninproperties.lit_frac_metabolic: fraction of leaf and fine-root litterfall routed to the metabolic litter pools; the complement goes to the structural poolsproperties.lit_nonsol_to_sol_lignin: scalar converting nonsoluble to soluble ligninproperties.lit_frac_C_lignin: carbon fraction of ligninproperties.lit_frac_lignin_struct: lignin as a fraction of structural litter carbon, which controls how structural litter decomposition is split between the slow soil pool and the microbial poolsproperties.lit_frac_lignin_wood: lignin fraction of woody litter, which controls the partitioning of woody and coarse-root litter decompositionproperties.lit_k_f_lignin: multiplicative effect of lignin content on the decomposition rate of the structural litter pools; one means no effect
define, compute, update methods are not defined
End of getModelDocString-generated docstring for vegQualityTraits_constant.jl. Check the Extended help for user-defined information.
Extended help
Use this approach to hold lit_frac_metabolic and lit_frac_lignin_struct at prescribed values instead of deriving them from PFT-dependent litter chemistry. The default lit_frac_metabolic of 0.85 is the CASA intercept lit_frac_metabolic_A, which is what vegQualityTraits_vegType returns when litter contains no lignin. The decomposition-rate effect is still derived from the prescribed lignin fraction, as
lit_k_f_lignin = exp(-lit_k_f_lignin_A * lit_frac_lignin_struct)
so the rate factor stays consistent with it.
This used to be two approaches, metabolicFraction_constant and lignin_constant, merged into one so a single selection sets every litter-quality trait.
References
- Potter, C. S., Randerson, J. T., Field, C. B., Matson, P. A., Vitousek, P. M., Mooney, H. A., & Klooster, S. A. (1993). Terrestrial ecosystem production: a process model based on global satellite and surface data. Global Biogeochemical Cycles, 7(4), 811-841.
Versions
1.0 on 04.09.2026 [skoirala]: as separate metabolicFraction_constant and lignin_constant approaches
2.0 on 09.09.2026 [skoirala]: merged metabolicFraction_constant and lignin_constant into vegQualityTraits_constant
Created by
- skoirala
wCycle
SindbadTEM.Processes.wCycle Type
Apply the delta storage changes to storage variablesApproaches
wCycle_combined: computes the algebraic sum of storage and delta storagewCycle_components: update the water cycle pools per componentwCycle_simple: update soilW assuming a simple model structure with only soilW pools
wCycle approaches
SindbadTEM.Processes.wCycle_combined Type
computes the algebraic sum of storage and delta storage
Parameters
- None
Methods:
define:
Inputs
pools.ΔTWS: change in water storage in TWS pool(s)
Outputs
pools.zeroΔTWS: helper variable to reset ΔTWS to zero in every time step
compute:
Inputs
pools.TWS: terrestrial water storage including all water poolspools.ΔTWS: change in water storage in TWS pool(s)pools.zeroΔTWS: helper variable to reset ΔTWS to zero in every time stepconstants.z_zero: a helper type stable 0 to be used across all modelsconstants.o_one: a helper type stable 1 to be used across all models
Outputs
pools.ΔTWS: change in water storage in TWS pool(s)pools.TWS: terrestrial water storage including all water poolsstates.total_water: sum of water storage across all componentsstates.total_water_prev: sum of water storage across all components in previous time step
precompute, update methods are not defined
End of getModelDocString-generated docstring for wCycle_combined.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 18.11.2019 [skoirala | @dr-ko]
Created by
- skoirala | @dr-ko
Calculated using:
Inputs: :pools => :TWS, :pools => :ΔTWS, :pools => :zeroΔTWS, :constants => :z_zero, :constants => :o_one
Outputs: :pools => :ΔTWS, :pools => :TWS, :states => :total_water, :states => :total_water_prevwCycleBase
SindbadTEM.Processes.wCycleBase Type
Sets the basic structure of the water cycle storages.Approaches
wCycleBase_simple: ThroughwCycle.jl, adjust/update the variables for each storage separately and for TWS.
wCycleBase approaches
SindbadTEM.Processes.wCycleBase_simple Type
Through wCycle.jl, adjust/update the variables for each storage separately and for TWS.
Parameters
- None
Methods:
define:
Inputs
- None
Outputs
models.w_model: a base water cycle model to loop through the pools and fill the main or component pools needed for using static arrays. A mandatory field for every water model/pool realization
precompute, compute, update methods are not defined
End of getModelDocString-generated docstring for wCycleBase_simple.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
- 1.0 on 18.07.2023 [skoirala | @dr-ko]
Created by
- skoirala | @dr-ko
waterBalance
SindbadTEM.Processes.waterBalance Type
Water balanceApproaches
waterBalance_simple: Simply checks the water balance as P-ET-R-ds/dt.
waterBalance approaches
SindbadTEM.Processes.waterBalance_simple Type
Simply checks the water balance as P-ET-R-ds/dt.
Parameters
- None
Methods:
compute:
Inputs
fluxes.precip: total land precipitation including snow and rainstates.total_water_prev: sum of water storage across all components in previous time stepstates.total_water: sum of water storage across all componentsstates.WBP: water balance tracker pool that starts with rain and ends up with 0 after allocating to soil percolationfluxes.evapotranspiration: total land evaporation including soil evaporation, vegetation transpiration, snow sublimation, and interception lossfluxes.runoff: total runoff
Outputs
diagnostics.water_balance: misbalance of the water for the given time step calculated as the differences between total input, output and change in storages
define, precompute, update methods are not defined
End of getModelDocString-generated docstring for waterBalance_simple.jl. Check the Extended help for user-defined information.
Extended help
References
Versions
1.0 on 11.11.2019
1.1 on 20.11.2019 [skoirala | @dr-ko]:
Created by
- skoirala | @dr-ko
Calculated using:
Inputs: :fluxes => :precip, :states => :total_water_prev, :states => :total_water, :states => :WBP, :fluxes => :evapotranspiration, :fluxes => :runoff
Outputs: :diagnostics => :water_balanceMethods
SindbadTEM.Processes.abovegroundFractionTable Function
abovegroundFractionTable(configuration)The fixed, per-pool-name fraction of each carbon pool that is aboveground. Resolved for a CarbonPoolConfiguration or active cCycleBase in the same way as fireCCTable.
SindbadTEM.Processes.addToEachElem Function
addToEachElem(v::SVector, Δv::Real)
addToEachElem(v::AbstractVector, Δv::Real)Add a value to each element of a vector.
Arguments
v: AStaticVectororAbstractVectorΔv::Real: The value to be added to each element
Returns
- The modified vector with
Δvadded to all elements
Examples
julia> using StaticArraysCore: SVector
julia> v = SVector(1.0, 2.0, 3.0)
julia> addToEachElem(v, 5.0)
3-element SVector{3, Float64} with indices SOneTo(3):
6.0
7.0
8.0SindbadTEM.Processes.addToElem Function
addToElem(v::SVector{N,T}, Δv::T, ind::Int)
addToElem(v::SVector, Δv, ind::Int)
addToElem(v::AbstractVector, Δv, ind::Int)Add a value to a specific element of a vector.
Arguments
v: AStaticVectororAbstractVectorΔv: The value to be addedind::Int: The index of the element to modify
Returns
- The modified vector with
Δvadded to element at indexind
Examples
julia> using StaticArraysCore: SVector
julia> v = SVector(1.0, 2.0, 3.0)
julia> addToElem(v, 5.0, 2)
3-element SVector{3, Float64} with indices SOneTo(3):
1.0
7.0
3.0SindbadTEM.Processes.addVec Function
addVec(v::SVector, Δv::SVector)
addVec(v::AbstractVector, Δv::AbstractVector)Add one vector to another element-wise.
Arguments
v: AStaticVectororAbstractVectorΔv: AStaticVectororAbstractVectorof the same length
Returns
- The result of adding
Δvtovelement-wise
Examples
julia> using StaticArraysCore: SVector
julia> v = SVector(1.0, 2.0, 3.0)
julia> Δv = SVector(0.5, 1.0, 1.5)
julia> addVec(v, Δv)
3-element SVector{3, Float64} with indices SOneTo(3):
1.5
3.0
4.5SindbadTEM.Processes.adjustPackPoolComponents Method
adjustPackPoolComponents(land, helpers, ::cCycleBase)Scatter the combined cEco vector back into every component pool it is built from, and pack the results into land.pools.
Defined once for every cCycleBase approach. setComponentFromMainPool generates the unrolled scatter from the pool names an experiment actually configured, so an approach that adds, drops or renames a pool needs no method of its own.
all_components is every key of the element's zix except cEco itself, which is both the main pools and the leaf pools.
SindbadTEM.Processes.adjust_pk Method
adjust_pk(c_eco_k, kValue, flowValue, maxValue, zix, helpers)SindbadTEM.Processes.allocateToPools Method
allocateToPools(v, group_zix, group_n, group_vals)Spread each group's total value evenly across the pool indices in that group, writing group_vals[g] / group_n[g] into every index in group_zix[g], for every group g.
Arguments
v: AStaticVectororAbstractVector, e.g. a pool's carbon allocation vectorgroup_zix: A tuple of pool-index tuples, one per group, e.g.cVeg_zixgroup_n: The number of pool indices per group, matchinggroup_zix, e.g.cVeg_nzixgroup_vals: An indexable collection of the total value to distribute per group (its own length may exceed the number of groups, e.g. a pool-shapedSVectorof which only the first few positions hold real per-group values), e.g.c_allocation_to_veg
Returns
vwith every group's share written into its pool indices
Notes
group_zixis a heterogeneous tuple of differently-sized tuples (groups need not all have the same number of pool indices), so it is recursed on viafirst/Base.tailrather than iterated witheachindex, which would make each element a non-concreteUnionand allocate on every call.group_valsis read by position (group_vals[group_index]) rather than recursed on the same way, since callers pass it as-is (e.g.c_allocation_to_veg) without converting it to a tuple first.
SindbadTEM.Processes.cCycleBaseZixGroups Method
cCycleBaseZixGroups(helpers)Get the zix for the groups relevant for different models of carbon cycle.
sourceSindbadTEM.Processes.cFlowEdges Function
cFlowEdges(T)Return the pool-to-pool carbon flow edges of an approach as giver => taker pairs, or () if it declares none.
Notes:
Topology is a pool-configuration property:
cFlowEdgeson an approach type looks up itspoolConfigurationand asks that directly. The edge lists themselves sit in the configuration files (GSI_FLOW_EDGESinGSI.jl,CASA_FLOW_EDGESinCASA.jl); a configuration with no topology of its own, such asMGMT, reuses another configuration's list.Edges must name leaf pools, never groups:
zixis also keyed by group names, so a group-level edge would silently expand into a cross product of links.cFlowStructurerejects this.
SindbadTEM.Processes.cFlowMatrix Function
cFlowMatrix(c_giver, c_taker, n_pools)
cFlowMatrix(approach, pool_names)Return the carbon flow topology as a square matrix of flow indices, with matrix[taker, giver] holding the position of that flow in the flow vector and 0 where the two pools are not connected.
Arguments
c_giver: the giver index of each flow, in flow-vector orderc_taker: the taker index of each flow, in flow-vector ordern_pools: the number of carbon pools, which is the size of the square matrixapproach: acCycleBaseapproach, as a type or an instance, whosecFlowEdgesdeclare the topologypool_names: the leaf pool names incEcoindex order, which ishelpers.pools.components.cEcoat runtime
Returns
- A
Matrix{Int}of sizen_poolsbyn_pools
Examples
julia> cFlowMatrix((1, 1, 2), (2, 3, 3), 3)
3×3 Matrix{Int64}:
0 0 0
1 0 0
2 3 0Notes:
Row is the taker, column is the giver, matching every dense flow array in the models (
c_flow_A_array,c_flow_ME_array).The two methods produce the same matrix. The three-argument form takes indices the base already resolved; the two-argument form resolves an approach's declared edges directly, repeating
cFlowStructure's(giver, taker)sort so flowkhere is the flowkthe model packs.pool_namesis passed in rather than derived frompoolStructure, since that flattening (getPoolInformation) lives inSindbad.Setup, which depends onSindbadTEMrather than the other way round.
SindbadTEM.Processes.computeTEM Method
computeTEM(tem_processes, forcing, land, model_helpers)run the compute function of SINDBAD TEM processes
Arguments:
tem_processes: a list of SINDBAD TEM processes to runforcing: a forcing NT that contains the forcing time series set for ALL locationsland: a core SINDBAD NT that contains all variables for a given time step that is overwritten at every timestepmodel_helpers: helper NT with necessary objects for model run and type consistencies
SindbadTEM.Processes.computeTEM Method
computeTEM(tem_processes, forcing, land, model_helpers, ::DoDebugModel)debug the compute function of SINDBAD TEM processes
Arguments:
tem_processes: a list of SINDBAD TEM processes to runforcing: a forcing NT that contains the forcing time series set for ALL locationsland: a core SINDBAD NT that contains all variables for a given time step that is overwritten at every timestepmodel_helpers: helper NT with necessary objects for model run and type consistencies::DoDebugModel: a type dispatch to debug the compute functions of model
SindbadTEM.Processes.computeTEM Method
computeTEM(tem_processes, forcing, land, model_helpers, ::DoNotDebugModel)run the compute function of SINDBAD TEM processes
Arguments:
tem_processes: a list of SINDBAD TEM processes to runforcing: a forcing NT that contains the forcing time series set for ALL locationsland: a core SINDBAD NT that contains all variables for a given time step that is overwritten at every timestepmodel_helpers: helper NT with necessary objects for model run and type consistencies::DoNotDebugModel: a type dispatch to not debug but run the compute functions of model
SindbadTEM.Processes.computeTEM Method
computeTEM(tem_processes, forcing, land, model_helpers)run the compute function of SINDBAD TEM processes
Arguments:
tem_processes: a list of SINDBAD TEM processes to runforcing: a forcing NT that contains the forcing time series set for ALL locationsland: a core SINDBAD NT that contains all variables for a given time step that is overwritten at every timestepmodel_helpers: helper NT with necessary objects for model run and type consistencies
SindbadTEM.Processes.definePrecomputeTEM Method
definePrecomputeTEM(tem_processes::LongTuple, forcing, land, model_helpers)run the precompute function of SINDBAD TEM processes to instantiate all fields of land
Arguments:
tem_processes: a list of SINDBAD TEM processes to runforcing: a forcing NT that contains the forcing time series set for ALL locationsland: a core SINDBAD NT that contains all variables for a given time step that is overwritten at every timestepmodel_helpers: helper NT with necessary objects for model run and type consistencies
SindbadTEM.Processes.definePrecomputeTEM Method
definePrecomputeTEM(tem_processes, forcing, land, model_helpers)run the define and precompute functions of SINDBAD TEM processes to instantiate all fields of land
Arguments:
tem_processes: a list of SINDBAD TEM processes to runforcing: a forcing NT that contains the forcing time series set for ALL locationsland: a core SINDBAD NT that contains all variables for a given time step that is overwritten at every timestepmodel_helpers: helper NT with necessary objects for model run and type consistencies
SindbadTEM.Processes.edgesBetween Method
edgesBetween(c_giver, c_taker, giver_zix, taker_zix)Every flow-vector position whose giver is in giver_zix and whose taker is in taker_zix, by pool-index membership rather than by matching a literal <giver>_to_<taker> name. This lets a caller work against more than one pool structure without naming either config's specific pools: e.g. leaf shedding lands in one pool under GSI (cLitFast) and two under CASA (cLitLeafFast, cLitLeafSlow).
An empty giver_zix or taker_zix, e.g. CASA's absent cVegReserve, returns no edges rather than erroring.
SindbadTEM.Processes.fireCCTable Function
fireCCTable(configuration)The fixed, per-pool-name (ccMin, ccMax, weight) fire combustion-completeness table for a CarbonPoolConfiguration. Named by type, symbol, string, or a cCycleBase type/instance, like cFlowEdges, so cFireCombustionCompleteness_vanDerWerf2006 can resolve the right table for whichever pool configuration is active.
SindbadTEM.Processes.fireCCTable Method
fireCCTable(::Type{GSI})Derived from CASA_FIRE_CC_VANDERWERF (poolConfigurations/CASA.jl) via deriveFireCCTable. cVegRoot and cVegReserve, which deriveFireCCTable cannot resolve from CASA's names or aliases, are merged in afterward.
Defined as a method body rather than a top-level const since GSI.jl loads before CASA.jl, and a method body's global references resolve at call time.
SindbadTEM.Processes.getAbovegroundFractionFromParams Method
getAbovegroundFractionFromParams(c_fire_aboveground_fraction, table, helpers)Scatter a per-pool-name aboveground-fraction table to the active cEco indices.
SindbadTEM.Processes.getParamForVegType Method
getParamForVegType(per_vegtype, veg_type_name, scalar)Look up veg_type_name in a table already re-keyed by getParamsPerVegType, and scale it by scalar (a bounded, optimizable parameter), matching the scalar's numeric type via oftype so the result doesn't silently widen to Float64.
SindbadTEM.Processes.getParamsPerVegType Method
getParamsPerVegType(base_table::NamedTuple, ::Type{Classification})Re-key a base table declared in ParamsForVegClasses.jl (always keyed by Classification_SINDBAD's canonical names) onto Classification's own class names. One-to-one entries (including Classification_SINDBAD, the identity case) pass the base value through unchanged under the new name; one-to-many entries (e.g. Classification_PlantForm's :tree/:shrub/:herb/:unknown) get the unweighted average of every canonical class the group's own vegClasses entry names. No special-casing identity vs. grouping: both are "average over however many targets this entry names."
SindbadTEM.Processes.getVectorOfType Function
getVectorOfType(source_vector, n, fill_value=zero)Return a vector of n elements of the same kind as source_vector: its element type, and static when source_vector is static. Every element is fill_value(eltype(source_vector)). Only the type of source_vector is used, so n need not match its length.
At the carbon-cycle call sites the type comes from the pools and the length from the flows, as in getVectorOfType(cEco, length(c_taker), one), which gives one value per carbon flow.
The methods are inlined so that a length known when compiling the caller, such as length(c_taker) for a tuple c_taker, also fixes the length of a static result. The result type is then concrete, which a static vector built from a run-time Int is not.
Arguments
source_vector: the vector whose element type and container kind to follow, usuallycEcon: length of the returned vectorfill_value:zeroorone, the function rather than a number. Defaults tozero
Returns
- A vector of
nelements, anSVectorwhensource_vectoris static
Examples
julia> getVectorOfType([1.0, 2.0, 3.0], 2)
2-element Vector{Float64}:
0.0
0.0
julia> getVectorOfType([1.0, 2.0, 3.0], 2, one)
2-element Vector{Float64}:
1.0
1.0SindbadTEM.Processes.getZix Function
getZix(dat::SubArray)
getZix(dat::SubArray, zixhelpersPool)
getZix(dat::Array, zixhelpersPool)
getZix(dat::SVector, zixhelpersPool)Return the indices of a view for a subarray or return the provided indices.
Arguments
dat: ASubArray,Array, orSVectorzixhelpersPool: (Optional) Helper indices to return ifdatis not aSubArray
Returns
- A tuple of indices for the array view
Examples
julia> arr = [1, 2, 3, 4, 5]
julia> view_arr = view(arr, 2:4)
julia> getZix(view_arr)
(2:4,)SindbadTEM.Processes.meCASAFlowsLitter Method
meCASAFlowsLitter(eff_cLit_to_cMicSurf, eff_cLitRootFine_to_cMicSoil,
eff_cLitRootCoarse_to_cMicSoil, eff_cLit_to_cSoilSlow,
eff_cLitRootFine_to_cSoilSlow, zix)The CASA microbial carbon-transfer efficiency of every litter decomposition pathway, as (giver_zix, taker_zix, value) triples matched by pool-index membership (setMEFlow/edgesBetween in landUtils.jl), not by a literal <giver>_to_<taker> name.
The surface microbial pathway retains least, the direct route into slow soil most, and fine roots sit between the two because they decompose in the soil rather than at the surface.
Only ever called from cCycleBase_CASA's own precompute, so zix is always CASA's. Declared as a function rather than written inline in precompute, and read from one place, since this is the assignment whose cLitRootCoarse and cLitWood columns were transposed for as long as it was a dense array indexed by position.
SindbadTEM.Processes.meCASAFlowsSoil Method
meCASAFlowsSoil(eff_cSoil_to_cMicSoil, eff_cSoilSlow_to_cSoilOld, zix)The CASA microbial carbon-transfer efficiency of the soil decomposition pathways, as (giver_zix, taker_zix, value) triples matched by pool-index membership (setMEFlow/edgesBetween in landUtils.jl), not by a literal <giver>_to_<taker> name.
The two routes carry the same CASA value but are separate parameters so that stabilization into old soil carbon and the return to the microbial pool can be calibrated apart.
sourceSindbadTEM.Processes.meTextureEfficiency Method
meTextureEfficiency(effA, effB, st_clay, st_silt)The CASA microbial carbon-transfer efficiency of soil texture, clamp_zero_one(effA - effB * (mean(st_silt) + mean(st_clay))).
The soil profile collapses to a single mean clay and silt fraction, as in cQualityPartitionSoilProperties_clay. Shared because the same law is the whole of the three _texture approaches.
SindbadTEM.Processes.precomputeTEM Method
precomputeTEM(tem_processes, forcing, land, model_helpers)run the precompute function of SINDBAD TEM processes to instantiate all fields of land
Arguments:
tem_processes: a list of SINDBAD TEM processes to runforcing: a forcing NT that contains the forcing time series set for ALL locationsland: a core SINDBAD NT that contains all variables for a given time step that is overwritten at every timestepmodel_helpers: helper NT with necessary objects for model run and type consistencies
SindbadTEM.Processes.precomputeTEM Method
precomputeTEM(tem_processes, forcing, land, model_helpers, ::DoDebugModel)debug the precompute function of SINDBAD TEM processes
Arguments:
tem_processes: a list of SINDBAD TEM processes to runforcing: a forcing NT that contains the forcing time series set for ALL locationsland: a core SINDBAD NT that contains all variables for a given time step that is overwritten at every timestepmodel_helpers: helper NT with necessary objects for model run and type consistencies::DoDebugModel: a type dispatch to debug the compute functions of model
SindbadTEM.Processes.precomputeTEM Method
precomputeTEM(tem_processes, forcing, land, model_helpers, ::DoNotDebugModel)run the precompute function of SINDBAD TEM processes
Arguments:
tem_processes: a list of SINDBAD TEM processes to runforcing: a forcing NT that contains the forcing time series set for ALL locationsland: a core SINDBAD NT that contains all variables for a given time step that is overwritten at every timestepmodel_helpers: helper NT with necessary objects for model run and type consistencies::DoNotDebugModel: a type dispatch to not debug but run the compute functions of model
SindbadTEM.Processes.precomputeTEM Method
precomputeTEM(tem_processes, forcing, land, model_helpers)run the precompute function of SINDBAD TEM processes to instantiate all fields of land
Arguments:
tem_processes: a list of SINDBAD TEM processes to runforcing: a forcing NT that contains the forcing time series set for ALL locationsland: a core SINDBAD NT that contains all variables for a given time step that is overwritten at every timestepmodel_helpers: helper NT with necessary objects for model run and type consistencies
SindbadTEM.Processes.processPackNT Method
processPackNT(ex)Internal helper function to process pack named tuple expressions.
Arguments
ex: An expression to process
Returns
- A processed expression for packing into a named tuple
Notes
- This is an internal function used by the
@pack_ntmacro
SindbadTEM.Processes.processUnpackNT Method
processUnpackNT(ex)Internal helper function to process unpack named tuple expressions.
Arguments
ex: An expression to process
Returns
- A processed expression for unpacking from a named tuple
Notes
- This is an internal function used by the
@unpack_ntmacro
SindbadTEM.Processes.repElem Function
repElem(v::AbstractVector, v_elem, ind::Int)
repElem(v::SVector{N,T}, v_elem::T, ind::Int)
repElem(v::SVector, v_elem, ind::Int)Replace an element of a vector with a new value.
Arguments
v: AStaticVectororAbstractVectorv_elem: The new value to assignind::Int: The index of the element to replace
Returns
- The modified vector with element at index
indreplaced byv_elem
Examples
julia> using StaticArraysCore: SVector
julia> v = SVector(1.0, 2.0, 3.0)
julia> repElem(v, 5.0, 2)
3-element SVector{3, Float64} with indices SOneTo(3):
1.0
5.0
3.0SindbadTEM.Processes.repVec Function
repVec(v::AbstractVector, v_new)
repVec(v::SVector, v_new)Replace the values of a vector with a new value or vector.
Arguments
v: AnAbstractVectororStaticVectorv_new: A new value or vector to replace the old values
Returns
- The modified vector with values replaced
Examples
julia> using StaticArraysCore: SVector
julia> v = SVector(1.0, 2.0, 3.0)
julia> repVec(v, 5.0)
3-element SVector{3, Float64} with indices SOneTo(3):
5.0
5.0
5.0SindbadTEM.Processes.resolveVegClassification Method
resolveVegClassification(::Type{Classification}, canonical_name::Symbol)Resolve a canonical Classification_SINDBAD name to Classification's own class name. Works uniformly whether Classification's crosswalk targets are one-to-one (including Classification_SINDBAD itself, true identity) or one-to-many (Classification_PlantForm), since both reduce to "does this entry's target, normalized to a tuple, contain canonical_name".
Errors, naming the classification and the unmatched name, if no class of Classification covers canonical_name; see validateVegTypeCoverage for why this should never fire once every catalog is included.
Walks vegClasses(T) by compile-time tail-recursion (_resolveVegClassification) rather than a for loop: a one-to-many catalog's entries have differently-sized target tuples, so a for loop's iteration variable has no single concrete type and Julia falls back to allocating code. Recursing on Base.tail keeps the (always Symbol) return type concrete.
SindbadTEM.Processes.setComponentFromMainPool Method
setComponentFromMainPool(land, helpers, Val{s_main}, Val{s_comps}, Val{zix})Set component pool values using values from the main pool.
Arguments
land: A core SINDBAD NamedTuple containing all variables for a given time stephelpers: Helper NamedTuple with necessary objects for model run and type consistencies::Val{s_main}: A NamedTuple with names of the main pools::Val{s_comps}: A NamedTuple with names of the component pools::Val{zix}: A NamedTuple with zix (indices) of each pool
Returns
- Generated code expression to set component pools from main pool
Notes
Names are generated using components in helpers so model formulations are not specific for pool names
This is a generated function that creates code at compile time
SindbadTEM.Processes.setFlowValue Method
setFlowValue(flow_vec, c_giver, c_taker, giver_zix, taker_zix, value)Write value into every flow-vector position whose giver is in giver_zix and whose taker is in taker_zix (via edgesBetween), and return the vector unchanged when no flow matches – e.g. a pool structure that lacks either group entirely.
setMEFlow is this function under the name cMicrobialEfficiency reads it in as. cQualityPartition goes through neither this nor named edges: its groups are resolved to flow-vector positions once, in cCycleBase's deriveQPGroups, and its approaches write directly at those positions.
SindbadTEM.Processes.setMEFlow Method
setMEFlow(me_vec, c_giver, c_taker, giver_zix, taker_zix, value)Write value into every flow-vector position whose giver is in giver_zix and whose taker is in taker_zix (via setFlowValue/edgesBetween in landUtils.jl), and return the vector unchanged when no flow matches.
There is no group counterpart here: an efficiency is a per-flow retention fraction rather than a partition, so a giver's outgoing efficiencies are under no obligation to sum to one.
Used only by cCycleBase_CASA's own precompute, to seed c_flow_ME_vec with CASA's static defaults (meCASAFlowsLitter/meCASAFlowsSoil); the per-group cMicrobialEfficiencyc{Lit,Mic,Soil} approaches find their flows through zix directly, without going through this function.
SindbadTEM.Processes.setMainFromComponentPool Method
setMainFromComponentPool(land, helpers, Val{s_main}, Val{s_comps}, Val{zix})Set main pool values from component pool values.
Arguments
land: A core SINDBAD NamedTuple containing all variables for a given time stephelpers: Helper NamedTuple with necessary objects for model run and type consistencies::Val{s_main}: A NamedTuple with names of the main pools::Val{s_comps}: A NamedTuple with names of the component pools::Val{zix}: A NamedTuple with zix (indices) of each pool
Returns
- Generated code expression to set main pool from component pools
Notes
Names are generated using components in helpers so model formulations are not specific for pool names
This is a generated function that creates code at compile time
SindbadTEM.Processes.totalS Method
totalS(s, sΔ)
totalS(s)Return the total storage amount given storage and delta storage without creating temporary arrays.
Arguments
s: Storage arraysΔ: (Optional) Delta storage array
Returns
- Total storage amount (sum of
sandsΔif provided, or justs)
Examples
julia> s = [1.0, 2.0, 3.0]
julia> sΔ = [0.1, 0.2, 0.3]
julia> totalS(s, sΔ)
6.6
julia> totalS(s)
6.0SindbadTEM.Processes.totalS_indices Method
totalS_indices(s, s_indices)Return the total storage amount for specific indices of a storage array.
sourceSindbadTEM.Processes.unsatK Method
calculates the soil hydraulic conductivity for a given moisture based on Saxton; 2006
Inputs:
land.pools.soilW[sl]
land.properties.sp_[w_sat/β/k_sat]: hydraulic parameters for each soil layer
Outputs:
- K: the hydraulic conductivity at unsaturated land.pools.soilW [in mm/day]
Modifies:
Extended help
References:
- Saxton, K. E., & Rawls, W. J. (2006). Soil water characteristic estimates by texture & organic matter for hydrologic solutions. Soil science society of America Journal, 70[5], 1569-1578.
Versions:
1.0 on 22.11.2019 [skoirala | @dr-ko]:
1.1 on 03.12.2019 [skoirala | @dr-ko]: included the option to handle lookup table when set to true from model_run.json
Created by
- skoirala | @dr-ko
Notes:
This function is a part of pSoil; but making the looking up table & setting the soil properties is handled by soilWBase [by calling this function]
is also used by all approaches depending on kUnsat within time loop of coreTEM
SindbadTEM.Processes.vegClasses Function
vegClasses(catalog)Return a catalog's class table as a Tuple of (name::Symbol => code::Int, canonical_target) entries, one per class, exactly as documented by the source for name/code, plus the class(es) it maps onto in the canonical Classification_SINDBAD vocabulary.
canonical_target is a single Symbol for a one-to-one catalog, or an NTuple of Symbols for a one-to-many grouping catalog (e.g. Classification_PlantForm).
Checked at load time by validateVegTypeCrosswalks and validateVegTypeCoverage below.
SindbadTEM.Processes.vegClasses Method
vegClasses(::Type{Classification_MODIS_BGC})The BIOME-BGC legend, Table 6 of the MCD12Q1 user guide (Running et al., 2004), transcribed exactly as documented for the name => code half of each entry. Every vegetated class is defined by leaf-habit/phenology alone with no canopy-height or cover threshold, so each conflates trees and shrubs of the same phenology into one class, coarser than the canonical Classification_SINDBAD split.
Evergreen_Needleleaf_Vegetation,Evergreen_Broadleaf_Vegetation,Deciduous_Needleleaf_Vegetation,Deciduous_Broadleaf_Vegetation: mapped to the correspondingly named IGBP forest class.Annual_Broadleaf_Vegetation("at least 60% cultivated broadleaf crops"): mapped toCroplands.Annual_Grass_Vegetation(explicitly "including cereal croplands"): mapped toGrasslands.Non_Vegetated_Lands: conflates barren ground with permanent snow/ice. Mapped toBarren.
SindbadTEM.Processes.vegClasses Method
vegClasses(::Type{Classification_MODIS_IGBP})The IGBP land cover legend, Table 3 of the MCD12Q1/MCD12C1 user guide (Sulla-Menashe & Friedl, 2018), transcribed exactly as documented for the name => code half of each entry. Every class here has the identically named class in the canonical Classification_SINDBAD vocabulary (which was itself copied from this legend) as its crosswalk target – a true identity mapping today, kept explicit rather than assumed so it is checked the same way as every other catalog's crosswalk (see validateVegTypeCrosswalks).
SindbadTEM.Processes.vegClasses Method
vegClasses(::Type{Classification_MODIS_LAI})The LAI/fPAR biome legend, Table 5 of the MCD12Q1 user guide (Myneni et al., 2002), transcribed exactly as documented for the name => code half of each entry. The forest, savanna, urban and water classes map directly onto the canonical Classification_SINDBAD name of the same meaning. Three do not:
Grasslands: this legend's own definition explicitly includes "cereal croplands," so mapping it to IGBP'sGrasslandsalone drops that signal.Shrublands: IGBP splits shrubland by canopy closure (Closed_Shrublands/Open_Shrublands), which this legend does not. Mapped toOpen_Shrublandsas a default.Non_Vegetated_Lands: conflates barren ground with permanent snow/ice. Mapped toBarren.
SindbadTEM.Processes.vegClasses Method
vegClasses(::Type{Classification_MODIS_PFT})The Plant Functional Type legend, Table 7 of the MCD12Q1 user guide (Bonan, 2002), transcribed exactly as documented for the name => code half of each entry.
Two classes have no clean 1:1 match onto the canonical Classification_SINDBAD vocabulary (itself copied from IGBP):
Shrub: IGBP splits shrubland by canopy closure (Closed_Shrublands/Open_Shrublands), which this legend does not. Mapped toOpen_Shrublands.Cereal_CroplandsandBroadleaf_Croplands: IGBP has one undifferentiatedCroplandsclass; both map to it.
SindbadTEM.Processes.vegClasses Method
vegClasses(::Type{Classification_MODIS_UMD})The University of Maryland (UMD) legend, Table 4 of the MCD12Q1/MCD12C1 user guide (Hansen et al., 2000), transcribed exactly as documented for the name => code half of each entry. Classes 1-14 share their definitions verbatim with the IGBP legend, so they map onto the identically named class in the canonical Classification_SINDBAD vocabulary (itself copied from IGBP). Two classes do not:
Non_Vegetated_Lands(15) conflates IGBP's separatePermanent_Snow_and_Ice(15) andBarren(16) into one class. Mapped here to:Barren, a placeholder that understates any snow/ice extent – confirm against the user's judgment or the literature before relying on it for calibration.Water_Bodiesis class 0 here (IGBP has it as 17); the crosswalk maps the code, not the number, so this is unaffected.
SindbadTEM.Processes.vegClasses Method
vegClasses(::Type{Classification_PlantForm})Groups Classification_SINDBAD's canonical classes into a coarse plant-form split: :tree, :shrub, :herb, and :unknown for every canonical class none of the three science groups covers. This is the one-to-many crosswalk example: each entry's target is a tuple of several canonical names, not one.
:unknown is an explicit, load-time-validated catch-all (checked by validateVegTypeCoverage) for Water_Bodies, Urban_and_Built_up_Lands, Permanent_Snow_and_Ice, Barren, and Unclassified.
The numeric code half of each entry is vestigial here: nothing decodes a raw "plant-form code" from forcing data, and no approach resolves a constant against this catalog. Kept only for shape-consistency with every other VegClassification.
SindbadTEM.Processes.vegClasses Method
vegClasses(::Type{Classification_SINDBAD})SINDBAD's canonical vegetation-type classes: the one name set every downstream science approach is written against. Copied from Classification_MODIS_IGBP (same names, same codes), but kept as its own catalog so it is free to gain classes IGBP does not have, while MODIS_IGBP.jl stays an exact transcription of the MODIS document. Every other catalog's vegClasses crosswalks onto these names; this catalog's own entries map onto themselves.
SindbadTEM.Processes.vegTypeCanonicalName Method
vegTypeCanonicalName(catalog, code)Resolve a numeric class code to its catalog's raw crosswalk target: the single canonical name for a one-to-one catalog, or the tuple of canonical names for a one-to-many catalog. Most callers want resolveVegClassification instead, which resolves all the way to one class name regardless of catalog kind.
SindbadTEM.Processes.vegTypeCode Method
vegTypeCode(catalog, name)Resolve a catalog name to its numeric class code, erroring on an unknown name.
sourceSindbadTEM.Processes.vegTypeName Method
vegTypeName(catalog, code)Resolve a numeric class code to its catalog name, erroring rather than silently clamping when the code is not one of the catalog's own.
sourceSindbadTEM.Processes.@add_to_elem Macro
@add_to_elemMacro to add a value to an element of a vector or static vector.
Arguments
outparams::Expr: Expression in the formvalue ⇒ (vector, index)
Examples
julia> using StaticArraysCore: SVector
julia> cOther = SVector(100.0f0, 1.0f0)
julia> @add_to_elem 1.0f0 ⇒ (cOther, 1)
julia> cOther
2-element SVector{2, Float32} with indices SOneTo(2):
101.0f0
1.0f0SindbadTEM.Processes.@pack_nt Macro
@pack_ntMacro to pack variables into a named tuple.
Arguments
outparams: Expression or block of expressions in the form(vars...) ⇒ targetorvar ⇒ target
Examples
julia> land = (; diagnostics = (; a = 1, b = 2), fluxes = (; c = 3, d = 4))
julia> a, b = 10, 20
julia> @pack_nt (a, b) ⇒ land.diagnostics
julia> land.diagnostics
(a = 10, b = 20)SindbadTEM.Processes.@rep_elem Macro
@rep_elemMacro to replace an element of a vector or static vector.
Arguments
outparams::Expr: Expression in the formvalue ⇒ (vector, index)
Examples
julia> using StaticArraysCore: SVector
julia> cOther = SVector(100.0f0, 1.0f0)
julia> @rep_elem 50.0f0 ⇒ (cOther, 1)
julia> cOther
2-element SVector{2, Float32} with indices SOneTo(2):
50.0f0
1.0f0SindbadTEM.Processes.@rep_vec Macro
@rep_vecMacro to replace a vector or static vector with a new value.
Arguments
outparams::Expr: Expression in the formvector ⇒ new_value
Examples
julia> _vec = [100.0f0, 2.0f0]
julia> @rep_vec _vec ⇒ 1.0f0
julia> _vec
2-element Vector{Float32}:
1.0f0
1.0f0SindbadTEM.Processes.@unpack_nt Macro
@unpack_ntMacro to unpack variables from a named tuple.
Arguments
inparams: Expression or block of expressions in the form(vars...) ⇐ sourceorvar ⇐ source
Examples
julia> forcing = (; f1 = 1.0, f2 = 2.0)
julia> @unpack_nt (f1, f2) ⇐ forcing
julia> f1, f2
(1.0, 2.0)Internal
SindbadTEM.Processes.CASA_CN_ratio Constant
CASA_CN_ratioCarbon-to-nitrogen ratio of each CASA carbon pool, per pool name. Fixed data, not a parameter; calibration happens through CN_ratio_scalar in cCycleBase_CASA instead. Only the four vegetation pools have a physically meaningful ratio; every other pool is 0.0.
SindbadTEM.Processes.CASA_FIRE_CC_VANDERWERF Constant
CASA_FIRE_CC_VANDERWERFVan der Werf et al. (2006) fire combustion completeness, (ccMin, ccMax, weight) triples (see FIRE_CC_NO_BURN/FIRE_CC_HI_BURN) per CASA pool name. Fixed data, not a parameter; calibration happens through fire_cc_scalar in cFireCombustionCompleteness_vanDerWerf2006 instead.
Root pools and every fine litter/soil pool downstream of them do not burn; leaf and its litter, wood and its litter, and the surface microbial pool do.
sourceSindbadTEM.Processes.CASA_FLOW_EDGES Constant
CASA_FLOW_EDGESThe 22 edges of cCycleBase_CASA. See cFlowEdges for the ordering convention and why edges must name leaf pools.
SindbadTEM.Processes.CASA_TAU_NON_VEG_POOLS Constant
CASA_TAU_NON_VEG_POOLSTurnover time (years) of every CASA carbon pool except the four vegetation-compartment pools (cVegRootFine, cVegRootCoarse, cVegWood, cVegLeaf), per pool name. k = 1.0/value is computed at the point of use; fixed data, not a parameter, since calibration happens through k_c_scalar in cCycleBase_CASA instead.
The four vegetation-compartment pools are looked up instead at runtime from CVEG_ROOTFINE_AGE_PER_VEGTYPE/CVEG_LEAF_AGE_PER_VEGTYPE/ CVEG_ROOTCOARSE_AGE_PER_VEGTYPE/CVEG_WOOD_AGE_PER_VEGTYPE (ParamsForVegClasses.jl) by land.states.veg_type_name, in cCycleBase_CASA's precompute.
SindbadTEM.Processes.C_REMAIN_PER_VEGTYPE Constant
C_REMAIN_PER_VEGTYPEdefault minimum remaining carbon content (gC/m2) of each vegetation pool after fire or site disturbance, per canonical vegetation type (Classification_SINDBAD) name.
These numbers are ingested by cCycleBase and scaled by a scalar parameter that can be optimized in a calibration run.
sourceSindbadTEM.Processes.GSI_CN_ratio Constant
GSI_CN_ratioCarbon-to-nitrogen ratio of each GSI carbon pool, per pool name. Fixed data, not a parameter; calibration happens through CN_ratio_scalar in the owning approach instead. Only the four vegetation pools have a physically meaningful ratio; every other pool is 0.0.
SindbadTEM.Processes.GSI_FLOW_EDGES Constant
GSI_FLOW_EDGESThe 11 edges shared by cCycleBase_GSI, _GSI_PlantForm, and _MGMT (whose products are decay-only and add no edges). See cFlowEdges for the ordering convention and why edges must name leaf pools.
SindbadTEM.Processes.GSI_TAU_DEFAULT Constant
GSI_TAU_DEFAULTTurnover time (years) of each GSI carbon pool. k = 1.0/turnover_time is computed at the point of use; fixed data, not a parameter.
Only cLitFast/cLitSlow/cSoilSlow/cSoilOld/cVegReserve are read from this table directly, since none vary by vegetation type. cVegRoot, cVegWood, and cVegLeaf are looked up instead at runtime from CVEG_ROOTFINE_AGE_PER_VEGTYPE/CVEG_WOOD_AGE_PER_VEGTYPE/ CVEG_LEAF_AGE_PER_VEGTYPE (ParamsForVegClasses.jl) by land.states.veg_type_name; this table's entries for those three pools are kept only as a historical record of the pre-refactor defaults.
SindbadTEM.Processes.MGMT_PRODUCTS_TAU Constant
MGMT_PRODUCTS_TAUTurnover time (years) of the two harvested-product pools poolStructure(MGMT) adds on top of the GSI structure: cProductsWood/cProductsCrop. Fixed data, not a parameter; calibration happens through k_c_products_wood_scalar/k_c_products_crop_scalar in cCycleBase_MGMT instead.
Unlike every other pool cCycleBase_MGMT's turnover loop covers, these two do not vary by vegetation type, so its precompute merges this fixed pair into its runtime, per-vegtype compartment-turnover table rather than looking them up by veg_type_name.
SindbadTEM.Processes.cFlowEdgeIndex Method
cFlowEdgeIndex(params, helpers, pool_name, edge)Resolve one end of a flow edge to the single cEco index it names, erroring with the offending name when it resolves to no pool or to more than one.
SindbadTEM.Processes.cFlowNamePosition Method
cFlowNamePosition(approach_name, pool_names, pool_name, edge)Resolve one end of a flow edge to the single position it holds in pool_names, erroring with the offending name when it is absent or repeated.
Mirrors cFlowEdgeIndex, which does the same against helpers.pools.zix at run time. A name spanning more than one position is a group, an alias, or a multi-layer pool, and an edge naming one would expand into a cross product of links rather than the single link it reads as.
SindbadTEM.Processes.cFlowStructure Method
cFlowStructure(params::cCycleBase, cEco, helpers)Resolve an approach's cFlowEdges against the configured pool structure, returning (c_flow_order, c_taker, c_giver, pool_names, flow_edges, c_flow_taker_turnover_rank, c_flow_A_vec, c_flow_QP_vec, c_flow_ME_vec).
Notes:
pool_namesiscEco_index => pool_namepairs;flow_edgesisflow_order => (giver_name => taker_name)pairs, one per flow.c_flow_A_vec,c_flow_QP_vecandc_flow_ME_vecare allocated here, neutral and one per flow, since their length and order come from the topology resolved here rather than from anycFlow,cQualityPartition, orcMicrobialEfficiencyapproach.Flows are sorted by
(giver, taker)regardless of declaration order; this is also the index order ofc_flow_A_vec,c_flow_QP_vec,c_flow_ME_vec, and thed_cFlowoutput dimension.Errors on an edge naming a pool the structure lacks, an edge naming a group or alias instead of a leaf pool, or a duplicated edge.
SindbadTEM.Processes.calcPropsSaxton1986 Method
calculates the soil hydraulic properties based on Saxton 1986
Extended help
sourceSindbadTEM.Processes.calcPropsSaxton2006 Method
calculates the soil hydraulic properties based on Saxton 2006
Inputs:
: texture-based parameters
info
land.properties.sp_[clay/sand]: in fraction
sl: soil layer to calculate property for
Outputs:
hydraulic conductivity [k], matric potention [ψ] & porosity (θ) at saturation [Sat], field capacity [_fc], & wilting point ( w_wp)
properties of moisture-retention curves: (α & β)
Modifies:
Extended help
References:
- Saxton, K. E., & Rawls, W. J. (2006). Soil water characteristic estimates by texture & organic matter for hydrologic solutions. Soil science society of America Journal, 70[5], 1569-1578.
Versions:
- 1.0 on 22.11.2019 [skoirala | @dr-ko]:
Created by
- skoirala | @dr-ko
Notes:
_fc: Field Capacity moisture [33 kPa], #v
PAW: Plant Avail. moisture [33-1500 kPa, matric soil], #v
PAWB: Plant Avail. moisture [33-1500 kPa, bulk soil], #v
SAT: Saturation moisture [0 kPa], #v
w_wp: Wilting point moisture [1500 kPa], #v
SindbadTEM.Processes.carbonPoolConfiguration Method
carbonPoolConfiguration(name::Symbol)Resolve a CarbonPoolConfiguration by name. Errors with what was tried rather than surfacing an UndefVarError or silently returning nothing.
SindbadTEM.Processes.compute Method
compute(params<:LandEcosystem, forcing, land, helpers)Update the model state and variables in time using defined and precomputed objects.
Description
The compute function is responsible for advancing the state of a SINDBAD model or approach in time. It uses previously defined and precomputed variables, along with updated forcing data, to calculate the time-dependent changes in the land model state. This function ensures that the model evolves dynamically based on the latest inputs and precomputed states.
Arguments
params: The parameter structure for the specific SINDBAD process or approach.forcing: External forcing data required for the process or approach.land: The land model state, which includes pools, diagnostics, and properties.helpers: Additional helper functions or data required for computations.
Returns
- The updated
landmodel state with time-dependent changes applied.
Behavior
For each SINDBAD process or approach, the
computefunction updates the land model state based on the specific requirements of the process or approach.It may include operations like updating pools, recalculating fluxes, or modifying diagnostics based on time-dependent forcing and precomputed variables.
This function is typically called iteratively to simulate the temporal evolution of the process.
Example
# Example usage for a specific model
land = compute(params::ambientCO2_constant, forcing, land, helpers)Notes:
The compute function is essential for SINDBAD models and approaches that require dynamic updates to the land model state over time. It ensures that the model evolves consistently with the defined and precomputed variables, as well as the latest forcing data. This function is a core component of the SINDBAD framework's time-stepping process
sourceSindbadTEM.Processes.define Method
define(params<:LandEcosystem, forcing, land, helpers)Define and initialize arrays and variables for a SINDBAD model or approach.
Description
The define function is responsible for defining and initializing arrays for variables of pools or states that are required for a SINDBAD model or approach. It is typically called once to set up memory-allocating variables whose values can be overwritten during model computations.
Arguments
params: The parameter structure for the specific SINDBAD model or approach.forcing: External forcing data required for the model or approach.land: The land model state, which includes pools, diagnostics, and properties.helpers: Additional helper functions or data required for initialization.
Returns
- The updated
landmodel state with defined arrays and variables.
Behavior
For each SINDBAD model or approach, the
definefunction initializes arrays and variables based on the specific requirements of the model or approach.It may include operations like unpacking parameters, defining arrays, or setting default values for variables.
This function is typically used to prepare the land model state for subsequent computations.
It is called once at the beginning of the simulation to set up the necessary variables. So, any variable whole values are changing based on model parameters so actually be overwritten in the precompute or compute function.
SindbadTEM.Processes.define Method
define(params::vegClass, forcing, land, helpers)Shared define for every vegClass approach: packs an instance of the approach's resolved target classification into land.vegClass, so downstream consumers (e.g. vegQualityTraits_vegType) can read back which classification is active and derive their own per-classification default tables from it via getParamsPerVegType.
Declared once here, generically over vegClass, since every approach does exactly this and nothing else at define time.
SindbadTEM.Processes.defineTEM Method
defineTEM(tem_processes::LongTuple, forcing, land, model_helpers)run the precompute function of SINDBAD TEM processes to instantiate all fields of land
Arguments:
tem_processes: a list of SINDBAD TEM processes to runforcing: a forcing NT that contains the forcing time series set for ALL locationsland: a core SINDBAD NT that contains all variables for a given time step that is overwritten at every timestepmodel_helpers: helper NT with necessary objects for model run and type consistencies
SindbadTEM.Processes.defineTEM Method
defineTEM(tem_processes, forcing, land, model_helpers)run the define and precompute functions of SINDBAD TEM processes to instantiate all fields of land
Arguments:
tem_processes: a list of SINDBAD TEM processes to runforcing: a forcing NT that contains the forcing time series set for ALL locationsland: a core SINDBAD NT that contains all variables for a given time step that is overwritten at every timestepmodel_helpers: helper NT with necessary objects for model run and type consistencies
SindbadTEM.Processes.deriveFireCCTable Method
deriveFireCCTable(fine_table, coarse_pool_names, fine_configuration)Build a coarser pool-name-keyed fire combustion completeness table from a finer one. For each name in coarse_pool_names: a name fine_table already has directly is passed through unchanged; a name declared in poolAliases(fine_configuration) is averaged over its constituent pools – the same "average over however many targets this entry names" rule getParamsPerVegType uses for vegetation classifications, applied along the pool-name axis instead. A name that is neither is left out of the result and must be supplied independently afterward.
SindbadTEM.Processes.getCNfromParams Method
getCNfromParams(CN_ratio_cVeg, table, cn_scalar, helpers)Same idea as getKfromTau, for the vegetation carbon-to-nitrogen ratio: multiplies each table (GSI_CN_ratio/CASA_CN_ratio) entry by cn_scalar directly, with no turnover-time inversion, writing into CN_ratio_cVeg. Only the single-scalar form exists, since every cCycleBase approach applies one shared CN_ratio_scalar across all pools.
SindbadTEM.Processes.getFireCCFromParams Method
getFireCCFromParams(c_fire_ccMin, c_fire_ccMax, table, scalar, helpers)Same idea as getKfromTau/getCNfromParams, but scattering a two-component (ccMin, ccMax) pair per pool instead of a single scalar – table's entries are (ccMin, ccMax, weight) triples (CASA_FIRE_CC_VANDERWERF/ GSI_FIRE_CC_VANDERWERF, resolved for the active configuration via fireCCTable); weight, a reserved autoregressive filter weight, is intentionally not read here. Both components are scaled by the same shared scalar and written into c_fire_ccMin/c_fire_ccMax via repElem.
SindbadTEM.Processes.getKfromTau Method
getKfromTau(c_eco, table, scalar, helpers)Multiply each pool in table (a per-pool-name NamedTuple mapping to a turnover time, e.g. GSI_TAU_DEFAULT/CASA_TAU_NON_VEG_POOLS) by one(T) / T(value) * scalar, T being eltype(c_eco), writing the result into c_eco at that pool's cEco index via repElem. scalar is either one value applied to every pool or a per-pool-name NamedTuple with the same keys as table, dispatched on scalar's type.
Notes:
table's entries areFloat64literals regardless of the approach's working precision, sovalueis converted toTbefore use. Without this, the division promotes toFloat64and writing that into anSVector{N,Float32}viarepElemsilently widens the whole array from the first loop iteration on, making the function's return type an inferred union of the two element types.Used by
cCycleBase_GSI,cCycleBase_GSI_PlantForm,cCycleBase_MGMTandcCycleBase_CASA; the target array and whether the scalar varies by pool differ by approach, the loop does not.
SindbadTEM.Processes.getModelDocString Function
getModelDocString()Generate a base docstring for a SINDBAD process or approach.
Description
This function dynamically generates a base docstring for a SINDBAD process or approach by inspecting its purpose, parameters, methods, and input/output variables. It uses the stack trace to determine the calling context and retrieves the appropriate information for the process or approach.
Arguments
- None (uses the stack trace to determine the calling context).
Returns
- A string containing the generated docstring for the process or approach.
Behavior
If the caller is a process, it generates a docstring with the process's purpose and its subtypes (approaches).
If the caller is an approach, it generates a docstring with the approach's purpose, parameters, and methods (
define,precompute,compute,update), including their inputs and outputs.
Methods
getModelDocString(): Determines the calling context using the stack trace and generates the appropriate docstring.getModelDocString(modl_appr): Generates a docstring for a specific process or approach.getModelDocStringForModel(modl): Generates a docstring for a SINDBAD process, including its purpose and subtypes.getApproachDocString(appr): Generates a docstring for a SINDBAD approach, including its purpose, parameters, and methods.getModelDocStringForIO(doc_string, io_list): Appends input/output details to the docstring for a given list of variables.
SindbadTEM.Processes.getSindbadModelOrder Method
getSindbadModelOrder(model_name; all_models=standard_sindbad_model)Return the default order of a SINDBAD model in the model list.
Arguments
model_name: Name of the modelall_models: The list of all models (default:standard_sindbad_model)
Examples
julia> # Get the order of a model
julia> # getSindbadModelOrder(:gpp)SindbadTEM.Processes.getSindbadModels Method
getSindbadModels(; all_models=standard_sindbad_model)Return a dictionary of SINDBAD models and their approaches.
Arguments
all_models: The list of all models (default:standard_sindbad_model)
Returns
- An
OrderedDictmapping model names to lists of approach names
Examples
julia> # Get all models and approaches
julia> # models_dict = getSindbadModels()SindbadTEM.Processes.getTakerTurnoverRank Method
getTakerTurnoverRank(
c_flow_taker_turnover_rank,
c_flow_order,
c_giver,
c_taker,
c_eco_k_base,
cVeg,
)Classify each carbon-flow taker by turnover relative to the other non-vegetation taker of the same giver. The returned flow-aligned rank is:
1: faster of two non-vegetation takers;-1: slower of two non-vegetation takers;0: the flow is not a two-taker quality partition (including flows to vegetation and givers with one non-vegetation taker).
Only non-vegetation takers participate in the count. For every giver that has a non-vegetation taker, the number of non-vegetation takers must therefore be one or two; more than two is an invalid quality-partition topology. Two takers with equal base turnover rates are also invalid because their rank is undefined.
sourceSindbadTEM.Processes.giverOutflowSum Method
giverOutflowSum(c_flow_A_vec, c_giver, giv) sum of the flow vector over every flow whose giver pool is giv
sourceSindbadTEM.Processes.includeApproaches Method
includeApproaches(modl, dir)Include all approach files for a given SINDBAD process.
Description
This function dynamically includes all approach files associated with a specific SINDBAD process. It searches the specified directory for files matching the naming convention <model_name>_*.jl and includes them into the current module.
Arguments
modl: The SINDBAD process for which approaches are to be included.dir: The directory where the approach files are located.
Behavior
The function filters files in the specified directory to find those that match the naming convention
<model_name>_*.jl.Each matching file is included using Julia's
includefunction.
Example
# Include approaches for the `ambientCO2` process
includeApproaches(ambientCO2, "/path/to/approaches")SindbadTEM.Processes.lightLimitedCO2 Method
lightLimitedCO2(ci, Γ_star, t_two, t_three)CO2 dependence m = (ci - Γ_) / (ci + 2Γ_) of the light limited rate of C3 photosynthesis and its sensitivity s = d ln m / d ln χ to the ratio of leaf internal to ambient CO2. Both are zero when ci is at or below Γ*.
sourceSindbadTEM.Processes.precompute Method
precompute(params<:LandEcosystem, forcing, land, helpers)Update defined variables and arrays with new realizations of a SINDBAD model or approach.
Description
The precompute function is responsible for updating previously defined arrays, variables, or states with new realizations of a SINDBAD model or approach. It uses updated parameters, forcing data, and helper functions to modify the land model state. This function ensures that the model is prepared for subsequent computations with the latest parameter values and external inputs.
Arguments
params: The parameter structure for the specific SINDBAD model or approach.forcing: External forcing data required for the model or approach.land: The land model state, which includes pools, diagnostics, and properties.helpers: Additional helper functions or data required for updating variables.
Returns
- The updated
landmodel state with modified arrays and variables.
Behavior
For each SINDBAD model or approach, the
precomputefunction updates variables and arrays based on the specific requirements of the model or approach.It may include operations like recalculating variables, applying parameter changes, or modifying arrays to reflect new realizations of the model.
This function is typically used to prepare the land model state for time-dependent computations.
Example
# Example usage for a specific model
land = precompute(params::ambientCO2_constant, forcing, land, helpers)Extended help
The precompute function is essential for SINDBAD models and approaches that require dynamic updates to variables and arrays based on new parameter values or forcing data. It ensures that the land model state is properly updated and ready for further computations, such as compute or update.
sourceSindbadTEM.Processes.precompute Method
precompute(params::vegClass, forcing, land, helpers)Shared precompute for every vegClass approach: resolves land.states.veg_type via resolveVegType, against the approach's own vegTypeCatalog and resolved target classification, and packs the result back into land.states.
Declared once here, generically over vegClass, since the two traits (vegTypeCatalog, vegTypeClassification) are the only thing that ever varies between approaches.
SindbadTEM.Processes.resolveVegType Method
resolveVegType(::Type{X}, ::Type{Classification}, raw_code) where {X <: vegClass}Shared resolution step for every vegClass approach, in two steps:
raw_coderesolved againstX's own source catalog (vegTypeCatalog(X)) and its crosswalk to the canonicalClassification_SINDBADname;veg_type_name_sourceis the source catalog's own name for that code, kept for provenance only.The canonical name resolved against
Classification's own crosswalk (resolveVegClassification), givingveg_type_name, the name every downstream science approach reads. A no-op whenClassificationisClassification_SINDBADitself.
raw_code is land.states.veg_type, set upstream by a vegDynamics approach; no vegClass approach reads forcing or a parameter directly.
Errors, rather than clamps, when a code or name is not known, so a bad code fails at the point it was produced instead of silently aliasing to the wrong class.
sourceSindbadTEM.Processes.resolvedVegClassification Method
resolvedVegClassification(::Type{X}) where {X <: LandEcosystem}Resolve the vegTypeClassification trait's nothing default (declared in Types.jl, which cannot reference a concrete VegClassification subtype) to the canonical vocabulary, Classification_SINDBAD – the "no grouping" target every vegClass approach resolves into unless it opts into a coarser one (e.g. a _PlantForm variant).
SindbadTEM.Processes.rootZoneWStressor Method
rootZoneWStressor(soilW, w_wp, w_awc, rooted_fraction)Available water of the root zone normalized by its capacity, in [0, 1]. Each layer is weighted by rooted_fraction.
sourceSindbadTEM.Processes.setPoolPropsFromTable Method
setPoolPropsFromTable(f, acc, table::NamedTuple, zix, args...)Fold f(acc, value, ixs, Val(pool_name), args...) over every entry of table, where ixs is the zix field of the same pool name and args are passed on to f unchanged. The loop over the pool names is unrolled at compile time, so each zix field and table value keeps its concrete type. A runtime loop over pairs(table) would make the pool name a plain Symbol and box every lookup, allocating on each call.
SindbadTEM.Processes.throwError Method
throwError(land, msg) display and error msg and stop when there is inconsistency
sourceSindbadTEM.Processes.update Method
update(params<:LandEcosystem, forcing, land, helpers)Update the model pools and variables within a single time step when activated via inline_update in experiment_json.
Description
The update function is responsible for modifying the pools of a SINDBAD model or approach within a single time step. It uses the latest forcing data, precomputed variables, and defined parameters to update the pools. This means that the model pools, typically of the water cycle, are updated before the next processes are called.
Arguments
params: The parameter structure for the specific SINDBAD model or approach.forcing: External forcing data required for the model or approach.land: The land model state, which includes pools, diagnostics, and properties.helpers: Additional helper functions or data required for computations.
Returns
- The updated
landmodel pool with changes applied for the current time step.
Behavior
For each SINDBAD model or approach, the
updatefunction modifies the pools and state variables based on the specific requirements of the model or approach.It may include operations like adjusting carbon or water pools, recalculating fluxes, or updating diagnostics based on the current time step's inputs and conditions.
This function is typically called iteratively during the simulation to reflect time-dependent changes.
Example
# Example usage for a specific model
land = update(params::ambientCO2_constant, forcing, land, helpers)Notes:
The update function is essential for SINDBAD models and approaches that require dynamic updates to the land model state within a single time step. It ensures that the model accurately reflects the changes occurring during the current time step, based on the latest forcing data and precomputed variables. This function is a core component of the SINDBAD framework's time-stepping process.
sourceSindbadTEM.Processes.validateVegTypeCoverage Method
validateVegTypeCoverage()For every VegClassification subtype meant to serve as a target classification (Classification_SINDBAD itself, and any one-to-many grouping catalog such as Classification_PlantForm, identified by having at least one tuple crosswalk target), check that every canonical class is covered by at least one of that catalog's own classes, via resolveVegClassification, erroring immediately if not.
Not checked for the one-to-one source legends (Classification_MODIS_*): those are legitimately coarser or narrower than the canonical vocabulary and are only ever used as the raw-code source half of resolveVegType, never as its target.
The reverse of validateVegTypeCrosswalks: that catches a crosswalk target that does not exist; this catches a canonical class no target classification reaches.
SindbadTEM.Processes.validateVegTypeCrosswalks Method
validateVegTypeCrosswalks()For every VegClassification subtype, check that each of its vegClasses entries' canonical target (or, for a one-to-many entry, every name in it) is actually one of Classification_SINDBAD's own names, erroring immediately (naming the offending catalog and class) if not.
Run once, here, after every catalog file above is included, so a stale crosswalk target fails at package load time instead of the first time that raw code shows up in real data.
sourceSindbadTEM.TEMTypes.poolAliases Method
poolAliases(configuration)Extra zix names a configuration needs that its nesting cannot produce, (;) unless the configuration declares otherwise.
Only CASA declares any: its litter nests by compartment, so the fast/slow quality split cuts across the hierarchy. Every other structure nests litter by quality already and generates those names directly.
SindbadTEM.TEMTypes.poolAliases Method
poolAliases(::Type{CASA})The fast/slow litter grouping, which this structure's nesting cannot produce since litter nests by compartment while the fast/slow axis is quality. An alias has no backing array in land.pools, so models must iterate helpers.pools.zix.X for these names rather than reach into land.pools.X.
SindbadTEM.TEMTypes.poolStructure Method
poolStructure(name), poolAliases(name), cFlowEdges(name)
poolStructure(configuration::CarbonPoolConfiguration), ...Sister methods so a CarbonPoolConfiguration can be named by string ("GSI"), symbol (:GSI), or instance (GSI()), not only by type (GSI). Each method performs exactly one conversion and calls the next-more-resolved form: string to symbol, symbol to type via carbonPoolConfiguration, instance to its own type.
SindbadTEM.TEMTypes.poolStructure Method
poolStructure(::Type{CASA})Fourteen pools on a nested layout: roots split into fine and coarse, litter nested by compartment and then by quality, and an explicit microbial component. cEco is cVegRootFine, cVegRootCoarse, cVegWood, cVegLeaf, cLitLeafFast, cLitLeafSlow, cLitRootFineFast, cLitRootFineSlow, cLitRootCoarse, cLitWood, cMicSurf, cMicSoil, cSoilSlow, cSoilOld.
Fine-root litter carries the quality split and coarse-root litter does not, so cLitRoot nests one level deeper than the other compartments. The fast/slow quality split on the other compartments cuts across this hierarchy and is declared as poolAliases instead, the only configuration that needs any. See poolStructure(::Type{GSI}) for the shape and ordering rules that apply to every structure.
SindbadTEM.TEMTypes.poolStructure Method
poolStructure(::Type{GSI})Eight pools: vegetation split into root, wood, leaf and reserve, litter split by quality into fast and slow, and soil into slow and old. Shaped like the pools block of a model structure JSON; each leaf is (number of layers, initial value). Litter is already nested by quality, so cLitFast/cLitSlow are generated directly and this configuration needs no poolAliases.
SindbadTEM.TEMTypes.poolStructure Method
poolStructure(::Type{MGMT})The GSI structure plus a cProducts component holding harvested wood and crop carbon, 10 pools in all. Built by splatting poolStructure(GSI) in, so the two structures agree on every cEco index they share; this is why cCycleBase_MGMT reuses GSI_FLOW_EDGES unchanged. Products are decay only, with no pool-to-pool transfer, so they add no flow edges.