Par files
A kryos run reads one par file, a Fortran namelist file passed as the only argument of kryos.x. The shipped files are in par/; the gate files in par/gate/, the friction calibration in par/calib/. Every file starts with a comment header that says what it sets up, what it was derived from and the build it needs.
The plastic and VILMA2 runs
Hand-written; keys left out take the templates of input/kryos_defaults.nml. All run 80 ka to present (time_init = -80e3, time_end = 0, dtt = 100 yr), with the PaleoMIST margins (f_ice > 0.5, signed-distance interpolation) and Gowan’s time-dependent tau_b domains of FesmData IceHistory. Build: plastic=1, and vilma=1 where geo is vilma2 (yelmo=0 is enough). See Simulating our own ice and PlasticIceSheet.
| Par file | Domains (hub) | Ice | Geo | What it sets up |
|---|---|---|---|---|
| kryos_North_plastic.nml | North (NH-32KM) | plastic | none | Smoke run on a fixed bed: today’s bed (TOPO-GEBCO2026), z_sl = 0, no globe, no climate |
| kryos_North_plastic_vilma2.nml | North (NH-32KM) | plastic | vilma2 | The global VILMA2 Earth of the science case (3-D Bagge viscosity), reference bed today’s + r (kryos_data/refcorr/PaleoMIST-sci), the ice outside NH from the PaleoMIST history; Earth cadence 100 yr |
| kryos_North_plastic_vilma2_b1.nml | North (NH-32KM) | plastic | vilma2 | B1’s Earth and reference: Gowan’s 1-D Earth (120 km lithosphere, 4e20 / 4e22 Pa s, 12 layers, lmax 170), the relaxed present-day reference (no r); the run scored against GAPSLIP beside B1 |
| kryos_NH-ANT_plastic_vilma2_b1.nml | North (NH-32KM), Antarctica (ANT-16KM) | plastic, plastic | vilma2 | As _b1 with a second plastic instance on ANT-16KM (BedMachine Antarctica v4, its own geo port); the par file of calibration v2 |
| kryos_NH-ANT_plastic_vilma2.nml | North, Antarctica | plastic, plastic | vilma2 | Both hemispheres on the science Earth: PREM 11 layers, 80 km lithosphere, Bagge et al. (2021) 3-D viscosity (structure 6), lmax 170, 1-D pre-spin-up, 2e4 yr cap on the 3-D relaxation, refcorr reference |
| kryos_NH-ANT-PAT_plastic_vilma2.nml | North, Antarctica, PatagoniaPaleo (PAT-PAL-8KM) | plastic x 3 | vilma2 | As the previous with a third plastic instance on PAT-PAL-8KM (Gowan’s region 4 domains, IceHistory v2.4.0, GEBCO2026 + r); the maps folder needs grid_PAT-PAL-8KM.txt |
| kryos_NH-ANT-PAT_plastic_vilma2_inv.nml | North, Antarctica, PatagoniaPaleo | plastic x 3 | vilma2 | The implied mass balance by joint inversion (mass_balance = "inverted", slide_law = "coulomb_n") with a surface instance smb_simple per domain as the prior (no climate: tsl_const); see Implied mass balance |
In the _b1 files and the NH-ANT(-PAT) files, taub_domain_factor_file (the present-day factors per domain, Stage 1) is "kryos_data/plastic/taub_domain_factor_v3.nc" on every instance (the released factors; v3 is v2 plus Patagonia, identical on all NH and ANT domains), and taub_scale_file (the multipliers per scale group of the calibration) is "". kryos_North_plastic.nml and kryos_North_plastic_vilma2.nml list neither key (the default "": Gowan’s tau_b as it is). The calibration tools set them per run (Calibration and ensembles); for one run, -p ice_nor.taub_scale_file=<file> ....
The Yelmo configurations
Converted from yelmox or derived from the converted files; generated, so do not edit them: change the source and generate again.
| Par file | Domains | Generated by | What it sets up |
|---|---|---|---|
| kryos_Greenland.nml | Greenland (GRL-16KM) | tools/bin/yelmox2kryos.jl from yelmox_Greenland.nml |
yelmox’s Greenland: Yelmo, chion, FastIsostasy, 15 kyr, the yelmox output schedules |
| kryos_Antarctica.nml | Antarctica (hub ANT-16KM, ice ANT-32KM) | yelmox2kryos.jl from yelmox_Antarctica.nml, -p sim.relax=False sim.opt=False |
yelmox’s Antarctica without relaxation and optimisation, 15 kyr |
| kryos_North.nml | North (NH-32KM) | yelmox2kryos.jl from yelmox_North.nml |
yelmox’s North: 100 kyr at a constant LGM forcing time (time_const = -21e3) |
| kryos_NH-ANT.nml | North, Antarctica | tools/bin/kryos-merge.jl from kryos_North.nml + kryos_Antarctica.nml |
The two domains in one run with FastIsostasy (15 kyr, forcing time 0); merge report kryos_NH-ANT_merge.md |
| kryos_NH-ANT_vilma2.nml | North, Antarctica | tools/bin/kryos-vilma2-par.jl from kryos_NH-ANT.nml |
The science case: Yelmo in both domains coupled to the global VILMA2 Earth (lmax 170, dt = 10), 80 ka transient from PaleoMIST, refcorr reference, bundles every 5 kyr; every choice in kryos_NH-ANT_vilma2_conversion.md |
| kryos_NH-ANT_calib.nml | North, Antarctica | tools/bin/kryos-calib-par.jl sci from kryos_NH-ANT.nml |
The calib-cf variant: [ytill_ant] scale_zb 0 -> 2, cf_ref 0.1 -> 0.05, threshold calving in [ycalv_ant] |
| kryos_NH-ANT_vilma2_calib.nml | North, Antarctica | kryos-calib-par.jl sci from kryos_NH-ANT_vilma2.nml |
The same changes on the science case |
Each converted file has its report next to it (par/kryos_<domain>_conversion.md): every yelmox key mapped, default-equal or dropped, with the reason. The converter needs the Julia project of tools/; see Tools.
par/gate/
The files of the regression gates (yelmox against kryos, phase by phase; Developer notes). The yelmox conversions are 1000-yr runs, lossless (write_lossless = True), with dense output schedules.
| Par file | What it sets up |
|---|---|
grl.nml, nor.nml |
yelmox_Greenland, yelmox_North, 1000 yr |
ant.nml |
yelmox_Antarctica without relaxation and optimisation, 1000 yr |
ant-cf.nml |
yelmox_Antarctica with opt.opt_tf = none (the interim gate of phase 2) |
ant-full.nml |
yelmox_Antarctica with relaxation and optimisation (the phase 2 gate) |
sci.nml |
nor.nml + ant.nml merged (kryos-merge.jl) |
sci-hub.nml |
sci.nml with the global geometry hub as an observer ([globe_ice] appended, gate G1b, tools/gate/make_sci_hub.sh); must not change any result of sci.nml |
g5-vilma2.nml, g5-fastiso.nml |
Gate G5: Antarctica the only active domain, from PaleoMIST at -20e3 yr, paleo forcing (lgm + ocean), VILMA2 or FastIsostasy (tools/bin/kryos-ant-par.jl) |
g5-vilma2-calib.nml, g5-fastiso-calib.nml |
the same from the calib-cf variants |
g6-smb.nml |
Gate G6: kryos_NH-ANT_vilma2.nml with the surface of both domains from smb_simple (tools/bin/kryos-smb-par.jl) |
par/calib/
The single-domain runs of the basal-friction (cf_ref) calibration, generated by tools/bin/kryos-calib-par.jl from kryos_NH-ANT_calib.nml, with FastIsostasy and frozen forcing (docs/dev/calib-cf.md; submitted with tools/levante/archive/calib.sh):
| Par file | Case |
|---|---|
Antarctica-pd.nml, North-pd.nml |
pd: 0 -> 30 kyr, present-day forcing, cold start from the hub reference |
Antarctica-lgm.nml, North-lgm.nml |
lgm: 30 -> 60 kyr, restarted from pd, LGM forcing (alpha 1, sea level -120 m, orbit -21 ka) |
North-lgmrecon.nml |
lgmrecon: LGM forcing, cold start from PaleoMIST at 20 ka, 0 -> 20 kyr |
How a par file is structured
A par file is a set of namelist groups. The run group [kryos] names the rest:
&kryos domains = "North", globe = "globe", clock = "clock", restart_out = "out_rst", out_dir = "./", ...
&clock time_init, time_end, dtt, method, ...
&out_1D method = "const", dt = 100.0 schedule groups, named by the out_* keys
&out_2D ...
&globe geo = "geo_glob" the global instances (forcing, geo)
&geo_glob backend = "vilma2", dt, out_2D, vilma = "vilma", ice_bg = "globe_ice", ...
&vilma overrides of input/vilma_defaults.nml
&globe_ice the global ice field; its field groups &X_z_bed, &X_H_ice, &X_dH_ice
&North grid_hub = "NH-32KM", topo = "topo_nor", regions = "regions_nor", ice = "ice_nor", geo = "geo_nor"
&ice_nor backend = "plastic", grid, dt, out_2D, out_1D, ... and the [ice_plastic] keys
&geo_nor backend = "vilma2", grid = "NH-32KM", ... the regional port
&topo_nor path = "fesmdata/{domain}/{grid_name}/{grid_name}_TOPO-GEBCO2026.nc", ...
®ions_nor
- Domains.
[kryos] domainslists the domain groups. A domain group names its hub grid and one instance group per component (ice,geo,climate,surface,shelf,geothermal,sediments;""= absent): a component runs if and only if the domain names an instance. Instance names are unique in a run (ice_nor,ice_ant). - Instances. An instance group holds the core keys of
[instance](backend,grid(""= the default chain: ice on the hub, geo on the ice, …),dt(0: every step),phase,clock,out_2D,out_1D,out_vars) and the keys of its backend’s template[<component>_<backend>](e.g.[ice_plastic],[geo_vilma2],[surface_smb_simple]). - Schedules. The
out_*andrestart_outkeys name schedule groups ([out_2D],[out_rst], …) of the template[schedule](method = none | const | times | file);"none"is off. - Paths. Relative to the run directory;
{domain}and{grid_name}are replaced (e.g. the margin filefesmdata/{domain}/{grid_name}/{grid_name}_IceHistory-PaleoMIST.nc).
Templates and defaults
- The kryos groups (
[kryos], the clock, schedules,[globe], domains, instances) are validated against the templates in input/kryos_defaults.nml (one per group; an instance against[instance]plus[<component>_<backend>]): a key left out takes the template’s value, and a key marked “required” there must be set. - Backend library groups (
[yelmo],[ytopo], …,[chion]) take their defaults from the library’s defaults file ininput/(yelmo_defaults.nml,chion_defaults.nml).[vilma]takes its defaults frominput/vilma_defaults.nml: the group sets overrides only, and its name is fixed (VILMA2 looks the defaults up under it). The groups of code kryos hosts ([smb_simple], the chion host’s[orbit],[globe_ice]) have their schema at the end ofkryos_defaults.nml. - Data field groups (
[X_z_bed], …) followinput/datasrc_defaults.nml; snapshot, term and coefficient groupssnapshots_defaults.nmlandforcing_defaults.nml. - Groups whose library has no defaults file (
[topo],[regions],[isos],[barysealevel],[marine_shelf]) have no template: set every key the library reads. - Named library groups (
snapshot_*,term_*,coef_*, data field groups) are looked up in the par file, then in the files of[kryos] library(kryos ships none).
So a hand-written par file lists only what differs from the defaults (the plastic files). The converted files are fully expanded instead: every key of every group is set, library = "", and the header records the sha256 of the input files they were made against, so they stay valid when a default changes.
Overrides
- runme:
-p group.key=valueoverrides a key of the par file for one run (bslis an alias ofbarysealevel); a comma list makes an ensemble:-p ydyn.beta_q=0.2,0.5,1.0. The key must exist in the par file or ininput/kryos_defaults.nml. The clock group is the one[kryos] clocknames (Getting started). - tools/levante/set_nml.py: sets existing keys of a fully expanded par file in place (
group.key=value, case-insensitive names; quote strings yourself; a trailing comment is kept; a key the group does not have stops it: it never adds keys).
python3 tools/levante/set_nml.py par.nml clock.time_end=-70e3 'kryos.restart_out="none"' 'ice_nor.taub_scale_file="taub_scale.nc"'kryos.xitself takes no overrides: one argument, the par file.
Do not edit a generated file (the converted, merged and derived files above): change the source or the generator and generate again (Julia project tools/, Tools).