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 IN-SITU ONLY. It deliberately does NOT touch v1 reaches exactly ONE consumer: the FV_WRIGHT Picard column
sweep ( |
|
| real(kind=wp), | public | :: | p_surf_const | = | 0.0_wp |
Uniform atmospheric surface pressure (Pa) seeded into
|
type :: ocean_psurf_config_t !! 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). logical :: enable = .false. !! Master switch (default off => bit-identical). logical :: in_eos = .false. !! Include the surface load in the EOS's **IN-SITU** pressure !! arguments, as the top-of-column pressure `p_top` !! (`multilayer_state_t%p_top`): a hydrostatic pressure that used !! to start at 0 Pa at the free surface starts at `p_top(i,j)` !! instead. Default `.false.` => `p_top` stays the zero array and !! every EOS evaluation is bit-identical. This is the E3 seam for !! ice-shelf cavities, where 1e6-2e7 Pa of ice load makes the p=0 !! assumption a systematic ~4-5 kg/m^3 density error under a !! nonlinear EOS. !! !! IN-SITU ONLY. It deliberately does NOT touch `ms%rho_layer`, !! which is a POTENTIAL density at the horizontally uniform !! `&ocean_eos_nml p_ref` — offsetting a potential-density !! reference per column would manufacture an along-layer density !! gradient (see that knob's docstring). The N² builders inherit !! `rho_layer` and are therefore unaffected and self-consistent. !! !! v1 reaches exactly ONE consumer: the FV_WRIGHT Picard column !! sweep (`&ocean_pgf_nml form="fv_wright"`), the only in-situ EOS !! pressure in the dyn core today. With any other PGF form and !! none of the closures below enabled the knob is INERT — a !! rank-0 warning says so rather than leaving it silent. The !! closures that build their OWN surface-relative hydrostatic !! pressure have NOT been ported, so `validate_config` REFUSES !! `in_eos = .true.` together with any of them (EPBL, !! kappa-shear, tidal mixing, Redi, isopycnal slopes, sea ice, !! and the PGF in-layer reconstruction) rather than run a !! silently inconsistent pressure. Requires `enable = .true.` !! (the load itself comes from `sf%p_surf`). real(wp) :: p_surf_const = 0.0_wp !! Uniform atmospheric surface pressure (Pa) seeded into !! `sf%p_surf_atm` at configure. A UNIFORM load is provably inert !! (gauge invariance — only grad(p_surf) is physical), so a !! non-zero value with no file/override path emits a rank-0 !! warning. v1 fill path (the analogue of `&ocean_thermo_nml !! q_heat`). The NetCDF forcing reader itself ships !! (`&ocean_dataovr_nml`); `p_surf` is simply not one of its six !! tags (tau_x, tau_y, heat, salt, evap, lprec) yet, so a !! file-driven load needs a `register_tag` entry, not new reader !! machinery. end type ocean_psurf_config_t