JaiaBot  1.20.0
JaiaBot micro-AUV software
derived_salinity.h
Go to the documentation of this file.
1 #include <math.h>
2 
3 double calculate_derived_salinity(const double measured_conductivity, const double temperature,
4  const double pressure)
5 {
6  // Calculate salinity given measured conductivity, temperature, and pressure.
7 
8  // Params:
9  // measured_conductivity: {double} measured conductivity in μS/cm
10  // temperature: {double} temperature in deg C
11  // pressure: {double} pressure in decibars
12 
13  // Returns:
14  // {double} salinity in PSU (ppt)
15 
16  // Notes:
17  // URL: https://repository.oceanbestpractices.org/bitstream/handle/11329/109/059832eb.pdf?sequence=1&isAllowed=y
18 
19  // Salinity constants
20  const double a0 = 0.0080;
21  const double a1 = -0.1692;
22  const double a2 = 25.3851;
23  const double a3 = 14.0941;
24  const double a4 = -7.0261;
25  const double a5 = 2.7081;
26 
27  const double b0 = 0.0005;
28  const double b1 = -0.0056;
29  const double b2 = -0.0066;
30  const double b3 = -0.0375;
31  const double b4 = 0.0636;
32  const double b5 = -0.0144;
33 
34  const double c0 = 0.6766097;
35  const double c1 = 2.00564e-2;
36  const double c2 = 1.104259e-4;
37  const double c3 = -6.9698e-7;
38  const double c4 = 1.0031e-9;
39 
40  const double d0 = 3.426e-2;
41  const double d1 = 4.464e-4;
42  const double d2 = 4.215e-1;
43  const double d3 = -3.107e-3;
44 
45  const double e0 = 2.070e-5;
46  const double e1 = -6.370e-10;
47  const double e2 = 3.989e-15;
48 
49  const double k = 0.0162;
50 
51  const double standard_conductivity = 42914;
52 
53  // Salinity calculations
54  const double R = round((measured_conductivity / standard_conductivity) * 100.0) / 100.0;
55  const double t = temperature;
56  const double p = pressure;
57 
58  const double Rp = 1 + (p * (e0 + (e1 * p) + (e2 * p * p))) /
59  (1 + (d0 * t) + (d1 * t * t) + (d2 + (d3 * t)) * R);
60  const double rt = c0 + (c1 * t) + (c2 * t * t) + (c3 * t * t * t) + (c4 * pow(t, 4));
61  const double Rt = R / (Rp * rt);
62  const double dS = (t - 15) *
63  (b0 + (b1 * sqrt(Rt)) + (b2 * Rt) + (b3 * pow(Rt, 1.5)) + (b4 * Rt * Rt) +
64  (b5 * pow(Rt, 2.5))) /
65  (1 + k * (t - 15));
66 
67  const double S = a0 + (a1 * sqrt(Rt)) + (a2 * Rt) + (a3 * pow(Rt, 1.5)) + (a4 * Rt * Rt) +
68  (a5 * pow(Rt, 2.5)) + dS;
69 
70  return S;
71 }
double calculate_derived_salinity(const double measured_conductivity, const double temperature, const double pressure)