Vertical Coordinate

Overview

Omega uses pseudo height, \(\tilde{z} = \frac{p}{\rho_0 g}\), as the vertical coordinate (V1 governing equation document), where \(p\) is relative pressure (gauge pressure, i.e., absolute pressure minus the standard atmosphere of 101325 Pa). With this definition, \(\tilde{z} = 0\) at the sea surface under standard atmospheric forcing. In practice, \(\tilde{z}\) is not computed directly. Instead, the model tracks and evolves the pseudo-thickness, \(\tilde{h} = \Delta \tilde{z}\), defined as the difference between adjacent layer interfaces. The pseudo height is essentially a normalized pressure coordinate, with the advantage that it has units of meters. The VertCoord class contains variables and functions relevant to keeping track of:

  • the maximum possible number of layers in a cell, i.e. the extent of the vertical dimension (read in from the mesh file)

  • the bottom depth of each cell (read in from the mesh file)

  • the location of active vertical layers (used to set extents of vertical loop bounds):

    • the max and min indices of active layers in each cell (read in from the mesh file)

    • the max and min indices of active layers for edges and vertices at the bottom and top of the water column (computed from min/max cell layers)

  • pressure (computed from the pseudo-thickness and surface pressure)

  • geometric height (computed from the bottom depth, specific volume, and pseudo-thickness)

  • geopotential (computed from the geometric height and tidal forcing)

  • desired vertical interface locations (computed from pressure, reference layer pseudo-thickness, and user-specified weights)

Multiple instances of the vertical coordinate class can be created and accessed by a unique name.

Variables

Variable Name

Description

Units

NVertLayers

maximum number of vertical layers

-

NVertLayersP1

maximum number of vertical layers plus 1

-

PressureInterface

relative pressure (gauge pressure) at layer interfaces

Pa

PressureMid

relative pressure (gauge pressure) at layer midpoints

Pa

GeomZInterface

geometric height of layer interfaces

m

GeomZMid

geometric height of layer midpoint

m

GeopotentialMid

geopotential at layer mid points

m\(^2\)/s\(^2\)

PseudoThicknessTarget

desired pseudo-thickness based on total perturbation from the reference pseudo-thickness

-

MinLayerCell

first active layer for cell

-

MaxLayerCell

last active layer for cell

-

MinLayerEdgeTop

min of the first active layers for cells on edge

-

MaxLayerEdgeTop

min of the last active layer for cells on edge

-

MinLayerEdgeBot

max of the first active layer for cells on edge

-

MaxLayerEdgeBot

max of the last active layer for cells on edge

-

MinLayerVertexTop

min of the first active layer for cells on vertex

-

MaxLayerVertexTop

min of the last active layer for cells on vertex

-

MinLayerVertexBot

max of the first active layer for cells on vertex

-

MaxLayerVertexBot

max of the last active layer for cells on vertex

-

VertCoordMovementWeights

weights to specify how total column thickness changes are distributed across layers

-

RefPseudoThickness

reference pseudo-thickness used to distribute total column thickness changes

m

BottomGeomDepth

positive down distance from the reference geoid to the bottom

m

SurfacePressure

relative pressure (gauge pressure) at the top of the ocean column

Pa

Surface pressure

SurfacePressure is the relative pressure (gauge pressure, i.e., absolute pressure minus the standard atmosphere of 101325 Pa) at the top of the ocean column. It is the top boundary condition used when integrating layer pressures downward in computePressure, and is effectively \(\tilde{z}\) at the top of the water column (times a scaling factor). Unlike the other pressure variables, which are recomputed each timestep, SurfacePressure is registered in the State and Restart field groups, so it is written to restart files and read from the initial-condition and restart files when present. The read is optional: if SurfacePressure is not present in the file, it defaults to zero rather than causing an error. For a free-surface ocean run with standard atmospheric forcing, the surface pressure is zero (0 Pa), so it may simply be omitted from the initial-condition file. For a coupled ocean–atmosphere run, SurfacePressure holds the anomaly of the atmospheric surface pressure from the standard atmosphere; eventually it will be updated each timestep via the coupler as a weighted sum of atmosphere, sea-ice, and land-ice pressure.

Inactive and boundary layers in output

Each output field declares a fill value (matching the NetCDF-C standard _FillValue) that marks entries outside the active domain. In a cell column only the active layers ([MinLayerCell, MaxLayerCell]) carry valid data; deeper, inactive layers contain the fill value. Edge and vertex fields have an intermediate boundary range where some, but not all, of the surrounding cells are active. For flux-type edge fields (such as NormalVelocity), the flux through a face bordering land vanishes, so those boundary layers carry 0; layers fully outside the valid range carry the fill value. Vertex fields, by contrast, keep their computed (generally non-zero) values throughout the valid range, since a boundary vertex still has active surrounding cells contributing to quantities like vorticity; only layers outside the valid range carry the fill value. After an initial-condition or restart read, VertCoord enforces this pattern on the state and tracer fields so that analysis tools (ncview, Xarray, NCO, etc.) recognize and mask the inactive entries automatically.