Grid-scale condensation
Introduction
GridScaleCondensation is a Stepper implementing large-scale (stratiform) condensation: wherever the air becomes supersaturated with respect to water, the excess vapour condenses, releases latent heat, and is assumed to fall out immediately as precipitation. It is the grid-scale complement to a convective scheme — it removes the supersaturation that resolved ascent produces on the model grid, rather than sub-grid convective plumes.
Physics
At each level the scheme compares the specific humidity \(q\) against the saturation specific humidity \(q^*(T, p)\). Where \(q > q^*\), the excess is condensed. Because condensation warms the air (raising \(q^*\)), the adjustment is solved so that the air is left exactly at saturation, accounting for the latent-heating feedback:
\[ \Delta q = -(q - q^*), \qquad \Delta T = -\frac{L}{c_p}\,\Delta q, \]
iterated (or solved) to consistency between the new temperature and the saturation humidity it implies. All condensed water is assumed to precipitate — none is retained as cloud — so the column integral of the condensed water gives the precipitation:
\[ \text{precipitation amount} = -\frac{1}{g}\int (\Delta q)\, dp . \]
The component returns updated air_temperature and specific_humidity, and the precipitation_amount as a diagnostic.
Constructor
climt.GridScaleCondensation()The component takes no physical parameters; the latent heat, gravity and gas constants come from climt’s registered constants.
State
| Role | Quantity | Dims | Units |
|---|---|---|---|
| in | air_temperature |
[mid_levels, *] |
degK |
| in | specific_humidity |
[mid_levels, *] |
kg/kg |
| in | air_pressure |
[mid_levels, *] |
Pa |
| in | air_pressure_on_interface_levels |
[interface_levels, *] |
Pa |
| out | air_temperature |
[mid_levels, *] |
degK |
| out | specific_humidity |
[mid_levels, *] |
kg/kg |
| diag | precipitation_amount |
[*] |
kg m^-2 |
Example
from datetime import timedelta
import climt
from climt import get_default_state, get_grid
condensation = climt.GridScaleCondensation()
state = get_default_state([condensation], grid_state=get_grid(nx=1, ny=1, nz=30))
# Supersaturate a layer.
state["specific_humidity"].values[:] = 0.02
diagnostics, new_state = condensation(state, timedelta(seconds=600))
print(diagnostics["precipitation_amount"].values) # kg/m^2 condensed and rained outSource
- Component:
climt/_components/grid_scale_condensation.py