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++)
86 const char *filename =
89 write_atm(dirname, filename, ctl, atm_cont, profile);
91 "atm_res.tab", &dirname, &profile);
92 write_atm(dirname, filename, ctl, atm_res, profile);
102 const gsl_matrix *avk,
112 for (
size_t i = 0; i < n1[iq]; i++) {
115 for (
size_t j = 0; j < n1[iq]; j++)
116 cont[ipa[n0[iq] + i]] += gsl_matrix_get(avk, n0[iq] + i, n0[iq] + j);
119 res[ipa[n0[iq] + i]] = 1 / gsl_matrix_get(avk, n0[iq] + i, n0[iq] + i);
135 for (
int ip = 0; ip < atm->
np; ip++)
140 for (
int ip = 0; ip < atm->
np; ip++)
145 for (
int ig = 0; ig < ctl->
ng; ig++)
146 for (
int ip = 0; ip < atm->
np; ip++)
152 for (
int iw = 0; iw < ctl->
nw; iw++)
153 for (
int ip = 0; ip < atm->
np; ip++)
164 for (
int icl = 0; icl < ctl->
ncl; icl++)
171 for (
int isf = 0; isf < ctl->
nsf; isf++)
190 gsl_vector_set(x, *n, value);
206 const double radius =
NORM(x);
208 *lat =
RAD2DEG(asin(x[2] / radius));
209 *lon =
RAD2DEG(atan2(x[1], x[0]));
219 static const double z[121] = {
220 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
221 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
222 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
223 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
224 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
225 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
226 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120
229 static const double pre[121] = {
230 1017, 901.083, 796.45, 702.227, 617.614, 541.644, 473.437, 412.288,
231 357.603, 308.96, 265.994, 228.348, 195.619, 167.351, 143.039, 122.198,
232 104.369, 89.141, 76.1528, 65.0804, 55.641, 47.591, 40.7233, 34.8637,
233 29.8633, 25.5956, 21.9534, 18.8445, 16.1909, 13.9258, 11.9913,
234 10.34, 8.92988, 7.72454, 6.6924, 5.80701, 5.04654, 4.39238, 3.82902,
235 3.34337, 2.92413, 2.56128, 2.2464, 1.97258, 1.73384, 1.52519, 1.34242,
236 1.18197, 1.04086, 0.916546, 0.806832, 0.709875, 0.624101, 0.548176,
237 0.480974, 0.421507, 0.368904, 0.322408, 0.281386, 0.245249, 0.213465,
238 0.185549, 0.161072, 0.139644, 0.120913, 0.104568, 0.0903249, 0.0779269,
239 0.0671493, 0.0577962, 0.0496902, 0.0426736, 0.0366093, 0.0313743,
240 0.0268598, 0.0229699, 0.0196206, 0.0167399, 0.0142646, 0.0121397,
241 0.0103181, 0.00875775, 0.00742226, 0.00628076, 0.00530519, 0.00447183,
242 0.00376124, 0.00315632, 0.00264248, 0.00220738, 0.00184003, 0.00153095,
243 0.00127204, 0.00105608, 0.000876652, 0.00072798, 0.00060492,
244 0.000503201, 0.000419226, 0.000349896, 0.000292659, 0.000245421,
245 0.000206394, 0.000174125, 0.000147441, 0.000125333, 0.000106985,
246 9.173e-05, 7.90172e-05, 6.84172e-05, 5.95574e-05, 5.21183e-05,
247 4.58348e-05, 4.05127e-05, 3.59987e-05, 3.21583e-05, 2.88718e-05,
248 2.60322e-05, 2.35687e-05, 2.14263e-05, 1.95489e-05
251 static const double tem[121] = {
252 285.14, 279.34, 273.91, 268.3, 263.24, 256.55, 250.2, 242.82, 236.17,
253 229.87, 225.04, 221.19, 218.85, 217.19, 216.2, 215.68, 215.42, 215.55,
254 215.92, 216.4, 216.93, 217.45, 218, 218.68, 219.39, 220.25, 221.3,
255 222.41, 223.88, 225.42, 227.2, 229.52, 231.89, 234.51, 236.85, 239.42,
256 241.94, 244.57, 247.36, 250.32, 253.34, 255.82, 258.27, 260.39,
257 262.03, 263.45, 264.2, 264.78, 264.67, 264.38, 263.24, 262.03, 260.02,
258 258.09, 255.63, 253.28, 250.43, 247.81, 245.26, 242.77, 240.38,
259 237.94, 235.79, 233.53, 231.5, 229.53, 227.6, 225.62, 223.77, 222.06,
260 220.33, 218.69, 217.18, 215.64, 214.13, 212.52, 210.86, 209.25,
261 207.49, 205.81, 204.11, 202.22, 200.32, 198.39, 195.92, 193.46,
262 190.94, 188.31, 185.82, 183.57, 181.43, 179.74, 178.64, 178.1, 178.25,
263 178.7, 179.41, 180.67, 182.31, 184.18, 186.6, 189.53, 192.66, 196.54,
264 201.13, 205.93, 211.73, 217.86, 225, 233.53, 242.57, 252.14, 261.48,
265 272.97, 285.26, 299.12, 312.2, 324.17, 338.34, 352.56, 365.28
268 static const double c2h2[121] = {
269 1.352e-09, 2.83e-10, 1.269e-10, 6.926e-11, 4.346e-11, 2.909e-11,
270 2.014e-11, 1.363e-11, 8.71e-12, 5.237e-12, 2.718e-12, 1.375e-12,
271 5.786e-13, 2.16e-13, 7.317e-14, 2.551e-14, 1.055e-14, 4.758e-15,
272 2.056e-15, 7.703e-16, 2.82e-16, 1.035e-16, 4.382e-17, 1.946e-17,
273 9.638e-18, 5.2e-18, 2.811e-18, 1.494e-18, 7.925e-19, 4.213e-19,
274 1.998e-19, 8.78e-20, 3.877e-20, 1.728e-20, 7.743e-21, 3.536e-21,
275 1.623e-21, 7.508e-22, 3.508e-22, 1.65e-22, 7.837e-23, 3.733e-23,
276 1.808e-23, 8.77e-24, 4.285e-24, 2.095e-24, 1.032e-24, 5.082e-25,
277 2.506e-25, 1.236e-25, 6.088e-26, 2.996e-26, 1.465e-26, 0, 0, 0,
278 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
279 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
280 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
283 static const double c2h6[121] = {
284 2.667e-09, 2.02e-09, 1.658e-09, 1.404e-09, 1.234e-09, 1.109e-09,
285 1.012e-09, 9.262e-10, 8.472e-10, 7.71e-10, 6.932e-10, 6.216e-10,
286 5.503e-10, 4.87e-10, 4.342e-10, 3.861e-10, 3.347e-10, 2.772e-10,
287 2.209e-10, 1.672e-10, 1.197e-10, 8.536e-11, 5.783e-11, 3.846e-11,
288 2.495e-11, 1.592e-11, 1.017e-11, 6.327e-12, 3.895e-12, 2.403e-12,
289 1.416e-12, 8.101e-13, 4.649e-13, 2.686e-13, 1.557e-13, 9.14e-14,
290 5.386e-14, 3.19e-14, 1.903e-14, 1.14e-14, 6.875e-15, 4.154e-15,
291 2.538e-15, 1.553e-15, 9.548e-16, 5.872e-16, 3.63e-16, 2.244e-16,
292 1.388e-16, 8.587e-17, 5.308e-17, 3.279e-17, 2.017e-17, 1.238e-17,
293 7.542e-18, 4.585e-18, 2.776e-18, 1.671e-18, 9.985e-19, 5.937e-19,
294 3.518e-19, 2.07e-19, 1.215e-19, 7.06e-20, 4.097e-20, 2.37e-20,
295 1.363e-20, 7.802e-21, 4.441e-21, 2.523e-21, 1.424e-21, 8.015e-22,
296 4.497e-22, 2.505e-22, 1.391e-22, 7.691e-23, 4.238e-23, 2.331e-23,
297 1.274e-23, 6.929e-24, 3.752e-24, 2.02e-24, 1.083e-24, 5.774e-25,
298 3.041e-25, 1.593e-25, 8.308e-26, 4.299e-26, 2.195e-26, 1.112e-26,
299 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
300 0, 0, 0, 0, 0, 0, 0, 0, 0
303 static const double ccl4[121] = {
304 1.075e-10, 1.075e-10, 1.075e-10, 1.075e-10, 1.075e-10, 1.075e-10,
305 1.075e-10, 1.075e-10, 1.075e-10, 1.06e-10, 1.024e-10, 9.69e-11,
306 8.93e-11, 8.078e-11, 7.213e-11, 6.307e-11, 5.383e-11, 4.49e-11,
307 3.609e-11, 2.705e-11, 1.935e-11, 1.385e-11, 8.35e-12, 5.485e-12,
308 3.853e-12, 2.22e-12, 5.875e-13, 3.445e-13, 1.015e-13, 6.075e-14,
309 4.383e-14, 2.692e-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,
311 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
312 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
313 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
314 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
315 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
316 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
317 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
321 static const double ch3oh[121] = {
322 5.01099e-10, 5.01099e-10, 5.01099e-10, 5.01099e-10, 5.01099e-10,
323 5.01099e-10, 5.50999e-10, 5.7313e-10, 5.75638e-10, 5.4086e-10,
324 4.77601e-10, 4.12907e-10, 3.6274e-10, 3.26448e-10, 2.9706e-10,
325 2.27698e-10, 1.96999e-10, 1.66212e-10, 1.17941e-10, 1.19844e-10,
326 1.11211e-10, 1.02714e-10, 9.86138e-11, 9.45133e-11, 9.04127e-11,
327 8.05243e-11, 6.3678e-11, 4.68317e-11, 4.00618e-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,
339 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
340 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
341 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
342 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
343 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
344 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
345 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
349 static const double ch4[121] = {
350 1.864e-06, 1.835e-06, 1.819e-06, 1.805e-06, 1.796e-06, 1.788e-06,
351 1.782e-06, 1.776e-06, 1.769e-06, 1.761e-06, 1.749e-06, 1.734e-06,
352 1.716e-06, 1.692e-06, 1.654e-06, 1.61e-06, 1.567e-06, 1.502e-06,
353 1.433e-06, 1.371e-06, 1.323e-06, 1.277e-06, 1.232e-06, 1.188e-06,
354 1.147e-06, 1.108e-06, 1.07e-06, 1.027e-06, 9.854e-07, 9.416e-07,
355 8.933e-07, 8.478e-07, 7.988e-07, 7.515e-07, 7.07e-07, 6.64e-07,
356 6.239e-07, 5.864e-07, 5.512e-07, 5.184e-07, 4.87e-07, 4.571e-07,
357 4.296e-07, 4.04e-07, 3.802e-07, 3.578e-07, 3.383e-07, 3.203e-07,
358 3.032e-07, 2.889e-07, 2.76e-07, 2.635e-07, 2.519e-07, 2.409e-07,
359 2.302e-07, 2.219e-07, 2.144e-07, 2.071e-07, 1.999e-07, 1.93e-07,
360 1.862e-07, 1.795e-07, 1.731e-07, 1.668e-07, 1.607e-07, 1.548e-07,
361 1.49e-07, 1.434e-07, 1.38e-07, 1.328e-07, 1.277e-07, 1.227e-07,
362 1.18e-07, 1.134e-07, 1.089e-07, 1.046e-07, 1.004e-07, 9.635e-08,
363 9.245e-08, 8.867e-08, 8.502e-08, 8.15e-08, 7.809e-08, 7.48e-08,
364 7.159e-08, 6.849e-08, 6.55e-08, 6.262e-08, 5.98e-08, 5.708e-08,
365 5.448e-08, 5.194e-08, 4.951e-08, 4.72e-08, 4.5e-08, 4.291e-08,
366 4.093e-08, 3.905e-08, 3.729e-08, 3.563e-08, 3.408e-08, 3.265e-08,
367 3.128e-08, 2.996e-08, 2.87e-08, 2.76e-08, 2.657e-08, 2.558e-08,
368 2.467e-08, 2.385e-08, 2.307e-08, 2.234e-08, 2.168e-08, 2.108e-08,
369 2.05e-08, 1.998e-08, 1.947e-08, 1.902e-08, 1.86e-08, 1.819e-08,
373 static const double clo[121] = {
374 7.419e-15, 1.061e-14, 1.518e-14, 2.195e-14, 3.175e-14, 4.666e-14,
375 6.872e-14, 1.03e-13, 1.553e-13, 2.375e-13, 3.664e-13, 5.684e-13,
376 8.915e-13, 1.402e-12, 2.269e-12, 4.125e-12, 7.501e-12, 1.257e-11,
377 2.048e-11, 3.338e-11, 5.44e-11, 8.846e-11, 1.008e-10, 1.082e-10,
378 1.157e-10, 1.232e-10, 1.312e-10, 1.539e-10, 1.822e-10, 2.118e-10,
379 2.387e-10, 2.687e-10, 2.875e-10, 3.031e-10, 3.23e-10, 3.648e-10,
380 4.117e-10, 4.477e-10, 4.633e-10, 4.794e-10, 4.95e-10, 5.104e-10,
381 5.259e-10, 5.062e-10, 4.742e-10, 4.443e-10, 4.051e-10, 3.659e-10,
382 3.305e-10, 2.911e-10, 2.54e-10, 2.215e-10, 1.927e-10, 1.675e-10,
383 1.452e-10, 1.259e-10, 1.09e-10, 9.416e-11, 8.119e-11, 6.991e-11,
384 6.015e-11, 5.163e-11, 4.43e-11, 3.789e-11, 3.24e-11, 2.769e-11,
385 2.361e-11, 2.011e-11, 1.71e-11, 1.453e-11, 1.233e-11, 1.045e-11,
386 8.851e-12, 7.48e-12, 6.316e-12, 5.326e-12, 4.487e-12, 3.778e-12,
387 3.176e-12, 2.665e-12, 2.234e-12, 1.87e-12, 1.563e-12, 1.304e-12,
388 1.085e-12, 9.007e-13, 7.468e-13, 6.179e-13, 5.092e-13, 4.188e-13,
389 3.442e-13, 2.816e-13, 2.304e-13, 1.885e-13, 1.542e-13, 1.263e-13,
390 1.035e-13, 8.5e-14, 7.004e-14, 5.783e-14, 4.795e-14, 4.007e-14,
391 3.345e-14, 2.792e-14, 2.33e-14, 1.978e-14, 1.686e-14, 1.438e-14,
392 1.234e-14, 1.07e-14, 9.312e-15, 8.131e-15, 7.164e-15, 6.367e-15,
393 5.67e-15, 5.088e-15, 4.565e-15, 4.138e-15, 3.769e-15, 3.432e-15,
397 static const double clono2[121] = {
398 1.011e-13, 1.515e-13, 2.272e-13, 3.446e-13, 5.231e-13, 8.085e-13,
399 1.253e-12, 1.979e-12, 3.149e-12, 5.092e-12, 8.312e-12, 1.366e-11,
400 2.272e-11, 3.791e-11, 6.209e-11, 9.101e-11, 1.334e-10, 1.951e-10,
401 2.853e-10, 3.94e-10, 4.771e-10, 5.771e-10, 6.675e-10, 7.665e-10,
402 8.504e-10, 8.924e-10, 9.363e-10, 8.923e-10, 8.411e-10, 7.646e-10,
403 6.525e-10, 5.576e-10, 4.398e-10, 3.403e-10, 2.612e-10, 1.915e-10,
404 1.407e-10, 1.028e-10, 7.455e-11, 5.42e-11, 3.708e-11, 2.438e-11,
405 1.618e-11, 1.075e-11, 7.17e-12, 4.784e-12, 3.205e-12, 2.147e-12,
406 1.44e-12, 9.654e-13, 6.469e-13, 4.332e-13, 2.891e-13, 1.926e-13,
407 1.274e-13, 8.422e-14, 5.547e-14, 3.636e-14, 2.368e-14, 1.536e-14,
408 9.937e-15, 6.39e-15, 4.101e-15, 2.61e-15, 1.659e-15, 1.052e-15,
409 6.638e-16, 4.172e-16, 2.61e-16, 1.63e-16, 1.013e-16, 6.275e-17,
410 3.879e-17, 2.383e-17, 1.461e-17, 8.918e-18, 5.43e-18, 3.301e-18,
411 1.997e-18, 1.203e-18, 7.216e-19, 4.311e-19, 2.564e-19, 1.519e-19,
412 8.911e-20, 5.203e-20, 3.026e-20, 1.748e-20, 9.99e-21, 5.673e-21,
413 3.215e-21, 1.799e-21, 1.006e-21, 5.628e-22, 3.146e-22, 1.766e-22,
414 9.94e-23, 5.614e-23, 3.206e-23, 1.841e-23, 1.071e-23, 6.366e-24,
415 3.776e-24, 2.238e-24, 1.326e-24, 8.253e-25, 5.201e-25, 3.279e-25,
416 2.108e-25, 1.395e-25, 9.326e-26, 6.299e-26, 4.365e-26, 3.104e-26,
417 2.219e-26, 1.621e-26, 1.185e-26, 8.92e-27, 6.804e-27, 5.191e-27,
421 static const double co[121] = {
422 1.907e-07, 1.553e-07, 1.362e-07, 1.216e-07, 1.114e-07, 1.036e-07,
423 9.737e-08, 9.152e-08, 8.559e-08, 7.966e-08, 7.277e-08, 6.615e-08,
424 5.884e-08, 5.22e-08, 4.699e-08, 4.284e-08, 3.776e-08, 3.274e-08,
425 2.845e-08, 2.479e-08, 2.246e-08, 2.054e-08, 1.991e-08, 1.951e-08,
426 1.94e-08, 2.009e-08, 2.1e-08, 2.201e-08, 2.322e-08, 2.45e-08,
427 2.602e-08, 2.73e-08, 2.867e-08, 2.998e-08, 3.135e-08, 3.255e-08,
428 3.352e-08, 3.426e-08, 3.484e-08, 3.53e-08, 3.593e-08, 3.671e-08,
429 3.759e-08, 3.945e-08, 4.192e-08, 4.49e-08, 5.03e-08, 5.703e-08,
430 6.538e-08, 7.878e-08, 9.644e-08, 1.196e-07, 1.498e-07, 1.904e-07,
431 2.422e-07, 3.055e-07, 3.804e-07, 4.747e-07, 5.899e-07, 7.272e-07,
432 8.91e-07, 1.071e-06, 1.296e-06, 1.546e-06, 1.823e-06, 2.135e-06,
433 2.44e-06, 2.714e-06, 2.967e-06, 3.189e-06, 3.391e-06, 3.58e-06,
434 3.773e-06, 4.022e-06, 4.346e-06, 4.749e-06, 5.199e-06, 5.668e-06,
435 6.157e-06, 6.688e-06, 7.254e-06, 7.867e-06, 8.539e-06, 9.26e-06,
436 1.009e-05, 1.119e-05, 1.228e-05, 1.365e-05, 1.506e-05, 1.641e-05,
437 1.784e-05, 1.952e-05, 2.132e-05, 2.323e-05, 2.531e-05, 2.754e-05,
438 3.047e-05, 3.459e-05, 3.922e-05, 4.439e-05, 4.825e-05, 5.077e-05,
439 5.34e-05, 5.618e-05, 5.909e-05, 6.207e-05, 6.519e-05, 6.845e-05,
440 6.819e-05, 6.726e-05, 6.622e-05, 6.512e-05, 6.671e-05, 6.862e-05,
441 7.048e-05, 7.264e-05, 7.3e-05, 7.3e-05, 7.3e-05, 7.3e-05, 7.3e-05
444 static const double cof2[121] = {
445 7.5e-14, 1.055e-13, 1.485e-13, 2.111e-13, 3.001e-13, 4.333e-13,
446 6.269e-13, 9.221e-13, 1.364e-12, 2.046e-12, 3.093e-12, 4.703e-12,
447 7.225e-12, 1.113e-11, 1.66e-11, 2.088e-11, 2.626e-11, 3.433e-11,
448 4.549e-11, 5.886e-11, 7.21e-11, 8.824e-11, 1.015e-10, 1.155e-10,
449 1.288e-10, 1.388e-10, 1.497e-10, 1.554e-10, 1.606e-10, 1.639e-10,
450 1.64e-10, 1.64e-10, 1.596e-10, 1.542e-10, 1.482e-10, 1.382e-10,
451 1.289e-10, 1.198e-10, 1.109e-10, 1.026e-10, 9.484e-11, 8.75e-11,
452 8.086e-11, 7.49e-11, 6.948e-11, 6.446e-11, 5.961e-11, 5.505e-11,
453 5.085e-11, 4.586e-11, 4.1e-11, 3.665e-11, 3.235e-11, 2.842e-11,
454 2.491e-11, 2.11e-11, 1.769e-11, 1.479e-11, 1.197e-11, 9.631e-12,
455 7.74e-12, 6.201e-12, 4.963e-12, 3.956e-12, 3.151e-12, 2.507e-12,
456 1.99e-12, 1.576e-12, 1.245e-12, 9.83e-13, 7.742e-13, 6.088e-13,
457 4.782e-13, 3.745e-13, 2.929e-13, 2.286e-13, 1.782e-13, 1.388e-13,
458 1.079e-13, 8.362e-14, 6.471e-14, 4.996e-14, 3.85e-14, 2.96e-14,
459 2.265e-14, 1.729e-14, 1.317e-14, 9.998e-15, 7.549e-15, 5.683e-15,
460 4.273e-15, 3.193e-15, 2.385e-15, 1.782e-15, 1.331e-15, 9.957e-16,
461 7.461e-16, 5.601e-16, 4.228e-16, 3.201e-16, 2.438e-16, 1.878e-16,
462 1.445e-16, 1.111e-16, 8.544e-17, 6.734e-17, 5.341e-17, 4.237e-17,
463 3.394e-17, 2.759e-17, 2.254e-17, 1.851e-17, 1.54e-17, 1.297e-17,
464 1.096e-17, 9.365e-18, 8e-18, 6.938e-18, 6.056e-18, 5.287e-18,
468 static const double f11[121] = {
469 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10,
470 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10, 2.635e-10, 2.536e-10,
471 2.44e-10, 2.348e-10, 2.258e-10, 2.153e-10, 2.046e-10, 1.929e-10,
472 1.782e-10, 1.648e-10, 1.463e-10, 1.291e-10, 1.1e-10, 8.874e-11,
473 7.165e-11, 5.201e-11, 3.744e-11, 2.577e-11, 1.64e-11, 1.048e-11,
474 5.993e-12, 3.345e-12, 1.839e-12, 9.264e-13, 4.688e-13, 2.329e-13,
475 1.129e-13, 5.505e-14, 2.825e-14, 1.492e-14, 7.997e-15, 5.384e-15,
476 3.988e-15, 2.955e-15, 2.196e-15, 1.632e-15, 1.214e-15, 9.025e-16,
477 6.708e-16, 4.984e-16, 3.693e-16, 2.733e-16, 2.013e-16, 1.481e-16,
478 1.087e-16, 7.945e-17, 5.782e-17, 4.195e-17, 3.038e-17, 2.19e-17,
479 1.577e-17, 1.128e-17, 8.063e-18, 5.753e-18, 4.09e-18, 2.899e-18,
480 2.048e-18, 1.444e-18, 1.015e-18, 7.12e-19, 4.985e-19, 3.474e-19,
481 2.417e-19, 1.677e-19, 1.161e-19, 8.029e-20, 5.533e-20, 3.799e-20,
482 2.602e-20, 1.776e-20, 1.209e-20, 8.202e-21, 5.522e-21, 3.707e-21,
483 2.48e-21, 1.652e-21, 1.091e-21, 7.174e-22, 4.709e-22, 3.063e-22,
484 1.991e-22, 1.294e-22, 8.412e-23, 5.483e-23, 3.581e-23, 2.345e-23,
485 1.548e-23, 1.027e-23, 6.869e-24, 4.673e-24, 3.173e-24, 2.153e-24,
486 1.461e-24, 1.028e-24, 7.302e-25, 5.188e-25, 3.739e-25, 2.753e-25,
487 2.043e-25, 1.528e-25, 1.164e-25, 9.041e-26, 7.051e-26, 5.587e-26,
488 4.428e-26, 3.588e-26, 2.936e-26, 2.402e-26, 1.995e-26
491 static const double f113[121] = {
492 1.9e-11, 1.9e-11, 1.899e-11, 1.899e-11, 1.898e-11, 1.898e-11,
493 1.897e-11, 1.896e-11, 1.895e-11, 1.894e-11, 1.893e-11, 1.89e-11,
494 1.887e-11, 1.871e-11, 1.854e-11, 1.803e-11, 1.751e-11, 1.664e-11,
495 1.576e-11, 1.466e-11, 1.356e-11, 1.236e-11, 1.116e-11, 9.931e-12,
496 8.702e-12, 7.515e-12, 6.4238e-12, 5.3326e-12, 4.3652e-12, 3.5216e-12,
497 2.678e-12, 2.1532e-12, 1.6284e-12, 1.2202e-12, 9.286e-13, 6.37e-13,
498 4.95e-13, 3.53e-13, 2.5004e-13, 1.8612e-13, 1.222e-13, 9.704e-14,
499 7.188e-14, 5.3338e-14, 4.1414e-14, 2.949e-14, 2.3722e-14, 1.7954e-14,
500 1.37794e-14, 1.11982e-14, 8.617e-15, 7.6036e-15, 6.5902e-15,
501 5.5768e-15, 4.5634e-15, 3.55e-15, 3.1008e-15, 2.6516e-15, 2.2024e-15,
502 1.7532e-15, 1.304e-15, 1.1354e-15, 9.668e-16, 7.982e-16, 6.296e-16,
503 4.61e-16, 3.9734e-16, 3.3368e-16, 2.7002e-16, 2.0636e-16, 1.427e-16,
504 1.22804e-16, 1.02908e-16, 8.3012e-17, 6.3116e-17, 4.322e-17,
505 3.6838e-17, 3.0456e-17, 2.4074e-17, 1.7692e-17, 1.131e-17,
506 9.6202e-18, 7.9304e-18, 6.2406e-18, 4.5508e-18, 2.861e-18,
507 2.40476e-18, 1.94852e-18, 1.49228e-18, 1.03604e-18, 5.798e-19,
508 4.8502e-19, 3.9024e-19, 2.9546e-19, 2.0068e-19, 1.059e-19,
509 8.7084e-20, 6.8268e-20, 4.9452e-20, 3.0636e-20, 1.182e-20,
510 9.64344e-21, 7.46688e-21, 5.29032e-21, 3.11376e-21, 9.372e-22,
511 7.5685e-22, 5.765e-22, 3.9615e-22, 2.158e-22, 3.545e-23,
512 2.86046e-23, 2.17592e-23, 1.49138e-23, 8.0684e-24, 1.223e-24,
513 9.92358e-25, 7.61716e-25, 5.31074e-25, 3.00432e-25, 6.979e-26
516 static const double f114[121] = {
517 1.2e-11, 1.2e-11, 1.2e-11, 1.2e-11, 1.199e-11, 1.199e-11,
518 1.199e-11, 1.199e-11, 1.198e-11, 1.198e-11, 1.198e-11, 1.197e-11,
519 1.196e-11, 1.191e-11, 1.185e-11, 1.167e-11, 1.149e-11, 1.12e-11,
520 1.09e-11, 1.053e-11, 1.015e-11, 9.731e-12, 9.311e-12, 8.865e-12,
521 8.419e-12, 7.949e-12, 7.4774e-12, 7.0058e-12, 6.54e-12, 6.08e-12,
522 5.62e-12, 5.1908e-12, 4.7616e-12, 4.3622e-12, 3.9926e-12, 3.623e-12,
523 3.3274e-12, 3.0318e-12, 2.7702e-12, 2.5426e-12, 2.315e-12, 2.1514e-12,
524 1.9878e-12, 1.8448e-12, 1.7224e-12, 1.6e-12, 1.51e-12, 1.42e-12,
525 1.3462e-12, 1.2886e-12, 1.231e-12, 1.1922e-12, 1.1534e-12, 1.1146e-12,
526 1.0758e-12, 1.037e-12, 1.0025e-12, 9.68e-13, 9.335e-13, 8.99e-13,
527 8.645e-13, 8.344e-13, 8.043e-13, 7.742e-13, 7.441e-13, 7.14e-13,
528 6.8718e-13, 6.6036e-13, 6.3354e-13, 6.0672e-13, 5.799e-13, 5.5612e-13,
529 5.3234e-13, 5.0856e-13, 4.8478e-13, 4.61e-13, 4.394e-13, 4.178e-13,
530 3.962e-13, 3.746e-13, 3.53e-13, 3.3288e-13, 3.1276e-13, 2.9264e-13,
531 2.7252e-13, 2.524e-13, 2.3368e-13, 2.1496e-13, 1.9624e-13, 1.7752e-13,
532 1.588e-13, 1.4221e-13, 1.2562e-13, 1.0903e-13, 9.244e-14, 7.585e-14,
533 6.4942e-14, 5.4034e-14, 4.3126e-14, 3.2218e-14, 2.131e-14, 1.76694e-14,
534 1.40288e-14, 1.03882e-14, 6.7476e-15, 3.107e-15, 2.52738e-15,
535 1.94776e-15, 1.36814e-15, 7.8852e-16, 2.089e-16, 1.69288e-16,
536 1.29676e-16, 9.0064e-17, 5.0452e-17, 1.084e-17, 8.85136e-18,
537 6.86272e-18, 4.87408e-18, 2.88544e-18, 8.968e-19
540 static const double f12[121] = {
541 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10,
542 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10, 5.429e-10, 5.291e-10,
543 5.155e-10, 5.022e-10, 4.893e-10, 4.772e-10, 4.655e-10, 4.497e-10,
544 4.249e-10, 4.015e-10, 3.632e-10, 3.261e-10, 2.858e-10, 2.408e-10,
545 2.03e-10, 1.685e-10, 1.4e-10, 1.163e-10, 9.65e-11, 8.02e-11, 6.705e-11,
546 5.624e-11, 4.764e-11, 4.249e-11, 3.792e-11, 3.315e-11, 2.819e-11,
547 2.4e-11, 1.999e-11, 1.64e-11, 1.352e-11, 1.14e-11, 9.714e-12,
548 8.28e-12, 7.176e-12, 6.251e-12, 5.446e-12, 4.72e-12, 4.081e-12,
549 3.528e-12, 3.08e-12, 2.699e-12, 2.359e-12, 2.111e-12, 1.901e-12,
550 1.709e-12, 1.534e-12, 1.376e-12, 1.233e-12, 1.103e-12, 9.869e-13,
551 8.808e-13, 7.859e-13, 7.008e-13, 6.241e-13, 5.553e-13, 4.935e-13,
552 4.383e-13, 3.889e-13, 3.447e-13, 3.054e-13, 2.702e-13, 2.389e-13,
553 2.11e-13, 1.862e-13, 1.643e-13, 1.448e-13, 1.274e-13, 1.121e-13,
554 9.844e-14, 8.638e-14, 7.572e-14, 6.62e-14, 5.782e-14, 5.045e-14,
555 4.394e-14, 3.817e-14, 3.311e-14, 2.87e-14, 2.48e-14, 2.142e-14,
556 1.851e-14, 1.599e-14, 1.383e-14, 1.196e-14, 1.036e-14, 9e-15,
557 7.828e-15, 6.829e-15, 5.992e-15, 5.254e-15, 4.606e-15, 4.037e-15,
558 3.583e-15, 3.19e-15, 2.841e-15, 2.542e-15, 2.291e-15, 2.07e-15,
559 1.875e-15, 1.71e-15, 1.57e-15, 1.442e-15, 1.333e-15, 1.232e-15,
560 1.147e-15, 1.071e-15, 1.001e-15, 9.396e-16
563 static const double f14[121] = {
564 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 9e-11,
565 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 8.91e-11, 8.73e-11, 8.46e-11,
566 8.19e-11, 7.92e-11, 7.74e-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, 7.65e-11, 7.65e-11,
574 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
575 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
576 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
577 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
578 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
579 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
580 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11
583 static const double f22[121] = {
584 1.4e-10, 1.4e-10, 1.4e-10, 1.4e-10, 1.4e-10, 1.4e-10, 1.4e-10,
585 1.4e-10, 1.4e-10, 1.4e-10, 1.372e-10, 1.317e-10, 1.235e-10, 1.153e-10,
586 1.075e-10, 1.002e-10, 9.332e-11, 8.738e-11, 8.194e-11, 7.7e-11,
587 7.165e-11, 6.753e-11, 6.341e-11, 5.971e-11, 5.6e-11, 5.229e-11,
588 4.859e-11, 4.488e-11, 4.118e-11, 3.83e-11, 3.568e-11, 3.308e-11,
589 3.047e-11, 2.82e-11, 2.594e-11, 2.409e-11, 2.237e-11, 2.065e-11,
590 1.894e-11, 1.771e-11, 1.647e-11, 1.532e-11, 1.416e-11, 1.332e-11,
591 1.246e-11, 1.161e-11, 1.087e-11, 1.017e-11, 9.471e-12, 8.853e-12,
592 8.235e-12, 7.741e-12, 7.247e-12, 6.836e-12, 6.506e-12, 6.176e-12,
593 5.913e-12, 5.65e-12, 5.419e-12, 5.221e-12, 5.024e-12, 4.859e-12,
594 4.694e-12, 4.546e-12, 4.414e-12, 4.282e-12, 4.15e-12, 4.019e-12,
595 3.903e-12, 3.805e-12, 3.706e-12, 3.607e-12, 3.508e-12, 3.41e-12,
596 3.31e-12, 3.212e-12, 3.129e-12, 3.047e-12, 2.964e-12, 2.882e-12,
597 2.8e-12, 2.734e-12, 2.668e-12, 2.602e-12, 2.537e-12, 2.471e-12,
598 2.421e-12, 2.372e-12, 2.322e-12, 2.273e-12, 2.224e-12, 2.182e-12,
599 2.141e-12, 2.1e-12, 2.059e-12, 2.018e-12, 1.977e-12, 1.935e-12,
600 1.894e-12, 1.853e-12, 1.812e-12, 1.77e-12, 1.73e-12, 1.688e-12,
601 1.647e-12, 1.606e-12, 1.565e-12, 1.524e-12, 1.483e-12, 1.441e-12,
602 1.4e-12, 1.359e-12, 1.317e-12, 1.276e-12, 1.235e-12, 1.194e-12,
603 1.153e-12, 1.112e-12, 1.071e-12, 1.029e-12, 9.883e-13
606 static const double h2co[121] = {
607 8.71857e-11, 8.71857e-11, 8.71857e-11, 8.71857e-11, 8.71857e-11,
608 8.71857e-11, 7.72315e-11, 6.85464e-11, 6.0758e-11, 5.32087e-11,
609 4.5719e-11, 3.79458e-11, 3.07607e-11, 2.46025e-11, 1.94038e-11,
610 1.40882e-11, 1.0623e-11, 8.35457e-12, 6.87427e-12, 7.09071e-12,
611 8.96183e-12, 1.09012e-11, 1.50545e-11, 1.92077e-11, 2.3361e-11,
612 2.7054e-11, 3.01936e-11, 3.33333e-11, 3.69281e-11, 4.08069e-11,
613 4.57318e-11, 5.1348e-11, 5.69642e-11, 6.33173e-11, 6.98984e-11,
614 7.63144e-11, 8.22774e-11, 8.82405e-11, 9.3746e-11, 9.92074e-11,
615 1.04669e-10, 1.10055e-10, 1.15293e-10, 1.20531e-10, 1.26293e-10,
616 1.32585e-10, 1.35966e-10, 1.36242e-10, 1.36519e-10, 1.61155e-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,
624 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
625 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
626 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
627 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
628 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
629 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
630 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
634 static const double h2o[121] = {
635 0.01166, 0.008269, 0.005742, 0.003845, 0.00277, 0.001897, 0.001272,
636 0.000827, 0.000539, 0.0003469, 0.0001579, 3.134e-05, 1.341e-05,
637 6.764e-06, 4.498e-06, 3.703e-06, 3.724e-06, 3.899e-06, 4.002e-06,
638 4.122e-06, 4.277e-06, 4.438e-06, 4.558e-06, 4.673e-06, 4.763e-06,
639 4.809e-06, 4.856e-06, 4.936e-06, 5.021e-06, 5.114e-06, 5.222e-06,
640 5.331e-06, 5.414e-06, 5.488e-06, 5.563e-06, 5.633e-06, 5.704e-06,
641 5.767e-06, 5.819e-06, 5.872e-06, 5.914e-06, 5.949e-06, 5.984e-06,
642 6.015e-06, 6.044e-06, 6.073e-06, 6.104e-06, 6.136e-06, 6.167e-06,
643 6.189e-06, 6.208e-06, 6.226e-06, 6.212e-06, 6.185e-06, 6.158e-06,
644 6.114e-06, 6.066e-06, 6.018e-06, 5.877e-06, 5.728e-06, 5.582e-06,
645 5.437e-06, 5.296e-06, 5.156e-06, 5.02e-06, 4.886e-06, 4.754e-06,
646 4.625e-06, 4.498e-06, 4.374e-06, 4.242e-06, 4.096e-06, 3.955e-06,
647 3.817e-06, 3.683e-06, 3.491e-06, 3.204e-06, 2.94e-06, 2.696e-06,
648 2.47e-06, 2.252e-06, 2.019e-06, 1.808e-06, 1.618e-06, 1.445e-06,
649 1.285e-06, 1.105e-06, 9.489e-07, 8.121e-07, 6.938e-07, 5.924e-07,
650 5.04e-07, 4.288e-07, 3.648e-07, 3.103e-07, 2.642e-07, 2.252e-07,
651 1.921e-07, 1.643e-07, 1.408e-07, 1.211e-07, 1.048e-07, 9.063e-08,
652 7.835e-08, 6.774e-08, 5.936e-08, 5.221e-08, 4.592e-08, 4.061e-08,
653 3.62e-08, 3.236e-08, 2.902e-08, 2.62e-08, 2.383e-08, 2.171e-08,
654 1.989e-08, 1.823e-08, 1.684e-08, 1.562e-08, 1.449e-08, 1.351e-08
657 static const double h2o2[121] = {
658 1.779e-10, 7.938e-10, 8.953e-10, 8.032e-10, 6.564e-10, 5.159e-10,
659 4.003e-10, 3.026e-10, 2.222e-10, 1.58e-10, 1.044e-10, 6.605e-11,
660 3.413e-11, 1.453e-11, 1.062e-11, 1.009e-11, 9.597e-12, 1.175e-11,
661 1.572e-11, 2.091e-11, 2.746e-11, 3.603e-11, 4.791e-11, 6.387e-11,
662 8.239e-11, 1.007e-10, 1.23e-10, 1.363e-10, 1.489e-10, 1.585e-10,
663 1.608e-10, 1.632e-10, 1.576e-10, 1.502e-10, 1.423e-10, 1.302e-10,
664 1.192e-10, 1.085e-10, 9.795e-11, 8.854e-11, 8.057e-11, 7.36e-11,
665 6.736e-11, 6.362e-11, 6.087e-11, 5.825e-11, 5.623e-11, 5.443e-11,
666 5.27e-11, 5.098e-11, 4.931e-11, 4.769e-11, 4.611e-11, 4.458e-11,
667 4.308e-11, 4.102e-11, 3.887e-11, 3.682e-11, 3.521e-11, 3.369e-11,
668 3.224e-11, 3.082e-11, 2.946e-11, 2.814e-11, 2.687e-11, 2.566e-11,
669 2.449e-11, 2.336e-11, 2.227e-11, 2.123e-11, 2.023e-11, 1.927e-11,
670 1.835e-11, 1.746e-11, 1.661e-11, 1.58e-11, 1.502e-11, 1.428e-11,
671 1.357e-11, 1.289e-11, 1.224e-11, 1.161e-11, 1.102e-11, 1.045e-11,
672 9.895e-12, 9.369e-12, 8.866e-12, 8.386e-12, 7.922e-12, 7.479e-12,
673 7.06e-12, 6.656e-12, 6.274e-12, 5.914e-12, 5.575e-12, 5.257e-12,
674 4.959e-12, 4.679e-12, 4.42e-12, 4.178e-12, 3.954e-12, 3.75e-12,
675 3.557e-12, 3.372e-12, 3.198e-12, 3.047e-12, 2.908e-12, 2.775e-12,
676 2.653e-12, 2.544e-12, 2.442e-12, 2.346e-12, 2.26e-12, 2.183e-12,
677 2.11e-12, 2.044e-12, 1.98e-12, 1.924e-12, 1.871e-12, 1.821e-12,
681 static const double hcl[121] = {
682 3.70385e-11, 3.70385e-11, 3.70385e-11, 3.70385e-11, 3.70385e-11,
683 3.70385e-11, 2.21247e-11, 1.88117e-11, 2.36957e-11, 3.72192e-11,
684 5.79399e-11, 8.04158e-11, 1.01779e-10, 1.2301e-10, 1.53924e-10,
685 1.93737e-10, 2.5561e-10, 3.84228e-10, 6.18248e-10, 6.31222e-10,
686 7.84907e-10, 9.36932e-10, 1.03508e-09, 1.13323e-09, 1.23138e-09,
687 1.31985e-09, 1.39669e-09, 1.47352e-09, 1.56375e-09, 1.66234e-09,
688 1.78086e-09, 1.91256e-09, 2.04425e-09, 2.16629e-09, 2.28535e-09,
689 2.39439e-09, 2.47597e-09, 2.55755e-09, 2.60873e-09, 2.65696e-09,
690 2.70519e-09, 2.75658e-09, 2.81422e-09, 2.87187e-09, 2.94013e-09,
691 3.01911e-09, 3.09497e-09, 3.16749e-09, 3.24001e-09, 3.30525e-09,
692 3.3665e-09, 3.42424e-09, 3.4619e-09, 3.49956e-09, 3.52273e-09,
693 3.54214e-09, 3.56154e-09, 3.57918e-09, 3.59049e-09, 3.6018e-09,
694 3.6132e-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,
699 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
700 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
701 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
702 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
703 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
704 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
705 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
709 static const double hcn[121] = {
710 5.5e-10, 5.5e-10, 5.5e-10, 5.5e-10, 5.5e-10, 5.5e-10, 5.5e-10,
711 5.5e-10, 5.5e-10, 5.5e-10, 5.5e-10, 5.498e-10, 5.495e-10, 5.493e-10,
712 5.49e-10, 5.488e-10, 4.717e-10, 3.946e-10, 3.174e-10, 2.4e-10,
713 1.626e-10, 1.619e-10, 1.612e-10, 1.602e-10, 1.593e-10, 1.582e-10,
714 1.572e-10, 1.56e-10, 1.549e-10, 1.539e-10, 1.53e-10, 1.519e-10,
715 1.506e-10, 1.487e-10, 1.467e-10, 1.449e-10, 1.43e-10, 1.413e-10,
716 1.397e-10, 1.382e-10, 1.368e-10, 1.354e-10, 1.337e-10, 1.315e-10,
717 1.292e-10, 1.267e-10, 1.241e-10, 1.215e-10, 1.19e-10, 1.165e-10,
718 1.141e-10, 1.118e-10, 1.096e-10, 1.072e-10, 1.047e-10, 1.021e-10,
719 9.968e-11, 9.739e-11, 9.539e-11, 9.339e-11, 9.135e-11, 8.898e-11,
720 8.664e-11, 8.439e-11, 8.249e-11, 8.075e-11, 7.904e-11, 7.735e-11,
721 7.565e-11, 7.399e-11, 7.245e-11, 7.109e-11, 6.982e-11, 6.863e-11,
722 6.755e-11, 6.657e-11, 6.587e-11, 6.527e-11, 6.476e-11, 6.428e-11,
723 6.382e-11, 6.343e-11, 6.307e-11, 6.272e-11, 6.238e-11, 6.205e-11,
724 6.17e-11, 6.137e-11, 6.102e-11, 6.072e-11, 6.046e-11, 6.03e-11,
725 6.018e-11, 6.01e-11, 6.001e-11, 5.992e-11, 5.984e-11, 5.975e-11,
726 5.967e-11, 5.958e-11, 5.95e-11, 5.941e-11, 5.933e-11, 5.925e-11,
727 5.916e-11, 5.908e-11, 5.899e-11, 5.891e-11, 5.883e-11, 5.874e-11,
728 5.866e-11, 5.858e-11, 5.85e-11, 5.841e-11, 5.833e-11, 5.825e-11,
729 5.817e-11, 5.808e-11, 5.8e-11, 5.792e-11, 5.784e-11
732 static const double hf[121] = {
733 2.64279e-11, 2.64279e-11, 2.64279e-11, 2.64279e-11, 2.64279e-11,
734 2.64279e-11, 2.64279e-11, 2.64279e-11, 2.64279e-11, 2.64279e-11,
735 2.64279e-11, 2.64279e-11, 2.64279e-11, 3.86691e-11, 5.22002e-11,
736 6.92471e-11, 9.13979e-11, 1.37918e-10, 2.24918e-10, 2.29824e-10,
737 2.94241e-10, 3.58363e-10, 4.12881e-10, 4.67399e-10, 5.21917e-10,
738 5.74229e-10, 6.23889e-10, 6.73549e-10, 7.24119e-10, 7.75256e-10,
739 8.319e-10, 8.92185e-10, 9.52469e-10, 1.01325e-09, 1.07419e-09,
740 1.13565e-09, 1.19856e-09, 1.26146e-09, 1.31439e-09, 1.36635e-09,
741 1.41831e-09, 1.46549e-09, 1.50321e-09, 1.54093e-09, 1.57986e-09,
742 1.62e-09, 1.66286e-09, 1.70863e-09, 1.75439e-09, 1.79827e-09,
743 1.84111e-09, 1.88125e-09, 1.90603e-09, 1.93081e-09, 1.9413e-09,
744 1.94807e-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,
750 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
751 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
752 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
753 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
754 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
755 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
756 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
760 static const double hno3[121] = {
761 1.809e-10, 7.234e-10, 5.899e-10, 4.342e-10, 3.277e-10, 2.661e-10,
762 2.35e-10, 2.267e-10, 2.389e-10, 2.651e-10, 3.255e-10, 4.099e-10,
763 5.42e-10, 6.978e-10, 8.807e-10, 1.112e-09, 1.405e-09, 2.04e-09,
764 3.111e-09, 4.5e-09, 5.762e-09, 7.37e-09, 7.852e-09, 8.109e-09,
765 8.067e-09, 7.554e-09, 7.076e-09, 6.268e-09, 5.524e-09, 4.749e-09,
766 3.909e-09, 3.223e-09, 2.517e-09, 1.942e-09, 1.493e-09, 1.122e-09,
767 8.449e-10, 6.361e-10, 4.787e-10, 3.611e-10, 2.804e-10, 2.215e-10,
768 1.758e-10, 1.441e-10, 1.197e-10, 9.953e-11, 8.505e-11, 7.334e-11,
769 6.325e-11, 5.625e-11, 5.058e-11, 4.548e-11, 4.122e-11, 3.748e-11,
770 3.402e-11, 3.088e-11, 2.8e-11, 2.536e-11, 2.293e-11, 2.072e-11,
771 1.871e-11, 1.687e-11, 1.52e-11, 1.368e-11, 1.23e-11, 1.105e-11,
772 9.922e-12, 8.898e-12, 7.972e-12, 7.139e-12, 6.385e-12, 5.708e-12,
773 5.099e-12, 4.549e-12, 4.056e-12, 3.613e-12, 3.216e-12, 2.862e-12,
774 2.544e-12, 2.259e-12, 2.004e-12, 1.776e-12, 1.572e-12, 1.391e-12,
775 1.227e-12, 1.082e-12, 9.528e-13, 8.379e-13, 7.349e-13, 6.436e-13,
776 5.634e-13, 4.917e-13, 4.291e-13, 3.745e-13, 3.267e-13, 2.854e-13,
777 2.494e-13, 2.181e-13, 1.913e-13, 1.68e-13, 1.479e-13, 1.31e-13,
778 1.159e-13, 1.025e-13, 9.067e-14, 8.113e-14, 7.281e-14, 6.535e-14,
779 5.892e-14, 5.348e-14, 4.867e-14, 4.439e-14, 4.073e-14, 3.76e-14,
780 3.476e-14, 3.229e-14, 3e-14, 2.807e-14, 2.635e-14, 2.473e-14,
784 static const double hno4[121] = {
785 6.118e-12, 3.594e-12, 2.807e-12, 3.04e-12, 4.458e-12, 7.986e-12,
786 1.509e-11, 2.661e-11, 3.738e-11, 4.652e-11, 4.429e-11, 3.992e-11,
787 3.347e-11, 3.005e-11, 3.173e-11, 4.055e-11, 5.812e-11, 8.489e-11,
788 1.19e-10, 1.482e-10, 1.766e-10, 2.103e-10, 2.35e-10, 2.598e-10,
789 2.801e-10, 2.899e-10, 3e-10, 2.817e-10, 2.617e-10, 2.332e-10,
790 1.933e-10, 1.605e-10, 1.232e-10, 9.285e-11, 6.941e-11, 4.951e-11,
791 3.539e-11, 2.402e-11, 1.522e-11, 9.676e-12, 6.056e-12, 3.745e-12,
792 2.34e-12, 1.463e-12, 9.186e-13, 5.769e-13, 3.322e-13, 1.853e-13,
793 1.035e-13, 7.173e-14, 5.382e-14, 4.036e-14, 3.401e-14, 2.997e-14,
794 2.635e-14, 2.316e-14, 2.034e-14, 1.783e-14, 1.56e-14, 1.363e-14,
795 1.19e-14, 1.037e-14, 9.032e-15, 7.846e-15, 6.813e-15, 5.912e-15,
796 5.121e-15, 4.431e-15, 3.829e-15, 3.306e-15, 2.851e-15, 2.456e-15,
797 2.114e-15, 1.816e-15, 1.559e-15, 1.337e-15, 1.146e-15, 9.811e-16,
798 8.389e-16, 7.162e-16, 6.109e-16, 5.203e-16, 4.425e-16, 3.76e-16,
799 3.184e-16, 2.692e-16, 2.274e-16, 1.917e-16, 1.61e-16, 1.35e-16,
800 1.131e-16, 9.437e-17, 7.874e-17, 6.57e-17, 5.481e-17, 4.579e-17,
801 3.828e-17, 3.204e-17, 2.691e-17, 2.264e-17, 1.912e-17, 1.626e-17,
802 1.382e-17, 1.174e-17, 9.972e-18, 8.603e-18, 7.45e-18, 6.453e-18,
803 5.623e-18, 4.944e-18, 4.361e-18, 3.859e-18, 3.443e-18, 3.096e-18,
804 2.788e-18, 2.528e-18, 2.293e-18, 2.099e-18, 1.929e-18, 1.773e-18,
808 static const double hocl[121] = {
809 1.056e-12, 1.194e-12, 1.35e-12, 1.531e-12, 1.737e-12, 1.982e-12,
810 2.263e-12, 2.599e-12, 2.991e-12, 3.459e-12, 4.012e-12, 4.662e-12,
811 5.438e-12, 6.35e-12, 7.425e-12, 8.686e-12, 1.016e-11, 1.188e-11,
812 1.389e-11, 1.659e-11, 2.087e-11, 2.621e-11, 3.265e-11, 4.064e-11,
813 4.859e-11, 5.441e-11, 6.09e-11, 6.373e-11, 6.611e-11, 6.94e-11,
814 7.44e-11, 7.97e-11, 8.775e-11, 9.722e-11, 1.064e-10, 1.089e-10,
815 1.114e-10, 1.106e-10, 1.053e-10, 1.004e-10, 9.006e-11, 7.778e-11,
816 6.739e-11, 5.636e-11, 4.655e-11, 3.845e-11, 3.042e-11, 2.368e-11,
817 1.845e-11, 1.442e-11, 1.127e-11, 8.814e-12, 6.544e-12, 4.763e-12,
818 3.449e-12, 2.612e-12, 1.999e-12, 1.526e-12, 1.16e-12, 8.793e-13,
819 6.655e-13, 5.017e-13, 3.778e-13, 2.829e-13, 2.117e-13, 1.582e-13,
820 1.178e-13, 8.755e-14, 6.486e-14, 4.799e-14, 3.54e-14, 2.606e-14,
821 1.916e-14, 1.403e-14, 1.026e-14, 7.48e-15, 5.446e-15, 3.961e-15,
822 2.872e-15, 2.076e-15, 1.498e-15, 1.077e-15, 7.726e-16, 5.528e-16,
823 3.929e-16, 2.785e-16, 1.969e-16, 1.386e-16, 9.69e-17, 6.747e-17,
824 4.692e-17, 3.236e-17, 2.232e-17, 1.539e-17, 1.061e-17, 7.332e-18,
825 5.076e-18, 3.522e-18, 2.461e-18, 1.726e-18, 1.22e-18, 8.75e-19,
826 6.264e-19, 4.482e-19, 3.207e-19, 2.368e-19, 1.762e-19, 1.312e-19,
827 9.891e-20, 7.595e-20, 5.87e-20, 4.567e-20, 3.612e-20, 2.904e-20,
828 2.343e-20, 1.917e-20, 1.568e-20, 1.308e-20, 1.1e-20, 9.25e-21,
832 static const double n2o[121] = {
833 3.17e-07, 3.17e-07, 3.17e-07, 3.17e-07, 3.17e-07, 3.17e-07, 3.17e-07,
834 3.17e-07, 3.17e-07, 3.17e-07, 3.124e-07, 3.077e-07, 3.03e-07,
835 2.984e-07, 2.938e-07, 2.892e-07, 2.847e-07, 2.779e-07, 2.705e-07,
836 2.631e-07, 2.557e-07, 2.484e-07, 2.345e-07, 2.201e-07, 2.01e-07,
837 1.754e-07, 1.532e-07, 1.329e-07, 1.154e-07, 1.003e-07, 8.735e-08,
838 7.617e-08, 6.512e-08, 5.547e-08, 4.709e-08, 3.915e-08, 3.259e-08,
839 2.738e-08, 2.327e-08, 1.98e-08, 1.711e-08, 1.493e-08, 1.306e-08,
840 1.165e-08, 1.049e-08, 9.439e-09, 8.375e-09, 7.391e-09, 6.525e-09,
841 5.759e-09, 5.083e-09, 4.485e-09, 3.953e-09, 3.601e-09, 3.27e-09,
842 2.975e-09, 2.757e-09, 2.556e-09, 2.37e-09, 2.195e-09, 2.032e-09,
843 1.912e-09, 1.79e-09, 1.679e-09, 1.572e-09, 1.482e-09, 1.402e-09,
844 1.326e-09, 1.254e-09, 1.187e-09, 1.127e-09, 1.071e-09, 1.02e-09,
845 9.673e-10, 9.193e-10, 8.752e-10, 8.379e-10, 8.017e-10, 7.66e-10,
846 7.319e-10, 7.004e-10, 6.721e-10, 6.459e-10, 6.199e-10, 5.942e-10,
847 5.703e-10, 5.488e-10, 5.283e-10, 5.082e-10, 4.877e-10, 4.696e-10,
848 4.52e-10, 4.355e-10, 4.198e-10, 4.039e-10, 3.888e-10, 3.754e-10,
849 3.624e-10, 3.499e-10, 3.381e-10, 3.267e-10, 3.163e-10, 3.058e-10,
850 2.959e-10, 2.864e-10, 2.77e-10, 2.686e-10, 2.604e-10, 2.534e-10,
851 2.462e-10, 2.386e-10, 2.318e-10, 2.247e-10, 2.189e-10, 2.133e-10,
852 2.071e-10, 2.014e-10, 1.955e-10, 1.908e-10, 1.86e-10, 1.817e-10
855 static const double n2o5[121] = {
856 1.231e-11, 3.035e-12, 1.702e-12, 9.877e-13, 8.081e-13, 9.039e-13,
857 1.169e-12, 1.474e-12, 1.651e-12, 1.795e-12, 1.998e-12, 2.543e-12,
858 4.398e-12, 7.698e-12, 1.28e-11, 2.131e-11, 3.548e-11, 5.894e-11,
859 7.645e-11, 1.089e-10, 1.391e-10, 1.886e-10, 2.386e-10, 2.986e-10,
860 3.487e-10, 3.994e-10, 4.5e-10, 4.6e-10, 4.591e-10, 4.1e-10, 3.488e-10,
861 2.846e-10, 2.287e-10, 1.696e-10, 1.011e-10, 6.428e-11, 4.324e-11,
862 2.225e-11, 6.214e-12, 3.608e-12, 8.793e-13, 4.491e-13, 1.04e-13,
863 6.1e-14, 3.436e-14, 6.671e-15, 1.171e-15, 5.848e-16, 1.212e-16,
864 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
865 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
866 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
867 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
868 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
869 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
870 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
874 static const double nh3[121] = {
875 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10,
876 1e-10, 1e-10, 1e-10, 1e-10, 9.444e-11, 8.488e-11, 7.241e-11, 5.785e-11,
877 4.178e-11, 3.018e-11, 2.18e-11, 1.574e-11, 1.137e-11, 8.211e-12,
878 5.973e-12, 4.327e-12, 3.118e-12, 2.234e-12, 1.573e-12, 1.04e-12,
879 6.762e-13, 4.202e-13, 2.406e-13, 1.335e-13, 6.938e-14, 3.105e-14,
880 1.609e-14, 1.033e-14, 6.432e-15, 4.031e-15, 2.555e-15, 1.656e-15,
881 1.115e-15, 7.904e-16, 5.63e-16, 4.048e-16, 2.876e-16, 2.004e-16,
882 1.356e-16, 9.237e-17, 6.235e-17, 4.223e-17, 3.009e-17, 2.328e-17,
883 2.002e-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,
887 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
888 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
889 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
890 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
891 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
892 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
893 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
897 static const double no[121] = {
898 2.586e-10, 4.143e-11, 1.566e-11, 9.591e-12, 8.088e-12, 8.462e-12,
899 1.013e-11, 1.328e-11, 1.855e-11, 2.678e-11, 3.926e-11, 5.464e-11,
900 7.012e-11, 8.912e-11, 1.127e-10, 1.347e-10, 1.498e-10, 1.544e-10,
901 1.602e-10, 1.824e-10, 2.078e-10, 2.366e-10, 2.691e-10, 5.141e-10,
902 8.259e-10, 1.254e-09, 1.849e-09, 2.473e-09, 3.294e-09, 4.16e-09,
903 5.095e-09, 6.11e-09, 6.93e-09, 7.888e-09, 8.903e-09, 9.713e-09,
904 1.052e-08, 1.115e-08, 1.173e-08, 1.21e-08, 1.228e-08, 1.239e-08,
905 1.231e-08, 1.213e-08, 1.192e-08, 1.138e-08, 1.085e-08, 1.008e-08,
906 9.224e-09, 8.389e-09, 7.262e-09, 6.278e-09, 5.335e-09, 4.388e-09,
907 3.589e-09, 2.761e-09, 2.129e-09, 1.633e-09, 1.243e-09, 9.681e-10,
908 8.355e-10, 7.665e-10, 7.442e-10, 8.584e-10, 9.732e-10, 1.063e-09,
909 1.163e-09, 1.286e-09, 1.472e-09, 1.707e-09, 2.032e-09, 2.474e-09,
910 2.977e-09, 3.506e-09, 4.102e-09, 5.013e-09, 6.493e-09, 8.414e-09,
911 1.077e-08, 1.367e-08, 1.777e-08, 2.625e-08, 3.926e-08, 5.545e-08,
912 7.195e-08, 9.464e-08, 1.404e-07, 2.183e-07, 3.329e-07, 4.535e-07,
913 6.158e-07, 8.187e-07, 1.075e-06, 1.422e-06, 1.979e-06, 2.71e-06,
914 3.58e-06, 4.573e-06, 5.951e-06, 7.999e-06, 1.072e-05, 1.372e-05,
915 1.697e-05, 2.112e-05, 2.643e-05, 3.288e-05, 3.994e-05, 4.794e-05,
916 5.606e-05, 6.383e-05, 7.286e-05, 8.156e-05, 8.883e-05, 9.469e-05,
917 9.848e-05, 0.0001023, 0.0001066, 0.0001115, 0.0001145, 0.0001142,
921 static const double no2[121] = {
922 3.036e-09, 2.945e-10, 9.982e-11, 5.069e-11, 3.485e-11, 2.982e-11,
923 2.947e-11, 3.164e-11, 3.714e-11, 4.586e-11, 6.164e-11, 8.041e-11,
924 9.982e-11, 1.283e-10, 1.73e-10, 2.56e-10, 3.909e-10, 5.959e-10,
925 9.081e-10, 1.384e-09, 1.788e-09, 2.189e-09, 2.686e-09, 3.091e-09,
926 3.49e-09, 3.796e-09, 4.2e-09, 5.103e-09, 6.005e-09, 6.3e-09, 6.706e-09,
927 7.07e-09, 7.434e-09, 7.663e-09, 7.788e-09, 7.8e-09, 7.597e-09,
928 7.482e-09, 7.227e-09, 6.403e-09, 5.585e-09, 4.606e-09, 3.703e-09,
929 2.984e-09, 2.183e-09, 1.48e-09, 8.441e-10, 5.994e-10, 3.799e-10,
930 2.751e-10, 1.927e-10, 1.507e-10, 1.102e-10, 6.971e-11, 5.839e-11,
931 3.904e-11, 3.087e-11, 2.176e-11, 1.464e-11, 1.209e-11, 8.497e-12,
932 6.477e-12, 4.371e-12, 2.914e-12, 2.424e-12, 1.753e-12, 1.35e-12,
933 9.417e-13, 6.622e-13, 5.148e-13, 3.841e-13, 3.446e-13, 3.01e-13,
934 2.551e-13, 2.151e-13, 1.829e-13, 1.64e-13, 1.475e-13, 1.352e-13,
935 1.155e-13, 9.963e-14, 9.771e-14, 9.577e-14, 9.384e-14, 9.186e-14,
936 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14,
937 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14,
938 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14,
939 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14
942 static const double o3[121] = {
943 2.218e-08, 3.394e-08, 3.869e-08, 4.219e-08, 4.501e-08, 4.778e-08,
944 5.067e-08, 5.402e-08, 5.872e-08, 6.521e-08, 7.709e-08, 9.461e-08,
945 1.269e-07, 1.853e-07, 2.723e-07, 3.964e-07, 5.773e-07, 8.2e-07,
946 1.155e-06, 1.59e-06, 2.076e-06, 2.706e-06, 3.249e-06, 3.848e-06,
947 4.459e-06, 4.986e-06, 5.573e-06, 5.958e-06, 6.328e-06, 6.661e-06,
948 6.9e-06, 7.146e-06, 7.276e-06, 7.374e-06, 7.447e-06, 7.383e-06,
949 7.321e-06, 7.161e-06, 6.879e-06, 6.611e-06, 6.216e-06, 5.765e-06,
950 5.355e-06, 4.905e-06, 4.471e-06, 4.075e-06, 3.728e-06, 3.413e-06,
951 3.125e-06, 2.856e-06, 2.607e-06, 2.379e-06, 2.17e-06, 1.978e-06,
952 1.8e-06, 1.646e-06, 1.506e-06, 1.376e-06, 1.233e-06, 1.102e-06,
953 9.839e-07, 8.771e-07, 7.814e-07, 6.947e-07, 6.102e-07, 5.228e-07,
954 4.509e-07, 3.922e-07, 3.501e-07, 3.183e-07, 2.909e-07, 2.686e-07,
955 2.476e-07, 2.284e-07, 2.109e-07, 2.003e-07, 2.013e-07, 2.022e-07,
956 2.032e-07, 2.042e-07, 2.097e-07, 2.361e-07, 2.656e-07, 2.989e-07,
957 3.37e-07, 3.826e-07, 4.489e-07, 5.26e-07, 6.189e-07, 7.312e-07,
958 8.496e-07, 8.444e-07, 8.392e-07, 8.339e-07, 8.286e-07, 8.234e-07,
959 8.181e-07, 8.129e-07, 8.077e-07, 8.026e-07, 6.918e-07, 5.176e-07,
960 3.865e-07, 2.885e-07, 2.156e-07, 1.619e-07, 1.219e-07, 9.161e-08,
961 6.972e-08, 5.399e-08, 3.498e-08, 2.111e-08, 1.322e-08, 8.482e-09,
962 5.527e-09, 3.423e-09, 2.071e-09, 1.314e-09, 8.529e-10, 5.503e-10,
966 static const double ocs[121] = {
967 6e-10, 6e-10, 6e-10, 6e-10, 6e-10, 6e-10, 6e-10, 6e-10, 6e-10, 5.997e-10,
968 5.989e-10, 5.881e-10, 5.765e-10, 5.433e-10, 5.074e-10, 4.567e-10,
969 4.067e-10, 3.601e-10, 3.093e-10, 2.619e-10, 2.232e-10, 1.805e-10,
970 1.46e-10, 1.187e-10, 8.03e-11, 5.435e-11, 3.686e-11, 2.217e-11,
971 1.341e-11, 8.756e-12, 4.511e-12, 2.37e-12, 1.264e-12, 8.28e-13,
972 5.263e-13, 3.209e-13, 1.717e-13, 9.068e-14, 4.709e-14, 2.389e-14,
973 1.236e-14, 1.127e-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, 1.091e-14, 1.091e-14, 1.091e-14,
980 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
981 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
982 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
983 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
984 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
985 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
986 1.091e-14, 1.091e-14, 1.091e-14
989 static const double sf6[121] = {
990 4.103e-12, 4.103e-12, 4.103e-12, 4.103e-12, 4.103e-12, 4.103e-12,
991 4.103e-12, 4.103e-12, 4.103e-12, 4.087e-12, 4.064e-12, 4.023e-12,
992 3.988e-12, 3.941e-12, 3.884e-12, 3.755e-12, 3.622e-12, 3.484e-12,
993 3.32e-12, 3.144e-12, 2.978e-12, 2.811e-12, 2.653e-12, 2.489e-12,
994 2.332e-12, 2.199e-12, 2.089e-12, 2.013e-12, 1.953e-12, 1.898e-12,
995 1.859e-12, 1.826e-12, 1.798e-12, 1.776e-12, 1.757e-12, 1.742e-12,
996 1.728e-12, 1.717e-12, 1.707e-12, 1.698e-12, 1.691e-12, 1.685e-12,
997 1.679e-12, 1.675e-12, 1.671e-12, 1.668e-12, 1.665e-12, 1.663e-12,
998 1.661e-12, 1.659e-12, 1.658e-12, 1.657e-12, 1.656e-12, 1.655e-12,
999 1.654e-12, 1.653e-12, 1.653e-12, 1.652e-12, 1.652e-12, 1.652e-12,
1000 1.651e-12, 1.651e-12, 1.651e-12, 1.651e-12, 1.651e-12, 1.651e-12,
1001 1.651e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
1002 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
1003 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
1004 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
1005 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
1006 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
1007 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
1008 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12
1011 static const double so2[121] = {
1012 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10,
1013 1e-10, 1e-10, 9.867e-11, 9.537e-11, 9e-11, 8.404e-11, 7.799e-11,
1014 7.205e-11, 6.616e-11, 6.036e-11, 5.475e-11, 5.007e-11, 4.638e-11,
1015 4.346e-11, 4.055e-11, 3.763e-11, 3.471e-11, 3.186e-11, 2.905e-11,
1016 2.631e-11, 2.358e-11, 2.415e-11, 2.949e-11, 3.952e-11, 5.155e-11,
1017 6.76e-11, 8.741e-11, 1.099e-10, 1.278e-10, 1.414e-10, 1.512e-10,
1018 1.607e-10, 1.699e-10, 1.774e-10, 1.832e-10, 1.871e-10, 1.907e-10,
1019 1.943e-10, 1.974e-10, 1.993e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
1020 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
1021 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
1022 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
1023 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
1024 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
1025 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
1026 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10
1029 const double *q[
NG] = { NULL };
1032 for (
int ig = 0; ig < ctl->
ng; ig++) {
1034 if (strcasecmp(ctl->
emitter[ig],
"C2H2") == 0)
1036 if (strcasecmp(ctl->
emitter[ig],
"C2H6") == 0)
1038 if (strcasecmp(ctl->
emitter[ig],
"CCl4") == 0)
1040 if (strcasecmp(ctl->
emitter[ig],
"CH3OH") == 0)
1042 if (strcasecmp(ctl->
emitter[ig],
"CH4") == 0)
1044 if (strcasecmp(ctl->
emitter[ig],
"ClO") == 0)
1046 if (strcasecmp(ctl->
emitter[ig],
"ClONO2") == 0)
1048 if (strcasecmp(ctl->
emitter[ig],
"CO") == 0)
1050 if (strcasecmp(ctl->
emitter[ig],
"COF2") == 0)
1052 if (strcasecmp(ctl->
emitter[ig],
"F11") == 0)
1054 if (strcasecmp(ctl->
emitter[ig],
"F113") == 0)
1056 if (strcasecmp(ctl->
emitter[ig],
"F114") == 0)
1058 if (strcasecmp(ctl->
emitter[ig],
"F12") == 0)
1060 if (strcasecmp(ctl->
emitter[ig],
"F14") == 0)
1062 if (strcasecmp(ctl->
emitter[ig],
"F22") == 0)
1064 if (strcasecmp(ctl->
emitter[ig],
"H2CO") == 0)
1066 if (strcasecmp(ctl->
emitter[ig],
"H2O") == 0)
1068 if (strcasecmp(ctl->
emitter[ig],
"H2O2") == 0)
1070 if (strcasecmp(ctl->
emitter[ig],
"HCl") == 0)
1072 if (strcasecmp(ctl->
emitter[ig],
"HCN") == 0)
1074 if (strcasecmp(ctl->
emitter[ig],
"HF") == 0)
1076 if (strcasecmp(ctl->
emitter[ig],
"HNO3") == 0)
1078 if (strcasecmp(ctl->
emitter[ig],
"HNO4") == 0)
1080 if (strcasecmp(ctl->
emitter[ig],
"HOCl") == 0)
1082 if (strcasecmp(ctl->
emitter[ig],
"N2O") == 0)
1084 if (strcasecmp(ctl->
emitter[ig],
"N2O5") == 0)
1086 if (strcasecmp(ctl->
emitter[ig],
"NH3") == 0)
1088 if (strcasecmp(ctl->
emitter[ig],
"NO") == 0)
1090 if (strcasecmp(ctl->
emitter[ig],
"NO2") == 0)
1092 if (strcasecmp(ctl->
emitter[ig],
"O3") == 0)
1094 if (strcasecmp(ctl->
emitter[ig],
"OCS") == 0)
1096 if (strcasecmp(ctl->
emitter[ig],
"SF6") == 0)
1098 if (strcasecmp(ctl->
emitter[ig],
"SO2") == 0)
1103 for (
int ip = 0; ip < atm->
np; ip++) {
1109 atm->
p[ip] =
LOGY(z[iz], pre[iz], z[iz + 1], pre[iz + 1], atm->
z[ip]);
1112 atm->
t[ip] =
LIN(z[iz], tem[iz], z[iz + 1], tem[iz + 1], atm->
z[ip]);
1115 for (
int ig = 0; ig < ctl->
ng; ig++)
1118 LIN(z[iz], q[ig][iz], z[iz + 1], q[ig][iz + 1], atm->
z[ip]);
1127 if (ctl->
ig_n2 >= 0)
1131 if (ctl->
ig_o2 >= 0)
1135 for (
int iw = 0; iw < ctl->
nw; iw++)
1140 for (
int icl = 0; icl < ctl->
ncl; icl++)
1145 for (
int isf = 0; isf < ctl->
nsf; isf++)
1146 atm->
sfeps[isf] = 1;
1158 const double D = sec / 86400 - 0.5;
1161 const double g =
DEG2RAD(357.529 + 0.98560028 * D);
1162 const double q = 280.459 + 0.98564736 * D;
1163 const double L =
DEG2RAD(q + 1.915 * sin(g) + 0.020 * sin(2 * g));
1166 const double e =
DEG2RAD(23.439 - 0.00000036 * D);
1169 const double sindec = sin(e) * sin(L);
1172 const double ra = atan2(cos(e) * sin(L), cos(L));
1175 const double GMST = 18.697374558 + 24.06570982441908 * D;
1178 const double LST = GMST + lon / 15;
1181 const double h = LST / 12 * M_PI - ra;
1184 const double lat_help =
DEG2RAD(lat);
1187 return sin(lat_help) * sindec + cos(lat_help)
1188 * sqrt(1 -
POW2(sindec)) * cos(h);
1194 const gsl_vector *dx,
1195 const gsl_vector *dy,
1196 const gsl_matrix *s_a_inv,
1197 const gsl_vector *sig_eps_inv) {
1199 double chisq_a, chisq_m = 0;
1202 const size_t m = dy->size;
1203 const size_t n = dx->size;
1206 gsl_vector *x_aux = gsl_vector_alloc(n);
1210 for (
size_t i = 0; i < m; i++)
1211 chisq_m +=
POW2(gsl_vector_get(dy, i) * gsl_vector_get(sig_eps_inv, i));
1212 gsl_blas_dgemv(CblasNoTrans, 1.0, s_a_inv, dx, 0.0, x_aux);
1213 gsl_blas_ddot(dx, x_aux, &chisq_a);
1216 gsl_vector_free(x_aux);
1219 return (chisq_m + chisq_a) / (double) m;
1230 static const double co2296[2001] =
1231 { 9.3388e-5, 9.7711e-5, 1.0224e-4, 1.0697e-4,
1232 1.1193e-4, 1.1712e-4, 1.2255e-4, 1.2824e-4, 1.3419e-4, 1.4043e-4,
1233 1.4695e-4, 1.5378e-4, 1.6094e-4, 1.6842e-4, 1.7626e-4, 1.8447e-4,
1234 1.9307e-4, 2.0207e-4, 2.1149e-4, 2.2136e-4, 2.3169e-4, 2.4251e-4,
1235 2.5384e-4, 2.657e-4, 2.7813e-4, 2.9114e-4, 3.0477e-4, 3.1904e-4,
1236 3.3399e-4, 3.4965e-4, 3.6604e-4, 3.8322e-4, 4.0121e-4, 4.2006e-4,
1237 4.398e-4, 4.6047e-4, 4.8214e-4, 5.0483e-4, 5.286e-4, 5.535e-4,
1238 5.7959e-4, 6.0693e-4, 6.3557e-4, 6.6558e-4, 6.9702e-4, 7.2996e-4,
1239 7.6449e-4, 8.0066e-4, 8.3856e-4, 8.7829e-4, 9.1991e-4, 9.6354e-4,
1240 .0010093, .0010572, .0011074, .00116, .0012152, .001273,
1241 .0013336, .0013972, .0014638, .0015336, .0016068, .0016835,
1242 .001764, .0018483, .0019367, .0020295, .0021267, .0022286,
1243 .0023355, .0024476, .0025652, .0026885, .0028178, .0029534,
1244 .0030956, .0032448, .0034012, .0035654, .0037375, .0039181,
1245 .0041076, .0043063, .0045148, .0047336, .0049632, .005204,
1246 .0054567, .0057219, .0060002, .0062923, .0065988, .0069204,
1247 .007258, .0076123, .0079842, .0083746, .0087844, .0092146,
1248 .0096663, .01014, .010638, .011161, .01171, .012286, .012891,
1249 .013527, .014194, .014895, .015631, .016404, .017217, .01807,
1250 .018966, .019908, .020897, .021936, .023028, .024176, .025382,
1251 .026649, .027981, .02938, .030851, .032397, .034023, .035732,
1252 .037528, .039416, .041402, .04349, .045685, .047994, .050422,
1253 .052975, .055661, .058486, .061458, .064584, .067873, .071334,
1254 .074975, .078807, .082839, .087082, .091549, .096249, .1012,
1255 .10641, .11189, .11767, .12375, .13015, .13689, .14399, .15147,
1256 .15935, .16765, .17639, .18561, .19531, .20554, .21632, .22769,
1257 .23967, .25229, .2656, .27964, .29443, .31004, .3265, .34386,
1258 .36218, .3815, .40188, .42339, .44609, .47004, .49533, .52202,
1259 .5502, .57995, .61137, .64455, .6796, .71663, .75574, .79707,
1260 .84075, .88691, .9357, .98728, 1.0418, 1.0995, 1.1605, 1.225,
1261 1.2932, 1.3654, 1.4418, 1.5227, 1.6083, 1.6989, 1.7948, 1.8964,
1262 2.004, 2.118, 2.2388, 2.3668, 2.5025, 2.6463, 2.7988, 2.9606,
1263 3.1321, 3.314, 3.5071, 3.712, 3.9296, 4.1605, 4.4058, 4.6663,
1264 4.9431, 5.2374, 5.5501, 5.8818, 6.2353, 6.6114, 7.0115, 7.4372,
1265 7.8905, 8.3731, 8.8871, 9.4349, 10.019, 10.641, 11.305, 12.013,
1266 12.769, 13.576, 14.437, 15.358, 16.342, 17.39, 18.513, 19.716,
1267 21.003, 22.379, 23.854, 25.436, 27.126, 28.942, 30.89, 32.973,
1268 35.219, 37.634, 40.224, 43.021, 46.037, 49.29, 52.803, 56.447,
1269 60.418, 64.792, 69.526, 74.637, 80.182, 86.193, 92.713, 99.786,
1270 107.47, 115.84, 124.94, 134.86, 145.69, 157.49, 170.3, 184.39,
1271 199.83, 216.4, 234.55, 254.72, 276.82, 299.85, 326.16, 354.99,
1272 386.51, 416.68, 449.89, 490.12, 534.35, 578.25, 632.26, 692.61,
1273 756.43, 834.75, 924.11, 1016.9, 996.96, 1102.7, 1219.2, 1351.9,
1274 1494.3, 1654.1, 1826.5, 2027.9, 2249., 2453.8, 2714.4, 2999.4,
1275 3209.5, 3509., 3840.4, 3907.5, 4190.7, 4533.5, 4648.3, 5059.1,
1276 5561.6, 6191.4, 6820.8, 7905.9, 9362.2, 2431.3, 2211.3, 2046.8,
1277 2023.8, 1985.9, 1905.9, 1491.1, 1369.8, 1262.2, 1200.7, 887.74,
1278 820.25, 885.23, 887.21, 816.73, 1126.9, 1216.2, 1272.4, 1579.5,
1279 1634.2, 1656.3, 1657.9, 1789.5, 1670.8, 1509.5, 8474.6, 7489.2,
1280 6793.6, 6117., 5574.1, 5141.2, 5084.6, 4745.1, 4413.2, 4102.8,
1281 4024.7, 3715., 3398.6, 3100.8, 2900.4, 2629.2, 2374., 2144.7,
1282 1955.8, 1760.8, 1591.2, 1435.2, 1296.2, 1174., 1065.1, 967.76,
1283 999.48, 897.45, 809.23, 732.77, 670.26, 611.93, 560.11, 518.77,
1284 476.84, 438.8, 408.48, 380.21, 349.24, 322.71, 296.65, 272.85,
1285 251.96, 232.04, 213.88, 197.69, 182.41, 168.41, 155.79, 144.05,
1286 133.31, 123.48, 114.5, 106.21, 98.591, 91.612, 85.156, 79.204,
1287 73.719, 68.666, 63.975, 59.637, 56.35, 52.545, 49.042, 45.788,
1288 42.78, 39.992, 37.441, 35.037, 32.8, 30.744, 28.801, 26.986,
1289 25.297, 23.731, 22.258, 20.883, 19.603, 18.403, 17.295, 16.249,
1290 15.271, 14.356, 13.501, 12.701, 11.954, 11.254, 10.6, 9.9864,
1291 9.4118, 8.8745, 8.3714, 7.8997, 7.4578, 7.0446, 6.6573, 6.2949,
1292 5.9577, 5.6395, 5.3419, 5.063, 4.8037, 4.5608, 4.3452, 4.1364,
1293 3.9413, 3.7394, 3.562, 3.3932, 3.2325, 3.0789, 2.9318, 2.7898,
1294 2.6537, 2.5225, 2.3958, 2.2305, 2.1215, 2.0245, 1.9427, 1.8795,
1295 1.8336, 1.7604, 1.7016, 1.6419, 1.5282, 1.4611, 1.3443, 1.27,
1296 1.1675, 1.0824, 1.0534, .99833, .95854, .92981, .90887, .89346,
1297 .88113, .87068, .86102, .85096, .88262, .86151, .83565, .80518,
1298 .77045, .73736, .74744, .74954, .75773, .82267, .83493, .89402,
1299 .89725, .93426, .95564, .94045, .94174, .93404, .92035, .90456,
1300 .88621, .86673, .78117, .7515, .72056, .68822, .65658, .62764,
1301 .55984, .55598, .57407, .60963, .63763, .66198, .61132, .60972,
1302 .52496, .50649, .41872, .3964, .32422, .27276, .24048, .23772,
1303 .2286, .22711, .23999, .32038, .34371, .36621, .38561, .39953,
1304 .40636, .44913, .42716, .3919, .35477, .33935, .3351, .39746,
1305 .40993, .49398, .49956, .56157, .54742, .57295, .57386, .55417,
1306 .50745, .471, .43446, .39102, .34993, .31269, .27888, .24912,
1307 .22291, .19994, .17972, .16197, .14633, .13252, .12029, .10942,
1308 .099745, .091118, .083404, .076494, .070292, .064716, .059697,
1309 .055173, .051093, .047411, .044089, .041092, .038392, .035965,
1310 .033789, .031846, .030122, .028607, .02729, .026169, .025209,
1311 .024405, .023766, .023288, .022925, .022716, .022681, .022685,
1312 .022768, .023133, .023325, .023486, .024004, .024126, .024083,
1313 .023785, .024023, .023029, .021649, .021108, .019454, .017809,
1314 .017292, .016635, .017037, .018068, .018977, .018756, .017847,
1315 .016557, .016142, .014459, .012869, .012381, .010875, .0098701,
1316 .009285, .0091698, .0091701, .0096145, .010553, .01106, .012613,
1317 .014362, .015017, .016507, .017741, .01768, .017784, .0171,
1318 .016357, .016172, .017257, .018978, .020935, .021741, .023567,
1319 .025183, .025589, .026732, .027648, .028278, .028215, .02856,
1320 .029015, .029062, .028851, .028497, .027825, .027801, .026523,
1321 .02487, .022967, .022168, .020194, .018605, .017903, .018439,
1322 .019697, .020311, .020855, .020057, .018608, .016738, .015963,
1323 .013844, .011801, .011134, .0097573, .0086007, .0086226,
1324 .0083721, .0090978, .0097616, .0098426, .011317, .012853, .01447,
1325 .014657, .015771, .016351, .016079, .014829, .013431, .013185,
1326 .013207, .01448, .016176, .017971, .018265, .019526, .020455,
1327 .019797, .019802, .0194, .018176, .017505, .016197, .015339,
1328 .014401, .013213, .012203, .011186, .010236, .0093288, .0084854,
1329 .0076837, .0069375, .0062614, .0056628, .0051153, .0046015,
1330 .0041501, .003752, .0033996, .0030865, .0028077, .0025586,
1331 .0023355, .0021353, .0019553, .0017931, .0016466, .0015141,
1332 .0013941, .0012852, .0011862, .0010962, .0010142, 9.3935e-4,
1333 8.71e-4, 8.0851e-4, 7.5132e-4, 6.9894e-4, 6.5093e-4, 6.0689e-4,
1334 5.6647e-4, 5.2935e-4, 4.9525e-4, 4.6391e-4, 4.3509e-4, 4.086e-4,
1335 3.8424e-4, 3.6185e-4, 3.4126e-4, 3.2235e-4, 3.0498e-4, 2.8904e-4,
1336 2.7444e-4, 2.6106e-4, 2.4883e-4, 2.3766e-4, 2.275e-4, 2.1827e-4,
1337 2.0992e-4, 2.0239e-4, 1.9563e-4, 1.896e-4, 1.8427e-4, 1.796e-4,
1338 1.7555e-4, 1.7209e-4, 1.692e-4, 1.6687e-4, 1.6505e-4, 1.6375e-4,
1339 1.6294e-4, 1.6261e-4, 1.6274e-4, 1.6334e-4, 1.6438e-4, 1.6587e-4,
1340 1.678e-4, 1.7017e-4, 1.7297e-4, 1.762e-4, 1.7988e-4, 1.8399e-4,
1341 1.8855e-4, 1.9355e-4, 1.9902e-4, 2.0494e-4, 2.1134e-4, 2.1823e-4,
1342 2.2561e-4, 2.335e-4, 2.4192e-4, 2.5088e-4, 2.604e-4, 2.705e-4,
1343 2.8119e-4, 2.9251e-4, 3.0447e-4, 3.171e-4, 3.3042e-4, 3.4447e-4,
1344 3.5927e-4, 3.7486e-4, 3.9127e-4, 4.0854e-4, 4.267e-4, 4.4579e-4,
1345 4.6586e-4, 4.8696e-4, 5.0912e-4, 5.324e-4, 5.5685e-4, 5.8253e-4,
1346 6.0949e-4, 6.378e-4, 6.6753e-4, 6.9873e-4, 7.3149e-4, 7.6588e-4,
1347 8.0198e-4, 8.3987e-4, 8.7964e-4, 9.2139e-4, 9.6522e-4, .0010112,
1348 .0010595, .0011102, .0011634, .0012193, .001278, .0013396,
1349 .0014043, .0014722, .0015436, .0016185, .0016972, .0017799,
1350 .0018668, .001958, .0020539, .0021547, .0022606, .0023719,
1351 .002489, .002612, .0027414, .0028775, .0030206, .0031712,
1352 .0033295, .0034962, .0036716, .0038563, .0040506, .0042553,
1353 .0044709, .004698, .0049373, .0051894, .0054552, .0057354,
1354 .006031, .0063427, .0066717, .0070188, .0073854, .0077726,
1355 .0081816, .0086138, .0090709, .0095543, .010066, .010607,
1356 .011181, .011789, .012433, .013116, .013842, .014613, .015432,
1357 .016304, .017233, .018224, .019281, .020394, .021574, .022836,
1358 .024181, .025594, .027088, .028707, .030401, .032245, .034219,
1359 .036262, .038539, .040987, .043578, .04641, .04949, .052726,
1360 .056326, .0602, .064093, .068521, .073278, .077734, .083064,
1361 .088731, .093885, .1003, .1072, .11365, .12187, .13078, .13989,
1362 .15095, .16299, .17634, .19116, .20628, .22419, .24386, .26587,
1363 .28811, .31399, .34321, .36606, .39675, .42742, .44243, .47197,
1364 .49993, .49027, .51147, .52803, .48931, .49729, .5026, .43854,
1365 .441, .44766, .43414, .46151, .50029, .55247, .43855, .32115,
1366 .32607, .3431, .36119, .38029, .41179, .43996, .47144, .51853,
1367 .55362, .59122, .66338, .69877, .74001, .82923, .86907, .90361,
1368 1.0025, 1.031, 1.0559, 1.104, 1.1178, 1.1341, 1.1547, 1.351,
1369 1.4772, 1.4812, 1.4907, 1.512, 1.5442, 1.5853, 1.6358, 1.6963,
1370 1.7674, 1.8474, 1.9353, 2.0335, 2.143, 2.2592, 2.3853, 2.5217,
1371 2.6686, 2.8273, 2.9998, 3.183, 3.3868, 3.6109, 3.8564, 4.1159,
1372 4.4079, 4.7278, 5.0497, 5.3695, 5.758, 6.0834, 6.4976, 6.9312,
1373 7.38, 7.5746, 7.9833, 8.3791, 8.3956, 8.7501, 9.1067, 9.072,
1374 9.4649, 9.9112, 10.402, 10.829, 11.605, 12.54, 12.713, 10.443,
1375 10.825, 11.375, 11.955, 12.623, 13.326, 14.101, 15.041, 15.547,
1376 16.461, 17.439, 18.716, 19.84, 21.036, 22.642, 23.901, 25.244,
1377 27.03, 28.411, 29.871, 31.403, 33.147, 34.744, 36.456, 39.239,
1378 43.605, 45.162, 47.004, 49.093, 51.391, 53.946, 56.673, 59.629,
1379 63.167, 66.576, 70.254, 74.222, 78.477, 83.034, 87.914, 93.18,
1380 98.77, 104.74, 111.15, 117.95, 125.23, 133.01, 141.33, 150.21,
1381 159.71, 169.89, 180.93, 192.54, 204.99, 218.34, 232.65, 248.,
1382 264.47, 282.14, 301.13, 321.53, 343.48, 367.08, 392.5, 419.88,
1383 449.4, 481.26, 515.64, 552.79, 592.99, 636.48, 683.61, 734.65,
1384 789.99, 850.02, 915.14, 985.81, 1062.5, 1147.1, 1237.8, 1336.4,
1385 1443.2, 1558.9, 1684.2, 1819.2, 1965.2, 2122.6, 2291.7, 2470.8,
1386 2665.7, 2874.9, 3099.4, 3337.9, 3541., 3813.3, 4111.9, 4439.3,
1387 4798.9, 5196., 5639.2, 6087.5, 6657.7, 7306.7, 8040.7, 8845.5,
1388 9702.2, 10670., 11739., 12842., 14141., 15498., 17068., 18729.,
1389 20557., 22559., 25248., 27664., 30207., 32915., 35611., 38081.,
1390 40715., 43191., 41651., 42750., 43785., 44353., 44366., 44189.,
1391 43618., 42862., 41878., 35133., 35215., 36383., 39420., 44055.,
1392 44155., 45850., 46853., 39197., 38274., 29942., 28553., 21792.,
1393 21228., 17106., 14955., 18181., 19557., 21427., 23728., 26301.,
1394 28584., 30775., 32536., 33867., 40089., 39204., 37329., 34452.,
1395 31373., 33921., 34800., 36043., 44415., 45162., 52181., 50895.,
1396 54140., 50840., 50468., 48302., 44915., 40910., 36754., 32755.,
1397 29093., 25860., 22962., 20448., 18247., 16326., 14645., 13165.,
1398 11861., 10708., 9686.9, 8779.7, 7971.9, 7250.8, 6605.7, 6027.2,
1399 5507.3, 5039.1, 4616.6, 4234.8, 3889., 3575.4, 3290.5, 3031.3,
1400 2795.2, 2579.9, 2383.1, 2203.3, 2038.6, 1887.6, 1749.1, 1621.9,
1401 1505., 1397.4, 1298.3, 1207., 1122.8, 1045., 973.1, 906.64,
1402 845.16, 788.22, 735.48, 686.57, 641.21, 599.1, 559.99, 523.64,
1403 489.85, 458.42, 429.16, 401.92, 376.54, 352.88, 330.82, 310.24,
1404 291.03, 273.09, 256.34, 240.69, 226.05, 212.37, 199.57, 187.59,
1405 176.37, 165.87, 156.03, 146.82, 138.17, 130.07, 122.47, 115.34,
1406 108.65, 102.37, 96.473, 90.934, 85.73, 80.84, 76.243, 71.922,
1407 67.858, 64.034, 60.438, 57.052, 53.866, 50.866, 48.04, 45.379,
1408 42.872, 40.51, 38.285, 36.188, 34.211, 32.347, 30.588, 28.929,
1409 27.362, 25.884, 24.489, 23.171, 21.929, 20.755, 19.646, 18.599,
1410 17.61, 16.677, 15.795, 14.961, 14.174, 13.43, 12.725, 12.06,
1411 11.431, 10.834, 10.27, 9.7361, 9.2302, 8.7518, 8.2997, 7.8724,
1412 7.4674, 7.0848, 6.7226, 6.3794, 6.054, 5.745, 5.4525, 5.1752,
1413 4.9121, 4.6625, 4.4259, 4.2015, 3.9888, 3.7872, 3.5961, 3.4149,
1414 3.2431, 3.0802, 2.9257, 2.7792, 2.6402, 2.5084, 2.3834, 2.2648,
1415 2.1522, 2.0455, 1.9441, 1.848, 1.7567, 1.6701, 1.5878, 1.5097,
1416 1.4356, 1.3651, 1.2981, 1.2345, 1.174, 1.1167, 1.062, 1.0101,
1417 .96087, .91414, .86986, .82781, .78777, .74971, .71339, .67882,
1418 .64604, .61473, .58507, .55676, .52987, .5044, .48014, .45715,
1419 .43527, .41453, .3948, .37609, .35831, .34142, .32524, .30995,
1420 .29536, .28142, .26807, .25527, .24311, .23166, .22077, .21053,
1421 .20081, .19143, .18261, .17407, .16603, .15833, .15089, .14385,
1422 .13707, .13065, .12449, .11865, .11306, .10774, .10266, .097818,
1423 .093203, .088815, .084641, .080671, .076892, .073296, .069873,
1424 .066613, .06351, .060555, .05774, .055058, .052504, .050071,
1425 .047752, .045543, .043438, .041432, .039521, .037699, .035962,
1426 .034307, .032729, .031225, .029791, .028423, .02712, .025877,
1427 .024692, .023563, .022485, .021458, .020478, .019543, .018652,
1428 .017802, .016992, .016219, .015481, .014778, .014107, .013467,
1429 .012856, .012274, .011718, .011188, .010682, .0102, .0097393,
1430 .0093001, .008881, .0084812, .0080997, .0077358, .0073885,
1431 .0070571, .0067409, .0064393, .0061514, .0058768, .0056147,
1432 .0053647, .0051262, .0048987, .0046816, .0044745, .0042769,
1433 .0040884, .0039088, .0037373, .0035739, .003418, .0032693,
1434 .0031277, .0029926, .0028639, .0027413, .0026245, .0025133,
1435 .0024074, .0023066, .0022108, .0021196, .002033, .0019507,
1436 .0018726, .0017985, .0017282, .0016617, .0015988, .0015394,
1437 .0014834, .0014306, .0013811, .0013346, .0012911, .0012506,
1438 .0012131, .0011784, .0011465, .0011175, .0010912, .0010678,
1439 .0010472, .0010295, .0010147, .001003, 9.9428e-4, 9.8883e-4,
1440 9.8673e-4, 9.8821e-4, 9.9343e-4, .0010027, .0010164, .0010348,
1441 .0010586, .0010882, .0011245, .0011685, .0012145, .0012666,
1442 .0013095, .0013688, .0014048, .0014663, .0015309, .0015499,
1443 .0016144, .0016312, .001705, .0017892, .0018499, .0019715,
1444 .0021102, .0022442, .0024284, .0025893, .0027703, .0029445,
1445 .0031193, .003346, .0034552, .0036906, .0037584, .0040084,
1446 .0041934, .0044587, .0047093, .0049759, .0053421, .0055134,
1447 .0059048, .0058663, .0061036, .0063259, .0059657, .0060653,
1448 .0060972, .0055539, .0055653, .0055772, .005331, .0054953,
1449 .0055919, .0058684, .006183, .0066675, .0069808, .0075142,
1450 .0078536, .0084282, .0089454, .0094625, .0093703, .0095857,
1451 .0099283, .010063, .010521, .0097778, .0098175, .010379, .010447,
1452 .0105, .010617, .010706, .01078, .011177, .011212, .011304,
1453 .011446, .011603, .011816, .012165, .012545, .013069, .013539,
1454 .01411, .014776, .016103, .017016, .017994, .018978, .01998,
1455 .021799, .022745, .023681, .024627, .025562, .026992, .027958,
1456 .029013, .030154, .031402, .03228, .033651, .035272, .037088,
1457 .039021, .041213, .043597, .045977, .04877, .051809, .054943,
1458 .058064, .061528, .06537, .069309, .071928, .075752, .079589,
1459 .083352, .084096, .087497, .090817, .091198, .094966, .099045,
1460 .10429, .10867, .11518, .12269, .13126, .14087, .15161, .16388,
1461 .16423, .1759, .18721, .19994, .21275, .22513, .23041, .24231,
1462 .25299, .25396, .26396, .27696, .27929, .2908, .30595, .31433,
1463 .3282, .3429, .35944, .37467, .39277, .41245, .43326, .45649,
1464 .48152, .51897, .54686, .57877, .61263, .64962, .68983, .73945,
1465 .78619, .83537, .89622, .95002, 1.0067, 1.0742, 1.1355, 1.2007,
1466 1.2738, 1.347, 1.4254, 1.5094, 1.6009, 1.6976, 1.8019, 1.9148,
1467 2.0357, 2.166, 2.3066, 2.4579, 2.6208, 2.7966, 2.986, 3.188,
1468 3.4081, 3.6456, 3.9, 4.1747, 4.4712, 4.7931, 5.1359, 5.5097,
1469 5.9117, 6.3435, 6.8003, 7.3001, 7.8385, 8.3945, 9.011, 9.6869,
1470 10.392, 11.18, 12.036, 12.938, 13.944, 14.881, 16.029, 17.255,
1471 18.574, 19.945, 21.38, 22.9, 24.477, 26.128, 27.87, 29.037,
1472 30.988, 33.145, 35.506, 37.76, 40.885, 44.487, 48.505, 52.911,
1473 57.56, 61.964, 67.217, 72.26, 78.343, 85.08, 91.867, 99.435,
1474 107.68, 116.97, 127.12, 138.32, 150.26, 163.04, 174.81, 189.26,
1475 205.61, 224.68, 240.98, 261.88, 285.1, 307.58, 334.35, 363.53,
1476 394.68, 427.85, 458.85, 489.25, 472.87, 486.93, 496.27, 501.52,
1477 501.57, 497.14, 488.09, 476.32, 393.76, 388.51, 393.42, 414.45,
1478 455.12, 514.62, 520.38, 547.42, 562.6, 487.47, 480.83, 391.06,
1479 376.92, 303.7, 295.91, 256.03, 236.73, 280.38, 310.71, 335.53,
1480 367.88, 401.94, 435.52, 469.13, 497.94, 588.82, 597.94, 597.2,
1481 588.28, 571.2, 555.75, 603.56, 638.15, 680.75, 801.72, 848.01,
1482 962.15, 990.06, 1068.1, 1076.2, 1115.3, 1134.2, 1136.6, 1119.1,
1483 1108.9, 1090.6, 1068.7, 1041.9, 1005.4, 967.98, 927.08, 780.1,
1484 751.41, 733.12, 742.65, 785.56, 855.16, 852.45, 878.1, 784.59,
1485 777.81, 765.13, 622.93, 498.09, 474.89, 386.9, 378.48, 336.17,
1486 322.04, 329.57, 350.5, 383.38, 420.02, 462.39, 499.71, 531.98,
1487 654.99, 653.43, 639.99, 605.16, 554.16, 504.42, 540.64, 552.33,
1488 679.46, 699.51, 713.91, 832.17, 919.91, 884.96, 907.57, 846.56,
1489 818.56, 768.93, 706.71, 642.17, 575.95, 515.38, 459.07, 409.02,
1490 364.61, 325.46, 291.1, 260.89, 234.39, 211.01, 190.38, 172.11,
1491 155.91, 141.49, 128.63, 117.13, 106.84, 97.584, 89.262, 81.756,
1492 74.975, 68.842, 63.28, 58.232, 53.641, 49.46, 45.649, 42.168,
1493 38.991, 36.078, 33.409, 30.96, 28.71, 26.642, 24.737, 22.985,
1494 21.37, 19.882, 18.512, 17.242, 16.073, 14.987, 13.984, 13.05,
1495 12.186, 11.384, 10.637, 9.9436, 9.2988, 8.6991, 8.141, 7.6215,
1496 7.1378, 6.6872, 6.2671, 5.8754, 5.51, 5.1691, 4.851, 4.5539,
1497 4.2764, 4.0169, 3.7742, 3.5472, 3.3348, 3.1359, 2.9495, 2.7749,
1498 2.6113, 2.4578, 2.3139, 2.1789, 2.0523, 1.9334, 1.8219, 1.7171,
1499 1.6188, 1.5263, 1.4395, 1.3579, 1.2812, 1.209, 1.1411, 1.0773,
1500 1.0171, .96048, .90713, .85684, .80959, .76495, .72282, .68309,
1501 .64563, .61035, .57707, .54573, .51622, .48834, .46199, .43709,
1502 .41359, .39129, .37034, .35064, .33198, .31442, .29784, .28218,
1503 .26732, .25337, .24017, .22774, .21601, .20479, .19426
1506 static const double co2260[2001] =
1507 { 5.7971e-5, 6.0733e-5, 6.3628e-5, 6.6662e-5,
1508 6.9843e-5, 7.3176e-5, 7.6671e-5, 8.0334e-5, 8.4175e-5, 8.8201e-5,
1509 9.2421e-5, 9.6846e-5, 1.0149e-4, 1.0635e-4, 1.1145e-4, 1.1679e-4,
1510 1.224e-4, 1.2828e-4, 1.3444e-4, 1.409e-4, 1.4768e-4, 1.5479e-4,
1511 1.6224e-4, 1.7006e-4, 1.7826e-4, 1.8685e-4, 1.9587e-4, 2.0532e-4,
1512 2.1524e-4, 2.2565e-4, 2.3656e-4, 2.48e-4, 2.6001e-4, 2.7261e-4,
1513 2.8582e-4, 2.9968e-4, 3.1422e-4, 3.2948e-4, 3.4548e-4, 3.6228e-4,
1514 3.799e-4, 3.9838e-4, 4.1778e-4, 4.3814e-4, 4.595e-4, 4.8191e-4,
1515 5.0543e-4, 5.3012e-4, 5.5603e-4, 5.8321e-4, 6.1175e-4, 6.417e-4,
1516 6.7314e-4, 7.0614e-4, 7.4078e-4, 7.7714e-4, 8.1531e-4, 8.5538e-4,
1517 8.9745e-4, 9.4162e-4, 9.8798e-4, .0010367, .0010878, .0011415,
1518 .0011978, .001257, .0013191, .0013844, .001453, .0015249,
1519 .0016006, .00168, .0017634, .001851, .001943, .0020397, .0021412,
1520 .0022479, .00236, .0024778, .0026015, .0027316, .0028682,
1521 .0030117, .0031626, .0033211, .0034877, .0036628, .0038469,
1522 .0040403, .0042436, .0044574, .004682, .0049182, .0051665,
1523 .0054276, .0057021, .0059907, .0062942, .0066133, .0069489,
1524 .0073018, .0076729, .0080632, .0084738, .0089056, .0093599,
1525 .0098377, .01034, .010869, .011426, .012011, .012627, .013276,
1526 .013958, .014676, .015431, .016226, .017063, .017944, .018872,
1527 .019848, .020876, .021958, .023098, .024298, .025561, .026892,
1528 .028293, .029769, .031323, .032961, .034686, .036503, .038418,
1529 .040435, .042561, .044801, .047161, .049649, .052271, .055035,
1530 .057948, .061019, .064256, .06767, .07127, .075066, .079069,
1531 .083291, .087744, .092441, .097396, .10262, .10814, .11396,
1532 .1201, .12658, .13342, .14064, .14826, .1563, .1648, .17376,
1533 .18323, .19324, .2038, .21496, .22674, .23919, .25234, .26624,
1534 .28093, .29646, .31287, .33021, .34855, .36794, .38844, .41012,
1535 .43305, .45731, .48297, .51011, .53884, .56924, .60141, .63547,
1536 .67152, .70969, .75012, .79292, .83826, .8863, .93718, .99111,
1537 1.0482, 1.1088, 1.173, 1.2411, 1.3133, 1.3898, 1.471, 1.5571,
1538 1.6485, 1.7455, 1.8485, 1.9577, 2.0737, 2.197, 2.3278, 2.4668,
1539 2.6145, 2.7715, 2.9383, 3.1156, 3.3042, 3.5047, 3.7181, 3.9451,
1540 4.1866, 4.4437, 4.7174, 5.0089, 5.3192, 5.65, 6.0025, 6.3782,
1541 6.7787, 7.206, 7.6617, 8.1479, 8.6669, 9.221, 9.8128, 10.445,
1542 11.12, 11.843, 12.615, 13.441, 14.325, 15.271, 16.283, 17.367,
1543 18.529, 19.776, 21.111, 22.544, 24.082, 25.731, 27.504, 29.409,
1544 31.452, 33.654, 36.024, 38.573, 41.323, 44.29, 47.492, 50.951,
1545 54.608, 58.588, 62.929, 67.629, 72.712, 78.226, 84.207, 90.699,
1546 97.749, 105.42, 113.77, 122.86, 132.78, 143.61, 155.44, 168.33,
1547 182.48, 198.01, 214.87, 233.39, 253.86, 276.34, 300.3, 327.28,
1548 356.89, 389.48, 422.29, 458.99, 501.39, 548.13, 595.62, 652.74,
1549 716.54, 784.57, 866.78, 960.59, 1062.8, 1072.5, 1189.5, 1319.4,
1550 1467.6, 1630.2, 1813.7, 2016.9, 2253., 2515.3, 2773.5, 3092.8,
1551 3444.4, 3720.4, 4104.3, 4527.5, 4645.9, 5021.7, 5462.2, 5597.,
1552 6110.6, 6732.5, 7513.8, 8270.6, 9640.6, 11487., 2796.1, 2680.1,
1553 2441.6, 2404.2, 2334.8, 2215.2, 1642.5, 1477.9, 1328.1, 1223.5,
1554 843.34, 766.96, 831.65, 834.84, 774.85, 1156.3, 1275.6, 1366.1,
1555 1795.6, 1885., 1936.5, 1953.4, 2154.4, 2002.7, 1789.8, 10381.,
1556 9040., 8216.5, 7384.7, 6721.9, 6187.7, 6143.8, 5703.9, 5276.6,
1557 4873.1, 4736., 4325.3, 3927., 3554.1, 3286.1, 2950.1, 2642.4,
1558 2368.7, 2138.9, 1914., 1719.6, 1543.9, 1388.6, 1252.1, 1132.2,
1559 1024.1, 1025.4, 920.58, 829.59, 750.54, 685.01, 624.25, 570.14,
1560 525.81, 481.85, 441.95, 408.71, 377.23, 345.86, 318.51, 292.26,
1561 268.34, 247.04, 227.14, 209.02, 192.69, 177.59, 163.78, 151.26,
1562 139.73, 129.19, 119.53, 110.7, 102.57, 95.109, 88.264, 81.948,
1563 76.13, 70.768, 65.827, 61.251, 57.022, 53.495, 49.824, 46.443,
1564 43.307, 40.405, 37.716, 35.241, 32.923, 30.77, 28.78, 26.915,
1565 25.177, 23.56, 22.059, 20.654, 19.345, 18.126, 16.988, 15.93,
1566 14.939, 14.014, 13.149, 12.343, 11.589, 10.884, 10.225, 9.6093,
1567 9.0327, 8.4934, 7.9889, 7.5166, 7.0744, 6.6604, 6.2727, 5.9098,
1568 5.5701, 5.2529, 4.955, 4.676, 4.4148, 4.171, 3.9426, 3.7332,
1569 3.5347, 3.3493, 3.1677, 3.0025, 2.8466, 2.6994, 2.5601, 2.4277,
1570 2.3016, 2.1814, 2.0664, 1.9564, 1.8279, 1.7311, 1.6427, 1.5645,
1571 1.4982, 1.443, 1.374, 1.3146, 1.2562, 1.17, 1.1105, 1.0272,
1572 .96863, .89718, .83654, .80226, .75908, .72431, .69573, .67174,
1573 .65126, .63315, .61693, .60182, .58715, .59554, .57649, .55526,
1574 .53177, .50622, .48176, .4813, .47642, .47492, .50273, .50293,
1575 .52687, .52239, .53419, .53814, .52626, .52211, .51492, .50622,
1576 .49746, .48841, .4792, .43534, .41999, .40349, .38586, .36799,
1577 .35108, .31089, .30803, .3171, .33599, .35041, .36149, .32924,
1578 .32462, .27309, .25961, .20922, .19504, .15683, .13098, .11588,
1579 .11478, .11204, .11363, .12135, .16423, .17785, .19094, .20236,
1580 .21084, .2154, .24108, .22848, .20871, .18797, .17963, .17834,
1581 .21552, .22284, .26945, .27052, .30108, .28977, .29772, .29224,
1582 .27658, .24956, .22777, .20654, .18392, .16338, .1452, .12916,
1583 .1152, .10304, .092437, .083163, .075031, .067878, .061564,
1584 .055976, .051018, .046609, .042679, .03917, .036032, .033223,
1585 .030706, .02845, .026428, .024617, .022998, .021554, .02027,
1586 .019136, .018141, .017278, .016541, .015926, .015432, .015058,
1587 .014807, .014666, .014635, .014728, .014947, .01527, .015728,
1588 .016345, .017026, .017798, .018839, .019752, .020636, .021886,
1589 .022695, .02327, .023478, .024292, .023544, .022222, .021932,
1590 .020052, .018143, .017722, .017031, .017782, .01938, .020734,
1591 .020476, .019255, .017477, .016878, .014617, .012489, .011765,
1592 .0099077, .0086446, .0079446, .0078644, .0079763, .008671,
1593 .01001, .0108, .012933, .015349, .016341, .018484, .020254,
1594 .020254, .020478, .019591, .018595, .018385, .019913, .022254,
1595 .024847, .025809, .028053, .029924, .030212, .031367, .03222,
1596 .032739, .032537, .03286, .033344, .033507, .033499, .033339,
1597 .032809, .033041, .031723, .029837, .027511, .026603, .024032,
1598 .021914, .020948, .021701, .023425, .024259, .024987, .023818,
1599 .021768, .019223, .018144, .015282, .012604, .01163, .0097907,
1600 .008336, .0082473, .0079582, .0088077, .009779, .010129, .012145,
1601 .014378, .016761, .01726, .018997, .019998, .019809, .01819,
1602 .016358, .016099, .01617, .017939, .020223, .022521, .02277,
1603 .024279, .025247, .024222, .023989, .023224, .021493, .020362,
1604 .018596, .017309, .015975, .014466, .013171, .011921, .01078,
1605 .0097229, .0087612, .0078729, .0070682, .0063494, .0057156,
1606 .0051459, .0046273, .0041712, .0037686, .0034119, .003095,
1607 .0028126, .0025603, .0023342, .0021314, .0019489, .0017845,
1608 .001636, .0015017, .00138, .0012697, .0011694, .0010782,
1609 9.9507e-4, 9.1931e-4, 8.5013e-4, 7.869e-4, 7.2907e-4, 6.7611e-4,
1610 6.2758e-4, 5.8308e-4, 5.4223e-4, 5.0473e-4, 4.7027e-4, 4.3859e-4,
1611 4.0946e-4, 3.8265e-4, 3.5798e-4, 3.3526e-4, 3.1436e-4, 2.9511e-4,
1612 2.7739e-4, 2.6109e-4, 2.4609e-4, 2.3229e-4, 2.1961e-4, 2.0797e-4,
1613 1.9729e-4, 1.875e-4, 1.7855e-4, 1.7038e-4, 1.6294e-4, 1.5619e-4,
1614 1.5007e-4, 1.4456e-4, 1.3961e-4, 1.3521e-4, 1.3131e-4, 1.2789e-4,
1615 1.2494e-4, 1.2242e-4, 1.2032e-4, 1.1863e-4, 1.1733e-4, 1.1641e-4,
1616 1.1585e-4, 1.1565e-4, 1.158e-4, 1.1629e-4, 1.1712e-4, 1.1827e-4,
1617 1.1976e-4, 1.2158e-4, 1.2373e-4, 1.262e-4, 1.2901e-4, 1.3214e-4,
1618 1.3562e-4, 1.3944e-4, 1.4361e-4, 1.4814e-4, 1.5303e-4, 1.5829e-4,
1619 1.6394e-4, 1.6999e-4, 1.7644e-4, 1.8332e-4, 1.9063e-4, 1.984e-4,
1620 2.0663e-4, 2.1536e-4, 2.246e-4, 2.3436e-4, 2.4468e-4, 2.5558e-4,
1621 2.6708e-4, 2.7921e-4, 2.92e-4, 3.0548e-4, 3.1968e-4, 3.3464e-4,
1622 3.5039e-4, 3.6698e-4, 3.8443e-4, 4.0281e-4, 4.2214e-4, 4.4248e-4,
1623 4.6389e-4, 4.864e-4, 5.1009e-4, 5.3501e-4, 5.6123e-4, 5.888e-4,
1624 6.1781e-4, 6.4833e-4, 6.8043e-4, 7.142e-4, 7.4973e-4, 7.8711e-4,
1625 8.2644e-4, 8.6783e-4, 9.1137e-4, 9.5721e-4, .0010054, .0010562,
1626 .0011096, .0011659, .0012251, .0012875, .0013532, .0014224,
1627 .0014953, .001572, .0016529, .0017381, .0018279, .0019226,
1628 .0020224, .0021277, .0022386, .0023557, .0024792, .0026095,
1629 .002747, .0028921, .0030453, .0032071, .003378, .0035586,
1630 .0037494, .003951, .0041642, .0043897, .0046282, .0048805,
1631 .0051476, .0054304, .00573, .0060473, .0063837, .0067404,
1632 .0071188, .0075203, .0079466, .0083994, .0088806, .0093922,
1633 .0099366, .010516, .011134, .011792, .012494, .013244, .014046,
1634 .014898, .015808, .016781, .017822, .018929, .020108, .02138,
1635 .022729, .02419, .02576, .027412, .029233, .031198, .033301,
1636 .035594, .038092, .040767, .04372, .046918, .050246, .053974,
1637 .058009, .061976, .066586, .071537, .076209, .081856, .087998,
1638 .093821, .10113, .10913, .11731, .12724, .13821, .15025, .1639,
1639 .17807, .19472, .21356, .23496, .25758, .28387, .31389, .34104,
1640 .37469, .40989, .43309, .46845, .5042, .5023, .52981, .55275,
1641 .51075, .51976, .52457, .44779, .44721, .4503, .4243, .45244,
1642 .49491, .55399, .39021, .24802, .2501, .2618, .27475, .28879,
1643 .31317, .33643, .36257, .4018, .43275, .46525, .53333, .56599,
1644 .60557, .70142, .74194, .77736, .88567, .91182, .93294, .98407,
1645 .98772, .99176, .9995, 1.2405, 1.3602, 1.338, 1.3255, 1.3267,
1646 1.3404, 1.3634, 1.3967, 1.4407, 1.4961, 1.5603, 1.6328, 1.7153,
1647 1.8094, 1.9091, 2.018, 2.1367, 2.264, 2.4035, 2.5562, 2.7179,
1648 2.9017, 3.1052, 3.3304, 3.5731, 3.8488, 4.1553, 4.4769, 4.7818,
1649 5.1711, 5.5204, 5.9516, 6.4097, 6.8899, 7.1118, 7.5469, 7.9735,
1650 7.9511, 8.3014, 8.6418, 8.4757, 8.8256, 9.2294, 9.6923, 10.033,
1651 10.842, 11.851, 11.78, 8.8435, 9.1381, 9.5956, 10.076, 10.629,
1652 11.22, 11.883, 12.69, 13.163, 13.974, 14.846, 16.027, 17.053,
1653 18.148, 19.715, 20.907, 22.163, 23.956, 25.235, 26.566, 27.94,
1654 29.576, 30.956, 32.432, 35.337, 39.911, 41.128, 42.625, 44.386,
1655 46.369, 48.619, 51.031, 53.674, 56.825, 59.921, 63.286, 66.929,
1656 70.859, 75.081, 79.618, 84.513, 89.739, 95.335, 101.35, 107.76,
1657 114.63, 121.98, 129.87, 138.3, 147.34, 157.04, 167.56, 178.67,
1658 190.61, 203.43, 217.19, 231.99, 247.88, 264.98, 283.37, 303.17,
1659 324.49, 347.47, 372.25, 398.98, 427.85, 459.06, 492.8, 529.31,
1660 568.89, 611.79, 658.35, 708.91, 763.87, 823.65, 888.72, 959.58,
1661 1036.8, 1121.8, 1213.9, 1314.3, 1423.8, 1543., 1672.8, 1813.4,
1662 1966.1, 2131.4, 2309.5, 2499.3, 2705., 2925.7, 3161.6, 3411.3,
1663 3611.5, 3889.2, 4191.1, 4519.3, 4877.9, 5272.9, 5712.9, 6142.7,
1664 6719.6, 7385., 8145., 8977.7, 9831.9, 10827., 11934., 13063.,
1665 14434., 15878., 17591., 19435., 21510., 23835., 26835., 29740.,
1666 32878., 36305., 39830., 43273., 46931., 50499., 49586., 51598.,
1667 53429., 54619., 55081., 55102., 54485., 53487., 52042., 42689.,
1668 42607., 44020., 47994., 54169., 53916., 55808., 56642., 46049.,
1669 44243., 32929., 30658., 21963., 20835., 15962., 13679., 17652.,
1670 19680., 22388., 25625., 29184., 32520., 35720., 38414., 40523.,
1671 49228., 48173., 45678., 41768., 37600., 41313., 42654., 44465.,
1672 55736., 56630., 65409., 63308., 66572., 61845., 60379., 56777.,
1673 51920., 46601., 41367., 36529., 32219., 28470., 25192., 22362.,
1674 19907., 17772., 15907., 14273., 12835., 11567., 10445., 9450.2,
1675 8565.1, 7776., 7070.8, 6439.2, 5872.3, 5362.4, 4903., 4488.3,
1676 4113.4, 3773.8, 3465.8, 3186.1, 2931.7, 2700.1, 2488.8, 2296.,
1677 2119.8, 1958.6, 1810.9, 1675.6, 1551.4, 1437.3, 1332.4, 1236.,
1678 1147.2, 1065.3, 989.86, 920.22, 855.91, 796.48, 741.53, 690.69,
1679 643.62, 600.02, 559.6, 522.13, 487.35, 455.06, 425.08, 397.21,
1680 371.3, 347.2, 324.78, 303.9, 284.46, 266.34, 249.45, 233.7,
1681 219.01, 205.3, 192.5, 180.55, 169.38, 158.95, 149.2, 140.07,
1682 131.54, 123.56, 116.09, 109.09, 102.54, 96.405, 90.655, 85.266,
1683 80.213, 75.475, 71.031, 66.861, 62.948, 59.275, 55.827, 52.587,
1684 49.544, 46.686, 43.998, 41.473, 39.099, 36.867, 34.768, 32.795,
1685 30.939, 29.192, 27.546, 25.998, 24.539, 23.164, 21.869, 20.65,
1686 19.501, 18.419, 17.399, 16.438, 15.532, 14.678, 13.874, 13.115,
1687 12.4, 11.726, 11.088, 10.488, 9.921, 9.3846, 8.8784, 8.3996,
1688 7.9469, 7.5197, 7.1174, 6.738, 6.379, 6.0409, 5.7213, 5.419,
1689 5.1327, 4.8611, 4.6046, 4.3617, 4.1316, 3.9138, 3.7077, 3.5125,
1690 3.3281, 3.1536, 2.9885, 2.8323, 2.6846, 2.5447, 2.4124, 2.2871,
1691 2.1686, 2.0564, 1.9501, 1.8495, 1.7543, 1.6641, 1.5787, 1.4978,
1692 1.4212, 1.3486, 1.2799, 1.2147, 1.1529, 1.0943, 1.0388, .98602,
1693 .93596, .8886, .84352, .80078, .76029, .722, .68585, .65161,
1694 .61901, .58808, .55854, .53044, .5039, .47853, .45459, .43173,
1695 .41008, .38965, .37021, .35186, .33444, .31797, .30234, .28758,
1696 .2736, .26036, .24764, .2357, .22431, .21342, .20295, .19288,
1697 .18334, .17444, .166, .15815, .15072, .14348, .13674, .13015,
1698 .12399, .11807, .11231, .10689, .10164, .096696, .091955,
1699 .087476, .083183, .079113, .075229, .071536, .068026, .064698,
1700 .06154, .058544, .055699, .052997, .050431, .047993, .045676,
1701 .043475, .041382, .039392, .037501, .035702, .033991, .032364,
1702 .030817, .029345, .027945, .026613, .025345, .024139, .022991,
1703 .021899, .02086, .019871, .018929, .018033, .01718, .016368,
1704 .015595, .014859, .014158, .013491, .012856, .012251, .011675,
1705 .011126, .010604, .010107, .0096331, .009182, .0087523, .0083431,
1706 .0079533, .0075821, .0072284, .0068915, .0065706, .0062649,
1707 .0059737, .0056963, .005432, .0051802, .0049404, .0047118,
1708 .0044941, .0042867, .0040891, .0039009, .0037216, .0035507,
1709 .003388, .0032329, .0030852, .0029445, .0028105, .0026829,
1710 .0025613, .0024455, .0023353, .0022303, .0021304, .0020353,
1711 .0019448, .0018587, .0017767, .0016988, .0016247, .0015543,
1712 .0014874, .0014238, .0013635, .0013062, .0012519, .0012005,
1713 .0011517, .0011057, .0010621, .001021, 9.8233e-4, 9.4589e-4,
1714 9.1167e-4, 8.7961e-4, 8.4964e-4, 8.2173e-4, 7.9582e-4, 7.7189e-4,
1715 7.499e-4, 7.2983e-4, 7.1167e-4, 6.9542e-4, 6.8108e-4, 6.6866e-4,
1716 6.5819e-4, 6.4971e-4, 6.4328e-4, 6.3895e-4, 6.3681e-4, 6.3697e-4,
1717 6.3956e-4, 6.4472e-4, 6.5266e-4, 6.6359e-4, 6.778e-4, 6.9563e-4,
1718 7.1749e-4, 7.4392e-4, 7.7556e-4, 8.1028e-4, 8.4994e-4, 8.8709e-4,
1719 9.3413e-4, 9.6953e-4, .0010202, .0010738, .0010976, .0011507,
1720 .0011686, .0012264, .001291, .0013346, .0014246, .0015293,
1721 .0016359, .0017824, .0019255, .0020854, .002247, .0024148,
1722 .0026199, .0027523, .0029704, .0030702, .0033047, .0035013,
1723 .0037576, .0040275, .0043089, .0046927, .0049307, .0053486,
1724 .0053809, .0056699, .0059325, .0055488, .005634, .0056392,
1725 .004946, .0048855, .0048208, .0044386, .0045498, .0046377,
1726 .0048939, .0052396, .0057324, .0060859, .0066906, .0071148,
1727 .0077224, .0082687, .008769, .0084471, .008572, .0087729,
1728 .008775, .0090742, .0080704, .0080288, .0085747, .0086087,
1729 .0086408, .0088752, .0089381, .0089757, .0093532, .0092824,
1730 .0092566, .0092645, .0092735, .009342, .0095806, .0097991,
1731 .010213, .010611, .011129, .011756, .013237, .01412, .015034,
1732 .015936, .01682, .018597, .019315, .019995, .020658, .021289,
1733 .022363, .022996, .023716, .024512, .025434, .026067, .027118,
1734 .028396, .029865, .031442, .033253, .03525, .037296, .039701,
1735 .042356, .045154, .048059, .051294, .054893, .058636, .061407,
1736 .065172, .068974, .072676, .073379, .076547, .079556, .079134,
1737 .082308, .085739, .090192, .09359, .099599, .10669, .11496,
1738 .1244, .13512, .14752, .14494, .15647, .1668, .17863, .19029,
1739 .20124, .20254, .21179, .21982, .21625, .22364, .23405, .23382,
1740 .2434, .25708, .26406, .27621, .28909, .30395, .31717, .33271,
1741 .3496, .36765, .38774, .40949, .446, .46985, .49846, .5287, .562,
1742 .59841, .64598, .68834, .7327, .78978, .8373, .88708, .94744,
1743 1.0006, 1.0574, 1.1215, 1.1856, 1.2546, 1.3292, 1.4107, 1.4974,
1744 1.5913, 1.6931, 1.8028, 1.9212, 2.0492, 2.1874, 2.3365, 2.4978,
1745 2.6718, 2.8588, 3.062, 3.2818, 3.5188, 3.7752, 4.0527, 4.3542,
1746 4.6782, 5.0312, 5.4123, 5.8246, 6.2639, 6.7435, 7.2636, 7.8064,
1747 8.4091, 9.0696, 9.7677, 10.548, 11.4, 12.309, 13.324, 14.284,
1748 15.445, 16.687, 18.019, 19.403, 20.847, 22.366, 23.925, 25.537,
1749 27.213, 28.069, 29.864, 31.829, 33.988, 35.856, 38.829, 42.321,
1750 46.319, 50.606, 55.126, 59.126, 64.162, 68.708, 74.615, 81.176,
1751 87.739, 95.494, 103.83, 113.38, 123.99, 135.8, 148.7, 162.58,
1752 176.32, 192.6, 211.47, 232.7, 252.64, 277.41, 305.38, 333.44,
1753 366.42, 402.66, 442.14, 484.53, 526.42, 568.15, 558.78, 582.6,
1754 600.98, 613.94, 619.44, 618.24, 609.84, 595.96, 484.86, 475.59,
1755 478.49, 501.56, 552.19, 628.44, 630.39, 658.92, 671.96, 562.7,
1756 545.88, 423.43, 400.14, 306.59, 294.13, 246.8, 226.51, 278.21,
1757 314.39, 347.22, 389.13, 433.16, 477.48, 521.67, 560.54, 683.6,
1758 696.37, 695.91, 683.1, 658.24, 634.89, 698.85, 742.87, 796.66,
1759 954.49, 1009.5, 1150.5, 1179.1, 1267.9, 1272.4, 1312.7, 1330.4,
1760 1331.6, 1315.8, 1308.3, 1293.3, 1274.6, 1249.5, 1213.2, 1172.1,
1761 1124.4, 930.33, 893.36, 871.27, 883.54, 940.76, 1036., 1025.6,
1762 1053.1, 914.51, 894.15, 865.03, 670.63, 508.41, 475.15, 370.85,
1763 361.06, 319.38, 312.75, 331.87, 367.13, 415., 467.94, 525.49,
1764 578.41, 624.66, 794.82, 796.97, 780.29, 736.49, 670.18, 603.75,
1765 659.67, 679.8, 857.12, 884.05, 900.65, 1046.1, 1141.9, 1083.,
1766 1089.2, 1e3, 947.08, 872.31, 787.91, 704.75, 624.93, 553.68,
1767 489.91, 434.21, 385.64, 343.3, 306.42, 274.18, 245.94, 221.11,
1768 199.23, 179.88, 162.73, 147.48, 133.88, 121.73, 110.86, 101.1,
1769 92.323, 84.417, 77.281, 70.831, 64.991, 59.694, 54.884, 50.509,
1770 46.526, 42.893, 39.58, 36.549, 33.776, 31.236, 28.907, 26.77,
1771 24.805, 23., 21.339, 19.81, 18.404, 17.105, 15.909, 14.801,
1772 13.778, 12.83, 11.954, 11.142, 10.389, 9.691, 9.0434, 8.4423,
1773 7.8842, 7.3657, 6.8838, 6.4357, 6.0189, 5.6308, 5.2696, 4.9332,
1774 4.6198, 4.3277, 4.0553, 3.8012, 3.5639, 3.3424, 3.1355, 2.9422,
1775 2.7614, 2.5924, 2.4343, 2.2864, 2.148, 2.0184, 1.8971, 1.7835,
1776 1.677, 1.5773, 1.4838, 1.3961, 1.3139, 1.2369, 1.1645, 1.0966,
1777 1.0329, .97309, .91686, .86406, .81439, .76767, .72381, .68252,
1778 .64359, .60695, .57247, .54008, .50957, .48092, .45401, .42862,
1779 .40465, .38202, .36072, .34052, .3216, .30386, .28711, .27135,
1780 .25651, .24252, .2293, .21689, .20517, .19416, .18381, .17396,
1784 static const double co2230[2001] =
1785 { 2.743e-5, 2.8815e-5, 3.027e-5, 3.1798e-5,
1786 3.3405e-5, 3.5094e-5, 3.6869e-5, 3.8734e-5, 4.0694e-5, 4.2754e-5,
1787 4.492e-5, 4.7196e-5, 4.9588e-5, 5.2103e-5, 5.4747e-5, 5.7525e-5,
1788 6.0446e-5, 6.3516e-5, 6.6744e-5, 7.0137e-5, 7.3704e-5, 7.7455e-5,
1789 8.1397e-5, 8.5543e-5, 8.9901e-5, 9.4484e-5, 9.9302e-5, 1.0437e-4,
1790 1.097e-4, 1.153e-4, 1.2119e-4, 1.2738e-4, 1.3389e-4, 1.4074e-4,
1791 1.4795e-4, 1.5552e-4, 1.6349e-4, 1.7187e-4, 1.8068e-4, 1.8995e-4,
1792 1.997e-4, 2.0996e-4, 2.2075e-4, 2.321e-4, 2.4403e-4, 2.5659e-4,
1793 2.698e-4, 2.837e-4, 2.9832e-4, 3.137e-4, 3.2988e-4, 3.4691e-4,
1794 3.6483e-4, 3.8368e-4, 4.0351e-4, 4.2439e-4, 4.4635e-4, 4.6947e-4,
1795 4.9379e-4, 5.1939e-4, 5.4633e-4, 5.7468e-4, 6.0452e-4, 6.3593e-4,
1796 6.69e-4, 7.038e-4, 7.4043e-4, 7.79e-4, 8.1959e-4, 8.6233e-4,
1797 9.0732e-4, 9.5469e-4, .0010046, .0010571, .0011124, .0011706,
1798 .0012319, .0012964, .0013644, .001436, .0015114, .0015908,
1799 .0016745, .0017625, .0018553, .0019531, .002056, .0021645,
1800 .0022788, .0023992, .002526, .0026596, .0028004, .0029488,
1801 .0031052, .0032699, .0034436, .0036265, .0038194, .0040227,
1802 .0042369, .0044628, .0047008, .0049518, .0052164, .0054953,
1803 .0057894, .0060995, .0064265, .0067713, .007135, .0075184,
1804 .0079228, .0083494, .0087993, .0092738, .0097745, .010303,
1805 .01086, .011448, .012068, .012722, .013413, .014142, .014911,
1806 .015723, .01658, .017484, .018439, .019447, .020511, .021635,
1807 .022821, .024074, .025397, .026794, .02827, .029829, .031475,
1808 .033215, .035052, .036994, .039045, .041213, .043504, .045926,
1809 .048485, .05119, .05405, .057074, .060271, .063651, .067225,
1810 .071006, .075004, .079233, .083708, .088441, .093449, .098749,
1811 .10436, .11029, .11657, .12322, .13026, .13772, .14561, .15397,
1812 .16282, .1722, .18214, .19266, .20381, .21563, .22816, .24143,
1813 .2555, .27043, .28625, .30303, .32082, .3397, .35972, .38097,
1814 .40352, .42746, .45286, .47983, .50847, .53888, .57119, .6055,
1815 .64196, .6807, .72187, .76564, .81217, .86165, .91427, .97025,
1816 1.0298, 1.0932, 1.1606, 1.2324, 1.3088, 1.3902, 1.477, 1.5693,
1817 1.6678, 1.7727, 1.8845, 2.0038, 2.131, 2.2666, 2.4114, 2.5659,
1818 2.7309, 2.907, 3.0951, 3.2961, 3.5109, 3.7405, 3.986, 4.2485,
1819 4.5293, 4.8299, 5.1516, 5.4961, 5.8651, 6.2605, 6.6842, 7.1385,
1820 7.6256, 8.1481, 8.7089, 9.3109, 9.9573, 10.652, 11.398, 12.2,
1821 13.063, 13.992, 14.99, 16.064, 17.222, 18.469, 19.813, 21.263,
1822 22.828, 24.516, 26.34, 28.31, 30.437, 32.738, 35.226, 37.914,
1823 40.824, 43.974, 47.377, 51.061, 55.011, 59.299, 63.961, 69.013,
1824 74.492, 80.444, 86.919, 93.836, 101.23, 109.25, 117.98, 127.47,
1825 137.81, 149.07, 161.35, 174.75, 189.42, 205.49, 223.02, 242.26,
1826 263.45, 286.75, 311.94, 340.01, 370.86, 404.92, 440.44, 480.27,
1827 525.17, 574.71, 626.22, 686.8, 754.38, 827.07, 913.38, 1011.7,
1828 1121.5, 1161.6, 1289.5, 1432.2, 1595.4, 1777., 1983.3, 2216.1,
1829 2485.7, 2788.3, 3101.5, 3481., 3902.1, 4257.1, 4740., 5272.8,
1830 5457.9, 5946.2, 6505.3, 6668.4, 7302.4, 8061.6, 9015.8, 9908.3,
1831 11613., 13956., 3249.6, 3243., 2901.5, 2841.3, 2729.6, 2558.2,
1832 1797.8, 1583.2, 1386., 1233.5, 787.74, 701.46, 761.66, 767.21,
1833 722.83, 1180.6, 1332.1, 1461.6, 2032.9, 2166., 2255.9, 2294.7,
1834 2587.2, 2396.5, 2122.4, 12553., 10784., 9832.5, 8827.3, 8029.1,
1835 7377.9, 7347.1, 6783.8, 6239.1, 5721.1, 5503., 4975.1, 4477.8,
1836 4021.3, 3676.8, 3275.3, 2914.9, 2597.4, 2328.2, 2075.4, 1857.6,
1837 1663.6, 1493.3, 1343.8, 1213.3, 1095.6, 1066.5, 958.91, 865.15,
1838 783.31, 714.35, 650.77, 593.98, 546.2, 499.9, 457.87, 421.75,
1839 387.61, 355.25, 326.62, 299.7, 275.21, 253.17, 232.83, 214.31,
1840 197.5, 182.08, 167.98, 155.12, 143.32, 132.5, 122.58, 113.48,
1841 105.11, 97.415, 90.182, 83.463, 77.281, 71.587, 66.341, 61.493,
1842 57.014, 53.062, 49.21, 45.663, 42.38, 39.348, 36.547, 33.967,
1843 31.573, 29.357, 27.314, 25.415, 23.658, 22.03, 20.524, 19.125,
1844 17.829, 16.627, 15.511, 14.476, 13.514, 12.618, 11.786, 11.013,
1845 10.294, 9.6246, 9.0018, 8.4218, 7.8816, 7.3783, 6.9092, 6.4719,
1846 6.0641, 5.6838, 5.3289, 4.998, 4.6893, 4.4014, 4.1325, 3.8813,
1847 3.6469, 3.4283, 3.2241, 3.035, 2.8576, 2.6922, 2.5348, 2.3896,
1848 2.2535, 2.1258, 2.0059, 1.8929, 1.7862, 1.6854, 1.5898, 1.4992,
1849 1.4017, 1.3218, 1.2479, 1.1809, 1.1215, 1.0693, 1.0116, .96016,
1850 .9105, .84859, .80105, .74381, .69982, .65127, .60899, .57843,
1851 .54592, .51792, .49336, .47155, .45201, .43426, .41807, .40303,
1852 .38876, .3863, .37098, .35492, .33801, .32032, .30341, .29874,
1853 .29193, .28689, .29584, .29155, .29826, .29195, .29287, .2904,
1854 .28199, .27709, .27162, .26622, .26133, .25676, .25235, .23137,
1855 .22365, .21519, .20597, .19636, .18699, .16485, .16262, .16643,
1856 .17542, .18198, .18631, .16759, .16338, .13505, .1267, .10053,
1857 .092554, .074093, .062159, .055523, .054849, .05401, .05528,
1858 .058982, .07952, .08647, .093244, .099285, .10393, .10661,
1859 .12072, .11417, .10396, .093265, .089137, .088909, .10902,
1860 .11277, .13625, .13565, .14907, .14167, .1428, .13744, .12768,
1861 .11382, .10244, .091686, .08109, .071739, .063616, .056579,
1862 .050504, .045251, .040689, .036715, .033237, .030181, .027488,
1863 .025107, .022998, .021125, .01946, .017979, .016661, .015489,
1864 .014448, .013526, .012712, .011998, .011375, .010839, .010384,
1865 .010007, .0097053, .0094783, .0093257, .0092489, .0092504,
1866 .0093346, .0095077, .0097676, .01012, .01058, .011157, .011844,
1867 .012672, .013665, .014766, .015999, .017509, .018972, .020444,
1868 .022311, .023742, .0249, .025599, .026981, .026462, .025143,
1869 .025066, .022814, .020458, .020026, .019142, .020189, .022371,
1870 .024163, .023728, .02199, .019506, .018591, .015576, .012784,
1871 .011744, .0094777, .0079148, .0070652, .006986, .0071758,
1872 .008086, .0098025, .01087, .013609, .016764, .018137, .021061,
1873 .023498, .023576, .023965, .022828, .021519, .021283, .023364,
1874 .026457, .029782, .030856, .033486, .035515, .035543, .036558,
1875 .037198, .037472, .037045, .037284, .03777, .038085, .038366,
1876 .038526, .038282, .038915, .037697, .035667, .032941, .031959,
1877 .028692, .025918, .024596, .025592, .027873, .028935, .02984,
1878 .028148, .025305, .021912, .020454, .016732, .013357, .01205,
1879 .009731, .0079881, .0077704, .0074387, .0083895, .0096776,
1880 .010326, .01293, .015955, .019247, .020145, .02267, .024231,
1881 .024184, .022131, .019784, .01955, .01971, .022119, .025116,
1882 .027978, .028107, .029808, .030701, .029164, .028551, .027286,
1883 .024946, .023259, .020982, .019221, .017471, .015643, .014074,
1884 .01261, .011301, .010116, .0090582, .0081036, .0072542, .0065034,
1885 .0058436, .0052571, .0047321, .0042697, .0038607, .0034977,
1886 .0031747, .0028864, .0026284, .002397, .002189, .0020017,
1887 .0018326, .0016798, .0015414, .0014159, .0013019, .0011983,
1888 .0011039, .0010177, 9.391e-4, 8.6717e-4, 8.0131e-4, 7.4093e-4,
1889 6.8553e-4, 6.3464e-4, 5.8787e-4, 5.4487e-4, 5.0533e-4, 4.69e-4,
1890 4.3556e-4, 4.0474e-4, 3.7629e-4, 3.5e-4, 3.2569e-4, 3.032e-4,
1891 2.8239e-4, 2.6314e-4, 2.4535e-4, 2.2891e-4, 2.1374e-4, 1.9975e-4,
1892 1.8685e-4, 1.7498e-4, 1.6406e-4, 1.5401e-4, 1.4479e-4, 1.3633e-4,
1893 1.2858e-4, 1.2148e-4, 1.1499e-4, 1.0907e-4, 1.0369e-4, 9.8791e-5,
1894 9.4359e-5, 9.0359e-5, 8.6766e-5, 8.3555e-5, 8.0703e-5, 7.8192e-5,
1895 7.6003e-5, 7.4119e-5, 7.2528e-5, 7.1216e-5, 7.0171e-5, 6.9385e-5,
1896 6.8848e-5, 6.8554e-5, 6.8496e-5, 6.8669e-5, 6.9069e-5, 6.9694e-5,
1897 7.054e-5, 7.1608e-5, 7.2896e-5, 7.4406e-5, 7.6139e-5, 7.8097e-5,
1898 8.0283e-5, 8.2702e-5, 8.5357e-5, 8.8255e-5, 9.1402e-5, 9.4806e-5,
1899 9.8473e-5, 1.0241e-4, 1.0664e-4, 1.1115e-4, 1.1598e-4, 1.2112e-4,
1900 1.2659e-4, 1.3241e-4, 1.3859e-4, 1.4515e-4, 1.521e-4, 1.5947e-4,
1901 1.6728e-4, 1.7555e-4, 1.8429e-4, 1.9355e-4, 2.0334e-4, 2.1369e-4,
1902 2.2463e-4, 2.3619e-4, 2.4841e-4, 2.6132e-4, 2.7497e-4, 2.8938e-4,
1903 3.0462e-4, 3.2071e-4, 3.3771e-4, 3.5567e-4, 3.7465e-4, 3.947e-4,
1904 4.1588e-4, 4.3828e-4, 4.6194e-4, 4.8695e-4, 5.1338e-4, 5.4133e-4,
1905 5.7087e-4, 6.0211e-4, 6.3515e-4, 6.701e-4, 7.0706e-4, 7.4617e-4,
1906 7.8756e-4, 8.3136e-4, 8.7772e-4, 9.2681e-4, 9.788e-4, .0010339,
1907 .0010922, .001154, .0012195, .0012889, .0013626, .0014407,
1908 .0015235, .0016114, .0017048, .0018038, .001909, .0020207,
1909 .0021395, .0022657, .0023998, .0025426, .0026944, .002856,
1910 .0030281, .0032114, .0034068, .003615, .0038371, .004074,
1911 .004327, .0045971, .0048857, .0051942, .0055239, .0058766,
1912 .0062538, .0066573, .0070891, .007551, .0080455, .0085747,
1913 .0091412, .0097481, .010397, .011092, .011837, .012638, .013495,
1914 .014415, .01541, .016475, .017621, .018857, .020175, .02162,
1915 .023185, .024876, .02672, .028732, .030916, .033319, .035939,
1916 .038736, .041847, .04524, .048715, .052678, .056977, .061203,
1917 .066184, .07164, .076952, .083477, .090674, .098049, .10697,
1918 .1169, .1277, .14011, .15323, .1684, .18601, .20626, .22831,
1919 .25417, .28407, .31405, .34957, .38823, .41923, .46026, .50409,
1920 .51227, .54805, .57976, .53818, .55056, .557, .46741, .46403,
1921 .4636, .42265, .45166, .49852, .56663, .34306, .17779, .17697,
1922 .18346, .19129, .20014, .21778, .23604, .25649, .28676, .31238,
1923 .33856, .39998, .4288, .46568, .56654, .60786, .64473, .76466,
1924 .7897, .80778, .86443, .85736, .84798, .84157, 1.1385, 1.2446,
1925 1.1923, 1.1552, 1.1338, 1.1266, 1.1292, 1.1431, 1.1683, 1.2059,
1926 1.2521, 1.3069, 1.3712, 1.4471, 1.5275, 1.6165, 1.7145, 1.8189,
1927 1.9359, 2.065, 2.2007, 2.3591, 2.5362, 2.7346, 2.9515, 3.2021,
1928 3.4851, 3.7935, 4.0694, 4.4463, 4.807, 5.2443, 5.7178, 6.2231,
1929 6.4796, 6.9461, 7.4099, 7.3652, 7.7182, 8.048, 7.7373, 8.0363,
1930 8.3855, 8.8044, 9.0257, 9.8574, 10.948, 10.563, 6.8979, 7.0744,
1931 7.4121, 7.7663, 8.1768, 8.6243, 9.1437, 9.7847, 10.182, 10.849,
1932 11.572, 12.602, 13.482, 14.431, 15.907, 16.983, 18.11, 19.884,
1933 21.02, 22.18, 23.355, 24.848, 25.954, 27.13, 30.186, 34.893,
1934 35.682, 36.755, 38.111, 39.703, 41.58, 43.606, 45.868, 48.573,
1935 51.298, 54.291, 57.559, 61.116, 64.964, 69.124, 73.628, 78.471,
1936 83.683, 89.307, 95.341, 101.84, 108.83, 116.36, 124.46, 133.18,
1937 142.57, 152.79, 163.69, 175.43, 188.11, 201.79, 216.55, 232.51,
1938 249.74, 268.38, 288.54, 310.35, 333.97, 359.55, 387.26, 417.3,
1939 449.88, 485.2, 523.54, 565.14, 610.28, 659.31, 712.56, 770.43,
1940 833.36, 901.82, 976.36, 1057.6, 1146.8, 1243.8, 1350., 1466.3,
1941 1593.6, 1732.7, 1884.1, 2049.1, 2228.2, 2421.9, 2629.4, 2853.7,
1942 3094.4, 3351.1, 3622.3, 3829.8, 4123.1, 4438.3, 4777.2, 5144.1,
1943 5545.4, 5990.5, 6404.5, 6996.8, 7687.6, 8482.9, 9349.4, 10203.,
1944 11223., 12358., 13493., 14916., 16416., 18236., 20222., 22501.,
1945 25102., 28358., 31707., 35404., 39538., 43911., 48391., 53193.,
1946 58028., 58082., 61276., 64193., 66294., 67480., 67921., 67423.,
1947 66254., 64341., 51737., 51420., 53072., 58145., 66195., 65358.,
1948 67377., 67869., 53509., 50553., 35737., 32425., 21704., 19974.,
1949 14457., 12142., 16798., 19489., 23049., 27270., 31910., 36457.,
1950 40877., 44748., 47876., 59793., 58626., 55454., 50337., 44893.,
1951 50228., 52216., 54747., 69541., 70455., 81014., 77694., 80533.,
1952 73953., 70927., 65539., 59002., 52281., 45953., 40292., 35360.,
1953 31124., 27478., 24346., 21647., 19308., 17271., 15491., 13927.,
1954 12550., 11331., 10250., 9288.8, 8431.4, 7664.9, 6978.3, 6361.8,
1955 5807.4, 5307.7, 4856.8, 4449., 4079.8, 3744.9, 3440.8, 3164.2,
1956 2912.3, 2682.7, 2473., 2281.4, 2106., 1945.3, 1797.9, 1662.5,
1957 1538.1, 1423.6, 1318.1, 1221., 1131.5, 1049., 972.99, 902.87,
1958 838.01, 777.95, 722.2, 670.44, 622.35, 577.68, 536.21, 497.76,
1959 462.12, 429.13, 398.61, 370.39, 344.29, 320.16, 297.85, 277.2,
1960 258.08, 240.38, 223.97, 208.77, 194.66, 181.58, 169.43, 158.15,
1961 147.67, 137.92, 128.86, 120.44, 112.6, 105.3, 98.499, 92.166,
1962 86.264, 80.763, 75.632, 70.846, 66.381, 62.213, 58.321, 54.685,
1963 51.288, 48.114, 45.145, 42.368, 39.772, 37.341, 35.065, 32.937,
1964 30.943, 29.077, 27.33, 25.693, 24.158, 22.717, 21.367, 20.099,
1965 18.909, 17.792, 16.744, 15.761, 14.838, 13.971, 13.157, 12.393,
1966 11.676, 11.003, 10.369, 9.775, 9.2165, 8.6902, 8.1963, 7.7314,
1967 7.2923, 6.8794, 6.4898, 6.122, 5.7764, 5.4525, 5.1484, 4.8611,
1968 4.5918, 4.3379, 4.0982, 3.8716, 3.6567, 3.4545, 3.2634, 3.0828,
1969 2.9122, 2.7512, 2.5993, 2.4561, 2.3211, 2.1938, 2.0737, 1.9603,
1970 1.8534, 1.7525, 1.6572, 1.5673, 1.4824, 1.4022, 1.3265, 1.2551,
1971 1.1876, 1.1239, 1.0637, 1.0069, .9532, .90248, .85454, .80921,
1972 .76631, .72569, .6872, .65072, .61635, .5836, .55261, .52336,
1973 .49581, .46998, .44559, .42236, .40036, .37929, .35924, .34043,
1974 .32238, .30547, .28931, .27405, .25975, .24616, .23341, .22133,
1975 .20997, .19924, .18917, .17967, .17075, .16211, .15411, .14646,
1976 .13912, .13201, .12509, .11857, .11261, .10698, .10186, .097039,
1977 .092236, .087844, .083443, .07938, .075452, .071564, .067931,
1978 .064389, .061078, .057901, .054921, .052061, .049364, .046789,
1979 .04435, .042044, .039866, .037808, .035863, .034023, .032282,
1980 .030634, .029073, .027595, .026194, .024866, .023608, .022415,
1981 .021283, .02021, .019193, .018228, .017312, .016443, .015619,
1982 .014837, .014094, .01339, .012721, .012086, .011483, .010911,
1983 .010368, .009852, .0093623, .0088972, .0084556, .0080362,
1984 .0076379, .0072596, .0069003, .006559, .0062349, .0059269,
1985 .0056344, .0053565, .0050925, .0048417, .0046034, .004377,
1986 .0041618, .0039575, .0037633, .0035788, .0034034, .0032368,
1987 .0030785, .002928, .0027851, .0026492, .0025201, .0023975,
1988 .0022809, .0021701, .0020649, .0019649, .0018699, .0017796,
1989 .0016938, .0016122, .0015348, .0014612, .0013913, .001325,
1990 .0012619, .0012021, .0011452, .0010913, .0010401, 9.9149e-4,
1991 9.454e-4, 9.0169e-4, 8.6024e-4, 8.2097e-4, 7.8377e-4, 7.4854e-4,
1992 7.1522e-4, 6.8371e-4, 6.5393e-4, 6.2582e-4, 5.9932e-4, 5.7435e-4,
1993 5.5087e-4, 5.2882e-4, 5.0814e-4, 4.8881e-4, 4.7076e-4, 4.5398e-4,
1994 4.3843e-4, 4.2407e-4, 4.109e-4, 3.9888e-4, 3.88e-4, 3.7826e-4,
1995 3.6963e-4, 3.6213e-4, 3.5575e-4, 3.505e-4, 3.464e-4, 3.4346e-4,
1996 3.4173e-4, 3.4125e-4, 3.4206e-4, 3.4424e-4, 3.4787e-4, 3.5303e-4,
1997 3.5986e-4, 3.6847e-4, 3.7903e-4, 3.9174e-4, 4.0681e-4, 4.2455e-4,
1998 4.4527e-4, 4.6942e-4, 4.9637e-4, 5.2698e-4, 5.5808e-4, 5.9514e-4,
1999 6.2757e-4, 6.689e-4, 7.1298e-4, 7.3955e-4, 7.8403e-4, 8.0449e-4,
2000 8.5131e-4, 9.0256e-4, 9.3692e-4, .0010051, .0010846, .0011678,
2001 .001282, .0014016, .0015355, .0016764, .0018272, .0020055,
2002 .0021455, .0023421, .0024615, .0026786, .0028787, .0031259,
2003 .0034046, .0036985, .0040917, .0043902, .0048349, .0049531,
2004 .0052989, .0056148, .0052452, .0053357, .005333, .0045069,
2005 .0043851, .004253, .003738, .0038084, .0039013, .0041505,
2006 .0045372, .0050569, .0054507, .0061267, .0066122, .0072449,
2007 .0078012, .0082651, .0076538, .0076573, .0076806, .0075227,
2008 .0076269, .0063758, .006254, .0067749, .0067909, .0068231,
2009 .0072143, .0072762, .0072954, .007679, .0075107, .0073658,
2010 .0072441, .0071074, .0070378, .007176, .0072472, .0075844,
2011 .0079291, .008412, .0090165, .010688, .011535, .012375, .013166,
2012 .013895, .015567, .016011, .016392, .016737, .017043, .017731,
2013 .018031, .018419, .018877, .019474, .019868, .020604, .021538,
2014 .022653, .023869, .025288, .026879, .028547, .030524, .03274,
2015 .035132, .03769, .040567, .043793, .047188, .049962, .053542,
2016 .057205, .060776, .061489, .064419, .067124, .065945, .068487,
2017 .071209, .074783, .077039, .082444, .08902, .09692, .10617,
2018 .11687, .12952, .12362, .13498, .14412, .15492, .16519, .1744,
2019 .17096, .17714, .18208, .17363, .17813, .18564, .18295, .19045,
2020 .20252, .20815, .21844, .22929, .24229, .25321, .26588, .2797,
2021 .29465, .31136, .32961, .36529, .38486, .41027, .43694, .4667,
2022 .49943, .54542, .58348, .62303, .67633, .71755, .76054, .81371,
2023 .85934, .90841, .96438, 1.0207, 1.0821, 1.1491, 1.2226, 1.3018,
2024 1.388, 1.4818, 1.5835, 1.6939, 1.8137, 1.9435, 2.0843, 2.237,
2025 2.4026, 2.5818, 2.7767, 2.9885, 3.2182, 3.4679, 3.7391, 4.0349,
2026 4.3554, 4.7053, 5.0849, 5.4986, 5.9436, 6.4294, 6.9598, 7.5203,
2027 8.143, 8.8253, 9.5568, 10.371, 11.267, 12.233, 13.31, 14.357,
2028 15.598, 16.93, 18.358, 19.849, 21.408, 23.04, 24.706, 26.409,
2029 28.153, 28.795, 30.549, 32.43, 34.49, 36.027, 38.955, 42.465,
2030 46.565, 50.875, 55.378, 59.002, 63.882, 67.949, 73.693, 80.095,
2031 86.403, 94.264, 102.65, 112.37, 123.3, 135.54, 149.14, 163.83,
2032 179.17, 196.89, 217.91, 240.94, 264.13, 292.39, 324.83, 358.21,
2033 397.16, 440.5, 488.6, 541.04, 595.3, 650.43, 652.03, 688.74,
2034 719.47, 743.54, 757.68, 762.35, 756.43, 741.42, 595.43, 580.97,
2035 580.83, 605.68, 667.88, 764.49, 759.93, 789.12, 798.17, 645.66,
2036 615.65, 455.05, 421.09, 306.45, 289.14, 235.7, 215.52, 274.57,
2037 316.53, 357.73, 409.89, 465.06, 521.84, 579.02, 630.64, 794.46,
2038 813., 813.56, 796.25, 761.57, 727.97, 812.14, 866.75, 932.5,
2039 1132.8, 1194.8, 1362.2, 1387.2, 1482.3, 1479.7, 1517.9, 1533.1,
2040 1534.2, 1523.3, 1522.5, 1515.5, 1505.2, 1486.5, 1454., 1412.,
2041 1358.8, 1107.8, 1060.9, 1033.5, 1048.2, 1122.4, 1248.9, 1227.1,
2042 1255.4, 1058.9, 1020.7, 970.59, 715.24, 512.56, 468.47, 349.3,
2043 338.26, 299.22, 301.26, 332.38, 382.08, 445.49, 515.87, 590.85,
2044 662.3, 726.05, 955.59, 964.11, 945.17, 891.48, 807.11, 720.9,
2045 803.36, 834.46, 1073.9, 1107.1, 1123.6, 1296., 1393.7, 1303.1,
2046 1284.3, 1161.8, 1078.8, 976.13, 868.72, 767.4, 674.72, 593.73,
2047 523.12, 462.24, 409.75, 364.34, 325., 290.73, 260.76, 234.46,
2048 211.28, 190.78, 172.61, 156.44, 142.01, 129.12, 117.57, 107.2,
2049 97.877, 89.47, 81.882, 75.021, 68.807, 63.171, 58.052, 53.396,
2050 49.155, 45.288, 41.759, 38.531, 35.576, 32.868, 30.384, 28.102,
2051 26.003, 24.071, 22.293, 20.655, 19.147, 17.756, 16.476, 15.292,
2052 14.198, 13.183, 12.241, 11.367, 10.554, 9.7989, 9.0978, 8.4475,
2053 7.845, 7.2868, 6.7704, 6.2927, 5.8508, 5.4421, 5.064, 4.714,
2054 4.3902, 4.0902, 3.8121, 3.5543, 3.315, 3.093, 2.8869, 2.6953,
2055 2.5172, 2.3517, 2.1977, 2.0544, 1.9211, 1.7969, 1.6812, 1.5735,
2056 1.4731, 1.3794, 1.2921, 1.2107, 1.1346, 1.0637, .99744, .93554,
2057 .87771, .82368, .77313, .72587, .6816, .64014, .60134, .565,
2058 .53086, .49883, .46881, .44074, .4144, .38979, .36679, .34513,
2059 .32474, .30552, .28751, .27045, .25458, .23976, .22584, .21278,
2060 .20051, .18899, .17815, .16801, .15846, .14954, .14117, .13328,
2065 const double xw = nu / 2 + 1;
2066 if (xw >= 1 && xw < 2001) {
2067 const int iw = (int) xw;
2068 const double dw = xw - iw;
2069 const double ew = 1 - dw;
2070 const double cw296 = ew * co2296[iw - 1] + dw * co2296[iw];
2071 const double cw260 = ew * co2260[iw - 1] + dw * co2260[iw];
2072 const double cw230 = ew * co2230[iw - 1] + dw * co2230[iw];
2073 const double dt230 = t - 230;
2074 const double dt260 = t - 260;
2075 const double dt296 = t - 296;
2077 dt260 * 5.050505e-4 * dt296 * cw230 -
2078 dt230 * 9.259259e-4 * dt296 * cw260 +
2079 dt230 * 4.208754e-4 * dt260 * cw296;
2080 return u /
NA / 1000 * p /
P0 * ctw;
2094 static const double h2o296[2001] =
2095 { .17, .1695, .172, .168, .1687, .1624, .1606,
2096 .1508, .1447, .1344, .1214, .1133, .1009, .09217, .08297, .06989,
2097 .06513, .05469, .05056, .04417, .03779, .03484, .02994, .0272,
2098 .02325, .02063, .01818, .01592, .01405, .01251, .0108, .009647,
2099 .008424, .007519, .006555, .00588, .005136, .004511, .003989,
2100 .003509, .003114, .00274, .002446, .002144, .001895, .001676,
2101 .001486, .001312, .001164, .001031, 9.129e-4, 8.106e-4, 7.213e-4,
2102 6.4e-4, 5.687e-4, 5.063e-4, 4.511e-4, 4.029e-4, 3.596e-4,
2103 3.22e-4, 2.889e-4, 2.597e-4, 2.337e-4, 2.108e-4, 1.907e-4,
2104 1.728e-4, 1.57e-4, 1.43e-4, 1.305e-4, 1.195e-4, 1.097e-4,
2105 1.009e-4, 9.307e-5, 8.604e-5, 7.971e-5, 7.407e-5, 6.896e-5,
2106 6.433e-5, 6.013e-5, 5.631e-5, 5.283e-5, 4.963e-5, 4.669e-5,
2107 4.398e-5, 4.148e-5, 3.917e-5, 3.702e-5, 3.502e-5, 3.316e-5,
2108 3.142e-5, 2.978e-5, 2.825e-5, 2.681e-5, 2.546e-5, 2.419e-5,
2109 2.299e-5, 2.186e-5, 2.079e-5, 1.979e-5, 1.884e-5, 1.795e-5,
2110 1.711e-5, 1.633e-5, 1.559e-5, 1.49e-5, 1.426e-5, 1.367e-5,
2111 1.312e-5, 1.263e-5, 1.218e-5, 1.178e-5, 1.143e-5, 1.112e-5,
2112 1.088e-5, 1.07e-5, 1.057e-5, 1.05e-5, 1.051e-5, 1.059e-5,
2113 1.076e-5, 1.1e-5, 1.133e-5, 1.18e-5, 1.237e-5, 1.308e-5,
2114 1.393e-5, 1.483e-5, 1.614e-5, 1.758e-5, 1.93e-5, 2.123e-5,
2115 2.346e-5, 2.647e-5, 2.93e-5, 3.279e-5, 3.745e-5, 4.152e-5,
2116 4.813e-5, 5.477e-5, 6.203e-5, 7.331e-5, 8.056e-5, 9.882e-5,
2117 1.05e-4, 1.21e-4, 1.341e-4, 1.572e-4, 1.698e-4, 1.968e-4,
2118 2.175e-4, 2.431e-4, 2.735e-4, 2.867e-4, 3.19e-4, 3.371e-4,
2119 3.554e-4, 3.726e-4, 3.837e-4, 3.878e-4, 3.864e-4, 3.858e-4,
2120 3.841e-4, 3.852e-4, 3.815e-4, 3.762e-4, 3.618e-4, 3.579e-4,
2121 3.45e-4, 3.202e-4, 3.018e-4, 2.785e-4, 2.602e-4, 2.416e-4,
2122 2.097e-4, 1.939e-4, 1.689e-4, 1.498e-4, 1.308e-4, 1.17e-4,
2123 1.011e-4, 9.237e-5, 7.909e-5, 7.006e-5, 6.112e-5, 5.401e-5,
2124 4.914e-5, 4.266e-5, 3.963e-5, 3.316e-5, 3.037e-5, 2.598e-5,
2125 2.294e-5, 2.066e-5, 1.813e-5, 1.583e-5, 1.423e-5, 1.247e-5,
2126 1.116e-5, 9.76e-6, 8.596e-6, 7.72e-6, 6.825e-6, 6.108e-6,
2127 5.366e-6, 4.733e-6, 4.229e-6, 3.731e-6, 3.346e-6, 2.972e-6,
2128 2.628e-6, 2.356e-6, 2.102e-6, 1.878e-6, 1.678e-6, 1.507e-6,
2129 1.348e-6, 1.21e-6, 1.089e-6, 9.806e-7, 8.857e-7, 8.004e-7,
2130 7.261e-7, 6.599e-7, 6.005e-7, 5.479e-7, 5.011e-7, 4.595e-7,
2131 4.219e-7, 3.885e-7, 3.583e-7, 3.314e-7, 3.071e-7, 2.852e-7,
2132 2.654e-7, 2.474e-7, 2.311e-7, 2.162e-7, 2.026e-7, 1.902e-7,
2133 1.788e-7, 1.683e-7, 1.587e-7, 1.497e-7, 1.415e-7, 1.338e-7,
2134 1.266e-7, 1.2e-7, 1.138e-7, 1.08e-7, 1.027e-7, 9.764e-8,
2135 9.296e-8, 8.862e-8, 8.458e-8, 8.087e-8, 7.744e-8, 7.429e-8,
2136 7.145e-8, 6.893e-8, 6.664e-8, 6.468e-8, 6.322e-8, 6.162e-8,
2137 6.07e-8, 5.992e-8, 5.913e-8, 5.841e-8, 5.796e-8, 5.757e-8,
2138 5.746e-8, 5.731e-8, 5.679e-8, 5.577e-8, 5.671e-8, 5.656e-8,
2139 5.594e-8, 5.593e-8, 5.602e-8, 5.62e-8, 5.693e-8, 5.725e-8,
2140 5.858e-8, 6.037e-8, 6.249e-8, 6.535e-8, 6.899e-8, 7.356e-8,
2141 7.918e-8, 8.618e-8, 9.385e-8, 1.039e-7, 1.158e-7, 1.29e-7,
2142 1.437e-7, 1.65e-7, 1.871e-7, 2.121e-7, 2.427e-7, 2.773e-7,
2143 3.247e-7, 3.677e-7, 4.037e-7, 4.776e-7, 5.101e-7, 6.214e-7,
2144 6.936e-7, 7.581e-7, 8.486e-7, 9.355e-7, 9.942e-7, 1.063e-6,
2145 1.123e-6, 1.191e-6, 1.215e-6, 1.247e-6, 1.26e-6, 1.271e-6,
2146 1.284e-6, 1.317e-6, 1.323e-6, 1.349e-6, 1.353e-6, 1.362e-6,
2147 1.344e-6, 1.329e-6, 1.336e-6, 1.327e-6, 1.325e-6, 1.359e-6,
2148 1.374e-6, 1.415e-6, 1.462e-6, 1.526e-6, 1.619e-6, 1.735e-6,
2149 1.863e-6, 2.034e-6, 2.265e-6, 2.482e-6, 2.756e-6, 3.103e-6,
2150 3.466e-6, 3.832e-6, 4.378e-6, 4.913e-6, 5.651e-6, 6.311e-6,
2151 7.169e-6, 8.057e-6, 9.253e-6, 1.047e-5, 1.212e-5, 1.36e-5,
2152 1.569e-5, 1.776e-5, 2.02e-5, 2.281e-5, 2.683e-5, 2.994e-5,
2153 3.488e-5, 3.896e-5, 4.499e-5, 5.175e-5, 6.035e-5, 6.34e-5,
2154 7.281e-5, 7.923e-5, 8.348e-5, 9.631e-5, 1.044e-4, 1.102e-4,
2155 1.176e-4, 1.244e-4, 1.283e-4, 1.326e-4, 1.4e-4, 1.395e-4,
2156 1.387e-4, 1.363e-4, 1.314e-4, 1.241e-4, 1.228e-4, 1.148e-4,
2157 1.086e-4, 1.018e-4, 8.89e-5, 8.316e-5, 7.292e-5, 6.452e-5,
2158 5.625e-5, 5.045e-5, 4.38e-5, 3.762e-5, 3.29e-5, 2.836e-5,
2159 2.485e-5, 2.168e-5, 1.895e-5, 1.659e-5, 1.453e-5, 1.282e-5,
2160 1.132e-5, 1.001e-5, 8.836e-6, 7.804e-6, 6.922e-6, 6.116e-6,
2161 5.429e-6, 4.824e-6, 4.278e-6, 3.788e-6, 3.371e-6, 2.985e-6,
2162 2.649e-6, 2.357e-6, 2.09e-6, 1.858e-6, 1.647e-6, 1.462e-6,
2163 1.299e-6, 1.155e-6, 1.028e-6, 9.142e-7, 8.132e-7, 7.246e-7,
2164 6.451e-7, 5.764e-7, 5.151e-7, 4.603e-7, 4.121e-7, 3.694e-7,
2165 3.318e-7, 2.985e-7, 2.69e-7, 2.428e-7, 2.197e-7, 1.992e-7,
2166 1.81e-7, 1.649e-7, 1.506e-7, 1.378e-7, 1.265e-7, 1.163e-7,
2167 1.073e-7, 9.918e-8, 9.191e-8, 8.538e-8, 7.949e-8, 7.419e-8,
2168 6.94e-8, 6.508e-8, 6.114e-8, 5.761e-8, 5.437e-8, 5.146e-8,
2169 4.89e-8, 4.636e-8, 4.406e-8, 4.201e-8, 4.015e-8, 3.84e-8,
2170 3.661e-8, 3.51e-8, 3.377e-8, 3.242e-8, 3.13e-8, 3.015e-8,
2171 2.918e-8, 2.83e-8, 2.758e-8, 2.707e-8, 2.656e-8, 2.619e-8,
2172 2.609e-8, 2.615e-8, 2.63e-8, 2.675e-8, 2.745e-8, 2.842e-8,
2173 2.966e-8, 3.125e-8, 3.318e-8, 3.565e-8, 3.85e-8, 4.191e-8,
2174 4.59e-8, 5.059e-8, 5.607e-8, 6.239e-8, 6.958e-8, 7.796e-8,
2175 8.773e-8, 9.88e-8, 1.114e-7, 1.258e-7, 1.422e-7, 1.61e-7,
2176 1.822e-7, 2.06e-7, 2.337e-7, 2.645e-7, 2.996e-7, 3.393e-7,
2177 3.843e-7, 4.363e-7, 4.935e-7, 5.607e-7, 6.363e-7, 7.242e-7,
2178 8.23e-7, 9.411e-7, 1.071e-6, 1.232e-6, 1.402e-6, 1.6e-6, 1.82e-6,
2179 2.128e-6, 2.386e-6, 2.781e-6, 3.242e-6, 3.653e-6, 4.323e-6,
2180 4.747e-6, 5.321e-6, 5.919e-6, 6.681e-6, 7.101e-6, 7.983e-6,
2181 8.342e-6, 8.741e-6, 9.431e-6, 9.952e-6, 1.026e-5, 1.055e-5,
2182 1.095e-5, 1.095e-5, 1.087e-5, 1.056e-5, 1.026e-5, 9.715e-6,
2183 9.252e-6, 8.452e-6, 7.958e-6, 7.268e-6, 6.295e-6, 6.003e-6, 5e-6,
2184 4.591e-6, 3.983e-6, 3.479e-6, 3.058e-6, 2.667e-6, 2.293e-6,
2185 1.995e-6, 1.747e-6, 1.517e-6, 1.335e-6, 1.165e-6, 1.028e-6,
2186 9.007e-7, 7.956e-7, 7.015e-7, 6.192e-7, 5.491e-7, 4.859e-7,
2187 4.297e-7, 3.799e-7, 3.38e-7, 3.002e-7, 2.659e-7, 2.366e-7,
2188 2.103e-7, 1.861e-7, 1.655e-7, 1.469e-7, 1.309e-7, 1.162e-7,
2189 1.032e-7, 9.198e-8, 8.181e-8, 7.294e-8, 6.516e-8, 5.787e-8,
2190 5.163e-8, 4.612e-8, 4.119e-8, 3.695e-8, 3.308e-8, 2.976e-8,
2191 2.67e-8, 2.407e-8, 2.171e-8, 1.965e-8, 1.78e-8, 1.617e-8,
2192 1.47e-8, 1.341e-8, 1.227e-8, 1.125e-8, 1.033e-8, 9.524e-9,
2193 8.797e-9, 8.162e-9, 7.565e-9, 7.04e-9, 6.56e-9, 6.129e-9,
2194 5.733e-9, 5.376e-9, 5.043e-9, 4.75e-9, 4.466e-9, 4.211e-9,
2195 3.977e-9, 3.759e-9, 3.558e-9, 3.373e-9, 3.201e-9, 3.043e-9,
2196 2.895e-9, 2.76e-9, 2.635e-9, 2.518e-9, 2.411e-9, 2.314e-9,
2197 2.23e-9, 2.151e-9, 2.087e-9, 2.035e-9, 1.988e-9, 1.946e-9,
2198 1.927e-9, 1.916e-9, 1.916e-9, 1.933e-9, 1.966e-9, 2.018e-9,
2199 2.09e-9, 2.182e-9, 2.299e-9, 2.442e-9, 2.623e-9, 2.832e-9,
2200 3.079e-9, 3.368e-9, 3.714e-9, 4.104e-9, 4.567e-9, 5.091e-9,
2201 5.701e-9, 6.398e-9, 7.194e-9, 8.127e-9, 9.141e-9, 1.035e-8,
2202 1.177e-8, 1.338e-8, 1.508e-8, 1.711e-8, 1.955e-8, 2.216e-8,
2203 2.534e-8, 2.871e-8, 3.291e-8, 3.711e-8, 4.285e-8, 4.868e-8,
2204 5.509e-8, 6.276e-8, 7.262e-8, 8.252e-8, 9.4e-8, 1.064e-7,
2205 1.247e-7, 1.411e-7, 1.626e-7, 1.827e-7, 2.044e-7, 2.284e-7,
2206 2.452e-7, 2.854e-7, 3.026e-7, 3.278e-7, 3.474e-7, 3.693e-7,
2207 3.93e-7, 4.104e-7, 4.22e-7, 4.439e-7, 4.545e-7, 4.778e-7,
2208 4.812e-7, 5.018e-7, 4.899e-7, 5.075e-7, 5.073e-7, 5.171e-7,
2209 5.131e-7, 5.25e-7, 5.617e-7, 5.846e-7, 6.239e-7, 6.696e-7,
2210 7.398e-7, 8.073e-7, 9.15e-7, 1.009e-6, 1.116e-6, 1.264e-6,
2211 1.439e-6, 1.644e-6, 1.856e-6, 2.147e-6, 2.317e-6, 2.713e-6,
2212 2.882e-6, 2.99e-6, 3.489e-6, 3.581e-6, 4.033e-6, 4.26e-6,
2213 4.543e-6, 4.84e-6, 4.826e-6, 5.013e-6, 5.252e-6, 5.277e-6,
2214 5.306e-6, 5.236e-6, 5.123e-6, 5.171e-6, 4.843e-6, 4.615e-6,
2215 4.385e-6, 3.97e-6, 3.693e-6, 3.231e-6, 2.915e-6, 2.495e-6,
2216 2.144e-6, 1.91e-6, 1.639e-6, 1.417e-6, 1.226e-6, 1.065e-6,
2217 9.29e-7, 8.142e-7, 7.161e-7, 6.318e-7, 5.581e-7, 4.943e-7,
2218 4.376e-7, 3.884e-7, 3.449e-7, 3.06e-7, 2.712e-7, 2.412e-7,
2219 2.139e-7, 1.903e-7, 1.689e-7, 1.499e-7, 1.331e-7, 1.183e-7,
2220 1.05e-7, 9.362e-8, 8.306e-8, 7.403e-8, 6.578e-8, 5.853e-8,
2221 5.216e-8, 4.632e-8, 4.127e-8, 3.678e-8, 3.279e-8, 2.923e-8,
2222 2.612e-8, 2.339e-8, 2.094e-8, 1.877e-8, 1.686e-8, 1.516e-8,
2223 1.366e-8, 1.234e-8, 1.114e-8, 1.012e-8, 9.182e-9, 8.362e-9,
2224 7.634e-9, 6.981e-9, 6.406e-9, 5.888e-9, 5.428e-9, 5.021e-9,
2225 4.65e-9, 4.326e-9, 4.033e-9, 3.77e-9, 3.536e-9, 3.327e-9,
2226 3.141e-9, 2.974e-9, 2.825e-9, 2.697e-9, 2.584e-9, 2.488e-9,
2227 2.406e-9, 2.34e-9, 2.292e-9, 2.259e-9, 2.244e-9, 2.243e-9,
2228 2.272e-9, 2.31e-9, 2.378e-9, 2.454e-9, 2.618e-9, 2.672e-9,
2229 2.831e-9, 3.05e-9, 3.225e-9, 3.425e-9, 3.677e-9, 3.968e-9,
2230 4.221e-9, 4.639e-9, 4.96e-9, 5.359e-9, 5.649e-9, 6.23e-9,
2231 6.716e-9, 7.218e-9, 7.746e-9, 7.988e-9, 8.627e-9, 8.999e-9,
2232 9.442e-9, 9.82e-9, 1.015e-8, 1.06e-8, 1.079e-8, 1.109e-8,
2233 1.137e-8, 1.186e-8, 1.18e-8, 1.187e-8, 1.194e-8, 1.192e-8,
2234 1.224e-8, 1.245e-8, 1.246e-8, 1.318e-8, 1.377e-8, 1.471e-8,
2235 1.582e-8, 1.713e-8, 1.853e-8, 2.063e-8, 2.27e-8, 2.567e-8,
2236 2.891e-8, 3.264e-8, 3.744e-8, 4.286e-8, 4.915e-8, 5.623e-8,
2237 6.336e-8, 7.293e-8, 8.309e-8, 9.319e-8, 1.091e-7, 1.243e-7,
2238 1.348e-7, 1.449e-7, 1.62e-7, 1.846e-7, 1.937e-7, 2.04e-7,
2239 2.179e-7, 2.298e-7, 2.433e-7, 2.439e-7, 2.464e-7, 2.611e-7,
2240 2.617e-7, 2.582e-7, 2.453e-7, 2.401e-7, 2.349e-7, 2.203e-7,
2241 2.066e-7, 1.939e-7, 1.78e-7, 1.558e-7, 1.391e-7, 1.203e-7,
2242 1.048e-7, 9.464e-8, 8.306e-8, 7.239e-8, 6.317e-8, 5.52e-8,
2243 4.847e-8, 4.282e-8, 3.796e-8, 3.377e-8, 2.996e-8, 2.678e-8,
2244 2.4e-8, 2.134e-8, 1.904e-8, 1.705e-8, 1.523e-8, 1.35e-8,
2245 1.204e-8, 1.07e-8, 9.408e-9, 8.476e-9, 7.47e-9, 6.679e-9,
2246 5.929e-9, 5.267e-9, 4.711e-9, 4.172e-9, 3.761e-9, 3.288e-9,
2247 2.929e-9, 2.609e-9, 2.315e-9, 2.042e-9, 1.844e-9, 1.64e-9,
2248 1.47e-9, 1.31e-9, 1.176e-9, 1.049e-9, 9.377e-10, 8.462e-10,
2249 7.616e-10, 6.854e-10, 6.191e-10, 5.596e-10, 5.078e-10, 4.611e-10,
2250 4.197e-10, 3.83e-10, 3.505e-10, 3.215e-10, 2.956e-10, 2.726e-10,
2251 2.521e-10, 2.338e-10, 2.173e-10, 2.026e-10, 1.895e-10, 1.777e-10,
2252 1.672e-10, 1.579e-10, 1.496e-10, 1.423e-10, 1.358e-10, 1.302e-10,
2253 1.254e-10, 1.216e-10, 1.187e-10, 1.163e-10, 1.147e-10, 1.145e-10,
2254 1.15e-10, 1.17e-10, 1.192e-10, 1.25e-10, 1.298e-10, 1.345e-10,
2255 1.405e-10, 1.538e-10, 1.648e-10, 1.721e-10, 1.872e-10, 1.968e-10,
2256 2.089e-10, 2.172e-10, 2.317e-10, 2.389e-10, 2.503e-10, 2.585e-10,
2257 2.686e-10, 2.8e-10, 2.895e-10, 3.019e-10, 3.037e-10, 3.076e-10,
2258 3.146e-10, 3.198e-10, 3.332e-10, 3.397e-10, 3.54e-10, 3.667e-10,
2259 3.895e-10, 4.071e-10, 4.565e-10, 4.983e-10, 5.439e-10, 5.968e-10,
2260 6.676e-10, 7.456e-10, 8.405e-10, 9.478e-10, 1.064e-9, 1.218e-9,
2261 1.386e-9, 1.581e-9, 1.787e-9, 2.032e-9, 2.347e-9, 2.677e-9,
2262 3.008e-9, 3.544e-9, 4.056e-9, 4.687e-9, 5.331e-9, 6.227e-9,
2263 6.854e-9, 8.139e-9, 8.945e-9, 9.865e-9, 1.125e-8, 1.178e-8,
2264 1.364e-8, 1.436e-8, 1.54e-8, 1.672e-8, 1.793e-8, 1.906e-8,
2265 2.036e-8, 2.144e-8, 2.292e-8, 2.371e-8, 2.493e-8, 2.606e-8,
2266 2.706e-8, 2.866e-8, 3.036e-8, 3.136e-8, 3.405e-8, 3.665e-8,
2267 3.837e-8, 4.229e-8, 4.748e-8, 5.32e-8, 5.763e-8, 6.677e-8,
2268 7.216e-8, 7.716e-8, 8.958e-8, 9.419e-8, 1.036e-7, 1.108e-7,
2269 1.189e-7, 1.246e-7, 1.348e-7, 1.31e-7, 1.361e-7, 1.364e-7,
2270 1.363e-7, 1.343e-7, 1.293e-7, 1.254e-7, 1.235e-7, 1.158e-7,
2271 1.107e-7, 9.961e-8, 9.011e-8, 7.91e-8, 6.916e-8, 6.338e-8,
2272 5.564e-8, 4.827e-8, 4.198e-8, 3.695e-8, 3.276e-8, 2.929e-8,
2273 2.633e-8, 2.391e-8, 2.192e-8, 2.021e-8, 1.89e-8, 1.772e-8,
2274 1.667e-8, 1.603e-8, 1.547e-8, 1.537e-8, 1.492e-8, 1.515e-8,
2275 1.479e-8, 1.45e-8, 1.513e-8, 1.495e-8, 1.529e-8, 1.565e-8,
2276 1.564e-8, 1.553e-8, 1.569e-8, 1.584e-8, 1.57e-8, 1.538e-8,
2277 1.513e-8, 1.472e-8, 1.425e-8, 1.349e-8, 1.328e-8, 1.249e-8,
2278 1.17e-8, 1.077e-8, 9.514e-9, 8.614e-9, 7.46e-9, 6.621e-9,
2279 5.775e-9, 5.006e-9, 4.308e-9, 3.747e-9, 3.24e-9, 2.84e-9,
2280 2.481e-9, 2.184e-9, 1.923e-9, 1.71e-9, 1.504e-9, 1.334e-9,
2281 1.187e-9, 1.053e-9, 9.367e-10, 8.306e-10, 7.419e-10, 6.63e-10,
2282 5.918e-10, 5.277e-10, 4.717e-10, 4.222e-10, 3.783e-10, 3.39e-10,
2283 3.036e-10, 2.729e-10, 2.455e-10, 2.211e-10, 1.995e-10, 1.804e-10,
2284 1.635e-10, 1.485e-10, 1.355e-10, 1.24e-10, 1.139e-10, 1.051e-10,
2285 9.757e-11, 9.114e-11, 8.577e-11, 8.139e-11, 7.792e-11, 7.52e-11,
2286 7.39e-11, 7.311e-11, 7.277e-11, 7.482e-11, 7.698e-11, 8.162e-11,
2287 8.517e-11, 8.968e-11, 9.905e-11, 1.075e-10, 1.187e-10, 1.291e-10,
2288 1.426e-10, 1.573e-10, 1.734e-10, 1.905e-10, 2.097e-10, 2.28e-10,
2289 2.473e-10, 2.718e-10, 2.922e-10, 3.128e-10, 3.361e-10, 3.641e-10,
2290 3.91e-10, 4.196e-10, 4.501e-10, 4.932e-10, 5.258e-10, 5.755e-10,
2291 6.253e-10, 6.664e-10, 7.344e-10, 7.985e-10, 8.877e-10, 1.005e-9,
2292 1.118e-9, 1.251e-9, 1.428e-9, 1.61e-9, 1.888e-9, 2.077e-9,
2293 2.331e-9, 2.751e-9, 3.061e-9, 3.522e-9, 3.805e-9, 4.181e-9,
2294 4.575e-9, 5.167e-9, 5.634e-9, 6.007e-9, 6.501e-9, 6.829e-9,
2295 7.211e-9, 7.262e-9, 7.696e-9, 7.832e-9, 7.799e-9, 7.651e-9,
2296 7.304e-9, 7.15e-9, 6.977e-9, 6.603e-9, 6.209e-9, 5.69e-9,
2297 5.432e-9, 4.764e-9, 4.189e-9, 3.64e-9, 3.203e-9, 2.848e-9,
2298 2.51e-9, 2.194e-9, 1.946e-9, 1.75e-9, 1.567e-9, 1.426e-9,
2299 1.302e-9, 1.197e-9, 1.109e-9, 1.035e-9, 9.719e-10, 9.207e-10,
2300 8.957e-10, 8.578e-10, 8.262e-10, 8.117e-10, 7.987e-10, 7.875e-10,
2301 7.741e-10, 7.762e-10, 7.537e-10, 7.424e-10, 7.474e-10, 7.294e-10,
2302 7.216e-10, 7.233e-10, 7.075e-10, 6.892e-10, 6.618e-10, 6.314e-10,
2303 6.208e-10, 5.689e-10, 5.55e-10, 4.984e-10, 4.6e-10, 4.078e-10,
2304 3.879e-10, 3.459e-10, 2.982e-10, 2.626e-10, 2.329e-10, 1.988e-10,
2305 1.735e-10, 1.487e-10, 1.297e-10, 1.133e-10, 9.943e-11, 8.736e-11,
2306 7.726e-11, 6.836e-11, 6.053e-11, 5.384e-11, 4.789e-11, 4.267e-11,
2307 3.804e-11, 3.398e-11, 3.034e-11, 2.71e-11, 2.425e-11, 2.173e-11,
2308 1.95e-11, 1.752e-11, 1.574e-11, 1.418e-11, 1.278e-11, 1.154e-11,
2309 1.044e-11, 9.463e-12, 8.602e-12, 7.841e-12, 7.171e-12, 6.584e-12,
2310 6.073e-12, 5.631e-12, 5.254e-12, 4.937e-12, 4.679e-12, 4.476e-12,
2311 4.328e-12, 4.233e-12, 4.194e-12, 4.211e-12, 4.286e-12, 4.424e-12,
2312 4.628e-12, 4.906e-12, 5.262e-12, 5.708e-12, 6.254e-12, 6.914e-12,
2313 7.714e-12, 8.677e-12, 9.747e-12, 1.101e-11, 1.256e-11, 1.409e-11,
2314 1.597e-11, 1.807e-11, 2.034e-11, 2.316e-11, 2.622e-11, 2.962e-11,
2315 3.369e-11, 3.819e-11, 4.329e-11, 4.932e-11, 5.589e-11, 6.364e-11,
2316 7.284e-11, 8.236e-11, 9.447e-11, 1.078e-10, 1.229e-10, 1.417e-10,
2317 1.614e-10, 1.843e-10, 2.107e-10, 2.406e-10, 2.728e-10, 3.195e-10,
2318 3.595e-10, 4.153e-10, 4.736e-10, 5.41e-10, 6.088e-10, 6.769e-10,
2319 7.691e-10, 8.545e-10, 9.621e-10, 1.047e-9, 1.161e-9, 1.296e-9,
2320 1.424e-9, 1.576e-9, 1.739e-9, 1.893e-9, 2.08e-9, 2.336e-9,
2321 2.604e-9, 2.76e-9, 3.001e-9, 3.365e-9, 3.55e-9, 3.895e-9,
2322 4.183e-9, 4.614e-9, 4.846e-9, 5.068e-9, 5.427e-9, 5.541e-9,
2323 5.864e-9, 5.997e-9, 5.997e-9, 6.061e-9, 5.944e-9, 5.855e-9,
2324 5.661e-9, 5.523e-9, 5.374e-9, 4.94e-9, 4.688e-9, 4.17e-9,
2325 3.913e-9, 3.423e-9, 2.997e-9, 2.598e-9, 2.253e-9, 1.946e-9,
2326 1.71e-9, 1.507e-9, 1.336e-9, 1.19e-9, 1.068e-9, 9.623e-10,
2327 8.772e-10, 8.007e-10, 7.42e-10, 6.884e-10, 6.483e-10, 6.162e-10,
2328 5.922e-10, 5.688e-10, 5.654e-10, 5.637e-10, 5.701e-10, 5.781e-10,
2329 5.874e-10, 6.268e-10, 6.357e-10, 6.525e-10, 7.137e-10, 7.441e-10,
2330 8.024e-10, 8.485e-10, 9.143e-10, 9.536e-10, 9.717e-10, 1.018e-9,
2331 1.042e-9, 1.054e-9, 1.092e-9, 1.079e-9, 1.064e-9, 1.043e-9,
2332 1.02e-9, 9.687e-10, 9.273e-10, 9.208e-10, 9.068e-10, 7.687e-10,
2333 7.385e-10, 6.595e-10, 5.87e-10, 5.144e-10, 4.417e-10, 3.804e-10,
2334 3.301e-10, 2.866e-10, 2.509e-10, 2.202e-10, 1.947e-10, 1.719e-10,
2335 1.525e-10, 1.361e-10, 1.21e-10, 1.084e-10, 9.8e-11, 8.801e-11,
2336 7.954e-11, 7.124e-11, 6.335e-11, 5.76e-11, 5.132e-11, 4.601e-11,
2337 4.096e-11, 3.657e-11, 3.25e-11, 2.909e-11, 2.587e-11, 2.297e-11,
2338 2.05e-11, 1.828e-11, 1.632e-11, 1.462e-11, 1.314e-11, 1.185e-11,
2339 1.073e-11, 9.76e-12, 8.922e-12, 8.206e-12, 7.602e-12, 7.1e-12,
2340 6.694e-12, 6.378e-12, 6.149e-12, 6.004e-12, 5.941e-12, 5.962e-12,
2341 6.069e-12, 6.265e-12, 6.551e-12, 6.935e-12, 7.457e-12, 8.074e-12,
2342 8.811e-12, 9.852e-12, 1.086e-11, 1.207e-11, 1.361e-11, 1.553e-11,
2343 1.737e-11, 1.93e-11, 2.175e-11, 2.41e-11, 2.706e-11, 3.023e-11,
2344 3.313e-11, 3.657e-11, 4.118e-11, 4.569e-11, 5.025e-11, 5.66e-11,
2345 6.231e-11, 6.881e-11, 7.996e-11, 8.526e-11, 9.694e-11, 1.106e-10,
2346 1.222e-10, 1.355e-10, 1.525e-10, 1.775e-10, 1.924e-10, 2.181e-10,
2347 2.379e-10, 2.662e-10, 2.907e-10, 3.154e-10, 3.366e-10, 3.579e-10,
2348 3.858e-10, 4.046e-10, 4.196e-10, 4.166e-10, 4.457e-10, 4.466e-10,
2349 4.404e-10, 4.337e-10, 4.15e-10, 4.083e-10, 3.91e-10, 3.723e-10,
2350 3.514e-10, 3.303e-10, 2.847e-10, 2.546e-10, 2.23e-10, 1.994e-10,
2351 1.733e-10, 1.488e-10, 1.297e-10, 1.144e-10, 1.004e-10, 8.741e-11,
2352 7.928e-11, 7.034e-11, 6.323e-11, 5.754e-11, 5.25e-11, 4.85e-11,
2353 4.502e-11, 4.286e-11, 4.028e-11, 3.899e-11, 3.824e-11, 3.761e-11,
2354 3.804e-11, 3.839e-11, 3.845e-11, 4.244e-11, 4.382e-11, 4.582e-11,
2355 4.847e-11, 5.209e-11, 5.384e-11, 5.887e-11, 6.371e-11, 6.737e-11,
2356 7.168e-11, 7.415e-11, 7.827e-11, 8.037e-11, 8.12e-11, 8.071e-11,
2357 8.008e-11, 7.851e-11, 7.544e-11, 7.377e-11, 7.173e-11, 6.801e-11,
2358 6.267e-11, 5.727e-11, 5.288e-11, 4.853e-11, 4.082e-11, 3.645e-11,
2359 3.136e-11, 2.672e-11, 2.304e-11, 1.986e-11, 1.725e-11, 1.503e-11,
2360 1.315e-11, 1.153e-11, 1.014e-11, 8.942e-12, 7.901e-12, 6.993e-12,
2361 6.199e-12, 5.502e-12, 4.89e-12, 4.351e-12, 3.878e-12, 3.461e-12,
2362 3.094e-12, 2.771e-12, 2.488e-12, 2.241e-12, 2.025e-12, 1.838e-12,
2363 1.677e-12, 1.541e-12, 1.427e-12, 1.335e-12, 1.262e-12, 1.209e-12,
2364 1.176e-12, 1.161e-12, 1.165e-12, 1.189e-12, 1.234e-12, 1.3e-12,
2365 1.389e-12, 1.503e-12, 1.644e-12, 1.814e-12, 2.017e-12, 2.255e-12,
2366 2.534e-12, 2.858e-12, 3.231e-12, 3.661e-12, 4.153e-12, 4.717e-12,
2367 5.36e-12, 6.094e-12, 6.93e-12, 7.882e-12, 8.966e-12, 1.02e-11,
2368 1.162e-11, 1.324e-11, 1.51e-11, 1.72e-11, 1.965e-11, 2.237e-11,
2369 2.56e-11, 2.927e-11, 3.371e-11, 3.842e-11, 4.429e-11, 5.139e-11,
2370 5.798e-11, 6.697e-11, 7.626e-11, 8.647e-11, 1.022e-10, 1.136e-10,
2371 1.3e-10, 1.481e-10, 1.672e-10, 1.871e-10, 2.126e-10, 2.357e-10,
2372 2.583e-10, 2.997e-10, 3.289e-10, 3.702e-10, 4.012e-10, 4.319e-10,
2373 4.527e-10, 5.001e-10, 5.448e-10, 5.611e-10, 5.76e-10, 5.965e-10,
2374 6.079e-10, 6.207e-10, 6.276e-10, 6.222e-10, 6.137e-10, 6e-10,
2375 5.814e-10, 5.393e-10, 5.35e-10, 4.947e-10, 4.629e-10, 4.117e-10,
2376 3.712e-10, 3.372e-10, 2.923e-10, 2.55e-10, 2.232e-10, 1.929e-10,
2377 1.679e-10, 1.46e-10, 1.289e-10, 1.13e-10, 9.953e-11, 8.763e-11,
2378 7.76e-11, 6.9e-11, 6.16e-11, 5.525e-11, 4.958e-11, 4.489e-11,
2379 4.072e-11, 3.728e-11, 3.438e-11, 3.205e-11, 3.006e-11, 2.848e-11,
2380 2.766e-11, 2.688e-11, 2.664e-11, 2.67e-11, 2.696e-11, 2.786e-11,
2381 2.861e-11, 3.009e-11, 3.178e-11, 3.389e-11, 3.587e-11, 3.819e-11,
2382 4.054e-11, 4.417e-11, 4.703e-11, 5.137e-11, 5.46e-11, 6.055e-11,
2383 6.333e-11, 6.773e-11, 7.219e-11, 7.717e-11, 8.131e-11, 8.491e-11,
2384 8.574e-11, 9.01e-11, 9.017e-11, 8.999e-11, 8.959e-11, 8.838e-11,
2385 8.579e-11, 8.162e-11, 8.098e-11, 7.472e-11, 7.108e-11, 6.559e-11,
2386 5.994e-11, 5.172e-11, 4.424e-11, 3.951e-11, 3.34e-11, 2.902e-11,
2387 2.541e-11, 2.215e-11, 1.945e-11, 1.716e-11, 1.503e-11, 1.339e-11,
2388 1.185e-11, 1.05e-11, 9.336e-12, 8.307e-12, 7.312e-12, 6.55e-12,
2389 5.836e-12, 5.178e-12, 4.6e-12, 4.086e-12, 3.639e-12, 3.247e-12,
2390 2.904e-12, 2.604e-12, 2.341e-12, 2.112e-12, 1.914e-12, 1.744e-12,
2391 1.598e-12, 1.476e-12, 1.374e-12, 1.293e-12, 1.23e-12, 1.185e-12,
2392 1.158e-12, 1.147e-12, 1.154e-12, 1.177e-12, 1.219e-12, 1.28e-12,
2393 1.36e-12, 1.463e-12, 1.591e-12, 1.75e-12, 1.94e-12, 2.156e-12,
2394 2.43e-12, 2.748e-12, 3.052e-12, 3.533e-12, 3.967e-12, 4.471e-12,
2395 5.041e-12, 5.86e-12, 6.664e-12, 7.522e-12, 8.342e-12, 9.412e-12,
2396 1.072e-11, 1.213e-11, 1.343e-11, 1.496e-11, 1.664e-11, 1.822e-11,
2397 2.029e-11, 2.233e-11, 2.457e-11, 2.709e-11, 2.928e-11, 3.115e-11,
2398 3.356e-11, 3.592e-11, 3.818e-11, 3.936e-11, 4.061e-11, 4.149e-11,
2399 4.299e-11, 4.223e-11, 4.251e-11, 4.287e-11, 4.177e-11, 4.094e-11,
2400 3.942e-11, 3.772e-11, 3.614e-11, 3.394e-11, 3.222e-11, 2.791e-11,
2401 2.665e-11, 2.309e-11, 2.032e-11, 1.74e-11, 1.535e-11, 1.323e-11,
2402 1.151e-11, 9.803e-12, 8.65e-12, 7.54e-12, 6.619e-12, 5.832e-12,
2403 5.113e-12, 4.503e-12, 3.975e-12, 3.52e-12, 3.112e-12, 2.797e-12,
2404 2.5e-12, 2.24e-12, 2.013e-12, 1.819e-12, 1.653e-12, 1.513e-12,
2405 1.395e-12, 1.299e-12, 1.225e-12, 1.168e-12, 1.124e-12, 1.148e-12,
2406 1.107e-12, 1.128e-12, 1.169e-12, 1.233e-12, 1.307e-12, 1.359e-12,
2407 1.543e-12, 1.686e-12, 1.794e-12, 2.028e-12, 2.21e-12, 2.441e-12,
2408 2.653e-12, 2.828e-12, 3.093e-12, 3.28e-12, 3.551e-12, 3.677e-12,
2409 3.803e-12, 3.844e-12, 4.068e-12, 4.093e-12, 4.002e-12, 3.904e-12,
2410 3.624e-12, 3.633e-12, 3.622e-12, 3.443e-12, 3.184e-12, 2.934e-12,
2411 2.476e-12, 2.212e-12, 1.867e-12, 1.594e-12, 1.37e-12, 1.192e-12,
2412 1.045e-12, 9.211e-13, 8.17e-13, 7.29e-13, 6.55e-13, 5.929e-13,
2413 5.415e-13, 4.995e-13, 4.661e-13, 4.406e-13, 4.225e-13, 4.116e-13,
2414 4.075e-13, 4.102e-13, 4.198e-13, 4.365e-13, 4.606e-13, 4.925e-13,
2415 5.326e-13, 5.818e-13, 6.407e-13, 7.104e-13, 7.92e-13, 8.868e-13,
2416 9.964e-13, 1.123e-12, 1.268e-12, 1.434e-12, 1.626e-12, 1.848e-12,
2417 2.107e-12, 2.422e-12, 2.772e-12, 3.145e-12, 3.704e-12, 4.27e-12,
2418 4.721e-12, 5.361e-12, 6.083e-12, 7.095e-12, 7.968e-12, 9.228e-12,
2419 1.048e-11, 1.187e-11, 1.336e-11, 1.577e-11, 1.772e-11, 2.017e-11,
2420 2.25e-11, 2.63e-11, 2.911e-11, 3.356e-11, 3.82e-11, 4.173e-11,
2421 4.811e-11, 5.254e-11, 5.839e-11, 6.187e-11, 6.805e-11, 7.118e-11,
2422 7.369e-11, 7.664e-11, 7.794e-11, 7.947e-11, 8.036e-11, 7.954e-11,
2423 7.849e-11, 7.518e-11, 7.462e-11, 6.926e-11, 6.531e-11, 6.197e-11,
2424 5.421e-11, 4.777e-11, 4.111e-11, 3.679e-11, 3.166e-11, 2.786e-11,
2425 2.436e-11, 2.144e-11, 1.859e-11, 1.628e-11, 1.414e-11, 1.237e-11,
2426 1.093e-11, 9.558e-12
2429 static const double h2o260[2001] =
2430 { .2752, .2732, .2749, .2676, .2667, .2545,
2431 .2497, .2327, .2218, .2036, .1825, .1694, .1497, .1353, .121,
2432 .1014, .09405, .07848, .07195, .06246, .05306, .04853, .04138,
2433 .03735, .03171, .02785, .02431, .02111, .01845, .0164, .01405,
2434 .01255, .01098, .009797, .008646, .007779, .006898, .006099,
2435 .005453, .004909, .004413, .003959, .003581, .003199, .002871,
2436 .002583, .00233, .002086, .001874, .001684, .001512, .001361,
2437 .001225, .0011, 9.89e-4, 8.916e-4, 8.039e-4, 7.256e-4, 6.545e-4,
2438 5.918e-4, 5.359e-4, 4.867e-4, 4.426e-4, 4.033e-4, 3.682e-4,
2439 3.366e-4, 3.085e-4, 2.833e-4, 2.605e-4, 2.403e-4, 2.221e-4,
2440 2.055e-4, 1.908e-4, 1.774e-4, 1.653e-4, 1.544e-4, 1.443e-4,
2441 1.351e-4, 1.267e-4, 1.19e-4, 1.119e-4, 1.053e-4, 9.922e-5,
2442 9.355e-5, 8.831e-5, 8.339e-5, 7.878e-5, 7.449e-5, 7.043e-5,
2443 6.664e-5, 6.307e-5, 5.969e-5, 5.654e-5, 5.357e-5, 5.075e-5,
2444 4.81e-5, 4.56e-5, 4.322e-5, 4.102e-5, 3.892e-5, 3.696e-5,
2445 3.511e-5, 3.339e-5, 3.177e-5, 3.026e-5, 2.886e-5, 2.756e-5,
2446 2.636e-5, 2.527e-5, 2.427e-5, 2.337e-5, 2.257e-5, 2.185e-5,
2447 2.127e-5, 2.08e-5, 2.041e-5, 2.013e-5, 2e-5, 1.997e-5, 2.009e-5,
2448 2.031e-5, 2.068e-5, 2.124e-5, 2.189e-5, 2.267e-5, 2.364e-5,
2449 2.463e-5, 2.618e-5, 2.774e-5, 2.937e-5, 3.144e-5, 3.359e-5,
2450 3.695e-5, 4.002e-5, 4.374e-5, 4.947e-5, 5.431e-5, 6.281e-5,
2451 7.169e-5, 8.157e-5, 9.728e-5, 1.079e-4, 1.337e-4, 1.442e-4,
2452 1.683e-4, 1.879e-4, 2.223e-4, 2.425e-4, 2.838e-4, 3.143e-4,
2453 3.527e-4, 4.012e-4, 4.237e-4, 4.747e-4, 5.057e-4, 5.409e-4,
2454 5.734e-4, 5.944e-4, 6.077e-4, 6.175e-4, 6.238e-4, 6.226e-4,
2455 6.248e-4, 6.192e-4, 6.098e-4, 5.818e-4, 5.709e-4, 5.465e-4,
2456 5.043e-4, 4.699e-4, 4.294e-4, 3.984e-4, 3.672e-4, 3.152e-4,
2457 2.883e-4, 2.503e-4, 2.211e-4, 1.92e-4, 1.714e-4, 1.485e-4,
2458 1.358e-4, 1.156e-4, 1.021e-4, 8.887e-5, 7.842e-5, 7.12e-5,
2459 6.186e-5, 5.73e-5, 4.792e-5, 4.364e-5, 3.72e-5, 3.28e-5,
2460 2.946e-5, 2.591e-5, 2.261e-5, 2.048e-5, 1.813e-5, 1.63e-5,
2461 1.447e-5, 1.282e-5, 1.167e-5, 1.041e-5, 9.449e-6, 8.51e-6,
2462 7.596e-6, 6.961e-6, 6.272e-6, 5.728e-6, 5.198e-6, 4.667e-6,
2463 4.288e-6, 3.897e-6, 3.551e-6, 3.235e-6, 2.952e-6, 2.688e-6,
2464 2.449e-6, 2.241e-6, 2.05e-6, 1.879e-6, 1.722e-6, 1.582e-6,
2465 1.456e-6, 1.339e-6, 1.236e-6, 1.144e-6, 1.06e-6, 9.83e-7,
2466 9.149e-7, 8.535e-7, 7.973e-7, 7.466e-7, 6.999e-7, 6.574e-7,
2467 6.18e-7, 5.821e-7, 5.487e-7, 5.18e-7, 4.896e-7, 4.631e-7,
2468 4.386e-7, 4.16e-7, 3.945e-7, 3.748e-7, 3.562e-7, 3.385e-7,
2469 3.222e-7, 3.068e-7, 2.922e-7, 2.788e-7, 2.659e-7, 2.539e-7,
2470 2.425e-7, 2.318e-7, 2.219e-7, 2.127e-7, 2.039e-7, 1.958e-7,
2471 1.885e-7, 1.818e-7, 1.758e-7, 1.711e-7, 1.662e-7, 1.63e-7,
2472 1.605e-7, 1.58e-7, 1.559e-7, 1.545e-7, 1.532e-7, 1.522e-7,
2473 1.51e-7, 1.495e-7, 1.465e-7, 1.483e-7, 1.469e-7, 1.448e-7,
2474 1.444e-7, 1.436e-7, 1.426e-7, 1.431e-7, 1.425e-7, 1.445e-7,
2475 1.477e-7, 1.515e-7, 1.567e-7, 1.634e-7, 1.712e-7, 1.802e-7,
2476 1.914e-7, 2.024e-7, 2.159e-7, 2.295e-7, 2.461e-7, 2.621e-7,
2477 2.868e-7, 3.102e-7, 3.394e-7, 3.784e-7, 4.223e-7, 4.864e-7,
2478 5.501e-7, 6.039e-7, 7.193e-7, 7.728e-7, 9.514e-7, 1.073e-6,
2479 1.18e-6, 1.333e-6, 1.472e-6, 1.566e-6, 1.677e-6, 1.784e-6,
2480 1.904e-6, 1.953e-6, 2.02e-6, 2.074e-6, 2.128e-6, 2.162e-6,
2481 2.219e-6, 2.221e-6, 2.249e-6, 2.239e-6, 2.235e-6, 2.185e-6,
2482 2.141e-6, 2.124e-6, 2.09e-6, 2.068e-6, 2.1e-6, 2.104e-6,
2483 2.142e-6, 2.181e-6, 2.257e-6, 2.362e-6, 2.5e-6, 2.664e-6,
2484 2.884e-6, 3.189e-6, 3.48e-6, 3.847e-6, 4.313e-6, 4.79e-6,
2485 5.25e-6, 5.989e-6, 6.692e-6, 7.668e-6, 8.52e-6, 9.606e-6,
2486 1.073e-5, 1.225e-5, 1.377e-5, 1.582e-5, 1.761e-5, 2.029e-5,
2487 2.284e-5, 2.602e-5, 2.94e-5, 3.483e-5, 3.928e-5, 4.618e-5,
2488 5.24e-5, 6.132e-5, 7.183e-5, 8.521e-5, 9.111e-5, 1.07e-4,
2489 1.184e-4, 1.264e-4, 1.475e-4, 1.612e-4, 1.704e-4, 1.818e-4,
2490 1.924e-4, 1.994e-4, 2.061e-4, 2.18e-4, 2.187e-4, 2.2e-4,
2491 2.196e-4, 2.131e-4, 2.015e-4, 1.988e-4, 1.847e-4, 1.729e-4,
2492 1.597e-4, 1.373e-4, 1.262e-4, 1.087e-4, 9.439e-5, 8.061e-5,
2493 7.093e-5, 6.049e-5, 5.12e-5, 4.435e-5, 3.817e-5, 3.34e-5,
2494 2.927e-5, 2.573e-5, 2.291e-5, 2.04e-5, 1.827e-5, 1.636e-5,
2495 1.463e-5, 1.309e-5, 1.17e-5, 1.047e-5, 9.315e-6, 8.328e-6,
2496 7.458e-6, 6.665e-6, 5.94e-6, 5.316e-6, 4.752e-6, 4.252e-6,
2497 3.825e-6, 3.421e-6, 3.064e-6, 2.746e-6, 2.465e-6, 2.216e-6,
2498 1.99e-6, 1.79e-6, 1.609e-6, 1.449e-6, 1.306e-6, 1.177e-6,
2499 1.063e-6, 9.607e-7, 8.672e-7, 7.855e-7, 7.118e-7, 6.46e-7,
2500 5.871e-7, 5.34e-7, 4.868e-7, 4.447e-7, 4.068e-7, 3.729e-7,
2501 3.423e-7, 3.151e-7, 2.905e-7, 2.686e-7, 2.484e-7, 2.306e-7,
2502 2.142e-7, 1.995e-7, 1.86e-7, 1.738e-7, 1.626e-7, 1.522e-7,
2503 1.427e-7, 1.338e-7, 1.258e-7, 1.183e-7, 1.116e-7, 1.056e-7,
2504 9.972e-8, 9.46e-8, 9.007e-8, 8.592e-8, 8.195e-8, 7.816e-8,
2505 7.483e-8, 7.193e-8, 6.892e-8, 6.642e-8, 6.386e-8, 6.154e-8,
2506 5.949e-8, 5.764e-8, 5.622e-8, 5.479e-8, 5.364e-8, 5.301e-8,
2507 5.267e-8, 5.263e-8, 5.313e-8, 5.41e-8, 5.55e-8, 5.745e-8,
2508 6.003e-8, 6.311e-8, 6.713e-8, 7.173e-8, 7.724e-8, 8.368e-8,
2509 9.121e-8, 9.986e-8, 1.097e-7, 1.209e-7, 1.338e-7, 1.486e-7,
2510 1.651e-7, 1.837e-7, 2.048e-7, 2.289e-7, 2.557e-7, 2.857e-7,
2511 3.195e-7, 3.587e-7, 4.015e-7, 4.497e-7, 5.049e-7, 5.665e-7,
2512 6.366e-7, 7.121e-7, 7.996e-7, 8.946e-7, 1.002e-6, 1.117e-6,
2513 1.262e-6, 1.416e-6, 1.611e-6, 1.807e-6, 2.056e-6, 2.351e-6,
2514 2.769e-6, 3.138e-6, 3.699e-6, 4.386e-6, 5.041e-6, 6.074e-6,
2515 6.812e-6, 7.79e-6, 8.855e-6, 1.014e-5, 1.095e-5, 1.245e-5,
2516 1.316e-5, 1.39e-5, 1.504e-5, 1.583e-5, 1.617e-5, 1.652e-5,
2517 1.713e-5, 1.724e-5, 1.715e-5, 1.668e-5, 1.629e-5, 1.552e-5,
2518 1.478e-5, 1.34e-5, 1.245e-5, 1.121e-5, 9.575e-6, 8.956e-6,
2519 7.345e-6, 6.597e-6, 5.612e-6, 4.818e-6, 4.165e-6, 3.579e-6,
2520 3.041e-6, 2.623e-6, 2.29e-6, 1.984e-6, 1.748e-6, 1.534e-6,
2521 1.369e-6, 1.219e-6, 1.092e-6, 9.8e-7, 8.762e-7, 7.896e-7,
2522 7.104e-7, 6.364e-7, 5.691e-7, 5.107e-7, 4.575e-7, 4.09e-7,
2523 3.667e-7, 3.287e-7, 2.931e-7, 2.633e-7, 2.356e-7, 2.111e-7,
2524 1.895e-7, 1.697e-7, 1.525e-7, 1.369e-7, 1.233e-7, 1.114e-7,
2525 9.988e-8, 9.004e-8, 8.149e-8, 7.352e-8, 6.662e-8, 6.03e-8,
2526 5.479e-8, 4.974e-8, 4.532e-8, 4.129e-8, 3.781e-8, 3.462e-8,
2527 3.176e-8, 2.919e-8, 2.687e-8, 2.481e-8, 2.292e-8, 2.119e-8,
2528 1.967e-8, 1.828e-8, 1.706e-8, 1.589e-8, 1.487e-8, 1.393e-8,
2529 1.307e-8, 1.228e-8, 1.156e-8, 1.089e-8, 1.028e-8, 9.696e-9,
2530 9.159e-9, 8.658e-9, 8.187e-9, 7.746e-9, 7.34e-9, 6.953e-9,
2531 6.594e-9, 6.259e-9, 5.948e-9, 5.66e-9, 5.386e-9, 5.135e-9,
2532 4.903e-9, 4.703e-9, 4.515e-9, 4.362e-9, 4.233e-9, 4.117e-9,
2533 4.017e-9, 3.962e-9, 3.924e-9, 3.905e-9, 3.922e-9, 3.967e-9,
2534 4.046e-9, 4.165e-9, 4.32e-9, 4.522e-9, 4.769e-9, 5.083e-9,
2535 5.443e-9, 5.872e-9, 6.366e-9, 6.949e-9, 7.601e-9, 8.371e-9,
2536 9.22e-9, 1.02e-8, 1.129e-8, 1.251e-8, 1.393e-8, 1.542e-8,
2537 1.72e-8, 1.926e-8, 2.152e-8, 2.392e-8, 2.678e-8, 3.028e-8,
2538 3.39e-8, 3.836e-8, 4.309e-8, 4.9e-8, 5.481e-8, 6.252e-8,
2539 7.039e-8, 7.883e-8, 8.849e-8, 1.012e-7, 1.142e-7, 1.3e-7,
2540 1.475e-7, 1.732e-7, 1.978e-7, 2.304e-7, 2.631e-7, 2.988e-7,
2541 3.392e-7, 3.69e-7, 4.355e-7, 4.672e-7, 5.11e-7, 5.461e-7,
2542 5.828e-7, 6.233e-7, 6.509e-7, 6.672e-7, 6.969e-7, 7.104e-7,
2543 7.439e-7, 7.463e-7, 7.708e-7, 7.466e-7, 7.668e-7, 7.549e-7,
2544 7.586e-7, 7.384e-7, 7.439e-7, 7.785e-7, 7.915e-7, 8.31e-7,
2545 8.745e-7, 9.558e-7, 1.038e-6, 1.173e-6, 1.304e-6, 1.452e-6,
2546 1.671e-6, 1.931e-6, 2.239e-6, 2.578e-6, 3.032e-6, 3.334e-6,
2547 3.98e-6, 4.3e-6, 4.518e-6, 5.321e-6, 5.508e-6, 6.211e-6, 6.59e-6,
2548 7.046e-6, 7.555e-6, 7.558e-6, 7.875e-6, 8.319e-6, 8.433e-6,
2549 8.59e-6, 8.503e-6, 8.304e-6, 8.336e-6, 7.739e-6, 7.301e-6,
2550 6.827e-6, 6.078e-6, 5.551e-6, 4.762e-6, 4.224e-6, 3.538e-6,
2551 2.984e-6, 2.619e-6, 2.227e-6, 1.923e-6, 1.669e-6, 1.462e-6,
2552 1.294e-6, 1.155e-6, 1.033e-6, 9.231e-7, 8.238e-7, 7.36e-7,
2553 6.564e-7, 5.869e-7, 5.236e-7, 4.673e-7, 4.174e-7, 3.736e-7,
2554 3.33e-7, 2.976e-7, 2.657e-7, 2.367e-7, 2.106e-7, 1.877e-7,
2555 1.671e-7, 1.494e-7, 1.332e-7, 1.192e-7, 1.065e-7, 9.558e-8,
2556 8.586e-8, 7.717e-8, 6.958e-8, 6.278e-8, 5.666e-8, 5.121e-8,
2557 4.647e-8, 4.213e-8, 3.815e-8, 3.459e-8, 3.146e-8, 2.862e-8,
2558 2.604e-8, 2.375e-8, 2.162e-8, 1.981e-8, 1.817e-8, 1.67e-8,
2559 1.537e-8, 1.417e-8, 1.31e-8, 1.215e-8, 1.128e-8, 1.05e-8,
2560 9.793e-9, 9.158e-9, 8.586e-9, 8.068e-9, 7.595e-9, 7.166e-9,
2561 6.778e-9, 6.427e-9, 6.108e-9, 5.826e-9, 5.571e-9, 5.347e-9,
2562 5.144e-9, 4.968e-9, 4.822e-9, 4.692e-9, 4.589e-9, 4.506e-9,
2563 4.467e-9, 4.44e-9, 4.466e-9, 4.515e-9, 4.718e-9, 4.729e-9,
2564 4.937e-9, 5.249e-9, 5.466e-9, 5.713e-9, 6.03e-9, 6.436e-9,
2565 6.741e-9, 7.33e-9, 7.787e-9, 8.414e-9, 8.908e-9, 9.868e-9,
2566 1.069e-8, 1.158e-8, 1.253e-8, 1.3e-8, 1.409e-8, 1.47e-8,
2567 1.548e-8, 1.612e-8, 1.666e-8, 1.736e-8, 1.763e-8, 1.812e-8,
2568 1.852e-8, 1.923e-8, 1.897e-8, 1.893e-8, 1.888e-8, 1.868e-8,
2569 1.895e-8, 1.899e-8, 1.876e-8, 1.96e-8, 2.02e-8, 2.121e-8,
2570 2.239e-8, 2.379e-8, 2.526e-8, 2.766e-8, 2.994e-8, 3.332e-8,
2571 3.703e-8, 4.158e-8, 4.774e-8, 5.499e-8, 6.355e-8, 7.349e-8,
2572 8.414e-8, 9.846e-8, 1.143e-7, 1.307e-7, 1.562e-7, 1.817e-7,
2573 2.011e-7, 2.192e-7, 2.485e-7, 2.867e-7, 3.035e-7, 3.223e-7,
2574 3.443e-7, 3.617e-7, 3.793e-7, 3.793e-7, 3.839e-7, 4.081e-7,
2575 4.117e-7, 4.085e-7, 3.92e-7, 3.851e-7, 3.754e-7, 3.49e-7,
2576 3.229e-7, 2.978e-7, 2.691e-7, 2.312e-7, 2.029e-7, 1.721e-7,
2577 1.472e-7, 1.308e-7, 1.132e-7, 9.736e-8, 8.458e-8, 7.402e-8,
2578 6.534e-8, 5.811e-8, 5.235e-8, 4.762e-8, 4.293e-8, 3.896e-8,
2579 3.526e-8, 3.165e-8, 2.833e-8, 2.551e-8, 2.288e-8, 2.036e-8,
2580 1.82e-8, 1.626e-8, 1.438e-8, 1.299e-8, 1.149e-8, 1.03e-8,
2581 9.148e-9, 8.122e-9, 7.264e-9, 6.425e-9, 5.777e-9, 5.06e-9,
2582 4.502e-9, 4.013e-9, 3.567e-9, 3.145e-9, 2.864e-9, 2.553e-9,
2583 2.311e-9, 2.087e-9, 1.886e-9, 1.716e-9, 1.556e-9, 1.432e-9,
2584 1.311e-9, 1.202e-9, 1.104e-9, 1.013e-9, 9.293e-10, 8.493e-10,
2585 7.79e-10, 7.185e-10, 6.642e-10, 6.141e-10, 5.684e-10, 5.346e-10,
2586 5.032e-10, 4.725e-10, 4.439e-10, 4.176e-10, 3.93e-10, 3.714e-10,
2587 3.515e-10, 3.332e-10, 3.167e-10, 3.02e-10, 2.887e-10, 2.769e-10,
2588 2.665e-10, 2.578e-10, 2.503e-10, 2.436e-10, 2.377e-10, 2.342e-10,
2589 2.305e-10, 2.296e-10, 2.278e-10, 2.321e-10, 2.355e-10, 2.402e-10,
2590 2.478e-10, 2.67e-10, 2.848e-10, 2.982e-10, 3.263e-10, 3.438e-10,
2591 3.649e-10, 3.829e-10, 4.115e-10, 4.264e-10, 4.473e-10, 4.63e-10,
2592 4.808e-10, 4.995e-10, 5.142e-10, 5.313e-10, 5.318e-10, 5.358e-10,
2593 5.452e-10, 5.507e-10, 5.698e-10, 5.782e-10, 5.983e-10, 6.164e-10,
2594 6.532e-10, 6.811e-10, 7.624e-10, 8.302e-10, 9.067e-10, 9.937e-10,
2595 1.104e-9, 1.221e-9, 1.361e-9, 1.516e-9, 1.675e-9, 1.883e-9,
2596 2.101e-9, 2.349e-9, 2.614e-9, 2.92e-9, 3.305e-9, 3.724e-9,
2597 4.142e-9, 4.887e-9, 5.614e-9, 6.506e-9, 7.463e-9, 8.817e-9,
2598 9.849e-9, 1.187e-8, 1.321e-8, 1.474e-8, 1.698e-8, 1.794e-8,
2599 2.09e-8, 2.211e-8, 2.362e-8, 2.556e-8, 2.729e-8, 2.88e-8,
2600 3.046e-8, 3.167e-8, 3.367e-8, 3.457e-8, 3.59e-8, 3.711e-8,
2601 3.826e-8, 4.001e-8, 4.211e-8, 4.315e-8, 4.661e-8, 5.01e-8,
2602 5.249e-8, 5.84e-8, 6.628e-8, 7.512e-8, 8.253e-8, 9.722e-8,
2603 1.067e-7, 1.153e-7, 1.347e-7, 1.428e-7, 1.577e-7, 1.694e-7,
2604 1.833e-7, 1.938e-7, 2.108e-7, 2.059e-7, 2.157e-7, 2.185e-7,
2605 2.208e-7, 2.182e-7, 2.093e-7, 2.014e-7, 1.962e-7, 1.819e-7,
2606 1.713e-7, 1.51e-7, 1.34e-7, 1.154e-7, 9.89e-8, 8.88e-8, 7.673e-8,
2607 6.599e-8, 5.73e-8, 5.081e-8, 4.567e-8, 4.147e-8, 3.773e-8,
2608 3.46e-8, 3.194e-8, 2.953e-8, 2.759e-8, 2.594e-8, 2.442e-8,
2609 2.355e-8, 2.283e-8, 2.279e-8, 2.231e-8, 2.279e-8, 2.239e-8,
2610 2.21e-8, 2.309e-8, 2.293e-8, 2.352e-8, 2.415e-8, 2.43e-8,
2611 2.426e-8, 2.465e-8, 2.5e-8, 2.496e-8, 2.465e-8, 2.445e-8,
2612 2.383e-8, 2.299e-8, 2.165e-8, 2.113e-8, 1.968e-8, 1.819e-8,
2613 1.644e-8, 1.427e-8, 1.27e-8, 1.082e-8, 9.428e-9, 8.091e-9,
2614 6.958e-9, 5.988e-9, 5.246e-9, 4.601e-9, 4.098e-9, 3.664e-9,
2615 3.287e-9, 2.942e-9, 2.656e-9, 2.364e-9, 2.118e-9, 1.903e-9,
2616 1.703e-9, 1.525e-9, 1.365e-9, 1.229e-9, 1.107e-9, 9.96e-10,
2617 8.945e-10, 8.08e-10, 7.308e-10, 6.616e-10, 5.994e-10, 5.422e-10,
2618 4.929e-10, 4.478e-10, 4.07e-10, 3.707e-10, 3.379e-10, 3.087e-10,
2619 2.823e-10, 2.592e-10, 2.385e-10, 2.201e-10, 2.038e-10, 1.897e-10,
2620 1.774e-10, 1.667e-10, 1.577e-10, 1.502e-10, 1.437e-10, 1.394e-10,
2621 1.358e-10, 1.324e-10, 1.329e-10, 1.324e-10, 1.36e-10, 1.39e-10,
2622 1.424e-10, 1.544e-10, 1.651e-10, 1.817e-10, 1.984e-10, 2.195e-10,
2623 2.438e-10, 2.7e-10, 2.991e-10, 3.322e-10, 3.632e-10, 3.957e-10,
2624 4.36e-10, 4.701e-10, 5.03e-10, 5.381e-10, 5.793e-10, 6.19e-10,
2625 6.596e-10, 7.004e-10, 7.561e-10, 7.934e-10, 8.552e-10, 9.142e-10,
2626 9.57e-10, 1.027e-9, 1.097e-9, 1.193e-9, 1.334e-9, 1.47e-9,
2627 1.636e-9, 1.871e-9, 2.122e-9, 2.519e-9, 2.806e-9, 3.203e-9,
2628 3.846e-9, 4.362e-9, 5.114e-9, 5.643e-9, 6.305e-9, 6.981e-9,
2629 7.983e-9, 8.783e-9, 9.419e-9, 1.017e-8, 1.063e-8, 1.121e-8,
2630 1.13e-8, 1.201e-8, 1.225e-8, 1.232e-8, 1.223e-8, 1.177e-8,
2631 1.151e-8, 1.116e-8, 1.047e-8, 9.698e-9, 8.734e-9, 8.202e-9,
2632 7.041e-9, 6.074e-9, 5.172e-9, 4.468e-9, 3.913e-9, 3.414e-9,
2633 2.975e-9, 2.65e-9, 2.406e-9, 2.173e-9, 2.009e-9, 1.861e-9,
2634 1.727e-9, 1.612e-9, 1.514e-9, 1.43e-9, 1.362e-9, 1.333e-9,
2635 1.288e-9, 1.249e-9, 1.238e-9, 1.228e-9, 1.217e-9, 1.202e-9,
2636 1.209e-9, 1.177e-9, 1.157e-9, 1.165e-9, 1.142e-9, 1.131e-9,
2637 1.138e-9, 1.117e-9, 1.1e-9, 1.069e-9, 1.023e-9, 1.005e-9,
2638 9.159e-10, 8.863e-10, 7.865e-10, 7.153e-10, 6.247e-10, 5.846e-10,
2639 5.133e-10, 4.36e-10, 3.789e-10, 3.335e-10, 2.833e-10, 2.483e-10,
2640 2.155e-10, 1.918e-10, 1.709e-10, 1.529e-10, 1.374e-10, 1.235e-10,
2641 1.108e-10, 9.933e-11, 8.932e-11, 8.022e-11, 7.224e-11, 6.52e-11,
2642 5.896e-11, 5.328e-11, 4.813e-11, 4.365e-11, 3.961e-11, 3.594e-11,
2643 3.266e-11, 2.967e-11, 2.701e-11, 2.464e-11, 2.248e-11, 2.054e-11,
2644 1.878e-11, 1.721e-11, 1.579e-11, 1.453e-11, 1.341e-11, 1.241e-11,
2645 1.154e-11, 1.078e-11, 1.014e-11, 9.601e-12, 9.167e-12, 8.838e-12,
2646 8.614e-12, 8.493e-12, 8.481e-12, 8.581e-12, 8.795e-12, 9.131e-12,
2647 9.601e-12, 1.021e-11, 1.097e-11, 1.191e-11, 1.303e-11, 1.439e-11,
2648 1.601e-11, 1.778e-11, 1.984e-11, 2.234e-11, 2.474e-11, 2.766e-11,
2649 3.085e-11, 3.415e-11, 3.821e-11, 4.261e-11, 4.748e-11, 5.323e-11,
2650 5.935e-11, 6.619e-11, 7.418e-11, 8.294e-11, 9.26e-11, 1.039e-10,
2651 1.156e-10, 1.297e-10, 1.46e-10, 1.641e-10, 1.858e-10, 2.1e-10,
2652 2.383e-10, 2.724e-10, 3.116e-10, 3.538e-10, 4.173e-10, 4.727e-10,
2653 5.503e-10, 6.337e-10, 7.32e-10, 8.298e-10, 9.328e-10, 1.059e-9,
2654 1.176e-9, 1.328e-9, 1.445e-9, 1.593e-9, 1.77e-9, 1.954e-9,
2655 2.175e-9, 2.405e-9, 2.622e-9, 2.906e-9, 3.294e-9, 3.713e-9,
2656 3.98e-9, 4.384e-9, 4.987e-9, 5.311e-9, 5.874e-9, 6.337e-9,
2657 7.027e-9, 7.39e-9, 7.769e-9, 8.374e-9, 8.605e-9, 9.165e-9,
2658 9.415e-9, 9.511e-9, 9.704e-9, 9.588e-9, 9.45e-9, 9.086e-9,
2659 8.798e-9, 8.469e-9, 7.697e-9, 7.168e-9, 6.255e-9, 5.772e-9,
2660 4.97e-9, 4.271e-9, 3.653e-9, 3.154e-9, 2.742e-9, 2.435e-9,
2661 2.166e-9, 1.936e-9, 1.731e-9, 1.556e-9, 1.399e-9, 1.272e-9,
2662 1.157e-9, 1.066e-9, 9.844e-10, 9.258e-10, 8.787e-10, 8.421e-10,
2663 8.083e-10, 8.046e-10, 8.067e-10, 8.181e-10, 8.325e-10, 8.517e-10,
2664 9.151e-10, 9.351e-10, 9.677e-10, 1.071e-9, 1.126e-9, 1.219e-9,
2665 1.297e-9, 1.408e-9, 1.476e-9, 1.517e-9, 1.6e-9, 1.649e-9,
2666 1.678e-9, 1.746e-9, 1.742e-9, 1.728e-9, 1.699e-9, 1.655e-9,
2667 1.561e-9, 1.48e-9, 1.451e-9, 1.411e-9, 1.171e-9, 1.106e-9,
2668 9.714e-10, 8.523e-10, 7.346e-10, 6.241e-10, 5.371e-10, 4.704e-10,
2669 4.144e-10, 3.683e-10, 3.292e-10, 2.942e-10, 2.62e-10, 2.341e-10,
2670 2.104e-10, 1.884e-10, 1.7e-10, 1.546e-10, 1.394e-10, 1.265e-10,
2671 1.14e-10, 1.019e-10, 9.279e-11, 8.283e-11, 7.458e-11, 6.668e-11,
2672 5.976e-11, 5.33e-11, 4.794e-11, 4.289e-11, 3.841e-11, 3.467e-11,
2673 3.13e-11, 2.832e-11, 2.582e-11, 2.356e-11, 2.152e-11, 1.97e-11,
2674 1.808e-11, 1.664e-11, 1.539e-11, 1.434e-11, 1.344e-11, 1.269e-11,
2675 1.209e-11, 1.162e-11, 1.129e-11, 1.108e-11, 1.099e-11, 1.103e-11,
2676 1.119e-11, 1.148e-11, 1.193e-11, 1.252e-11, 1.329e-11, 1.421e-11,
2677 1.555e-11, 1.685e-11, 1.839e-11, 2.054e-11, 2.317e-11, 2.571e-11,
2678 2.839e-11, 3.171e-11, 3.49e-11, 3.886e-11, 4.287e-11, 4.645e-11,
2679 5.047e-11, 5.592e-11, 6.109e-11, 6.628e-11, 7.381e-11, 8.088e-11,
2680 8.966e-11, 1.045e-10, 1.12e-10, 1.287e-10, 1.486e-10, 1.662e-10,
2681 1.866e-10, 2.133e-10, 2.524e-10, 2.776e-10, 3.204e-10, 3.559e-10,
2682 4.028e-10, 4.448e-10, 4.882e-10, 5.244e-10, 5.605e-10, 6.018e-10,
2683 6.328e-10, 6.579e-10, 6.541e-10, 7.024e-10, 7.074e-10, 7.068e-10,
2684 7.009e-10, 6.698e-10, 6.545e-10, 6.209e-10, 5.834e-10, 5.412e-10,
2685 5.001e-10, 4.231e-10, 3.727e-10, 3.211e-10, 2.833e-10, 2.447e-10,
2686 2.097e-10, 1.843e-10, 1.639e-10, 1.449e-10, 1.27e-10, 1.161e-10,
2687 1.033e-10, 9.282e-11, 8.407e-11, 7.639e-11, 7.023e-11, 6.474e-11,
2688 6.142e-11, 5.76e-11, 5.568e-11, 5.472e-11, 5.39e-11, 5.455e-11,
2689 5.54e-11, 5.587e-11, 6.23e-11, 6.49e-11, 6.868e-11, 7.382e-11,
2690 8.022e-11, 8.372e-11, 9.243e-11, 1.004e-10, 1.062e-10, 1.13e-10,
2691 1.176e-10, 1.244e-10, 1.279e-10, 1.298e-10, 1.302e-10, 1.312e-10,
2692 1.295e-10, 1.244e-10, 1.211e-10, 1.167e-10, 1.098e-10, 9.927e-11,
2693 8.854e-11, 8.011e-11, 7.182e-11, 5.923e-11, 5.212e-11, 4.453e-11,
2694 3.832e-11, 3.371e-11, 2.987e-11, 2.651e-11, 2.354e-11, 2.093e-11,
2695 1.863e-11, 1.662e-11, 1.486e-11, 1.331e-11, 1.193e-11, 1.071e-11,
2696 9.628e-12, 8.66e-12, 7.801e-12, 7.031e-12, 6.347e-12, 5.733e-12,
2697 5.182e-12, 4.695e-12, 4.26e-12, 3.874e-12, 3.533e-12, 3.235e-12,
2698 2.979e-12, 2.76e-12, 2.579e-12, 2.432e-12, 2.321e-12, 2.246e-12,
2699 2.205e-12, 2.196e-12, 2.223e-12, 2.288e-12, 2.387e-12, 2.525e-12,
2700 2.704e-12, 2.925e-12, 3.191e-12, 3.508e-12, 3.876e-12, 4.303e-12,
2701 4.793e-12, 5.347e-12, 5.978e-12, 6.682e-12, 7.467e-12, 8.34e-12,
2702 9.293e-12, 1.035e-11, 1.152e-11, 1.285e-11, 1.428e-11, 1.586e-11,
2703 1.764e-11, 1.972e-11, 2.214e-11, 2.478e-11, 2.776e-11, 3.151e-11,
2704 3.591e-11, 4.103e-11, 4.66e-11, 5.395e-11, 6.306e-11, 7.172e-11,
2705 8.358e-11, 9.67e-11, 1.11e-10, 1.325e-10, 1.494e-10, 1.736e-10,
2706 2.007e-10, 2.296e-10, 2.608e-10, 3.004e-10, 3.361e-10, 3.727e-10,
2707 4.373e-10, 4.838e-10, 5.483e-10, 6.006e-10, 6.535e-10, 6.899e-10,
2708 7.687e-10, 8.444e-10, 8.798e-10, 9.135e-10, 9.532e-10, 9.757e-10,
2709 9.968e-10, 1.006e-9, 9.949e-10, 9.789e-10, 9.564e-10, 9.215e-10,
2710 8.51e-10, 8.394e-10, 7.707e-10, 7.152e-10, 6.274e-10, 5.598e-10,
2711 5.028e-10, 4.3e-10, 3.71e-10, 3.245e-10, 2.809e-10, 2.461e-10,
2712 2.154e-10, 1.91e-10, 1.685e-10, 1.487e-10, 1.313e-10, 1.163e-10,
2713 1.031e-10, 9.172e-11, 8.221e-11, 7.382e-11, 6.693e-11, 6.079e-11,
2714 5.581e-11, 5.167e-11, 4.811e-11, 4.506e-11, 4.255e-11, 4.083e-11,
2715 3.949e-11, 3.881e-11, 3.861e-11, 3.858e-11, 3.951e-11, 4.045e-11,
2716 4.24e-11, 4.487e-11, 4.806e-11, 5.133e-11, 5.518e-11, 5.919e-11,
2717 6.533e-11, 7.031e-11, 7.762e-11, 8.305e-11, 9.252e-11, 9.727e-11,
2718 1.045e-10, 1.117e-10, 1.2e-10, 1.275e-10, 1.341e-10, 1.362e-10,
2719 1.438e-10, 1.45e-10, 1.455e-10, 1.455e-10, 1.434e-10, 1.381e-10,
2720 1.301e-10, 1.276e-10, 1.163e-10, 1.089e-10, 9.911e-11, 8.943e-11,
2721 7.618e-11, 6.424e-11, 5.717e-11, 4.866e-11, 4.257e-11, 3.773e-11,
2722 3.331e-11, 2.958e-11, 2.629e-11, 2.316e-11, 2.073e-11, 1.841e-11,
2723 1.635e-11, 1.464e-11, 1.31e-11, 1.16e-11, 1.047e-11, 9.408e-12,
2724 8.414e-12, 7.521e-12, 6.705e-12, 5.993e-12, 5.371e-12, 4.815e-12,
2725 4.338e-12, 3.921e-12, 3.567e-12, 3.265e-12, 3.01e-12, 2.795e-12,
2726 2.613e-12, 2.464e-12, 2.346e-12, 2.256e-12, 2.195e-12, 2.165e-12,
2727 2.166e-12, 2.198e-12, 2.262e-12, 2.364e-12, 2.502e-12, 2.682e-12,
2728 2.908e-12, 3.187e-12, 3.533e-12, 3.946e-12, 4.418e-12, 5.013e-12,
2729 5.708e-12, 6.379e-12, 7.43e-12, 8.39e-12, 9.51e-12, 1.078e-11,
2730 1.259e-11, 1.438e-11, 1.63e-11, 1.814e-11, 2.055e-11, 2.348e-11,
2731 2.664e-11, 2.956e-11, 3.3e-11, 3.677e-11, 4.032e-11, 4.494e-11,
2732 4.951e-11, 5.452e-11, 6.014e-11, 6.5e-11, 6.915e-11, 7.45e-11,
2733 7.971e-11, 8.468e-11, 8.726e-11, 8.995e-11, 9.182e-11, 9.509e-11,
2734 9.333e-11, 9.386e-11, 9.457e-11, 9.21e-11, 9.019e-11, 8.68e-11,
2735 8.298e-11, 7.947e-11, 7.46e-11, 7.082e-11, 6.132e-11, 5.855e-11,
2736 5.073e-11, 4.464e-11, 3.825e-11, 3.375e-11, 2.911e-11, 2.535e-11,
2737 2.16e-11, 1.907e-11, 1.665e-11, 1.463e-11, 1.291e-11, 1.133e-11,
2738 9.997e-12, 8.836e-12, 7.839e-12, 6.943e-12, 6.254e-12, 5.6e-12,
2739 5.029e-12, 4.529e-12, 4.102e-12, 3.737e-12, 3.428e-12, 3.169e-12,
2740 2.959e-12, 2.798e-12, 2.675e-12, 2.582e-12, 2.644e-12, 2.557e-12,
2741 2.614e-12, 2.717e-12, 2.874e-12, 3.056e-12, 3.187e-12, 3.631e-12,
2742 3.979e-12, 4.248e-12, 4.817e-12, 5.266e-12, 5.836e-12, 6.365e-12,
2743 6.807e-12, 7.47e-12, 7.951e-12, 8.636e-12, 8.972e-12, 9.314e-12,
2744 9.445e-12, 1.003e-11, 1.013e-11, 9.937e-12, 9.729e-12, 9.064e-12,
2745 9.119e-12, 9.124e-12, 8.704e-12, 8.078e-12, 7.47e-12, 6.329e-12,
2746 5.674e-12, 4.808e-12, 4.119e-12, 3.554e-12, 3.103e-12, 2.731e-12,
2747 2.415e-12, 2.15e-12, 1.926e-12, 1.737e-12, 1.578e-12, 1.447e-12,
2748 1.34e-12, 1.255e-12, 1.191e-12, 1.146e-12, 1.121e-12, 1.114e-12,
2749 1.126e-12, 1.156e-12, 1.207e-12, 1.278e-12, 1.372e-12, 1.49e-12,
2750 1.633e-12, 1.805e-12, 2.01e-12, 2.249e-12, 2.528e-12, 2.852e-12,
2751 3.228e-12, 3.658e-12, 4.153e-12, 4.728e-12, 5.394e-12, 6.176e-12,
2752 7.126e-12, 8.188e-12, 9.328e-12, 1.103e-11, 1.276e-11, 1.417e-11,
2753 1.615e-11, 1.84e-11, 2.155e-11, 2.429e-11, 2.826e-11, 3.222e-11,
2754 3.664e-11, 4.14e-11, 4.906e-11, 5.536e-11, 6.327e-11, 7.088e-11,
2755 8.316e-11, 9.242e-11, 1.07e-10, 1.223e-10, 1.341e-10, 1.553e-10,
2756 1.703e-10, 1.9e-10, 2.022e-10, 2.233e-10, 2.345e-10, 2.438e-10,
2757 2.546e-10, 2.599e-10, 2.661e-10, 2.703e-10, 2.686e-10, 2.662e-10,
2758 2.56e-10, 2.552e-10, 2.378e-10, 2.252e-10, 2.146e-10, 1.885e-10,
2759 1.668e-10, 1.441e-10, 1.295e-10, 1.119e-10, 9.893e-11, 8.687e-11,
2760 7.678e-11, 6.685e-11, 5.879e-11, 5.127e-11, 4.505e-11, 3.997e-11,
2764 static const double h2ofrn[2001] = { .01095, .01126, .01205, .01322, .0143,
2765 .01506, .01548, .01534, .01486, .01373, .01262, .01134, .01001,
2766 .008702, .007475, .006481, .00548, .0046, .003833, .00311,
2767 .002543, .002049, .00168, .001374, .001046, 8.193e-4, 6.267e-4,
2768 4.968e-4, 3.924e-4, 2.983e-4, 2.477e-4, 1.997e-4, 1.596e-4,
2769 1.331e-4, 1.061e-4, 8.942e-5, 7.168e-5, 5.887e-5, 4.848e-5,
2770 3.817e-5, 3.17e-5, 2.579e-5, 2.162e-5, 1.768e-5, 1.49e-5,
2771 1.231e-5, 1.013e-5, 8.555e-6, 7.328e-6, 6.148e-6, 5.207e-6,
2772 4.387e-6, 3.741e-6, 3.22e-6, 2.753e-6, 2.346e-6, 1.985e-6,
2773 1.716e-6, 1.475e-6, 1.286e-6, 1.122e-6, 9.661e-7, 8.284e-7,
2774 7.057e-7, 6.119e-7, 5.29e-7, 4.571e-7, 3.948e-7, 3.432e-7,
2775 2.983e-7, 2.589e-7, 2.265e-7, 1.976e-7, 1.704e-7, 1.456e-7,
2776 1.26e-7, 1.101e-7, 9.648e-8, 8.415e-8, 7.34e-8, 6.441e-8,
2777 5.643e-8, 4.94e-8, 4.276e-8, 3.703e-8, 3.227e-8, 2.825e-8,
2778 2.478e-8, 2.174e-8, 1.898e-8, 1.664e-8, 1.458e-8, 1.278e-8,
2779 1.126e-8, 9.891e-9, 8.709e-9, 7.652e-9, 6.759e-9, 5.975e-9,
2780 5.31e-9, 4.728e-9, 4.214e-9, 3.792e-9, 3.463e-9, 3.226e-9,
2781 2.992e-9, 2.813e-9, 2.749e-9, 2.809e-9, 2.913e-9, 3.037e-9,
2782 3.413e-9, 3.738e-9, 4.189e-9, 4.808e-9, 5.978e-9, 7.088e-9,
2783 8.071e-9, 9.61e-9, 1.21e-8, 1.5e-8, 1.764e-8, 2.221e-8, 2.898e-8,
2784 3.948e-8, 5.068e-8, 6.227e-8, 7.898e-8, 1.033e-7, 1.437e-7,
2785 1.889e-7, 2.589e-7, 3.59e-7, 4.971e-7, 7.156e-7, 9.983e-7,
2786 1.381e-6, 1.929e-6, 2.591e-6, 3.453e-6, 4.57e-6, 5.93e-6,
2787 7.552e-6, 9.556e-6, 1.183e-5, 1.425e-5, 1.681e-5, 1.978e-5,
2788 2.335e-5, 2.668e-5, 3.022e-5, 3.371e-5, 3.715e-5, 3.967e-5,
2789 4.06e-5, 4.01e-5, 3.809e-5, 3.491e-5, 3.155e-5, 2.848e-5,
2790 2.678e-5, 2.66e-5, 2.811e-5, 3.071e-5, 3.294e-5, 3.459e-5,
2791 3.569e-5, 3.56e-5, 3.434e-5, 3.186e-5, 2.916e-5, 2.622e-5,
2792 2.275e-5, 1.918e-5, 1.62e-5, 1.373e-5, 1.182e-5, 1.006e-5,
2793 8.556e-6, 7.26e-6, 6.107e-6, 5.034e-6, 4.211e-6, 3.426e-6,
2794 2.865e-6, 2.446e-6, 1.998e-6, 1.628e-6, 1.242e-6, 1.005e-6,
2795 7.853e-7, 6.21e-7, 5.071e-7, 4.156e-7, 3.548e-7, 2.825e-7,
2796 2.261e-7, 1.916e-7, 1.51e-7, 1.279e-7, 1.059e-7, 9.14e-8,
2797 7.707e-8, 6.17e-8, 5.311e-8, 4.263e-8, 3.518e-8, 2.961e-8,
2798 2.457e-8, 2.119e-8, 1.712e-8, 1.439e-8, 1.201e-8, 1.003e-8,
2799 8.564e-9, 7.199e-9, 6.184e-9, 5.206e-9, 4.376e-9, 3.708e-9,
2800 3.157e-9, 2.725e-9, 2.361e-9, 2.074e-9, 1.797e-9, 1.562e-9,
2801 1.364e-9, 1.196e-9, 1.042e-9, 8.862e-10, 7.648e-10, 6.544e-10,
2802 5.609e-10, 4.791e-10, 4.108e-10, 3.531e-10, 3.038e-10, 2.618e-10,
2803 2.268e-10, 1.969e-10, 1.715e-10, 1.496e-10, 1.308e-10, 1.147e-10,
2804 1.008e-10, 8.894e-11, 7.885e-11, 7.031e-11, 6.355e-11, 5.854e-11,
2805 5.534e-11, 5.466e-11, 5.725e-11, 6.447e-11, 7.943e-11, 1.038e-10,
2806 1.437e-10, 2.04e-10, 2.901e-10, 4.051e-10, 5.556e-10, 7.314e-10,
2807 9.291e-10, 1.134e-9, 1.321e-9, 1.482e-9, 1.596e-9, 1.669e-9,
2808 1.715e-9, 1.762e-9, 1.817e-9, 1.828e-9, 1.848e-9, 1.873e-9,
2809 1.902e-9, 1.894e-9, 1.864e-9, 1.841e-9, 1.797e-9, 1.704e-9,
2810 1.559e-9, 1.382e-9, 1.187e-9, 1.001e-9, 8.468e-10, 7.265e-10,
2811 6.521e-10, 6.381e-10, 6.66e-10, 7.637e-10, 9.705e-10, 1.368e-9,
2812 1.856e-9, 2.656e-9, 3.954e-9, 5.96e-9, 8.72e-9, 1.247e-8,
2813 1.781e-8, 2.491e-8, 3.311e-8, 4.272e-8, 5.205e-8, 6.268e-8,
2814 7.337e-8, 8.277e-8, 9.185e-8, 1.004e-7, 1.091e-7, 1.159e-7,
2815 1.188e-7, 1.175e-7, 1.124e-7, 1.033e-7, 9.381e-8, 8.501e-8,
2816 7.956e-8, 7.894e-8, 8.331e-8, 9.102e-8, 9.836e-8, 1.035e-7,
2817 1.064e-7, 1.06e-7, 1.032e-7, 9.808e-8, 9.139e-8, 8.442e-8,
2818 7.641e-8, 6.881e-8, 6.161e-8, 5.404e-8, 4.804e-8, 4.446e-8,
2819 4.328e-8, 4.259e-8, 4.421e-8, 4.673e-8, 4.985e-8, 5.335e-8,
2820 5.796e-8, 6.542e-8, 7.714e-8, 8.827e-8, 1.04e-7, 1.238e-7,
2821 1.499e-7, 1.829e-7, 2.222e-7, 2.689e-7, 3.303e-7, 3.981e-7,
2822 4.84e-7, 5.91e-7, 7.363e-7, 9.087e-7, 1.139e-6, 1.455e-6,
2823 1.866e-6, 2.44e-6, 3.115e-6, 3.941e-6, 4.891e-6, 5.992e-6,
2824 7.111e-6, 8.296e-6, 9.21e-6, 9.987e-6, 1.044e-5, 1.073e-5,
2825 1.092e-5, 1.106e-5, 1.138e-5, 1.171e-5, 1.186e-5, 1.186e-5,
2826 1.179e-5, 1.166e-5, 1.151e-5, 1.16e-5, 1.197e-5, 1.241e-5,
2827 1.268e-5, 1.26e-5, 1.184e-5, 1.063e-5, 9.204e-6, 7.584e-6,
2828 6.053e-6, 4.482e-6, 3.252e-6, 2.337e-6, 1.662e-6, 1.18e-6,
2829 8.15e-7, 5.95e-7, 4.354e-7, 3.302e-7, 2.494e-7, 1.93e-7,
2830 1.545e-7, 1.25e-7, 1.039e-7, 8.602e-8, 7.127e-8, 5.897e-8,
2831 4.838e-8, 4.018e-8, 3.28e-8, 2.72e-8, 2.307e-8, 1.972e-8,
2832 1.654e-8, 1.421e-8, 1.174e-8, 1.004e-8, 8.739e-9, 7.358e-9,
2833 6.242e-9, 5.303e-9, 4.567e-9, 3.94e-9, 3.375e-9, 2.864e-9,
2834 2.422e-9, 2.057e-9, 1.75e-9, 1.505e-9, 1.294e-9, 1.101e-9,
2835 9.401e-10, 8.018e-10, 6.903e-10, 5.965e-10, 5.087e-10, 4.364e-10,
2836 3.759e-10, 3.247e-10, 2.809e-10, 2.438e-10, 2.123e-10, 1.853e-10,
2837 1.622e-10, 1.426e-10, 1.26e-10, 1.125e-10, 1.022e-10, 9.582e-11,
2838 9.388e-11, 9.801e-11, 1.08e-10, 1.276e-10, 1.551e-10, 1.903e-10,
2839 2.291e-10, 2.724e-10, 3.117e-10, 3.4e-10, 3.562e-10, 3.625e-10,
2840 3.619e-10, 3.429e-10, 3.221e-10, 2.943e-10, 2.645e-10, 2.338e-10,
2841 2.062e-10, 1.901e-10, 1.814e-10, 1.827e-10, 1.906e-10, 1.984e-10,
2842 2.04e-10, 2.068e-10, 2.075e-10, 2.018e-10, 1.959e-10, 1.897e-10,
2843 1.852e-10, 1.791e-10, 1.696e-10, 1.634e-10, 1.598e-10, 1.561e-10,
2844 1.518e-10, 1.443e-10, 1.377e-10, 1.346e-10, 1.342e-10, 1.375e-10,
2845 1.525e-10, 1.767e-10, 2.108e-10, 2.524e-10, 2.981e-10, 3.477e-10,
2846 4.262e-10, 5.326e-10, 6.646e-10, 8.321e-10, 1.069e-9, 1.386e-9,
2847 1.743e-9, 2.216e-9, 2.808e-9, 3.585e-9, 4.552e-9, 5.907e-9,
2848 7.611e-9, 9.774e-9, 1.255e-8, 1.666e-8, 2.279e-8, 3.221e-8,
2849 4.531e-8, 6.4e-8, 9.187e-8, 1.295e-7, 1.825e-7, 2.431e-7,
2850 3.181e-7, 4.009e-7, 4.941e-7, 5.88e-7, 6.623e-7, 7.155e-7,
2851 7.451e-7, 7.594e-7, 7.541e-7, 7.467e-7, 7.527e-7, 7.935e-7,
2852 8.461e-7, 8.954e-7, 9.364e-7, 9.843e-7, 1.024e-6, 1.05e-6,
2853 1.059e-6, 1.074e-6, 1.072e-6, 1.043e-6, 9.789e-7, 8.803e-7,
2854 7.662e-7, 6.378e-7, 5.133e-7, 3.958e-7, 2.914e-7, 2.144e-7,
2855 1.57e-7, 1.14e-7, 8.47e-8, 6.2e-8, 4.657e-8, 3.559e-8, 2.813e-8,
2856 2.222e-8, 1.769e-8, 1.391e-8, 1.125e-8, 9.186e-9, 7.704e-9,
2857 6.447e-9, 5.381e-9, 4.442e-9, 3.669e-9, 3.057e-9, 2.564e-9,
2858 2.153e-9, 1.784e-9, 1.499e-9, 1.281e-9, 1.082e-9, 9.304e-10,
2859 8.169e-10, 6.856e-10, 5.866e-10, 5.043e-10, 4.336e-10, 3.731e-10,
2860 3.175e-10, 2.745e-10, 2.374e-10, 2.007e-10, 1.737e-10, 1.508e-10,
2861 1.302e-10, 1.13e-10, 9.672e-11, 8.375e-11, 7.265e-11, 6.244e-11,
2862 5.343e-11, 4.654e-11, 3.975e-11, 3.488e-11, 3.097e-11, 2.834e-11,
2863 2.649e-11, 2.519e-11, 2.462e-11, 2.443e-11, 2.44e-11, 2.398e-11,
2864 2.306e-11, 2.183e-11, 2.021e-11, 1.821e-11, 1.599e-11, 1.403e-11,
2865 1.196e-11, 1.023e-11, 8.728e-12, 7.606e-12, 6.941e-12, 6.545e-12,
2866 6.484e-12, 6.6e-12, 6.718e-12, 6.785e-12, 6.746e-12, 6.724e-12,
2867 6.764e-12, 6.995e-12, 7.144e-12, 7.32e-12, 7.33e-12, 7.208e-12,
2868 6.789e-12, 6.09e-12, 5.337e-12, 4.62e-12, 4.037e-12, 3.574e-12,
2869 3.311e-12, 3.346e-12, 3.566e-12, 3.836e-12, 4.076e-12, 4.351e-12,
2870 4.691e-12, 5.114e-12, 5.427e-12, 6.167e-12, 7.436e-12, 8.842e-12,
2871 1.038e-11, 1.249e-11, 1.54e-11, 1.915e-11, 2.48e-11, 3.256e-11,
2872 4.339e-11, 5.611e-11, 7.519e-11, 1.037e-10, 1.409e-10, 1.883e-10,
2873 2.503e-10, 3.38e-10, 4.468e-10, 5.801e-10, 7.335e-10, 8.98e-10,
2874 1.11e-9, 1.363e-9, 1.677e-9, 2.104e-9, 2.681e-9, 3.531e-9,
2875 4.621e-9, 6.106e-9, 8.154e-9, 1.046e-8, 1.312e-8, 1.607e-8,
2876 1.948e-8, 2.266e-8, 2.495e-8, 2.655e-8, 2.739e-8, 2.739e-8,
2877 2.662e-8, 2.589e-8, 2.59e-8, 2.664e-8, 2.833e-8, 3.023e-8,
2878 3.305e-8, 3.558e-8, 3.793e-8, 3.961e-8, 4.056e-8, 4.102e-8,
2879 4.025e-8, 3.917e-8, 3.706e-8, 3.493e-8, 3.249e-8, 3.096e-8,
2880 3.011e-8, 3.111e-8, 3.395e-8, 3.958e-8, 4.875e-8, 6.066e-8,
2881 7.915e-8, 1.011e-7, 1.3e-7, 1.622e-7, 2.003e-7, 2.448e-7,
2882 2.863e-7, 3.317e-7, 3.655e-7, 3.96e-7, 4.098e-7, 4.168e-7,
2883 4.198e-7, 4.207e-7, 4.289e-7, 4.384e-7, 4.471e-7, 4.524e-7,
2884 4.574e-7, 4.633e-7, 4.785e-7, 5.028e-7, 5.371e-7, 5.727e-7,
2885 5.955e-7, 5.998e-7, 5.669e-7, 5.082e-7, 4.397e-7, 3.596e-7,
2886 2.814e-7, 2.074e-7, 1.486e-7, 1.057e-7, 7.25e-8, 4.946e-8,
2887 3.43e-8, 2.447e-8, 1.793e-8, 1.375e-8, 1.096e-8, 9.091e-9,
2888 7.709e-9, 6.631e-9, 5.714e-9, 4.886e-9, 4.205e-9, 3.575e-9,
2889 3.07e-9, 2.631e-9, 2.284e-9, 2.002e-9, 1.745e-9, 1.509e-9,
2890 1.284e-9, 1.084e-9, 9.163e-10, 7.663e-10, 6.346e-10, 5.283e-10,
2891 4.354e-10, 3.59e-10, 2.982e-10, 2.455e-10, 2.033e-10, 1.696e-10,
2892 1.432e-10, 1.211e-10, 1.02e-10, 8.702e-11, 7.38e-11, 6.293e-11,
2893 5.343e-11, 4.532e-11, 3.907e-11, 3.365e-11, 2.945e-11, 2.558e-11,
2894 2.192e-11, 1.895e-11, 1.636e-11, 1.42e-11, 1.228e-11, 1.063e-11,
2895 9.348e-12, 8.2e-12, 7.231e-12, 6.43e-12, 5.702e-12, 5.052e-12,
2896 4.469e-12, 4e-12, 3.679e-12, 3.387e-12, 3.197e-12, 3.158e-12,
2897 3.327e-12, 3.675e-12, 4.292e-12, 5.437e-12, 7.197e-12, 1.008e-11,
2898 1.437e-11, 2.035e-11, 2.905e-11, 4.062e-11, 5.528e-11, 7.177e-11,
2899 9.064e-11, 1.109e-10, 1.297e-10, 1.473e-10, 1.652e-10, 1.851e-10,
2900 2.079e-10, 2.313e-10, 2.619e-10, 2.958e-10, 3.352e-10, 3.796e-10,
2901 4.295e-10, 4.923e-10, 5.49e-10, 5.998e-10, 6.388e-10, 6.645e-10,
2902 6.712e-10, 6.549e-10, 6.38e-10, 6.255e-10, 6.253e-10, 6.459e-10,
2903 6.977e-10, 7.59e-10, 8.242e-10, 8.92e-10, 9.403e-10, 9.701e-10,
2904 9.483e-10, 9.135e-10, 8.617e-10, 7.921e-10, 7.168e-10, 6.382e-10,
2905 5.677e-10, 5.045e-10, 4.572e-10, 4.312e-10, 4.145e-10, 4.192e-10,
2906 4.541e-10, 5.368e-10, 6.771e-10, 8.962e-10, 1.21e-9, 1.659e-9,
2907 2.33e-9, 3.249e-9, 4.495e-9, 5.923e-9, 7.642e-9, 9.607e-9,
2908 1.178e-8, 1.399e-8, 1.584e-8, 1.73e-8, 1.816e-8, 1.87e-8,
2909 1.868e-8, 1.87e-8, 1.884e-8, 1.99e-8, 2.15e-8, 2.258e-8,
2910 2.364e-8, 2.473e-8, 2.602e-8, 2.689e-8, 2.731e-8, 2.816e-8,
2911 2.859e-8, 2.839e-8, 2.703e-8, 2.451e-8, 2.149e-8, 1.787e-8,
2912 1.449e-8, 1.111e-8, 8.282e-9, 6.121e-9, 4.494e-9, 3.367e-9,
2913 2.487e-9, 1.885e-9, 1.503e-9, 1.249e-9, 1.074e-9, 9.427e-10,
2914 8.439e-10, 7.563e-10, 6.772e-10, 6.002e-10, 5.254e-10, 4.588e-10,
2915 3.977e-10, 3.449e-10, 3.003e-10, 2.624e-10, 2.335e-10, 2.04e-10,
2916 1.771e-10, 1.534e-10, 1.296e-10, 1.097e-10, 9.173e-11, 7.73e-11,
2917 6.547e-11, 5.191e-11, 4.198e-11, 3.361e-11, 2.732e-11, 2.244e-11,
2918 1.791e-11, 1.509e-11, 1.243e-11, 1.035e-11, 8.969e-12, 7.394e-12,
2919 6.323e-12, 5.282e-12, 4.543e-12, 3.752e-12, 3.14e-12, 2.6e-12,
2920 2.194e-12, 1.825e-12, 1.511e-12, 1.245e-12, 1.024e-12, 8.539e-13,
2921 7.227e-13, 6.102e-13, 5.189e-13, 4.43e-13, 3.774e-13, 3.236e-13,
2922 2.8e-13, 2.444e-13, 2.156e-13, 1.932e-13, 1.775e-13, 1.695e-13,
2923 1.672e-13, 1.704e-13, 1.825e-13, 2.087e-13, 2.614e-13, 3.377e-13,
2924 4.817e-13, 6.989e-13, 1.062e-12, 1.562e-12, 2.288e-12, 3.295e-12,
2925 4.55e-12, 5.965e-12, 7.546e-12, 9.395e-12, 1.103e-11, 1.228e-11,
2926 1.318e-11, 1.38e-11, 1.421e-11, 1.39e-11, 1.358e-11, 1.336e-11,
2927 1.342e-11, 1.356e-11, 1.424e-11, 1.552e-11, 1.73e-11, 1.951e-11,
2928 2.128e-11, 2.249e-11, 2.277e-11, 2.226e-11, 2.111e-11, 1.922e-11,
2929 1.775e-11, 1.661e-11, 1.547e-11, 1.446e-11, 1.323e-11, 1.21e-11,
2930 1.054e-11, 9.283e-12, 8.671e-12, 8.67e-12, 9.429e-12, 1.062e-11,
2931 1.255e-11, 1.506e-11, 1.818e-11, 2.26e-11, 2.831e-11, 3.723e-11,
2932 5.092e-11, 6.968e-11, 9.826e-11, 1.349e-10, 1.87e-10, 2.58e-10,
2933 3.43e-10, 4.424e-10, 5.521e-10, 6.812e-10, 8.064e-10, 9.109e-10,
2934 9.839e-10, 1.028e-9, 1.044e-9, 1.029e-9, 1.005e-9, 1.002e-9,
2935 1.038e-9, 1.122e-9, 1.233e-9, 1.372e-9, 1.524e-9, 1.665e-9,
2936 1.804e-9, 1.908e-9, 2.015e-9, 2.117e-9, 2.219e-9, 2.336e-9,
2937 2.531e-9, 2.805e-9, 3.189e-9, 3.617e-9, 4.208e-9, 4.911e-9,
2938 5.619e-9, 6.469e-9, 7.188e-9, 7.957e-9, 8.503e-9, 9.028e-9,
2939 9.571e-9, 9.99e-9, 1.055e-8, 1.102e-8, 1.132e-8, 1.141e-8,
2940 1.145e-8, 1.145e-8, 1.176e-8, 1.224e-8, 1.304e-8, 1.388e-8,
2941 1.445e-8, 1.453e-8, 1.368e-8, 1.22e-8, 1.042e-8, 8.404e-9,
2942 6.403e-9, 4.643e-9, 3.325e-9, 2.335e-9, 1.638e-9, 1.19e-9,
2943 9.161e-10, 7.412e-10, 6.226e-10, 5.516e-10, 5.068e-10, 4.831e-10,
2944 4.856e-10, 5.162e-10, 5.785e-10, 6.539e-10, 7.485e-10, 8.565e-10,
2945 9.534e-10, 1.052e-9, 1.115e-9, 1.173e-9, 1.203e-9, 1.224e-9,
2946 1.243e-9, 1.248e-9, 1.261e-9, 1.265e-9, 1.25e-9, 1.217e-9,
2947 1.176e-9, 1.145e-9, 1.153e-9, 1.199e-9, 1.278e-9, 1.366e-9,
2948 1.426e-9, 1.444e-9, 1.365e-9, 1.224e-9, 1.051e-9, 8.539e-10,
2949 6.564e-10, 4.751e-10, 3.404e-10, 2.377e-10, 1.631e-10, 1.114e-10,
2950 7.87e-11, 5.793e-11, 4.284e-11, 3.3e-11, 2.62e-11, 2.152e-11,
2951 1.777e-11, 1.496e-11, 1.242e-11, 1.037e-11, 8.725e-12, 7.004e-12,
2952 5.718e-12, 4.769e-12, 3.952e-12, 3.336e-12, 2.712e-12, 2.213e-12,
2953 1.803e-12, 1.492e-12, 1.236e-12, 1.006e-12, 8.384e-13, 7.063e-13,
2954 5.879e-13, 4.93e-13, 4.171e-13, 3.569e-13, 3.083e-13, 2.688e-13,
2955 2.333e-13, 2.035e-13, 1.82e-13, 1.682e-13, 1.635e-13, 1.674e-13,
2956 1.769e-13, 2.022e-13, 2.485e-13, 3.127e-13, 4.25e-13, 5.928e-13,
2957 8.514e-13, 1.236e-12, 1.701e-12, 2.392e-12, 3.231e-12, 4.35e-12,
2958 5.559e-12, 6.915e-12, 8.519e-12, 1.013e-11, 1.146e-11, 1.24e-11,
2959 1.305e-11, 1.333e-11, 1.318e-11, 1.263e-11, 1.238e-11, 1.244e-11,
2960 1.305e-11, 1.432e-11, 1.623e-11, 1.846e-11, 2.09e-11, 2.328e-11,
2961 2.526e-11, 2.637e-11, 2.702e-11, 2.794e-11, 2.889e-11, 2.989e-11,
2962 3.231e-11, 3.68e-11, 4.375e-11, 5.504e-11, 7.159e-11, 9.502e-11,
2963 1.279e-10, 1.645e-10, 2.098e-10, 2.618e-10, 3.189e-10, 3.79e-10,
2964 4.303e-10, 4.753e-10, 5.027e-10, 5.221e-10, 5.293e-10, 5.346e-10,
2965 5.467e-10, 5.796e-10, 6.2e-10, 6.454e-10, 6.705e-10, 6.925e-10,
2966 7.233e-10, 7.35e-10, 7.538e-10, 7.861e-10, 8.077e-10, 8.132e-10,
2967 7.749e-10, 7.036e-10, 6.143e-10, 5.093e-10, 4.089e-10, 3.092e-10,
2968 2.299e-10, 1.705e-10, 1.277e-10, 9.723e-11, 7.533e-11, 6.126e-11,
2969 5.154e-11, 4.428e-11, 3.913e-11, 3.521e-11, 3.297e-11, 3.275e-11,
2970 3.46e-11, 3.798e-11, 4.251e-11, 4.745e-11, 5.232e-11, 5.606e-11,
2971 5.82e-11, 5.88e-11, 5.79e-11, 5.661e-11, 5.491e-11, 5.366e-11,
2972 5.341e-11, 5.353e-11, 5.336e-11, 5.293e-11, 5.248e-11, 5.235e-11,
2973 5.208e-11, 5.322e-11, 5.521e-11, 5.725e-11, 5.827e-11, 5.685e-11,
2974 5.245e-11, 4.612e-11, 3.884e-11, 3.129e-11, 2.404e-11, 1.732e-11,
2975 1.223e-11, 8.574e-12, 5.888e-12, 3.986e-12, 2.732e-12, 1.948e-12,
2976 1.414e-12, 1.061e-12, 8.298e-13, 6.612e-13, 5.413e-13, 4.472e-13,
2977 3.772e-13, 3.181e-13, 2.645e-13, 2.171e-13, 1.778e-13, 1.464e-13,
2978 1.183e-13, 9.637e-14, 7.991e-14, 6.668e-14, 5.57e-14, 4.663e-14,
2979 3.848e-14, 3.233e-14, 2.706e-14, 2.284e-14, 1.944e-14, 1.664e-14,
2980 1.43e-14, 1.233e-14, 1.066e-14, 9.234e-15, 8.023e-15, 6.993e-15,
2981 6.119e-15, 5.384e-15, 4.774e-15, 4.283e-15, 3.916e-15, 3.695e-15,
2982 3.682e-15, 4.004e-15, 4.912e-15, 6.853e-15, 1.056e-14, 1.712e-14,
2983 2.804e-14, 4.516e-14, 7.113e-14, 1.084e-13, 1.426e-13, 1.734e-13,
2984 1.978e-13, 2.194e-13, 2.388e-13, 2.489e-13, 2.626e-13, 2.865e-13,
2985 3.105e-13, 3.387e-13, 3.652e-13, 3.984e-13, 4.398e-13, 4.906e-13,
2986 5.55e-13, 6.517e-13, 7.813e-13, 9.272e-13, 1.164e-12, 1.434e-12,
2987 1.849e-12, 2.524e-12, 3.328e-12, 4.523e-12, 6.108e-12, 8.207e-12,
2988 1.122e-11, 1.477e-11, 1.9e-11, 2.412e-11, 2.984e-11, 3.68e-11,
2989 4.353e-11, 4.963e-11, 5.478e-11, 5.903e-11, 6.233e-11, 6.483e-11,
2990 6.904e-11, 7.569e-11, 8.719e-11, 1.048e-10, 1.278e-10, 1.557e-10,
2991 1.869e-10, 2.218e-10, 2.61e-10, 2.975e-10, 3.371e-10, 3.746e-10,
2992 4.065e-10, 4.336e-10, 4.503e-10, 4.701e-10, 4.8e-10, 4.917e-10,
2993 5.038e-10, 5.128e-10, 5.143e-10, 5.071e-10, 5.019e-10, 5.025e-10,
2994 5.183e-10, 5.496e-10, 5.877e-10, 6.235e-10, 6.42e-10, 6.234e-10,
2995 5.698e-10, 4.916e-10, 4.022e-10, 3.126e-10, 2.282e-10, 1.639e-10,
2996 1.142e-10, 7.919e-11, 5.69e-11, 4.313e-11, 3.413e-11, 2.807e-11,
2997 2.41e-11, 2.166e-11, 2.024e-11, 1.946e-11, 1.929e-11, 1.963e-11,
2998 2.035e-11, 2.162e-11, 2.305e-11, 2.493e-11, 2.748e-11, 3.048e-11,
2999 3.413e-11, 3.754e-11, 4.155e-11, 4.635e-11, 5.11e-11, 5.734e-11,
3000 6.338e-11, 6.99e-11, 7.611e-11, 8.125e-11, 8.654e-11, 8.951e-11,
3001 9.182e-11, 9.31e-11, 9.273e-11, 9.094e-11, 8.849e-11, 8.662e-11,
3002 8.67e-11, 8.972e-11, 9.566e-11, 1.025e-10, 1.083e-10, 1.111e-10,
3003 1.074e-10, 9.771e-11, 8.468e-11, 6.958e-11, 5.47e-11, 4.04e-11,
3004 2.94e-11, 2.075e-11, 1.442e-11, 1.01e-11, 7.281e-12, 5.409e-12,
3005 4.138e-12, 3.304e-12, 2.784e-12, 2.473e-12, 2.273e-12, 2.186e-12,
3006 2.118e-12, 2.066e-12, 1.958e-12, 1.818e-12, 1.675e-12, 1.509e-12,
3007 1.349e-12, 1.171e-12, 9.838e-13, 8.213e-13, 6.765e-13, 5.378e-13,
3008 4.161e-13, 3.119e-13, 2.279e-13, 1.637e-13, 1.152e-13, 8.112e-14,
3009 5.919e-14, 4.47e-14, 3.492e-14, 2.811e-14, 2.319e-14, 1.948e-14,
3010 1.66e-14, 1.432e-14, 1.251e-14, 1.109e-14, 1.006e-14, 9.45e-15,
3011 9.384e-15, 1.012e-14, 1.216e-14, 1.636e-14, 2.305e-14, 3.488e-14,
3012 5.572e-14, 8.479e-14, 1.265e-13, 1.905e-13, 2.73e-13, 3.809e-13,
3013 4.955e-13, 6.303e-13, 7.861e-13, 9.427e-13, 1.097e-12, 1.212e-12,
3014 1.328e-12, 1.415e-12, 1.463e-12, 1.495e-12, 1.571e-12, 1.731e-12,
3015 1.981e-12, 2.387e-12, 2.93e-12, 3.642e-12, 4.584e-12, 5.822e-12,
3016 7.278e-12, 9.193e-12, 1.135e-11, 1.382e-11, 1.662e-11, 1.958e-11,
3017 2.286e-11, 2.559e-11, 2.805e-11, 2.988e-11, 3.106e-11, 3.182e-11,
3018 3.2e-11, 3.258e-11, 3.362e-11, 3.558e-11, 3.688e-11, 3.8e-11,
3019 3.929e-11, 4.062e-11, 4.186e-11, 4.293e-11, 4.48e-11, 4.643e-11,
3020 4.704e-11, 4.571e-11, 4.206e-11, 3.715e-11, 3.131e-11, 2.541e-11,
3021 1.978e-11, 1.508e-11, 1.146e-11, 8.7e-12, 6.603e-12, 5.162e-12,
3022 4.157e-12, 3.408e-12, 2.829e-12, 2.405e-12, 2.071e-12, 1.826e-12,
3023 1.648e-12, 1.542e-12, 1.489e-12, 1.485e-12, 1.493e-12, 1.545e-12,
3024 1.637e-12, 1.814e-12, 2.061e-12, 2.312e-12, 2.651e-12, 3.03e-12,
3025 3.46e-12, 3.901e-12, 4.306e-12, 4.721e-12, 5.008e-12, 5.281e-12,
3026 5.541e-12, 5.791e-12, 6.115e-12, 6.442e-12, 6.68e-12, 6.791e-12,
3027 6.831e-12, 6.839e-12, 6.946e-12, 7.128e-12, 7.537e-12, 8.036e-12,
3028 8.392e-12, 8.526e-12, 8.11e-12, 7.325e-12, 6.329e-12, 5.183e-12,
3029 4.081e-12, 2.985e-12, 2.141e-12, 1.492e-12, 1.015e-12, 6.684e-13,
3030 4.414e-13, 2.987e-13, 2.038e-13, 1.391e-13, 9.86e-14, 7.24e-14,
3031 5.493e-14, 4.288e-14, 3.427e-14, 2.787e-14, 2.296e-14, 1.909e-14,
3032 1.598e-14, 1.344e-14, 1.135e-14, 9.616e-15, 8.169e-15, 6.957e-15,
3033 5.938e-15, 5.08e-15, 4.353e-15, 3.738e-15, 3.217e-15, 2.773e-15,
3034 2.397e-15, 2.077e-15, 1.805e-15, 1.575e-15, 1.382e-15, 1.221e-15,
3035 1.09e-15, 9.855e-16, 9.068e-16, 8.537e-16, 8.27e-16, 8.29e-16,
3036 8.634e-16, 9.359e-16, 1.055e-15, 1.233e-15, 1.486e-15, 1.839e-15,
3037 2.326e-15, 2.998e-15, 3.934e-15, 5.256e-15, 7.164e-15, 9.984e-15,
3038 1.427e-14, 2.099e-14, 3.196e-14, 5.121e-14, 7.908e-14, 1.131e-13,
3039 1.602e-13, 2.239e-13, 3.075e-13, 4.134e-13, 5.749e-13, 7.886e-13,
3040 1.071e-12, 1.464e-12, 2.032e-12, 2.8e-12, 3.732e-12, 4.996e-12,
3041 6.483e-12, 8.143e-12, 1.006e-11, 1.238e-11, 1.484e-11, 1.744e-11,
3042 2.02e-11, 2.274e-11, 2.562e-11, 2.848e-11, 3.191e-11, 3.617e-11,
3043 4.081e-11, 4.577e-11, 4.937e-11, 5.204e-11, 5.401e-11, 5.462e-11,
3044 5.507e-11, 5.51e-11, 5.605e-11, 5.686e-11, 5.739e-11, 5.766e-11,
3045 5.74e-11, 5.754e-11, 5.761e-11, 5.777e-11, 5.712e-11, 5.51e-11,
3046 5.088e-11, 4.438e-11, 3.728e-11, 2.994e-11, 2.305e-11, 1.715e-11,
3047 1.256e-11, 9.208e-12, 6.745e-12, 5.014e-12, 3.785e-12, 2.9e-12,
3048 2.239e-12, 1.757e-12, 1.414e-12, 1.142e-12, 9.482e-13, 8.01e-13,
3049 6.961e-13, 6.253e-13, 5.735e-13, 5.433e-13, 5.352e-13, 5.493e-13,
3050 5.706e-13, 6.068e-13, 6.531e-13, 7.109e-13, 7.767e-13, 8.59e-13,
3051 9.792e-13, 1.142e-12, 1.371e-12, 1.65e-12, 1.957e-12, 2.302e-12,
3052 2.705e-12, 3.145e-12, 3.608e-12, 4.071e-12, 4.602e-12, 5.133e-12,
3053 5.572e-12, 5.987e-12, 6.248e-12, 6.533e-12, 6.757e-12, 6.935e-12,
3054 7.224e-12, 7.422e-12, 7.538e-12, 7.547e-12, 7.495e-12, 7.543e-12,
3055 7.725e-12, 8.139e-12, 8.627e-12, 9.146e-12, 9.443e-12, 9.318e-12,
3056 8.649e-12, 7.512e-12, 6.261e-12, 4.915e-12, 3.647e-12, 2.597e-12,
3057 1.785e-12, 1.242e-12, 8.66e-13, 6.207e-13, 4.61e-13, 3.444e-13,
3058 2.634e-13, 2.1e-13, 1.725e-13, 1.455e-13, 1.237e-13, 1.085e-13,
3059 9.513e-14, 7.978e-14, 6.603e-14, 5.288e-14, 4.084e-14, 2.952e-14,
3060 2.157e-14, 1.593e-14, 1.199e-14, 9.267e-15, 7.365e-15, 6.004e-15,
3061 4.995e-15, 4.218e-15, 3.601e-15, 3.101e-15, 2.692e-15, 2.36e-15,
3062 2.094e-15, 1.891e-15, 1.755e-15, 1.699e-15, 1.755e-15, 1.987e-15,
3063 2.506e-15, 3.506e-15, 5.289e-15, 8.311e-15, 1.325e-14, 2.129e-14,
3064 3.237e-14, 4.595e-14, 6.441e-14, 8.433e-14, 1.074e-13, 1.383e-13,
3065 1.762e-13, 2.281e-13, 2.831e-13, 3.523e-13, 4.38e-13, 5.304e-13,
3066 6.29e-13, 7.142e-13, 8.032e-13, 8.934e-13, 9.888e-13, 1.109e-12,
3067 1.261e-12, 1.462e-12, 1.74e-12, 2.099e-12, 2.535e-12, 3.008e-12,
3068 3.462e-12, 3.856e-12, 4.098e-12, 4.239e-12, 4.234e-12, 4.132e-12,
3069 3.986e-12, 3.866e-12, 3.829e-12, 3.742e-12, 3.705e-12, 3.694e-12,
3070 3.765e-12, 3.849e-12, 3.929e-12, 4.056e-12, 4.092e-12, 4.047e-12,
3071 3.792e-12, 3.407e-12, 2.953e-12, 2.429e-12, 1.931e-12, 1.46e-12,
3072 1.099e-12, 8.199e-13, 6.077e-13, 4.449e-13, 3.359e-13, 2.524e-13,
3073 1.881e-13, 1.391e-13, 1.02e-13, 7.544e-14, 5.555e-14, 4.22e-14,
3074 3.321e-14, 2.686e-14, 2.212e-14, 1.78e-14, 1.369e-14, 1.094e-14,
3075 9.13e-15, 8.101e-15, 7.828e-15, 8.393e-15, 1.012e-14, 1.259e-14,
3076 1.538e-14, 1.961e-14, 2.619e-14, 3.679e-14, 5.049e-14, 6.917e-14,
3077 8.88e-14, 1.115e-13, 1.373e-13, 1.619e-13, 1.878e-13, 2.111e-13,
3078 2.33e-13, 2.503e-13, 2.613e-13, 2.743e-13, 2.826e-13, 2.976e-13,
3079 3.162e-13, 3.36e-13, 3.491e-13, 3.541e-13, 3.595e-13, 3.608e-13,
3080 3.709e-13, 3.869e-13, 4.12e-13, 4.366e-13, 4.504e-13, 4.379e-13,
3081 3.955e-13, 3.385e-13, 2.741e-13, 2.089e-13, 1.427e-13, 9.294e-14,
3082 5.775e-14, 3.565e-14, 2.21e-14, 1.398e-14, 9.194e-15, 6.363e-15,
3083 4.644e-15, 3.55e-15, 2.808e-15, 2.274e-15, 1.871e-15, 1.557e-15,
3084 1.308e-15, 1.108e-15, 9.488e-16, 8.222e-16, 7.238e-16, 6.506e-16,
3085 6.008e-16, 5.742e-16, 5.724e-16, 5.991e-16, 6.625e-16, 7.775e-16,
3086 9.734e-16, 1.306e-15, 1.88e-15, 2.879e-15, 4.616e-15, 7.579e-15,
3087 1.248e-14, 2.03e-14, 3.244e-14, 5.171e-14, 7.394e-14, 9.676e-14,
3088 1.199e-13, 1.467e-13, 1.737e-13, 2.02e-13, 2.425e-13, 3.016e-13,
3089 3.7e-13, 4.617e-13, 5.949e-13, 7.473e-13, 9.378e-13, 1.191e-12,
3090 1.481e-12, 1.813e-12, 2.232e-12, 2.722e-12, 3.254e-12, 3.845e-12,
3091 4.458e-12, 5.048e-12, 5.511e-12, 5.898e-12, 6.204e-12, 6.293e-12,
3092 6.386e-12, 6.467e-12, 6.507e-12, 6.466e-12, 6.443e-12, 6.598e-12,
3093 6.873e-12, 7.3e-12, 7.816e-12, 8.368e-12, 8.643e-12, 8.466e-12,
3094 7.871e-12, 6.853e-12, 5.714e-12, 4.482e-12, 3.392e-12, 2.613e-12,
3095 2.008e-12, 1.562e-12, 1.228e-12, 9.888e-13, 7.646e-13, 5.769e-13,
3096 4.368e-13, 3.324e-13, 2.508e-13, 1.916e-13
3099 static const double xfcrev[15] =
3100 { 1.003, 1.009, 1.015, 1.023, 1.029, 1.033, 1.037,
3101 1.039, 1.04, 1.046, 1.036, 1.027, 1.01, 1.002, 1.
3107 const double xw = nu / 10 + 1;
3108 if (xw >= 1 && xw < 2001) {
3109 const int iw = (int) xw;
3110 const double dw = xw - iw;
3111 const double ew = 1 - dw;
3112 const double cw296 = ew * h2o296[iw - 1] + dw * h2o296[iw];
3113 const double cw260 = ew * h2o260[iw - 1] + dw * h2o260[iw];
3114 const double cwfrn = ew * h2ofrn[iw - 1] + dw * h2ofrn[iw];
3115 if (nu <= 820 || nu >= 960) {
3118 const double xx = (nu - 820) / 10;
3119 const int ix = (int) xx;
3120 const double dx = xx - ix;
3121 sfac = (1 - dx) * xfcrev[ix] + dx * xfcrev[ix + 1];
3123 const double ctwslf =
3124 sfac * cw296 * pow(cw260 / cw296, (296 - t) / (296 - 260));
3125 const double vf2 =
POW2(nu - 370);
3126 const double vf6 =
POW3(vf2);
3127 const double fscal = 36100 / (vf2 + vf6 * 1e-8 + 36100) * -.25 + 1;
3128 const double ctwfrn = cwfrn * fscal;
3129 const double a1 = nu * u * tanh(.7193876 / t * nu);
3130 const double a2 = 296 / t;
3131 const double a3 = p /
P0 * (q * ctwslf + (1 - q) * ctwfrn) * 1e-20;
3132 return a1 * a2 * a3;
3144 static const double ba[98] =
3145 { 0., 4.45e-8, 5.22e-8, 6.46e-8, 7.75e-8, 9.03e-8,
3146 1.06e-7, 1.21e-7, 1.37e-7, 1.57e-7, 1.75e-7, 2.01e-7, 2.3e-7,
3147 2.59e-7, 2.95e-7, 3.26e-7, 3.66e-7, 4.05e-7, 4.47e-7, 4.92e-7,
3148 5.34e-7, 5.84e-7, 6.24e-7, 6.67e-7, 7.14e-7, 7.26e-7, 7.54e-7,
3149 7.84e-7, 8.09e-7, 8.42e-7, 8.62e-7, 8.87e-7, 9.11e-7, 9.36e-7,
3150 9.76e-7, 1.03e-6, 1.11e-6, 1.23e-6, 1.39e-6, 1.61e-6, 1.76e-6,
3151 1.94e-6, 1.97e-6, 1.87e-6, 1.75e-6, 1.56e-6, 1.42e-6, 1.35e-6,
3152 1.32e-6, 1.29e-6, 1.29e-6, 1.29e-6, 1.3e-6, 1.32e-6, 1.33e-6,
3153 1.34e-6, 1.35e-6, 1.33e-6, 1.31e-6, 1.29e-6, 1.24e-6, 1.2e-6,
3154 1.16e-6, 1.1e-6, 1.04e-6, 9.96e-7, 9.38e-7, 8.63e-7, 7.98e-7,
3155 7.26e-7, 6.55e-7, 5.94e-7, 5.35e-7, 4.74e-7, 4.24e-7, 3.77e-7,
3156 3.33e-7, 2.96e-7, 2.63e-7, 2.34e-7, 2.08e-7, 1.85e-7, 1.67e-7,
3157 1.47e-7, 1.32e-7, 1.2e-7, 1.09e-7, 9.85e-8, 9.08e-8, 8.18e-8,
3158 7.56e-8, 6.85e-8, 6.14e-8, 5.83e-8, 5.77e-8, 5e-8, 4.32e-8, 0.
3161 static const double betaa[98] =
3162 { 802., 802., 761., 722., 679., 646., 609., 562.,
3163 511., 472., 436., 406., 377., 355., 338., 319., 299., 278., 255.,
3164 233., 208., 184., 149., 107., 66., 25., -13., -49., -82., -104.,
3165 -119., -130., -139., -144., -146., -146., -147., -148., -150.,
3166 -153., -160., -169., -181., -189., -195., -200., -205., -209.,
3167 -211., -210., -210., -209., -205., -199., -190., -180., -168.,
3168 -157., -143., -126., -108., -89., -63., -32., 1., 35., 65., 95.,
3169 121., 141., 152., 161., 164., 164., 161., 155., 148., 143., 137.,
3170 133., 131., 133., 139., 150., 165., 187., 213., 248., 284., 321.,
3171 372., 449., 514., 569., 609., 642., 673., 673.
3174 static const double nua[98] =
3175 { 2120., 2125., 2130., 2135., 2140., 2145., 2150.,
3176 2155., 2160., 2165., 2170., 2175., 2180., 2185., 2190., 2195.,
3177 2200., 2205., 2210., 2215., 2220., 2225., 2230., 2235., 2240.,
3178 2245., 2250., 2255., 2260., 2265., 2270., 2275., 2280., 2285.,
3179 2290., 2295., 2300., 2305., 2310., 2315., 2320., 2325., 2330.,
3180 2335., 2340., 2345., 2350., 2355., 2360., 2365., 2370., 2375.,
3181 2380., 2385., 2390., 2395., 2400., 2405., 2410., 2415., 2420.,
3182 2425., 2430., 2435., 2440., 2445., 2450., 2455., 2460., 2465.,
3183 2470., 2475., 2480., 2485., 2490., 2495., 2500., 2505., 2510.,
3184 2515., 2520., 2525., 2530., 2535., 2540., 2545., 2550., 2555.,
3185 2560., 2565., 2570., 2575., 2580., 2585., 2590., 2595., 2600., 2605.
3188 const double t0 = 273.0, tr = 296.0;
3191 if (nu < nua[0] || nu > nua[97])
3197 1e6 *
LIN(nua[idx], ba[idx], nua[idx + 1], ba[idx + 1], nu);
3199 LIN(nua[idx], betaa[idx], nua[idx + 1], betaa[idx + 1], nu);
3202 return 0.1 *
POW2(p /
P0 * t0 / t) * exp(beta * (1 / tr - 1 / t))
3203 *
N2 * b * (
N2 + (1 -
N2) * (1.294 - 0.4545 * t / tr));
3213 static const double ba[90] =
3214 { 0., .061, .074, .084, .096, .12, .162, .208, .246,
3215 .285, .314, .38, .444, .5, .571, .673, .768, .853, .966, 1.097,
3216 1.214, 1.333, 1.466, 1.591, 1.693, 1.796, 1.922, 2.037, 2.154,
3217 2.264, 2.375, 2.508, 2.671, 2.847, 3.066, 3.417, 3.828, 4.204,
3218 4.453, 4.599, 4.528, 4.284, 3.955, 3.678, 3.477, 3.346, 3.29,
3219 3.251, 3.231, 3.226, 3.212, 3.192, 3.108, 3.033, 2.911, 2.798,
3220 2.646, 2.508, 2.322, 2.13, 1.928, 1.757, 1.588, 1.417, 1.253,
3221 1.109, .99, .888, .791, .678, .587, .524, .464, .403, .357, .32,
3222 .29, .267, .242, .215, .182, .16, .146, .128, .103, .087, .081,
3226 static const double betaa[90] =
3227 { 467., 467., 400., 315., 379., 368., 475., 521.,
3228 531., 512., 442., 444., 430., 381., 335., 324., 296., 248., 215.,
3229 193., 158., 127., 101., 71., 31., -6., -26., -47., -63., -79.,
3230 -88., -88., -87., -90., -98., -99., -109., -134., -160., -167.,
3231 -164., -158., -153., -151., -156., -166., -168., -173., -170.,
3232 -161., -145., -126., -108., -84., -59., -29., 4., 41., 73., 97.,
3233 123., 159., 198., 220., 242., 256., 281., 311., 334., 319., 313.,
3234 321., 323., 310., 315., 320., 335., 361., 378., 373., 338., 319.,
3235 346., 322., 291., 290., 350., 371., 504., 504.
3238 static const double nua[90] =
3239 { 1360., 1365., 1370., 1375., 1380., 1385., 1390.,
3240 1395., 1400., 1405., 1410., 1415., 1420., 1425., 1430., 1435.,
3241 1440., 1445., 1450., 1455., 1460., 1465., 1470., 1475., 1480.,
3242 1485., 1490., 1495., 1500., 1505., 1510., 1515., 1520., 1525.,
3243 1530., 1535., 1540., 1545., 1550., 1555., 1560., 1565., 1570.,
3244 1575., 1580., 1585., 1590., 1595., 1600., 1605., 1610., 1615.,
3245 1620., 1625., 1630., 1635., 1640., 1645., 1650., 1655., 1660.,
3246 1665., 1670., 1675., 1680., 1685., 1690., 1695., 1700., 1705.,
3247 1710., 1715., 1720., 1725., 1730., 1735., 1740., 1745., 1750.,
3248 1755., 1760., 1765., 1770., 1775., 1780., 1785., 1790., 1795.,
3252 const double t0 = 273, tr = 296;
3255 if (nu < nua[0] || nu > nua[89])
3260 const double b =
LIN(nua[idx], ba[idx], nua[idx + 1], ba[idx + 1], nu);
3262 LIN(nua[idx], betaa[idx], nua[idx + 1], betaa[idx + 1], nu);
3265 return 0.1 *
POW2(p /
P0 * t0 / t) * exp(beta * (1 / tr - 1 / t)) *
O2 * b;
3273 const atm_t *atm_src,
3277 const size_t s = (size_t) atm_src->
np *
sizeof(
double);
3280 atm_dest->
np = atm_src->
np;
3281 memcpy(atm_dest->
time, atm_src->
time, s);
3282 memcpy(atm_dest->
z, atm_src->
z, s);
3283 memcpy(atm_dest->
lon, atm_src->
lon, s);
3284 memcpy(atm_dest->
lat, atm_src->
lat, s);
3285 memcpy(atm_dest->
p, atm_src->
p, s);
3286 memcpy(atm_dest->
t, atm_src->
t, s);
3287 for (
int ig = 0; ig < ctl->
ng; ig++)
3288 memcpy(atm_dest->
q[ig], atm_src->
q[ig], s);
3289 for (
int iw = 0; iw < ctl->
nw; iw++)
3290 memcpy(atm_dest->
k[iw], atm_src->
k[iw], s);
3291 atm_dest->
clz = atm_src->
clz;
3293 for (
int icl = 0; icl < ctl->
ncl; icl++)
3294 atm_dest->
clk[icl] = atm_src->
clk[icl];
3295 atm_dest->
sft = atm_src->
sft;
3296 for (
int isf = 0; isf < ctl->
nsf; isf++)
3301 for (
int ip = 0; ip < atm_dest->
np; ip++) {
3302 atm_dest->
p[ip] = 0;
3303 atm_dest->
t[ip] = 0;
3304 for (
int ig = 0; ig < ctl->
ng; ig++)
3305 atm_dest->
q[ig][ip] = 0;
3306 for (
int iw = 0; iw < ctl->
nw; iw++)
3307 atm_dest->
k[iw][ip] = 0;
3310 for (
int icl = 0; icl < ctl->
ncl; icl++)
3311 atm_dest->
clk[icl] = 0;
3313 for (
int isf = 0; isf < ctl->
nsf; isf++)
3314 atm_dest->
sfeps[isf] = 1;
3323 const obs_t *obs_src,
3327 const size_t s = (size_t) obs_src->
nr *
sizeof(
double);
3330 obs_dest->
nr = obs_src->
nr;
3331 memcpy(obs_dest->
time, obs_src->
time, s);
3332 memcpy(obs_dest->
obsz, obs_src->
obsz, s);
3335 memcpy(obs_dest->
vpz, obs_src->
vpz, s);
3338 memcpy(obs_dest->
tpz, obs_src->
tpz, s);
3341 for (
int id = 0;
id < ctl->
nd;
id++)
3342 memcpy(obs_dest->
rad[
id], obs_src->
rad[
id], s);
3343 for (
int id = 0;
id < ctl->
nd;
id++)
3344 memcpy(obs_dest->
tau[
id], obs_src->
tau[
id], s);
3348 for (
int id = 0;
id < ctl->
nd;
id++)
3349 for (
int ir = 0; ir < obs_dest->
nr; ir++)
3350 if (isfinite(obs_dest->
rad[
id][ir])) {
3351 obs_dest->
rad[id][ir] = 0;
3352 obs_dest->
tau[id][ir] = 0;
3365 { 1, 32, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 };
3367 { 1, 32, 61, 92, 122, 153, 183, 214, 245, 275, 306, 336 };
3370 if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))
3371 *doy = d0l[mon - 1] + day - 1;
3373 *doy = d0[mon - 1] + day - 1;
3385 { 1, 32, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 };
3387 { 1, 32, 61, 92, 122, 153, 183, 214, 245, 275, 306, 336 };
3391 if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)) {
3392 for (i = 11; i >= 0; i--)
3396 *day = doy - d0l[i] + 1;
3398 for (i = 11; i >= 0; i--)
3402 *day = doy - d0[i] + 1;
3410 const char *emitter) {
3412 for (
int ig = 0; ig < ctl->
ng; ig++)
3413 if (strcasecmp(ctl->
emitter[ig], emitter) == 0)
3433 for (
int id = 0;
id < ctl->
nd;
id++)
3434 for (
int ir = 0; ir < obs->
nr; ir++)
3435 mask[
id *
NR + ir] = !isfinite(obs->
rad[
id][ir]);
3442 for (
int ir = 0; ir < obs->
nr; ir++)
3446 else if (ctl->
formod == 2)
3454 for (
int id = 0;
id < ctl->
nd;
id++)
3455 for (
int ir = 0; ir < obs->
nr; ir++)
3459 for (
int id = 0;
id < ctl->
nd;
id++)
3460 for (
int ir = 0; ir < obs->
nr; ir++)
3461 if (mask[
id *
NR + ir])
3462 obs->
rad[id][ir] = NAN;
3477 for (
int id = 0;
id < ctl->
nd;
id++)
3478 beta[
id] = los->
k[ip][
id];
3482 for (
int id = 0;
id < ctl->
nd;
id++)
3483 beta[
id] +=
ctmco2(ctl->
nu[
id], los->
p[ip], los->
t[ip],
3488 for (
int id = 0;
id < ctl->
nd;
id++)
3489 beta[
id] +=
ctmh2o(ctl->
nu[
id], los->
p[ip], los->
t[ip],
3495 for (
int id = 0;
id < ctl->
nd;
id++)
3496 beta[
id] +=
ctmn2(ctl->
nu[
id], los->
p[ip], los->
t[ip]);
3500 for (
int id = 0;
id < ctl->
nd;
id++)
3501 beta[
id] +=
ctmo2(ctl->
nu[
id], los->
p[ip], los->
t[ip]);
3513 if (ctl->
fov[0] ==
'-')
3524 for (
int ir = 0; ir < obs->
nr; ir++) {
3528 for (
int ir2 =
MAX(ir -
NFOV, 0);
3529 ir2 <
MIN(ir + 1 +
NFOV, obs->
nr); ir2++)
3530 if (obs->
time[ir2] == obs->
time[ir]) {
3531 z[nz] = obs2->
vpz[ir2];
3532 for (
int id = 0;
id < ctl->
nd;
id++) {
3533 rad[id][nz] = obs2->
rad[id][ir2];
3534 tau[id][nz] = obs2->
tau[id][ir2];
3539 ERRMSG(
"Cannot apply FOV convolution!");
3543 for (
int id = 0;
id < ctl->
nd;
id++) {
3544 obs->
rad[id][ir] = 0;
3545 obs->
tau[id][ir] = 0;
3547 for (
int i = 0; i < ctl->
fov_n; i++) {
3548 const double zfov = obs->
vpz[ir] + ctl->
fov_dz[i];
3550 for (
int id = 0;
id < ctl->
nd;
id++) {
3552 *
LIN(z[idx], rad[
id][idx], z[idx + 1], rad[
id][idx + 1], zfov);
3554 *
LIN(z[idx], tau[
id][idx], z[idx + 1], tau[
id][idx + 1], zfov);
3556 wsum += ctl->
fov_w[i];
3558 for (
int id = 0;
id < ctl->
nd;
id++) {
3559 obs->
rad[id][ir] /= wsum;
3560 obs->
tau[id][ir] /= wsum;
3577 double rad[
ND], tau[
ND], tau_path[
ND][
NG];
3584 for (
int id = 0;
id < ctl->
nd;
id++) {
3587 for (
int ig = 0; ig < ctl->
ng; ig++)
3588 tau_path[
id][ig] = 1;
3595 for (
int ip = 0; ip < los->
np; ip++) {
3605 double beta_ctm[
ND];
3612 for (
int id = 0;
id < ctl->
nd;
id++)
3613 if (tau_gas[
id] > 0) {
3616 los->
eps[ip][id] = 1 - tau_gas[id] * exp(-beta_ctm[
id] * los->
ds[ip]);
3619 rad[id] += los->
src[ip][id] * los->
eps[ip][id] * tau[id];
3622 tau[id] *= (1 - los->
eps[ip][id]);
3632 for (
int id = 0;
id < ctl->
nd;
id++)
3633 rad[
id] += los->
sfeps[
id] * src_sf[
id] * tau[
id];
3638 for (
int id = 0;
id < ctl->
nd;
id++)
3639 if (los->
sfeps[
id] < 1) {
3648 double tau_refl[
ND];
3649 for (
int id = 0;
id < ctl->
nd;
id++)
3653 for (
int ip = los->
np - 1; ip >= 0; ip--)
3654 for (
int id = 0;
id < ctl->
nd;
id++) {
3655 rad[id] += los->
src[ip][id] * los->
eps[ip][id] * tau_refl[id]
3656 * tau[id] * (1 - los->
sfeps[id]);
3657 tau_refl[id] *= (1 - los->
eps[ip][id]);
3667 los->
lon[los->
np - 1], los->
lat[los->
np - 1]);
3672 if (cos_sza_val > 1e-6) {
3675 double x0[3], x1[3];
3677 los->
lat[los->
np - 1], x0);
3679 for (
int i = 0; i < 3; i++)
3681 const double cosa =
DOTP(x0, x1) /
NORM(x0) /
NORM(x1);
3684 const double rcos = cosa / cos_sza_val;
3687 for (
int id = 0;
id < ctl->
nd;
id++)
3688 rad[
id] += 6.764e-5 / (2. * M_PI) *
PLANCK(
TSUN, ctl->
nu[
id])
3689 * tau_refl[id] * (1 - los->
sfeps[id]) * tau[
id] * rcos;
3696 for (
int id = 0;
id < ctl->
nd;
id++) {
3697 obs->
rad[id][ir] = rad[id];
3698 obs->
tau[id][ir] = tau[id];
3715 char cmd[2 *
LEN], rfmflg[
LEN] = {
"RAD TRA MIX LIN SFC" };
3717 double f[
NSHAPE], nu[
NSHAPE], nu0, nu1, obsz = -999, tsurf,
3718 xd[3], xo[3], xv[3], z[
NR], zmin, zmax;
3720 int n, nadir = 0, zenith = 0;
3726 for (
int ir = 1; ir < obs->
nr; ir++)
3730 ERRMSG(
"RFM interface requires identical observer positions!");
3733 for (
int iw = 0; iw < ctl->
nw; iw++)
3734 for (
int ip = 0; ip < atm->
np; ip++)
3735 if (atm->
k[iw][ip] != 0)
3736 ERRMSG(
"RFM interface cannot handle extinction data!");
3739 gsl_stats_minmax(&zmin, &zmax, atm->
z, 1, (
size_t) atm->
np);
3742 if (obs->
obsz[0] >= zmin && obs->
obsz[0] <= zmax) {
3743 obsz = obs->
obsz[0];
3744 strcat(rfmflg,
" OBS");
3748 for (
int ir = 0; ir < obs->
nr; ir++) {
3754 if (obs->
tpz[ir] <= zmin) {
3759 for (
int i = 0; i < 3; i++)
3760 xd[i] = xo[i] - xv[i];
3764 }
else if (obs->
tpz[ir] >= zmax - 1e-3 && obs->
vpz[ir] > obs->
obsz[ir]) {
3769 for (
int i = 0; i < 3; i++)
3770 xd[i] = xv[i] - xo[i];
3776 z[ir] = obs->
tpz[ir];
3778 if ((nadir > 0 && nadir < obs->nr)
3779 || (zenith > 0 && zenith < obs->nr)
3780 || (nadir > 0 && zenith > 0))
3781 ERRMSG(
"Limb, nadir, and zenith not simultaneously possible!");
3785 strcat(rfmflg,
" NAD");
3787 strcat(rfmflg,
" ZEN");
3790 tsurf = atm->
t[gsl_stats_min_index(atm->
z, 1, (
size_t) atm->
np)];
3793 if (!nadir && !zenith && !ctl->
refrac)
3794 strcat(rfmflg,
" GEO");
3798 strcat(rfmflg,
" CTM");
3804 for (
int id = 0;
id < ctl->
nd;
id++) {
3808 if (n <= 0 || n >
NSHAPE)
3809 ERRMSG(
"Missing or invalid filter function in lookup table!");
3810 memcpy(nu, tbl->
filt_nu[
id], (
size_t) n *
sizeof(
double));
3811 memcpy(f, tbl->
filt_f[
id], (
size_t) n *
sizeof(
double));
3819 if (!(out = fopen(
"rfm.drv",
"w")))
3820 ERRMSG(
"Cannot create file!");
3821 fprintf(out,
"*HDR\nRFM call by JURASSIC.\n");
3822 fprintf(out,
"*FLG\n%s\n", rfmflg);
3823 fprintf(out,
"*SPC\n%.4f %.4f 0.0005\n", nu0, nu1);
3824 fprintf(out,
"*GAS\n");
3825 for (
int ig = 0; ig < ctl->
ng; ig++)
3826 fprintf(out,
"%s\n", ctl->
emitter[ig]);
3827 fprintf(out,
"*ATM\nrfm.atm\n");
3828 fprintf(out,
"*TAN\n");
3829 for (
int ir = 0; ir < obs->
nr; ir++)
3830 fprintf(out,
"%g\n", z[ir]);
3831 fprintf(out,
"*SFC\n%g 1.0\n", tsurf);
3833 fprintf(out,
"*OBS\n%g\n", obsz);
3834 fprintf(out,
"*HIT\n%s\n", ctl->
rfmhit);
3835 fprintf(out,
"*XSC\n");
3836 for (
int ig = 0; ig < ctl->
ng; ig++)
3837 if (ctl->
rfmxsc[ig][0] !=
'-')
3838 fprintf(out,
"%s\n", ctl->
rfmxsc[ig]);
3839 fprintf(out,
"*END\n");
3843 if (system(
"rm -f rfm.runlog rad_*.asc tra_*.asc"))
3844 ERRMSG(
"Cannot remove temporary files!");
3847 sprintf(cmd,
"echo | %s", ctl->
rfmbin);
3849 ERRMSG(
"Error while calling RFM!");
3852 for (
int ir = 0; ir < obs->
nr; ir++) {
3859 if (system(
"rm -f rfm.drv rfm.atm rfm.runlog rad_*.asc tra_*.asc"))
3860 ERRMSG(
"Error while removing temporary files!");
3878 for (
int id = 0;
id < ctl->
nd;
id++)
3879 src[
id] =
LIN(tbl->
st[it], tbl->
sr[it][
id],
3880 tbl->
st[it + 1], tbl->
sr[it + 1][
id], t);
3891 const double radius = z +
RE;
3892 const double latrad = lat / 180. * M_PI;
3893 const double lonrad = lon / 180. * M_PI;
3894 const double coslat = cos(latrad);
3896 x[0] = radius * coslat * cos(lonrad);
3897 x[1] = radius * coslat * sin(lonrad);
3898 x[2] = radius * sin(latrad);
3907 const double mmair = 28.96456e-3, mmh2o = 18.0153e-3;
3909 const int ipts = 20;
3911 double dzmin = 1e99, e = 0;
3920 for (
int ip = 0; ip < atm->
np; ip++)
3921 if (fabs(atm->
z[ip] - ctl->
hydz) < dzmin) {
3922 dzmin = fabs(atm->
z[ip] - ctl->
hydz);
3927 for (
int ip = ipref + 1; ip < atm->
np; ip++) {
3929 for (
int i = 0; i < ipts; i++) {
3932 ipts - 1.0, atm->
q[ctl->
ig_h2o][ip], (
double) i);
3933 mean += (e * mmh2o + (1 - e) * mmair)
3935 /
LIN(0.0, atm->
t[ip - 1], ipts - 1.0, atm->
t[ip], (
double) i) / ipts;
3940 exp(log(atm->
p[ip - 1]) - mean * 1000 * (atm->
z[ip] - atm->
z[ip - 1]));
3944 for (
int ip = ipref - 1; ip >= 0; ip--) {
3946 for (
int i = 0; i < ipts; i++) {
3949 ipts - 1.0, atm->
q[ctl->
ig_h2o][ip], (
double) i);
3950 mean += (e * mmh2o + (1 - e) * mmair)
3952 /
LIN(0.0, atm->
t[ip + 1], ipts - 1.0, atm->
t[ip], (
double) i) / ipts;
3957 exp(log(atm->
p[ip + 1]) - mean * 1000 * (atm->
z[ip] - atm->
z[ip + 1]));
3969 sprintf(quantity,
"PRESSURE");
3972 sprintf(quantity,
"TEMPERATURE");
3974 for (
int ig = 0; ig < ctl->
ng; ig++)
3975 if (idx ==
IDXQ(ig))
3976 sprintf(quantity,
"%s", ctl->
emitter[ig]);
3978 for (
int iw = 0; iw < ctl->
nw; iw++)
3979 if (idx ==
IDXK(iw))
3980 sprintf(quantity,
"EXTINCT_WINDOW_%d", iw);
3983 sprintf(quantity,
"CLOUD_HEIGHT");
3986 sprintf(quantity,
"CLOUD_DEPTH");
3988 for (
int icl = 0; icl < ctl->
ncl; icl++)
3990 sprintf(quantity,
"CLOUD_EXTINCT_%.4f", ctl->
clnu[icl]);
3993 sprintf(quantity,
"SURFACE_TEMPERATURE");
3995 for (
int isf = 0; isf < ctl->
nsf; isf++)
3997 sprintf(quantity,
"SURFACE_EMISSIVITY_%.4f", ctl->
sfnu[isf]);
4007 LOG(1,
"Initialize source function table...");
4008 LOG(2,
"Number of data points: %d",
TBLNS);
4011 for (
int id = 0;
id < ctl->
nd;
id++) {
4015 for (
int i = 1; i < tbl->
filt_n[id]; i++)
4019#pragma omp parallel for default(none) shared(ctl,tbl,id,dnu)
4020 for (
int it = 0; it <
TBLNS; it++) {
4026 double fsum = tbl->
sr[it][id] = 0;
4027 for (
double fnu = tbl->
filt_nu[
id][0];
4028 fnu <= tbl->filt_nu[
id][tbl->
filt_n[
id] - 1]; fnu += dnu) {
4034 tbl->
sr[it][id] += ff *
PLANCK(tbl->
st[it], fnu);
4036 tbl->
sr[it][id] /= fsum;
4041 "channel= %.4f cm^-1 | T= %g ... %g K | B= %g ... %g W/(m^2 sr cm^-1)",
4042 ctl->
nu[
id], tbl->
st[0], tbl->
st[
TBLNS - 1], tbl->
sr[0][
id],
4062 *p =
LOGY(atm->
z[ip], atm->
p[ip], atm->
z[ip + 1], atm->
p[ip + 1], z);
4063 *t =
LIN(atm->
z[ip], atm->
t[ip], atm->
z[ip + 1], atm->
t[ip + 1], z);
4064 for (
int ig = 0; ig < ctl->
ng; ig++)
4066 LIN(atm->
z[ip], atm->
q[ig][ip], atm->
z[ip + 1], atm->
q[ig][ip + 1], z);
4067 for (
int iw = 0; iw < ctl->
nw; iw++)
4069 LIN(atm->
z[ip], atm->
k[iw][ip], atm->
z[ip + 1], atm->
k[iw][ip + 1], z);
4079 double tau_path[
ND][
NG],
4080 double tau_seg[
ND]) {
4082 double eps, lnp[
NG];
4085 for (
int ig = 0; ig < ctl->
ng; ig++)
4086 lnp[ig] = log(los->
cgp[ip][ig]);
4089 for (
int id = 0;
id < ctl->
nd;
id++) {
4095 for (
int ig = 0; ig < ctl->
ng; ig++) {
4098 if (tbl->
np[
id][ig] < 30 || los->
cgu[ip][ig] <= 0)
4102 else if (tau_path[
id][ig] < 1e-9)
4111 const int it0 =
locate_reg(tbl->
t[
id][ig][ipr], tbl->
nt[
id][ig][ipr],
4114 locate_reg(tbl->
t[
id][ig][ipr + 1], tbl->
nt[
id][ig][ipr + 1],
4118 if (tbl->
nt[
id][ig][ipr] < 2 || tbl->
nt[
id][ig][ipr + 1] < 2
4119 || tbl->
nu[
id][ig][ipr][it0] < 2
4120 || tbl->
nu[
id][ig][ipr][it0 + 1] < 2
4121 || tbl->
nu[
id][ig][ipr + 1][it1] < 2
4122 || tbl->
nu[
id][ig][ipr + 1][it1 + 1] < 2)
4128 const double logu = log(los->
cgu[ip][ig]);
4132 double eps11 =
intpol_tbl_eps(tbl, ig,
id, ipr + 1, it1 + 1, logu);
4135 eps00 =
LIN(tbl->
t[
id][ig][ipr][it0], eps00,
4136 tbl->
t[
id][ig][ipr][it0 + 1], eps01, los->
cgt[ip][ig]);
4137 eps11 =
LIN(tbl->
t[
id][ig][ipr + 1][it1], eps10,
4138 tbl->
t[
id][ig][ipr + 1][it1 + 1],
4139 eps11, los->
cgt[ip][ig]);
4142 eps00 =
LIN(tbl->
lnp[
id][ig][ipr], eps00,
4143 tbl->
lnp[
id][ig][ipr + 1], eps11, lnp[ig]);
4146 eps00 =
CLAMP(eps00, 0, 1);
4149 eps = 1 - (1 - eps00) / tau_path[
id][ig];
4152 eps =
CLAMP(eps, 0, 1);
4157 tau_path[id][ig] *= (1 - eps);
4160 tau_seg[id] *= (1 - eps);
4172 double tau_path[
ND][
NG],
4173 double tau_seg[
ND]) {
4175 const double lnp = log(los->
p[ip]);
4180 for (
int id = 0;
id < ctl->
nd;
id++) {
4186 for (
int ig = 0; ig < ctl->
ng; ig++) {
4189 if (tbl->
np[
id][ig] < 30 || los->
cgu[ip][ig] <= 0)
4193 else if (tau_path[
id][ig] < 1e-9)
4203 locate_reg(tbl->
t[
id][ig][ipr], tbl->
nt[
id][ig][ipr], los->
t[ip]);
4205 locate_reg(tbl->
t[
id][ig][ipr + 1], tbl->
nt[
id][ig][ipr + 1],
4209 if (tbl->
nt[
id][ig][ipr] < 2 || tbl->
nt[
id][ig][ipr + 1] < 2
4210 || tbl->
nu[
id][ig][ipr][it0] < 2
4211 || tbl->
nu[
id][ig][ipr][it0 + 1] < 2
4212 || tbl->
nu[
id][ig][ipr + 1][it1] < 2
4213 || tbl->
nu[
id][ig][ipr + 1][it1 + 1] < 2)
4219 const double logeps = log(1.0 - tau_path[
id][ig]);
4227 log(u + los->
u[ip][ig]));
4231 log(u + los->
u[ip][ig]));
4233 u =
intpol_tbl_u(tbl, ig,
id, ipr + 1, it1 + 1, logeps);
4235 log(u + los->
u[ip][ig]));
4238 eps00 =
LIN(tbl->
t[
id][ig][ipr][it0], eps00,
4239 tbl->
t[
id][ig][ipr][it0 + 1], eps01, los->
t[ip]);
4240 eps11 =
LIN(tbl->
t[
id][ig][ipr + 1][it1], eps10,
4241 tbl->
t[
id][ig][ipr + 1][it1 + 1], eps11, los->
t[ip]);
4244 eps00 =
LIN(tbl->
lnp[
id][ig][ipr], eps00,
4245 tbl->
lnp[
id][ig][ipr + 1], eps11, lnp);
4248 eps00 =
CLAMP(eps00, 0, 1);
4251 eps = 1 - (1 - eps00) / tau_path[
id][ig];
4254 eps =
CLAMP(eps, 0, 1);
4259 tau_path[id][ig] *= (1 - eps);
4262 tau_seg[id] *= (1 - eps);
4275 const double logu) {
4277 const int nu = tbl->
nu[id][ig][ip][it];
4278 const float *logu_arr = tbl->
logu[id][ig][ip][it];
4279 const float *logeps_arr = tbl->
logeps[id][ig][ip][it];
4282 const double logu_min = (double) logu_arr[0];
4283 const double logu_max = (double) logu_arr[nu - 1];
4287 if (logu < logu_min) {
4288 const double logeps_min = (double) logeps_arr[0];
4289 return exp(logeps_min + logu - logu_min);
4299 if (logu > logu_max) {
4300 const double eps_max = exp((
double) logeps_arr[nu - 1]);
4301 const double l1m_eps_max = log1p(-eps_max);
4302 const double r = exp(logu - logu_max);
4303 return -expm1(l1m_eps_max * r);
4307 const int idx =
locate_tbl(logu_arr, nu, logu);
4308 return exp(
LIN(logu_arr[idx], logeps_arr[idx],
4309 logu_arr[idx + 1], logeps_arr[idx + 1], logu));
4320 const double logeps) {
4322 const int nu = tbl->
nu[id][ig][ip][it];
4323 const float *logeps_arr = tbl->
logeps[id][ig][ip][it];
4324 const float *logu_arr = tbl->
logu[id][ig][ip][it];
4327 const double logeps_min = (double) logeps_arr[0];
4328 const double logeps_max = (double) logeps_arr[nu - 1];
4332 if (logeps < logeps_min) {
4333 const double logu_min = (double) logu_arr[0];
4334 return exp(logu_min + logeps - logeps_min);
4345 if (logeps > logeps_max) {
4346 const double u_max = exp((
double) logu_arr[nu - 1]);
4347 const double l1m_eps_max = log1p(-exp(logeps_max));
4348 const double logtau = log1p(-exp(logeps));
4349 return u_max * (logtau / l1m_eps_max);
4353 const int idx =
locate_tbl(logeps_arr, nu, logeps);
4354 return exp(
LIN(logeps_arr[idx], logu_arr[idx],
4355 logeps_arr[idx + 1], logu_arr[idx + 1], logeps));
4379 const time_t jsec0 = (time_t) jsec + timegm(&t0);
4380 t1 = gmtime(&jsec0);
4382 *year = t1->tm_year + 1900;
4383 *mon = t1->tm_mon + 1;
4385 *hour = t1->tm_hour;
4388 *remain = jsec - floor(jsec);
4401 const size_t m = k->size1;
4402 const size_t n = k->size2;
4405 gsl_vector *x0 = gsl_vector_alloc(n);
4406 gsl_vector *yy0 = gsl_vector_alloc(m);
4412 formod(ctl, tbl, atm, obs);
4415 atm2x(ctl, atm, x0, iqa, NULL);
4416 obs2y(ctl, obs, yy0, NULL, NULL);
4419 gsl_matrix_set_zero(k);
4422#pragma omp parallel for default(none) shared(ctl,tbl,atm,obs,k,x0,yy0,n,m,iqa)
4423 for (
size_t j = 0; j < n; j++) {
4430 gsl_vector *x1 = gsl_vector_alloc(n);
4431 gsl_vector *yy1 = gsl_vector_alloc(m);
4436 h =
MAX(fabs(0.01 * gsl_vector_get(x0, j)), 1e-7);
4437 else if (iqa[j] ==
IDXT)
4439 else if (iqa[j] >=
IDXQ(0) && iqa[j] <
IDXQ(ctl->
ng))
4440 h =
MAX(fabs(0.01 * gsl_vector_get(x0, j)), 1e-15);
4441 else if (iqa[j] >=
IDXK(0) && iqa[j] <
IDXK(ctl->
nw))
4447 else if (iqa[j] ==
IDXSFT)
4452 ERRMSG(
"Cannot set perturbation size!");
4455 gsl_vector_memcpy(x1, x0);
4456 gsl_vector_set(x1, j, gsl_vector_get(x1, j) + h);
4459 x2atm(ctl, x1, atm1);
4462 formod(ctl, tbl, atm1, obs1);
4465 obs2y(ctl, obs1, yy1, NULL, NULL);
4468 for (
size_t i = 0; i < m; i++)
4469 gsl_matrix_set(k, i, j,
4470 (gsl_vector_get(yy1, i) - gsl_vector_get(yy0, i)) / h);
4473 gsl_vector_free(x1);
4474 gsl_vector_free(yy1);
4480 gsl_vector_free(x0);
4481 gsl_vector_free(yy0);
4494 int i = (ihi + ilo) >> 1;
4496 if (xx[i] < xx[i + 1])
4497 while (ihi > ilo + 1) {
4498 i = (ihi + ilo) >> 1;
4504 while (ihi > ilo + 1) {
4505 i = (ihi + ilo) >> 1;
4523 const int i = (int) ((x - xx[0]) / (xx[1] - xx[0]));
4543 int i = (ihi + ilo) >> 1;
4545 while (ihi > ilo + 1) {
4546 i = (ihi + ilo) >> 1;
4564 const size_t n = a->size1;
4567 for (
size_t i = 0; i < n && diag; i++)
4568 for (
size_t j = i + 1; j < n; j++)
4569 if (gsl_matrix_get(a, i, j) != 0) {
4576 for (
size_t i = 0; i < n; i++)
4577 gsl_matrix_set(a, i, i, 1 / gsl_matrix_get(a, i, i));
4581 gsl_linalg_cholesky_decomp(a);
4582 gsl_linalg_cholesky_invert(a);
4589 const gsl_matrix *a,
4590 const gsl_vector *b,
4591 const int transpose,
4595 const size_t m = a->size1;
4596 const size_t n = a->size2;
4599 gsl_matrix *aux = gsl_matrix_alloc(m, n);
4602 if (transpose == 1) {
4605 for (
size_t i = 0; i < m; i++)
4606 for (
size_t j = 0; j < n; j++)
4607 gsl_matrix_set(aux, i, j,
4608 gsl_vector_get(b, i) * gsl_matrix_get(a, i, j));
4611 gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, aux, aux, 0.0, c);
4615 else if (transpose == 2) {
4618 for (
size_t i = 0; i < m; i++)
4619 for (
size_t j = 0; j < n; j++)
4620 gsl_matrix_set(aux, i, j,
4621 gsl_matrix_get(a, i, j) * gsl_vector_get(b, j));
4624 gsl_blas_dgemm(CblasNoTrans, CblasTrans, 1.0, aux, aux, 0.0, c);
4628 gsl_matrix_free(aux);
4643 for (
int ir = 0; ir < obs->
nr; ir++)
4644 for (
int id = 0;
id < ctl->
nd;
id++)
4645 if (isfinite(obs->
rad[
id][ir])) {
4647 gsl_vector_set(y, m, obs->
rad[
id][ir]);
4670 double disq = 0, lmpar = 0.001;
4684 const size_t m =
obs2y(ctl, obs_meas, NULL, NULL, NULL);
4685 const size_t n =
atm2x(ctl, atm_apr, NULL, iqa, ipa);
4686 if (m == 0 || n == 0) {
4687 WARN(
"Check problem definition (m = 0 or n = 0)!");
4693 gsl_matrix *a = gsl_matrix_alloc(n, n);
4694 gsl_matrix *cov = gsl_matrix_alloc(n, n);
4695 gsl_matrix *k_i = gsl_matrix_alloc(m, n);
4696 gsl_matrix *s_a_inv = gsl_matrix_alloc(n, n);
4698 gsl_vector *b = gsl_vector_alloc(n);
4699 gsl_vector *dx = gsl_vector_alloc(n);
4700 gsl_vector *dy = gsl_vector_alloc(m);
4701 gsl_vector *sig_eps_inv = gsl_vector_alloc(m);
4702 gsl_vector *sig_formod = gsl_vector_alloc(m);
4703 gsl_vector *sig_noise = gsl_vector_alloc(m);
4704 gsl_vector *x_a = gsl_vector_alloc(n);
4705 gsl_vector *x_i = gsl_vector_alloc(n);
4706 gsl_vector *x_step = gsl_vector_alloc(n);
4707 gsl_vector *y_aux = gsl_vector_alloc(m);
4708 gsl_vector *y_i = gsl_vector_alloc(m);
4709 gsl_vector *y_m = gsl_vector_alloc(m);
4717 formod(ctl, tbl, atm_i, obs_i);
4720 atm2x(ctl, atm_apr, x_a, NULL, NULL);
4721 atm2x(ctl, atm_i, x_i, NULL, NULL);
4722 obs2y(ctl, obs_meas, y_m, NULL, NULL);
4723 obs2y(ctl, obs_i, y_i, NULL, NULL);
4726 set_cov_apr(ret, ctl, atm_apr, iqa, ipa, s_a_inv);
4728 const char *dirname;
4730 const char *filename =
4732 "matrix_cov_apr.tab", &dirname, &profile);
4734 atm_i, obs_i,
"x",
"x",
"r", profile);
4739 set_cov_meas(ret, ctl, obs_meas, sig_noise, sig_formod, sig_eps_inv);
4742 gsl_vector_memcpy(dx, x_i);
4743 gsl_vector_sub(dx, x_a);
4744 gsl_vector_memcpy(dy, y_m);
4745 gsl_vector_sub(dy, y_i);
4751 LOG(2,
"it= %d / chi^2/m= %g", 0, *chisq);
4755 kernel(ctl, tbl, atm_i, obs_i, k_i);
4764 for (
int it = 1; it <= ret->
conv_itmax; it++) {
4767 double chisq_old = *chisq;
4771 kernel(ctl, tbl, atm_i, obs_i, k_i);
4778 for (
size_t i = 0; i < m; i++)
4779 gsl_vector_set(y_aux, i, gsl_vector_get(dy, i)
4780 *
POW2(gsl_vector_get(sig_eps_inv, i)));
4781 gsl_blas_dgemv(CblasTrans, 1.0, k_i, y_aux, 0.0, b);
4782 gsl_blas_dgemv(CblasNoTrans, -1.0, s_a_inv, dx, 1.0, b);
4785 for (
int it2 = 0; it2 < 20; it2++) {
4788 gsl_matrix_memcpy(a, s_a_inv);
4789 gsl_matrix_scale(a, 1 + lmpar);
4790 gsl_matrix_add(a, cov);
4793 gsl_linalg_cholesky_decomp(a);
4794 gsl_linalg_cholesky_solve(a, b, x_step);
4797 gsl_vector_add(x_i, x_step);
4800 x2atm(ctl, x_i, atm_i);
4803 for (
int ip = 0; ip < atm_i->
np; ip++) {
4804 atm_i->
p[ip] =
CLAMP(atm_i->
p[ip], 5e-7, 5e4);
4805 atm_i->
t[ip] =
CLAMP(atm_i->
t[ip], 100, 400);
4806 for (
int ig = 0; ig < ctl->
ng; ig++)
4807 atm_i->
q[ig][ip] =
CLAMP(atm_i->
q[ig][ip], 0, 1);
4808 for (
int iw = 0; iw < ctl->
nw; iw++)
4809 atm_i->
k[iw][ip] =
MAX(atm_i->
k[iw][ip], 0);
4813 for (
int icl = 0; icl < ctl->
ncl; icl++)
4814 atm_i->
clk[icl] =
MAX(atm_i->
clk[icl], 0);
4816 for (
int isf = 0; isf < ctl->
nsf; isf++)
4820 formod(ctl, tbl, atm_i, obs_i);
4821 obs2y(ctl, obs_i, y_i, NULL, NULL);
4824 gsl_vector_memcpy(dx, x_i);
4825 gsl_vector_sub(dx, x_a);
4826 gsl_vector_memcpy(dy, y_m);
4827 gsl_vector_sub(dy, y_i);
4833 if (*chisq > chisq_old) {
4835 gsl_vector_sub(x_i, x_step);
4843 LOG(2,
"it= %d / chi^2/m= %g", it, *chisq);
4846 gsl_blas_ddot(x_step, b, &disq);
4866 "atm_final.tab", &dirname, &profile);
4867 write_atm(dirname, filename, ctl, atm_i, profile);
4869 "obs_final.tab", &dirname, &profile);
4870 write_obs(dirname, filename, ctl, obs_i, profile);
4873 "matrix_kernel.tab", &dirname, &profile);
4875 atm_i, obs_i,
"y",
"x",
"r", profile);
4878 gsl_matrix *auxnm = gsl_matrix_alloc(n, m);
4879 gsl_matrix *corr = gsl_matrix_alloc(n, n);
4880 gsl_matrix *gain = gsl_matrix_alloc(n, m);
4885 gsl_matrix_add(cov, s_a_inv);
4891 "matrix_cov_ret.tab", &dirname, &profile);
4893 atm_i, obs_i,
"x",
"x",
"r", profile);
4897 for (
size_t i = 0; i < n; i++)
4898 for (
size_t j = 0; j < n; j++)
4899 gsl_matrix_set(corr, i, j, gsl_matrix_get(cov, i, j)
4900 / sqrt(gsl_matrix_get(cov, i, i))
4901 / sqrt(gsl_matrix_get(cov, j, j)));
4903 "matrix_corr.tab", &dirname, &profile);
4905 atm_i, obs_i,
"x",
"x",
"r", profile);
4909 for (
size_t i = 0; i < n; i++)
4910 for (
size_t j = 0; j < m; j++)
4911 gsl_matrix_set(auxnm, i, j, gsl_matrix_get(k_i, j, i)
4912 *
POW2(gsl_vector_get(sig_eps_inv, j)));
4913 gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, cov, auxnm, 0.0, gain);
4915 "matrix_gain.tab", &dirname, &profile);
4917 atm_i, obs_i,
"x",
"y",
"c", profile);
4929 gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, gain, k_i, 0.0, a);
4931 "matrix_avk.tab", &dirname, &profile);
4933 atm_i, obs_i,
"x",
"x",
"r", profile);
4940 gsl_matrix_free(auxnm);
4941 gsl_matrix_free(corr);
4942 gsl_matrix_free(gain);
4950 gsl_matrix_free(cov);
4951 gsl_matrix_free(k_i);
4952 gsl_matrix_free(s_a_inv);
4955 gsl_vector_free(dx);
4956 gsl_vector_free(dy);
4957 gsl_vector_free(sig_eps_inv);
4958 gsl_vector_free(sig_formod);
4959 gsl_vector_free(sig_noise);
4960 gsl_vector_free(x_a);
4961 gsl_vector_free(x_i);
4962 gsl_vector_free(x_step);
4963 gsl_vector_free(y_aux);
4964 gsl_vector_free(y_i);
4965 gsl_vector_free(y_m);
4978 const double h = 0.02, zrefrac = 60;
4980 double ex0[3], ex1[3], k[
NW], lat, lon, n, ng[3], norm, p, q[
NG], t,
4981 x[3], xh[3], xobs[3], xvp[3], z = 1e99, zmax, zmin;
4988 obs->
tpz[ir] = obs->
vpz[ir];
4993 gsl_stats_minmax(&zmin, &zmax, atm->
z, 1, (
size_t) atm->
np);
4996 if (obs->
obsz[ir] < zmin)
4997 ERRMSG(
"Observer below surface!");
5004 for (
int i = 0; i < 3; i++)
5005 ex0[i] = xvp[i] - xobs[i];
5007 for (
int i = 0; i < 3; i++)
5011 for (
int i = 0; i < 3; i++)
5015 if (obs->
obsz[ir] > zmax) {
5016 double dmax = norm, dmin = 0;
5017 while (fabs(dmin - dmax) > 0.001) {
5018 const double d = (dmax + dmin) / 2;
5019 for (
int i = 0; i < 3; i++)
5020 x[i] = xobs[i] + d * ex0[i];
5022 if (z <= zmax && z > zmax - 0.001)
5024 if (z < zmax - 0.0005)
5035 double ds = ctl->
rayds;
5036 if (ctl->
raydz > 0) {
5038 for (
int i = 0; i < 3; i++)
5039 xh[i] = x[i] / norm;
5040 const double cosa = fabs(
DOTP(ex0, xh));
5049 if (z < zmin || z > zmax) {
5050 stop = (z < zmin ? 2 : 1);
5053 zmin ? zmin : zmax) - los->
z[los->
np - 1]) / (z - los->
z[los->
np -
5056 los->
lat[los->
np - 1], xh);
5057 for (
int i = 0; i < 3; i++)
5058 x[i] = xh[i] + frac * (x[i] - xh[i]);
5060 los->
ds[los->
np - 1] = ds * frac;
5068 los->
lon[los->
np] = lon;
5069 los->
lat[los->
np] = lat;
5070 los->
z[los->
np] = z;
5071 los->
p[los->
np] = p;
5072 los->
t[los->
np] = t;
5073 for (
int ig = 0; ig < ctl->
ng; ig++)
5074 los->
q[los->
np][ig] = q[ig];
5075 for (
int id = 0;
id < ctl->
nd;
id++)
5076 los->
k[los->
np][
id] = k[ctl->
window[
id]];
5077 los->
ds[los->
np] = ds;
5080 if (ctl->
ncl > 0 && atm->
cldz > 0) {
5081 const double aux = exp(-0.5 *
POW2((z - atm->
clz) / atm->
cldz));
5082 for (
int id = 0;
id < ctl->
nd;
id++) {
5086 ctl->
clnu[icl + 1], atm->
clk[icl + 1], ctl->
nu[
id]);
5092 ERRMSG(
"Too many LOS points!");
5098 if (ctl->
nsf > 0 && atm->
sft > 0)
5100 los->
sft = (stop == 2 ? t : -999);
5103 for (
int id = 0;
id < ctl->
nd;
id++) {
5104 los->
sfeps[id] = 1.0;
5108 ctl->
sfnu[isf + 1], atm->
sfeps[isf + 1],
5118 if (ctl->
refrac && z <= zrefrac)
5124 for (
int i = 0; i < 3; i++)
5125 ex1[i] = ex0[i] * n;
5128 if (ctl->
refrac && z <= zrefrac) {
5129 for (
int i = 0; i < 3; i++)
5130 xh[i] = x[i] + 0.5 * ds * ex0[i];
5134 for (
int i = 0; i < 3; i++) {
5142 for (
int i = 0; i < 3; i++)
5146 for (
int i = 0; i < 3; i++)
5147 ex1[i] += ds * ng[i];
5151 for (
int i = 0; i < 3; i++)
5155 for (
int i = 0; i < 3; i++)
5156 x[i] += 0.5 * ds * (ex0[i] + ex1[i]);
5159 for (
int i = 0; i < 3; i++)
5167 for (
int ip = los->
np - 1; ip >= 1; ip--)
5168 los->
ds[ip] = 0.5 * (los->
ds[ip - 1] + los->
ds[ip]);
5172 for (
int ip = 0; ip < los->
np; ip++)
5173 for (
int ig = 0; ig < ctl->
ng; ig++)
5174 los->
u[ip][ig] = 10 * los->
q[ip][ig] * los->
p[ip]
5175 / (
KB * los->
t[ip]) * los->
ds[ip];
5178 for (
int ig = 0; ig < ctl->
ng; ig++) {
5179 los->
cgu[0][ig] = los->
u[0][ig];
5180 los->
cgp[0][ig] = los->
u[0][ig] * los->
p[0];
5181 los->
cgt[0][ig] = los->
u[0][ig] * los->
t[0];
5183 for (
int ip = 1; ip < los->
np; ip++)
5184 for (
int ig = 0; ig < ctl->
ng; ig++) {
5185 los->
cgu[ip][ig] = los->
cgu[ip - 1][ig] + los->
u[ip][ig];
5186 los->
cgp[ip][ig] = los->
cgp[ip - 1][ig] + los->
u[ip][ig] * los->
p[ip];
5187 los->
cgt[ip][ig] = los->
cgt[ip - 1][ig] + los->
u[ip][ig] * los->
t[ip];
5189 for (
int ip = 0; ip < los->
np; ip++)
5190 for (
int ig = 0; ig < ctl->
ng; ig++)
5191 if (los->
cgu[ip][ig] != 0) {
5192 los->
cgp[ip][ig] /= los->
cgu[ip][ig];
5193 los->
cgt[ip][ig] /= los->
cgu[ip][ig];
5200 const char *dirname,
5201 const char *filename,
5211 if (dirname != NULL)
5212 sprintf(file,
"%s/%s", dirname, filename);
5214 sprintf(file,
"%s", filename);
5217 LOG(1,
"Read atmospheric data: %s", file);
5224 else if (ctl->
atmfmt == 2)
5228 else if (ctl->
atmfmt == 3)
5233 ERRMSG(
"Could not read any data!");
5237 LOG(2,
"Number of data points: %d", atm->
np);
5238 gsl_stats_minmax(&mini, &maxi, atm->
time, 1, (
size_t) atm->
np);
5239 LOG(2,
"Time range: %.2f ... %.2f s", mini, maxi);
5240 gsl_stats_minmax(&mini, &maxi, atm->
z, 1, (
size_t) atm->
np);
5241 LOG(2,
"Altitude range: %g ... %g km", mini, maxi);
5242 gsl_stats_minmax(&mini, &maxi, atm->
lon, 1, (
size_t) atm->
np);
5243 LOG(2,
"Longitude range: %g ... %g deg", mini, maxi);
5244 gsl_stats_minmax(&mini, &maxi, atm->
lat, 1, (
size_t) atm->
np);
5245 LOG(2,
"Latitude range: %g ... %g deg", mini, maxi);
5246 gsl_stats_minmax(&mini, &maxi, atm->
p, 1, (
size_t) atm->
np);
5247 LOG(2,
"Pressure range: %g ... %g hPa", maxi, mini);
5248 gsl_stats_minmax(&mini, &maxi, atm->
t, 1, (
size_t) atm->
np);
5249 LOG(2,
"Temperature range: %g ... %g K", mini, maxi);
5250 for (
int ig = 0; ig < ctl->
ng; ig++) {
5251 gsl_stats_minmax(&mini, &maxi, atm->
q[ig], 1, (
size_t) atm->
np);
5252 LOG(2,
"Emitter %s range: %g ... %g ppv", ctl->
emitter[ig], mini, maxi);
5254 for (
int iw = 0; iw < ctl->
nw; iw++) {
5255 gsl_stats_minmax(&mini, &maxi, atm->
k[iw], 1, (
size_t) atm->
np);
5256 LOG(2,
"Extinction range (window %d): %g ... %g km^-1", iw, mini, maxi);
5259 LOG(2,
"Cloud layer: z= %g km | dz= %g km | k= %g ... %g km^-1",
5262 LOG(2,
"Cloud layer: none");
5265 "Surface: T_s = %g K | eps= %g ... %g",
5268 LOG(2,
"Surface: none");
5274 const char *filename,
5283 if (!(in = fopen(filename,
"r")))
5284 ERRMSG(
"Cannot open file!");
5287 char line[
LEN], *tok;
5288 while (fgets(line,
LEN, in)) {
5291 TOK(line, tok,
"%lg", atm->
time[atm->
np]);
5292 TOK(NULL, tok,
"%lg", atm->
z[atm->
np]);
5293 TOK(NULL, tok,
"%lg", atm->
lon[atm->
np]);
5294 TOK(NULL, tok,
"%lg", atm->
lat[atm->
np]);
5295 TOK(NULL, tok,
"%lg", atm->
p[atm->
np]);
5296 TOK(NULL, tok,
"%lg", atm->
t[atm->
np]);
5297 for (
int ig = 0; ig < ctl->
ng; ig++)
5298 TOK(NULL, tok,
"%lg", atm->
q[ig][atm->
np]);
5299 for (
int iw = 0; iw < ctl->
nw; iw++)
5300 TOK(NULL, tok,
"%lg", atm->
k[iw][atm->
np]);
5301 if (ctl->
ncl > 0 && atm->
np == 0) {
5302 TOK(NULL, tok,
"%lg", atm->
clz);
5303 TOK(NULL, tok,
"%lg", atm->
cldz);
5304 for (
int icl = 0; icl < ctl->
ncl; icl++)
5305 TOK(NULL, tok,
"%lg", atm->
clk[icl]);
5307 if (ctl->
nsf > 0 && atm->
np == 0) {
5308 TOK(NULL, tok,
"%lg", atm->
sft);
5309 for (
int isf = 0; isf < ctl->
nsf; isf++)
5310 TOK(NULL, tok,
"%lg", atm->
sfeps[isf]);
5314 if ((++atm->
np) >
NP)
5315 ERRMSG(
"Too many data points!");
5325 const char *filename,
5331 if (!(in = fopen(filename,
"r")))
5332 ERRMSG(
"Cannot open file!");
5339 if (memcmp(magic,
"ATM1", 4) != 0)
5340 ERRMSG(
"Invalid magic string!");
5342 int ng, nw, ncl, nsf;
5355 if (ng != ctl->
ng || nw != ctl->
nw || ncl != ctl->
ncl || nsf != ctl->
nsf)
5356 ERRMSG(
"Error reading file header!");
5365 ERRMSG(
"Too many data points!");
5384 for (
int ig = 0; ig < ctl->
ng; ig++)
5385 FREAD(atm->
q[ig],
double,
5388 for (
int iw = 0; iw < ctl->
nw; iw++)
5389 FREAD(atm->
k[iw],
double,
5419 const char *filename,
5424 int ncid, var_time, var_z, var_lon, var_lat, var_p, var_t, var_q[
NG],
5425 var_k[
NW], var_cz = -1, var_cdz = -1, var_ck[
NCL], var_sft =
5426 -1, var_sfe[
NSF], var_nlev = -1;
5431 NC(nc_open(filename, NC_NOWRITE, &ncid));
5434 size_t start[2] = { (size_t) profile, 0 };
5435 size_t count[2] = { 1, 0 };
5438 NC(nc_inq_varid(ncid,
"nlev", &var_nlev));
5439 NC(nc_get_vara_int(ncid, var_nlev, start, count, &atm->
np));
5440 if (atm->
np < 1 || atm->
np >
NP)
5441 ERRMSG(
"Number of level out of range!");
5444 count[1] = (size_t) atm->
np;
5447 NC(nc_inq_varid(ncid,
"time", &var_time));
5448 NC(nc_inq_varid(ncid,
"z", &var_z));
5449 NC(nc_inq_varid(ncid,
"lon", &var_lon));
5450 NC(nc_inq_varid(ncid,
"lat", &var_lat));
5451 NC(nc_inq_varid(ncid,
"p", &var_p));
5452 NC(nc_inq_varid(ncid,
"t", &var_t));
5455 for (
int ig = 0; ig < ctl->
ng; ig++)
5456 NC(nc_inq_varid(ncid, ctl->
emitter[ig], &var_q[ig]));
5459 for (
int iw = 0; iw < ctl->
nw; iw++) {
5460 sprintf(varname,
"ext_win_%d", iw);
5461 NC(nc_inq_varid(ncid, varname, &var_k[iw]));
5466 NC(nc_inq_varid(ncid,
"cld_z", &var_cz));
5467 NC(nc_inq_varid(ncid,
"cld_dz", &var_cdz));
5468 for (
int icl = 0; icl < ctl->
ncl; icl++) {
5469 sprintf(varname,
"cld_k_%.4f", ctl->
clnu[icl]);
5470 NC(nc_inq_varid(ncid, varname, &var_ck[icl]));
5476 NC(nc_inq_varid(ncid,
"srf_t", &var_sft));
5477 for (
int isf = 0; isf < ctl->
nsf; isf++) {
5478 sprintf(varname,
"srf_eps_%.4f", ctl->
sfnu[isf]);
5479 NC(nc_inq_varid(ncid, varname, &var_sfe[isf]));
5484 NC(nc_get_vara_double(ncid, var_time, start, count, atm->
time));
5485 NC(nc_get_vara_double(ncid, var_z, start, count, atm->
z));
5486 NC(nc_get_vara_double(ncid, var_lon, start, count, atm->
lon));
5487 NC(nc_get_vara_double(ncid, var_lat, start, count, atm->
lat));
5488 NC(nc_get_vara_double(ncid, var_p, start, count, atm->
p));
5489 NC(nc_get_vara_double(ncid, var_t, start, count, atm->
t));
5492 for (
int ig = 0; ig < ctl->
ng; ig++)
5493 NC(nc_get_vara_double(ncid, var_q[ig], start, count, atm->
q[ig]));
5496 for (
int iw = 0; iw < ctl->
nw; iw++)
5497 NC(nc_get_vara_double(ncid, var_k[iw], start, count, atm->
k[iw]));
5501 NC(nc_get_vara_double(ncid, var_cz, start, count, &atm->
clz));
5502 NC(nc_get_vara_double(ncid, var_cdz, start, count, &atm->
cldz));
5503 for (
int icl = 0; icl < ctl->
ncl; icl++)
5504 NC(nc_get_vara_double(ncid, var_ck[icl], start, count, &atm->
clk[icl]));
5509 NC(nc_get_vara_double(ncid, var_sft, start, count, &atm->
sft));
5511 for (
int isf = 0; isf < ctl->
nsf; isf++)
5512 NC(nc_get_vara_double
5513 (ncid, var_sfe[isf], start, count, &atm->
sfeps[isf]));
5528 LOG(1,
"\nJuelich Rapid Spectral Simulation Code (JURASSIC)\n"
5529 "(executable: %s | version: %s | compiled: %s, %s)\n",
5530 argv[0], VERSION, __DATE__, __TIME__);
5533 ctl->
ng = (int)
scan_ctl(argc, argv,
"NG", -1,
"0", NULL);
5534 if (ctl->
ng < 0 || ctl->
ng >
NG)
5535 ERRMSG(
"Set 0 <= NG <= MAX!");
5536 for (
int ig = 0; ig < ctl->
ng; ig++)
5544 ctl->
nd = (int)
scan_ctl(argc, argv,
"ND", -1,
"0", NULL);
5545 if (ctl->
nd < 0 || ctl->
nd >
ND)
5546 ERRMSG(
"Set 0 <= ND <= MAX!");
5547 for (
int id = 0;
id < ctl->
nd;
id++)
5548 ctl->
nu[
id] =
scan_ctl(argc, argv,
"NU",
id,
"", NULL);
5551 ctl->
nw = (int)
scan_ctl(argc, argv,
"NW", -1,
"1", NULL);
5552 if (ctl->
nw < 0 || ctl->
nw >
NW)
5553 ERRMSG(
"Set 0 <= NW <= MAX!");
5554 for (
int id = 0;
id < ctl->
nd;
id++)
5555 ctl->
window[
id] = (
int)
scan_ctl(argc, argv,
"WINDOW",
id,
"0", NULL);
5558 ctl->
ncl = (int)
scan_ctl(argc, argv,
"NCL", -1,
"0", NULL);
5560 ERRMSG(
"Set 0 <= NCL <= MAX!");
5563 for (
int icl = 0; icl < ctl->
ncl; icl++)
5564 ctl->
clnu[icl] =
scan_ctl(argc, argv,
"CLNU", icl,
"", NULL);
5567 ctl->
nsf = (int)
scan_ctl(argc, argv,
"NSF", -1,
"0", NULL);
5569 ERRMSG(
"Set 0 <= NSF <= MAX!");
5572 for (
int isf = 0; isf < ctl->
nsf; isf++)
5573 ctl->
sfnu[isf] =
scan_ctl(argc, argv,
"SFNU", isf,
"", NULL);
5574 ctl->
sftype = (int)
scan_ctl(argc, argv,
"SFTYPE", -1,
"2", NULL);
5576 ERRMSG(
"Set 0 <= SFTYPE <= 3!");
5577 ctl->
sfsza =
scan_ctl(argc, argv,
"SFSZA", -1,
"-999", NULL);
5581 ctl->
tblfmt = (int)
scan_ctl(argc, argv,
"TBLFMT", -1,
"1", NULL);
5583 ERRMSG(
"Unknown look-up table file format, set TBLFMT to 1, 2, or 3!");
5586 ctl->
atmfmt = (int)
scan_ctl(argc, argv,
"ATMFMT", -1,
"1", NULL);
5588 ERRMSG(
"Unknown atmospheric file format, set ATMFMT to 1, 2, or 3!");
5589 ctl->
obsfmt = (int)
scan_ctl(argc, argv,
"OBSFMT", -1,
"1", NULL);
5591 ERRMSG(
"Unknown observation file format, set OBSFMT to 1, 2, or 3!");
5594 ERRMSG(
"Unknown matrix file format, set MATRIXFMT to 1, 2, or 3!");
5597 ctl->
hydz =
scan_ctl(argc, argv,
"HYDZ", -1,
"-999", NULL);
5602 ctl->
ctm_n2 = (int)
scan_ctl(argc, argv,
"CTM_N2", -1,
"1", NULL);
5603 ctl->
ctm_o2 = (int)
scan_ctl(argc, argv,
"CTM_O2", -1,
"1", NULL);
5606 ctl->
refrac = (int)
scan_ctl(argc, argv,
"REFRAC", -1,
"1", NULL);
5608 ctl->
raydz =
scan_ctl(argc, argv,
"RAYDZ", -1,
"0.1", NULL);
5612 if (ctl->
fov[0] !=
'-')
5620 for (
int ig = 0; ig < ctl->
ng; ig++) {
5624 for (
int iw = 0; iw < ctl->
nw; iw++) {
5637 (int)
scan_ctl(argc, argv,
"WRITE_MATRIX", -1,
"0", NULL);
5640 ctl->
formod = (int)
scan_ctl(argc, argv,
"FORMOD", -1,
"1", NULL);
5643 for (
int ig = 0; ig < ctl->
ng; ig++)
5650 const char *dirname,
5651 const char *filename,
5670 ERRMSG(
"Unknown matrix file format, check MATRIXFMT!");
5676 const char *dirname,
5677 const char *filename,
5678 gsl_matrix *matrix) {
5687 if (dirname != NULL)
5688 sprintf(file,
"%s/%s", dirname, filename);
5690 sprintf(file,
"%s", filename);
5693 LOG(1,
"Read matrix: %s", file);
5697 if (!(in = fopen(file,
"r")))
5698 ERRMSG(
"Cannot open file!");
5701 gsl_matrix_set_zero(matrix);
5702 while (fgets(line,
LEN, in))
5703 if (sscanf(line,
"%d %s %s %s %s %s %d %s %s %s %s %s %lg",
5704 &i, dum, dum, dum, dum, dum,
5705 &j, dum, dum, dum, dum, dum, &value) == 13)
5706 gsl_matrix_set(matrix, (
size_t) i, (
size_t) j, value);
5715 const char *dirname,
5716 const char *filename,
5717 gsl_matrix *matrix) {
5719 char file[
LEN], magic[4];
5723 if (dirname != NULL)
5724 sprintf(file,
"%s/%s", dirname, filename);
5726 sprintf(file,
"%s", filename);
5729 LOG(1,
"Read matrix: %s", file);
5733 if (!(in = fopen(file,
"r")))
5734 ERRMSG(
"Cannot open file!");
5740 if (memcmp(magic,
"MAT1", 4) != 0)
5741 ERRMSG(
"Invalid magic string!");
5748 if (nr != matrix->size1 || nc != matrix->size2)
5749 ERRMSG(
"Error reading file header!");
5752 for (
size_t i = 0; i < nr; i++)
5753 for (
size_t j = 0; j < nc; j++) {
5755 FREAD(&value,
double,
5758 gsl_matrix_set(matrix, i, j, value);
5768 const char *dirname,
5769 const char *filename,
5775 int ncid, dimid_row, dimid_col, varid;
5780 if (dirname != NULL)
5781 sprintf(file,
"%s/%s", dirname, filename);
5783 sprintf(file,
"%s", filename);
5786 LOG(1,
"Read matrix: %s", file);
5789 NC(nc_open(file, NC_NOWRITE, &ncid));
5792 NC(nc_inq_dimid(ncid,
"row", &dimid_row));
5793 NC(nc_inq_dimid(ncid,
"col", &dimid_col));
5794 NC(nc_inq_dimlen(ncid, dimid_row, &nr));
5795 NC(nc_inq_dimlen(ncid, dimid_col, &nc));
5796 if (nr != matrix->size1 || nc != matrix->size2)
5797 ERRMSG(
"Error reading file header!");
5800 NC(nc_inq_varid(ncid,
"matrix", &varid));
5801 for (
size_t i = 0; i < nr; i++)
5802 for (
size_t j = 0; j < nc; j++) {
5804 size_t start[3] = { (size_t) dataset, i, j };
5805 size_t count[3] = { 1, 1, 1 };
5806 NC(nc_get_vara_double(ncid, varid, start, count, &value));
5807 gsl_matrix_set(matrix, i, j, value);
5817 const char *dirname,
5818 const char *filename,
5825 if (dirname != NULL)
5826 sprintf(file,
"%s/%s", dirname, filename);
5828 sprintf(file,
"%s", filename);
5831 LOG(1,
"Read observation data: %s", file);
5838 else if (ctl->
obsfmt == 2)
5842 else if (ctl->
obsfmt == 3)
5847 ERRMSG(
"Could not read any data!");
5851 LOG(2,
"Number of ray paths: %d", obs->
nr);
5852 gsl_stats_minmax(&mini, &maxi, obs->
time, 1, (
size_t) obs->
nr);
5853 LOG(2,
"Time range: %.2f ... %.2f s", mini, maxi);
5854 gsl_stats_minmax(&mini, &maxi, obs->
obsz, 1, (
size_t) obs->
nr);
5855 LOG(2,
"Observer altitude range: %g ... %g km", mini, maxi);
5856 gsl_stats_minmax(&mini, &maxi, obs->
obslon, 1, (
size_t) obs->
nr);
5857 LOG(2,
"Observer longitude range: %g ... %g deg", mini, maxi);
5858 gsl_stats_minmax(&mini, &maxi, obs->
obslat, 1, (
size_t) obs->
nr);
5859 LOG(2,
"Observer latitude range: %g ... %g deg", mini, maxi);
5860 gsl_stats_minmax(&mini, &maxi, obs->
vpz, 1, (
size_t) obs->
nr);
5861 LOG(2,
"View point altitude range: %g ... %g km", mini, maxi);
5862 gsl_stats_minmax(&mini, &maxi, obs->
vplon, 1, (
size_t) obs->
nr);
5863 LOG(2,
"View point longitude range: %g ... %g deg", mini, maxi);
5864 gsl_stats_minmax(&mini, &maxi, obs->
vplat, 1, (
size_t) obs->
nr);
5865 LOG(2,
"View point latitude range: %g ... %g deg", mini, maxi);
5866 gsl_stats_minmax(&mini, &maxi, obs->
tpz, 1, (
size_t) obs->
nr);
5867 LOG(2,
"Tangent point altitude range: %g ... %g km", mini, maxi);
5868 gsl_stats_minmax(&mini, &maxi, obs->
tplon, 1, (
size_t) obs->
nr);
5869 LOG(2,
"Tangent point longitude range: %g ... %g deg", mini, maxi);
5870 gsl_stats_minmax(&mini, &maxi, obs->
tplat, 1, (
size_t) obs->
nr);
5871 LOG(2,
"Tangent point latitude range: %g ... %g deg", mini, maxi);
5872 for (
int id = 0;
id < ctl->
nd;
id++) {
5873 gsl_stats_minmax(&mini, &maxi, obs->
rad[
id], 1, (
size_t) obs->
nr);
5875 LOG(2,
"Brightness temperature (%.4f cm^-1) range: %g ... %g K",
5876 ctl->
nu[
id], mini, maxi);
5878 LOG(2,
"Radiance (%.4f cm^-1) range: %g ... %g W/(m^2 sr cm^-1)",
5879 ctl->
nu[
id], mini, maxi);
5882 for (
int id = 0;
id < ctl->
nd;
id++) {
5883 gsl_stats_minmax(&mini, &maxi, obs->
tau[
id], 1, (
size_t) obs->
nr);
5884 LOG(2,
"Transmittance (%.4f cm^-1) range: %g ... %g",
5885 ctl->
nu[
id], mini, maxi);
5892 const char *filename,
5901 if (!(in = fopen(filename,
"r")))
5902 ERRMSG(
"Cannot open file!");
5905 char line[
LEN], *tok;
5906 while (fgets(line,
LEN, in)) {
5909 TOK(line, tok,
"%lg", obs->
time[obs->
nr]);
5910 TOK(NULL, tok,
"%lg", obs->
obsz[obs->
nr]);
5913 TOK(NULL, tok,
"%lg", obs->
vpz[obs->
nr]);
5916 TOK(NULL, tok,
"%lg", obs->
tpz[obs->
nr]);
5919 for (
int id = 0;
id < ctl->
nd;
id++)
5920 TOK(NULL, tok,
"%lg", obs->
rad[
id][obs->
nr]);
5921 for (
int id = 0;
id < ctl->
nd;
id++)
5922 TOK(NULL, tok,
"%lg", obs->
tau[
id][obs->
nr]);
5925 if ((++obs->
nr) >
NR)
5926 ERRMSG(
"Too many rays!");
5936 const char *filename,
5942 if (!(in = fopen(filename,
"r")))
5943 ERRMSG(
"Cannot open file!");
5950 if (memcmp(magic,
"OBS1", 4) != 0)
5951 ERRMSG(
"Invalid magic string!");
5958 ERRMSG(
"Error reading file header!");
5967 ERRMSG(
"Too many ray paths!");
5998 for (
int id = 0;
id < ctl->
nd;
id++)
6002 for (
int id = 0;
id < ctl->
nd;
id++)
6014 const char *filename,
6017 const int profile) {
6019 int ncid, var_nray = -1, var_time = -1, var_obsz = -1, var_obslon =
6020 -1, var_obslat = -1, var_vpz = -1, var_vplon = -1, var_vplat =
6021 -1, var_tpz = -1, var_tplon = -1, var_tplat =
6022 -1, var_rad[
ND], var_tau[
ND];
6023 const char *spec_prefix = ctl->
write_bbt ?
"bt" :
"rad";
6026 NC(nc_open(filename, NC_NOWRITE, &ncid));
6029 size_t start[2] = { (size_t) profile, 0 };
6030 size_t count[2] = { 1, 0 };
6033 NC(nc_inq_varid(ncid,
"nray", &var_nray));
6034 NC(nc_get_vara_int(ncid, var_nray, start, count, &obs->
nr));
6035 if (obs->
nr < 1 || obs->
nr >
NR)
6036 ERRMSG(
"Number of ray paths out of range!");
6039 count[1] = (size_t) obs->
nr;
6042 NC(nc_inq_varid(ncid,
"time", &var_time));
6043 NC(nc_inq_varid(ncid,
"obs_z", &var_obsz));
6044 NC(nc_inq_varid(ncid,
"obs_lon", &var_obslon));
6045 NC(nc_inq_varid(ncid,
"obs_lat", &var_obslat));
6047 NC(nc_inq_varid(ncid,
"vp_z", &var_vpz));
6048 NC(nc_inq_varid(ncid,
"vp_lon", &var_vplon));
6049 NC(nc_inq_varid(ncid,
"vp_lat", &var_vplat));
6051 NC(nc_inq_varid(ncid,
"tp_z", &var_tpz));
6052 NC(nc_inq_varid(ncid,
"tp_lon", &var_tplon));
6053 NC(nc_inq_varid(ncid,
"tp_lat", &var_tplat));
6056 for (
int id = 0;
id < ctl->
nd;
id++) {
6059 sprintf(varname,
"%s_%.4f", spec_prefix, ctl->
nu[
id]);
6060 NC(nc_inq_varid(ncid, varname, &var_rad[
id]));
6062 sprintf(varname,
"tau_%.4f", ctl->
nu[
id]);
6063 NC(nc_inq_varid(ncid, varname, &var_tau[
id]));
6067 NC(nc_get_vara_double(ncid, var_time, start, count, obs->
time));
6068 NC(nc_get_vara_double(ncid, var_obsz, start, count, obs->
obsz));
6069 NC(nc_get_vara_double(ncid, var_obslon, start, count, obs->
obslon));
6070 NC(nc_get_vara_double(ncid, var_obslat, start, count, obs->
obslat));
6072 NC(nc_get_vara_double(ncid, var_vpz, start, count, obs->
vpz));
6073 NC(nc_get_vara_double(ncid, var_vplon, start, count, obs->
vplon));
6074 NC(nc_get_vara_double(ncid, var_vplat, start, count, obs->
vplat));
6076 NC(nc_get_vara_double(ncid, var_tpz, start, count, obs->
tpz));
6077 NC(nc_get_vara_double(ncid, var_tplon, start, count, obs->
tplon));
6078 NC(nc_get_vara_double(ncid, var_tplat, start, count, obs->
tplat));
6081 for (
int id = 0;
id < ctl->
nd;
id++) {
6082 NC(nc_get_vara_double(ncid, var_rad[
id], start, count, obs->
rad[
id]));
6083 NC(nc_get_vara_double(ncid, var_tau[
id], start, count, obs->
tau[
id]));
6093 const char *basename,
6099 double fsum = 0, nu2[
NSHAPE], *nurfm, *rad, radsum = 0;
6104 ALLOC(nurfm,
double,
6112 sprintf(filename,
"%s_%05d.asc", basename, (
int) (z * 1000));
6113 if (!(in = fopen(filename,
"r"))) {
6114 sprintf(filename,
"%s_%05d.asc", basename, (
int) (z * 1000) + 1);
6115 if (!(in = fopen(filename,
"r")))
6116 ERRMSG(
"Cannot find RFM data file!");
6125 nu2[n - 1] = nu[n - 1];
6126 for (
int i = 1; i < n - 1; i++)
6127 nu2[i] =
LIN(0.0, nu2[0], n - 1.0, nu2[n - 1], i);
6130 for (
int ipts = 0; ipts < npts; ipts++)
6131 if (nurfm[ipts] >= nu2[0] && nurfm[ipts] <= nu2[n - 1]) {
6132 const int idx =
locate_irr(nu2, n, nurfm[ipts]);
6134 LIN(nu2[idx], f[idx], nu2[idx + 1], f[idx + 1], nurfm[ipts]);
6136 radsum += filt * rad[ipts];
6144 return radsum / fsum;
6157 (int)
scan_ctl(argc, argv,
"KERNEL_RECOMP", -1,
"3", NULL);
6164 for (
int id = 0;
id < ctl->
nd;
id++)
6167 for (
int id = 0;
id < ctl->
nd;
id++)
6178 for (
int ig = 0; ig < ctl->
ng; ig++) {
6179 ret->
err_q[ig] =
scan_ctl(argc, argv,
"ERR_Q", ig,
"0", NULL);
6184 for (
int iw = 0; iw < ctl->
nw; iw++) {
6185 ret->
err_k[iw] =
scan_ctl(argc, argv,
"ERR_K", iw,
"0", NULL);
6192 for (
int icl = 0; icl < ctl->
ncl; icl++)
6196 for (
int isf = 0; isf < ctl->
nsf; isf++)
6201 scan_ctl(argc, argv,
"SHARED_IO_PROFLIST", -1,
"-",
6203 scan_ctl(argc, argv,
"SHARED_IO_ATM_APR_FILE", -1,
"-",
6205 scan_ctl(argc, argv,
"SHARED_IO_OBS_MEAS_FILE", -1,
"-",
6207 scan_ctl(argc, argv,
"SHARED_IO_ATM_FINAL_FILE", -1,
"-",
6209 scan_ctl(argc, argv,
"SHARED_IO_OBS_FINAL_FILE", -1,
"-",
6211 scan_ctl(argc, argv,
"SHARED_IO_MATRIX_COV_APR_FILE", -1,
"-",
6213 scan_ctl(argc, argv,
"SHARED_IO_MATRIX_KERNEL_FILE", -1,
"-",
6215 scan_ctl(argc, argv,
"SHARED_IO_MATRIX_COV_RET_FILE", -1,
"-",
6217 scan_ctl(argc, argv,
"SHARED_IO_MATRIX_CORR_FILE", -1,
"-",
6219 scan_ctl(argc, argv,
"SHARED_IO_MATRIX_GAIN_FILE", -1,
"-",
6221 scan_ctl(argc, argv,
"SHARED_IO_MATRIX_AVK_FILE", -1,
"-",
6223 scan_ctl(argc, argv,
"SHARED_IO_ATM_ERR_TOTAL_FILE", -1,
"-",
6225 scan_ctl(argc, argv,
"SHARED_IO_ATM_ERR_NOISE_FILE", -1,
"-",
6227 scan_ctl(argc, argv,
"SHARED_IO_ATM_ERR_FORMOD_FILE", -1,
"-",
6229 scan_ctl(argc, argv,
"SHARED_IO_ATM_CONT_FILE", -1,
"-",
6231 scan_ctl(argc, argv,
"SHARED_IO_ATM_RES_FILE", -1,
"-",
6238 const char *filename,
6243 char *line = NULL, *tok;
6245 size_t line_buf_size = 0;
6247 double dnu, nu0, nu1;
6252 LOG(1,
"Read RFM data: %s", filename);
6256 if (!(in = fopen(filename,
"r")))
6257 ERRMSG(
"Cannot open file!");
6260 for (
int i = 0; i < 4; i++)
6261 if (getline(&line, &line_buf_size, in) == -1)
6262 ERRMSG(
"Error while reading file header!");
6263 if (sscanf(line,
"%d %lg %lg %lg", npts, &nu0, &dnu, &nu1) != 4)
6264 ERRMSG(
"Invalid spectrum header format!");
6268 ERRMSG(
"Too many spectral grid points!");
6271 while (getline(&line, &line_buf_size, in) != -1 && ipts < *npts) {
6272 tok = strtok(line,
" \t\n");
6273 while (tok != NULL && ipts < *npts) {
6274 if (sscanf(tok,
"%lg", &rad[ipts]) == 1)
6276 tok = strtok(NULL,
" \t\n");
6282 ERRMSG(
"Error while reading RFM data!");
6285 for (ipts = 0; ipts < *npts; ipts++)
6286 nu[ipts] =
LIN(0.0, nu0, (
double) (*npts - 1), nu1, (
double) ipts);
6298 const char *filename,
6306 LOG(1,
"Read shape function: %s", filename);
6310 if (!(in = fopen(filename,
"r")))
6311 ERRMSG(
"Cannot open file!");
6315 while (fgets(line,
LEN, in))
6316 if (sscanf(line,
"%lg %lg", &x[*n], &y[*n]) == 2)
6318 ERRMSG(
"Too many data points!");
6325 ERRMSG(
"Could not read any data!");
6329 LOG(2,
"Number of data points: %d", *n);
6330 gsl_stats_minmax(&mini, &maxi, x, 1, (
size_t) *n);
6331 LOG(2,
"Range of x values: %.4f ... %.4f", mini, maxi);
6332 gsl_stats_minmax(&mini, &maxi, y, 1, (
size_t) *n);
6333 LOG(2,
"Range of y values: %g ... %g", mini, maxi);
6346 for (
int id = 0;
id < ctl->
nd;
id++)
6350 for (
int ig = 0; ig < ctl->
ng; ig++) {
6354 for (
int id = 0;
id < ctl->
nd;
id++) {
6360 else if (ctl->
tblfmt == 2)
6361 for (
int id = 0;
id < ctl->
nd;
id++) {
6367 else if (ctl->
tblfmt == 3) {
6371 char filename[2 *
LEN];
6373 if (nc_open(filename, NC_NOWRITE, &ncid) != NC_NOERR) {
6374 WARN(
"Missing emissivity table: %s", filename);
6377 LOG(1,
"Read emissivity table: %s", filename);
6380 for (
int id = 0;
id < ctl->
nd;
id++) {
6391 for (
int id = 0;
id < ctl->
nd;
id++)
6392 for (
int ig = 0; ig < ctl->
ng; ig++)
6393 for (
int ip = 0; ip < tbl->
np[id][ig]; ip++)
6394 tbl->
lnp[
id][ig][ip] = log(tbl->
p[
id][ig][ip]);
6398 for (
int id = 0;
id < ctl->
nd;
id++) {
6399 char filename[2 *
LEN];
6400 sprintf(filename,
"%s_%.4f.filt", ctl->
tblbase, ctl->
nu[
id]);
6421 double eps, eps_old = -999, press, press_old = -999, temp,
6422 temp_old = -999, u, u_old = -999;
6426 char filename[2 *
LEN];
6427 sprintf(filename,
"%s_%.4f_%s.tab", ctl->
tblbase,
6432 if (!(in = fopen(filename,
"r"))) {
6433 WARN(
"Missing emissivity table: %s", filename);
6436 LOG(1,
"Read emissivity table: %s", filename);
6439 tbl->
np[id][ig] = -1;
6443 while (fgets(line,
LEN, in)) {
6446 if (sscanf(line,
"%lg %lg %lg %lg", &press, &temp, &u, &eps) != 4)
6450 if (u < UMIN || u >
UMAX || eps < EPSMIN || eps >
EPSMAX) {
6456 if (press != press_old) {
6458 if ((++tbl->
np[
id][ig]) >=
TBLNP)
6459 ERRMSG(
"Too many pressure levels!");
6460 tbl->
nt[id][ig][tbl->
np[id][ig]] = -1;
6464 if (temp != temp_old) {
6466 if ((++tbl->
nt[
id][ig][tbl->
np[
id][ig]]) >=
TBLNT)
6467 ERRMSG(
"Too many temperatures!");
6468 tbl->
nu[id][ig][tbl->
np[id][ig]]
6469 [tbl->
nt[id][ig][tbl->
np[id][ig]]] = -1;
6472 tbl->
logu[id][ig][tbl->
np[id][ig]]
6473 [tbl->
nt[id][ig][tbl->
np[id][ig]]] = NULL;
6474 tbl->
logeps[id][ig][tbl->
np[id][ig]]
6475 [tbl->
nt[id][ig][tbl->
np[id][ig]]] = NULL;
6479 if ((eps > eps_old && u > u_old) || tbl->
nu[
id][ig][tbl->
np[
id][ig]]
6480 [tbl->
nt[
id][ig][tbl->
np[
id][ig]]] < 0) {
6483 if ((++tbl->
nu[
id][ig][tbl->
np[
id][ig]]
6484 [tbl->
nt[
id][ig][tbl->
np[
id][ig]]]) >=
TBLNU)
6485 ERRMSG(
"Too many column densities!");
6488 const int ip = tbl->
np[id][ig];
6489 const int it = tbl->
nt[id][ig][ip];
6490 const int iu = tbl->
nu[id][ig][ip][it];
6491 const size_t nnew = (size_t) (iu + 1);
6493 float *tmp = (
float *) realloc(tbl->
logu[
id][ig][ip][it],
6494 nnew *
sizeof(
float));
6496 ERRMSG(
"Out of memory!");
6497 tbl->
logu[id][ig][ip][it] = tmp;
6500 (
float *) realloc(tbl->
logeps[
id][ig][ip][it], nnew *
sizeof(
float));
6502 ERRMSG(
"Out of memory!");
6503 tbl->
logeps[id][ig][ip][it] = tmp;
6507 tbl->
p[id][ig][tbl->
np[id][ig]] = press;
6508 tbl->
t[id][ig][tbl->
np[id][ig]][tbl->
nt[id][ig][tbl->
np[id][ig]]]
6510 tbl->
logu[id][ig][tbl->
np[id][ig]][tbl->
nt[id][ig][tbl->
np[id][ig]]]
6511 [tbl->
nu[id][ig][tbl->
np[id][ig]]
6512 [tbl->
nt[id][ig][tbl->
np[id][ig]]]] = (float) log(u);
6513 tbl->
logeps[id][ig][tbl->
np[id][ig]][tbl->
nt[id][ig][tbl->
np[id][ig]]]
6514 [tbl->
nu[id][ig][tbl->
np[id][ig]]
6515 [tbl->
nt[id][ig][tbl->
np[id][ig]]]] = (float) log(eps);
6520 for (
int ip = 0; ip < tbl->
np[id][ig]; ip++) {
6521 tbl->
nt[id][ig][ip]++;
6522 for (
int it = 0; it < tbl->
nt[id][ig][ip]; it++)
6523 tbl->
nu[
id][ig][ip][it]++;
6528 WARN(
"Column density or emissivity out of range (%d data points)!",
6544 char filename[2 *
LEN];
6545 sprintf(filename,
"%s_%.4f_%s.bin",
6549 FILE *in = fopen(filename,
"rb");
6551 WARN(
"Missing emissivity table: %s", filename);
6554 LOG(1,
"Read emissivity table: %s", filename);
6558 FREAD(&nbytes,
size_t,
6562 ERRMSG(
"Invalid packed table size!");
6565 uint8_t *work = NULL;
6566 ALLOC(work, uint8_t, nbytes);
6567 FREAD(work, uint8_t, nbytes, in);
6595 sprintf(varname,
"tbl_%.4f", ctl->
nu[
id]);
6596 if (nc_inq_varid(ncid, varname, &varid) != NC_NOERR) {
6597 WARN(
"Missing emissivity table: %s", varname);
6600 LOG(1,
"Read emissivity table: %s", varname);
6601 NC(nc_inq_vardimid(ncid, varid, &dimid));
6602 NC(nc_inq_dimlen(ncid, dimid, &nbytes));
6605 uint8_t *work = NULL;
6606 ALLOC(work, uint8_t, nbytes);
6607 NC(nc_get_var_uchar(ncid, varid, (
unsigned char *) work));
6621 const char *varname,
6623 const char *defvalue,
6626 char dummy[
LEN], fullname1[
LEN], fullname2[
LEN], line[
LEN],
6627 rvarname[
LEN], rval[
LEN];
6633 if (argv[1][0] !=
'-')
6634 if (!(in = fopen(argv[1],
"r")))
6635 ERRMSG(
"Cannot open file!");
6639 sprintf(fullname1,
"%s[%d]", varname, arridx);
6640 sprintf(fullname2,
"%s[*]", varname);
6642 sprintf(fullname1,
"%s", varname);
6643 sprintf(fullname2,
"%s", varname);
6648 while (fgets(line,
LEN, in))
6649 if (sscanf(line,
"%s %s %s", rvarname, dummy, rval) == 3)
6650 if (strcasecmp(rvarname, fullname1) == 0 ||
6651 strcasecmp(rvarname, fullname2) == 0) {
6655 for (
int i = 1; i < argc - 1; i++)
6656 if (strcasecmp(argv[i], fullname1) == 0 ||
6657 strcasecmp(argv[i], fullname2) == 0) {
6658 sprintf(rval,
"%s", argv[i + 1]);
6669 if (strlen(defvalue) > 0)
6670 sprintf(rval,
"%s", defvalue);
6672 ERRMSG(
"Missing variable %s!\n", fullname1);
6676 LOG(1,
"%s = %s", fullname1, rval);
6680 sprintf(value,
"%s", rval);
6695 const size_t n = s_a->size1;
6698 gsl_vector *x_a = gsl_vector_alloc(n);
6701 atm2x(ctl, atm, x_a, NULL, NULL);
6702 for (
size_t i = 0; i < n; i++) {
6704 gsl_vector_set(x_a, i, ret->
err_press / 100 * gsl_vector_get(x_a, i));
6706 gsl_vector_set(x_a, i, ret->
err_temp);
6707 for (
int ig = 0; ig < ctl->
ng; ig++)
6708 if (iqa[i] ==
IDXQ(ig))
6709 gsl_vector_set(x_a, i, ret->
err_q[ig] / 100 * gsl_vector_get(x_a, i));
6710 for (
int iw = 0; iw < ctl->
nw; iw++)
6711 if (iqa[i] ==
IDXK(iw))
6712 gsl_vector_set(x_a, i, ret->
err_k[iw]);
6714 gsl_vector_set(x_a, i, ret->
err_clz);
6716 gsl_vector_set(x_a, i, ret->
err_cldz);
6717 for (
int icl = 0; icl < ctl->
ncl; icl++)
6718 if (iqa[i] ==
IDXCLK(icl))
6719 gsl_vector_set(x_a, i, ret->
err_clk[icl]);
6721 gsl_vector_set(x_a, i, ret->
err_sft);
6722 for (
int isf = 0; isf < ctl->
nsf; isf++)
6724 gsl_vector_set(x_a, i, ret->
err_sfeps[isf]);
6728 for (
size_t i = 0; i < n; i++)
6729 if (
POW2(gsl_vector_get(x_a, i)) <= 0)
6730 ERRMSG(
"Check a priori data (zero standard deviation)!");
6733 gsl_matrix_set_zero(s_a);
6734 for (
size_t i = 0; i < n; i++)
6735 gsl_matrix_set(s_a, i, i,
POW2(gsl_vector_get(x_a, i)));
6738 for (
size_t i = 0; i < n; i++)
6739 for (
size_t j = 0; j < n; j++)
6740 if (i != j && iqa[i] == iqa[j]) {
6747 if (iqa[i] ==
IDXP) {
6753 if (iqa[i] ==
IDXT) {
6759 for (
int ig = 0; ig < ctl->
ng; ig++)
6760 if (iqa[i] ==
IDXQ(ig)) {
6766 for (
int iw = 0; iw < ctl->
nw; iw++)
6767 if (iqa[i] ==
IDXK(iw)) {
6773 if (cz > 0 && ch > 0) {
6776 double x0[3], x1[3];
6782 exp(-
DIST(x0, x1) / ch -
6783 fabs(atm->
z[ipa[i]] - atm->
z[ipa[j]]) / cz);
6786 gsl_matrix_set(s_a, i, j, gsl_vector_get(x_a, i)
6787 * gsl_vector_get(x_a, j) * rho);
6792 gsl_vector_free(x_a);
6801 gsl_vector *sig_noise,
6802 gsl_vector *sig_formod,
6803 gsl_vector *sig_eps_inv) {
6810 const size_t m = sig_eps_inv->size;
6814 for (
int ir = 0; ir < obs_err->
nr; ir++)
6815 for (
int id = 0;
id < ctl->
nd;
id++)
6816 obs_err->
rad[
id][ir]
6817 = (isfinite(obs->
rad[
id][ir]) ? ret->
err_noise[
id] : NAN);
6818 obs2y(ctl, obs_err, sig_noise, NULL, NULL);
6822 for (
int ir = 0; ir < obs_err->
nr; ir++)
6823 for (
int id = 0;
id < ctl->
nd;
id++)
6824 obs_err->
rad[
id][ir]
6826 obs2y(ctl, obs_err, sig_formod, NULL, NULL);
6829 for (
size_t i = 0; i < m; i++)
6830 gsl_vector_set(sig_eps_inv, i, 1 / sqrt(
POW2(gsl_vector_get(sig_noise, i))
6836 for (
size_t i = 0; i < m; i++)
6837 if (gsl_vector_get(sig_eps_inv, i) <= 0)
6838 ERRMSG(
"Check measurement errors (zero standard deviation)!");
6848 const char *shared_file,
6849 const char *legacy_file,
6850 const char **dirname,
6853 if (shared_file[0] !=
'-') {
6859 *dirname = ret->
dir;
6868 const char *shared_file,
6869 const char *legacy_file,
6870 const char **dirname,
6873 if (shared_file[0] !=
'-') {
6879 *dirname = ret->
dir;
6894 if (snprintf(lockfile,
LEN,
"%s.lock", base) >=
LEN)
6895 ERRMSG(
"Lock file name too long!");
6896 int fd = open(lockfile, O_CREAT | O_RDWR, 0666);
6898 ERRMSG(
"Cannot open lock file!");
6901 fl.l_type = F_WRLCK;
6902 fl.l_whence = SEEK_SET;
6905 if (fcntl(fd, F_SETLKW, &fl) < 0)
6906 ERRMSG(
"Cannot lock shared output file!");
6920 fl.l_type = F_UNLCK;
6921 fl.l_whence = SEEK_SET;
6924 if (fcntl(fd, F_SETLK, &fl) < 0)
6925 ERRMSG(
"Cannot unlock shared output file!");
6972 const size_t ip = gsl_stats_min_index(los->
z, 1, (
size_t) los->
np);
6975 if (ip <= 0 || ip >= (
size_t) los->
np - 1) {
6976 *tpz = los->
z[los->
np - 1];
6977 *tplon = los->
lon[los->
np - 1];
6978 *tplat = los->
lat[los->
np - 1];
6985 const double yy0 = los->
z[ip - 1];
6986 const double yy1 = los->
z[ip];
6987 const double yy2 = los->
z[ip + 1];
6988 const double x1 = sqrt(
POW2(los->
ds[ip]) -
POW2(yy1 - yy0));
6989 const double x2 = x1 + sqrt(
POW2(los->
ds[ip + 1]) -
POW2(yy2 - yy1));
6990 const double a = 1 / (x1 - x2) * (-(yy0 - yy1) / x1 + (yy0 - yy2) / x2);
6991 const double b = -(yy0 - yy1) / x1 - a * x1;
6992 const double c = yy0;
6995 double dummy, v[3], v0[3], v2[3];
6996 const double x = -b / (2 * a);
6997 *tpz = a * x * x + b * x + c;
7000 for (
int i = 0; i < 3; i++)
7001 v[i] =
LIN(0.0, v0[i], x2, v2[i], x);
7017 for (
int id = 0;
id < ctl->
nd;
id++)
7018 for (
int ig = 0; ig < ctl->
ng; ig++) {
7021 const int np = tbl->
np[id][ig];
7026 for (
int ip = 0; ip < np; ip++) {
7029 const int nt = tbl->
nt[id][ig][ip];
7030 for (
int it = 0; it < nt; it++) {
7033 free(tbl->
logu[
id][ig][ip][it]);
7034 free(tbl->
logeps[
id][ig][ip][it]);
7035 tbl->
logu[id][ig][ip][it] = NULL;
7036 tbl->
logeps[id][ig][ip][it] = NULL;
7052 size_t *bytes_used) {
7057 int np = tbl->
np[id][ig];
7058 memcpy(cur, &np,
sizeof(np));
7061 memcpy(cur, tbl->
p[
id][ig], (
size_t) np *
sizeof(
double));
7062 cur += ((size_t) np *
sizeof(
double));
7064 for (
int ip = 0; ip < np; ip++) {
7065 int nt = tbl->
nt[id][ig][ip];
7066 memcpy(cur, &nt,
sizeof(nt));
7069 memcpy(cur, tbl->
t[
id][ig][ip], (
size_t) nt *
sizeof(
double));
7070 cur += ((size_t) nt *
sizeof(
double));
7072 for (
int it = 0; it < nt; it++) {
7073 int nu = tbl->
nu[id][ig][ip][it];
7074 memcpy(cur, &nu,
sizeof(nu));
7077 memcpy(cur, tbl->
logu[
id][ig][ip][it], (
size_t) nu *
sizeof(
float));
7078 cur += ((size_t) nu *
sizeof(
float));
7080 memcpy(cur, tbl->
logeps[
id][ig][ip][it], (
size_t) nu *
sizeof(
float));
7081 cur += ((size_t) nu *
sizeof(
float));
7086 const int n = tbl->
filt_n[id];
7087 memcpy(cur, &n,
sizeof(n));
7090 memcpy(cur, tbl->
filt_nu[
id], (
size_t) n *
sizeof(
double));
7091 cur += ((size_t) n *
sizeof(
double));
7093 memcpy(cur, tbl->
filt_f[
id], (
size_t) n *
sizeof(
double));
7094 cur += ((size_t) n *
sizeof(
double));
7096 *bytes_used = (size_t) (cur - buf);
7109 const int np = tbl->
np[id][ig];
7110 bytes +=
sizeof(int);
7111 bytes += ((size_t) np *
sizeof(
double));
7113 for (
int ip = 0; ip < np; ip++) {
7114 const int nt = tbl->
nt[id][ig][ip];
7115 bytes +=
sizeof(int);
7116 bytes += ((size_t) nt *
sizeof(
double));
7118 for (
int it = 0; it < nt; it++) {
7119 const int nu = tbl->
nu[id][ig][ip][it];
7120 bytes +=
sizeof(int);
7121 bytes += (2 * (size_t) nu *
sizeof(
float));
7126 const int n = tbl->
filt_n[id];
7127 bytes +=
sizeof(int);
7128 bytes += (2 * (size_t) n *
sizeof(
double));
7139 const uint8_t *buf) {
7141 const uint8_t *cur = buf;
7145 memcpy(&np, cur,
sizeof(np));
7148 if (np < 0 || np >
TBLNP)
7149 ERRMSG(
"np out of range!");
7150 tbl->
np[id][ig] = np;
7152 memcpy(tbl->
p[
id][ig], cur, (
size_t) np *
sizeof(
double));
7153 cur += ((size_t) np *
sizeof(
double));
7155 for (
int ip = 0; ip < np; ip++) {
7158 memcpy(&nt, cur,
sizeof(nt));
7161 if (nt < 0 || nt >
TBLNT)
7162 ERRMSG(
"nt out of range!");
7163 tbl->
nt[id][ig][ip] = nt;
7165 memcpy(tbl->
t[
id][ig][ip], cur, (
size_t) nt *
sizeof(
double));
7166 cur += ((size_t) nt *
sizeof(
double));
7168 for (
int it = 0; it < nt; it++) {
7171 memcpy(&nu, cur,
sizeof(nu));
7174 if (nu < 0 || nu >
TBLNU)
7175 ERRMSG(
"nu out of range!");
7176 tbl->
nu[id][ig][ip][it] = nu;
7183 memcpy(tbl->
logu[
id][ig][ip][it], cur, (
size_t) nu *
sizeof(
float));
7184 cur += ((size_t) nu *
sizeof(
float));
7186 memcpy(tbl->
logeps[
id][ig][ip][it], cur, (
size_t) nu *
sizeof(
float));
7187 cur += ((size_t) nu *
sizeof(
float));
7193 memcpy(&n, cur,
sizeof(n));
7197 ERRMSG(
"Missing or invalid filter function (filt_n) in packed table!");
7200 memcpy(tbl->
filt_nu[
id], cur, (
size_t) n *
sizeof(
double));
7201 cur += ((size_t) n *
sizeof(
double));
7203 memcpy(tbl->
filt_f[
id], cur, (
size_t) n *
sizeof(
double));
7204 cur += ((size_t) n *
sizeof(
double));
7206 return (
size_t) (cur - buf);
7218 const double remain,
7230 t1.tm_year = year - 1900;
7231 t1.tm_mon = mon - 1;
7237 *jsec = (double) timegm(&t1) - (double) timegm(&t0) + remain;
7250 static int ct_name[
NTIMER], iname = -1, igroup = -1, nname, ngroup;
7253 t1 = omp_get_wtime();
7254 const double dt = t1 - t0;
7258 rt_name[iname] += dt;
7259 rt_sq[iname] +=
POW2(dt);
7260 rt_min[iname] = (ct_name[iname] <= 0 ? dt :
MIN(rt_min[iname], dt));
7261 rt_max[iname] = (ct_name[iname] <= 0 ? dt :
MAX(rt_max[iname], dt));
7265 rt_group[igroup] += dt;
7269 for (
int i = 0; i < nname; i++) {
7270 const double mean = rt_name[i] / ct_name[i];
7271 const double variance =
MAX(0.0, rt_sq[i] / ct_name[i] -
POW2(mean));
7273 "TIMER_%s = %.3f s (min= %g s, mean= %g s, stddev= %g s, max= %g s, n= %d)",
7274 names[i], rt_name[i], rt_min[i], mean, sqrt(variance), rt_max[i],
7277 for (
int i = 0; i < ngroup; i++)
7278 LOG(1,
"TIMER_GROUP_%s = %.3f s", groups[i], rt_group[i]);
7280 for (
int i = 0; i < nname; i++)
7281 total += rt_name[i];
7282 LOG(1,
"TIMER_TOTAL = %.3f s", total);
7286 for (iname = 0; iname < nname; iname++)
7287 if (strcasecmp(name, names[iname]) == 0)
7289 for (igroup = 0; igroup < ngroup; igroup++)
7290 if (strcasecmp(group, groups[igroup]) == 0)
7294 if (iname >= nname) {
7295 sprintf(names[iname],
"%s", name);
7297 ERRMSG(
"Too many timers!");
7301 if (igroup >= ngroup) {
7302 sprintf(groups[igroup],
"%s", group);
7303 if ((++ngroup) >=
NTIMER)
7304 ERRMSG(
"Too many groups!");
7314 const char *dirname,
7315 const char *filename,
7322 if (dirname != NULL)
7323 sprintf(file,
"%s/%s", dirname, filename);
7325 sprintf(file,
"%s", filename);
7328 LOG(1,
"Write atmospheric data: %s", file);
7335 else if (ctl->
atmfmt == 2)
7339 else if (ctl->
atmfmt == 3)
7344 ERRMSG(
"Unknown file format, check ATMFMT!");
7348 LOG(2,
"Number of data points: %d", atm->
np);
7349 gsl_stats_minmax(&mini, &maxi, atm->
time, 1, (
size_t) atm->
np);
7350 LOG(2,
"Time range: %.2f ... %.2f s", mini, maxi);
7351 gsl_stats_minmax(&mini, &maxi, atm->
z, 1, (
size_t) atm->
np);
7352 LOG(2,
"Altitude range: %g ... %g km", mini, maxi);
7353 gsl_stats_minmax(&mini, &maxi, atm->
lon, 1, (
size_t) atm->
np);
7354 LOG(2,
"Longitude range: %g ... %g deg", mini, maxi);
7355 gsl_stats_minmax(&mini, &maxi, atm->
lat, 1, (
size_t) atm->
np);
7356 LOG(2,
"Latitude range: %g ... %g deg", mini, maxi);
7357 gsl_stats_minmax(&mini, &maxi, atm->
p, 1, (
size_t) atm->
np);
7358 LOG(2,
"Pressure range: %g ... %g hPa", maxi, mini);
7359 gsl_stats_minmax(&mini, &maxi, atm->
t, 1, (
size_t) atm->
np);
7360 LOG(2,
"Temperature range: %g ... %g K", mini, maxi);
7361 for (
int ig = 0; ig < ctl->
ng; ig++) {
7362 gsl_stats_minmax(&mini, &maxi, atm->
q[ig], 1, (
size_t) atm->
np);
7363 LOG(2,
"Emitter %s range: %g ... %g ppv", ctl->
emitter[ig], mini, maxi);
7365 for (
int iw = 0; iw < ctl->
nw; iw++) {
7366 gsl_stats_minmax(&mini, &maxi, atm->
k[iw], 1, (
size_t) atm->
np);
7367 LOG(2,
"Extinction range (window %d): %g ... %g km^-1", iw, mini, maxi);
7370 LOG(2,
"Cloud layer: z= %g km | dz= %g km | k= %g ... %g km^-1",
7373 LOG(2,
"Cloud layer: none");
7376 "Surface: T_s = %g K | eps= %g ... %g",
7379 LOG(2,
"Surface: none");
7385 const char *filename,
7393 if (!(out = fopen(filename,
"w")))
7394 ERRMSG(
"Cannot create file!");
7398 "# $1 = time (seconds since 2000-01-01T00:00Z)\n"
7399 "# $2 = altitude [km]\n"
7400 "# $3 = longitude [deg]\n"
7401 "# $4 = latitude [deg]\n"
7402 "# $5 = pressure [hPa]\n" "# $6 = temperature [K]\n");
7403 for (
int ig = 0; ig < ctl->
ng; ig++)
7404 fprintf(out,
"# $%d = %s volume mixing ratio [ppv]\n",
7406 for (
int iw = 0; iw < ctl->
nw; iw++)
7407 fprintf(out,
"# $%d = extinction (window %d) [km^-1]\n", ++n, iw);
7409 fprintf(out,
"# $%d = cloud layer height [km]\n", ++n);
7410 fprintf(out,
"# $%d = cloud layer depth [km]\n", ++n);
7411 for (
int icl = 0; icl < ctl->
ncl; icl++)
7412 fprintf(out,
"# $%d = cloud layer extinction (%.4f cm^-1) [km^-1]\n",
7413 ++n, ctl->
clnu[icl]);
7416 fprintf(out,
"# $%d = surface temperature [K]\n", ++n);
7417 for (
int isf = 0; isf < ctl->
nsf; isf++)
7418 fprintf(out,
"# $%d = surface emissivity (%.4f cm^-1)\n",
7419 ++n, ctl->
sfnu[isf]);
7423 for (
int ip = 0; ip < atm->
np; ip++) {
7424 if (ip == 0 || atm->
time[ip] != atm->
time[ip - 1])
7426 fprintf(out,
"%.2f %g %g %g %g %g", atm->
time[ip], atm->
z[ip],
7427 atm->
lon[ip], atm->
lat[ip], atm->
p[ip], atm->
t[ip]);
7428 for (
int ig = 0; ig < ctl->
ng; ig++)
7429 fprintf(out,
" %g", atm->
q[ig][ip]);
7430 for (
int iw = 0; iw < ctl->
nw; iw++)
7431 fprintf(out,
" %g", atm->
k[iw][ip]);
7433 fprintf(out,
" %g %g", atm->
clz, atm->
cldz);
7434 for (
int icl = 0; icl < ctl->
ncl; icl++)
7435 fprintf(out,
" %g", atm->
clk[icl]);
7438 fprintf(out,
" %g", atm->
sft);
7439 for (
int isf = 0; isf < ctl->
nsf; isf++)
7440 fprintf(out,
" %g", atm->
sfeps[isf]);
7452 const char *filename,
7458 if (!(out = fopen(filename,
"w")))
7459 ERRMSG(
"Cannot create file!");
7479 size_t np = (size_t) atm->
np;
7501 for (
int ig = 0; ig < ctl->
ng; ig++)
7505 for (
int iw = 0; iw < ctl->
nw; iw++)
7536 const char *filename,
7541 char longname[
LEN], varname[
LEN];
7543 int ncid, varid, dim_profile, dim_level;
7548 if (atm->
np < 1 || atm->
np >
NP)
7549 ERRMSG(
"Number of levels out of range!");
7552 if (nc_open(filename, NC_WRITE, &ncid) != NC_NOERR)
7553 NC(nc_create(filename, NC_NETCDF4, &ncid));
7556 int r = nc_redef(ncid);
7557 if (r != NC_NOERR && r != NC_EINDEFINE)
7561 if (nc_inq_dimid(ncid,
"profile", &dim_profile) != NC_NOERR)
7562 NC(nc_def_dim(ncid,
"profile", NC_UNLIMITED, &dim_profile));
7565 if (nc_inq_dimid(ncid,
"level", &dim_level) == NC_NOERR) {
7566 NC(nc_inq_dimlen(ncid, dim_level, &level_max));
7567 if (level_max < 1 || level_max > (
size_t)
NP)
7568 ERRMSG(
"netCDF dimension level is out of range!");
7569 if ((
size_t) atm->
np > level_max)
7570 ERRMSG(
"profile has too many levels!");
7572 level_max = (size_t) atm->
np;
7573 NC(nc_def_dim(ncid,
"level", level_max, &dim_level));
7577 int dimids[2] = { dim_profile, dim_level };
7580 const int deflate_level = 0;
7581 const int quant_digits = 0;
7584 if (nc_inq_varid(ncid,
"nlev", &varid) != NC_NOERR)
7586 "number of vertical levels",
"1", 0, 0);
7589 if (nc_inq_varid(ncid,
"time", &varid) != NC_NOERR)
7591 "time in seconds since 2000-01-01, 00:00 UTC",
"s",
7594 if (nc_inq_varid(ncid,
"z", &varid) != NC_NOERR)
7595 NC_DEF_VAR(
"z", NC_DOUBLE, 2, dimids,
"altitude",
"km", deflate_level, 0);
7597 if (nc_inq_varid(ncid,
"lon", &varid) != NC_NOERR)
7599 "longitude",
"degrees_east", deflate_level, 0);
7601 if (nc_inq_varid(ncid,
"lat", &varid) != NC_NOERR)
7603 "latitude",
"degrees_north", deflate_level, 0);
7605 if (nc_inq_varid(ncid,
"p", &varid) != NC_NOERR)
7607 "pressure",
"hPa", deflate_level, quant_digits);
7609 if (nc_inq_varid(ncid,
"t", &varid) != NC_NOERR)
7611 "temperature",
"K", deflate_level, quant_digits);
7614 for (
int ig = 0; ig < ctl->
ng; ig++)
7615 if (nc_inq_varid(ncid, ctl->
emitter[ig], &varid) != NC_NOERR) {
7616 sprintf(longname,
"%s volume mixing ratio", ctl->
emitter[ig]);
7618 longname,
"ppv", deflate_level, quant_digits);
7622 for (
int iw = 0; iw < ctl->
nw; iw++) {
7623 sprintf(varname,
"ext_win_%d", iw);
7624 if (nc_inq_varid(ncid, varname, &varid) != NC_NOERR) {
7625 sprintf(longname,
"extinction (window %d)", iw);
7627 longname,
"km**-1", deflate_level, quant_digits);
7633 if (nc_inq_varid(ncid,
"cld_z", &varid) != NC_NOERR)
7635 "cloud layer height",
"km", deflate_level, quant_digits);
7637 if (nc_inq_varid(ncid,
"cld_dz", &varid) != NC_NOERR)
7639 "cloud layer depth",
"km", deflate_level, quant_digits);
7641 for (
int icl = 0; icl < ctl->
ncl; icl++) {
7642 sprintf(varname,
"cld_k_%.4f", ctl->
clnu[icl]);
7643 if (nc_inq_varid(ncid, varname, &varid) != NC_NOERR) {
7644 sprintf(longname,
"cloud layer extinction (%.4f cm^-1)",
7646 NC_DEF_VAR(varname, NC_DOUBLE, 1, dimids, longname,
"km**-1",
7647 deflate_level, quant_digits);
7654 if (nc_inq_varid(ncid,
"srf_t", &varid) != NC_NOERR)
7656 "surface temperature",
"K", deflate_level, quant_digits);
7658 for (
int isf = 0; isf < ctl->
nsf; isf++) {
7659 sprintf(varname,
"srf_eps_%.4f", ctl->
sfnu[isf]);
7660 if (nc_inq_varid(ncid, varname, &varid) != NC_NOERR) {
7661 sprintf(longname,
"surface emissivity (%.4f cm^-1)", ctl->
sfnu[isf]);
7662 NC_DEF_VAR(varname, NC_DOUBLE, 1, dimids, longname,
"1",
7663 deflate_level, quant_digits);
7669 NC(nc_enddef(ncid));
7672 size_t start[2] = { (size_t) profile, 0 };
7673 size_t count[2] = { 1, (size_t) atm->
np };
7687 for (
int ig = 0; ig < ctl->
ng; ig++)
7691 for (
int iw = 0; iw < ctl->
nw; iw++) {
7692 sprintf(varname,
"ext_win_%d", iw);
7700 for (
int icl = 0; icl < ctl->
ncl; icl++) {
7701 sprintf(varname,
"cld_k_%.4f", ctl->
clnu[icl]);
7709 for (
int isf = 0; isf < ctl->
nsf; isf++) {
7710 sprintf(varname,
"srf_eps_%.4f", ctl->
sfnu[isf]);
7723 const char *filename,
7728 LOG(1,
"Write RFM data: %s", filename);
7732 if (!(out = fopen(filename,
"w")))
7733 ERRMSG(
"Cannot create file!");
7736 fprintf(out,
"%d\n", atm->
np);
7737 fprintf(out,
"*HGT [km]\n");
7738 for (
int ip = 0; ip < atm->
np; ip++)
7739 fprintf(out,
"%g\n", atm->
z[ip]);
7740 fprintf(out,
"*PRE [mb]\n");
7741 for (
int ip = 0; ip < atm->
np; ip++)
7742 fprintf(out,
"%g\n", atm->
p[ip]);
7743 fprintf(out,
"*TEM [K]\n");
7744 for (
int ip = 0; ip < atm->
np; ip++)
7745 fprintf(out,
"%g\n", atm->
t[ip]);
7746 for (
int ig = 0; ig < ctl->
ng; ig++) {
7747 fprintf(out,
"*%s [ppmv]\n", ctl->
emitter[ig]);
7748 for (
int ip = 0; ip < atm->
np; ip++)
7749 fprintf(out,
"%g\n", atm->
q[ig][ip] * 1e6);
7751 fprintf(out,
"*END\n");
7760 const char *dirname,
7761 const char *filename,
7763 const gsl_matrix *matrix,
7766 const char *rowspace,
7767 const char *colspace,
7778 rowspace, colspace, sort);
7787 rowspace, colspace, sort, dataset);
7791 ERRMSG(
"Unknown matrix file format, check MATRIXFMT!");
7797 const char *dirname,
7798 const char *filename,
7800 const gsl_matrix *matrix,
7803 const char *rowspace,
7804 const char *colspace,
7807 char file[
LEN], quantity[
LEN];
7809 int *cida, *ciqa, *cipa, *cira, *rida, *riqa, *ripa, *rira;
7811 size_t i, j, nc, nr;
7832 if (dirname != NULL)
7833 sprintf(file,
"%s/%s", dirname, filename);
7835 sprintf(file,
"%s", filename);
7838 LOG(1,
"Write matrix: %s", file);
7842 if (!(out = fopen(file,
"w")))
7843 ERRMSG(
"Cannot create file!");
7846 if (rowspace[0] ==
'y') {
7849 "# $1 = Row: index (measurement space)\n"
7850 "# $2 = Row: channel wavenumber [cm^-1]\n"
7851 "# $3 = Row: time (seconds since 2000-01-01T00:00Z)\n"
7852 "# $4 = Row: view point altitude [km]\n"
7853 "# $5 = Row: view point longitude [deg]\n"
7854 "# $6 = Row: view point latitude [deg]\n");
7857 nr =
obs2y(ctl, obs, NULL, rida, rira);
7862 "# $1 = Row: index (state space)\n"
7863 "# $2 = Row: name of quantity\n"
7864 "# $3 = Row: time (seconds since 2000-01-01T00:00Z)\n"
7865 "# $4 = Row: altitude [km]\n"
7866 "# $5 = Row: longitude [deg]\n" "# $6 = Row: latitude [deg]\n");
7869 nr =
atm2x(ctl, atm, NULL, riqa, ripa);
7873 if (colspace[0] ==
'y') {
7876 "# $7 = Col: index (measurement space)\n"
7877 "# $8 = Col: channel wavenumber [cm^-1]\n"
7878 "# $9 = Col: time (seconds since 2000-01-01T00:00Z)\n"
7879 "# $10 = Col: view point altitude [km]\n"
7880 "# $11 = Col: view point longitude [deg]\n"
7881 "# $12 = Col: view point latitude [deg]\n");
7884 nc =
obs2y(ctl, obs, NULL, cida, cira);
7889 "# $7 = Col: index (state space)\n"
7890 "# $8 = Col: name of quantity\n"
7891 "# $9 = Col: time (seconds since 2000-01-01T00:00Z)\n"
7892 "# $10 = Col: altitude [km]\n"
7893 "# $11 = Col: longitude [deg]\n" "# $12 = Col: latitude [deg]\n");
7896 nc =
atm2x(ctl, atm, NULL, ciqa, cipa);
7900 fprintf(out,
"# $13 = Matrix element\n\n");
7904 while (i < nr && j < nc) {
7907 if (rowspace[0] ==
'y')
7908 fprintf(out,
"%d %.4f %.2f %g %g %g",
7909 (
int) i, ctl->
nu[rida[i]],
7910 obs->
time[rira[i]], obs->
vpz[rira[i]],
7914 fprintf(out,
"%d %s %.2f %g %g %g", (
int) i, quantity,
7915 atm->
time[ripa[i]], atm->
z[ripa[i]],
7916 atm->
lon[ripa[i]], atm->
lat[ripa[i]]);
7920 if (colspace[0] ==
'y')
7921 fprintf(out,
" %d %.4f %.2f %g %g %g",
7922 (
int) j, ctl->
nu[cida[j]],
7923 obs->
time[cira[j]], obs->
vpz[cira[j]],
7927 fprintf(out,
" %d %s %.2f %g %g %g", (
int) j, quantity,
7928 atm->
time[cipa[j]], atm->
z[cipa[j]],
7929 atm->
lon[cipa[j]], atm->
lat[cipa[j]]);
7933 fprintf(out,
" %g\n", gsl_matrix_get(matrix, i, j));
7936 if (sort[0] ==
'r') {
7970 const char *dirname,
7971 const char *filename,
7972 const gsl_matrix *matrix) {
7975 const size_t nr = matrix->size1;
7976 const size_t nc = matrix->size2;
7979 if (dirname != NULL)
7980 sprintf(file,
"%s/%s", dirname, filename);
7982 sprintf(file,
"%s", filename);
7985 LOG(1,
"Write matrix: %s", file);
7989 if (!(out = fopen(file,
"w")))
7990 ERRMSG(
"Cannot create file!");
8004 for (
size_t i = 0; i < nr; i++)
8005 for (
size_t j = 0; j < nc; j++) {
8006 double value = gsl_matrix_get(matrix, i, j);
8019 const char *dirname,
8020 const char *filename,
8022 const gsl_matrix *matrix,
8025 const char *rowspace,
8026 const char *colspace,
8032 const size_t name_strlen = 100;
8034 int ncid, dimid_dataset, dimid_row, dimid_col, dimid_name, varid;
8035 int *cida, *ciqa, *cipa, *cira, *rida, *riqa, *ripa, *rira;
8037 size_t nr = matrix->size1, nc = matrix->size2, naux;
8058 if (dirname != NULL)
8059 sprintf(file,
"%s/%s", dirname, filename);
8061 sprintf(file,
"%s", filename);
8064 LOG(1,
"Write matrix: %s", file);
8067 if (nc_open(file, NC_WRITE, &ncid) != NC_NOERR)
8068 NC(nc_create(file, NC_NETCDF4, &ncid));
8071 int r = nc_redef(ncid);
8072 if (r != NC_NOERR && r != NC_EINDEFINE)
8076 if (nc_inq_dimid(ncid,
"dataset", &dimid_dataset) != NC_NOERR)
8077 NC(nc_def_dim(ncid,
"dataset", NC_UNLIMITED, &dimid_dataset));
8080 if (nc_inq_dimid(ncid,
"row", &dimid_row) == NC_NOERR) {
8081 NC(nc_inq_dimlen(ncid, dimid_row, &naux));
8083 ERRMSG(
"matrix row dimension is incompatible!");
8085 NC(nc_def_dim(ncid,
"row", nr, &dimid_row));
8088 if (nc_inq_dimid(ncid,
"col", &dimid_col) == NC_NOERR) {
8089 NC(nc_inq_dimlen(ncid, dimid_col, &naux));
8091 ERRMSG(
"matrix col dimension is incompatible!");
8093 NC(nc_def_dim(ncid,
"col", nc, &dimid_col));
8096 if (nc_inq_dimid(ncid,
"name_strlen", &dimid_name) == NC_NOERR) {
8097 NC(nc_inq_dimlen(ncid, dimid_name, &naux));
8098 if (naux != name_strlen)
8099 ERRMSG(
"matrix name_strlen dimension is incompatible!");
8101 NC(nc_def_dim(ncid,
"name_strlen", name_strlen, &dimid_name));
8104 int dimids3[3] = { dimid_dataset, dimid_row, dimid_col };
8105 int dimids1[1] = { dimid_dataset };
8106 int dimids2_row[2] = { dimid_dataset, dimid_row };
8107 int dimids2_col[2] = { dimid_dataset, dimid_col };
8108 int dimids3_rowname[3] = { dimid_dataset, dimid_row, dimid_name };
8109 int dimids3_colname[3] = { dimid_dataset, dimid_col, dimid_name };
8110 if (nc_inq_varid(ncid,
"matrix", &varid) != NC_NOERR) {
8111 NC(nc_def_var(ncid,
"matrix", NC_DOUBLE, 3, dimids3, &varid));
8112 NC(nc_put_att_text(ncid, varid,
"long_name", 14,
"matrix element"));
8113 NC(nc_put_att_text(ncid, varid,
"units", 1,
"1"));
8115 if (nc_inq_varid(ncid,
"rowspace", &varid) != NC_NOERR)
8117 "row space selector",
"1", 0, 0);
8118 if (nc_inq_varid(ncid,
"colspace", &varid) != NC_NOERR)
8120 "column space selector",
"1", 0, 0);
8121 if (nc_inq_varid(ncid,
"sort", &varid) != NC_NOERR)
8123 "matrix sort selector",
"1", 0, 0);
8124 if (nc_inq_varid(ncid,
"row_nu", &varid) != NC_NOERR)
8125 NC_DEF_VAR(
"row_nu", NC_DOUBLE, 2, dimids2_row,
8126 "row channel wavenumber",
"cm^-1", 0, 0);
8127 if (nc_inq_varid(ncid,
"row_time", &varid) != NC_NOERR)
8128 NC_DEF_VAR(
"row_time", NC_DOUBLE, 2, dimids2_row,
8129 "row time since 2000-01-01T00:00Z",
"s", 0, 0);
8130 if (nc_inq_varid(ncid,
"row_z", &varid) != NC_NOERR)
8131 NC_DEF_VAR(
"row_z", NC_DOUBLE, 2, dimids2_row,
8132 "row altitude",
"km", 0, 0);
8133 if (nc_inq_varid(ncid,
"row_lon", &varid) != NC_NOERR)
8134 NC_DEF_VAR(
"row_lon", NC_DOUBLE, 2, dimids2_row,
8135 "row longitude",
"degrees_east", 0, 0);
8136 if (nc_inq_varid(ncid,
"row_lat", &varid) != NC_NOERR)
8137 NC_DEF_VAR(
"row_lat", NC_DOUBLE, 2, dimids2_row,
8138 "row latitude",
"degrees_north", 0, 0);
8139 if (nc_inq_varid(ncid,
"row_quantity", &varid) != NC_NOERR)
8140 NC_DEF_VAR(
"row_quantity", NC_CHAR, 3, dimids3_rowname,
8141 "row state quantity name",
"1", 0, 0);
8142 if (nc_inq_varid(ncid,
"col_nu", &varid) != NC_NOERR)
8143 NC_DEF_VAR(
"col_nu", NC_DOUBLE, 2, dimids2_col,
8144 "column channel wavenumber",
"cm^-1", 0, 0);
8145 if (nc_inq_varid(ncid,
"col_time", &varid) != NC_NOERR)
8146 NC_DEF_VAR(
"col_time", NC_DOUBLE, 2, dimids2_col,
8147 "column time since 2000-01-01T00:00Z",
"s", 0, 0);
8148 if (nc_inq_varid(ncid,
"col_z", &varid) != NC_NOERR)
8149 NC_DEF_VAR(
"col_z", NC_DOUBLE, 2, dimids2_col,
8150 "column altitude",
"km", 0, 0);
8151 if (nc_inq_varid(ncid,
"col_lon", &varid) != NC_NOERR)
8152 NC_DEF_VAR(
"col_lon", NC_DOUBLE, 2, dimids2_col,
8153 "column longitude",
"degrees_east", 0, 0);
8154 if (nc_inq_varid(ncid,
"col_lat", &varid) != NC_NOERR)
8155 NC_DEF_VAR(
"col_lat", NC_DOUBLE, 2, dimids2_col,
8156 "column latitude",
"degrees_north", 0, 0);
8157 if (nc_inq_varid(ncid,
"col_quantity", &varid) != NC_NOERR)
8158 NC_DEF_VAR(
"col_quantity", NC_CHAR, 3, dimids3_colname,
8159 "column state quantity name",
"1", 0, 0);
8162 NC(nc_enddef(ncid));
8165 size_t start1[1] = { (size_t) dataset };
8166 size_t count1[1] = { 1 };
8167 NC(nc_inq_varid(ncid,
"rowspace", &varid));
8168 NC(nc_put_vara_text(ncid, varid, start1, count1, rowspace));
8169 NC(nc_inq_varid(ncid,
"colspace", &varid));
8170 NC(nc_put_vara_text(ncid, varid, start1, count1, colspace));
8171 NC(nc_inq_varid(ncid,
"sort", &varid));
8172 NC(nc_put_vara_text(ncid, varid, start1, count1, sort));
8175 if (rowspace[0] ==
'y')
8176 nr =
obs2y(ctl, obs, NULL, rida, rira);
8178 nr =
atm2x(ctl, atm, NULL, riqa, ripa);
8179 if (colspace[0] ==
'y')
8180 nc =
obs2y(ctl, obs, NULL, cida, cira);
8182 nc =
atm2x(ctl, atm, NULL, ciqa, cipa);
8185 for (
size_t i = 0; i < nr; i++) {
8186 const double nu = rowspace[0] ==
'y' ? ctl->
nu[rida[i]] : GSL_NAN;
8188 rowspace[0] ==
'y' ? obs->
time[rira[i]] : atm->
time[ripa[i]];
8189 const double z = rowspace[0] ==
'y' ? obs->
vpz[rira[i]] : atm->
z[ripa[i]];
8191 rowspace[0] ==
'y' ? obs->
vplon[rira[i]] : atm->
lon[ripa[i]];
8193 rowspace[0] ==
'y' ? obs->
vplat[rira[i]] : atm->
lat[ripa[i]];
8194 char qbuf[
LEN] = { 0 };
8195 size_t start2[2] = { (size_t) dataset, i };
8196 size_t count2[2] = { 1, 1 };
8197 size_t start3n[3] = { (size_t) dataset, i, 0 };
8198 size_t count3n[3] = { 1, 1, name_strlen };
8200 if (rowspace[0] !=
'y') {
8202 snprintf(qbuf,
LEN,
"%s", quantity);
8205 NC(nc_inq_varid(ncid,
"row_nu", &varid));
8206 NC(nc_put_vara_double(ncid, varid, start2, count2, &nu));
8207 NC(nc_inq_varid(ncid,
"row_time", &varid));
8208 NC(nc_put_vara_double(ncid, varid, start2, count2, &time));
8209 NC(nc_inq_varid(ncid,
"row_z", &varid));
8210 NC(nc_put_vara_double(ncid, varid, start2, count2, &z));
8211 NC(nc_inq_varid(ncid,
"row_lon", &varid));
8212 NC(nc_put_vara_double(ncid, varid, start2, count2, &lon));
8213 NC(nc_inq_varid(ncid,
"row_lat", &varid));
8214 NC(nc_put_vara_double(ncid, varid, start2, count2, &lat));
8215 NC(nc_inq_varid(ncid,
"row_quantity", &varid));
8216 NC(nc_put_vara_text(ncid, varid, start3n, count3n, qbuf));
8220 for (
size_t j = 0; j < nc; j++) {
8221 const double nu = colspace[0] ==
'y' ? ctl->
nu[cida[j]] : GSL_NAN;
8223 colspace[0] ==
'y' ? obs->
time[cira[j]] : atm->
time[cipa[j]];
8224 const double z = colspace[0] ==
'y' ? obs->
vpz[cira[j]] : atm->
z[cipa[j]];
8226 colspace[0] ==
'y' ? obs->
vplon[cira[j]] : atm->
lon[cipa[j]];
8228 colspace[0] ==
'y' ? obs->
vplat[cira[j]] : atm->
lat[cipa[j]];
8229 char qbuf[
LEN] = { 0 };
8230 size_t start2[2] = { (size_t) dataset, j };
8231 size_t count2[2] = { 1, 1 };
8232 size_t start3n[3] = { (size_t) dataset, j, 0 };
8233 size_t count3n[3] = { 1, 1, name_strlen };
8235 if (colspace[0] !=
'y') {
8237 snprintf(qbuf,
LEN,
"%s", quantity);
8240 NC(nc_inq_varid(ncid,
"col_nu", &varid));
8241 NC(nc_put_vara_double(ncid, varid, start2, count2, &nu));
8242 NC(nc_inq_varid(ncid,
"col_time", &varid));
8243 NC(nc_put_vara_double(ncid, varid, start2, count2, &time));
8244 NC(nc_inq_varid(ncid,
"col_z", &varid));
8245 NC(nc_put_vara_double(ncid, varid, start2, count2, &z));
8246 NC(nc_inq_varid(ncid,
"col_lon", &varid));
8247 NC(nc_put_vara_double(ncid, varid, start2, count2, &lon));
8248 NC(nc_inq_varid(ncid,
"col_lat", &varid));
8249 NC(nc_put_vara_double(ncid, varid, start2, count2, &lat));
8250 NC(nc_inq_varid(ncid,
"col_quantity", &varid));
8251 NC(nc_put_vara_text(ncid, varid, start3n, count3n, qbuf));
8255 NC(nc_inq_varid(ncid,
"matrix", &varid));
8256 for (
size_t i = 0; i < nr; i++)
8257 for (
size_t j = 0; j < nc; j++) {
8258 const double value = gsl_matrix_get(matrix, i, j);
8259 size_t start3[3] = { (size_t) dataset, i, j };
8260 size_t count3[3] = { 1, 1, 1 };
8261 NC(nc_put_vara_double(ncid, varid, start3, count3, &value));
8282 const char *dirname,
8283 const char *filename,
8290 if (dirname != NULL)
8291 sprintf(file,
"%s/%s", dirname, filename);
8293 sprintf(file,
"%s", filename);
8296 LOG(1,
"Write observation data: %s", file);
8303 else if (ctl->
obsfmt == 2)
8307 else if (ctl->
obsfmt == 3)
8312 LOG(2,
"Number of ray paths: %d", obs->
nr);
8313 gsl_stats_minmax(&mini, &maxi, obs->
time, 1, (
size_t) obs->
nr);
8314 LOG(2,
"Time range: %.2f ... %.2f s", mini, maxi);
8315 gsl_stats_minmax(&mini, &maxi, obs->
obsz, 1, (
size_t) obs->
nr);
8316 LOG(2,
"Observer altitude range: %g ... %g km", mini, maxi);
8317 gsl_stats_minmax(&mini, &maxi, obs->
obslon, 1, (
size_t) obs->
nr);
8318 LOG(2,
"Observer longitude range: %g ... %g deg", mini, maxi);
8319 gsl_stats_minmax(&mini, &maxi, obs->
obslat, 1, (
size_t) obs->
nr);
8320 LOG(2,
"Observer latitude range: %g ... %g deg", mini, maxi);
8321 gsl_stats_minmax(&mini, &maxi, obs->
vpz, 1, (
size_t) obs->
nr);
8322 LOG(2,
"View point altitude range: %g ... %g km", mini, maxi);
8323 gsl_stats_minmax(&mini, &maxi, obs->
vplon, 1, (
size_t) obs->
nr);
8324 LOG(2,
"View point longitude range: %g ... %g deg", mini, maxi);
8325 gsl_stats_minmax(&mini, &maxi, obs->
vplat, 1, (
size_t) obs->
nr);
8326 LOG(2,
"View point latitude range: %g ... %g deg", mini, maxi);
8327 gsl_stats_minmax(&mini, &maxi, obs->
tpz, 1, (
size_t) obs->
nr);
8328 LOG(2,
"Tangent point altitude range: %g ... %g km", mini, maxi);
8329 gsl_stats_minmax(&mini, &maxi, obs->
tplon, 1, (
size_t) obs->
nr);
8330 LOG(2,
"Tangent point longitude range: %g ... %g deg", mini, maxi);
8331 gsl_stats_minmax(&mini, &maxi, obs->
tplat, 1, (
size_t) obs->
nr);
8332 LOG(2,
"Tangent point latitude range: %g ... %g deg", mini, maxi);
8333 for (
int id = 0;
id < ctl->
nd;
id++) {
8334 gsl_stats_minmax(&mini, &maxi, obs->
rad[
id], 1, (
size_t) obs->
nr);
8336 LOG(2,
"Brightness temperature (%.4f cm^-1) range: %g ... %g K",
8337 ctl->
nu[
id], mini, maxi);
8339 LOG(2,
"Radiance (%.4f cm^-1) range: %g ... %g W/(m^2 sr cm^-1)",
8340 ctl->
nu[
id], mini, maxi);
8343 for (
int id = 0;
id < ctl->
nd;
id++) {
8344 gsl_stats_minmax(&mini, &maxi, obs->
tau[
id], 1, (
size_t) obs->
nr);
8345 LOG(2,
"Transmittance (%.4f cm^-1) range: %g ... %g",
8346 ctl->
nu[
id], mini, maxi);
8353 const char *filename,
8361 if (!(out = fopen(filename,
"w")))
8362 ERRMSG(
"Cannot create file!");
8366 "# $1 = time (seconds since 2000-01-01T00:00Z)\n"
8367 "# $2 = observer altitude [km]\n"
8368 "# $3 = observer longitude [deg]\n"
8369 "# $4 = observer latitude [deg]\n"
8370 "# $5 = view point altitude [km]\n"
8371 "# $6 = view point longitude [deg]\n"
8372 "# $7 = view point latitude [deg]\n"
8373 "# $8 = tangent point altitude [km]\n"
8374 "# $9 = tangent point longitude [deg]\n"
8375 "# $10 = tangent point latitude [deg]\n");
8376 for (
int id = 0;
id < ctl->
nd;
id++)
8378 fprintf(out,
"# $%d = brightness temperature (%.4f cm^-1) [K]\n",
8381 fprintf(out,
"# $%d = radiance (%.4f cm^-1) [W/(m^2 sr cm^-1)]\n",
8383 for (
int id = 0;
id < ctl->
nd;
id++)
8384 fprintf(out,
"# $%d = transmittance (%.4f cm^-1) [-]\n", ++n,
8388 for (
int ir = 0; ir < obs->
nr; ir++) {
8389 if (ir == 0 || obs->
time[ir] != obs->
time[ir - 1])
8391 fprintf(out,
"%.2f %g %g %g %g %g %g %g %g %g", obs->
time[ir],
8395 for (
int id = 0;
id < ctl->
nd;
id++)
8396 fprintf(out,
" %g", obs->
rad[
id][ir]);
8397 for (
int id = 0;
id < ctl->
nd;
id++)
8398 fprintf(out,
" %g", obs->
tau[
id][ir]);
8409 const char *filename,
8415 if (!(out = fopen(filename,
"w")))
8416 ERRMSG(
"Cannot create file!");
8427 size_t nr = (size_t) obs->
nr;
8461 for (
int id = 0;
id < ctl->
nd;
id++)
8465 for (
int id = 0;
id < ctl->
nd;
id++)
8477 const char *filename,
8480 const int profile) {
8482 char longname[
LEN], varname[
LEN];
8483 const char *spec_prefix = ctl->
write_bbt ?
"bt" :
"rad";
8485 int ncid, varid, dim_profile, dim_ray;
8490 if (obs->
nr < 1 || obs->
nr >
NR)
8491 ERRMSG(
"Number of ray paths out of range!");
8494 if (nc_open(filename, NC_WRITE, &ncid) != NC_NOERR)
8495 NC(nc_create(filename, NC_NETCDF4, &ncid));
8498 int r = nc_redef(ncid);
8499 if (r != NC_NOERR && r != NC_EINDEFINE)
8503 if (nc_inq_dimid(ncid,
"profile", &dim_profile) != NC_NOERR)
8504 NC(nc_def_dim(ncid,
"profile", NC_UNLIMITED, &dim_profile));
8507 if (nc_inq_dimid(ncid,
"ray", &dim_ray) == NC_NOERR) {
8508 NC(nc_inq_dimlen(ncid, dim_ray, &ray_max));
8509 if (ray_max < 1 || ray_max > (
size_t)
NR)
8510 ERRMSG(
"netCDF dimension ray is out of range!");
8511 if ((
size_t) obs->
nr > ray_max)
8512 ERRMSG(
"profile has too many rays!");
8514 ray_max = (size_t) obs->
nr;
8515 NC(nc_def_dim(ncid,
"ray", ray_max, &dim_ray));
8519 int dimids[2] = { dim_profile, dim_ray };
8522 const int deflate_level = 0;
8523 const int quant_digits = 0;
8526 if (nc_inq_varid(ncid,
"nray", &varid) != NC_NOERR)
8527 NC_DEF_VAR(
"nray", NC_INT, 1, dimids,
"number of ray paths",
"1", 0, 0);
8530 if (nc_inq_varid(ncid,
"time", &varid) != NC_NOERR)
8532 "time in seconds since 2000-01-01, 00:00 UTC",
"s",
8535 if (nc_inq_varid(ncid,
"obs_z", &varid) != NC_NOERR)
8537 "observer altitude",
"km", deflate_level, 0);
8539 if (nc_inq_varid(ncid,
"obs_lon", &varid) != NC_NOERR)
8541 "observer longitude",
"degrees_east", deflate_level, 0);
8543 if (nc_inq_varid(ncid,
"obs_lat", &varid) != NC_NOERR)
8545 "observer latitude",
"degrees_north", deflate_level, 0);
8547 if (nc_inq_varid(ncid,
"vp_z", &varid) != NC_NOERR)
8549 "view point altitude",
"km", deflate_level, 0);
8551 if (nc_inq_varid(ncid,
"vp_lon", &varid) != NC_NOERR)
8553 "view point longitude",
"degrees_east", deflate_level, 0);
8555 if (nc_inq_varid(ncid,
"vp_lat", &varid) != NC_NOERR)
8557 "view point latitude",
"degrees_north", deflate_level, 0);
8559 if (nc_inq_varid(ncid,
"tp_z", &varid) != NC_NOERR)
8561 "tangent point altitude",
"km", deflate_level, 0);
8563 if (nc_inq_varid(ncid,
"tp_lon", &varid) != NC_NOERR)
8565 "tangent point longitude",
"degrees_east", deflate_level, 0);
8567 if (nc_inq_varid(ncid,
"tp_lat", &varid) != NC_NOERR)
8569 "tangent point latitude",
"degrees_north", deflate_level, 0);
8572 for (
int id = 0;
id < ctl->
nd;
id++) {
8574 sprintf(varname,
"%s_%.4f", spec_prefix, ctl->
nu[
id]);
8575 if (nc_inq_varid(ncid, varname, &varid) != NC_NOERR) {
8577 sprintf(longname,
"brightness temperature (%.4f cm^-1)", ctl->
nu[
id]);
8578 NC_DEF_VAR(varname, NC_DOUBLE, 2, dimids, longname,
"K",
8579 deflate_level, quant_digits);
8581 sprintf(longname,
"radiance (%.4f cm^-1)", ctl->
nu[
id]);
8582 NC_DEF_VAR(varname, NC_DOUBLE, 2, dimids, longname,
8583 "W/(m^2 sr cm^-1)", deflate_level, quant_digits);
8587 sprintf(varname,
"tau_%.4f", ctl->
nu[
id]);
8588 if (nc_inq_varid(ncid, varname, &varid) != NC_NOERR) {
8589 sprintf(longname,
"transmittance (%.4f cm^-1)", ctl->
nu[
id]);
8590 NC_DEF_VAR(varname, NC_DOUBLE, 2, dimids, longname,
"1",
8591 deflate_level, quant_digits);
8596 NC(nc_enddef(ncid));
8599 size_t start[2] = { (size_t) profile, 0 };
8600 size_t count[2] = { 1, (size_t) obs->
nr };
8604 NC(nc_inq_varid(ncid,
"nray", &varid));
8605 NC(nc_put_vara_int(ncid, varid, start, count, &nr));
8608 NC(nc_inq_varid(ncid,
"time", &varid));
8609 NC(nc_put_vara_double(ncid, varid, start, count, obs->
time));
8611 NC(nc_inq_varid(ncid,
"obs_z", &varid));
8612 NC(nc_put_vara_double(ncid, varid, start, count, obs->
obsz));
8614 NC(nc_inq_varid(ncid,
"obs_lon", &varid));
8615 NC(nc_put_vara_double(ncid, varid, start, count, obs->
obslon));
8617 NC(nc_inq_varid(ncid,
"obs_lat", &varid));
8618 NC(nc_put_vara_double(ncid, varid, start, count, obs->
obslat));
8620 NC(nc_inq_varid(ncid,
"vp_z", &varid));
8621 NC(nc_put_vara_double(ncid, varid, start, count, obs->
vpz));
8623 NC(nc_inq_varid(ncid,
"vp_lon", &varid));
8624 NC(nc_put_vara_double(ncid, varid, start, count, obs->
vplon));
8626 NC(nc_inq_varid(ncid,
"vp_lat", &varid));
8627 NC(nc_put_vara_double(ncid, varid, start, count, obs->
vplat));
8629 NC(nc_inq_varid(ncid,
"tp_z", &varid));
8630 NC(nc_put_vara_double(ncid, varid, start, count, obs->
tpz));
8632 NC(nc_inq_varid(ncid,
"tp_lon", &varid));
8633 NC(nc_put_vara_double(ncid, varid, start, count, obs->
tplon));
8635 NC(nc_inq_varid(ncid,
"tp_lat", &varid));
8636 NC(nc_put_vara_double(ncid, varid, start, count, obs->
tplat));
8639 for (
int id = 0;
id < ctl->
nd;
id++) {
8640 sprintf(varname,
"%s_%.4f", spec_prefix, ctl->
nu[
id]);
8641 NC(nc_inq_varid(ncid, varname, &varid));
8642 NC(nc_put_vara_double(ncid, varid, start, count, obs->
rad[
id]));
8644 sprintf(varname,
"tau_%.4f", ctl->
nu[
id]);
8645 NC(nc_inq_varid(ncid, varname, &varid));
8646 NC(nc_put_vara_double(ncid, varid, start, count, obs->
tau[
id]));
8657 const char *filename,
8663 LOG(1,
"Write shape function: %s", filename);
8667 if (!(out = fopen(filename,
"w")))
8668 ERRMSG(
"Cannot create file!");
8672 "# $1 = shape function x-value [-]\n"
8673 "# $2 = shape function y-value [-]\n\n");
8676 for (
int i = 0; i < n; i++)
8677 fprintf(out,
"%.10g %.10g\n", x[i], y[i]);
8686 const char *quantity,
8690 const gsl_matrix *s) {
8693 const size_t n = s->size1;
8698 gsl_vector *x_aux = gsl_vector_alloc(n);
8701 for (
size_t i = 0; i < n; i++)
8702 gsl_vector_set(x_aux, i, sqrt(gsl_matrix_get(s, i, i)));
8706 const char *dirname;
8708 const char *shared_file =
"-";
8710 x2atm(ctl, x_aux, atm_aux);
8711 if (strcmp(quantity,
"total") == 0)
8713 else if (strcmp(quantity,
"noise") == 0)
8715 else if (strcmp(quantity,
"formod") == 0)
8717 sprintf(filename,
"atm_err_%s.tab", quantity);
8718 const char *target =
8720 write_atm(dirname, target, ctl, atm_aux, profile);
8723 gsl_vector_free(x_aux);
8733 for (
int ig = 0; ig < ctl->
ng; ig++)
8734 for (
int id = 0;
id < ctl->
nd;
id++) {
8737 if (tbl->
np[
id][ig] <= 0) {
8738 WARN(
"Skip writing empty emissivity table: emitter=%s, nu=%.4f",
8748 else if (ctl->
tblfmt == 2)
8752 else if (ctl->
tblfmt == 3)
8761 for (
int id = 0;
id < ctl->
nd;
id++) {
8762 char filename[2 *
LEN];
8763 sprintf(filename,
"%s_%.4f.filt", ctl->
tblbase, ctl->
nu[
id]);
8778 char filename[2 *
LEN];
8779 sprintf(filename,
"%s_%.4f_%s.tab", ctl->
tblbase,
8784 if (!(out = fopen(filename,
"w"))) {
8785 ERRMSG(
"Cannot create emissivity table: %s", filename);
8787 LOG(1,
"Write emissivity table: %s", filename);
8791 "# $1 = pressure [hPa]\n"
8792 "# $2 = temperature [K]\n"
8793 "# $3 = column density [molecules/cm^2]\n"
8794 "# $4 = emissivity [-]\n");
8797 for (
int ip = 0; ip < tbl->
np[id][ig]; ip++)
8798 for (
int it = 0; it < tbl->
nt[id][ig][ip]; it++) {
8800 for (
int iu = 0; iu < tbl->
nu[id][ig][ip][it]; iu++)
8801 fprintf(out,
"%g %g %e %e\n",
8802 tbl->
p[
id][ig][ip], tbl->
t[
id][ig][ip][it],
8803 exp(tbl->
logu[
id][ig][ip][it][iu]),
8804 exp(tbl->
logeps[
id][ig][ip][it][iu]));
8820 char filename[2 *
LEN];
8821 sprintf(filename,
"%s_%.4f_%s.bin",
8826 if (!(out = fopen(filename,
"w"))) {
8827 ERRMSG(
"Cannot create emissivity table: %s", filename);
8829 LOG(1,
"Write emissivity table: %s", filename);
8834 uint8_t *work = NULL;
8835 ALLOC(work, uint8_t, need);
8836 tbl_pack(tbl,
id, ig, work, &used);
8838 ERRMSG(
"Internal error: packed size mismatch!");
8844 FWRITE(work, uint8_t, used, out);
8862 char filename[2 *
LEN];
8867 if (nc_open(filename, NC_WRITE, &ncid) != NC_NOERR) {
8868 if (nc_create(filename, NC_NETCDF4 | NC_CLOBBER, &ncid) != NC_NOERR)
8869 ERRMSG(
"Cannot open or create emissivity table: %s", filename);
8872 NC(nc_enddef(ncid));
8876 char varname[
LEN], dimname[
LEN];
8877 sprintf(varname,
"tbl_%.4f", ctl->
nu[
id]);
8878 sprintf(dimname,
"len_%.4f", ctl->
nu[
id]);
8881 LOG(1,
"Write emissivity table: %s in %s", varname, filename);
8886 uint8_t *work = NULL;
8887 ALLOC(work, uint8_t, need);
8890 tbl_pack(tbl,
id, ig, work, &used);
8892 ERRMSG(
"Internal error: packed size mismatch!");
8896 if (nc_inq_varid(ncid, varname, &tmp) == NC_NOERR)
8897 ERRMSG(
"Table already present!");
8902 NC(nc_def_dim(ncid, dimname, used, &dimid));
8903 int dimids[1] = { dimid };
8905 "Packed lookup table blob",
"1", 0, 0);
8906 NC(nc_enddef(ncid));
8909 NC(nc_put_var_uchar(ncid, varid, (
const unsigned char *) work));
8922 const gsl_vector *x,
8928 for (
int ip = 0; ip < atm->
np; ip++)
8933 for (
int ip = 0; ip < atm->
np; ip++)
8938 for (
int ig = 0; ig < ctl->
ng; ig++)
8939 for (
int ip = 0; ip < atm->
np; ip++)
8945 for (
int iw = 0; iw < ctl->
nw; iw++)
8946 for (
int ip = 0; ip < atm->
np; ip++)
8957 for (
int icl = 0; icl < ctl->
ncl; icl++)
8964 for (
int isf = 0; isf < ctl->
nsf; isf++)
8972 const gsl_vector *x,
8976 *value = gsl_vector_get(x, *n);
8984 const gsl_vector *y,
8990 for (
int ir = 0; ir < obs->
nr; ir++)
8991 for (
int id = 0;
id < ctl->
nd;
id++)
8992 if (isfinite(obs->
rad[
id][ir])) {
8993 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 write_atm(const char *dirname, const char *filename, const ctl_t *ctl, const atm_t *atm, int profile)
Write atmospheric data to a file.
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.
void read_matrix_nc(const char *dirname, const char *filename, gsl_matrix *matrix, int dataset)
Read a numerical matrix from a netCDF file.
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).
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.
int shared_io_lock(const ret_t *ret)
Acquire an exclusive lock for shared retrieval output files.
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 read_obs(const char *dirname, const char *filename, const ctl_t *ctl, obs_t *obs, int profile)
Read observation data from an input file.
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.
const char * shared_io_input_target(const ret_t *ret, const char *shared_file, const char *legacy_file, const char **dirname, int *profile)
Resolve retrieval input target for legacy-directory and shared-file modes.
void write_matrix_asc(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 an ASCII file.
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 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, int dataset)
Write a fully annotated matrix (e.g., Jacobian or gain matrix) to 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 shared_io_unlock(int fd)
Release a shared retrieval output lock.
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_obs(const char *dirname, const char *filename, const ctl_t *ctl, const obs_t *obs, int profile)
Write observation data to an output file in ASCII or binary format.
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 read_matrix(const char *dirname, const char *filename, const ctl_t *ctl, gsl_matrix *matrix, int dataset)
Read a numerical matrix from a file.
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 timer_group(const char *name, const char *group, int output)
Aggregate wall-clock timings for named code phases.
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 read_atm(const char *dirname, const char *filename, const ctl_t *ctl, atm_t *atm, int profile)
Read atmospheric input data from a file.
void write_matrix_nc(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, int dataset)
Write a numerical matrix to a netCDF file.
void write_atm_asc(const char *filename, const ctl_t *ctl, const atm_t *atm)
Write atmospheric data to an ASCII file.
void write_matrix_bin(const char *dirname, const char *filename, const gsl_matrix *matrix)
Write a numerical matrix to a binary 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 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.
void read_matrix_asc(const char *dirname, const char *filename, gsl_matrix *matrix)
Read a numerical matrix from an ASCII file.
tbl_t * read_tbl(const ctl_t *ctl)
Read emissivity lookup tables from disk.
void read_matrix_bin(const char *dirname, const char *filename, gsl_matrix *matrix)
Read a numerical matrix from a binary file.
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.
const char * shared_io_output_target(const ret_t *ret, const char *shared_file, const char *legacy_file, const char **dirname, int *profile)
Resolve retrieval output target for legacy-directory and shared-file modes.
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 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.
const char * shared_io_output_file(const ret_t *ret)
Return the primary shared retrieval output file configured for locking.
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 SELECT_TIMER(id, group)
Switch to a named aggregated timer.
#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 CO2_FIT(TIME)
Climatological CO2 volume mixing ratio as a quadratic function of time.
#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 NTIMER
Maximum number of aggregated timers.
#define PLANCK(T, nu)
Compute spectral radiance using Planck’s law.
#define REFRAC_EDLEN(p, T)
Compute dry-air refractivity (n - 1) with an Edlen-type relation.
#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 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).
int matrixfmt
Matrix data file format (1=ASCII, 2=binary, 3=netCDF).
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.
char shared_io_atm_final_file[LEN]
Optional shared retrieved-atmosphere output file.
double err_press_cz
Vertical correlation length for pressure error [km].
double err_press
Pressure error [%].
char shared_io_atm_res_file[LEN]
Optional shared averaging-kernel resolution output file.
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 [%].
char shared_io_matrix_cov_apr_file[LEN]
Optional shared a priori covariance output file.
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].
char shared_io_proflist[LEN]
Optional file containing retrieval profile indices.
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].
char shared_io_matrix_gain_file[LEN]
Optional shared gain matrix output file.
char shared_io_obs_meas_file[LEN]
Optional shared measured-observation input file.
char shared_io_matrix_cov_ret_file[LEN]
Optional shared retrieval covariance output file.
char shared_io_matrix_kernel_file[LEN]
Optional shared kernel matrix output file.
char shared_io_atm_apr_file[LEN]
Optional shared atmospheric a priori input file.
char shared_io_matrix_avk_file[LEN]
Optional shared averaging-kernel matrix output file.
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.
char shared_io_atm_err_formod_file[LEN]
Optional shared forward-model retrieval-error output file.
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].
char shared_io_matrix_corr_file[LEN]
Optional shared correlation matrix output file.
char shared_io_atm_err_total_file[LEN]
Optional shared total retrieval-error output file.
double err_q[NG]
Volume mixing ratio error [%].
char dir[LEN]
Working directory.
char shared_io_atm_err_noise_file[LEN]
Optional shared noise retrieval-error output file.
char shared_io_obs_final_file[LEN]
Optional shared retrieved-observation output file.
double err_sfeps[NSF]
Surface emissivity error.
char shared_io_atm_cont_file[LEN]
Optional shared averaging-kernel contribution output file.
int shared_io_profile
Profile index used for shared netCDF retrieval inputs and outputs.
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.