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.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | public | :: | coriolis_beta | = | 0.0_wp |
Meridional gradient of f (s⁻¹ m⁻¹). 0 = f-plane (uses
|
|
| 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 |
|
| 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
|
|
| 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 |
|
| 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 |
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