ability to run both noevolve and evolve ice sheets in one simu…#25
Open
mvertens wants to merge 29 commits into
Open
ability to run both noevolve and evolve ice sheets in one simu…#25mvertens wants to merge 29 commits into
mvertens wants to merge 29 commits into
Conversation
d95061b to
c7db770
Compare
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
…mented/tested for noevolve icesheets
… code to read this in
…t in just one place for consistency
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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Add
noevolve(data-glacier) mode for individual ice sheets in the CISM NUOPC capSummary
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
dglcdata model, which cannot be mixed with prognostic CISM in one run.When the namelist is left at its defaults, all ice sheets are
prognosticand 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 aprognostic_indexmapping (NUOPC ice-sheet index → CISM internal instance index), then routes each ice sheet through one of two paths:glc_initialize(CISM dycore)glc_noevolve_init(read statictopg/thk)glc_runglc_noevolve_advance(diagnoseFgrg_rofifrom SMB)export_fields(full CISM fields)import_fieldsglc_io_write_restartglc_noevolve_restart_write/_readCISM internals only ever see the prognostic subset:
glc_InitModfiltersnum_icesheets/icesheet_namesdown to theprognosticentries after reading the namelist, so the dycore, history, and restart machinery are untouched.glc_constantsretains the full list asicesheet_names_total.New module:
drivers/cpl/nuopc/glc_noevolve_mod.F90Self-contained noevolve implementation (adapted from
cdeps/dglc/dglc_datamode_noevolve_mod.F90), with full restart support:glc_noevolve_init— reads statictopg/thkvia PIO, computes time-invariant exportfields (
Sg_area,Sg_topo,Sg_ice_covered,Sg_icemask,Sg_icemask_coupled_fluxes), grabs the SMB import pointer, and reads the noevolverestart file on a continuation run.
glc_noevolve_advance— recomputesFgrg_rofieach coupling step from the importedFlgl_qicewith mass-conserving redistribution of negative fluxes.glc_noevolve_restart_write/glc_noevolve_restart_read— PIO-based restart ofFgrg_rofiwith per-ice-sheet rpointer files.Sg_areais computed as(internal_gridsize / Rearth)**2, matching the dglcconvention.
Namelist: all input consolidated into
cism_paramsThe refactor places all hybrid configuration in the existing
cism_paramsgroup (oneplace, for consistency) rather than a separate namelist group. New entries in
namelist_definition_cism.xml:icesheet_modes—prognostic(default) ornoevolveper ice sheetnoevolve_datafiles— static topo/thickness NetCDF path per ice sheet (with$DIN_LOC_ROOTdefaults forais8/gris4)global_nx,global_ny— global dimensions of the noevolve data fileinternal_gridsize— grid spacing (m) used for cell-area computationbuildnmldefaultsicesheet_modestoprognosticfor every ice sheet and passesGLC_GRIDso the grid-keyed defaults resolve.Files changed
drivers/cpl/nuopc/glc_noevolve_mod.F90drivers/cpl/nuopc/glc_comp_nuopc.F90prognostic_indexmapping; nested-state ownership moved into the c\apdrivers/cpl/nuopc/glc_import_export.F90advertise/realize/import/exportnow take nested states + mode/index args; sk\ip noevolve sheetssource_glc/glc_InitMod.F90source_glc/glc_constants.F90icesheet_names_total,icesheet_modes,global_nx/ny,internal_gridsize,noevolve_da\tafilessource_glc/glc_io.F90glc_filename; minor unit-handling cleanupcime_config/namelist_definition_cism.xmlcime_config/buildnmlicesheet_modes; passGLC_GRIDTesting status
Per the commit history: prognostic-Greenland + noevolve-Antarctica runs and restarts
for noevolve ice sheets are working.
Suggested test plan
noresm.Fgrg_rofiover Antarctica; CISM-only fields zero over Antarctica.Fgrg_roficontinuity for thenoevolve 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