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.

  • density: Choice of parameterization for snow density

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

  • ΔS: Parameter to prevent dividing by zero when computing snow temperature (m)

  • 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
Missing docstring.

Missing docstring for ClimaLand.Snow.snow_depth. Check Documenter's build log for details.

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

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.

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

source
ClimaLand.Snow.maximum_liquid_mass_fractionFunction
maximum_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.

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

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.

This assumes that the snow is at the freezing point.

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.

The liquid mass fraction is assumed to be zero if T<=T_freeze, and 1 otherwise.

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

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