Surface Energy Balance PKs#

Integrated hydrology is not much use without significant process complexity in source terms coming from the ecohydrologic environment. These include straightforward sources, like precipitation, but also more complicated ones such as evaporation and transpiration.

These terms are almost always tied up in a surface energy balance – evaporation and transpiration are driven by vapor pressure gradients between the atmosphere and the surface (either snow, ponded water, soil, or leaf). Solving a surface energy balance often requires providing a bunch of terms, including radiated energy, conducted energy, latent and sensible heat models, etc.

ATS currently has several approaches to calculating these – see ats-demos examples on ecohydrology for a more in-depth discussion.

Balance Equation#

src/physics/ats/src/pks/surface_balance/surface_balance_base.hh

A simple set of time-evolving ODEs, solving for conservation of some quantity.

This is a very simple vector of ODEs, useful in balance equations, where the time derivative of a conserved quantity is determined by a bunch of sources and sinks.

\[\frac{\partial \Phi }{\partial t} = \sum_i Q_i\]

“PK type” = “general surface balance

pk-general-surface-balance-spec

  • “primary variable key[string] The primary variable associated with this PK. Note there is no default – this must be provided by the user.

  • “conserved quantity key[string] The conserved quantity \(\Phi\)

  • “source key[string] DOMAIN-source_sink Units are in conserved quantity per second per cell volume. This default is typically only appropriate when this is a water balance PK and the domain is sufficient to identify the balance. E.g. the domain is “canopy” and this equation solves for a canopy water balance. Otherwise this should also be renamed to avoid confusion.

  • “time discretization theta[double] 1.0 \(\theta\) in a Crank-Nicholson time integration scheme. 1.0 implies fully implicit, 0.0 implies explicit, 0.5 implies C-N.

Math and solver algorithm options:

  • “absolute error tolerance[double] 550.0 a_tol in the standard error norm calculation. Defaults to a small amount of water. Units are the same as the conserved quantity.

  • “inverse[inverse-spec] optional The inverse used for preconditioning in a non-globally coupled problem. See Inverse.

  • “accumulation preconditioner[pde-accumulation-spec] optional The inverse of the accumulation operator. See Accumulation. Typically not provided by users, as defaults are sufficient.

Globalization and other process-based hacks:

  • “modify predictor positivity preserving[bool] false If true, predictors are modified to ensure that the conserved quantity is always > 0.

INCLUDES:

Snow Balance Equation#

src/physics/ats/src/pks/surface_balance/surface_balance_implicit_subgrid.hh

This is a balance PK whose conserved quantity is snow water equivalent. The energy balance comes in as it provides the energy needed to melt snow. So source terms include snow precipitation and snowmelt. It also manages snow density, which should get rethought a bit.

There is also some wierd hackiness here about area fractions – see ATS Issue #8.

“PK type” = “surface balance implicit subgrid

pk-surface-balance-implicit-subgrid-spec

  • “absolute error tolerance[double] 0.01 [m] A small amount of snow.

INCLUDES:

KEYS:

  • “conserved quantity keyDOMAIN-snow_water_equivalent Sets the default conserved quantity key, so this is likely not supplied by the user. [m]

  • “snow density keyDOMAIN-density Default snow density key. [kg m^-3]

  • “snow age keyDOMAIN-age Default snow age key. [d]

  • “new snow keyDOMAIN-source Default new snow key. [m SWE s^-1]

  • “area fractions keyDOMAIN-fractional_areas Subgrid model fractional areas, see note above. [-]

  • “snow death rate keyDOMAIN-death_rate Deals with last tiny bit of snowmelt.