Jpp test-rotations-old
the software that should make you happy
Loading...
Searching...
No Matches
JUNESCO.hh
Go to the documentation of this file.
1#ifndef __JACOUSTICS__JUNESCO__
2#define __JACOUSTICS__JUNESCO__
3
4#include "JMath/JConstants.hh"
5
6/**
7 * \file
8 *
9 * Sound velocity according UNESCO equation.
10 * \author mdejong
11 */
12namespace JACOUSTICS {}
13namespace JPP { using namespace JACOUSTICS; }
14
15namespace JACOUSTICS {
16
17 using JMATH::PI;
18
19 /**
20 * Get gravitational constant.
21 *
22 * \param phi latitude [deg]
23 * \return g [m/s^2]
24 */
25 inline double getGravity(const double phi)
26 {
27 const double sd = sin(phi * PI / 180.0);
28 const double s2 = sd*sd;
29 const double s4 = s2*s2;
30
31 return 9.780318 * (1.0 + 5.2788e-3*s2 + 2.36e-5*s4);
32 }
33
34
35 /**
36 * Get sound velocity.
37 *
38 * K.V. Mackenzie, Nine-term equation for the sound speed in the oceans (1981)\n
39 * J. Acoust. Soc. Am. 70(3), pp 807-812
40 *
41 * \param D depth [m]
42 * \param S salinity [ppk]
43 * \param T temperature [C]
44 * \return sound velocity [m/s]
45 */
46 inline double getVelocityMackenzie(const double D, const double S, const double T)
47 {
48 return (1448.96
49 + 4.591 * T
50 - 5.304e-2 * T*T
51 + 2.374e-4 * T*T*T
52 + 1.340 * (S - 35)
53 + 1.630e-2 * D
54 + 1.675e-7 * D*D
55 - 1.025e-2 * T * (S - 35)
56 - 7.139e-13 * T*D*D*D);
57 }
58
59
60 /**
61 * Get sound velocity.
62 *
63 * A.B. Coppens, Simple equations for the speed of sound in Neptunian waters (1981)\n
64 * J. Acoust. Soc. Am. 69(3), pp 862-863
65 *
66 * \param D depth [m]
67 * \param S salinity [ppk]
68 * \param T temperature [C]
69 * \return sound velocity [m/s]
70 */
71 inline double getVelocityCoppens(const double D, const double S, const double T)
72 {
73 const double t = T * 0.1;
74 const double d = D * 1.0e-3;
75 const double c = 1449.05 + 45.7 * t - 5.21 * t*t + 0.23 * t*t*t + (1.333 - 0.126*t + 0.009 * t*t)*(S - 35);
76
77 return (c +
78 (16.23 + 0.253*t) * d +
79 (0.213 - 0.1*t) * d*d +
80 (0.016 + 0.0002*(S-35))*(S - 35)*t*d);
81 }
82
83
84 /**
85 * Get sound velocity.
86 *
87 * C-T. Chen and F.J. Millero, Speed of sound in seawater at high pressures (1977)\n
88 * J. Acoust. Soc. Am. 62(5) pp 1129-1135
89 *
90 * \param P pressure [bar]
91 * \param S salinity [ppk]
92 * \param T temperature [C]
93 * \return sound velocity [m/s]
94 */
95 inline double getVelocityUNESCO(const double P, const double S, const double T)
96 {
97 const double A00 = 1.389;
98 const double A01 = -1.262E-2;
99 const double A02 = 7.166E-5;
100 const double A03 = 2.008E-6;
101 const double A04 = -3.21E-8;
102 const double A10 = 9.4742E-5;
103 const double A11 = -1.2583E-5;
104 const double A12 = -6.4928E-8;
105 const double A13 = 1.0515E-8;
106 const double A14 = -2.0142E-10;
107 const double A20 = -3.9064E-7;
108 const double A21 = 9.1061E-9;
109 const double A22 = -1.6009E-10;
110 const double A23 = 7.994E-12;
111 const double A30 = 1.100E-10;
112 const double A31 = 6.651E-12;
113 const double A32 = -3.391E-13;
114 const double B00 = -1.922E-2;
115 const double B01 = -4.42E-5;
116 const double B10 = 7.3637E-5;
117 const double B11 = 1.7950E-7;
118 const double C00 = 1402.388;
119 const double C01 = 5.03830;
120 const double C02 = -5.81090E-2;
121 const double C03 = 3.3432E-4;
122 const double C04 = -1.47797E-6;
123 const double C05 = 3.1419E-9;
124 const double C10 = 0.153563;
125 const double C11 = 6.8999E-4;
126 const double C12 = -8.1829E-6;
127 const double C13 = 1.3632E-7;
128 const double C14 = -6.1260E-10;
129 const double C20 = 3.1260E-5;
130 const double C21 = -1.7111E-6;
131 const double C22 = 2.5986E-8;
132 const double C23 = -2.5353E-10;
133 const double C24 = 1.0415E-12;
134 const double C30 = -9.7729E-9;
135 const double C31 = 3.8513E-10;
136 const double C32 = -2.3654E-12;
137 const double D00 = 1.727E-3;
138 const double D10 = -7.9836E-6;
139
140 const double T2 = T * T;
141 const double T3 = T2 * T;
142 const double T4 = T3 * T;
143 const double T5 = T4 * T;
144
145 const double P2 = P * P;
146 const double P3 = P2 * P;
147
148 const double Cw =
149 (C00 + C01 * T + C02 * T2 + C03 * T3 + C04 * T4 + C05 * T5) +
150 (C10 + C11 * T + C12 * T2 + C13 * T3 + C14 * T4) * P +
151 (C20 + C21 * T + C22 * T2 + C23 * T3 + C24 * T4) * P2 +
152 (C30 + C31 * T + C32 * T2) * P3;
153
154 const double A =
155 (A00 + A01 * T + A02 * T2 + A03 * T3 + A04 * T4) +
156 (A10 + A11 * T + A12 * T2 + A13 * T3 + A14 * T4) * P +
157 (A20 + A21 * T + A22 * T2 + A23 * T3) * P2 +
158 (A30 + A31 * T + A32 * T2) * P3;
159
160 const double B = B00 + B01 * T + (B10 + B11 * T) * P;
161
162 const double D = D00 + D10 * P;
163
164 return Cw + A*S + B*S*sqrt(S) + D*S*S;
165 }
166
167
168 /**
169 * Get sound velocity.
170 *
171 * V.A. Del Grosso, New equation for the speed of sound in natural waters (with comparisons to other equations) (1974)\n
172 * J. Acoust. Soc. Am 56(4) pp 1084-1091
173 *
174 * G.S.K. Wong and S Zhu, Speed of sound in seawater as a function of salinity, temperature and pressure (1995)\n
175 * J. Acoust. Soc. Am. 97(3) pp 1732-1736
176 *
177 * \param p pressure [bar]
178 * \param S salinity [ppk]
179 * \param T temperature [C]
180 * \return sound velocity [m/s]
181 */
182 inline double getVelocityDelGrosso(const double p, const double S, const double T)
183 {
184 const double C000 = 1402.392;
185 const double CT1 = 0.5012285E1;
186 const double CT2 = -0.551184E-1;
187 const double CT3 = 0.221649E-3;
188 const double CS1 = 0.1329530E1;
189 const double CS2 = 0.1288598E-3;
190 const double CP1 = 0.1560592;
191 const double CP2 = 0.2449993E-4;
192 const double CP3 = -0.8833959E-8;
193 const double CST = -0.1275936E-1;
194 const double CTP = 0.6353509E-2;
195 const double CT2P2 = 0.2656174E-7;
196 const double CTP2 = -0.1593895E-5;
197 const double CTP3 = 0.5222483E-9;
198 const double CT3P = -0.4383615E-6;
199 const double CS2P2 = -0.1616745E-8;
200 const double CST2 = 0.9688441E-4;
201 const double CS2TP = 0.4857614E-5;
202 const double CSTP = -0.3406824E-3;
203
204 // 1 bar = 100 kPa = 1.019716 kg/cm^2.
205
206 const double f = 1.019716;
207 const double P = p * f;
208
209 const double T2 = T * T;
210 const double T3 = T2 * T;
211
212 const double S2 = S * S;
213
214 const double P2 = P * P;
215 const double P3 = P2 * P;
216
217 const double DCT = CT1 * T + CT2 * T2 + CT3 * T3;
218 const double DCS = CS1 * S + CS2 * S2;
219 const double DCP = CP1 * P + CP2 * P2 + CP3 * P3;
220 const double DCSTP = CTP * T*P + CT3P * T3*P + CTP2 * T*P2 + CT2P2 * T2*P2 + CTP3 * T*P3 + CST * S*T + CST2 * S*T2 + CSTP * S*T*P + CS2TP * S2*T*P + CS2P2 * S2*P2;
221
222 return C000 + DCT + DCS + DCP + DCSTP;
223 }
224
225
226 /**
227 * Get depth.
228 *
229 * Claude C. Leroy and Francois Parthiot, Depth-pressure relationships in the oceans and seas\n
230 * J. Acoust. Soc. Am. 103(3), pp 1346-1352
231 *
232 * \param P pressure [MPa]
233 * \param phi latitude [deg]
234 * \param option option for Mediterranean
235 * \return depth [m]
236 */
237 inline double getDepth(const double P, const double phi, const bool option = true)
238 {
239 const double sd = sin(phi * PI / 180.0);
240 const double g = 9.780318 * (1.0 + 5.2788e-3 * sd*sd + 2.363e-5 * sd*sd*sd*sd);
241 const double z = (9.72659e2 * P - 2.2512e-1 * P*P + 2.279e-4 * P*P*P - 1.82e-7 * P*P*P*P) / (g + 1.092e-4 * P);
242 const double dz = -7e-2 * P + 2e-3* (P*P);
243
244 return z + (option ? dz : 0.0);
245 }
246
247
248 /**
249 * Get pressure.
250 *
251 * Claude C. Leroy and Francois Parthiot, Depth-pressure relationships in the oceans and seas\n
252 * J. Acoust. Soc. Am. 103(3), pp 1346-1352
253 *
254 * \param z depth [m]
255 * \param phi latitude [deg]
256 * \param option option for Mediterranean
257 * \return pressure [MPa]
258 */
259 inline double getPressure(const double z, const double phi, const bool option = true)
260 {
261 const double sd = sin(phi * PI / 180.0);
262 const double g = 9.78031 * (1.0 + 5.3e-3 * sd*sd);
263 const double h45 = 1.00818e-2 * z + 2.465e-8 * z*z - 1.25e-13 * z*z*z + 2.8e-19 * z*z*z*z;
264 const double k = (g - 2e-5*z) / (9.80612 - 2e-5 * z);
265 const double dp = -8.5e-6 * z + 1.4e-9 * z*z;
266
267 return h45 * k - (option ? dp : 0.0);
268 }
269}
270
271#endif
Mathematical constants.
Auxiliary classes and methods for acoustic position calibration.
double getPressure(const double z, const double phi, const bool option=true)
Get pressure.
Definition JUNESCO.hh:259
double getVelocityDelGrosso(const double p, const double S, const double T)
Get sound velocity.
Definition JUNESCO.hh:182
double getGravity(const double phi)
Get gravitational constant.
Definition JUNESCO.hh:25
double getVelocityCoppens(const double D, const double S, const double T)
Get sound velocity.
Definition JUNESCO.hh:71
double getVelocityMackenzie(const double D, const double S, const double T)
Get sound velocity.
Definition JUNESCO.hh:46
double getDepth(const double P, const double phi, const bool option=true)
Get depth.
Definition JUNESCO.hh:237
double getVelocityUNESCO(const double P, const double S, const double T)
Get sound velocity.
Definition JUNESCO.hh:95
static const double PI
Mathematical constants.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).