ocean_continuity_config_t Derived Type

type, public :: ocean_continuity_config_t


Inherited by

type~~ocean_continuity_config_t~~InheritedByGraph type~ocean_continuity_config_t ocean_continuity_config_t type~ocean_config_t ocean_config_t type~ocean_config_t->type~ocean_continuity_config_t continuity type~config_t config_t type~config_t->type~ocean_config_t ocean type~ocean_handle_t ocean_handle_t type~ocean_handle_t->type~config_t cfg

Components

Type Visibility Attributes Name Initial
real(kind=wp), public :: h_min = 1.0e-6_wp

Floor used by the PPM positivity limiter (MOM6 GV%Angstrom_H). When ppm_limit_pos = .true. and a cell’s centred thickness is at or below this floor, the PPM face reconstruction is forced to a constant (= upwind for that cell); above the floor the parabola’s interior minimum is forced to h_min if it would dip below. Default 1e-6 m preserves “pure positivity” semantics. MOM6 typically uses 1–4 m (≈ 2·Angstrom_H). No-op when ppm_limit_pos = .false..

logical, public :: positive_definite = .false.

Positive-definite continuity (MOM6-prevention + Roundabout-conservation). When .true. the split layer continuity guarantees every layer stays >= h_lim after each direction pass — the PPM reconstruction edges are floored at 2·h_lim (P1, MOM6’s positive-definite PPM) and (P2, later) the per-donor outfluxes are scaled down (never thickness-inflated ⇒ zero mass created). h_lim is derived at setup: angstrom_h on VCOORD_LAGRANGIAN, else 0 (⇒ the floor is inert on non-Lagrangian coords). Default .false. ⇒ untaken branches only ⇒ bit-identical. Fail-loud composed with &ocean_wetdry_nml enable (that module owns its own barotropic limiter; composition deferred).

logical, public :: ppm_limit_pos = .false.

MOM6 PPM_limit_pos analogue. When .true., the PPM face-thickness reconstruction in continuity adds a positivity-preserving limiter that prevents the parabola from dipping below h_min inside a cell. At thin / vanishing layers (shelf-break, seamount, wet/dry boundary) the reconstruction collapses to a constant — equivalent to upwind for that cell. Bounds mass flux through near-vanishing layers by the actual layer thickness.

logical, public :: renorm_consistent_flux = .true.

Continuous flux model in the uhbt/vhbt Newton renormalisation (see continuity_t%renorm_consistent_flux): a layer whose upwind donor flips under the barotropic correction carries (u0 + du)·h_face(new donor) instead of the historical flux0 + du·h_face(new donor), which jumps by u0·(h_new − h_old) at the flip and leaves the solve with no root when uhbt falls in the gap — a wrong-sign layer transport, an O(η) mismatch between the layer and barotropic free surfaces at every thickness jump (a sigma layer over a bathymetric step), and an exponentially pumped barotropic grid-scale mode under pred_corr (finding B of the vertical-coordinate stability matrix). Newton is bracketed by bisection (MOM6 zonal_flux_adjust). Default .true. (MOM6 behaviour, maintainer decision 2026-09-22); it is bit-identical to the historical model on every face where no donor flips. .false. restores the historical discontinuous model. Ignored by the wet/dry single-step form.

logical, public :: vol_cfl = .false.

MOM6 vol_CFL analogue. When .false. (default) the continuity-PPM face thickness is the downwind PPM EDGE value (the CFL→0 limit), bit-identical to the pre-knob behaviour. When .true. the donor-side face thickness is the swept-volume integral of the reconstructed parabola (adds the missing O(CFL) term). Fixes the dt-sensitive near-bed mass residual at steep shelf breaks.


Source Code

   type :: ocean_continuity_config_t
      real(wp) :: h_min = 1.0e-6_wp
         !! Floor used by the PPM positivity limiter (MOM6
         !! `GV%Angstrom_H`).  When `ppm_limit_pos = .true.` and a
         !! cell's centred thickness is at or below this floor, the
         !! PPM face reconstruction is forced to a constant (= upwind
         !! for that cell); above the floor the parabola's interior
         !! minimum is forced to `h_min` if it would dip below.
         !! Default 1e-6 m preserves "pure positivity" semantics.
         !! MOM6 typically uses 1–4 m (≈ `2·Angstrom_H`).  No-op when
         !! `ppm_limit_pos = .false.`.
      logical :: ppm_limit_pos = .false.
         !! MOM6 `PPM_limit_pos` analogue.  When `.true.`, the PPM
         !! face-thickness reconstruction in continuity adds a
         !! positivity-preserving limiter that prevents the parabola
         !! from dipping below `h_min` inside a cell.  At thin /
         !! vanishing layers (shelf-break, seamount, wet/dry boundary)
         !! the reconstruction collapses to a constant — equivalent
         !! to upwind for that cell.  Bounds mass flux through
         !! near-vanishing layers by the actual layer thickness.
      logical :: vol_cfl = .false.
         !! MOM6 `vol_CFL` analogue.  When `.false.` (default) the
         !! continuity-PPM face thickness is the downwind PPM EDGE
         !! value (the CFL→0 limit), bit-identical to the pre-knob
         !! behaviour.  When `.true.` the donor-side face thickness is
         !! the swept-volume integral of the reconstructed parabola
         !! (adds the missing O(CFL) term).  Fixes the dt-sensitive
         !! near-bed mass residual at steep shelf breaks.
      logical :: positive_definite = .false.
         !! Positive-definite continuity (MOM6-prevention + Roundabout-conservation).
         !! When `.true.` the split layer continuity guarantees every layer
         !! stays `>= h_lim` after each direction pass — the PPM reconstruction
         !! edges are floored at `2·h_lim` (P1, MOM6's positive-definite
         !! PPM) and (P2, later) the per-donor outfluxes are scaled down
         !! (never thickness-inflated ⇒ zero mass created).  `h_lim` is derived
         !! at setup: `angstrom_h` on VCOORD_LAGRANGIAN, else 0 (⇒ the floor is
         !! inert on non-Lagrangian coords).  Default `.false.` ⇒ untaken
         !! branches only ⇒ bit-identical.  Fail-loud composed with
         !! `&ocean_wetdry_nml enable` (that module owns its own barotropic
         !! limiter; composition deferred).
      logical :: renorm_consistent_flux = .true.
         !! Continuous flux model in the `uhbt`/`vhbt` Newton
         !! renormalisation (see `continuity_t%renorm_consistent_flux`):
         !! a layer whose upwind donor flips under the barotropic
         !! correction carries `(u0 + du)·h_face(new donor)` instead of the
         !! historical `flux0 + du·h_face(new donor)`, which jumps by
         !! `u0·(h_new − h_old)` at the flip and leaves the solve with no
         !! root when `uhbt` falls in the gap — a wrong-sign layer
         !! transport, an O(η) mismatch between the layer and barotropic
         !! free surfaces at every thickness jump (a sigma layer over a
         !! bathymetric step), and an exponentially pumped barotropic
         !! grid-scale mode under `pred_corr` (finding B of the
         !! vertical-coordinate stability matrix).  Newton is bracketed by
         !! bisection (MOM6 `zonal_flux_adjust`).  Default `.true.`
         !! (MOM6 behaviour, maintainer decision 2026-09-22); it is
         !! bit-identical to the historical model on every face where no
         !! donor flips.  `.false.` restores the historical discontinuous
         !! model.  Ignored by the wet/dry single-step form.
   end type ocean_continuity_config_t