mismipplus

The mismipplus test group (compass.landice.tests.mismipplus.MISMIPplus) performs a limited number of the MISMIP+ experiments (see mismipplus). Here, we describe the shared framework for this test group and the two test cases.

Framework

The shared config options for the mismipplus test group are described in mismipplus in the User’s Guide.

Test cases within the mismipplus group should only be run with the FO velocity solver, or with a data velocity field. Running with the FO solver requires building MALI with the Albany library.

The test group has a shared namelist.landice file with a few common namelist options related to model numerics, and a shared streams.landice file that defines input, restart, and output, and globalStatsOutPut streams. There also is an albany_input.yaml file that is needed for running the FO solver.

setup_mesh

The class compass.landice.tests.mismipplus.setup_mesh.SetupMesh defines a step for creating the mesh/initial conditions for a MISMIP+ spinup simulation. This step is only used by the spin_up test case. An odd number of rows are culled along the North/South boundaries such that the ragged layout of mesh rows is symmetric in the y direction.

The resolution parameter from the [mesh] section of the configuration file is the nominal resolution, where the actual resolution is iteratively calculated so that the cell center to cell center distance along the y-axis of the mesh is exactly equal to the vertical domain length (80 km).

run_model

The class compass.landice.tests.mismipplus.run_model.RunModel defines a step for setting up the input files (i.e. streams, namelist, albany_input.yaml) needed to run MALI. The initial condition can either be downloaded from the shared data server (for the smoke_test testcase) or generated by the compass.landice.tests.mismipplus.setup_mesh.SetupMesh step (for the spin_up testcase).

tasks

The function compass.landice.tests.mismipplus.tasks.get_ntasks_from_cell_count() can be used to compute a good number of MPI tasks (both the target and the minimum) for MALI to use based on the goal_cells_per_core and max_cells_per_core config options as well as the number of cells in a mesh. The idea is that we want to run MALI with about 300 cells per core (the default value of goal_cells_per_core) but that we would be okay with as many as 5000 cells per core (the default max_cells_per_core).

A complication of using this function is that the number of cells in a mesh is not known until the compass.landice.tests.mismipplus.setup_mesh.SetupMesh step has been run (i.e. at compass run) for a given resolution, but we need to know how many cores and nodes we will use at setup (i.e. at compass setup ...) since that is when the job script is created. That’s why there is both exact_cell_count() and approx_cell_count() within the tasks module. compass.landice.tests.mismipplus.tasks.approx_cell_count() is called at compass setup when the exact number of gridcells is unknown, but can be approximated by scaling a heuristic by the requested resolution. Whereas, at compass run the number of gridcells is precisely known and can be queried using compass.landice.tests.mismipplus.tasks.exact_cell_count(), which is then used to determine ntasks for MALI runs at various resolutions.

Test cases

spin_up

The compass.landice.tests.mismipplus.spin_up.SpinUp case will generate a new MISMIP+ mesh at the requested resolution (from the [mesh] section of the config file) and setup the files to run a 20,000 year spinup run.

smoke_test

The compass.landice.tests.mismipplus.smoke_test.SmokeTest performs a 5 year version of the Ice0 experiment. There is a validation step that compares the output file against itself. This is to allow the test to be compared against a baseline if desired.