35 const gsl_matrix *avk) {
38 atm_t *atm_cont, *atm_res;
43 const size_t n = avk->size1;
46 size_t n0[
NQ], n1[
NQ];
47 for (
int iq = 0; iq <
NQ; iq++) {
49 for (
size_t i = 0; i < n; i++) {
50 if (iqa[i] == iq && n0[iq] ==
N)
53 n1[iq] = i - n0[iq] + 1;
64 for (
int ig = 0; ig < ctl->
ng; ig++)
66 atm_cont->
q[ig], atm_res->
q[ig]);
67 for (
int iw = 0; iw < ctl->
nw; iw++)
69 atm_cont->
k[iw], atm_res->
k[iw]);
74 for (
int icl = 0; icl < ctl->
ncl; icl++)
76 &atm_cont->
clk[icl], &atm_res->
clk[icl]);
79 for (
int isf = 0; isf < ctl->
nsf; isf++)
95 const gsl_matrix *avk,
105 for (
size_t i = 0; i < n1[iq]; i++) {
108 for (
size_t j = 0; j < n1[iq]; j++)
109 cont[ipa[n0[iq] + i]] += gsl_matrix_get(avk, n0[iq] + i, n0[iq] + j);
112 res[ipa[n0[iq] + i]] = 1 / gsl_matrix_get(avk, n0[iq] + i, n0[iq] + i);
128 for (
int ip = 0; ip < atm->
np; ip++)
133 for (
int ip = 0; ip < atm->
np; ip++)
138 for (
int ig = 0; ig < ctl->
ng; ig++)
139 for (
int ip = 0; ip < atm->
np; ip++)
145 for (
int iw = 0; iw < ctl->
nw; iw++)
146 for (
int ip = 0; ip < atm->
np; ip++)
157 for (
int icl = 0; icl < ctl->
ncl; icl++)
164 for (
int isf = 0; isf < ctl->
nsf; isf++)
183 gsl_vector_set(x, *n, value);
199 const double radius =
NORM(x);
201 *lat =
RAD2DEG(asin(x[2] / radius));
202 *lon =
RAD2DEG(atan2(x[1], x[0]));
212 static const double z[121] = {
213 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
214 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
215 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
216 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
217 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
218 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
219 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120
222 static const double pre[121] = {
223 1017, 901.083, 796.45, 702.227, 617.614, 541.644, 473.437, 412.288,
224 357.603, 308.96, 265.994, 228.348, 195.619, 167.351, 143.039, 122.198,
225 104.369, 89.141, 76.1528, 65.0804, 55.641, 47.591, 40.7233, 34.8637,
226 29.8633, 25.5956, 21.9534, 18.8445, 16.1909, 13.9258, 11.9913,
227 10.34, 8.92988, 7.72454, 6.6924, 5.80701, 5.04654, 4.39238, 3.82902,
228 3.34337, 2.92413, 2.56128, 2.2464, 1.97258, 1.73384, 1.52519, 1.34242,
229 1.18197, 1.04086, 0.916546, 0.806832, 0.709875, 0.624101, 0.548176,
230 0.480974, 0.421507, 0.368904, 0.322408, 0.281386, 0.245249, 0.213465,
231 0.185549, 0.161072, 0.139644, 0.120913, 0.104568, 0.0903249, 0.0779269,
232 0.0671493, 0.0577962, 0.0496902, 0.0426736, 0.0366093, 0.0313743,
233 0.0268598, 0.0229699, 0.0196206, 0.0167399, 0.0142646, 0.0121397,
234 0.0103181, 0.00875775, 0.00742226, 0.00628076, 0.00530519, 0.00447183,
235 0.00376124, 0.00315632, 0.00264248, 0.00220738, 0.00184003, 0.00153095,
236 0.00127204, 0.00105608, 0.000876652, 0.00072798, 0.00060492,
237 0.000503201, 0.000419226, 0.000349896, 0.000292659, 0.000245421,
238 0.000206394, 0.000174125, 0.000147441, 0.000125333, 0.000106985,
239 9.173e-05, 7.90172e-05, 6.84172e-05, 5.95574e-05, 5.21183e-05,
240 4.58348e-05, 4.05127e-05, 3.59987e-05, 3.21583e-05, 2.88718e-05,
241 2.60322e-05, 2.35687e-05, 2.14263e-05, 1.95489e-05
244 static const double tem[121] = {
245 285.14, 279.34, 273.91, 268.3, 263.24, 256.55, 250.2, 242.82, 236.17,
246 229.87, 225.04, 221.19, 218.85, 217.19, 216.2, 215.68, 215.42, 215.55,
247 215.92, 216.4, 216.93, 217.45, 218, 218.68, 219.39, 220.25, 221.3,
248 222.41, 223.88, 225.42, 227.2, 229.52, 231.89, 234.51, 236.85, 239.42,
249 241.94, 244.57, 247.36, 250.32, 253.34, 255.82, 258.27, 260.39,
250 262.03, 263.45, 264.2, 264.78, 264.67, 264.38, 263.24, 262.03, 260.02,
251 258.09, 255.63, 253.28, 250.43, 247.81, 245.26, 242.77, 240.38,
252 237.94, 235.79, 233.53, 231.5, 229.53, 227.6, 225.62, 223.77, 222.06,
253 220.33, 218.69, 217.18, 215.64, 214.13, 212.52, 210.86, 209.25,
254 207.49, 205.81, 204.11, 202.22, 200.32, 198.39, 195.92, 193.46,
255 190.94, 188.31, 185.82, 183.57, 181.43, 179.74, 178.64, 178.1, 178.25,
256 178.7, 179.41, 180.67, 182.31, 184.18, 186.6, 189.53, 192.66, 196.54,
257 201.13, 205.93, 211.73, 217.86, 225, 233.53, 242.57, 252.14, 261.48,
258 272.97, 285.26, 299.12, 312.2, 324.17, 338.34, 352.56, 365.28
261 static const double c2h2[121] = {
262 1.352e-09, 2.83e-10, 1.269e-10, 6.926e-11, 4.346e-11, 2.909e-11,
263 2.014e-11, 1.363e-11, 8.71e-12, 5.237e-12, 2.718e-12, 1.375e-12,
264 5.786e-13, 2.16e-13, 7.317e-14, 2.551e-14, 1.055e-14, 4.758e-15,
265 2.056e-15, 7.703e-16, 2.82e-16, 1.035e-16, 4.382e-17, 1.946e-17,
266 9.638e-18, 5.2e-18, 2.811e-18, 1.494e-18, 7.925e-19, 4.213e-19,
267 1.998e-19, 8.78e-20, 3.877e-20, 1.728e-20, 7.743e-21, 3.536e-21,
268 1.623e-21, 7.508e-22, 3.508e-22, 1.65e-22, 7.837e-23, 3.733e-23,
269 1.808e-23, 8.77e-24, 4.285e-24, 2.095e-24, 1.032e-24, 5.082e-25,
270 2.506e-25, 1.236e-25, 6.088e-26, 2.996e-26, 1.465e-26, 0, 0, 0,
271 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
272 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
273 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
276 static const double c2h6[121] = {
277 2.667e-09, 2.02e-09, 1.658e-09, 1.404e-09, 1.234e-09, 1.109e-09,
278 1.012e-09, 9.262e-10, 8.472e-10, 7.71e-10, 6.932e-10, 6.216e-10,
279 5.503e-10, 4.87e-10, 4.342e-10, 3.861e-10, 3.347e-10, 2.772e-10,
280 2.209e-10, 1.672e-10, 1.197e-10, 8.536e-11, 5.783e-11, 3.846e-11,
281 2.495e-11, 1.592e-11, 1.017e-11, 6.327e-12, 3.895e-12, 2.403e-12,
282 1.416e-12, 8.101e-13, 4.649e-13, 2.686e-13, 1.557e-13, 9.14e-14,
283 5.386e-14, 3.19e-14, 1.903e-14, 1.14e-14, 6.875e-15, 4.154e-15,
284 2.538e-15, 1.553e-15, 9.548e-16, 5.872e-16, 3.63e-16, 2.244e-16,
285 1.388e-16, 8.587e-17, 5.308e-17, 3.279e-17, 2.017e-17, 1.238e-17,
286 7.542e-18, 4.585e-18, 2.776e-18, 1.671e-18, 9.985e-19, 5.937e-19,
287 3.518e-19, 2.07e-19, 1.215e-19, 7.06e-20, 4.097e-20, 2.37e-20,
288 1.363e-20, 7.802e-21, 4.441e-21, 2.523e-21, 1.424e-21, 8.015e-22,
289 4.497e-22, 2.505e-22, 1.391e-22, 7.691e-23, 4.238e-23, 2.331e-23,
290 1.274e-23, 6.929e-24, 3.752e-24, 2.02e-24, 1.083e-24, 5.774e-25,
291 3.041e-25, 1.593e-25, 8.308e-26, 4.299e-26, 2.195e-26, 1.112e-26,
292 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
293 0, 0, 0, 0, 0, 0, 0, 0, 0
296 static const double ccl4[121] = {
297 1.075e-10, 1.075e-10, 1.075e-10, 1.075e-10, 1.075e-10, 1.075e-10,
298 1.075e-10, 1.075e-10, 1.075e-10, 1.06e-10, 1.024e-10, 9.69e-11,
299 8.93e-11, 8.078e-11, 7.213e-11, 6.307e-11, 5.383e-11, 4.49e-11,
300 3.609e-11, 2.705e-11, 1.935e-11, 1.385e-11, 8.35e-12, 5.485e-12,
301 3.853e-12, 2.22e-12, 5.875e-13, 3.445e-13, 1.015e-13, 6.075e-14,
302 4.383e-14, 2.692e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
303 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
304 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
305 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
306 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
307 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
308 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
309 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
310 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
314 static const double ch3oh[121] = {
315 5.01099e-10, 5.01099e-10, 5.01099e-10, 5.01099e-10, 5.01099e-10,
316 5.01099e-10, 5.50999e-10, 5.7313e-10, 5.75638e-10, 5.4086e-10,
317 4.77601e-10, 4.12907e-10, 3.6274e-10, 3.26448e-10, 2.9706e-10,
318 2.27698e-10, 1.96999e-10, 1.66212e-10, 1.17941e-10, 1.19844e-10,
319 1.11211e-10, 1.02714e-10, 9.86138e-11, 9.45133e-11, 9.04127e-11,
320 8.05243e-11, 6.3678e-11, 4.68317e-11, 4.00618e-11, 3.95786e-11,
321 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
322 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
323 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
324 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
325 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
326 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
327 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
328 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
329 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
330 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
331 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
332 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
333 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
334 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
335 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
336 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
337 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
338 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
342 static const double ch4[121] = {
343 1.864e-06, 1.835e-06, 1.819e-06, 1.805e-06, 1.796e-06, 1.788e-06,
344 1.782e-06, 1.776e-06, 1.769e-06, 1.761e-06, 1.749e-06, 1.734e-06,
345 1.716e-06, 1.692e-06, 1.654e-06, 1.61e-06, 1.567e-06, 1.502e-06,
346 1.433e-06, 1.371e-06, 1.323e-06, 1.277e-06, 1.232e-06, 1.188e-06,
347 1.147e-06, 1.108e-06, 1.07e-06, 1.027e-06, 9.854e-07, 9.416e-07,
348 8.933e-07, 8.478e-07, 7.988e-07, 7.515e-07, 7.07e-07, 6.64e-07,
349 6.239e-07, 5.864e-07, 5.512e-07, 5.184e-07, 4.87e-07, 4.571e-07,
350 4.296e-07, 4.04e-07, 3.802e-07, 3.578e-07, 3.383e-07, 3.203e-07,
351 3.032e-07, 2.889e-07, 2.76e-07, 2.635e-07, 2.519e-07, 2.409e-07,
352 2.302e-07, 2.219e-07, 2.144e-07, 2.071e-07, 1.999e-07, 1.93e-07,
353 1.862e-07, 1.795e-07, 1.731e-07, 1.668e-07, 1.607e-07, 1.548e-07,
354 1.49e-07, 1.434e-07, 1.38e-07, 1.328e-07, 1.277e-07, 1.227e-07,
355 1.18e-07, 1.134e-07, 1.089e-07, 1.046e-07, 1.004e-07, 9.635e-08,
356 9.245e-08, 8.867e-08, 8.502e-08, 8.15e-08, 7.809e-08, 7.48e-08,
357 7.159e-08, 6.849e-08, 6.55e-08, 6.262e-08, 5.98e-08, 5.708e-08,
358 5.448e-08, 5.194e-08, 4.951e-08, 4.72e-08, 4.5e-08, 4.291e-08,
359 4.093e-08, 3.905e-08, 3.729e-08, 3.563e-08, 3.408e-08, 3.265e-08,
360 3.128e-08, 2.996e-08, 2.87e-08, 2.76e-08, 2.657e-08, 2.558e-08,
361 2.467e-08, 2.385e-08, 2.307e-08, 2.234e-08, 2.168e-08, 2.108e-08,
362 2.05e-08, 1.998e-08, 1.947e-08, 1.902e-08, 1.86e-08, 1.819e-08,
366 static const double clo[121] = {
367 7.419e-15, 1.061e-14, 1.518e-14, 2.195e-14, 3.175e-14, 4.666e-14,
368 6.872e-14, 1.03e-13, 1.553e-13, 2.375e-13, 3.664e-13, 5.684e-13,
369 8.915e-13, 1.402e-12, 2.269e-12, 4.125e-12, 7.501e-12, 1.257e-11,
370 2.048e-11, 3.338e-11, 5.44e-11, 8.846e-11, 1.008e-10, 1.082e-10,
371 1.157e-10, 1.232e-10, 1.312e-10, 1.539e-10, 1.822e-10, 2.118e-10,
372 2.387e-10, 2.687e-10, 2.875e-10, 3.031e-10, 3.23e-10, 3.648e-10,
373 4.117e-10, 4.477e-10, 4.633e-10, 4.794e-10, 4.95e-10, 5.104e-10,
374 5.259e-10, 5.062e-10, 4.742e-10, 4.443e-10, 4.051e-10, 3.659e-10,
375 3.305e-10, 2.911e-10, 2.54e-10, 2.215e-10, 1.927e-10, 1.675e-10,
376 1.452e-10, 1.259e-10, 1.09e-10, 9.416e-11, 8.119e-11, 6.991e-11,
377 6.015e-11, 5.163e-11, 4.43e-11, 3.789e-11, 3.24e-11, 2.769e-11,
378 2.361e-11, 2.011e-11, 1.71e-11, 1.453e-11, 1.233e-11, 1.045e-11,
379 8.851e-12, 7.48e-12, 6.316e-12, 5.326e-12, 4.487e-12, 3.778e-12,
380 3.176e-12, 2.665e-12, 2.234e-12, 1.87e-12, 1.563e-12, 1.304e-12,
381 1.085e-12, 9.007e-13, 7.468e-13, 6.179e-13, 5.092e-13, 4.188e-13,
382 3.442e-13, 2.816e-13, 2.304e-13, 1.885e-13, 1.542e-13, 1.263e-13,
383 1.035e-13, 8.5e-14, 7.004e-14, 5.783e-14, 4.795e-14, 4.007e-14,
384 3.345e-14, 2.792e-14, 2.33e-14, 1.978e-14, 1.686e-14, 1.438e-14,
385 1.234e-14, 1.07e-14, 9.312e-15, 8.131e-15, 7.164e-15, 6.367e-15,
386 5.67e-15, 5.088e-15, 4.565e-15, 4.138e-15, 3.769e-15, 3.432e-15,
390 static const double clono2[121] = {
391 1.011e-13, 1.515e-13, 2.272e-13, 3.446e-13, 5.231e-13, 8.085e-13,
392 1.253e-12, 1.979e-12, 3.149e-12, 5.092e-12, 8.312e-12, 1.366e-11,
393 2.272e-11, 3.791e-11, 6.209e-11, 9.101e-11, 1.334e-10, 1.951e-10,
394 2.853e-10, 3.94e-10, 4.771e-10, 5.771e-10, 6.675e-10, 7.665e-10,
395 8.504e-10, 8.924e-10, 9.363e-10, 8.923e-10, 8.411e-10, 7.646e-10,
396 6.525e-10, 5.576e-10, 4.398e-10, 3.403e-10, 2.612e-10, 1.915e-10,
397 1.407e-10, 1.028e-10, 7.455e-11, 5.42e-11, 3.708e-11, 2.438e-11,
398 1.618e-11, 1.075e-11, 7.17e-12, 4.784e-12, 3.205e-12, 2.147e-12,
399 1.44e-12, 9.654e-13, 6.469e-13, 4.332e-13, 2.891e-13, 1.926e-13,
400 1.274e-13, 8.422e-14, 5.547e-14, 3.636e-14, 2.368e-14, 1.536e-14,
401 9.937e-15, 6.39e-15, 4.101e-15, 2.61e-15, 1.659e-15, 1.052e-15,
402 6.638e-16, 4.172e-16, 2.61e-16, 1.63e-16, 1.013e-16, 6.275e-17,
403 3.879e-17, 2.383e-17, 1.461e-17, 8.918e-18, 5.43e-18, 3.301e-18,
404 1.997e-18, 1.203e-18, 7.216e-19, 4.311e-19, 2.564e-19, 1.519e-19,
405 8.911e-20, 5.203e-20, 3.026e-20, 1.748e-20, 9.99e-21, 5.673e-21,
406 3.215e-21, 1.799e-21, 1.006e-21, 5.628e-22, 3.146e-22, 1.766e-22,
407 9.94e-23, 5.614e-23, 3.206e-23, 1.841e-23, 1.071e-23, 6.366e-24,
408 3.776e-24, 2.238e-24, 1.326e-24, 8.253e-25, 5.201e-25, 3.279e-25,
409 2.108e-25, 1.395e-25, 9.326e-26, 6.299e-26, 4.365e-26, 3.104e-26,
410 2.219e-26, 1.621e-26, 1.185e-26, 8.92e-27, 6.804e-27, 5.191e-27,
414 static const double co[121] = {
415 1.907e-07, 1.553e-07, 1.362e-07, 1.216e-07, 1.114e-07, 1.036e-07,
416 9.737e-08, 9.152e-08, 8.559e-08, 7.966e-08, 7.277e-08, 6.615e-08,
417 5.884e-08, 5.22e-08, 4.699e-08, 4.284e-08, 3.776e-08, 3.274e-08,
418 2.845e-08, 2.479e-08, 2.246e-08, 2.054e-08, 1.991e-08, 1.951e-08,
419 1.94e-08, 2.009e-08, 2.1e-08, 2.201e-08, 2.322e-08, 2.45e-08,
420 2.602e-08, 2.73e-08, 2.867e-08, 2.998e-08, 3.135e-08, 3.255e-08,
421 3.352e-08, 3.426e-08, 3.484e-08, 3.53e-08, 3.593e-08, 3.671e-08,
422 3.759e-08, 3.945e-08, 4.192e-08, 4.49e-08, 5.03e-08, 5.703e-08,
423 6.538e-08, 7.878e-08, 9.644e-08, 1.196e-07, 1.498e-07, 1.904e-07,
424 2.422e-07, 3.055e-07, 3.804e-07, 4.747e-07, 5.899e-07, 7.272e-07,
425 8.91e-07, 1.071e-06, 1.296e-06, 1.546e-06, 1.823e-06, 2.135e-06,
426 2.44e-06, 2.714e-06, 2.967e-06, 3.189e-06, 3.391e-06, 3.58e-06,
427 3.773e-06, 4.022e-06, 4.346e-06, 4.749e-06, 5.199e-06, 5.668e-06,
428 6.157e-06, 6.688e-06, 7.254e-06, 7.867e-06, 8.539e-06, 9.26e-06,
429 1.009e-05, 1.119e-05, 1.228e-05, 1.365e-05, 1.506e-05, 1.641e-05,
430 1.784e-05, 1.952e-05, 2.132e-05, 2.323e-05, 2.531e-05, 2.754e-05,
431 3.047e-05, 3.459e-05, 3.922e-05, 4.439e-05, 4.825e-05, 5.077e-05,
432 5.34e-05, 5.618e-05, 5.909e-05, 6.207e-05, 6.519e-05, 6.845e-05,
433 6.819e-05, 6.726e-05, 6.622e-05, 6.512e-05, 6.671e-05, 6.862e-05,
434 7.048e-05, 7.264e-05, 7.3e-05, 7.3e-05, 7.3e-05, 7.3e-05, 7.3e-05
437 static const double cof2[121] = {
438 7.5e-14, 1.055e-13, 1.485e-13, 2.111e-13, 3.001e-13, 4.333e-13,
439 6.269e-13, 9.221e-13, 1.364e-12, 2.046e-12, 3.093e-12, 4.703e-12,
440 7.225e-12, 1.113e-11, 1.66e-11, 2.088e-11, 2.626e-11, 3.433e-11,
441 4.549e-11, 5.886e-11, 7.21e-11, 8.824e-11, 1.015e-10, 1.155e-10,
442 1.288e-10, 1.388e-10, 1.497e-10, 1.554e-10, 1.606e-10, 1.639e-10,
443 1.64e-10, 1.64e-10, 1.596e-10, 1.542e-10, 1.482e-10, 1.382e-10,
444 1.289e-10, 1.198e-10, 1.109e-10, 1.026e-10, 9.484e-11, 8.75e-11,
445 8.086e-11, 7.49e-11, 6.948e-11, 6.446e-11, 5.961e-11, 5.505e-11,
446 5.085e-11, 4.586e-11, 4.1e-11, 3.665e-11, 3.235e-11, 2.842e-11,
447 2.491e-11, 2.11e-11, 1.769e-11, 1.479e-11, 1.197e-11, 9.631e-12,
448 7.74e-12, 6.201e-12, 4.963e-12, 3.956e-12, 3.151e-12, 2.507e-12,
449 1.99e-12, 1.576e-12, 1.245e-12, 9.83e-13, 7.742e-13, 6.088e-13,
450 4.782e-13, 3.745e-13, 2.929e-13, 2.286e-13, 1.782e-13, 1.388e-13,
451 1.079e-13, 8.362e-14, 6.471e-14, 4.996e-14, 3.85e-14, 2.96e-14,
452 2.265e-14, 1.729e-14, 1.317e-14, 9.998e-15, 7.549e-15, 5.683e-15,
453 4.273e-15, 3.193e-15, 2.385e-15, 1.782e-15, 1.331e-15, 9.957e-16,
454 7.461e-16, 5.601e-16, 4.228e-16, 3.201e-16, 2.438e-16, 1.878e-16,
455 1.445e-16, 1.111e-16, 8.544e-17, 6.734e-17, 5.341e-17, 4.237e-17,
456 3.394e-17, 2.759e-17, 2.254e-17, 1.851e-17, 1.54e-17, 1.297e-17,
457 1.096e-17, 9.365e-18, 8e-18, 6.938e-18, 6.056e-18, 5.287e-18,
461 static const double f11[121] = {
462 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10,
463 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10, 2.635e-10, 2.536e-10,
464 2.44e-10, 2.348e-10, 2.258e-10, 2.153e-10, 2.046e-10, 1.929e-10,
465 1.782e-10, 1.648e-10, 1.463e-10, 1.291e-10, 1.1e-10, 8.874e-11,
466 7.165e-11, 5.201e-11, 3.744e-11, 2.577e-11, 1.64e-11, 1.048e-11,
467 5.993e-12, 3.345e-12, 1.839e-12, 9.264e-13, 4.688e-13, 2.329e-13,
468 1.129e-13, 5.505e-14, 2.825e-14, 1.492e-14, 7.997e-15, 5.384e-15,
469 3.988e-15, 2.955e-15, 2.196e-15, 1.632e-15, 1.214e-15, 9.025e-16,
470 6.708e-16, 4.984e-16, 3.693e-16, 2.733e-16, 2.013e-16, 1.481e-16,
471 1.087e-16, 7.945e-17, 5.782e-17, 4.195e-17, 3.038e-17, 2.19e-17,
472 1.577e-17, 1.128e-17, 8.063e-18, 5.753e-18, 4.09e-18, 2.899e-18,
473 2.048e-18, 1.444e-18, 1.015e-18, 7.12e-19, 4.985e-19, 3.474e-19,
474 2.417e-19, 1.677e-19, 1.161e-19, 8.029e-20, 5.533e-20, 3.799e-20,
475 2.602e-20, 1.776e-20, 1.209e-20, 8.202e-21, 5.522e-21, 3.707e-21,
476 2.48e-21, 1.652e-21, 1.091e-21, 7.174e-22, 4.709e-22, 3.063e-22,
477 1.991e-22, 1.294e-22, 8.412e-23, 5.483e-23, 3.581e-23, 2.345e-23,
478 1.548e-23, 1.027e-23, 6.869e-24, 4.673e-24, 3.173e-24, 2.153e-24,
479 1.461e-24, 1.028e-24, 7.302e-25, 5.188e-25, 3.739e-25, 2.753e-25,
480 2.043e-25, 1.528e-25, 1.164e-25, 9.041e-26, 7.051e-26, 5.587e-26,
481 4.428e-26, 3.588e-26, 2.936e-26, 2.402e-26, 1.995e-26
484 static const double f113[121] = {
485 1.9e-11, 1.9e-11, 1.899e-11, 1.899e-11, 1.898e-11, 1.898e-11,
486 1.897e-11, 1.896e-11, 1.895e-11, 1.894e-11, 1.893e-11, 1.89e-11,
487 1.887e-11, 1.871e-11, 1.854e-11, 1.803e-11, 1.751e-11, 1.664e-11,
488 1.576e-11, 1.466e-11, 1.356e-11, 1.236e-11, 1.116e-11, 9.931e-12,
489 8.702e-12, 7.515e-12, 6.4238e-12, 5.3326e-12, 4.3652e-12, 3.5216e-12,
490 2.678e-12, 2.1532e-12, 1.6284e-12, 1.2202e-12, 9.286e-13, 6.37e-13,
491 4.95e-13, 3.53e-13, 2.5004e-13, 1.8612e-13, 1.222e-13, 9.704e-14,
492 7.188e-14, 5.3338e-14, 4.1414e-14, 2.949e-14, 2.3722e-14, 1.7954e-14,
493 1.37794e-14, 1.11982e-14, 8.617e-15, 7.6036e-15, 6.5902e-15,
494 5.5768e-15, 4.5634e-15, 3.55e-15, 3.1008e-15, 2.6516e-15, 2.2024e-15,
495 1.7532e-15, 1.304e-15, 1.1354e-15, 9.668e-16, 7.982e-16, 6.296e-16,
496 4.61e-16, 3.9734e-16, 3.3368e-16, 2.7002e-16, 2.0636e-16, 1.427e-16,
497 1.22804e-16, 1.02908e-16, 8.3012e-17, 6.3116e-17, 4.322e-17,
498 3.6838e-17, 3.0456e-17, 2.4074e-17, 1.7692e-17, 1.131e-17,
499 9.6202e-18, 7.9304e-18, 6.2406e-18, 4.5508e-18, 2.861e-18,
500 2.40476e-18, 1.94852e-18, 1.49228e-18, 1.03604e-18, 5.798e-19,
501 4.8502e-19, 3.9024e-19, 2.9546e-19, 2.0068e-19, 1.059e-19,
502 8.7084e-20, 6.8268e-20, 4.9452e-20, 3.0636e-20, 1.182e-20,
503 9.64344e-21, 7.46688e-21, 5.29032e-21, 3.11376e-21, 9.372e-22,
504 7.5685e-22, 5.765e-22, 3.9615e-22, 2.158e-22, 3.545e-23,
505 2.86046e-23, 2.17592e-23, 1.49138e-23, 8.0684e-24, 1.223e-24,
506 9.92358e-25, 7.61716e-25, 5.31074e-25, 3.00432e-25, 6.979e-26
509 static const double f114[121] = {
510 1.2e-11, 1.2e-11, 1.2e-11, 1.2e-11, 1.199e-11, 1.199e-11,
511 1.199e-11, 1.199e-11, 1.198e-11, 1.198e-11, 1.198e-11, 1.197e-11,
512 1.196e-11, 1.191e-11, 1.185e-11, 1.167e-11, 1.149e-11, 1.12e-11,
513 1.09e-11, 1.053e-11, 1.015e-11, 9.731e-12, 9.311e-12, 8.865e-12,
514 8.419e-12, 7.949e-12, 7.4774e-12, 7.0058e-12, 6.54e-12, 6.08e-12,
515 5.62e-12, 5.1908e-12, 4.7616e-12, 4.3622e-12, 3.9926e-12, 3.623e-12,
516 3.3274e-12, 3.0318e-12, 2.7702e-12, 2.5426e-12, 2.315e-12, 2.1514e-12,
517 1.9878e-12, 1.8448e-12, 1.7224e-12, 1.6e-12, 1.51e-12, 1.42e-12,
518 1.3462e-12, 1.2886e-12, 1.231e-12, 1.1922e-12, 1.1534e-12, 1.1146e-12,
519 1.0758e-12, 1.037e-12, 1.0025e-12, 9.68e-13, 9.335e-13, 8.99e-13,
520 8.645e-13, 8.344e-13, 8.043e-13, 7.742e-13, 7.441e-13, 7.14e-13,
521 6.8718e-13, 6.6036e-13, 6.3354e-13, 6.0672e-13, 5.799e-13, 5.5612e-13,
522 5.3234e-13, 5.0856e-13, 4.8478e-13, 4.61e-13, 4.394e-13, 4.178e-13,
523 3.962e-13, 3.746e-13, 3.53e-13, 3.3288e-13, 3.1276e-13, 2.9264e-13,
524 2.7252e-13, 2.524e-13, 2.3368e-13, 2.1496e-13, 1.9624e-13, 1.7752e-13,
525 1.588e-13, 1.4221e-13, 1.2562e-13, 1.0903e-13, 9.244e-14, 7.585e-14,
526 6.4942e-14, 5.4034e-14, 4.3126e-14, 3.2218e-14, 2.131e-14, 1.76694e-14,
527 1.40288e-14, 1.03882e-14, 6.7476e-15, 3.107e-15, 2.52738e-15,
528 1.94776e-15, 1.36814e-15, 7.8852e-16, 2.089e-16, 1.69288e-16,
529 1.29676e-16, 9.0064e-17, 5.0452e-17, 1.084e-17, 8.85136e-18,
530 6.86272e-18, 4.87408e-18, 2.88544e-18, 8.968e-19
533 static const double f12[121] = {
534 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10,
535 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10, 5.429e-10, 5.291e-10,
536 5.155e-10, 5.022e-10, 4.893e-10, 4.772e-10, 4.655e-10, 4.497e-10,
537 4.249e-10, 4.015e-10, 3.632e-10, 3.261e-10, 2.858e-10, 2.408e-10,
538 2.03e-10, 1.685e-10, 1.4e-10, 1.163e-10, 9.65e-11, 8.02e-11, 6.705e-11,
539 5.624e-11, 4.764e-11, 4.249e-11, 3.792e-11, 3.315e-11, 2.819e-11,
540 2.4e-11, 1.999e-11, 1.64e-11, 1.352e-11, 1.14e-11, 9.714e-12,
541 8.28e-12, 7.176e-12, 6.251e-12, 5.446e-12, 4.72e-12, 4.081e-12,
542 3.528e-12, 3.08e-12, 2.699e-12, 2.359e-12, 2.111e-12, 1.901e-12,
543 1.709e-12, 1.534e-12, 1.376e-12, 1.233e-12, 1.103e-12, 9.869e-13,
544 8.808e-13, 7.859e-13, 7.008e-13, 6.241e-13, 5.553e-13, 4.935e-13,
545 4.383e-13, 3.889e-13, 3.447e-13, 3.054e-13, 2.702e-13, 2.389e-13,
546 2.11e-13, 1.862e-13, 1.643e-13, 1.448e-13, 1.274e-13, 1.121e-13,
547 9.844e-14, 8.638e-14, 7.572e-14, 6.62e-14, 5.782e-14, 5.045e-14,
548 4.394e-14, 3.817e-14, 3.311e-14, 2.87e-14, 2.48e-14, 2.142e-14,
549 1.851e-14, 1.599e-14, 1.383e-14, 1.196e-14, 1.036e-14, 9e-15,
550 7.828e-15, 6.829e-15, 5.992e-15, 5.254e-15, 4.606e-15, 4.037e-15,
551 3.583e-15, 3.19e-15, 2.841e-15, 2.542e-15, 2.291e-15, 2.07e-15,
552 1.875e-15, 1.71e-15, 1.57e-15, 1.442e-15, 1.333e-15, 1.232e-15,
553 1.147e-15, 1.071e-15, 1.001e-15, 9.396e-16
556 static const double f14[121] = {
557 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 9e-11,
558 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 8.91e-11, 8.73e-11, 8.46e-11,
559 8.19e-11, 7.92e-11, 7.74e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
560 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
561 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
562 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
563 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
564 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
565 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
566 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
567 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
568 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
569 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
570 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
571 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
572 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
573 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11
576 static const double f22[121] = {
577 1.4e-10, 1.4e-10, 1.4e-10, 1.4e-10, 1.4e-10, 1.4e-10, 1.4e-10,
578 1.4e-10, 1.4e-10, 1.4e-10, 1.372e-10, 1.317e-10, 1.235e-10, 1.153e-10,
579 1.075e-10, 1.002e-10, 9.332e-11, 8.738e-11, 8.194e-11, 7.7e-11,
580 7.165e-11, 6.753e-11, 6.341e-11, 5.971e-11, 5.6e-11, 5.229e-11,
581 4.859e-11, 4.488e-11, 4.118e-11, 3.83e-11, 3.568e-11, 3.308e-11,
582 3.047e-11, 2.82e-11, 2.594e-11, 2.409e-11, 2.237e-11, 2.065e-11,
583 1.894e-11, 1.771e-11, 1.647e-11, 1.532e-11, 1.416e-11, 1.332e-11,
584 1.246e-11, 1.161e-11, 1.087e-11, 1.017e-11, 9.471e-12, 8.853e-12,
585 8.235e-12, 7.741e-12, 7.247e-12, 6.836e-12, 6.506e-12, 6.176e-12,
586 5.913e-12, 5.65e-12, 5.419e-12, 5.221e-12, 5.024e-12, 4.859e-12,
587 4.694e-12, 4.546e-12, 4.414e-12, 4.282e-12, 4.15e-12, 4.019e-12,
588 3.903e-12, 3.805e-12, 3.706e-12, 3.607e-12, 3.508e-12, 3.41e-12,
589 3.31e-12, 3.212e-12, 3.129e-12, 3.047e-12, 2.964e-12, 2.882e-12,
590 2.8e-12, 2.734e-12, 2.668e-12, 2.602e-12, 2.537e-12, 2.471e-12,
591 2.421e-12, 2.372e-12, 2.322e-12, 2.273e-12, 2.224e-12, 2.182e-12,
592 2.141e-12, 2.1e-12, 2.059e-12, 2.018e-12, 1.977e-12, 1.935e-12,
593 1.894e-12, 1.853e-12, 1.812e-12, 1.77e-12, 1.73e-12, 1.688e-12,
594 1.647e-12, 1.606e-12, 1.565e-12, 1.524e-12, 1.483e-12, 1.441e-12,
595 1.4e-12, 1.359e-12, 1.317e-12, 1.276e-12, 1.235e-12, 1.194e-12,
596 1.153e-12, 1.112e-12, 1.071e-12, 1.029e-12, 9.883e-13
599 static const double h2co[121] = {
600 8.71857e-11, 8.71857e-11, 8.71857e-11, 8.71857e-11, 8.71857e-11,
601 8.71857e-11, 7.72315e-11, 6.85464e-11, 6.0758e-11, 5.32087e-11,
602 4.5719e-11, 3.79458e-11, 3.07607e-11, 2.46025e-11, 1.94038e-11,
603 1.40882e-11, 1.0623e-11, 8.35457e-12, 6.87427e-12, 7.09071e-12,
604 8.96183e-12, 1.09012e-11, 1.50545e-11, 1.92077e-11, 2.3361e-11,
605 2.7054e-11, 3.01936e-11, 3.33333e-11, 3.69281e-11, 4.08069e-11,
606 4.57318e-11, 5.1348e-11, 5.69642e-11, 6.33173e-11, 6.98984e-11,
607 7.63144e-11, 8.22774e-11, 8.82405e-11, 9.3746e-11, 9.92074e-11,
608 1.04669e-10, 1.10055e-10, 1.15293e-10, 1.20531e-10, 1.26293e-10,
609 1.32585e-10, 1.35966e-10, 1.36242e-10, 1.36519e-10, 1.61155e-10,
610 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
611 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
612 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
613 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
614 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
615 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
616 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
617 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
618 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
619 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
620 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
621 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
622 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
623 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
627 static const double h2o[121] = {
628 0.01166, 0.008269, 0.005742, 0.003845, 0.00277, 0.001897, 0.001272,
629 0.000827, 0.000539, 0.0003469, 0.0001579, 3.134e-05, 1.341e-05,
630 6.764e-06, 4.498e-06, 3.703e-06, 3.724e-06, 3.899e-06, 4.002e-06,
631 4.122e-06, 4.277e-06, 4.438e-06, 4.558e-06, 4.673e-06, 4.763e-06,
632 4.809e-06, 4.856e-06, 4.936e-06, 5.021e-06, 5.114e-06, 5.222e-06,
633 5.331e-06, 5.414e-06, 5.488e-06, 5.563e-06, 5.633e-06, 5.704e-06,
634 5.767e-06, 5.819e-06, 5.872e-06, 5.914e-06, 5.949e-06, 5.984e-06,
635 6.015e-06, 6.044e-06, 6.073e-06, 6.104e-06, 6.136e-06, 6.167e-06,
636 6.189e-06, 6.208e-06, 6.226e-06, 6.212e-06, 6.185e-06, 6.158e-06,
637 6.114e-06, 6.066e-06, 6.018e-06, 5.877e-06, 5.728e-06, 5.582e-06,
638 5.437e-06, 5.296e-06, 5.156e-06, 5.02e-06, 4.886e-06, 4.754e-06,
639 4.625e-06, 4.498e-06, 4.374e-06, 4.242e-06, 4.096e-06, 3.955e-06,
640 3.817e-06, 3.683e-06, 3.491e-06, 3.204e-06, 2.94e-06, 2.696e-06,
641 2.47e-06, 2.252e-06, 2.019e-06, 1.808e-06, 1.618e-06, 1.445e-06,
642 1.285e-06, 1.105e-06, 9.489e-07, 8.121e-07, 6.938e-07, 5.924e-07,
643 5.04e-07, 4.288e-07, 3.648e-07, 3.103e-07, 2.642e-07, 2.252e-07,
644 1.921e-07, 1.643e-07, 1.408e-07, 1.211e-07, 1.048e-07, 9.063e-08,
645 7.835e-08, 6.774e-08, 5.936e-08, 5.221e-08, 4.592e-08, 4.061e-08,
646 3.62e-08, 3.236e-08, 2.902e-08, 2.62e-08, 2.383e-08, 2.171e-08,
647 1.989e-08, 1.823e-08, 1.684e-08, 1.562e-08, 1.449e-08, 1.351e-08
650 static const double h2o2[121] = {
651 1.779e-10, 7.938e-10, 8.953e-10, 8.032e-10, 6.564e-10, 5.159e-10,
652 4.003e-10, 3.026e-10, 2.222e-10, 1.58e-10, 1.044e-10, 6.605e-11,
653 3.413e-11, 1.453e-11, 1.062e-11, 1.009e-11, 9.597e-12, 1.175e-11,
654 1.572e-11, 2.091e-11, 2.746e-11, 3.603e-11, 4.791e-11, 6.387e-11,
655 8.239e-11, 1.007e-10, 1.23e-10, 1.363e-10, 1.489e-10, 1.585e-10,
656 1.608e-10, 1.632e-10, 1.576e-10, 1.502e-10, 1.423e-10, 1.302e-10,
657 1.192e-10, 1.085e-10, 9.795e-11, 8.854e-11, 8.057e-11, 7.36e-11,
658 6.736e-11, 6.362e-11, 6.087e-11, 5.825e-11, 5.623e-11, 5.443e-11,
659 5.27e-11, 5.098e-11, 4.931e-11, 4.769e-11, 4.611e-11, 4.458e-11,
660 4.308e-11, 4.102e-11, 3.887e-11, 3.682e-11, 3.521e-11, 3.369e-11,
661 3.224e-11, 3.082e-11, 2.946e-11, 2.814e-11, 2.687e-11, 2.566e-11,
662 2.449e-11, 2.336e-11, 2.227e-11, 2.123e-11, 2.023e-11, 1.927e-11,
663 1.835e-11, 1.746e-11, 1.661e-11, 1.58e-11, 1.502e-11, 1.428e-11,
664 1.357e-11, 1.289e-11, 1.224e-11, 1.161e-11, 1.102e-11, 1.045e-11,
665 9.895e-12, 9.369e-12, 8.866e-12, 8.386e-12, 7.922e-12, 7.479e-12,
666 7.06e-12, 6.656e-12, 6.274e-12, 5.914e-12, 5.575e-12, 5.257e-12,
667 4.959e-12, 4.679e-12, 4.42e-12, 4.178e-12, 3.954e-12, 3.75e-12,
668 3.557e-12, 3.372e-12, 3.198e-12, 3.047e-12, 2.908e-12, 2.775e-12,
669 2.653e-12, 2.544e-12, 2.442e-12, 2.346e-12, 2.26e-12, 2.183e-12,
670 2.11e-12, 2.044e-12, 1.98e-12, 1.924e-12, 1.871e-12, 1.821e-12,
674 static const double hcl[121] = {
675 3.70385e-11, 3.70385e-11, 3.70385e-11, 3.70385e-11, 3.70385e-11,
676 3.70385e-11, 2.21247e-11, 1.88117e-11, 2.36957e-11, 3.72192e-11,
677 5.79399e-11, 8.04158e-11, 1.01779e-10, 1.2301e-10, 1.53924e-10,
678 1.93737e-10, 2.5561e-10, 3.84228e-10, 6.18248e-10, 6.31222e-10,
679 7.84907e-10, 9.36932e-10, 1.03508e-09, 1.13323e-09, 1.23138e-09,
680 1.31985e-09, 1.39669e-09, 1.47352e-09, 1.56375e-09, 1.66234e-09,
681 1.78086e-09, 1.91256e-09, 2.04425e-09, 2.16629e-09, 2.28535e-09,
682 2.39439e-09, 2.47597e-09, 2.55755e-09, 2.60873e-09, 2.65696e-09,
683 2.70519e-09, 2.75658e-09, 2.81422e-09, 2.87187e-09, 2.94013e-09,
684 3.01911e-09, 3.09497e-09, 3.16749e-09, 3.24001e-09, 3.30525e-09,
685 3.3665e-09, 3.42424e-09, 3.4619e-09, 3.49956e-09, 3.52273e-09,
686 3.54214e-09, 3.56154e-09, 3.57918e-09, 3.59049e-09, 3.6018e-09,
687 3.6132e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
688 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
689 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
690 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
691 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
692 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
693 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
694 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
695 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
696 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
697 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
698 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
702 static const double hcn[121] = {
703 5.5e-10, 5.5e-10, 5.5e-10, 5.5e-10, 5.5e-10, 5.5e-10, 5.5e-10,
704 5.5e-10, 5.5e-10, 5.5e-10, 5.5e-10, 5.498e-10, 5.495e-10, 5.493e-10,
705 5.49e-10, 5.488e-10, 4.717e-10, 3.946e-10, 3.174e-10, 2.4e-10,
706 1.626e-10, 1.619e-10, 1.612e-10, 1.602e-10, 1.593e-10, 1.582e-10,
707 1.572e-10, 1.56e-10, 1.549e-10, 1.539e-10, 1.53e-10, 1.519e-10,
708 1.506e-10, 1.487e-10, 1.467e-10, 1.449e-10, 1.43e-10, 1.413e-10,
709 1.397e-10, 1.382e-10, 1.368e-10, 1.354e-10, 1.337e-10, 1.315e-10,
710 1.292e-10, 1.267e-10, 1.241e-10, 1.215e-10, 1.19e-10, 1.165e-10,
711 1.141e-10, 1.118e-10, 1.096e-10, 1.072e-10, 1.047e-10, 1.021e-10,
712 9.968e-11, 9.739e-11, 9.539e-11, 9.339e-11, 9.135e-11, 8.898e-11,
713 8.664e-11, 8.439e-11, 8.249e-11, 8.075e-11, 7.904e-11, 7.735e-11,
714 7.565e-11, 7.399e-11, 7.245e-11, 7.109e-11, 6.982e-11, 6.863e-11,
715 6.755e-11, 6.657e-11, 6.587e-11, 6.527e-11, 6.476e-11, 6.428e-11,
716 6.382e-11, 6.343e-11, 6.307e-11, 6.272e-11, 6.238e-11, 6.205e-11,
717 6.17e-11, 6.137e-11, 6.102e-11, 6.072e-11, 6.046e-11, 6.03e-11,
718 6.018e-11, 6.01e-11, 6.001e-11, 5.992e-11, 5.984e-11, 5.975e-11,
719 5.967e-11, 5.958e-11, 5.95e-11, 5.941e-11, 5.933e-11, 5.925e-11,
720 5.916e-11, 5.908e-11, 5.899e-11, 5.891e-11, 5.883e-11, 5.874e-11,
721 5.866e-11, 5.858e-11, 5.85e-11, 5.841e-11, 5.833e-11, 5.825e-11,
722 5.817e-11, 5.808e-11, 5.8e-11, 5.792e-11, 5.784e-11
725 static const double hf[121] = {
726 2.64279e-11, 2.64279e-11, 2.64279e-11, 2.64279e-11, 2.64279e-11,
727 2.64279e-11, 2.64279e-11, 2.64279e-11, 2.64279e-11, 2.64279e-11,
728 2.64279e-11, 2.64279e-11, 2.64279e-11, 3.86691e-11, 5.22002e-11,
729 6.92471e-11, 9.13979e-11, 1.37918e-10, 2.24918e-10, 2.29824e-10,
730 2.94241e-10, 3.58363e-10, 4.12881e-10, 4.67399e-10, 5.21917e-10,
731 5.74229e-10, 6.23889e-10, 6.73549e-10, 7.24119e-10, 7.75256e-10,
732 8.319e-10, 8.92185e-10, 9.52469e-10, 1.01325e-09, 1.07419e-09,
733 1.13565e-09, 1.19856e-09, 1.26146e-09, 1.31439e-09, 1.36635e-09,
734 1.41831e-09, 1.46549e-09, 1.50321e-09, 1.54093e-09, 1.57986e-09,
735 1.62e-09, 1.66286e-09, 1.70863e-09, 1.75439e-09, 1.79827e-09,
736 1.84111e-09, 1.88125e-09, 1.90603e-09, 1.93081e-09, 1.9413e-09,
737 1.94807e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
738 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
739 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
740 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
741 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
742 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
743 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
744 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
745 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
746 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
747 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
748 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
749 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
753 static const double hno3[121] = {
754 1.809e-10, 7.234e-10, 5.899e-10, 4.342e-10, 3.277e-10, 2.661e-10,
755 2.35e-10, 2.267e-10, 2.389e-10, 2.651e-10, 3.255e-10, 4.099e-10,
756 5.42e-10, 6.978e-10, 8.807e-10, 1.112e-09, 1.405e-09, 2.04e-09,
757 3.111e-09, 4.5e-09, 5.762e-09, 7.37e-09, 7.852e-09, 8.109e-09,
758 8.067e-09, 7.554e-09, 7.076e-09, 6.268e-09, 5.524e-09, 4.749e-09,
759 3.909e-09, 3.223e-09, 2.517e-09, 1.942e-09, 1.493e-09, 1.122e-09,
760 8.449e-10, 6.361e-10, 4.787e-10, 3.611e-10, 2.804e-10, 2.215e-10,
761 1.758e-10, 1.441e-10, 1.197e-10, 9.953e-11, 8.505e-11, 7.334e-11,
762 6.325e-11, 5.625e-11, 5.058e-11, 4.548e-11, 4.122e-11, 3.748e-11,
763 3.402e-11, 3.088e-11, 2.8e-11, 2.536e-11, 2.293e-11, 2.072e-11,
764 1.871e-11, 1.687e-11, 1.52e-11, 1.368e-11, 1.23e-11, 1.105e-11,
765 9.922e-12, 8.898e-12, 7.972e-12, 7.139e-12, 6.385e-12, 5.708e-12,
766 5.099e-12, 4.549e-12, 4.056e-12, 3.613e-12, 3.216e-12, 2.862e-12,
767 2.544e-12, 2.259e-12, 2.004e-12, 1.776e-12, 1.572e-12, 1.391e-12,
768 1.227e-12, 1.082e-12, 9.528e-13, 8.379e-13, 7.349e-13, 6.436e-13,
769 5.634e-13, 4.917e-13, 4.291e-13, 3.745e-13, 3.267e-13, 2.854e-13,
770 2.494e-13, 2.181e-13, 1.913e-13, 1.68e-13, 1.479e-13, 1.31e-13,
771 1.159e-13, 1.025e-13, 9.067e-14, 8.113e-14, 7.281e-14, 6.535e-14,
772 5.892e-14, 5.348e-14, 4.867e-14, 4.439e-14, 4.073e-14, 3.76e-14,
773 3.476e-14, 3.229e-14, 3e-14, 2.807e-14, 2.635e-14, 2.473e-14,
777 static const double hno4[121] = {
778 6.118e-12, 3.594e-12, 2.807e-12, 3.04e-12, 4.458e-12, 7.986e-12,
779 1.509e-11, 2.661e-11, 3.738e-11, 4.652e-11, 4.429e-11, 3.992e-11,
780 3.347e-11, 3.005e-11, 3.173e-11, 4.055e-11, 5.812e-11, 8.489e-11,
781 1.19e-10, 1.482e-10, 1.766e-10, 2.103e-10, 2.35e-10, 2.598e-10,
782 2.801e-10, 2.899e-10, 3e-10, 2.817e-10, 2.617e-10, 2.332e-10,
783 1.933e-10, 1.605e-10, 1.232e-10, 9.285e-11, 6.941e-11, 4.951e-11,
784 3.539e-11, 2.402e-11, 1.522e-11, 9.676e-12, 6.056e-12, 3.745e-12,
785 2.34e-12, 1.463e-12, 9.186e-13, 5.769e-13, 3.322e-13, 1.853e-13,
786 1.035e-13, 7.173e-14, 5.382e-14, 4.036e-14, 3.401e-14, 2.997e-14,
787 2.635e-14, 2.316e-14, 2.034e-14, 1.783e-14, 1.56e-14, 1.363e-14,
788 1.19e-14, 1.037e-14, 9.032e-15, 7.846e-15, 6.813e-15, 5.912e-15,
789 5.121e-15, 4.431e-15, 3.829e-15, 3.306e-15, 2.851e-15, 2.456e-15,
790 2.114e-15, 1.816e-15, 1.559e-15, 1.337e-15, 1.146e-15, 9.811e-16,
791 8.389e-16, 7.162e-16, 6.109e-16, 5.203e-16, 4.425e-16, 3.76e-16,
792 3.184e-16, 2.692e-16, 2.274e-16, 1.917e-16, 1.61e-16, 1.35e-16,
793 1.131e-16, 9.437e-17, 7.874e-17, 6.57e-17, 5.481e-17, 4.579e-17,
794 3.828e-17, 3.204e-17, 2.691e-17, 2.264e-17, 1.912e-17, 1.626e-17,
795 1.382e-17, 1.174e-17, 9.972e-18, 8.603e-18, 7.45e-18, 6.453e-18,
796 5.623e-18, 4.944e-18, 4.361e-18, 3.859e-18, 3.443e-18, 3.096e-18,
797 2.788e-18, 2.528e-18, 2.293e-18, 2.099e-18, 1.929e-18, 1.773e-18,
801 static const double hocl[121] = {
802 1.056e-12, 1.194e-12, 1.35e-12, 1.531e-12, 1.737e-12, 1.982e-12,
803 2.263e-12, 2.599e-12, 2.991e-12, 3.459e-12, 4.012e-12, 4.662e-12,
804 5.438e-12, 6.35e-12, 7.425e-12, 8.686e-12, 1.016e-11, 1.188e-11,
805 1.389e-11, 1.659e-11, 2.087e-11, 2.621e-11, 3.265e-11, 4.064e-11,
806 4.859e-11, 5.441e-11, 6.09e-11, 6.373e-11, 6.611e-11, 6.94e-11,
807 7.44e-11, 7.97e-11, 8.775e-11, 9.722e-11, 1.064e-10, 1.089e-10,
808 1.114e-10, 1.106e-10, 1.053e-10, 1.004e-10, 9.006e-11, 7.778e-11,
809 6.739e-11, 5.636e-11, 4.655e-11, 3.845e-11, 3.042e-11, 2.368e-11,
810 1.845e-11, 1.442e-11, 1.127e-11, 8.814e-12, 6.544e-12, 4.763e-12,
811 3.449e-12, 2.612e-12, 1.999e-12, 1.526e-12, 1.16e-12, 8.793e-13,
812 6.655e-13, 5.017e-13, 3.778e-13, 2.829e-13, 2.117e-13, 1.582e-13,
813 1.178e-13, 8.755e-14, 6.486e-14, 4.799e-14, 3.54e-14, 2.606e-14,
814 1.916e-14, 1.403e-14, 1.026e-14, 7.48e-15, 5.446e-15, 3.961e-15,
815 2.872e-15, 2.076e-15, 1.498e-15, 1.077e-15, 7.726e-16, 5.528e-16,
816 3.929e-16, 2.785e-16, 1.969e-16, 1.386e-16, 9.69e-17, 6.747e-17,
817 4.692e-17, 3.236e-17, 2.232e-17, 1.539e-17, 1.061e-17, 7.332e-18,
818 5.076e-18, 3.522e-18, 2.461e-18, 1.726e-18, 1.22e-18, 8.75e-19,
819 6.264e-19, 4.482e-19, 3.207e-19, 2.368e-19, 1.762e-19, 1.312e-19,
820 9.891e-20, 7.595e-20, 5.87e-20, 4.567e-20, 3.612e-20, 2.904e-20,
821 2.343e-20, 1.917e-20, 1.568e-20, 1.308e-20, 1.1e-20, 9.25e-21,
825 static const double n2o[121] = {
826 3.17e-07, 3.17e-07, 3.17e-07, 3.17e-07, 3.17e-07, 3.17e-07, 3.17e-07,
827 3.17e-07, 3.17e-07, 3.17e-07, 3.124e-07, 3.077e-07, 3.03e-07,
828 2.984e-07, 2.938e-07, 2.892e-07, 2.847e-07, 2.779e-07, 2.705e-07,
829 2.631e-07, 2.557e-07, 2.484e-07, 2.345e-07, 2.201e-07, 2.01e-07,
830 1.754e-07, 1.532e-07, 1.329e-07, 1.154e-07, 1.003e-07, 8.735e-08,
831 7.617e-08, 6.512e-08, 5.547e-08, 4.709e-08, 3.915e-08, 3.259e-08,
832 2.738e-08, 2.327e-08, 1.98e-08, 1.711e-08, 1.493e-08, 1.306e-08,
833 1.165e-08, 1.049e-08, 9.439e-09, 8.375e-09, 7.391e-09, 6.525e-09,
834 5.759e-09, 5.083e-09, 4.485e-09, 3.953e-09, 3.601e-09, 3.27e-09,
835 2.975e-09, 2.757e-09, 2.556e-09, 2.37e-09, 2.195e-09, 2.032e-09,
836 1.912e-09, 1.79e-09, 1.679e-09, 1.572e-09, 1.482e-09, 1.402e-09,
837 1.326e-09, 1.254e-09, 1.187e-09, 1.127e-09, 1.071e-09, 1.02e-09,
838 9.673e-10, 9.193e-10, 8.752e-10, 8.379e-10, 8.017e-10, 7.66e-10,
839 7.319e-10, 7.004e-10, 6.721e-10, 6.459e-10, 6.199e-10, 5.942e-10,
840 5.703e-10, 5.488e-10, 5.283e-10, 5.082e-10, 4.877e-10, 4.696e-10,
841 4.52e-10, 4.355e-10, 4.198e-10, 4.039e-10, 3.888e-10, 3.754e-10,
842 3.624e-10, 3.499e-10, 3.381e-10, 3.267e-10, 3.163e-10, 3.058e-10,
843 2.959e-10, 2.864e-10, 2.77e-10, 2.686e-10, 2.604e-10, 2.534e-10,
844 2.462e-10, 2.386e-10, 2.318e-10, 2.247e-10, 2.189e-10, 2.133e-10,
845 2.071e-10, 2.014e-10, 1.955e-10, 1.908e-10, 1.86e-10, 1.817e-10
848 static const double n2o5[121] = {
849 1.231e-11, 3.035e-12, 1.702e-12, 9.877e-13, 8.081e-13, 9.039e-13,
850 1.169e-12, 1.474e-12, 1.651e-12, 1.795e-12, 1.998e-12, 2.543e-12,
851 4.398e-12, 7.698e-12, 1.28e-11, 2.131e-11, 3.548e-11, 5.894e-11,
852 7.645e-11, 1.089e-10, 1.391e-10, 1.886e-10, 2.386e-10, 2.986e-10,
853 3.487e-10, 3.994e-10, 4.5e-10, 4.6e-10, 4.591e-10, 4.1e-10, 3.488e-10,
854 2.846e-10, 2.287e-10, 1.696e-10, 1.011e-10, 6.428e-11, 4.324e-11,
855 2.225e-11, 6.214e-12, 3.608e-12, 8.793e-13, 4.491e-13, 1.04e-13,
856 6.1e-14, 3.436e-14, 6.671e-15, 1.171e-15, 5.848e-16, 1.212e-16,
857 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
858 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
859 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
860 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
861 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
862 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
863 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
867 static const double nh3[121] = {
868 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10,
869 1e-10, 1e-10, 1e-10, 1e-10, 9.444e-11, 8.488e-11, 7.241e-11, 5.785e-11,
870 4.178e-11, 3.018e-11, 2.18e-11, 1.574e-11, 1.137e-11, 8.211e-12,
871 5.973e-12, 4.327e-12, 3.118e-12, 2.234e-12, 1.573e-12, 1.04e-12,
872 6.762e-13, 4.202e-13, 2.406e-13, 1.335e-13, 6.938e-14, 3.105e-14,
873 1.609e-14, 1.033e-14, 6.432e-15, 4.031e-15, 2.555e-15, 1.656e-15,
874 1.115e-15, 7.904e-16, 5.63e-16, 4.048e-16, 2.876e-16, 2.004e-16,
875 1.356e-16, 9.237e-17, 6.235e-17, 4.223e-17, 3.009e-17, 2.328e-17,
876 2.002e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
877 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
878 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
879 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
880 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
881 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
882 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
883 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
884 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
885 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
886 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
890 static const double no[121] = {
891 2.586e-10, 4.143e-11, 1.566e-11, 9.591e-12, 8.088e-12, 8.462e-12,
892 1.013e-11, 1.328e-11, 1.855e-11, 2.678e-11, 3.926e-11, 5.464e-11,
893 7.012e-11, 8.912e-11, 1.127e-10, 1.347e-10, 1.498e-10, 1.544e-10,
894 1.602e-10, 1.824e-10, 2.078e-10, 2.366e-10, 2.691e-10, 5.141e-10,
895 8.259e-10, 1.254e-09, 1.849e-09, 2.473e-09, 3.294e-09, 4.16e-09,
896 5.095e-09, 6.11e-09, 6.93e-09, 7.888e-09, 8.903e-09, 9.713e-09,
897 1.052e-08, 1.115e-08, 1.173e-08, 1.21e-08, 1.228e-08, 1.239e-08,
898 1.231e-08, 1.213e-08, 1.192e-08, 1.138e-08, 1.085e-08, 1.008e-08,
899 9.224e-09, 8.389e-09, 7.262e-09, 6.278e-09, 5.335e-09, 4.388e-09,
900 3.589e-09, 2.761e-09, 2.129e-09, 1.633e-09, 1.243e-09, 9.681e-10,
901 8.355e-10, 7.665e-10, 7.442e-10, 8.584e-10, 9.732e-10, 1.063e-09,
902 1.163e-09, 1.286e-09, 1.472e-09, 1.707e-09, 2.032e-09, 2.474e-09,
903 2.977e-09, 3.506e-09, 4.102e-09, 5.013e-09, 6.493e-09, 8.414e-09,
904 1.077e-08, 1.367e-08, 1.777e-08, 2.625e-08, 3.926e-08, 5.545e-08,
905 7.195e-08, 9.464e-08, 1.404e-07, 2.183e-07, 3.329e-07, 4.535e-07,
906 6.158e-07, 8.187e-07, 1.075e-06, 1.422e-06, 1.979e-06, 2.71e-06,
907 3.58e-06, 4.573e-06, 5.951e-06, 7.999e-06, 1.072e-05, 1.372e-05,
908 1.697e-05, 2.112e-05, 2.643e-05, 3.288e-05, 3.994e-05, 4.794e-05,
909 5.606e-05, 6.383e-05, 7.286e-05, 8.156e-05, 8.883e-05, 9.469e-05,
910 9.848e-05, 0.0001023, 0.0001066, 0.0001115, 0.0001145, 0.0001142,
914 static const double no2[121] = {
915 3.036e-09, 2.945e-10, 9.982e-11, 5.069e-11, 3.485e-11, 2.982e-11,
916 2.947e-11, 3.164e-11, 3.714e-11, 4.586e-11, 6.164e-11, 8.041e-11,
917 9.982e-11, 1.283e-10, 1.73e-10, 2.56e-10, 3.909e-10, 5.959e-10,
918 9.081e-10, 1.384e-09, 1.788e-09, 2.189e-09, 2.686e-09, 3.091e-09,
919 3.49e-09, 3.796e-09, 4.2e-09, 5.103e-09, 6.005e-09, 6.3e-09, 6.706e-09,
920 7.07e-09, 7.434e-09, 7.663e-09, 7.788e-09, 7.8e-09, 7.597e-09,
921 7.482e-09, 7.227e-09, 6.403e-09, 5.585e-09, 4.606e-09, 3.703e-09,
922 2.984e-09, 2.183e-09, 1.48e-09, 8.441e-10, 5.994e-10, 3.799e-10,
923 2.751e-10, 1.927e-10, 1.507e-10, 1.102e-10, 6.971e-11, 5.839e-11,
924 3.904e-11, 3.087e-11, 2.176e-11, 1.464e-11, 1.209e-11, 8.497e-12,
925 6.477e-12, 4.371e-12, 2.914e-12, 2.424e-12, 1.753e-12, 1.35e-12,
926 9.417e-13, 6.622e-13, 5.148e-13, 3.841e-13, 3.446e-13, 3.01e-13,
927 2.551e-13, 2.151e-13, 1.829e-13, 1.64e-13, 1.475e-13, 1.352e-13,
928 1.155e-13, 9.963e-14, 9.771e-14, 9.577e-14, 9.384e-14, 9.186e-14,
929 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14,
930 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14,
931 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14,
932 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14
935 static const double o3[121] = {
936 2.218e-08, 3.394e-08, 3.869e-08, 4.219e-08, 4.501e-08, 4.778e-08,
937 5.067e-08, 5.402e-08, 5.872e-08, 6.521e-08, 7.709e-08, 9.461e-08,
938 1.269e-07, 1.853e-07, 2.723e-07, 3.964e-07, 5.773e-07, 8.2e-07,
939 1.155e-06, 1.59e-06, 2.076e-06, 2.706e-06, 3.249e-06, 3.848e-06,
940 4.459e-06, 4.986e-06, 5.573e-06, 5.958e-06, 6.328e-06, 6.661e-06,
941 6.9e-06, 7.146e-06, 7.276e-06, 7.374e-06, 7.447e-06, 7.383e-06,
942 7.321e-06, 7.161e-06, 6.879e-06, 6.611e-06, 6.216e-06, 5.765e-06,
943 5.355e-06, 4.905e-06, 4.471e-06, 4.075e-06, 3.728e-06, 3.413e-06,
944 3.125e-06, 2.856e-06, 2.607e-06, 2.379e-06, 2.17e-06, 1.978e-06,
945 1.8e-06, 1.646e-06, 1.506e-06, 1.376e-06, 1.233e-06, 1.102e-06,
946 9.839e-07, 8.771e-07, 7.814e-07, 6.947e-07, 6.102e-07, 5.228e-07,
947 4.509e-07, 3.922e-07, 3.501e-07, 3.183e-07, 2.909e-07, 2.686e-07,
948 2.476e-07, 2.284e-07, 2.109e-07, 2.003e-07, 2.013e-07, 2.022e-07,
949 2.032e-07, 2.042e-07, 2.097e-07, 2.361e-07, 2.656e-07, 2.989e-07,
950 3.37e-07, 3.826e-07, 4.489e-07, 5.26e-07, 6.189e-07, 7.312e-07,
951 8.496e-07, 8.444e-07, 8.392e-07, 8.339e-07, 8.286e-07, 8.234e-07,
952 8.181e-07, 8.129e-07, 8.077e-07, 8.026e-07, 6.918e-07, 5.176e-07,
953 3.865e-07, 2.885e-07, 2.156e-07, 1.619e-07, 1.219e-07, 9.161e-08,
954 6.972e-08, 5.399e-08, 3.498e-08, 2.111e-08, 1.322e-08, 8.482e-09,
955 5.527e-09, 3.423e-09, 2.071e-09, 1.314e-09, 8.529e-10, 5.503e-10,
959 static const double ocs[121] = {
960 6e-10, 6e-10, 6e-10, 6e-10, 6e-10, 6e-10, 6e-10, 6e-10, 6e-10, 5.997e-10,
961 5.989e-10, 5.881e-10, 5.765e-10, 5.433e-10, 5.074e-10, 4.567e-10,
962 4.067e-10, 3.601e-10, 3.093e-10, 2.619e-10, 2.232e-10, 1.805e-10,
963 1.46e-10, 1.187e-10, 8.03e-11, 5.435e-11, 3.686e-11, 2.217e-11,
964 1.341e-11, 8.756e-12, 4.511e-12, 2.37e-12, 1.264e-12, 8.28e-13,
965 5.263e-13, 3.209e-13, 1.717e-13, 9.068e-14, 4.709e-14, 2.389e-14,
966 1.236e-14, 1.127e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
967 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
968 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
969 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
970 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
971 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
972 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
973 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
974 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
975 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
976 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
977 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
978 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
979 1.091e-14, 1.091e-14, 1.091e-14
982 static const double sf6[121] = {
983 4.103e-12, 4.103e-12, 4.103e-12, 4.103e-12, 4.103e-12, 4.103e-12,
984 4.103e-12, 4.103e-12, 4.103e-12, 4.087e-12, 4.064e-12, 4.023e-12,
985 3.988e-12, 3.941e-12, 3.884e-12, 3.755e-12, 3.622e-12, 3.484e-12,
986 3.32e-12, 3.144e-12, 2.978e-12, 2.811e-12, 2.653e-12, 2.489e-12,
987 2.332e-12, 2.199e-12, 2.089e-12, 2.013e-12, 1.953e-12, 1.898e-12,
988 1.859e-12, 1.826e-12, 1.798e-12, 1.776e-12, 1.757e-12, 1.742e-12,
989 1.728e-12, 1.717e-12, 1.707e-12, 1.698e-12, 1.691e-12, 1.685e-12,
990 1.679e-12, 1.675e-12, 1.671e-12, 1.668e-12, 1.665e-12, 1.663e-12,
991 1.661e-12, 1.659e-12, 1.658e-12, 1.657e-12, 1.656e-12, 1.655e-12,
992 1.654e-12, 1.653e-12, 1.653e-12, 1.652e-12, 1.652e-12, 1.652e-12,
993 1.651e-12, 1.651e-12, 1.651e-12, 1.651e-12, 1.651e-12, 1.651e-12,
994 1.651e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
995 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
996 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
997 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
998 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
999 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
1000 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
1001 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12
1004 static const double so2[121] = {
1005 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10,
1006 1e-10, 1e-10, 9.867e-11, 9.537e-11, 9e-11, 8.404e-11, 7.799e-11,
1007 7.205e-11, 6.616e-11, 6.036e-11, 5.475e-11, 5.007e-11, 4.638e-11,
1008 4.346e-11, 4.055e-11, 3.763e-11, 3.471e-11, 3.186e-11, 2.905e-11,
1009 2.631e-11, 2.358e-11, 2.415e-11, 2.949e-11, 3.952e-11, 5.155e-11,
1010 6.76e-11, 8.741e-11, 1.099e-10, 1.278e-10, 1.414e-10, 1.512e-10,
1011 1.607e-10, 1.699e-10, 1.774e-10, 1.832e-10, 1.871e-10, 1.907e-10,
1012 1.943e-10, 1.974e-10, 1.993e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
1013 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
1014 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
1015 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
1016 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
1017 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
1018 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
1019 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10
1022 const double *q[
NG] = { NULL };
1025 for (
int ig = 0; ig < ctl->
ng; ig++) {
1027 if (strcasecmp(ctl->
emitter[ig],
"C2H2") == 0)
1029 if (strcasecmp(ctl->
emitter[ig],
"C2H6") == 0)
1031 if (strcasecmp(ctl->
emitter[ig],
"CCl4") == 0)
1033 if (strcasecmp(ctl->
emitter[ig],
"CH3OH") == 0)
1035 if (strcasecmp(ctl->
emitter[ig],
"CH4") == 0)
1037 if (strcasecmp(ctl->
emitter[ig],
"ClO") == 0)
1039 if (strcasecmp(ctl->
emitter[ig],
"ClONO2") == 0)
1041 if (strcasecmp(ctl->
emitter[ig],
"CO") == 0)
1043 if (strcasecmp(ctl->
emitter[ig],
"COF2") == 0)
1045 if (strcasecmp(ctl->
emitter[ig],
"F11") == 0)
1047 if (strcasecmp(ctl->
emitter[ig],
"F113") == 0)
1049 if (strcasecmp(ctl->
emitter[ig],
"F114") == 0)
1051 if (strcasecmp(ctl->
emitter[ig],
"F12") == 0)
1053 if (strcasecmp(ctl->
emitter[ig],
"F14") == 0)
1055 if (strcasecmp(ctl->
emitter[ig],
"F22") == 0)
1057 if (strcasecmp(ctl->
emitter[ig],
"H2CO") == 0)
1059 if (strcasecmp(ctl->
emitter[ig],
"H2O") == 0)
1061 if (strcasecmp(ctl->
emitter[ig],
"H2O2") == 0)
1063 if (strcasecmp(ctl->
emitter[ig],
"HCl") == 0)
1065 if (strcasecmp(ctl->
emitter[ig],
"HCN") == 0)
1067 if (strcasecmp(ctl->
emitter[ig],
"HF") == 0)
1069 if (strcasecmp(ctl->
emitter[ig],
"HNO3") == 0)
1071 if (strcasecmp(ctl->
emitter[ig],
"HNO4") == 0)
1073 if (strcasecmp(ctl->
emitter[ig],
"HOCl") == 0)
1075 if (strcasecmp(ctl->
emitter[ig],
"N2O") == 0)
1077 if (strcasecmp(ctl->
emitter[ig],
"N2O5") == 0)
1079 if (strcasecmp(ctl->
emitter[ig],
"NH3") == 0)
1081 if (strcasecmp(ctl->
emitter[ig],
"NO") == 0)
1083 if (strcasecmp(ctl->
emitter[ig],
"NO2") == 0)
1085 if (strcasecmp(ctl->
emitter[ig],
"O3") == 0)
1087 if (strcasecmp(ctl->
emitter[ig],
"OCS") == 0)
1089 if (strcasecmp(ctl->
emitter[ig],
"SF6") == 0)
1091 if (strcasecmp(ctl->
emitter[ig],
"SO2") == 0)
1096 for (
int ip = 0; ip < atm->
np; ip++) {
1102 atm->
p[ip] =
LOGY(z[iz], pre[iz], z[iz + 1], pre[iz + 1], atm->
z[ip]);
1105 atm->
t[ip] =
LIN(z[iz], tem[iz], z[iz + 1], tem[iz + 1], atm->
z[ip]);
1108 for (
int ig = 0; ig < ctl->
ng; ig++)
1111 LIN(z[iz], q[ig][iz], z[iz + 1], q[ig][iz + 1], atm->
z[ip]);
1118 371.789948e-6 + 2.026214e-6 * (atm->
time[ip] - 63158400.) / 31557600.;
1121 if (ctl->
ig_n2 >= 0)
1125 if (ctl->
ig_o2 >= 0)
1129 for (
int iw = 0; iw < ctl->
nw; iw++)
1134 for (
int icl = 0; icl < ctl->
ncl; icl++)
1139 for (
int isf = 0; isf < ctl->
nsf; isf++)
1140 atm->
sfeps[isf] = 1;
1152 const double D = sec / 86400 - 0.5;
1155 const double g =
DEG2RAD(357.529 + 0.98560028 * D);
1156 const double q = 280.459 + 0.98564736 * D;
1157 const double L =
DEG2RAD(q + 1.915 * sin(g) + 0.020 * sin(2 * g));
1160 const double e =
DEG2RAD(23.439 - 0.00000036 * D);
1163 const double sindec = sin(e) * sin(L);
1166 const double ra = atan2(cos(e) * sin(L), cos(L));
1169 const double GMST = 18.697374558 + 24.06570982441908 * D;
1172 const double LST = GMST + lon / 15;
1175 const double h = LST / 12 * M_PI - ra;
1178 const double lat_help =
DEG2RAD(lat);
1181 return sin(lat_help) * sindec + cos(lat_help)
1182 * sqrt(1 -
POW2(sindec)) * cos(h);
1188 const gsl_vector *dx,
1189 const gsl_vector *dy,
1190 const gsl_matrix *s_a_inv,
1191 const gsl_vector *sig_eps_inv) {
1193 double chisq_a, chisq_m = 0;
1196 const size_t m = dy->size;
1197 const size_t n = dx->size;
1200 gsl_vector *x_aux = gsl_vector_alloc(n);
1204 for (
size_t i = 0; i < m; i++)
1205 chisq_m +=
POW2(gsl_vector_get(dy, i) * gsl_vector_get(sig_eps_inv, i));
1206 gsl_blas_dgemv(CblasNoTrans, 1.0, s_a_inv, dx, 0.0, x_aux);
1207 gsl_blas_ddot(dx, x_aux, &chisq_a);
1210 gsl_vector_free(x_aux);
1213 return (chisq_m + chisq_a) / (double) m;
1224 static const double co2296[2001] =
1225 { 9.3388e-5, 9.7711e-5, 1.0224e-4, 1.0697e-4,
1226 1.1193e-4, 1.1712e-4, 1.2255e-4, 1.2824e-4, 1.3419e-4, 1.4043e-4,
1227 1.4695e-4, 1.5378e-4, 1.6094e-4, 1.6842e-4, 1.7626e-4, 1.8447e-4,
1228 1.9307e-4, 2.0207e-4, 2.1149e-4, 2.2136e-4, 2.3169e-4, 2.4251e-4,
1229 2.5384e-4, 2.657e-4, 2.7813e-4, 2.9114e-4, 3.0477e-4, 3.1904e-4,
1230 3.3399e-4, 3.4965e-4, 3.6604e-4, 3.8322e-4, 4.0121e-4, 4.2006e-4,
1231 4.398e-4, 4.6047e-4, 4.8214e-4, 5.0483e-4, 5.286e-4, 5.535e-4,
1232 5.7959e-4, 6.0693e-4, 6.3557e-4, 6.6558e-4, 6.9702e-4, 7.2996e-4,
1233 7.6449e-4, 8.0066e-4, 8.3856e-4, 8.7829e-4, 9.1991e-4, 9.6354e-4,
1234 .0010093, .0010572, .0011074, .00116, .0012152, .001273,
1235 .0013336, .0013972, .0014638, .0015336, .0016068, .0016835,
1236 .001764, .0018483, .0019367, .0020295, .0021267, .0022286,
1237 .0023355, .0024476, .0025652, .0026885, .0028178, .0029534,
1238 .0030956, .0032448, .0034012, .0035654, .0037375, .0039181,
1239 .0041076, .0043063, .0045148, .0047336, .0049632, .005204,
1240 .0054567, .0057219, .0060002, .0062923, .0065988, .0069204,
1241 .007258, .0076123, .0079842, .0083746, .0087844, .0092146,
1242 .0096663, .01014, .010638, .011161, .01171, .012286, .012891,
1243 .013527, .014194, .014895, .015631, .016404, .017217, .01807,
1244 .018966, .019908, .020897, .021936, .023028, .024176, .025382,
1245 .026649, .027981, .02938, .030851, .032397, .034023, .035732,
1246 .037528, .039416, .041402, .04349, .045685, .047994, .050422,
1247 .052975, .055661, .058486, .061458, .064584, .067873, .071334,
1248 .074975, .078807, .082839, .087082, .091549, .096249, .1012,
1249 .10641, .11189, .11767, .12375, .13015, .13689, .14399, .15147,
1250 .15935, .16765, .17639, .18561, .19531, .20554, .21632, .22769,
1251 .23967, .25229, .2656, .27964, .29443, .31004, .3265, .34386,
1252 .36218, .3815, .40188, .42339, .44609, .47004, .49533, .52202,
1253 .5502, .57995, .61137, .64455, .6796, .71663, .75574, .79707,
1254 .84075, .88691, .9357, .98728, 1.0418, 1.0995, 1.1605, 1.225,
1255 1.2932, 1.3654, 1.4418, 1.5227, 1.6083, 1.6989, 1.7948, 1.8964,
1256 2.004, 2.118, 2.2388, 2.3668, 2.5025, 2.6463, 2.7988, 2.9606,
1257 3.1321, 3.314, 3.5071, 3.712, 3.9296, 4.1605, 4.4058, 4.6663,
1258 4.9431, 5.2374, 5.5501, 5.8818, 6.2353, 6.6114, 7.0115, 7.4372,
1259 7.8905, 8.3731, 8.8871, 9.4349, 10.019, 10.641, 11.305, 12.013,
1260 12.769, 13.576, 14.437, 15.358, 16.342, 17.39, 18.513, 19.716,
1261 21.003, 22.379, 23.854, 25.436, 27.126, 28.942, 30.89, 32.973,
1262 35.219, 37.634, 40.224, 43.021, 46.037, 49.29, 52.803, 56.447,
1263 60.418, 64.792, 69.526, 74.637, 80.182, 86.193, 92.713, 99.786,
1264 107.47, 115.84, 124.94, 134.86, 145.69, 157.49, 170.3, 184.39,
1265 199.83, 216.4, 234.55, 254.72, 276.82, 299.85, 326.16, 354.99,
1266 386.51, 416.68, 449.89, 490.12, 534.35, 578.25, 632.26, 692.61,
1267 756.43, 834.75, 924.11, 1016.9, 996.96, 1102.7, 1219.2, 1351.9,
1268 1494.3, 1654.1, 1826.5, 2027.9, 2249., 2453.8, 2714.4, 2999.4,
1269 3209.5, 3509., 3840.4, 3907.5, 4190.7, 4533.5, 4648.3, 5059.1,
1270 5561.6, 6191.4, 6820.8, 7905.9, 9362.2, 2431.3, 2211.3, 2046.8,
1271 2023.8, 1985.9, 1905.9, 1491.1, 1369.8, 1262.2, 1200.7, 887.74,
1272 820.25, 885.23, 887.21, 816.73, 1126.9, 1216.2, 1272.4, 1579.5,
1273 1634.2, 1656.3, 1657.9, 1789.5, 1670.8, 1509.5, 8474.6, 7489.2,
1274 6793.6, 6117., 5574.1, 5141.2, 5084.6, 4745.1, 4413.2, 4102.8,
1275 4024.7, 3715., 3398.6, 3100.8, 2900.4, 2629.2, 2374., 2144.7,
1276 1955.8, 1760.8, 1591.2, 1435.2, 1296.2, 1174., 1065.1, 967.76,
1277 999.48, 897.45, 809.23, 732.77, 670.26, 611.93, 560.11, 518.77,
1278 476.84, 438.8, 408.48, 380.21, 349.24, 322.71, 296.65, 272.85,
1279 251.96, 232.04, 213.88, 197.69, 182.41, 168.41, 155.79, 144.05,
1280 133.31, 123.48, 114.5, 106.21, 98.591, 91.612, 85.156, 79.204,
1281 73.719, 68.666, 63.975, 59.637, 56.35, 52.545, 49.042, 45.788,
1282 42.78, 39.992, 37.441, 35.037, 32.8, 30.744, 28.801, 26.986,
1283 25.297, 23.731, 22.258, 20.883, 19.603, 18.403, 17.295, 16.249,
1284 15.271, 14.356, 13.501, 12.701, 11.954, 11.254, 10.6, 9.9864,
1285 9.4118, 8.8745, 8.3714, 7.8997, 7.4578, 7.0446, 6.6573, 6.2949,
1286 5.9577, 5.6395, 5.3419, 5.063, 4.8037, 4.5608, 4.3452, 4.1364,
1287 3.9413, 3.7394, 3.562, 3.3932, 3.2325, 3.0789, 2.9318, 2.7898,
1288 2.6537, 2.5225, 2.3958, 2.2305, 2.1215, 2.0245, 1.9427, 1.8795,
1289 1.8336, 1.7604, 1.7016, 1.6419, 1.5282, 1.4611, 1.3443, 1.27,
1290 1.1675, 1.0824, 1.0534, .99833, .95854, .92981, .90887, .89346,
1291 .88113, .87068, .86102, .85096, .88262, .86151, .83565, .80518,
1292 .77045, .73736, .74744, .74954, .75773, .82267, .83493, .89402,
1293 .89725, .93426, .95564, .94045, .94174, .93404, .92035, .90456,
1294 .88621, .86673, .78117, .7515, .72056, .68822, .65658, .62764,
1295 .55984, .55598, .57407, .60963, .63763, .66198, .61132, .60972,
1296 .52496, .50649, .41872, .3964, .32422, .27276, .24048, .23772,
1297 .2286, .22711, .23999, .32038, .34371, .36621, .38561, .39953,
1298 .40636, .44913, .42716, .3919, .35477, .33935, .3351, .39746,
1299 .40993, .49398, .49956, .56157, .54742, .57295, .57386, .55417,
1300 .50745, .471, .43446, .39102, .34993, .31269, .27888, .24912,
1301 .22291, .19994, .17972, .16197, .14633, .13252, .12029, .10942,
1302 .099745, .091118, .083404, .076494, .070292, .064716, .059697,
1303 .055173, .051093, .047411, .044089, .041092, .038392, .035965,
1304 .033789, .031846, .030122, .028607, .02729, .026169, .025209,
1305 .024405, .023766, .023288, .022925, .022716, .022681, .022685,
1306 .022768, .023133, .023325, .023486, .024004, .024126, .024083,
1307 .023785, .024023, .023029, .021649, .021108, .019454, .017809,
1308 .017292, .016635, .017037, .018068, .018977, .018756, .017847,
1309 .016557, .016142, .014459, .012869, .012381, .010875, .0098701,
1310 .009285, .0091698, .0091701, .0096145, .010553, .01106, .012613,
1311 .014362, .015017, .016507, .017741, .01768, .017784, .0171,
1312 .016357, .016172, .017257, .018978, .020935, .021741, .023567,
1313 .025183, .025589, .026732, .027648, .028278, .028215, .02856,
1314 .029015, .029062, .028851, .028497, .027825, .027801, .026523,
1315 .02487, .022967, .022168, .020194, .018605, .017903, .018439,
1316 .019697, .020311, .020855, .020057, .018608, .016738, .015963,
1317 .013844, .011801, .011134, .0097573, .0086007, .0086226,
1318 .0083721, .0090978, .0097616, .0098426, .011317, .012853, .01447,
1319 .014657, .015771, .016351, .016079, .014829, .013431, .013185,
1320 .013207, .01448, .016176, .017971, .018265, .019526, .020455,
1321 .019797, .019802, .0194, .018176, .017505, .016197, .015339,
1322 .014401, .013213, .012203, .011186, .010236, .0093288, .0084854,
1323 .0076837, .0069375, .0062614, .0056628, .0051153, .0046015,
1324 .0041501, .003752, .0033996, .0030865, .0028077, .0025586,
1325 .0023355, .0021353, .0019553, .0017931, .0016466, .0015141,
1326 .0013941, .0012852, .0011862, .0010962, .0010142, 9.3935e-4,
1327 8.71e-4, 8.0851e-4, 7.5132e-4, 6.9894e-4, 6.5093e-4, 6.0689e-4,
1328 5.6647e-4, 5.2935e-4, 4.9525e-4, 4.6391e-4, 4.3509e-4, 4.086e-4,
1329 3.8424e-4, 3.6185e-4, 3.4126e-4, 3.2235e-4, 3.0498e-4, 2.8904e-4,
1330 2.7444e-4, 2.6106e-4, 2.4883e-4, 2.3766e-4, 2.275e-4, 2.1827e-4,
1331 2.0992e-4, 2.0239e-4, 1.9563e-4, 1.896e-4, 1.8427e-4, 1.796e-4,
1332 1.7555e-4, 1.7209e-4, 1.692e-4, 1.6687e-4, 1.6505e-4, 1.6375e-4,
1333 1.6294e-4, 1.6261e-4, 1.6274e-4, 1.6334e-4, 1.6438e-4, 1.6587e-4,
1334 1.678e-4, 1.7017e-4, 1.7297e-4, 1.762e-4, 1.7988e-4, 1.8399e-4,
1335 1.8855e-4, 1.9355e-4, 1.9902e-4, 2.0494e-4, 2.1134e-4, 2.1823e-4,
1336 2.2561e-4, 2.335e-4, 2.4192e-4, 2.5088e-4, 2.604e-4, 2.705e-4,
1337 2.8119e-4, 2.9251e-4, 3.0447e-4, 3.171e-4, 3.3042e-4, 3.4447e-4,
1338 3.5927e-4, 3.7486e-4, 3.9127e-4, 4.0854e-4, 4.267e-4, 4.4579e-4,
1339 4.6586e-4, 4.8696e-4, 5.0912e-4, 5.324e-4, 5.5685e-4, 5.8253e-4,
1340 6.0949e-4, 6.378e-4, 6.6753e-4, 6.9873e-4, 7.3149e-4, 7.6588e-4,
1341 8.0198e-4, 8.3987e-4, 8.7964e-4, 9.2139e-4, 9.6522e-4, .0010112,
1342 .0010595, .0011102, .0011634, .0012193, .001278, .0013396,
1343 .0014043, .0014722, .0015436, .0016185, .0016972, .0017799,
1344 .0018668, .001958, .0020539, .0021547, .0022606, .0023719,
1345 .002489, .002612, .0027414, .0028775, .0030206, .0031712,
1346 .0033295, .0034962, .0036716, .0038563, .0040506, .0042553,
1347 .0044709, .004698, .0049373, .0051894, .0054552, .0057354,
1348 .006031, .0063427, .0066717, .0070188, .0073854, .0077726,
1349 .0081816, .0086138, .0090709, .0095543, .010066, .010607,
1350 .011181, .011789, .012433, .013116, .013842, .014613, .015432,
1351 .016304, .017233, .018224, .019281, .020394, .021574, .022836,
1352 .024181, .025594, .027088, .028707, .030401, .032245, .034219,
1353 .036262, .038539, .040987, .043578, .04641, .04949, .052726,
1354 .056326, .0602, .064093, .068521, .073278, .077734, .083064,
1355 .088731, .093885, .1003, .1072, .11365, .12187, .13078, .13989,
1356 .15095, .16299, .17634, .19116, .20628, .22419, .24386, .26587,
1357 .28811, .31399, .34321, .36606, .39675, .42742, .44243, .47197,
1358 .49993, .49027, .51147, .52803, .48931, .49729, .5026, .43854,
1359 .441, .44766, .43414, .46151, .50029, .55247, .43855, .32115,
1360 .32607, .3431, .36119, .38029, .41179, .43996, .47144, .51853,
1361 .55362, .59122, .66338, .69877, .74001, .82923, .86907, .90361,
1362 1.0025, 1.031, 1.0559, 1.104, 1.1178, 1.1341, 1.1547, 1.351,
1363 1.4772, 1.4812, 1.4907, 1.512, 1.5442, 1.5853, 1.6358, 1.6963,
1364 1.7674, 1.8474, 1.9353, 2.0335, 2.143, 2.2592, 2.3853, 2.5217,
1365 2.6686, 2.8273, 2.9998, 3.183, 3.3868, 3.6109, 3.8564, 4.1159,
1366 4.4079, 4.7278, 5.0497, 5.3695, 5.758, 6.0834, 6.4976, 6.9312,
1367 7.38, 7.5746, 7.9833, 8.3791, 8.3956, 8.7501, 9.1067, 9.072,
1368 9.4649, 9.9112, 10.402, 10.829, 11.605, 12.54, 12.713, 10.443,
1369 10.825, 11.375, 11.955, 12.623, 13.326, 14.101, 15.041, 15.547,
1370 16.461, 17.439, 18.716, 19.84, 21.036, 22.642, 23.901, 25.244,
1371 27.03, 28.411, 29.871, 31.403, 33.147, 34.744, 36.456, 39.239,
1372 43.605, 45.162, 47.004, 49.093, 51.391, 53.946, 56.673, 59.629,
1373 63.167, 66.576, 70.254, 74.222, 78.477, 83.034, 87.914, 93.18,
1374 98.77, 104.74, 111.15, 117.95, 125.23, 133.01, 141.33, 150.21,
1375 159.71, 169.89, 180.93, 192.54, 204.99, 218.34, 232.65, 248.,
1376 264.47, 282.14, 301.13, 321.53, 343.48, 367.08, 392.5, 419.88,
1377 449.4, 481.26, 515.64, 552.79, 592.99, 636.48, 683.61, 734.65,
1378 789.99, 850.02, 915.14, 985.81, 1062.5, 1147.1, 1237.8, 1336.4,
1379 1443.2, 1558.9, 1684.2, 1819.2, 1965.2, 2122.6, 2291.7, 2470.8,
1380 2665.7, 2874.9, 3099.4, 3337.9, 3541., 3813.3, 4111.9, 4439.3,
1381 4798.9, 5196., 5639.2, 6087.5, 6657.7, 7306.7, 8040.7, 8845.5,
1382 9702.2, 10670., 11739., 12842., 14141., 15498., 17068., 18729.,
1383 20557., 22559., 25248., 27664., 30207., 32915., 35611., 38081.,
1384 40715., 43191., 41651., 42750., 43785., 44353., 44366., 44189.,
1385 43618., 42862., 41878., 35133., 35215., 36383., 39420., 44055.,
1386 44155., 45850., 46853., 39197., 38274., 29942., 28553., 21792.,
1387 21228., 17106., 14955., 18181., 19557., 21427., 23728., 26301.,
1388 28584., 30775., 32536., 33867., 40089., 39204., 37329., 34452.,
1389 31373., 33921., 34800., 36043., 44415., 45162., 52181., 50895.,
1390 54140., 50840., 50468., 48302., 44915., 40910., 36754., 32755.,
1391 29093., 25860., 22962., 20448., 18247., 16326., 14645., 13165.,
1392 11861., 10708., 9686.9, 8779.7, 7971.9, 7250.8, 6605.7, 6027.2,
1393 5507.3, 5039.1, 4616.6, 4234.8, 3889., 3575.4, 3290.5, 3031.3,
1394 2795.2, 2579.9, 2383.1, 2203.3, 2038.6, 1887.6, 1749.1, 1621.9,
1395 1505., 1397.4, 1298.3, 1207., 1122.8, 1045., 973.1, 906.64,
1396 845.16, 788.22, 735.48, 686.57, 641.21, 599.1, 559.99, 523.64,
1397 489.85, 458.42, 429.16, 401.92, 376.54, 352.88, 330.82, 310.24,
1398 291.03, 273.09, 256.34, 240.69, 226.05, 212.37, 199.57, 187.59,
1399 176.37, 165.87, 156.03, 146.82, 138.17, 130.07, 122.47, 115.34,
1400 108.65, 102.37, 96.473, 90.934, 85.73, 80.84, 76.243, 71.922,
1401 67.858, 64.034, 60.438, 57.052, 53.866, 50.866, 48.04, 45.379,
1402 42.872, 40.51, 38.285, 36.188, 34.211, 32.347, 30.588, 28.929,
1403 27.362, 25.884, 24.489, 23.171, 21.929, 20.755, 19.646, 18.599,
1404 17.61, 16.677, 15.795, 14.961, 14.174, 13.43, 12.725, 12.06,
1405 11.431, 10.834, 10.27, 9.7361, 9.2302, 8.7518, 8.2997, 7.8724,
1406 7.4674, 7.0848, 6.7226, 6.3794, 6.054, 5.745, 5.4525, 5.1752,
1407 4.9121, 4.6625, 4.4259, 4.2015, 3.9888, 3.7872, 3.5961, 3.4149,
1408 3.2431, 3.0802, 2.9257, 2.7792, 2.6402, 2.5084, 2.3834, 2.2648,
1409 2.1522, 2.0455, 1.9441, 1.848, 1.7567, 1.6701, 1.5878, 1.5097,
1410 1.4356, 1.3651, 1.2981, 1.2345, 1.174, 1.1167, 1.062, 1.0101,
1411 .96087, .91414, .86986, .82781, .78777, .74971, .71339, .67882,
1412 .64604, .61473, .58507, .55676, .52987, .5044, .48014, .45715,
1413 .43527, .41453, .3948, .37609, .35831, .34142, .32524, .30995,
1414 .29536, .28142, .26807, .25527, .24311, .23166, .22077, .21053,
1415 .20081, .19143, .18261, .17407, .16603, .15833, .15089, .14385,
1416 .13707, .13065, .12449, .11865, .11306, .10774, .10266, .097818,
1417 .093203, .088815, .084641, .080671, .076892, .073296, .069873,
1418 .066613, .06351, .060555, .05774, .055058, .052504, .050071,
1419 .047752, .045543, .043438, .041432, .039521, .037699, .035962,
1420 .034307, .032729, .031225, .029791, .028423, .02712, .025877,
1421 .024692, .023563, .022485, .021458, .020478, .019543, .018652,
1422 .017802, .016992, .016219, .015481, .014778, .014107, .013467,
1423 .012856, .012274, .011718, .011188, .010682, .0102, .0097393,
1424 .0093001, .008881, .0084812, .0080997, .0077358, .0073885,
1425 .0070571, .0067409, .0064393, .0061514, .0058768, .0056147,
1426 .0053647, .0051262, .0048987, .0046816, .0044745, .0042769,
1427 .0040884, .0039088, .0037373, .0035739, .003418, .0032693,
1428 .0031277, .0029926, .0028639, .0027413, .0026245, .0025133,
1429 .0024074, .0023066, .0022108, .0021196, .002033, .0019507,
1430 .0018726, .0017985, .0017282, .0016617, .0015988, .0015394,
1431 .0014834, .0014306, .0013811, .0013346, .0012911, .0012506,
1432 .0012131, .0011784, .0011465, .0011175, .0010912, .0010678,
1433 .0010472, .0010295, .0010147, .001003, 9.9428e-4, 9.8883e-4,
1434 9.8673e-4, 9.8821e-4, 9.9343e-4, .0010027, .0010164, .0010348,
1435 .0010586, .0010882, .0011245, .0011685, .0012145, .0012666,
1436 .0013095, .0013688, .0014048, .0014663, .0015309, .0015499,
1437 .0016144, .0016312, .001705, .0017892, .0018499, .0019715,
1438 .0021102, .0022442, .0024284, .0025893, .0027703, .0029445,
1439 .0031193, .003346, .0034552, .0036906, .0037584, .0040084,
1440 .0041934, .0044587, .0047093, .0049759, .0053421, .0055134,
1441 .0059048, .0058663, .0061036, .0063259, .0059657, .0060653,
1442 .0060972, .0055539, .0055653, .0055772, .005331, .0054953,
1443 .0055919, .0058684, .006183, .0066675, .0069808, .0075142,
1444 .0078536, .0084282, .0089454, .0094625, .0093703, .0095857,
1445 .0099283, .010063, .010521, .0097778, .0098175, .010379, .010447,
1446 .0105, .010617, .010706, .01078, .011177, .011212, .011304,
1447 .011446, .011603, .011816, .012165, .012545, .013069, .013539,
1448 .01411, .014776, .016103, .017016, .017994, .018978, .01998,
1449 .021799, .022745, .023681, .024627, .025562, .026992, .027958,
1450 .029013, .030154, .031402, .03228, .033651, .035272, .037088,
1451 .039021, .041213, .043597, .045977, .04877, .051809, .054943,
1452 .058064, .061528, .06537, .069309, .071928, .075752, .079589,
1453 .083352, .084096, .087497, .090817, .091198, .094966, .099045,
1454 .10429, .10867, .11518, .12269, .13126, .14087, .15161, .16388,
1455 .16423, .1759, .18721, .19994, .21275, .22513, .23041, .24231,
1456 .25299, .25396, .26396, .27696, .27929, .2908, .30595, .31433,
1457 .3282, .3429, .35944, .37467, .39277, .41245, .43326, .45649,
1458 .48152, .51897, .54686, .57877, .61263, .64962, .68983, .73945,
1459 .78619, .83537, .89622, .95002, 1.0067, 1.0742, 1.1355, 1.2007,
1460 1.2738, 1.347, 1.4254, 1.5094, 1.6009, 1.6976, 1.8019, 1.9148,
1461 2.0357, 2.166, 2.3066, 2.4579, 2.6208, 2.7966, 2.986, 3.188,
1462 3.4081, 3.6456, 3.9, 4.1747, 4.4712, 4.7931, 5.1359, 5.5097,
1463 5.9117, 6.3435, 6.8003, 7.3001, 7.8385, 8.3945, 9.011, 9.6869,
1464 10.392, 11.18, 12.036, 12.938, 13.944, 14.881, 16.029, 17.255,
1465 18.574, 19.945, 21.38, 22.9, 24.477, 26.128, 27.87, 29.037,
1466 30.988, 33.145, 35.506, 37.76, 40.885, 44.487, 48.505, 52.911,
1467 57.56, 61.964, 67.217, 72.26, 78.343, 85.08, 91.867, 99.435,
1468 107.68, 116.97, 127.12, 138.32, 150.26, 163.04, 174.81, 189.26,
1469 205.61, 224.68, 240.98, 261.88, 285.1, 307.58, 334.35, 363.53,
1470 394.68, 427.85, 458.85, 489.25, 472.87, 486.93, 496.27, 501.52,
1471 501.57, 497.14, 488.09, 476.32, 393.76, 388.51, 393.42, 414.45,
1472 455.12, 514.62, 520.38, 547.42, 562.6, 487.47, 480.83, 391.06,
1473 376.92, 303.7, 295.91, 256.03, 236.73, 280.38, 310.71, 335.53,
1474 367.88, 401.94, 435.52, 469.13, 497.94, 588.82, 597.94, 597.2,
1475 588.28, 571.2, 555.75, 603.56, 638.15, 680.75, 801.72, 848.01,
1476 962.15, 990.06, 1068.1, 1076.2, 1115.3, 1134.2, 1136.6, 1119.1,
1477 1108.9, 1090.6, 1068.7, 1041.9, 1005.4, 967.98, 927.08, 780.1,
1478 751.41, 733.12, 742.65, 785.56, 855.16, 852.45, 878.1, 784.59,
1479 777.81, 765.13, 622.93, 498.09, 474.89, 386.9, 378.48, 336.17,
1480 322.04, 329.57, 350.5, 383.38, 420.02, 462.39, 499.71, 531.98,
1481 654.99, 653.43, 639.99, 605.16, 554.16, 504.42, 540.64, 552.33,
1482 679.46, 699.51, 713.91, 832.17, 919.91, 884.96, 907.57, 846.56,
1483 818.56, 768.93, 706.71, 642.17, 575.95, 515.38, 459.07, 409.02,
1484 364.61, 325.46, 291.1, 260.89, 234.39, 211.01, 190.38, 172.11,
1485 155.91, 141.49, 128.63, 117.13, 106.84, 97.584, 89.262, 81.756,
1486 74.975, 68.842, 63.28, 58.232, 53.641, 49.46, 45.649, 42.168,
1487 38.991, 36.078, 33.409, 30.96, 28.71, 26.642, 24.737, 22.985,
1488 21.37, 19.882, 18.512, 17.242, 16.073, 14.987, 13.984, 13.05,
1489 12.186, 11.384, 10.637, 9.9436, 9.2988, 8.6991, 8.141, 7.6215,
1490 7.1378, 6.6872, 6.2671, 5.8754, 5.51, 5.1691, 4.851, 4.5539,
1491 4.2764, 4.0169, 3.7742, 3.5472, 3.3348, 3.1359, 2.9495, 2.7749,
1492 2.6113, 2.4578, 2.3139, 2.1789, 2.0523, 1.9334, 1.8219, 1.7171,
1493 1.6188, 1.5263, 1.4395, 1.3579, 1.2812, 1.209, 1.1411, 1.0773,
1494 1.0171, .96048, .90713, .85684, .80959, .76495, .72282, .68309,
1495 .64563, .61035, .57707, .54573, .51622, .48834, .46199, .43709,
1496 .41359, .39129, .37034, .35064, .33198, .31442, .29784, .28218,
1497 .26732, .25337, .24017, .22774, .21601, .20479, .19426
1500 static const double co2260[2001] =
1501 { 5.7971e-5, 6.0733e-5, 6.3628e-5, 6.6662e-5,
1502 6.9843e-5, 7.3176e-5, 7.6671e-5, 8.0334e-5, 8.4175e-5, 8.8201e-5,
1503 9.2421e-5, 9.6846e-5, 1.0149e-4, 1.0635e-4, 1.1145e-4, 1.1679e-4,
1504 1.224e-4, 1.2828e-4, 1.3444e-4, 1.409e-4, 1.4768e-4, 1.5479e-4,
1505 1.6224e-4, 1.7006e-4, 1.7826e-4, 1.8685e-4, 1.9587e-4, 2.0532e-4,
1506 2.1524e-4, 2.2565e-4, 2.3656e-4, 2.48e-4, 2.6001e-4, 2.7261e-4,
1507 2.8582e-4, 2.9968e-4, 3.1422e-4, 3.2948e-4, 3.4548e-4, 3.6228e-4,
1508 3.799e-4, 3.9838e-4, 4.1778e-4, 4.3814e-4, 4.595e-4, 4.8191e-4,
1509 5.0543e-4, 5.3012e-4, 5.5603e-4, 5.8321e-4, 6.1175e-4, 6.417e-4,
1510 6.7314e-4, 7.0614e-4, 7.4078e-4, 7.7714e-4, 8.1531e-4, 8.5538e-4,
1511 8.9745e-4, 9.4162e-4, 9.8798e-4, .0010367, .0010878, .0011415,
1512 .0011978, .001257, .0013191, .0013844, .001453, .0015249,
1513 .0016006, .00168, .0017634, .001851, .001943, .0020397, .0021412,
1514 .0022479, .00236, .0024778, .0026015, .0027316, .0028682,
1515 .0030117, .0031626, .0033211, .0034877, .0036628, .0038469,
1516 .0040403, .0042436, .0044574, .004682, .0049182, .0051665,
1517 .0054276, .0057021, .0059907, .0062942, .0066133, .0069489,
1518 .0073018, .0076729, .0080632, .0084738, .0089056, .0093599,
1519 .0098377, .01034, .010869, .011426, .012011, .012627, .013276,
1520 .013958, .014676, .015431, .016226, .017063, .017944, .018872,
1521 .019848, .020876, .021958, .023098, .024298, .025561, .026892,
1522 .028293, .029769, .031323, .032961, .034686, .036503, .038418,
1523 .040435, .042561, .044801, .047161, .049649, .052271, .055035,
1524 .057948, .061019, .064256, .06767, .07127, .075066, .079069,
1525 .083291, .087744, .092441, .097396, .10262, .10814, .11396,
1526 .1201, .12658, .13342, .14064, .14826, .1563, .1648, .17376,
1527 .18323, .19324, .2038, .21496, .22674, .23919, .25234, .26624,
1528 .28093, .29646, .31287, .33021, .34855, .36794, .38844, .41012,
1529 .43305, .45731, .48297, .51011, .53884, .56924, .60141, .63547,
1530 .67152, .70969, .75012, .79292, .83826, .8863, .93718, .99111,
1531 1.0482, 1.1088, 1.173, 1.2411, 1.3133, 1.3898, 1.471, 1.5571,
1532 1.6485, 1.7455, 1.8485, 1.9577, 2.0737, 2.197, 2.3278, 2.4668,
1533 2.6145, 2.7715, 2.9383, 3.1156, 3.3042, 3.5047, 3.7181, 3.9451,
1534 4.1866, 4.4437, 4.7174, 5.0089, 5.3192, 5.65, 6.0025, 6.3782,
1535 6.7787, 7.206, 7.6617, 8.1479, 8.6669, 9.221, 9.8128, 10.445,
1536 11.12, 11.843, 12.615, 13.441, 14.325, 15.271, 16.283, 17.367,
1537 18.529, 19.776, 21.111, 22.544, 24.082, 25.731, 27.504, 29.409,
1538 31.452, 33.654, 36.024, 38.573, 41.323, 44.29, 47.492, 50.951,
1539 54.608, 58.588, 62.929, 67.629, 72.712, 78.226, 84.207, 90.699,
1540 97.749, 105.42, 113.77, 122.86, 132.78, 143.61, 155.44, 168.33,
1541 182.48, 198.01, 214.87, 233.39, 253.86, 276.34, 300.3, 327.28,
1542 356.89, 389.48, 422.29, 458.99, 501.39, 548.13, 595.62, 652.74,
1543 716.54, 784.57, 866.78, 960.59, 1062.8, 1072.5, 1189.5, 1319.4,
1544 1467.6, 1630.2, 1813.7, 2016.9, 2253., 2515.3, 2773.5, 3092.8,
1545 3444.4, 3720.4, 4104.3, 4527.5, 4645.9, 5021.7, 5462.2, 5597.,
1546 6110.6, 6732.5, 7513.8, 8270.6, 9640.6, 11487., 2796.1, 2680.1,
1547 2441.6, 2404.2, 2334.8, 2215.2, 1642.5, 1477.9, 1328.1, 1223.5,
1548 843.34, 766.96, 831.65, 834.84, 774.85, 1156.3, 1275.6, 1366.1,
1549 1795.6, 1885., 1936.5, 1953.4, 2154.4, 2002.7, 1789.8, 10381.,
1550 9040., 8216.5, 7384.7, 6721.9, 6187.7, 6143.8, 5703.9, 5276.6,
1551 4873.1, 4736., 4325.3, 3927., 3554.1, 3286.1, 2950.1, 2642.4,
1552 2368.7, 2138.9, 1914., 1719.6, 1543.9, 1388.6, 1252.1, 1132.2,
1553 1024.1, 1025.4, 920.58, 829.59, 750.54, 685.01, 624.25, 570.14,
1554 525.81, 481.85, 441.95, 408.71, 377.23, 345.86, 318.51, 292.26,
1555 268.34, 247.04, 227.14, 209.02, 192.69, 177.59, 163.78, 151.26,
1556 139.73, 129.19, 119.53, 110.7, 102.57, 95.109, 88.264, 81.948,
1557 76.13, 70.768, 65.827, 61.251, 57.022, 53.495, 49.824, 46.443,
1558 43.307, 40.405, 37.716, 35.241, 32.923, 30.77, 28.78, 26.915,
1559 25.177, 23.56, 22.059, 20.654, 19.345, 18.126, 16.988, 15.93,
1560 14.939, 14.014, 13.149, 12.343, 11.589, 10.884, 10.225, 9.6093,
1561 9.0327, 8.4934, 7.9889, 7.5166, 7.0744, 6.6604, 6.2727, 5.9098,
1562 5.5701, 5.2529, 4.955, 4.676, 4.4148, 4.171, 3.9426, 3.7332,
1563 3.5347, 3.3493, 3.1677, 3.0025, 2.8466, 2.6994, 2.5601, 2.4277,
1564 2.3016, 2.1814, 2.0664, 1.9564, 1.8279, 1.7311, 1.6427, 1.5645,
1565 1.4982, 1.443, 1.374, 1.3146, 1.2562, 1.17, 1.1105, 1.0272,
1566 .96863, .89718, .83654, .80226, .75908, .72431, .69573, .67174,
1567 .65126, .63315, .61693, .60182, .58715, .59554, .57649, .55526,
1568 .53177, .50622, .48176, .4813, .47642, .47492, .50273, .50293,
1569 .52687, .52239, .53419, .53814, .52626, .52211, .51492, .50622,
1570 .49746, .48841, .4792, .43534, .41999, .40349, .38586, .36799,
1571 .35108, .31089, .30803, .3171, .33599, .35041, .36149, .32924,
1572 .32462, .27309, .25961, .20922, .19504, .15683, .13098, .11588,
1573 .11478, .11204, .11363, .12135, .16423, .17785, .19094, .20236,
1574 .21084, .2154, .24108, .22848, .20871, .18797, .17963, .17834,
1575 .21552, .22284, .26945, .27052, .30108, .28977, .29772, .29224,
1576 .27658, .24956, .22777, .20654, .18392, .16338, .1452, .12916,
1577 .1152, .10304, .092437, .083163, .075031, .067878, .061564,
1578 .055976, .051018, .046609, .042679, .03917, .036032, .033223,
1579 .030706, .02845, .026428, .024617, .022998, .021554, .02027,
1580 .019136, .018141, .017278, .016541, .015926, .015432, .015058,
1581 .014807, .014666, .014635, .014728, .014947, .01527, .015728,
1582 .016345, .017026, .017798, .018839, .019752, .020636, .021886,
1583 .022695, .02327, .023478, .024292, .023544, .022222, .021932,
1584 .020052, .018143, .017722, .017031, .017782, .01938, .020734,
1585 .020476, .019255, .017477, .016878, .014617, .012489, .011765,
1586 .0099077, .0086446, .0079446, .0078644, .0079763, .008671,
1587 .01001, .0108, .012933, .015349, .016341, .018484, .020254,
1588 .020254, .020478, .019591, .018595, .018385, .019913, .022254,
1589 .024847, .025809, .028053, .029924, .030212, .031367, .03222,
1590 .032739, .032537, .03286, .033344, .033507, .033499, .033339,
1591 .032809, .033041, .031723, .029837, .027511, .026603, .024032,
1592 .021914, .020948, .021701, .023425, .024259, .024987, .023818,
1593 .021768, .019223, .018144, .015282, .012604, .01163, .0097907,
1594 .008336, .0082473, .0079582, .0088077, .009779, .010129, .012145,
1595 .014378, .016761, .01726, .018997, .019998, .019809, .01819,
1596 .016358, .016099, .01617, .017939, .020223, .022521, .02277,
1597 .024279, .025247, .024222, .023989, .023224, .021493, .020362,
1598 .018596, .017309, .015975, .014466, .013171, .011921, .01078,
1599 .0097229, .0087612, .0078729, .0070682, .0063494, .0057156,
1600 .0051459, .0046273, .0041712, .0037686, .0034119, .003095,
1601 .0028126, .0025603, .0023342, .0021314, .0019489, .0017845,
1602 .001636, .0015017, .00138, .0012697, .0011694, .0010782,
1603 9.9507e-4, 9.1931e-4, 8.5013e-4, 7.869e-4, 7.2907e-4, 6.7611e-4,
1604 6.2758e-4, 5.8308e-4, 5.4223e-4, 5.0473e-4, 4.7027e-4, 4.3859e-4,
1605 4.0946e-4, 3.8265e-4, 3.5798e-4, 3.3526e-4, 3.1436e-4, 2.9511e-4,
1606 2.7739e-4, 2.6109e-4, 2.4609e-4, 2.3229e-4, 2.1961e-4, 2.0797e-4,
1607 1.9729e-4, 1.875e-4, 1.7855e-4, 1.7038e-4, 1.6294e-4, 1.5619e-4,
1608 1.5007e-4, 1.4456e-4, 1.3961e-4, 1.3521e-4, 1.3131e-4, 1.2789e-4,
1609 1.2494e-4, 1.2242e-4, 1.2032e-4, 1.1863e-4, 1.1733e-4, 1.1641e-4,
1610 1.1585e-4, 1.1565e-4, 1.158e-4, 1.1629e-4, 1.1712e-4, 1.1827e-4,
1611 1.1976e-4, 1.2158e-4, 1.2373e-4, 1.262e-4, 1.2901e-4, 1.3214e-4,
1612 1.3562e-4, 1.3944e-4, 1.4361e-4, 1.4814e-4, 1.5303e-4, 1.5829e-4,
1613 1.6394e-4, 1.6999e-4, 1.7644e-4, 1.8332e-4, 1.9063e-4, 1.984e-4,
1614 2.0663e-4, 2.1536e-4, 2.246e-4, 2.3436e-4, 2.4468e-4, 2.5558e-4,
1615 2.6708e-4, 2.7921e-4, 2.92e-4, 3.0548e-4, 3.1968e-4, 3.3464e-4,
1616 3.5039e-4, 3.6698e-4, 3.8443e-4, 4.0281e-4, 4.2214e-4, 4.4248e-4,
1617 4.6389e-4, 4.864e-4, 5.1009e-4, 5.3501e-4, 5.6123e-4, 5.888e-4,
1618 6.1781e-4, 6.4833e-4, 6.8043e-4, 7.142e-4, 7.4973e-4, 7.8711e-4,
1619 8.2644e-4, 8.6783e-4, 9.1137e-4, 9.5721e-4, .0010054, .0010562,
1620 .0011096, .0011659, .0012251, .0012875, .0013532, .0014224,
1621 .0014953, .001572, .0016529, .0017381, .0018279, .0019226,
1622 .0020224, .0021277, .0022386, .0023557, .0024792, .0026095,
1623 .002747, .0028921, .0030453, .0032071, .003378, .0035586,
1624 .0037494, .003951, .0041642, .0043897, .0046282, .0048805,
1625 .0051476, .0054304, .00573, .0060473, .0063837, .0067404,
1626 .0071188, .0075203, .0079466, .0083994, .0088806, .0093922,
1627 .0099366, .010516, .011134, .011792, .012494, .013244, .014046,
1628 .014898, .015808, .016781, .017822, .018929, .020108, .02138,
1629 .022729, .02419, .02576, .027412, .029233, .031198, .033301,
1630 .035594, .038092, .040767, .04372, .046918, .050246, .053974,
1631 .058009, .061976, .066586, .071537, .076209, .081856, .087998,
1632 .093821, .10113, .10913, .11731, .12724, .13821, .15025, .1639,
1633 .17807, .19472, .21356, .23496, .25758, .28387, .31389, .34104,
1634 .37469, .40989, .43309, .46845, .5042, .5023, .52981, .55275,
1635 .51075, .51976, .52457, .44779, .44721, .4503, .4243, .45244,
1636 .49491, .55399, .39021, .24802, .2501, .2618, .27475, .28879,
1637 .31317, .33643, .36257, .4018, .43275, .46525, .53333, .56599,
1638 .60557, .70142, .74194, .77736, .88567, .91182, .93294, .98407,
1639 .98772, .99176, .9995, 1.2405, 1.3602, 1.338, 1.3255, 1.3267,
1640 1.3404, 1.3634, 1.3967, 1.4407, 1.4961, 1.5603, 1.6328, 1.7153,
1641 1.8094, 1.9091, 2.018, 2.1367, 2.264, 2.4035, 2.5562, 2.7179,
1642 2.9017, 3.1052, 3.3304, 3.5731, 3.8488, 4.1553, 4.4769, 4.7818,
1643 5.1711, 5.5204, 5.9516, 6.4097, 6.8899, 7.1118, 7.5469, 7.9735,
1644 7.9511, 8.3014, 8.6418, 8.4757, 8.8256, 9.2294, 9.6923, 10.033,
1645 10.842, 11.851, 11.78, 8.8435, 9.1381, 9.5956, 10.076, 10.629,
1646 11.22, 11.883, 12.69, 13.163, 13.974, 14.846, 16.027, 17.053,
1647 18.148, 19.715, 20.907, 22.163, 23.956, 25.235, 26.566, 27.94,
1648 29.576, 30.956, 32.432, 35.337, 39.911, 41.128, 42.625, 44.386,
1649 46.369, 48.619, 51.031, 53.674, 56.825, 59.921, 63.286, 66.929,
1650 70.859, 75.081, 79.618, 84.513, 89.739, 95.335, 101.35, 107.76,
1651 114.63, 121.98, 129.87, 138.3, 147.34, 157.04, 167.56, 178.67,
1652 190.61, 203.43, 217.19, 231.99, 247.88, 264.98, 283.37, 303.17,
1653 324.49, 347.47, 372.25, 398.98, 427.85, 459.06, 492.8, 529.31,
1654 568.89, 611.79, 658.35, 708.91, 763.87, 823.65, 888.72, 959.58,
1655 1036.8, 1121.8, 1213.9, 1314.3, 1423.8, 1543., 1672.8, 1813.4,
1656 1966.1, 2131.4, 2309.5, 2499.3, 2705., 2925.7, 3161.6, 3411.3,
1657 3611.5, 3889.2, 4191.1, 4519.3, 4877.9, 5272.9, 5712.9, 6142.7,
1658 6719.6, 7385., 8145., 8977.7, 9831.9, 10827., 11934., 13063.,
1659 14434., 15878., 17591., 19435., 21510., 23835., 26835., 29740.,
1660 32878., 36305., 39830., 43273., 46931., 50499., 49586., 51598.,
1661 53429., 54619., 55081., 55102., 54485., 53487., 52042., 42689.,
1662 42607., 44020., 47994., 54169., 53916., 55808., 56642., 46049.,
1663 44243., 32929., 30658., 21963., 20835., 15962., 13679., 17652.,
1664 19680., 22388., 25625., 29184., 32520., 35720., 38414., 40523.,
1665 49228., 48173., 45678., 41768., 37600., 41313., 42654., 44465.,
1666 55736., 56630., 65409., 63308., 66572., 61845., 60379., 56777.,
1667 51920., 46601., 41367., 36529., 32219., 28470., 25192., 22362.,
1668 19907., 17772., 15907., 14273., 12835., 11567., 10445., 9450.2,
1669 8565.1, 7776., 7070.8, 6439.2, 5872.3, 5362.4, 4903., 4488.3,
1670 4113.4, 3773.8, 3465.8, 3186.1, 2931.7, 2700.1, 2488.8, 2296.,
1671 2119.8, 1958.6, 1810.9, 1675.6, 1551.4, 1437.3, 1332.4, 1236.,
1672 1147.2, 1065.3, 989.86, 920.22, 855.91, 796.48, 741.53, 690.69,
1673 643.62, 600.02, 559.6, 522.13, 487.35, 455.06, 425.08, 397.21,
1674 371.3, 347.2, 324.78, 303.9, 284.46, 266.34, 249.45, 233.7,
1675 219.01, 205.3, 192.5, 180.55, 169.38, 158.95, 149.2, 140.07,
1676 131.54, 123.56, 116.09, 109.09, 102.54, 96.405, 90.655, 85.266,
1677 80.213, 75.475, 71.031, 66.861, 62.948, 59.275, 55.827, 52.587,
1678 49.544, 46.686, 43.998, 41.473, 39.099, 36.867, 34.768, 32.795,
1679 30.939, 29.192, 27.546, 25.998, 24.539, 23.164, 21.869, 20.65,
1680 19.501, 18.419, 17.399, 16.438, 15.532, 14.678, 13.874, 13.115,
1681 12.4, 11.726, 11.088, 10.488, 9.921, 9.3846, 8.8784, 8.3996,
1682 7.9469, 7.5197, 7.1174, 6.738, 6.379, 6.0409, 5.7213, 5.419,
1683 5.1327, 4.8611, 4.6046, 4.3617, 4.1316, 3.9138, 3.7077, 3.5125,
1684 3.3281, 3.1536, 2.9885, 2.8323, 2.6846, 2.5447, 2.4124, 2.2871,
1685 2.1686, 2.0564, 1.9501, 1.8495, 1.7543, 1.6641, 1.5787, 1.4978,
1686 1.4212, 1.3486, 1.2799, 1.2147, 1.1529, 1.0943, 1.0388, .98602,
1687 .93596, .8886, .84352, .80078, .76029, .722, .68585, .65161,
1688 .61901, .58808, .55854, .53044, .5039, .47853, .45459, .43173,
1689 .41008, .38965, .37021, .35186, .33444, .31797, .30234, .28758,
1690 .2736, .26036, .24764, .2357, .22431, .21342, .20295, .19288,
1691 .18334, .17444, .166, .15815, .15072, .14348, .13674, .13015,
1692 .12399, .11807, .11231, .10689, .10164, .096696, .091955,
1693 .087476, .083183, .079113, .075229, .071536, .068026, .064698,
1694 .06154, .058544, .055699, .052997, .050431, .047993, .045676,
1695 .043475, .041382, .039392, .037501, .035702, .033991, .032364,
1696 .030817, .029345, .027945, .026613, .025345, .024139, .022991,
1697 .021899, .02086, .019871, .018929, .018033, .01718, .016368,
1698 .015595, .014859, .014158, .013491, .012856, .012251, .011675,
1699 .011126, .010604, .010107, .0096331, .009182, .0087523, .0083431,
1700 .0079533, .0075821, .0072284, .0068915, .0065706, .0062649,
1701 .0059737, .0056963, .005432, .0051802, .0049404, .0047118,
1702 .0044941, .0042867, .0040891, .0039009, .0037216, .0035507,
1703 .003388, .0032329, .0030852, .0029445, .0028105, .0026829,
1704 .0025613, .0024455, .0023353, .0022303, .0021304, .0020353,
1705 .0019448, .0018587, .0017767, .0016988, .0016247, .0015543,
1706 .0014874, .0014238, .0013635, .0013062, .0012519, .0012005,
1707 .0011517, .0011057, .0010621, .001021, 9.8233e-4, 9.4589e-4,
1708 9.1167e-4, 8.7961e-4, 8.4964e-4, 8.2173e-4, 7.9582e-4, 7.7189e-4,
1709 7.499e-4, 7.2983e-4, 7.1167e-4, 6.9542e-4, 6.8108e-4, 6.6866e-4,
1710 6.5819e-4, 6.4971e-4, 6.4328e-4, 6.3895e-4, 6.3681e-4, 6.3697e-4,
1711 6.3956e-4, 6.4472e-4, 6.5266e-4, 6.6359e-4, 6.778e-4, 6.9563e-4,
1712 7.1749e-4, 7.4392e-4, 7.7556e-4, 8.1028e-4, 8.4994e-4, 8.8709e-4,
1713 9.3413e-4, 9.6953e-4, .0010202, .0010738, .0010976, .0011507,
1714 .0011686, .0012264, .001291, .0013346, .0014246, .0015293,
1715 .0016359, .0017824, .0019255, .0020854, .002247, .0024148,
1716 .0026199, .0027523, .0029704, .0030702, .0033047, .0035013,
1717 .0037576, .0040275, .0043089, .0046927, .0049307, .0053486,
1718 .0053809, .0056699, .0059325, .0055488, .005634, .0056392,
1719 .004946, .0048855, .0048208, .0044386, .0045498, .0046377,
1720 .0048939, .0052396, .0057324, .0060859, .0066906, .0071148,
1721 .0077224, .0082687, .008769, .0084471, .008572, .0087729,
1722 .008775, .0090742, .0080704, .0080288, .0085747, .0086087,
1723 .0086408, .0088752, .0089381, .0089757, .0093532, .0092824,
1724 .0092566, .0092645, .0092735, .009342, .0095806, .0097991,
1725 .010213, .010611, .011129, .011756, .013237, .01412, .015034,
1726 .015936, .01682, .018597, .019315, .019995, .020658, .021289,
1727 .022363, .022996, .023716, .024512, .025434, .026067, .027118,
1728 .028396, .029865, .031442, .033253, .03525, .037296, .039701,
1729 .042356, .045154, .048059, .051294, .054893, .058636, .061407,
1730 .065172, .068974, .072676, .073379, .076547, .079556, .079134,
1731 .082308, .085739, .090192, .09359, .099599, .10669, .11496,
1732 .1244, .13512, .14752, .14494, .15647, .1668, .17863, .19029,
1733 .20124, .20254, .21179, .21982, .21625, .22364, .23405, .23382,
1734 .2434, .25708, .26406, .27621, .28909, .30395, .31717, .33271,
1735 .3496, .36765, .38774, .40949, .446, .46985, .49846, .5287, .562,
1736 .59841, .64598, .68834, .7327, .78978, .8373, .88708, .94744,
1737 1.0006, 1.0574, 1.1215, 1.1856, 1.2546, 1.3292, 1.4107, 1.4974,
1738 1.5913, 1.6931, 1.8028, 1.9212, 2.0492, 2.1874, 2.3365, 2.4978,
1739 2.6718, 2.8588, 3.062, 3.2818, 3.5188, 3.7752, 4.0527, 4.3542,
1740 4.6782, 5.0312, 5.4123, 5.8246, 6.2639, 6.7435, 7.2636, 7.8064,
1741 8.4091, 9.0696, 9.7677, 10.548, 11.4, 12.309, 13.324, 14.284,
1742 15.445, 16.687, 18.019, 19.403, 20.847, 22.366, 23.925, 25.537,
1743 27.213, 28.069, 29.864, 31.829, 33.988, 35.856, 38.829, 42.321,
1744 46.319, 50.606, 55.126, 59.126, 64.162, 68.708, 74.615, 81.176,
1745 87.739, 95.494, 103.83, 113.38, 123.99, 135.8, 148.7, 162.58,
1746 176.32, 192.6, 211.47, 232.7, 252.64, 277.41, 305.38, 333.44,
1747 366.42, 402.66, 442.14, 484.53, 526.42, 568.15, 558.78, 582.6,
1748 600.98, 613.94, 619.44, 618.24, 609.84, 595.96, 484.86, 475.59,
1749 478.49, 501.56, 552.19, 628.44, 630.39, 658.92, 671.96, 562.7,
1750 545.88, 423.43, 400.14, 306.59, 294.13, 246.8, 226.51, 278.21,
1751 314.39, 347.22, 389.13, 433.16, 477.48, 521.67, 560.54, 683.6,
1752 696.37, 695.91, 683.1, 658.24, 634.89, 698.85, 742.87, 796.66,
1753 954.49, 1009.5, 1150.5, 1179.1, 1267.9, 1272.4, 1312.7, 1330.4,
1754 1331.6, 1315.8, 1308.3, 1293.3, 1274.6, 1249.5, 1213.2, 1172.1,
1755 1124.4, 930.33, 893.36, 871.27, 883.54, 940.76, 1036., 1025.6,
1756 1053.1, 914.51, 894.15, 865.03, 670.63, 508.41, 475.15, 370.85,
1757 361.06, 319.38, 312.75, 331.87, 367.13, 415., 467.94, 525.49,
1758 578.41, 624.66, 794.82, 796.97, 780.29, 736.49, 670.18, 603.75,
1759 659.67, 679.8, 857.12, 884.05, 900.65, 1046.1, 1141.9, 1083.,
1760 1089.2, 1e3, 947.08, 872.31, 787.91, 704.75, 624.93, 553.68,
1761 489.91, 434.21, 385.64, 343.3, 306.42, 274.18, 245.94, 221.11,
1762 199.23, 179.88, 162.73, 147.48, 133.88, 121.73, 110.86, 101.1,
1763 92.323, 84.417, 77.281, 70.831, 64.991, 59.694, 54.884, 50.509,
1764 46.526, 42.893, 39.58, 36.549, 33.776, 31.236, 28.907, 26.77,
1765 24.805, 23., 21.339, 19.81, 18.404, 17.105, 15.909, 14.801,
1766 13.778, 12.83, 11.954, 11.142, 10.389, 9.691, 9.0434, 8.4423,
1767 7.8842, 7.3657, 6.8838, 6.4357, 6.0189, 5.6308, 5.2696, 4.9332,
1768 4.6198, 4.3277, 4.0553, 3.8012, 3.5639, 3.3424, 3.1355, 2.9422,
1769 2.7614, 2.5924, 2.4343, 2.2864, 2.148, 2.0184, 1.8971, 1.7835,
1770 1.677, 1.5773, 1.4838, 1.3961, 1.3139, 1.2369, 1.1645, 1.0966,
1771 1.0329, .97309, .91686, .86406, .81439, .76767, .72381, .68252,
1772 .64359, .60695, .57247, .54008, .50957, .48092, .45401, .42862,
1773 .40465, .38202, .36072, .34052, .3216, .30386, .28711, .27135,
1774 .25651, .24252, .2293, .21689, .20517, .19416, .18381, .17396,
1778 static const double co2230[2001] =
1779 { 2.743e-5, 2.8815e-5, 3.027e-5, 3.1798e-5,
1780 3.3405e-5, 3.5094e-5, 3.6869e-5, 3.8734e-5, 4.0694e-5, 4.2754e-5,
1781 4.492e-5, 4.7196e-5, 4.9588e-5, 5.2103e-5, 5.4747e-5, 5.7525e-5,
1782 6.0446e-5, 6.3516e-5, 6.6744e-5, 7.0137e-5, 7.3704e-5, 7.7455e-5,
1783 8.1397e-5, 8.5543e-5, 8.9901e-5, 9.4484e-5, 9.9302e-5, 1.0437e-4,
1784 1.097e-4, 1.153e-4, 1.2119e-4, 1.2738e-4, 1.3389e-4, 1.4074e-4,
1785 1.4795e-4, 1.5552e-4, 1.6349e-4, 1.7187e-4, 1.8068e-4, 1.8995e-4,
1786 1.997e-4, 2.0996e-4, 2.2075e-4, 2.321e-4, 2.4403e-4, 2.5659e-4,
1787 2.698e-4, 2.837e-4, 2.9832e-4, 3.137e-4, 3.2988e-4, 3.4691e-4,
1788 3.6483e-4, 3.8368e-4, 4.0351e-4, 4.2439e-4, 4.4635e-4, 4.6947e-4,
1789 4.9379e-4, 5.1939e-4, 5.4633e-4, 5.7468e-4, 6.0452e-4, 6.3593e-4,
1790 6.69e-4, 7.038e-4, 7.4043e-4, 7.79e-4, 8.1959e-4, 8.6233e-4,
1791 9.0732e-4, 9.5469e-4, .0010046, .0010571, .0011124, .0011706,
1792 .0012319, .0012964, .0013644, .001436, .0015114, .0015908,
1793 .0016745, .0017625, .0018553, .0019531, .002056, .0021645,
1794 .0022788, .0023992, .002526, .0026596, .0028004, .0029488,
1795 .0031052, .0032699, .0034436, .0036265, .0038194, .0040227,
1796 .0042369, .0044628, .0047008, .0049518, .0052164, .0054953,
1797 .0057894, .0060995, .0064265, .0067713, .007135, .0075184,
1798 .0079228, .0083494, .0087993, .0092738, .0097745, .010303,
1799 .01086, .011448, .012068, .012722, .013413, .014142, .014911,
1800 .015723, .01658, .017484, .018439, .019447, .020511, .021635,
1801 .022821, .024074, .025397, .026794, .02827, .029829, .031475,
1802 .033215, .035052, .036994, .039045, .041213, .043504, .045926,
1803 .048485, .05119, .05405, .057074, .060271, .063651, .067225,
1804 .071006, .075004, .079233, .083708, .088441, .093449, .098749,
1805 .10436, .11029, .11657, .12322, .13026, .13772, .14561, .15397,
1806 .16282, .1722, .18214, .19266, .20381, .21563, .22816, .24143,
1807 .2555, .27043, .28625, .30303, .32082, .3397, .35972, .38097,
1808 .40352, .42746, .45286, .47983, .50847, .53888, .57119, .6055,
1809 .64196, .6807, .72187, .76564, .81217, .86165, .91427, .97025,
1810 1.0298, 1.0932, 1.1606, 1.2324, 1.3088, 1.3902, 1.477, 1.5693,
1811 1.6678, 1.7727, 1.8845, 2.0038, 2.131, 2.2666, 2.4114, 2.5659,
1812 2.7309, 2.907, 3.0951, 3.2961, 3.5109, 3.7405, 3.986, 4.2485,
1813 4.5293, 4.8299, 5.1516, 5.4961, 5.8651, 6.2605, 6.6842, 7.1385,
1814 7.6256, 8.1481, 8.7089, 9.3109, 9.9573, 10.652, 11.398, 12.2,
1815 13.063, 13.992, 14.99, 16.064, 17.222, 18.469, 19.813, 21.263,
1816 22.828, 24.516, 26.34, 28.31, 30.437, 32.738, 35.226, 37.914,
1817 40.824, 43.974, 47.377, 51.061, 55.011, 59.299, 63.961, 69.013,
1818 74.492, 80.444, 86.919, 93.836, 101.23, 109.25, 117.98, 127.47,
1819 137.81, 149.07, 161.35, 174.75, 189.42, 205.49, 223.02, 242.26,
1820 263.45, 286.75, 311.94, 340.01, 370.86, 404.92, 440.44, 480.27,
1821 525.17, 574.71, 626.22, 686.8, 754.38, 827.07, 913.38, 1011.7,
1822 1121.5, 1161.6, 1289.5, 1432.2, 1595.4, 1777., 1983.3, 2216.1,
1823 2485.7, 2788.3, 3101.5, 3481., 3902.1, 4257.1, 4740., 5272.8,
1824 5457.9, 5946.2, 6505.3, 6668.4, 7302.4, 8061.6, 9015.8, 9908.3,
1825 11613., 13956., 3249.6, 3243., 2901.5, 2841.3, 2729.6, 2558.2,
1826 1797.8, 1583.2, 1386., 1233.5, 787.74, 701.46, 761.66, 767.21,
1827 722.83, 1180.6, 1332.1, 1461.6, 2032.9, 2166., 2255.9, 2294.7,
1828 2587.2, 2396.5, 2122.4, 12553., 10784., 9832.5, 8827.3, 8029.1,
1829 7377.9, 7347.1, 6783.8, 6239.1, 5721.1, 5503., 4975.1, 4477.8,
1830 4021.3, 3676.8, 3275.3, 2914.9, 2597.4, 2328.2, 2075.4, 1857.6,
1831 1663.6, 1493.3, 1343.8, 1213.3, 1095.6, 1066.5, 958.91, 865.15,
1832 783.31, 714.35, 650.77, 593.98, 546.2, 499.9, 457.87, 421.75,
1833 387.61, 355.25, 326.62, 299.7, 275.21, 253.17, 232.83, 214.31,
1834 197.5, 182.08, 167.98, 155.12, 143.32, 132.5, 122.58, 113.48,
1835 105.11, 97.415, 90.182, 83.463, 77.281, 71.587, 66.341, 61.493,
1836 57.014, 53.062, 49.21, 45.663, 42.38, 39.348, 36.547, 33.967,
1837 31.573, 29.357, 27.314, 25.415, 23.658, 22.03, 20.524, 19.125,
1838 17.829, 16.627, 15.511, 14.476, 13.514, 12.618, 11.786, 11.013,
1839 10.294, 9.6246, 9.0018, 8.4218, 7.8816, 7.3783, 6.9092, 6.4719,
1840 6.0641, 5.6838, 5.3289, 4.998, 4.6893, 4.4014, 4.1325, 3.8813,
1841 3.6469, 3.4283, 3.2241, 3.035, 2.8576, 2.6922, 2.5348, 2.3896,
1842 2.2535, 2.1258, 2.0059, 1.8929, 1.7862, 1.6854, 1.5898, 1.4992,
1843 1.4017, 1.3218, 1.2479, 1.1809, 1.1215, 1.0693, 1.0116, .96016,
1844 .9105, .84859, .80105, .74381, .69982, .65127, .60899, .57843,
1845 .54592, .51792, .49336, .47155, .45201, .43426, .41807, .40303,
1846 .38876, .3863, .37098, .35492, .33801, .32032, .30341, .29874,
1847 .29193, .28689, .29584, .29155, .29826, .29195, .29287, .2904,
1848 .28199, .27709, .27162, .26622, .26133, .25676, .25235, .23137,
1849 .22365, .21519, .20597, .19636, .18699, .16485, .16262, .16643,
1850 .17542, .18198, .18631, .16759, .16338, .13505, .1267, .10053,
1851 .092554, .074093, .062159, .055523, .054849, .05401, .05528,
1852 .058982, .07952, .08647, .093244, .099285, .10393, .10661,
1853 .12072, .11417, .10396, .093265, .089137, .088909, .10902,
1854 .11277, .13625, .13565, .14907, .14167, .1428, .13744, .12768,
1855 .11382, .10244, .091686, .08109, .071739, .063616, .056579,
1856 .050504, .045251, .040689, .036715, .033237, .030181, .027488,
1857 .025107, .022998, .021125, .01946, .017979, .016661, .015489,
1858 .014448, .013526, .012712, .011998, .011375, .010839, .010384,
1859 .010007, .0097053, .0094783, .0093257, .0092489, .0092504,
1860 .0093346, .0095077, .0097676, .01012, .01058, .011157, .011844,
1861 .012672, .013665, .014766, .015999, .017509, .018972, .020444,
1862 .022311, .023742, .0249, .025599, .026981, .026462, .025143,
1863 .025066, .022814, .020458, .020026, .019142, .020189, .022371,
1864 .024163, .023728, .02199, .019506, .018591, .015576, .012784,
1865 .011744, .0094777, .0079148, .0070652, .006986, .0071758,
1866 .008086, .0098025, .01087, .013609, .016764, .018137, .021061,
1867 .023498, .023576, .023965, .022828, .021519, .021283, .023364,
1868 .026457, .029782, .030856, .033486, .035515, .035543, .036558,
1869 .037198, .037472, .037045, .037284, .03777, .038085, .038366,
1870 .038526, .038282, .038915, .037697, .035667, .032941, .031959,
1871 .028692, .025918, .024596, .025592, .027873, .028935, .02984,
1872 .028148, .025305, .021912, .020454, .016732, .013357, .01205,
1873 .009731, .0079881, .0077704, .0074387, .0083895, .0096776,
1874 .010326, .01293, .015955, .019247, .020145, .02267, .024231,
1875 .024184, .022131, .019784, .01955, .01971, .022119, .025116,
1876 .027978, .028107, .029808, .030701, .029164, .028551, .027286,
1877 .024946, .023259, .020982, .019221, .017471, .015643, .014074,
1878 .01261, .011301, .010116, .0090582, .0081036, .0072542, .0065034,
1879 .0058436, .0052571, .0047321, .0042697, .0038607, .0034977,
1880 .0031747, .0028864, .0026284, .002397, .002189, .0020017,
1881 .0018326, .0016798, .0015414, .0014159, .0013019, .0011983,
1882 .0011039, .0010177, 9.391e-4, 8.6717e-4, 8.0131e-4, 7.4093e-4,
1883 6.8553e-4, 6.3464e-4, 5.8787e-4, 5.4487e-4, 5.0533e-4, 4.69e-4,
1884 4.3556e-4, 4.0474e-4, 3.7629e-4, 3.5e-4, 3.2569e-4, 3.032e-4,
1885 2.8239e-4, 2.6314e-4, 2.4535e-4, 2.2891e-4, 2.1374e-4, 1.9975e-4,
1886 1.8685e-4, 1.7498e-4, 1.6406e-4, 1.5401e-4, 1.4479e-4, 1.3633e-4,
1887 1.2858e-4, 1.2148e-4, 1.1499e-4, 1.0907e-4, 1.0369e-4, 9.8791e-5,
1888 9.4359e-5, 9.0359e-5, 8.6766e-5, 8.3555e-5, 8.0703e-5, 7.8192e-5,
1889 7.6003e-5, 7.4119e-5, 7.2528e-5, 7.1216e-5, 7.0171e-5, 6.9385e-5,
1890 6.8848e-5, 6.8554e-5, 6.8496e-5, 6.8669e-5, 6.9069e-5, 6.9694e-5,
1891 7.054e-5, 7.1608e-5, 7.2896e-5, 7.4406e-5, 7.6139e-5, 7.8097e-5,
1892 8.0283e-5, 8.2702e-5, 8.5357e-5, 8.8255e-5, 9.1402e-5, 9.4806e-5,
1893 9.8473e-5, 1.0241e-4, 1.0664e-4, 1.1115e-4, 1.1598e-4, 1.2112e-4,
1894 1.2659e-4, 1.3241e-4, 1.3859e-4, 1.4515e-4, 1.521e-4, 1.5947e-4,
1895 1.6728e-4, 1.7555e-4, 1.8429e-4, 1.9355e-4, 2.0334e-4, 2.1369e-4,
1896 2.2463e-4, 2.3619e-4, 2.4841e-4, 2.6132e-4, 2.7497e-4, 2.8938e-4,
1897 3.0462e-4, 3.2071e-4, 3.3771e-4, 3.5567e-4, 3.7465e-4, 3.947e-4,
1898 4.1588e-4, 4.3828e-4, 4.6194e-4, 4.8695e-4, 5.1338e-4, 5.4133e-4,
1899 5.7087e-4, 6.0211e-4, 6.3515e-4, 6.701e-4, 7.0706e-4, 7.4617e-4,
1900 7.8756e-4, 8.3136e-4, 8.7772e-4, 9.2681e-4, 9.788e-4, .0010339,
1901 .0010922, .001154, .0012195, .0012889, .0013626, .0014407,
1902 .0015235, .0016114, .0017048, .0018038, .001909, .0020207,
1903 .0021395, .0022657, .0023998, .0025426, .0026944, .002856,
1904 .0030281, .0032114, .0034068, .003615, .0038371, .004074,
1905 .004327, .0045971, .0048857, .0051942, .0055239, .0058766,
1906 .0062538, .0066573, .0070891, .007551, .0080455, .0085747,
1907 .0091412, .0097481, .010397, .011092, .011837, .012638, .013495,
1908 .014415, .01541, .016475, .017621, .018857, .020175, .02162,
1909 .023185, .024876, .02672, .028732, .030916, .033319, .035939,
1910 .038736, .041847, .04524, .048715, .052678, .056977, .061203,
1911 .066184, .07164, .076952, .083477, .090674, .098049, .10697,
1912 .1169, .1277, .14011, .15323, .1684, .18601, .20626, .22831,
1913 .25417, .28407, .31405, .34957, .38823, .41923, .46026, .50409,
1914 .51227, .54805, .57976, .53818, .55056, .557, .46741, .46403,
1915 .4636, .42265, .45166, .49852, .56663, .34306, .17779, .17697,
1916 .18346, .19129, .20014, .21778, .23604, .25649, .28676, .31238,
1917 .33856, .39998, .4288, .46568, .56654, .60786, .64473, .76466,
1918 .7897, .80778, .86443, .85736, .84798, .84157, 1.1385, 1.2446,
1919 1.1923, 1.1552, 1.1338, 1.1266, 1.1292, 1.1431, 1.1683, 1.2059,
1920 1.2521, 1.3069, 1.3712, 1.4471, 1.5275, 1.6165, 1.7145, 1.8189,
1921 1.9359, 2.065, 2.2007, 2.3591, 2.5362, 2.7346, 2.9515, 3.2021,
1922 3.4851, 3.7935, 4.0694, 4.4463, 4.807, 5.2443, 5.7178, 6.2231,
1923 6.4796, 6.9461, 7.4099, 7.3652, 7.7182, 8.048, 7.7373, 8.0363,
1924 8.3855, 8.8044, 9.0257, 9.8574, 10.948, 10.563, 6.8979, 7.0744,
1925 7.4121, 7.7663, 8.1768, 8.6243, 9.1437, 9.7847, 10.182, 10.849,
1926 11.572, 12.602, 13.482, 14.431, 15.907, 16.983, 18.11, 19.884,
1927 21.02, 22.18, 23.355, 24.848, 25.954, 27.13, 30.186, 34.893,
1928 35.682, 36.755, 38.111, 39.703, 41.58, 43.606, 45.868, 48.573,
1929 51.298, 54.291, 57.559, 61.116, 64.964, 69.124, 73.628, 78.471,
1930 83.683, 89.307, 95.341, 101.84, 108.83, 116.36, 124.46, 133.18,
1931 142.57, 152.79, 163.69, 175.43, 188.11, 201.79, 216.55, 232.51,
1932 249.74, 268.38, 288.54, 310.35, 333.97, 359.55, 387.26, 417.3,
1933 449.88, 485.2, 523.54, 565.14, 610.28, 659.31, 712.56, 770.43,
1934 833.36, 901.82, 976.36, 1057.6, 1146.8, 1243.8, 1350., 1466.3,
1935 1593.6, 1732.7, 1884.1, 2049.1, 2228.2, 2421.9, 2629.4, 2853.7,
1936 3094.4, 3351.1, 3622.3, 3829.8, 4123.1, 4438.3, 4777.2, 5144.1,
1937 5545.4, 5990.5, 6404.5, 6996.8, 7687.6, 8482.9, 9349.4, 10203.,
1938 11223., 12358., 13493., 14916., 16416., 18236., 20222., 22501.,
1939 25102., 28358., 31707., 35404., 39538., 43911., 48391., 53193.,
1940 58028., 58082., 61276., 64193., 66294., 67480., 67921., 67423.,
1941 66254., 64341., 51737., 51420., 53072., 58145., 66195., 65358.,
1942 67377., 67869., 53509., 50553., 35737., 32425., 21704., 19974.,
1943 14457., 12142., 16798., 19489., 23049., 27270., 31910., 36457.,
1944 40877., 44748., 47876., 59793., 58626., 55454., 50337., 44893.,
1945 50228., 52216., 54747., 69541., 70455., 81014., 77694., 80533.,
1946 73953., 70927., 65539., 59002., 52281., 45953., 40292., 35360.,
1947 31124., 27478., 24346., 21647., 19308., 17271., 15491., 13927.,
1948 12550., 11331., 10250., 9288.8, 8431.4, 7664.9, 6978.3, 6361.8,
1949 5807.4, 5307.7, 4856.8, 4449., 4079.8, 3744.9, 3440.8, 3164.2,
1950 2912.3, 2682.7, 2473., 2281.4, 2106., 1945.3, 1797.9, 1662.5,
1951 1538.1, 1423.6, 1318.1, 1221., 1131.5, 1049., 972.99, 902.87,
1952 838.01, 777.95, 722.2, 670.44, 622.35, 577.68, 536.21, 497.76,
1953 462.12, 429.13, 398.61, 370.39, 344.29, 320.16, 297.85, 277.2,
1954 258.08, 240.38, 223.97, 208.77, 194.66, 181.58, 169.43, 158.15,
1955 147.67, 137.92, 128.86, 120.44, 112.6, 105.3, 98.499, 92.166,
1956 86.264, 80.763, 75.632, 70.846, 66.381, 62.213, 58.321, 54.685,
1957 51.288, 48.114, 45.145, 42.368, 39.772, 37.341, 35.065, 32.937,
1958 30.943, 29.077, 27.33, 25.693, 24.158, 22.717, 21.367, 20.099,
1959 18.909, 17.792, 16.744, 15.761, 14.838, 13.971, 13.157, 12.393,
1960 11.676, 11.003, 10.369, 9.775, 9.2165, 8.6902, 8.1963, 7.7314,
1961 7.2923, 6.8794, 6.4898, 6.122, 5.7764, 5.4525, 5.1484, 4.8611,
1962 4.5918, 4.3379, 4.0982, 3.8716, 3.6567, 3.4545, 3.2634, 3.0828,
1963 2.9122, 2.7512, 2.5993, 2.4561, 2.3211, 2.1938, 2.0737, 1.9603,
1964 1.8534, 1.7525, 1.6572, 1.5673, 1.4824, 1.4022, 1.3265, 1.2551,
1965 1.1876, 1.1239, 1.0637, 1.0069, .9532, .90248, .85454, .80921,
1966 .76631, .72569, .6872, .65072, .61635, .5836, .55261, .52336,
1967 .49581, .46998, .44559, .42236, .40036, .37929, .35924, .34043,
1968 .32238, .30547, .28931, .27405, .25975, .24616, .23341, .22133,
1969 .20997, .19924, .18917, .17967, .17075, .16211, .15411, .14646,
1970 .13912, .13201, .12509, .11857, .11261, .10698, .10186, .097039,
1971 .092236, .087844, .083443, .07938, .075452, .071564, .067931,
1972 .064389, .061078, .057901, .054921, .052061, .049364, .046789,
1973 .04435, .042044, .039866, .037808, .035863, .034023, .032282,
1974 .030634, .029073, .027595, .026194, .024866, .023608, .022415,
1975 .021283, .02021, .019193, .018228, .017312, .016443, .015619,
1976 .014837, .014094, .01339, .012721, .012086, .011483, .010911,
1977 .010368, .009852, .0093623, .0088972, .0084556, .0080362,
1978 .0076379, .0072596, .0069003, .006559, .0062349, .0059269,
1979 .0056344, .0053565, .0050925, .0048417, .0046034, .004377,
1980 .0041618, .0039575, .0037633, .0035788, .0034034, .0032368,
1981 .0030785, .002928, .0027851, .0026492, .0025201, .0023975,
1982 .0022809, .0021701, .0020649, .0019649, .0018699, .0017796,
1983 .0016938, .0016122, .0015348, .0014612, .0013913, .001325,
1984 .0012619, .0012021, .0011452, .0010913, .0010401, 9.9149e-4,
1985 9.454e-4, 9.0169e-4, 8.6024e-4, 8.2097e-4, 7.8377e-4, 7.4854e-4,
1986 7.1522e-4, 6.8371e-4, 6.5393e-4, 6.2582e-4, 5.9932e-4, 5.7435e-4,
1987 5.5087e-4, 5.2882e-4, 5.0814e-4, 4.8881e-4, 4.7076e-4, 4.5398e-4,
1988 4.3843e-4, 4.2407e-4, 4.109e-4, 3.9888e-4, 3.88e-4, 3.7826e-4,
1989 3.6963e-4, 3.6213e-4, 3.5575e-4, 3.505e-4, 3.464e-4, 3.4346e-4,
1990 3.4173e-4, 3.4125e-4, 3.4206e-4, 3.4424e-4, 3.4787e-4, 3.5303e-4,
1991 3.5986e-4, 3.6847e-4, 3.7903e-4, 3.9174e-4, 4.0681e-4, 4.2455e-4,
1992 4.4527e-4, 4.6942e-4, 4.9637e-4, 5.2698e-4, 5.5808e-4, 5.9514e-4,
1993 6.2757e-4, 6.689e-4, 7.1298e-4, 7.3955e-4, 7.8403e-4, 8.0449e-4,
1994 8.5131e-4, 9.0256e-4, 9.3692e-4, .0010051, .0010846, .0011678,
1995 .001282, .0014016, .0015355, .0016764, .0018272, .0020055,
1996 .0021455, .0023421, .0024615, .0026786, .0028787, .0031259,
1997 .0034046, .0036985, .0040917, .0043902, .0048349, .0049531,
1998 .0052989, .0056148, .0052452, .0053357, .005333, .0045069,
1999 .0043851, .004253, .003738, .0038084, .0039013, .0041505,
2000 .0045372, .0050569, .0054507, .0061267, .0066122, .0072449,
2001 .0078012, .0082651, .0076538, .0076573, .0076806, .0075227,
2002 .0076269, .0063758, .006254, .0067749, .0067909, .0068231,
2003 .0072143, .0072762, .0072954, .007679, .0075107, .0073658,
2004 .0072441, .0071074, .0070378, .007176, .0072472, .0075844,
2005 .0079291, .008412, .0090165, .010688, .011535, .012375, .013166,
2006 .013895, .015567, .016011, .016392, .016737, .017043, .017731,
2007 .018031, .018419, .018877, .019474, .019868, .020604, .021538,
2008 .022653, .023869, .025288, .026879, .028547, .030524, .03274,
2009 .035132, .03769, .040567, .043793, .047188, .049962, .053542,
2010 .057205, .060776, .061489, .064419, .067124, .065945, .068487,
2011 .071209, .074783, .077039, .082444, .08902, .09692, .10617,
2012 .11687, .12952, .12362, .13498, .14412, .15492, .16519, .1744,
2013 .17096, .17714, .18208, .17363, .17813, .18564, .18295, .19045,
2014 .20252, .20815, .21844, .22929, .24229, .25321, .26588, .2797,
2015 .29465, .31136, .32961, .36529, .38486, .41027, .43694, .4667,
2016 .49943, .54542, .58348, .62303, .67633, .71755, .76054, .81371,
2017 .85934, .90841, .96438, 1.0207, 1.0821, 1.1491, 1.2226, 1.3018,
2018 1.388, 1.4818, 1.5835, 1.6939, 1.8137, 1.9435, 2.0843, 2.237,
2019 2.4026, 2.5818, 2.7767, 2.9885, 3.2182, 3.4679, 3.7391, 4.0349,
2020 4.3554, 4.7053, 5.0849, 5.4986, 5.9436, 6.4294, 6.9598, 7.5203,
2021 8.143, 8.8253, 9.5568, 10.371, 11.267, 12.233, 13.31, 14.357,
2022 15.598, 16.93, 18.358, 19.849, 21.408, 23.04, 24.706, 26.409,
2023 28.153, 28.795, 30.549, 32.43, 34.49, 36.027, 38.955, 42.465,
2024 46.565, 50.875, 55.378, 59.002, 63.882, 67.949, 73.693, 80.095,
2025 86.403, 94.264, 102.65, 112.37, 123.3, 135.54, 149.14, 163.83,
2026 179.17, 196.89, 217.91, 240.94, 264.13, 292.39, 324.83, 358.21,
2027 397.16, 440.5, 488.6, 541.04, 595.3, 650.43, 652.03, 688.74,
2028 719.47, 743.54, 757.68, 762.35, 756.43, 741.42, 595.43, 580.97,
2029 580.83, 605.68, 667.88, 764.49, 759.93, 789.12, 798.17, 645.66,
2030 615.65, 455.05, 421.09, 306.45, 289.14, 235.7, 215.52, 274.57,
2031 316.53, 357.73, 409.89, 465.06, 521.84, 579.02, 630.64, 794.46,
2032 813., 813.56, 796.25, 761.57, 727.97, 812.14, 866.75, 932.5,
2033 1132.8, 1194.8, 1362.2, 1387.2, 1482.3, 1479.7, 1517.9, 1533.1,
2034 1534.2, 1523.3, 1522.5, 1515.5, 1505.2, 1486.5, 1454., 1412.,
2035 1358.8, 1107.8, 1060.9, 1033.5, 1048.2, 1122.4, 1248.9, 1227.1,
2036 1255.4, 1058.9, 1020.7, 970.59, 715.24, 512.56, 468.47, 349.3,
2037 338.26, 299.22, 301.26, 332.38, 382.08, 445.49, 515.87, 590.85,
2038 662.3, 726.05, 955.59, 964.11, 945.17, 891.48, 807.11, 720.9,
2039 803.36, 834.46, 1073.9, 1107.1, 1123.6, 1296., 1393.7, 1303.1,
2040 1284.3, 1161.8, 1078.8, 976.13, 868.72, 767.4, 674.72, 593.73,
2041 523.12, 462.24, 409.75, 364.34, 325., 290.73, 260.76, 234.46,
2042 211.28, 190.78, 172.61, 156.44, 142.01, 129.12, 117.57, 107.2,
2043 97.877, 89.47, 81.882, 75.021, 68.807, 63.171, 58.052, 53.396,
2044 49.155, 45.288, 41.759, 38.531, 35.576, 32.868, 30.384, 28.102,
2045 26.003, 24.071, 22.293, 20.655, 19.147, 17.756, 16.476, 15.292,
2046 14.198, 13.183, 12.241, 11.367, 10.554, 9.7989, 9.0978, 8.4475,
2047 7.845, 7.2868, 6.7704, 6.2927, 5.8508, 5.4421, 5.064, 4.714,
2048 4.3902, 4.0902, 3.8121, 3.5543, 3.315, 3.093, 2.8869, 2.6953,
2049 2.5172, 2.3517, 2.1977, 2.0544, 1.9211, 1.7969, 1.6812, 1.5735,
2050 1.4731, 1.3794, 1.2921, 1.2107, 1.1346, 1.0637, .99744, .93554,
2051 .87771, .82368, .77313, .72587, .6816, .64014, .60134, .565,
2052 .53086, .49883, .46881, .44074, .4144, .38979, .36679, .34513,
2053 .32474, .30552, .28751, .27045, .25458, .23976, .22584, .21278,
2054 .20051, .18899, .17815, .16801, .15846, .14954, .14117, .13328,
2059 const double xw = nu / 2 + 1;
2060 if (xw >= 1 && xw < 2001) {
2061 const int iw = (int) xw;
2062 const double dw = xw - iw;
2063 const double ew = 1 - dw;
2064 const double cw296 = ew * co2296[iw - 1] + dw * co2296[iw];
2065 const double cw260 = ew * co2260[iw - 1] + dw * co2260[iw];
2066 const double cw230 = ew * co2230[iw - 1] + dw * co2230[iw];
2067 const double dt230 = t - 230;
2068 const double dt260 = t - 260;
2069 const double dt296 = t - 296;
2071 dt260 * 5.050505e-4 * dt296 * cw230 -
2072 dt230 * 9.259259e-4 * dt296 * cw260 +
2073 dt230 * 4.208754e-4 * dt260 * cw296;
2074 return u /
NA / 1000 * p /
P0 * ctw;
2088 static const double h2o296[2001] =
2089 { .17, .1695, .172, .168, .1687, .1624, .1606,
2090 .1508, .1447, .1344, .1214, .1133, .1009, .09217, .08297, .06989,
2091 .06513, .05469, .05056, .04417, .03779, .03484, .02994, .0272,
2092 .02325, .02063, .01818, .01592, .01405, .01251, .0108, .009647,
2093 .008424, .007519, .006555, .00588, .005136, .004511, .003989,
2094 .003509, .003114, .00274, .002446, .002144, .001895, .001676,
2095 .001486, .001312, .001164, .001031, 9.129e-4, 8.106e-4, 7.213e-4,
2096 6.4e-4, 5.687e-4, 5.063e-4, 4.511e-4, 4.029e-4, 3.596e-4,
2097 3.22e-4, 2.889e-4, 2.597e-4, 2.337e-4, 2.108e-4, 1.907e-4,
2098 1.728e-4, 1.57e-4, 1.43e-4, 1.305e-4, 1.195e-4, 1.097e-4,
2099 1.009e-4, 9.307e-5, 8.604e-5, 7.971e-5, 7.407e-5, 6.896e-5,
2100 6.433e-5, 6.013e-5, 5.631e-5, 5.283e-5, 4.963e-5, 4.669e-5,
2101 4.398e-5, 4.148e-5, 3.917e-5, 3.702e-5, 3.502e-5, 3.316e-5,
2102 3.142e-5, 2.978e-5, 2.825e-5, 2.681e-5, 2.546e-5, 2.419e-5,
2103 2.299e-5, 2.186e-5, 2.079e-5, 1.979e-5, 1.884e-5, 1.795e-5,
2104 1.711e-5, 1.633e-5, 1.559e-5, 1.49e-5, 1.426e-5, 1.367e-5,
2105 1.312e-5, 1.263e-5, 1.218e-5, 1.178e-5, 1.143e-5, 1.112e-5,
2106 1.088e-5, 1.07e-5, 1.057e-5, 1.05e-5, 1.051e-5, 1.059e-5,
2107 1.076e-5, 1.1e-5, 1.133e-5, 1.18e-5, 1.237e-5, 1.308e-5,
2108 1.393e-5, 1.483e-5, 1.614e-5, 1.758e-5, 1.93e-5, 2.123e-5,
2109 2.346e-5, 2.647e-5, 2.93e-5, 3.279e-5, 3.745e-5, 4.152e-5,
2110 4.813e-5, 5.477e-5, 6.203e-5, 7.331e-5, 8.056e-5, 9.882e-5,
2111 1.05e-4, 1.21e-4, 1.341e-4, 1.572e-4, 1.698e-4, 1.968e-4,
2112 2.175e-4, 2.431e-4, 2.735e-4, 2.867e-4, 3.19e-4, 3.371e-4,
2113 3.554e-4, 3.726e-4, 3.837e-4, 3.878e-4, 3.864e-4, 3.858e-4,
2114 3.841e-4, 3.852e-4, 3.815e-4, 3.762e-4, 3.618e-4, 3.579e-4,
2115 3.45e-4, 3.202e-4, 3.018e-4, 2.785e-4, 2.602e-4, 2.416e-4,
2116 2.097e-4, 1.939e-4, 1.689e-4, 1.498e-4, 1.308e-4, 1.17e-4,
2117 1.011e-4, 9.237e-5, 7.909e-5, 7.006e-5, 6.112e-5, 5.401e-5,
2118 4.914e-5, 4.266e-5, 3.963e-5, 3.316e-5, 3.037e-5, 2.598e-5,
2119 2.294e-5, 2.066e-5, 1.813e-5, 1.583e-5, 1.423e-5, 1.247e-5,
2120 1.116e-5, 9.76e-6, 8.596e-6, 7.72e-6, 6.825e-6, 6.108e-6,
2121 5.366e-6, 4.733e-6, 4.229e-6, 3.731e-6, 3.346e-6, 2.972e-6,
2122 2.628e-6, 2.356e-6, 2.102e-6, 1.878e-6, 1.678e-6, 1.507e-6,
2123 1.348e-6, 1.21e-6, 1.089e-6, 9.806e-7, 8.857e-7, 8.004e-7,
2124 7.261e-7, 6.599e-7, 6.005e-7, 5.479e-7, 5.011e-7, 4.595e-7,
2125 4.219e-7, 3.885e-7, 3.583e-7, 3.314e-7, 3.071e-7, 2.852e-7,
2126 2.654e-7, 2.474e-7, 2.311e-7, 2.162e-7, 2.026e-7, 1.902e-7,
2127 1.788e-7, 1.683e-7, 1.587e-7, 1.497e-7, 1.415e-7, 1.338e-7,
2128 1.266e-7, 1.2e-7, 1.138e-7, 1.08e-7, 1.027e-7, 9.764e-8,
2129 9.296e-8, 8.862e-8, 8.458e-8, 8.087e-8, 7.744e-8, 7.429e-8,
2130 7.145e-8, 6.893e-8, 6.664e-8, 6.468e-8, 6.322e-8, 6.162e-8,
2131 6.07e-8, 5.992e-8, 5.913e-8, 5.841e-8, 5.796e-8, 5.757e-8,
2132 5.746e-8, 5.731e-8, 5.679e-8, 5.577e-8, 5.671e-8, 5.656e-8,
2133 5.594e-8, 5.593e-8, 5.602e-8, 5.62e-8, 5.693e-8, 5.725e-8,
2134 5.858e-8, 6.037e-8, 6.249e-8, 6.535e-8, 6.899e-8, 7.356e-8,
2135 7.918e-8, 8.618e-8, 9.385e-8, 1.039e-7, 1.158e-7, 1.29e-7,
2136 1.437e-7, 1.65e-7, 1.871e-7, 2.121e-7, 2.427e-7, 2.773e-7,
2137 3.247e-7, 3.677e-7, 4.037e-7, 4.776e-7, 5.101e-7, 6.214e-7,
2138 6.936e-7, 7.581e-7, 8.486e-7, 9.355e-7, 9.942e-7, 1.063e-6,
2139 1.123e-6, 1.191e-6, 1.215e-6, 1.247e-6, 1.26e-6, 1.271e-6,
2140 1.284e-6, 1.317e-6, 1.323e-6, 1.349e-6, 1.353e-6, 1.362e-6,
2141 1.344e-6, 1.329e-6, 1.336e-6, 1.327e-6, 1.325e-6, 1.359e-6,
2142 1.374e-6, 1.415e-6, 1.462e-6, 1.526e-6, 1.619e-6, 1.735e-6,
2143 1.863e-6, 2.034e-6, 2.265e-6, 2.482e-6, 2.756e-6, 3.103e-6,
2144 3.466e-6, 3.832e-6, 4.378e-6, 4.913e-6, 5.651e-6, 6.311e-6,
2145 7.169e-6, 8.057e-6, 9.253e-6, 1.047e-5, 1.212e-5, 1.36e-5,
2146 1.569e-5, 1.776e-5, 2.02e-5, 2.281e-5, 2.683e-5, 2.994e-5,
2147 3.488e-5, 3.896e-5, 4.499e-5, 5.175e-5, 6.035e-5, 6.34e-5,
2148 7.281e-5, 7.923e-5, 8.348e-5, 9.631e-5, 1.044e-4, 1.102e-4,
2149 1.176e-4, 1.244e-4, 1.283e-4, 1.326e-4, 1.4e-4, 1.395e-4,
2150 1.387e-4, 1.363e-4, 1.314e-4, 1.241e-4, 1.228e-4, 1.148e-4,
2151 1.086e-4, 1.018e-4, 8.89e-5, 8.316e-5, 7.292e-5, 6.452e-5,
2152 5.625e-5, 5.045e-5, 4.38e-5, 3.762e-5, 3.29e-5, 2.836e-5,
2153 2.485e-5, 2.168e-5, 1.895e-5, 1.659e-5, 1.453e-5, 1.282e-5,
2154 1.132e-5, 1.001e-5, 8.836e-6, 7.804e-6, 6.922e-6, 6.116e-6,
2155 5.429e-6, 4.824e-6, 4.278e-6, 3.788e-6, 3.371e-6, 2.985e-6,
2156 2.649e-6, 2.357e-6, 2.09e-6, 1.858e-6, 1.647e-6, 1.462e-6,
2157 1.299e-6, 1.155e-6, 1.028e-6, 9.142e-7, 8.132e-7, 7.246e-7,
2158 6.451e-7, 5.764e-7, 5.151e-7, 4.603e-7, 4.121e-7, 3.694e-7,
2159 3.318e-7, 2.985e-7, 2.69e-7, 2.428e-7, 2.197e-7, 1.992e-7,
2160 1.81e-7, 1.649e-7, 1.506e-7, 1.378e-7, 1.265e-7, 1.163e-7,
2161 1.073e-7, 9.918e-8, 9.191e-8, 8.538e-8, 7.949e-8, 7.419e-8,
2162 6.94e-8, 6.508e-8, 6.114e-8, 5.761e-8, 5.437e-8, 5.146e-8,
2163 4.89e-8, 4.636e-8, 4.406e-8, 4.201e-8, 4.015e-8, 3.84e-8,
2164 3.661e-8, 3.51e-8, 3.377e-8, 3.242e-8, 3.13e-8, 3.015e-8,
2165 2.918e-8, 2.83e-8, 2.758e-8, 2.707e-8, 2.656e-8, 2.619e-8,
2166 2.609e-8, 2.615e-8, 2.63e-8, 2.675e-8, 2.745e-8, 2.842e-8,
2167 2.966e-8, 3.125e-8, 3.318e-8, 3.565e-8, 3.85e-8, 4.191e-8,
2168 4.59e-8, 5.059e-8, 5.607e-8, 6.239e-8, 6.958e-8, 7.796e-8,
2169 8.773e-8, 9.88e-8, 1.114e-7, 1.258e-7, 1.422e-7, 1.61e-7,
2170 1.822e-7, 2.06e-7, 2.337e-7, 2.645e-7, 2.996e-7, 3.393e-7,
2171 3.843e-7, 4.363e-7, 4.935e-7, 5.607e-7, 6.363e-7, 7.242e-7,
2172 8.23e-7, 9.411e-7, 1.071e-6, 1.232e-6, 1.402e-6, 1.6e-6, 1.82e-6,
2173 2.128e-6, 2.386e-6, 2.781e-6, 3.242e-6, 3.653e-6, 4.323e-6,
2174 4.747e-6, 5.321e-6, 5.919e-6, 6.681e-6, 7.101e-6, 7.983e-6,
2175 8.342e-6, 8.741e-6, 9.431e-6, 9.952e-6, 1.026e-5, 1.055e-5,
2176 1.095e-5, 1.095e-5, 1.087e-5, 1.056e-5, 1.026e-5, 9.715e-6,
2177 9.252e-6, 8.452e-6, 7.958e-6, 7.268e-6, 6.295e-6, 6.003e-6, 5e-6,
2178 4.591e-6, 3.983e-6, 3.479e-6, 3.058e-6, 2.667e-6, 2.293e-6,
2179 1.995e-6, 1.747e-6, 1.517e-6, 1.335e-6, 1.165e-6, 1.028e-6,
2180 9.007e-7, 7.956e-7, 7.015e-7, 6.192e-7, 5.491e-7, 4.859e-7,
2181 4.297e-7, 3.799e-7, 3.38e-7, 3.002e-7, 2.659e-7, 2.366e-7,
2182 2.103e-7, 1.861e-7, 1.655e-7, 1.469e-7, 1.309e-7, 1.162e-7,
2183 1.032e-7, 9.198e-8, 8.181e-8, 7.294e-8, 6.516e-8, 5.787e-8,
2184 5.163e-8, 4.612e-8, 4.119e-8, 3.695e-8, 3.308e-8, 2.976e-8,
2185 2.67e-8, 2.407e-8, 2.171e-8, 1.965e-8, 1.78e-8, 1.617e-8,
2186 1.47e-8, 1.341e-8, 1.227e-8, 1.125e-8, 1.033e-8, 9.524e-9,
2187 8.797e-9, 8.162e-9, 7.565e-9, 7.04e-9, 6.56e-9, 6.129e-9,
2188 5.733e-9, 5.376e-9, 5.043e-9, 4.75e-9, 4.466e-9, 4.211e-9,
2189 3.977e-9, 3.759e-9, 3.558e-9, 3.373e-9, 3.201e-9, 3.043e-9,
2190 2.895e-9, 2.76e-9, 2.635e-9, 2.518e-9, 2.411e-9, 2.314e-9,
2191 2.23e-9, 2.151e-9, 2.087e-9, 2.035e-9, 1.988e-9, 1.946e-9,
2192 1.927e-9, 1.916e-9, 1.916e-9, 1.933e-9, 1.966e-9, 2.018e-9,
2193 2.09e-9, 2.182e-9, 2.299e-9, 2.442e-9, 2.623e-9, 2.832e-9,
2194 3.079e-9, 3.368e-9, 3.714e-9, 4.104e-9, 4.567e-9, 5.091e-9,
2195 5.701e-9, 6.398e-9, 7.194e-9, 8.127e-9, 9.141e-9, 1.035e-8,
2196 1.177e-8, 1.338e-8, 1.508e-8, 1.711e-8, 1.955e-8, 2.216e-8,
2197 2.534e-8, 2.871e-8, 3.291e-8, 3.711e-8, 4.285e-8, 4.868e-8,
2198 5.509e-8, 6.276e-8, 7.262e-8, 8.252e-8, 9.4e-8, 1.064e-7,
2199 1.247e-7, 1.411e-7, 1.626e-7, 1.827e-7, 2.044e-7, 2.284e-7,
2200 2.452e-7, 2.854e-7, 3.026e-7, 3.278e-7, 3.474e-7, 3.693e-7,
2201 3.93e-7, 4.104e-7, 4.22e-7, 4.439e-7, 4.545e-7, 4.778e-7,
2202 4.812e-7, 5.018e-7, 4.899e-7, 5.075e-7, 5.073e-7, 5.171e-7,
2203 5.131e-7, 5.25e-7, 5.617e-7, 5.846e-7, 6.239e-7, 6.696e-7,
2204 7.398e-7, 8.073e-7, 9.15e-7, 1.009e-6, 1.116e-6, 1.264e-6,
2205 1.439e-6, 1.644e-6, 1.856e-6, 2.147e-6, 2.317e-6, 2.713e-6,
2206 2.882e-6, 2.99e-6, 3.489e-6, 3.581e-6, 4.033e-6, 4.26e-6,
2207 4.543e-6, 4.84e-6, 4.826e-6, 5.013e-6, 5.252e-6, 5.277e-6,
2208 5.306e-6, 5.236e-6, 5.123e-6, 5.171e-6, 4.843e-6, 4.615e-6,
2209 4.385e-6, 3.97e-6, 3.693e-6, 3.231e-6, 2.915e-6, 2.495e-6,
2210 2.144e-6, 1.91e-6, 1.639e-6, 1.417e-6, 1.226e-6, 1.065e-6,
2211 9.29e-7, 8.142e-7, 7.161e-7, 6.318e-7, 5.581e-7, 4.943e-7,
2212 4.376e-7, 3.884e-7, 3.449e-7, 3.06e-7, 2.712e-7, 2.412e-7,
2213 2.139e-7, 1.903e-7, 1.689e-7, 1.499e-7, 1.331e-7, 1.183e-7,
2214 1.05e-7, 9.362e-8, 8.306e-8, 7.403e-8, 6.578e-8, 5.853e-8,
2215 5.216e-8, 4.632e-8, 4.127e-8, 3.678e-8, 3.279e-8, 2.923e-8,
2216 2.612e-8, 2.339e-8, 2.094e-8, 1.877e-8, 1.686e-8, 1.516e-8,
2217 1.366e-8, 1.234e-8, 1.114e-8, 1.012e-8, 9.182e-9, 8.362e-9,
2218 7.634e-9, 6.981e-9, 6.406e-9, 5.888e-9, 5.428e-9, 5.021e-9,
2219 4.65e-9, 4.326e-9, 4.033e-9, 3.77e-9, 3.536e-9, 3.327e-9,
2220 3.141e-9, 2.974e-9, 2.825e-9, 2.697e-9, 2.584e-9, 2.488e-9,
2221 2.406e-9, 2.34e-9, 2.292e-9, 2.259e-9, 2.244e-9, 2.243e-9,
2222 2.272e-9, 2.31e-9, 2.378e-9, 2.454e-9, 2.618e-9, 2.672e-9,
2223 2.831e-9, 3.05e-9, 3.225e-9, 3.425e-9, 3.677e-9, 3.968e-9,
2224 4.221e-9, 4.639e-9, 4.96e-9, 5.359e-9, 5.649e-9, 6.23e-9,
2225 6.716e-9, 7.218e-9, 7.746e-9, 7.988e-9, 8.627e-9, 8.999e-9,
2226 9.442e-9, 9.82e-9, 1.015e-8, 1.06e-8, 1.079e-8, 1.109e-8,
2227 1.137e-8, 1.186e-8, 1.18e-8, 1.187e-8, 1.194e-8, 1.192e-8,
2228 1.224e-8, 1.245e-8, 1.246e-8, 1.318e-8, 1.377e-8, 1.471e-8,
2229 1.582e-8, 1.713e-8, 1.853e-8, 2.063e-8, 2.27e-8, 2.567e-8,
2230 2.891e-8, 3.264e-8, 3.744e-8, 4.286e-8, 4.915e-8, 5.623e-8,
2231 6.336e-8, 7.293e-8, 8.309e-8, 9.319e-8, 1.091e-7, 1.243e-7,
2232 1.348e-7, 1.449e-7, 1.62e-7, 1.846e-7, 1.937e-7, 2.04e-7,
2233 2.179e-7, 2.298e-7, 2.433e-7, 2.439e-7, 2.464e-7, 2.611e-7,
2234 2.617e-7, 2.582e-7, 2.453e-7, 2.401e-7, 2.349e-7, 2.203e-7,
2235 2.066e-7, 1.939e-7, 1.78e-7, 1.558e-7, 1.391e-7, 1.203e-7,
2236 1.048e-7, 9.464e-8, 8.306e-8, 7.239e-8, 6.317e-8, 5.52e-8,
2237 4.847e-8, 4.282e-8, 3.796e-8, 3.377e-8, 2.996e-8, 2.678e-8,
2238 2.4e-8, 2.134e-8, 1.904e-8, 1.705e-8, 1.523e-8, 1.35e-8,
2239 1.204e-8, 1.07e-8, 9.408e-9, 8.476e-9, 7.47e-9, 6.679e-9,
2240 5.929e-9, 5.267e-9, 4.711e-9, 4.172e-9, 3.761e-9, 3.288e-9,
2241 2.929e-9, 2.609e-9, 2.315e-9, 2.042e-9, 1.844e-9, 1.64e-9,
2242 1.47e-9, 1.31e-9, 1.176e-9, 1.049e-9, 9.377e-10, 8.462e-10,
2243 7.616e-10, 6.854e-10, 6.191e-10, 5.596e-10, 5.078e-10, 4.611e-10,
2244 4.197e-10, 3.83e-10, 3.505e-10, 3.215e-10, 2.956e-10, 2.726e-10,
2245 2.521e-10, 2.338e-10, 2.173e-10, 2.026e-10, 1.895e-10, 1.777e-10,
2246 1.672e-10, 1.579e-10, 1.496e-10, 1.423e-10, 1.358e-10, 1.302e-10,
2247 1.254e-10, 1.216e-10, 1.187e-10, 1.163e-10, 1.147e-10, 1.145e-10,
2248 1.15e-10, 1.17e-10, 1.192e-10, 1.25e-10, 1.298e-10, 1.345e-10,
2249 1.405e-10, 1.538e-10, 1.648e-10, 1.721e-10, 1.872e-10, 1.968e-10,
2250 2.089e-10, 2.172e-10, 2.317e-10, 2.389e-10, 2.503e-10, 2.585e-10,
2251 2.686e-10, 2.8e-10, 2.895e-10, 3.019e-10, 3.037e-10, 3.076e-10,
2252 3.146e-10, 3.198e-10, 3.332e-10, 3.397e-10, 3.54e-10, 3.667e-10,
2253 3.895e-10, 4.071e-10, 4.565e-10, 4.983e-10, 5.439e-10, 5.968e-10,
2254 6.676e-10, 7.456e-10, 8.405e-10, 9.478e-10, 1.064e-9, 1.218e-9,
2255 1.386e-9, 1.581e-9, 1.787e-9, 2.032e-9, 2.347e-9, 2.677e-9,
2256 3.008e-9, 3.544e-9, 4.056e-9, 4.687e-9, 5.331e-9, 6.227e-9,
2257 6.854e-9, 8.139e-9, 8.945e-9, 9.865e-9, 1.125e-8, 1.178e-8,
2258 1.364e-8, 1.436e-8, 1.54e-8, 1.672e-8, 1.793e-8, 1.906e-8,
2259 2.036e-8, 2.144e-8, 2.292e-8, 2.371e-8, 2.493e-8, 2.606e-8,
2260 2.706e-8, 2.866e-8, 3.036e-8, 3.136e-8, 3.405e-8, 3.665e-8,
2261 3.837e-8, 4.229e-8, 4.748e-8, 5.32e-8, 5.763e-8, 6.677e-8,
2262 7.216e-8, 7.716e-8, 8.958e-8, 9.419e-8, 1.036e-7, 1.108e-7,
2263 1.189e-7, 1.246e-7, 1.348e-7, 1.31e-7, 1.361e-7, 1.364e-7,
2264 1.363e-7, 1.343e-7, 1.293e-7, 1.254e-7, 1.235e-7, 1.158e-7,
2265 1.107e-7, 9.961e-8, 9.011e-8, 7.91e-8, 6.916e-8, 6.338e-8,
2266 5.564e-8, 4.827e-8, 4.198e-8, 3.695e-8, 3.276e-8, 2.929e-8,
2267 2.633e-8, 2.391e-8, 2.192e-8, 2.021e-8, 1.89e-8, 1.772e-8,
2268 1.667e-8, 1.603e-8, 1.547e-8, 1.537e-8, 1.492e-8, 1.515e-8,
2269 1.479e-8, 1.45e-8, 1.513e-8, 1.495e-8, 1.529e-8, 1.565e-8,
2270 1.564e-8, 1.553e-8, 1.569e-8, 1.584e-8, 1.57e-8, 1.538e-8,
2271 1.513e-8, 1.472e-8, 1.425e-8, 1.349e-8, 1.328e-8, 1.249e-8,
2272 1.17e-8, 1.077e-8, 9.514e-9, 8.614e-9, 7.46e-9, 6.621e-9,
2273 5.775e-9, 5.006e-9, 4.308e-9, 3.747e-9, 3.24e-9, 2.84e-9,
2274 2.481e-9, 2.184e-9, 1.923e-9, 1.71e-9, 1.504e-9, 1.334e-9,
2275 1.187e-9, 1.053e-9, 9.367e-10, 8.306e-10, 7.419e-10, 6.63e-10,
2276 5.918e-10, 5.277e-10, 4.717e-10, 4.222e-10, 3.783e-10, 3.39e-10,
2277 3.036e-10, 2.729e-10, 2.455e-10, 2.211e-10, 1.995e-10, 1.804e-10,
2278 1.635e-10, 1.485e-10, 1.355e-10, 1.24e-10, 1.139e-10, 1.051e-10,
2279 9.757e-11, 9.114e-11, 8.577e-11, 8.139e-11, 7.792e-11, 7.52e-11,
2280 7.39e-11, 7.311e-11, 7.277e-11, 7.482e-11, 7.698e-11, 8.162e-11,
2281 8.517e-11, 8.968e-11, 9.905e-11, 1.075e-10, 1.187e-10, 1.291e-10,
2282 1.426e-10, 1.573e-10, 1.734e-10, 1.905e-10, 2.097e-10, 2.28e-10,
2283 2.473e-10, 2.718e-10, 2.922e-10, 3.128e-10, 3.361e-10, 3.641e-10,
2284 3.91e-10, 4.196e-10, 4.501e-10, 4.932e-10, 5.258e-10, 5.755e-10,
2285 6.253e-10, 6.664e-10, 7.344e-10, 7.985e-10, 8.877e-10, 1.005e-9,
2286 1.118e-9, 1.251e-9, 1.428e-9, 1.61e-9, 1.888e-9, 2.077e-9,
2287 2.331e-9, 2.751e-9, 3.061e-9, 3.522e-9, 3.805e-9, 4.181e-9,
2288 4.575e-9, 5.167e-9, 5.634e-9, 6.007e-9, 6.501e-9, 6.829e-9,
2289 7.211e-9, 7.262e-9, 7.696e-9, 7.832e-9, 7.799e-9, 7.651e-9,
2290 7.304e-9, 7.15e-9, 6.977e-9, 6.603e-9, 6.209e-9, 5.69e-9,
2291 5.432e-9, 4.764e-9, 4.189e-9, 3.64e-9, 3.203e-9, 2.848e-9,
2292 2.51e-9, 2.194e-9, 1.946e-9, 1.75e-9, 1.567e-9, 1.426e-9,
2293 1.302e-9, 1.197e-9, 1.109e-9, 1.035e-9, 9.719e-10, 9.207e-10,
2294 8.957e-10, 8.578e-10, 8.262e-10, 8.117e-10, 7.987e-10, 7.875e-10,
2295 7.741e-10, 7.762e-10, 7.537e-10, 7.424e-10, 7.474e-10, 7.294e-10,
2296 7.216e-10, 7.233e-10, 7.075e-10, 6.892e-10, 6.618e-10, 6.314e-10,
2297 6.208e-10, 5.689e-10, 5.55e-10, 4.984e-10, 4.6e-10, 4.078e-10,
2298 3.879e-10, 3.459e-10, 2.982e-10, 2.626e-10, 2.329e-10, 1.988e-10,
2299 1.735e-10, 1.487e-10, 1.297e-10, 1.133e-10, 9.943e-11, 8.736e-11,
2300 7.726e-11, 6.836e-11, 6.053e-11, 5.384e-11, 4.789e-11, 4.267e-11,
2301 3.804e-11, 3.398e-11, 3.034e-11, 2.71e-11, 2.425e-11, 2.173e-11,
2302 1.95e-11, 1.752e-11, 1.574e-11, 1.418e-11, 1.278e-11, 1.154e-11,
2303 1.044e-11, 9.463e-12, 8.602e-12, 7.841e-12, 7.171e-12, 6.584e-12,
2304 6.073e-12, 5.631e-12, 5.254e-12, 4.937e-12, 4.679e-12, 4.476e-12,
2305 4.328e-12, 4.233e-12, 4.194e-12, 4.211e-12, 4.286e-12, 4.424e-12,
2306 4.628e-12, 4.906e-12, 5.262e-12, 5.708e-12, 6.254e-12, 6.914e-12,
2307 7.714e-12, 8.677e-12, 9.747e-12, 1.101e-11, 1.256e-11, 1.409e-11,
2308 1.597e-11, 1.807e-11, 2.034e-11, 2.316e-11, 2.622e-11, 2.962e-11,
2309 3.369e-11, 3.819e-11, 4.329e-11, 4.932e-11, 5.589e-11, 6.364e-11,
2310 7.284e-11, 8.236e-11, 9.447e-11, 1.078e-10, 1.229e-10, 1.417e-10,
2311 1.614e-10, 1.843e-10, 2.107e-10, 2.406e-10, 2.728e-10, 3.195e-10,
2312 3.595e-10, 4.153e-10, 4.736e-10, 5.41e-10, 6.088e-10, 6.769e-10,
2313 7.691e-10, 8.545e-10, 9.621e-10, 1.047e-9, 1.161e-9, 1.296e-9,
2314 1.424e-9, 1.576e-9, 1.739e-9, 1.893e-9, 2.08e-9, 2.336e-9,
2315 2.604e-9, 2.76e-9, 3.001e-9, 3.365e-9, 3.55e-9, 3.895e-9,
2316 4.183e-9, 4.614e-9, 4.846e-9, 5.068e-9, 5.427e-9, 5.541e-9,
2317 5.864e-9, 5.997e-9, 5.997e-9, 6.061e-9, 5.944e-9, 5.855e-9,
2318 5.661e-9, 5.523e-9, 5.374e-9, 4.94e-9, 4.688e-9, 4.17e-9,
2319 3.913e-9, 3.423e-9, 2.997e-9, 2.598e-9, 2.253e-9, 1.946e-9,
2320 1.71e-9, 1.507e-9, 1.336e-9, 1.19e-9, 1.068e-9, 9.623e-10,
2321 8.772e-10, 8.007e-10, 7.42e-10, 6.884e-10, 6.483e-10, 6.162e-10,
2322 5.922e-10, 5.688e-10, 5.654e-10, 5.637e-10, 5.701e-10, 5.781e-10,
2323 5.874e-10, 6.268e-10, 6.357e-10, 6.525e-10, 7.137e-10, 7.441e-10,
2324 8.024e-10, 8.485e-10, 9.143e-10, 9.536e-10, 9.717e-10, 1.018e-9,
2325 1.042e-9, 1.054e-9, 1.092e-9, 1.079e-9, 1.064e-9, 1.043e-9,
2326 1.02e-9, 9.687e-10, 9.273e-10, 9.208e-10, 9.068e-10, 7.687e-10,
2327 7.385e-10, 6.595e-10, 5.87e-10, 5.144e-10, 4.417e-10, 3.804e-10,
2328 3.301e-10, 2.866e-10, 2.509e-10, 2.202e-10, 1.947e-10, 1.719e-10,
2329 1.525e-10, 1.361e-10, 1.21e-10, 1.084e-10, 9.8e-11, 8.801e-11,
2330 7.954e-11, 7.124e-11, 6.335e-11, 5.76e-11, 5.132e-11, 4.601e-11,
2331 4.096e-11, 3.657e-11, 3.25e-11, 2.909e-11, 2.587e-11, 2.297e-11,
2332 2.05e-11, 1.828e-11, 1.632e-11, 1.462e-11, 1.314e-11, 1.185e-11,
2333 1.073e-11, 9.76e-12, 8.922e-12, 8.206e-12, 7.602e-12, 7.1e-12,
2334 6.694e-12, 6.378e-12, 6.149e-12, 6.004e-12, 5.941e-12, 5.962e-12,
2335 6.069e-12, 6.265e-12, 6.551e-12, 6.935e-12, 7.457e-12, 8.074e-12,
2336 8.811e-12, 9.852e-12, 1.086e-11, 1.207e-11, 1.361e-11, 1.553e-11,
2337 1.737e-11, 1.93e-11, 2.175e-11, 2.41e-11, 2.706e-11, 3.023e-11,
2338 3.313e-11, 3.657e-11, 4.118e-11, 4.569e-11, 5.025e-11, 5.66e-11,
2339 6.231e-11, 6.881e-11, 7.996e-11, 8.526e-11, 9.694e-11, 1.106e-10,
2340 1.222e-10, 1.355e-10, 1.525e-10, 1.775e-10, 1.924e-10, 2.181e-10,
2341 2.379e-10, 2.662e-10, 2.907e-10, 3.154e-10, 3.366e-10, 3.579e-10,
2342 3.858e-10, 4.046e-10, 4.196e-10, 4.166e-10, 4.457e-10, 4.466e-10,
2343 4.404e-10, 4.337e-10, 4.15e-10, 4.083e-10, 3.91e-10, 3.723e-10,
2344 3.514e-10, 3.303e-10, 2.847e-10, 2.546e-10, 2.23e-10, 1.994e-10,
2345 1.733e-10, 1.488e-10, 1.297e-10, 1.144e-10, 1.004e-10, 8.741e-11,
2346 7.928e-11, 7.034e-11, 6.323e-11, 5.754e-11, 5.25e-11, 4.85e-11,
2347 4.502e-11, 4.286e-11, 4.028e-11, 3.899e-11, 3.824e-11, 3.761e-11,
2348 3.804e-11, 3.839e-11, 3.845e-11, 4.244e-11, 4.382e-11, 4.582e-11,
2349 4.847e-11, 5.209e-11, 5.384e-11, 5.887e-11, 6.371e-11, 6.737e-11,
2350 7.168e-11, 7.415e-11, 7.827e-11, 8.037e-11, 8.12e-11, 8.071e-11,
2351 8.008e-11, 7.851e-11, 7.544e-11, 7.377e-11, 7.173e-11, 6.801e-11,
2352 6.267e-11, 5.727e-11, 5.288e-11, 4.853e-11, 4.082e-11, 3.645e-11,
2353 3.136e-11, 2.672e-11, 2.304e-11, 1.986e-11, 1.725e-11, 1.503e-11,
2354 1.315e-11, 1.153e-11, 1.014e-11, 8.942e-12, 7.901e-12, 6.993e-12,
2355 6.199e-12, 5.502e-12, 4.89e-12, 4.351e-12, 3.878e-12, 3.461e-12,
2356 3.094e-12, 2.771e-12, 2.488e-12, 2.241e-12, 2.025e-12, 1.838e-12,
2357 1.677e-12, 1.541e-12, 1.427e-12, 1.335e-12, 1.262e-12, 1.209e-12,
2358 1.176e-12, 1.161e-12, 1.165e-12, 1.189e-12, 1.234e-12, 1.3e-12,
2359 1.389e-12, 1.503e-12, 1.644e-12, 1.814e-12, 2.017e-12, 2.255e-12,
2360 2.534e-12, 2.858e-12, 3.231e-12, 3.661e-12, 4.153e-12, 4.717e-12,
2361 5.36e-12, 6.094e-12, 6.93e-12, 7.882e-12, 8.966e-12, 1.02e-11,
2362 1.162e-11, 1.324e-11, 1.51e-11, 1.72e-11, 1.965e-11, 2.237e-11,
2363 2.56e-11, 2.927e-11, 3.371e-11, 3.842e-11, 4.429e-11, 5.139e-11,
2364 5.798e-11, 6.697e-11, 7.626e-11, 8.647e-11, 1.022e-10, 1.136e-10,
2365 1.3e-10, 1.481e-10, 1.672e-10, 1.871e-10, 2.126e-10, 2.357e-10,
2366 2.583e-10, 2.997e-10, 3.289e-10, 3.702e-10, 4.012e-10, 4.319e-10,
2367 4.527e-10, 5.001e-10, 5.448e-10, 5.611e-10, 5.76e-10, 5.965e-10,
2368 6.079e-10, 6.207e-10, 6.276e-10, 6.222e-10, 6.137e-10, 6e-10,
2369 5.814e-10, 5.393e-10, 5.35e-10, 4.947e-10, 4.629e-10, 4.117e-10,
2370 3.712e-10, 3.372e-10, 2.923e-10, 2.55e-10, 2.232e-10, 1.929e-10,
2371 1.679e-10, 1.46e-10, 1.289e-10, 1.13e-10, 9.953e-11, 8.763e-11,
2372 7.76e-11, 6.9e-11, 6.16e-11, 5.525e-11, 4.958e-11, 4.489e-11,
2373 4.072e-11, 3.728e-11, 3.438e-11, 3.205e-11, 3.006e-11, 2.848e-11,
2374 2.766e-11, 2.688e-11, 2.664e-11, 2.67e-11, 2.696e-11, 2.786e-11,
2375 2.861e-11, 3.009e-11, 3.178e-11, 3.389e-11, 3.587e-11, 3.819e-11,
2376 4.054e-11, 4.417e-11, 4.703e-11, 5.137e-11, 5.46e-11, 6.055e-11,
2377 6.333e-11, 6.773e-11, 7.219e-11, 7.717e-11, 8.131e-11, 8.491e-11,
2378 8.574e-11, 9.01e-11, 9.017e-11, 8.999e-11, 8.959e-11, 8.838e-11,
2379 8.579e-11, 8.162e-11, 8.098e-11, 7.472e-11, 7.108e-11, 6.559e-11,
2380 5.994e-11, 5.172e-11, 4.424e-11, 3.951e-11, 3.34e-11, 2.902e-11,
2381 2.541e-11, 2.215e-11, 1.945e-11, 1.716e-11, 1.503e-11, 1.339e-11,
2382 1.185e-11, 1.05e-11, 9.336e-12, 8.307e-12, 7.312e-12, 6.55e-12,
2383 5.836e-12, 5.178e-12, 4.6e-12, 4.086e-12, 3.639e-12, 3.247e-12,
2384 2.904e-12, 2.604e-12, 2.341e-12, 2.112e-12, 1.914e-12, 1.744e-12,
2385 1.598e-12, 1.476e-12, 1.374e-12, 1.293e-12, 1.23e-12, 1.185e-12,
2386 1.158e-12, 1.147e-12, 1.154e-12, 1.177e-12, 1.219e-12, 1.28e-12,
2387 1.36e-12, 1.463e-12, 1.591e-12, 1.75e-12, 1.94e-12, 2.156e-12,
2388 2.43e-12, 2.748e-12, 3.052e-12, 3.533e-12, 3.967e-12, 4.471e-12,
2389 5.041e-12, 5.86e-12, 6.664e-12, 7.522e-12, 8.342e-12, 9.412e-12,
2390 1.072e-11, 1.213e-11, 1.343e-11, 1.496e-11, 1.664e-11, 1.822e-11,
2391 2.029e-11, 2.233e-11, 2.457e-11, 2.709e-11, 2.928e-11, 3.115e-11,
2392 3.356e-11, 3.592e-11, 3.818e-11, 3.936e-11, 4.061e-11, 4.149e-11,
2393 4.299e-11, 4.223e-11, 4.251e-11, 4.287e-11, 4.177e-11, 4.094e-11,
2394 3.942e-11, 3.772e-11, 3.614e-11, 3.394e-11, 3.222e-11, 2.791e-11,
2395 2.665e-11, 2.309e-11, 2.032e-11, 1.74e-11, 1.535e-11, 1.323e-11,
2396 1.151e-11, 9.803e-12, 8.65e-12, 7.54e-12, 6.619e-12, 5.832e-12,
2397 5.113e-12, 4.503e-12, 3.975e-12, 3.52e-12, 3.112e-12, 2.797e-12,
2398 2.5e-12, 2.24e-12, 2.013e-12, 1.819e-12, 1.653e-12, 1.513e-12,
2399 1.395e-12, 1.299e-12, 1.225e-12, 1.168e-12, 1.124e-12, 1.148e-12,
2400 1.107e-12, 1.128e-12, 1.169e-12, 1.233e-12, 1.307e-12, 1.359e-12,
2401 1.543e-12, 1.686e-12, 1.794e-12, 2.028e-12, 2.21e-12, 2.441e-12,
2402 2.653e-12, 2.828e-12, 3.093e-12, 3.28e-12, 3.551e-12, 3.677e-12,
2403 3.803e-12, 3.844e-12, 4.068e-12, 4.093e-12, 4.002e-12, 3.904e-12,
2404 3.624e-12, 3.633e-12, 3.622e-12, 3.443e-12, 3.184e-12, 2.934e-12,
2405 2.476e-12, 2.212e-12, 1.867e-12, 1.594e-12, 1.37e-12, 1.192e-12,
2406 1.045e-12, 9.211e-13, 8.17e-13, 7.29e-13, 6.55e-13, 5.929e-13,
2407 5.415e-13, 4.995e-13, 4.661e-13, 4.406e-13, 4.225e-13, 4.116e-13,
2408 4.075e-13, 4.102e-13, 4.198e-13, 4.365e-13, 4.606e-13, 4.925e-13,
2409 5.326e-13, 5.818e-13, 6.407e-13, 7.104e-13, 7.92e-13, 8.868e-13,
2410 9.964e-13, 1.123e-12, 1.268e-12, 1.434e-12, 1.626e-12, 1.848e-12,
2411 2.107e-12, 2.422e-12, 2.772e-12, 3.145e-12, 3.704e-12, 4.27e-12,
2412 4.721e-12, 5.361e-12, 6.083e-12, 7.095e-12, 7.968e-12, 9.228e-12,
2413 1.048e-11, 1.187e-11, 1.336e-11, 1.577e-11, 1.772e-11, 2.017e-11,
2414 2.25e-11, 2.63e-11, 2.911e-11, 3.356e-11, 3.82e-11, 4.173e-11,
2415 4.811e-11, 5.254e-11, 5.839e-11, 6.187e-11, 6.805e-11, 7.118e-11,
2416 7.369e-11, 7.664e-11, 7.794e-11, 7.947e-11, 8.036e-11, 7.954e-11,
2417 7.849e-11, 7.518e-11, 7.462e-11, 6.926e-11, 6.531e-11, 6.197e-11,
2418 5.421e-11, 4.777e-11, 4.111e-11, 3.679e-11, 3.166e-11, 2.786e-11,
2419 2.436e-11, 2.144e-11, 1.859e-11, 1.628e-11, 1.414e-11, 1.237e-11,
2420 1.093e-11, 9.558e-12
2423 static const double h2o260[2001] =
2424 { .2752, .2732, .2749, .2676, .2667, .2545,
2425 .2497, .2327, .2218, .2036, .1825, .1694, .1497, .1353, .121,
2426 .1014, .09405, .07848, .07195, .06246, .05306, .04853, .04138,
2427 .03735, .03171, .02785, .02431, .02111, .01845, .0164, .01405,
2428 .01255, .01098, .009797, .008646, .007779, .006898, .006099,
2429 .005453, .004909, .004413, .003959, .003581, .003199, .002871,
2430 .002583, .00233, .002086, .001874, .001684, .001512, .001361,
2431 .001225, .0011, 9.89e-4, 8.916e-4, 8.039e-4, 7.256e-4, 6.545e-4,
2432 5.918e-4, 5.359e-4, 4.867e-4, 4.426e-4, 4.033e-4, 3.682e-4,
2433 3.366e-4, 3.085e-4, 2.833e-4, 2.605e-4, 2.403e-4, 2.221e-4,
2434 2.055e-4, 1.908e-4, 1.774e-4, 1.653e-4, 1.544e-4, 1.443e-4,
2435 1.351e-4, 1.267e-4, 1.19e-4, 1.119e-4, 1.053e-4, 9.922e-5,
2436 9.355e-5, 8.831e-5, 8.339e-5, 7.878e-5, 7.449e-5, 7.043e-5,
2437 6.664e-5, 6.307e-5, 5.969e-5, 5.654e-5, 5.357e-5, 5.075e-5,
2438 4.81e-5, 4.56e-5, 4.322e-5, 4.102e-5, 3.892e-5, 3.696e-5,
2439 3.511e-5, 3.339e-5, 3.177e-5, 3.026e-5, 2.886e-5, 2.756e-5,
2440 2.636e-5, 2.527e-5, 2.427e-5, 2.337e-5, 2.257e-5, 2.185e-5,
2441 2.127e-5, 2.08e-5, 2.041e-5, 2.013e-5, 2e-5, 1.997e-5, 2.009e-5,
2442 2.031e-5, 2.068e-5, 2.124e-5, 2.189e-5, 2.267e-5, 2.364e-5,
2443 2.463e-5, 2.618e-5, 2.774e-5, 2.937e-5, 3.144e-5, 3.359e-5,
2444 3.695e-5, 4.002e-5, 4.374e-5, 4.947e-5, 5.431e-5, 6.281e-5,
2445 7.169e-5, 8.157e-5, 9.728e-5, 1.079e-4, 1.337e-4, 1.442e-4,
2446 1.683e-4, 1.879e-4, 2.223e-4, 2.425e-4, 2.838e-4, 3.143e-4,
2447 3.527e-4, 4.012e-4, 4.237e-4, 4.747e-4, 5.057e-4, 5.409e-4,
2448 5.734e-4, 5.944e-4, 6.077e-4, 6.175e-4, 6.238e-4, 6.226e-4,
2449 6.248e-4, 6.192e-4, 6.098e-4, 5.818e-4, 5.709e-4, 5.465e-4,
2450 5.043e-4, 4.699e-4, 4.294e-4, 3.984e-4, 3.672e-4, 3.152e-4,
2451 2.883e-4, 2.503e-4, 2.211e-4, 1.92e-4, 1.714e-4, 1.485e-4,
2452 1.358e-4, 1.156e-4, 1.021e-4, 8.887e-5, 7.842e-5, 7.12e-5,
2453 6.186e-5, 5.73e-5, 4.792e-5, 4.364e-5, 3.72e-5, 3.28e-5,
2454 2.946e-5, 2.591e-5, 2.261e-5, 2.048e-5, 1.813e-5, 1.63e-5,
2455 1.447e-5, 1.282e-5, 1.167e-5, 1.041e-5, 9.449e-6, 8.51e-6,
2456 7.596e-6, 6.961e-6, 6.272e-6, 5.728e-6, 5.198e-6, 4.667e-6,
2457 4.288e-6, 3.897e-6, 3.551e-6, 3.235e-6, 2.952e-6, 2.688e-6,
2458 2.449e-6, 2.241e-6, 2.05e-6, 1.879e-6, 1.722e-6, 1.582e-6,
2459 1.456e-6, 1.339e-6, 1.236e-6, 1.144e-6, 1.06e-6, 9.83e-7,
2460 9.149e-7, 8.535e-7, 7.973e-7, 7.466e-7, 6.999e-7, 6.574e-7,
2461 6.18e-7, 5.821e-7, 5.487e-7, 5.18e-7, 4.896e-7, 4.631e-7,
2462 4.386e-7, 4.16e-7, 3.945e-7, 3.748e-7, 3.562e-7, 3.385e-7,
2463 3.222e-7, 3.068e-7, 2.922e-7, 2.788e-7, 2.659e-7, 2.539e-7,
2464 2.425e-7, 2.318e-7, 2.219e-7, 2.127e-7, 2.039e-7, 1.958e-7,
2465 1.885e-7, 1.818e-7, 1.758e-7, 1.711e-7, 1.662e-7, 1.63e-7,
2466 1.605e-7, 1.58e-7, 1.559e-7, 1.545e-7, 1.532e-7, 1.522e-7,
2467 1.51e-7, 1.495e-7, 1.465e-7, 1.483e-7, 1.469e-7, 1.448e-7,
2468 1.444e-7, 1.436e-7, 1.426e-7, 1.431e-7, 1.425e-7, 1.445e-7,
2469 1.477e-7, 1.515e-7, 1.567e-7, 1.634e-7, 1.712e-7, 1.802e-7,
2470 1.914e-7, 2.024e-7, 2.159e-7, 2.295e-7, 2.461e-7, 2.621e-7,
2471 2.868e-7, 3.102e-7, 3.394e-7, 3.784e-7, 4.223e-7, 4.864e-7,
2472 5.501e-7, 6.039e-7, 7.193e-7, 7.728e-7, 9.514e-7, 1.073e-6,
2473 1.18e-6, 1.333e-6, 1.472e-6, 1.566e-6, 1.677e-6, 1.784e-6,
2474 1.904e-6, 1.953e-6, 2.02e-6, 2.074e-6, 2.128e-6, 2.162e-6,
2475 2.219e-6, 2.221e-6, 2.249e-6, 2.239e-6, 2.235e-6, 2.185e-6,
2476 2.141e-6, 2.124e-6, 2.09e-6, 2.068e-6, 2.1e-6, 2.104e-6,
2477 2.142e-6, 2.181e-6, 2.257e-6, 2.362e-6, 2.5e-6, 2.664e-6,
2478 2.884e-6, 3.189e-6, 3.48e-6, 3.847e-6, 4.313e-6, 4.79e-6,
2479 5.25e-6, 5.989e-6, 6.692e-6, 7.668e-6, 8.52e-6, 9.606e-6,
2480 1.073e-5, 1.225e-5, 1.377e-5, 1.582e-5, 1.761e-5, 2.029e-5,
2481 2.284e-5, 2.602e-5, 2.94e-5, 3.483e-5, 3.928e-5, 4.618e-5,
2482 5.24e-5, 6.132e-5, 7.183e-5, 8.521e-5, 9.111e-5, 1.07e-4,
2483 1.184e-4, 1.264e-4, 1.475e-4, 1.612e-4, 1.704e-4, 1.818e-4,
2484 1.924e-4, 1.994e-4, 2.061e-4, 2.18e-4, 2.187e-4, 2.2e-4,
2485 2.196e-4, 2.131e-4, 2.015e-4, 1.988e-4, 1.847e-4, 1.729e-4,
2486 1.597e-4, 1.373e-4, 1.262e-4, 1.087e-4, 9.439e-5, 8.061e-5,
2487 7.093e-5, 6.049e-5, 5.12e-5, 4.435e-5, 3.817e-5, 3.34e-5,
2488 2.927e-5, 2.573e-5, 2.291e-5, 2.04e-5, 1.827e-5, 1.636e-5,
2489 1.463e-5, 1.309e-5, 1.17e-5, 1.047e-5, 9.315e-6, 8.328e-6,
2490 7.458e-6, 6.665e-6, 5.94e-6, 5.316e-6, 4.752e-6, 4.252e-6,
2491 3.825e-6, 3.421e-6, 3.064e-6, 2.746e-6, 2.465e-6, 2.216e-6,
2492 1.99e-6, 1.79e-6, 1.609e-6, 1.449e-6, 1.306e-6, 1.177e-6,
2493 1.063e-6, 9.607e-7, 8.672e-7, 7.855e-7, 7.118e-7, 6.46e-7,
2494 5.871e-7, 5.34e-7, 4.868e-7, 4.447e-7, 4.068e-7, 3.729e-7,
2495 3.423e-7, 3.151e-7, 2.905e-7, 2.686e-7, 2.484e-7, 2.306e-7,
2496 2.142e-7, 1.995e-7, 1.86e-7, 1.738e-7, 1.626e-7, 1.522e-7,
2497 1.427e-7, 1.338e-7, 1.258e-7, 1.183e-7, 1.116e-7, 1.056e-7,
2498 9.972e-8, 9.46e-8, 9.007e-8, 8.592e-8, 8.195e-8, 7.816e-8,
2499 7.483e-8, 7.193e-8, 6.892e-8, 6.642e-8, 6.386e-8, 6.154e-8,
2500 5.949e-8, 5.764e-8, 5.622e-8, 5.479e-8, 5.364e-8, 5.301e-8,
2501 5.267e-8, 5.263e-8, 5.313e-8, 5.41e-8, 5.55e-8, 5.745e-8,
2502 6.003e-8, 6.311e-8, 6.713e-8, 7.173e-8, 7.724e-8, 8.368e-8,
2503 9.121e-8, 9.986e-8, 1.097e-7, 1.209e-7, 1.338e-7, 1.486e-7,
2504 1.651e-7, 1.837e-7, 2.048e-7, 2.289e-7, 2.557e-7, 2.857e-7,
2505 3.195e-7, 3.587e-7, 4.015e-7, 4.497e-7, 5.049e-7, 5.665e-7,
2506 6.366e-7, 7.121e-7, 7.996e-7, 8.946e-7, 1.002e-6, 1.117e-6,
2507 1.262e-6, 1.416e-6, 1.611e-6, 1.807e-6, 2.056e-6, 2.351e-6,
2508 2.769e-6, 3.138e-6, 3.699e-6, 4.386e-6, 5.041e-6, 6.074e-6,
2509 6.812e-6, 7.79e-6, 8.855e-6, 1.014e-5, 1.095e-5, 1.245e-5,
2510 1.316e-5, 1.39e-5, 1.504e-5, 1.583e-5, 1.617e-5, 1.652e-5,
2511 1.713e-5, 1.724e-5, 1.715e-5, 1.668e-5, 1.629e-5, 1.552e-5,
2512 1.478e-5, 1.34e-5, 1.245e-5, 1.121e-5, 9.575e-6, 8.956e-6,
2513 7.345e-6, 6.597e-6, 5.612e-6, 4.818e-6, 4.165e-6, 3.579e-6,
2514 3.041e-6, 2.623e-6, 2.29e-6, 1.984e-6, 1.748e-6, 1.534e-6,
2515 1.369e-6, 1.219e-6, 1.092e-6, 9.8e-7, 8.762e-7, 7.896e-7,
2516 7.104e-7, 6.364e-7, 5.691e-7, 5.107e-7, 4.575e-7, 4.09e-7,
2517 3.667e-7, 3.287e-7, 2.931e-7, 2.633e-7, 2.356e-7, 2.111e-7,
2518 1.895e-7, 1.697e-7, 1.525e-7, 1.369e-7, 1.233e-7, 1.114e-7,
2519 9.988e-8, 9.004e-8, 8.149e-8, 7.352e-8, 6.662e-8, 6.03e-8,
2520 5.479e-8, 4.974e-8, 4.532e-8, 4.129e-8, 3.781e-8, 3.462e-8,
2521 3.176e-8, 2.919e-8, 2.687e-8, 2.481e-8, 2.292e-8, 2.119e-8,
2522 1.967e-8, 1.828e-8, 1.706e-8, 1.589e-8, 1.487e-8, 1.393e-8,
2523 1.307e-8, 1.228e-8, 1.156e-8, 1.089e-8, 1.028e-8, 9.696e-9,
2524 9.159e-9, 8.658e-9, 8.187e-9, 7.746e-9, 7.34e-9, 6.953e-9,
2525 6.594e-9, 6.259e-9, 5.948e-9, 5.66e-9, 5.386e-9, 5.135e-9,
2526 4.903e-9, 4.703e-9, 4.515e-9, 4.362e-9, 4.233e-9, 4.117e-9,
2527 4.017e-9, 3.962e-9, 3.924e-9, 3.905e-9, 3.922e-9, 3.967e-9,
2528 4.046e-9, 4.165e-9, 4.32e-9, 4.522e-9, 4.769e-9, 5.083e-9,
2529 5.443e-9, 5.872e-9, 6.366e-9, 6.949e-9, 7.601e-9, 8.371e-9,
2530 9.22e-9, 1.02e-8, 1.129e-8, 1.251e-8, 1.393e-8, 1.542e-8,
2531 1.72e-8, 1.926e-8, 2.152e-8, 2.392e-8, 2.678e-8, 3.028e-8,
2532 3.39e-8, 3.836e-8, 4.309e-8, 4.9e-8, 5.481e-8, 6.252e-8,
2533 7.039e-8, 7.883e-8, 8.849e-8, 1.012e-7, 1.142e-7, 1.3e-7,
2534 1.475e-7, 1.732e-7, 1.978e-7, 2.304e-7, 2.631e-7, 2.988e-7,
2535 3.392e-7, 3.69e-7, 4.355e-7, 4.672e-7, 5.11e-7, 5.461e-7,
2536 5.828e-7, 6.233e-7, 6.509e-7, 6.672e-7, 6.969e-7, 7.104e-7,
2537 7.439e-7, 7.463e-7, 7.708e-7, 7.466e-7, 7.668e-7, 7.549e-7,
2538 7.586e-7, 7.384e-7, 7.439e-7, 7.785e-7, 7.915e-7, 8.31e-7,
2539 8.745e-7, 9.558e-7, 1.038e-6, 1.173e-6, 1.304e-6, 1.452e-6,
2540 1.671e-6, 1.931e-6, 2.239e-6, 2.578e-6, 3.032e-6, 3.334e-6,
2541 3.98e-6, 4.3e-6, 4.518e-6, 5.321e-6, 5.508e-6, 6.211e-6, 6.59e-6,
2542 7.046e-6, 7.555e-6, 7.558e-6, 7.875e-6, 8.319e-6, 8.433e-6,
2543 8.59e-6, 8.503e-6, 8.304e-6, 8.336e-6, 7.739e-6, 7.301e-6,
2544 6.827e-6, 6.078e-6, 5.551e-6, 4.762e-6, 4.224e-6, 3.538e-6,
2545 2.984e-6, 2.619e-6, 2.227e-6, 1.923e-6, 1.669e-6, 1.462e-6,
2546 1.294e-6, 1.155e-6, 1.033e-6, 9.231e-7, 8.238e-7, 7.36e-7,
2547 6.564e-7, 5.869e-7, 5.236e-7, 4.673e-7, 4.174e-7, 3.736e-7,
2548 3.33e-7, 2.976e-7, 2.657e-7, 2.367e-7, 2.106e-7, 1.877e-7,
2549 1.671e-7, 1.494e-7, 1.332e-7, 1.192e-7, 1.065e-7, 9.558e-8,
2550 8.586e-8, 7.717e-8, 6.958e-8, 6.278e-8, 5.666e-8, 5.121e-8,
2551 4.647e-8, 4.213e-8, 3.815e-8, 3.459e-8, 3.146e-8, 2.862e-8,
2552 2.604e-8, 2.375e-8, 2.162e-8, 1.981e-8, 1.817e-8, 1.67e-8,
2553 1.537e-8, 1.417e-8, 1.31e-8, 1.215e-8, 1.128e-8, 1.05e-8,
2554 9.793e-9, 9.158e-9, 8.586e-9, 8.068e-9, 7.595e-9, 7.166e-9,
2555 6.778e-9, 6.427e-9, 6.108e-9, 5.826e-9, 5.571e-9, 5.347e-9,
2556 5.144e-9, 4.968e-9, 4.822e-9, 4.692e-9, 4.589e-9, 4.506e-9,
2557 4.467e-9, 4.44e-9, 4.466e-9, 4.515e-9, 4.718e-9, 4.729e-9,
2558 4.937e-9, 5.249e-9, 5.466e-9, 5.713e-9, 6.03e-9, 6.436e-9,
2559 6.741e-9, 7.33e-9, 7.787e-9, 8.414e-9, 8.908e-9, 9.868e-9,
2560 1.069e-8, 1.158e-8, 1.253e-8, 1.3e-8, 1.409e-8, 1.47e-8,
2561 1.548e-8, 1.612e-8, 1.666e-8, 1.736e-8, 1.763e-8, 1.812e-8,
2562 1.852e-8, 1.923e-8, 1.897e-8, 1.893e-8, 1.888e-8, 1.868e-8,
2563 1.895e-8, 1.899e-8, 1.876e-8, 1.96e-8, 2.02e-8, 2.121e-8,
2564 2.239e-8, 2.379e-8, 2.526e-8, 2.766e-8, 2.994e-8, 3.332e-8,
2565 3.703e-8, 4.158e-8, 4.774e-8, 5.499e-8, 6.355e-8, 7.349e-8,
2566 8.414e-8, 9.846e-8, 1.143e-7, 1.307e-7, 1.562e-7, 1.817e-7,
2567 2.011e-7, 2.192e-7, 2.485e-7, 2.867e-7, 3.035e-7, 3.223e-7,
2568 3.443e-7, 3.617e-7, 3.793e-7, 3.793e-7, 3.839e-7, 4.081e-7,
2569 4.117e-7, 4.085e-7, 3.92e-7, 3.851e-7, 3.754e-7, 3.49e-7,
2570 3.229e-7, 2.978e-7, 2.691e-7, 2.312e-7, 2.029e-7, 1.721e-7,
2571 1.472e-7, 1.308e-7, 1.132e-7, 9.736e-8, 8.458e-8, 7.402e-8,
2572 6.534e-8, 5.811e-8, 5.235e-8, 4.762e-8, 4.293e-8, 3.896e-8,
2573 3.526e-8, 3.165e-8, 2.833e-8, 2.551e-8, 2.288e-8, 2.036e-8,
2574 1.82e-8, 1.626e-8, 1.438e-8, 1.299e-8, 1.149e-8, 1.03e-8,
2575 9.148e-9, 8.122e-9, 7.264e-9, 6.425e-9, 5.777e-9, 5.06e-9,
2576 4.502e-9, 4.013e-9, 3.567e-9, 3.145e-9, 2.864e-9, 2.553e-9,
2577 2.311e-9, 2.087e-9, 1.886e-9, 1.716e-9, 1.556e-9, 1.432e-9,
2578 1.311e-9, 1.202e-9, 1.104e-9, 1.013e-9, 9.293e-10, 8.493e-10,
2579 7.79e-10, 7.185e-10, 6.642e-10, 6.141e-10, 5.684e-10, 5.346e-10,
2580 5.032e-10, 4.725e-10, 4.439e-10, 4.176e-10, 3.93e-10, 3.714e-10,
2581 3.515e-10, 3.332e-10, 3.167e-10, 3.02e-10, 2.887e-10, 2.769e-10,
2582 2.665e-10, 2.578e-10, 2.503e-10, 2.436e-10, 2.377e-10, 2.342e-10,
2583 2.305e-10, 2.296e-10, 2.278e-10, 2.321e-10, 2.355e-10, 2.402e-10,
2584 2.478e-10, 2.67e-10, 2.848e-10, 2.982e-10, 3.263e-10, 3.438e-10,
2585 3.649e-10, 3.829e-10, 4.115e-10, 4.264e-10, 4.473e-10, 4.63e-10,
2586 4.808e-10, 4.995e-10, 5.142e-10, 5.313e-10, 5.318e-10, 5.358e-10,
2587 5.452e-10, 5.507e-10, 5.698e-10, 5.782e-10, 5.983e-10, 6.164e-10,
2588 6.532e-10, 6.811e-10, 7.624e-10, 8.302e-10, 9.067e-10, 9.937e-10,
2589 1.104e-9, 1.221e-9, 1.361e-9, 1.516e-9, 1.675e-9, 1.883e-9,
2590 2.101e-9, 2.349e-9, 2.614e-9, 2.92e-9, 3.305e-9, 3.724e-9,
2591 4.142e-9, 4.887e-9, 5.614e-9, 6.506e-9, 7.463e-9, 8.817e-9,
2592 9.849e-9, 1.187e-8, 1.321e-8, 1.474e-8, 1.698e-8, 1.794e-8,
2593 2.09e-8, 2.211e-8, 2.362e-8, 2.556e-8, 2.729e-8, 2.88e-8,
2594 3.046e-8, 3.167e-8, 3.367e-8, 3.457e-8, 3.59e-8, 3.711e-8,
2595 3.826e-8, 4.001e-8, 4.211e-8, 4.315e-8, 4.661e-8, 5.01e-8,
2596 5.249e-8, 5.84e-8, 6.628e-8, 7.512e-8, 8.253e-8, 9.722e-8,
2597 1.067e-7, 1.153e-7, 1.347e-7, 1.428e-7, 1.577e-7, 1.694e-7,
2598 1.833e-7, 1.938e-7, 2.108e-7, 2.059e-7, 2.157e-7, 2.185e-7,
2599 2.208e-7, 2.182e-7, 2.093e-7, 2.014e-7, 1.962e-7, 1.819e-7,
2600 1.713e-7, 1.51e-7, 1.34e-7, 1.154e-7, 9.89e-8, 8.88e-8, 7.673e-8,
2601 6.599e-8, 5.73e-8, 5.081e-8, 4.567e-8, 4.147e-8, 3.773e-8,
2602 3.46e-8, 3.194e-8, 2.953e-8, 2.759e-8, 2.594e-8, 2.442e-8,
2603 2.355e-8, 2.283e-8, 2.279e-8, 2.231e-8, 2.279e-8, 2.239e-8,
2604 2.21e-8, 2.309e-8, 2.293e-8, 2.352e-8, 2.415e-8, 2.43e-8,
2605 2.426e-8, 2.465e-8, 2.5e-8, 2.496e-8, 2.465e-8, 2.445e-8,
2606 2.383e-8, 2.299e-8, 2.165e-8, 2.113e-8, 1.968e-8, 1.819e-8,
2607 1.644e-8, 1.427e-8, 1.27e-8, 1.082e-8, 9.428e-9, 8.091e-9,
2608 6.958e-9, 5.988e-9, 5.246e-9, 4.601e-9, 4.098e-9, 3.664e-9,
2609 3.287e-9, 2.942e-9, 2.656e-9, 2.364e-9, 2.118e-9, 1.903e-9,
2610 1.703e-9, 1.525e-9, 1.365e-9, 1.229e-9, 1.107e-9, 9.96e-10,
2611 8.945e-10, 8.08e-10, 7.308e-10, 6.616e-10, 5.994e-10, 5.422e-10,
2612 4.929e-10, 4.478e-10, 4.07e-10, 3.707e-10, 3.379e-10, 3.087e-10,
2613 2.823e-10, 2.592e-10, 2.385e-10, 2.201e-10, 2.038e-10, 1.897e-10,
2614 1.774e-10, 1.667e-10, 1.577e-10, 1.502e-10, 1.437e-10, 1.394e-10,
2615 1.358e-10, 1.324e-10, 1.329e-10, 1.324e-10, 1.36e-10, 1.39e-10,
2616 1.424e-10, 1.544e-10, 1.651e-10, 1.817e-10, 1.984e-10, 2.195e-10,
2617 2.438e-10, 2.7e-10, 2.991e-10, 3.322e-10, 3.632e-10, 3.957e-10,
2618 4.36e-10, 4.701e-10, 5.03e-10, 5.381e-10, 5.793e-10, 6.19e-10,
2619 6.596e-10, 7.004e-10, 7.561e-10, 7.934e-10, 8.552e-10, 9.142e-10,
2620 9.57e-10, 1.027e-9, 1.097e-9, 1.193e-9, 1.334e-9, 1.47e-9,
2621 1.636e-9, 1.871e-9, 2.122e-9, 2.519e-9, 2.806e-9, 3.203e-9,
2622 3.846e-9, 4.362e-9, 5.114e-9, 5.643e-9, 6.305e-9, 6.981e-9,
2623 7.983e-9, 8.783e-9, 9.419e-9, 1.017e-8, 1.063e-8, 1.121e-8,
2624 1.13e-8, 1.201e-8, 1.225e-8, 1.232e-8, 1.223e-8, 1.177e-8,
2625 1.151e-8, 1.116e-8, 1.047e-8, 9.698e-9, 8.734e-9, 8.202e-9,
2626 7.041e-9, 6.074e-9, 5.172e-9, 4.468e-9, 3.913e-9, 3.414e-9,
2627 2.975e-9, 2.65e-9, 2.406e-9, 2.173e-9, 2.009e-9, 1.861e-9,
2628 1.727e-9, 1.612e-9, 1.514e-9, 1.43e-9, 1.362e-9, 1.333e-9,
2629 1.288e-9, 1.249e-9, 1.238e-9, 1.228e-9, 1.217e-9, 1.202e-9,
2630 1.209e-9, 1.177e-9, 1.157e-9, 1.165e-9, 1.142e-9, 1.131e-9,
2631 1.138e-9, 1.117e-9, 1.1e-9, 1.069e-9, 1.023e-9, 1.005e-9,
2632 9.159e-10, 8.863e-10, 7.865e-10, 7.153e-10, 6.247e-10, 5.846e-10,
2633 5.133e-10, 4.36e-10, 3.789e-10, 3.335e-10, 2.833e-10, 2.483e-10,
2634 2.155e-10, 1.918e-10, 1.709e-10, 1.529e-10, 1.374e-10, 1.235e-10,
2635 1.108e-10, 9.933e-11, 8.932e-11, 8.022e-11, 7.224e-11, 6.52e-11,
2636 5.896e-11, 5.328e-11, 4.813e-11, 4.365e-11, 3.961e-11, 3.594e-11,
2637 3.266e-11, 2.967e-11, 2.701e-11, 2.464e-11, 2.248e-11, 2.054e-11,
2638 1.878e-11, 1.721e-11, 1.579e-11, 1.453e-11, 1.341e-11, 1.241e-11,
2639 1.154e-11, 1.078e-11, 1.014e-11, 9.601e-12, 9.167e-12, 8.838e-12,
2640 8.614e-12, 8.493e-12, 8.481e-12, 8.581e-12, 8.795e-12, 9.131e-12,
2641 9.601e-12, 1.021e-11, 1.097e-11, 1.191e-11, 1.303e-11, 1.439e-11,
2642 1.601e-11, 1.778e-11, 1.984e-11, 2.234e-11, 2.474e-11, 2.766e-11,
2643 3.085e-11, 3.415e-11, 3.821e-11, 4.261e-11, 4.748e-11, 5.323e-11,
2644 5.935e-11, 6.619e-11, 7.418e-11, 8.294e-11, 9.26e-11, 1.039e-10,
2645 1.156e-10, 1.297e-10, 1.46e-10, 1.641e-10, 1.858e-10, 2.1e-10,
2646 2.383e-10, 2.724e-10, 3.116e-10, 3.538e-10, 4.173e-10, 4.727e-10,
2647 5.503e-10, 6.337e-10, 7.32e-10, 8.298e-10, 9.328e-10, 1.059e-9,
2648 1.176e-9, 1.328e-9, 1.445e-9, 1.593e-9, 1.77e-9, 1.954e-9,
2649 2.175e-9, 2.405e-9, 2.622e-9, 2.906e-9, 3.294e-9, 3.713e-9,
2650 3.98e-9, 4.384e-9, 4.987e-9, 5.311e-9, 5.874e-9, 6.337e-9,
2651 7.027e-9, 7.39e-9, 7.769e-9, 8.374e-9, 8.605e-9, 9.165e-9,
2652 9.415e-9, 9.511e-9, 9.704e-9, 9.588e-9, 9.45e-9, 9.086e-9,
2653 8.798e-9, 8.469e-9, 7.697e-9, 7.168e-9, 6.255e-9, 5.772e-9,
2654 4.97e-9, 4.271e-9, 3.653e-9, 3.154e-9, 2.742e-9, 2.435e-9,
2655 2.166e-9, 1.936e-9, 1.731e-9, 1.556e-9, 1.399e-9, 1.272e-9,
2656 1.157e-9, 1.066e-9, 9.844e-10, 9.258e-10, 8.787e-10, 8.421e-10,
2657 8.083e-10, 8.046e-10, 8.067e-10, 8.181e-10, 8.325e-10, 8.517e-10,
2658 9.151e-10, 9.351e-10, 9.677e-10, 1.071e-9, 1.126e-9, 1.219e-9,
2659 1.297e-9, 1.408e-9, 1.476e-9, 1.517e-9, 1.6e-9, 1.649e-9,
2660 1.678e-9, 1.746e-9, 1.742e-9, 1.728e-9, 1.699e-9, 1.655e-9,
2661 1.561e-9, 1.48e-9, 1.451e-9, 1.411e-9, 1.171e-9, 1.106e-9,
2662 9.714e-10, 8.523e-10, 7.346e-10, 6.241e-10, 5.371e-10, 4.704e-10,
2663 4.144e-10, 3.683e-10, 3.292e-10, 2.942e-10, 2.62e-10, 2.341e-10,
2664 2.104e-10, 1.884e-10, 1.7e-10, 1.546e-10, 1.394e-10, 1.265e-10,
2665 1.14e-10, 1.019e-10, 9.279e-11, 8.283e-11, 7.458e-11, 6.668e-11,
2666 5.976e-11, 5.33e-11, 4.794e-11, 4.289e-11, 3.841e-11, 3.467e-11,
2667 3.13e-11, 2.832e-11, 2.582e-11, 2.356e-11, 2.152e-11, 1.97e-11,
2668 1.808e-11, 1.664e-11, 1.539e-11, 1.434e-11, 1.344e-11, 1.269e-11,
2669 1.209e-11, 1.162e-11, 1.129e-11, 1.108e-11, 1.099e-11, 1.103e-11,
2670 1.119e-11, 1.148e-11, 1.193e-11, 1.252e-11, 1.329e-11, 1.421e-11,
2671 1.555e-11, 1.685e-11, 1.839e-11, 2.054e-11, 2.317e-11, 2.571e-11,
2672 2.839e-11, 3.171e-11, 3.49e-11, 3.886e-11, 4.287e-11, 4.645e-11,
2673 5.047e-11, 5.592e-11, 6.109e-11, 6.628e-11, 7.381e-11, 8.088e-11,
2674 8.966e-11, 1.045e-10, 1.12e-10, 1.287e-10, 1.486e-10, 1.662e-10,
2675 1.866e-10, 2.133e-10, 2.524e-10, 2.776e-10, 3.204e-10, 3.559e-10,
2676 4.028e-10, 4.448e-10, 4.882e-10, 5.244e-10, 5.605e-10, 6.018e-10,
2677 6.328e-10, 6.579e-10, 6.541e-10, 7.024e-10, 7.074e-10, 7.068e-10,
2678 7.009e-10, 6.698e-10, 6.545e-10, 6.209e-10, 5.834e-10, 5.412e-10,
2679 5.001e-10, 4.231e-10, 3.727e-10, 3.211e-10, 2.833e-10, 2.447e-10,
2680 2.097e-10, 1.843e-10, 1.639e-10, 1.449e-10, 1.27e-10, 1.161e-10,
2681 1.033e-10, 9.282e-11, 8.407e-11, 7.639e-11, 7.023e-11, 6.474e-11,
2682 6.142e-11, 5.76e-11, 5.568e-11, 5.472e-11, 5.39e-11, 5.455e-11,
2683 5.54e-11, 5.587e-11, 6.23e-11, 6.49e-11, 6.868e-11, 7.382e-11,
2684 8.022e-11, 8.372e-11, 9.243e-11, 1.004e-10, 1.062e-10, 1.13e-10,
2685 1.176e-10, 1.244e-10, 1.279e-10, 1.298e-10, 1.302e-10, 1.312e-10,
2686 1.295e-10, 1.244e-10, 1.211e-10, 1.167e-10, 1.098e-10, 9.927e-11,
2687 8.854e-11, 8.011e-11, 7.182e-11, 5.923e-11, 5.212e-11, 4.453e-11,
2688 3.832e-11, 3.371e-11, 2.987e-11, 2.651e-11, 2.354e-11, 2.093e-11,
2689 1.863e-11, 1.662e-11, 1.486e-11, 1.331e-11, 1.193e-11, 1.071e-11,
2690 9.628e-12, 8.66e-12, 7.801e-12, 7.031e-12, 6.347e-12, 5.733e-12,
2691 5.182e-12, 4.695e-12, 4.26e-12, 3.874e-12, 3.533e-12, 3.235e-12,
2692 2.979e-12, 2.76e-12, 2.579e-12, 2.432e-12, 2.321e-12, 2.246e-12,
2693 2.205e-12, 2.196e-12, 2.223e-12, 2.288e-12, 2.387e-12, 2.525e-12,
2694 2.704e-12, 2.925e-12, 3.191e-12, 3.508e-12, 3.876e-12, 4.303e-12,
2695 4.793e-12, 5.347e-12, 5.978e-12, 6.682e-12, 7.467e-12, 8.34e-12,
2696 9.293e-12, 1.035e-11, 1.152e-11, 1.285e-11, 1.428e-11, 1.586e-11,
2697 1.764e-11, 1.972e-11, 2.214e-11, 2.478e-11, 2.776e-11, 3.151e-11,
2698 3.591e-11, 4.103e-11, 4.66e-11, 5.395e-11, 6.306e-11, 7.172e-11,
2699 8.358e-11, 9.67e-11, 1.11e-10, 1.325e-10, 1.494e-10, 1.736e-10,
2700 2.007e-10, 2.296e-10, 2.608e-10, 3.004e-10, 3.361e-10, 3.727e-10,
2701 4.373e-10, 4.838e-10, 5.483e-10, 6.006e-10, 6.535e-10, 6.899e-10,
2702 7.687e-10, 8.444e-10, 8.798e-10, 9.135e-10, 9.532e-10, 9.757e-10,
2703 9.968e-10, 1.006e-9, 9.949e-10, 9.789e-10, 9.564e-10, 9.215e-10,
2704 8.51e-10, 8.394e-10, 7.707e-10, 7.152e-10, 6.274e-10, 5.598e-10,
2705 5.028e-10, 4.3e-10, 3.71e-10, 3.245e-10, 2.809e-10, 2.461e-10,
2706 2.154e-10, 1.91e-10, 1.685e-10, 1.487e-10, 1.313e-10, 1.163e-10,
2707 1.031e-10, 9.172e-11, 8.221e-11, 7.382e-11, 6.693e-11, 6.079e-11,
2708 5.581e-11, 5.167e-11, 4.811e-11, 4.506e-11, 4.255e-11, 4.083e-11,
2709 3.949e-11, 3.881e-11, 3.861e-11, 3.858e-11, 3.951e-11, 4.045e-11,
2710 4.24e-11, 4.487e-11, 4.806e-11, 5.133e-11, 5.518e-11, 5.919e-11,
2711 6.533e-11, 7.031e-11, 7.762e-11, 8.305e-11, 9.252e-11, 9.727e-11,
2712 1.045e-10, 1.117e-10, 1.2e-10, 1.275e-10, 1.341e-10, 1.362e-10,
2713 1.438e-10, 1.45e-10, 1.455e-10, 1.455e-10, 1.434e-10, 1.381e-10,
2714 1.301e-10, 1.276e-10, 1.163e-10, 1.089e-10, 9.911e-11, 8.943e-11,
2715 7.618e-11, 6.424e-11, 5.717e-11, 4.866e-11, 4.257e-11, 3.773e-11,
2716 3.331e-11, 2.958e-11, 2.629e-11, 2.316e-11, 2.073e-11, 1.841e-11,
2717 1.635e-11, 1.464e-11, 1.31e-11, 1.16e-11, 1.047e-11, 9.408e-12,
2718 8.414e-12, 7.521e-12, 6.705e-12, 5.993e-12, 5.371e-12, 4.815e-12,
2719 4.338e-12, 3.921e-12, 3.567e-12, 3.265e-12, 3.01e-12, 2.795e-12,
2720 2.613e-12, 2.464e-12, 2.346e-12, 2.256e-12, 2.195e-12, 2.165e-12,
2721 2.166e-12, 2.198e-12, 2.262e-12, 2.364e-12, 2.502e-12, 2.682e-12,
2722 2.908e-12, 3.187e-12, 3.533e-12, 3.946e-12, 4.418e-12, 5.013e-12,
2723 5.708e-12, 6.379e-12, 7.43e-12, 8.39e-12, 9.51e-12, 1.078e-11,
2724 1.259e-11, 1.438e-11, 1.63e-11, 1.814e-11, 2.055e-11, 2.348e-11,
2725 2.664e-11, 2.956e-11, 3.3e-11, 3.677e-11, 4.032e-11, 4.494e-11,
2726 4.951e-11, 5.452e-11, 6.014e-11, 6.5e-11, 6.915e-11, 7.45e-11,
2727 7.971e-11, 8.468e-11, 8.726e-11, 8.995e-11, 9.182e-11, 9.509e-11,
2728 9.333e-11, 9.386e-11, 9.457e-11, 9.21e-11, 9.019e-11, 8.68e-11,
2729 8.298e-11, 7.947e-11, 7.46e-11, 7.082e-11, 6.132e-11, 5.855e-11,
2730 5.073e-11, 4.464e-11, 3.825e-11, 3.375e-11, 2.911e-11, 2.535e-11,
2731 2.16e-11, 1.907e-11, 1.665e-11, 1.463e-11, 1.291e-11, 1.133e-11,
2732 9.997e-12, 8.836e-12, 7.839e-12, 6.943e-12, 6.254e-12, 5.6e-12,
2733 5.029e-12, 4.529e-12, 4.102e-12, 3.737e-12, 3.428e-12, 3.169e-12,
2734 2.959e-12, 2.798e-12, 2.675e-12, 2.582e-12, 2.644e-12, 2.557e-12,
2735 2.614e-12, 2.717e-12, 2.874e-12, 3.056e-12, 3.187e-12, 3.631e-12,
2736 3.979e-12, 4.248e-12, 4.817e-12, 5.266e-12, 5.836e-12, 6.365e-12,
2737 6.807e-12, 7.47e-12, 7.951e-12, 8.636e-12, 8.972e-12, 9.314e-12,
2738 9.445e-12, 1.003e-11, 1.013e-11, 9.937e-12, 9.729e-12, 9.064e-12,
2739 9.119e-12, 9.124e-12, 8.704e-12, 8.078e-12, 7.47e-12, 6.329e-12,
2740 5.674e-12, 4.808e-12, 4.119e-12, 3.554e-12, 3.103e-12, 2.731e-12,
2741 2.415e-12, 2.15e-12, 1.926e-12, 1.737e-12, 1.578e-12, 1.447e-12,
2742 1.34e-12, 1.255e-12, 1.191e-12, 1.146e-12, 1.121e-12, 1.114e-12,
2743 1.126e-12, 1.156e-12, 1.207e-12, 1.278e-12, 1.372e-12, 1.49e-12,
2744 1.633e-12, 1.805e-12, 2.01e-12, 2.249e-12, 2.528e-12, 2.852e-12,
2745 3.228e-12, 3.658e-12, 4.153e-12, 4.728e-12, 5.394e-12, 6.176e-12,
2746 7.126e-12, 8.188e-12, 9.328e-12, 1.103e-11, 1.276e-11, 1.417e-11,
2747 1.615e-11, 1.84e-11, 2.155e-11, 2.429e-11, 2.826e-11, 3.222e-11,
2748 3.664e-11, 4.14e-11, 4.906e-11, 5.536e-11, 6.327e-11, 7.088e-11,
2749 8.316e-11, 9.242e-11, 1.07e-10, 1.223e-10, 1.341e-10, 1.553e-10,
2750 1.703e-10, 1.9e-10, 2.022e-10, 2.233e-10, 2.345e-10, 2.438e-10,
2751 2.546e-10, 2.599e-10, 2.661e-10, 2.703e-10, 2.686e-10, 2.662e-10,
2752 2.56e-10, 2.552e-10, 2.378e-10, 2.252e-10, 2.146e-10, 1.885e-10,
2753 1.668e-10, 1.441e-10, 1.295e-10, 1.119e-10, 9.893e-11, 8.687e-11,
2754 7.678e-11, 6.685e-11, 5.879e-11, 5.127e-11, 4.505e-11, 3.997e-11,
2758 static const double h2ofrn[2001] = { .01095, .01126, .01205, .01322, .0143,
2759 .01506, .01548, .01534, .01486, .01373, .01262, .01134, .01001,
2760 .008702, .007475, .006481, .00548, .0046, .003833, .00311,
2761 .002543, .002049, .00168, .001374, .001046, 8.193e-4, 6.267e-4,
2762 4.968e-4, 3.924e-4, 2.983e-4, 2.477e-4, 1.997e-4, 1.596e-4,
2763 1.331e-4, 1.061e-4, 8.942e-5, 7.168e-5, 5.887e-5, 4.848e-5,
2764 3.817e-5, 3.17e-5, 2.579e-5, 2.162e-5, 1.768e-5, 1.49e-5,
2765 1.231e-5, 1.013e-5, 8.555e-6, 7.328e-6, 6.148e-6, 5.207e-6,
2766 4.387e-6, 3.741e-6, 3.22e-6, 2.753e-6, 2.346e-6, 1.985e-6,
2767 1.716e-6, 1.475e-6, 1.286e-6, 1.122e-6, 9.661e-7, 8.284e-7,
2768 7.057e-7, 6.119e-7, 5.29e-7, 4.571e-7, 3.948e-7, 3.432e-7,
2769 2.983e-7, 2.589e-7, 2.265e-7, 1.976e-7, 1.704e-7, 1.456e-7,
2770 1.26e-7, 1.101e-7, 9.648e-8, 8.415e-8, 7.34e-8, 6.441e-8,
2771 5.643e-8, 4.94e-8, 4.276e-8, 3.703e-8, 3.227e-8, 2.825e-8,
2772 2.478e-8, 2.174e-8, 1.898e-8, 1.664e-8, 1.458e-8, 1.278e-8,
2773 1.126e-8, 9.891e-9, 8.709e-9, 7.652e-9, 6.759e-9, 5.975e-9,
2774 5.31e-9, 4.728e-9, 4.214e-9, 3.792e-9, 3.463e-9, 3.226e-9,
2775 2.992e-9, 2.813e-9, 2.749e-9, 2.809e-9, 2.913e-9, 3.037e-9,
2776 3.413e-9, 3.738e-9, 4.189e-9, 4.808e-9, 5.978e-9, 7.088e-9,
2777 8.071e-9, 9.61e-9, 1.21e-8, 1.5e-8, 1.764e-8, 2.221e-8, 2.898e-8,
2778 3.948e-8, 5.068e-8, 6.227e-8, 7.898e-8, 1.033e-7, 1.437e-7,
2779 1.889e-7, 2.589e-7, 3.59e-7, 4.971e-7, 7.156e-7, 9.983e-7,
2780 1.381e-6, 1.929e-6, 2.591e-6, 3.453e-6, 4.57e-6, 5.93e-6,
2781 7.552e-6, 9.556e-6, 1.183e-5, 1.425e-5, 1.681e-5, 1.978e-5,
2782 2.335e-5, 2.668e-5, 3.022e-5, 3.371e-5, 3.715e-5, 3.967e-5,
2783 4.06e-5, 4.01e-5, 3.809e-5, 3.491e-5, 3.155e-5, 2.848e-5,
2784 2.678e-5, 2.66e-5, 2.811e-5, 3.071e-5, 3.294e-5, 3.459e-5,
2785 3.569e-5, 3.56e-5, 3.434e-5, 3.186e-5, 2.916e-5, 2.622e-5,
2786 2.275e-5, 1.918e-5, 1.62e-5, 1.373e-5, 1.182e-5, 1.006e-5,
2787 8.556e-6, 7.26e-6, 6.107e-6, 5.034e-6, 4.211e-6, 3.426e-6,
2788 2.865e-6, 2.446e-6, 1.998e-6, 1.628e-6, 1.242e-6, 1.005e-6,
2789 7.853e-7, 6.21e-7, 5.071e-7, 4.156e-7, 3.548e-7, 2.825e-7,
2790 2.261e-7, 1.916e-7, 1.51e-7, 1.279e-7, 1.059e-7, 9.14e-8,
2791 7.707e-8, 6.17e-8, 5.311e-8, 4.263e-8, 3.518e-8, 2.961e-8,
2792 2.457e-8, 2.119e-8, 1.712e-8, 1.439e-8, 1.201e-8, 1.003e-8,
2793 8.564e-9, 7.199e-9, 6.184e-9, 5.206e-9, 4.376e-9, 3.708e-9,
2794 3.157e-9, 2.725e-9, 2.361e-9, 2.074e-9, 1.797e-9, 1.562e-9,
2795 1.364e-9, 1.196e-9, 1.042e-9, 8.862e-10, 7.648e-10, 6.544e-10,
2796 5.609e-10, 4.791e-10, 4.108e-10, 3.531e-10, 3.038e-10, 2.618e-10,
2797 2.268e-10, 1.969e-10, 1.715e-10, 1.496e-10, 1.308e-10, 1.147e-10,
2798 1.008e-10, 8.894e-11, 7.885e-11, 7.031e-11, 6.355e-11, 5.854e-11,
2799 5.534e-11, 5.466e-11, 5.725e-11, 6.447e-11, 7.943e-11, 1.038e-10,
2800 1.437e-10, 2.04e-10, 2.901e-10, 4.051e-10, 5.556e-10, 7.314e-10,
2801 9.291e-10, 1.134e-9, 1.321e-9, 1.482e-9, 1.596e-9, 1.669e-9,
2802 1.715e-9, 1.762e-9, 1.817e-9, 1.828e-9, 1.848e-9, 1.873e-9,
2803 1.902e-9, 1.894e-9, 1.864e-9, 1.841e-9, 1.797e-9, 1.704e-9,
2804 1.559e-9, 1.382e-9, 1.187e-9, 1.001e-9, 8.468e-10, 7.265e-10,
2805 6.521e-10, 6.381e-10, 6.66e-10, 7.637e-10, 9.705e-10, 1.368e-9,
2806 1.856e-9, 2.656e-9, 3.954e-9, 5.96e-9, 8.72e-9, 1.247e-8,
2807 1.781e-8, 2.491e-8, 3.311e-8, 4.272e-8, 5.205e-8, 6.268e-8,
2808 7.337e-8, 8.277e-8, 9.185e-8, 1.004e-7, 1.091e-7, 1.159e-7,
2809 1.188e-7, 1.175e-7, 1.124e-7, 1.033e-7, 9.381e-8, 8.501e-8,
2810 7.956e-8, 7.894e-8, 8.331e-8, 9.102e-8, 9.836e-8, 1.035e-7,
2811 1.064e-7, 1.06e-7, 1.032e-7, 9.808e-8, 9.139e-8, 8.442e-8,
2812 7.641e-8, 6.881e-8, 6.161e-8, 5.404e-8, 4.804e-8, 4.446e-8,
2813 4.328e-8, 4.259e-8, 4.421e-8, 4.673e-8, 4.985e-8, 5.335e-8,
2814 5.796e-8, 6.542e-8, 7.714e-8, 8.827e-8, 1.04e-7, 1.238e-7,
2815 1.499e-7, 1.829e-7, 2.222e-7, 2.689e-7, 3.303e-7, 3.981e-7,
2816 4.84e-7, 5.91e-7, 7.363e-7, 9.087e-7, 1.139e-6, 1.455e-6,
2817 1.866e-6, 2.44e-6, 3.115e-6, 3.941e-6, 4.891e-6, 5.992e-6,
2818 7.111e-6, 8.296e-6, 9.21e-6, 9.987e-6, 1.044e-5, 1.073e-5,
2819 1.092e-5, 1.106e-5, 1.138e-5, 1.171e-5, 1.186e-5, 1.186e-5,
2820 1.179e-5, 1.166e-5, 1.151e-5, 1.16e-5, 1.197e-5, 1.241e-5,
2821 1.268e-5, 1.26e-5, 1.184e-5, 1.063e-5, 9.204e-6, 7.584e-6,
2822 6.053e-6, 4.482e-6, 3.252e-6, 2.337e-6, 1.662e-6, 1.18e-6,
2823 8.15e-7, 5.95e-7, 4.354e-7, 3.302e-7, 2.494e-7, 1.93e-7,
2824 1.545e-7, 1.25e-7, 1.039e-7, 8.602e-8, 7.127e-8, 5.897e-8,
2825 4.838e-8, 4.018e-8, 3.28e-8, 2.72e-8, 2.307e-8, 1.972e-8,
2826 1.654e-8, 1.421e-8, 1.174e-8, 1.004e-8, 8.739e-9, 7.358e-9,
2827 6.242e-9, 5.303e-9, 4.567e-9, 3.94e-9, 3.375e-9, 2.864e-9,
2828 2.422e-9, 2.057e-9, 1.75e-9, 1.505e-9, 1.294e-9, 1.101e-9,
2829 9.401e-10, 8.018e-10, 6.903e-10, 5.965e-10, 5.087e-10, 4.364e-10,
2830 3.759e-10, 3.247e-10, 2.809e-10, 2.438e-10, 2.123e-10, 1.853e-10,
2831 1.622e-10, 1.426e-10, 1.26e-10, 1.125e-10, 1.022e-10, 9.582e-11,
2832 9.388e-11, 9.801e-11, 1.08e-10, 1.276e-10, 1.551e-10, 1.903e-10,
2833 2.291e-10, 2.724e-10, 3.117e-10, 3.4e-10, 3.562e-10, 3.625e-10,
2834 3.619e-10, 3.429e-10, 3.221e-10, 2.943e-10, 2.645e-10, 2.338e-10,
2835 2.062e-10, 1.901e-10, 1.814e-10, 1.827e-10, 1.906e-10, 1.984e-10,
2836 2.04e-10, 2.068e-10, 2.075e-10, 2.018e-10, 1.959e-10, 1.897e-10,
2837 1.852e-10, 1.791e-10, 1.696e-10, 1.634e-10, 1.598e-10, 1.561e-10,
2838 1.518e-10, 1.443e-10, 1.377e-10, 1.346e-10, 1.342e-10, 1.375e-10,
2839 1.525e-10, 1.767e-10, 2.108e-10, 2.524e-10, 2.981e-10, 3.477e-10,
2840 4.262e-10, 5.326e-10, 6.646e-10, 8.321e-10, 1.069e-9, 1.386e-9,
2841 1.743e-9, 2.216e-9, 2.808e-9, 3.585e-9, 4.552e-9, 5.907e-9,
2842 7.611e-9, 9.774e-9, 1.255e-8, 1.666e-8, 2.279e-8, 3.221e-8,
2843 4.531e-8, 6.4e-8, 9.187e-8, 1.295e-7, 1.825e-7, 2.431e-7,
2844 3.181e-7, 4.009e-7, 4.941e-7, 5.88e-7, 6.623e-7, 7.155e-7,
2845 7.451e-7, 7.594e-7, 7.541e-7, 7.467e-7, 7.527e-7, 7.935e-7,
2846 8.461e-7, 8.954e-7, 9.364e-7, 9.843e-7, 1.024e-6, 1.05e-6,
2847 1.059e-6, 1.074e-6, 1.072e-6, 1.043e-6, 9.789e-7, 8.803e-7,
2848 7.662e-7, 6.378e-7, 5.133e-7, 3.958e-7, 2.914e-7, 2.144e-7,
2849 1.57e-7, 1.14e-7, 8.47e-8, 6.2e-8, 4.657e-8, 3.559e-8, 2.813e-8,
2850 2.222e-8, 1.769e-8, 1.391e-8, 1.125e-8, 9.186e-9, 7.704e-9,
2851 6.447e-9, 5.381e-9, 4.442e-9, 3.669e-9, 3.057e-9, 2.564e-9,
2852 2.153e-9, 1.784e-9, 1.499e-9, 1.281e-9, 1.082e-9, 9.304e-10,
2853 8.169e-10, 6.856e-10, 5.866e-10, 5.043e-10, 4.336e-10, 3.731e-10,
2854 3.175e-10, 2.745e-10, 2.374e-10, 2.007e-10, 1.737e-10, 1.508e-10,
2855 1.302e-10, 1.13e-10, 9.672e-11, 8.375e-11, 7.265e-11, 6.244e-11,
2856 5.343e-11, 4.654e-11, 3.975e-11, 3.488e-11, 3.097e-11, 2.834e-11,
2857 2.649e-11, 2.519e-11, 2.462e-11, 2.443e-11, 2.44e-11, 2.398e-11,
2858 2.306e-11, 2.183e-11, 2.021e-11, 1.821e-11, 1.599e-11, 1.403e-11,
2859 1.196e-11, 1.023e-11, 8.728e-12, 7.606e-12, 6.941e-12, 6.545e-12,
2860 6.484e-12, 6.6e-12, 6.718e-12, 6.785e-12, 6.746e-12, 6.724e-12,
2861 6.764e-12, 6.995e-12, 7.144e-12, 7.32e-12, 7.33e-12, 7.208e-12,
2862 6.789e-12, 6.09e-12, 5.337e-12, 4.62e-12, 4.037e-12, 3.574e-12,
2863 3.311e-12, 3.346e-12, 3.566e-12, 3.836e-12, 4.076e-12, 4.351e-12,
2864 4.691e-12, 5.114e-12, 5.427e-12, 6.167e-12, 7.436e-12, 8.842e-12,
2865 1.038e-11, 1.249e-11, 1.54e-11, 1.915e-11, 2.48e-11, 3.256e-11,
2866 4.339e-11, 5.611e-11, 7.519e-11, 1.037e-10, 1.409e-10, 1.883e-10,
2867 2.503e-10, 3.38e-10, 4.468e-10, 5.801e-10, 7.335e-10, 8.98e-10,
2868 1.11e-9, 1.363e-9, 1.677e-9, 2.104e-9, 2.681e-9, 3.531e-9,
2869 4.621e-9, 6.106e-9, 8.154e-9, 1.046e-8, 1.312e-8, 1.607e-8,
2870 1.948e-8, 2.266e-8, 2.495e-8, 2.655e-8, 2.739e-8, 2.739e-8,
2871 2.662e-8, 2.589e-8, 2.59e-8, 2.664e-8, 2.833e-8, 3.023e-8,
2872 3.305e-8, 3.558e-8, 3.793e-8, 3.961e-8, 4.056e-8, 4.102e-8,
2873 4.025e-8, 3.917e-8, 3.706e-8, 3.493e-8, 3.249e-8, 3.096e-8,
2874 3.011e-8, 3.111e-8, 3.395e-8, 3.958e-8, 4.875e-8, 6.066e-8,
2875 7.915e-8, 1.011e-7, 1.3e-7, 1.622e-7, 2.003e-7, 2.448e-7,
2876 2.863e-7, 3.317e-7, 3.655e-7, 3.96e-7, 4.098e-7, 4.168e-7,
2877 4.198e-7, 4.207e-7, 4.289e-7, 4.384e-7, 4.471e-7, 4.524e-7,
2878 4.574e-7, 4.633e-7, 4.785e-7, 5.028e-7, 5.371e-7, 5.727e-7,
2879 5.955e-7, 5.998e-7, 5.669e-7, 5.082e-7, 4.397e-7, 3.596e-7,
2880 2.814e-7, 2.074e-7, 1.486e-7, 1.057e-7, 7.25e-8, 4.946e-8,
2881 3.43e-8, 2.447e-8, 1.793e-8, 1.375e-8, 1.096e-8, 9.091e-9,
2882 7.709e-9, 6.631e-9, 5.714e-9, 4.886e-9, 4.205e-9, 3.575e-9,
2883 3.07e-9, 2.631e-9, 2.284e-9, 2.002e-9, 1.745e-9, 1.509e-9,
2884 1.284e-9, 1.084e-9, 9.163e-10, 7.663e-10, 6.346e-10, 5.283e-10,
2885 4.354e-10, 3.59e-10, 2.982e-10, 2.455e-10, 2.033e-10, 1.696e-10,
2886 1.432e-10, 1.211e-10, 1.02e-10, 8.702e-11, 7.38e-11, 6.293e-11,
2887 5.343e-11, 4.532e-11, 3.907e-11, 3.365e-11, 2.945e-11, 2.558e-11,
2888 2.192e-11, 1.895e-11, 1.636e-11, 1.42e-11, 1.228e-11, 1.063e-11,
2889 9.348e-12, 8.2e-12, 7.231e-12, 6.43e-12, 5.702e-12, 5.052e-12,
2890 4.469e-12, 4e-12, 3.679e-12, 3.387e-12, 3.197e-12, 3.158e-12,
2891 3.327e-12, 3.675e-12, 4.292e-12, 5.437e-12, 7.197e-12, 1.008e-11,
2892 1.437e-11, 2.035e-11, 2.905e-11, 4.062e-11, 5.528e-11, 7.177e-11,
2893 9.064e-11, 1.109e-10, 1.297e-10, 1.473e-10, 1.652e-10, 1.851e-10,
2894 2.079e-10, 2.313e-10, 2.619e-10, 2.958e-10, 3.352e-10, 3.796e-10,
2895 4.295e-10, 4.923e-10, 5.49e-10, 5.998e-10, 6.388e-10, 6.645e-10,
2896 6.712e-10, 6.549e-10, 6.38e-10, 6.255e-10, 6.253e-10, 6.459e-10,
2897 6.977e-10, 7.59e-10, 8.242e-10, 8.92e-10, 9.403e-10, 9.701e-10,
2898 9.483e-10, 9.135e-10, 8.617e-10, 7.921e-10, 7.168e-10, 6.382e-10,
2899 5.677e-10, 5.045e-10, 4.572e-10, 4.312e-10, 4.145e-10, 4.192e-10,
2900 4.541e-10, 5.368e-10, 6.771e-10, 8.962e-10, 1.21e-9, 1.659e-9,
2901 2.33e-9, 3.249e-9, 4.495e-9, 5.923e-9, 7.642e-9, 9.607e-9,
2902 1.178e-8, 1.399e-8, 1.584e-8, 1.73e-8, 1.816e-8, 1.87e-8,
2903 1.868e-8, 1.87e-8, 1.884e-8, 1.99e-8, 2.15e-8, 2.258e-8,
2904 2.364e-8, 2.473e-8, 2.602e-8, 2.689e-8, 2.731e-8, 2.816e-8,
2905 2.859e-8, 2.839e-8, 2.703e-8, 2.451e-8, 2.149e-8, 1.787e-8,
2906 1.449e-8, 1.111e-8, 8.282e-9, 6.121e-9, 4.494e-9, 3.367e-9,
2907 2.487e-9, 1.885e-9, 1.503e-9, 1.249e-9, 1.074e-9, 9.427e-10,
2908 8.439e-10, 7.563e-10, 6.772e-10, 6.002e-10, 5.254e-10, 4.588e-10,
2909 3.977e-10, 3.449e-10, 3.003e-10, 2.624e-10, 2.335e-10, 2.04e-10,
2910 1.771e-10, 1.534e-10, 1.296e-10, 1.097e-10, 9.173e-11, 7.73e-11,
2911 6.547e-11, 5.191e-11, 4.198e-11, 3.361e-11, 2.732e-11, 2.244e-11,
2912 1.791e-11, 1.509e-11, 1.243e-11, 1.035e-11, 8.969e-12, 7.394e-12,
2913 6.323e-12, 5.282e-12, 4.543e-12, 3.752e-12, 3.14e-12, 2.6e-12,
2914 2.194e-12, 1.825e-12, 1.511e-12, 1.245e-12, 1.024e-12, 8.539e-13,
2915 7.227e-13, 6.102e-13, 5.189e-13, 4.43e-13, 3.774e-13, 3.236e-13,
2916 2.8e-13, 2.444e-13, 2.156e-13, 1.932e-13, 1.775e-13, 1.695e-13,
2917 1.672e-13, 1.704e-13, 1.825e-13, 2.087e-13, 2.614e-13, 3.377e-13,
2918 4.817e-13, 6.989e-13, 1.062e-12, 1.562e-12, 2.288e-12, 3.295e-12,
2919 4.55e-12, 5.965e-12, 7.546e-12, 9.395e-12, 1.103e-11, 1.228e-11,
2920 1.318e-11, 1.38e-11, 1.421e-11, 1.39e-11, 1.358e-11, 1.336e-11,
2921 1.342e-11, 1.356e-11, 1.424e-11, 1.552e-11, 1.73e-11, 1.951e-11,
2922 2.128e-11, 2.249e-11, 2.277e-11, 2.226e-11, 2.111e-11, 1.922e-11,
2923 1.775e-11, 1.661e-11, 1.547e-11, 1.446e-11, 1.323e-11, 1.21e-11,
2924 1.054e-11, 9.283e-12, 8.671e-12, 8.67e-12, 9.429e-12, 1.062e-11,
2925 1.255e-11, 1.506e-11, 1.818e-11, 2.26e-11, 2.831e-11, 3.723e-11,
2926 5.092e-11, 6.968e-11, 9.826e-11, 1.349e-10, 1.87e-10, 2.58e-10,
2927 3.43e-10, 4.424e-10, 5.521e-10, 6.812e-10, 8.064e-10, 9.109e-10,
2928 9.839e-10, 1.028e-9, 1.044e-9, 1.029e-9, 1.005e-9, 1.002e-9,
2929 1.038e-9, 1.122e-9, 1.233e-9, 1.372e-9, 1.524e-9, 1.665e-9,
2930 1.804e-9, 1.908e-9, 2.015e-9, 2.117e-9, 2.219e-9, 2.336e-9,
2931 2.531e-9, 2.805e-9, 3.189e-9, 3.617e-9, 4.208e-9, 4.911e-9,
2932 5.619e-9, 6.469e-9, 7.188e-9, 7.957e-9, 8.503e-9, 9.028e-9,
2933 9.571e-9, 9.99e-9, 1.055e-8, 1.102e-8, 1.132e-8, 1.141e-8,
2934 1.145e-8, 1.145e-8, 1.176e-8, 1.224e-8, 1.304e-8, 1.388e-8,
2935 1.445e-8, 1.453e-8, 1.368e-8, 1.22e-8, 1.042e-8, 8.404e-9,
2936 6.403e-9, 4.643e-9, 3.325e-9, 2.335e-9, 1.638e-9, 1.19e-9,
2937 9.161e-10, 7.412e-10, 6.226e-10, 5.516e-10, 5.068e-10, 4.831e-10,
2938 4.856e-10, 5.162e-10, 5.785e-10, 6.539e-10, 7.485e-10, 8.565e-10,
2939 9.534e-10, 1.052e-9, 1.115e-9, 1.173e-9, 1.203e-9, 1.224e-9,
2940 1.243e-9, 1.248e-9, 1.261e-9, 1.265e-9, 1.25e-9, 1.217e-9,
2941 1.176e-9, 1.145e-9, 1.153e-9, 1.199e-9, 1.278e-9, 1.366e-9,
2942 1.426e-9, 1.444e-9, 1.365e-9, 1.224e-9, 1.051e-9, 8.539e-10,
2943 6.564e-10, 4.751e-10, 3.404e-10, 2.377e-10, 1.631e-10, 1.114e-10,
2944 7.87e-11, 5.793e-11, 4.284e-11, 3.3e-11, 2.62e-11, 2.152e-11,
2945 1.777e-11, 1.496e-11, 1.242e-11, 1.037e-11, 8.725e-12, 7.004e-12,
2946 5.718e-12, 4.769e-12, 3.952e-12, 3.336e-12, 2.712e-12, 2.213e-12,
2947 1.803e-12, 1.492e-12, 1.236e-12, 1.006e-12, 8.384e-13, 7.063e-13,
2948 5.879e-13, 4.93e-13, 4.171e-13, 3.569e-13, 3.083e-13, 2.688e-13,
2949 2.333e-13, 2.035e-13, 1.82e-13, 1.682e-13, 1.635e-13, 1.674e-13,
2950 1.769e-13, 2.022e-13, 2.485e-13, 3.127e-13, 4.25e-13, 5.928e-13,
2951 8.514e-13, 1.236e-12, 1.701e-12, 2.392e-12, 3.231e-12, 4.35e-12,
2952 5.559e-12, 6.915e-12, 8.519e-12, 1.013e-11, 1.146e-11, 1.24e-11,
2953 1.305e-11, 1.333e-11, 1.318e-11, 1.263e-11, 1.238e-11, 1.244e-11,
2954 1.305e-11, 1.432e-11, 1.623e-11, 1.846e-11, 2.09e-11, 2.328e-11,
2955 2.526e-11, 2.637e-11, 2.702e-11, 2.794e-11, 2.889e-11, 2.989e-11,
2956 3.231e-11, 3.68e-11, 4.375e-11, 5.504e-11, 7.159e-11, 9.502e-11,
2957 1.279e-10, 1.645e-10, 2.098e-10, 2.618e-10, 3.189e-10, 3.79e-10,
2958 4.303e-10, 4.753e-10, 5.027e-10, 5.221e-10, 5.293e-10, 5.346e-10,
2959 5.467e-10, 5.796e-10, 6.2e-10, 6.454e-10, 6.705e-10, 6.925e-10,
2960 7.233e-10, 7.35e-10, 7.538e-10, 7.861e-10, 8.077e-10, 8.132e-10,
2961 7.749e-10, 7.036e-10, 6.143e-10, 5.093e-10, 4.089e-10, 3.092e-10,
2962 2.299e-10, 1.705e-10, 1.277e-10, 9.723e-11, 7.533e-11, 6.126e-11,
2963 5.154e-11, 4.428e-11, 3.913e-11, 3.521e-11, 3.297e-11, 3.275e-11,
2964 3.46e-11, 3.798e-11, 4.251e-11, 4.745e-11, 5.232e-11, 5.606e-11,
2965 5.82e-11, 5.88e-11, 5.79e-11, 5.661e-11, 5.491e-11, 5.366e-11,
2966 5.341e-11, 5.353e-11, 5.336e-11, 5.293e-11, 5.248e-11, 5.235e-11,
2967 5.208e-11, 5.322e-11, 5.521e-11, 5.725e-11, 5.827e-11, 5.685e-11,
2968 5.245e-11, 4.612e-11, 3.884e-11, 3.129e-11, 2.404e-11, 1.732e-11,
2969 1.223e-11, 8.574e-12, 5.888e-12, 3.986e-12, 2.732e-12, 1.948e-12,
2970 1.414e-12, 1.061e-12, 8.298e-13, 6.612e-13, 5.413e-13, 4.472e-13,
2971 3.772e-13, 3.181e-13, 2.645e-13, 2.171e-13, 1.778e-13, 1.464e-13,
2972 1.183e-13, 9.637e-14, 7.991e-14, 6.668e-14, 5.57e-14, 4.663e-14,
2973 3.848e-14, 3.233e-14, 2.706e-14, 2.284e-14, 1.944e-14, 1.664e-14,
2974 1.43e-14, 1.233e-14, 1.066e-14, 9.234e-15, 8.023e-15, 6.993e-15,
2975 6.119e-15, 5.384e-15, 4.774e-15, 4.283e-15, 3.916e-15, 3.695e-15,
2976 3.682e-15, 4.004e-15, 4.912e-15, 6.853e-15, 1.056e-14, 1.712e-14,
2977 2.804e-14, 4.516e-14, 7.113e-14, 1.084e-13, 1.426e-13, 1.734e-13,
2978 1.978e-13, 2.194e-13, 2.388e-13, 2.489e-13, 2.626e-13, 2.865e-13,
2979 3.105e-13, 3.387e-13, 3.652e-13, 3.984e-13, 4.398e-13, 4.906e-13,
2980 5.55e-13, 6.517e-13, 7.813e-13, 9.272e-13, 1.164e-12, 1.434e-12,
2981 1.849e-12, 2.524e-12, 3.328e-12, 4.523e-12, 6.108e-12, 8.207e-12,
2982 1.122e-11, 1.477e-11, 1.9e-11, 2.412e-11, 2.984e-11, 3.68e-11,
2983 4.353e-11, 4.963e-11, 5.478e-11, 5.903e-11, 6.233e-11, 6.483e-11,
2984 6.904e-11, 7.569e-11, 8.719e-11, 1.048e-10, 1.278e-10, 1.557e-10,
2985 1.869e-10, 2.218e-10, 2.61e-10, 2.975e-10, 3.371e-10, 3.746e-10,
2986 4.065e-10, 4.336e-10, 4.503e-10, 4.701e-10, 4.8e-10, 4.917e-10,
2987 5.038e-10, 5.128e-10, 5.143e-10, 5.071e-10, 5.019e-10, 5.025e-10,
2988 5.183e-10, 5.496e-10, 5.877e-10, 6.235e-10, 6.42e-10, 6.234e-10,
2989 5.698e-10, 4.916e-10, 4.022e-10, 3.126e-10, 2.282e-10, 1.639e-10,
2990 1.142e-10, 7.919e-11, 5.69e-11, 4.313e-11, 3.413e-11, 2.807e-11,
2991 2.41e-11, 2.166e-11, 2.024e-11, 1.946e-11, 1.929e-11, 1.963e-11,
2992 2.035e-11, 2.162e-11, 2.305e-11, 2.493e-11, 2.748e-11, 3.048e-11,
2993 3.413e-11, 3.754e-11, 4.155e-11, 4.635e-11, 5.11e-11, 5.734e-11,
2994 6.338e-11, 6.99e-11, 7.611e-11, 8.125e-11, 8.654e-11, 8.951e-11,
2995 9.182e-11, 9.31e-11, 9.273e-11, 9.094e-11, 8.849e-11, 8.662e-11,
2996 8.67e-11, 8.972e-11, 9.566e-11, 1.025e-10, 1.083e-10, 1.111e-10,
2997 1.074e-10, 9.771e-11, 8.468e-11, 6.958e-11, 5.47e-11, 4.04e-11,
2998 2.94e-11, 2.075e-11, 1.442e-11, 1.01e-11, 7.281e-12, 5.409e-12,
2999 4.138e-12, 3.304e-12, 2.784e-12, 2.473e-12, 2.273e-12, 2.186e-12,
3000 2.118e-12, 2.066e-12, 1.958e-12, 1.818e-12, 1.675e-12, 1.509e-12,
3001 1.349e-12, 1.171e-12, 9.838e-13, 8.213e-13, 6.765e-13, 5.378e-13,
3002 4.161e-13, 3.119e-13, 2.279e-13, 1.637e-13, 1.152e-13, 8.112e-14,
3003 5.919e-14, 4.47e-14, 3.492e-14, 2.811e-14, 2.319e-14, 1.948e-14,
3004 1.66e-14, 1.432e-14, 1.251e-14, 1.109e-14, 1.006e-14, 9.45e-15,
3005 9.384e-15, 1.012e-14, 1.216e-14, 1.636e-14, 2.305e-14, 3.488e-14,
3006 5.572e-14, 8.479e-14, 1.265e-13, 1.905e-13, 2.73e-13, 3.809e-13,
3007 4.955e-13, 6.303e-13, 7.861e-13, 9.427e-13, 1.097e-12, 1.212e-12,
3008 1.328e-12, 1.415e-12, 1.463e-12, 1.495e-12, 1.571e-12, 1.731e-12,
3009 1.981e-12, 2.387e-12, 2.93e-12, 3.642e-12, 4.584e-12, 5.822e-12,
3010 7.278e-12, 9.193e-12, 1.135e-11, 1.382e-11, 1.662e-11, 1.958e-11,
3011 2.286e-11, 2.559e-11, 2.805e-11, 2.988e-11, 3.106e-11, 3.182e-11,
3012 3.2e-11, 3.258e-11, 3.362e-11, 3.558e-11, 3.688e-11, 3.8e-11,
3013 3.929e-11, 4.062e-11, 4.186e-11, 4.293e-11, 4.48e-11, 4.643e-11,
3014 4.704e-11, 4.571e-11, 4.206e-11, 3.715e-11, 3.131e-11, 2.541e-11,
3015 1.978e-11, 1.508e-11, 1.146e-11, 8.7e-12, 6.603e-12, 5.162e-12,
3016 4.157e-12, 3.408e-12, 2.829e-12, 2.405e-12, 2.071e-12, 1.826e-12,
3017 1.648e-12, 1.542e-12, 1.489e-12, 1.485e-12, 1.493e-12, 1.545e-12,
3018 1.637e-12, 1.814e-12, 2.061e-12, 2.312e-12, 2.651e-12, 3.03e-12,
3019 3.46e-12, 3.901e-12, 4.306e-12, 4.721e-12, 5.008e-12, 5.281e-12,
3020 5.541e-12, 5.791e-12, 6.115e-12, 6.442e-12, 6.68e-12, 6.791e-12,
3021 6.831e-12, 6.839e-12, 6.946e-12, 7.128e-12, 7.537e-12, 8.036e-12,
3022 8.392e-12, 8.526e-12, 8.11e-12, 7.325e-12, 6.329e-12, 5.183e-12,
3023 4.081e-12, 2.985e-12, 2.141e-12, 1.492e-12, 1.015e-12, 6.684e-13,
3024 4.414e-13, 2.987e-13, 2.038e-13, 1.391e-13, 9.86e-14, 7.24e-14,
3025 5.493e-14, 4.288e-14, 3.427e-14, 2.787e-14, 2.296e-14, 1.909e-14,
3026 1.598e-14, 1.344e-14, 1.135e-14, 9.616e-15, 8.169e-15, 6.957e-15,
3027 5.938e-15, 5.08e-15, 4.353e-15, 3.738e-15, 3.217e-15, 2.773e-15,
3028 2.397e-15, 2.077e-15, 1.805e-15, 1.575e-15, 1.382e-15, 1.221e-15,
3029 1.09e-15, 9.855e-16, 9.068e-16, 8.537e-16, 8.27e-16, 8.29e-16,
3030 8.634e-16, 9.359e-16, 1.055e-15, 1.233e-15, 1.486e-15, 1.839e-15,
3031 2.326e-15, 2.998e-15, 3.934e-15, 5.256e-15, 7.164e-15, 9.984e-15,
3032 1.427e-14, 2.099e-14, 3.196e-14, 5.121e-14, 7.908e-14, 1.131e-13,
3033 1.602e-13, 2.239e-13, 3.075e-13, 4.134e-13, 5.749e-13, 7.886e-13,
3034 1.071e-12, 1.464e-12, 2.032e-12, 2.8e-12, 3.732e-12, 4.996e-12,
3035 6.483e-12, 8.143e-12, 1.006e-11, 1.238e-11, 1.484e-11, 1.744e-11,
3036 2.02e-11, 2.274e-11, 2.562e-11, 2.848e-11, 3.191e-11, 3.617e-11,
3037 4.081e-11, 4.577e-11, 4.937e-11, 5.204e-11, 5.401e-11, 5.462e-11,
3038 5.507e-11, 5.51e-11, 5.605e-11, 5.686e-11, 5.739e-11, 5.766e-11,
3039 5.74e-11, 5.754e-11, 5.761e-11, 5.777e-11, 5.712e-11, 5.51e-11,
3040 5.088e-11, 4.438e-11, 3.728e-11, 2.994e-11, 2.305e-11, 1.715e-11,
3041 1.256e-11, 9.208e-12, 6.745e-12, 5.014e-12, 3.785e-12, 2.9e-12,
3042 2.239e-12, 1.757e-12, 1.414e-12, 1.142e-12, 9.482e-13, 8.01e-13,
3043 6.961e-13, 6.253e-13, 5.735e-13, 5.433e-13, 5.352e-13, 5.493e-13,
3044 5.706e-13, 6.068e-13, 6.531e-13, 7.109e-13, 7.767e-13, 8.59e-13,
3045 9.792e-13, 1.142e-12, 1.371e-12, 1.65e-12, 1.957e-12, 2.302e-12,
3046 2.705e-12, 3.145e-12, 3.608e-12, 4.071e-12, 4.602e-12, 5.133e-12,
3047 5.572e-12, 5.987e-12, 6.248e-12, 6.533e-12, 6.757e-12, 6.935e-12,
3048 7.224e-12, 7.422e-12, 7.538e-12, 7.547e-12, 7.495e-12, 7.543e-12,
3049 7.725e-12, 8.139e-12, 8.627e-12, 9.146e-12, 9.443e-12, 9.318e-12,
3050 8.649e-12, 7.512e-12, 6.261e-12, 4.915e-12, 3.647e-12, 2.597e-12,
3051 1.785e-12, 1.242e-12, 8.66e-13, 6.207e-13, 4.61e-13, 3.444e-13,
3052 2.634e-13, 2.1e-13, 1.725e-13, 1.455e-13, 1.237e-13, 1.085e-13,
3053 9.513e-14, 7.978e-14, 6.603e-14, 5.288e-14, 4.084e-14, 2.952e-14,
3054 2.157e-14, 1.593e-14, 1.199e-14, 9.267e-15, 7.365e-15, 6.004e-15,
3055 4.995e-15, 4.218e-15, 3.601e-15, 3.101e-15, 2.692e-15, 2.36e-15,
3056 2.094e-15, 1.891e-15, 1.755e-15, 1.699e-15, 1.755e-15, 1.987e-15,
3057 2.506e-15, 3.506e-15, 5.289e-15, 8.311e-15, 1.325e-14, 2.129e-14,
3058 3.237e-14, 4.595e-14, 6.441e-14, 8.433e-14, 1.074e-13, 1.383e-13,
3059 1.762e-13, 2.281e-13, 2.831e-13, 3.523e-13, 4.38e-13, 5.304e-13,
3060 6.29e-13, 7.142e-13, 8.032e-13, 8.934e-13, 9.888e-13, 1.109e-12,
3061 1.261e-12, 1.462e-12, 1.74e-12, 2.099e-12, 2.535e-12, 3.008e-12,
3062 3.462e-12, 3.856e-12, 4.098e-12, 4.239e-12, 4.234e-12, 4.132e-12,
3063 3.986e-12, 3.866e-12, 3.829e-12, 3.742e-12, 3.705e-12, 3.694e-12,
3064 3.765e-12, 3.849e-12, 3.929e-12, 4.056e-12, 4.092e-12, 4.047e-12,
3065 3.792e-12, 3.407e-12, 2.953e-12, 2.429e-12, 1.931e-12, 1.46e-12,
3066 1.099e-12, 8.199e-13, 6.077e-13, 4.449e-13, 3.359e-13, 2.524e-13,
3067 1.881e-13, 1.391e-13, 1.02e-13, 7.544e-14, 5.555e-14, 4.22e-14,
3068 3.321e-14, 2.686e-14, 2.212e-14, 1.78e-14, 1.369e-14, 1.094e-14,
3069 9.13e-15, 8.101e-15, 7.828e-15, 8.393e-15, 1.012e-14, 1.259e-14,
3070 1.538e-14, 1.961e-14, 2.619e-14, 3.679e-14, 5.049e-14, 6.917e-14,
3071 8.88e-14, 1.115e-13, 1.373e-13, 1.619e-13, 1.878e-13, 2.111e-13,
3072 2.33e-13, 2.503e-13, 2.613e-13, 2.743e-13, 2.826e-13, 2.976e-13,
3073 3.162e-13, 3.36e-13, 3.491e-13, 3.541e-13, 3.595e-13, 3.608e-13,
3074 3.709e-13, 3.869e-13, 4.12e-13, 4.366e-13, 4.504e-13, 4.379e-13,
3075 3.955e-13, 3.385e-13, 2.741e-13, 2.089e-13, 1.427e-13, 9.294e-14,
3076 5.775e-14, 3.565e-14, 2.21e-14, 1.398e-14, 9.194e-15, 6.363e-15,
3077 4.644e-15, 3.55e-15, 2.808e-15, 2.274e-15, 1.871e-15, 1.557e-15,
3078 1.308e-15, 1.108e-15, 9.488e-16, 8.222e-16, 7.238e-16, 6.506e-16,
3079 6.008e-16, 5.742e-16, 5.724e-16, 5.991e-16, 6.625e-16, 7.775e-16,
3080 9.734e-16, 1.306e-15, 1.88e-15, 2.879e-15, 4.616e-15, 7.579e-15,
3081 1.248e-14, 2.03e-14, 3.244e-14, 5.171e-14, 7.394e-14, 9.676e-14,
3082 1.199e-13, 1.467e-13, 1.737e-13, 2.02e-13, 2.425e-13, 3.016e-13,
3083 3.7e-13, 4.617e-13, 5.949e-13, 7.473e-13, 9.378e-13, 1.191e-12,
3084 1.481e-12, 1.813e-12, 2.232e-12, 2.722e-12, 3.254e-12, 3.845e-12,
3085 4.458e-12, 5.048e-12, 5.511e-12, 5.898e-12, 6.204e-12, 6.293e-12,
3086 6.386e-12, 6.467e-12, 6.507e-12, 6.466e-12, 6.443e-12, 6.598e-12,
3087 6.873e-12, 7.3e-12, 7.816e-12, 8.368e-12, 8.643e-12, 8.466e-12,
3088 7.871e-12, 6.853e-12, 5.714e-12, 4.482e-12, 3.392e-12, 2.613e-12,
3089 2.008e-12, 1.562e-12, 1.228e-12, 9.888e-13, 7.646e-13, 5.769e-13,
3090 4.368e-13, 3.324e-13, 2.508e-13, 1.916e-13
3093 static const double xfcrev[15] =
3094 { 1.003, 1.009, 1.015, 1.023, 1.029, 1.033, 1.037,
3095 1.039, 1.04, 1.046, 1.036, 1.027, 1.01, 1.002, 1.
3101 const double xw = nu / 10 + 1;
3102 if (xw >= 1 && xw < 2001) {
3103 const int iw = (int) xw;
3104 const double dw = xw - iw;
3105 const double ew = 1 - dw;
3106 const double cw296 = ew * h2o296[iw - 1] + dw * h2o296[iw];
3107 const double cw260 = ew * h2o260[iw - 1] + dw * h2o260[iw];
3108 const double cwfrn = ew * h2ofrn[iw - 1] + dw * h2ofrn[iw];
3109 if (nu <= 820 || nu >= 960) {
3112 const double xx = (nu - 820) / 10;
3113 const int ix = (int) xx;
3114 const double dx = xx - ix;
3115 sfac = (1 - dx) * xfcrev[ix] + dx * xfcrev[ix + 1];
3117 const double ctwslf =
3118 sfac * cw296 * pow(cw260 / cw296, (296 - t) / (296 - 260));
3119 const double vf2 =
POW2(nu - 370);
3120 const double vf6 =
POW3(vf2);
3121 const double fscal = 36100 / (vf2 + vf6 * 1e-8 + 36100) * -.25 + 1;
3122 const double ctwfrn = cwfrn * fscal;
3123 const double a1 = nu * u * tanh(.7193876 / t * nu);
3124 const double a2 = 296 / t;
3125 const double a3 = p /
P0 * (q * ctwslf + (1 - q) * ctwfrn) * 1e-20;
3126 return a1 * a2 * a3;
3138 static const double ba[98] =
3139 { 0., 4.45e-8, 5.22e-8, 6.46e-8, 7.75e-8, 9.03e-8,
3140 1.06e-7, 1.21e-7, 1.37e-7, 1.57e-7, 1.75e-7, 2.01e-7, 2.3e-7,
3141 2.59e-7, 2.95e-7, 3.26e-7, 3.66e-7, 4.05e-7, 4.47e-7, 4.92e-7,
3142 5.34e-7, 5.84e-7, 6.24e-7, 6.67e-7, 7.14e-7, 7.26e-7, 7.54e-7,
3143 7.84e-7, 8.09e-7, 8.42e-7, 8.62e-7, 8.87e-7, 9.11e-7, 9.36e-7,
3144 9.76e-7, 1.03e-6, 1.11e-6, 1.23e-6, 1.39e-6, 1.61e-6, 1.76e-6,
3145 1.94e-6, 1.97e-6, 1.87e-6, 1.75e-6, 1.56e-6, 1.42e-6, 1.35e-6,
3146 1.32e-6, 1.29e-6, 1.29e-6, 1.29e-6, 1.3e-6, 1.32e-6, 1.33e-6,
3147 1.34e-6, 1.35e-6, 1.33e-6, 1.31e-6, 1.29e-6, 1.24e-6, 1.2e-6,
3148 1.16e-6, 1.1e-6, 1.04e-6, 9.96e-7, 9.38e-7, 8.63e-7, 7.98e-7,
3149 7.26e-7, 6.55e-7, 5.94e-7, 5.35e-7, 4.74e-7, 4.24e-7, 3.77e-7,
3150 3.33e-7, 2.96e-7, 2.63e-7, 2.34e-7, 2.08e-7, 1.85e-7, 1.67e-7,
3151 1.47e-7, 1.32e-7, 1.2e-7, 1.09e-7, 9.85e-8, 9.08e-8, 8.18e-8,
3152 7.56e-8, 6.85e-8, 6.14e-8, 5.83e-8, 5.77e-8, 5e-8, 4.32e-8, 0.
3155 static const double betaa[98] =
3156 { 802., 802., 761., 722., 679., 646., 609., 562.,
3157 511., 472., 436., 406., 377., 355., 338., 319., 299., 278., 255.,
3158 233., 208., 184., 149., 107., 66., 25., -13., -49., -82., -104.,
3159 -119., -130., -139., -144., -146., -146., -147., -148., -150.,
3160 -153., -160., -169., -181., -189., -195., -200., -205., -209.,
3161 -211., -210., -210., -209., -205., -199., -190., -180., -168.,
3162 -157., -143., -126., -108., -89., -63., -32., 1., 35., 65., 95.,
3163 121., 141., 152., 161., 164., 164., 161., 155., 148., 143., 137.,
3164 133., 131., 133., 139., 150., 165., 187., 213., 248., 284., 321.,
3165 372., 449., 514., 569., 609., 642., 673., 673.
3168 static const double nua[98] =
3169 { 2120., 2125., 2130., 2135., 2140., 2145., 2150.,
3170 2155., 2160., 2165., 2170., 2175., 2180., 2185., 2190., 2195.,
3171 2200., 2205., 2210., 2215., 2220., 2225., 2230., 2235., 2240.,
3172 2245., 2250., 2255., 2260., 2265., 2270., 2275., 2280., 2285.,
3173 2290., 2295., 2300., 2305., 2310., 2315., 2320., 2325., 2330.,
3174 2335., 2340., 2345., 2350., 2355., 2360., 2365., 2370., 2375.,
3175 2380., 2385., 2390., 2395., 2400., 2405., 2410., 2415., 2420.,
3176 2425., 2430., 2435., 2440., 2445., 2450., 2455., 2460., 2465.,
3177 2470., 2475., 2480., 2485., 2490., 2495., 2500., 2505., 2510.,
3178 2515., 2520., 2525., 2530., 2535., 2540., 2545., 2550., 2555.,
3179 2560., 2565., 2570., 2575., 2580., 2585., 2590., 2595., 2600., 2605.
3182 const double t0 = 273.0, tr = 296.0;
3185 if (nu < nua[0] || nu > nua[97])
3191 1e6 *
LIN(nua[idx], ba[idx], nua[idx + 1], ba[idx + 1], nu);
3193 LIN(nua[idx], betaa[idx], nua[idx + 1], betaa[idx + 1], nu);
3196 return 0.1 *
POW2(p /
P0 * t0 / t) * exp(beta * (1 / tr - 1 / t))
3197 *
N2 * b * (
N2 + (1 -
N2) * (1.294 - 0.4545 * t / tr));
3207 static const double ba[90] =
3208 { 0., .061, .074, .084, .096, .12, .162, .208, .246,
3209 .285, .314, .38, .444, .5, .571, .673, .768, .853, .966, 1.097,
3210 1.214, 1.333, 1.466, 1.591, 1.693, 1.796, 1.922, 2.037, 2.154,
3211 2.264, 2.375, 2.508, 2.671, 2.847, 3.066, 3.417, 3.828, 4.204,
3212 4.453, 4.599, 4.528, 4.284, 3.955, 3.678, 3.477, 3.346, 3.29,
3213 3.251, 3.231, 3.226, 3.212, 3.192, 3.108, 3.033, 2.911, 2.798,
3214 2.646, 2.508, 2.322, 2.13, 1.928, 1.757, 1.588, 1.417, 1.253,
3215 1.109, .99, .888, .791, .678, .587, .524, .464, .403, .357, .32,
3216 .29, .267, .242, .215, .182, .16, .146, .128, .103, .087, .081,
3220 static const double betaa[90] =
3221 { 467., 467., 400., 315., 379., 368., 475., 521.,
3222 531., 512., 442., 444., 430., 381., 335., 324., 296., 248., 215.,
3223 193., 158., 127., 101., 71., 31., -6., -26., -47., -63., -79.,
3224 -88., -88., -87., -90., -98., -99., -109., -134., -160., -167.,
3225 -164., -158., -153., -151., -156., -166., -168., -173., -170.,
3226 -161., -145., -126., -108., -84., -59., -29., 4., 41., 73., 97.,
3227 123., 159., 198., 220., 242., 256., 281., 311., 334., 319., 313.,
3228 321., 323., 310., 315., 320., 335., 361., 378., 373., 338., 319.,
3229 346., 322., 291., 290., 350., 371., 504., 504.
3232 static const double nua[90] =
3233 { 1360., 1365., 1370., 1375., 1380., 1385., 1390.,
3234 1395., 1400., 1405., 1410., 1415., 1420., 1425., 1430., 1435.,
3235 1440., 1445., 1450., 1455., 1460., 1465., 1470., 1475., 1480.,
3236 1485., 1490., 1495., 1500., 1505., 1510., 1515., 1520., 1525.,
3237 1530., 1535., 1540., 1545., 1550., 1555., 1560., 1565., 1570.,
3238 1575., 1580., 1585., 1590., 1595., 1600., 1605., 1610., 1615.,
3239 1620., 1625., 1630., 1635., 1640., 1645., 1650., 1655., 1660.,
3240 1665., 1670., 1675., 1680., 1685., 1690., 1695., 1700., 1705.,
3241 1710., 1715., 1720., 1725., 1730., 1735., 1740., 1745., 1750.,
3242 1755., 1760., 1765., 1770., 1775., 1780., 1785., 1790., 1795.,
3246 const double t0 = 273, tr = 296;
3249 if (nu < nua[0] || nu > nua[89])
3254 const double b =
LIN(nua[idx], ba[idx], nua[idx + 1], ba[idx + 1], nu);
3256 LIN(nua[idx], betaa[idx], nua[idx + 1], betaa[idx + 1], nu);
3259 return 0.1 *
POW2(p /
P0 * t0 / t) * exp(beta * (1 / tr - 1 / t)) *
O2 * b;
3267 const atm_t *atm_src,
3271 const size_t s = (size_t) atm_src->
np *
sizeof(
double);
3274 atm_dest->
np = atm_src->
np;
3275 memcpy(atm_dest->
time, atm_src->
time, s);
3276 memcpy(atm_dest->
z, atm_src->
z, s);
3277 memcpy(atm_dest->
lon, atm_src->
lon, s);
3278 memcpy(atm_dest->
lat, atm_src->
lat, s);
3279 memcpy(atm_dest->
p, atm_src->
p, s);
3280 memcpy(atm_dest->
t, atm_src->
t, s);
3281 for (
int ig = 0; ig < ctl->
ng; ig++)
3282 memcpy(atm_dest->
q[ig], atm_src->
q[ig], s);
3283 for (
int iw = 0; iw < ctl->
nw; iw++)
3284 memcpy(atm_dest->
k[iw], atm_src->
k[iw], s);
3285 atm_dest->
clz = atm_src->
clz;
3287 for (
int icl = 0; icl < ctl->
ncl; icl++)
3288 atm_dest->
clk[icl] = atm_src->
clk[icl];
3289 atm_dest->
sft = atm_src->
sft;
3290 for (
int isf = 0; isf < ctl->
nsf; isf++)
3295 for (
int ip = 0; ip < atm_dest->
np; ip++) {
3296 atm_dest->
p[ip] = 0;
3297 atm_dest->
t[ip] = 0;
3298 for (
int ig = 0; ig < ctl->
ng; ig++)
3299 atm_dest->
q[ig][ip] = 0;
3300 for (
int iw = 0; iw < ctl->
nw; iw++)
3301 atm_dest->
k[iw][ip] = 0;
3304 for (
int icl = 0; icl < ctl->
ncl; icl++)
3305 atm_dest->
clk[icl] = 0;
3307 for (
int isf = 0; isf < ctl->
nsf; isf++)
3308 atm_dest->
sfeps[isf] = 1;
3317 const obs_t *obs_src,
3321 const size_t s = (size_t) obs_src->
nr *
sizeof(
double);
3324 obs_dest->
nr = obs_src->
nr;
3325 memcpy(obs_dest->
time, obs_src->
time, s);
3326 memcpy(obs_dest->
obsz, obs_src->
obsz, s);
3329 memcpy(obs_dest->
vpz, obs_src->
vpz, s);
3332 memcpy(obs_dest->
tpz, obs_src->
tpz, s);
3335 for (
int id = 0;
id < ctl->
nd;
id++)
3336 memcpy(obs_dest->
rad[
id], obs_src->
rad[
id], s);
3337 for (
int id = 0;
id < ctl->
nd;
id++)
3338 memcpy(obs_dest->
tau[
id], obs_src->
tau[
id], s);
3342 for (
int id = 0;
id < ctl->
nd;
id++)
3343 for (
int ir = 0; ir < obs_dest->
nr; ir++)
3344 if (isfinite(obs_dest->
rad[
id][ir])) {
3345 obs_dest->
rad[id][ir] = 0;
3346 obs_dest->
tau[id][ir] = 0;
3359 { 1, 32, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 };
3361 { 1, 32, 61, 92, 122, 153, 183, 214, 245, 275, 306, 336 };
3364 if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))
3365 *doy = d0l[mon - 1] + day - 1;
3367 *doy = d0[mon - 1] + day - 1;
3379 { 1, 32, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 };
3381 { 1, 32, 61, 92, 122, 153, 183, 214, 245, 275, 306, 336 };
3385 if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)) {
3386 for (i = 11; i >= 0; i--)
3390 *day = doy - d0l[i] + 1;
3392 for (i = 11; i >= 0; i--)
3396 *day = doy - d0[i] + 1;
3404 const char *emitter) {
3406 for (
int ig = 0; ig < ctl->
ng; ig++)
3407 if (strcasecmp(ctl->
emitter[ig], emitter) == 0)
3427 for (
int id = 0;
id < ctl->
nd;
id++)
3428 for (
int ir = 0; ir < obs->
nr; ir++)
3429 mask[
id *
NR + ir] = !isfinite(obs->
rad[
id][ir]);
3436 for (
int ir = 0; ir < obs->
nr; ir++)
3440 else if (ctl->
formod == 2)
3448 for (
int id = 0;
id < ctl->
nd;
id++)
3449 for (
int ir = 0; ir < obs->
nr; ir++)
3453 for (
int id = 0;
id < ctl->
nd;
id++)
3454 for (
int ir = 0; ir < obs->
nr; ir++)
3455 if (mask[
id *
NR + ir])
3456 obs->
rad[id][ir] = NAN;
3471 for (
int id = 0;
id < ctl->
nd;
id++)
3472 beta[
id] = los->
k[ip][
id];
3476 for (
int id = 0;
id < ctl->
nd;
id++)
3477 beta[
id] +=
ctmco2(ctl->
nu[
id], los->
p[ip], los->
t[ip],
3482 for (
int id = 0;
id < ctl->
nd;
id++)
3483 beta[
id] +=
ctmh2o(ctl->
nu[
id], los->
p[ip], los->
t[ip],
3489 for (
int id = 0;
id < ctl->
nd;
id++)
3490 beta[
id] +=
ctmn2(ctl->
nu[
id], los->
p[ip], los->
t[ip]);
3494 for (
int id = 0;
id < ctl->
nd;
id++)
3495 beta[
id] +=
ctmo2(ctl->
nu[
id], los->
p[ip], los->
t[ip]);
3507 if (ctl->
fov[0] ==
'-')
3518 for (
int ir = 0; ir < obs->
nr; ir++) {
3522 for (
int ir2 =
MAX(ir -
NFOV, 0);
3523 ir2 <
MIN(ir + 1 +
NFOV, obs->
nr); ir2++)
3524 if (obs->
time[ir2] == obs->
time[ir]) {
3525 z[nz] = obs2->
vpz[ir2];
3526 for (
int id = 0;
id < ctl->
nd;
id++) {
3527 rad[id][nz] = obs2->
rad[id][ir2];
3528 tau[id][nz] = obs2->
tau[id][ir2];
3533 ERRMSG(
"Cannot apply FOV convolution!");
3537 for (
int id = 0;
id < ctl->
nd;
id++) {
3538 obs->
rad[id][ir] = 0;
3539 obs->
tau[id][ir] = 0;
3541 for (
int i = 0; i < ctl->
fov_n; i++) {
3542 const double zfov = obs->
vpz[ir] + ctl->
fov_dz[i];
3544 for (
int id = 0;
id < ctl->
nd;
id++) {
3546 *
LIN(z[idx], rad[
id][idx], z[idx + 1], rad[
id][idx + 1], zfov);
3548 *
LIN(z[idx], tau[
id][idx], z[idx + 1], tau[
id][idx + 1], zfov);
3550 wsum += ctl->
fov_w[i];
3552 for (
int id = 0;
id < ctl->
nd;
id++) {
3553 obs->
rad[id][ir] /= wsum;
3554 obs->
tau[id][ir] /= wsum;
3571 double rad[
ND], tau[
ND], tau_path[
ND][
NG];
3578 for (
int id = 0;
id < ctl->
nd;
id++) {
3581 for (
int ig = 0; ig < ctl->
ng; ig++)
3582 tau_path[
id][ig] = 1;
3589 for (
int ip = 0; ip < los->
np; ip++) {
3599 double beta_ctm[
ND];
3606 for (
int id = 0;
id < ctl->
nd;
id++)
3607 if (tau_gas[
id] > 0) {
3610 los->
eps[ip][id] = 1 - tau_gas[id] * exp(-beta_ctm[
id] * los->
ds[ip]);
3613 rad[id] += los->
src[ip][id] * los->
eps[ip][id] * tau[id];
3616 tau[id] *= (1 - los->
eps[ip][id]);
3626 for (
int id = 0;
id < ctl->
nd;
id++)
3627 rad[
id] += los->
sfeps[
id] * src_sf[
id] * tau[
id];
3632 for (
int id = 0;
id < ctl->
nd;
id++)
3633 if (los->
sfeps[
id] < 1) {
3642 double tau_refl[
ND];
3643 for (
int id = 0;
id < ctl->
nd;
id++)
3647 for (
int ip = los->
np - 1; ip >= 0; ip--)
3648 for (
int id = 0;
id < ctl->
nd;
id++) {
3649 rad[id] += los->
src[ip][id] * los->
eps[ip][id] * tau_refl[id]
3650 * tau[id] * (1 - los->
sfeps[id]);
3651 tau_refl[id] *= (1 - los->
eps[ip][id]);
3661 los->
lon[los->
np - 1], los->
lat[los->
np - 1]);
3666 if (cos_sza_val > 1e-6) {
3669 double x0[3], x1[3];
3671 los->
lat[los->
np - 1], x0);
3673 for (
int i = 0; i < 3; i++)
3675 const double cosa =
DOTP(x0, x1) /
NORM(x0) /
NORM(x1);
3678 const double rcos = cosa / cos_sza_val;
3681 for (
int id = 0;
id < ctl->
nd;
id++)
3682 rad[
id] += 6.764e-5 / (2. * M_PI) *
PLANCK(
TSUN, ctl->
nu[
id])
3683 * tau_refl[id] * (1 - los->
sfeps[id]) * tau[
id] * rcos;
3690 for (
int id = 0;
id < ctl->
nd;
id++) {
3691 obs->
rad[id][ir] = rad[id];
3692 obs->
tau[id][ir] = tau[id];
3709 char cmd[2 *
LEN], rfmflg[
LEN] = {
"RAD TRA MIX LIN SFC" };
3711 double f[
NSHAPE], nu[
NSHAPE], nu0, nu1, obsz = -999, tsurf,
3712 xd[3], xo[3], xv[3], z[
NR], zmin, zmax;
3714 int n, nadir = 0, zenith = 0;
3720 for (
int ir = 1; ir < obs->
nr; ir++)
3724 ERRMSG(
"RFM interface requires identical observer positions!");
3727 for (
int iw = 0; iw < ctl->
nw; iw++)
3728 for (
int ip = 0; ip < atm->
np; ip++)
3729 if (atm->
k[iw][ip] != 0)
3730 ERRMSG(
"RFM interface cannot handle extinction data!");
3733 gsl_stats_minmax(&zmin, &zmax, atm->
z, 1, (
size_t) atm->
np);
3736 if (obs->
obsz[0] >= zmin && obs->
obsz[0] <= zmax) {
3737 obsz = obs->
obsz[0];
3738 strcat(rfmflg,
" OBS");
3742 for (
int ir = 0; ir < obs->
nr; ir++) {
3748 if (obs->
tpz[ir] <= zmin) {
3753 for (
int i = 0; i < 3; i++)
3754 xd[i] = xo[i] - xv[i];
3758 }
else if (obs->
tpz[ir] >= zmax - 1e-3 && obs->
vpz[ir] > obs->
obsz[ir]) {
3763 for (
int i = 0; i < 3; i++)
3764 xd[i] = xv[i] - xo[i];
3770 z[ir] = obs->
tpz[ir];
3772 if ((nadir > 0 && nadir < obs->nr)
3773 || (zenith > 0 && zenith < obs->nr)
3774 || (nadir > 0 && zenith > 0))
3775 ERRMSG(
"Limb, nadir, and zenith not simultaneously possible!");
3779 strcat(rfmflg,
" NAD");
3781 strcat(rfmflg,
" ZEN");
3784 tsurf = atm->
t[gsl_stats_min_index(atm->
z, 1, (
size_t) atm->
np)];
3787 if (!nadir && !zenith && !ctl->
refrac)
3788 strcat(rfmflg,
" GEO");
3792 strcat(rfmflg,
" CTM");
3798 for (
int id = 0;
id < ctl->
nd;
id++) {
3802 if (n <= 0 || n >
NSHAPE)
3803 ERRMSG(
"Missing or invalid filter function in lookup table!");
3804 memcpy(nu, tbl->
filt_nu[
id], (
size_t) n *
sizeof(
double));
3805 memcpy(f, tbl->
filt_f[
id], (
size_t) n *
sizeof(
double));
3813 if (!(out = fopen(
"rfm.drv",
"w")))
3814 ERRMSG(
"Cannot create file!");
3815 fprintf(out,
"*HDR\nRFM call by JURASSIC.\n");
3816 fprintf(out,
"*FLG\n%s\n", rfmflg);
3817 fprintf(out,
"*SPC\n%.4f %.4f 0.0005\n", nu0, nu1);
3818 fprintf(out,
"*GAS\n");
3819 for (
int ig = 0; ig < ctl->
ng; ig++)
3820 fprintf(out,
"%s\n", ctl->
emitter[ig]);
3821 fprintf(out,
"*ATM\nrfm.atm\n");
3822 fprintf(out,
"*TAN\n");
3823 for (
int ir = 0; ir < obs->
nr; ir++)
3824 fprintf(out,
"%g\n", z[ir]);
3825 fprintf(out,
"*SFC\n%g 1.0\n", tsurf);
3827 fprintf(out,
"*OBS\n%g\n", obsz);
3828 fprintf(out,
"*HIT\n%s\n", ctl->
rfmhit);
3829 fprintf(out,
"*XSC\n");
3830 for (
int ig = 0; ig < ctl->
ng; ig++)
3831 if (ctl->
rfmxsc[ig][0] !=
'-')
3832 fprintf(out,
"%s\n", ctl->
rfmxsc[ig]);
3833 fprintf(out,
"*END\n");
3837 if (system(
"rm -f rfm.runlog rad_*.asc tra_*.asc"))
3838 ERRMSG(
"Cannot remove temporary files!");
3841 sprintf(cmd,
"echo | %s", ctl->
rfmbin);
3843 ERRMSG(
"Error while calling RFM!");
3846 for (
int ir = 0; ir < obs->
nr; ir++) {
3853 if (system(
"rm -f rfm.drv rfm.atm rfm.runlog rad_*.asc tra_*.asc"))
3854 ERRMSG(
"Error while removing temporary files!");
3872 for (
int id = 0;
id < ctl->
nd;
id++)
3873 src[
id] =
LIN(tbl->
st[it], tbl->
sr[it][
id],
3874 tbl->
st[it + 1], tbl->
sr[it + 1][
id], t);
3885 const double radius = z +
RE;
3886 const double latrad = lat / 180. * M_PI;
3887 const double lonrad = lon / 180. * M_PI;
3888 const double coslat = cos(latrad);
3890 x[0] = radius * coslat * cos(lonrad);
3891 x[1] = radius * coslat * sin(lonrad);
3892 x[2] = radius * sin(latrad);
3901 const double mmair = 28.96456e-3, mmh2o = 18.0153e-3;
3903 const int ipts = 20;
3905 double dzmin = 1e99, e = 0;
3914 for (
int ip = 0; ip < atm->
np; ip++)
3915 if (fabs(atm->
z[ip] - ctl->
hydz) < dzmin) {
3916 dzmin = fabs(atm->
z[ip] - ctl->
hydz);
3921 for (
int ip = ipref + 1; ip < atm->
np; ip++) {
3923 for (
int i = 0; i < ipts; i++) {
3926 ipts - 1.0, atm->
q[ctl->
ig_h2o][ip], (
double) i);
3927 mean += (e * mmh2o + (1 - e) * mmair)
3929 /
LIN(0.0, atm->
t[ip - 1], ipts - 1.0, atm->
t[ip], (
double) i) / ipts;
3934 exp(log(atm->
p[ip - 1]) - mean * 1000 * (atm->
z[ip] - atm->
z[ip - 1]));
3938 for (
int ip = ipref - 1; ip >= 0; ip--) {
3940 for (
int i = 0; i < ipts; i++) {
3943 ipts - 1.0, atm->
q[ctl->
ig_h2o][ip], (
double) i);
3944 mean += (e * mmh2o + (1 - e) * mmair)
3946 /
LIN(0.0, atm->
t[ip + 1], ipts - 1.0, atm->
t[ip], (
double) i) / ipts;
3951 exp(log(atm->
p[ip + 1]) - mean * 1000 * (atm->
z[ip] - atm->
z[ip + 1]));
3963 sprintf(quantity,
"PRESSURE");
3966 sprintf(quantity,
"TEMPERATURE");
3968 for (
int ig = 0; ig < ctl->
ng; ig++)
3969 if (idx ==
IDXQ(ig))
3970 sprintf(quantity,
"%s", ctl->
emitter[ig]);
3972 for (
int iw = 0; iw < ctl->
nw; iw++)
3973 if (idx ==
IDXK(iw))
3974 sprintf(quantity,
"EXTINCT_WINDOW_%d", iw);
3977 sprintf(quantity,
"CLOUD_HEIGHT");
3980 sprintf(quantity,
"CLOUD_DEPTH");
3982 for (
int icl = 0; icl < ctl->
ncl; icl++)
3984 sprintf(quantity,
"CLOUD_EXTINCT_%.4f", ctl->
clnu[icl]);
3987 sprintf(quantity,
"SURFACE_TEMPERATURE");
3989 for (
int isf = 0; isf < ctl->
nsf; isf++)
3991 sprintf(quantity,
"SURFACE_EMISSIVITY_%.4f", ctl->
sfnu[isf]);
4001 LOG(1,
"Initialize source function table...");
4002 LOG(2,
"Number of data points: %d",
TBLNS);
4005 for (
int id = 0;
id < ctl->
nd;
id++) {
4009 for (
int i = 1; i < tbl->
filt_n[id]; i++)
4013#pragma omp parallel for default(none) shared(ctl,tbl,id,dnu)
4014 for (
int it = 0; it <
TBLNS; it++) {
4020 double fsum = tbl->
sr[it][id] = 0;
4021 for (
double fnu = tbl->
filt_nu[
id][0];
4022 fnu <= tbl->filt_nu[
id][tbl->
filt_n[
id] - 1]; fnu += dnu) {
4028 tbl->
sr[it][id] += ff *
PLANCK(tbl->
st[it], fnu);
4030 tbl->
sr[it][id] /= fsum;
4035 "channel= %.4f cm^-1 | T= %g ... %g K | B= %g ... %g W/(m^2 sr cm^-1)",
4036 ctl->
nu[
id], tbl->
st[0], tbl->
st[
TBLNS - 1], tbl->
sr[0][
id],
4056 *p =
LOGY(atm->
z[ip], atm->
p[ip], atm->
z[ip + 1], atm->
p[ip + 1], z);
4057 *t =
LIN(atm->
z[ip], atm->
t[ip], atm->
z[ip + 1], atm->
t[ip + 1], z);
4058 for (
int ig = 0; ig < ctl->
ng; ig++)
4060 LIN(atm->
z[ip], atm->
q[ig][ip], atm->
z[ip + 1], atm->
q[ig][ip + 1], z);
4061 for (
int iw = 0; iw < ctl->
nw; iw++)
4063 LIN(atm->
z[ip], atm->
k[iw][ip], atm->
z[ip + 1], atm->
k[iw][ip + 1], z);
4073 double tau_path[
ND][
NG],
4074 double tau_seg[
ND]) {
4076 double eps, lnp[
NG];
4079 for (
int ig = 0; ig < ctl->
ng; ig++)
4080 lnp[ig] = log(los->
cgp[ip][ig]);
4083 for (
int id = 0;
id < ctl->
nd;
id++) {
4089 for (
int ig = 0; ig < ctl->
ng; ig++) {
4092 if (tbl->
np[
id][ig] < 30 || los->
cgu[ip][ig] <= 0)
4096 else if (tau_path[
id][ig] < 1e-9)
4105 const int it0 =
locate_reg(tbl->
t[
id][ig][ipr], tbl->
nt[
id][ig][ipr],
4108 locate_reg(tbl->
t[
id][ig][ipr + 1], tbl->
nt[
id][ig][ipr + 1],
4112 if (tbl->
nt[
id][ig][ipr] < 2 || tbl->
nt[
id][ig][ipr + 1] < 2
4113 || tbl->
nu[
id][ig][ipr][it0] < 2
4114 || tbl->
nu[
id][ig][ipr][it0 + 1] < 2
4115 || tbl->
nu[
id][ig][ipr + 1][it1] < 2
4116 || tbl->
nu[
id][ig][ipr + 1][it1 + 1] < 2)
4122 const double logu = log(los->
cgu[ip][ig]);
4126 double eps11 =
intpol_tbl_eps(tbl, ig,
id, ipr + 1, it1 + 1, logu);
4129 eps00 =
LIN(tbl->
t[
id][ig][ipr][it0], eps00,
4130 tbl->
t[
id][ig][ipr][it0 + 1], eps01, los->
cgt[ip][ig]);
4131 eps11 =
LIN(tbl->
t[
id][ig][ipr + 1][it1], eps10,
4132 tbl->
t[
id][ig][ipr + 1][it1 + 1],
4133 eps11, los->
cgt[ip][ig]);
4136 eps00 =
LIN(tbl->
lnp[
id][ig][ipr], eps00,
4137 tbl->
lnp[
id][ig][ipr + 1], eps11, lnp[ig]);
4140 eps00 =
CLAMP(eps00, 0, 1);
4143 eps = 1 - (1 - eps00) / tau_path[
id][ig];
4148 tau_path[id][ig] *= (1 - eps);
4151 tau_seg[id] *= (1 - eps);
4163 double tau_path[
ND][
NG],
4164 double tau_seg[
ND]) {
4166 const double lnp = log(los->
p[ip]);
4171 for (
int id = 0;
id < ctl->
nd;
id++) {
4177 for (
int ig = 0; ig < ctl->
ng; ig++) {
4180 if (tbl->
np[
id][ig] < 30 || los->
cgu[ip][ig] <= 0)
4184 else if (tau_path[
id][ig] < 1e-9)
4194 locate_reg(tbl->
t[
id][ig][ipr], tbl->
nt[
id][ig][ipr], los->
t[ip]);
4196 locate_reg(tbl->
t[
id][ig][ipr + 1], tbl->
nt[
id][ig][ipr + 1],
4200 if (tbl->
nt[
id][ig][ipr] < 2 || tbl->
nt[
id][ig][ipr + 1] < 2
4201 || tbl->
nu[
id][ig][ipr][it0] < 2
4202 || tbl->
nu[
id][ig][ipr][it0 + 1] < 2
4203 || tbl->
nu[
id][ig][ipr + 1][it1] < 2
4204 || tbl->
nu[
id][ig][ipr + 1][it1 + 1] < 2)
4210 const double logeps = log(1.0 - tau_path[
id][ig]);
4218 log(u + los->
u[ip][ig]));
4222 log(u + los->
u[ip][ig]));
4224 u =
intpol_tbl_u(tbl, ig,
id, ipr + 1, it1 + 1, logeps);
4226 log(u + los->
u[ip][ig]));
4229 eps00 =
LIN(tbl->
t[
id][ig][ipr][it0], eps00,
4230 tbl->
t[
id][ig][ipr][it0 + 1], eps01, los->
t[ip]);
4231 eps11 =
LIN(tbl->
t[
id][ig][ipr + 1][it1], eps10,
4232 tbl->
t[
id][ig][ipr + 1][it1 + 1], eps11, los->
t[ip]);
4235 eps00 =
LIN(tbl->
lnp[
id][ig][ipr], eps00,
4236 tbl->
lnp[
id][ig][ipr + 1], eps11, lnp);
4239 eps00 =
CLAMP(eps00, 0, 1);
4242 eps = 1 - (1 - eps00) / tau_path[
id][ig];
4247 tau_path[id][ig] *= (1 - eps);
4250 tau_seg[id] *= (1 - eps);
4263 const double logu) {
4265 const int nu = tbl->
nu[id][ig][ip][it];
4266 const float *logu_arr = tbl->
logu[id][ig][ip][it];
4267 const float *logeps_arr = tbl->
logeps[id][ig][ip][it];
4270 const double logu_min = (double) logu_arr[0];
4271 const double logu_max = (double) logu_arr[nu - 1];
4275 if (logu < logu_min) {
4276 const double logeps_min = (double) logeps_arr[0];
4277 return exp(logeps_min + logu - logu_min);
4287 if (logu > logu_max) {
4288 const double eps_max = exp((
double) logeps_arr[nu - 1]);
4289 const double l1m_eps_max = log1p(-eps_max);
4290 const double r = exp(logu - logu_max);
4291 return -expm1(l1m_eps_max * r);
4295 const int idx =
locate_tbl(logu_arr, nu, logu);
4296 return exp(
LIN(logu_arr[idx], logeps_arr[idx],
4297 logu_arr[idx + 1], logeps_arr[idx + 1], logu));
4308 const double logeps) {
4310 const int nu = tbl->
nu[id][ig][ip][it];
4311 const float *logeps_arr = tbl->
logeps[id][ig][ip][it];
4312 const float *logu_arr = tbl->
logu[id][ig][ip][it];
4315 const double logeps_min = (double) logeps_arr[0];
4316 const double logeps_max = (double) logeps_arr[nu - 1];
4320 if (logeps < logeps_min) {
4321 const double logu_min = (double) logu_arr[0];
4322 return exp(logu_min + logeps - logeps_min);
4333 if (logeps > logeps_max) {
4334 const double u_max = exp((
double) logu_arr[nu - 1]);
4335 const double l1m_eps_max = log1p(-exp(logeps_max));
4336 const double logtau = log1p(-exp(logeps));
4337 return u_max * (logtau / l1m_eps_max);
4341 const int idx =
locate_tbl(logeps_arr, nu, logeps);
4342 return exp(
LIN(logeps_arr[idx], logu_arr[idx],
4343 logeps_arr[idx + 1], logu_arr[idx + 1], logeps));
4367 const time_t jsec0 = (time_t) jsec + timegm(&t0);
4368 t1 = gmtime(&jsec0);
4370 *year = t1->tm_year + 1900;
4371 *mon = t1->tm_mon + 1;
4373 *hour = t1->tm_hour;
4376 *remain = jsec - floor(jsec);
4389 const size_t m = k->size1;
4390 const size_t n = k->size2;
4393 gsl_vector *x0 = gsl_vector_alloc(n);
4394 gsl_vector *yy0 = gsl_vector_alloc(m);
4400 formod(ctl, tbl, atm, obs);
4403 atm2x(ctl, atm, x0, iqa, NULL);
4404 obs2y(ctl, obs, yy0, NULL, NULL);
4407 gsl_matrix_set_zero(k);
4410#pragma omp parallel for default(none) shared(ctl,tbl,atm,obs,k,x0,yy0,n,m,iqa)
4411 for (
size_t j = 0; j < n; j++) {
4418 gsl_vector *x1 = gsl_vector_alloc(n);
4419 gsl_vector *yy1 = gsl_vector_alloc(m);
4424 h =
MAX(fabs(0.01 * gsl_vector_get(x0, j)), 1e-7);
4425 else if (iqa[j] ==
IDXT)
4427 else if (iqa[j] >=
IDXQ(0) && iqa[j] <
IDXQ(ctl->
ng))
4428 h =
MAX(fabs(0.01 * gsl_vector_get(x0, j)), 1e-15);
4429 else if (iqa[j] >=
IDXK(0) && iqa[j] <
IDXK(ctl->
nw))
4435 else if (iqa[j] ==
IDXSFT)
4440 ERRMSG(
"Cannot set perturbation size!");
4443 gsl_vector_memcpy(x1, x0);
4444 gsl_vector_set(x1, j, gsl_vector_get(x1, j) + h);
4447 x2atm(ctl, x1, atm1);
4450 formod(ctl, tbl, atm1, obs1);
4453 obs2y(ctl, obs1, yy1, NULL, NULL);
4456 for (
size_t i = 0; i < m; i++)
4457 gsl_matrix_set(k, i, j,
4458 (gsl_vector_get(yy1, i) - gsl_vector_get(yy0, i)) / h);
4461 gsl_vector_free(x1);
4462 gsl_vector_free(yy1);
4468 gsl_vector_free(x0);
4469 gsl_vector_free(yy0);
4482 int i = (ihi + ilo) >> 1;
4484 if (xx[i] < xx[i + 1])
4485 while (ihi > ilo + 1) {
4486 i = (ihi + ilo) >> 1;
4492 while (ihi > ilo + 1) {
4493 i = (ihi + ilo) >> 1;
4511 const int i = (int) ((x - xx[0]) / (xx[1] - xx[0]));
4531 int i = (ihi + ilo) >> 1;
4533 while (ihi > ilo + 1) {
4534 i = (ihi + ilo) >> 1;
4552 const size_t n = a->size1;
4555 for (
size_t i = 0; i < n && diag; i++)
4556 for (
size_t j = i + 1; j < n; j++)
4557 if (gsl_matrix_get(a, i, j) != 0) {
4564 for (
size_t i = 0; i < n; i++)
4565 gsl_matrix_set(a, i, i, 1 / gsl_matrix_get(a, i, i));
4569 gsl_linalg_cholesky_decomp(a);
4570 gsl_linalg_cholesky_invert(a);
4577 const gsl_matrix *a,
4578 const gsl_vector *b,
4579 const int transpose,
4583 const size_t m = a->size1;
4584 const size_t n = a->size2;
4587 gsl_matrix *aux = gsl_matrix_alloc(m, n);
4590 if (transpose == 1) {
4593 for (
size_t i = 0; i < m; i++)
4594 for (
size_t j = 0; j < n; j++)
4595 gsl_matrix_set(aux, i, j,
4596 gsl_vector_get(b, i) * gsl_matrix_get(a, i, j));
4599 gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, aux, aux, 0.0, c);
4603 else if (transpose == 2) {
4606 for (
size_t i = 0; i < m; i++)
4607 for (
size_t j = 0; j < n; j++)
4608 gsl_matrix_set(aux, i, j,
4609 gsl_matrix_get(a, i, j) * gsl_vector_get(b, j));
4612 gsl_blas_dgemm(CblasNoTrans, CblasTrans, 1.0, aux, aux, 0.0, c);
4616 gsl_matrix_free(aux);
4631 for (
int ir = 0; ir < obs->
nr; ir++)
4632 for (
int id = 0;
id < ctl->
nd;
id++)
4633 if (isfinite(obs->
rad[
id][ir])) {
4635 gsl_vector_set(y, m, obs->
rad[
id][ir]);
4658 double disq = 0, lmpar = 0.001;
4672 const size_t m =
obs2y(ctl, obs_meas, NULL, NULL, NULL);
4673 const size_t n =
atm2x(ctl, atm_apr, NULL, iqa, ipa);
4674 if (m == 0 || n == 0) {
4675 WARN(
"Check problem definition (m = 0 or n = 0)!");
4681 gsl_matrix *a = gsl_matrix_alloc(n, n);
4682 gsl_matrix *cov = gsl_matrix_alloc(n, n);
4683 gsl_matrix *k_i = gsl_matrix_alloc(m, n);
4684 gsl_matrix *s_a_inv = gsl_matrix_alloc(n, n);
4686 gsl_vector *b = gsl_vector_alloc(n);
4687 gsl_vector *dx = gsl_vector_alloc(n);
4688 gsl_vector *dy = gsl_vector_alloc(m);
4689 gsl_vector *sig_eps_inv = gsl_vector_alloc(m);
4690 gsl_vector *sig_formod = gsl_vector_alloc(m);
4691 gsl_vector *sig_noise = gsl_vector_alloc(m);
4692 gsl_vector *x_a = gsl_vector_alloc(n);
4693 gsl_vector *x_i = gsl_vector_alloc(n);
4694 gsl_vector *x_step = gsl_vector_alloc(n);
4695 gsl_vector *y_aux = gsl_vector_alloc(m);
4696 gsl_vector *y_i = gsl_vector_alloc(m);
4697 gsl_vector *y_m = gsl_vector_alloc(m);
4702 formod(ctl, tbl, atm_i, obs_i);
4705 atm2x(ctl, atm_apr, x_a, NULL, NULL);
4706 atm2x(ctl, atm_i, x_i, NULL, NULL);
4707 obs2y(ctl, obs_meas, y_m, NULL, NULL);
4708 obs2y(ctl, obs_i, y_i, NULL, NULL);
4711 set_cov_apr(ret, ctl, atm_apr, iqa, ipa, s_a_inv);
4713 atm_i, obs_i,
"x",
"x",
"r");
4717 set_cov_meas(ret, ctl, obs_meas, sig_noise, sig_formod, sig_eps_inv);
4720 gsl_vector_memcpy(dx, x_i);
4721 gsl_vector_sub(dx, x_a);
4722 gsl_vector_memcpy(dy, y_m);
4723 gsl_vector_sub(dy, y_i);
4729 LOG(2,
"it= %d / chi^2/m= %g", 0, *chisq);
4732 kernel(ctl, tbl, atm_i, obs_i, k_i);
4739 for (
int it = 1; it <= ret->
conv_itmax; it++) {
4742 double chisq_old = *chisq;
4746 kernel(ctl, tbl, atm_i, obs_i, k_i);
4753 for (
size_t i = 0; i < m; i++)
4754 gsl_vector_set(y_aux, i, gsl_vector_get(dy, i)
4755 *
POW2(gsl_vector_get(sig_eps_inv, i)));
4756 gsl_blas_dgemv(CblasTrans, 1.0, k_i, y_aux, 0.0, b);
4757 gsl_blas_dgemv(CblasNoTrans, -1.0, s_a_inv, dx, 1.0, b);
4760 for (
int it2 = 0; it2 < 20; it2++) {
4763 gsl_matrix_memcpy(a, s_a_inv);
4764 gsl_matrix_scale(a, 1 + lmpar);
4765 gsl_matrix_add(a, cov);
4768 gsl_linalg_cholesky_decomp(a);
4769 gsl_linalg_cholesky_solve(a, b, x_step);
4772 gsl_vector_add(x_i, x_step);
4775 x2atm(ctl, x_i, atm_i);
4778 for (
int ip = 0; ip < atm_i->
np; ip++) {
4779 atm_i->
p[ip] =
CLAMP(atm_i->
p[ip], 5e-7, 5e4);
4780 atm_i->
t[ip] =
CLAMP(atm_i->
t[ip], 100, 400);
4781 for (
int ig = 0; ig < ctl->
ng; ig++)
4782 atm_i->
q[ig][ip] =
CLAMP(atm_i->
q[ig][ip], 0, 1);
4783 for (
int iw = 0; iw < ctl->
nw; iw++)
4784 atm_i->
k[iw][ip] =
MAX(atm_i->
k[iw][ip], 0);
4788 for (
int icl = 0; icl < ctl->
ncl; icl++)
4789 atm_i->
clk[icl] =
MAX(atm_i->
clk[icl], 0);
4791 for (
int isf = 0; isf < ctl->
nsf; isf++)
4795 formod(ctl, tbl, atm_i, obs_i);
4796 obs2y(ctl, obs_i, y_i, NULL, NULL);
4799 gsl_vector_memcpy(dx, x_i);
4800 gsl_vector_sub(dx, x_a);
4801 gsl_vector_memcpy(dy, y_m);
4802 gsl_vector_sub(dy, y_i);
4808 if (*chisq > chisq_old) {
4810 gsl_vector_sub(x_i, x_step);
4818 LOG(2,
"it= %d / chi^2/m= %g", it, *chisq);
4821 gsl_blas_ddot(x_step, b, &disq);
4840 atm_i, obs_i,
"y",
"x",
"r");
4843 gsl_matrix *auxnm = gsl_matrix_alloc(n, m);
4844 gsl_matrix *corr = gsl_matrix_alloc(n, n);
4845 gsl_matrix *gain = gsl_matrix_alloc(n, m);
4850 gsl_matrix_add(cov, s_a_inv);
4855 atm_i, obs_i,
"x",
"x",
"r");
4859 for (
size_t i = 0; i < n; i++)
4860 for (
size_t j = 0; j < n; j++)
4861 gsl_matrix_set(corr, i, j, gsl_matrix_get(cov, i, j)
4862 / sqrt(gsl_matrix_get(cov, i, i))
4863 / sqrt(gsl_matrix_get(cov, j, j)));
4865 atm_i, obs_i,
"x",
"x",
"r");
4869 for (
size_t i = 0; i < n; i++)
4870 for (
size_t j = 0; j < m; j++)
4871 gsl_matrix_set(auxnm, i, j, gsl_matrix_get(k_i, j, i)
4872 *
POW2(gsl_vector_get(sig_eps_inv, j)));
4873 gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, cov, auxnm, 0.0, gain);
4875 atm_i, obs_i,
"x",
"y",
"c");
4887 gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, gain, k_i, 0.0, a);
4889 atm_i, obs_i,
"x",
"x",
"r");
4895 gsl_matrix_free(auxnm);
4896 gsl_matrix_free(corr);
4897 gsl_matrix_free(gain);
4905 gsl_matrix_free(cov);
4906 gsl_matrix_free(k_i);
4907 gsl_matrix_free(s_a_inv);
4910 gsl_vector_free(dx);
4911 gsl_vector_free(dy);
4912 gsl_vector_free(sig_eps_inv);
4913 gsl_vector_free(sig_formod);
4914 gsl_vector_free(sig_noise);
4915 gsl_vector_free(x_a);
4916 gsl_vector_free(x_i);
4917 gsl_vector_free(x_step);
4918 gsl_vector_free(y_aux);
4919 gsl_vector_free(y_i);
4920 gsl_vector_free(y_m);
4935 const double h = 0.02, zrefrac = 60;
4937 double ex0[3], ex1[3], k[
NW], lat, lon, n, ng[3], norm, p, q[
NG], t,
4938 x[3], xh[3], xobs[3], xvp[3], z = 1e99, zmax, zmin;
4945 obs->
tpz[ir] = obs->
vpz[ir];
4950 gsl_stats_minmax(&zmin, &zmax, atm->
z, 1, (
size_t) atm->
np);
4953 if (obs->
obsz[ir] < zmin)
4954 ERRMSG(
"Observer below surface!");
4961 for (
int i = 0; i < 3; i++)
4962 ex0[i] = xvp[i] - xobs[i];
4964 for (
int i = 0; i < 3; i++)
4968 for (
int i = 0; i < 3; i++)
4972 if (obs->
obsz[ir] > zmax) {
4973 double dmax = norm, dmin = 0;
4974 while (fabs(dmin - dmax) > 0.001) {
4975 const double d = (dmax + dmin) / 2;
4976 for (
int i = 0; i < 3; i++)
4977 x[i] = xobs[i] + d * ex0[i];
4979 if (z <= zmax && z > zmax - 0.001)
4981 if (z < zmax - 0.0005)
4992 double ds = ctl->
rayds;
4993 if (ctl->
raydz > 0) {
4995 for (
int i = 0; i < 3; i++)
4996 xh[i] = x[i] / norm;
4997 const double cosa = fabs(
DOTP(ex0, xh));
5006 if (z < zmin || z > zmax) {
5007 stop = (z < zmin ? 2 : 1);
5010 zmin ? zmin : zmax) - los->
z[los->
np - 1]) / (z - los->
z[los->
np -
5013 los->
lat[los->
np - 1], xh);
5014 for (
int i = 0; i < 3; i++)
5015 x[i] = xh[i] + frac * (x[i] - xh[i]);
5017 los->
ds[los->
np - 1] = ds * frac;
5025 los->
lon[los->
np] = lon;
5026 los->
lat[los->
np] = lat;
5027 los->
z[los->
np] = z;
5028 los->
p[los->
np] = p;
5029 los->
t[los->
np] = t;
5030 for (
int ig = 0; ig < ctl->
ng; ig++)
5031 los->
q[los->
np][ig] = q[ig];
5032 for (
int id = 0;
id < ctl->
nd;
id++)
5033 los->
k[los->
np][
id] = k[ctl->
window[
id]];
5034 los->
ds[los->
np] = ds;
5037 if (ctl->
ncl > 0 && atm->
cldz > 0) {
5038 const double aux = exp(-0.5 *
POW2((z - atm->
clz) / atm->
cldz));
5039 for (
int id = 0;
id < ctl->
nd;
id++) {
5043 ctl->
clnu[icl + 1], atm->
clk[icl + 1], ctl->
nu[
id]);
5049 ERRMSG(
"Too many LOS points!");
5055 if (ctl->
nsf > 0 && atm->
sft > 0)
5057 los->
sft = (stop == 2 ? t : -999);
5060 for (
int id = 0;
id < ctl->
nd;
id++) {
5061 los->
sfeps[id] = 1.0;
5065 ctl->
sfnu[isf + 1], atm->
sfeps[isf + 1],
5075 if (ctl->
refrac && z <= zrefrac)
5081 for (
int i = 0; i < 3; i++)
5082 ex1[i] = ex0[i] * n;
5085 if (ctl->
refrac && z <= zrefrac) {
5086 for (
int i = 0; i < 3; i++)
5087 xh[i] = x[i] + 0.5 * ds * ex0[i];
5091 for (
int i = 0; i < 3; i++) {
5095 ng[i] = (
REFRAC(p, t) - n) / h;
5099 for (
int i = 0; i < 3; i++)
5103 for (
int i = 0; i < 3; i++)
5104 ex1[i] += ds * ng[i];
5108 for (
int i = 0; i < 3; i++)
5112 for (
int i = 0; i < 3; i++)
5113 x[i] += 0.5 * ds * (ex0[i] + ex1[i]);
5116 for (
int i = 0; i < 3; i++)
5124 for (
int ip = los->
np - 1; ip >= 1; ip--)
5125 los->
ds[ip] = 0.5 * (los->
ds[ip - 1] + los->
ds[ip]);
5129 for (
int ip = 0; ip < los->
np; ip++)
5130 for (
int ig = 0; ig < ctl->
ng; ig++)
5131 los->
u[ip][ig] = 10 * los->
q[ip][ig] * los->
p[ip]
5132 / (
KB * los->
t[ip]) * los->
ds[ip];
5135 for (
int ig = 0; ig < ctl->
ng; ig++) {
5136 los->
cgu[0][ig] = los->
u[0][ig];
5137 los->
cgp[0][ig] = los->
u[0][ig] * los->
p[0];
5138 los->
cgt[0][ig] = los->
u[0][ig] * los->
t[0];
5140 for (
int ip = 1; ip < los->
np; ip++)
5141 for (
int ig = 0; ig < ctl->
ng; ig++) {
5142 los->
cgu[ip][ig] = los->
cgu[ip - 1][ig] + los->
u[ip][ig];
5143 los->
cgp[ip][ig] = los->
cgp[ip - 1][ig] + los->
u[ip][ig] * los->
p[ip];
5144 los->
cgt[ip][ig] = los->
cgt[ip - 1][ig] + los->
u[ip][ig] * los->
t[ip];
5146 for (
int ip = 0; ip < los->
np; ip++)
5147 for (
int ig = 0; ig < ctl->
ng; ig++)
5148 if (los->
cgu[ip][ig] != 0) {
5149 los->
cgp[ip][ig] /= los->
cgu[ip][ig];
5150 los->
cgt[ip][ig] /= los->
cgu[ip][ig];
5157 const char *dirname,
5158 const char *filename,
5167 if (dirname != NULL)
5168 sprintf(file,
"%s/%s", dirname, filename);
5170 sprintf(file,
"%s", filename);
5173 LOG(1,
"Read atmospheric data: %s", file);
5180 else if (ctl->
atmfmt == 2)
5184 else if (ctl->
atmfmt == 3)
5189 ERRMSG(
"Could not read any data!");
5193 LOG(2,
"Number of data points: %d", atm->
np);
5194 gsl_stats_minmax(&mini, &maxi, atm->
time, 1, (
size_t) atm->
np);
5195 LOG(2,
"Time range: %.2f ... %.2f s", mini, maxi);
5196 gsl_stats_minmax(&mini, &maxi, atm->
z, 1, (
size_t) atm->
np);
5197 LOG(2,
"Altitude range: %g ... %g km", mini, maxi);
5198 gsl_stats_minmax(&mini, &maxi, atm->
lon, 1, (
size_t) atm->
np);
5199 LOG(2,
"Longitude range: %g ... %g deg", mini, maxi);
5200 gsl_stats_minmax(&mini, &maxi, atm->
lat, 1, (
size_t) atm->
np);
5201 LOG(2,
"Latitude range: %g ... %g deg", mini, maxi);
5202 gsl_stats_minmax(&mini, &maxi, atm->
p, 1, (
size_t) atm->
np);
5203 LOG(2,
"Pressure range: %g ... %g hPa", maxi, mini);
5204 gsl_stats_minmax(&mini, &maxi, atm->
t, 1, (
size_t) atm->
np);
5205 LOG(2,
"Temperature range: %g ... %g K", mini, maxi);
5206 for (
int ig = 0; ig < ctl->
ng; ig++) {
5207 gsl_stats_minmax(&mini, &maxi, atm->
q[ig], 1, (
size_t) atm->
np);
5208 LOG(2,
"Emitter %s range: %g ... %g ppv", ctl->
emitter[ig], mini, maxi);
5210 for (
int iw = 0; iw < ctl->
nw; iw++) {
5211 gsl_stats_minmax(&mini, &maxi, atm->
k[iw], 1, (
size_t) atm->
np);
5212 LOG(2,
"Extinction range (window %d): %g ... %g km^-1", iw, mini, maxi);
5215 LOG(2,
"Cloud layer: z= %g km | dz= %g km | k= %g ... %g km^-1",
5218 LOG(2,
"Cloud layer: none");
5221 "Surface: T_s = %g K | eps= %g ... %g",
5224 LOG(2,
"Surface: none");
5230 const char *filename,
5239 if (!(in = fopen(filename,
"r")))
5240 ERRMSG(
"Cannot open file!");
5243 char line[
LEN], *tok;
5244 while (fgets(line,
LEN, in)) {
5247 TOK(line, tok,
"%lg", atm->
time[atm->
np]);
5248 TOK(NULL, tok,
"%lg", atm->
z[atm->
np]);
5249 TOK(NULL, tok,
"%lg", atm->
lon[atm->
np]);
5250 TOK(NULL, tok,
"%lg", atm->
lat[atm->
np]);
5251 TOK(NULL, tok,
"%lg", atm->
p[atm->
np]);
5252 TOK(NULL, tok,
"%lg", atm->
t[atm->
np]);
5253 for (
int ig = 0; ig < ctl->
ng; ig++)
5254 TOK(NULL, tok,
"%lg", atm->
q[ig][atm->
np]);
5255 for (
int iw = 0; iw < ctl->
nw; iw++)
5256 TOK(NULL, tok,
"%lg", atm->
k[iw][atm->
np]);
5257 if (ctl->
ncl > 0 && atm->
np == 0) {
5258 TOK(NULL, tok,
"%lg", atm->
clz);
5259 TOK(NULL, tok,
"%lg", atm->
cldz);
5260 for (
int icl = 0; icl < ctl->
ncl; icl++)
5261 TOK(NULL, tok,
"%lg", atm->
clk[icl]);
5263 if (ctl->
nsf > 0 && atm->
np == 0) {
5264 TOK(NULL, tok,
"%lg", atm->
sft);
5265 for (
int isf = 0; isf < ctl->
nsf; isf++)
5266 TOK(NULL, tok,
"%lg", atm->
sfeps[isf]);
5270 if ((++atm->
np) >
NP)
5271 ERRMSG(
"Too many data points!");
5281 const char *filename,
5287 if (!(in = fopen(filename,
"r")))
5288 ERRMSG(
"Cannot open file!");
5295 if (memcmp(magic,
"ATM1", 4) != 0)
5296 ERRMSG(
"Invalid magic string!");
5298 int ng, nw, ncl, nsf;
5311 if (ng != ctl->
ng || nw != ctl->
nw || ncl != ctl->
ncl || nsf != ctl->
nsf)
5312 ERRMSG(
"Error reading file header!");
5321 ERRMSG(
"Too many data points!");
5340 for (
int ig = 0; ig < ctl->
ng; ig++)
5341 FREAD(atm->
q[ig],
double,
5344 for (
int iw = 0; iw < ctl->
nw; iw++)
5345 FREAD(atm->
k[iw],
double,
5375 const char *filename,
5380 int ncid, var_time, var_z, var_lon, var_lat, var_p, var_t, var_q[
NG],
5381 var_k[
NW], var_cz = -1, var_cdz = -1, var_ck[
NCL], var_sft =
5382 -1, var_sfe[
NSF], var_nlev = -1;
5387 NC(nc_open(filename, NC_NOWRITE, &ncid));
5390 size_t start[2] = { (size_t) profile, 0 };
5391 size_t count[2] = { 1, 0 };
5394 NC(nc_inq_varid(ncid,
"nlev", &var_nlev));
5395 NC(nc_get_vara_int(ncid, var_nlev, start, count, &atm->
np));
5396 if (atm->
np < 1 || atm->
np >
NP)
5397 ERRMSG(
"Number of level out of range!");
5400 count[1] = (size_t) atm->
np;
5403 NC(nc_inq_varid(ncid,
"time", &var_time));
5404 NC(nc_inq_varid(ncid,
"z", &var_z));
5405 NC(nc_inq_varid(ncid,
"lon", &var_lon));
5406 NC(nc_inq_varid(ncid,
"lat", &var_lat));
5407 NC(nc_inq_varid(ncid,
"p", &var_p));
5408 NC(nc_inq_varid(ncid,
"t", &var_t));
5411 for (
int ig = 0; ig < ctl->
ng; ig++)
5412 NC(nc_inq_varid(ncid, ctl->
emitter[ig], &var_q[ig]));
5415 for (
int iw = 0; iw < ctl->
nw; iw++) {
5416 sprintf(varname,
"ext_win_%d", iw);
5417 NC(nc_inq_varid(ncid, varname, &var_k[iw]));
5422 NC(nc_inq_varid(ncid,
"cld_z", &var_cz));
5423 NC(nc_inq_varid(ncid,
"cld_dz", &var_cdz));
5424 for (
int icl = 0; icl < ctl->
ncl; icl++) {
5425 sprintf(varname,
"cld_k_%.4f", ctl->
clnu[icl]);
5426 NC(nc_inq_varid(ncid, varname, &var_ck[icl]));
5432 NC(nc_inq_varid(ncid,
"srf_t", &var_sft));
5433 for (
int isf = 0; isf < ctl->
nsf; isf++) {
5434 sprintf(varname,
"srf_eps_%.4f", ctl->
sfnu[isf]);
5435 NC(nc_inq_varid(ncid, varname, &var_sfe[isf]));
5440 NC(nc_get_vara_double(ncid, var_time, start, count, atm->
time));
5441 NC(nc_get_vara_double(ncid, var_z, start, count, atm->
z));
5442 NC(nc_get_vara_double(ncid, var_lon, start, count, atm->
lon));
5443 NC(nc_get_vara_double(ncid, var_lat, start, count, atm->
lat));
5444 NC(nc_get_vara_double(ncid, var_p, start, count, atm->
p));
5445 NC(nc_get_vara_double(ncid, var_t, start, count, atm->
t));
5448 for (
int ig = 0; ig < ctl->
ng; ig++)
5449 NC(nc_get_vara_double(ncid, var_q[ig], start, count, atm->
q[ig]));
5452 for (
int iw = 0; iw < ctl->
nw; iw++)
5453 NC(nc_get_vara_double(ncid, var_k[iw], start, count, atm->
k[iw]));
5457 NC(nc_get_vara_double(ncid, var_cz, start, count, &atm->
clz));
5458 NC(nc_get_vara_double(ncid, var_cdz, start, count, &atm->
cldz));
5459 for (
int icl = 0; icl < ctl->
ncl; icl++)
5460 NC(nc_get_vara_double(ncid, var_ck[icl], start, count, &atm->
clk[icl]));
5465 NC(nc_get_vara_double(ncid, var_sft, start, count, &atm->
sft));
5467 for (
int isf = 0; isf < ctl->
nsf; isf++)
5468 NC(nc_get_vara_double
5469 (ncid, var_sfe[isf], start, count, &atm->
sfeps[isf]));
5484 LOG(1,
"\nJuelich Rapid Spectral Simulation Code (JURASSIC)\n"
5485 "(executable: %s | version: %s | compiled: %s, %s)\n",
5486 argv[0], VERSION, __DATE__, __TIME__);
5489 ctl->
ng = (int)
scan_ctl(argc, argv,
"NG", -1,
"0", NULL);
5490 if (ctl->
ng < 0 || ctl->
ng >
NG)
5491 ERRMSG(
"Set 0 <= NG <= MAX!");
5492 for (
int ig = 0; ig < ctl->
ng; ig++)
5500 ctl->
nd = (int)
scan_ctl(argc, argv,
"ND", -1,
"0", NULL);
5501 if (ctl->
nd < 0 || ctl->
nd >
ND)
5502 ERRMSG(
"Set 0 <= ND <= MAX!");
5503 for (
int id = 0;
id < ctl->
nd;
id++)
5504 ctl->
nu[
id] =
scan_ctl(argc, argv,
"NU",
id,
"", NULL);
5507 ctl->
nw = (int)
scan_ctl(argc, argv,
"NW", -1,
"1", NULL);
5508 if (ctl->
nw < 0 || ctl->
nw >
NW)
5509 ERRMSG(
"Set 0 <= NW <= MAX!");
5510 for (
int id = 0;
id < ctl->
nd;
id++)
5511 ctl->
window[
id] = (
int)
scan_ctl(argc, argv,
"WINDOW",
id,
"0", NULL);
5514 ctl->
ncl = (int)
scan_ctl(argc, argv,
"NCL", -1,
"0", NULL);
5516 ERRMSG(
"Set 0 <= NCL <= MAX!");
5519 for (
int icl = 0; icl < ctl->
ncl; icl++)
5520 ctl->
clnu[icl] =
scan_ctl(argc, argv,
"CLNU", icl,
"", NULL);
5523 ctl->
nsf = (int)
scan_ctl(argc, argv,
"NSF", -1,
"0", NULL);
5525 ERRMSG(
"Set 0 <= NSF <= MAX!");
5528 for (
int isf = 0; isf < ctl->
nsf; isf++)
5529 ctl->
sfnu[isf] =
scan_ctl(argc, argv,
"SFNU", isf,
"", NULL);
5530 ctl->
sftype = (int)
scan_ctl(argc, argv,
"SFTYPE", -1,
"2", NULL);
5532 ERRMSG(
"Set 0 <= SFTYPE <= 3!");
5533 ctl->
sfsza =
scan_ctl(argc, argv,
"SFSZA", -1,
"-999", NULL);
5537 ctl->
tblfmt = (int)
scan_ctl(argc, argv,
"TBLFMT", -1,
"1", NULL);
5539 ERRMSG(
"Unknown look-up table file format, set TBLFMT to 1, 2, or 3!");
5542 ctl->
atmfmt = (int)
scan_ctl(argc, argv,
"ATMFMT", -1,
"1", NULL);
5544 ERRMSG(
"Unknown atmospheric file format, set ATMFMT to 1, 2, or 3!");
5545 ctl->
obsfmt = (int)
scan_ctl(argc, argv,
"OBSFMT", -1,
"1", NULL);
5547 ERRMSG(
"Unknown observation file format, set OBSFMT to 1, 2, or 3!");
5550 ctl->
hydz =
scan_ctl(argc, argv,
"HYDZ", -1,
"-999", NULL);
5555 ctl->
ctm_n2 = (int)
scan_ctl(argc, argv,
"CTM_N2", -1,
"1", NULL);
5556 ctl->
ctm_o2 = (int)
scan_ctl(argc, argv,
"CTM_O2", -1,
"1", NULL);
5559 ctl->
refrac = (int)
scan_ctl(argc, argv,
"REFRAC", -1,
"1", NULL);
5561 ctl->
raydz =
scan_ctl(argc, argv,
"RAYDZ", -1,
"0.1", NULL);
5565 if (ctl->
fov[0] !=
'-')
5573 for (
int ig = 0; ig < ctl->
ng; ig++) {
5577 for (
int iw = 0; iw < ctl->
nw; iw++) {
5590 (int)
scan_ctl(argc, argv,
"WRITE_MATRIX", -1,
"0", NULL);
5593 ctl->
formod = (int)
scan_ctl(argc, argv,
"FORMOD", -1,
"1", NULL);
5596 for (
int ig = 0; ig < ctl->
ng; ig++)
5603 const char *dirname,
5604 const char *filename,
5605 gsl_matrix *matrix) {
5614 if (dirname != NULL)
5615 sprintf(file,
"%s/%s", dirname, filename);
5617 sprintf(file,
"%s", filename);
5620 LOG(1,
"Read matrix: %s", file);
5624 if (!(in = fopen(file,
"r")))
5625 ERRMSG(
"Cannot open file!");
5628 gsl_matrix_set_zero(matrix);
5629 while (fgets(line,
LEN, in))
5630 if (sscanf(line,
"%d %s %s %s %s %s %d %s %s %s %s %s %lg",
5631 &i, dum, dum, dum, dum, dum,
5632 &j, dum, dum, dum, dum, dum, &value) == 13)
5633 gsl_matrix_set(matrix, (
size_t) i, (
size_t) j, value);
5642 const char *dirname,
5643 const char *filename,
5649 if (dirname != NULL)
5650 sprintf(file,
"%s/%s", dirname, filename);
5652 sprintf(file,
"%s", filename);
5655 LOG(1,
"Read observation data: %s", file);
5662 else if (ctl->
obsfmt == 2)
5666 else if (ctl->
obsfmt == 3)
5671 ERRMSG(
"Could not read any data!");
5675 LOG(2,
"Number of ray paths: %d", obs->
nr);
5676 gsl_stats_minmax(&mini, &maxi, obs->
time, 1, (
size_t) obs->
nr);
5677 LOG(2,
"Time range: %.2f ... %.2f s", mini, maxi);
5678 gsl_stats_minmax(&mini, &maxi, obs->
obsz, 1, (
size_t) obs->
nr);
5679 LOG(2,
"Observer altitude range: %g ... %g km", mini, maxi);
5680 gsl_stats_minmax(&mini, &maxi, obs->
obslon, 1, (
size_t) obs->
nr);
5681 LOG(2,
"Observer longitude range: %g ... %g deg", mini, maxi);
5682 gsl_stats_minmax(&mini, &maxi, obs->
obslat, 1, (
size_t) obs->
nr);
5683 LOG(2,
"Observer latitude range: %g ... %g deg", mini, maxi);
5684 gsl_stats_minmax(&mini, &maxi, obs->
vpz, 1, (
size_t) obs->
nr);
5685 LOG(2,
"View point altitude range: %g ... %g km", mini, maxi);
5686 gsl_stats_minmax(&mini, &maxi, obs->
vplon, 1, (
size_t) obs->
nr);
5687 LOG(2,
"View point longitude range: %g ... %g deg", mini, maxi);
5688 gsl_stats_minmax(&mini, &maxi, obs->
vplat, 1, (
size_t) obs->
nr);
5689 LOG(2,
"View point latitude range: %g ... %g deg", mini, maxi);
5690 gsl_stats_minmax(&mini, &maxi, obs->
tpz, 1, (
size_t) obs->
nr);
5691 LOG(2,
"Tangent point altitude range: %g ... %g km", mini, maxi);
5692 gsl_stats_minmax(&mini, &maxi, obs->
tplon, 1, (
size_t) obs->
nr);
5693 LOG(2,
"Tangent point longitude range: %g ... %g deg", mini, maxi);
5694 gsl_stats_minmax(&mini, &maxi, obs->
tplat, 1, (
size_t) obs->
nr);
5695 LOG(2,
"Tangent point latitude range: %g ... %g deg", mini, maxi);
5696 for (
int id = 0;
id < ctl->
nd;
id++) {
5697 gsl_stats_minmax(&mini, &maxi, obs->
rad[
id], 1, (
size_t) obs->
nr);
5699 LOG(2,
"Brightness temperature (%.4f cm^-1) range: %g ... %g K",
5700 ctl->
nu[
id], mini, maxi);
5702 LOG(2,
"Radiance (%.4f cm^-1) range: %g ... %g W/(m^2 sr cm^-1)",
5703 ctl->
nu[
id], mini, maxi);
5706 for (
int id = 0;
id < ctl->
nd;
id++) {
5707 gsl_stats_minmax(&mini, &maxi, obs->
tau[
id], 1, (
size_t) obs->
nr);
5709 LOG(2,
"Transmittance (%.4f cm^-1) range: %g ... %g",
5710 ctl->
nu[
id], mini, maxi);
5718 const char *filename,
5727 if (!(in = fopen(filename,
"r")))
5728 ERRMSG(
"Cannot open file!");
5731 char line[
LEN], *tok;
5732 while (fgets(line,
LEN, in)) {
5735 TOK(line, tok,
"%lg", obs->
time[obs->
nr]);
5736 TOK(NULL, tok,
"%lg", obs->
obsz[obs->
nr]);
5739 TOK(NULL, tok,
"%lg", obs->
vpz[obs->
nr]);
5742 TOK(NULL, tok,
"%lg", obs->
tpz[obs->
nr]);
5745 for (
int id = 0;
id < ctl->
nd;
id++)
5746 TOK(NULL, tok,
"%lg", obs->
rad[
id][obs->
nr]);
5747 for (
int id = 0;
id < ctl->
nd;
id++)
5748 TOK(NULL, tok,
"%lg", obs->
tau[
id][obs->
nr]);
5751 if ((++obs->
nr) >
NR)
5752 ERRMSG(
"Too many rays!");
5762 const char *filename,
5768 if (!(in = fopen(filename,
"r")))
5769 ERRMSG(
"Cannot open file!");
5776 if (memcmp(magic,
"OBS1", 4) != 0)
5777 ERRMSG(
"Invalid magic string!");
5784 ERRMSG(
"Error reading file header!");
5793 ERRMSG(
"Too many ray paths!");
5824 for (
int id = 0;
id < ctl->
nd;
id++)
5828 for (
int id = 0;
id < ctl->
nd;
id++)
5840 const char *filename,
5843 const int profile) {
5845 int ncid, var_nray = -1, var_time = -1, var_obsz = -1, var_obslon =
5846 -1, var_obslat = -1, var_vpz = -1, var_vplon = -1, var_vplat =
5847 -1, var_tpz = -1, var_tplon = -1, var_tplat =
5848 -1, var_rad[
ND], var_tau[
ND];
5851 NC(nc_open(filename, NC_NOWRITE, &ncid));
5854 size_t start[2] = { (size_t) profile, 0 };
5855 size_t count[2] = { 1, 0 };
5858 NC(nc_inq_varid(ncid,
"nray", &var_nray));
5859 NC(nc_get_vara_int(ncid, var_nray, start, count, &obs->
nr));
5860 if (obs->
nr < 1 || obs->
nr >
NR)
5861 ERRMSG(
"Number of ray paths out of range!");
5864 count[1] = (size_t) obs->
nr;
5867 NC(nc_inq_varid(ncid,
"time", &var_time));
5868 NC(nc_inq_varid(ncid,
"obs_z", &var_obsz));
5869 NC(nc_inq_varid(ncid,
"obs_lon", &var_obslon));
5870 NC(nc_inq_varid(ncid,
"obs_lat", &var_obslat));
5872 NC(nc_inq_varid(ncid,
"vp_z", &var_vpz));
5873 NC(nc_inq_varid(ncid,
"vp_lon", &var_vplon));
5874 NC(nc_inq_varid(ncid,
"vp_lat", &var_vplat));
5876 NC(nc_inq_varid(ncid,
"tp_z", &var_tpz));
5877 NC(nc_inq_varid(ncid,
"tp_lon", &var_tplon));
5878 NC(nc_inq_varid(ncid,
"tp_lat", &var_tplat));
5881 for (
int id = 0;
id < ctl->
nd;
id++) {
5884 sprintf(varname,
"rad_%.4f", ctl->
nu[
id]);
5885 NC(nc_inq_varid(ncid, varname, &var_rad[
id]));
5887 sprintf(varname,
"tau_%.4f", ctl->
nu[
id]);
5888 NC(nc_inq_varid(ncid, varname, &var_tau[
id]));
5892 NC(nc_get_vara_double(ncid, var_time, start, count, obs->
time));
5893 NC(nc_get_vara_double(ncid, var_obsz, start, count, obs->
obsz));
5894 NC(nc_get_vara_double(ncid, var_obslon, start, count, obs->
obslon));
5895 NC(nc_get_vara_double(ncid, var_obslat, start, count, obs->
obslat));
5897 NC(nc_get_vara_double(ncid, var_vpz, start, count, obs->
vpz));
5898 NC(nc_get_vara_double(ncid, var_vplon, start, count, obs->
vplon));
5899 NC(nc_get_vara_double(ncid, var_vplat, start, count, obs->
vplat));
5901 NC(nc_get_vara_double(ncid, var_tpz, start, count, obs->
tpz));
5902 NC(nc_get_vara_double(ncid, var_tplon, start, count, obs->
tplon));
5903 NC(nc_get_vara_double(ncid, var_tplat, start, count, obs->
tplat));
5906 for (
int id = 0;
id < ctl->
nd;
id++) {
5907 NC(nc_get_vara_double(ncid, var_rad[
id], start, count, obs->
rad[
id]));
5908 NC(nc_get_vara_double(ncid, var_tau[
id], start, count, obs->
tau[
id]));
5918 const char *basename,
5924 double fsum = 0, nu2[
NSHAPE], *nurfm, *rad, radsum = 0;
5929 ALLOC(nurfm,
double,
5937 sprintf(filename,
"%s_%05d.asc", basename, (
int) (z * 1000));
5938 if (!(in = fopen(filename,
"r"))) {
5939 sprintf(filename,
"%s_%05d.asc", basename, (
int) (z * 1000) + 1);
5940 if (!(in = fopen(filename,
"r")))
5941 ERRMSG(
"Cannot find RFM data file!");
5950 nu2[n - 1] = nu[n - 1];
5951 for (
int i = 1; i < n - 1; i++)
5952 nu2[i] =
LIN(0.0, nu2[0], n - 1.0, nu2[n - 1], i);
5955 for (
int ipts = 0; ipts < npts; ipts++)
5956 if (nurfm[ipts] >= nu2[0] && nurfm[ipts] <= nu2[n - 1]) {
5957 const int idx =
locate_irr(nu2, n, nurfm[ipts]);
5959 LIN(nu2[idx], f[idx], nu2[idx + 1], f[idx + 1], nurfm[ipts]);
5961 radsum += filt * rad[ipts];
5969 return radsum / fsum;
5982 (int)
scan_ctl(argc, argv,
"KERNEL_RECOMP", -1,
"3", NULL);
5989 for (
int id = 0;
id < ctl->
nd;
id++)
5992 for (
int id = 0;
id < ctl->
nd;
id++)
6003 for (
int ig = 0; ig < ctl->
ng; ig++) {
6004 ret->
err_q[ig] =
scan_ctl(argc, argv,
"ERR_Q", ig,
"0", NULL);
6009 for (
int iw = 0; iw < ctl->
nw; iw++) {
6010 ret->
err_k[iw] =
scan_ctl(argc, argv,
"ERR_K", iw,
"0", NULL);
6017 for (
int icl = 0; icl < ctl->
ncl; icl++)
6021 for (
int isf = 0; isf < ctl->
nsf; isf++)
6028 const char *filename,
6033 char *line = NULL, *tok;
6035 size_t line_buf_size = 0;
6037 double dnu, nu0, nu1;
6042 LOG(1,
"Read RFM data: %s", filename);
6046 if (!(in = fopen(filename,
"r")))
6047 ERRMSG(
"Cannot open file!");
6050 for (
int i = 0; i < 4; i++)
6051 if (getline(&line, &line_buf_size, in) == -1)
6052 ERRMSG(
"Error while reading file header!");
6053 if (sscanf(line,
"%d %lg %lg %lg", npts, &nu0, &dnu, &nu1) != 4)
6054 ERRMSG(
"Invalid spectrum header format!");
6058 ERRMSG(
"Too many spectral grid points!");
6061 while (getline(&line, &line_buf_size, in) != -1 && ipts < *npts) {
6062 tok = strtok(line,
" \t\n");
6063 while (tok != NULL && ipts < *npts) {
6064 if (sscanf(tok,
"%lg", &rad[ipts]) == 1)
6066 tok = strtok(NULL,
" \t\n");
6072 ERRMSG(
"Error while reading RFM data!");
6075 for (ipts = 0; ipts < *npts; ipts++)
6076 nu[ipts] =
LIN(0.0, nu0, (
double) (*npts - 1), nu1, (
double) ipts);
6088 const char *filename,
6096 LOG(1,
"Read shape function: %s", filename);
6100 if (!(in = fopen(filename,
"r")))
6101 ERRMSG(
"Cannot open file!");
6105 while (fgets(line,
LEN, in))
6106 if (sscanf(line,
"%lg %lg", &x[*n], &y[*n]) == 2)
6108 ERRMSG(
"Too many data points!");
6115 ERRMSG(
"Could not read any data!");
6119 LOG(2,
"Number of data points: %d", *n);
6120 gsl_stats_minmax(&mini, &maxi, x, 1, (
size_t) *n);
6121 LOG(2,
"Range of x values: %.4f ... %.4f", mini, maxi);
6122 gsl_stats_minmax(&mini, &maxi, y, 1, (
size_t) *n);
6123 LOG(2,
"Range of y values: %g ... %g", mini, maxi);
6136 for (
int id = 0;
id < ctl->
nd;
id++)
6140 for (
int ig = 0; ig < ctl->
ng; ig++) {
6144 for (
int id = 0;
id < ctl->
nd;
id++) {
6150 else if (ctl->
tblfmt == 2)
6151 for (
int id = 0;
id < ctl->
nd;
id++) {
6157 else if (ctl->
tblfmt == 3) {
6161 char filename[2 *
LEN];
6163 if (nc_open(filename, NC_NOWRITE, &ncid) != NC_NOERR) {
6164 WARN(
"Missing emissivity table: %s", filename);
6167 LOG(1,
"Read emissivity table: %s", filename);
6170 for (
int id = 0;
id < ctl->
nd;
id++) {
6181 for (
int id = 0;
id < ctl->
nd;
id++)
6182 for (
int ig = 0; ig < ctl->
ng; ig++)
6183 for (
int ip = 0; ip < tbl->
np[id][ig]; ip++)
6184 tbl->
lnp[
id][ig][ip] = log(tbl->
p[
id][ig][ip]);
6188 for (
int id = 0;
id < ctl->
nd;
id++) {
6189 char filename[2 *
LEN];
6190 sprintf(filename,
"%s_%.4f.filt", ctl->
tblbase, ctl->
nu[
id]);
6211 double eps, eps_old = -999, press, press_old = -999, temp,
6212 temp_old = -999, u, u_old = -999;
6216 char filename[2 *
LEN];
6217 sprintf(filename,
"%s_%.4f_%s.tab", ctl->
tblbase,
6222 if (!(in = fopen(filename,
"r"))) {
6223 WARN(
"Missing emissivity table: %s", filename);
6226 LOG(1,
"Read emissivity table: %s", filename);
6229 tbl->
np[id][ig] = -1;
6233 while (fgets(line,
LEN, in)) {
6236 if (sscanf(line,
"%lg %lg %lg %lg", &press, &temp, &u, &eps) != 4)
6240 if (u < UMIN || u >
UMAX || eps < EPSMIN || eps >
EPSMAX) {
6246 if (press != press_old) {
6248 if ((++tbl->
np[
id][ig]) >=
TBLNP)
6249 ERRMSG(
"Too many pressure levels!");
6250 tbl->
nt[id][ig][tbl->
np[id][ig]] = -1;
6254 if (temp != temp_old) {
6256 if ((++tbl->
nt[
id][ig][tbl->
np[
id][ig]]) >=
TBLNT)
6257 ERRMSG(
"Too many temperatures!");
6258 tbl->
nu[id][ig][tbl->
np[id][ig]]
6259 [tbl->
nt[id][ig][tbl->
np[id][ig]]] = -1;
6262 tbl->
logu[id][ig][tbl->
np[id][ig]]
6263 [tbl->
nt[id][ig][tbl->
np[id][ig]]] = NULL;
6264 tbl->
logeps[id][ig][tbl->
np[id][ig]]
6265 [tbl->
nt[id][ig][tbl->
np[id][ig]]] = NULL;
6269 if ((eps > eps_old && u > u_old) || tbl->
nu[
id][ig][tbl->
np[
id][ig]]
6270 [tbl->
nt[
id][ig][tbl->
np[
id][ig]]] < 0) {
6273 if ((++tbl->
nu[
id][ig][tbl->
np[
id][ig]]
6274 [tbl->
nt[
id][ig][tbl->
np[
id][ig]]]) >=
TBLNU)
6275 ERRMSG(
"Too many column densities!");
6278 const int ip = tbl->
np[id][ig];
6279 const int it = tbl->
nt[id][ig][ip];
6280 const int iu = tbl->
nu[id][ig][ip][it];
6281 const size_t nnew = (size_t) (iu + 1);
6283 float *tmp = (
float *) realloc(tbl->
logu[
id][ig][ip][it],
6284 nnew *
sizeof(
float));
6286 ERRMSG(
"Out of memory!");
6287 tbl->
logu[id][ig][ip][it] = tmp;
6290 (
float *) realloc(tbl->
logeps[
id][ig][ip][it], nnew *
sizeof(
float));
6292 ERRMSG(
"Out of memory!");
6293 tbl->
logeps[id][ig][ip][it] = tmp;
6297 tbl->
p[id][ig][tbl->
np[id][ig]] = press;
6298 tbl->
t[id][ig][tbl->
np[id][ig]][tbl->
nt[id][ig][tbl->
np[id][ig]]]
6300 tbl->
logu[id][ig][tbl->
np[id][ig]][tbl->
nt[id][ig][tbl->
np[id][ig]]]
6301 [tbl->
nu[id][ig][tbl->
np[id][ig]]
6302 [tbl->
nt[id][ig][tbl->
np[id][ig]]]] = (float) log(u);
6303 tbl->
logeps[id][ig][tbl->
np[id][ig]][tbl->
nt[id][ig][tbl->
np[id][ig]]]
6304 [tbl->
nu[id][ig][tbl->
np[id][ig]]
6305 [tbl->
nt[id][ig][tbl->
np[id][ig]]]] = (float) log(eps);
6310 for (
int ip = 0; ip < tbl->
np[id][ig]; ip++) {
6311 tbl->
nt[id][ig][ip]++;
6312 for (
int it = 0; it < tbl->
nt[id][ig][ip]; it++)
6313 tbl->
nu[
id][ig][ip][it]++;
6318 WARN(
"Column density or emissivity out of range (%d data points)!",
6334 char filename[2 *
LEN];
6335 sprintf(filename,
"%s_%.4f_%s.bin",
6339 FILE *in = fopen(filename,
"rb");
6341 WARN(
"Missing emissivity table: %s", filename);
6344 LOG(1,
"Read emissivity table: %s", filename);
6348 FREAD(&nbytes,
size_t,
6352 ERRMSG(
"Invalid packed table size!");
6355 uint8_t *work = NULL;
6356 ALLOC(work, uint8_t, nbytes);
6357 FREAD(work, uint8_t, nbytes, in);
6385 sprintf(varname,
"tbl_%.4f", ctl->
nu[
id]);
6386 if (nc_inq_varid(ncid, varname, &varid) != NC_NOERR) {
6387 WARN(
"Missing emissivity table: %s", varname);
6390 LOG(1,
"Read emissivity table: %s", varname);
6391 NC(nc_inq_vardimid(ncid, varid, &dimid));
6392 NC(nc_inq_dimlen(ncid, dimid, &nbytes));
6395 uint8_t *work = NULL;
6396 ALLOC(work, uint8_t, nbytes);
6397 NC(nc_get_var_uchar(ncid, varid, (
unsigned char *) work));
6411 const char *varname,
6413 const char *defvalue,
6416 char dummy[
LEN], fullname1[
LEN], fullname2[
LEN], line[
LEN],
6417 rvarname[
LEN], rval[
LEN];
6423 if (argv[1][0] !=
'-')
6424 if (!(in = fopen(argv[1],
"r")))
6425 ERRMSG(
"Cannot open file!");
6429 sprintf(fullname1,
"%s[%d]", varname, arridx);
6430 sprintf(fullname2,
"%s[*]", varname);
6432 sprintf(fullname1,
"%s", varname);
6433 sprintf(fullname2,
"%s", varname);
6438 while (fgets(line,
LEN, in))
6439 if (sscanf(line,
"%s %s %s", rvarname, dummy, rval) == 3)
6440 if (strcasecmp(rvarname, fullname1) == 0 ||
6441 strcasecmp(rvarname, fullname2) == 0) {
6445 for (
int i = 1; i < argc - 1; i++)
6446 if (strcasecmp(argv[i], fullname1) == 0 ||
6447 strcasecmp(argv[i], fullname2) == 0) {
6448 sprintf(rval,
"%s", argv[i + 1]);
6459 if (strlen(defvalue) > 0)
6460 sprintf(rval,
"%s", defvalue);
6462 ERRMSG(
"Missing variable %s!\n", fullname1);
6466 LOG(1,
"%s = %s", fullname1, rval);
6470 sprintf(value,
"%s", rval);
6485 const size_t n = s_a->size1;
6488 gsl_vector *x_a = gsl_vector_alloc(n);
6491 atm2x(ctl, atm, x_a, NULL, NULL);
6492 for (
size_t i = 0; i < n; i++) {
6494 gsl_vector_set(x_a, i, ret->
err_press / 100 * gsl_vector_get(x_a, i));
6496 gsl_vector_set(x_a, i, ret->
err_temp);
6497 for (
int ig = 0; ig < ctl->
ng; ig++)
6498 if (iqa[i] ==
IDXQ(ig))
6499 gsl_vector_set(x_a, i, ret->
err_q[ig] / 100 * gsl_vector_get(x_a, i));
6500 for (
int iw = 0; iw < ctl->
nw; iw++)
6501 if (iqa[i] ==
IDXK(iw))
6502 gsl_vector_set(x_a, i, ret->
err_k[iw]);
6504 gsl_vector_set(x_a, i, ret->
err_clz);
6506 gsl_vector_set(x_a, i, ret->
err_cldz);
6507 for (
int icl = 0; icl < ctl->
ncl; icl++)
6508 if (iqa[i] ==
IDXCLK(icl))
6509 gsl_vector_set(x_a, i, ret->
err_clk[icl]);
6511 gsl_vector_set(x_a, i, ret->
err_sft);
6512 for (
int isf = 0; isf < ctl->
nsf; isf++)
6514 gsl_vector_set(x_a, i, ret->
err_sfeps[isf]);
6518 for (
size_t i = 0; i < n; i++)
6519 if (
POW2(gsl_vector_get(x_a, i)) <= 0)
6520 ERRMSG(
"Check a priori data (zero standard deviation)!");
6523 gsl_matrix_set_zero(s_a);
6524 for (
size_t i = 0; i < n; i++)
6525 gsl_matrix_set(s_a, i, i,
POW2(gsl_vector_get(x_a, i)));
6528 for (
size_t i = 0; i < n; i++)
6529 for (
size_t j = 0; j < n; j++)
6530 if (i != j && iqa[i] == iqa[j]) {
6537 if (iqa[i] ==
IDXP) {
6543 if (iqa[i] ==
IDXT) {
6549 for (
int ig = 0; ig < ctl->
ng; ig++)
6550 if (iqa[i] ==
IDXQ(ig)) {
6556 for (
int iw = 0; iw < ctl->
nw; iw++)
6557 if (iqa[i] ==
IDXK(iw)) {
6563 if (cz > 0 && ch > 0) {
6566 double x0[3], x1[3];
6572 exp(-
DIST(x0, x1) / ch -
6573 fabs(atm->
z[ipa[i]] - atm->
z[ipa[j]]) / cz);
6576 gsl_matrix_set(s_a, i, j, gsl_vector_get(x_a, i)
6577 * gsl_vector_get(x_a, j) * rho);
6582 gsl_vector_free(x_a);
6591 gsl_vector *sig_noise,
6592 gsl_vector *sig_formod,
6593 gsl_vector *sig_eps_inv) {
6600 const size_t m = sig_eps_inv->size;
6604 for (
int ir = 0; ir < obs_err->
nr; ir++)
6605 for (
int id = 0;
id < ctl->
nd;
id++)
6606 obs_err->
rad[
id][ir]
6607 = (isfinite(obs->
rad[
id][ir]) ? ret->
err_noise[
id] : NAN);
6608 obs2y(ctl, obs_err, sig_noise, NULL, NULL);
6612 for (
int ir = 0; ir < obs_err->
nr; ir++)
6613 for (
int id = 0;
id < ctl->
nd;
id++)
6614 obs_err->
rad[
id][ir]
6616 obs2y(ctl, obs_err, sig_formod, NULL, NULL);
6619 for (
size_t i = 0; i < m; i++)
6620 gsl_vector_set(sig_eps_inv, i, 1 / sqrt(
POW2(gsl_vector_get(sig_noise, i))
6626 for (
size_t i = 0; i < m; i++)
6627 if (gsl_vector_get(sig_eps_inv, i) <= 0)
6628 ERRMSG(
"Check measurement errors (zero standard deviation)!");
6643 const size_t ip = gsl_stats_min_index(los->
z, 1, (
size_t) los->
np);
6646 if (ip <= 0 || ip >= (
size_t) los->
np - 1) {
6647 *tpz = los->
z[los->
np - 1];
6648 *tplon = los->
lon[los->
np - 1];
6649 *tplat = los->
lat[los->
np - 1];
6656 const double yy0 = los->
z[ip - 1];
6657 const double yy1 = los->
z[ip];
6658 const double yy2 = los->
z[ip + 1];
6659 const double x1 = sqrt(
POW2(los->
ds[ip]) -
POW2(yy1 - yy0));
6660 const double x2 = x1 + sqrt(
POW2(los->
ds[ip + 1]) -
POW2(yy2 - yy1));
6661 const double a = 1 / (x1 - x2) * (-(yy0 - yy1) / x1 + (yy0 - yy2) / x2);
6662 const double b = -(yy0 - yy1) / x1 - a * x1;
6663 const double c = yy0;
6666 double dummy, v[3], v0[3], v2[3];
6667 const double x = -b / (2 * a);
6668 *tpz = a * x * x + b * x + c;
6671 for (
int i = 0; i < 3; i++)
6672 v[i] =
LIN(0.0, v0[i], x2, v2[i], x);
6688 for (
int id = 0;
id < ctl->
nd;
id++)
6689 for (
int ig = 0; ig < ctl->
ng; ig++) {
6692 const int np = tbl->
np[id][ig];
6697 for (
int ip = 0; ip < np; ip++) {
6700 const int nt = tbl->
nt[id][ig][ip];
6701 for (
int it = 0; it < nt; it++) {
6704 free(tbl->
logu[
id][ig][ip][it]);
6705 free(tbl->
logeps[
id][ig][ip][it]);
6706 tbl->
logu[id][ig][ip][it] = NULL;
6707 tbl->
logeps[id][ig][ip][it] = NULL;
6723 size_t *bytes_used) {
6728 int np = tbl->
np[id][ig];
6729 memcpy(cur, &np,
sizeof(np));
6732 memcpy(cur, tbl->
p[
id][ig], (
size_t) np *
sizeof(
double));
6733 cur += ((size_t) np *
sizeof(
double));
6735 for (
int ip = 0; ip < np; ip++) {
6736 int nt = tbl->
nt[id][ig][ip];
6737 memcpy(cur, &nt,
sizeof(nt));
6740 memcpy(cur, tbl->
t[
id][ig][ip], (
size_t) nt *
sizeof(
double));
6741 cur += ((size_t) nt *
sizeof(
double));
6743 for (
int it = 0; it < nt; it++) {
6744 int nu = tbl->
nu[id][ig][ip][it];
6745 memcpy(cur, &nu,
sizeof(nu));
6748 memcpy(cur, tbl->
logu[
id][ig][ip][it], (
size_t) nu *
sizeof(
float));
6749 cur += ((size_t) nu *
sizeof(
float));
6751 memcpy(cur, tbl->
logeps[
id][ig][ip][it], (
size_t) nu *
sizeof(
float));
6752 cur += ((size_t) nu *
sizeof(
float));
6757 const int n = tbl->
filt_n[id];
6758 memcpy(cur, &n,
sizeof(n));
6761 memcpy(cur, tbl->
filt_nu[
id], (
size_t) n *
sizeof(
double));
6762 cur += ((size_t) n *
sizeof(
double));
6764 memcpy(cur, tbl->
filt_f[
id], (
size_t) n *
sizeof(
double));
6765 cur += ((size_t) n *
sizeof(
double));
6767 *bytes_used = (size_t) (cur - buf);
6780 const int np = tbl->
np[id][ig];
6781 bytes +=
sizeof(int);
6782 bytes += ((size_t) np *
sizeof(
double));
6784 for (
int ip = 0; ip < np; ip++) {
6785 const int nt = tbl->
nt[id][ig][ip];
6786 bytes +=
sizeof(int);
6787 bytes += ((size_t) nt *
sizeof(
double));
6789 for (
int it = 0; it < nt; it++) {
6790 const int nu = tbl->
nu[id][ig][ip][it];
6791 bytes +=
sizeof(int);
6792 bytes += (2 * (size_t) nu *
sizeof(
float));
6797 const int n = tbl->
filt_n[id];
6798 bytes +=
sizeof(int);
6799 bytes += (2 * (size_t) n *
sizeof(
double));
6810 const uint8_t *buf) {
6812 const uint8_t *cur = buf;
6816 memcpy(&np, cur,
sizeof(np));
6819 if (np < 0 || np >
TBLNP)
6820 ERRMSG(
"np out of range!");
6821 tbl->
np[id][ig] = np;
6823 memcpy(tbl->
p[
id][ig], cur, (
size_t) np *
sizeof(
double));
6824 cur += ((size_t) np *
sizeof(
double));
6826 for (
int ip = 0; ip < np; ip++) {
6829 memcpy(&nt, cur,
sizeof(nt));
6832 if (nt < 0 || nt >
TBLNT)
6833 ERRMSG(
"nt out of range!");
6834 tbl->
nt[id][ig][ip] = nt;
6836 memcpy(tbl->
t[
id][ig][ip], cur, (
size_t) nt *
sizeof(
double));
6837 cur += ((size_t) nt *
sizeof(
double));
6839 for (
int it = 0; it < nt; it++) {
6842 memcpy(&nu, cur,
sizeof(nu));
6845 if (nu < 0 || nu >
TBLNU)
6846 ERRMSG(
"nu out of range!");
6847 tbl->
nu[id][ig][ip][it] = nu;
6854 memcpy(tbl->
logu[
id][ig][ip][it], cur, (
size_t) nu *
sizeof(
float));
6855 cur += ((size_t) nu *
sizeof(
float));
6857 memcpy(tbl->
logeps[
id][ig][ip][it], cur, (
size_t) nu *
sizeof(
float));
6858 cur += ((size_t) nu *
sizeof(
float));
6864 memcpy(&n, cur,
sizeof(n));
6868 ERRMSG(
"Missing or invalid filter function (filt_n) in packed table!");
6871 memcpy(tbl->
filt_nu[
id], cur, (
size_t) n *
sizeof(
double));
6872 cur += ((size_t) n *
sizeof(
double));
6874 memcpy(tbl->
filt_f[
id], cur, (
size_t) n *
sizeof(
double));
6875 cur += ((size_t) n *
sizeof(
double));
6877 return (
size_t) (cur - buf);
6889 const double remain,
6901 t1.tm_year = year - 1900;
6902 t1.tm_mon = mon - 1;
6908 *jsec = (double) timegm(&t1) - (double) timegm(&t0) + remain;
6920 static double w0[10];
6922 static int l0[10], nt;
6926 w0[nt] = omp_get_wtime();
6929 ERRMSG(
"Too many timers!");
6940 LOG(1,
"Timer '%s' (%s, %s, l%d-%d): %.3f sec",
6941 name, file, func, l0[nt - 1], line, omp_get_wtime() - w0[nt - 1]);
6952 const char *dirname,
6953 const char *filename,
6959 if (dirname != NULL)
6960 sprintf(file,
"%s/%s", dirname, filename);
6962 sprintf(file,
"%s", filename);
6965 LOG(1,
"Write atmospheric data: %s", file);
6972 else if (ctl->
atmfmt == 2)
6976 else if (ctl->
atmfmt == 3)
6981 ERRMSG(
"Unknown file format, check ATMFMT!");
6985 LOG(2,
"Number of data points: %d", atm->
np);
6986 gsl_stats_minmax(&mini, &maxi, atm->
time, 1, (
size_t) atm->
np);
6987 LOG(2,
"Time range: %.2f ... %.2f s", mini, maxi);
6988 gsl_stats_minmax(&mini, &maxi, atm->
z, 1, (
size_t) atm->
np);
6989 LOG(2,
"Altitude range: %g ... %g km", mini, maxi);
6990 gsl_stats_minmax(&mini, &maxi, atm->
lon, 1, (
size_t) atm->
np);
6991 LOG(2,
"Longitude range: %g ... %g deg", mini, maxi);
6992 gsl_stats_minmax(&mini, &maxi, atm->
lat, 1, (
size_t) atm->
np);
6993 LOG(2,
"Latitude range: %g ... %g deg", mini, maxi);
6994 gsl_stats_minmax(&mini, &maxi, atm->
p, 1, (
size_t) atm->
np);
6995 LOG(2,
"Pressure range: %g ... %g hPa", maxi, mini);
6996 gsl_stats_minmax(&mini, &maxi, atm->
t, 1, (
size_t) atm->
np);
6997 LOG(2,
"Temperature range: %g ... %g K", mini, maxi);
6998 for (
int ig = 0; ig < ctl->
ng; ig++) {
6999 gsl_stats_minmax(&mini, &maxi, atm->
q[ig], 1, (
size_t) atm->
np);
7000 LOG(2,
"Emitter %s range: %g ... %g ppv", ctl->
emitter[ig], mini, maxi);
7002 for (
int iw = 0; iw < ctl->
nw; iw++) {
7003 gsl_stats_minmax(&mini, &maxi, atm->
k[iw], 1, (
size_t) atm->
np);
7004 LOG(2,
"Extinction range (window %d): %g ... %g km^-1", iw, mini, maxi);
7007 LOG(2,
"Cloud layer: z= %g km | dz= %g km | k= %g ... %g km^-1",
7010 LOG(2,
"Cloud layer: none");
7013 "Surface: T_s = %g K | eps= %g ... %g",
7016 LOG(2,
"Surface: none");
7022 const char *filename,
7030 if (!(out = fopen(filename,
"w")))
7031 ERRMSG(
"Cannot create file!");
7035 "# $1 = time (seconds since 2000-01-01T00:00Z)\n"
7036 "# $2 = altitude [km]\n"
7037 "# $3 = longitude [deg]\n"
7038 "# $4 = latitude [deg]\n"
7039 "# $5 = pressure [hPa]\n" "# $6 = temperature [K]\n");
7040 for (
int ig = 0; ig < ctl->
ng; ig++)
7041 fprintf(out,
"# $%d = %s volume mixing ratio [ppv]\n",
7043 for (
int iw = 0; iw < ctl->
nw; iw++)
7044 fprintf(out,
"# $%d = extinction (window %d) [km^-1]\n", ++n, iw);
7046 fprintf(out,
"# $%d = cloud layer height [km]\n", ++n);
7047 fprintf(out,
"# $%d = cloud layer depth [km]\n", ++n);
7048 for (
int icl = 0; icl < ctl->
ncl; icl++)
7049 fprintf(out,
"# $%d = cloud layer extinction (%.4f cm^-1) [km^-1]\n",
7050 ++n, ctl->
clnu[icl]);
7053 fprintf(out,
"# $%d = surface temperature [K]\n", ++n);
7054 for (
int isf = 0; isf < ctl->
nsf; isf++)
7055 fprintf(out,
"# $%d = surface emissivity (%.4f cm^-1)\n",
7056 ++n, ctl->
sfnu[isf]);
7060 for (
int ip = 0; ip < atm->
np; ip++) {
7061 if (ip == 0 || atm->
time[ip] != atm->
time[ip - 1])
7063 fprintf(out,
"%.2f %g %g %g %g %g", atm->
time[ip], atm->
z[ip],
7064 atm->
lon[ip], atm->
lat[ip], atm->
p[ip], atm->
t[ip]);
7065 for (
int ig = 0; ig < ctl->
ng; ig++)
7066 fprintf(out,
" %g", atm->
q[ig][ip]);
7067 for (
int iw = 0; iw < ctl->
nw; iw++)
7068 fprintf(out,
" %g", atm->
k[iw][ip]);
7070 fprintf(out,
" %g %g", atm->
clz, atm->
cldz);
7071 for (
int icl = 0; icl < ctl->
ncl; icl++)
7072 fprintf(out,
" %g", atm->
clk[icl]);
7075 fprintf(out,
" %g", atm->
sft);
7076 for (
int isf = 0; isf < ctl->
nsf; isf++)
7077 fprintf(out,
" %g", atm->
sfeps[isf]);
7089 const char *filename,
7095 if (!(out = fopen(filename,
"w")))
7096 ERRMSG(
"Cannot create file!");
7116 size_t np = (size_t) atm->
np;
7138 for (
int ig = 0; ig < ctl->
ng; ig++)
7142 for (
int iw = 0; iw < ctl->
nw; iw++)
7173 const char *filename,
7178 char longname[
LEN], varname[
LEN];
7180 int ncid, varid, dim_profile, dim_level;
7185 if (nc_open(filename, NC_WRITE, &ncid) != NC_NOERR)
7186 NC(nc_create(filename, NC_NETCDF4, &ncid));
7189 int r = nc_redef(ncid);
7190 if (r != NC_NOERR && r != NC_EINDEFINE)
7194 if (nc_inq_dimid(ncid,
"profile", &dim_profile) != NC_NOERR)
7195 NC(nc_def_dim(ncid,
"profile", NC_UNLIMITED, &dim_profile));
7198 if (nc_inq_dimid(ncid,
"level", &dim_level) == NC_NOERR) {
7199 NC(nc_inq_dimlen(ncid, dim_level, &level_max));
7200 if (level_max < 1 || level_max > (
size_t)
NP)
7201 ERRMSG(
"netCDF dimension level is out of range!");
7202 if ((
size_t) atm->
np > level_max)
7203 ERRMSG(
"profile has too many levels!");
7205 level_max = (size_t) atm->
np;
7206 NC(nc_def_dim(ncid,
"level", level_max, &dim_level));
7210 int dimids[2] = { dim_profile, dim_level };
7213 const int deflate_level = 0;
7214 const int quant_digits = 0;
7217 if (nc_inq_varid(ncid,
"nlev", &varid) != NC_NOERR)
7219 "number of vertical levels",
"1", 0, 0);
7222 if (nc_inq_varid(ncid,
"time", &varid) != NC_NOERR)
7224 "time in seconds since 2000-01-01, 00:00 UTC",
"s",
7227 if (nc_inq_varid(ncid,
"z", &varid) != NC_NOERR)
7228 NC_DEF_VAR(
"z", NC_DOUBLE, 2, dimids,
"altitude",
"km", deflate_level, 0);
7230 if (nc_inq_varid(ncid,
"lon", &varid) != NC_NOERR)
7232 "longitude",
"degrees_east", deflate_level, 0);
7234 if (nc_inq_varid(ncid,
"lat", &varid) != NC_NOERR)
7236 "latitude",
"degrees_north", deflate_level, 0);
7238 if (nc_inq_varid(ncid,
"p", &varid) != NC_NOERR)
7240 "pressure",
"hPa", deflate_level, quant_digits);
7242 if (nc_inq_varid(ncid,
"t", &varid) != NC_NOERR)
7244 "temperature",
"K", deflate_level, quant_digits);
7247 for (
int ig = 0; ig < ctl->
ng; ig++)
7248 if (nc_inq_varid(ncid, ctl->
emitter[ig], &varid) != NC_NOERR) {
7249 sprintf(longname,
"%s volume mixing ratio", ctl->
emitter[ig]);
7251 longname,
"ppv", deflate_level, quant_digits);
7255 for (
int iw = 0; iw < ctl->
nw; iw++) {
7256 sprintf(varname,
"ext_win_%d", iw);
7257 if (nc_inq_varid(ncid, varname, &varid) != NC_NOERR) {
7258 sprintf(longname,
"extinction (window %d)", iw);
7260 longname,
"km**-1", deflate_level, quant_digits);
7266 if (nc_inq_varid(ncid,
"cld_z", &varid) != NC_NOERR)
7268 "cloud layer height",
"km", deflate_level, quant_digits);
7270 if (nc_inq_varid(ncid,
"cld_dz", &varid) != NC_NOERR)
7272 "cloud layer depth",
"km", deflate_level, quant_digits);
7274 for (
int icl = 0; icl < ctl->
ncl; icl++) {
7275 sprintf(varname,
"cld_k_%.4f", ctl->
clnu[icl]);
7276 if (nc_inq_varid(ncid, varname, &varid) != NC_NOERR) {
7277 sprintf(longname,
"cloud layer extinction (%.4f cm^-1)",
7279 NC_DEF_VAR(varname, NC_DOUBLE, 1, dimids, longname,
"km**-1",
7280 deflate_level, quant_digits);
7287 if (nc_inq_varid(ncid,
"srf_t", &varid) != NC_NOERR)
7289 "surface temperature",
"K", deflate_level, quant_digits);
7291 for (
int isf = 0; isf < ctl->
nsf; isf++) {
7292 sprintf(varname,
"srf_eps_%.4f", ctl->
sfnu[isf]);
7293 if (nc_inq_varid(ncid, varname, &varid) != NC_NOERR) {
7294 sprintf(longname,
"surface emissivity (%.4f cm^-1)", ctl->
sfnu[isf]);
7295 NC_DEF_VAR(varname, NC_DOUBLE, 1, dimids, longname,
"1",
7296 deflate_level, quant_digits);
7302 NC(nc_enddef(ncid));
7305 size_t start[2] = { (size_t) profile, 0 };
7306 size_t count[2] = { 1, (size_t) atm->
np };
7320 for (
int ig = 0; ig < ctl->
ng; ig++)
7324 for (
int iw = 0; iw < ctl->
nw; iw++) {
7325 sprintf(varname,
"ext_win_%d", iw);
7333 for (
int icl = 0; icl < ctl->
ncl; icl++) {
7334 sprintf(varname,
"cld_k_%.4f", ctl->
clnu[icl]);
7342 for (
int isf = 0; isf < ctl->
nsf; isf++) {
7343 sprintf(varname,
"srf_eps_%.4f", ctl->
sfnu[isf]);
7356 const char *filename,
7361 LOG(1,
"Write RFM data: %s", filename);
7365 if (!(out = fopen(filename,
"w")))
7366 ERRMSG(
"Cannot create file!");
7369 fprintf(out,
"%d\n", atm->
np);
7370 fprintf(out,
"*HGT [km]\n");
7371 for (
int ip = 0; ip < atm->
np; ip++)
7372 fprintf(out,
"%g\n", atm->
z[ip]);
7373 fprintf(out,
"*PRE [mb]\n");
7374 for (
int ip = 0; ip < atm->
np; ip++)
7375 fprintf(out,
"%g\n", atm->
p[ip]);
7376 fprintf(out,
"*TEM [K]\n");
7377 for (
int ip = 0; ip < atm->
np; ip++)
7378 fprintf(out,
"%g\n", atm->
t[ip]);
7379 for (
int ig = 0; ig < ctl->
ng; ig++) {
7380 fprintf(out,
"*%s [ppmv]\n", ctl->
emitter[ig]);
7381 for (
int ip = 0; ip < atm->
np; ip++)
7382 fprintf(out,
"%g\n", atm->
q[ig][ip] * 1e6);
7384 fprintf(out,
"*END\n");
7393 const char *dirname,
7394 const char *filename,
7396 const gsl_matrix *matrix,
7399 const char *rowspace,
7400 const char *colspace,
7403 char file[
LEN], quantity[
LEN];
7405 int *cida, *ciqa, *cipa, *cira, *rida, *riqa, *ripa, *rira;
7407 size_t i, j, nc, nr;
7432 if (dirname != NULL)
7433 sprintf(file,
"%s/%s", dirname, filename);
7435 sprintf(file,
"%s", filename);
7438 LOG(1,
"Write matrix: %s", file);
7442 if (!(out = fopen(file,
"w")))
7443 ERRMSG(
"Cannot create file!");
7446 if (rowspace[0] ==
'y') {
7449 "# $1 = Row: index (measurement space)\n"
7450 "# $2 = Row: channel wavenumber [cm^-1]\n"
7451 "# $3 = Row: time (seconds since 2000-01-01T00:00Z)\n"
7452 "# $4 = Row: view point altitude [km]\n"
7453 "# $5 = Row: view point longitude [deg]\n"
7454 "# $6 = Row: view point latitude [deg]\n");
7457 nr =
obs2y(ctl, obs, NULL, rida, rira);
7462 "# $1 = Row: index (state space)\n"
7463 "# $2 = Row: name of quantity\n"
7464 "# $3 = Row: time (seconds since 2000-01-01T00:00Z)\n"
7465 "# $4 = Row: altitude [km]\n"
7466 "# $5 = Row: longitude [deg]\n" "# $6 = Row: latitude [deg]\n");
7469 nr =
atm2x(ctl, atm, NULL, riqa, ripa);
7473 if (colspace[0] ==
'y') {
7476 "# $7 = Col: index (measurement space)\n"
7477 "# $8 = Col: channel wavenumber [cm^-1]\n"
7478 "# $9 = Col: time (seconds since 2000-01-01T00:00Z)\n"
7479 "# $10 = Col: view point altitude [km]\n"
7480 "# $11 = Col: view point longitude [deg]\n"
7481 "# $12 = Col: view point latitude [deg]\n");
7484 nc =
obs2y(ctl, obs, NULL, cida, cira);
7489 "# $7 = Col: index (state space)\n"
7490 "# $8 = Col: name of quantity\n"
7491 "# $9 = Col: time (seconds since 2000-01-01T00:00Z)\n"
7492 "# $10 = Col: altitude [km]\n"
7493 "# $11 = Col: longitude [deg]\n" "# $12 = Col: latitude [deg]\n");
7496 nc =
atm2x(ctl, atm, NULL, ciqa, cipa);
7500 fprintf(out,
"# $13 = Matrix element\n\n");
7504 while (i < nr && j < nc) {
7507 if (rowspace[0] ==
'y')
7508 fprintf(out,
"%d %.4f %.2f %g %g %g",
7509 (
int) i, ctl->
nu[rida[i]],
7510 obs->
time[rira[i]], obs->
vpz[rira[i]],
7514 fprintf(out,
"%d %s %.2f %g %g %g", (
int) i, quantity,
7515 atm->
time[ripa[i]], atm->
z[ripa[i]],
7516 atm->
lon[ripa[i]], atm->
lat[ripa[i]]);
7520 if (colspace[0] ==
'y')
7521 fprintf(out,
" %d %.4f %.2f %g %g %g",
7522 (
int) j, ctl->
nu[cida[j]],
7523 obs->
time[cira[j]], obs->
vpz[cira[j]],
7527 fprintf(out,
" %d %s %.2f %g %g %g", (
int) j, quantity,
7528 atm->
time[cipa[j]], atm->
z[cipa[j]],
7529 atm->
lon[cipa[j]], atm->
lat[cipa[j]]);
7533 fprintf(out,
" %g\n", gsl_matrix_get(matrix, i, j));
7536 if (sort[0] ==
'r') {
7570 const char *dirname,
7571 const char *filename,
7577 if (dirname != NULL)
7578 sprintf(file,
"%s/%s", dirname, filename);
7580 sprintf(file,
"%s", filename);
7583 LOG(1,
"Write observation data: %s", file);
7590 else if (ctl->
obsfmt == 2)
7594 else if (ctl->
obsfmt == 3)
7599 LOG(2,
"Number of ray paths: %d", obs->
nr);
7600 gsl_stats_minmax(&mini, &maxi, obs->
time, 1, (
size_t) obs->
nr);
7601 LOG(2,
"Time range: %.2f ... %.2f s", mini, maxi);
7602 gsl_stats_minmax(&mini, &maxi, obs->
obsz, 1, (
size_t) obs->
nr);
7603 LOG(2,
"Observer altitude range: %g ... %g km", mini, maxi);
7604 gsl_stats_minmax(&mini, &maxi, obs->
obslon, 1, (
size_t) obs->
nr);
7605 LOG(2,
"Observer longitude range: %g ... %g deg", mini, maxi);
7606 gsl_stats_minmax(&mini, &maxi, obs->
obslat, 1, (
size_t) obs->
nr);
7607 LOG(2,
"Observer latitude range: %g ... %g deg", mini, maxi);
7608 gsl_stats_minmax(&mini, &maxi, obs->
vpz, 1, (
size_t) obs->
nr);
7609 LOG(2,
"View point altitude range: %g ... %g km", mini, maxi);
7610 gsl_stats_minmax(&mini, &maxi, obs->
vplon, 1, (
size_t) obs->
nr);
7611 LOG(2,
"View point longitude range: %g ... %g deg", mini, maxi);
7612 gsl_stats_minmax(&mini, &maxi, obs->
vplat, 1, (
size_t) obs->
nr);
7613 LOG(2,
"View point latitude range: %g ... %g deg", mini, maxi);
7614 gsl_stats_minmax(&mini, &maxi, obs->
tpz, 1, (
size_t) obs->
nr);
7615 LOG(2,
"Tangent point altitude range: %g ... %g km", mini, maxi);
7616 gsl_stats_minmax(&mini, &maxi, obs->
tplon, 1, (
size_t) obs->
nr);
7617 LOG(2,
"Tangent point longitude range: %g ... %g deg", mini, maxi);
7618 gsl_stats_minmax(&mini, &maxi, obs->
tplat, 1, (
size_t) obs->
nr);
7619 LOG(2,
"Tangent point latitude range: %g ... %g deg", mini, maxi);
7620 for (
int id = 0;
id < ctl->
nd;
id++) {
7621 gsl_stats_minmax(&mini, &maxi, obs->
rad[
id], 1, (
size_t) obs->
nr);
7623 LOG(2,
"Brightness temperature (%.4f cm^-1) range: %g ... %g K",
7624 ctl->
nu[
id], mini, maxi);
7626 LOG(2,
"Radiance (%.4f cm^-1) range: %g ... %g W/(m^2 sr cm^-1)",
7627 ctl->
nu[
id], mini, maxi);
7630 for (
int id = 0;
id < ctl->
nd;
id++) {
7631 gsl_stats_minmax(&mini, &maxi, obs->
tau[
id], 1, (
size_t) obs->
nr);
7633 LOG(2,
"Transmittance (%.4f cm^-1) range: %g ... %g",
7634 ctl->
nu[
id], mini, maxi);
7642 const char *filename,
7650 if (!(out = fopen(filename,
"w")))
7651 ERRMSG(
"Cannot create file!");
7655 "# $1 = time (seconds since 2000-01-01T00:00Z)\n"
7656 "# $2 = observer altitude [km]\n"
7657 "# $3 = observer longitude [deg]\n"
7658 "# $4 = observer latitude [deg]\n"
7659 "# $5 = view point altitude [km]\n"
7660 "# $6 = view point longitude [deg]\n"
7661 "# $7 = view point latitude [deg]\n"
7662 "# $8 = tangent point altitude [km]\n"
7663 "# $9 = tangent point longitude [deg]\n"
7664 "# $10 = tangent point latitude [deg]\n");
7665 for (
int id = 0;
id < ctl->
nd;
id++)
7667 fprintf(out,
"# $%d = brightness temperature (%.4f cm^-1) [K]\n",
7670 fprintf(out,
"# $%d = radiance (%.4f cm^-1) [W/(m^2 sr cm^-1)]\n",
7672 for (
int id = 0;
id < ctl->
nd;
id++)
7673 fprintf(out,
"# $%d = transmittance (%.4f cm^-1) [-]\n", ++n,
7677 for (
int ir = 0; ir < obs->
nr; ir++) {
7678 if (ir == 0 || obs->
time[ir] != obs->
time[ir - 1])
7680 fprintf(out,
"%.2f %g %g %g %g %g %g %g %g %g", obs->
time[ir],
7684 for (
int id = 0;
id < ctl->
nd;
id++)
7685 fprintf(out,
" %g", obs->
rad[
id][ir]);
7686 for (
int id = 0;
id < ctl->
nd;
id++)
7687 fprintf(out,
" %g", obs->
tau[
id][ir]);
7698 const char *filename,
7704 if (!(out = fopen(filename,
"w")))
7705 ERRMSG(
"Cannot create file!");
7716 size_t nr = (size_t) obs->
nr;
7750 for (
int id = 0;
id < ctl->
nd;
id++)
7754 for (
int id = 0;
id < ctl->
nd;
id++)
7766 const char *filename,
7769 const int profile) {
7771 char longname[
LEN], varname[
LEN];
7773 int ncid, varid, dim_profile, dim_ray;
7778 if (nc_open(filename, NC_WRITE, &ncid) != NC_NOERR)
7779 NC(nc_create(filename, NC_NETCDF4, &ncid));
7782 int r = nc_redef(ncid);
7783 if (r != NC_NOERR && r != NC_EINDEFINE)
7787 if (nc_inq_dimid(ncid,
"profile", &dim_profile) != NC_NOERR)
7788 NC(nc_def_dim(ncid,
"profile", NC_UNLIMITED, &dim_profile));
7791 if (nc_inq_dimid(ncid,
"ray", &dim_ray) == NC_NOERR) {
7792 NC(nc_inq_dimlen(ncid, dim_ray, &ray_max));
7793 if (ray_max < 1 || ray_max > (
size_t)
NR)
7794 ERRMSG(
"netCDF dimension ray is out of range!");
7795 if ((
size_t) obs->
nr > ray_max)
7796 ERRMSG(
"profile has too many rays!");
7798 ray_max = (size_t) obs->
nr;
7799 NC(nc_def_dim(ncid,
"ray", ray_max, &dim_ray));
7803 int dimids[2] = { dim_profile, dim_ray };
7806 const int deflate_level = 0;
7807 const int quant_digits = 0;
7810 if (nc_inq_varid(ncid,
"nray", &varid) != NC_NOERR)
7811 NC_DEF_VAR(
"nray", NC_INT, 1, dimids,
"number of ray paths",
"1", 0, 0);
7814 if (nc_inq_varid(ncid,
"time", &varid) != NC_NOERR)
7816 "time in seconds since 2000-01-01, 00:00 UTC",
"s",
7819 if (nc_inq_varid(ncid,
"obs_z", &varid) != NC_NOERR)
7821 "observer altitude",
"km", deflate_level, 0);
7823 if (nc_inq_varid(ncid,
"obs_lon", &varid) != NC_NOERR)
7825 "observer longitude",
"degrees_east", deflate_level, 0);
7827 if (nc_inq_varid(ncid,
"obs_lat", &varid) != NC_NOERR)
7829 "observer latitude",
"degrees_north", deflate_level, 0);
7831 if (nc_inq_varid(ncid,
"vp_z", &varid) != NC_NOERR)
7833 "view point altitude",
"km", deflate_level, 0);
7835 if (nc_inq_varid(ncid,
"vp_lon", &varid) != NC_NOERR)
7837 "view point longitude",
"degrees_east", deflate_level, 0);
7839 if (nc_inq_varid(ncid,
"vp_lat", &varid) != NC_NOERR)
7841 "view point latitude",
"degrees_north", deflate_level, 0);
7843 if (nc_inq_varid(ncid,
"tp_z", &varid) != NC_NOERR)
7845 "tangent point altitude",
"km", deflate_level, 0);
7847 if (nc_inq_varid(ncid,
"tp_lon", &varid) != NC_NOERR)
7849 "tangent point longitude",
"degrees_east", deflate_level, 0);
7851 if (nc_inq_varid(ncid,
"tp_lat", &varid) != NC_NOERR)
7853 "tangent point latitude",
"degrees_north", deflate_level, 0);
7856 for (
int id = 0;
id < ctl->
nd;
id++) {
7858 sprintf(varname,
"rad_%.4f", ctl->
nu[
id]);
7859 if (nc_inq_varid(ncid, varname, &varid) != NC_NOERR) {
7861 sprintf(longname,
"brightness temperature (%.4f cm^-1)", ctl->
nu[
id]);
7862 NC_DEF_VAR(varname, NC_DOUBLE, 2, dimids, longname,
"K",
7863 deflate_level, quant_digits);
7865 sprintf(longname,
"radiance (%.4f cm^-1)", ctl->
nu[
id]);
7866 NC_DEF_VAR(varname, NC_DOUBLE, 2, dimids, longname,
7867 "W/(m^2 sr cm^-1)", deflate_level, quant_digits);
7871 sprintf(varname,
"tau_%.4f", ctl->
nu[
id]);
7872 if (nc_inq_varid(ncid, varname, &varid) != NC_NOERR) {
7873 sprintf(longname,
"transmittance (%.4f cm^-1)", ctl->
nu[
id]);
7874 NC_DEF_VAR(varname, NC_DOUBLE, 2, dimids, longname,
"1",
7875 deflate_level, quant_digits);
7880 NC(nc_enddef(ncid));
7883 size_t start[2] = { (size_t) profile, 0 };
7884 size_t count[2] = { 1, (size_t) obs->
nr };
7888 NC(nc_inq_varid(ncid,
"nray", &varid));
7889 NC(nc_put_vara_int(ncid, varid, start, count, &nr));
7892 NC(nc_inq_varid(ncid,
"time", &varid));
7893 NC(nc_put_vara_double(ncid, varid, start, count, obs->
time));
7895 NC(nc_inq_varid(ncid,
"obs_z", &varid));
7896 NC(nc_put_vara_double(ncid, varid, start, count, obs->
obsz));
7898 NC(nc_inq_varid(ncid,
"obs_lon", &varid));
7899 NC(nc_put_vara_double(ncid, varid, start, count, obs->
obslon));
7901 NC(nc_inq_varid(ncid,
"obs_lat", &varid));
7902 NC(nc_put_vara_double(ncid, varid, start, count, obs->
obslat));
7904 NC(nc_inq_varid(ncid,
"vp_z", &varid));
7905 NC(nc_put_vara_double(ncid, varid, start, count, obs->
vpz));
7907 NC(nc_inq_varid(ncid,
"vp_lon", &varid));
7908 NC(nc_put_vara_double(ncid, varid, start, count, obs->
vplon));
7910 NC(nc_inq_varid(ncid,
"vp_lat", &varid));
7911 NC(nc_put_vara_double(ncid, varid, start, count, obs->
vplat));
7913 NC(nc_inq_varid(ncid,
"tp_z", &varid));
7914 NC(nc_put_vara_double(ncid, varid, start, count, obs->
tpz));
7916 NC(nc_inq_varid(ncid,
"tp_lon", &varid));
7917 NC(nc_put_vara_double(ncid, varid, start, count, obs->
tplon));
7919 NC(nc_inq_varid(ncid,
"tp_lat", &varid));
7920 NC(nc_put_vara_double(ncid, varid, start, count, obs->
tplat));
7923 for (
int id = 0;
id < ctl->
nd;
id++) {
7924 sprintf(varname,
"rad_%.4f", ctl->
nu[
id]);
7925 NC(nc_inq_varid(ncid, varname, &varid));
7926 NC(nc_put_vara_double(ncid, varid, start, count, obs->
rad[
id]));
7928 sprintf(varname,
"tau_%.4f", ctl->
nu[
id]);
7929 NC(nc_inq_varid(ncid, varname, &varid));
7930 NC(nc_put_vara_double(ncid, varid, start, count, obs->
tau[
id]));
7941 const char *filename,
7947 LOG(1,
"Write shape function: %s", filename);
7951 if (!(out = fopen(filename,
"w")))
7952 ERRMSG(
"Cannot create file!");
7956 "# $1 = shape function x-value [-]\n"
7957 "# $2 = shape function y-value [-]\n\n");
7960 for (
int i = 0; i < n; i++)
7961 fprintf(out,
"%.10g %.10g\n", x[i], y[i]);
7970 const char *quantity,
7974 const gsl_matrix *s) {
7977 const size_t n = s->size1;
7982 gsl_vector *x_aux = gsl_vector_alloc(n);
7985 for (
size_t i = 0; i < n; i++)
7986 gsl_vector_set(x_aux, i, sqrt(gsl_matrix_get(s, i, i)));
7991 x2atm(ctl, x_aux, atm_aux);
7992 sprintf(filename,
"atm_err_%s.tab", quantity);
7996 gsl_vector_free(x_aux);
8006 for (
int ig = 0; ig < ctl->
ng; ig++)
8007 for (
int id = 0;
id < ctl->
nd;
id++) {
8010 if (tbl->
np[
id][ig] <= 0) {
8011 WARN(
"Skip writing empty emissivity table: emitter=%s, nu=%.4f",
8021 else if (ctl->
tblfmt == 2)
8025 else if (ctl->
tblfmt == 3)
8034 for (
int id = 0;
id < ctl->
nd;
id++) {
8035 char filename[2 *
LEN];
8036 sprintf(filename,
"%s_%.4f.filt", ctl->
tblbase, ctl->
nu[
id]);
8051 char filename[2 *
LEN];
8052 sprintf(filename,
"%s_%.4f_%s.tab", ctl->
tblbase,
8057 if (!(out = fopen(filename,
"w"))) {
8058 ERRMSG(
"Cannot create emissivity table: %s", filename);
8060 LOG(1,
"Write emissivity table: %s", filename);
8064 "# $1 = pressure [hPa]\n"
8065 "# $2 = temperature [K]\n"
8066 "# $3 = column density [molecules/cm^2]\n"
8067 "# $4 = emissivity [-]\n");
8070 for (
int ip = 0; ip < tbl->
np[id][ig]; ip++)
8071 for (
int it = 0; it < tbl->
nt[id][ig][ip]; it++) {
8073 for (
int iu = 0; iu < tbl->
nu[id][ig][ip][it]; iu++)
8074 fprintf(out,
"%g %g %e %e\n",
8075 tbl->
p[
id][ig][ip], tbl->
t[
id][ig][ip][it],
8076 exp(tbl->
logu[
id][ig][ip][it][iu]),
8077 exp(tbl->
logeps[
id][ig][ip][it][iu]));
8093 char filename[2 *
LEN];
8094 sprintf(filename,
"%s_%.4f_%s.bin",
8099 if (!(out = fopen(filename,
"w"))) {
8100 ERRMSG(
"Cannot create emissivity table: %s", filename);
8102 LOG(1,
"Write emissivity table: %s", filename);
8107 uint8_t *work = NULL;
8108 ALLOC(work, uint8_t, need);
8109 tbl_pack(tbl,
id, ig, work, &used);
8111 ERRMSG(
"Internal error: packed size mismatch!");
8117 FWRITE(work, uint8_t, used, out);
8135 char filename[2 *
LEN];
8140 if (nc_open(filename, NC_WRITE, &ncid) != NC_NOERR) {
8141 if (nc_create(filename, NC_NETCDF4 | NC_CLOBBER, &ncid) != NC_NOERR)
8142 ERRMSG(
"Cannot open or create emissivity table: %s", filename);
8145 NC(nc_enddef(ncid));
8149 char varname[
LEN], dimname[
LEN];
8150 sprintf(varname,
"tbl_%.4f", ctl->
nu[
id]);
8151 sprintf(dimname,
"len_%.4f", ctl->
nu[
id]);
8154 LOG(1,
"Write emissivity table: %s in %s", varname, filename);
8159 uint8_t *work = NULL;
8160 ALLOC(work, uint8_t, need);
8163 tbl_pack(tbl,
id, ig, work, &used);
8165 ERRMSG(
"Internal error: packed size mismatch!");
8169 if (nc_inq_varid(ncid, varname, &tmp) == NC_NOERR)
8170 ERRMSG(
"Table already present!");
8175 NC(nc_def_dim(ncid, dimname, used, &dimid));
8176 int dimids[1] = { dimid };
8178 "Packed lookup table blob",
"1", 0, 0);
8179 NC(nc_enddef(ncid));
8182 NC(nc_put_var_uchar(ncid, varid, (
const unsigned char *) work));
8195 const gsl_vector *x,
8201 for (
int ip = 0; ip < atm->
np; ip++)
8206 for (
int ip = 0; ip < atm->
np; ip++)
8211 for (
int ig = 0; ig < ctl->
ng; ig++)
8212 for (
int ip = 0; ip < atm->
np; ip++)
8218 for (
int iw = 0; iw < ctl->
nw; iw++)
8219 for (
int ip = 0; ip < atm->
np; ip++)
8230 for (
int icl = 0; icl < ctl->
ncl; icl++)
8237 for (
int isf = 0; isf < ctl->
nsf; isf++)
8245 const gsl_vector *x,
8249 *value = gsl_vector_get(x, *n);
8257 const gsl_vector *y,
8263 for (
int ir = 0; ir < obs->
nr; ir++)
8264 for (
int id = 0;
id < ctl->
nd;
id++)
8265 if (isfinite(obs->
rad[
id][ir])) {
8266 obs->
rad[id][ir] = gsl_vector_get(y, m);
double intpol_tbl_eps(const tbl_t *tbl, const int ig, const int id, const int ip, const int it, const double logu)
Interpolate gas emissivity as a function of column amount.
void analyze_avk(const ret_t *ret, const ctl_t *ctl, const atm_t *atm, const int *iqa, const int *ipa, const gsl_matrix *avk)
Analyze averaging kernel (AVK) matrix for retrieval diagnostics.
void read_tbl_bin(const ctl_t *ctl, tbl_t *tbl, const int id, const int ig)
Read a single compact binary emissivity lookup table.
double cost_function(const gsl_vector *dx, const gsl_vector *dy, const gsl_matrix *s_a_inv, const gsl_vector *sig_eps_inv)
Compute the normalized quadratic cost function for optimal estimation.
double read_obs_rfm(const char *basename, const double z, const double *nu, const double *f, const int n)
Read and spectrally convolve an RFM output spectrum.
void read_matrix(const char *dirname, const char *filename, gsl_matrix *matrix)
Read a numerical matrix from an ASCII file.
void timer(const char *name, const char *file, const char *func, int line, int mode)
Simple wall-clock timer for runtime diagnostics.
void read_rfm_spec(const char *filename, double *nu, double *rad, int *npts)
Read a Reference Forward Model (RFM) ASCII spectrum.
void tbl_pack(const tbl_t *tbl, int id, int ig, uint8_t *buf, size_t *bytes_used)
Pack a lookup table into a contiguous binary buffer.
double cos_sza(const double sec, const double lon, const double lat)
Calculates the cosine of the solar zenith angle.
void read_atm_bin(const char *filename, const ctl_t *ctl, atm_t *atm)
Read atmospheric data in binary format.
void write_obs_asc(const char *filename, const ctl_t *ctl, const obs_t *obs)
Write observation data to an ASCII text file.
void formod_rfm(const ctl_t *ctl, const tbl_t *tbl, const atm_t *atm, obs_t *obs)
Forward-model radiance and transmittance with the Reference Forward Model (RFM).
void write_atm(const char *dirname, const char *filename, const ctl_t *ctl, const atm_t *atm)
Write atmospheric data to a file.
int locate_reg(const double *xx, const int n, const double x)
Locate index for interpolation on a regular (uniform) grid.
void intpol_tbl_ega(const ctl_t *ctl, const tbl_t *tbl, const los_t *los, const int ip, double tau_path[ND][NG], double tau_seg[ND])
Interpolate emissivities and transmittances using the Emissivity Growth Approximation (EGA).
double ctmo2(const double nu, const double p, const double t)
Compute O₂ collision-induced absorption coefficient.
void write_obs_nc(const char *filename, const ctl_t *ctl, const obs_t *obs, const int profile)
Write one observation profile to a NetCDF file.
void tbl_free(const ctl_t *ctl, tbl_t *tbl)
Free lookup table and all internally allocated memory.
void write_tbl_asc(const ctl_t *ctl, const tbl_t *tbl, const int id, const int ig)
Write one emissivity lookup table in human-readable ASCII format.
void write_tbl_nc(const ctl_t *ctl, const tbl_t *tbl, const int id, const int ig)
Write one packed lookup table to a NetCDF file.
void idx2name(const ctl_t *ctl, const int idx, char *quantity)
Convert a quantity index to a descriptive name string.
void read_ctl(int argc, char *argv[], ctl_t *ctl)
Read model control parameters from command-line and configuration input.
void formod_continua(const ctl_t *ctl, const los_t *los, const int ip, double *beta)
Compute total extinction including gaseous continua.
void read_obs_bin(const char *filename, const ctl_t *ctl, obs_t *obs)
Read binary-formatted observation data from a file.
void raytrace(const ctl_t *ctl, const atm_t *atm, obs_t *obs, los_t *los, const int ir)
Perform line-of-sight (LOS) ray tracing through the atmosphere.
void matrix_product(const gsl_matrix *a, const gsl_vector *b, const int transpose, gsl_matrix *c)
Compute structured matrix products of the form or .
int locate_irr(const double *xx, const int n, const double x)
Locate index for interpolation on an irregular grid.
void day2doy(int year, int mon, int day, int *doy)
Convert a calendar date to day-of-year.
void write_atm_nc(const char *filename, const ctl_t *ctl, const atm_t *atm, int profile)
Write one atmospheric profile to a netCDF file.
void time2jsec(const int year, const int mon, const int day, const int hour, const int min, const int sec, const double remain, double *jsec)
Converts time components to seconds since January 1, 2000, 12:00:00 UTC.
void x2atm(const ctl_t *ctl, const gsl_vector *x, atm_t *atm)
Map retrieval state vector back to atmospheric structure.
void atm2x_help(const double value, const int value_iqa, const int value_ip, gsl_vector *x, int *iqa, int *ipa, size_t *n)
Append a single atmospheric value to the state vector.
double ctmh2o(const double nu, const double p, const double t, const double q, const double u)
Compute water vapor continuum (optical depth).
void write_tbl_bin(const ctl_t *ctl, const tbl_t *tbl, const int id, const int ig)
Write one emissivity lookup table in compact binary format.
void intpol_tbl_cga(const ctl_t *ctl, const tbl_t *tbl, const los_t *los, const int ip, double tau_path[ND][NG], double tau_seg[ND])
Interpolate emissivities and transmittances using the Curtis–Godson approximation (CGA).
void write_atm_rfm(const char *filename, const ctl_t *ctl, const atm_t *atm)
Write atmospheric profile in RFM-compatible format.
void set_cov_meas(const ret_t *ret, const ctl_t *ctl, const obs_t *obs, gsl_vector *sig_noise, gsl_vector *sig_formod, gsl_vector *sig_eps_inv)
Construct measurement error standard deviations and their inverse.
void write_tbl(const ctl_t *ctl, const tbl_t *tbl)
Write emissivity lookup tables to disk.
size_t tbl_unpack(tbl_t *tbl, int id, int ig, const uint8_t *buf)
Unpack a lookup table from a contiguous binary buffer.
void intpol_atm(const ctl_t *ctl, const atm_t *atm, const double z, double *p, double *t, double *q, double *k)
Interpolate atmospheric state variables at a given altitude.
int find_emitter(const ctl_t *ctl, const char *emitter)
Find gas species index by name.
void optimal_estimation(ret_t *ret, ctl_t *ctl, tbl_t *tbl, obs_t *obs_meas, obs_t *obs_i, atm_t *atm_apr, atm_t *atm_i, double *chisq)
Perform optimal estimation retrieval using Levenberg–Marquardt minimization.
double intpol_tbl_u(const tbl_t *tbl, const int ig, const int id, const int ip, const int it, const double logeps)
Interpolate column amount as a function of emissivity.
void tangent_point(const los_t *los, double *tpz, double *tplon, double *tplat)
Determine the tangent point along a line of sight (LOS).
void formod_pencil(const ctl_t *ctl, const tbl_t *tbl, const atm_t *atm, obs_t *obs, const int ir)
Compute line-of-sight radiances using the pencil-beam forward model.
double ctmco2(const double nu, const double p, const double t, const double u)
Compute carbon dioxide continuum (optical depth).
void write_atm_asc(const char *filename, const ctl_t *ctl, const atm_t *atm)
Write atmospheric data to an ASCII file.
void read_atm(const char *dirname, const char *filename, const ctl_t *ctl, atm_t *atm)
Read atmospheric input data from a file.
void copy_obs(const ctl_t *ctl, obs_t *obs_dest, const obs_t *obs_src, const int init)
Copy or initialize observation geometry and radiance data.
void read_obs(const char *dirname, const char *filename, const ctl_t *ctl, obs_t *obs)
Read observation data from an input file.
void write_obs(const char *dirname, const char *filename, const ctl_t *ctl, const obs_t *obs)
Write observation data to an output file in ASCII or binary format.
void write_obs_bin(const char *filename, const ctl_t *ctl, const obs_t *obs)
Write observation data in binary format to a file.
void x2atm_help(double *value, const gsl_vector *x, size_t *n)
Helper function to extract a single value from the retrieval state vector.
void cart2geo(const double *x, double *z, double *lon, double *lat)
Converts Cartesian coordinates to geographic coordinates.
void formod_fov(const ctl_t *ctl, obs_t *obs)
Apply field-of-view (FOV) convolution to modeled radiances.
void doy2day(int year, int doy, int *mon, int *day)
Convert a day-of-year value to a calendar date.
void kernel(const ctl_t *ctl, const tbl_t *tbl, atm_t *atm, obs_t *obs, gsl_matrix *k)
Compute the Jacobian (kernel) matrix by finite differences.
void read_obs_nc(const char *filename, const ctl_t *ctl, obs_t *obs, const int profile)
Read one observation profile from a NetCDF file.
void init_srcfunc(const ctl_t *ctl, tbl_t *tbl)
Initialize source function lookup tables from emissivity data.
void matrix_invert(gsl_matrix *a)
Invert a square matrix, optimized for diagonal or symmetric positive-definite matrices.
void read_ret(int argc, char *argv[], const ctl_t *ctl, ret_t *ret)
Read retrieval configuration and error parameters.
double scan_ctl(int argc, char *argv[], const char *varname, const int arridx, const char *defvalue, char *value)
Scan control file or command-line arguments for a configuration variable.
void write_shape(const char *filename, const double *x, const double *y, const int n)
Write tabulated shape function data to a text file.
void formod(const ctl_t *ctl, const tbl_t *tbl, atm_t *atm, obs_t *obs)
Execute the selected forward model.
void read_atm_asc(const char *filename, const ctl_t *ctl, atm_t *atm)
Read atmospheric data in ASCII format.
void read_tbl_asc(const ctl_t *ctl, tbl_t *tbl, const int id, const int ig)
Read a single ASCII emissivity lookup table.
void formod_srcfunc(const ctl_t *ctl, const tbl_t *tbl, const double t, double *src)
Interpolate the source function (Planck radiance) at a given temperature.
void analyze_avk_quantity(const gsl_matrix *avk, const int iq, const int *ipa, const size_t *n0, const size_t *n1, double *cont, double *res)
Analyze averaging kernel submatrix for a specific retrieved quantity.
void jsec2time(const double jsec, int *year, int *mon, int *day, int *hour, int *min, int *sec, double *remain)
Converts Julian seconds to calendar date and time components.
tbl_t * read_tbl(const ctl_t *ctl)
Read emissivity lookup tables from disk.
void read_tbl_nc_channel(const ctl_t *ctl, tbl_t *tbl, int id, int ig, int ncid)
Read one packed emissivity lookup table from an open NetCDF file.
void read_atm_nc(const char *filename, const ctl_t *ctl, atm_t *atm, int profile)
Read one atmospheric profile from a netCDF file.
void copy_atm(const ctl_t *ctl, atm_t *atm_dest, const atm_t *atm_src, const int init)
Copy or initialize atmospheric profile data.
size_t obs2y(const ctl_t *ctl, const obs_t *obs, gsl_vector *y, int *ida, int *ira)
Convert observation radiances into a measurement vector.
void y2obs(const ctl_t *ctl, const gsl_vector *y, obs_t *obs)
Copy elements from the measurement vector y into the observation structure.
void hydrostatic(const ctl_t *ctl, atm_t *atm)
Adjust pressure profile using the hydrostatic equation.
void read_shape(const char *filename, double *x, double *y, int *n)
Read a two-column shape function from an ASCII file.
double ctmn2(const double nu, const double p, const double t)
Compute N₂ collision-induced absorption coefficient.
size_t atm2x(const ctl_t *ctl, const atm_t *atm, gsl_vector *x, int *iqa, int *ipa)
Convert atmospheric data to state vector elements.
void climatology(const ctl_t *ctl, atm_t *atm)
Initializes atmospheric climatology profiles.
void geo2cart(const double z, const double lon, const double lat, double *x)
Converts geographic coordinates (longitude, latitude, altitude) to Cartesian coordinates.
void write_matrix(const char *dirname, const char *filename, const ctl_t *ctl, const gsl_matrix *matrix, const atm_t *atm, const obs_t *obs, const char *rowspace, const char *colspace, const char *sort)
Write a fully annotated matrix (e.g., Jacobian or gain matrix) to file.
void set_cov_apr(const ret_t *ret, const ctl_t *ctl, const atm_t *atm, const int *iqa, const int *ipa, gsl_matrix *s_a)
Construct the a priori covariance matrix for retrieval parameters.
void write_stddev(const char *quantity, const ret_t *ret, const ctl_t *ctl, const atm_t *atm, const gsl_matrix *s)
Write retrieval standard deviation profiles to disk.
size_t tbl_packed_size(const tbl_t *tbl, int id, int ig)
Compute required buffer size (in bytes) for tbl_pack().
int locate_tbl(const float *xx, const int n, const double x)
Locate index for interpolation within emissivity table grids.
void write_atm_bin(const char *filename, const ctl_t *ctl, const atm_t *atm)
Write atmospheric data to a binary file.
void read_obs_asc(const char *filename, const ctl_t *ctl, obs_t *obs)
Read ASCII-formatted observation data from a file.
JURASSIC library declarations.
#define N
Maximum size of state vector.
#define IDXCLZ
Index for cloud layer height.
#define LEN
Maximum length of ASCII data lines.
#define RE
Mean radius of Earth [km].
#define BRIGHT(rad, nu)
Compute brightness temperature from radiance.
#define P0
Standard pressure [hPa].
#define KB
Boltzmann constant [kg m^2/(K s^2)].
#define POW2(x)
Compute the square of a value.
#define NFOV
Number of ray paths used for FOV calculations.
#define FWRITE(ptr, type, size, out)
Write binary data to a file.
#define NC_PUT_ATT_GLOBAL(attname, text)
Add a global text attribute to a NetCDF file.
#define NC(cmd)
Execute a NetCDF command and check for errors.
#define TBL_LOG(tbl, id, ig)
Log detailed statistics of an emissivity look-up table.
#define DOTP(a, b)
Compute dot product of two 3D vectors.
#define O2
Oxygen concentration.
#define UMAX
Maximum column density [molecules/cm^2].
#define MIN(a, b)
Determine the minimum of two values.
#define IDXCLDZ
Index for cloud layer depth.
#define ERRMSG(...)
Print an error message with contextual information and terminate the program.
#define NC_PUT_INT(varname, ptr, hyperslab)
Write integer data to a NetCDF variable.
#define CLAMP(v, lo, hi)
Clamp a value to a specified range.
#define RFMNPTS
Maximum number of RFM spectral grid points.
#define IDXK(iw)
Indices for extinction.
#define M
Maximum size of measurement vector.
#define G0
Standard gravity [m/s^2].
#define NQ
Maximum number of quantities.
#define ND
Maximum number of radiance channels.
#define NA
Avogadro's number.
#define LOGY(x0, y0, x1, y1, x)
Compute logarithmic interpolation in y.
#define NSHAPE
Maximum number of shape function grid points.
#define IDXSFT
Index for surface layer temperature.
#define RI
Ideal gas constant [J/(mol K)].
#define NORM(a)
Compute the norm (magnitude) of a 3D vector.
#define IDXSFEPS(isf)
Indices for surface layer emissivity.
#define IDXCLK(icl)
Indices for cloud layer extinction.
#define TOK(line, tok, format, var)
Tokenize a string and parse a variable.
#define WARN(...)
Print a warning message with contextual information.
#define TBLNU
Maximum number of column densities per emissivity curve.
#define IDXP
Index for pressure.
#define ALLOC(ptr, type, n)
Allocate memory for an array.
#define DEG2RAD(deg)
Convert degrees to radians.
#define TSUN
Effective temperature of the sun [K].
#define RAD2DEG(rad)
Convert radians to degrees.
#define TBLNT
Maximum number of temperatures in emissivity tables.
#define NP
Maximum number of atmospheric data points.
#define POW3(x)
Compute the cube of a value.
#define PLANCK(T, nu)
Compute spectral radiance using Planck’s law.
#define NG
Maximum number of emitters.
#define EPSMAX
Maximum emissivity.
#define LOG(level,...)
Print a log message with a specified logging level.
#define TBLNS
Maximum number of source function temperature levels.
#define NC_DEF_VAR(varname, type, ndims, dims, long_name, units, level, quant)
Define a NetCDF variable with attributes.
#define N2
Nitrogen concentration.
#define REFRAC(p, T)
Compute air refractivity (n - 1).
#define TBLNP
Maximum number of pressure levels in emissivity tables.
#define NSF
Maximum number of surface layer spectral grid points.
#define NCL
Maximum number of cloud layer spectral grid points.
#define DIST(a, b)
Compute Cartesian distance between two 3D vectors.
#define NC_PUT_DOUBLE(varname, ptr, hyperslab)
Write double precision data to a NetCDF variable.
#define FREAD(ptr, type, size, out)
Read binary data from a file.
#define LIN(x0, y0, x1, y1, x)
Compute linear interpolation.
#define NLOS
Maximum number of LOS points.
#define NR
Maximum number of ray paths.
#define IDXQ(ig)
Indices for volume mixing ratios.
#define TMAX
Maximum temperature for source function [K].
#define TMIN
Minimum temperature for source function [K].
#define NW
Maximum number of spectral windows.
#define MAX(a, b)
Determine the maximum of two values.
#define IDXT
Index for temperature.
Atmospheric profile data.
double time[NP]
Time (seconds since 2000-01-01T00:00Z).
double sfeps[NSF]
Surface emissivity.
double k[NW][NP]
Extinction [km^-1].
double lat[NP]
Latitude [deg].
double lon[NP]
Longitude [deg].
double t[NP]
Temperature [K].
double clz
Cloud layer height [km].
int np
Number of data points.
double cldz
Cloud layer depth [km].
double sft
Surface temperature [K].
double z[NP]
Altitude [km].
double clk[NCL]
Cloud layer extinction [km^-1].
double q[NG][NP]
Volume mixing ratio [ppv].
double p[NP]
Pressure [hPa].
int write_matrix
Write matrix file (0=no, 1=yes).
int nw
Number of spectral windows.
int atmfmt
Atmospheric data file format (1=ASCII, 2=binary, 3=netCDF).
double retp_zmin
Minimum altitude for pressure retrieval [km].
double nu[ND]
Centroid wavenumber of each channel [cm^-1].
int ig_co2
Emitter index of CO2.
double retk_zmax[NW]
Maximum altitude for extinction retrieval [km].
double sfnu[NSF]
Surface layer wavenumber [cm^-1].
char rfmhit[LEN]
HITRAN file for RFM.
char tblbase[LEN]
Basename for table files and filter function files.
char rfmbin[LEN]
Path to RFM binary.
double hydz
Reference height for hydrostatic pressure profile (-999 to skip) [km].
int ctm_co2
Compute CO2 continuum (0=no, 1=yes).
double rett_zmax
Maximum altitude for temperature retrieval [km].
int ret_sfeps
Retrieve surface layer emissivity (0=no, 1=yes).
int ret_sft
Retrieve surface layer temperature (0=no, 1=yes).
int ret_clz
Retrieve cloud layer height (0=no, 1=yes).
int ctm_n2
Compute N2 continuum (0=no, 1=yes).
char fov[LEN]
Field-of-view data file.
char rfmxsc[NG][LEN]
Emitter cross-section files for RFM.
int window[ND]
Window index of each channel.
int ctm_h2o
Compute H2O continuum (0=no, 1=yes).
int formod
Forward model (0=CGA, 1=EGA, 2=RFM).
double retq_zmax[NG]
Maximum altitude for volume mixing ratio retrieval [km].
double retq_zmin[NG]
Minimum altitude for volume mixing ratio retrieval [km].
int ng
Number of emitters.
double clnu[NCL]
Cloud layer wavenumber [cm^-1].
int refrac
Take into account refractivity (0=no, 1=yes).
int ig_o2
Emitter index of O2.
double rett_zmin
Minimum altitude for temperature retrieval [km].
double sfsza
Solar zenith angle at the surface [deg] (-999=auto).
int nd
Number of radiance channels.
int fov_n
Field-of-view number of data points.
int sftype
Surface treatment (0=none, 1=emissions, 2=downward, 3=solar).
double retk_zmin[NW]
Minimum altitude for extinction retrieval [km].
int ncl
Number of cloud layer spectral grid points.
int ig_n2
Emitter index of N2.
int obsfmt
Observation data file format (1=ASCII, 2=binary, 3=netCDF).
double fov_dz[NSHAPE]
Field-of-view vertical distance [km].
int ctm_o2
Compute O2 continuum (0=no, 1=yes).
int ret_clk
Retrieve cloud layer extinction (0=no, 1=yes).
char emitter[NG][LEN]
Name of each emitter.
int nsf
Number of surface layer spectral grid points.
double rayds
Maximum step length for raytracing [km].
int ret_cldz
Retrieve cloud layer depth (0=no, 1=yes).
int ig_h2o
Emitter index of H2O.
int tblfmt
Look-up table file format (1=ASCII, 2=binary, 3=netCDF).
double raydz
Vertical step length for raytracing [km].
int write_bbt
Use brightness temperature instead of radiance (0=no, 1=yes).
double fov_w[NSHAPE]
Field-of-view weighting factor.
double retp_zmax
Maximum altitude for pressure retrieval [km].
double z[NLOS]
Altitude [km].
double eps[NLOS][ND]
Segment emissivity.
double cgu[NLOS][NG]
Curtis-Godson column density [molecules/cm^2].
double q[NLOS][NG]
Volume mixing ratio [ppv].
double sft
Surface temperature [K].
double cgt[NLOS][NG]
Curtis-Godson temperature [K].
double lon[NLOS]
Longitude [deg].
double ds[NLOS]
Segment length [km].
int np
Number of LOS points.
double u[NLOS][NG]
Column density [molecules/cm^2].
double lat[NLOS]
Latitude [deg].
double src[NLOS][ND]
Segment source function [W/(m^2 sr cm^-1)].
double k[NLOS][ND]
Extinction [km^-1].
double sfeps[ND]
Surface emissivity.
double cgp[NLOS][NG]
Curtis-Godson pressure [hPa].
double t[NLOS]
Temperature [K].
double p[NLOS]
Pressure [hPa].
Observation geometry and radiance data.
double tau[ND][NR]
Transmittance of ray path.
double rad[ND][NR]
Radiance [W/(m^2 sr cm^-1)].
double tplon[NR]
Tangent point longitude [deg].
double vpz[NR]
View point altitude [km].
double vplat[NR]
View point latitude [deg].
double obslon[NR]
Observer longitude [deg].
double obslat[NR]
Observer latitude [deg].
double obsz[NR]
Observer altitude [km].
double tplat[NR]
Tangent point latitude [deg].
double vplon[NR]
View point longitude [deg].
double time[NR]
Time (seconds since 2000-01-01T00:00Z).
double tpz[NR]
Tangent point altitude [km].
int nr
Number of ray paths.
Retrieval control parameters.
double err_press_cz
Vertical correlation length for pressure error [km].
double err_press
Pressure error [%].
double err_k_cz[NW]
Vertical correlation length for extinction error [km].
int err_ana
Carry out error analysis (0=no, 1=yes).
double err_k_ch[NW]
Horizontal correlation length for extinction error [km].
double err_temp_cz
Vertical correlation length for temperature error [km].
double err_formod[ND]
Forward model error [%].
double conv_dmin
Minimum normalized step size in state space.
double err_temp
Temperature error [K].
double err_q_cz[NG]
Vertical correlation length for volume mixing ratio error [km].
double err_noise[ND]
Noise error [W/(m^2 sr cm^-1)].
double err_clz
Cloud height error [km].
double err_sft
Surface temperature error [K].
double err_clk[NCL]
Cloud extinction error [km^-1].
double err_temp_ch
Horizontal correlation length for temperature error [km].
int kernel_recomp
Re-computation of kernel matrix (number of iterations).
int conv_itmax
Maximum number of iterations.
double err_cldz
Cloud depth error [km].
double err_press_ch
Horizontal correlation length for pressure error [km].
double err_q_ch[NG]
Horizontal correlation length for volume mixing ratio error [km].
double err_q[NG]
Volume mixing ratio error [%].
char dir[LEN]
Working directory.
double err_sfeps[NSF]
Surface emissivity error.
double err_k[NW]
Extinction error [km^-1].
Emissivity look-up tables.
float * logu[ND][NG][TBLNP][TBLNT]
Logarithm of column density [molecules/cm^2].
double sr[TBLNS][ND]
Source function radiance [W/(m^2 sr cm^-1)].
double p[ND][NG][TBLNP]
Pressure [hPa].
int nu[ND][NG][TBLNP][TBLNT]
Number of column densities.
int filt_n[ND]
Filter function number of spectral grid points.
int nt[ND][NG][TBLNP]
Number of temperatures.
float * logeps[ND][NG][TBLNP][TBLNT]
Logarithm of emissivity.
double filt_f[ND][NSHAPE]
Filter function values.
double t[ND][NG][TBLNP][TBLNT]
Temperature [K].
double lnp[ND][NG][TBLNP]
Log-pressure [hPa].
double st[TBLNS]
Source function temperature [K].
double filt_nu[ND][NSHAPE]
Filter function spectral grid points [cm^-1].
int np[ND][NG]
Number of pressure levels.