The scripts in tools/levante/ and the offline programs in tests/ that the plastic-ice and VILMA2 work uses. Each one-line description comes from the file’s header, which also gives the full command line. Every script sources env.sh; the Julia tools run with julia --project=tools/levante (Getting started, Analysis and figures). The model runs (kryos.x, vilma.x, the offline fits) are staged and submitted with runme (Getting started). Scripts that run as Slurm jobs submit themselves: run them directly, not with sbatch. Everything runs on Levante and on AWI’s albedo (KRYOS_MACHINE, env.sh); tools/albedo/stack.sh builds a kryos stack on albedo.
Environment
| env.sh |
The environment of every tool: KRYOS, KRYOS_WORK, FESMDATA, FESMDATA_SOURCES, KRYOS_DATA, VILMA2, PM_DIR, PM_REF, ACCOUNT, KRYOS_PART, KRYOS_PART_LONG, KRYOS_QUEUE, KRYOS_RUNME, KRYOS_JULIA, with the defaults of KRYOS_MACHINE (levante, albedo) (overrides in the environment or ~/.kryos.env); function kryos_jl |
| setup.sh |
The one-time setup: checks the paths and the builds; links fesmdata and kryos_data into the checkout and copies the shared grid files and remapping weights of $KRYOS_DATA/maps into its maps/; checks runme (>= 0.5.27) and creates .runme/config.toml; Julia (juliaup, 1.13) and the Julia project; creates KRYOS_WORK; safe to rerun |
| .runme/ |
The checkout as a runme project: info.json (executables kryos, taub_fit, closure_fit; defaults input/kryos_defaults.nml; the links input, fesmdata, kryos_data, maps, ice_data, isostasy_data), the job templates submit_slurm, submit_slurm_omp (the job writes status, exit code and seconds), config.default.toml (dkrz_levante, account ba1442, 16 threads) |
Project.toml, Manifest.toml |
The Julia project of all tools: CairoMakie, NCDatasets, DelimitedFiles, Julia 1.13 |
| jl.sh |
Runs a Julia script of the tools as a small job on the shared partition (1 h, 4 cpus, 16 GB; JL_TIME, JL_MEM) |
Runs
| pm_project.sh |
pm_project.sh [<folder>] [<data folder>]: a folder of standalone VILMA2 runs (default PM_DIR) as a runme project for vilma.x of the VILMA2 checkout, with the links input (VILMA2’s input/), fesmdata, pm_data (default $PM_DIR/data, else $PM_REF/data) |
| paleomist/ |
The runme cases of the standalone VILMA2 under the PaleoMIST ice history, one per Earth: pm_1d.nml, pm_l80.nml, pm_bm.nml, pm_3d.nml, pm_t3.nml (complete &ctl and &vilma; the -p options in the header) |
| members.sh |
Sourced by plastic_esmda.sh and plastic_ensemble.sh: the members of an iteration or wave as one job array, staged and submitted by runme (--array THROTTLE) from the calibration folder; prints the job id |
| set_nml.py |
Sets existing keys of a fully expanded par file in place (group.key=value) |
| tests/plastic_slices.f90 |
Offline check against PaleoMIST: the plastic thickness at every slice on PaleoMIST’s own bed, margin and tau_b (optionally with the scale and domain-factor files), against its H_ice; plastic=1 |
Calibration
| tests/plastic_taub_fit.f90 |
Stage 1: one tau_b factor per Gowan domain, fitted to the present-day thickness by Levenberg-Marquardt with a smoothness penalty, for a list of lambda; plastic=1 |
| taub_fit/ |
The Stage 1 fit namelists of the released factor files (fit_NH.nml, fit_ANT.nml, fit_PAT.nml; fesmdata/... relative to the run folder), each one runme run of taub_fit |
| plastic_taub_fit_report.jl |
Stage 1 report: L-curve and choice of lambda per grid, the taub_domain_factor.nc of all grids, present-day thickness per region before and after, maps |
| plastic_taub_scale.jl |
Builds the scale groups of Gowan’s domains from the [scale] table of a config, and the multiplier files (taub_scale_file) |
| plastic_esmda.jl |
ES-MDA calibration of tau_b against the GAPSLIP 2.1 index points, VILMA2 in the loop: init, update, selftest |
| plastic_esmda.sh |
The jobs of an ES-MDA calibration: start (init, then iteration 1), submit (an iteration’s member array and its analysis) |
| plastic_esmda.toml |
Config of calibration v1: NH-32KM, 3 groups, independent model error |
| plastic_esmda_v2.toml |
Config of calibration v2: NH-32KM and ANT-16KM, Stage 1 factors, present day pinned, correlated observation error |
| plastic_ensemble.jl |
Weighted ensemble: a Latin hypercube sample of the prior (init), and per-group correlated likelihood weights and ESS (weights; RSL index points and GNSS uplift rates); the Earth parameters (earth-regions, earth-shift) |
| plastic_ensemble.sh |
The jobs of a weighted ensemble: start (init, then wave 1), submit (a wave’s members and the weights after them) |
| plastic_ensemble_v2.toml |
Config of ensemble v2: v1 plus the Earth ([earth]: global and regional log10-viscosity shifts of the 3-D Earth), the error model of ens-v1, all groups judging |
| plastic_earth_shift.jl |
Included by plastic_esmda.jl: the Earth parameters of an ensemble, the region masks (plastic_ensemble.jl earth-regions) and the viscosity shift file of a member (VILMA2 visc_shift_file; earth-shift) |
| plastic_ensemble_v1.toml |
Config of ensemble v1, wave 1: NH-32KM, ANT-16KM and PAT-PAL-8KM on the 3-D Earth, 8 groups, per-group model error |
| tests/plastic_closure_fit.f90 |
Stage 1b of the implied mass balance: the flow closure (yield or coulomb_n parameter lists) against the observed present-day speed; with prior_file, the joint inversion on one set; plastic=1 |
Scoring
| pm_compare.jl |
The scorer: VILMA2 runs (standalone, or a kryos run’s geo_glob_vilma.nc) against PaleoMIST and the GAPSLIP 2.1 indicators, by groups and marine-bed areas; included by the calibration and plot tools |
| plastic_score.sh |
Scores one kryos run’s VILMA2 stream against GAPSLIP 2.1 with pm_compare.jl, beside B1 and I910_it0 of PM_REF: plastic_score.sh <run> <label> [<score folder>] (default $KRYOS_WORK/score/<label>/out) |
| plastic_pd_regions.jl |
Present-day ice thickness of the plastic backend against the FesmData topography hubs, per region |
| plastic_residual_corr.jl |
Correlation of the index-point misfit in distance and age, and the model error sigma_m, per group, region and sector |
| plastic_earth_compare.jl |
Plastic runs on different Earths: GAPSLIP scores by group, region, marine-bed area and site, site maps, RSL curves, volume and ESL |
Plots and reports
| plastic_lgm_map.jl |
Global maps of a plastic run after Gowan et al. (2021, Fig. 2): mode=age, margins, smb |
| plastic_mapkit.jl |
The drawing module of the global maps (Equal Earth projection, VILMA2 and instance fields, coastlines, margins, scored sites) |
| plastic_ensemble_sd_map.jl |
sd of RSL and ice thickness across ensemble members at one age, with that age’s index points |
| plastic_ensemble_misfit.jl |
Misfit of a wave by data group against PaleoMIST’s ice (PaleoMIST, B1 1-D, B3 3-D): implausibility, bias, sites by share of chi2; d against age and per site |
| plastic_ensemble_spread.jl |
Surface-elevation spread of a calibration iteration: all members against the best by chi2/n |
| plastic_esmda_report.jl |
A calibration’s report: scores per iteration, factor curves, ice volume, present-day thickness per region, offline Greenland check |
| plastic_esmda_diag.jl |
A calibration’s diagnostics: volume by group and ESL, prior-ensemble sensitivity, residuals by age, Antarctic sites, ANT maps |
| plastic_implied_pd.jl |
Implied mass balance of a run at present day against MAR, RACMO and the observed surface speeds |
| plastic_closure_maps.jl |
Maps of the implied SMB and the speed misfit of plastic_closure_fit sets (:inv: the inversion), with totals and ablation area |
| plastic_maps.jl |
Maps of the offline check (plastic_slices): H - PaleoMIST H_ice at given ages |
| pm_maps.jl |
Figures of the standalone VILMA2 PaleoMIST test from pm_compare.jl output |
| gia_refcorr_plot.jl |
The figure of a gia_refcorr.sh case: the converged r and the 0 ka bed misfit per iteration |
Tests of the backend
| tests/test_plastic_margin.f90 |
Margin chronology and tau_b (distance transform, interpolation, domains, scale groups, domain factors); runs with plastic=0 |
| tests/test_ice_plastic.f90 |
The backend through the ice wrappers on a toy grid (profile, masks, exports, restart, flotation); plastic=1 only |
Archive
tools/levante/archive/: the gate, regression and Yelmo-calibration scripts of the development phases (compare_*, gate_S*, g2*-g7*, calib*, ant_friction*, setup_diag*, run_kryos*, run_vilma2.sh, recon_t0.jl, vilma_link_test.sh, build_stack.sh, …), kept as they were run so that the reports in Developer notes stay traceable; not maintained.