.. _landice_greenland: greenland ========= The ``landice/greenland`` test group is used to run tests with a coarse (20-km) `Greenland mesh `_. and to create customized variable resolution meshes. .. figure:: images/gis_speed.png :width: 742 px :align: center FO velocity solution visualized in Paraview. The test group includes 3 test cases, each of which has one or more steps that are variants on ``run_model`` (given other names in the decomposition and restart test cases to distinguish multiple model runs), which performs time integration of the model. There is a fourth test case, ``mesh_gen``, that creates a variable resolution Greenland Ice Sheet mesh, with the step ``mesh``. The test cases in this test group can run with either the SIA or FO velocity solvers. Running with the FO solver requires a build of MALI that includes Albany, but the SIA variant of the test can be run without Albany. The FO version uses no-slip basal boundary condition. There is no integration step for the test case ``mesh_gen``. config options -------------- The ``mesh_gen`` test case uses the default config options below. The other test cases do not use config options. .. code-block:: cfg # config options for high_res_mesh test case [mesh] # number of levels in the mesh levels = 10 # Bounds of GIS mesh. If any bound is set # to None, the mesh will use the full extent # of the gridded dataset. x_min = None x_max = None y_min = None y_max = None # distance from ice margin to cull (km). # Set to a value <= 0 if you do not want # to cull based on distance from margin. cull_distance = -100.0 # mesh density parameters # minimum cell spacing (meters) min_spac = 4.e3 # maximum cell spacing (meters) max_spac = 40.e3 # log10 of max speed for cell spacing high_log_speed = 2.5 # log10 of min speed for cell spacing low_log_speed = 0.75 # distance at which cell spacing = max_spac high_dist = 1.e5 # distance within which cell spacing = min_spac low_dist = 1.e4 # distance at which cell spacing in ocean = max_spac high_dist_coast = 16.e3 # distance within which cell spacing in ocean = min_spac low_dist_coast = 8.e3 # distance at which bed topography has no effect high_dist_bed = 1.e5 # distance within which bed topography has maximum effect low_dist_bed = 7.5e4 # Bed elev beneath which cell spacing is minimized low_bed = 50.0 # Bed elev above which cell spacing is maximized high_bed = 100.0 # mesh density functions use_speed = True use_dist_to_grounding_line = False use_dist_to_edge = True use_dist_to_coast = True use_bed = True [greenland] # Whether to interpolate data (controls run_optional_interpolation) interpolate_data = True # path to directory containing BedMachine and Measures datasets # (default value is for Perlmutter) data_path = /global/cfs/cdirs/fanssie/standard_datasets/GIS_datasets/ # geojson used to create the cull mask in mesh generation geojson_filename = greenland_only_outline_45km_buffer_latlon_singlepart.geojson # filename of the BedMachine thickness and bedTopography dataset # (default value is for Perlmutter) bedmachine_filename = BedMachineGreenland-v6_edits_floodFill_extrap.nc # filename of the MEaSUREs ice velocity dataset # (default value is for Perlmutter) measures_filename = greenland_vel_mosaic500_extrap.nc # projection of the source datasets, according to the dictionary keys # create_scrip_file_from_planar_rectangular_grid from MPAS_Tools src_proj = gis-gimp # number of processors to use for ESMF_RegridWeightGen nProcs = 128 smoke_test ---------- ``landice/greenland/smoke_test`` is the default version of the greenland test case for a short (5-day) test run. decomposition_test ------------------ ``landice/greenland/decomposition_test`` runs short (5-day) integrations of the model forward in time with two different decompositions. The larger run targets 32 tasks (or fewer if fewer are available), and the smaller run uses roughly half as many tasks. The resulting prognostic variables are compared between the two runs to make sure they are bit-for-bit identical. restart_test ------------ ``landice/greenland/2000m/restart_test`` first run a short (5-day) integration of the model forward in time (``full_run`` step). Then, a second step (``restart_run``) performs a 3-day, then a 2-day run, where the second begins from a restart file saved by the first. Prognostic variables are compared between the "full" and "restart" runs at year 2 to make sure they are bit-for-bit identical. mesh_gen ------------- ``landice/greenland/mesh_gen`` creates a variable resolution mesh based on the the config options listed above. This will not be the same as the pre-generated 20 km mesh used in the other three test cases because it uses a newer version of Jigsaw. Note that the basal friction optimization is performed separately and is not part of this test case. The test case performs interpolation of observational data from gridded datasets to the Greenland mesh. This takes care of the peculiarities of the current gridded compilation dataset (greenland_1km_2024_01_29.epsg3413.icesheetonly.nc), as well as using conservative remapping directly from the high-resolution BedMachine v6 and MEaSUREs 2006-2010 velocity datasets. There is a fairly heavy degree of pre-processing done to get the BedMachine and MEaSUREs datasets ready to be used here. The pre-processing includes renaming variables, setting reasonable _FillValue and missing_value attributes extrapolating fields to avoid interpolation ramps at ice margins, updating mask values. Those data files and processing scripts currently live here on Perlmutter: ``/global/cfs/cdirs/fanssie/standard_datasets/GIS_datasets/``. Eventually that pre-processing could be integrated into a new step in COMPASS, or the processed data files could be added to the server on Anvil and downloaded as needed. However, until then, this test case provides a reproducible workflow for setting up Greenland meshes at varying resolutions. An alternative config file, ``mesh_gen_1to10km.cfg``, is provided for creating a finer 1–10km mesh. It uses ``use_dist_to_coast = True`` to refine ocean resolution near the coast and sets ``cull_distance = -100`` to retain the open ocean in the mesh domain. The BedMachine and MEaSUREs interpolation is optional. If ``data_path`` or the corresponding filename in ``[greenland]`` is unset (empty or ``None``), that dataset interpolation step is skipped. The default config values include both datasets, so interpolation is enabled by default. The base-mesh projection used in ``build_mali_mesh()`` is fixed for this test case. Before running ``ESMF_RegridWeightGen``, the interpolation step automatically masks the source SCRIP file so that only cells overlapping a tight concave boundary around the destination mesh (plus a 50 km buffer) are active. The boundary follows the actual domain shape — including bays and fjords — rather than a simple convex hull. This avoids unnecessary weight computation for the large portions of the BedMachine v6 domain (150 m native resolution, ~187 million cells) that lie outside the target mesh and substantially reduces ESMF weight-generation time and memory footprint.