ziso¶
The ziso
test group
(compass.ocean.tests.ziso.Ziso
)
implements variants of the Zonally Idealized Southern Ocean (ZISO) test case
(see ziso in the User’s Guide) at 2.5, 5, 10 and 20-km
resolutions. Here, we describe the shared framework for this test group and the
4 types of test cases currently supported: default
, long
,
particles
, and with_frazil
.
framework¶
The shared config options for the ziso
test group are described
in ziso in the User’s Guide.
Additionally, the test group has several shared namelist and streams files,
some for shared parameters and streams for forward runs (namelist.forward
and streams.forward
), some specific to the resolution of the run and
with an eye toward including more resolutions in the future
(namelist.<res>.forward
and streams.<res>.forward
), and some related
to enabling analysis members in a run and outputting their results
(namelist.analysis
and streams.analysis
).
initial_state¶
The class compass.ocean.tests.ziso.initial_state.InitialState
defines a step for setting up the initial state for each test case.
First, a mesh appropriate for the resolution is generated using
mpas_tools.planar_hex.make_planar_hex_mesh()
. Then, the mesh is
culled to remove periodicity in the y direction. A vertical grid is generated,
with 100 non-uniform layers according to the 100layerE3SMv1
distribution,
but squashed so the bottom of the deepest layer is at 2500 m depth. Finally,
the initial temperature field is computed along with uniform salinity and
zero initial velocity. The temperature profile is significantly different
for test cases with frazil-ice production compared to those without.
forward¶
The class compass.ocean.tests.ziso.forward.Forward
defines a step
for running MPAS-Ocean from the initial condition produced in the
initial_state
step. Namelist and streams files are generated when the test
case is set up (combining the *.forward
and *.analysis
files from the
test group) and updated at runtime based on the config options in the
[ziso]
section of the config file.
A dictionary res_params
is used to set parameters like the number of cores
and the time steps for each resolution:
res_params = {'20km': {'cores': 20,
'min_cores': 2,
'cores_with_particles': 32,
'min_cores_with_particles': 12,
'dt': "'00:12:00'",
'btr_dt': "'00:00:36'",
'mom_del4': "5.0e10",
'run_duration': "'0000_00:36:00'"},
'10km': {'cores': 80,
'min_cores': 8,
'cores_with_particles': 130,
'min_cores_with_particles': 50,
'dt': "'00:06:00'",
'btr_dt': "'00:00:18'",
'mom_del4': "6.25e9",
'run_duration': "'0000_00:18:00'"},
'5km': {'cores': 300,
'min_cores': 30,
'cores_with_particles': 500,
'min_cores_with_particles': 200,
'dt': "'00:03:00'",
'btr_dt': "'00:00:09'",
'mom_del4': "7.8e8",
'run_duration': "'0000_00:09:00'"},
'2.5km': {'cores': 1200,
'min_cores': 120,
'cores_with_particles': 2100,
'min_cores_with_particles': 900,
'dt': "'00:01:30'",
'btr_dt': "'00:00:04'",
'mom_del4': "9.8e7",
'run_duration': "'0000_00:04:30'"}}
If Particles are includes (in the particles
test cases), we first generate the required graph partition, then partition
the particles, and finally run MPAS-Ocean (including updating PIO namelist
options):
if self.with_particles:
cores = self.cores
partition(cores, self.config, self.logger)
particles.write(init_filename='init.nc',
particle_filename='particles.nc',
graph_filename='graph.info.part.{}'.format(cores),
types='buoyancy')
run_model(self, partition_graph=False)
ziso_test_case¶
The compass.ocean.tests.ziso.ZisoTestCase
class defines most of the
ZISO test cases. If a baseline is provided when calling
compass setup, the test case ensures that the final values of
temperature
and layerThickness
are identical to the baseline values.
If particles are included, a number of particle-related variables and timers
are also validated against the baseline.
with_frazil¶
The compass.ocean.tests.ziso.with_frazil.WithFrazil
includes default config options:
# namelist options for Zonally periodic Idealized Southern Ocean (ZISO)
# testcases
[ziso]
# Initial temperature profile constant
initial_temp_t1 = 0.0
# Initial temperature profile tanh coefficient
initial_temp_t2 = -1.0
# Initial temperature profile tanh length scale
initial_temp_h1 = 300.0
# Initial temperature profile linear coefficient
initial_temp_mt = 0.0
This test performs a 90-second (3-time-step) run on 4 cores, including
frazil-ice formation but without analysis. If a baseline is provided when
calling compass setup, the test case ensures that the final values
of temperature
and layerThickness
as well as a number of frazil-related
variables are identical to the baseline values.