Snow model
This page is a work in progress. If you have any questions or notice any errors, please raise an issue.
Overview
SnowModel is a minimal standalone model of a dynamic snowpack spatially distributed over the given grid. It couples an AbstractSnow process (by default SingleLayerSnow) with a prescribed atmosphere that supplies precipitation and air temperature. It is intended primarily for unit testing of the snow physics in isolation.
Because the model is standalone, the fluxes that a full land model would obtain from the surface energy balance and the snow→soil conduction are instead prescribed input fields: the net surface heat flux surface_heat_flux, the basal conductive heat flux basal_heat_flux, and the sublimation rate (see Prescribed forcing below).
arch = CPU()
grid = ColumnGrid(arch, Float32, ExponentialSpacing(N = 3))
model = SnowModel(grid)SnowModel{Float32} on CPU()
├── grid: ColumnGrid{Float32, CPU} with dimensions (1, 1, 3)
├── snow: SingleLayerSnow{Float32, FractionalSnowCover{Float32}, ConstantSnowDensity{Float32}, PowerLawSnowThermalConductivity{Float32}, ConstantSnowHydraulics{Float32}, Terrarium.ConstantSnowAlbedo{Float32}, SnowEnergyTemperatureClosure{Float32}}
├── atmosphere: PrescribedAtmosphere{Float32, (:CO2,), RainSnow, LongShortWaveRadiation, Terrarium.SpecificHumidity, ConstantAerodynamics{Float32}, Tuple{TracerGas{Float32, :CO2}}}
├── constants: PhysicalConstants{Float32}
├── initializer: DefaultInitializer{Float32}
├── timestepper: ForwardEuler{Float32}
Terrarium.SnowModel — Type
struct SnowModel{NF, GridType<:(Terrarium.AbstractLandGrid{NF}), Snow<:Terrarium.AbstractSnow{NF}, Atmosphere<:Terrarium.AbstractAtmosphere, Initializer<:Terrarium.AbstractInitializer, Timestepper<:Terrarium.AbstractTimeStepper{NF}} <: Terrarium.AbstractSnowModel{NF, GridType<:(Terrarium.AbstractLandGrid{NF})}Minimal standalone model of a single-layer snowpack, intended for unit and differentiability testing. Couples an AbstractSnow process with a prescribed atmosphere providing precipitation and air temperature. The surface and basal heat fluxes (surface_heat_flux, basal_heat_flux) and the sublimation rate are prescribed input fields; in a coupled land model these are supplied by the surface energy balance and the snow→soil conduction.
Properties:
grid::Terrarium.AbstractLandGrid: Spatial grid typesnow::Terrarium.AbstractSnow: Snow processesatmosphere::Terrarium.AbstractAtmosphere: Near-surface atmospheric conditionsconstants::PhysicalConstants: Physical constantsinitializer::Terrarium.AbstractInitializer: State variable initializertimestepper::Terrarium.AbstractTimeStepper: Time stepper: a singleAbstractTimeStepper(e.g.ForwardEuler,Heun) or anIMEX
The prognostic and diagnostic state variables of the assembled model are
variables(model)Variables
├─ Prognostic:
├── snow_energy [J m^-2] on XY{Center, Center}
├── snow_water_equivalent [m] on XY{Center, Center}
├─ Auxiliary:
├── snow_temperature [°C] on XY{Center, Center}
├── snow_liquid_fraction [-] on XY{Center, Center}
├── snow_depth [m] on XY{Center, Center}
├── snow_cover_fraction [-] on XY{Center, Center}
├─ Inputs:
├── surface_heat_flux [W m^-2] on XY{Center, Center}
├── basal_heat_flux [W m^-2] on XY{Center, Center}
├── sublimation [m s^-1] on XY{Center, Center}
├── air_temperature [°C] on XY{Center, Center}
├── air_pressure [Pa] on XY{Center, Center}
├── windspeed [m s^-1] on XY{Center, Center}
├── specific_humidity [-] on XY{Center, Center}
├── rainfall [m s^-1] on XY{Center, Center}
├── snowfall [m s^-1] on XY{Center, Center}
├── surface_shortwave_down [W m^-2] on XY{Center, Center}
├── surface_longwave_down [W m^-2] on XY{Center, Center}
├── daytime_length [hr] on XY{Center, Center}
├── CO2 [ppm] on XY{Center, Center}
├─ Namespaces:
The two prognostic variables are the depth-integrated (column) internal energy $\bar{U}_\text{snow}$ (J/m², snow_energy) and the snow water equivalent $W_\text{snow}$ (m, snow_water_equivalent); their mass and energy balances are documented on the Snow mass balance and Snow energy balance pages.
Components
| Field | Type | Scope | Process page |
|---|---|---|---|
snow | AbstractSnow | Single-layer snowpack mass and energy balance | Snow |
atmosphere | AbstractAtmosphere | Prescribed near-surface forcing (precipitation, air temperature) | Atmospheric inputs |
In addition to the physics components, SnowModel carries the standard model machinery: constants (PhysicalConstants), an initializer, and a timestepper.
Snow
The snow component is the single-layer snowpack process. The default is SingleLayerSnow, a lumped layer of constant bulk density loosely based on the Utah Energy Balance model [3], composed of independently swappable sub-parameterizations for areal cover, density, thermal conductivity, and hydraulic properties. See the Snow overview and Snow parameterizations for details.
Atmosphere
The atmosphere component provides the near-surface forcing consumed by the snow tendencies — snowfall, rainfall, and air temperature — together with the humidity and wind quantities used to diagnose sublimation. The default is PrescribedAtmosphere.
Prescribed forcing
Unlike the coupled land model, the standalone SnowModel does not solve a surface energy balance or a snow→soil conduction. The corresponding fluxes are therefore declared as input fields and must be supplied (they default to zero):
| Field | Units | Meaning | Supplied in the coupled model by |
|---|---|---|---|
surface_heat_flux | W/m² | Net heat flux at the snow surface (positive upward) | Surface energy balance closure |
basal_heat_flux | W/m² | Conductive heat flux at the snow base (positive upward, soil → snow) | Snow→soil conduction |
sublimation | m/s | Sublimation/evaporation rate from the snow surface (SWE) | Surface energy balance latent flux |
In the Land model these three inputs become diagnosed couplings: surface_heat_flux and sublimation are set by the surface energy balance, and basal_heat_flux by the snow→soil conductive interface.
Model interface
SnowModel implements the standard model interface: initialize! runs the model/field initializers and then the snow process initializer (the inverse closure $(T_\text{snow}, W_\text{snow}) \to \bar{U}_\text{snow}$), compute_auxiliary! diagnoses the geometric and thermal properties of the snowpack as well as the and energy-temperature closure, and compute_tendencies! accumulates the mass and energy tendencies from the prescribed fluxes and atmospheric forcing.