**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

### New logo

PISM has a new logo designed by Julius Garbe.

### New website

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

### Stress balance

- Implemented a FEM solver for the first order approximation of the Stokes equations due to Blatter (1995). This solver supports multigrid preconditioners (see Brown et al 2013) and includes 5 verification test based on manufactured solutions.
- Implemented experiments A,B,C,D,E from the ISMIP-HOM intercomparison.
- Fixed the approximation of the driving stress at floating ice margins in the SSA solver. (This fix was contributed by Ronja Reese and Torsten Albrecht; see these notes for details.)

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

### Calving

- 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

- Implemented the fracture density growth parameterization due to Borstad et al (equation 4 in Borstad et al, 2016). Code contributed by T. Albrecht).

### 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).

### Other

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