PISM 2.0 is out

Published: Dec 3, 2021 by The PISM Authors

PISM developers have been hard at work to bring you a brand new version of PISM, packed with new features. After years of development, PISM finally includes a Blatter solver, warranting a new major version: PISM 2.0.

Notable changes

PISM has a new logo designed by Julius Garbe.

New website

The new website at www.pism.io replaces the old version.

Stress balance

Basal strength

  • Implemented regularized Coulomb sliding as in Zoet & Iverson, 2020, A slip law for glaciers on deformable beds, equation 3.
  • Assume that in the “ocean” areas the till at the base is saturated with water, i.e. the till water amount is equal to hydrology.tillwat_max. This change should improve grounding line movement and make the basal yield stress modification turned on with basal_yield_stress.slippery_grounding_lines unnecessary.
  • Implemented a mechanism for “optimizing” the till friction angle used by the Mohr-Coulomb yield stress model. The implementation is based on the code contributed by T. Albrecht.

Bed deformation

  • The new -bed_def given component reads in a prescribed bed deformation history from a file (e.g. from a solid-Earth model) relative to a (high-resolution) reference topography, indicated by configuration parameter bed_deformation.given.file and bed_deformation.given.reference_file, respectively.


  • Implemented scaling of calving rates using a time-dependent factor. Set calving.rate_scaling.file to the name of the file containing frac_calving_rate (units: “1”).
  • Ice thickness threshold read in from calving.thickness_calving.file can be both space- and time-dependent.

Fracture density model

Atmosphere forcing

  • Support 2D precipitation scaling in -atmosphere ...,frac_P. If the input file set using atmosphere.frac_P.file contains a scalar time series frac_P, use that as a time-dependent constant-in-space forcing. If the input file contains a 2D variable frac_P, use that as a time-and-space-dependent forcing.
  • Added surface elevation smoothing to the orographic precipitation model. High-frequency modes in the surface elevation that can develop in runs with evolving ice geometry (consider grounded ice margins) may cause oscillations in the computed precipitation field (probably due to the Gibbs phenomenon). These oscillations may result in an even rougher topography, triggering a feedback loop polluting model results. Set atmosphere.orographic_precipitation.smoothing_standard_deviation (in meters) to smooth the ice surface elevation to reduce this effect.
  • Added atmosphere.elevation_change.precipitation.temp_lapse_rate to the -atmosphere ...,elevation_change modifier. Now this parameter is used to compute the temperature change dT used to scale precipitation by a factor exp(C * dT) with C = atmosphere.precip_exponential_factor_for_temperature. We need a separate temperature lapse rate parameter to be able to use this modifier with atmosphere models that include an elevation-dependent near-surface air temperature parameterizations, e.g. -atmosphere pik,elevation_change.

Ocean forcing

  • The three-equation ocean model -ocean th uses constant salinity (see constants.sea_water.salinity) if salinity_ocean is not present in the forcing file.
  • Added a new ocean modifier: -ocean ...,delta_MBP. This component reads scalar time-dependent melange pressure offsets (units: Pa) and uses them in the calving front boundary condition for the SSA.
  • Adjusted PICO ocean input average across covered basins, in which the ice shelf has in fact a connection to the ocean. Large ice shelves spanning two basins that do not share an ocean boundary are split into two separate ice shelf instances. (This code was contributed by Torsten Albrecht.)
  • Added sea_level.constant.value. This sets the default sea level elevation used with -sea_level constant.
  • Removed ocean.always_grounded. Set sea_level.constant.value to a large negative value to ensure that all ice is grounded.
  • Removed ocean.melange_back_pressure_fraction: it is no longer needed.

Input and output, diagnostics

  • Added a new output.format value: netcdf4_serial and output.compression_level. Use -o_format netcdf4_serial -output.compression_level N (N between 1 and 9) to write compressed NetCDF from rank 0.
  • Support writing compressed NetCDF in parallel with NetCDF 4.7.4 or newer and HDF5 1.10.3 or newer. Set output.compression_level to enable compression.
  • Stop with an error message if some values of a variable read from a file match the _FillValue attribute (PISM expects input files to contain data at all grid points within the domain).
  • Now PISM stops with an error message if time-dependent forcing data read from a file do not span the whole length of a simulation. Set input.forcing.time_extrapolation to “true” to disable this check.
  • Removed the configuration parameter input.forcing.evaluations_per_year. Now the code evaluates exact values of time averages of time-dependent forcing inputs.
  • Major improvement in the handling of time-dependent forcing. A file containing periodic forcing has to contain exactly one period. The start and the length of the period are derived from time bounds read from this file. This makes it easier to use periodic forcing and adds supports for arbitrary period lengths. See the manual section about time-dependent inputs.
  • All time-dependent forcing files have to contain time bounds.
  • Now PISM always respects the reference date in input files.
  • Improved the approximation of the grounding line flux (scalar and 2D diagnostics grounding_line_flux): the flux through the grounding line should be zero if its direction is parallel to the grounding line. Unfortunately this is impossible to achieve for an arbitrary grounding line shape if the grounding line is approximated by a mask on a uniform grid (as in PISM). This change improves the approximation for some combinations of grounding line shapes and grid resolutions. (This issue was reported by Ronja Reese.)

Model time and time stepping

  • Added a new parameter: time_stepping.resolution. PISM rounds time step lengths down to a multiple of this number (default: 1 second). This reduces the influence of rounding errors on time step lengths.
  • Command-line options -y, -ys, -ye, -max_dt and corresponding configuration parameters use units of 365 days instead of years. The latter has the meaning of the mean tropical year, i.e. the constant used to convert from 1/s to 1/year. Use -y 1000years, etc to reproduce the old behavior.
  • Fixed a bug in the code managing time step restrictions (this affected the last time step of runs using -skip and runs with -skip in which -max_dt is active).


  • Added the new command-line option -refinement_factor N. Use this to select a regional modeling domain using -x_range ... -y_range ..., then use a grid that is N times finer.
  • Added support for automatic unit conversion in command-line options. If an option argument is a number PISM assumes that it uses PISM’s internal units. If it is a number followed by a units string recognized by UDUNITS it is automatically converted to PISM’s internal units. For example, the following are equivalent: -Lz 1000, -Lz 1000m, -Lz 1km.
  • Added a new NetCDF variable thk_bc_mask prescribing locations where the ice thickness is kept fixed. This mask is combined with vel_bc_mask: we keep ice thickness fixed at all the locations where the sliding (usually SSA) velocity is fixed.
  • Renamed NetCDF variables bc_mask to vel_bc_mask and u_ssa_bc and v_ssa_bc to u_bc and v_bc.
  • Removed the pisms executable. Run pismr -eisII X to run EISMINT-II experiment X.
  • fill_missing_petsc.py uses homogeneous Neumann BC at domain boundaries.
  • Added optional arguments time_units and calendar to PISM.util.prepare_output() in the Python bindings.


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