PISM 2.1 is out

Published: Nov 27, 2023 by The PISM Authors

We are pleased to announce the release of PISM v2.1.

Notable changes compared to v2.0

Some of these were included in 2.0.x bug fix releases.

Mass transport

  • Added a flux limiter that ensures strict preservation of non-negativity of ice thickness and therefore mass conservation up to rounding error.

    This is a Zalesak-style limiter described in

    P. K. Smolarkiewicz, “Comment on “A Positive Definite Advection Scheme Obtained by Nonlinear Renormalization of the Advective Fluxes”,” Monthly Weather Review, vol. 117, no. 11, pp. 2626–2632, 1989, doi: 10.1175/1520-0493(1989)117<2626:COPDAS>2.0.CO;2.

    Note that this approach (unlike modifications of the discretization of SIA diffusivity in the Jarosch et al. paper mentioned below) works with all stress balance models.

  • Implemented a benchmark verifying mass conservation in an “isothermal SIA + mass continuity” setup with “rough” bed topography.

    This benchmark is described in

    A. H. Jarosch, C. G. Schoof, and F. S. Anslow, “Restoring mass conservation to shallow ice flow models over complex terrain,” The Cryosphere, vol. 7, no. 1, pp. 229–240, Feb. 2013, doi: 10.5194/tc-7-229-2013.

Isochrone tracing

Surface processes

  • Implemented the diurnal energy balance model dEBM-simple (see M. Zeitz, R. Reese, J. Beckmann, U. Krebs-Kanzow, and R. Winkelmann, “Impact of the melt-albedo feedback on the future evolution of the Greenland Ice Sheet with PISM-dEBM-simple,” The Cryosphere, vol. 15, no. 12, pp. 5739-5764, Dec. 2021, doi: 10.5194/tc-15-5739-2021.)

Atmosphere forcing

  • Added support for 2D precipitation offsets in -atmosphere ...,delta_P. If the input file set using atmosphere.delta_P.file contains a scalar time series delta_P, use that as a time-dependent constant-in-space forcing. If the input file contains a 2D variable delta_P, use that as a time-and-space-dependent forcing.
  • Added support for 2D air temperature offsets in -atmosphere ...,delta_T. If the input file set using atmosphere.delta_T.file contains a scalar time series delta_T, use that as a time-dependent constant-in-space forcing. If the input file contains a 2D variable delta_T, use that as a time-and-space-dependent forcing.
  • Added support for piecewise-constant temporal interpolation of near-surface air temperatures in -atmosphere given: set atmosphere.given.air_temperature_interpolation to piecewise_constant.

Ocean forcing


  • Fixed a bug reported by Christian Rodehacke: calving mechanisms should not remove ice at ice fronts adjacent to isolated patches of ice-free water (see issue #521).

Stress balance

  • Improved the initial guess of sliding velocity used when the ice front advances by extrapolating velocity computed by the SSAFD solver during the previous time step (set stress_balance.ssa.fd.extrapolate_at_margins to false to disable).

Energy conservation

  • PISM no longer attempts to correct energy conservation by freezing basal water.

    At each time step PISM checks basal enthalpy and if necessary modifies it to ensure continuity of temperature in each bedrock+ice column. Sometimes this modification creates energy; prior to this change PISM attempted to remove an equivalent amount of energy by modifying the basal melt rate to freeze water stored at the base.

    Under some conditions this basal melt rate adjustment created mass by freezing more water than available and even led to crashes with error messages stating that ice thickness exceeds Lz.

Input and output, diagnostics

  • Added diagnostics tendency_of_ice_{amount,mass}_due_to_frontal_melt and tendency_of_ice_{amount,mass}_due_to_forced_retreat. Renamed diagnostic max_sliding_vel to max_horizontal_vel.

Bug fixes

  • Added time bounds to scalar forcing files in examples/std-greenland.
  • Fixed a bug in the code ensuring non-negativity of ice thickness. (The old code added too much ice in an attempt to ensure non-negativity – so much so that sometimes this caused crashes with error messages stating that ice thickness exceeds Lz.)

    Note that this “projection step” (ice_thickness = max(tentative_ice_thickness, 0)) should have no effect now: the flux limiter mentioned above is designed to ensure non-negativity. We keep this step, however, to maintain the ability to keep track of ice thickness changes due to conservation errors (if they ever happen).

  • Fixed bugs in scalar diagnostics ice_volume_cold and ice_volume_temperate.
  • Use CF-compliant units “common_years” in forcing files.


  • Added CITATION.cff to properly acknowledge all contributions and to make it easier to cite PISM.
  • Implemented UNO2, UNO3 and a couple of related transport methods (not used, but available for future use; see J.-G. Li, “Upstream Nonoscillatory Advection Schemes,” Monthly Weather Review, vol. 136, no. 12, pp. 4709-4729, Dec. 2008, doi: 10.1175/2008mwr2451.1.).
  • Use realpath() to resolve relative file names. Now configuration parameters ending in .file, when saved to output files and in PISM output to stdout, contain absolute file names. This will make it easier to reproduce runs based on an output file.
  • Added support for checkpointing the HTCondor way (see commit 3740c41df).
  • Use -list_diagnostics all to print the list of all diagnostics, -list_diagnostics spatial for 2D and 3D variables, and -list_diagnostics scalar for scalar time series.
  • Added code to generate pism.pc and pismicebin.pc for use with pkg-config. This will make it easier to use PISM as a library (to couple to a GCM, for example).
  • PISM’s build system uses pkg-config to look for some of the required libraries.
  • Refactored utility classes used to store 2D and 3D arrays.
  • Replaced examples/searise-antarctica with examples/antarctica based on ALBMAP v1 data. This avoids a dependency on SeaRISE data formerly hosted by the University of Montana.


Latest news

PISM 2.1 is out

We are pleased to announce the release of PISM v2.1.

Congrats to Constantine

Dear PISM users and developers