Skip to content

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:

processes:
  climate:
    method: simple   # or: oggm | glacialindex | station

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:

  1. Distributes temperature from a reference elevation using a constant lapse rate.
  2. Optionally adds a sinusoidal seasonal cycle.
  3. Distributes precipitation from a reference station value using an altitude-dependent lapse rate.
  4. 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:

time   delta_temp  prec_scal
1900          0.0        1.0
2020          0.0        1.0
2100          4.0        1.0

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:

\[\mathrm{CL}(t) = \mathrm{GI}(t)\times \mathrm{CL}_1 + (1 - \mathrm{GI}(t))\times \mathrm{CL}_0.\]

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:

  1. Computes a reference temperature field from the zero-degree isotherm elevation and the adiabatic lapse rate.
  2. Adds an optional sinusoidal seasonal cycle (cosine approximation).
  3. Computes a precipitation field using an altitude-dependent lapse rate relative to a reference station value.
  4. Applies user-specified time-dependent temperature and precipitation offsets (climate_change_array).
  5. 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.


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