Parameterizing Soil Albedo

We currently support two parameterizations for the soil albedo. These options are defined using Julia types, using simplified code, as follows. We first introduce the abstract type AbstractSoilAlbedoParameterization, and then the two albedo parameterizations are concrete examples of that abstract type:

ConstantTwoBandSoilAlbedo <: AbstractSoilAlbedoParameterization
CLMTwoBandSoilAlbedo <: AbstractSoilAlbedoParameterization

Each of these types define a method for update_albedo!, which is called in the soils tendency functions, and each stores the parameters required to compute the albedo for that parameterizations. For example, the parameterization based off of CLM's approach requires the wet and dry soil albedos in the PAR and NIR wavelength bands. For each band, the actual albedo is a linear combination of the wet and dry values, with a weight depending on the soil moisture. The method of update_albedo! for this parameterization computes this linear combination using a helper function albedo_from_moisture and ultimately sets

@. p.soil.PAR_albedo =
    albedo_from_moisture(S_sfc, PAR_albedo_dry, PAR_albedo_wet)
@. p.soil.NIR_albedo =
    albedo_from_moisture(S_sfc, NIR_albedo_dry, NIR_albedo_wet)

where S_sfc is the effective saturation at the surface.

Creating a new albedo parameterization

Suppose you want to define a new parameterization which models albedo as a linear combination of the albedos of quartz, organic matter, minerals and water, treating NIR and PAR albedos the same.

First, create the type:

struct SoilAlbedoFromComposition{FT <: AbstractFloat} <: AbstractSoilAlbedoParameterization
    α_quartz::FT
    α_minerals::FT
    α_om::FT
    α_water::FT
end

And then create the method. For now, don't worry about the other arguments and their types:

function update_albedo!(
    bc::AtmosDrivenFluxBC,
    albedo::SoilAlbedoFromComposition,
    p,
    soil_domain,
    model_parameters,
    )
    # unpack parameters of the albedo model
    (; α_quartz, α_minerals, α_om, α_water) = albedo
    # unpack composition parameters from the soil parameters
    (; ν_ss_om, ν_ss_quartz) = model_parameters
    # Extract the values at the top level
    ν_ss_om_sfc = ClimaLand.Domains.top_center_to_surface(ν_ss_om)
    ν_ss_quartz_sfc = ClimaLand.Domains.top_center_to_surface(ν_ss_quartz)
    # Extract the top layer's volumetric water content
    θ_l_sfc = ClimaLand.Domains.top_center_to_surface(p.soil.θ_l)

    # Compute the linear combination
    @. p.soil.PAR_albedo = α_water * θ_l_sfc + (1-θ_l_sfc)* (α_quartz * ν_ss_quartz_sfc + α_om * ν_ss_om_sfc + α_minerals * (1-ν_ss_om - ν_ss_quartz))
    p.soil.NIR_albedo .= p.soil.PAR_albedo
end
ClimaLand.Soil.CLMTwoBandSoilAlbedoType
 CLMTwoBandSoilAlbedo{
    FT <: AbstractFloat,
    SF <: Union{FT, ClimaCore.Fields.Field},
} <: AbstractSoilAlbedoParameterization

A parameterization for soil albedo: the soil albedo is defined in two bands (PAR and NIR), and can spatially vary or be set to scalar. However, it varies temporally due to a dependence on soil water content at the surface, via the effective saturation S(θ_sfc): α = α_wetS + α_dry(1-S)

We use a value for θ_sfc averaged over the depth albedo_calc_top_thickness. If the model resolution is such that the first layer is thicker than this depth, the value from the first layer is used.

CLM reference: Lawrence, P.J., and Chase, T.N. 2007. Representing a MODIS consistent land surface in the Community Land Model (CLM 3.0). J. Geophys. Res. 112:G01023. DOI:10.1029/2006JG000168.

source
ClimaLand.Soil.ConstantTwoBandSoilAlbedoType
ConstantTwoBandSoilAlbedo{
    SF <: Union{AbstractFloat, ClimaCore.Fields.Field},
} <: AbstractSoilAlbedoParameterization

A parameterization for soil albedo: the soil albedo is defined in two bands (PAR and NIR), can spatially vary or be set to scalar, but is assumed not to vary in time (or with water content).

source
ClimaLand.Soil.update_albedo!Function
update_albedo!(bc::AtmosDrivenFluxBC, albedo::ConstantTwoBandSoilAlbedo, p, soil_domain, model_parameters)

Updates PAR and NIR albedo using the temporally-constant parameters provided in albedo; these values may be spatially varying.

For the temporally-constant albedo model, there is no need to update the values each step, or have an allocated spot in the cache for them. This can be optimized in the future.

source
update_albedo!(bc::AtmosDrivenFluxBC, albedo::CLMTwoBandSoilAlbedo, p, soil_domain, model_parameters)

Calculates and updates PAR and NIR albedo as a function of volumetric soil water content at the top of the soil. If the soil layers are larger than the specified albedo_calc_top_thickness, the water content of the top layer is used in the calclulation. For the PAR and NIR bands,

α_band = α_{band,dry} * (1 - S_e) + α_{band,wet} * (S_e)

where S_e is the relative soil wetness above some depth, albedo_calc_top_thickness. This is a modified version of Equation (1) of:

Braghiere, R. K., Wang, Y., Gagné-Landmann, A., Brodrick, P. G., Bloom, A. A., Norton, A. J., et al. (2023). The importance of hyperspectral soil albedo information for improving Earth system model projections. AGU Advances, 4, e2023AV000910. https://doi.org/10.1029/2023AV000910

where effective saturation is used in place of volumetric soil water content. The dry and wet albedo values come from a global soil color map and soil color to albedo map from CLM.

CLM reference: Lawrence, P.J., and Chase, T.N. 2007. Representing a MODIS consistent land surface in the Community Land Model (CLM 3.0). J. Geophys. Res. 112:G01023. DOI:10.1029/2006JG000168.

source
update_albedo!(bc::AbstractEnergyHydrologyBC, _...)

Does nothing for boundary conditions where albedo is not used.

source