Skip to content

ability to run both noevolve and evolve ice sheets in one simu…#25

Open
mvertens wants to merge 29 commits into
noresmfrom
feature/add_noevolve_glc_mode
Open

ability to run both noevolve and evolve ice sheets in one simu…#25
mvertens wants to merge 29 commits into
noresmfrom
feature/add_noevolve_glc_mode

Conversation

@mvertens

@mvertens mvertens commented Jun 2, 2026

Copy link
Copy Markdown

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 trigger in the compset name by either
CISM2%AIS-NOEVOLVE%GRIS-NOEVOLVE or CISM2%AIS-EVOLVE%GRIS-NOEVOLVE

The canonical use case is 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 behavior is identical to before — this PR is backward compatible.

Architecture

The cap (glc_comp_nuopc.F90) is the single orchestration point. It 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

Self-contained noevolve implementation (adapted from
cdeps/dglc/dglc_datamode_noevolve_mod.F90), with 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 consolidated into 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_modesprognostic (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.

Files changed

File Change
drivers/cpl/nuopc/glc_noevolve_mod.F90 new — noevolve implementation w/ restart
drivers/cpl/nuopc/glc_comp_nuopc.F90 mode-based routing; prognostic_index mapping; nested-state ownership moved into the c\ap
drivers/cpl/nuopc/glc_import_export.F90 advertise/realize/import/export now take nested states + mode/index args; sk\ip noevolve sheets
source_glc/glc_InitMod.F90 read new namelist entries; filter to prognostic subset
source_glc/glc_constants.F90 add icesheet_names_total, icesheet_modes, global_nx/ny, internal_gridsize, noevolve_da\tafiles
source_glc/glc_io.F90 expose glc_filename; minor unit-handling cleanup
cime_config/namelist_definition_cism.xml new namelist entries with grid-keyed defaults
cime_config/buildnml default icesheet_modes; pass GLC_GRID

Testing status

Per the commit history: prognostic-Greenland + noevolve-Antarctica runs and restarts
for noevolve ice sheets are working.

Suggested test plan

  • Regression: default config (all prognostic) — bit-for-bit identical to base noresm.
  • 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.
  • Hybrid restart: write at year N, restart, confirm Fgrg_rofi continuity for the
    noevolve ice sheet.

Verified that the following compset/grid combinations gave the right behavior.
./create_newcase --case aisPgrisD --compset 1850_SATM_DLND%SCPL_SICE_SOCN_SROF_CISM2%AIS-EVOLVE%GRIS-NOEVOLVE_SWAV_SESP --res a%null_l%0.9x1.25_oi%null_r%null_w%null_z%null_g%ais8:gris4_m%gx1v7 --project nn9560k --mach olivia --run-unsupported
./create_newcase --case aisD --compset 1850_SATM_DLND%SCPL_SICE_SOCN_SROF_CISM2%GRIS-NOEVOLVE_SWAV_SESP --res a%null_l%0.9x1.25_oi%null_r%null_w%null_z%null_g%gris4_m%gx1v7 --project nn9560k --mach olivia --run-unsupported
./create_newcase --case grisD --compset 1850_SATM_DLND%SCPL_SICE_SOCN_SROF_CISM2%GRIS-NOEVOLVE_SWAV_SESP --res a%null_l%0.9x1.25_oi%null_r%null_w%null_z%null_g%gris4_m%gx1v7 --project nn9560k --mach olivia --run-unsupported

@mvertens mvertens marked this pull request as draft June 2, 2026 11:30
@mvertens mvertens changed the title new capability to run both noevolve and evolve ice sheets in one simu… ability to run both noevolve and evolve ice sheets in one simu… Jun 2, 2026
@mvertens mvertens force-pushed the feature/add_noevolve_glc_mode branch from d95061b to c7db770 Compare June 3, 2026 11:19
mvertens and others added 9 commits June 3, 2026 15:13
  Replaces the ESMF_FieldRegridGetArea path with the dglc datamode_noevolve
  formula: Sg_area = (internal_gridsize/Rearth)^2.  Adds noevolve_internal_gridsize
  to cism_hybrid_nml with grid-specific defaults.
…king but - restarts for noevolve still need to be resolved
@mvertens mvertens marked this pull request as ready for review June 12, 2026 12:33
@mvertens

Copy link
Copy Markdown
Author

@mpetrini-norce @hgoelzer @whlipscomb @Katetc the compset name can now trigger the use of the new noevolve mode since this PR redefines NOEVOLVE mode to have the DGLC behavior and is now trigger in the compset name by either CISM2%AIS-NOEVOLVE%GRIS-NOEVOLVE or CISM2%AIS-EVOLVE%GRIS-NOEVOLVE

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.

2 participants