| 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). Per-EOS cost. One point evaluation: linear ~5 flops; Wright
~20 flops + 1 division; Roquet ~130 flops, 2 sqrt, 2 divisions
(value only — |
|
| real(kind=wp), | public | :: | p_ref | = | 0.0_wp |
Reference pressure (Pa, HORIZONTALLY UNIFORM BY DESIGN — it is a scalar and must stay
one. What it buys: the thermobaric state at which the effective α/β are evaluated. Near the freezing point at ice-shelf-cavity pressures that matters, so a cavity or abyssal study is better referenced to a representative depth (2.0e7 Pa ≈ 2000 dbar, the usual σ₂ choice) than to the surface. Distinct from |
|
| character(len=16), | public | :: | tfreeze_set | = | "seaice" |
Named seawater freezing-point (liquidus) coefficient set for
T_f = λ1·S + λ2 + λ3·p for every EOS variant (MOM6 keeps
WHY IT MATTERS. At S = 34.5 the two sets differ by ~0.03 °C
— a few percent of a typical Antarctic thermal driving, and
enough to flip the SIGN of a basal melt rate over a 0.03 °C
band of ocean temperature. A mistyped value is therefore a
fail-loud NAMED SETS ONLY, on purpose: λ1/λ2/λ3 are a fitted triple and
there is no free-form coefficient knob, so a configuration
cannot mix λ1 from one source with λ2 from another. A
NONLINEAR liquidus (MOM6 SCOPE: this is the OCEAN-side liquidus only — what
|
type :: ocean_eos_config_t character(len=16) :: 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). !! !! Per-EOS cost. One point evaluation: linear ~5 flops; Wright !! ~20 flops + 1 division; Roquet ~130 flops, 2 sqrt, 2 divisions !! (value only — `roquet_spv_value`; the derivatives cost as much !! again and are computed only where a consumer uses them). Where !! it shows (global 1-degree, 5 days, one V100, FV-MOM6 in-situ !! default): `ocean_pgf` 1.09 s linear, 1.88 s Wright (analytic), !! 2.55 s Roquet (factored Boole); time loop 54.3 / 55.1 / 55.8 s. !! On the CPU (gfortran) the gap is wider: `rho_layer` is ~7x !! dearer under Roquet than Wright, and `benchmark_ale` (Roquet, !! 8 steps) spends 4.9 s in `ocean_pgf` (33.1 s with the generic !! Boole rule, 6.5 s factored but unvectorised). character(len=16) :: tfreeze_set = "seaice" !! Named seawater freezing-point (liquidus) coefficient set for !! `eos_freezing_point`, which evaluates the linear form !! !! T_f = λ1·S + λ2 + λ3·p !! !! for every EOS variant (MOM6 keeps `TFREEZE_FORM = "LINEAR"` !! as its default under any density branch). !! !! * `"seaice"` (DEFAULT ⇒ bit-identical) — the SIS2/MOM6 !! sea-ice liquidus, λ = (−0.054 °C/PSU, 0 °C, !! −7.53e-8 °C/Pa). `T_f(35 PSU, 0 Pa) = −1.89 °C`. This is !! the set the shipped sea-ice column model was ported and !! tested against. !! * `"isomip"` — the ISOMIP+ protocol liquidus (Asay-Davis et !! al. 2016, GMD 9, Table 4 p. 2483; consumed in their !! eq. (25) p. 2485), λ = (−0.0573 °C/PSU, 0.0832 °C, !! −7.53e-8 °C/Pa). Required for an ice-shelf-cavity run !! claiming ISOMIP+ compliance, and the value the ice-shelf !! literature is unanimous on. !! !! WHY IT MATTERS. At S = 34.5 the two sets differ by ~0.03 °C !! — a few percent of a typical Antarctic thermal driving, and !! enough to flip the SIGN of a basal melt rate over a 0.03 °C !! band of ocean temperature. A mistyped value is therefore a !! fail-loud `validate_config` error, never a silent fallback. !! !! NAMED SETS ONLY, on purpose: λ1/λ2/λ3 are a fitted triple and !! there is no free-form coefficient knob, so a configuration !! cannot mix λ1 from one source with λ2 from another. A !! NONLINEAR liquidus (MOM6 `MILLERO_78`, a TEOS-10 polynomial) !! is a different functional form and would arrive as its own !! `form` selector at the documented seam in !! `eos_freezing_point`, not as another member of this list. !! !! SCOPE: this is the OCEAN-side liquidus only — what !! `eos_freezing_point` returns, i.e. the sea-surface freezing !! temperature the frazil, frazil-uptake and basal-flux kernels !! work against. The SIS2 ice model's INTERNAL brine-pocket !! liquidus slope (`ICE_DTF_DS`, `rdb_ice_enthalpy`) is baked !! into its closed-form enthalpy<->temperature map and is NOT !! switched here; under `"isomip"` the two therefore disagree by !! ~0.03 °C. The ISOMIP+ set is for ice-shelf-cavity work, where !! the sea-ice column model is normally off. real(wp) :: p_ref = 0.0_wp !! Reference pressure (Pa, `>= 0`) at which the model's POTENTIAL !! density `ms%rho_layer` is evaluated. Default 0 (surface !! density, σ₀) ⇒ bit-identical to every run before this knob !! existed. Read by the "wright" and "roquet_spv" variants; !! "linear" has no pressure dependence and ignores it. !! !! HORIZONTALLY UNIFORM BY DESIGN — it is a scalar and must stay !! one. `rho_layer` is differenced ALONG a layer (the Montgomery !! PGF, the FV-lite / FV-MOM6-PCM integrands) and VERTICALLY (the !! vmix N² builders), so a reference pressure varying with (i,j) !! would give two columns of identical water at the same depth !! densities differing by `∂ρ/∂p·Δp` — a spurious along-layer !! gradient and hence a spurious pressure gradient force. A !! spatially varying surface load goes to the IN-SITU builders via !! `&ocean_psurf_nml in_eos`, never here. !! !! What it buys: the thermobaric state at which the effective !! α/β are evaluated. Near the freezing point at ice-shelf-cavity !! pressures that matters, so a cavity or abyssal study is better !! referenced to a representative depth (2.0e7 Pa ≈ 2000 dbar, the !! usual σ₂ choice) than to the surface. !! !! Distinct from `&vcoord_nml rho_ref_pressure`, which references !! the RHO / HYCOM target-density COORDINATE and the density-space !! diagnostic remap. For a density-coordinate run the two should !! normally be set to the SAME value so coordinate and dynamics !! agree on what "density" means; they are kept independent !! because a diagnostic remap to a different reference is a !! legitimate request. end type ocean_eos_config_t