InlandWater
Models and Parameters
SlabLakeParameters contains the tunable lake physics parameters.
ClimaLand.InlandWater.AbstractInlandWaterModel — Type
AbstractInlandWaterModel{FT} <: ClimaLand.AbstractExpModel{FT}Abstract type for inland water models.
ClimaLand.InlandWater.SlabLakeParameters — Type
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 albedoice_albedo: Lake-ice albedoemissivity: Lake emissivityz_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
ClimaLand.InlandWater.SlabLakeParameters — Method
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.
ClimaLand.InlandWater.SlabLakeModel — Type
SlabLakeModel{FT, PS, D, BC, M} <: AbstractInlandWaterModel{FT}A slab lake model for inland water points.
parameters: Lake parametersdomain: The lake domain (surface only)boundary_conditions: Boundary conditionsinland_water_mask: Inland water mask on the surface space (fraction 0–1)
ClimaLand.InlandWater.SlabLakeModel — Method
SlabLakeModel{FT}(;
parameters,
domain,
boundary_conditions,
inland_water_mask,
)Construct a SlabLakeModel.
ClimaLand.InlandWater.SlabLakeModel — Method
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.
Inland Water Mask
ClimaLand.InlandWater.inland_water_mask — Function
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).
Boundary Conditions and Fluxes
ClimaLand.InlandWater.AtmosDrivenLakeBC — Type
AtmosDrivenLakeBC{A, B, C} <: ClimaLand.AbstractBCBoundary condition for the slab lake driven by atmospheric forcing. Same pattern as AtmosDrivenSnowBC.
atmos: Atmospheric forcingradiation: Radiative forcingprognostic_land_components: Prognostic land components present
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.
Lake Parameterizations
ClimaLand.InlandWater.lake_energy_at_freezing — Function
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.
ClimaLand.InlandWater.lake_liquid_fraction — Function
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.
ClimaLand.InlandWater.lake_energy_from_temperature — Function
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.
ClimaLand.InlandWater.lake_temperature — Function
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.
ClimaLand.InlandWater.lake_volumetric_internal_energy — Function
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.
ClimaLand.InlandWater.lake_runoff_energy_flux — Function
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.
ClimaLand.InlandWater.lake_surface_albedo — Function
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.
ClimaLand.InlandWater.lake_sediment_heat_flux — Function
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
ClimaLand.InlandWater.lake_specific_humidity — Function
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.