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.