Snow Model
Snow Parameters
ClimaLand.Snow.SnowParameters
— TypeSnowParameters{FT <: AbstractFloat, PSE}
A struct for storing parameters of the SnowModel
.
Note that in our current implementation of runoff, a physical timescale is required and computed using Ksat and the depth of the snow. For shallow snowpacks, this will fall below the timestep of the model. For that reason, we pass the timestep of the model as a parameter, and take the larger of the timestep and the physical timescale as the value used in the model. Future implementations will revisit this.
density
: Choice of parameterization for snow densityz_0m
: Roughness length over snow for momentum (m)z_0b
: Roughness length over snow for scalars (m)α_snow
: Albedo of snow (unitless)ϵ_snow
: Emissivity of snow (unitless)θ_r
: Volumetric holding capacity of water in snow (unitless)Ksat
: Hydraulic conductivity of wet snow (m/s)κ_ice
: Thermal conductivity of ice (W/m/K)Δt
: Timestep of the model (s)ΔS
: Parameter to prevent dividing by zero when computing snow temperature (m)earth_param_set
: Clima-wide parameters
Snow Functions of State
ClimaLand.Snow.specific_heat_capacity
— Functionspecific_heat_capacity(q_l::FT,
parameters::SnowParameters{FT}
) where {FT}
Computes the specific heat capacity of the snow, neglecting any contribution from air in the pore spaces, given the liquid water mass fraction q_l and other parameters.
ClimaLand.Snow.snow_surface_temperature
— Functionsnow_surface_temperature(T::FT) where {FT}
Returns the snow surface temperature assuming it is the same as the bulk temperature T.
Missing docstring for ClimaLand.Snow.snow_depth
. Check Documenter's build log for details.
ClimaLand.Snow.snow_thermal_conductivity
— Functionsnow_thermal_conductivity(ρ_snow::FT,
parameters::SnowParameters{FT},
) where {FT}
Computes the thermal conductivity, given the density of the snow, according to Equation 5.33 from Bonan's textbook, which in turn is taken from Jordan (1991).
We have adjusted the original equation to make the coefficients non-dimensional by multiplying by the first by x = ρice/ρice and the second by x², with ρ_ice in kg/m³.
When ρsnow = ρice, we recover κsnow = κice.
ClimaLand.Snow.snow_bulk_temperature
— Functionsnow_bulk_temperature(U::FT,
S::FT,
q_l::FT,
parameters::SnowParameters{FT}) where {FT}
Computes the bulk snow temperature from the snow water equivalent S, energy per unit area U, liquid water fraction ql, and specific heat capacity cs, along with other needed parameters.
If there is no snow (U = S = q_l = 0), the bulk temperature is the reference temperature, which is 273.16K.
ClimaLand.Snow.maximum_liquid_mass_fraction
— Functionmaximum_liquid_mass_fraction(ρ_snow::FT, T::FT, parameters::SnowParameters{FT}) where {FT}
Computes the maximum liquid water mass fraction, given the density of the snow ρ_snow and other parameters.
ClimaLand.Snow.runoff_timescale
— Functionrunoff_timescale(z::FT, Ksat::FT, Δt::FT) where {FT}
Computes the timescale for liquid water to percolate and leave the snowpack, given the depth of the snowpack z and the hydraulic conductivity Ksat.
ClimaLand.Snow.compute_water_runoff
— Functioncompute_energy_runoff(S::FT, S_l::FT, T::FT, parameters) where {FT}
Computes the rate of change in the snow water equivalent S due to loss of liquid water (runoff) from the snowpack.
Runoff occurs as the snow melts and exceeds the water holding capacity.
ClimaLand.Snow.energy_from_q_l_and_swe
— Functionenergy_from_q_l_and_swe(S::FT, q_l::FT, parameters) where {FT}
A helper function for compute the snow energy per unit area, given snow water equivalent S, liquid fraction q_l, and snow model parameters.
This assumes that the snow is at the freezing point.
ClimaLand.Snow.energy_from_T_and_swe
— Functionenergy_from_T_and_swe(S::FT, T::FT, parameters) where {FT}
A helper function for compute the snow energy per unit area, given snow water equivalent S, bulk temperature T, and snow model parameters.
The liquid mass fraction is assumed to be zero if T<=T_freeze, and 1 otherwise.
ClimaLand.Snow.snow_cover_fraction
— Functionsnow_cover_fraction(x::FT; z0 = FT(1e-1), α = FT(2))::FT where {FT}
Returns the snow cover fraction from snow depth z
, from Wu, Tongwen, and Guoxiong Wu. "An empirical formula to compute snow cover fraction in GCMs." Advances in Atmospheric Sciences 21 (2004): 529-535.
Computing fluxes for snow
ClimaLand.Snow.snow_boundary_fluxes!
— Functionsnow_boundary_fluxes!(bc::AtmosDrivenSnowBC, model::SnowModel, Y, p, t)
Updates in place various volumetric water flux (m/s) and energy flux (W/m^2) terms for the snow model:
- p.snow.turbulent fluxes (latent, sensible, and evaporative fluxes)
- p.snow.R_n (radiative fluxes)
- p.snow.totalwaterflux
- p.snow.totalenergyflux
The two latter fluxes also include contributions from fluxes due to melt and precipitation, but note that precipitation and melt flux are not computed or updated in snow_boundary_fluxes
currently. Instead, they are updated in update_aux!
, which happens prior to the snow_boundary_fluxes!
call, and used in the snow_boundary_fluxes!
call.
This function calls the turbulent_fluxes!
and net_radiation!
functions, which use the snow surface conditions as well as the atmos and radiation conditions in order to compute the surface fluxes using Monin Obukhov Surface Theory. It also accounts for the presence of other components, if run as part of an integrated land model, and their effect on boundary conditions.
snow_boundary_fluxes!(
bc::AtmosDrivenSnowBC,
prognostic_land_components::Val{(:snow,)},
model::SnowModel{FT},
Y,
p,
t,
) where {FT}
Computes the boundary fluxes for the snow model in standalone mode.
The ground heat flux is assumed to be zero, and the snow surface is assumed to be bare (no vegetation).
snow_boundary_fluxes!(
bc::AtmosDrivenSnowBC,
prognostic_land_components::Val{(:snow, :soil)},
model::SnowModel{FT},
Y,
p,
t,
) where {FT}
A method of snow_boundary_fluxes!
which computes the boundary fluxes for the snow model accounting for a heat flux between the soil and snow.
The snow surface is assumed to be bare (no vegetation).
Currently this is almost identical to the method for snow alone, except for the inclusion of the ground heat flux (precomputed by the integrated land model). However, this will change more if e.g. we allow for transmission of radiation through the snowpack.
ClimaLand.Snow.phase_change_flux
— Function phase_change_flux(U::FT, S::FT, q_l::FT, energy_flux::FT, parameters) where {FT}
Computes the volume flux of liquid water undergoing phase change, given the applied energy flux and current state of U,S,q_l.
ClimaLand.Snow.AtmosDrivenSnowBC
— TypeAtmosDrivenSnowBC{
A <: AbstractAtmosphericDrivers,
B <: AbstractRadiativeDrivers,
C::Tuple
} <: AbstractSnowBC
A struct used to specify the snow fluxes, referred to as ``boundary conditions", at the surface and bottom of the snowpack, for water and energy.
These fluxes include turbulent surface fluxes computed with Monin-Obukhov theory, and radiative fluxes.
atmos
: The atmospheric conditions driving the modelradiation
: The radiative fluxes driving the modelprognostic_land_components
: Prognostic land components present