geostrophic

seawater.geostrophic.bfrq(s, t, p, lat=None)

Calculates Brünt-Väisälä Frequency squared (N 2) at the mid depths from the equation:

\[\begin{split}N^{2} = \\frac{-g}{\\sigma_{\\theta}} \\frac{d\\sigma_{\\theta}}{dz}\end{split}\]

Also calculates Potential Vorticity from:

\[\begin{split}q = f \\frac{N^2}{g}\end{split}\]
Parameters:
s(p)array_like

salinity [psu (PSS-78)]

t(p)array_like

temperature or potential temperature [℃ (ITS-90)]

parray_like

pressure [db].

latnumber or array_like, optional

latitude in decimal degrees north [-90..+90]. Will grav instead of the default g = 9.8 m 2 s -1) and d(z) instead of d(p)

Returns:
n2array_like

Brünt-Väisälä Frequency squared (M-1xN) [rad s -2]

qarray_like

planetary potential vorticity (M-1xN) [ m s -1]

p_avearray_like

mid pressure between P grid (M-1xN) [db]

References

[1]

A.E. Gill 1982. p.54 Eqn. 3.7.15 “Atmosphere-Ocean Dynamics” Academic Press: New York. ISBN: 0-12-283522-0

[2]

Jackett, David R., Trevor J. Mcdougall, 1995: Minimal Adjustment of Hydrographic Profiles to Achieve Static Stability. J. Atmos. Oceanic Technol., 12, 381-389. doi: 10.1175/1520-0426(1995)012<0381:MAOHPT>2.0.CO;2

Examples

>>> import seawater as sw
>>> s = [[0, 0, 0], [15, 15, 15], [30, 30, 30], [35, 35, 35]]
>>> t = [[15] * 3] * 4
>>> p = [[0], [250], [500], [1000]]
>>> lat = [30, 32, 35]
>>> sw.bfrq(s, t, p, lat)[0]
array([[4.51543648e-04, 4.51690708e-04, 4.51920753e-04],
       [4.45598092e-04, 4.45743207e-04, 4.45970207e-04],
       [7.40996788e-05, 7.41238078e-05, 7.41615525e-05]])
seawater.geostrophic.gpan(s, t, p)

Geopotential Anomaly calculated as the integral of svan from the the sea surface to the bottom. THUS RELATIVE TO SEA SURFACE.

Adapted method from Pond and Pickard (p76) to calculate gpan relative to sea surface whereas Pond and Pickard calculated relative to the deepest common depth. Note that older literature may use units of “dynamic decimeter” for above.

Parameters:
s(p)array_like

salinity [psu (PSS-78)]

t(p)array_like

temperature [℃ (ITS-90)]

parray_like

pressure [db].

Returns:
gpanarray_like

geopotential anomaly [m 3 kg -1 Pa = m 2 s -2 = J kg -1]

References

[1]

S. Pond & G.Pickard 2nd Edition 1986 Introductory Dynamical Oceanography Pergamon Press Sydney. ISBN 0-08-028728-X

Examples

>>> # Data from Unesco Tech. Paper in Marine Sci. No. 44, p22.
>>> import seawater as sw
>>> s = [[0, 1, 2], [15, 16, 17], [30, 31, 32], [35, 35, 35]]
>>> t = [[15] * 3] * 4
>>> p = [[0], [250], [500], [1000]]
>>> sw.gpan(s, t, p)
array([[  0.        ,   0.        ,   0.        ],
       [ 56.35465209,  54.45399428,  52.55961152],
       [ 84.67266947,  80.92724333,  77.19028933],
       [104.95799186,  99.38799979,  93.82834339]])
seawater.geostrophic.gvel(ga, lat, lon)

Calculates geostrophic velocity given the geopotential anomaly and position of each station.

Parameters:
gaarray_like

geopotential anomaly relative to the sea surface.

latarray_like

latitude of each station (+ve = N, -ve = S) [ -90.. +90]

lonarray_like

longitude of each station (+ve = E, -ve = W) [-180..+180]

Returns:
velarray_like

geostrophic velocity relative to the sea surface. Dimension will be MxN-1 (N: stations)

References

[1]

S. Pond & G.Pickard 2nd Edition 1986 Introductory Dynamical Oceanography Pergamon Press Sydney. ISBN 0-08-028728-X

Examples

>>> import numpy as np
>>> import seawater as sw
>>> lon = np.array([-30, -30, -30, -30, -30])
>>> lat = np.linspace(-22, -21, 5)
>>> t = np.array(
...     [
...         [0, 0, 0, 0, 0],
...         [10, 10, 10, 10, 10],
...         [20, 20, 20, 20, 20],
...         [30, 30, 30, 30, 30],
...         [40, 40, 40, 40, 40],
...     ]
... )
>>> s = np.array(
...     [
...         [25, 25, 25, 35, 35],
...         [25, 25, 25, 35, 35],
...         [25, 25, 25, 35, 35],
...         [25, 25, 25, 35, 35],
...         [25, 25, 25, 35, 35],
...     ]
... )
>>> p = np.array(
...     [
...         [0, 5000, 10000, 0, 5000],
...         [0, 5000, 10000, 0, 5000],
...         [0, 5000, 10000, 0, 5000],
...         [0, 5000, 10000, 0, 5000],
...         [0, 5000, 10000, 0, 5000],
...     ]
... )
>>> ga = sw.gpan(s, t, p)
>>> sw.gvel(ga, lat, lon)
array([[ 231.74785186,  197.54291221, -436.64938045,    0.        ],
       [ 231.74785186,  197.54291221, -436.64938045,    0.        ],
       [ 231.74785186,  197.54291221, -436.64938045,    0.        ],
       [ 231.74785186,  197.54291221, -436.64938045,    0.        ],
       [ 231.74785186,  197.54291221, -436.64938045,    0.        ]])
seawater.geostrophic.svan(s, t, p=0)

Specific Volume Anomaly calculated as svan = 1 / dens(s, t, p) - 1 / dens(35, 0, p).

Note that it is often quoted in literature as 1e8 * units.

Parameters:
s(p)array_like

salinity [psu (PSS-78)]

t(p)array_like

temperature [℃ (ITS-90)]

parray_like

pressure [db].

Returns:
svanarray_like

specific volume anomaly [m 3 kg -1]

References

[1]

Fofonoff, P. and Millard, R.C. Jr UNESCO 1983. Algorithms for computation of fundamental properties of seawater. UNESCO Tech. Pap. in Mar. Sci., No. 44, 53 pp. Eqn.(31) p.39. https://unesdoc.unesco.org/ark:/48223/pf0000059832_eng

[2]

S. Pond & G.Pickard 2nd Edition 1986 Introductory Dynamical Oceanography Pergamon Press Sydney. ISBN 0-08-028728-X

Examples

>>> # Data from Unesco Tech. Paper in Marine Sci. No. 44, p22.
>>> import seawater as sw
>>> from seawater.library import T90conv
>>> s = [[0, 1, 2], [15, 16, 17], [30, 31, 32], [35, 35, 35]]
>>> t = T90conv([[15] * 3] * 4)
>>> p = [[0], [250], [500], [1000]]
>>> sw.svan(s, t, p)
array([[2.82371949e-05, 2.74626498e-05, 2.66921126e-05],
       [1.68453274e-05, 1.60993333e-05, 1.53543515e-05],
       [5.80768118e-06, 5.07784980e-06, 4.34876387e-06],
       [2.30490099e-06, 2.30490099e-06, 2.30490099e-06]])