Seamount Case
The Seamount case (problem_id = 1) is a classic Princeton Ocean Model benchmark that simulates flow over an isolated topographic feature. It serves as a regression test for the dynamical core and demonstrates the model's ability to handle steep bathymetry and flow-topography interactions.
Physical Configuration
Domain and Bathymetry
The seamount is prescribed as a Gaussian topographic feature centered in a rectangular basin:
| Parameter | Value | Description |
|---|---|---|
| Grid size | im=90, jm=82 | Coarse resolution configuration |
| Domain extent | ~65 x 49 grid points (classic) | Also available at 90 x 82 |
| Vertical levels | kb=21 | Sigma-coordinate layers |
| Basin depth | Flat basin floor away from seamount | |
| Seamount shape | Gaussian |
The bathymetry is defined as:
where:
is the background basin depth is the seamount height (typically ~80% of ) is the seamount radius (typically 20--40 km) is the center of the domain
Background Stratification
The initial stratification is set by prescribed profiles of temperature and salinity. The density profile may include a thermocline structure:
where
Background Flow
A uniform background barotropic flow is prescribed, typically directed from west to east or southwest to northeast. The incident flow interacts with the seamount to generate the characteristic dynamics.
Key Dynamics
Taylor Cap (Columnar Vortex)
When a rotating, stratified fluid encounters an isolated seamount, the conservation of potential vorticity forces the flow to go around rather than over the obstacle. A columnar anticyclonic vortex -- called a Taylor cap -- forms above the seamount summit. The key dimensionless parameter is the Burger number:
or equivalently the Rossby number
Taylor cap formation is favored when:
(strong rotation relative to advection) (strong stratification) - The seamount slope is sufficiently steep:
Lee Waves
Downstream of the seamount, the disturbed density field excites internal lee waves. The wave characteristics depend on the Froude number:
- For
(subcritical flow), steady lee waves form downstream. - For
(supercritical flow), waves are swept downstream. - For
, the flow is approximately in Taylor-Proudman balance and exhibits 2D columnar behavior.
Flow Separation
At higher Reynolds numbers or steeper topography, the boundary layer on the seamount flanks may separate, producing a turbulent wake with vortex shedding. The separation is controlled by the topographic slope, stratification, and background flow speed.
Simulation Setup
| Parameter | Typical Value | Description |
|---|---|---|
iproblem | 1 | Case identifier |
dte | 5.0 s | External (barotropic) time step |
isplit | 30 | Internal mode splitting ratio |
dti | 150.0 s | Internal (baroclinic) time step |
| Total integration | 5--20 days | Sufficient for Taylor cap spin-up |
| Grid | 90 x 82 x 21 | Coarse training grid |
| Core option | Explicit or Implicit | Both available |
For the explicit core, the leapfrog-3D time stepping naturally resolves the higher-frequency internal wave dynamics. For the implicit core, the CG/PCG solver provides stable barotropic integration even with steep bathymetry slopes that would otherwise restrict the time step.
Diagnostic Outputs
Key diagnostics for analyzing seamount flow:
- Velocity (u, v): 3D velocity field showing flow deflection and Taylor cap circulation
- Free-surface elevation (el): Surface expression of the columnar vortex
- Temperature (T), Salinity (S): Density field showing isopycnal deformation over the seamount
- Vertical velocity (w): Upwelling/downwelling patterns on the upstream/downstream flanks
- Potential vorticity:
, conserved along streamlines in the absence of forcing and dissipation - TKE (q2): Turbulent kinetic energy for assessing mixing in the seamount wake
Usage
Running via the Explicit Core
from neuralpom.cases.explicit.seamount import CASE_SETTINGS
from neuralpom.cores.explicit import ExplicitPOM2KCore
core = ExplicitPOM2KCore(
im=CASE_SETTINGS.im,
jm=CASE_SETTINGS.jm
)
core.iproblem = CASE_SETTINGS.problem_id # problem_id = 1
core.dte = 5.0
core.isplit = 30
core.run_initialization()
# Run 10 days of simulation
steps_24h = int(24 * 3600 / (core.dte * core.isplit))
for day in range(10):
core.time0 = core.time
core.iend = steps_24h
core.run_time_loop()
print(f"Day {day}: u_max = {core.u.max().item():.3f} m/s")Running via the Implicit Core
from neuralpom.cases.implicit.seamount import CASE_SETTINGS
from neuralpom.cores.implicit import ImplicitPOM2KCore
core = ImplicitPOM2KCore(
im=CASE_SETTINGS.im,
jm=CASE_SETTINGS.jm
)
core.iproblem = CASE_SETTINGS.problem_id
core.run_initialization()
core.time0 = core.time
core.iend = 1000
core.run_time_loop()Using the Catalog
from neuralpom.cases.catalog import get_case_settings
from neuralpom.core_factory import resolve_core_class
settings = get_case_settings("seamount")
core_cls = resolve_core_class("explicit")
core = core_cls(im=settings.im, jm=settings.jm)
core.iproblem = settings.problem_id
core.run_initialization()Role in NeuralPOM
The seamount case serves several purposes in the NeuralPOM project:
- Regression testing: As a well-studied POM benchmark, it verifies that both the explicit and implicit cores produce correct flow patterns.
- Topographic stress test: The steep bathymetry gradient challenges the sigma-coordinate pressure gradient error, validating the core's numerics.
- Differentiability check: The seamount case is used to verify gradient flow through the dynamical core in the presence of complex topography.
