Skip to content

Add noevolve (data-glacier) mode for individual ice sheets - #147

Open
mvertens wants to merge 137 commits into
ESCOMP:masterfrom
mvertens:feature/merge_cismwrap_2_2_007_noresm_v12
Open

mvertens wants to merge 137 commits into
ESCOMP:masterfrom
mvertens:feature/merge_cismwrap_2_2_007_noresm_v12

Conversation

@mvertens

@mvertens mvertens commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Add noevolve (data-glacier) mode for individual ice sheets in the CISM NUOPC cap

Summary

This PR enables hybrid ice-sheet configurations in the CISM coupled cap: each ice sheet can independently run either as a fully prognostic CISM dycore ice sheet, or as a noevolve (data-glacier) ice sheet that reads static topography/thickness from a file and diagnoses ice runoff from the imported surface mass balance.

This PR redefines NOEVOLVE mode to have the DGLC behavior and is now triggered in the compset name by either
CISM2%AIS-NOEVOLVE%GRIS-NOEVOLVE or CISM2%AIS-EVOLVE%GRIS-NOEVOLVE

The target use case is to enable running Greenland prognostically while Antarctica is noevolve (or vice versa) within a single GLC component instance — previously this required the separate dglc data model, which cannot be mixed with prognostic CISM in one run.

When the namelist is left at its defaults, all ice sheets are prognostic and the behavior is identical to before - so this PR is backward compatible.

Architecture

The cap (glc_comp_nuopc.F90) now builds a per-ice-sheet mode list and a prognostic_index mapping (NUOPC ice-sheet index → CISM internal instance index), then routes each ice sheet through one of two paths:

Prognostic Noevolve
Init glc_initialize (CISM dycore) glc_noevolve_init (read static topg/thk)
Advance glc_run glc_noevolve_advance (diagnose Fgrg_rofi from SMB)
Export export_fields (full CISM fields) static masks + diagnosed runoff; CISM-specific fields zero-filled
Import import_fields own SMB pointer fetch
Restart glc_io_write_restart glc_noevolve_restart_write / _read

CISM internals only ever see the prognostic subset: glc_InitMod filters num_icesheets / icesheet_names down to the prognostic entries after reading the namelist, so the dycore, history, and restart machinery are untouched. glc_constants retains the full list as icesheet_names_total.

New module: drivers/cpl/nuopc/glc_noevolve_mod.F90

The new self-contained noevolve implementation is adapted from cdeps/dglc/dglc_datamode_noevolve_mod.F90) and has full restart support:

  • glc_noevolve_init — reads static topg/thk via PIO, computes time-invariant export fields (Sg_area, Sg_topo, Sg_ice_covered, Sg_icemask, Sg_icemask_coupled_fluxes), grabs the SMB import pointer, and reads the noevolve
    restart file on a continuation run.
  • glc_noevolve_advance — recomputes Fgrg_rofi each coupling step from the imported Flgl_qice with mass-conserving redistribution of negative fluxes.
  • glc_noevolve_restart_write / glc_noevolve_restart_read — PIO-based restart of Fgrg_rofi with per-ice-sheet rpointer files.
  • Sg_area is computed as (internal_gridsize / Rearth)**2, matching the dglc convention.

Namelist: all input is in cism_params

The refactor places all hybrid configuration in the existing cism_params group (one place, for consistency) rather than a separate namelist group. New entries in namelist_definition_cism.xml:

  • icesheet_modes — prognostic (default) or noevolve per ice sheet - noevolve_datafiles — static topo/thickness NetCDF path per ice sheet (with $DIN_LOC_ROOT defaults for ais8/gris4)
  • global_nx, global_ny — global dimensions of the noevolve data file
  • internal_gridsize — grid spacing (m) used for cell-area computation

buildnml defaults icesheet_modes to prognostic for every ice sheet and passes GLC_GRID so the grid-keyed defaults resolve.

Testing:

  • verified that the following new test worked correctly:
    ERS_D_Ly3.f09_g17_ais8gris4.T1850Gagx.derecho_intel.cism_pr

  • todo: *aux_glc - run aux_g;c tests and compare to baseline

  • todo: Hybrid startup: Greenland prognostic + Antarctica noevolve — verify CISM history contains only Greenland; mediator sees non-zero Fgrg_rofi over Antarctica; CISM-only fields zero over Antarctica.

mvertens and others added 30 commits July 4, 2024 12:17
mvertens and others added 28 commits June 13, 2026 10:03
ability to run both noevolve and evolve ice sheets in one simulation
…melists

fix restart issues that arise with time averaged fields
…nition_back

added namelist_definition_cism.xml back
update source_cism to cism_main_2.01.017_noresm_v9
…odel

added .cime_model_id and updated .github externals
@mvertens mvertens changed the title merge cismwrap_2_2_007_noresm v12 Add noevolve (data-glacier) mode for individual ice sheets Sep 26, 2026
@mvertens

Copy link
Copy Markdown
Contributor Author

@Katetc @gunterl @whlipscomb - I think this PR is ready for review. I'm happy to talk about it. I've summarized the testing status and what I think still needs to be done.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants