Using ISSM Model Data

PINNICLE is fully compatible with output from the Ice-sheet and Sea-level System Model (ISSM). ISSM is a widely used finite-element ice sheet model that can generate structured, mesh-based data in .mat format. PINNICLE includes dedicated functionality to automatically parse, align, and sample ISSM-generated model datasets.

Overview

ISSM model output typically includes spatial fields such as:

Field

Name in ISSM

Key in PINNICLE

Mesh information

md.mesh.x, md.mesh.y

"x", "y"

Ice velocity components

md.inversion.vx_obs, md.inversion.vy_obs

"u", "v"

Ice thickness

md.geometry.thickness

"H"

Surface elevation

md.geometry.surface

"s"

Basal friction coefficient

md.friction.C

"C"

Ice rheology factor

md.materials.rheology_B`

"B"

Surface mass balance

md.smb.mass_balance-md.balancethickness.thickening_rate

"a"

PINNICLE automatically reads, processes, and extracts relevant fields for training and model initialization, and assigns them to the corresponding variables.

Preprocessing Recommendations

  • Export variables from ISSM with consistent units (SI system: m, s, Pa).

  • Save structured data using saveasstruct(md, filename) in MATLAB to export the ISSM model to a nested struct.

  • Use mesh files (.exp) from ISSM as shapefile input to define simulation domain.

Configuration

To use ISSM data, specify a dataset block in the configuration dictionary:

hp["data"] = {
    "ISSM": {
        "data_path": "Helheim.mat",
        "data_size": {"u": 4000, "v": 4000, "H": 4000, "s": 4000, "C": None}
    }
}
  • "data_path": Path to the .mat file containing ISSM model

  • "data_size": Number of data points to randomly sample for each variable

  • Set a variable to "None" to infer it is only used as a Dirichlet boundary condition

  • If the key is not mentioned in "data_size", then the corresponding field will not use data from this file

Time-Dependent Data

For transient modeling, provide a time series of ISSM datasets:

for t in np.linspace(2008, 2009, 11):
    issm = {}
    if t == 2008:
        issm["data_size"] = {"u": 3000, "v": 3000, "a": 3000, "H": 3000}
    else:
        issm["data_size"] = {"u": 3000, "v": 3000, "a": 3000, "H": None}

    issm["data_path"] = f"Helheim_Transient_{t}.mat"
    issm["default_time"] = t
    issm["source"] = "ISSM"
    hp["data"][f"ISSM{t}"] = issm

PINNICLE will align and sample the time series accordingly.

See the Examples section for full demonstrations using ISSM input.