# vim:textwidth=140:expandtab:shiftwidth=4:softtabstop=4
library(oce)
# Table of contents.
# 1. rho and sigma
# 2. potential temperature and temperature scales
# 3. Absolute Salinity and Conservative Temperature
# 4. sound speed
# 5. freezing temperature
# 6. specific heat
# 7. adiabatic lapse rate
# 8. alpha and beta
# 9. swSTrho
# 10. sound absorption (unesco only)
# 11. viscosity (unesco only)
# 12. thermal conductivity (unesco only)
# 13. electrical conductivity
# 14. depth and pressure [FIXME: INCOMPLETE]
# 15. spiciness
# spec vol anom and dens anom
# pressure to depth
# The UNESCO properties are generally tested against UNESCO documents [1].
# The GSW properties are more complicated because its check values are generally
# stated in terms of Absolute Salinity (SA), not Practical Salinity (SP).
# However, we already know that the GSW functions are very well tested
# through tests of the 'gsw' package, so all we really need is a single
# test case for each function, to ensure that eos="gsw" is interpreted
# correctly, etc.
#
# References:
# [1] N. P. Fofonoff and R. C. Millard Jr., 1983.
# Algorithms for computation of fundamental properties of seawater.
# UNESCO technical papers in marine science, vol 44.
# http://www.jodc.go.jp/info/ioc_doc/UNESCO_tech/059832eb.pdf
# [2] Trevor J. McDougall, 1987. Neutral Surfaces, Journal of Physical
# Oceanography, volume 17, pages 1950-1964.
test_that("1. rho and sigma", {
# 1. rho and sigma
# 1.1 UNESCO rho [1 p19]. Note that we must
# convert to the T68 temperature scale, which was in use at the time
# that [1] was written.
sal <- c(0, 0, 0, 0, 35, 35, 35, 35)
tem <- T90fromT68(c(5, 5, 25, 25, 5, 5, 25, 25))
pre <- c(0, 1e4, 0, 1e4, 0, 1e4, 0, 1e4)
rho <- c(999.96675, 1044.12802, 997.04796, 1037.90204, 1027.67547, 1069.48914, 1023.34306, 1062.53817)
expect_equal(swRho(sal, tem, pre, eos = "unesco"), rho)
# Does swRho() work for a ctd object?
ctd <- as.ctd(sal, tem, pre)
expect_equal(swRho(ctd, eos = "unesco"), rho)
# Does accessor work for a ctd object?
oldEOS <- getOption("oceEOS")
options(oceEOS = "unesco")
expect_equal(ctd[["density", eos = "unesco"]], rho)
options(oceEOS = oldEOS)
# check sigma from this
expect_equal(swRho(sal, tem, pre, eos = "unesco") - 1000, swSigma(sal, tem, pre, eos = "unesco"))
# 1.2 GSW
# Since gsw_ functions are tested in the gsw package, we just need a consistency check.
longitude <- 188
latitude <- 4
SP <- 35
t <- 10
p <- 1000
SA <- gsw::gsw_SA_from_SP(SP, p, longitude, latitude)
CT <- gsw::gsw_CT_from_t(SA, t, p)
# Test density.
rhoGSW <- gsw::gsw_rho(SA, CT, p)
rho <- swRho(SP, t, p, longitude, latitude, eos = "gsw")
expect_equal(rhoGSW, rho)
# Now use density to test sigma (not provided by gsw).
sigma <- swSigma(SP, t, p, longitude, latitude, eos = "gsw")
expect_equal(rhoGSW - 1000, sigma)
# The following was hard-coded using values from GSW3.03, and it failed with GSW3.05.
expect_equal(30.818302, swSigma(35, T90fromT68(13), 1000, eos = "unesco"), tolerance = 0.000001)
# The sigmaT tests are not from definitive test values, but only provide a check
# against future changes.
expect_equal(swSigmaT(35, T90fromT68(13), 1000, eos = "unesco"), 26.393538, tolerance = 0.000001)
# Tests from issue 1904
data(section)
stn <- section[["station", 100]] # 4.3km deep
# Ensure that the sigmaTheta is the same whether called directly or with [[
expect_equal(swSigmaTheta(stn, eos = "unesco"), stn[["sigmaTheta", "unesco"]])
expect_equal(swSigmaTheta(stn, eos = "gsw"), stn[["sigmaTheta", "gsw"]])
# The oceEOS option must be obeyed.
options(oceEOS = "unesco")
expect_equal(stn[["sigmaTheta"]], stn[["sigma0", "unesco"]])
options(oceEOS = "gsw")
# (before issue1933) expect_equal(stn[["sigmaTheta"]], stn[["sigma0", "gsw"]])
expect_false(identical(stn[["sigmaTheta"]], stn[["sigma0", "gsw"]]))
# sigmaTheta and sigma0 should match within each EOS.
expect_equal(stn[["sigmaTheta", "unesco"]], stn[["sigma0", "unesco"]])
# (before issue1933) expect_equal(stn[["sigmaTheta", "gsw"]], stn[["sigma0", "gsw"]])
expect_false(identical(stn[["sigmaTheta", "gsw"]], stn[["sigma0", "gsw"]]))
# sigmaTheta and sigma0 ([[ form) should not match between unesco and gsw
expect_false(identical(stn[["sigmaTheta", "gsw"]], stn[["sigmaTheta", "unesco"]]))
expect_false(identical(stn[["sigma0", "gsw"]], stn[["sigma0", "unesco"]]))
# sigmaTheta and sigma0 (function form) should not match between unesco and gsw
expect_false(identical(swSigmaTheta(stn, eos = "unesco"), swSigmaTheta(stn, eos = "gsw")))
expect_false(identical(swSigma0(stn, eos = "unesco"), swSigma0(stn, eos = "gsw")))
})
test_that("potential_temperature (UNESCO)", {
# 2.1 UNESCO potential temperature
#
# The following is an official test value from [1 p44], first with all args,
# second with a ctd object as an arg. Note the need to convert to the 1968
# temperature scale, which was used in the UNESCO formulation.
expect_equal(swTheta(40, T90fromT68(40), 10000, eos = "unesco"),
T90fromT68(36.89073),
tolerance = 0.00002
)
expect_equal(swTheta(as.ctd(40, T90fromT68(40), 10000), eos = "unesco"),
T90fromT68(36.89073),
tolerance = 0.00002
)
# Test self-consistency at the surface (also a test of vector reframing)
tem <- 10 + rnorm(50)
expect_equal(0, sum(abs(tem - swTheta(rep(35, 50), tem, 0, eos = "unesco"))))
})
test_that("SA and CT, sound speed (GSW)", {
# 2.2 GSW potential temperature
#
# Since gsw_ functions are tested in the gsw package, we just need a consistency check.
SP <- 35
t <- 13 # notation in gsw_...() functions
p <- 1000
lon <- 300
lat <- 30
ctd <- as.ctd(SP, t, p, longitude = lon, latitude = lat)
SA <- gsw::gsw_SA_from_SP(SP, p, longitude = lon, latitude = lat)
thetaGSW <- gsw::gsw_pt_from_t(SA, t, p, p_ref = 0)
theta <- swTheta(ctd, eos = "gsw")
expect_equal(thetaGSW, theta)
CT <- gsw::gsw_CT_from_t(SA = SA, t = t, p = p)
expect_equal(SA, swAbsoluteSalinity(salinity = SP, pressure = p, longitude = lon, latitude = lat))
expect_equal(SA, swAbsoluteSalinity(ctd))
expect_equal(CT, swConservativeTemperature(salinity = SP, temperature = t, pressure = p, longitude = lon, latitude = lat))
expect_equal(CT, swConservativeTemperature(ctd))
expect_equal(1731.995, swSoundSpeed(40, T90fromT68(40), 1e4, eos = "unesco"), tolerance = 0.001)
expect_equal(1731.995, swSoundSpeed(as.ctd(40, T90fromT68(40), 1e4), eos = "unesco"), tolerance = 0.001)
SA <- gsw::gsw_SA_from_SP(SP = 40, p = 1e4, longitude = 300, latitude = 30)
CT <- gsw::gsw_CT_from_t(SA, 40, 1e4)
speedGSW <- gsw::gsw_sound_speed(SA, CT, 1e4)
speed <- swSoundSpeed(salinity = 40, temperature = 40, pressure = 1e4, longitude = 300, latitude = 30, eos = "gsw")
expect_equal(speedGSW, speed)
})
test_that("temperature scales", {
expect_equal(10, T68fromT90(T90fromT68(10)))
})
test_that("freezing temperature", {
# 5.1 UNESCO freezing temperature [1 p29]
Tf <- swTFreeze(40, 500, eos = "unesco")
expect_equal(Tf, T90fromT68(-2.588567), tolerance = 1e-6)
# 5.2 GSW freezing temperature. This is actually just a test that
# the GSW functions are called correctly -- it is *not* using
# check values. However, we don't have to worry about check
# values, because in the gsw package test suite, there are multiple
# tests that check values against those published on the GSW/TEOS10
# website.
SA <- gsw::gsw_SA_from_SP(SP = 40, p = 500, longitude = 300, latitude = 30)
TfGSW <- gsw::gsw_t_freezing(SA = SA, p = 500, saturation_fraction = 1)
Tf <- swTFreeze(40, 500, longitude = 300, latitude = 30, eos = "gsw")
expect_equal(TfGSW, Tf)
})
test_that("specific heat", {
# [1 p31]
p <- 1e4
t <- 40
SP <- 40
lon <- 300
lat <- 30
C <- swSpecificHeat(salinity = SP, temperature = T90fromT68(t), pressure = p, eos = "unesco")
expect_equal(C, 3849.499, tolerance = 1e-3)
SA <- gsw::gsw_SA_from_SP(SP = SP, p = p, longitude = lon, latitude = lat)
CGSW <- gsw::gsw_cp_t_exact(SA = SA, t = t, p = p)
C <- swSpecificHeat(salinity = SP, temperature = t, pressure = p, longitude = lon, latitude = lat, eos = "gsw")
expect_equal(CGSW, C)
})
test_that("lapse rate", {
# [1 p38]
SP <- 40
t <- 40
p <- 1e4
l <- swLapseRate(salinity = SP, temperature = T90fromT68(t), pressure = p, eos = "unesco")
expect_equal(l, 3.255976e-4, tolerance = 1e-7)
lon <- 300
lat <- 30
SA <- gsw::gsw_SA_from_SP(SP = SP, p = p, longitude = lon, latitude = lat)
CT <- gsw::gsw_CT_from_t(SA = SA, t = t, p = p)
lGSW <- 1e4 * gsw::gsw_adiabatic_lapse_rate_from_CT(SA = SA, CT = CT, p = p) # convert to deg/m
l <- swLapseRate(salinity = SP, temperature = t, pressure = p, longitude = lon, latitude = lat, eos = "gsw")
expect_equal(lGSW, l)
})
test_that("alpha and beta", {
# 8 alpha and beta
# 8.1 UNESCO alpha and beta
# The formulae used are not actually from UNESCO, but are rather given in [2],
# and the test values come from [2] also.
#
# Since [2] gives formula is in terms of theta=10C, we must compute the
# corresponding in-situ temperature first. Use S=40 and 4000dbar to match
# his check value.
tem <- uniroot(function(x) 10 - swTheta(40, x, 4000, eos = "unesco"), c(9, 12))$root
# The beta=7.2088e-4 value is from the last sentence of McDougall's Appendix.
expect_equal(7.2088e-4, swBeta(40, tem, 4000, eos = "unesco"), tolerance = 4e-8)
# The alpha/beta=0.34763 is from the left-hand column of McDougall's p1964.
expect_equal(0.34763, swAlphaOverBeta(40, tem, 4000, eos = "unesco"), tolerance = 2e-5)
expect_equal(0.34763 * 7.20883e-4, swAlpha(40, tem, 4000, eos = "unesco"), tolerance = 2e-5)
# 8.1 GSW alpha and beta
# Check against gsw_ values, which we know to be correct from the gsw test suite.
SP <- 40
t <- 10
p <- 4000
lon <- 300
lat <- 30
a <- swAlpha(SP, t, p, longitude = lon, latitude = lat, eos = "gsw")
b <- swBeta(SP, t, p, longitude = lon, latitude = lat, eos = "gsw")
SA <- gsw::gsw_SA_from_SP(SP = SP, p = p, longitude = lon, latitude = lat)
CT <- gsw::gsw_CT_from_t(SA = SA, t = t, p = p)
aGSW <- gsw::gsw_alpha(SA = SA, CT = CT, p = p)
expect_equal(a, aGSW)
bGSW <- gsw::gsw_beta(SA = SA, CT = CT, p = p)
expect_equal(b, bGSW)
# 8.2 swAlphaOverBeta
# Ensure that alpha, beta, and alpha/beta are consistent, in both EOS
sal <- 34
tem <- 10
pre <- 100
expect_equal(
swAlphaOverBeta(sal, tem, pre, longitude = 300, latitude = 30, eos = "gsw"),
swAlpha(sal, tem, pre, longitude = 300, latitude = 30, eos = "gsw") /
swBeta(sal, tem, pre, longitude = 300, latitude = 30, eos = "gsw")
)
expect_equal(
swAlphaOverBeta(sal, tem, pre, eos = "unesco"),
swAlpha(sal, tem, pre, eos = "unesco") /
swBeta(sal, tem, pre, eos = "unesco")
)
})
test_that("swSTrho", {
# 9. swSTrho
# This is used to draw isopycnals on TS diagrams.
tem <- 10
rho <- 1022
pre <- 0
# 9.1 UNESCO swSTrho
Su <- swSTrho(T90fromT68(tem), rho, pre, eos = "unesco")
# Next was 28.65114808083 before issue 2044, but the precision
# of the calculation was increased then, so a new check value
# is needed here. The relative difference is 1.7e-7, so
# certainly not a concern, but we want this test suite to
# check on changes to the code, in addition to checking
# on test values reflecting external knowledge.
expect_equal(Su, 28.6511432379484)
expect_equal(rho, swRho(Su, T90fromT68(tem), 0, eos = "unesco"))
# 9.2 GSW swSTrho
CT <- gsw::gsw_CT_from_t(Su, tem, pre)
Sg <- swSTrho(CT, rho, pre, eos = "gsw")
expect_equal(gsw::gsw_rho(Sg, CT, pre), rho)
})
test_that("misc sw calculations", {
# The following was hard-coded using values from GSW3.03, and it failed with GSW3.05.
# expect_equal(Sg, 28.7842812841013,tolerance=1e-8)
tem <- swTSrho(35, 23, 0, eos = "unesco") # 26.11301
# As above, the check value was changed in addressing issue
# 2044. The old value was 26.1130113601685, which has
# relative difference of 1.1e-6 compared to the new value. Note
# that the value differs because tem differs, reflecting the
# change in swTSrho(); there is no change to T68fromT90().
expect_equal(T68fromT90(tem), 26.1130395531654, tolerance = 1e-8)
expect_equal(swRho(35, tem, 0, eos = "unesco"), 1023, tolerance = 1e-5)
})
test_that("sound absorption", {
# Compared with Table IV of Fisher & Simmons 1977.
alpha <- swSoundAbsorption(100e3, 35, 4, 4990) # at 500 atm (4990 dbar of water)
expect_equal(alpha, 0.0175, tolerance = 0.01) # 1% test
alpha <- swSoundAbsorption(10e3, 35, 4, 0) # expect 0.00083 at 1 atm (0dbar of water)
expect_equal(alpha, 0.000829, tolerance = 0.01) # 1% test
})
test_that("viscosity", {
# This is just a test against future changes, for
# the original reference did not provide a test value.
expect_equal(1000 * swViscosity(30, 10), 1.383779, tolerance = 0.000002)
})
test_that("thermal conductivity", {
# Caldwell 1975 table 1 gives 4 digits, i.e. to 1e-6
joulePerCalorie <- 4.18400
cmPerM <- 100
test <- swThermalConductivity(31.5, 10, 1000) / joulePerCalorie / cmPerM
expect_equal(1000 * test, 1.478, tolerance = 0.001)
})
test_that("electrical conductivity: definitional check values", {
expect_equal(swCSTp(35, T90fromT68(15), 0, eos = "unesco"), 1)
expect_equal(swCSTp(35, T90fromT68(15), 0, eos = "gsw"), 1)
expect_equal(swSCTp(1, T90fromT68(15), 0, eos = "unesco"), 35)
expect_equal(swSCTp(1, T90fromT68(15), 0, eos = "gsw"), 35)
expect_equal(
swSCTp(0.5, 10, 100, eos = "unesco"),
swSCTp(0.5, 10, 100, eos = "gsw")
)
# These test values are not against a known standard; rather, they simply
# assure that there has been no change since a test done on 2019 Mar 23
# whilst working on issue https://github.com/dankelley/oce/issues/1514
expect_equal(swSCTp(0.02, 10, 100, eos = "gsw"), 0.601398102117915)
expect_equal(swSCTp(0.02, 10, 100, eos = "unesco"), 0.601172086373874)
})
test_that("electrical conductivity: semi-definitional check values (AUTHOR IS CONFUSED ON THESE)", {
# the C=1 value can be tested directly in gsw, but others are tested against gsw.
SP <- swSCTp(1.2, T90fromT68(20), 2000, eos = "gsw")
expect_equal(1.2, gsw::gsw_C_from_SP(SP, T90fromT68(20), 2000) / gsw::gsw_C_from_SP(35, T90fromT68(15), 0))
SP <- swSCTp(0.65, T90fromT68(5), 1500, eos = "gsw")
expect_equal(0.65, gsw::gsw_C_from_SP(SP, T90fromT68(5), 1500) / gsw::gsw_C_from_SP(35, T90fromT68(15), 0))
})
test_that("electrical conductivity: real-data checks", {
data(ctd)
# This does not have conductivity, so add it
salinity <- ctd[["salinity"]]
temperature <- ctd[["temperature"]]
pressure <- ctd[["pressure"]]
conductivity <- swCSTp(salinity, temperature, pressure, eos = "unesco")
ctd <- oceSetData(ctd, name = "conductivity", value = conductivity, unit = list(unit = expression(), scale = ""))
S <- swSCTp(ctd)
expect_equal(S, salinity, tolerance = 1e-3)
# Test that swCSTp() takes both salinity and CTD [issue 630]
cond1 <- swCSTp(salinity, temperature, pressure, eos = "unesco")
cond2 <- swCSTp(ctd)
expect_equal(cond1, cond2)
})
test_that("depth and pressure", {
# 14. depth and pressure
# The UNESCO test is basically for consistency with old versions, I think,
# but the GSW test is against gsw_z_from_p(), which is well-tested in
# the building of the gsw package.
depth <- swDepth(10000, 30, eos = "unesco")
expect_equal(depth, 9712.653, tolerance = 0.001)
depth <- swDepth(10000, 30, eos = "gsw")
expect_equal(depth, 9713.735, tolerance = 0.001)
pressure <- swPressure(9712.653, 30, eos = "unesco")
expect_equal(pressure, 10000., tolerance = 0.001)
pressure <- swPressure(9712.653, 30, eos = "gsw")
expect_equal(pressure, gsw::gsw_p_from_z(-9712.653, 30), tolerance = 0.001)
})
test_that("spiciness", {
expect_error(swSpice(35, T90fromT68(10), 100, eos = "gsw"), "must supply longitude")
# Q: is this test value from Flament's paper, or is it just a consistency check?
sp <- swSpice(35, T90fromT68(10), 100, eos = "unesco")
expect_equal(sp, 1.131195, tolerance = 0.0000015)
# compare against direct gsw:: computation
data(ctd)
sal <- ctd[["salinity"]]
tem <- ctd[["temperature"]]
pre <- ctd[["pressure"]]
lon <- rep(ctd[["longitude"]], length(sal))
lat <- rep(ctd[["latitude"]], length(sal))
piOce <- swSpice(sal, tem, pre, longitude = lon, latitude = lat, eos = "gsw")
piGsw <- gsw::gsw_spiciness0(ctd[["SA"]], ctd[["CT"]])
expect_equal(piOce, piGsw)
piGsw0 <- swSpiciness0(ctd)
expect_equal(swSpiciness0(ctd), gsw::gsw_spiciness0(ctd[["SA"]], ctd[["CT"]]))
expect_equal(swSpiciness1(ctd), gsw::gsw_spiciness1(ctd[["SA"]], ctd[["CT"]]))
expect_equal(swSpiciness2(ctd), gsw::gsw_spiciness2(ctd[["SA"]], ctd[["CT"]]))
})
test_that("CTD object accessors for derived properties", {
data(ctd)
sigma0 <- swSigma0(ctd[["salinity"]], ctd[["temperature"]], ctd[["pressure"]],
longitude = ctd[["longitude"]], latitude = ctd[["latitude"]]
)
sigmaTheta <- swSigmaTheta(ctd[["salinity"]], ctd[["temperature"]], ctd[["pressure"]],
longitude = ctd[["longitude"]], latitude = ctd[["latitude"]]
)
spice <- swSpice(ctd[["salinity"]], ctd[["temperature"]], ctd[["pressure"]],
longitude = ctd[["longitude"]], latitude = ctd[["latitude"]], eos = "unesco"
)
sigmaTheta <- swSigmaTheta(ctd)
expect_equal(sigma0, ctd[["sigma0"]])
expect_equal(sigmaTheta, ctd[["sigmaTheta"]])
expect_equal(spice, ctd[["spice", "unesco"]])
expect_equal(sigma0, swSigma0(ctd))
expect_equal(sigmaTheta, swSigmaTheta(ctd))
expect_equal(spice, swSpice(ctd, eos = "unesco"))
})
test_that("non-CTD object accessors for derived properties", {
data(ctd)
sigma0 <- swSigma0(ctd)
sigmaTheta <- swSigmaTheta(ctd)
spice <- swSpice(ctd, eos = "unesco")
general <- new("oce")
general <- oceSetData(general, "temperature", ctd[["temperature"]])
general <- oceSetData(general, "salinity", ctd[["salinity"]])
general <- oceSetData(general, "pressure", ctd[["pressure"]])
general <- oceSetMetadata(general, "longitude", ctd[["longitude"]])
general <- oceSetMetadata(general, "latitude", ctd[["latitude"]])
# Test whether [[ works on the three special-case derived quantities (see
# R/sw.R near line 363 for how '[[' intercepts these three things at the
# deep level for oce objects, as opposed to CTD objects).
expect_equal(sigma0, general[["sigma0"]])
expect_equal(sigma0, swSigma0(general))
expect_equal(sigmaTheta, general[["sigmaTheta"]])
expect_equal(sigmaTheta, swSigmaTheta(general))
expect_equal(spice, general[["spice", "unesco"]])
expect_equal(spice, swSpice(general, eos = "unesco"))
})
test_that("swRho handles matrix and array data", {
data(ctd)
lon <- ctd[["longitude"]]
lat <- ctd[["latitude"]]
sal <- ctd[["salinity"]][1:20]
tem <- ctd[["temperature"]][1:20]
pre <- ctd[["pressure"]][1:20]
Sm <- matrix(sal, nrow = 10)
Tm <- matrix(tem, nrow = 10)
pm <- matrix(pre, nrow = 10)
Sa <- array(sal, dim = c(2, 2, 5))
Ta <- array(tem, dim = c(2, 2, 5))
pa <- array(pre, dim = c(2, 2, 5))
# unesco equation of state
rho <- swRho(sal, tem, pre, eos = "unesco")
expect_equal(
swRho(Sm, Tm, pm, eos = "unesco"),
matrix(rho, nrow = 10)
)
expect_equal(
swRho(Sa, Ta, pa, eos = "unesco"),
array(rho, dim = c(2, 2, 5))
)
# gsw equation of state
rho <- swRho(sal, tem, pre, longitude = lon, latitude = lat, eos = "gsw")
expect_equal(
swRho(Sm, Tm, pm, longitude = lon, latitude = lat, eos = "gsw"),
matrix(rho, nrow = 10)
)
expect_equal(
swRho(Sa, Ta, pa, longitude = lon, latitude = lat, eos = "gsw"),
array(rho, dim = c(2, 2, 5))
)
})
test_that("sigma0 works as expected (issue 1933)", {
# https://github.com/dankelley/oce/issues/1933
data(section)
ctd <- section[["station", 100]]
sigma0 <- ctd[["sigma0", "gsw"]]
CT <- ctd[["CT"]]
SA <- ctd[["SA"]]
sigma0direct <- gsw_sigma0(SA = SA, CT = CT)
expect_equal(sigma0, sigma0direct)
})
test_that("ctd[[X]] and swX(ctd) agree on CTD, after changes for Argo (issue 2207)", {
library(oce)
data(ctd)
expect_equal(ctd[["SA"]], swAbsoluteSalinity(ctd))
expect_equal(ctd[["CT"]], swConservativeTemperature(ctd))
expect_equal(ctd[["sigma0"]], swSigma0(ctd))
expect_equal(ctd[["sigma1"]], swSigma1(ctd))
expect_equal(ctd[["sigma2"]], swSigma2(ctd))
expect_equal(ctd[["sigma3"]], swSigma3(ctd))
expect_equal(ctd[["sigma4"]], swSigma4(ctd))
expect_equal(ctd[["sigmaTheta"]], swSigmaTheta(ctd))
expect_equal(ctd[["N2"]], swN2(ctd))
expect_equal(ctd[["density"]], swRho(ctd))
expect_equal(ctd[["spice", "unesco"]], swSpice(ctd, eos = "unesco"))
expect_equal(ctd[["spice", "gsw"]], swSpice(ctd, eos = "gsw"))
expect_equal(ctd[["spiciness0"]], swSpiciness0(ctd))
expect_equal(ctd[["spiciness0"]], swSpiciness0(ctd))
expect_equal(ctd[["spiciness1"]], swSpiciness1(ctd))
expect_equal(ctd[["spiciness2"]], swSpiciness2(ctd))
expect_equal(ctd[["depth"]], swDepth(ctd))
expect_equal(ctd[["z"]], swZ(ctd))
expect_equal(ctd[["SR"]], swSR(ctd))
expect_equal(ctd[["Sstar"]], swSstar(ctd))
expect_equal(ctd[["Rrho"]], swRrho(ctd))
expect_equal(ctd[["sound speed"]], swSoundSpeed(ctd))
expect_equal(ctd[["theta"]], swTheta(ctd))
})
test_that("argo[[X]] and swX(argo) agree (issue 2207)", {
data(argo)
expect_equal(argo[["SA"]], swAbsoluteSalinity(argo))
expect_equal(argo[["CT"]], swConservativeTemperature(argo))
expect_equal(argo[["sigma0"]], swSigma0(argo))
expect_equal(argo[["sigma1"]], swSigma1(argo))
expect_equal(argo[["sigma2"]], swSigma2(argo))
expect_equal(argo[["sigma3"]], swSigma3(argo))
expect_equal(argo[["sigma4"]], swSigma4(argo))
expect_equal(argo[["sigmaTheta"]], swSigmaTheta(argo))
expect_equal(argo[["N2"]], swN2(argo))
expect_equal(argo[["density"]], swRho(argo))
expect_equal(argo[["spice", "unesco"]], swSpice(argo, eos = "unesco"))
expect_equal(argo[["spice", "gsw"]], swSpice(argo, eos = "gsw"))
expect_equal(argo[["spiciness0"]], swSpiciness0(argo))
expect_equal(argo[["spiciness1"]], swSpiciness1(argo))
expect_equal(argo[["spiciness2"]], swSpiciness2(argo))
expect_equal(argo[["depth"]], swDepth(argo))
expect_equal(argo[["z"]], swZ(argo))
expect_equal(argo[["SR"]], swSR(argo))
expect_equal(argo[["Sstar"]], swSstar(argo))
expect_equal(argo[["Rrho"]], swRrho(argo))
expect_equal(argo[["sound speed"]], swSoundSpeed(argo))
expect_equal(argo[["theta"]], swTheta(argo))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.