Compute the dynamic height of a column of seawater.
swDynamicHeight( x, referencePressure = 2000, subdivisions = 500, rel.tol = .Machine$double.eps^0.25, eos = getOption("oceEOS", default = "gsw") )
x  a section object. 

referencePressure  reference pressure (dbar). If this exceeds the
highest pressure supplied to 
subdivisions  number of subdivisions for call to

rel.tol  absolute tolerance for call to 
eos  equation of state, either 
In the first form, a list containing distance
, the distance
(km( from the first station in the section and height
, the dynamic
height (m). In the second form, a single value, containing the
dynamic height (m).
If the first argument is a section
, then dynamic height is calculated
for each station within a section, and returns a list containing distance
along the section along with dynamic height.
If the first argument is a ctd
, then this returns just a single
value, the dynamic height.
If eos="unesco"
, processing is as follows. First, a piecewiselinear
model of the density variation with pressure is developed using
stats::approxfun()
. (The option rule=2
is used to
extrapolate the uppermost density up to the surface, preventing a possible a
bias for bottle data, in which the first depth may be a few metres below the
surface.) A second function is constructed as the density of water with
salinity 35PSU, temperature of 0\(^\circ\)C, and pressure as in the
ctd
. The difference of the reciprocals of these densities, is then
integrated with stats::integrate()
with pressure limits 0
to referencePressure
. (For improved numerical results, the variables
are scaled before the integration, making both independent and dependent
variables be of order one.)
If eos="gsw"
, gsw::gsw_geo_strf_dyn_height()
is used
to calculate a result in m^2/s^2, and this is divided by
9.7963\(m/s^2\).
If pressures are out of order, the data are sorted. If any pressure
is repeated, only the first level is used.
If there are under 4 remaining distinct
pressures, NA
is returned, with a warning.
Gill, A.E., 1982. Atmosphereocean Dynamics, Academic Press, New York, 662 pp.
Other functions that calculate seawater properties:
T68fromT90()
,
T90fromT48()
,
T90fromT68()
,
swAbsoluteSalinity()
,
swAlphaOverBeta()
,
swAlpha()
,
swBeta()
,
swCSTp()
,
swConservativeTemperature()
,
swDepth()
,
swLapseRate()
,
swN2()
,
swPressure()
,
swRho()
,
swRrho()
,
swSCTp()
,
swSTrho()
,
swSigma0()
,
swSigma1()
,
swSigma2()
,
swSigma3()
,
swSigma4()
,
swSigmaTheta()
,
swSigmaT()
,
swSigma()
,
swSoundAbsorption()
,
swSoundSpeed()
,
swSpecificHeat()
,
swSpice()
,
swTFreeze()
,
swTSrho()
,
swThermalConductivity()
,
swTheta()
,
swViscosity()
,
swZ()
if (FALSE) { library(oce) data(section) # Dynamic height and geostrophy par(mfcol=c(2,2)) par(mar=c(4.5,4.5,2,1)) # Lefthand column: whole section # (The smoothing lowers Gulf Stream speed greatly) westToEast < subset(section, 1<=stationId&stationId<=123) dh < swDynamicHeight(westToEast) plot(dh$distance, dh$height, type='p', xlab="", ylab="dyn. height [m]") ok < !is.na(dh$height) smu < supsmu(dh$distance, dh$height) lines(smu, col="blue") f < coriolis(section[["station", 1]][["latitude"]]) g < gravity(section[["station", 1]][["latitude"]]) v < diff(smu$y)/diff(smu$x) * g / f / 1e3 # 1e3 converts to m plot(smu$x[1], v, type='l', col="blue", xlab="distance [km]", ylab="velocity (m/s)") # righthand column: gulf stream region, unsmoothed gs < subset(section, 102<=stationId&stationId<=124) dh.gs < swDynamicHeight(gs) plot(dh.gs$distance, dh.gs$height, type='b', xlab="", ylab="dyn. height [m]") v < diff(dh.gs$height)/diff(dh.gs$distance) * g / f / 1e3 plot(dh.gs$distance[1], v, type='l', col="blue", xlab="distance [km]", ylab="velocity (m/s)") }