pgf_free_surface_gravity Function

public pure function pgf_free_surface_gravity(pgf) result(g_pf)

The gravity of the free-surface term the slow layer PGF CARRIES, i.e. −∂⟨PGF⟩/∂(∇η) for a uniform-density column (m/s²):

  • MONT, FV_LITE, FV_WRIGHT are built from the FREE SURFACE down (M(nz) ≡ 0, p_edge(nz+1) = 0, surface-relative z), so they carry NO −g·∇η at all — 0. Their layer PGF is purely baroclinic.
  • FV_MOM6 closes its anomaly stack with pa(nz+1) = ρ_ref·g·η_geo (MOM6 PressureForce_FV) and the MOM6 GFS_scale correction removes (1 − gfs_scale)·g·ρ_surf/ρ₀·∇η — so, with the surface density at ρ_ref, gfs_scale·g·ρ_ref/ρ₀.
  • GPRIME’s top layer is −g_FS·∇η by construction — g_FS.

This is what the barotropic substep’s own −g_bt·∇η duplicates, and therefore the only part of ⟨PGF⟩ the fast forcing may shed (set_fast_forcing_eta_pf).

Arguments

Type IntentOptional Attributes Name
type(ocean_pressure_force_t), intent(in) :: pgf

Return Value real(kind=wp)


Called by

proc~~pgf_free_surface_gravity~~CalledByGraph proc~pgf_free_surface_gravity pgf_free_surface_gravity proc~run_stage_split run_stage_split proc~run_stage_split->proc~pgf_free_surface_gravity proc~ocean_dyn_step_split ocean_dyn_step_split proc~ocean_dyn_step_split->proc~run_stage_split proc~engine_step engine_step proc~engine_step->proc~ocean_dyn_step_split proc~driver_run_ocean driver_run_ocean proc~driver_run_ocean->proc~engine_step proc~rdb_ocean_step rdb_ocean_step proc~rdb_ocean_step->proc~engine_step proc~driver_run driver_run proc~driver_run->proc~driver_run_ocean

Source Code

   pure function pgf_free_surface_gravity(pgf) result(g_pf)
      !! The gravity of the free-surface term the slow layer PGF CARRIES,
      !! i.e. `−∂⟨PGF⟩/∂(∇η)` for a uniform-density column (m/s²):
      !!
      !! * MONT, FV_LITE, FV_WRIGHT are built from the FREE SURFACE down
      !!   (`M(nz) ≡ 0`, `p_edge(nz+1) = 0`, surface-relative `z`), so they
      !!   carry NO `−g·∇η` at all — 0.  Their layer PGF is purely
      !!   baroclinic.
      !! * FV_MOM6 closes its anomaly stack with `pa(nz+1) = ρ_ref·g·η_geo`
      !!   (MOM6 `PressureForce_FV`) and the MOM6 `GFS_scale` correction
      !!   removes `(1 − gfs_scale)·g·ρ_surf/ρ₀·∇η` — so, with the
      !!   surface density at `ρ_ref`, `gfs_scale·g·ρ_ref/ρ₀`.
      !! * GPRIME's top layer is `−g_FS·∇η` by construction — `g_FS`.
      !!
      !! This is what the barotropic substep's own `−g_bt·∇η` duplicates,
      !! and therefore the only part of `⟨PGF⟩` the fast forcing may shed
      !! (`set_fast_forcing_eta_pf`).
      type(ocean_pressure_force_t), intent(in) :: pgf
      real(wp) :: g_pf
      select case (pgf%variant)
      case (OPGF_VARIANT_FV_MOM6)
         g_pf = pgf%gfs_scale*GRAVITY*pgf%rho_ref/pgf%rho0
      case (OPGF_VARIANT_GPRIME)
         g_pf = pgf%gprime_gfs
      case default
         g_pf = 0.0_wp
      end select
   end function pgf_free_surface_gravity