Compute seawater "spice", a variable that is in some sense orthogonal to density in TS space. Larger spice values correspond to relative warm and salty water, compared with smaller spice values. Two distinct variants exist. If eos="unesco" then Flament's (2002) formulation is used. If eos="gsw" then gsw::gsw_spiciness0() is used to compute a newer variant that is part of the Gibbs SeaWater formulation (McDougall and Krzysik, 2015). See the “Examples” section for a graphical illustration of the difference in a typical coastal case.

  temperature = NULL,
  pressure = NULL,
  longitude = NULL,
  latitude = NULL,
  eos = getOption("oceEOS", default = "gsw"),
  debug = getOption("oceDebug")



either salinity (PSU) (in which case temperature and pressure must be provided) or a ctd object (in which case salinity, temperature and pressure are determined from the object, and must not be provided in the argument list).


in-situ temperature (\(^\circ\)C) on the ITS-90 scale; see “Temperature units” in the documentation for swRho().


Seawater pressure (dbar) (only used if eos is "gsw"); see “Details”..


longitude of observation (only used if eos is "gsw"; see “Details”).


latitude of observation (only used if eos is "gsw"; see “Details”).


Character value specifying the equation of state, either "unesco" (for the Flament formulation, although this is not actually part of UNESCO) or "gsw" for the Gibbs SeaWater formulation.


an integer specifying whether debugging information is to be printed during the processing. This is a general parameter that is used by many oce functions. Generally, setting debug=0 turns off the printing, while higher values suggest that more information be printed. If one function calls another, it usually reduces the value of debug first, so that a user can often obtain deeper debugging by specifying higher debug values.


Flament-formulated spice \(kg/m^3\) if eos is "unesco"

or surface-referenced GSW spiciness0 \(kg/m^3\) if eos is "gsw", the latter provided by gsw::gsw_spiciness0(), and hence aimed at application within the top half-kilometre of the ocean.


If the first argument is a ctd object, then salinity, temperature and pressure values are extracted from it, and used for the calculation. For the eos="gsw" case, longitude and latitude are also extracted, because these are required by gsw::gsw_spiciness0().

Roughly speaking, seawater with a high spiciness is relatively warm and salty compared with less spicy water. Another interpretation is that spice is a variable measuring distance orthogonal to isopycnal lines on TS diagrams (if the diagrams are scaled to make the isopycnals run at 45 degrees). Note that pressure, longitude and latitude are all ignored in the Flament definition.


  1. Flament, P. “A State Variable for Characterizing Water Masses and Their Diffusive Stability: Spiciness.” Progress in Oceanography, Observations of the 1997-98 El Nino along the West Coast of North America, 54, no. 1 (July 1, 2002):493-501. doi:10.1016/S0079-6611(02)00065-4

  2. McDougall, Trevor J., and Oliver A. Krzysik. “Spiciness.” Journal of Marine Research 73, no. 5 (September 1, 2015): 141-52.


Dan Kelley coded this, merely an interface to the code described by references 1 and 2.


# Compare unesco and gsw formulations
p <- ctd[["pressure"]]
U <- swSpice(ctd, eos = "unesco")
G <- swSpice(ctd, eos = "gsw")
xlim <- range(c(U, G), na.rm = TRUE)
ylim <- rev(range(p))
plot(U, p,
    xlim = xlim, ylim = ylim,
    xlab = "Measure of Spiciness", ylab = "Pressure (dbar)"
points(G, p, col = 2)
legend("topleft", col = 1:2, pch = 1, legend = c("unesco", "gsw"))