ocean_psurf_config_t Derived Type

type, public :: 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).


Inherited by

type~~ocean_psurf_config_t~~InheritedByGraph type~ocean_psurf_config_t ocean_psurf_config_t type~ocean_config_t ocean_config_t type~ocean_config_t->type~ocean_psurf_config_t psurf type~config_t config_t type~config_t->type~ocean_config_t ocean type~ocean_handle_t ocean_handle_t type~ocean_handle_t->type~config_t cfg

Components

Type Visibility Attributes Name Initial
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 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(kind=wp), public :: 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.


Source Code

   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