Reads simulation parameters from a namelist input file
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer, | public, | parameter | :: | BT_HALO_AUTO_SENTINEL | = | -1 |
|
| integer, | public, | parameter | :: | BT_HALO_AUTO_WIDTH | = | 8 |
The recommended EXPLICIT march-in width (the validated production
width). AUTO no longer selects it — see |
| integer, | public, | parameter | :: | MAX_ICE_HLIM_VALS | = | 16 |
Maximum number of |
| integer, | public, | parameter | :: | MAX_OCEAN_DIAG_Z_LEVELS | = | 64 |
Maximum number of z-levels for ocean-diag z_fixed output vgrid |
| integer, | public, | parameter | :: | MAX_OCEAN_LAYER_RHO_INIT | = | 64 |
Maximum number of per-layer density init entries. |
| integer, | public, | parameter | :: | MAX_TIDAL_CONSTITUENTS | = | 10 |
Maximum number of tidal constituents |
| integer, | public, | parameter | :: | OBC_MAX_TIDAL_CFG | = | 8 |
Maximum tidal constituents per edge in the &ocean_bc_nml namelist. Mirrors OBC_MAX_TIDAL_CONSTITUENTS in rdb_ocean_boundary_types. |
| real(kind=wp), | public, | parameter | :: | ZFIXED_CAVITY_NU_H_MIN | = | 2.0_wp |
Lower envelope of |
| real(kind=wp), | private, | parameter | :: | LEGACY_TRACER_ALPHA_T | = | 0.17_wp |
Historical |
| real(kind=wp), | private, | parameter | :: | LEGACY_TRACER_BETA_S | = | 0.78_wp |
Historical |
| real(kind=wp), | private, | parameter | :: | LEGACY_TRACER_S_REF | = | 0.0_wp |
Historical |
| real(kind=wp), | private, | parameter | :: | LEGACY_TRACER_T_REF | = | 15.0_wp |
Historical |
| integer, | private, | parameter | :: | MAX_Z_FIXED_DZ | = | 128 |
Maximum number of |
Container for all runtime simulation parameters
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | public | :: | S_init_bottom | = | 0.0_wp |
Initial salinity at the bed (k=1, PSU). |
|
| real(kind=wp), | public | :: | S_init_surface | = | 0.0_wp |
Initial salinity at the surface layer (k=nz_ml, PSU).
Activates linear S(z) stratification when set non-zero
together with |
|
| real(kind=wp), | public | :: | S_max | = | 40.0_wp |
Upper physical bound for salinity (PSU) |
|
| real(kind=wp), | public | :: | S_min | = | 0.0_wp |
Lower physical bound for salinity (PSU) |
|
| real(kind=wp), | public | :: | S_ref | = | LEGACY_TRACER_S_REF |
RETIRED coastal-legacy EOS reference salinity (PSU). The live
ocean-path spelling is |
|
| real(kind=wp), | public | :: | T_init_bottom | = | 0.0_wp |
Initial temperature at the bed (k=1, degC). |
|
| real(kind=wp), | public | :: | T_init_surface | = | 0.0_wp |
Initial temperature at the surface layer (k=nz_ml, degC).
Activates linear T(z) stratification when set non-zero
together with |
|
| real(kind=wp), | public | :: | T_max | = | 40.0_wp |
Upper physical bound for temperature (degC) |
|
| real(kind=wp), | public | :: | T_min | = | -2.0_wp |
Lower physical bound for temperature (degC); seawater freezing |
|
| real(kind=wp), | public | :: | T_ref | = | LEGACY_TRACER_T_REF |
RETIRED coastal-legacy EOS reference temperature (degC). The
live ocean-path spelling is |
|
| real(kind=wp), | public | :: | alpha_T | = | LEGACY_TRACER_ALPHA_T |
RETIRED coastal-legacy thermal expansion coefficient
(kg/m^3 per degC). Live spelling: |
|
| character(len=256), | public | :: | bathymetry_file | = | "" |
Path to NetCDF bathymetry file (empty = flat bottom) |
|
| character(len=16), | public | :: | bc_east | = | "wall" |
East boundary: “wall”, “open”, “tidal”, “nested” |
|
| character(len=16), | public | :: | bc_north | = | "wall" |
North boundary: “wall”, “open”, “tidal”, “nested” |
|
| character(len=16), | public | :: | bc_south | = | "wall" |
South boundary: “wall”, “open”, “tidal”, “nested” |
|
| character(len=16), | public | :: | bc_west | = | "wall" |
West boundary: “wall”, “open”, “tidal”, “nested” |
|
| real(kind=wp), | public | :: | beta_S | = | LEGACY_TRACER_BETA_S |
RETIRED coastal-legacy haline contraction coefficient
(kg/m^3 per PSU). Live spelling: |
|
| real(kind=wp), | public | :: | cfl | = | 0.45_wp |
CFL number for adaptive timestep |
|
| integer, | public | :: | cfl_interval | = | 1 |
Recompute CFL timestep every N steps (1 = every step) |
|
| logical, | public | :: | check_vanished_content | = | .false. |
I1′ tripwire — assert |
|
| integer, | public | :: | compress_level | = | 1 |
Deflate compression level (1=fast, 9=max). 1 is usually optimal. |
|
| logical, | public | :: | compress_output | = | .false. |
Enable deflate compression for NetCDF output (NetCDF4/HDF5) |
|
| real(kind=wp), | public | :: | coriolis_f | = | 0.0_wp |
Coriolis parameter f (1/s), typically 2Omegasin(lat) |
|
| real(kind=wp), | public | :: | dt_fixed | = | 0.0_wp |
Fixed timestep (s), 0 = adaptive CFL. Same convention
as |
|
| real(kind=wp), | public | :: | dt_max | = | 1.0e10_wp |
Maximum allowable timestep (s) — always in seconds, NOT
affected by |
|
| real(kind=wp), | public | :: | dx | = | 1.0_wp |
Cell size in x-direction (m) |
|
| real(kind=wp), | public | :: | dy | = | 1.0_wp |
Cell size in y-direction (m) |
|
| real(kind=wp), | public | :: | h0 | = | 1.0_wp |
Background depth for gaussian_hump IC (m) |
|
| real(kind=wp), | public | :: | hdiff_kappa | = | 0.0_wp |
Horizontal diffusion coefficient for tracers (m^2/s).
VESTIGIAL: its only consumers were the coastal solvers, which
left with the carve-out, so nothing reads it today. The
along-coordinate equivalent is the separate
|
|
| real(kind=wp), | public | :: | inflow_salinity | = | -1.0_wp |
Prescribed salinity for inflow BC (PSU); <0 = zero-gradient |
|
| real(kind=wp), | public | :: | inflow_temperature | = | -999.0_wp |
Prescribed temperature for inflow BC (degC); <0 = zero-gradient |
|
| real(kind=wp), | public | :: | initial_salinity | = | 35.0_wp |
Initial salinity for all layers (PSU). Used as a uniform IC
unless |
|
| real(kind=wp), | public | :: | initial_temperature | = | 15.0_wp |
Initial potential temperature for all layers (degC). Used
as a uniform IC unless |
|
| real(kind=wp), | public | :: | kappa_S_bg | = | 1.0e-5_wp |
Background vertical salinity diffusivity (m^2/s) |
|
| real(kind=wp), | public | :: | kappa_T_bg | = | 1.0e-5_wp |
Background vertical temperature diffusivity (m^2/s) |
|
| real(kind=wp), | public | :: | kpp_c_vt2 | = | 1.8_wp |
Unresolved-turbulence coefficient for the V_t^2 term in the bulk-Ri denominator (LMD94 eq 23). Set 0 to disable V_t^2. |
|
| real(kind=wp), | public | :: | kpp_cs_nonlocal | = | 6.3_wp |
Non-local (counter-gradient) transport coefficient C_s (LMD94 eq 20, limit value). |
|
| real(kind=wp), | public | :: | kpp_ri_crit | = | 0.3_wp |
Critical bulk Richardson number for the KPP BL-depth sweep. |
|
| character(len=16), | public | :: | log_level | = | "info" |
Log verbosity: “debug”, “verbose”, “info”, “performance”, “warning”, “error” |
|
| real(kind=wp), | public | :: | manning_n | = | 0.0_wp |
Manning roughness coefficient |
|
| integer, | public | :: | n_tidal_constituents | = | 0 |
Number of active tidal constituents (0 = use legacy single) |
|
| integer, | public | :: | nghost | = | 3 |
Number of ghost cells on each side. Default 3 (not 2): the ocean dyn-core’s continuity/tracer PPM reconstruction is a 5-point stencil, so a rank-seam face’s ghost-side donor needs two neighbours beyond itself — full-order reconstruction AT the seam requires three ghost columns. At nghost=2 the PPM local-array-edge fallback fires at the seam and degrades the face to first order, producing a seam-inconsistent tracer mass flux: it conserves a uniform tracer (constant field cancels) but LEAKS a structured one (advecting T with rank-A-out /= rank-B-in on the shared seam face drifts hT), invisible to the mass/salt closure gates. Measured on seamount_bench_full (np2 x-split): heat closure grew to +5e-11 by day 2 at nghost=2, stays at round-off (~5e-14, no growth) at nghost=3. Single-rank runs are unaffected by the wider halo (same interior); the extra ghost column only costs a little memory. |
|
| integer, | public | :: | nx | = | 200 |
Number of physical cells in x-direction |
|
| integer, | public | :: | ny | = | 1 |
Number of physical cells in y-direction |
|
| integer, | public | :: | nz_layers | = | 2 |
Number of sigma layers for NH solver |
|
| type(ocean_config_t), | public | :: | ocean |
Nested ocean knobs. Per-concern sub-types live under here
(coriolis, thermo, bt, pgf, bdrag, hvisc, vmix, continuity,
topo, ic, diag). PR-B1 migrates knobs from this struct’s
flat fields into the nested form one group at a time —
callers go from |
|||
| character(len=256), | public | :: | output_dir | = | "./output" |
Directory for output files |
|
| logical, | public | :: | output_to_file | = | .false. |
Enable file output (NetCDF snapshots) |
|
| integer, | public | :: | px | = | 1 |
Number of MPI processes in x-direction |
|
| integer, | public | :: | py | = | 1 |
Number of MPI processes in y-direction |
|
| real(kind=wp), | public | :: | regrid_time_scale | = | 0.0_wp |
Grid time-filter timescale τ (s). The ALE regrid relaxes the coordinate a fraction dt/(τ+dt) toward the target each thermo step instead of jumping (White & Adcroft 2008), damping the σ/z* per-step grid-motion shock. 0 (default) = jump to target = bit-identical. |
|
| logical, | public | :: | remap_boundary_extrap | = | .false. |
Linear-exact one-sided reconstruction in the ALE remap’s two
boundary cells (MOM6 |
|
| logical, | public | :: | remap_check_preconditions | = | .false. |
Assert, once per ALE remap (thermo cadence), that every column satisfies what the overlap sweep has always assumed: non-negative source AND target thicknesses, and matching column totals. Both are caller obligations and neither was ever checked; a violation silently CREATES or DELETES tracer mass. Diagnostic knob — .false. (default) = the check never runs = bit-identical. |
|
| character(len=16), | public | :: | remap_method | = | "ppm" |
Vertical remapping method: “pcm”, “plm”, “ppm”, “ppm_h4”, “pqm”. Default PPM (piecewise parabolic, Colella & Woodward 1984) — the state-of-the-art conservative vertical-remap stencil for the coastal ALE coords. “pqm” is piecewise quartic (White & Adcroft 2008); it falls back to PPM for nz < 5. |
|
| logical, | public | :: | remap_nonuniform_weights | = | .false. |
Non-uniform-grid reconstruction weights in the ALE remap’s PLM slope and PPM edge estimate (Colella & Woodward 1984 eqs 1.6-1.8) instead of their equal-thickness specialisations, which are linear-exact only on a UNIFORM source column. PPM_H4 and PQM already carry thickness-weighted stencils and are unchanged. .false. (default) = bit-identical. |
|
| logical, | public | :: | remap_vel_conserve_ke | = | .false. |
KE-conserving rescale of the remapped layer velocities: scale the baroclinic anomaly per column so column KE is preserved (Adcroft & Hallberg 2006), capped 1.25×; barotropic mean untouched. .false. (default) = momentum-only = bit-identical. |
|
| character(len=256), | public | :: | restart_file | = | "" |
Path to restart file for warm start (empty = cold start) |
|
| real(kind=wp), | public | :: | restart_interval | = | 0.0_wp |
Time between restart file writes (s), 0 = no restarts |
|
| real(kind=wp), | public | :: | rho_0 | = | 1000.0_wp |
Reference density for EOS (kg/m^3) |
|
| real(kind=wp), | public | :: | rho_ref_pressure | = | 2.0e7_wp |
Reference pressure (Pa, default 2e7 = 2000 dbar) for the potential density that defines the VCOORD_RHO coordinate. |
|
| real(kind=wp), | public | :: | rho_target_dense | = | 1030.0_wp |
Densest target interface potential density (kg/m³) — the bed
interface for VCOORD_RHO / VCOORD_HYCOM. See |
|
| real(kind=wp), | public | :: | rho_target_light | = | 1020.0_wp |
Lightest target interface potential density (kg/m³) — the
surface interface for VCOORD_RHO / VCOORD_HYCOM. With
|
|
| real(kind=wp), | public | :: | rho_target_list(MAX_Z_FIXED_DZ+1) | = | -1.0_wp |
|
|
| character(len=16), | public | :: | rho_target_profile | = | "uniform" |
Target-density profile of |
|
| character(len=16), | public | :: | sim_type | = | "ocean" |
Simulation regime: “coastal” or “ocean” |
|
| real(kind=wp), | public | :: | sponge_strength | = | 0.0_wp |
Sponge relaxation rate (1/s) |
|
| integer, | public | :: | sponge_width | = | 0 |
Sponge layer width in cells |
|
| real(kind=wp), | public | :: | status_interval | = | 0.0_wp |
Print status every N seconds of simulation time (0 = default every 100 steps) |
|
| real(kind=wp), | public | :: | t_end | = | 1.0_wp |
Simulation end time, interpreted in |
|
| character(len=16), | public | :: | thickness_config | = | "sigma" |
INITIAL layer-thickness profile for the ocean path ( |
|
| real(kind=wp), | public | :: | tidal_amp(MAX_TIDAL_CONSTITUENTS) | = | 0.0_wp |
Constituent amplitudes (m) |
|
| real(kind=wp), | public | :: | tidal_omega(MAX_TIDAL_CONSTITUENTS) | = | 0.0_wp |
Constituent angular frequencies (rad/s) |
|
| real(kind=wp), | public | :: | tidal_phase(MAX_TIDAL_CONSTITUENTS) | = | 0.0_wp |
Constituent phases (radians) |
|
| character(len=8), | public | :: | time_unit | = | "s" |
Unit applied to the long-time fields: |
|
| logical, | public | :: | use_io_server | = | .false. |
Dedicate one MPI rank per node as I/O server (MPI only) |
|
| logical, | public | :: | use_multilayer | = | .false. |
Enable coupled hydrostatic vertical layers (alternative to NH) |
|
| character(len=16), | public | :: | vcoord_type | = | "sigma" |
Vertical coordinate type: “sigma”, “zsigma”, “zstar”, etc. |
|
| real(kind=wp), | public | :: | wind_stress_x | = | 0.0_wp |
Surface wind stress in x-direction (Pa) |
|
| real(kind=wp), | public | :: | wind_stress_y | = | 0.0_wp |
Surface wind stress in y-direction (Pa) |
|
| real(kind=wp), | public | :: | z_fixed_dz(MAX_Z_FIXED_DZ) | = | -1.0_wp |
|
|
| real(kind=wp), | public | :: | z_fixed_dz_top | = | 2.0_wp |
|
|
| character(len=16), | public | :: | z_fixed_profile | = | "uniform" |
Nominal layer-thickness profile of |
|
| real(kind=wp), | public | :: | z_fixed_tanh_center | = | 0.5_wp |
|
|
| real(kind=wp), | public | :: | z_fixed_tanh_width | = | 0.25_wp |
|
|
| logical, | public | :: | zfixed_closed_faces | = | .false. |
Partial-step z-level face closure under
|
|
| real(kind=wp), | public | :: | zstar_h_min | = | 1.0e-4_wp |
Vanishing-layer floor (m). Layers that would land below the local bed get clipped to this thickness rather than going to zero. |
|
| real(kind=wp), | public | :: | zstar_h_surf_target | = | 0.0_wp |
Target physical thickness of the surface layer (m). 0 => auto: fall back to the lite (uniform sigma) profile per column (effectively zstar-lite per-column). Set > 0 to anchor the surface layer at a fixed thickness regardless of H. |
|
| integer, | public | :: | zstar_n_surf | = | 0 |
Number of “fine” near-surface layers using stretching. 0 => auto (use max(1, nz/3)) |
|
| character(len=16), | public | :: | zstar_stretching | = | "log" |
Surface-concentration stretching: “log” | “uniform” |
One file-driven surface-forcing tag in &ocean_dataovr_nml.
A blank file means “this tag is not file-driven” — the slot
keeps whatever the configure-time scalar/formula path seeded.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | public | :: | add_offset | = | 0.0_wp |
Added after |
|
| character(len=256), | public | :: | file | = | "" |
Path to the pre-regridded |
|
| real(kind=wp), | public | :: | scale | = | 1.0_wp |
Multiplied into the slab once at read (unit conversion). |
|
| character(len=64), | public | :: | var | = | "" |
Variable name inside |
Boundary-condition configuration read from &ocean_bc_nml.
All defaults reproduce a closed-wall run — existing nmls that
omit this block are bit-identical to prior behaviour.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| character(len=16), | public | :: | east | = | "wall" | ||
| real(kind=wp), | public | :: | east_clamped_eta | = | 0.0_wp | ||
| real(kind=wp), | public | :: | east_clamped_u | = | 0.0_wp | ||
| real(kind=wp), | public | :: | east_ext_u | = | 0.0_wp |
Exterior barotropic u, east (m/s). |
|
| real(kind=wp), | public | :: | east_inflow_S | = | 35.0_wp | ||
| real(kind=wp), | public | :: | east_inflow_T | = | 10.0_wp | ||
| integer, | public | :: | east_n_tidal | = | 0 | ||
| real(kind=wp), | public | :: | east_tidal_amp(OBC_MAX_TIDAL_CFG) | = | 0.0_wp | ||
| real(kind=wp), | public | :: | east_tidal_omega(OBC_MAX_TIDAL_CFG) | = | 0.0_wp | ||
| real(kind=wp), | public | :: | east_tidal_phase(OBC_MAX_TIDAL_CFG) | = | 0.0_wp | ||
| character(len=16), | public | :: | flather_form | = | "legacy" |
“legacy” (default) = v1 Flather (u_ext=0, no interior vel); “full” = half-characteristic form (Flather 1976). |
|
| logical, | public | :: | mask_wall_velocity | = | .true. |
Zero the T-cell wet-mask in the ghost cells beyond every solid
WALL edge at setup, so the derived C-grid face masks
( |
|
| character(len=16), | public | :: | north | = | "wall" | ||
| real(kind=wp), | public | :: | north_clamped_eta | = | 0.0_wp | ||
| real(kind=wp), | public | :: | north_clamped_v | = | 0.0_wp | ||
| real(kind=wp), | public | :: | north_ext_v | = | 0.0_wp |
Exterior barotropic v, north (m/s). |
|
| real(kind=wp), | public | :: | north_inflow_S | = | 35.0_wp | ||
| real(kind=wp), | public | :: | north_inflow_T | = | 10.0_wp | ||
| integer, | public | :: | north_n_tidal | = | 0 | ||
| real(kind=wp), | public | :: | north_tidal_amp(OBC_MAX_TIDAL_CFG) | = | 0.0_wp | ||
| real(kind=wp), | public | :: | north_tidal_omega(OBC_MAX_TIDAL_CFG) | = | 0.0_wp | ||
| real(kind=wp), | public | :: | north_tidal_phase(OBC_MAX_TIDAL_CFG) | = | 0.0_wp | ||
| real(kind=wp), | public | :: | nudge_tau_in | = | 0.0_wp |
Inflow nudging timescale (s, Marchesiello et al. 2001). 0 = off. |
|
| real(kind=wp), | public | :: | nudge_tau_out | = | 0.0_wp |
Outflow nudging timescale (s). 0 = off. |
|
| logical, | public | :: | obc_tidal_nodal | = | .false. |
Apply the 18.6-yr nodal factor |
|
| real(kind=wp), | public | :: | orlanski_gamma | = | 1.0_wp |
Running-mean weight (0=full running mean, 1=instant; default=1). |
|
| real(kind=wp), | public | :: | orlanski_rx_max | = | 10.0_wp |
Clamp on the Orlanski nondimensional phase speed (grid cells / step). |
|
| character(len=16), | public | :: | radiation_scheme | = | "anomaly" |
“anomaly” (default) = v1 BT-mean + zero-gradient anomaly. “orlanski” = per-layer implicit-upwind radiation (Orlanski 1976). |
|
| real(kind=wp), | public | :: | res_lscale_in | = | 0.0_wp |
Inflow reservoir length scale (m). 0 = instantaneous inflow (T_data applied on inflow unconditionally — same as v1 for inflow direction when feature is active). |
|
| real(kind=wp), | public | :: | res_lscale_out | = | 0.0_wp |
Outflow reservoir length scale (m). 0 = feature disabled (v1 sign-switch path unchanged). Non-zero engages the implicit Marchesiello et al. 2001 reservoir on all open-ish edges. |
|
| character(len=16), | public | :: | south | = | "wall" | ||
| real(kind=wp), | public | :: | south_clamped_eta | = | 0.0_wp | ||
| real(kind=wp), | public | :: | south_clamped_v | = | 0.0_wp | ||
| real(kind=wp), | public | :: | south_ext_v | = | 0.0_wp |
Exterior barotropic v, south (m/s). |
|
| real(kind=wp), | public | :: | south_inflow_S | = | 35.0_wp | ||
| real(kind=wp), | public | :: | south_inflow_T | = | 10.0_wp | ||
| integer, | public | :: | south_n_tidal | = | 0 | ||
| real(kind=wp), | public | :: | south_tidal_amp(OBC_MAX_TIDAL_CFG) | = | 0.0_wp | ||
| real(kind=wp), | public | :: | south_tidal_omega(OBC_MAX_TIDAL_CFG) | = | 0.0_wp | ||
| real(kind=wp), | public | :: | south_tidal_phase(OBC_MAX_TIDAL_CFG) | = | 0.0_wp | ||
| logical, | public | :: | sponge_relax_tracers | = | .false. |
When .true., extend the sponge relaxation to h_layer + tracers. Default .false. — preserves bit-identity of existing sponge runs. |
|
| real(kind=wp), | public | :: | sponge_strength | = | 0.0_wp |
Peak relaxation rate (1/s) at the outer face of the band. |
|
| integer, | public | :: | sponge_width | = | 0 |
Number of cells in the sponge band. 0 disables the sponge. |
|
| character(len=16), | public | :: | west | = | "wall" |
BC type string for the west edge. Recognised: “wall” (default), “open”, “tidal”, “clamped”, “sponge”, “chapman”, “periodic”. “tripolar_fold” is accepted on the NORTH edge only (Murray bipolar cap; requires grid_config=”tripolar” + periodic w/e). |
|
| real(kind=wp), | public | :: | west_clamped_eta | = | 0.0_wp | ||
| real(kind=wp), | public | :: | west_clamped_u | = | 0.0_wp | ||
| real(kind=wp), | public | :: | west_ext_u | = | 0.0_wp |
Exterior barotropic u, west (m/s). |
|
| real(kind=wp), | public | :: | west_inflow_S | = | 35.0_wp | ||
| real(kind=wp), | public | :: | west_inflow_T | = | 10.0_wp | ||
| integer, | public | :: | west_n_tidal | = | 0 | ||
| real(kind=wp), | public | :: | west_tidal_amp(OBC_MAX_TIDAL_CFG) | = | 0.0_wp | ||
| real(kind=wp), | public | :: | west_tidal_omega(OBC_MAX_TIDAL_CFG) | = | 0.0_wp | ||
| real(kind=wp), | public | :: | west_tidal_phase(OBC_MAX_TIDAL_CFG) | = | 0.0_wp |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | public | :: | bbl_thick_min | = | 0.0_wp |
Minimum effective BBL thickness (m). Typical 0.1 m. |
|
| real(kind=wp), | public | :: | bed_factor | = | 1.0_wp |
Multiplier on the bed-layer (k=1) drag tendency only. Default
|
|
| real(kind=wp), | public | :: | bg_vel | = | 0.0_wp |
Background velocity floor (m/s) for the distributed quadratic form. Typical 0.1 m/s. |
|
| real(kind=wp), | public | :: | cd | = | 0.0_wp |
Quadratic drag coefficient (dimensionless). Typical 2.5e-3. Zero disables the quadratic branch. |
|
| real(kind=wp), | public | :: | cdrag_side | = | 0.0_wp |
Side-wall drag coefficient (dimensionless) for the channel drag. Zero (default) disables the branch. |
|
| logical, | public | :: | channel_drag | = | .false. |
Lateral side-wall (channel) drag: a per-layer Rayleigh sink at
every layer with a partially blocked cross-stream perimeter.
Default |
|
| character(len=16), | public | :: | form | = | "quadratic" |
Bottom-drag variant: “quadratic” (default, log-layer du/dt = -C_d·|U|·u/h) or “linear” (Rayleigh du/dt = -r·u). |
|
| real(kind=wp), | public | :: | hbbl | = | 0.0_wp |
Bottom-boundary-layer thickness (m) over which drag is distributed. Zero (default) = bed-only mode. |
|
| logical, | public | :: | implicit | = | .false. |
Backward-Euler (implicit) bottom drag: |
|
| real(kind=wp), | public | :: | r | = | 0.0_wp |
Linear Rayleigh coefficient (1/s). Active when |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | auto_n_inner | = | .false. |
If |
|
| logical, | public | :: | bc_pgf_forcing | = | .true. |
MOM6 split ( |
|
| real(kind=wp), | public | :: | bebt | = | 0.1_wp |
BT continuity-flux velocity projection weight (MOM6 |
|
| integer, | public | :: | bt_halo | = | BT_HALO_AUTO_SENTINEL |
Wide-halo march-in width. |
|
| logical, | public | :: | bt_rem_from_visc_rem | = | .false. |
PR-2 (bt-rem-from-av-rem): |
|
| real(kind=wp), | public | :: | cfl_bt_safety | = | 0.65_wp |
Safety fraction on the shallow-water CFL bound when
|
|
| logical, | public | :: | cont_corr_bounds | = | .false. |
When |
|
| logical, | public | :: | correction_bc_pgf | = | .false. |
Adds a per-layer baroclinic-PGF retro-correction for the η
change during the BT substep. Requires |
|
| logical, | public | :: | correction_h_weighted | = | .false. |
RETIRED (2026-10-02) — setting it |
|
| logical, | public | :: | correction_visc_rem | = | .false. |
RETIRED (2026-10, D1 follow-up) — setting |
|
| logical, | public | :: | forcing_visc_rem | = | .false. |
MOM6 |
|
| character(len=16), | public | :: | frhat_scheme | = | "hybrid" |
|
|
| integer, | public | :: | n_inner | = | 0 |
Mode-split barotropic substeps per outer step. |
|
| real(kind=wp), | public | :: | pc_be | = | 0.6_wp |
pred_corr predictor fraction (MOM6 |
|
| logical, | public | :: | renorm_visc_rem | = | .false. |
MOM6 continuity-inversion parity (SPEC §4 S2b): pass
|
|
| logical, | public | :: | rescale_strong_drag | = | .false. |
MOM6 |
|
| character(len=16), | public | :: | split_scheme | = | "pred_corr" |
Outer time-integration scheme for the split-explicit ocean path (SPEC §4 S3/S4). Both schemes are supported and both are under test; they differ in what they cost you. |
|
| logical, | public | :: | strong_drag | = | .false. |
MOM6 |
|
| logical, | public | :: | substep_drag | = | .false. |
Multiplies the per-face BT velocity update by a damping factor every inner step. |
|
| logical, | public | :: | substep_zeta_ke | = | .true. |
When |
|
| logical, | public | :: | upstream_h_face | = | .false. |
When |
|
| logical, | public | :: | use_cont_type | = | .false. |
When |
|
| logical, | public | :: | visc_rem_chain | = | .true. |
PR-3 (visc_rem audit + unification, D1 — revised 2026-10 once
MOM6 settled the BT-correction fold question): ONE switch for
exactly MOM6’s |
|
| logical, | public | :: | wave_drag | = | .false. |
Master switch for the barotropic linear (Rayleigh) wave drag
— the bulk energy sink for the barotropic tide (Egbert & Ray
2001; Jayne & St Laurent 2001), MOM6 |
|
| character(len=256), | public | :: | wave_drag_file | = | "" |
Reserved for PR-14 (MOM6 |
|
| character(len=32), | public | :: | wave_drag_form | = | "uniform" |
|
|
| real(kind=wp), | public | :: | wave_drag_h2_max | = | 2.5e4_wp |
Ceiling on the resolved-bathymetry |
|
| real(kind=wp), | public | :: | wave_drag_kappa | = | 6.2832e-4_wp |
Topographic wavenumber |
|
| real(kind=wp), | public | :: | wave_drag_n_bot | = | 1.0e-3_wp |
Reference near-bottom buoyancy frequency |
|
| real(kind=wp), | public | :: | wave_drag_r_uniform | = | 0.0_wp |
Piston velocity |
|
| real(kind=wp), | public | :: | wave_drag_scale | = | 1.0_wp |
Global tuning multiplier on |
|
| character(len=64), | public | :: | wave_drag_var | = | "rH" |
Reserved for PR-14 (MOM6 |
Static ice-shelf cavity GEOMETRY (&ocean_cavity_dyn_nml,
Phase 5.1). A prescribed, time-constant ice draft z_draft(i,j)
(m, positive DOWN — the depth of the ice base below z = 0) is
laid over the bed and absorbed into the barotropic DATUM:
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| character(len=32), | public | :: | draft_config | = | "none" |
Analytic draft shape. |
|
| real(kind=wp), | public | :: | draft_depth | = | 0.0_wp |
Draft amplitude (m, positive down) — the uniform value for
|
|
| character(len=256), | public | :: | draft_file | = | "" |
|
|
| character(len=16), | public | :: | draft_sign | = | "depth" |
|
|
| real(kind=wp), | public | :: | draft_slope | = | 0.0_wp |
|
|
| character(len=32), | public | :: | draft_source | = | "draft" |
What the draft is prescribed FROM. |
|
| character(len=64), | public | :: | draft_var | = | "iceDraft" |
|
|
| real(kind=wp), | public | :: | draft_x0 | = | -1.0e30_wp |
Western edge of the shelf box (m, GLOBAL physical coordinate),
and the ANCHOR of the |
|
| real(kind=wp), | public | :: | draft_x1 | = | 1.0e30_wp |
Eastern edge of the shelf box = the CALVING FRONT (m): beyond it the draft is 0 (open ocean). Default: no eastern limit. |
|
| real(kind=wp), | public | :: | draft_y0 | = | -1.0e30_wp |
Southern edge of the shelf box (m). Default: no limit. |
|
| real(kind=wp), | public | :: | draft_y1 | = | 1.0e30_wp |
Northern edge of the shelf box (m). Default: no limit. |
|
| logical, | public | :: | enable | = | .false. |
Master switch. Requires the ocean multilayer path, the split
solver, |
|
| real(kind=wp), | public | :: | grounded_max_frac | = | 0.5_wp |
Sanity bound: if more than this fraction of the interior columns ground, configure fails loud rather than silently running a domain that is mostly land. |
|
| real(kind=wp), | public | :: | h_min_cavity | = | 10.0_wp |
GROUNDING cutoff (m): a column whose water thickness
|
|
| real(kind=wp), | public | :: | rho_ice | = | 918.0_wp |
Ice density (kg/m^3), consulted ONLY by
|
|
| logical, | public | :: | trim_ic_for_p_surf | = | .false. |
Trim the INITIAL column under the ice so it is at rest (MOM6
|
Ice-shelf basal-melt THERMODYNAMICS (&ocean_cavity_melt_nml,
Phase 2b). The three-equation interface of Holland & Jenkins
(1999), solved once per thermo step on every ice-covered column
and delivered to the ocean as two OWNED surface-flux components
(heat_cavity, salt_cavity).
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | public | :: | cdrag_top | = | 2.5e-3_wp |
Top drag coefficient |
|
| logical, | public | :: | enable | = | .false. |
Master switch. Requires |
|
| character(len=32), | public | :: | exchange_law | = | "const_gamma" |
Turbulent exchange-velocity law. |
|
| real(kind=wp), | public | :: | far_field_depth | = | 10.0_wp |
Thickness (m) below the ice base over which the far-field
|
|
| character(len=16), | public | :: | freshwater | = | "virtual" |
How the meltwater reaches the ocean. |
|
| real(kind=wp), | public | :: | gamma_s | = | -1.0_wp |
Dimensionless salt-transfer coefficient |
|
| real(kind=wp), | public | :: | gamma_t | = | 2.2e-2_wp |
Dimensionless heat-transfer coefficient |
|
| character(len=32), | public | :: | ice_conduction | = | "insulating" |
Ice-side heat conduction. |
|
| real(kind=wp), | public | :: | s_ice | = | 0.0_wp |
Ice salinity (g/kg), |
|
| real(kind=wp), | public | :: | t_ice | = | -25.0_wp |
Ice interior temperature (degC), read by
|
|
| real(kind=wp), | public | :: | u_tide | = | 1.0e-2_wp |
RMS tidal velocity (m/s) in the melt friction velocity —
ISOMIP+ Table 4 p. 2483 and eq. (27) p. 2485, after Jenkins,
Nicholls & Corr (2010) eq. (10) p. 2309. TRAP, and the
protocol says it outright (p. 2486): “The computation of top
and bottom drag do not incorporate utidal” — it belongs to
the melt |
|
| real(kind=wp), | public | :: | ustar_min | = | 1.0e-4_wp |
Friction-velocity floor (m/s) — Yung et al. (2025) eq. (14) p. 5836, value from their Table 2 p. 5838. It exists because “a friction velocity of zero (perhaps created by initialising the model at rest) will result in identically zero melt … which would be inconsistent with the presence of heat available for melting”. |
|
| character(len=32), | public | :: | volume_compensation | = | "none" |
What to do with the volume |
All ocean-path knobs, nested by concern. Parallel to the
state composition pattern (ocean_state%dyn, %vcoord, etc.).
Read-side: see the per-sub-nml blocks in read_config.
Call-side: cfg%ocean%bt%use_cont_type,
cfg%ocean%pgf%form, etc.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| type(ocean_bc_config_t), | public | :: | bc |
Open-boundary condition config ( |
|||
| type(ocean_bdrag_config_t), | public | :: | bdrag | ||||
| type(ocean_bt_config_t), | public | :: | bt | ||||
| type(ocean_cavity_dyn_config_t), | public | :: | cavity_dyn |
Static ice-shelf cavity geometry ( |
|||
| type(ocean_cavity_melt_config_t), | public | :: | cavity_melt |
Ice-shelf basal-melt thermodynamics
( |
|||
| type(ocean_continuity_config_t), | public | :: | continuity | ||||
| type(ocean_conv_config_t), | public | :: | conv | ||||
| type(ocean_coriolis_config_t), | public | :: | coriolis | ||||
| type(ocean_data_config_t), | public | :: | data |
Shared time-varying NetCDF input reader ( |
|||
| type(ocean_dataovr_config_t), | public | :: | dataovr |
File-backed surface forcing ( |
|||
| type(ocean_ddiff_config_t), | public | :: | ddiff | ||||
| type(ocean_debug_config_t), | public | :: | debug |
Forensic probes ( |
|||
| type(ocean_diag_config_t), | public | :: | diag | ||||
| type(ocean_eos_config_t), | public | :: | eos | ||||
| type(ocean_epbl_config_t), | public | :: | epbl | ||||
| type(ocean_forcing_config_t), | public | :: | forcing |
Surface-flux component-set gate ( |
|||
| type(ocean_foxkemper_config_t), | public | :: | foxkemper | ||||
| type(ocean_geothermal_config_t), | public | :: | geothermal | ||||
| type(ocean_gm_config_t), | public | :: | gm | ||||
| type(ocean_grid_config_t), | public | :: | grid | ||||
| type(ocean_hdiff_config_t), | public | :: | hdiff |
Along-coordinate tracer Laplacian ( |
|||
| type(ocean_hvisc_config_t), | public | :: | hvisc | ||||
| type(ocean_ic_config_t), | public | :: | ic | ||||
| type(ocean_ice_config_t), | public | :: | ice |
Sea-ice slot config ( |
|||
| type(ocean_ice_ic_config_t), | public | :: | ice_ic |
Sea-ice initial-condition config ( |
|||
| type(ocean_isopycnal_config_t), | public | :: | isopycnal |
Lagrangian grounding-stability controls ( |
|||
| type(ocean_kappa_shear_config_t), | public | :: | kshear | ||||
| type(ocean_meke_config_t), | public | :: | meke | ||||
| type(ocean_mpi_config_t), | public | :: | mpi |
Multi-rank MPI debug / tuning controls ( |
|||
| type(ocean_pgf_config_t), | public | :: | pgf | ||||
| type(ocean_porous_config_t), | public | :: | porous | ||||
| type(ocean_psurf_config_t), | public | :: | psurf | ||||
| type(ocean_redi_config_t), | public | :: | redi | ||||
| type(ocean_restore_config_t), | public | :: | restore | ||||
| type(ocean_slopes_config_t), | public | :: | slopes | ||||
| type(ocean_sponge_config_t), | public | :: | sponge | ||||
| type(ocean_tdrag_config_t), | public | :: | tdrag |
Ice-shelf TOP drag ( |
|||
| type(ocean_thermo_config_t), | public | :: | thermo | ||||
| type(ocean_tidal_mixing_config_t), | public | :: | tidal_mixing | ||||
| type(ocean_tides_config_t), | public | :: | tides | ||||
| type(ocean_topo_config_t), | public | :: | topo | ||||
| type(ocean_tracers_config_t), | public | :: | tracers | ||||
| type(ocean_varmix_config_t), | public | :: | varmix | ||||
| type(ocean_vdiff_config_t), | public | :: | vdiff | ||||
| type(ocean_vmix_config_t), | public | :: | vmix | ||||
| type(ocean_wave_speed_config_t), | public | :: | wavespeed | ||||
| type(ocean_wetdry_config_t), | public | :: | wetdry |
Dynamic wetting/drying ( |
|||
| type(ocean_zinit_config_t), | public | :: | zinit |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | public | :: | h_min | = | 1.0e-6_wp |
Floor used by the PPM positivity limiter (MOM6
|
|
| logical, | public | :: | positive_definite | = | .false. |
Positive-definite continuity (MOM6-prevention + Roundabout-conservation).
When |
|
| logical, | public | :: | ppm_limit_pos | = | .false. |
MOM6 |
|
| logical, | public | :: | renorm_consistent_flux | = | .true. |
Continuous flux model in the |
|
| logical, | public | :: | vol_cfl | = | .false. |
MOM6 |
Brunt-Vaisala-triggered convective adjustment (&ocean_conv_nml,
CVMix_conv-style). Where the interior N^2 < n2_thresh
(dense-over-light), raises kt -> max(kt, kd_conv) and
kv -> max(kv, prandtl_conv*kd_conv), strictly below the active
surface boundary layer (KPP/EPBL own that). An INTERIOR
closure CONTRIBUTOR – it does not clip/floor on its own; it
feeds vmix_assemble. enable = .false. keeps the existing
path bit-identical. Knob table: docs/generated_nml_knobs.md.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | enable | = | .false. |
Master switch. Requires |
|
| real(kind=wp), | public | :: | kd_conv | = | 1.0_wp |
Convective tracer diffusivity (MOM6 |
|
| real(kind=wp), | public | :: | n2_thresh | = | 0.0_wp |
Trigger threshold on N^2 (MOM6 |
|
| real(kind=wp), | public | :: | prandtl_conv | = | 1.0_wp |
Kv_conv = prandtl_conv * kd_conv (MOM6 |
&ocean_coriolis_nml.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | bound_coriolis | = | .false. |
MOM6 |
|
| character(len=16), | public | :: | corner_h | = | "cell_mean" |
PV corner-thickness construction for the energy scheme.
|
|
| character(len=16), | public | :: | form | = | "sadourny" |
Coriolis-advection variant: “sadourny” (default, enstrophy form), “sadourny_energy” (energy-conserving transport form q·vh), “sadourny_hk” (Hollingsworth-Källén). |
|
| character(len=16), | public | :: | pv_adv_scheme | = | "centered" |
PV face-interpolation scheme, orthogonal to |
|
| logical, | public | :: | use_state_fluxes | = | .false. |
MOM6 mass-consistent CorAdCalc: the mom6 corrector’s
Coriolis-adv consumes the predictor continuity’s renormalised
transports ( |
&ocean_data_nml: the shared time-varying NetCDF input reader
(rdb_ocean_data_input, PR-14). Deliberately two knobs — this
group carries NO per-field entries. Registration is
programmatic: each consumer (surface forcing, OBC segments,
sponge targets, tidal-mixing maps, …) calls
ocean_data_input_register_2d/_3d from its OWN namelist group
at setup and gets back an opaque id. A field never appears
here. Zero registered fields on every shipped namelist today
⇒ ocean_data_input_update_all is a no-op ⇒ bit-identical.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer, | public | :: | max_fields | = | 16 |
Size of the reader’s field registry. A registration beyond
this is a fail-loud abort ( |
|
| logical, | public | :: | verbose | = | .false. |
Log every bracket advance (field, record pair, weight, model
time) via |
&ocean_dataovr_nml: file-backed surface forcing (PR-15, the A3
keystone consumer). Binds time-varying NetCDF fields, through
the shared PR-14 reader (&ocean_data_nml), onto the surface
stress and surface-flux slots. enable = .false. registers
nothing ⇒ ocean_data_input_update_all stays a no-op ⇒
bit-identical.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | public | :: | cycle_period | = | 0.0_wp |
Climatology period (s). Required > 0 when
|
|
| logical, | public | :: | enable | = | .false. |
Master switch. Default off ⇒ no registration, bit-identical.
Requires |
|
| type(dataovr_entry_config_t), | public | :: | evap |
Evaporative mass flux (kg/m^2/s, <= 0) -> |
|||
| type(dataovr_entry_config_t), | public | :: | heat |
Net surface heat flux (W/m^2, positive down) ->
|
|||
| type(dataovr_entry_config_t), | public | :: | lprec |
Liquid precipitation (kg/m^2/s, >= 0) -> |
|||
| logical, | public | :: | oor_clamp | = | .false. |
|
|
| type(dataovr_entry_config_t), | public | :: | salt |
Surface salt flux (kg salt/m^2/s, positive salinifies) ->
|
|||
| real(kind=wp), | public | :: | t_offset | = | 0.0_wp |
Added to the model time before the file-axis lookup (s) — shifts the model epoch onto the file’s epoch. |
|
| type(dataovr_entry_config_t), | public | :: | tau_x |
Zonal wind stress (Pa) -> |
|||
| type(dataovr_entry_config_t), | public | :: | tau_y |
Meridional wind stress (Pa) -> |
|||
| character(len=16), | public | :: | time_mode | = | "linear" |
Shared time-axis mode for every active tag: |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| character(len=16), | public | :: | diag_remap_scheme | = | "ppm" |
In-cell reconstruction for the conservative diagnostic vertical remap (z_fixed / density vgrids): “pcm”, “plm”, “ppm” (default), “ppm_h4”, or “pqm”. All conserve the column integral; PPM is the accurate default (PCM stair-steps). Inert when every diagnostic is on the native “layer” grid. |
|
| character(len=512), | public | :: | diags | = | "" |
Unified diagnostic selection list — one authoritative spec that
modifies the canonical default set. Whitespace/comma-separated
entries, each |
|
| real(kind=wp), | public | :: | dt_out | = | 3600.0_wp |
Cadence (s) at which the diag manager fires every variable’s time op (INSTANT writes, MEAN flushes the accumulator, etc.). |
|
| logical, | public | :: | enabled | = | .true. |
Enable per-step diag-manager hook in driver_run_ocean. |
|
| character(len=256), | public | :: | filename | = | "ocean_diag" |
Output file basename — |
|
| logical, | public | :: | mask_vanished_layers | = | .false. |
When |
|
| integer, | public | :: | n_rho_levels | = | 0 |
Number of entries used in rho_levels (0 = none). |
|
| integer, | public | :: | n_sigma_levels | = | 0 |
Number of entries used in sigma_levels (0 = auto-uniform). |
|
| integer, | public | :: | n_z_levels | = | 0 |
Number of entries used in z_levels (0 = none). |
|
| integer, | public | :: | n_zstar_levels | = | 0 |
Number of entries used in zstar_levels (0 = auto-uniform). |
|
| character(len=16), | public | :: | output_precision | = | "double" |
Element width of the DIAGNOSTIC NetCDF data variables: “double” (default => byte-identical to the pre-knob writer) or “single” (fp32 => ~half the bytes per frame; diagnostic output is write-bandwidth bound, so this is the main lever on its cost). fp32 carries ~7 decimal digits — ~1e-5 degC, ~1e-5 PSU, ~1e-9 m/s at 1 m/s — orders of magnitude below the model’s own discretisation error. |
|
| logical, | public | :: | reproducing_sums | = | .true. |
console-conservation totals (Mass/KE/Salt/Heat + sea-ice area)
and the salt/heat closed-budget |
|
| real(kind=wp), | public | :: | rho_levels(MAX_OCEAN_DIAG_Z_LEVELS) | = | -1.0_wp |
Output target potential-density bin edges (kg/m^3, strictly
increasing, light->dense) when vgrid = “density”. No auto-fill —
|
|
| real(kind=wp), | public | :: | sigma_levels(MAX_OCEAN_DIAG_Z_LEVELS) | = | -1.0_wp |
Output sigma levels — cumulative fractions (0..1, shallow->deep)
when sigma output is used. Empty => auto-generate |
|
| character(len=16), | public | :: | vgrid | = | "layer" |
Default output vertical grid for layer-shaped diags: “layer”
(native |
|
| real(kind=wp), | public | :: | z_levels(MAX_OCEAN_DIAG_Z_LEVELS) | = | -1.0_wp |
Output z-levels (m, positive downward) when vgrid = “z_fixed”. |
|
| real(kind=wp), | public | :: | zstar_levels(MAX_OCEAN_DIAG_Z_LEVELS) | = | -1.0_wp |
Output z reference interface depths (m, positive-down,
shallow->deep; deepest = H_ref) when z output is used. Empty =>
auto-generate |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| character(len=16), | public | :: | eos | = | "linear" |
Equation-of-state variant: “linear” (default, two-tracer), “wright” (Wright 1997 rational), “roquet_spv” (Roquet et al. 2015 specific-volume polynomial). “roquet_spv” is incompatible with the “fv_wright” PGF (fails loud at configure). “teos10” parses but is refused at configure (not implemented; Roquet SpV IS the 75-term TEOS-10 polynomial fit). |
|
| real(kind=wp), | public | :: | p_ref | = | 0.0_wp |
Reference pressure (Pa, |
|
| character(len=16), | public | :: | tfreeze_set | = | "seaice" |
Named seawater freezing-point (liquidus) coefficient set for
|
Energetics-based planetary boundary layer (&ocean_epbl_nml).
All defaults preserve bit-identity: enable = .false. keeps
the existing PP81 + KPP path untouched. Knob table + MOM6
name mapping: docs/generated_nml_knobs.md.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | public | :: | c_ek | = | 0.085_wp |
OM4 Ekman coefficient (MOM6 MSTAR2_COEF2). |
|
| character(len=8), | public | :: | combine | = | "add" |
“add” / “max” vs the interior closure’s kv/kt (MOM6 EPBL_IS_ADDITIVE). |
|
| real(kind=wp), | public | :: | ekman_scale_coef | = | 1.0_wp |
Rotational mixing-length rolloff (MOM6 EKMAN_SCALE_COEF). |
|
| logical, | public | :: | enable | = | .false. |
Master switch. Requires |
|
| real(kind=wp), | public | :: | la_frac_hbl | = | 0.04_wp |
Stokes SL-average depth fraction (MOM6 LA_DEPTH_RATIO). |
|
| real(kind=wp), | public | :: | lt_enhance_coef | = | 0.447_wp |
Enhancement coefficient (MOM6 LT_ENHANCE_COEF). |
|
| real(kind=wp), | public | :: | lt_enhance_exp | = | -1.33_wp |
Langmuir-number exponent (MOM6 LT_ENHANCE_EXP). |
|
| real(kind=wp), | public | :: | lt_lac1 | = | -0.87_wp | ||
| real(kind=wp), | public | :: | lt_lac2 | = | 0.0_wp | ||
| real(kind=wp), | public | :: | lt_lac3 | = | 0.0_wp | ||
| real(kind=wp), | public | :: | lt_lac4 | = | 0.95_wp | ||
| real(kind=wp), | public | :: | lt_lac5 | = | 0.95_wp |
Stability-modified La coefficients (MOM6 LT_MOD_LAC1..5); set all to 0 for the unmodified La. |
|
| real(kind=wp), | public | :: | lt_max_enhance | = | 5.0_wp |
Cap on the multiplicative enhancement. |
|
| character(len=16), | public | :: | lt_scheme | = | "rescale" |
“rescale” (multiplicative) / “additive” (MOM6 EPBL_LANGMUIR_SCHEME). |
|
| real(kind=wp), | public | :: | min_mix_len | = | 0.0_wp |
Mixing-length floor, m (MOM6 EPBL_MIN_MIX_LEN). |
|
| real(kind=wp), | public | :: | mixlen_exponent | = | 2.0_wp |
Shape-function exponent (MOM6 MIX_LEN_EXPONENT). |
|
| logical, | public | :: | mld_bisection | = | .false. |
Bisection instead of false position (MOM6 EPBL_MLD_BISECTION). |
|
| logical, | public | :: | mld_iteration | = | .true. |
Self-consistent MLD root-find (MOM6 USE_MLD_ITERATION). |
|
| integer, | public | :: | mld_max_its | = | 20 |
Max MLD iterations (MOM6 EPBL_MLD_MAX_ITS). |
|
| real(kind=wp), | public | :: | mld_tol | = | 1.0_wp |
MLD convergence tolerance, m (MOM6 EPBL_MLD_TOLERANCE). |
|
| logical, | public | :: | mld_use_prev_guess | = | .false. |
Seed from the previous step’s MLD (MOM6 MLD_ITERATION_GUESS). |
|
| real(kind=wp), | public | :: | mstar | = | 1.2_wp |
Constant-scheme mstar (MOM6 MSTAR). |
|
| real(kind=wp), | public | :: | mstar_cap | = | -1.0_wp |
Cap for OM4/RH18; off when < 0 (MOM6 MSTAR_CAP). |
|
| real(kind=wp), | public | :: | mstar_coef1 | = | 0.3_wp |
OM4 stabilizing coefficient (MOM6 MSTAR2_COEF1). |
|
| real(kind=wp), | public | :: | mstar_conv_adj | = | 0.0_wp |
Convective mstar reduction in [0,1] (MOM6 MSTAR_CONV_ADJ). |
|
| character(len=16), | public | :: | mstar_scheme | = | "om4" |
“constant” / “om4” / “rh18” (MOM6 EPBL_MSTAR_SCHEME). |
|
| real(kind=wp), | public | :: | nstar | = | 0.2_wp |
Convective PE -> TKE efficiency (MOM6 NSTAR). |
|
| real(kind=wp), | public | :: | omega | = | 7.2921e-5_wp |
Earth rotation rate, 1/s (MOM6 OMEGA). |
|
| real(kind=wp), | public | :: | omega_frac | = | 0.0_wp |
Blend |f| with 2*Omega (MOM6 ML_OMEGA_FRAC). |
|
| real(kind=wp), | public | :: | prandtl | = | 1.0_wp |
Kv = prandtl*Kd into the momentum solve (MOM6 EPBL_PRANDTL). |
|
| real(kind=wp), | public | :: | rh18_cn1 | = | 0.275_wp | ||
| real(kind=wp), | public | :: | rh18_cn2 | = | 8.0_wp | ||
| real(kind=wp), | public | :: | rh18_cn3 | = | -5.0_wp | ||
| real(kind=wp), | public | :: | rh18_cs1 | = | 0.2_wp | ||
| real(kind=wp), | public | :: | rh18_cs2 | = | 0.4_wp |
RH18 mstar fits (MOM6 RH18_MSTAR_CN1..CS2). |
|
| real(kind=wp), | public | :: | tke_decay | = | 2.5_wp |
Ekman-depth / TKE-decay-scale ratio (MOM6 TKE_DECAY). |
|
| logical, | public | :: | tke_diags | = | .false. |
Compute the per-column TKE budget diagnostic terms. |
|
| real(kind=wp), | public | :: | translay_scale | = | 0.1_wp |
Transition-layer shape floor, must be in [0,1) when iterating (MOM6 EPBL_TRANSITION_SCALE). |
|
| logical, | public | :: | use_lt | = | .false. |
Langmuir-turbulence enhancement (LF17 wind-only path, no wave model needed). MOM6 EPBL_LT / USE_LA_LI2016. |
|
| character(len=16), | public | :: | vel_scale_scheme | = | "cube_root" |
“cube_root” / “rh18” (MOM6 EPBL_VEL_SCALE_SCHEME). |
|
| real(kind=wp), | public | :: | von_karman | = | 0.41_wp |
kappa in Kd = vstarkappamixlen (MOM6 VON_KARMAN_CONST). |
|
| real(kind=wp), | public | :: | vstar_scale_fac | = | 1.0_wp |
Overall vstar multiplier (MOM6 EPBL_VEL_SCALE_FACTOR). |
|
| real(kind=wp), | public | :: | vstar_surf_fac | = | 1.2_wp |
RH18 mechanical surface vstar factor (MOM6 VSTAR_SURF_FAC). |
|
| real(kind=wp), | public | :: | wstar_ustar_coef | = | 1.0_wp |
Convective weight in the velocity scale (MOM6 WSTAR_USTAR_COEF). |
&ocean_foxkemper_nml: Fox-Kemper mixed-layer-eddy restratification.
Default off ⇒ bit-identical. Reads epbl%mld.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | public | :: | bodner_mstar | = | 0.5_wp |
Bodner mechanical (u) weight in w’u’ = (mstar·u³+nstar·w*³)^{2/3}. |
|
| real(kind=wp), | public | :: | bodner_nstar | = | 0.066_wp |
Bodner convective (w*) weight in the same w’u’ estimate. |
|
| real(kind=wp), | public | :: | ce | = | 0.0625_wp |
FK08 coefficient Ce (0.06-0.08). |
|
| real(kind=wp), | public | :: | cr | = | 0.0_wp |
Bodner (2023) efficiency coefficient |
|
| logical, | public | :: | enable | = | .false. |
Master switch (off => bit-identity). |
|
| real(kind=wp), | public | :: | f_floor | = | 1.0e-5_wp |
|f| regularisation floor (1/s). |
|
| real(kind=wp), | public | :: | min_wstar2 | = | 1.0e-24_wp |
Floor on w’u’ (m²/s²) — pure 1/0 armour when u* and the surface buoyancy flux both vanish. |
|
| real(kind=wp), | public | :: | mld_decay_time | = | 0.0_wp |
Running-mean MLD filter time-scale (s) used when the MLD is retreating. 0 (default) => filter off => instantaneous EPBL MLD (bit-identical). Positive damps step-to-step MLD swings. |
|
| logical, | public | :: | resolution_taper | = | .false. |
B2 res_fn double-counting hook (hard error if on without B2). |
|
| real(kind=wp), | public | :: | tail_dh | = | 0.0_wp |
mu cubic-tail extension (smoother); default 0 = exact mu. |
|
| logical, | public | :: | use_bodner | = | .false. |
Bodner et al. (2023) frontogenesis-arrest MLE variant: replaces
the |
|
| logical, | public | :: | use_mom_mixrate | = | .false. |
FK11 momentum-mixrate timescale vs bare Ce/|f|. Default off. |
&ocean_geothermal_nml: bottom-heat-flux knobs. Default OFF = bit-identical.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | enable | = | .false. |
Master switch. Default |
|
| real(kind=wp), | public | :: | q_geo | = | 0.0_wp |
Scalar constant bottom heat flux (W/m^2, positive up). Typical ~0.05-0.1. |
&ocean_gm_nml: Gent-McWilliams thickness diffusion — eddy-induced
bolus transport folded into continuity. Reads the slopes slot.
Default off ⇒ no bolus flux.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | enable | = | .false. |
Master switch. Default off ⇒ |
|
| real(kind=wp), | public | :: | khth | = | 0.0_wp |
Thickness diffusivity KhTh, m^2/s (constant-fill for v1; production 1e2-1e3). 0 ⇒ no bolus transport even when enabled. |
|
| real(kind=wp), | public | :: | khth_max_cfl | = | 0.1_wp |
Fraction of the diffusive CFL the face KH may use. |
|
| real(kind=wp), | public | :: | khth_slope_max | = | 0.01_wp |
Slope magnitude above which the safe-streamfunction blend takes
over (MOM6 |
&ocean_grid_nml: horizontal-grid generator + geometry knobs.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| character(len=16), | public | :: | axis_units | = | "meters" |
Units of the Cartesian domain extent ( |
|
| character(len=16), | public | :: | coriolis_scheme | = | "beta_plane" |
Coriolis source for the metrics f-fill: “beta_plane” (default, f_0 + betay) or “planetary” (2omega*sin(geolat)). |
|
| character(len=16), | public | :: | grid_config | = | "cartesian" |
Grid generator: “cartesian” (default, uniform), “spherical” (lon-lat sector), “supergrid” (MOM6 mosaic NetCDF), “tripolar”. |
|
| real(kind=wp), | public | :: | lat_south | = | 0.0_wp |
South edge of the physical domain (degrees) — spherical only. |
|
| real(kind=wp), | public | :: | len_lat | = | 0.0_wp |
Total y-extent of the Cartesian domain in |
|
| real(kind=wp), | public | :: | len_lon | = | 0.0_wp |
Total x-extent of the Cartesian domain in |
|
| real(kind=wp), | public | :: | lon_pole | = | 100.0_wp |
Longitude (degrees) of the first tripolar cap pole; partner at
|
|
| real(kind=wp), | public | :: | lon_west | = | 0.0_wp |
West edge of the physical domain (degrees) — spherical only. |
|
| real(kind=wp), | public | :: | omega | = | 7.2921e-5_wp |
Planetary rotation rate (rad/s) — used by “planetary”. |
|
| real(kind=wp), | public | :: | phi_join | = | 65.0_wp |
Join latitude (degrees) for “tripolar”: lon-lat below, bipolar Arctic cap above. |
|
| real(kind=wp), | public | :: | rad_earth | = | 6.378e6_wp |
Earth radius for the spherical metric (m). |
|
| character(len=256), | public | :: | supergrid_file | = | "" |
Path to the MOM6 supergrid NetCDF — “supergrid” only. |
&ocean_hdiff_nml — along-coordinate tracer Laplacian
(rdb_ocean_hdiff_tracer). Diffusion along the MODEL
coordinate, not neutral surfaces (that is &ocean_redi_nml,
a separate already-reachable capability).
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | public | :: | kappa_h | = | 0.0_wp |
Constant horizontal tracer diffusivity (m^2/s). Zero
(default) is a no-op — the kernel short-circuits without
touching hTr, so this knob is bit-identical when unset.
Stability bound (explicit forward-Euler), checked at
configure using the coarsest |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | public | :: | ah_bg | = | -1.0_wp |
Background harmonic viscosity (m²/s) for the lateral closure. Negative (default) = derive from nu_h and kh_vel_scale. |
|
| real(kind=wp), | public | :: | ah_max | = | 1.0e4_wp |
Hard cap on the per-face harmonic viscosity (m²/s). |
|
| real(kind=wp), | public | :: | aniso_dir(2) | = | [1.0_wp, 0.0_wp] |
Anisotropy direction vector |
|
| integer, | public | :: | aniso_mode | = | 0 |
Anisotropy-direction mode. Only mode 0 (grid-relative
|
|
| real(kind=wp), | public | :: | bound_coef | = | 0.8_wp |
CFL safety coefficient for the per-cell viscosity limiters
(harmonic when |
|
| logical, | public | :: | bound_kh | = | .false. |
MOM6 |
|
| real(kind=wp), | public | :: | c_leith | = | 1.0_wp |
Dimensionless Leith coefficient. Typical range 1.0–2.0. |
|
| real(kind=wp), | public | :: | c_leith_bi | = | 0.0_wp |
Nondimensional biharmonic Leith constant. Drives
|
|
| real(kind=wp), | public | :: | c_smag | = | 0.15_wp |
Dimensionless Smagorinsky coefficient. Default 0.15 (range 0.1–0.2). |
|
| real(kind=wp), | public | :: | kh_aniso | = | 0.0_wp |
Anisotropic Laplacian viscosity magnitude (m²/s; Smith &
McWilliams 2003). When positive AND |
|
| real(kind=wp), | public | :: | kh_vel_scale | = | 0.0_wp |
Velocity scale (m/s) for the grid-resolution viscosity floor
|
|
| real(kind=wp), | public | :: | kh_vel_scale_live | = | 0.0_wp |
Live velocity-scale viscosity coefficient (m/s). When positive,
a state-dependent |
|
| character(len=16), | public | :: | lateral_closure | = | "none" |
Lateral-mixing closure tag. “none” (default) keeps the scalar
|
|
| logical, | public | :: | no_slip | = | .false. |
Lateral coast BC (static land mask). |
|
| real(kind=wp), | public | :: | nu_4 | = | 0.0_wp |
Constant biharmonic eddy viscosity for momentum (m⁴/s). Default 0. |
|
| real(kind=wp), | public | :: | nu_4_bg | = | 0.0_wp |
Background biharmonic viscosity floor (m⁴/s) for the flow-aware path. |
|
| real(kind=wp), | public | :: | nu_4_max | = | 1.0e12_wp |
Static hard cap on per-face biharmonic viscosity (m⁴/s). The
forward-Euler biharmonic-CFL bound is enforced automatically per
cell (scaled by |
|
| real(kind=wp), | public | :: | nu_h | = | 0.0_wp |
Constant horizontal eddy viscosity for momentum (m²/s). Default 0 = bit-identical; wind-driven runs need this set. |
|
| logical, | public | :: | resoln_scaled_visc | = | .false. |
Resolution-scaled Laplacian viscosity (Hallberg 2013). When
|
|
| logical, | public | :: | smag_ah | = | .false. |
Smagorinsky biharmonic. When |
|
| real(kind=wp), | public | :: | smag_bi_const | = | 0.06_wp |
Nondimensional biharmonic Smagorinsky constant. Typical 0.015–0.06. |
|
| logical, | public | :: | stress_tensor | = | .false. |
Horizontal-viscosity operator. |
Initial-condition overlay + EOS reference state. Drives the analytical configurations (eady-front, geostrophic- adjustment, …) plus the linear-EOS reference values that the rest of the ocean dyn step reads.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | public | :: | S_ref | = | 35.0_wp |
Linear-EOS reference salinity (PSU) — the S at which the haline anomaly term vanishes. |
|
| real(kind=wp), | public | :: | T_ref | = | 10.0_wp |
Linear-EOS reference temperature (°C) — the T at which the thermal anomaly term vanishes. |
|
| real(kind=wp), | public | :: | alpha_T | = | 1.7e-4_wp |
Linear-EOS thermal-expansion coefficient, DIMENSIONAL
(kg/m³ per °C) — see |
|
| real(kind=wp), | public | :: | beta_S | = | 7.6e-4_wp |
Linear-EOS haline contraction coefficient, DIMENSIONAL (kg/m³ per PSU). |
|
| real(kind=wp), | public | :: | eady_T_ref | = | 10.0_wp |
Reference temperature (°C) for the Eady IC at z=0, y=y_mid. |
|
| real(kind=wp), | public | :: | eady_dT_dy | = | -2.0e-5_wp |
Meridional gradient of T (°C/m) for the Eady IC. |
|
| real(kind=wp), | public | :: | eady_dT_dz | = | 0.01_wp |
Vertical stratification (°C/m) for the Eady IC. |
|
| real(kind=wp), | public | :: | eady_pert_amp | = | 1.0e-3_wp |
Amplitude (°C) of the random temperature perturbation seeded into the Eady IC to break symmetry. |
|
| integer, | public | :: | eady_pert_seed | = | 12345 |
RNG seed for the Eady IC perturbation. |
|
| real(kind=wp), | public | :: | ga_eta_amp | = | 1.0_wp |
Geostrophic-adjustment IC: amplitude (m) of the Gaussian SSH bump. |
|
| real(kind=wp), | public | :: | ga_length_scale | = | 50000.0_wp |
Geostrophic-adjustment IC: e-folding scale (m) of the Gaussian SSH bump. |
|
| real(kind=wp), | public | :: | ga_x_center | = | -1.0_wp |
x-coordinate (m) of the bump centre. Negative ⇒ auto (basin midpoint). |
|
| real(kind=wp), | public | :: | ga_y_center | = | -1.0_wp |
y-coordinate (m) of the bump centre. Negative ⇒ auto (basin midpoint). |
|
| character(len=32), | public | :: | ic_config | = | "" |
IC overlay tag. “” (default) keeps the analytical T(z) + zero-velocity IC. “eady” runs the Eady-front overlay; “geostrophic_adjustment” drops a Gaussian SSH bump on an f-plane; “baroclinic_jet” runs the two-layer reduced-gravity baroclinic-instability jet (SIM_DETAILS.md §5). |
|
| real(kind=wp), | public | :: | interface_amp | = | 200.0_wp |
Baroclinic-jet IC: interface displacement amplitude Δξ (m). Spec “tuned” default 200 m; faithful uses 100 m. |
|
| real(kind=wp), | public | :: | jet_half_width | = | 40000.0_wp |
Baroclinic-jet IC ( |
|
| real(kind=wp), | public | :: | layer_rho_init(MAX_OCEAN_LAYER_RHO_INIT) | = | -1.0_wp |
Per-layer initial density (kg/m³), |
|
| real(kind=wp), | public | :: | pert_amp_frac | = | 0.2_wp |
Baroclinic-jet IC: front-localised meander amplitude as a
fraction of Δξ ( |
|
| integer, | public | :: | pert_nx | = | 3 |
Baroclinic-jet IC: zonal perturbation wavenumber (integer number
of wavelengths across the periodic domain). Integer so the
analytic x-continuation wraps exactly ( |
|
| real(kind=wp), | public | :: | rho_0 | = | 1035.0_wp |
Reference density (kg/m³) for the linear EOS and Boussinesq
PGF — the density at |
|
| real(kind=wp), | public | :: | rho_lightest | = | -1.0_wp |
Linear density-range IC — MOM6 |
|
| real(kind=wp), | public | :: | rho_range | = | 2.0_wp |
Linear density-range IC: total top-to-bottom density contrast
(kg/m³), MOM6 |
|
| real(kind=wp), | public | :: | upper_layer_rest | = | 500.0_wp |
Baroclinic-jet IC: rest thickness of the upper (surface, k=2)
layer H₁ (m). The lower (bed, k=1) rest thickness is
|
&ocean_ice_nml: sea-ice model master switch + category/layer
counts (SIS2 port, PLAN_SEA_ICE.md). PR 0 scaffold — the knobs
size the gated ocean_sea_ice_t slot. PR 3c adds the v1 scalar
restoring atmospheric-forcing filler (air_temp/restore_lambda/
sw_down) that drives the column live in the driver. Default OFF
⇒ byte-identical.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | a_face_stress | = | .false. |
PR 62: weight the atmospheric stress AND the ice-ocean drag in
the EVP momentum balance by the face ice concentration
|
|
| integer, | public | :: | adv_substeps | = | 1 |
Advective sub-iterations per transport call (SIS2 |
|
| real(kind=wp), | public | :: | air_temp | = | 0.0_wp |
Prescribed slab-atmosphere air temperature (degC) for the v1
restoring atmospheric-forcing filler. |
|
| real(kind=wp), | public | :: | c0 | = | 20.0_wp |
SIS2 |
|
| real(kind=wp), | public | :: | cdw | = | 3.24e-3_wp |
SIS2 |
|
| real(kind=wp), | public | :: | cfl_trunc | = | 0.0_wp |
SIS2 |
|
| logical, | public | :: | cfl_trunc_dyn_its | = | .false. |
SIS2 |
|
| real(kind=wp), | public | :: | del_sh_min_scale | = | 2.0_wp |
SIS2 |
|
| logical, | public | :: | dynamics | = | .false. |
EVP rheology master switch ( |
|
| real(kind=wp), | public | :: | ec | = | 2.0_wp |
SIS2 |
|
| logical, | public | :: | enable | = | .false. |
Master switch. Off (default) ⇒ the sea-ice slot is never initialised, mapped, or stepped ⇒ byte-identical. |
|
| integer, | public | :: | evp_sub_steps | = | 432 |
SIS2 |
|
| real(kind=wp), | public | :: | hlim(MAX_ICE_HLIM_VALS) | = | -1.0_wp |
hardcoded SIS2 default table. |
|
| integer, | public | :: | ncat | = | 5 |
Number of ice thickness categories (category 0 = open water; SIS2 default 5). |
|
| integer, | public | :: | nk_ice | = | 2 |
Vertical ice layers per category (2 = Winton two-layer, v1). |
|
| real(kind=wp), | public | :: | p0 | = | 2.75e4_wp |
SIS2 |
|
| logical, | public | :: | project_ci | = | .false. |
SIS2 |
|
| real(kind=wp), | public | :: | restore_lambda | = | 0.0_wp |
Surface-flux restoring coefficient (W/m^2/K), i.e. dSF/dT of the linearized SEB. 0 (default) => a passive column (dsf_dt=0, sf_0=0): no thermostat, so no restoring drive. A production melt season uses ~20. NOTE: with restore_lambda=0 the seam fields are (0,0,sw_down) => the column feels only shortwave + basal flux. |
|
| real(kind=wp), | public | :: | rho_ocean | = | 1030.0_wp |
SIS2 |
|
| real(kind=wp), | public | :: | roll_factor | = | 1.0_wp |
SIS2 |
|
| logical, | public | :: | snow_ice | = | .false. |
Archimedes freeboard snow-ice conversion (SIS2
|
|
| real(kind=wp), | public | :: | snowfall | = | 0.0_wp |
Uniform frozen-precipitation rate onto the ice top (kg/m^2/s)
for the v1 restoring atmospheric-forcing filler (PR 26). Spread
onto the |
|
| real(kind=wp), | public | :: | sw_down | = | 0.0_wp |
Downwelling shortwave into the ice top (W/m^2) for the v1 filler. |
|
| real(kind=wp), | public | :: | tdamp | = | -0.2_wp |
SIS2 |
|
| logical, | public | :: | transport | = | .false. |
Enable horizontal category ice/snow transport
( |
&ocean_ice_ic_nml: sea-ice ANALYTIC initial-condition path (PR
24). Default conc_config="zero" early-returns before touching
a single ice array => byte-identical to today for every existing
nml/test. v1 ships "uniform" (scalar) and "latitudes" (SIS2
polar-cap analytic form) only — file-backed ICs are deliberately
NOT in the allowed list ("file" is v1.1, PR-14).
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | public | :: | antarctic_edge | = | -91.0_wp |
|
|
| real(kind=wp), | public | :: | arctic_edge | = | 91.0_wp |
|
|
| real(kind=wp), | public | :: | conc | = | 0.0_wp |
Uniform-mode concentration [0,1] (nondim). |
|
| character(len=32), | public | :: | conc_config | = | "zero" |
|
|
| real(kind=wp), | public | :: | h_ice | = | 0.0_wp |
Ice thickness (m) where seeded — SIS2 |
|
| real(kind=wp), | public | :: | h_snow | = | 0.0_wp |
Snow thickness (m) where seeded — SIS2 |
|
| real(kind=wp), | public | :: | s_ice | = | 4.0_wp |
Ice bulk salinity (PSU) — SIS2 |
|
| real(kind=wp), | public | :: | t_ice | = | -4.0_wp |
Ice/snow temperature (degC) fed through the exact
|
&ocean_isopycnal_nml: grounding-stability controls for the
Lagrangian (isopycnal-class, remap-free) vertical coordinate.
Every knob here engages ONLY under sim_type=’ocean’ +
VCOORD_LAGRANGIAN, so the whole group is bit-identical on every other
vertical coordinate. All are default-OFF except
pgf_skip_nonoverlap, which is a correctness fix and defaults ON.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | public | :: | angstrom_h | = | 0.0_wp |
Phase 1: minimum-thickness floor (m) on the Lagrangian continuity h-update — MOM6 GV%Angstrom_H analogue used as the max(h_new, Angstrom_H) clamp. 0.0 ⇒ off ⇒ bit-identical (the floor loop is skipped). Physical floor (D4 taxonomy), NOT H_DIV_EPS (too small to bound 1/h) and NOT hardwired H_VANISHED (that is the skip/merge marker). Recommended run value 1e-3..1e-2 m. NOT strictly conservative: injects <= angstrom_h*areaT per floored layer-cell (zero on non-grounding steps). Thermo-on caveat (R7): the floor lifts h but not the companion hTr, so on a floored layer the implied Tr=hTr/h shifts — harmless for the adiabatic (enable_thermodynamics=.false.) isopycnal config; thermo-on isopycnal correctness is OUT OF SCOPE for v1. |
|
| logical, | public | :: | cfl_ignore_vanished | = | .false. |
Phase 3: exclude vanished layers from the console MaxCFL / panic / CFL truncation so a thin-layer velocity spike cannot falsely abort. |
|
| logical, | public | :: | check_h_positive | = | .false. |
DEBUG GUARD (vcoord-agnostic despite living in this group): abort on
the FIRST negative |
|
| logical, | public | :: | conservative_floor | = | .false. |
Conservative minimum-thickness mode. When |
|
| logical, | public | :: | pgf_skip_nonoverlap | = | .true. |
Grounded-layer PGF gate. Default ON — unlike every other knob in this group this one is a CORRECTNESS fix, not an opt-in, and it is still bit-identical everywhere except VCOORD_LAGRANGIAN (the only coordinate it is applied under). |
|
| logical, | public | :: | reset_vanished_u | = | .false. |
Phase 2: zero the face velocity of a layer vanished on BOTH adjacent cells (a massless layer carries no independent momentum). |
&ocean_kappa_shear_nml: shear-driven interior turbulence (Jackson,
Hallberg & Legg 2008). Coexists with KPP/EPBL/PP81 — kappa is ADDED
to the interior diffusivities. Default off ⇒ bit-identical.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | at_vertex | = | .false. |
Solve the JHL08 columns at C-grid CORNERS (vorticity points)
from the native face velocities, then average the corner Kd
back to tracer points (MOM6 VERTEX_SHEAR — the OM5-class
production setting). Default off ⇒ bit-identical. v1 scope
is Kd only: Kv stays |
|
| real(kind=wp), | public | :: | c_n | = | 0.24_wp |
TKE decay-rate coefficient vs stratification N (JHL08). |
|
| real(kind=wp), | public | :: | c_s | = | 0.14_wp |
TKE decay-rate coefficient vs shear S (JHL08). |
|
| logical, | public | :: | enable | = | .false. |
Master switch. Requires |
|
| real(kind=wp), | public | :: | fri_curvature | = | -0.97_wp |
Ri-function curvature in the shear source (JHL08). |
|
| real(kind=wp), | public | :: | kappa_0 | = | 1.0e-7_wp |
Background diffusivity, m^2/s; also the pre-step kappa (JHL08). |
|
| real(kind=wp), | public | :: | kappa_seed | = | 1.0_wp |
Iteration seed diffusivity, m^2/s (JHL08). |
|
| real(kind=wp), | public | :: | kappa_trunc | = | 1.0e-9_wp |
Diffusivity below this is truncated to 0, m^2/s (JHL08). |
|
| real(kind=wp), | public | :: | lambda | = | 0.82_wp |
Buoyancy mixing-length-scale coefficient (JHL08). |
|
| real(kind=wp), | public | :: | lz_rescale | = | 1.0_wp |
Boundary-distance length-scale rescale factor (JHL08). |
|
| logical, | public | :: | massless_merge | = | .false. |
sub-grid before the column solve (vs the blunt gather floor). Default off (bit-identical); identity columns bypass the merge. |
|
| integer, | public | :: | max_inner_it | = | 50 |
Inner Picard iteration cap (JHL08). |
|
| integer, | public | :: | max_substep_it | = | 13 |
Outer adaptive-substep iteration cap (JHL08). |
|
| real(kind=wp), | public | :: | prandtl_turb | = | 1.0_wp |
Kv = prandtl_turb * Kd into the momentum solve (JHL08). |
|
| real(kind=wp), | public | :: | ri_crit | = | 0.25_wp |
Critical Richardson number (JHL08 Ri_c). |
|
| real(kind=wp), | public | :: | shearmix_rate | = | 0.089_wp |
Shear-source-rate coefficient (JHL08). |
|
| real(kind=wp), | public | :: | src_max_chg | = | 10.0_wp |
Adaptive-dt source-change tolerance band (JHL08). |
|
| real(kind=wp), | public | :: | tke_bg | = | 0.0_wp |
Background TKE, m^2/s^2; Q is a denominator, floored (JHL08). |
|
| real(kind=wp), | public | :: | tol_err | = | 0.1_wp |
Picard convergence tolerance (JHL08). |
|
| real(kind=wp), | public | :: | vel_underflow | = | 0.0_wp |
Velocity snap-to-zero magnitude, m/s, in the projection (JHL08). |
|
| real(kind=wp), | public | :: | vertex_geomean_kdmin | = | 0.0_wp |
Floor, m^2/s, applied to each corner Kd BEFORE the geometric
mean (MOM6 VERTEX_SHEAR_GEOMETRIC_MEAN_KDMIN; inert unless
|
|
| logical, | public | :: | vertex_geometric_mean | = | .false. |
Geometric (vs arithmetic) mean in the corner->centre Kd
average (MOM6 VERTEX_SHEAR_GEOMETRIC_MEAN). Pair with
|
&ocean_meke_nml: mesoscale eddy kinetic energy — a 2D prognostic
eddy-energy field fed back as a thickness/tracer diffusivity into
VarMix’s KhTh/KhTr. Reads gm%gm_src. Default off ⇒ no-op.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | public | :: | advection_factor | = | 0.0_wp |
Barotropic-transport advection scaling (nondim); 0 ⇒ off (v1). |
|
| real(kind=wp), | public | :: | alpha_deform | = | 0.0_wp |
Weight on the deformation length scale (nondim). |
|
| real(kind=wp), | public | :: | alpha_eady | = | 0.0_wp |
Weight on the Eady length scale (needs VarMix SN) (nondim). |
|
| real(kind=wp), | public | :: | alpha_frict | = | 0.0_wp |
Weight on the frictional-arrest length scale (nondim). |
|
| real(kind=wp), | public | :: | alpha_grid | = | 0.0_wp |
Weight on the grid length scale (nondim). |
|
| real(kind=wp), | public | :: | alpha_rhines | = | 0.0_wp |
Weight on the Rhines length scale (nondim); v1 default 0 ⇒ inert. |
|
| logical, | public | :: | backscatter | = | .false. |
Enable the MEKE → momentum harmonic backscatter (negative
viscosity) energy return (Gap 2, v1). Default off ⇒ bit-identical.
Requires a flow-aware lateral closure ( |
|
| real(kind=wp), | public | :: | backscatter_visc_coeff_ku | = | 0.0_wp |
MOM6 |
|
| real(kind=wp), | public | :: | bgsrc | = | 0.0_wp |
Background energy source (m^2/s^3). |
|
| real(kind=wp), | public | :: | cb | = | 25.0_wp |
Coefficient in the gamma_bot (bottomFac2) expression (nondim). |
|
| real(kind=wp), | public | :: | cd_scale | = | 0.0_wp |
Bottom/column eddy-velocity ratio (nondim); enters bottomFac2. |
|
| real(kind=wp), | public | :: | cdrag | = | 2.5e-3_wp |
Bottom drag coefficient for MEKE (nondim); enters drag_rate +
Lfrict. Set from |
|
| real(kind=wp), | public | :: | ct | = | 50.0_wp |
Coefficient in the gamma_bt (barotrFac2) expression (nondim). |
|
| real(kind=wp), | public | :: | damping | = | 0.0_wp |
Local depth-independent linear MEKE dissipation rate (1/s). |
|
| real(kind=wp), | public | :: | dtscale | = | 1.0_wp |
Scale factor accelerating MEKE time-stepping (nondim). |
|
| logical, | public | :: | enable | = | .false. |
Master switch. Default off. Requires |
|
| real(kind=wp), | public | :: | frcoeff | = | -1.0_wp |
Frictional mean->eddy conversion efficiency (nondim); < 0 ⇒ off (default). When >= 0 the lateral-viscosity KE dissipation rate is sourced into MEKE. |
|
| real(kind=wp), | public | :: | gmcoeff | = | -1.0_wp |
Efficiency of PE->MEKE conversion (nondim); < 0 ⇒ GM source off. |
|
| real(kind=wp), | public | :: | k4 | = | -1.0_wp |
Background biharmonic diffusion of MEKE (m^4/s); < 0 ⇒ off. |
|
| real(kind=wp), | public | :: | kh | = | -1.0_wp |
Background lateral diffusion of MEKE (m^2/s); < 0 ⇒ off. |
|
| real(kind=wp), | public | :: | khcoeff | = | 1.0_wp |
Scaling converting MEKE into Kh (nondim); <= 0 ⇒ closure off. |
|
| real(kind=wp), | public | :: | khmeke_fac | = | 0.0_wp |
Factor relating meke%kh to MEKE’s own lateral diffusivity (nondim). |
|
| real(kind=wp), | public | :: | khth_fac | = | 0.0_wp |
Factor on the geom-mean kh added into VarMix KhTh (nondim). 0 (default) ⇒ feedback inert ⇒ bit-identical seam. |
|
| real(kind=wp), | public | :: | khtr_fac | = | 0.0_wp |
Factor on the geom-mean kh added into VarMix KhTr (nondim). |
|
| real(kind=wp), | public | :: | min_gamma2 | = | 1.0e-4_wp |
Floor on gamma_b^2 / gamma_t^2 (nondim). |
|
| real(kind=wp), | public | :: | uscale | = | 0.0_wp |
Background eddy velocity scale for bottom drag (m/s). |
|
| logical, | public | :: | use_bbl_drag | = | .false. |
Add the resolved bottom-boundary-layer eddy velocity to the MEKE
bottom-drag rate: |
&ocean_mpi_nml: multi-rank MPI debug and tuning controls.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | poison_ghosts | = | .false. |
Debug knob — sentinel-NaN the exchange-covered ghost bands at
each outer-step start; any unexchanged-ghost consumption becomes
a loud NaN. Default |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | public | :: | cfl_trunc | = | 0.0_wp |
Advective-CFL velocity truncation threshold (nondimensional).
When > 0, faces with |
|
| character(len=16), | public | :: | form | = | "mont" |
Pressure-gradient kernel variant. “mont” (default) is the
Boussinesq Montgomery-potential form — general purpose (valid over
sloping bathymetry and every vcoord), algebraically identical to
“fv_lite” on columns of equal layer thickness, and exact at rest in
isopycnal columns; it is also the cheapest, since it builds no
pressure stack. “fv_lite” and “fv_wright” are the FV sigma-aware
kernels. “fv_lite” carries the SAME physics content as “mont”
(layer-mean rho, no in-layer quadrature) and differs from it only
where layer thicknesses are UNEQUAL across a face — there the two
are different discretisations of the same term, neither exact.
“gprime” is the reduced-gravity layered PGF (NK = 2 only).
“fv_mom6” is the faithful FV-Bouss port (used by |
|
| real(kind=wp), | public | :: | gfs_scale | = | 1.0_wp |
Free-surface gravity scaling for the FV_MOM6 PGF. Default 1.0
= no reduction. When < 1, applies a Montgomery |
|
| real(kind=wp), | public | :: | gprime_gfs | = | 9.81_wp |
Free-surface gravity (m/s²) for the gprime PGF. |
|
| real(kind=wp), | public | :: | gprime_gint | = | 0.0098_wp |
Internal-interface reduced gravity (m/s²) for the gprime PGF. |
|
| logical, | public | :: | insitu_density | = | .true. |
FV_MOM6 constant-by-layer (PCM) density at its IN-SITU pressure
|
|
| logical, | public | :: | mass_weight | = | .false. |
FV_MOM6 shelf-break mass-weighting. When |
|
| real(kind=wp), | public | :: | maxvel | = | 0.0_wp |
Velocity-truncation clamp (m/s): |
|
| logical, | public | :: | p_top_in_bc | = | .false. |
Add the top-of-column load |
|
| integer, | public | :: | recon_scheme | = | 1 |
In-layer reconstruction scheme: 1 = PLM, 2 = PPM. Mirrors
MOM6 |
|
| logical, | public | :: | reconstruct_for_pressure | = | .false. |
FV_MOM6 in-layer T/S reconstruction (Adcroft, Hallberg &
Harrison 2008; White, Adcroft & Hallberg 2009). |
Porous barriers (&ocean_porous_nml): subgrid sill/strait
blocking of the C-grid face widths via the Adcroft (2013)
three-parameter fit. The layer-averaged OPEN-AREA fraction
multiplies dy_cu / dx_cv in the layer mass transport
(continuity-PPM + Coriolis advection), so a deep sill blocks the
bottom layers while the surface layers stay fully open.
enable = .false. keeps the existing path bit-identical.
Knob table: docs/generated_nml_knobs.md.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | enable | = | .false. |
Master switch. Requires |
|
| character(len=32), | public | :: | eta_interp | = | "max" |
Interface-height-at-velocity-point rule (MOM6
|
|
| real(kind=wp), | public | :: | masking_depth | = | 0.0_wp |
Faces whose mean along-face depth is SHALLOWER than this
(m, positive below the sea surface) are left fully open
(MOM6 |
|
| character(len=32), | public | :: | source | = | "resolved" |
Where the along-face min/max/mean topographic heights come
from. |
Atmospheric surface-pressure loading / inverse barometer
(&ocean_psurf_nml, PR-17). Folds eta_ib = -p_surf/(rho0 g)
into the barotropic eta_forcing seam so an atmospheric high
depresses SSH (~1 cm/hPa; Wunsch & Stammer 1997). enable =
.false. keeps the existing path bit-identical. Split-solver only
and mutually exclusive with &ocean_bt_nml bt_halo > 0. Requires
&ocean_forcing_nml enable_components=.true. (the p_surf field
is allocated only with the component set). ρ₀ is NOT a knob here —
it is taken from ocean_state%eos%rho0 (the single ρ₀ of record).
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | enable | = | .false. |
Master switch (default off => bit-identical). |
|
| logical, | public | :: | in_eos | = | .false. |
Include the surface load in the EOS’s IN-SITU pressure
arguments, as the top-of-column pressure |
|
| real(kind=wp), | public | :: | p_surf_const | = | 0.0_wp |
Uniform atmospheric surface pressure (Pa) seeded into
|
&ocean_restore_nml: surface buoyancy restoring of top-layer T/S
toward scalar targets via a piston velocity. Default OFF = bit-identical.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | enable_restore_salt | = | .false. |
Master switch for SSS restoring ( |
|
| logical, | public | :: | enable_restore_temp | = | .false. |
Master switch for SST restoring (effective when |
|
| real(kind=wp), | public | :: | piston_s | = | 0.0_wp |
SSS piston velocity (m/day). |
|
| real(kind=wp), | public | :: | piston_t | = | 0.0_wp |
SST piston velocity (m/day). |
|
| real(kind=wp), | public | :: | restore_sss | = | 0.0_wp |
Scalar target SSS (PSU). |
|
| real(kind=wp), | public | :: | restore_sst | = | 0.0_wp |
Scalar target SST (degC). |
&ocean_sponge_nml: the map-driven sponge (PR-23). Default OFF
(enable = .false.) ⇒ the legacy &ocean_bc_nml band kernels run
unchanged ⇒ bit-identical. See rdb_ocean_sponge.F90’s module
docstring for the physics; docs/plans/PLAN_PR23_real_sponge.md
for the design record.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| character(len=16), | public | :: | damp_source | = | "band" |
How |
|
| real(kind=wp), | public | :: | east_strength | = | -1.0_wp | ||
| integer, | public | :: | east_width | = | -1 | ||
| logical, | public | :: | enable | = | .false. |
Master switch. Off ⇒ legacy band kernels ⇒ byte-identical. |
|
| real(kind=wp), | public | :: | lin_ds_dz | = | 0.0_wp |
|
|
| real(kind=wp), | public | :: | lin_dt_dz | = | 0.0_wp |
|
|
| real(kind=wp), | public | :: | lin_s_ref | = | 35.0_wp |
|
|
| real(kind=wp), | public | :: | lin_t_ref | = | 0.0_wp |
|
|
| real(kind=wp), | public | :: | north_strength | = | -1.0_wp | ||
| integer, | public | :: | north_width | = | -1 | ||
| character(len=16), | public | :: | ramp | = | "cosine" |
Shape of the |
|
| logical, | public | :: | relax_h | = | .false. |
Interior-interface thickness damping. NOT IMPLEMENTED in PR-23
v1 — |
|
| logical, | public | :: | relax_tracers | = | .true. |
Relax every registered tracer toward its 3-D reference field. |
|
| logical, | public | :: | relax_uv | = | .true. |
Relax |
|
| real(kind=wp), | public | :: | south_strength | = | -1.0_wp | ||
| integer, | public | :: | south_width | = | -1 | ||
| character(len=16), | public | :: | target_source | = | "ic" |
Reference-state source. |
|
| real(kind=wp), | public | :: | west_strength | = | -1.0_wp |
Per-edge peak relaxation-rate override (1/s). |
|
| integer, | public | :: | west_width | = | -1 |
Per-edge sponge-band width override (cells). |
&ocean_tdrag_nml — ICE-SHELF TOP drag, the mirror of
&ocean_bdrag_nml at k = nz. Requires
&ocean_cavity_dyn_nml enable (without a draft there is no ice
base and cover_frac is identically zero, so the kernel would
be a no-op with a cost). Default enable = .false. ⇒ the slot
is a placeholder, no kernel runs, every path is bit-identical.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | public | :: | bg_vel | = | 0.0_wp |
Background velocity floor (m/s) in the quadratic speed. Zero (default) ⇒ the layer-only quadratic branch is the exact algebraic mirror of the bottom drag’s. |
|
| real(kind=wp), | public | :: | cd | = | 0.0_wp |
Quadratic drag coefficient (dimensionless). ISOMIP+ value
2.5e-3 (Asay-Davis et al. 2016 Table 4). Zero disables the
quadratic branch. When |
|
| logical, | public | :: | enable | = | .false. |
Master switch. Requires |
|
| character(len=16), | public | :: | form | = | "quadratic" |
Top-drag variant: “quadratic” (default, |
|
| real(kind=wp), | public | :: | htbl | = | 0.0_wp |
Top-boundary-layer thickness (m) the stress is distributed
over (the mirror of |
|
| logical, | public | :: | implicit | = | .false. |
Backward-Euler top drag inside the drag kernel:
|
|
| real(kind=wp), | public | :: | r | = | 0.0_wp |
Linear Rayleigh coefficient (1/s). Active when
|
|
| real(kind=wp), | public | :: | tbl_thick_min | = | 0.0_wp |
Minimum effective TBL thickness (m) in the |
Thermodynamics master switches + scalar surface fluxes.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | enable_thermodynamics | = | .true. |
When |
|
| logical, | public | :: | epbl_sw_ctke | = | .true. |
(PR-21) Charge the EPBL TKE ledger for penetrating shortwave
(the in-layer PE-cost |
|
| character(len=32), | public | :: | kpp_sw_method | = | "mxl_sw" |
(PR-21) KPP boundary-layer shortwave method (MOM6
|
|
| real(kind=wp), | public | :: | q_heat | = | 0.0_wp |
Scalar net surface heat flux (W/m^2, positive down). |
|
| real(kind=wp), | public | :: | q_salt | = | 0.0_wp |
Scalar net surface salt flux (kg salt/m^2/s, positive = surface salinifies). |
|
| real(kind=wp), | public | :: | sw_band_ratio | = | 0.58_wp |
Band-1 weight |
|
| real(kind=wp), | public | :: | sw_pen_frac | = | 0.0_wp |
Penetrating fraction of |
|
| character(len=32), | public | :: | sw_source | = | "net_heat" |
(PR-21) Irradiance source for shortwave penetration + the
boundary-layer SW coupling. |
|
| real(kind=wp), | public | :: | sw_zeta1 | = | 0.35_wp |
Band-1 (red/near-IR) e-folding depth (m). |
|
| real(kind=wp), | public | :: | sw_zeta2 | = | 23.0_wp |
Band-2 (blue/green) e-folding depth (m). |
St-Laurent/Simmons internal-tide interior mixing
(&ocean_tidal_mixing_nml). Bottom-intensified diapycnal
diffusivity from the local dissipation of internal-tide energy
over rough topography (Jayne & St Laurent 2001; St Laurent et
al. 2002; Simmons et al. 2004). An INTERIOR closure: its Kd is
ADDED to the surface PBL schemes (KPP or EPBL) and to
PP81/background/kappa-shear. enable = .false. keeps the
existing path bit-identical. Knob table:
docs/generated_nml_knobs.md.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | e_compute | = | .false. |
v1.1 state-dependent E = min(TKE_coef*N_bot, e_max). |
|
| real(kind=wp), | public | :: | e_max | = | 1.0e3_wp |
TKE_itide_max cap on E, W m-2. |
|
| real(kind=wp), | public | :: | e_uniform | = | 0.0_wp |
Uniform bottom energy input E, W m-2 (v1 prescribed field; default 0 => inert even when enabled). |
|
| logical, | public | :: | enable | = | .false. |
Master switch. Requires |
|
| real(kind=wp), | public | :: | frac_rough | = | 0.1_wp |
Roughness clamp |
|
| real(kind=wp), | public | :: | gamma | = | 0.3333_wp |
Local-dissipation fraction q (GAMMA_ITIDES). |
|
| real(kind=wp), | public | :: | h2_rough | = | 0.0_wp |
Sub-grid topographic roughness variance |
|
| real(kind=wp), | public | :: | kappa_h2 | = | 1.0_wp |
KAPPA_H2_FACTOR (v1.1 E recompute). |
|
| real(kind=wp), | public | :: | kappa_itides | = | 6.2832e-4_wp |
Topographic wavenumber, m^-1 (v1.1 E recompute). |
|
| real(kind=wp), | public | :: | kd_max | = | 1.0e-2_wp |
Per-layer physical Kd cap, m^2/s; < 0 => no cap. |
|
| real(kind=wp), | public | :: | min_zbot | = | 0.0_wp |
Mask off where column depth H < min_zbot, m. |
|
| real(kind=wp), | public | :: | mu | = | 0.2_wp |
Mixing efficiency Gamma_mix (MU_ITIDES). |
|
| real(kind=wp), | public | :: | prandtl_tidal | = | 1.0_wp |
Kv = prandtl_tidal * Kd into the momentum solve. |
|
| real(kind=wp), | public | :: | utide | = | 0.0_wp |
RMS barotropic tidal velocity, m/s (v1.1 E recompute). |
|
| real(kind=wp), | public | :: | zeta | = | 500.0_wp |
Bottom decay scale, m (INT_TIDE_DECAY_SCALE). |
Equilibrium (astronomical) body-force tide (&ocean_tides_nml,
capability C1). Drives -g grad(eta - eta_eq) in the barotropic
momentum solve from a set of harmonic constituents. enable =
.false. keeps the existing path bit-identical. Requires a
non-cartesian grid (needs lat/lon).
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | add_nodal | = | .false. |
Apply the 18.6-yr nodal f/u corrections (fixed at nodal_ref_date). |
|
| real(kind=wp), | public | :: | beta_sal | = | 0.0_wp |
Scalar SAL factor beta (~0.085-0.12); |
|
| character(len=64), | public | :: | constituents | = | "M2 S2 N2 K2 K1 O1 P1 Q1" |
Whitespace/comma-separated active constituent list. |
|
| logical, | public | :: | enable | = | .false. |
Master switch (default off => bit-identical). |
|
| character(len=16), | public | :: | nodal_ref_date | = | "" |
Nodal reference date; “” => ref_date. |
|
| character(len=16), | public | :: | ref_date | = | "1900-01-01" |
Astronomical reference date “YYYY-MM-DD”; model t=0 == ref_date. |
|
| logical, | public | :: | use_sal | = | .false. |
Apply scalar self-attraction & loading (C2). Default off => bit-identical. |
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 |
Prognostic-tracer registry switches.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | enable_ideal_age | = | .false. |
When |
|
| logical, | public | :: | enable_pseudo_salt | = | .false. |
When |
|
| real(kind=wp), | public | :: | ideal_age_sfc_growth_rate | = | 0.0_wp |
Exponential growth rate of the surface value (1/s). 0 (default) ⇒ young_val is constant ⇒ no exp() ⇒ bit-identical. MOM6 CS%growth_rate (which is per-year; 1/30 yr^-1 = 1.057e-9 s^-1). |
|
| real(kind=wp), | public | :: | ideal_age_young_val | = | 0.0_wp |
Surface-band age value (s). Default 0 = today’s hard-coded reset ⇒ bit-identical. MOM6 CS%young_val. |
&ocean_varmix_nml: spatially-varying GM/Redi lateral-diffusivity
coefficients = (background + Visbeck) × resolution_fn, clamped.
Reads the slopes + wavespeed slots. Default off ⇒ GM keeps constant khth.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | enable | = | .false. |
Master switch. Default off. Requires |
|
| logical, | public | :: | gill_equatorial_ld | = | .true. |
Gill (1982) equatorial-Ld convention (factor 2 in beta_dx2). |
|
| logical, | public | :: | interpolate_res_fn | = | .false. |
Interpolate the centre Res_fn to faces ( |
|
| integer, | public | :: | kh_res_fn_power | = | 2 |
Resolution-function power p (even). |
|
| real(kind=wp), | public | :: | kh_res_scale_coef | = | 1.0_wp |
Resolution-function alpha (the |
|
| real(kind=wp), | public | :: | khth | = | 0.0_wp |
Background thickness diffusivity KhTh (m²/s) the Visbeck term + Res_fn scale. |
|
| real(kind=wp), | public | :: | khth_max | = | 0.0_wp |
Upper clamp on KhTh (m²/s); ≤ 0 ⇒ no cap. |
|
| real(kind=wp), | public | :: | khth_min | = | 0.0_wp |
Lower clamp on the assembled KhTh (m²/s). |
|
| real(kind=wp), | public | :: | khth_slope_cff | = | 0.0_wp |
Visbeck coefficient α_s for the KhTh chain. |
|
| real(kind=wp), | public | :: | khtr | = | 0.0_wp |
Background tracer diffusivity KhTr (m²/s) for the future Redi. |
|
| real(kind=wp), | public | :: | khtr_max | = | 0.0_wp |
Upper clamp on KhTr (m²/s); ≤ 0 ⇒ no cap. |
|
| real(kind=wp), | public | :: | khtr_min | = | 0.0_wp |
Lower clamp on KhTr (m²/s). |
|
| real(kind=wp), | public | :: | khtr_slope_cff | = | 0.0_wp |
Visbeck coefficient for the KhTr chain. |
|
| logical, | public | :: | resoln_scaled_khth | = | .false. |
Scale the assembled KhTh by the resolution function. |
|
| logical, | public | :: | resoln_scaled_khtr | = | .false. |
Scale the assembled KhTr by the resolution function. |
|
| logical, | public | :: | use_visbeck | = | .false. |
Add the Visbeck/Eady |
|
| real(kind=wp), | public | :: | visbeck_l_scale | = | 0.0_wp |
Visbeck length scale L (m); if < 0, |L|²·areaCu is used. |
|
| real(kind=wp), | public | :: | visbeck_max_slope | = | 0.0_wp |
S² limiter scale; ≤ 0 ⇒ no S² limit. |
Backward-Euler vertical-friction solver knobs (&ocean_vdiff_nml).
The implicit folds default .false. (explicit wind-stress apply);
MOM6’s face treatment (hvel_mom6 + bbl_glue) defaults ON.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | accel_visc_rem | = | .false. |
RETIRED (PR-3, 2026-10): setting |
|
| logical, | public | :: | bbl_glue | = | .true. |
DEFAULT ON (2026-10; |
|
| real(kind=wp), | public | :: | bbl_piston | = | 3.0e-4_wp |
Historical constant BBL piston velocity (m/s), |
|
| real(kind=wp), | public | :: | hbbl_visc | = | 10.0_wp |
MOM6 |
|
| logical, | public | :: | hvel_harmonic | = | .false. |
Which MOM6 face-thickness branch |
|
| logical, | public | :: | hvel_mom6 | = | .true. |
MOM6 momentum face thickness |
|
| logical, | public | :: | hvel_upwind | = | .true. |
Near-bed upwind (arithmetic-donor) blend in the |
|
| logical, | public | :: | implicit_drag | = | .false. |
Fold the bottom drag into the vdiff bed-row diagonal (stress
bottom-BC; the row is the face’s first LIVE layer |
|
| logical, | public | :: | implicit_stress | = | .false. |
Fold the surface wind stress into the vdiff surface (k=nz) RHS row (Neumann top-BC) instead of the explicit pre-solve add. |
|
| logical, | public | :: | implicit_top_drag | = | .false. |
Fold the ICE-SHELF TOP drag into the vdiff |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | public | :: | bkgnd_delta | = | 222.0_wp |
Bryan-Lewis transition half-width (m). |
|
| logical, | public | :: | bkgnd_henyey | = | .false. |
Henyey, Wright & Flatte (1986) JGR 91:8487 latitude-dependent
internal-wave factor (constant- |
|
| real(kind=wp), | public | :: | bkgnd_henyey_max_lat | = | 95.0_wp |
Latitude (degN) poleward of which the Henyey factor is reset to its minimum floor; compared against |latitude| so both hemispheres clamp. > 90 so inert for any real latitude out of the box. |
|
| real(kind=wp), | public | :: | bkgnd_henyey_n0_2omega | = | 20.0_wp |
Ratio of the assumed reference buoyancy frequency N0 to twice the planetary rotation rate (nondim). |
|
| real(kind=wp), | public | :: | bkgnd_kd_deep | = | 1.3e-4_wp |
Deep-asymptote background tracer diffusivity (m^2/s). |
|
| real(kind=wp), | public | :: | bkgnd_kd_min | = | -1.0_wp |
Minimum background tracer diffusivity (m^2/s) under the Henyey
scaling — |
|
| real(kind=wp), | public | :: | bkgnd_kd_sfc | = | 1.0e-5_wp |
Surface-asymptote background tracer diffusivity (m^2/s). |
|
| real(kind=wp), | public | :: | bkgnd_prandtl | = | 1.0_wp |
Background Prandtl number: Kv_bg = bkgnd_prandtl * Kd_bg. |
|
| logical, | public | :: | bkgnd_profile | = | .false. |
Enable the Bryan & Lewis (1979) depth-varying background diffusivity instead of the constant interior background. Default off (bit-identical). |
|
| real(kind=wp), | public | :: | bkgnd_z0 | = | 2500.0_wp |
Bryan-Lewis transition-centre depth (m, positive down). |
|
| character(len=8), | public | :: | buoyancy_coeffs | = | "constant" |
Where the vmix closures take their α (thermal expansion) and
β (haline contraction) from — |
|
| logical, | public | :: | direct_stress | = | .false. |
When |
|
| integer, | public | :: | dt_therm_ratio | = | 1 |
Thermodynamic + tracer-advection step runs at |
|
| integer, | public | :: | dt_tracer_advect_ratio | = | 1 |
Horizontal tracer advection runs every |
|
| logical, | public | :: | harmonic_visc | = | .false. |
When |
|
| real(kind=wp), | public | :: | hmix_fixed | = | 20.0_wp |
Mixed-layer thickness (m) for the |
|
| real(kind=wp), | public | :: | hmix_stress | = | 20.0_wp |
Thickness (m) of the surface slab for |
|
| real(kind=wp), | public | :: | kd_max | = | huge(1.0_wp) |
Ceiling on tracer diffusivity kt/ks (m^2/s). Default |
|
| integer, | public | :: | kd_smooth_iterations | = | 0 |
1-2-1 horizontal smoothing passes on kv/kt at interfaces. Default 0 = off. |
|
| real(kind=wp), | public | :: | kpp_c_vt2 | = | 1.8_wp |
KPP unresolved-turbulence coefficient for the V_t^2 term in the bulk-Ri denominator (LMD94 eq 23). 0 disables V_t^2. |
|
| real(kind=wp), | public | :: | kpp_cs_nonlocal | = | 6.3_wp |
KPP non-local (counter-gradient) transport coefficient C_s (LMD94 eq 20, limit value). |
|
| real(kind=wp), | public | :: | kpp_ri_crit | = | 0.3_wp |
Critical bulk Richardson number for the KPP BL-depth sweep (LMD94 §3; MOM6 KPP_BULK_RI default 0.3). |
|
| real(kind=wp), | public | :: | kv_max | = | huge(1.0_wp) |
Ceiling on momentum viscosity kv (m^2/s). Default |
|
| real(kind=wp), | public | :: | kv_ml_invz2 | = | 0.0_wp |
Extra near-surface vertical viscosity (m²/s) with a |
|
| real(kind=wp), | public | :: | pp81_alpha | = | 5.0_wp |
PP81 Richardson-number scaling coefficient (paper value 5; implementations vary 4-10). |
|
| real(kind=wp), | public | :: | pp81_kappa_bg | = | 1.0e-5_wp |
PP81 background diffusivity (m^2/s). Also seeds
|
|
| real(kind=wp), | public | :: | pp81_nu0 | = | 1.0e-2_wp |
PP81 Richardson-dependent viscosity scale (m^2/s). |
|
| real(kind=wp), | public | :: | pp81_nu_bg | = | 1.0e-4_wp |
PP81 background viscosity (m^2/s). Also seeds |
|
| real(kind=wp), | public | :: | shear2_floor | = | 1.0e-10_wp |
Floor on |du/dz|^2 + |dv/dz|^2 in the PP81 Ri denominator (1/s^2). |
|
| character(len=8), | public | :: | tracer_recon | = | "ppm" |
Face-reconstruction scheme for the WINDOWED horizontal
tracer-advection drain ( |
|
| logical, | public | :: | use_closure | = | .true. |
Master switch for the vmix (vertical-mixing) module. When
|
|
| logical, | public | :: | use_kpp | = | .true. |
KPP surface-boundary-layer overlay. Requires |
|
| logical, | public | :: | vmix_guard | = | .false. |
Debug-gated negative/NaN diffusivity guard. Default off. |
&ocean_wavespeed_nml: first-baroclinic wave speed + deformation
radius. Diagnostic, default off — feeds GM/Redi/MEKE resolution scaling.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | enable | = | .false. |
Master switch. Default off — bit-identity preserved. |
|
| real(kind=wp), | public | :: | mono_n2 | = | -1.0_wp |
DEFERRED: N^2-monotonising depth. |
|
| integer, | public | :: | n_wavespeed | = | 1 |
Recompute cadence (every N steps); slow diagnostic. |
|
| logical, | public | :: | use_ebt | = | .false. |
DEFERRED: equivalent-barotropic / pressure-Neumann variant. |
&ocean_wetdry_nml: dynamic wetting/drying for the split-explicit
barotropic substep (docs/ocean_wetdry_plan.md). Default off ⇒
byte-identical everywhere (the wd_* workspaces stay unallocated and
the substep runs its unmodified centred-face path).
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | public | :: | dry_depth | = | 0.05_wp |
Total-depth dry threshold (m): a column with |
|
| logical, | public | :: | enable | = | .false. |
Master switch. When |
|
| real(kind=wp), | public | :: | land_margin | = | 5.0_wp |
Static-land headroom (m) above rest MSL, used ONLY when enable=.true.
A column is STATIC LAND (metrics zeroed at configure) iff its bed is
above the highest credible water level: |
|
| real(kind=wp), | public | :: | rewet_depth | = | 0.10_wp |
Hysteresis re-wet threshold (m): a dry column re-wets only when
|
Z-level T/S initial-condition overlay (&ocean_zinit_nml,
capability A2). Reads pre-regridded T/S from a model-grid
NetCDF and interpolates linearly in depth onto the seeded
layer-centre depths, overwriting any analytical T/S. All
defaults preserve bit-identity: enable = .false. is a no-op.
Design + MOM6 divergences: local_archive/specs/a2_zinit_spec.md.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | enable | = | .false. |
Master switch. Default |
|
| character(len=256), | public | :: | file | = | "" |
Path to the model-grid T/S NetCDF (dims x/y/z; vars temp/salt/z_src with the documented name-fallbacks). |
|
| real(kind=wp), | public | :: | land_fill_s | = | 35.0_wp |
Fallback salinity (PSU) written to dry (wet_mask <= 0) columns.
|
|
| real(kind=wp), | public | :: | land_fill_t | = | 10.0_wp |
Fallback temperature (°C) written to dry (wet_mask <= 0) columns. |
|
| real(kind=wp), | public | :: | lin_ds_dz | = | 0.0_wp |
|
|
| real(kind=wp), | public | :: | lin_dt_dz | = | 0.0_wp |
|
|
| real(kind=wp), | public | :: | lin_s_ref | = | 35.0_wp |
|
|
| real(kind=wp), | public | :: | lin_t_ref | = | 0.0_wp |
|
|
| character(len=32), | public | :: | s_var | = | "" |
Salinity variable-name override; “” tries salt/S/salinity. |
|
| character(len=32), | public | :: | source | = | "file" |
Where the T(z)/S(z) profile comes from. |
|
| character(len=32), | public | :: | t_var | = | "" |
Temperature variable-name override; “” tries temp/T/temperature. |
|
| character(len=32), | public | :: | z_var | = | "" |
Source-axis variable-name override; “” tries z_src/z/depth/lev. |
Double diffusion (&ocean_ddiff_nml, CVMix_ddiff-style): salt
fingering (Large et al. 1994) + diffusive convection
(Marmorino-Caldwell 1976 / Kelley 1990). Folded INTO the
heat/salt split (not a kv/kt contributor) to give an asymmetric
ks-vs-kt divergence. Defaults are the CVMix defaults; enable =
.false. keeps the path bit-identical. Knob table:
docs/generated_nml_knobs.md.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | public | :: | ddiff_exp1 | = | 1.0_wp |
Inner (bracket) fingering exponent (CVMix |
|
| real(kind=wp), | public | :: | ddiff_exp2 | = | 3.0_wp |
Outer fingering exponent (CVMix |
|
| logical, | public | :: | enable | = | .false. |
Master switch (MOM6 |
|
| real(kind=wp), | public | :: | kappa_ddiff_s | = | 1.0e-4_wp |
Leading salt-fingering salinity diffusivity K_f (CVMix
|
|
| real(kind=wp), | public | :: | mol_diff | = | 1.5e-6_wp |
Molecular diffusivity scaling the convection branch (CVMix
|
|
| real(kind=wp), | public | :: | param1 | = | 0.909_wp |
MC76 convection exterior coeff (CVMix |
|
| real(kind=wp), | public | :: | param2 | = | 4.6_wp |
MC76 convection middle coeff (CVMix |
|
| real(kind=wp), | public | :: | param3 | = | -0.54_wp |
MC76 convection interior coeff (CVMix |
|
| real(kind=wp), | public | :: | strat_param_max | = | 2.55_wp |
R_rho salt-fingering cutoff (CVMix |
|
| logical, | public | :: | use_k90 | = | .false. |
Convection form: |
&ocean_debug_nml: forensic probes for the ocean dyn-core.
Every knob defaults off ⇒ bit-identical (untaken branches); all
are HEAVY when on (device waits / serialised apply chains) —
investigation tools, not production diagnostics. Output is
greppable fixed-format rows (BUDGET / KE_ATTR / CHKSUM /
HOTFACE); reader: tools/read_chksum.py.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | budget | = | .false. |
Per-stage BT power-budget probe (BUDGET rows). |
|
| logical, | public | :: | chksum | = | .false. |
MOM6-style per-phase field checksums (CHKSUM rows) + the HOTFACE argmax-face anatomy at the tendency seams — the first-diverging-operator / non-finite-minting attribution probe. Device waits + reductions per phase seam. |
|
| integer, | public | :: | chksum_end_step | = | 0 |
Last outer step the chksum probe samples (0 = no upper bound). |
|
| logical, | public | :: | chksum_interior | = | .false. |
Restrict every chksum reduction to PHYSICAL cells (drop the
ghost ring). Default |
|
| integer, | public | :: | chksum_start_step | = | 0 |
First outer step the chksum probe samples (0 = from start). |
|
| logical, | public | :: | ke_attr | = | .false. |
Per-segment layer-KE attribution meter (KE_ATTR rows) — serialises the velocity-apply chain while sampling. |
|
| integer, | public | :: | ke_attr_end_step | = | 0 |
Last outer step the KE meter samples (0 = no upper bound). |
|
| integer, | public | :: | ke_attr_start_step | = | 0 |
First outer step the KE meter samples (0 = from start). |
&ocean_forcing_nml: PR-12 surface-flux component-set gate.
Default OFF ⇒ bit-identical (no component array allocated, no
assembler kernel runs; ocean_surface_flux_t%Q_heat/Q_salt
are filled exactly as &ocean_thermo_nml always has).
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | enable_components | = | .false. |
Allocate the surface-flux component set ( |
&ocean_redi_nml: Redi continuous neutral (along-isopycnal) tracer
diffusion — the rotated diffusion tensor. Default off ⇒ no neutral flux.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | continuous | = | .true. |
Continuous variant (closed-form linear neutral surfaces, the
production path). |
|
| logical, | public | :: | enable | = | .false. |
Master switch. Default off ⇒ no-op ⇒ bit-identical. |
|
| real(kind=wp), | public | :: | khtr | = | 0.0_wp |
Redi neutral diffusivity KhTr (m^2/s; production 1e2-1e3). 0 ⇒ no neutral flux even when enabled. |
&ocean_slopes_nml: isopycnal (neutral) slope diagnostics (Griffies
1998) at C-grid interfaces. Foundational gate for GM/Redi/VarMix.
Default off ⇒ no-op.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | enable | = | .false. |
Master switch. Default off ⇒ |
|
| real(kind=wp), | public | :: | kd_smooth | = | 1.0e-6_wp |
Vert-fill smoothing diffusivity, m^2/s (× dt fills massless layers before the gradients are formed). |
|
| real(kind=wp), | public | :: | min_dz_for_n2 | = | 1.0_wp |
Minimum layer thickness, m, floored in the N² / drdz denominator so vanished layers don’t spike the slope. |
Will &ocean_vdiff_nml bbl_glue actually be ON after setup?
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in) | :: | cfg |
Is the configured ice-shelf draft UNIFORM over the whole array?
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in) | :: | cfg |
.true. when at least one tag names a file, i.e. enabling the
group would actually do something.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(ocean_dataovr_config_t), | intent(in) | :: | cfg |
.true. unless a tag names a file without naming the variable
inside it. A blank file (tag not file-driven) is valid, and
a var with no file is harmless — the tag simply never
registers — so only the one combination is rejected.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(dataovr_entry_config_t), | intent(in) | :: | e |
.true. when evap/lprec are file-driven but the
surface-flux component set they write into is switched off.
Note the polarity: this reports the PROBLEM, not validity —
named for how it reads at the call site.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(ocean_dataovr_config_t), | intent(in) | :: | cfg | |||
| logical, | intent(in) | :: | use_components |
.true. unless time_mode='cyclic' was requested without a
positive cycle_period. Checked only for the cyclic mode;
cycle_period is ignored by linear/static.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(ocean_dataovr_config_t), | intent(in) | :: | cfg |
.true. iff a density-coordinate diagnostic selection (global
vgrid='density', or a per-diagnostic :density/:rho attribute
anywhere in diags) has a usable rho_levels axis: at least one
entry, strictly increasing (invert_density_targets assumes a
monotone light->dense target list), and within the declared
MAX_OCEAN_DIAG_Z_LEVELS array bound. Unlike sigma/z*, density
bins have no auto-fill, so an unset axis must abort rather than
silently size to zero. When density is not requested at all this
is unconditionally .true. (no constraint).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| character(len=*), | intent(in) | :: | vgrid | |||
| character(len=*), | intent(in) | :: | diags | |||
| integer, | intent(in) | :: | n_rho_levels | |||
| real(kind=wp), | intent(in) | :: | rho_levels(:) |
Length of the LEADING run of non-sentinel (>= 0) entries in
&ocean_ice_nml hlim (PR-58). Contiguity matters here (unlike
apply_layer_rho_init’s bare count(>= 0)): a value AFTER the
first sentinel is silently dropped by this count, so
ice_hlim_spec_is_valid checks contiguity explicitly rather than
trusting the count alone.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | hlim(:) |
PR-3 (D1): is the MOM6 wt_u BT-forcing weight on, either
directly (forcing_visc_rem) or via visc_rem_chain?
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in) | :: | cfg |
PR-3 (D1): is bt_rem built from av_rem (MOM6’s barotropic
viscous-remnant depth mean) on, either directly
(bt_rem_from_visc_rem) or via visc_rem_chain?
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in) | :: | cfg |
PR-3 (D1): is the MOM6 continuity u_cor = u + du*visc_rem
transport-matching renormaliser on, either directly
(renorm_visc_rem) or via visc_rem_chain?
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in) | :: | cfg |
D1 follow-up: is the visc_rem PRODUCER needed, independent of
the (retired) weighted BT-correction fold? .true. whenever
ANY real consumer is on — forcing_visc_rem/renorm_visc_rem/
bt_rem_from_visc_rem (each already .or.-ed with
visc_rem_chain by their own helper) — or the legacy
correction_visc_rem field itself, so a test that constructs
cfg directly and sets that field alone (bypassing the nml
retirement check) still gets a live producer. This is what
configure_ocean_bt wires into bt_work%bt_visc_rem_producer,
which vmix_apply_in_stage’s do_remnant reads — NOT
bt_work%bt_correction_visc_rem, which now drives ONLY the
weighted-fold dispatch in apply_bt_correction (and is never
set by visc_rem_chain).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in) | :: | cfg |
Is there anything in this configuration that WRITES
multilayer_state_t%p_top?
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in) | :: | cfg |
Resolve the &ocean_bt_nml bt_halo sentinel to a concrete march-in
width.
requested == BT_HALO_AUTO_SENTINEL (-1, the default) => AUTO: 0.
The march-in used to switch itself on (BT_HALO_AUTO_WIDTH) on
every compatible multi-rank run. It is not bit-reproducible
against the serial run over variable bathymetry or with open
boundaries (test_ocean_decomp_bitid_mpi), so a default
multi-rank run must not pick it: AUTO is off, serial or not.
requested >= 0 (user set it explicitly) => returned UNCHANGED; the
fail-loud exclusion checks in validate_config police an explicit
bt_halo > 0 against an incompatible feature (user asked for the
impossible), so the auto-resolution never overrides an explicit 0
or an explicit width.
compute_size / exclusion_active no longer change the answer; they
stay so the call site (and its exclusion log) keeps its shape for the
day the march-in is exact again.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in) | :: | requested |
The namelist value: BT_HALO_AUTO_SENTINEL (-1) for auto, else >= 0. |
||
| integer, | intent(in) | :: | compute_size |
Number of compute ranks (1 = serial). Unused by AUTO (see above). |
||
| logical, | intent(in) | :: | exclusion_active |
.true. iff any march-in exclusion feature is on (see
|
Is &ocean_bt_nml substep_drag blind to the configured bottom
drag?
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in) | :: | cfg |
Is the constant harmonic viscosity below the z_fixed x cavity
lower envelope ZFIXED_CAVITY_NU_H_MIN? The predicate behind
validate_config’s WARNING (never a refusal — the vcoord
stability matrix runs this combination inviscid on purpose).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in) | :: | cfg |
&ocean_forcing_nml enable_components=.true. with
&ocean_thermo_nml enable_thermodynamics=.false. is a
configuration that validates but does nothing (the component
set only feeds the assembler->apply_tracers thermo path) —
named predicate per the lateral_closure_is_implemented idiom
so validate_config reads as one line.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| logical, | intent(in) | :: | enable_components | |||
| logical, | intent(in) | :: | enable_thermodynamics |
.true. iff &ocean_sponge_nml ramp names a band shape the
damp_source="band" filler implements.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| character(len=*), | intent(in) | :: | tag |
.true. iff &ocean_sponge_nml damp_source names a source that is
actually filled. "file" is a recognised name (PR-23b, needs the
PR-14 reader) but has no kernel yet — a source with no filler
must abort, not silently build an all-zero map (the
lateral_closure_is_implemented idiom).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| character(len=*), | intent(in) | :: | tag |
.true. iff &ocean_sponge_nml target_source names a reference
state that is actually filled: "ic" (snapshot of the seeded
initial condition) or "linear_z" (analytic affine geopotential
profile, re-evaluated on the live layer geometry). "file" is
recognised but has no reader yet (PR-23b).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| character(len=*), | intent(in) | :: | tag |
Single source of truth for the BT march-in exclusion set (mirrors the
explicit-bt_halo > 0 fail-loud checks in validate_config). Reports
whether ANY exclusion is active and names the first one (for the AUTO
resolution log). When none is active, reason is “”.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in) | :: | cfg | |||
| logical, | intent(out) | :: | excluded | |||
| character(len=:), | intent(out), | allocatable | :: | reason |
Register the validated groups + the still-external groups onto
schema, capturing defaults from cfg.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(out) | :: | schema |
Shape/monotonicity predicate for a supplied &ocean_ice_nml hlim
list (PR-58). A SUBROUTINE, not a function — a pure FUNCTION may
not carry an intent(out) dummy (reason); pure SUBROUTINES
can. n = ice_hlim_count(hlim); ok iff ALL of:
(a) n >= 2 – one edge gives no width
to extrapolate (SIS2
divergence D1: Roundabout
fails loud here instead
of SIS2’s silent
fallback to the default
table).
(b) n <= ncat + 1 – more edges than the ITD
has bins.
(c) all(hlim(n+1:) < 0) – contiguity: no value
after the first
sentinel.
(d) hlim(1) > 0 – mh_lim(1) > 0 is a live
gate (rdb_ice_itd
ice_adjust_categories).
(e) hlim(k+1) > hlim(k), k = 1..n-1 – strictly increasing.
Checking (d)+(e) on the SUPPLIED list is sufficient for the FULL
h_lim(1..ncat+1): the constant-width extrapolation preserves
both properties by induction
(h_lim(k)-h_lim(k-1) = h_lim(k-1)-h_lim(k-2)), so no redundant
post-extrapolation check is needed.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | hlim(:) | |||
| integer, | intent(in) | :: | ncat | |||
| logical, | intent(out) | :: | ok | |||
| character(len=:), | intent(out), | allocatable | :: | reason |
Read simulation configuration from a namelist file.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| character(len=*), | intent(in) | :: | filename |
Path to the namelist input file |
||
| type(config_t), | intent(out), | target | :: | cfg |
Populated configuration |
|
| type(nml_schema_t), | intent(out), | optional | :: | schema |
Built + parsed schema (aliases into |
|
| integer, | intent(out), | optional | :: | ierr |
Non-zero on a strict-parse failure (unknown group/key,
range/enum violation) when present; absent behaves as today
( |
In-memory sibling of read_config: build + strict-parse +
apply a namelist held entirely in the text buffer (newline-
separated), with NO filesystem touch — no temp file, no chdir,
no cleanup. Same validation behaviour as the file path (the
schema parser and the native &ocean_bc_nml read both run from
the in-memory line array); same error stop default and same
optional non-aborting ierr as read_config.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| character(len=*), | intent(in) | :: | text |
Whole namelist as one string (records separated by ‘\n’). |
||
| type(config_t), | intent(out), | target | :: | cfg | ||
| type(nml_schema_t), | intent(out), | optional | :: | schema | ||
| integer, | intent(out), | optional | :: | ierr |
Non-zero on a strict-parse failure when present; absent
behaves as today ( |
Validate configuration parameters after reading
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in) | :: | cfg | |||
| integer, | intent(out), | optional | :: | ierr |
Non-zero on any cross-knob semantic validation failure when
present; absent behaves as today ( |
Register the four flat knobs of one &ocean_dataovr_nml tag.
e is target, intent(in) for the same reason cfg is in every
register_ocean_* above: the schema stores a pointer to the
target and assigns through it at parse time, and the actual
argument is always a component of the target cfg, so the
association outlives this call.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(nml_group_t), | intent(inout) | :: | g | |||
| type(dataovr_entry_config_t), | intent(in), | target | :: | e | ||
| character(len=*), | intent(in) | :: | tag | |||
| character(len=*), | intent(in) | :: | what | |||
| character(len=*), | intent(in) | :: | units |
Post-parse Cartesian domain sizing (MOM6 GRID_CONFIG=”cartesian” +
AXIS_UNITS / LENLON / LENLAT). When &ocean_grid_nml len_lon/len_lat
are set (> 0) on an ocean Cartesian grid, DERIVE the uniform
&grid_nml dx/dy (metres) from the domain extent, the physical cell
count (nx/ny = MOM6 NIGLOBAL/NJGLOBAL) and axis_units, exactly as
MOM6’s set_grid_metrics_cartesian:
degrees : dx = rad_earth · len_lon · π/180 / nx (arc length, no cos(lat))
km : dx = 1000 · len_lon / nx
meters : dx = len_lon / nx
and likewise dy from len_lat / ny. This runs BEFORE grid init, so the
metrics, barotropic CFL and Coriolis all see the derived metres.
Default (len_lon <= 0) leaves dx/dy untouched ⇒ bit-identical.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(inout) | :: | cfg |
Post-parse time-unit fixup shared by the file + string config
paths. t_end, status_interval, ocean_diag%dt_out are given
in time_unit from &time_nml; multiply through to SI seconds.
dt_fixed/dt_max stay in seconds; default time_unit="s"
gives a 1× factor (bit-identical to before).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(inout) | :: | cfg |
Existence check for one tag’s file. NOT pure — inquire is
an I/O statement, which is exactly why this is a subroutine
setting has_error rather than another predicate: the pure
ones above stay pure and independently testable, and this
keeps the filesystem dependency in one visible place.
Silent for a tag that names no file.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(dataovr_entry_config_t), | intent(in) | :: | e | |||
| character(len=*), | intent(in) | :: | tag | |||
| logical, | intent(inout) | :: | has_error |
Body of read_config_from_string — mirrors read_config_impl with the line array replacing the file unit.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| character(len=*), | intent(in) | :: | text | |||
| type(config_t), | intent(out), | target | :: | cfg | ||
| type(nml_schema_t), | intent(out) | :: | sch | |||
| integer, | intent(out), | optional | :: | ierr |
Non-zero on a strict-parse failure when present; absent
behaves as today ( |
Body of read_config: build the strict schema (capturing
defaults from the pristine cfg field initialisers), parse the
file (validate + apply straight into cfg), run the post-parse
time-unit cascade.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| character(len=*), | intent(in) | :: | filename |
Path to the namelist input file |
||
| type(config_t), | intent(out), | target | :: | cfg |
Populated configuration |
|
| type(nml_schema_t), | intent(out) | :: | sch |
Built + parsed schema (aliases into |
||
| integer, | intent(out), | optional | :: | ierr |
Non-zero on a strict-parse failure when present; absent
behaves as today ( |
&boundary_nml: per-side BC types, tidal forcing, inflow/
discharge/clamped/sponge/nesting parameters. The four bc_*
keys are enums over the bc_type_from_string accepted set.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_conv (Brunt-Vaisala-triggered convective adjustment,
CVMix_conv-style).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_ddiff (double diffusion: salt fingering + diffusive
convection, CVMix_ddiff-style).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_epbl (Reichl & Hallberg 2018 energetics-based PBL).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_foxkemper (Fox-Kemper et al. 2008/2011 mixed-layer-eddy
restratification, capability B5).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_gm (Gent-McWilliams thickness diffusion, capability [2]).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&grid_nml: structured-grid geometry.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&initial_condition_nml: coastal IC selector + parameters.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_kappa_shear (JHL08 shear-driven interior mixing).
Exclusive > 0 bounds (ri_crit, kappa_0, tol_err, prandtl_turb)
are left to the configure-time strict checks.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&logging_nml: logger verbosity + status cadence.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_meke (prognostic mesoscale eddy kinetic energy, [5]).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&mpi_nml: MPI domain decomposition.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&nonhydrostatic_nml: NH/multilayer switches, CG-Poisson
controls, PP81 vmix, KPP knobs, k-eps, Smagorinsky, BPG, mode
split. keps_stability and bpg_method are enums.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_bc_nml: open-boundary condition config (P4.5 migration
off the hand-rolled read_ocean_bc_nml). All defaults reproduce
a closed-wall run (bit-identical to nmls that omit this block).
The west/east/south/north edge-type enum lists every arm
of ocean_bc_type_from_string (rdb_ocean_boundary_types.F90),
not just the subset named in the config-type docstring — that
function is what the parsed string is actually fed to, and the
native reader accepted (and validate_config did not reject) any
of its arms on any edge, so the schema must not narrow that.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_bdrag_nml: bottom-drag selector + coefficients.
form enum mirrors parse_bdrag_variant in rdb_ocean_bottom_drag.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_bt_nml: split-explicit barotropic substep controls.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_cavity_dyn (P5.1 static ice-shelf cavity geometry: the
prescribed draft + the barotropic datum that absorbs it).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_cavity_melt (P2b ice-shelf basal-melt thermodynamics:
the three-equation interface, its exchange law and the
far-field sampling depth). The exchange_law and
ice_conduction enums MIRROR parse_cavity_exchange_law /
parse_cavity_ice_mode in rdb_ocean_cavity_melt — the two
lists move together, and validate_config re-checks them
belt-and-braces so a RESERVED law is refused by name rather
than silently falling through the kernel’s dispatch.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_continuity_nml: continuity-PPM positivity controls.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_coriolis_nml: Coriolis-advection scheme selector.
form enum mirrors parse_pv_variant in rdb_coriolis_adv
(canonical names; short aliases hk/energy are not advertised).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_data_nml: the shared time-varying NetCDF input reader
(PR-14). Two knobs, no per-field entries — see
ocean_data_config_t. Registration of individual (file,
variable, destination) triples is programmatic, via each
consumer’s own namelist group calling
ocean_data_input_register_2d/_3d at setup.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_dataovr_nml: file-backed surface forcing (PR-15). Flat
per-tag knobs (<tag>_file, <tag>_var, <tag>_scale,
<tag>_add) rather than a MOM6-style parallel-array data table
— the schema engine has no string-array key type, and the set of
recognised tags is fixed by the slots they feed, so a flat
layout is both expressible today and self-documenting in
docs/generated_nml_knobs.md.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_debug_nml: forensic probes (all heavy, all default off).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_diag_nml: ocean diag-manager output controls. dt_out
is interpreted in time_unit and converted by the post-parse
cascade in read_config. vgrid enum is {layer, z_fixed}.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_eos_nml: equation-of-state variant selector, the
freezing-point (liquidus) coefficient set, and the
potential-density reference pressure.
eos enum mirrors parse_eos_variant in rdb_eos;
tfreeze_set mirrors parse_tfreeze_set in the same module.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_forcing_nml: surface-flux component-set gate (PR-12).
One knob, deliberately — components are filled by fillers, not
by scalar namelist knobs (that would be a knob-per-component,
all dead in v1).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_geothermal_nml: geothermal bottom-heat-flux switch +
scalar flux. Bed-side analogue of the surface heat flux.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_grid_nml: horizontal-grid generator + geometry
(curvilinear-grid stream). grid_config / coriolis_scheme
enums mirror parse_grid_config / parse_coriolis_scheme in
rdb_ocean_metrics.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_hdiff_nml: along-coordinate tracer Laplacian
(rdb_ocean_hdiff_tracer). Not the neutral/isopycnal path —
that is &ocean_redi_nml, already reachable.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_hvisc_nml: lateral-viscosity closure + coefficients.
lateral_closure enum mirrors parse_lateral_closure in
rdb_ocean_lateral_mix.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_ic_nml: initial-condition overlay + EOS reference state.
ic_config enum mirrors the IC dispatch in rdb_ocean_state
(default “” keeps the analytical T(z) IC).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_ice_nml: sea-ice model switch + category/layer counts
(SIS2 port scaffold) + the PR-3c v1 restoring atmospheric-forcing
scalars. Default off ⇒ byte-identical.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_ice_ic_nml: sea-ice ANALYTIC initial-condition path (PR
24). Default conc_config="zero" ⇒ byte-identical. "file" is
deliberately NOT in the allowed= list — file-backed ICs are
PR-14 (v1.1), out of scope here.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_isopycnal_nml: grounding-stability controls for the
Lagrangian vertical coordinate.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_mpi_nml: multi-rank MPI debug / tuning controls.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_pgf_nml: pressure-gradient-force kernel selector + knobs.
form enum mirrors parse_opgf_variant in rdb_ocean_pressure_force.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_psurf (PR-17 atmospheric surface-pressure loading /
inverse barometer).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_restore_nml: surface buoyancy restoring (MOM6
RESTOREBUOY). Piston-velocity relaxation of top-layer T / S
toward scalar targets. Default OFF ⇒ bit-identical.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_sponge_nml: the map-driven sponge (PR-23). Default
enable = .false. ⇒ the legacy &ocean_bc_nml band kernels run
unchanged ⇒ bit-identical. No damp_max / idamp_file / *_var
keys in v1 — those validate and do nothing until PR-23b adds their
consumer (CLAUDE.md trap class “dead knobs”).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_tdrag_nml: ice-shelf TOP-drag selector + coefficients.
form enum mirrors parse_tdrag_variant in rdb_ocean_top_drag.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_thermo_nml: thermodynamics switch + scalar surface fluxes.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_tides (C1 equilibrium astronomical body-force tide).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_topo_nml: basin geometry + surface forcing + Coriolis tilt.
topo_config / wind_config enums mirror the dispatch
select-cases in rdb_ocean_state / rdb_ocean_setup.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_tracers_nml: prognostic-tracer registry switches.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_vdiff_nml: backward-Euler vertical-friction folding knobs.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_vmix_nml: vertical-mixing module switches + knobs.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_wetdry_nml: dynamic wetting/drying for the BT substep.
Design + validation numbers: docs/ocean_wetdry_plan.md.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_zinit_nml: z-level T/S initial-condition overlay (A2).
Default enable = .false. is a no-op (analytical IC unchanged).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&output_nml: file output + I/O + forcing/restart/gauge files.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&physics_nml: barotropic physics + bottom drag + wind stress.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_porous (Adcroft 2013 porous barriers: subgrid
sill/strait narrowing of the C-grid transport face widths).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_redi (continuous neutral / along-isopycnal tracer
diffusion, capability [3]).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&sim_nml: the simulation regime selector.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_slopes (Griffies 1998 isopycnal-slope diagnostics).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_tidal_mixing (St-Laurent/Simmons internal-tide mixing).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&time_nml: time-integration controls. t_end is interpreted
in time_unit and converted to seconds by the post-parse
cascade in read_config; dt_fixed/dt_max stay in seconds.
time_unit is a plain string (the cascade validates its set).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&tracer_nml: salinity + temperature IC/EOS/bounds + sediment.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_varmix (spatially-varying GM/Redi coefficients, [4]).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&vcoord_nml: vertical-coordinate + ALE-remap controls.
vcoord_type / remap_method / zstar_stretching are enums
with the canonical sets accepted by the rdb_vcoord parsers.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
&ocean_wavespeed (B1 first-baroclinic wave speed + Rd).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(config_t), | intent(in), | target | :: | cfg | ||
| type(nml_schema_t), | intent(inout) | :: | schema |
Split a newline-separated buffer into a fixed-len character array (one record per line, trailing CR stripped) for internal-file reads + the schema line walker.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| character(len=*), | intent(in) | :: | text | |||
| character(len=:), | intent(out), | allocatable | :: | lines(:) | ||
| integer, | intent(out) | :: | n_lines |
Warn if a BC string does not match any known type
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| character(len=*), | intent(in) | :: | bc_str | |||
| character(len=*), | intent(in) | :: | param_name |