Biomass
Parameterizations
ClimaLand.Canopy.PrescribedBiomassModel — Type
struct PrescribedBiomassModel{FT, PSAI <: PrescribedAreaIndices, RDTH <: Union{FT, ClimaCore.Fields.Field}} <: AbstractBiomassModel{FT}A prescribed biomass model where LAI, SAI, RAI, rooting depth, and height are prescribed.
In global run with patches of bare soil, you can "turn off" the canopy model (to get zero root extraction, zero absorption and emission, zero transpiration and sensible heat flux from the canopy), by setting:
LAI = SAI = RAI = 0.
plant_area_index: The plant area index model for LAI, SAI, RAIrooting_depth: Rooting depth parameter (m) - a characteristic depth below which 1/e of the root mass liesheight: Canopy height (m) - can be scalar (uniform) or spatially-varying Field
ClimaLand.Canopy.PrescribedBiomassModel — Method
PrescribedBiomassModel{FT}(
domain,
LAI::AbstractTimeVaryingInput,
toml_dict::CP.ParamDict;
SAI::FT = toml_dict["SAI"],
RAI::FT = toml_dict["RAI"],
rooting_depth = clm_rooting_depth(domain.space.surface),
height = toml_dict["canopy_height"]
) where {FT <: AbstractFloat}Creates a PrescribedBiomassModel on the provided domain, using parameters from toml_dict.
The required argument LAI should be a ClimaUtilities TimeVaryingInput for leaf area index.
The following default parameters are used:
- SAI = 0 (m2/m2) - stem area index
- RAI = 1 (m2/m2) - root area index
- height = 1m
ClimaLand.Canopy.PrescribedBiomassModel — Method
PrescribedBiomassModel{FT}(;LAI::AbstractTimeVaryingInput,
SAI::FT,
RAI::FT,
rooting_depth,
height) where {FT}An outer constructor to help set up the PrescribedBiomassModel from LAI, SAI, and RAI directly, instead of requiring the user to make the area index object first; rooting_depth and height are also required.
Height can be either:
- A scalar FT value (uniform height across domain)
- A ClimaCore.Fields.Field (spatially-varying height)
ClimaLand.Canopy.PrescribedAreaIndices — Type
PrescribedAreaIndices{FS <: Union{AbstractFloat, ClimaCore.Fields.Field}, F <: AbstractTimeVaryingInput}
A struct containing the area indices of the plants at a specific site; LAI varies in time, while SAI and RAI are fixed in time and can either be a scalar (spatially uniform) or a ClimaCore Field (spatially varying).
LAI: A function of simulation timetgiving the leaf area index (LAI; m2/m2)SAI: The constant-in-time stem area index (SAI; m2/m2), scalar or FieldRAI: The constant-in-time root area index (RAI; m2/m2), scalar or Field
ClimaLand.Canopy.PrescribedAreaIndices — Method
PrescribedAreaIndices(
LAI::AbstractTimeVaryingInput,
SAI,
RAI,
)An outer constructor for setting the PrescribedAreaIndices given LAI, SAI, and RAI. SAI and RAI may be scalars or ClimaCore Fields.
ClimaLand.Canopy.prescribed_lai_era5 — Function
prescribed_lai_era5(era5_lai_ncdata_path,
era5_lai_cover_ncdata_path,
surface_space,
start_date,
earth_param_set;
time_interpolation_method = LinearInterpolation(PeriodicCalendar()),
regridder_type = :InterpolationsRegridder,
interpolation_method = Interpolations.Constant(),)A helper function which constructs the TimeVaryingInput object for Leaf Area Index, from a file path pointing to the ERA5 LAI data in a netcdf file, a file path pointing to the ERA5 LAI cover data in a netcdf file, the surfacespace, the start date, and the earthparam_set.
This currently one works when a single file is passed for both the era5 lai and era5 lai cover data.
The ClimaLand default is to use nearest neighbor interpolation, but linear interpolation is supported by passing interpolation_method = Interpolations.Linear().
ClimaLand.Canopy.prescribed_lai_modis — Function
prescribed_lai_modis(surface_space,
start_date
stop_date,
earth_param_set;
time_interpolation_method = LinearInterpolation(),
regridder_type = :InterpolationsRegridder,
interpolation_method = Interpolations.Constant(),
modis_lai_ncdata_path = nothing,
context = ClimaComms.context(surface_space))A helper function which constructs the TimeVaryingInput object for Leaf Area Index using MODIS LAI data; requires the surfacespace, the start and stop dates, and the earthparam_set.
The ClimaLand default is to use nearest neighbor interpolation, but linear interpolation is supported by passing interpolation_method = Interpolations.Linear().
If modis_lai_ncdata_path is provided, it will be used directly. Otherwise, the path will be inferred from the start and stop dates.
ClimaLand.Canopy.prescribed_climatological_lai_modis — Function
prescribed_climatological_lai_modis(surface_space,
time_interpolation_method = LinearInterpolation(PeriodicCalendar(Year(1), DateTime(2000))),
regridder_type = :InterpolationsRegridder,
interpolation_method = Interpolations.Constant(),
context = ClimaComms.context(surface_space))A helper function which constructs the TimeVaryingInput object for Leaf Area Index using MODIS climatological LAI data; requires the surface_space.
The ClimaLand default is to use nearest neighbor interpolation, but linear interpolation is supported by passing interpolation_method = Interpolations.Linear().
ClimaLand.Canopy.update_biomass! — Function
update_biomass!(
p,
Y,
t,
component::PrescribedBiomassModel{FT},
canopy,
) where {FT}Sets the area indices pertaining to their values at time t.
Note that we clip all values of LAI below 0.05 to zero. This is because we currently run into issues when LAI is of order eps(FT) in the SW radiation code. Please see Issue #644 or PR #645 for details. For now, this clipping is similar to what CLM and NOAH MP do.
update_biomass!(
p,
Y,
t,
component::ZhouOptimalLAIModel{FT},
canopy,
) where {FT}Updates the optimal-LAI cache from the prognostic state in Y: sets SAI and RAI to their prescribed values; derives f0, vpd_gs and GSL from the trailing climate totals; sets the canopy composition (tree, C3 grass, C4 grass shares) from the C3/C4 competition on the trailing per-pathway potential GPP (A0c3_annual, A0c4_annual) and realized C3 GPP (GPPc3_annual); and sets the leaf area index used by the rest of the canopy from the prognostic LAI, clipped below 0.05 and zeroed where a lake is present (mask_biomass!). This runs first in update_aux, before radiative transfer and photosynthesis read the area index and C3 fraction.
ClimaLand.Canopy.mask_biomass! — Method
mask_biomass!(p, prognostic_land_components)Default method of setting LAI/RAI/SAI to zero where there cannot be canopy; does nothing.
Currently, this is only does something when a lake model is included in integrated models, as we cannot have vegetation over a lake, and the lake masks may not be consistent with the biomass model.
ClimaLand.Canopy.mask_biomass! — Method
mask_biomass!(
p,
prognostic_land_components::Union{
Val{(:canopy, :lake, :snow, :soil, :soilco2)},
Val{(:canopy, :lake, :snow, :soil)},},
)Mask out areas where there is a lake by setting LAI, RAI, and SAI to zero. Called in canopy update_aux!.
Currently treats the lake mask as 1 or 0. It is TBD how to clip LAI, SAI RAI - or if it is needed - if the lake fraction is not binary.