ocean_topo_config_t Derived Type

type, public :: ocean_topo_config_t

Basin geometry + surface-forcing setup. Despite the name, this carries forcing knobs (wind_config / taux_magnitude) and Coriolis tilt (beta / y_ref) alongside the bathymetry profile, because all of them live in the same logical “set up the box and what’s pushing it” slot at init — the &ocean_topo_nml block is read once before the IC is seeded. This grouping is settled (reviewed 2026-05-27); the form knob in &ocean_coriolis_nml is the scheme selector (Sadourny vs HK), distinct from the beta/y_ref parameters here.


Inherited by

type~~ocean_topo_config_t~~InheritedByGraph type~ocean_topo_config_t ocean_topo_config_t type~ocean_config_t ocean_config_t type~ocean_config_t->type~ocean_topo_config_t topo 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 :: coriolis_beta = 0.0_wp

Meridional gradient of f (s⁻¹ m⁻¹). 0 = f-plane (uses cfg%coriolis_f as a uniform value); non-zero engages set_beta_plane with f₀ = coriolis_f.

real(kind=wp), public :: coriolis_y_ref = 0.0_wp

Reference y-coordinate (m) at which f = coriolis_f under the beta-plane: f(y) = coriolis_f + beta*(y - y_ref).

real(kind=wp), public :: edge_depth = 100.0_wp

Edge depth (m) for spoon bathymetry. MOM6 default 100 m.

real(kind=wp), public :: max_depth = 2000.0_wp

Basin maximum depth (m). Used by spoon bathymetry and as the uniform depth for topo_config="flat".

real(kind=wp), public :: nl_continent_amp = 1.0_wp

Continent amplitude for topo_config=”neverworld2”: scales the continent/ridge terms of the Neverworld2 basin (1.0 = full continents, 0.0 = aquaplanet with the southern channel only). MOM6 NL_CONTINENT_AMP default 1.0.

real(kind=wp), public :: nl_min_depth = 500.0_wp

Minimum-depth floor (m) for topo_config=”neverworld2” (MOM6 MINIMUM_DEPTH analogue). The fractional-depth formula drives the depth to 0 (land) at the continent/wall cells; the C-grid dyn-core has no robust wet/dry path yet, so true land + the resulting sub-metre surface layers blow up. Flooring to nl_min_depth keeps the basin all-wet (continents become shallow steering shelves) and stable. Lower = stronger topographic steering but thinner layers (nl_min_depth/nz).

real(kind=wp), public :: nl_roughness_amp = 0.05_wp

Roughness amplitude for topo_config=”neverworld2”: amplitude of the wavy bathymetry signal. MOM6 NL_ROUGHNESS_AMP default 0.05.

real(kind=wp), public :: slope_scale = 400000.0_wp

Exponential decay scale (m) for spoon bathymetry. MOM6 default TOPOG_SLOPE_SCALE = 400 km.

real(kind=wp), public :: taux_magnitude = 0.1_wp

Peak zonal wind stress (Pa) for wind_config = “2gyre”. MOM6 TAUX_MAGNITUDE default.

character(len=16), public :: topo_config = "flat"

Bathymetry profile selector: “flat”, “spoon”, etc.

character(len=16), public :: wind_config = "constant"

Surface wind-stress dispatch: “constant” (uniform tau_x/y from wind_stress_x/y) or “2gyre” (MOM6 sinusoidal).

real(kind=wp), public :: x_origin = 0.0_wp

Absolute x-coordinate (m) of the domain’s WEST edge, for the formula bathymetries whose published formula is written in an absolute coordinate frame rather than a domain-relative one. Read ONLY by topo_config="isomip_plus", whose bedrock polynomial is a function of the MISMIP+ x that runs from the ice divide at 0, while the ISOMIP+ ocean box starts at x = 320 km (Asay-Davis et al. 2016, Table 3 x0). Default 0 ⇒ the model’s own x = 0 west edge ⇒ bit-identical for every other topo_config.


