diff --git a/compass/landice/__init__.py b/compass/landice/__init__.py index 338f5237a2..29de6e576d 100644 --- a/compass/landice/__init__.py +++ b/compass/landice/__init__.py @@ -16,7 +16,7 @@ from compass.landice.tests.koge_bugt_s import KogeBugtS from compass.landice.tests.mesh_modifications import MeshModifications from compass.landice.tests.mismipplus import MISMIPplus -from compass.landice.tests.slm import Slm +from compass.landice.tests.slm_circ_icesheet import SlmCircIcesheet from compass.landice.tests.thwaites import Thwaites from compass.mpas_core import MpasCore @@ -50,5 +50,5 @@ def __init__(self): self.add_test_group(KogeBugtS(mpas_core=self)) self.add_test_group(MeshModifications(mpas_core=self)) self.add_test_group(MISMIPplus(mpas_core=self)) - self.add_test_group(Slm(mpas_core=self)) + self.add_test_group(SlmCircIcesheet(mpas_core=self)) self.add_test_group(Thwaites(mpas_core=self)) diff --git a/compass/landice/tests/slm/__init__.py b/compass/landice/tests/slm/__init__.py deleted file mode 100644 index 0ed3787e7d..0000000000 --- a/compass/landice/tests/slm/__init__.py +++ /dev/null @@ -1,17 +0,0 @@ -from compass.landice.tests.slm.circ_icesheet import CircIcesheetTest -from compass.testgroup import TestGroup - - -class Slm(TestGroup): - """ - A test group for Sea-Level Model test cases - """ - def __init__(self, mpas_core): - """ - mpas_core : compass.landice.Landice - the MPAS core that this test group belongs to - """ - super().__init__(mpas_core=mpas_core, name='slm') - - self.add_test_case( - CircIcesheetTest(test_group=self)) diff --git a/compass/landice/tests/slm_circ_icesheet/__init__.py b/compass/landice/tests/slm_circ_icesheet/__init__.py new file mode 100644 index 0000000000..e0226c5da1 --- /dev/null +++ b/compass/landice/tests/slm_circ_icesheet/__init__.py @@ -0,0 +1,23 @@ +from compass.landice.tests.slm_circ_icesheet.mesh_convergence import ( + MeshConvergenceTest, +) +from compass.landice.tests.slm_circ_icesheet.smoke_test import SmokeTest +from compass.testgroup import TestGroup + + +class SlmCircIcesheet(TestGroup): + """ + This test group generates an idealized, circular ice sheet that has a + prescribed thickness evolution for testing coupling between MALI + and the Sea-Level Model. + """ + def __init__(self, mpas_core): + """ + mpas_core : compass.landice.Landice + the MPAS core that this test group belongs to + """ + super().__init__(mpas_core=mpas_core, name='slm_circ_icesheet') + + self.add_test_case( + MeshConvergenceTest(test_group=self)) + self.add_test_case(SmokeTest(test_group=self)) \ No newline at end of file diff --git a/compass/landice/tests/slm/circ_icesheet/__init__.py b/compass/landice/tests/slm_circ_icesheet/mesh_convergence/__init__.py similarity index 75% rename from compass/landice/tests/slm/circ_icesheet/__init__.py rename to compass/landice/tests/slm_circ_icesheet/mesh_convergence/__init__.py index 9176bcb76f..c0b446a8c9 100644 --- a/compass/landice/tests/slm/circ_icesheet/__init__.py +++ b/compass/landice/tests/slm_circ_icesheet/mesh_convergence/__init__.py @@ -1,14 +1,14 @@ -from compass.landice.tests.slm.circ_icesheet.run_model import RunModel -from compass.landice.tests.slm.circ_icesheet.setup_mesh import SetupMesh -from compass.landice.tests.slm.circ_icesheet.visualize import Visualize +from compass.landice.tests.slm_circ_icesheet.run_model import RunModel +from compass.landice.tests.slm_circ_icesheet.setup_mesh import SetupMesh +from compass.landice.tests.slm_circ_icesheet.visualize import Visualize from compass.testcase import TestCase -class CircIcesheetTest(TestCase): +class MeshConvergenceTest(TestCase): """ - This test generates an idealized, circular ice sheet that has a - prescribed thickness evolution for testing coupling between MALI - and the Sea-Level Model. + This test uses the circular ice sheet test case to test the convergence + of the coupled MALI-SLM system with respect to mesh resolution of both + MALI and the SLM. """ def __init__(self, test_group): @@ -17,11 +17,11 @@ def __init__(self, test_group): Parameters ---------- - test_group : compass.landice.tests.slm.Slm + test_group : compass.landice.tests.slm_circ_icesheet.SlmCircIcesheet The test group that this test case belongs to The resolution or type of mesh of the test case """ - name = 'circ_icesheet' + name = 'mesh_convergence' subdir = name super().__init__(test_group=test_group, name=name, subdir=subdir) @@ -52,7 +52,7 @@ def configure(self): ntasks = 512 else: ntasks = 128 - min_tasks = ntasks + min_tasks = 10 self.add_step(RunModel(test_case=self, res=res, nglv=nglv, ntasks=ntasks, min_tasks=min_tasks, openmp_threads=1, @@ -60,6 +60,3 @@ def configure(self): '/run_model')) step = Visualize(test_case=self) self.add_step(step, run_by_default=True) - - # no run() method is needed because we're doing the default: running all - # steps diff --git a/compass/landice/tests/slm/circ_icesheet/circ_icesheet.cfg b/compass/landice/tests/slm_circ_icesheet/mesh_convergence/mesh_convergence.cfg similarity index 96% rename from compass/landice/tests/slm/circ_icesheet/circ_icesheet.cfg rename to compass/landice/tests/slm_circ_icesheet/mesh_convergence/mesh_convergence.cfg index 1d3d09e35b..edcf3d3e65 100644 --- a/compass/landice/tests/slm/circ_icesheet/circ_icesheet.cfg +++ b/compass/landice/tests/slm_circ_icesheet/mesh_convergence/mesh_convergence.cfg @@ -26,6 +26,9 @@ topo_elev = -1500.0 # center of the domain put_origin_on_a_cell = False +# Number of ESMF processes to use for interpolation between MALI and the SLM +esmf_procs = 128 + # Config options for surface mass balance forcing [smb_forcing] diff --git a/compass/landice/tests/slm/circ_icesheet/namelist.landice b/compass/landice/tests/slm_circ_icesheet/mesh_convergence/namelist.landice similarity index 100% rename from compass/landice/tests/slm/circ_icesheet/namelist.landice rename to compass/landice/tests/slm_circ_icesheet/mesh_convergence/namelist.landice diff --git a/compass/landice/tests/slm/circ_icesheet/streams.landice b/compass/landice/tests/slm_circ_icesheet/mesh_convergence/streams.landice similarity index 100% rename from compass/landice/tests/slm/circ_icesheet/streams.landice rename to compass/landice/tests/slm_circ_icesheet/mesh_convergence/streams.landice diff --git a/compass/landice/tests/slm/namelist.sealevel.template b/compass/landice/tests/slm_circ_icesheet/namelist.sealevel.template similarity index 100% rename from compass/landice/tests/slm/namelist.sealevel.template rename to compass/landice/tests/slm_circ_icesheet/namelist.sealevel.template diff --git a/compass/landice/tests/slm/circ_icesheet/run_model.py b/compass/landice/tests/slm_circ_icesheet/run_model.py similarity index 71% rename from compass/landice/tests/slm/circ_icesheet/run_model.py rename to compass/landice/tests/slm_circ_icesheet/run_model.py index 4bf82e800c..fa1b7b4253 100644 --- a/compass/landice/tests/slm/circ_icesheet/run_model.py +++ b/compass/landice/tests/slm_circ_icesheet/run_model.py @@ -12,8 +12,9 @@ class RunModel(Step): A step for performing forward MALI runs as part of dome test cases. """ - def __init__(self, test_case, res, nglv, ntasks, name='run_model', - subdir=None, min_tasks=None, openmp_threads=1): + def __init__(self, test_case, res, nglv, resource_package=None, + ntasks=None, name='run_model', subdir=None, min_tasks=None, + openmp_threads=1): """ Create a new test case @@ -28,6 +29,10 @@ def __init__(self, test_case, res, nglv, ntasks, name='run_model', nglv : str Number of Gauss-Legendre nodes in latitude in the SLM grid + resource_package : str, optional + The resource package (module path) where namelist/streams/template + files live. If None, it is derived from the test_case module. + ntasks : int the number of tasks the step would ideally use. If fewer tasks are available on the system, the step will run on all available @@ -55,13 +60,17 @@ def __init__(self, test_case, res, nglv, ntasks, name='run_model', ntasks=ntasks, min_tasks=min_tasks, openmp_threads=openmp_threads) - self.add_namelist_file( - 'compass.landice.tests.slm.circ_icesheet', 'namelist.landice', - out_name='namelist.landice') + # determine resource package (module path to circ_icesheet) + if resource_package is None: + resource_package = test_case.__module__ + self.resource_package = resource_package + + # add namelist and streams from the circ_icesheet package + self.add_namelist_file(self.resource_package, 'namelist.landice', + out_name='namelist.landice') - self.add_streams_file( - 'compass.landice.tests.slm.circ_icesheet', 'streams.landice', - out_name='streams.landice') + self.add_streams_file(self.resource_package, 'streams.landice', + out_name='streams.landice') self.add_input_file(filename='landice_grid.nc', target='../setup_mesh/landice_grid.nc') @@ -88,13 +97,12 @@ def setup(self): section = self.config['slm'] slm_input_root = section.get('slm_input_root').rstrip('/') - # change the sealevel namelist - template = Template(resources.read_text - ('compass.landice.tests.slm', - 'namelist.sealevel.template')) - text = template.render( - nglv=self.nglv, - slm_input_root=slm_input_root) + template = Template( + resources.read_text('compass.landice.tests.slm_circ_icesheet', + 'namelist.sealevel.template') + ) + text = template.render(nglv=self.nglv, + slm_input_root=slm_input_root) # write out the namelist.sealevel file file_slm_nl = os.path.join(self.work_dir, 'namelist.sealevel') diff --git a/compass/landice/tests/slm/circ_icesheet/setup_mesh.py b/compass/landice/tests/slm_circ_icesheet/setup_mesh.py similarity index 97% rename from compass/landice/tests/slm/circ_icesheet/setup_mesh.py rename to compass/landice/tests/slm_circ_icesheet/setup_mesh.py index 79613430fe..a5d0411ea4 100644 --- a/compass/landice/tests/slm/circ_icesheet/setup_mesh.py +++ b/compass/landice/tests/slm_circ_icesheet/setup_mesh.py @@ -1,7 +1,6 @@ import os import shutil -import netCDF4 import numpy as np from mpas_tools.io import write_netcdf from mpas_tools.logging import check_call @@ -305,8 +304,9 @@ def _create_smb_forcing_file(config, logger, mali_mesh_file, filename): for t_index in range(len(t_array)): yr = start_year + (t_index * dt_year) xtime_str = f'{int(yr)}-01-01_00:00:00'.ljust(64) - xtime_char = netCDF4.stringtochar(np.array([xtime_str], 'S64'), - encoding='utf-8') + xtime_str_padded = xtime_str.ljust(64)[:64] + xtime_char = np.array(list(xtime_str_padded), dtype='S1') + xtime[t_index, :] = xtime_char xtime[t_index, :] = xtime_char smbfile.close() @@ -375,6 +375,8 @@ def _build_mapping_files(config, logger, res, nglv, mali_mesh_file): parallel_executable = config.get("parallel", "parallel_executable") # split the parallel executable into constituents in case it includes flags args = parallel_executable.split(' ') + nproc = config.getint("circ_icesheet", "esmf_procs") + args.extend(['-n', str(nproc)]) args.extend(['ESMF_RegridWeightGen', '-s', mali_scripfile, '-d', slm_scripfile, @@ -386,6 +388,8 @@ def _build_mapping_files(config, logger, res, nglv, mali_mesh_file): check_call(args, logger) args = parallel_executable.split(' ') + nproc = config.getint("circ_icesheet", "esmf_procs") + args.extend(['-n', str(nproc)]) args.extend(['ESMF_RegridWeightGen', '-s', slm_scripfile, '-d', mali_scripfile, diff --git a/compass/landice/tests/slm_circ_icesheet/smoke_test/__init__.py b/compass/landice/tests/slm_circ_icesheet/smoke_test/__init__.py new file mode 100644 index 0000000000..e313d7b4cf --- /dev/null +++ b/compass/landice/tests/slm_circ_icesheet/smoke_test/__init__.py @@ -0,0 +1,59 @@ +from compass.landice.tests.slm_circ_icesheet.run_model import RunModel +from compass.landice.tests.slm_circ_icesheet.setup_mesh import SetupMesh +from compass.landice.tests.slm_circ_icesheet.visualize import Visualize +from compass.testcase import TestCase + + +class SmokeTest(TestCase): + """ + A lightweight smoke test using the baseline circ_icesheet configuration. + """ + def __init__(self, test_group): + name = 'smoke_test' + subdir = name + super().__init__(test_group=test_group, name=name, subdir=subdir) + + def configure(self): + config = self.config + section = config['circ_icesheet'] + mali_res = section.getint('mali_res') + + section = config['slm'] + slm_nglv = section.getint('slm_nglv') + + res = mali_res + nglv = slm_nglv + + # setup mesh and run model using resources from circ_icesheet package + self.add_step( + SetupMesh( + test_case=self, + name='setup_mesh', + res=res, + nglv=nglv, + ) + ) + + if (int(res) <= 16 and int(res) > 2): + ntasks = 256 + elif (int(res) <= 2): + ntasks = 512 + else: + ntasks = 128 + min_tasks = 10 + + resource_package = ( + 'compass.landice.tests.slm_circ_icesheet.smoke_test' + ) + self.add_step( + RunModel( + test_case=self, + res=res, + nglv=nglv, + resource_package=resource_package, + ntasks=ntasks, + min_tasks=min_tasks, + openmp_threads=1, + name='run_model', + ) + ) diff --git a/compass/landice/tests/slm_circ_icesheet/smoke_test/namelist.landice b/compass/landice/tests/slm_circ_icesheet/smoke_test/namelist.landice new file mode 100644 index 0000000000..84a18792cc --- /dev/null +++ b/compass/landice/tests/slm_circ_icesheet/smoke_test/namelist.landice @@ -0,0 +1,53 @@ +&velocity_solver + config_velocity_solver = 'none' +/ +&advection + config_thickness_advection = 'fo' + config_tracer_advection = 'none' +/ +&solidearth + config_uplift_method = 'sealevelmodel' + config_slm_coupling_interval = 1 + config_MALI_to_SLM_weights_file = 'mapping_file_mali_to_slm.nc' + config_SLM_to_MALI_weights_file = 'mapping_file_slm_to_mali.nc' +/ +&calving + config_calving = 'none' + config_restore_calving_front = .false. +/ +&thermal_solver + config_thermal_solver = 'none' +/ +&iceshelf_melt + config_basal_mass_bal_float = 'none' + config_front_mass_bal_grounded = 'none' +/ +&physical_parameters + config_ice_density = 910.0 + config_ocean_density = 1028.0 + config_sea_level = 0.0 + config_dynamic_thickness = 10.0 +/ +&time_integration + config_dt = '0001-00-00_00:00:00' + config_time_integration = 'forward_euler' + config_adaptive_timestep = .false. +/ +&time_management + config_do_restart = .false. + config_restart_timestamp_name = 'restart_timestamp' + config_start_time = '2015-01-01_00:00:00' + config_stop_time = '2017-01-01_00:00:00' + config_run_duration = 'none' + config_calendar_type = 'noleap' +/ +&io + config_pio_stride = 128 +/ +&AM_globalStats + config_AM_globalStats_enable = .true. + config_AM_globalStats_compute_interval = 'output_interval' + config_AM_globalStats_stream_name = 'globalStatsOutput' + config_AM_globalStats_compute_on_startup = .true. + config_AM_globalStats_write_on_startup = .true. +/ diff --git a/compass/landice/tests/slm_circ_icesheet/smoke_test/smoke_test.cfg b/compass/landice/tests/slm_circ_icesheet/smoke_test/smoke_test.cfg new file mode 100644 index 0000000000..e23f5d07bd --- /dev/null +++ b/compass/landice/tests/slm_circ_icesheet/smoke_test/smoke_test.cfg @@ -0,0 +1,88 @@ +# Config options for slm circ_icesheet test case +[circ_icesheet] + +# The size of the domain in meters in the x and y directions for the planar mesh +lx = 6000000.0 +ly = 6000000.0 + +# list of MALI mesh resolutions in kilometers delimited by ',' without space +# i.e. The distance between adjacent cell centers. +mali_res = 40 + +# Ice shape type ('cylinder', and for dome, 'dome-halfar' or 'dome-cism') +# r0 and h0: initial radius and height of the cylinder ice in meters +ice_type = cylinder +r0 = 2000000.0 +h0 = 3000.0 + +# 'True' if manually want to set bedTopography elevation +# if 'False' topography will be set to 0 everywhere (flat bed at sea level) +set_topo_elev = True +# flat bed topography elevation in meters +# (positive value => land, negative => ocean) +topo_elev = -1500.0 + +# Whether to center the circular ice in the center of the cell that is closest to the +# center of the domain +put_origin_on_a_cell = False + +# Number of ESMF processes to use for interpolation between MALI and the SLM +esmf_procs = 128 + +# Config options for surface mass balance forcing +[smb_forcing] + +# Start, end and interval years for SMB forcing +start_year = 2015 +end_year = 2020 +dt_year = 1 + +# Direction in which SMB is applied ('horizontal' or 'vertical') +# and amount of ice to melt +direction = horizontal +# Change in radius in meters; used when 'direction == horizontal' +drdt = -2000.0 +# Change in height in meters;sed when 'direction == vertical' +dhdt = -20.0 + +# config options for the sea-level model +[slm] + +# Base path for SLM input directories. Expected subdirectories beneath this +# path follow the current structure used by this test case: +# icemodel/GL{nglv}/ice_noGrIS_GL{nglv}/ +# others/GL{nglv}/ +# earthmodel/ +slm_input_root = /global/cfs/cdirs/fanssie/SeaLevelModel_Inputs + +# List of the number of Gauss-Legendre points in latitude +# list delimited by ',' without space +slm_nglv = 512 + +# Max spherical harmonics degree and order +# i.e. SLM resolution of the SLM +slm_res = 512 + +# mapping method between the MALI and SLM grids +mapping_method_mali_to_slm = conserve +mapping_method_slm_to_mali = bilinear + +# ratio of MALI-SLM coupling interval and MALI output interval in integer years +time_stride = 1 + +# config options related to visualization +[circ_icesheet_viz] + +# Area (m^2) of the global ocean for calculating ice sheet contribution to +# sea level. Only used when MALI-SLM coupling is False +Aocn_const = 4.5007E+14 + +# Area (m^2) of the global ocean excluding the marine-based ice region +# only used when MALI-SLM coupling is False +AocnBeta_const = 4.50007E+14 + +# whether to save image files +save_images = True + +# whether to hide figures (typically when save_images = True) +hide_figs = True diff --git a/compass/landice/tests/slm_circ_icesheet/smoke_test/streams.landice b/compass/landice/tests/slm_circ_icesheet/smoke_test/streams.landice new file mode 100644 index 0000000000..0e7c180949 --- /dev/null +++ b/compass/landice/tests/slm_circ_icesheet/smoke_test/streams.landice @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/compass/landice/tests/slm/circ_icesheet/visualize.py b/compass/landice/tests/slm_circ_icesheet/visualize.py similarity index 100% rename from compass/landice/tests/slm/circ_icesheet/visualize.py rename to compass/landice/tests/slm_circ_icesheet/visualize.py diff --git a/docs/developers_guide/landice/api.rst b/docs/developers_guide/landice/api.rst index 29fb18d5dd..2236d1048c 100644 --- a/docs/developers_guide/landice/api.rst +++ b/docs/developers_guide/landice/api.rst @@ -450,30 +450,31 @@ mismipplus tasks.exact_cell_count tasks.approx_cell_count -slm +slm_circ_icesheet ~~~ -.. currentmodule:: compass.landice.tests.slm +.. currentmodule:: compass.landice.tests.slm_circ_icesheet .. autosummary:: :toctree: generated/ - Slm + SlmCircIcesheet - circ_icesheet.CircIcesheetTest - circ_icesheet.CircIcesheetTest.configure + mesh_convergence.MeshConvergenceTest + mesh_convergence.MeshConvergenceTest.configure + smoke_test.SmokeTest - circ_icesheet.run_model.RunModel - circ_icesheet.run_model.RunModel.setup - circ_icesheet.run_model.RunModel.run + run_model.RunModel + run_model.RunModel.setup + run_model.RunModel.run - circ_icesheet.setup_mesh.SetupMesh - circ_icesheet.setup_mesh.SetupMesh.run + setup_mesh.SetupMesh + setup_mesh.SetupMesh.run - circ_icesheet.visualize.Visualize - circ_icesheet.visualize.Visualize.setup - circ_icesheet.visualize.Visualize.run - circ_icesheet.visualize.visualize_slm_circsheet + visualize.Visualize + visualize.Visualize.setup + visualize.Visualize.run + visualize.visualize_slm_circsheet thwaites ~~~~~~~~ diff --git a/docs/developers_guide/landice/test_groups/slm.rst b/docs/developers_guide/landice/test_groups/slm.rst index 4c5c15d6bd..6758ef66a5 100644 --- a/docs/developers_guide/landice/test_groups/slm.rst +++ b/docs/developers_guide/landice/test_groups/slm.rst @@ -1,15 +1,16 @@ -.. _dev_landice_slm: +.. _dev_landice_slm_circ_icesheet: -slm -=== +slm_circ_icesheet +================== -The ``slm`` test group (:py:class:`compass.landice.tests.slm.Slm`) adds an -framework for evaluating coupled MALI and Sea-Level Model (SLM) -behavior. The group currently contains one test case, -``circular_icesheet_test`` -(:py:class:`compass.landice.tests.slm.circ_icesheet.CircIcesheetTest`), -which is designed to compare MALI-derived and SLM-derived estimates of sea -level change for a controlled circular ice-sheet geometry. +The ``slm_circ_icesheet`` test group (:py:class:`compass.landice.tests.slm_circ_icesheet.SlmCircIcesheet`) adds a +framework for evaluating coupled MALI and Sea-Level Model (SLM) behavior. +The group contains two test cases: + +* ``mesh_convergence`` (:py:class:`compass.landice.tests.slm_circ_icesheet.circ_icesheet.CircIcesheetTest`), + which compares MALI-derived and SLM-derived estimates of sea-level change + across a parameter sweep of mesh and SLM resolutions. +* ``smoke_test``, a minimal test case intended for quick validation and CI. framework --------- @@ -32,7 +33,7 @@ setup_mesh ~~~~~~~~~~ The class -:py:class:`compass.landice.tests.slm.circ_icesheet.setup_mesh.SetupMesh` +:py:class:`compass.landice.tests.slm_circ_icesheet.circ_icesheet.setup_mesh.SetupMesh` builds all inputs required by MALI and SLM coupling for each ``(mali_res, slm_nglv)`` combination: @@ -51,7 +52,7 @@ run_model ~~~~~~~~~ The class -:py:class:`compass.landice.tests.slm.circ_icesheet.run_model.RunModel` +:py:class:`compass.landice.tests.slm_circ_icesheet.circ_icesheet.run_model.RunModel` consumes the mesh, graph, SMB forcing, and mapping files from ``setup_mesh`` and runs MALI with SLM coupling options enabled in ``namelist.landice``. @@ -59,7 +60,7 @@ During ``setup()``, the step also: * creates ``OUTPUT_SLM`` and ``ICELOAD_SLM`` directories, * renders ``namelist.sealevel`` from the Jinja template - ``compass.landice.tests.slm.namelist.sealevel.template``, and + ``compass.landice.tests.slm_circ_icesheet.namelist.sealevel.template``, and * fills SLM input paths from the ``slm_input_root`` config option. The expected structure beneath ``slm_input_root`` is: @@ -72,7 +73,7 @@ visualize ~~~~~~~~~ The class -:py:class:`compass.landice.tests.slm.circ_icesheet.visualize.Visualize` +:py:class:`compass.landice.tests.slm_circ_icesheet.circ_icesheet.visualize.Visualize` collects all ``output.nc`` files produced by the parameter sweep and computes diagnostic quantities for coupled MALI-SLM comparison. diff --git a/docs/users_guide/landice/test_groups/index.rst b/docs/users_guide/landice/test_groups/index.rst index 438d2dbb09..63e5649b63 100644 --- a/docs/users_guide/landice/test_groups/index.rst +++ b/docs/users_guide/landice/test_groups/index.rst @@ -30,5 +30,5 @@ physics but that are not run routinely. koge_bugt_s mesh_modifications mismipplus - slm + slm_circ_icesheet thwaites diff --git a/docs/users_guide/landice/test_groups/slm.rst b/docs/users_guide/landice/test_groups/slm.rst index 025cf08a55..b54e87c55f 100644 --- a/docs/users_guide/landice/test_groups/slm.rst +++ b/docs/users_guide/landice/test_groups/slm.rst @@ -1,27 +1,29 @@ -.. _landice_slm: +.. _landice_slm_circ_icesheet: -slm -=== +slm_circ_icesheet +================== -The ``landice/slm`` test group adds a workflow for coupled -MALI and Sea-Level Model (SLM) -configurations. It currently contains one test case, -``circular_icesheet_test``, that creates an idealized circular ice sheet and -compares MALI- and SLM-derived sea-level diagnostics across a configurable -sweep of mesh and SLM resolutions. +The ``landice/slm_circ_icesheet`` test group adds a workflow for coupled +MALI and Sea-Level Model (SLM) configurations. It contains two test cases: -The test case is useful for: +- ``mesh_convergence``: a parameter sweep used to compare MALI- and + SLM-derived sea-level diagnostics across a configurable sweep of mesh and + SLM resolutions. +- ``smoke_test``: a minimal smoke test that exercises the setup and a + short model run for quick validation and CI purposes. + +The test cases are useful for: * validating coupled MALI-SLM setup and mapping files, * comparing sensitivity to MALI horizontal resolution and SLM ``nglv``, and * generating summary error plots for sea-level diagnostics. -circular_icesheet_test ----------------------- +mesh_convergence +---------------- -The test case path is: +The convergence test case path is: -``landice/slm/circular_icesheet_test`` +``landice/slm_circ_icesheet/mesh_convergence`` At configure time, the test case reads: @@ -35,6 +37,17 @@ For each ``(mali_res, slm_nglv)`` combination, it creates: It also creates one shared ``visualize`` step to analyze all combinations. +smoke_test +---------- + +The smoke test path is: + +``landice/slm_circ_icesheet/smoke_test`` + +This test provides a minimal configuration (small mesh and short run) that +validates the mesh setup, mapping-file generation, and the end-to-end +coupling workflow without requiring a full parameter sweep. + setup_mesh ~~~~~~~~~~ @@ -108,4 +121,4 @@ The test case uses four config sections: * ``[circ_icesheet_viz]``: plotting controls and fallback ocean-area constants The defaults are in -``compass/landice/tests/slm/circ_icesheet/circ_icesheet.cfg``. \ No newline at end of file +``compass/landice/tests/slm_circ_icesheet/smoke_test/smoke_test.cfg``. \ No newline at end of file