Module climate
Brief summary
The climate module is a unified dispatcher for atmospheric forcing. It delegates to one of four implementations selected by the method parameter: simple, oggm, glacialindex, or station, under a single entry point with a consistent interface.
State variables
Reads: t, usurf
Writes: air_temp, air_temp_sd, precipitation
Choosing a method
Set processes.climate.method in your configuration:
Method: simple
A lightweight station-type forcing that computes spatially distributed monthly temperature and precipitation fields from a reference value and lapse rates. Suitable for idealized experiments or when neither OGGM data nor full climate files are available.
At each update the module:
- Distributes temperature from a reference elevation using a constant lapse rate.
- Optionally adds a sinusoidal seasonal cycle.
- Distributes precipitation from a reference station value using an altitude-dependent lapse rate.
- Generates 12-month fields for compatibility with SMB modules that expect monthly forcing.
Method: oggm
Processes monthly historical climate data from the GSWP3-W5E5 dataset obtained via the oggm_shop module. It generates monthly 2D raster fields for corrected precipitation, mean temperature, and temperature variability. The module applies a multiplicative correction factor to precipitation (prcp_fac) and a bias correction to temperature (temp_bias). Temperature is extrapolated across the glacier surface using a reference height and a constant lapse rate.
The module also supports generating climate data beyond the observational time frame by defining a reference period (ref_period) to randomly select years within it, then applying a user-defined temperature bias and precipitation scaling over time:
If clim_trend_array is an empty list, the module reads from the file specified by file.
Method: glacialindex
Loads two climate snapshots corresponding to two end-member states and interpolates them using a climate signal and a glacial index (Jouvet et al., 2023)1. Suitable for palaeo-glacier modelling.
A function GI(\(t\)) maps time to a scalar between 0 and 1, with GI=0 corresponding to nearly ice-free conditions (\(\mathrm{CL}_0\)) and GI=1 to maximum glaciation (\(\mathrm{CL}_1\)). Each climate state bundles mean temperature, temperature variability, mean precipitation, and lapse rate, \(\mathrm{CL}=(T^{\rm mean},T^{\rm std},P^{\rm mean},\mathrm{LR})\), and the climate at time \(t\) is the linear combination:
The GI function is built by rescaling a climate proxy signal — e.g. the EPICA Antarctic temperature anomaly, available for the last 800,000 years — so that it is close to 1 at the ice maximum and 0 at the ice minimum. Because the two states are defined on different reference topographies, temperature is corrected for the elevation difference between the modelled ice surface and each reference surface using a vertical lapse rate.
Method: station
Generates spatially distributed temperature and precipitation fields from simplified climate parameters representing a weather-station-type forcing. Designed for mountain glacier simulations where climate is characterised by a local temperature lapse rate and a precipitation-altitude relationship.
At each update the module:
- Computes a reference temperature field from the zero-degree isotherm elevation and the adiabatic lapse rate.
- Adds an optional sinusoidal seasonal cycle (cosine approximation).
- Computes a precipitation field using an altitude-dependent lapse rate relative to a reference station value.
- Applies user-specified time-dependent temperature and precipitation offsets (
climate_change_array). - Adjusts both fields for changes in ice surface elevation relative to the initial surface.
Parameters
Default configuration file (climate.yaml):
climate:
# Choose the climate implementation: simple | oggm | glacialindex | station
method: simple
# ------------------------------------------------------------------
# simple — constant temperature and precipitation at a reference
# elevation, adjusted to state.usurf via vertical lapse rates.
# Produces 12-month fields for compatibility with SMB modules.
# ------------------------------------------------------------------
simple:
update_freq: 1.0
temp: 0.0 # mean annual temperature at ref_elevation [°C]
prec: 1000.0 # mean annual precipitation at ref_elevation [kg m-2 yr-1]
temp_std: 5.0 # temperature std deviation [°C]
ref_elevation: 0.0 # reference elevation [m a.s.l.]
temp_lapse_rate: -0.0065 # temperature lapse rate [°C per m]
prec_lapse_rate: 0.0 # precipitation lapse rate [fraction per m]
cosine_yearly_cycle_temp: False # add a cosine seasonal cycle to temperature
cosine_yearly_cycle_amplitude: 5.0 # amplitude of the cosine cycle [°C]
southern_hemisphere_climate: False # shift the cosine cycle by 6 months
# ------------------------------------------------------------------
# oggm — historical monthly temperature & precipitation from an OGGM
# climate_historical.nc (per-RGI). Mirrors the legacy `clim_oggm`.
# ------------------------------------------------------------------
oggm:
update_freq: 1.0
file: file.txt
clim_trend_array:
- ["time", "delta_temp", "prec_scal"]
- [1900, 0.0, 1.0]
- [2020, 0.0, 1.0]
ref_period: [1960, 1990]
seed_par: 123
# ------------------------------------------------------------------
# glacialindex — two-end-member climate interpolated by a transient
# signal. Mirrors the legacy `clim_glacialindex`.
# ------------------------------------------------------------------
glacialindex:
update_freq: 100.0
climate_0_file: data/climate.nc
climate_1_file: data/climate1.nc
signal_file: data/GI.dat
vertical_lapse_rate_0: 6.0
vertical_lapse_rate_1: 5.74
temporal_resampling: 12
# ------------------------------------------------------------------
# station — synthetic climate built from a reference precipitation
# station + adiabatic lapse rate + optional time-series of offsets.
# Mirrors the legacy `clim_station`.
# ------------------------------------------------------------------
station:
update_freq: 1.0
zero_degree_isotherm: 2500.0
adiabatic_lapse_rate: 0.0058
air_temperature_stdev: 2.0
precipitation_lapse_rate: 3.0
reference_precipitation_elevation: 1000.0
reference_precipitation: 800.0
min_precipitation_allowed: 1.0
cosine_yearly_cycle_temp: True
cosine_yearly_cycle_amplitude: 5.0
southern_hemisphere_climate: False
export_climate_ref: True
time_dependent_climate: True
climate_change_array:
- ["time", "temperature_offset", "precip_offset"]
- [1750, 0.0, 100]
- [1800, 0.0, 100]
- [1850, 0.0, 100]
- [1900, 0.0, 100]
- [1950, 0.0, 100]
- [2000, 0.5, 100]
- [2050, 1.5, 100]
- [2100, 2.0, 100]
Structure of the parameters:
climate
├── method
├── simple
│ └── ...
├── oggm
│ └── ...
├── glacialindex
│ └── ...
└── station
└── ...
Description of the parameters:
| Name | Description | Default value | Units |
|---|---|---|---|
method
|
Climate implementation to use: simple, oggm, glacialindex, or station. |
simple | — |
simple
| Name | Description | Default value | Units |
|---|---|---|---|
simple.update_freq
|
Update climate fields every X years. | 1.0 | yr |
simple.temp
|
Mean annual temperature at ref_elevation. | 0.0 | °C |
simple.prec
|
Mean annual precipitation at ref_elevation. | 1000.0 | kg m\( ^{-2} \) yr\( ^{-1} \) |
simple.temp_std
|
Temperature standard deviation used for PDD computation. | 5.0 | °C |
simple.ref_elevation
|
Reference elevation for temperature and precipitation. | 0.0 | m |
simple.temp_lapse_rate
|
Vertical temperature lapse rate. | -0.0065 | °C m\( ^{-1} \) |
simple.prec_lapse_rate
|
Fractional change in precipitation per metre of elevation. | 0.0 | m\( ^{-1} \) |
simple.cosine_yearly_cycle_temp
|
Add a cosine seasonal cycle to temperature. | False | — |
simple.cosine_yearly_cycle_amplitude
|
Amplitude of the cosine seasonal temperature cycle. | 5.0 | °C |
simple.southern_hemisphere_climate
|
Shift the seasonal cycle by 6 months for southern-hemisphere glaciers. | False | — |
oggm
| Name | Description | Default value | Units |
|---|---|---|---|
oggm.update_freq
|
Update climate fields every X years. | 1.0 | yr |
oggm.file
|
Path to the OGGM climate_historical.nc file. | file.txt | — |
oggm.clim_trend_array
|
Time-dependent temperature and precipitation scaling table: rows of [time, delta_temp (°C), prec_scal (-)]. | [['time', 'delta_temp', 'prec_scal'], [1900, 0.0, 1.0], [2020, 0.0, 1.0]] | — |
oggm.ref_period
|
Reference period [start, end] for the OGGM climate baseline. | [1960, 1990] | yr |
oggm.seed_par
|
Random seed for stochastic perturbations. | 123 | — |
glacialindex
| Name | Description | Default value | Units |
|---|---|---|---|
glacialindex.update_freq
|
Update climate fields every X years. | 100.0 | yr |
glacialindex.climate_0_file
|
NetCDF file for the modern (warm) end-member climate. | data/climate.nc | — |
glacialindex.climate_1_file
|
NetCDF file for the glacial (cold) end-member climate. | data/climate1.nc | — |
glacialindex.signal_file
|
File containing the glacial index signal (time, index) used to interpolate between end members. | data/GI.dat | — |
glacialindex.vertical_lapse_rate_0
|
Vertical lapse rate applied to the modern end-member temperature field. | 6.0 | °C (100 m)\( ^{-1} \) |
glacialindex.vertical_lapse_rate_1
|
Vertical lapse rate applied to the glacial end-member temperature field. | 5.74 | °C (100 m)\( ^{-1} \) |
glacialindex.temporal_resampling
|
Number of sub-steps per model time step for temporal resampling of the glacial index signal. | 12 | — |
station
| Name | Description | Default value | Units |
|---|---|---|---|
station.update_freq
|
Update climate fields every X years. | 1.0 | yr |
station.zero_degree_isotherm
|
Elevation at which mean annual temperature is 0 °C. | 2500.0 | m |
station.adiabatic_lapse_rate
|
Adiabatic lapse rate for air temperature. | 0.0058 | °C m\( ^{-1} \) |
station.air_temperature_stdev
|
Space-independent standard deviation of daily temperature variability. | 2.0 | °C |
station.precipitation_lapse_rate
|
Change in precipitation with altitude as a fraction of reference_precipitation. | 3.0 | % per 100 m |
station.reference_precipitation_elevation
|
Elevation of the reference precipitation station. | 1000.0 | m |
station.reference_precipitation
|
Mean cumulative annual precipitation at the reference station. | 800.0 | mm yr\( ^{-1} \) |
station.min_precipitation_allowed
|
Minimum allowed precipitation to avoid unrealistically low values. | 1.0 | mm yr\( ^{-1} \) |
station.cosine_yearly_cycle_temp
|
Add an idealised cosine seasonal temperature signal. | True | — |
station.cosine_yearly_cycle_amplitude
|
Amplitude of the cosine seasonal temperature variation. | 5.0 | °C |
station.southern_hemisphere_climate
|
Shift the seasonal cycle by 6 months for southern-hemisphere glaciers. | False | — |
station.export_climate_ref
|
Export a climate_ref.nc file for the original topography. | True | — |
station.time_dependent_climate
|
Allow climate to vary in time via climate_change_array. | True | — |
station.climate_change_array
|
Time-dependent offsets: rows of [time, temperature_offset (°C), precip_offset (mm yr^{-1})]. | [['time', 'temperature_offset', 'precip_offset'], [1750, 0.0, 100], [1800, 0.0, 100], [1850, 0.0, 100], [1900, 0.0, 100], [1950, 0.0, 100], [2000, 0.5, 100], [2050, 1.5, 100], [2100, 2.0, 100]] | — |
Contributors: Guillaume Jouvet, Tancrède Leger.
-
Jouvet, G., Cohen, D., Russo, E., Buzan, J., Raible, C. C., Haeberli, W., Kamleitner, S., Ivy-Ochs, S., Imhof, M. A., Becker, J. K., Landgraf, A., & Fischer, U. H. (2023). Coupled climate-glacier modelling of the last glaciation in the alps. Journal of Glaciology, 69(278), 1956--1970. https://doi.org/10.1017/jog.2023.74 ↩