Source Code

   type :: ocean_topo_config_t
      !! Basin geometry + surface-forcing setup.  Despite the name,
      !! this carries forcing knobs (wind_config / taux_magnitude)
      !! and Coriolis tilt (beta / y_ref) alongside the bathymetry
      !! profile, because all of them live in the same logical
      !! "set up the box and what's pushing it" slot at init — the
      !! `&ocean_topo_nml` block is read once before the IC is
      !! seeded.  This grouping is settled (reviewed 2026-05-27);
      !! the `form` knob in `&ocean_coriolis_nml` is the *scheme*
      !! selector (Sadourny vs HK), distinct from the `beta`/`y_ref`
      !! *parameters* here.
      character(len=16) :: topo_config = "flat"
         !! Bathymetry profile selector: "flat", "spoon", etc.
      real(wp) :: max_depth = 2000.0_wp
         !! Basin maximum depth (m).  Used by spoon bathymetry and
         !! as the uniform depth for `topo_config="flat"`.
      real(wp) :: edge_depth = 100.0_wp
         !! Edge depth (m) for spoon bathymetry.  MOM6 default 100 m.
      real(wp) :: slope_scale = 400000.0_wp
         !! Exponential decay scale (m) for spoon bathymetry.  MOM6
         !! default TOPOG_SLOPE_SCALE = 400 km.
      real(wp) :: nl_continent_amp = 1.0_wp
         !! Continent amplitude for topo_config="neverworld2": scales
         !! the continent/ridge terms of the Neverworld2 basin (1.0 =
         !! full continents, 0.0 = aquaplanet with the southern channel
         !! only).  MOM6 NL_CONTINENT_AMP default 1.0.
      real(wp) :: nl_roughness_amp = 0.05_wp
         !! Roughness amplitude for topo_config="neverworld2": amplitude
         !! of the wavy bathymetry signal.  MOM6 NL_ROUGHNESS_AMP default
         !! 0.05.
      real(wp) :: nl_min_depth = 500.0_wp
         !! Minimum-depth floor (m) for topo_config="neverworld2"
         !! (MOM6 MINIMUM_DEPTH analogue).  The fractional-depth formula
         !! drives the depth to 0 (land) at the continent/wall cells; the
         !! C-grid dyn-core has no robust wet/dry path yet, so true land +
         !! the resulting sub-metre surface layers blow up.  Flooring to
         !! `nl_min_depth` keeps the basin all-wet (continents become
         !! shallow steering shelves) and stable.  Lower = stronger
         !! topographic steering but thinner layers (nl_min_depth/nz).
      character(len=16) :: wind_config = "constant"
         !! Surface wind-stress dispatch: "constant" (uniform tau_x/y
         !! from `wind_stress_x/y`) or "2gyre" (MOM6 sinusoidal).
      real(wp) :: taux_magnitude = 0.1_wp
         !! Peak zonal wind stress (Pa) for wind_config = "2gyre".
         !! MOM6 TAUX_MAGNITUDE default.
      real(wp) :: coriolis_beta = 0.0_wp
         !! Meridional gradient of f (s⁻¹ m⁻¹).  0 = f-plane (uses
         !! `cfg%coriolis_f` as a uniform value); non-zero engages
         !! `set_beta_plane` with f₀ = coriolis_f.
      real(wp) :: coriolis_y_ref = 0.0_wp
         !! Reference y-coordinate (m) at which f = coriolis_f under
         !! the beta-plane: f(y) = coriolis_f + beta*(y - y_ref).
      real(wp) :: x_origin = 0.0_wp
         !! Absolute x-coordinate (m) of the domain's WEST edge, for the
         !! formula bathymetries whose published formula is written in an
         !! absolute coordinate frame rather than a domain-relative one.
         !! Read ONLY by `topo_config="isomip_plus"`, whose bedrock
         !! polynomial is a function of the MISMIP+ `x` that runs from the
         !! ice divide at 0, while the ISOMIP+ *ocean* box starts at
         !! `x = 320 km` (Asay-Davis et al. 2016, Table 3 `x0`).  Default
         !! `0` ⇒ the model's own `x = 0` west edge ⇒ bit-identical for
         !! every other `topo_config`.
   end type ocean_topo_config_t