InlandWater

Models and Parameters

SlabLakeParameters contains the tunable lake physics parameters.

ClimaLand.InlandWater.SlabLakeParametersType
SlabLakeParameters{FT, PSE}

Fixed-depth slab lake parameters. The slab lake keeps a constant depth while evolving its energy prognostically.

The conductance G (W m⁻² K⁻¹) represents the lake-side thermal conductance, i.e. G = κlake / depth, combining lake thermal conductivity and depth into a single tunable parameter. The sediment heat flux is: Qsed = -Geff * (Tlake - Tsoil) where Geff = 1 / (1/G + Δzsoil/(2*κsoil))

  • depth: Mixed-layer depth of the slab lake (m)

  • conductance: Lake–sediment conductance (W m⁻² K⁻¹)

  • liquid_albedo: Open-water albedo

  • ice_albedo: Lake-ice albedo

  • emissivity: Lake emissivity

  • z_0m: Roughness length for momentum over lake water/ice (m)

  • z_0b: Roughness length for scalars over lake water/ice (m)

  • earth_param_set: Physical constants and clima-wide parameters

source
ClimaLand.InlandWater.SlabLakeParametersMethod
SlabLakeParameters(
    toml_dict::CP.ParamDict;
    depth = toml_dict["slab_lake_depth"],
    conductance = toml_dict["slab_lake_conductance"],
    liquid_albedo = toml_dict["slab_lake_liquid_albedo"],
    ice_albedo = toml_dict["slab_lake_ice_albedo"],
    emissivity = toml_dict["slab_lake_emissivity"],
    z_0m = toml_dict["slab_lake_z_0m"],
    z_0b = toml_dict["slab_lake_z_0b"],
)

TOML dictionary constructor for SlabLakeParameters.

source
ClimaLand.InlandWater.SlabLakeModelType
SlabLakeModel{FT, PS, D, BC, M} <: AbstractInlandWaterModel{FT}

A slab lake model for inland water points.

  • parameters: Lake parameters

  • domain: The lake domain (surface only)

  • boundary_conditions: Boundary conditions

  • inland_water_mask: Inland water mask on the surface space (fraction 0–1)

source
ClimaLand.InlandWater.SlabLakeModelMethod
SlabLakeModel(
    FT,
    domain,
    forcing,
    toml_dict::CP.ParamDict;
    inland_water_mask = inland_water_mask(domain.space.surface),
    prognostic_land_components = (:lake,),
    parameters = SlabLakeParameters(toml_dict),
)

Convenience constructor for SlabLakeModel that builds the model from a TOML parameter dictionary, following the same pattern as for other component models. The default inland water mask is used.

source

Inland Water Mask

ClimaLand.InlandWater.inland_water_maskFunction
inland_water_mask(
    surface_space;
    filepath = ClimaLand.Artifacts.imerg_landsea_mask_path(),
    varname = "landseamask",
    threshold = 80.0,
    landsea_mask = nothing,
    latitude_bounds = (-60.0, 60.0),
    regridder_type = :InterpolationsRegridder,
    extrapolation_bc = (
        Interpolations.Periodic(),
        Interpolations.Flat(),
        Interpolations.Flat(),
    ),
   interpolation_method = Interpolations.Constant()
)

Reads a water-fraction dataset from filepath (defaults to the IMERG land-sea mask artifact), regrids to the surface_space, and identifies inland water points. The surface_space must have latitude and longitude as dimensions, without a z dimension.

A point is classified as inland water if its water fraction is above threshold and its latitude is within latitude_bounds. Points outside the latitude bounds (e.g. polar ice shelves) are never classified as inland water, since the slab lake treatment is not appropriate for ice sheets.

If a landsea_mask is provided (binary field: 1 = land, 0 = ocean), only points that are classified as land in the landsea_mask but have a water fraction above threshold are marked as inland water. This ensures ocean points are not double-counted.

The IMERG land-sea mask (landseamask variable) encodes water fraction: 0 = pure land, 100 = pure water/ocean. A threshold of 80 means any grid point with > 80% water fraction that is inside the simulation's land domain and within the latitude bounds is treated as inland water.

Returns a binary ClimaCore Field: 1 = inland water, 0 = land/ocean. Returns nothing for Point/Column domains (no horizontal extent).

source

Boundary Conditions and Fluxes

