JaiaBot 2.0.0
JaiaBot micro-AUV software
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Loading...
Searching...
No Matches
dissolved_oxygen_compensation.h
Go to the documentation of this file.
1#include <cmath>
2
20double pressure_correction(double pressure_mmhg = 760.0) { return pressure_mmhg / 760.0; }
21
34double salinity_correction(double temperature_k, double salinity_ppt)
35{
36 // base salinity correction
37 const double sal_corr_a = 0.017674;
38 // adjusts salinity correction based on temperature
39 const double sal_corr_b = 10.754;
40 // quadratic temp-based adjustment to salinity effect
41 const double sal_corr_c = 2140.7;
42
43 return std::exp(-salinity_ppt * (sal_corr_a - (sal_corr_b / temperature_k) +
44 (sal_corr_c / (temperature_k * temperature_k))));
45}
46
60double calculate_do_saturation_fresh(double temperature_k)
61{
62 // Constants from Weiss (1970), Equation (7) in USGS WQ.2011.03
63 const double a0 = -173.4292;
64 const double a1 = 249.6339;
65 const double a2 = 143.3483;
66 const double a3 = -21.8492;
67 const double oxygen_conversion = 1.42905; // mL/L to mg/L at STP
68 const double temp_scale = 100.0;
69
70 double scaled_temp = temperature_k / temp_scale;
71
72 double ln_do =
73 a0 + a1 * (temp_scale / temperature_k) + a2 * std::log(scaled_temp) + a3 * scaled_temp;
74
75 return oxygen_conversion * std::exp(ln_do);
76}
77
98double calculate_dissolved_oxygen_solubility(double temperature_celsius, double salinity_ppt,
99 double pressure_mmhg = 760.0)
100{
101 const double kelvin_offset = 273.15;
102 double temperature_k = temperature_celsius + kelvin_offset;
103 double do_saturation = calculate_do_saturation_fresh(temperature_k);
104 double salinity_factor = salinity_correction(temperature_k, salinity_ppt);
105 double pressure_factor = pressure_correction(pressure_mmhg);
106
107 return do_saturation * salinity_factor * pressure_factor;
108}
109
124double calculate_do_saturation_percent(double do_raw, double do_max)
125{
126 return (do_raw / do_max) * 100.0;
127}
double salinity_correction(double temperature_k, double salinity_ppt)
Computes the salinity correction factor for dissolved oxygen solubility.
double calculate_do_saturation_fresh(double temperature_k)
Calculates the saturation concentration of dissolved oxygen in freshwater at 1 atm and 0 ppt salinity...
double calculate_dissolved_oxygen_solubility(double temperature_celsius, double salinity_ppt, double pressure_mmhg=760.0)
Calculates the dissolved oxygen (DO) solubility in mg/L, corrected for temperature,...
double calculate_do_saturation_percent(double do_raw, double do_max)
Calculates dissolved oxygen (DO) percent saturation.
double pressure_correction(double pressure_mmhg=760.0)
Approximates the effect of barometric pressure on dissolved oxygen (DO) solubility.