overflow¶
The overflow
test group
(compass.ocean.tests.overflow.Overflow
)
implements variants of the continental shelf overflow test case.
It is composed of four test cases. The first two, default
and rpe_test
, have a shared framework and use the standard
hydrostatic model to investigate the impact on the solution of
different values of the viscosity. The remaining two tests,
nonhydro
and hydro_vs_nonhydro
, use a different mesh
and initial conditions to explore the impact of a
nonhydrostatic formulation in an overflow scenario.
Here, we describe the four test cases starting with the
shared framework for the first two.
framework¶
The shared config options for the overflow
test group
are described in overflow in the User’s Guide.
Additionally, the test group has a shared namelist.forward
file with
a few common namelist options related to time step, run duration, viscosity,
and drag, as well as a shared streams.forward
file that defines mesh
,
input
, and output
streams.
initial_state_from_init_mode¶
The class compass.ocean.tests.overflow.initial_state_from_init_mode.InitialStateFromInitMode
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. The ocean model is then run
in init
mode to generate the vertical grid and populate initial conditions.
initial_state¶
The class compass.ocean.tests.overflow.initial_state.InitialState
sets up the initial state for the nonhydro
and hydro_vs_nonhydro
test cases.
First, a planar mesh is generated using mpas_tools.planar_hex.make_planar_hex_mesh()
.
Then, the mesh is culled to remove periodicity in the x direction. The domain is
200m deep and 6.4 km across. After the topography is specified, a vertical grid is generated
with 60 layers. Finally, the initial density and temperature profiles are computed along with
uniform salinity and zero initial velocity.
forward¶
The class compass.ocean.tests.overflow.forward.Forward
defines a step for running MPAS-Ocean from the initial condition produced in
the initial_state_from_init_mode
step. If nu
is provided as an argument
to the constructor, the associate namelist option (config_mom_del2
) will be
given this value. Namelist and streams files are also generated. MPAS-Ocean is
run (including updating PIO namelist options and generating a graph partition)
in run()
.
default¶
The compass.ocean.tests.overflow.default.Default
test performs a 12-minute run on 4 cores. It doesn’t contain any
Validation.
rpe_test¶
The compass.ocean.tests.overflow.rpe_test.RpeTest
performs a longer (40 hour) integration of the model forward in time at 5
different values of the viscosity. These nu
values are later added as
arguments to the Forward
steps’ constructors when they are added to the
test case:
step = Forward(
test_case=self, name=name, subdir=name, ntasks=4,
openmp_threads=1, nu=float(nu))
...
self.add_step(step)
The analysis
step defined by
compass.ocean.tests.overflow.rpe_test.analysis.Analysis
makes plots of the final results with each value of the viscosity.
This test is resource intensive enough that it is not used in regression testing.
nonhydro¶
This test represents the flow of dense fluid down a slope using the
nonhydrostatic model. After the creation of the mesh and initial conditions,
a nonhydrostatic simulation is run for 30min. The namelist.forward
file has
namelist options related to run duration, time-stepping scheme, horizontal
and vertical momentum viscosities, and defines the PETSc solver,
preconditioner and tolerances used for the solution of the nonhydrostatic
elliptic problem.
forward¶
The class compass.ocean.tests.overflow.nonhydro.forward.Forward
defines a step for running MPAS-Ocean from the initial condition produced in
the initial_state
step. A nonhydrostatic simulation is run on 8 cores
for a run duration of 30min.
hydro_vs_nonhydro¶
This test represents the flow of dense fluid down a slope and compares the
solutions obtained with the hydrostatic and nonhydrostatic model. After
the creation of the mesh and initial conditions, an hydrostatic and a
nonhydrostatic simulation are run. The namelist.forward
file has a few
common namelist options for the two models related to run duration,
time-stepping scheme, and tracer advection. The files namelist.hydro
and
namelist.nonhydro
specify the different momentum viscosities for the two
models, and the latter defines the PETSc solver, preconditioner and tolerances
used for the solution of the nonhydrostatic elliptic problem. The hydrostatic and
nonhydrostatic run share the same streams.forward
file that defines
mesh
, input
, restart
, and output
streams.
forward¶
The class compass.ocean.tests.overflow.hydro_vs_nonhydro.forward.Forward
defines a step for running MPAS-Ocean from the initial condition produced in
the initial_state
step. The nonhydro_mode
argument is a boolean that
determines if the hydrostatic or the nonhydrostatic model is run.
Namelist and streams files are generate during setup()
and
MPAS-Ocean is run (including updating PIO namelist options and generating a
graph partition) in run()
. Both the hydrostatic and nonhydrostatic
simulation are run on 8 cores and have a run duration of 3h, the time at
which the dense fluid has descended the slope.
visualize¶
The visualize
step defined by
compass.ocean.tests.overflow.hydro_vs_nonhydro.visualize.Visualize
makes plots of the temperature profile at 3h for the hydrostatic
and nonhydrostatic case. The plot shows that a Kelvin-Helmholtz instability
develops in the nonhydrostatic case, leading to entrainment of
ambient fluid into plumes, whereas the hydrostatic model fails to
capture the correct physics.