ClimaLand.InlandWater.AtmosDrivenLakeBCType
AtmosDrivenLakeBC{A, B, C} <: ClimaLand.AbstractBC

Boundary condition for the slab lake driven by atmospheric forcing. Same pattern as AtmosDrivenSnowBC.

  • atmos: Atmospheric forcing

  • radiation: Radiative forcing

  • prognostic_land_components: Prognostic land components present

source
ClimaLand.InlandWater.lake_boundary_fluxes!Method
lake_boundary_fluxes!(
    bc::AtmosDrivenLakeBC,
    prognostic_land_components::Val{(:lake,)},
    model::SlabLakeModel{FT},
    Y,
    p,
    t,
) where {FT}

Compute the lake surface boundary fluxes, with the option to dispatch off of the value of the prognostic_land_components.

For integrated models, the only change is that a sediment heat flux is added. It is assumed to be zero here. Future interactions with the snow component will also be handled there.

source

Lake Parameterizations

ClimaLand.InlandWater.lake_energy_at_freezingFunction
lake_energy_at_freezing(q_l::FT, params::SlabLakeParameters{FT}) where {FT}

Returns the slab energy per unit area (J m⁻²) at the freezing point for a given liquid fraction q_l. When q_l = 0 the slab is fully frozen; when q_l = 1 it is fully liquid at the freezing temperature.

source
ClimaLand.InlandWater.lake_liquid_fractionFunction
lake_liquid_fraction(U::FT, params::SlabLakeParameters{FT}) where {FT}

Diagnoses the liquid fraction q_l ∈ [0, 1] from the prognostic slab energy U (J m⁻²). Returns 0 when the lake is fully frozen, 1 when fully liquid, and interpolates linearly during the phase-change interval.

source
ClimaLand.InlandWater.lake_energy_from_temperatureFunction
lake_energy_from_temperature(T::FT, params::SlabLakeParameters{FT}) where {FT}

Returns the slab energy per unit area (J m⁻²) for a given temperature T (K). Below the freezing point the slab is treated as pure ice; above it, as pure liquid.

source
ClimaLand.InlandWater.lake_temperatureFunction
lake_temperature(U::FT, q_l::FT, params::SlabLakeParameters{FT}) where {FT}

Diagnoses the lake temperature (K) from the prognostic slab energy U (J m⁻²) and liquid fraction q_l. During the phase-change interval (0 < q_l < 1) the temperature is clamped to the freezing point.

source
ClimaLand.InlandWater.lake_volumetric_internal_energyFunction
lake_volumetric_internal_energy(T::FT, q_l::FT, earth_param_set) where {FT}

Returns the volumetric internal energy (J m⁻³) of the lake water at temperature T (K) and liquid fraction q_l, referenced to T₀. Used to compute the energy carried away by runoff.

source
ClimaLand.InlandWater.lake_runoff_energy_fluxFunction
lake_runoff_energy_flux(runoff::FT, T::FT, q_l::FT, earth_param_set) where {FT}

Returns the energy flux (W m⁻²) carried by lake runoff. The runoff volume flux (m s⁻¹) is multiplied by the volumetric internal energy of the lake water at its current temperature and liquid fraction.

source
ClimaLand.InlandWater.lake_surface_albedoFunction
lake_surface_albedo(q_l::FT, params::SlabLakeParameters{FT}) where {FT}

Returns the lake surface albedo as a liquid-fraction-weighted blend of the open-water (liquid_albedo) and ice (ice_albedo) albedos.

source
ClimaLand.InlandWater.lake_sediment_heat_fluxFunction
lake_sediment_heat_flux(T_lake::FT, T_soil::FT, κ_soil::FT, Δz_soil::FT, params::SlabLakeParameters{FT}) where {FT}

Compute sediment heat flux (W m⁻²) using a series-conductance model: Qsed = -Geff * (Tlake - Tsoil) where Geff = 1 / (1/G + Δzsoil/(2*κ_soil)) combines the lake-side conductance G (from params) and the half-cell soil conductance.

In standalone runs, this is not computed and set to zero in simulations

source
ClimaLand.InlandWater.lake_specific_humidityFunction
lake_specific_humidity(T_sfc::FT, q_l::FT, ρ_sfc::FT, earth_param_set) where {FT}

Returns the surface specific humidity (kg kg⁻¹) over the lake as a liquid-fraction-weighted blend of the saturation specific humidities over ice and liquid water at temperature T_sfc and surface air density ρ_sfc.

source