external gravity wave
The external_graivty_wave_*_time_step/convergence_time
tasks implement a
simple external gravity wave test case evaluate the time-convergence of
time-stepping schemes in the simplest possible model configuration.
Note that this is not a shallow water test case. While the standard, non-linear shallow water thickness equation has been left alone, all tendencies in the momentum equation have been turned off, save the pressure gradient term. The resulting equations are given by
In particular, this task is used to test the convergence of local
time-stepping schemes (LTS
and FB_LTS
) that employ a operator splitting
in which tendency terms other than those above are advanced with
a first-order error. As a result, this task helps to show that these local
time-stepping schemes are achieving the correct theoretical order of
convergence is said splitting was not used.
To calculate errors, the task runs the case once at a small time-step
to generate a reference solution. The result of the analysis
step of each
task is a plot like the following showing convergence
as a function of the cell size and/or the time step:

supported models
These tasks currently only support MPAS-Ocean.
mesh
Two global mesh variants are tested, quasi-uniform (QU) and icosohydral. In addition, the tests can be set up to use either local or global time-stepping methods. Thus, there are 4 variants of the task:
ocean/spherical/icos/external_gravity_wave_global_time_step/convergence_time
ocean/spherical/icos/external_gravity_wave_local_time_step/convergence_time
ocean/spherical/qu/external_gravity_wave_global_time_step/convergence_time
ocean/spherical/qu/external_gravity_wave_local_time_step/convergence_time
The default resolutions used in the task depends on the mesh type.
For the icos
mesh type, the default is 60, as determined
by the following config option. See Convergence Tests for more
details.
# config options for spherical convergence tests
[spherical_convergence]
# The base resolution for the icosahedral mesh to which the refinement
# factors are applied
icos_base_resolution = 60.
For the qu
mesh type, it is 120 km as
determined by the following config option:
# config options for spherical convergence tests
[spherical_convergence]
# The base resolution for the quasi-uniform mesh to which the refinement
# factors are applied
qu_base_resolution = 120.
# a list of quasi-uniform mesh resolutions (km) to test
qu_refinement_factors = 0.5, 0.75, 1., 1.25, 1.5, 1.75, 2.
To alter the resolutions used in the convergence tasks, you will need to create
your own config file (or add a spherical_convergence
section to a config file
if you’re already using one). If you specify a different resolution
before setting up external_gravity_wave
, steps will be generated with
the requested resolution (if you alter icos_resolutions
or qu_resolutions
in the task’s config file in the work directory, nothing will happen).
For icos
meshes, make sure you use a resolution close to those listed in
Spherical Meshes. Each resolution will be rounded to the nearest
allowed icosahedral resolution.
The base_mesh
steps are shared with other tasks so they are not housed in
the external_gravity_wave
work directory. Instead, they are in work
directories like:
ocean/spherical/icos/base_mesh/60km
ocean/spherical/qu/base_mesh/60km
vertical grid
For this task, only a single vertical level may be used. The bottom depth
is constant and the results should be insensitive to the choice of
bottom_depth
.
# Options related to the vertical grid
[vertical_grid]
# the type of vertical grid
grid_type = uniform
# Number of vertical levels
vert_levels = 1
# Depth of the bottom of the ocean
bottom_depth = 1000.0
# The type of vertical coordinate (e.g. z-level, z-star)
coord_type = z-level
# Whether to use "partial" or "full", or "None" to not alter the topography
partial_cell_type = None
# The minimum fraction of a layer for partial cells
min_pc_fraction = 0.1
initial conditions
The fluid velocity is initialized to zero, and the layer thickness is given as a simple Gaussian bump
where \(\phi\) is latitude, \(\theta\) is longitude, \(\phi_0 = 0\), and
\(\theta_0 = \pi / 2\). Here, \(\phi_0\) and \(\theta_0\) can be set by lat_center
and lon_center
as config options.
forcing
N/A
time step and run duration
With any given time-stepping scheme, the time step for forward integration is
determined by multiplying the resolution by a config option, rk4_dt_per_km
,
so that coarser meshes have longer time steps. You can alter this before setup
(in a user config file) or before running the task (in the config file in
the work directory).
# config options for convergence tests
[convergence_forward]
# time integrator: {'split_explicit', 'RK4'}
time_integrator = RK4
# RK4 time step per resolution (s/km), since dt is proportional to resolution
rk4_dt_per_km = 3.0
The convergence_eval_time
, run_duration
and output_interval
are set to
2 days:
# config options for convergence forward steps
[convergence_forward]
# Run duration in hours
run_duration = 48.
# Output interval in hours
output_interval = ${convergence_forward:run_duration}
config options
The primary external_graivty_wave
config options are:
# options for external gravity wave convergence test case
[external_gravity_wave]
# the constant temperature of the domain
temperature = 15.0
# the constant salinity of the domain
salinity = 35.0
# the central latitude (rad) of the gaussian bump
lat_center = 0.0
# the central longitude (rad) of the gaussian bump
lon_center = 1.57079633
Additionally, for the global
and local
time-stepping variants of this task,
the user can configure the time-integrator used. For the global
variant:
# config options for convergence forward steps
[convergence_forward]
# time integrator
# either: {'RK4'}
# mpas-ocean: {'split_explicit'}
# omega: {'Forward-Backward', 'RungeKutta2'}
time_integrator = RK4
For the local
variant:
# config options for convergence forward steps
[convergence_forward]
# local time integrator
# mpas-ocean: {'LTS, FB_LTS'}
# omega: None
time_integrator = FB_LTS
cores
The target and minimum number of cores are determined by goal_cells_per_core
and max_cells_per_core
from the ocean
section of the config file,
respectively. This ensures that the number of cells per core is roughly
constant across the different resolutions in the convergence study.