Snow Model

Snow Parameters

ClimaLand.Snow.SnowParametersType
SnowParameters{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.

  • ρ_snow: Density of snow (kg/m^3)

  • z_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)

  • ρcD_g: Areal specific heat of ground interacting with snow (J/m^2/K)

  • earth_param_set: Clima-wide parameters

source

Snow Functions of State

ClimaLand.Snow.specific_heat_capacityFunction
specific_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.

source
ClimaLand.Snow.snow_depthFunction
snow_depth(SWE::FT, ρ_snow::FT, ρ_l::FT) where {FT}

Returns the snow depth given SWE, snow density ρsnow, and the density of liquid water ρl.

source
ClimaLand.Snow.snow_thermal_conductivityFunction
snow_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).

source
ClimaLand.Snow.snow_bulk_temperatureFunction
snow_bulk_temperature(U::FT,
                      SWE::FT,
                      q_l::FT,
                      parameters::SnowParameters{FT}) where {FT}

Computes the bulk snow temperature from the snow water equivalent SWE, energy per unit area U, liquid water mass fraction ql, and specific heat capacity cs, along with other needed parameters.

If there is no snow (U = SWE = 0), the bulk temperature is the reference temperature, which is 273.16K.

source
ClimaLand.Snow.snow_liquid_mass_fractionFunction
snow_liquid_mass_fraction(U::FT, SWE::FT, parameters::SnowParameters{FT}) where {FT}

Computes the snow liquid water mass fraction, given the snow water equivalent SWE, snow energy per unit area U, and other needed parameters.

source
ClimaLand.Snow.maximum_liquid_mass_fractionFunction
maximum_liquid_mass_fraction(T::FT, ρ_snow::FT, parameters::SnowParameters{FT}) where {FT}

Computes the maximum liquid water mass fraction, given the bulk temperature of the snow T, the density of the snow ρ_snow, and parameters.

source
ClimaLand.Snow.runoff_timescaleFunction
runoff_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.

source
ClimaLand.Snow.compute_water_runoffFunction
compute_energy_runoff(S::FT, q_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.

source
ClimaLand.Snow.energy_from_q_l_and_sweFunction
energy_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.

Note that liquid water can only exist at the freezing point in this model, so temperature is not required as an input.

source
ClimaLand.Snow.energy_from_T_and_sweFunction
energy_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.

If T = Tfreeze, we return the energy as if ql = 0.

source
ClimaLand.Snow.snow_cover_fractionFunction
snow_cover_fraction(x::FT; α = FT(1e-3))::FT where {FT}

Returns the snow cover fraction, assuming it is a heaviside function at 1e-3 meters.

In the future we can play around with other forms.

source

Computing fluxes for snow

ClimaLand.Snow.snow_boundary_fluxes!Function
snow_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.

source
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).

source
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.

source
ClimaLand.Snow.AtmosDrivenSnowBCType
AtmosDrivenSnowBC{
    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 model

  • radiation: The radiative fluxes driving the model

  • prognostic_land_components: Prognostic land components present

source