Benchmarks
Yelmo ships with a suite of standard ice-sheet benchmark experiments used for verification and regression testing. They span analytic and idealized cases (EISMINT, slab, trough) as well as community intercomparison protocols (MISMIP3D, initMIP). Each benchmark has a dedicated test program under tests/ and a parameter file under par-gmd/ or par/.
General workflow
Build the test program:
make <target>.Run it via
runme, choosing the executable alias, namelist, and output directory:runme -r -e <alias> -n <namelist> -o <output-dir>Override namelist values inline as needed with
-p group.key=value.
For ensemble runs (one execution per parameter combination), pass comma-separated values to -p. runme interprets these as ensemble dimensions and creates one run directory per combination under -o:
runme -r -e <alias> -n <namelist> -o <ens-dir> -p key=val1,val2,val3This is built into runme — no separate package or jobrun wrapper is needed.
The sections below cover each benchmark in the current Yelmo test suite. For additional variants (alternative solvers, basal-friction sweeps, OpenMP scaling tests, and benchmarks not yet documented here such as HALFAR, ISMIPHOM, MISMIP+, and CalvingMIP), see run_batch_gmd.sh in the repository root.
EISMINT1-moving
EISMINT Phase 1 moving-margin experiment (Huybrechts and Payne, 1996). Idealized circular dome on a flat bed with a prescribed surface mass-balance field that drives transient margin advance and retreat toward a quasi steady state. Exercises the SIA flow law, mass conservation, and basic margin handling.
make clean
make benchmarks
runme -r -e benchmarks -n par-gmd/yelmo_EISMINT_moving.nml -o output/benchmarks/eismint-movingEISMINT2-expa
EISMINT Phase 2 Experiment A (Payne et al., 2000). Steady-state thermomechanical experiment with a fixed margin on a flat bed, designed to test the coupling between ice dynamics and internal thermodynamics — in particular the formation of cold-ice cores and basal-temperate regions.
make clean
make benchmarks
runme -r -e benchmarks -n par-gmd/yelmo_EISMINT_expa.nml -o output/benchmarks/eismint-expaMISMIP3D
Marine Ice Sheet Model Intercomparison Project, 3D version (Pattyn et al., 2013). Tests grounding-line dynamics on a marine bed with retrograde slope, using a SSA or DIVA momentum balance. Two experiments are defined in the namelist via the ctrl.experiment field: Stnd (standard, advance to steady state) and RF (reverse forcing, to test reversibility).
Standard experiment:
make clean
make mismip
runme -r -e mismip -n par-gmd/yelmo_MISMIP3D.nml -o output/benchmarks/mismip3d-stnd -p ctrl.experiment=StndReverse-forcing experiment:
runme -r -e mismip -n par-gmd/yelmo_MISMIP3D.nml -o output/benchmarks/mismip3d-rf -p ctrl.experiment=RFResolution ensembles
To probe grid resolution and the treatment of the grounding line, run ensembles over ctrl.dx with different basal-stress scaling / staggering options at the grounding line:
# Default grounding-line treatment
runme -r -e mismip -n par-gmd/yelmo_MISMIP3D.nml -o output/benchmarks/mismip3d-default \
-p ydyn.beta_gl_scale=0 ydyn.beta_gl_stag=0 ctrl.dx=2.5,5.0,10.0,20.0
# Subgrid grounding-line interpolation (beta_gl_stag=3)
runme -r -e mismip -n par-gmd/yelmo_MISMIP3D.nml -o output/benchmarks/mismip3d-subgrid \
-p ydyn.beta_gl_scale=0 ydyn.beta_gl_stag=3 ctrl.dx=2.5,5.0,10.0,20.0
# Subgrid + basal-stress scaling (beta_gl_scale=2)
runme -r -e mismip -n par-gmd/yelmo_MISMIP3D.nml -o output/benchmarks/mismip3d-scaling \
-p ydyn.beta_gl_scale=2 ydyn.beta_gl_stag=3 ctrl.dx=2.5,5.0,10.0,20.0slab
1D ice-slab benchmark on a tilted bed (Schoof, 2006), used to test SSA / DIVA solver behaviour, basal-friction parameterizations, and numerical convergence on a configuration with an analytic reference. The domain is dispatched inside the yelmo_trough program based on the ctrl.domain field of the namelist (SLAB-S06), so the trough build target and executable alias are used here.
make clean
make trough
runme -r -e trough -n par/yelmo_SLAB-S06.nml -o output/benchmarks/slabNote: the make slab target builds a separate slab program (yelmo_slab.x, used in Robinson, 2022) and is not the SLAB-S06 benchmark.
trough-f17
Idealized trough geometry (Feldmann and Levermann, 2017) designed to test buttressing and grounding-line behaviour in a confined, narrowing channel. Used to probe stability and lateral-stress representation in marine outlet glaciers.
make clean
make trough
runme -r -e trough -n par/yelmo_TROUGH-F17.nml -o output/benchmarks/trough-f17Variants and ensembles
Alternative solver, resolution, and basal-friction settings used to probe sensitivity:
# SSA solver instead of the default
runme -r -e trough -n par/yelmo_TROUGH-F17.nml -o output/benchmarks/trough-f17-ssa -p ydyn.solver=ssa
# Higher resolution (1 km and 2 km)
runme -r -e trough -n par/yelmo_TROUGH-F17.nml -o output/benchmarks/trough-f17-dx1 -p ctrl.dx=1.0
runme -r -e trough -n par/yelmo_TROUGH-F17.nml -o output/benchmarks/trough-f17-dx2 -p ctrl.dx=2.0
# cf_ref ensemble (3 values) with adjusted beta_u0
runme -r -e trough -n par/yelmo_TROUGH-F17.nml -o output/benchmarks/trough-f17-cf \
-p ydyn.beta_u0=100 ytill.cf_ref=5.0,10.0,20.0initmip-grl
Greenland initialization benchmark following the initMIP-Greenland protocol (Goelzer et al., 2018). Spins the ice sheet up toward a present-day steady state using the optimization-based initialization scheme (equil_method = "opt") with present-day boundary conditions. Default settings: 5-yr outer timestep, 1000-yr simulation, steady-state forcing.
Greenland is supported at 32, 16, 8, and 4 km resolution. Select the grid by uncommenting the desired line:
grid=GRL-32KM
#grid=GRL-16KM
#grid=GRL-8KM
#grid=GRL-4KM
make clean
make initmip
runme -r -e initmip -n par/yelmo_initmip.nml -o output/initmip-grl-$grid \
-p ctrl.dtt=5 ctrl.time_end=1e3 ctrl.time_equil=100 \
ctrl.set_nm=set_grl_pd yelmo.log_timestep=True \
ydyn.solver=diva yelmo.domain=Greenland yelmo.grid_name=$gridTo run all four resolutions as an ensemble:
runme -r -e initmip -n par/yelmo_initmip.nml -o output/initmip-grl-ens \
-p ctrl.dtt=5 ctrl.time_end=1e3 ctrl.time_equil=100 \
ctrl.set_nm=set_grl_pd yelmo.log_timestep=True \
ydyn.solver=diva yelmo.domain=Greenland \
yelmo.grid_name=GRL-32KM,GRL-16KM,GRL-8KM,GRL-4KMinitmip-ant
Antarctica initialization benchmark following the initMIP-Antarctica protocol (Seroussi et al., 2019). Same optimization-based spin-up as initmip-grl, but on the Antarctic domain with set_nm = "set_ant_pd".
Antarctica is currently supported at 32, 16, and 8 km resolution. The 4 km configuration is not yet available.
grid=ANT-32KM
#grid=ANT-16KM
#grid=ANT-8KM
make clean
make initmip
runme -r -e initmip -n par/yelmo_initmip.nml -o output/initmip-ant-$grid \
-p ctrl.dtt=5 ctrl.time_end=1e3 ctrl.time_equil=100 \
ctrl.set_nm=set_ant_pd yelmo.log_timestep=True \
ydyn.solver=diva yelmo.domain=Antarctica yelmo.grid_name=$gridTo run all three resolutions as an ensemble:
runme -r -e initmip -n par/yelmo_initmip.nml -o output/initmip-ant-ens \
-p ctrl.dtt=5 ctrl.time_end=1e3 ctrl.time_equil=100 \
ctrl.set_nm=set_ant_pd yelmo.log_timestep=True \
ydyn.solver=diva yelmo.domain=Antarctica \
yelmo.grid_name=ANT-32KM,ANT-16KM,ANT-8KM