baroclinic_channel

The baroclinic_channel test group (compass.ocean.tests.baroclinic_channel.BaroclinicChannel) implements variants of the Baroclinic Eddies test case (see baroclinic_channel) at 3 resolutions (1, 4 and 10 km). Here, we describe the shared framework for this test group and the 5 test cases.

framework

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

Additionally, the test group has a shared namelist.forward file with a few common namelist options related to run duration and default horizontal and vertical momentum and tracer diffusion, as well as a shared streams.forward file that defines mesh, input, restart, and output streams. There are also namelist.forward.<res> files for each resolution of the rpe_test test case, which define the horizontal viscosity and time steps.

initial_state

The class compass.ocean.tests.baroclinic_channel.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 20 layers of 50-m thickness each by default. Finally, the initial temperature field is computed along with uniform salinity and zero initial velocity.

forward

The class compass.ocean.tests.baroclinic_channel.forward.Forward defines a step for running MPAS-Ocean from the initial condition produced in the initial_state 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 generate during setup() and MPAS-Ocean is run (including updating PIO namelist options and generating a graph partition) in run().

default

The compass.ocean.tests.baroclinic_channel.default.Default test performs a 15-minute run on 4 cores. It doesn’t contain any Validation.

decomp_test

The compass.ocean.tests.baroclinic_channel.decomp_test.DecompTest performs a 15-minute run once on 4 cores and once on 8 cores. It ensures that temperature, salinity, layerThickness and normalVelocity are identical at the end of the two runs (as well as with a baseline if one is provided when calling compass setup).

threads_test

The compass.ocean.tests.baroclinic_channel.threads_test.ThreadsTest performs a 15-minute run once on 4 cores, each with 1 thread and once on 4 cores, each with 2 threads. It ensures that temperature, salinity, layerThickness and normalVelocity are identical at the end of the two runs (as well as with a baseline if one is provided when calling compass setup).

restart_test

The compass.ocean.tests.baroclinic_channel.restart_test.RestartTest performs a 10-minute run once on 4 cores, saving restart files every time step (every 5 minutes), then it performs a restart run starting at minute 5 for 5 more minutes. It ensures that temperature, salinity, layerThickness and normalVelocity are identical at the end of the two runs (as well as with a baseline if one is provided when calling compass setup).

Restart files are saved at the test-case level in the restarts directory, rather than within each step, since they will be used across both the full and restart steps.

The namelist.full and streams.full files are used to set up the run duration and restart frequency of the full run, while namelist.restart and streams.restart make sure that the restart step begins with a restart at minute 5 and runs for 5 more minutes.

rpe_test

The compass.ocean.tests.baroclinic_channel.rpe_test.RpeTest performs a longer (20 day) integration of the model forward in time at 5 different values of the viscosity. Versions of the test case exist at each of the 3 supported horizontal resolutions (1, 4 and 10 km).

The different resolutions use different numbers of resources, as determined by a python dictionary:

res_params = {'1km': {'ntasks': 144, 'min_tasks': 36},
              '4km': {'ntasks': 36, 'min_tasks': 8},
              '10km': {'ntasks': 8, 'min_tasks': 4}}

if resolution not in res_params:
    raise ValueError(
        f'Unsupported resolution {resolution}. Supported values are: '
        f'{list(res_params)}')

params = res_params[resolution]

These params 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=params['ntasks'], min_tasks=params['min_tasks'],
    resolution=resolution, nu=float(nu))
...
self.add_step(step)

The analysis step defined by compass.ocean.tests.baroclinic_channel.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.