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) {
3617 los->
eps[ip][id] = 1 - tau_gas[id] * exp(-beta_ctm[
id] * los->
ds[ip]);
3620 rad[id] += los->
src[ip][id] * los->
eps[ip][id] * tau[id];
3623 tau[id] *= (1 - los->
eps[ip][id]);
3633 for (
int id = 0;
id < ctl->
nd;
id++)
3634 rad[
id] += los->
sfeps[
id] * src_sf[
id] * tau[
id];
3639 for (
int id = 0;
id < ctl->
nd;
id++)
3640 if (los->
sfeps[
id] < 1) {
3649 double tau_refl[
ND];
3650 for (
int id = 0;
id < ctl->
nd;
id++)
3654 for (
int ip = los->
np - 1; ip >= 0; ip--)
3655 for (
int id = 0;
id < ctl->
nd;
id++) {
3656 rad[id] += los->
src[ip][id] * los->
eps[ip][id] * tau_refl[id]
3657 * tau[id] * (1 - los->
sfeps[id]);
3658 tau_refl[id] *= (1 - los->
eps[ip][id]);
3668 los->
lon[los->
np - 1], los->
lat[los->
np - 1]);
3673 if (cos_sza_val > 1e-6) {
3676 double x0[3], x1[3];
3678 los->
lat[los->
np - 1], x0);
3680 for (
int i = 0; i < 3; i++)
3682 const double cosa =
DOTP(x0, x1) /
NORM(x0) /
NORM(x1);
3685 const double rcos = cosa / cos_sza_val;
3688 for (
int id = 0;
id < ctl->
nd;
id++)
3689 rad[
id] += 6.764e-5 / (2. * M_PI) *
PLANCK(
TSUN, ctl->
nu[
id])
3690 * tau_refl[id] * (1 - los->
sfeps[id]) * tau[
id] * rcos;
3697 for (
int id = 0;
id < ctl->
nd;
id++) {
3698 obs->
rad[id][ir] = rad[id];
3699 obs->
tau[id][ir] = tau[id];
3716 char cmd[2 *
LEN], rfmflg[
LEN] = {
"RAD TRA MIX LIN SFC" };
3718 double f[
NSHAPE], nu[
NSHAPE], nu0, nu1, obsz = -999, tsurf,
3719 xd[3], xo[3], xv[3], z[
NR], zmin, zmax;
3721 int n, nadir = 0, zenith = 0;
3727 for (
int ir = 1; ir < obs->
nr; ir++)
3731 ERRMSG(
"RFM interface requires identical observer positions!");
3734 for (
int iw = 0; iw < ctl->
nw; iw++)
3735 for (
int ip = 0; ip < atm->
np; ip++)
3736 if (atm->
k[iw][ip] != 0)
3737 ERRMSG(
"RFM interface cannot handle extinction data!");
3740 gsl_stats_minmax(&zmin, &zmax, atm->
z, 1, (
size_t) atm->
np);
3743 if (obs->
obsz[0] >= zmin && obs->
obsz[0] <= zmax) {
3744 obsz = obs->
obsz[0];
3745 strcat(rfmflg,
" OBS");
3749 for (
int ir = 0; ir < obs->
nr; ir++) {
3755 if (obs->
tpz[ir] <= zmin) {
3760 for (
int i = 0; i < 3; i++)
3761 xd[i] = xo[i] - xv[i];
3765 }
else if (obs->
tpz[ir] >= zmax - 1e-3 && obs->
vpz[ir] > obs->
obsz[ir]) {
3770 for (
int i = 0; i < 3; i++)
3771 xd[i] = xv[i] - xo[i];
3777 z[ir] = obs->
tpz[ir];
3779 if ((nadir > 0 && nadir < obs->nr)
3780 || (zenith > 0 && zenith < obs->nr)
3781 || (nadir > 0 && zenith > 0))
3782 ERRMSG(
"Limb, nadir, and zenith not simultaneously possible!");
3786 strcat(rfmflg,
" NAD");
3788 strcat(rfmflg,
" ZEN");
3791 tsurf = atm->
t[gsl_stats_min_index(atm->
z, 1, (
size_t) atm->
np)];
3794 if (!nadir && !zenith && !ctl->
refrac)
3795 strcat(rfmflg,
" GEO");
3799 strcat(rfmflg,
" CTM");
3805 for (
int id = 0;
id < ctl->
nd;
id++) {
3809 if (n <= 0 || n >
NSHAPE)
3810 ERRMSG(
"Missing or invalid filter function in lookup table!");
3811 memcpy(nu, tbl->
filt_nu[
id], (
size_t) n *
sizeof(
double));
3812 memcpy(f, tbl->
filt_f[
id], (
size_t) n *
sizeof(
double));
3820 if (!(out = fopen(
"rfm.drv",
"w")))
3821 ERRMSG(
"Cannot create file!");
3822 fprintf(out,
"*HDR\nRFM call by JURASSIC.\n");
3823 fprintf(out,
"*FLG\n%s\n", rfmflg);
3824 fprintf(out,
"*SPC\n%.4f %.4f 0.0005\n", nu0, nu1);
3825 fprintf(out,
"*GAS\n");
3826 for (
int ig = 0; ig < ctl->
ng; ig++)
3827 fprintf(out,
"%s\n", ctl->
emitter[ig]);
3828 fprintf(out,
"*ATM\nrfm.atm\n");
3829 fprintf(out,
"*TAN\n");
3830 for (
int ir = 0; ir < obs->
nr; ir++)
3831 fprintf(out,
"%g\n", z[ir]);
3832 fprintf(out,
"*SFC\n%g 1.0\n", tsurf);
3834 fprintf(out,
"*OBS\n%g\n", obsz);
3835 fprintf(out,
"*HIT\n%s\n", ctl->
rfmhit);
3836 fprintf(out,
"*XSC\n");
3837 for (
int ig = 0; ig < ctl->
ng; ig++)
3838 if (ctl->
rfmxsc[ig][0] !=
'-')
3839 fprintf(out,
"%s\n", ctl->
rfmxsc[ig]);
3840 fprintf(out,
"*END\n");
3844 if (system(
"rm -f rfm.runlog rad_*.asc tra_*.asc"))
3845 ERRMSG(
"Cannot remove temporary files!");
3848 sprintf(cmd,
"echo | %s", ctl->
rfmbin);
3850 ERRMSG(
"Error while calling RFM!");
3853 for (
int ir = 0; ir < obs->
nr; ir++) {
3860 if (system(
"rm -f rfm.drv rfm.atm rfm.runlog rad_*.asc tra_*.asc"))
3861 ERRMSG(
"Error while removing temporary files!");
3879 for (
int id = 0;
id < ctl->
nd;
id++)
3880 src[
id] =
LIN(tbl->
st[it], tbl->
sr[it][
id],
3881 tbl->
st[it + 1], tbl->
sr[it + 1][
id], t);
3892 const double radius = z +
RE;
3893 const double latrad = lat / 180. * M_PI;
3894 const double lonrad = lon / 180. * M_PI;
3895 const double coslat = cos(latrad);
3897 x[0] = radius * coslat * cos(lonrad);
3898 x[1] = radius * coslat * sin(lonrad);
3899 x[2] = radius * sin(latrad);
3908 const double mmair = 28.96456e-3, mmh2o = 18.0153e-3;
3910 const int ipts = 20;
3912 double dzmin = 1e99, e = 0;
3921 for (
int ip = 0; ip < atm->
np; ip++)
3922 if (fabs(atm->
z[ip] - ctl->
hydz) < dzmin) {
3923 dzmin = fabs(atm->
z[ip] - ctl->
hydz);
3928 for (
int ip = ipref + 1; ip < atm->
np; ip++) {
3930 for (
int i = 0; i < ipts; i++) {
3933 ipts - 1.0, atm->
q[ctl->
ig_h2o][ip], (
double) i);
3934 mean += (e * mmh2o + (1 - e) * mmair)
3936 /
LIN(0.0, atm->
t[ip - 1], ipts - 1.0, atm->
t[ip], (
double) i) / ipts;
3941 exp(log(atm->
p[ip - 1]) - mean * 1000 * (atm->
z[ip] - atm->
z[ip - 1]));
3945 for (
int ip = ipref - 1; ip >= 0; ip--) {
3947 for (
int i = 0; i < ipts; i++) {
3950 ipts - 1.0, atm->
q[ctl->
ig_h2o][ip], (
double) i);
3951 mean += (e * mmh2o + (1 - e) * mmair)
3953 /
LIN(0.0, atm->
t[ip + 1], ipts - 1.0, atm->
t[ip], (
double) i) / ipts;
3958 exp(log(atm->
p[ip + 1]) - mean * 1000 * (atm->
z[ip] - atm->
z[ip + 1]));
3970 sprintf(quantity,
"PRESSURE");
3973 sprintf(quantity,
"TEMPERATURE");
3975 for (
int ig = 0; ig < ctl->
ng; ig++)
3976 if (idx ==
IDXQ(ig))
3977 sprintf(quantity,
"%s", ctl->
emitter[ig]);
3979 for (
int iw = 0; iw < ctl->
nw; iw++)
3980 if (idx ==
IDXK(iw))
3981 sprintf(quantity,
"EXTINCT_WINDOW_%d", iw);
3984 sprintf(quantity,
"CLOUD_HEIGHT");
3987 sprintf(quantity,
"CLOUD_DEPTH");
3989 for (
int icl = 0; icl < ctl->
ncl; icl++)
3991 sprintf(quantity,
"CLOUD_EXTINCT_%.4f", ctl->
clnu[icl]);
3994 sprintf(quantity,
"SURFACE_TEMPERATURE");
3996 for (
int isf = 0; isf < ctl->
nsf; isf++)
3998 sprintf(quantity,
"SURFACE_EMISSIVITY_%.4f", ctl->
sfnu[isf]);
4008 LOG(1,
"Initialize source function table...");
4009 LOG(2,
"Number of data points: %d",
TBLNS);
4012 for (
int id = 0;
id < ctl->
nd;
id++) {
4016 for (
int i = 1; i < tbl->
filt_n[id]; i++)
4020#pragma omp parallel for default(none) shared(ctl,tbl,id,dnu)
4021 for (
int it = 0; it <
TBLNS; it++) {
4027 double fsum = tbl->
sr[it][id] = 0;
4028 for (
double fnu = tbl->
filt_nu[
id][0];
4029 fnu <= tbl->filt_nu[
id][tbl->
filt_n[
id] - 1]; fnu += dnu) {
4035 tbl->
sr[it][id] += ff *
PLANCK(tbl->
st[it], fnu);
4037 tbl->
sr[it][id] /= fsum;
4042 "channel= %.4f cm^-1 | T= %g ... %g K | B= %g ... %g W/(m^2 sr cm^-1)",
4043 ctl->
nu[
id], tbl->
st[0], tbl->
st[
TBLNS - 1], tbl->
sr[0][
id],
4063 *p =
LOGY(atm->
z[ip], atm->
p[ip], atm->
z[ip + 1], atm->
p[ip + 1], z);
4064 *t =
LIN(atm->
z[ip], atm->
t[ip], atm->
z[ip + 1], atm->
t[ip + 1], z);
4065 for (
int ig = 0; ig < ctl->
ng; ig++)
4067 LIN(atm->
z[ip], atm->
q[ig][ip], atm->
z[ip + 1], atm->
q[ig][ip + 1], z);
4068 for (
int iw = 0; iw < ctl->
nw; iw++)
4070 LIN(atm->
z[ip], atm->
k[iw][ip], atm->
z[ip + 1], atm->
k[iw][ip + 1], z);
4080 double tau_path[
ND][
NG],
4081 double tau_seg[
ND]) {
4083 double eps, lnp[
NG];
4086 for (
int ig = 0; ig < ctl->
ng; ig++)
4087 lnp[ig] = log(los->
cgp[ip][ig]);
4090 for (
int id = 0;
id < ctl->
nd;
id++) {
4096 for (
int ig = 0; ig < ctl->
ng; ig++) {
4099 if (tbl->
np[
id][ig] < 30 || los->
cgu[ip][ig] <= 0)
4103 else if (tau_path[
id][ig] < 1e-9)
4112 const int it0 =
locate_reg(tbl->
t[
id][ig][ipr], tbl->
nt[
id][ig][ipr],
4115 locate_reg(tbl->
t[
id][ig][ipr + 1], tbl->
nt[
id][ig][ipr + 1],
4119 if (tbl->
nt[
id][ig][ipr] < 2 || tbl->
nt[
id][ig][ipr + 1] < 2
4120 || tbl->
nu[
id][ig][ipr][it0] < 2
4121 || tbl->
nu[
id][ig][ipr][it0 + 1] < 2
4122 || tbl->
nu[
id][ig][ipr + 1][it1] < 2
4123 || tbl->
nu[
id][ig][ipr + 1][it1 + 1] < 2)
4129 const double logu = log(los->
cgu[ip][ig]);
4133 double eps11 =
intpol_tbl_eps(tbl, ig,
id, ipr + 1, it1 + 1, logu);
4136 eps00 =
LIN(tbl->
t[
id][ig][ipr][it0], eps00,
4137 tbl->
t[
id][ig][ipr][it0 + 1], eps01, los->
cgt[ip][ig]);
4138 eps11 =
LIN(tbl->
t[
id][ig][ipr + 1][it1], eps10,
4139 tbl->
t[
id][ig][ipr + 1][it1 + 1],
4140 eps11, los->
cgt[ip][ig]);
4143 eps00 =
LIN(tbl->
lnp[
id][ig][ipr], eps00,
4144 tbl->
lnp[
id][ig][ipr + 1], eps11, lnp[ig]);
4147 eps00 =
CLAMP(eps00, 0, 1);
4150 eps = 1 - (1 - eps00) / tau_path[
id][ig];
4153 eps =
CLAMP(eps, 0, 1);
4158 tau_path[id][ig] *= (1 - eps);
4161 tau_seg[id] *= (1 - eps);
4173 double tau_path[
ND][
NG],
4174 double tau_seg[
ND]) {
4176 const double lnp = log(los->
p[ip]);
4181 for (
int id = 0;
id < ctl->
nd;
id++) {
4187 for (
int ig = 0; ig < ctl->
ng; ig++) {
4190 if (tbl->
np[
id][ig] < 30 || los->
cgu[ip][ig] <= 0)
4194 else if (tau_path[
id][ig] < 1e-9)
4204 locate_reg(tbl->
t[
id][ig][ipr], tbl->
nt[
id][ig][ipr], los->
t[ip]);
4206 locate_reg(tbl->
t[
id][ig][ipr + 1], tbl->
nt[
id][ig][ipr + 1],
4210 if (tbl->
nt[
id][ig][ipr] < 2 || tbl->
nt[
id][ig][ipr + 1] < 2
4211 || tbl->
nu[
id][ig][ipr][it0] < 2
4212 || tbl->
nu[
id][ig][ipr][it0 + 1] < 2
4213 || tbl->
nu[
id][ig][ipr + 1][it1] < 2
4214 || tbl->
nu[
id][ig][ipr + 1][it1 + 1] < 2)
4220 const double logeps = log(1.0 - tau_path[
id][ig]);
4228 log(u + los->
u[ip][ig]));
4232 log(u + los->
u[ip][ig]));
4234 u =
intpol_tbl_u(tbl, ig,
id, ipr + 1, it1 + 1, logeps);
4236 log(u + los->
u[ip][ig]));
4239 eps00 =
LIN(tbl->
t[
id][ig][ipr][it0], eps00,
4240 tbl->
t[
id][ig][ipr][it0 + 1], eps01, los->
t[ip]);
4241 eps11 =
LIN(tbl->
t[
id][ig][ipr + 1][it1], eps10,
4242 tbl->
t[
id][ig][ipr + 1][it1 + 1], eps11, los->
t[ip]);
4245 eps00 =
LIN(tbl->
lnp[
id][ig][ipr], eps00,
4246 tbl->
lnp[
id][ig][ipr + 1], eps11, lnp);
4249 eps00 =
CLAMP(eps00, 0, 1);
4252 eps = 1 - (1 - eps00) / tau_path[
id][ig];
4255 eps =
CLAMP(eps, 0, 1);
4260 tau_path[id][ig] *= (1 - eps);
4263 tau_seg[id] *= (1 - eps);
4276 const double logu) {
4278 const int nu = tbl->
nu[id][ig][ip][it];
4279 const float *logu_arr = tbl->
logu[id][ig][ip][it];
4280 const float *logeps_arr = tbl->
logeps[id][ig][ip][it];
4283 const double logu_min = (double) logu_arr[0];
4284 const double logu_max = (double) logu_arr[nu - 1];
4288 if (logu < logu_min) {
4289 const double logeps_min = (double) logeps_arr[0];
4290 return exp(logeps_min + logu - logu_min);
4300 if (logu > logu_max) {
4301 const double eps_max = exp((
double) logeps_arr[nu - 1]);
4302 const double l1m_eps_max = log1p(-eps_max);
4303 const double r = exp(logu - logu_max);
4304 return -expm1(l1m_eps_max * r);
4308 const int idx =
locate_tbl(logu_arr, nu, logu);
4309 return exp(
LIN(logu_arr[idx], logeps_arr[idx],
4310 logu_arr[idx + 1], logeps_arr[idx + 1], logu));
4321 const double logeps) {
4323 const int nu = tbl->
nu[id][ig][ip][it];
4324 const float *logeps_arr = tbl->
logeps[id][ig][ip][it];
4325 const float *logu_arr = tbl->
logu[id][ig][ip][it];
4328 const double logeps_min = (double) logeps_arr[0];
4329 const double logeps_max = (double) logeps_arr[nu - 1];
4333 if (logeps < logeps_min) {
4334 const double logu_min = (double) logu_arr[0];
4335 return exp(logu_min + logeps - logeps_min);
4346 if (logeps > logeps_max) {
4347 const double u_max = exp((
double) logu_arr[nu - 1]);
4348 const double l1m_eps_max = log1p(-exp(logeps_max));
4349 const double logtau = log1p(-exp(logeps));
4350 return u_max * (logtau / l1m_eps_max);
4354 const int idx =
locate_tbl(logeps_arr, nu, logeps);
4355 return exp(
LIN(logeps_arr[idx], logu_arr[idx],
4356 logeps_arr[idx + 1], logu_arr[idx + 1], logeps));
4380 const time_t jsec0 = (time_t) jsec + timegm(&t0);
4381 t1 = gmtime(&jsec0);
4383 *year = t1->tm_year + 1900;
4384 *mon = t1->tm_mon + 1;
4386 *hour = t1->tm_hour;
4389 *remain = jsec - floor(jsec);
4402 const size_t m = k->size1;
4403 const size_t n = k->size2;
4406 gsl_vector *x0 = gsl_vector_alloc(n);
4407 gsl_vector *yy0 = gsl_vector_alloc(m);
4413 formod(ctl, tbl, atm, obs);
4416 atm2x(ctl, atm, x0, iqa, NULL);
4417 obs2y(ctl, obs, yy0, NULL, NULL);
4420 gsl_matrix_set_zero(k);
4423#pragma omp parallel for default(none) shared(ctl,tbl,atm,obs,k,x0,yy0,n,m,iqa)
4424 for (
size_t j = 0; j < n; j++) {
4431 gsl_vector *x1 = gsl_vector_alloc(n);
4432 gsl_vector *yy1 = gsl_vector_alloc(m);
4437 h =
MAX(fabs(0.01 * gsl_vector_get(x0, j)), 1e-7);
4438 else if (iqa[j] ==
IDXT)
4440 else if (iqa[j] >=
IDXQ(0) && iqa[j] <
IDXQ(ctl->
ng))
4441 h =
MAX(fabs(0.01 * gsl_vector_get(x0, j)), 1e-15);
4442 else if (iqa[j] >=
IDXK(0) && iqa[j] <
IDXK(ctl->
nw))
4448 else if (iqa[j] ==
IDXSFT)
4453 ERRMSG(
"Cannot set perturbation size!");
4456 gsl_vector_memcpy(x1, x0);
4457 gsl_vector_set(x1, j, gsl_vector_get(x1, j) + h);
4460 x2atm(ctl, x1, atm1);
4463 formod(ctl, tbl, atm1, obs1);
4466 obs2y(ctl, obs1, yy1, NULL, NULL);
4469 for (
size_t i = 0; i < m; i++)
4470 gsl_matrix_set(k, i, j,
4471 (gsl_vector_get(yy1, i) - gsl_vector_get(yy0, i)) / h);
4474 gsl_vector_free(x1);
4475 gsl_vector_free(yy1);
4481 gsl_vector_free(x0);
4482 gsl_vector_free(yy0);
4495 int i = (ihi + ilo) >> 1;
4497 if (xx[i] < xx[i + 1])
4498 while (ihi > ilo + 1) {
4499 i = (ihi + ilo) >> 1;
4505 while (ihi > ilo + 1) {
4506 i = (ihi + ilo) >> 1;
4524 const int i = (int) ((x - xx[0]) / (xx[1] - xx[0]));
4544 int i = (ihi + ilo) >> 1;
4546 while (ihi > ilo + 1) {
4547 i = (ihi + ilo) >> 1;
4565 const size_t n = a->size1;
4568 for (
size_t i = 0; i < n && diag; i++)
4569 for (
size_t j = i + 1; j < n; j++)
4570 if (gsl_matrix_get(a, i, j) != 0) {
4577 for (
size_t i = 0; i < n; i++)
4578 gsl_matrix_set(a, i, i, 1 / gsl_matrix_get(a, i, i));
4582 gsl_linalg_cholesky_decomp(a);
4583 gsl_linalg_cholesky_invert(a);
4590 const gsl_matrix *a,
4591 const gsl_vector *b,
4592 const int transpose,
4596 const size_t m = a->size1;
4597 const size_t n = a->size2;
4600 gsl_matrix *aux = gsl_matrix_alloc(m, n);
4603 if (transpose == 1) {
4606 for (
size_t i = 0; i < m; i++)
4607 for (
size_t j = 0; j < n; j++)
4608 gsl_matrix_set(aux, i, j,
4609 gsl_vector_get(b, i) * gsl_matrix_get(a, i, j));
4612 gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, aux, aux, 0.0, c);
4616 else if (transpose == 2) {
4619 for (
size_t i = 0; i < m; i++)
4620 for (
size_t j = 0; j < n; j++)
4621 gsl_matrix_set(aux, i, j,
4622 gsl_matrix_get(a, i, j) * gsl_vector_get(b, j));
4625 gsl_blas_dgemm(CblasNoTrans, CblasTrans, 1.0, aux, aux, 0.0, c);
4629 gsl_matrix_free(aux);
4644 for (
int ir = 0; ir < obs->
nr; ir++)
4645 for (
int id = 0;
id < ctl->
nd;
id++)
4646 if (isfinite(obs->
rad[
id][ir])) {
4648 gsl_vector_set(y, m, obs->
rad[
id][ir]);
4671 double disq = 0, lmpar = 0.001;
4685 const size_t m =
obs2y(ctl, obs_meas, NULL, NULL, NULL);
4686 const size_t n =
atm2x(ctl, atm_apr, NULL, iqa, ipa);
4687 if (m == 0 || n == 0) {
4688 WARN(
"Check problem definition (m = 0 or n = 0)!");
4694 gsl_matrix *a = gsl_matrix_alloc(n, n);
4695 gsl_matrix *cov = gsl_matrix_alloc(n, n);
4696 gsl_matrix *k_i = gsl_matrix_alloc(m, n);
4697 gsl_matrix *s_a_inv = gsl_matrix_alloc(n, n);
4699 gsl_vector *b = gsl_vector_alloc(n);
4700 gsl_vector *dx = gsl_vector_alloc(n);
4701 gsl_vector *dy = gsl_vector_alloc(m);
4702 gsl_vector *sig_eps_inv = gsl_vector_alloc(m);
4703 gsl_vector *sig_formod = gsl_vector_alloc(m);
4704 gsl_vector *sig_noise = gsl_vector_alloc(m);
4705 gsl_vector *x_a = gsl_vector_alloc(n);
4706 gsl_vector *x_i = gsl_vector_alloc(n);
4707 gsl_vector *x_step = gsl_vector_alloc(n);
4708 gsl_vector *y_aux = gsl_vector_alloc(m);
4709 gsl_vector *y_i = gsl_vector_alloc(m);
4710 gsl_vector *y_m = gsl_vector_alloc(m);
4718 formod(ctl, tbl, atm_i, obs_i);
4721 atm2x(ctl, atm_apr, x_a, NULL, NULL);
4722 atm2x(ctl, atm_i, x_i, NULL, NULL);
4723 obs2y(ctl, obs_meas, y_m, NULL, NULL);
4724 obs2y(ctl, obs_i, y_i, NULL, NULL);
4727 set_cov_apr(ret, ctl, atm_apr, iqa, ipa, s_a_inv);
4729 const char *dirname;
4731 const char *filename =
4733 "matrix_cov_apr.tab", &dirname, &profile);
4735 atm_i, obs_i,
"x",
"x",
"r", profile);
4740 set_cov_meas(ret, ctl, obs_meas, sig_noise, sig_formod, sig_eps_inv);
4743 gsl_vector_memcpy(dx, x_i);
4744 gsl_vector_sub(dx, x_a);
4745 gsl_vector_memcpy(dy, y_m);
4746 gsl_vector_sub(dy, y_i);
4752 LOG(2,
"it= %d / chi^2/m= %g", 0, *chisq);
4756 kernel(ctl, tbl, atm_i, obs_i, k_i);
4765 for (
int it = 1; it <= ret->
conv_itmax; it++) {
4768 double chisq_old = *chisq;
4772 kernel(ctl, tbl, atm_i, obs_i, k_i);
4779 for (
size_t i = 0; i < m; i++)
4780 gsl_vector_set(y_aux, i, gsl_vector_get(dy, i)
4781 *
POW2(gsl_vector_get(sig_eps_inv, i)));
4782 gsl_blas_dgemv(CblasTrans, 1.0, k_i, y_aux, 0.0, b);
4783 gsl_blas_dgemv(CblasNoTrans, -1.0, s_a_inv, dx, 1.0, b);
4786 for (
int it2 = 0; it2 < 20; it2++) {
4789 gsl_matrix_memcpy(a, s_a_inv);
4790 gsl_matrix_scale(a, 1 + lmpar);
4791 gsl_matrix_add(a, cov);
4794 gsl_linalg_cholesky_decomp(a);
4795 gsl_linalg_cholesky_solve(a, b, x_step);
4798 gsl_vector_add(x_i, x_step);
4801 x2atm(ctl, x_i, atm_i);
4804 for (
int ip = 0; ip < atm_i->
np; ip++) {
4805 atm_i->
p[ip] =
CLAMP(atm_i->
p[ip], 5e-7, 5e4);
4806 atm_i->
t[ip] =
CLAMP(atm_i->
t[ip], 100, 400);
4807 for (
int ig = 0; ig < ctl->
ng; ig++)
4808 atm_i->
q[ig][ip] =
CLAMP(atm_i->
q[ig][ip], 0, 1);
4809 for (
int iw = 0; iw < ctl->
nw; iw++)
4810 atm_i->
k[iw][ip] =
MAX(atm_i->
k[iw][ip], 0);
4814 for (
int icl = 0; icl < ctl->
ncl; icl++)
4815 atm_i->
clk[icl] =
MAX(atm_i->
clk[icl], 0);
4817 for (
int isf = 0; isf < ctl->
nsf; isf++)
4821 formod(ctl, tbl, atm_i, obs_i);
4822 obs2y(ctl, obs_i, y_i, NULL, NULL);
4825 gsl_vector_memcpy(dx, x_i);
4826 gsl_vector_sub(dx, x_a);
4827 gsl_vector_memcpy(dy, y_m);
4828 gsl_vector_sub(dy, y_i);
4834 if (*chisq > chisq_old) {
4836 gsl_vector_sub(x_i, x_step);
4844 LOG(2,
"it= %d / chi^2/m= %g", it, *chisq);
4847 gsl_blas_ddot(x_step, b, &disq);
4867 "atm_final.tab", &dirname, &profile);
4868 write_atm(dirname, filename, ctl, atm_i, profile);
4870 "obs_final.tab", &dirname, &profile);
4871 write_obs(dirname, filename, ctl, obs_i, profile);
4874 "matrix_kernel.tab", &dirname, &profile);
4876 atm_i, obs_i,
"y",
"x",
"r", profile);
4879 gsl_matrix *auxnm = gsl_matrix_alloc(n, m);
4880 gsl_matrix *corr = gsl_matrix_alloc(n, n);
4881 gsl_matrix *gain = gsl_matrix_alloc(n, m);
4886 gsl_matrix_add(cov, s_a_inv);
4892 "matrix_cov_ret.tab", &dirname, &profile);
4894 atm_i, obs_i,
"x",
"x",
"r", profile);
4898 for (
size_t i = 0; i < n; i++)
4899 for (
size_t j = 0; j < n; j++)
4900 gsl_matrix_set(corr, i, j, gsl_matrix_get(cov, i, j)
4901 / sqrt(gsl_matrix_get(cov, i, i))
4902 / sqrt(gsl_matrix_get(cov, j, j)));
4904 "matrix_corr.tab", &dirname, &profile);
4906 atm_i, obs_i,
"x",
"x",
"r", profile);
4910 for (
size_t i = 0; i < n; i++)
4911 for (
size_t j = 0; j < m; j++)
4912 gsl_matrix_set(auxnm, i, j, gsl_matrix_get(k_i, j, i)
4913 *
POW2(gsl_vector_get(sig_eps_inv, j)));
4914 gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, cov, auxnm, 0.0, gain);
4916 "matrix_gain.tab", &dirname, &profile);
4918 atm_i, obs_i,
"x",
"y",
"c", profile);
4930 gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, gain, k_i, 0.0, a);
4932 "matrix_avk.tab", &dirname, &profile);
4934 atm_i, obs_i,
"x",
"x",
"r", profile);
4941 gsl_matrix_free(auxnm);
4942 gsl_matrix_free(corr);
4943 gsl_matrix_free(gain);
4951 gsl_matrix_free(cov);
4952 gsl_matrix_free(k_i);
4953 gsl_matrix_free(s_a_inv);
4956 gsl_vector_free(dx);
4957 gsl_vector_free(dy);
4958 gsl_vector_free(sig_eps_inv);
4959 gsl_vector_free(sig_formod);
4960 gsl_vector_free(sig_noise);
4961 gsl_vector_free(x_a);
4962 gsl_vector_free(x_i);
4963 gsl_vector_free(x_step);
4964 gsl_vector_free(y_aux);
4965 gsl_vector_free(y_i);
4966 gsl_vector_free(y_m);
4981 const double h = 0.02, zrefrac = 60;
4983 double ex0[3], ex1[3], k[
NW], lat, lon, n, ng[3], norm, p, q[
NG], t,
4984 x[3], xh[3], xobs[3], xvp[3], z = 1e99, zmax, zmin;
4991 obs->
tpz[ir] = obs->
vpz[ir];
4996 gsl_stats_minmax(&zmin, &zmax, atm->
z, 1, (
size_t) atm->
np);
4999 if (obs->
obsz[ir] < zmin)
5000 ERRMSG(
"Observer below surface!");
5007 for (
int i = 0; i < 3; i++)
5008 ex0[i] = xvp[i] - xobs[i];
5010 for (
int i = 0; i < 3; i++)
5014 for (
int i = 0; i < 3; i++)
5018 if (obs->
obsz[ir] > zmax) {
5019 double dmax = norm, dmin = 0;
5020 while (fabs(dmin - dmax) > 0.001) {
5021 const double d = (dmax + dmin) / 2;
5022 for (
int i = 0; i < 3; i++)
5023 x[i] = xobs[i] + d * ex0[i];
5025 if (z <= zmax && z > zmax - 0.001)
5027 if (z < zmax - 0.0005)
5038 double ds = ctl->
rayds;
5039 if (ctl->
raydz > 0) {
5041 for (
int i = 0; i < 3; i++)
5042 xh[i] = x[i] / norm;
5043 const double cosa = fabs(
DOTP(ex0, xh));
5052 if (z < zmin || z > zmax) {
5053 stop = (z < zmin ? 2 : 1);
5056 zmin ? zmin : zmax) - los->
z[los->
np - 1]) / (z - los->
z[los->
np -
5059 los->
lat[los->
np - 1], xh);
5060 for (
int i = 0; i < 3; i++)
5061 x[i] = xh[i] + frac * (x[i] - xh[i]);
5063 los->
ds[los->
np - 1] = ds * frac;
5072 ERRMSG(
"Too many LOS points!");
5075 los->
lon[los->
np] = lon;
5076 los->
lat[los->
np] = lat;
5077 los->
z[los->
np] = z;
5078 los->
p[los->
np] = p;
5079 los->
t[los->
np] = t;
5080 for (
int ig = 0; ig < ctl->
ng; ig++)
5081 los->
q[los->
np][ig] = q[ig];
5082 for (
int id = 0;
id < ctl->
nd;
id++)
5083 los->
k[los->
np][
id] = k[ctl->
window[
id]];
5084 los->
ds[los->
np] = ds;
5087 if (ctl->
ncl > 0 && atm->
cldz > 0) {
5088 const double aux = exp(-0.5 *
POW2((z - atm->
clz) / atm->
cldz));
5089 for (
int id = 0;
id < ctl->
nd;
id++) {
5093 ctl->
clnu[icl + 1], atm->
clk[icl + 1], ctl->
nu[
id]);
5104 if (ctl->
nsf > 0 && atm->
sft > 0)
5106 los->
sft = (stop == 2 ? t : -999);
5109 for (
int id = 0;
id < ctl->
nd;
id++) {
5110 los->
sfeps[id] = 1.0;
5114 ctl->
sfnu[isf + 1], atm->
sfeps[isf + 1],
5124 if (ctl->
refrac && z <= zrefrac)
5130 for (
int i = 0; i < 3; i++)
5131 ex1[i] = ex0[i] * n;
5134 if (ctl->
refrac && z <= zrefrac) {
5135 for (
int i = 0; i < 3; i++)
5136 xh[i] = x[i] + 0.5 * ds * ex0[i];
5140 for (
int i = 0; i < 3; i++) {
5148 for (
int i = 0; i < 3; i++)
5152 for (
int i = 0; i < 3; i++)
5153 ex1[i] += ds * ng[i];
5157 for (
int i = 0; i < 3; i++)
5161 for (
int i = 0; i < 3; i++)
5162 x[i] += 0.5 * ds * (ex0[i] + ex1[i]);
5165 for (
int i = 0; i < 3; i++)
5173 for (
int ip = los->
np - 1; ip >= 1; ip--)
5174 los->
ds[ip] = 0.5 * (los->
ds[ip - 1] + los->
ds[ip]);
5178 for (
int ip = 0; ip < los->
np; ip++)
5179 for (
int ig = 0; ig < ctl->
ng; ig++)
5180 los->
u[ip][ig] = 10 * los->
q[ip][ig] * los->
p[ip]
5181 / (
KB * los->
t[ip]) * los->
ds[ip];
5184 for (
int ig = 0; ig < ctl->
ng; ig++) {
5185 los->
cgu[0][ig] = los->
u[0][ig];
5186 los->
cgp[0][ig] = los->
u[0][ig] * los->
p[0];
5187 los->
cgt[0][ig] = los->
u[0][ig] * los->
t[0];
5189 for (
int ip = 1; ip < los->
np; ip++)
5190 for (
int ig = 0; ig < ctl->
ng; ig++) {
5191 los->
cgu[ip][ig] = los->
cgu[ip - 1][ig] + los->
u[ip][ig];
5192 los->
cgp[ip][ig] = los->
cgp[ip - 1][ig] + los->
u[ip][ig] * los->
p[ip];
5193 los->
cgt[ip][ig] = los->
cgt[ip - 1][ig] + los->
u[ip][ig] * los->
t[ip];
5195 for (
int ip = 0; ip < los->
np; ip++)
5196 for (
int ig = 0; ig < ctl->
ng; ig++)
5197 if (los->
cgu[ip][ig] != 0) {
5198 los->
cgp[ip][ig] /= los->
cgu[ip][ig];
5199 los->
cgt[ip][ig] /= los->
cgu[ip][ig];
5206 const char *dirname,
5207 const char *filename,
5217 if (dirname != NULL)
5218 sprintf(file,
"%s/%s", dirname, filename);
5220 sprintf(file,
"%s", filename);
5223 LOG(1,
"Read atmospheric data: %s", file);
5230 else if (ctl->
atmfmt == 2)
5234 else if (ctl->
atmfmt == 3)
5239 ERRMSG(
"Could not read any data!");
5243 LOG(2,
"Number of data points: %d", atm->
np);
5244 gsl_stats_minmax(&mini, &maxi, atm->
time, 1, (
size_t) atm->
np);
5245 LOG(2,
"Time range: %.2f ... %.2f s", mini, maxi);
5246 gsl_stats_minmax(&mini, &maxi, atm->
z, 1, (
size_t) atm->
np);
5247 LOG(2,
"Altitude range: %g ... %g km", mini, maxi);
5248 gsl_stats_minmax(&mini, &maxi, atm->
lon, 1, (
size_t) atm->
np);
5249 LOG(2,
"Longitude range: %g ... %g deg", mini, maxi);
5250 gsl_stats_minmax(&mini, &maxi, atm->
lat, 1, (
size_t) atm->
np);
5251 LOG(2,
"Latitude range: %g ... %g deg", mini, maxi);
5252 gsl_stats_minmax(&mini, &maxi, atm->
p, 1, (
size_t) atm->
np);
5253 LOG(2,
"Pressure range: %g ... %g hPa", maxi, mini);
5254 gsl_stats_minmax(&mini, &maxi, atm->
t, 1, (
size_t) atm->
np);
5255 LOG(2,
"Temperature range: %g ... %g K", mini, maxi);
5256 for (
int ig = 0; ig < ctl->
ng; ig++) {
5257 gsl_stats_minmax(&mini, &maxi, atm->
q[ig], 1, (
size_t) atm->
np);
5258 LOG(2,
"Emitter %s range: %g ... %g ppv", ctl->
emitter[ig], mini, maxi);
5260 for (
int iw = 0; iw < ctl->
nw; iw++) {
5261 gsl_stats_minmax(&mini, &maxi, atm->
k[iw], 1, (
size_t) atm->
np);
5262 LOG(2,
"Extinction range (window %d): %g ... %g km^-1", iw, mini, maxi);
5265 LOG(2,
"Cloud layer: z= %g km | dz= %g km | k= %g ... %g km^-1",
5268 LOG(2,
"Cloud layer: none");
5271 "Surface: T_s = %g K | eps= %g ... %g",
5274 LOG(2,
"Surface: none");
5280 const char *filename,
5289 if (!(in = fopen(filename,
"r")))
5290 ERRMSG(
"Cannot open file!");
5293 char line[
LEN], *tok;
5294 while (fgets(line,
LEN, in)) {
5297 TOK(line, tok,
"%lg", atm->
time[atm->
np]);
5298 TOK(NULL, tok,
"%lg", atm->
z[atm->
np]);
5299 TOK(NULL, tok,
"%lg", atm->
lon[atm->
np]);
5300 TOK(NULL, tok,
"%lg", atm->
lat[atm->
np]);
5301 TOK(NULL, tok,
"%lg", atm->
p[atm->
np]);
5302 TOK(NULL, tok,
"%lg", atm->
t[atm->
np]);
5303 for (
int ig = 0; ig < ctl->
ng; ig++)
5304 TOK(NULL, tok,
"%lg", atm->
q[ig][atm->
np]);
5305 for (
int iw = 0; iw < ctl->
nw; iw++)
5306 TOK(NULL, tok,
"%lg", atm->
k[iw][atm->
np]);
5307 if (ctl->
ncl > 0 && atm->
np == 0) {
5308 TOK(NULL, tok,
"%lg", atm->
clz);
5309 TOK(NULL, tok,
"%lg", atm->
cldz);
5310 for (
int icl = 0; icl < ctl->
ncl; icl++)
5311 TOK(NULL, tok,
"%lg", atm->
clk[icl]);
5313 if (ctl->
nsf > 0 && atm->
np == 0) {
5314 TOK(NULL, tok,
"%lg", atm->
sft);
5315 for (
int isf = 0; isf < ctl->
nsf; isf++)
5316 TOK(NULL, tok,
"%lg", atm->
sfeps[isf]);
5320 if ((++atm->
np) >
NP)
5321 ERRMSG(
"Too many data points!");
5331 const char *filename,
5337 if (!(in = fopen(filename,
"r")))
5338 ERRMSG(
"Cannot open file!");
5345 if (memcmp(magic,
"ATM1", 4) != 0)
5346 ERRMSG(
"Invalid magic string!");
5348 int ng, nw, ncl, nsf;
5361 if (ng != ctl->
ng || nw != ctl->
nw || ncl != ctl->
ncl || nsf != ctl->
nsf)
5362 ERRMSG(
"Error reading file header!");
5371 ERRMSG(
"Too many data points!");
5390 for (
int ig = 0; ig < ctl->
ng; ig++)
5391 FREAD(atm->
q[ig],
double,
5394 for (
int iw = 0; iw < ctl->
nw; iw++)
5395 FREAD(atm->
k[iw],
double,
5425 const char *filename,
5430 int ncid, var_time, var_z, var_lon, var_lat, var_p, var_t, var_q[
NG],
5431 var_k[
NW], var_cz = -1, var_cdz = -1, var_ck[
NCL], var_sft =
5432 -1, var_sfe[
NSF], var_nlev = -1;
5437 NC(nc_open(filename, NC_NOWRITE, &ncid));
5440 size_t start[2] = { (size_t) profile, 0 };
5441 size_t count[2] = { 1, 0 };
5444 NC(nc_inq_varid(ncid,
"nlev", &var_nlev));
5445 NC(nc_get_vara_int(ncid, var_nlev, start, count, &atm->
np));
5446 if (atm->
np < 1 || atm->
np >
NP)
5447 ERRMSG(
"Number of level out of range!");
5450 count[1] = (size_t) atm->
np;
5453 NC(nc_inq_varid(ncid,
"time", &var_time));
5454 NC(nc_inq_varid(ncid,
"z", &var_z));
5455 NC(nc_inq_varid(ncid,
"lon", &var_lon));
5456 NC(nc_inq_varid(ncid,
"lat", &var_lat));
5457 NC(nc_inq_varid(ncid,
"p", &var_p));
5458 NC(nc_inq_varid(ncid,
"t", &var_t));
5461 for (
int ig = 0; ig < ctl->
ng; ig++)
5462 NC(nc_inq_varid(ncid, ctl->
emitter[ig], &var_q[ig]));
5465 for (
int iw = 0; iw < ctl->
nw; iw++) {
5466 sprintf(varname,
"ext_win_%d", iw);
5467 NC(nc_inq_varid(ncid, varname, &var_k[iw]));
5472 NC(nc_inq_varid(ncid,
"cld_z", &var_cz));
5473 NC(nc_inq_varid(ncid,
"cld_dz", &var_cdz));
5474 for (
int icl = 0; icl < ctl->
ncl; icl++) {
5475 sprintf(varname,
"cld_k_%.4f", ctl->
clnu[icl]);
5476 NC(nc_inq_varid(ncid, varname, &var_ck[icl]));
5482 NC(nc_inq_varid(ncid,
"srf_t", &var_sft));
5483 for (
int isf = 0; isf < ctl->
nsf; isf++) {
5484 sprintf(varname,
"srf_eps_%.4f", ctl->
sfnu[isf]);
5485 NC(nc_inq_varid(ncid, varname, &var_sfe[isf]));
5490 NC(nc_get_vara_double(ncid, var_time, start, count, atm->
time));
5491 NC(nc_get_vara_double(ncid, var_z, start, count, atm->
z));
5492 NC(nc_get_vara_double(ncid, var_lon, start, count, atm->
lon));
5493 NC(nc_get_vara_double(ncid, var_lat, start, count, atm->
lat));
5494 NC(nc_get_vara_double(ncid, var_p, start, count, atm->
p));
5495 NC(nc_get_vara_double(ncid, var_t, start, count, atm->
t));
5498 for (
int ig = 0; ig < ctl->
ng; ig++)
5499 NC(nc_get_vara_double(ncid, var_q[ig], start, count, atm->
q[ig]));
5502 for (
int iw = 0; iw < ctl->
nw; iw++)
5503 NC(nc_get_vara_double(ncid, var_k[iw], start, count, atm->
k[iw]));
5507 NC(nc_get_vara_double(ncid, var_cz, start, count, &atm->
clz));
5508 NC(nc_get_vara_double(ncid, var_cdz, start, count, &atm->
cldz));
5509 for (
int icl = 0; icl < ctl->
ncl; icl++)
5510 NC(nc_get_vara_double(ncid, var_ck[icl], start, count, &atm->
clk[icl]));
5515 NC(nc_get_vara_double(ncid, var_sft, start, count, &atm->
sft));
5517 for (
int isf = 0; isf < ctl->
nsf; isf++)
5518 NC(nc_get_vara_double
5519 (ncid, var_sfe[isf], start, count, &atm->
sfeps[isf]));
5534 LOG(1,
"\nJuelich Rapid Spectral Simulation Code (JURASSIC)\n"
5535 "(executable: %s | version: %s | compiled: %s, %s)\n",
5536 argv[0], VERSION, __DATE__, __TIME__);
5539 ctl->
ng = (int)
scan_ctl(argc, argv,
"NG", -1,
"0", NULL);
5540 if (ctl->
ng < 0 || ctl->
ng >
NG)
5541 ERRMSG(
"Set 0 <= NG <= MAX!");
5542 for (
int ig = 0; ig < ctl->
ng; ig++)
5550 ctl->
nd = (int)
scan_ctl(argc, argv,
"ND", -1,
"0", NULL);
5551 if (ctl->
nd < 0 || ctl->
nd >
ND)
5552 ERRMSG(
"Set 0 <= ND <= MAX!");
5553 for (
int id = 0;
id < ctl->
nd;
id++)
5554 ctl->
nu[
id] =
scan_ctl(argc, argv,
"NU",
id,
"", NULL);
5557 ctl->
nw = (int)
scan_ctl(argc, argv,
"NW", -1,
"1", NULL);
5558 if (ctl->
nw < 0 || ctl->
nw >
NW)
5559 ERRMSG(
"Set 0 <= NW <= MAX!");
5560 for (
int id = 0;
id < ctl->
nd;
id++)
5561 ctl->
window[
id] = (
int)
scan_ctl(argc, argv,
"WINDOW",
id,
"0", NULL);
5564 ctl->
ncl = (int)
scan_ctl(argc, argv,
"NCL", -1,
"0", NULL);
5566 ERRMSG(
"Set 0 <= NCL <= MAX!");
5569 for (
int icl = 0; icl < ctl->
ncl; icl++)
5570 ctl->
clnu[icl] =
scan_ctl(argc, argv,
"CLNU", icl,
"", NULL);
5573 ctl->
nsf = (int)
scan_ctl(argc, argv,
"NSF", -1,
"0", NULL);
5575 ERRMSG(
"Set 0 <= NSF <= MAX!");
5578 for (
int isf = 0; isf < ctl->
nsf; isf++)
5579 ctl->
sfnu[isf] =
scan_ctl(argc, argv,
"SFNU", isf,
"", NULL);
5580 ctl->
sftype = (int)
scan_ctl(argc, argv,
"SFTYPE", -1,
"2", NULL);
5582 ERRMSG(
"Set 0 <= SFTYPE <= 3!");
5583 ctl->
sfsza =
scan_ctl(argc, argv,
"SFSZA", -1,
"-999", NULL);
5587 ctl->
tblfmt = (int)
scan_ctl(argc, argv,
"TBLFMT", -1,
"1", NULL);
5589 ERRMSG(
"Unknown look-up table file format, set TBLFMT to 1, 2, or 3!");
5592 ctl->
atmfmt = (int)
scan_ctl(argc, argv,
"ATMFMT", -1,
"1", NULL);
5594 ERRMSG(
"Unknown atmospheric file format, set ATMFMT to 1, 2, or 3!");
5595 ctl->
obsfmt = (int)
scan_ctl(argc, argv,
"OBSFMT", -1,
"1", NULL);
5597 ERRMSG(
"Unknown observation file format, set OBSFMT to 1, 2, or 3!");
5600 ERRMSG(
"Unknown matrix file format, set MATRIXFMT to 1, 2, or 3!");
5603 ctl->
hydz =
scan_ctl(argc, argv,
"HYDZ", -1,
"-999", NULL);
5608 ctl->
ctm_n2 = (int)
scan_ctl(argc, argv,
"CTM_N2", -1,
"1", NULL);
5609 ctl->
ctm_o2 = (int)
scan_ctl(argc, argv,
"CTM_O2", -1,
"1", NULL);
5612 ctl->
refrac = (int)
scan_ctl(argc, argv,
"REFRAC", -1,
"1", NULL);
5614 ctl->
raydz =
scan_ctl(argc, argv,
"RAYDZ", -1,
"0.1", NULL);
5618 if (ctl->
fov[0] !=
'-')
5626 for (
int ig = 0; ig < ctl->
ng; ig++) {
5630 for (
int iw = 0; iw < ctl->
nw; iw++) {
5643 (int)
scan_ctl(argc, argv,
"WRITE_MATRIX", -1,
"0", NULL);
5646 ctl->
formod = (int)
scan_ctl(argc, argv,
"FORMOD", -1,
"1", NULL);
5649 for (
int ig = 0; ig < ctl->
ng; ig++)
5656 const char *dirname,
5657 const char *filename,
5676 ERRMSG(
"Unknown matrix file format, check MATRIXFMT!");
5682 const char *dirname,
5683 const char *filename,
5684 gsl_matrix *matrix) {
5693 if (dirname != NULL)
5694 sprintf(file,
"%s/%s", dirname, filename);
5696 sprintf(file,
"%s", filename);
5699 LOG(1,
"Read matrix: %s", file);
5703 if (!(in = fopen(file,
"r")))
5704 ERRMSG(
"Cannot open file!");
5707 gsl_matrix_set_zero(matrix);
5708 while (fgets(line,
LEN, in))
5709 if (sscanf(line,
"%d %s %s %s %s %s %d %s %s %s %s %s %lg",
5710 &i, dum, dum, dum, dum, dum,
5711 &j, dum, dum, dum, dum, dum, &value) == 13)
5712 gsl_matrix_set(matrix, (
size_t) i, (
size_t) j, value);
5721 const char *dirname,
5722 const char *filename,
5723 gsl_matrix *matrix) {
5725 char file[
LEN], magic[4];
5729 if (dirname != NULL)
5730 sprintf(file,
"%s/%s", dirname, filename);
5732 sprintf(file,
"%s", filename);
5735 LOG(1,
"Read matrix: %s", file);
5739 if (!(in = fopen(file,
"r")))
5740 ERRMSG(
"Cannot open file!");
5746 if (memcmp(magic,
"MAT1", 4) != 0)
5747 ERRMSG(
"Invalid magic string!");
5754 if (nr != matrix->size1 || nc != matrix->size2)
5755 ERRMSG(
"Error reading file header!");
5758 for (
size_t i = 0; i < nr; i++)
5759 for (
size_t j = 0; j < nc; j++) {
5761 FREAD(&value,
double,
5764 gsl_matrix_set(matrix, i, j, value);
5774 const char *dirname,
5775 const char *filename,
5781 int ncid, dimid_row, dimid_col, varid;
5786 if (dirname != NULL)
5787 sprintf(file,
"%s/%s", dirname, filename);
5789 sprintf(file,
"%s", filename);
5792 LOG(1,
"Read matrix: %s", file);
5795 NC(nc_open(file, NC_NOWRITE, &ncid));
5798 NC(nc_inq_dimid(ncid,
"row", &dimid_row));
5799 NC(nc_inq_dimid(ncid,
"col", &dimid_col));
5800 NC(nc_inq_dimlen(ncid, dimid_row, &nr));
5801 NC(nc_inq_dimlen(ncid, dimid_col, &nc));
5802 if (nr != matrix->size1 || nc != matrix->size2)
5803 ERRMSG(
"Error reading file header!");
5806 NC(nc_inq_varid(ncid,
"matrix", &varid));
5807 for (
size_t i = 0; i < nr; i++)
5808 for (
size_t j = 0; j < nc; j++) {
5810 size_t start[3] = { (size_t) dataset, i, j };
5811 size_t count[3] = { 1, 1, 1 };
5812 NC(nc_get_vara_double(ncid, varid, start, count, &value));
5813 gsl_matrix_set(matrix, i, j, value);
5823 const char *dirname,
5824 const char *filename,
5831 if (dirname != NULL)
5832 sprintf(file,
"%s/%s", dirname, filename);
5834 sprintf(file,
"%s", filename);
5837 LOG(1,
"Read observation data: %s", file);
5844 else if (ctl->
obsfmt == 2)
5848 else if (ctl->
obsfmt == 3)
5853 ERRMSG(
"Could not read any data!");
5857 LOG(2,
"Number of ray paths: %d", obs->
nr);
5858 gsl_stats_minmax(&mini, &maxi, obs->
time, 1, (
size_t) obs->
nr);
5859 LOG(2,
"Time range: %.2f ... %.2f s", mini, maxi);
5860 gsl_stats_minmax(&mini, &maxi, obs->
obsz, 1, (
size_t) obs->
nr);
5861 LOG(2,
"Observer altitude range: %g ... %g km", mini, maxi);
5862 gsl_stats_minmax(&mini, &maxi, obs->
obslon, 1, (
size_t) obs->
nr);
5863 LOG(2,
"Observer longitude range: %g ... %g deg", mini, maxi);
5864 gsl_stats_minmax(&mini, &maxi, obs->
obslat, 1, (
size_t) obs->
nr);
5865 LOG(2,
"Observer latitude range: %g ... %g deg", mini, maxi);
5866 gsl_stats_minmax(&mini, &maxi, obs->
vpz, 1, (
size_t) obs->
nr);
5867 LOG(2,
"View point altitude range: %g ... %g km", mini, maxi);
5868 gsl_stats_minmax(&mini, &maxi, obs->
vplon, 1, (
size_t) obs->
nr);
5869 LOG(2,
"View point longitude range: %g ... %g deg", mini, maxi);
5870 gsl_stats_minmax(&mini, &maxi, obs->
vplat, 1, (
size_t) obs->
nr);
5871 LOG(2,
"View point latitude range: %g ... %g deg", mini, maxi);
5872 gsl_stats_minmax(&mini, &maxi, obs->
tpz, 1, (
size_t) obs->
nr);
5873 LOG(2,
"Tangent point altitude range: %g ... %g km", mini, maxi);
5874 gsl_stats_minmax(&mini, &maxi, obs->
tplon, 1, (
size_t) obs->
nr);
5875 LOG(2,
"Tangent point longitude range: %g ... %g deg", mini, maxi);
5876 gsl_stats_minmax(&mini, &maxi, obs->
tplat, 1, (
size_t) obs->
nr);
5877 LOG(2,
"Tangent point latitude range: %g ... %g deg", mini, maxi);
5878 for (
int id = 0;
id < ctl->
nd;
id++) {
5879 gsl_stats_minmax(&mini, &maxi, obs->
rad[
id], 1, (
size_t) obs->
nr);
5881 LOG(2,
"Brightness temperature (%.4f cm^-1) range: %g ... %g K",
5882 ctl->
nu[
id], mini, maxi);
5884 LOG(2,
"Radiance (%.4f cm^-1) range: %g ... %g W/(m^2 sr cm^-1)",
5885 ctl->
nu[
id], mini, maxi);
5888 for (
int id = 0;
id < ctl->
nd;
id++) {
5889 gsl_stats_minmax(&mini, &maxi, obs->
tau[
id], 1, (
size_t) obs->
nr);
5890 LOG(2,
"Transmittance (%.4f cm^-1) range: %g ... %g",
5891 ctl->
nu[
id], mini, maxi);
5898 const char *filename,
5907 if (!(in = fopen(filename,
"r")))
5908 ERRMSG(
"Cannot open file!");
5911 char line[
LEN], *tok;
5912 while (fgets(line,
LEN, in)) {
5915 TOK(line, tok,
"%lg", obs->
time[obs->
nr]);
5916 TOK(NULL, tok,
"%lg", obs->
obsz[obs->
nr]);
5919 TOK(NULL, tok,
"%lg", obs->
vpz[obs->
nr]);
5922 TOK(NULL, tok,
"%lg", obs->
tpz[obs->
nr]);
5925 for (
int id = 0;
id < ctl->
nd;
id++)
5926 TOK(NULL, tok,
"%lg", obs->
rad[
id][obs->
nr]);
5927 for (
int id = 0;
id < ctl->
nd;
id++)
5928 TOK(NULL, tok,
"%lg", obs->
tau[
id][obs->
nr]);
5931 if ((++obs->
nr) >
NR)
5932 ERRMSG(
"Too many rays!");
5942 const char *filename,
5948 if (!(in = fopen(filename,
"r")))
5949 ERRMSG(
"Cannot open file!");
5956 if (memcmp(magic,
"OBS1", 4) != 0)
5957 ERRMSG(
"Invalid magic string!");
5964 ERRMSG(
"Error reading file header!");
5973 ERRMSG(
"Too many ray paths!");
6004 for (
int id = 0;
id < ctl->
nd;
id++)
6008 for (
int id = 0;
id < ctl->
nd;
id++)
6020 const char *filename,
6023 const int profile) {
6025 int ncid, var_nray = -1, var_time = -1, var_obsz = -1, var_obslon =
6026 -1, var_obslat = -1, var_vpz = -1, var_vplon = -1, var_vplat =
6027 -1, var_tpz = -1, var_tplon = -1, var_tplat =
6028 -1, var_rad[
ND], var_tau[
ND];
6029 const char *spec_prefix = ctl->
write_bbt ?
"bt" :
"rad";
6032 NC(nc_open(filename, NC_NOWRITE, &ncid));
6035 size_t start[2] = { (size_t) profile, 0 };
6036 size_t count[2] = { 1, 0 };
6039 NC(nc_inq_varid(ncid,
"nray", &var_nray));
6040 NC(nc_get_vara_int(ncid, var_nray, start, count, &obs->
nr));
6041 if (obs->
nr < 1 || obs->
nr >
NR)
6042 ERRMSG(
"Number of ray paths out of range!");
6045 count[1] = (size_t) obs->
nr;
6048 NC(nc_inq_varid(ncid,
"time", &var_time));
6049 NC(nc_inq_varid(ncid,
"obs_z", &var_obsz));
6050 NC(nc_inq_varid(ncid,
"obs_lon", &var_obslon));
6051 NC(nc_inq_varid(ncid,
"obs_lat", &var_obslat));
6053 NC(nc_inq_varid(ncid,
"vp_z", &var_vpz));
6054 NC(nc_inq_varid(ncid,
"vp_lon", &var_vplon));
6055 NC(nc_inq_varid(ncid,
"vp_lat", &var_vplat));
6057 NC(nc_inq_varid(ncid,
"tp_z", &var_tpz));
6058 NC(nc_inq_varid(ncid,
"tp_lon", &var_tplon));
6059 NC(nc_inq_varid(ncid,
"tp_lat", &var_tplat));
6062 for (
int id = 0;
id < ctl->
nd;
id++) {
6065 sprintf(varname,
"%s_%.4f", spec_prefix, ctl->
nu[
id]);
6066 NC(nc_inq_varid(ncid, varname, &var_rad[
id]));
6068 sprintf(varname,
"tau_%.4f", ctl->
nu[
id]);
6069 NC(nc_inq_varid(ncid, varname, &var_tau[
id]));
6073 NC(nc_get_vara_double(ncid, var_time, start, count, obs->
time));
6074 NC(nc_get_vara_double(ncid, var_obsz, start, count, obs->
obsz));
6075 NC(nc_get_vara_double(ncid, var_obslon, start, count, obs->
obslon));
6076 NC(nc_get_vara_double(ncid, var_obslat, start, count, obs->
obslat));
6078 NC(nc_get_vara_double(ncid, var_vpz, start, count, obs->
vpz));
6079 NC(nc_get_vara_double(ncid, var_vplon, start, count, obs->
vplon));
6080 NC(nc_get_vara_double(ncid, var_vplat, start, count, obs->
vplat));
6082 NC(nc_get_vara_double(ncid, var_tpz, start, count, obs->
tpz));
6083 NC(nc_get_vara_double(ncid, var_tplon, start, count, obs->
tplon));
6084 NC(nc_get_vara_double(ncid, var_tplat, start, count, obs->
tplat));
6087 for (
int id = 0;
id < ctl->
nd;
id++) {
6088 NC(nc_get_vara_double(ncid, var_rad[
id], start, count, obs->
rad[
id]));
6089 NC(nc_get_vara_double(ncid, var_tau[
id], start, count, obs->
tau[
id]));
6099 const char *basename,
6105 double fsum = 0, nu2[
NSHAPE], *nurfm, *rad, radsum = 0;
6110 ALLOC(nurfm,
double,
6118 sprintf(filename,
"%s_%05d.asc", basename, (
int) (z * 1000));
6119 if (!(in = fopen(filename,
"r"))) {
6120 sprintf(filename,
"%s_%05d.asc", basename, (
int) (z * 1000) + 1);
6121 if (!(in = fopen(filename,
"r")))
6122 ERRMSG(
"Cannot find RFM data file!");
6131 nu2[n - 1] = nu[n - 1];
6132 for (
int i = 1; i < n - 1; i++)
6133 nu2[i] =
LIN(0.0, nu2[0], n - 1.0, nu2[n - 1], i);
6136 for (
int ipts = 0; ipts < npts; ipts++)
6137 if (nurfm[ipts] >= nu2[0] && nurfm[ipts] <= nu2[n - 1]) {
6138 const int idx =
locate_irr(nu2, n, nurfm[ipts]);
6140 LIN(nu2[idx], f[idx], nu2[idx + 1], f[idx + 1], nurfm[ipts]);
6142 radsum += filt * rad[ipts];
6150 return radsum / fsum;
6163 (int)
scan_ctl(argc, argv,
"KERNEL_RECOMP", -1,
"3", NULL);
6170 for (
int id = 0;
id < ctl->
nd;
id++)
6173 for (
int id = 0;
id < ctl->
nd;
id++)
6184 for (
int ig = 0; ig < ctl->
ng; ig++) {
6185 ret->
err_q[ig] =
scan_ctl(argc, argv,
"ERR_Q", ig,
"0", NULL);
6190 for (
int iw = 0; iw < ctl->
nw; iw++) {
6191 ret->
err_k[iw] =
scan_ctl(argc, argv,
"ERR_K", iw,
"0", NULL);
6198 for (
int icl = 0; icl < ctl->
ncl; icl++)
6202 for (
int isf = 0; isf < ctl->
nsf; isf++)
6207 scan_ctl(argc, argv,
"SHARED_IO_PROFLIST", -1,
"-",
6209 scan_ctl(argc, argv,
"SHARED_IO_ATM_APR_FILE", -1,
"-",
6211 scan_ctl(argc, argv,
"SHARED_IO_OBS_MEAS_FILE", -1,
"-",
6213 scan_ctl(argc, argv,
"SHARED_IO_ATM_FINAL_FILE", -1,
"-",
6215 scan_ctl(argc, argv,
"SHARED_IO_OBS_FINAL_FILE", -1,
"-",
6217 scan_ctl(argc, argv,
"SHARED_IO_MATRIX_COV_APR_FILE", -1,
"-",
6219 scan_ctl(argc, argv,
"SHARED_IO_MATRIX_KERNEL_FILE", -1,
"-",
6221 scan_ctl(argc, argv,
"SHARED_IO_MATRIX_COV_RET_FILE", -1,
"-",
6223 scan_ctl(argc, argv,
"SHARED_IO_MATRIX_CORR_FILE", -1,
"-",
6225 scan_ctl(argc, argv,
"SHARED_IO_MATRIX_GAIN_FILE", -1,
"-",
6227 scan_ctl(argc, argv,
"SHARED_IO_MATRIX_AVK_FILE", -1,
"-",
6229 scan_ctl(argc, argv,
"SHARED_IO_ATM_ERR_TOTAL_FILE", -1,
"-",
6231 scan_ctl(argc, argv,
"SHARED_IO_ATM_ERR_NOISE_FILE", -1,
"-",
6233 scan_ctl(argc, argv,
"SHARED_IO_ATM_ERR_FORMOD_FILE", -1,
"-",
6235 scan_ctl(argc, argv,
"SHARED_IO_ATM_CONT_FILE", -1,
"-",
6237 scan_ctl(argc, argv,
"SHARED_IO_ATM_RES_FILE", -1,
"-",
6244 const char *filename,
6249 char *line = NULL, *tok;
6251 size_t line_buf_size = 0;
6253 double dnu, nu0, nu1;
6258 LOG(1,
"Read RFM data: %s", filename);
6262 if (!(in = fopen(filename,
"r")))
6263 ERRMSG(
"Cannot open file!");
6266 for (
int i = 0; i < 4; i++)
6267 if (getline(&line, &line_buf_size, in) == -1)
6268 ERRMSG(
"Error while reading file header!");
6269 if (sscanf(line,
"%d %lg %lg %lg", npts, &nu0, &dnu, &nu1) != 4)
6270 ERRMSG(
"Invalid spectrum header format!");
6274 ERRMSG(
"Too many spectral grid points!");
6277 while (getline(&line, &line_buf_size, in) != -1 && ipts < *npts) {
6278 tok = strtok(line,
" \t\n");
6279 while (tok != NULL && ipts < *npts) {
6280 if (sscanf(tok,
"%lg", &rad[ipts]) == 1)
6282 tok = strtok(NULL,
" \t\n");
6288 ERRMSG(
"Error while reading RFM data!");
6291 for (ipts = 0; ipts < *npts; ipts++)
6292 nu[ipts] =
LIN(0.0, nu0, (
double) (*npts - 1), nu1, (
double) ipts);
6304 const char *filename,
6312 LOG(1,
"Read shape function: %s", filename);
6316 if (!(in = fopen(filename,
"r")))
6317 ERRMSG(
"Cannot open file!");
6321 while (fgets(line,
LEN, in))
6322 if (sscanf(line,
"%lg %lg", &x[*n], &y[*n]) == 2)
6324 ERRMSG(
"Too many data points!");
6331 ERRMSG(
"Could not read any data!");
6335 LOG(2,
"Number of data points: %d", *n);
6336 gsl_stats_minmax(&mini, &maxi, x, 1, (
size_t) *n);
6337 LOG(2,
"Range of x values: %.4f ... %.4f", mini, maxi);
6338 gsl_stats_minmax(&mini, &maxi, y, 1, (
size_t) *n);
6339 LOG(2,
"Range of y values: %g ... %g", mini, maxi);
6352 for (
int id = 0;
id < ctl->
nd;
id++)
6356 for (
int ig = 0; ig < ctl->
ng; ig++) {
6360 for (
int id = 0;
id < ctl->
nd;
id++) {
6366 else if (ctl->
tblfmt == 2)
6367 for (
int id = 0;
id < ctl->
nd;
id++) {
6373 else if (ctl->
tblfmt == 3) {
6377 char filename[2 *
LEN];
6379 if (nc_open(filename, NC_NOWRITE, &ncid) != NC_NOERR) {
6380 WARN(
"Missing emissivity table: %s", filename);
6383 LOG(1,
"Read emissivity table: %s", filename);
6386 for (
int id = 0;
id < ctl->
nd;
id++) {
6397 for (
int id = 0;
id < ctl->
nd;
id++)
6398 for (
int ig = 0; ig < ctl->
ng; ig++)
6399 for (
int ip = 0; ip < tbl->
np[id][ig]; ip++)
6400 tbl->
lnp[
id][ig][ip] = log(tbl->
p[
id][ig][ip]);
6404 for (
int id = 0;
id < ctl->
nd;
id++) {
6405 char filename[2 *
LEN];
6406 sprintf(filename,
"%s_%.4f.filt", ctl->
tblbase, ctl->
nu[
id]);
6427 double eps, eps_old = -999, press, press_old = -999, temp,
6428 temp_old = -999, u, u_old = -999;
6432 char filename[2 *
LEN];
6433 sprintf(filename,
"%s_%.4f_%s.tab", ctl->
tblbase,
6438 if (!(in = fopen(filename,
"r"))) {
6439 WARN(
"Missing emissivity table: %s", filename);
6442 LOG(1,
"Read emissivity table: %s", filename);
6445 tbl->
np[id][ig] = -1;
6449 while (fgets(line,
LEN, in)) {
6452 if (sscanf(line,
"%lg %lg %lg %lg", &press, &temp, &u, &eps) != 4)
6456 if (u < UMIN || u >
UMAX || eps < EPSMIN || eps >
EPSMAX) {
6462 if (press != press_old) {
6464 if ((++tbl->
np[
id][ig]) >=
TBLNP)
6465 ERRMSG(
"Too many pressure levels!");
6466 tbl->
nt[id][ig][tbl->
np[id][ig]] = -1;
6470 if (temp != temp_old) {
6472 if ((++tbl->
nt[
id][ig][tbl->
np[
id][ig]]) >=
TBLNT)
6473 ERRMSG(
"Too many temperatures!");
6474 tbl->
nu[id][ig][tbl->
np[id][ig]]
6475 [tbl->
nt[id][ig][tbl->
np[id][ig]]] = -1;
6478 tbl->
logu[id][ig][tbl->
np[id][ig]]
6479 [tbl->
nt[id][ig][tbl->
np[id][ig]]] = NULL;
6480 tbl->
logeps[id][ig][tbl->
np[id][ig]]
6481 [tbl->
nt[id][ig][tbl->
np[id][ig]]] = NULL;
6485 if ((eps > eps_old && u > u_old) || tbl->
nu[
id][ig][tbl->
np[
id][ig]]
6486 [tbl->
nt[
id][ig][tbl->
np[
id][ig]]] < 0) {
6489 if ((++tbl->
nu[
id][ig][tbl->
np[
id][ig]]
6490 [tbl->
nt[
id][ig][tbl->
np[
id][ig]]]) >=
TBLNU)
6491 ERRMSG(
"Too many column densities!");
6494 const int ip = tbl->
np[id][ig];
6495 const int it = tbl->
nt[id][ig][ip];
6496 const int iu = tbl->
nu[id][ig][ip][it];
6497 const size_t nnew = (size_t) (iu + 1);
6499 float *tmp = (
float *) realloc(tbl->
logu[
id][ig][ip][it],
6500 nnew *
sizeof(
float));
6502 ERRMSG(
"Out of memory!");
6503 tbl->
logu[id][ig][ip][it] = tmp;
6506 (
float *) realloc(tbl->
logeps[
id][ig][ip][it], nnew *
sizeof(
float));
6508 ERRMSG(
"Out of memory!");
6509 tbl->
logeps[id][ig][ip][it] = tmp;
6513 tbl->
p[id][ig][tbl->
np[id][ig]] = press;
6514 tbl->
t[id][ig][tbl->
np[id][ig]][tbl->
nt[id][ig][tbl->
np[id][ig]]]
6516 tbl->
logu[id][ig][tbl->
np[id][ig]][tbl->
nt[id][ig][tbl->
np[id][ig]]]
6517 [tbl->
nu[id][ig][tbl->
np[id][ig]]
6518 [tbl->
nt[id][ig][tbl->
np[id][ig]]]] = (float) log(u);
6519 tbl->
logeps[id][ig][tbl->
np[id][ig]][tbl->
nt[id][ig][tbl->
np[id][ig]]]
6520 [tbl->
nu[id][ig][tbl->
np[id][ig]]
6521 [tbl->
nt[id][ig][tbl->
np[id][ig]]]] = (float) log(eps);
6526 for (
int ip = 0; ip < tbl->
np[id][ig]; ip++) {
6527 tbl->
nt[id][ig][ip]++;
6528 for (
int it = 0; it < tbl->
nt[id][ig][ip]; it++)
6529 tbl->
nu[
id][ig][ip][it]++;
6534 WARN(
"Column density or emissivity out of range (%d data points)!",
6550 char filename[2 *
LEN];
6551 sprintf(filename,
"%s_%.4f_%s.bin",
6555 FILE *in = fopen(filename,
"rb");
6557 WARN(
"Missing emissivity table: %s", filename);
6560 LOG(1,
"Read emissivity table: %s", filename);
6564 FREAD(&nbytes,
size_t,
6568 ERRMSG(
"Invalid packed table size!");
6571 uint8_t *work = NULL;
6572 ALLOC(work, uint8_t, nbytes);
6573 FREAD(work, uint8_t, nbytes, in);
6601 sprintf(varname,
"tbl_%.4f", ctl->
nu[
id]);
6602 if (nc_inq_varid(ncid, varname, &varid) != NC_NOERR) {
6603 WARN(
"Missing emissivity table: %s", varname);
6606 LOG(1,
"Read emissivity table: %s", varname);
6607 NC(nc_inq_vardimid(ncid, varid, &dimid));
6608 NC(nc_inq_dimlen(ncid, dimid, &nbytes));
6611 uint8_t *work = NULL;
6612 ALLOC(work, uint8_t, nbytes);
6613 NC(nc_get_var_uchar(ncid, varid, (
unsigned char *) work));
6627 const char *varname,
6629 const char *defvalue,
6632 char dummy[
LEN], fullname1[
LEN], fullname2[
LEN], line[
LEN],
6633 rvarname[
LEN], rval[
LEN];
6639 if (argv[1][0] !=
'-')
6640 if (!(in = fopen(argv[1],
"r")))
6641 ERRMSG(
"Cannot open file!");
6645 sprintf(fullname1,
"%s[%d]", varname, arridx);
6646 sprintf(fullname2,
"%s[*]", varname);
6648 sprintf(fullname1,
"%s", varname);
6649 sprintf(fullname2,
"%s", varname);
6654 while (fgets(line,
LEN, in))
6655 if (sscanf(line,
"%s %s %s", rvarname, dummy, rval) == 3)
6656 if (strcasecmp(rvarname, fullname1) == 0 ||
6657 strcasecmp(rvarname, fullname2) == 0) {
6661 for (
int i = 1; i < argc - 1; i++)
6662 if (strcasecmp(argv[i], fullname1) == 0 ||
6663 strcasecmp(argv[i], fullname2) == 0) {
6664 sprintf(rval,
"%s", argv[i + 1]);
6675 if (strlen(defvalue) > 0)
6676 sprintf(rval,
"%s", defvalue);
6678 ERRMSG(
"Missing variable %s!\n", fullname1);
6682 LOG(1,
"%s = %s", fullname1, rval);
6686 sprintf(value,
"%s", rval);
6701 const size_t n = s_a->size1;
6704 gsl_vector *x_a = gsl_vector_alloc(n);
6707 atm2x(ctl, atm, x_a, NULL, NULL);
6708 for (
size_t i = 0; i < n; i++) {
6710 gsl_vector_set(x_a, i, ret->
err_press / 100 * gsl_vector_get(x_a, i));
6712 gsl_vector_set(x_a, i, ret->
err_temp);
6713 for (
int ig = 0; ig < ctl->
ng; ig++)
6714 if (iqa[i] ==
IDXQ(ig))
6715 gsl_vector_set(x_a, i, ret->
err_q[ig] / 100 * gsl_vector_get(x_a, i));
6716 for (
int iw = 0; iw < ctl->
nw; iw++)
6717 if (iqa[i] ==
IDXK(iw))
6718 gsl_vector_set(x_a, i, ret->
err_k[iw]);
6720 gsl_vector_set(x_a, i, ret->
err_clz);
6722 gsl_vector_set(x_a, i, ret->
err_cldz);
6723 for (
int icl = 0; icl < ctl->
ncl; icl++)
6724 if (iqa[i] ==
IDXCLK(icl))
6725 gsl_vector_set(x_a, i, ret->
err_clk[icl]);
6727 gsl_vector_set(x_a, i, ret->
err_sft);
6728 for (
int isf = 0; isf < ctl->
nsf; isf++)
6730 gsl_vector_set(x_a, i, ret->
err_sfeps[isf]);
6734 for (
size_t i = 0; i < n; i++)
6735 if (
POW2(gsl_vector_get(x_a, i)) <= 0)
6736 ERRMSG(
"Check a priori data (zero standard deviation)!");
6739 gsl_matrix_set_zero(s_a);
6740 for (
size_t i = 0; i < n; i++)
6741 gsl_matrix_set(s_a, i, i,
POW2(gsl_vector_get(x_a, i)));
6744 for (
size_t i = 0; i < n; i++)
6745 for (
size_t j = 0; j < n; j++)
6746 if (i != j && iqa[i] == iqa[j]) {
6753 if (iqa[i] ==
IDXP) {
6759 if (iqa[i] ==
IDXT) {
6765 for (
int ig = 0; ig < ctl->
ng; ig++)
6766 if (iqa[i] ==
IDXQ(ig)) {
6772 for (
int iw = 0; iw < ctl->
nw; iw++)
6773 if (iqa[i] ==
IDXK(iw)) {
6779 if (cz > 0 && ch > 0) {
6782 double x0[3], x1[3];
6788 exp(-
DIST(x0, x1) / ch -
6789 fabs(atm->
z[ipa[i]] - atm->
z[ipa[j]]) / cz);
6792 gsl_matrix_set(s_a, i, j, gsl_vector_get(x_a, i)
6793 * gsl_vector_get(x_a, j) * rho);
6798 gsl_vector_free(x_a);
6807 gsl_vector *sig_noise,
6808 gsl_vector *sig_formod,
6809 gsl_vector *sig_eps_inv) {
6816 const size_t m = sig_eps_inv->size;
6820 for (
int ir = 0; ir < obs_err->
nr; ir++)
6821 for (
int id = 0;
id < ctl->
nd;
id++)
6822 obs_err->
rad[
id][ir]
6823 = (isfinite(obs->
rad[
id][ir]) ? ret->
err_noise[
id] : NAN);
6824 obs2y(ctl, obs_err, sig_noise, NULL, NULL);
6828 for (
int ir = 0; ir < obs_err->
nr; ir++)
6829 for (
int id = 0;
id < ctl->
nd;
id++)
6830 obs_err->
rad[
id][ir]
6832 obs2y(ctl, obs_err, sig_formod, NULL, NULL);
6835 for (
size_t i = 0; i < m; i++)
6836 gsl_vector_set(sig_eps_inv, i, 1 / sqrt(
POW2(gsl_vector_get(sig_noise, i))
6842 for (
size_t i = 0; i < m; i++)
6843 if (gsl_vector_get(sig_eps_inv, i) <= 0)
6844 ERRMSG(
"Check measurement errors (zero standard deviation)!");
6854 const char *shared_file,
6855 const char *legacy_file,
6856 const char **dirname,
6859 if (shared_file[0] !=
'-') {
6865 *dirname = ret->
dir;
6874 const char *shared_file,
6875 const char *legacy_file,
6876 const char **dirname,
6879 if (shared_file[0] !=
'-') {
6885 *dirname = ret->
dir;
6900 if (snprintf(lockfile,
LEN,
"%s.lock", base) >=
LEN)
6901 ERRMSG(
"Lock file name too long!");
6902 int fd = open(lockfile, O_CREAT | O_RDWR, 0666);
6904 ERRMSG(
"Cannot open lock file!");
6907 fl.l_type = F_WRLCK;
6908 fl.l_whence = SEEK_SET;
6911 if (fcntl(fd, F_SETLKW, &fl) < 0)
6912 ERRMSG(
"Cannot lock shared output file!");
6926 fl.l_type = F_UNLCK;
6927 fl.l_whence = SEEK_SET;
6930 if (fcntl(fd, F_SETLK, &fl) < 0)
6931 ERRMSG(
"Cannot unlock shared output file!");
6978 const size_t ip = gsl_stats_min_index(los->
z, 1, (
size_t) los->
np);
6981 if (ip <= 0 || ip >= (
size_t) los->
np - 1) {
6982 *tpz = los->
z[los->
np - 1];
6983 *tplon = los->
lon[los->
np - 1];
6984 *tplat = los->
lat[los->
np - 1];
6991 const double yy0 = los->
z[ip - 1];
6992 const double yy1 = los->
z[ip];
6993 const double yy2 = los->
z[ip + 1];
6994 const double x1 = sqrt(
POW2(los->
ds[ip]) -
POW2(yy1 - yy0));
6995 const double x2 = x1 + sqrt(
POW2(los->
ds[ip + 1]) -
POW2(yy2 - yy1));
6996 const double a = 1 / (x1 - x2) * (-(yy0 - yy1) / x1 + (yy0 - yy2) / x2);
6997 const double b = -(yy0 - yy1) / x1 - a * x1;
6998 const double c = yy0;
7001 double dummy, v[3], v0[3], v2[3];
7002 const double x = -b / (2 * a);
7003 *tpz = a * x * x + b * x + c;
7006 for (
int i = 0; i < 3; i++)
7007 v[i] =
LIN(0.0, v0[i], x2, v2[i], x);
7023 for (
int id = 0;
id < ctl->
nd;
id++)
7024 for (
int ig = 0; ig < ctl->
ng; ig++) {
7027 const int np = tbl->
np[id][ig];
7032 for (
int ip = 0; ip < np; ip++) {
7035 const int nt = tbl->
nt[id][ig][ip];
7036 for (
int it = 0; it < nt; it++) {
7039 free(tbl->
logu[
id][ig][ip][it]);
7040 free(tbl->
logeps[
id][ig][ip][it]);
7041 tbl->
logu[id][ig][ip][it] = NULL;
7042 tbl->
logeps[id][ig][ip][it] = NULL;
7058 size_t *bytes_used) {
7063 int np = tbl->
np[id][ig];
7064 memcpy(cur, &np,
sizeof(np));
7067 memcpy(cur, tbl->
p[
id][ig], (
size_t) np *
sizeof(
double));
7068 cur += ((size_t) np *
sizeof(
double));
7070 for (
int ip = 0; ip < np; ip++) {
7071 int nt = tbl->
nt[id][ig][ip];
7072 memcpy(cur, &nt,
sizeof(nt));
7075 memcpy(cur, tbl->
t[
id][ig][ip], (
size_t) nt *
sizeof(
double));
7076 cur += ((size_t) nt *
sizeof(
double));
7078 for (
int it = 0; it < nt; it++) {
7079 int nu = tbl->
nu[id][ig][ip][it];
7080 memcpy(cur, &nu,
sizeof(nu));
7083 memcpy(cur, tbl->
logu[
id][ig][ip][it], (
size_t) nu *
sizeof(
float));
7084 cur += ((size_t) nu *
sizeof(
float));
7086 memcpy(cur, tbl->
logeps[
id][ig][ip][it], (
size_t) nu *
sizeof(
float));
7087 cur += ((size_t) nu *
sizeof(
float));
7092 const int n = tbl->
filt_n[id];
7093 memcpy(cur, &n,
sizeof(n));
7096 memcpy(cur, tbl->
filt_nu[
id], (
size_t) n *
sizeof(
double));
7097 cur += ((size_t) n *
sizeof(
double));
7099 memcpy(cur, tbl->
filt_f[
id], (
size_t) n *
sizeof(
double));
7100 cur += ((size_t) n *
sizeof(
double));
7102 *bytes_used = (size_t) (cur - buf);
7115 const int np = tbl->
np[id][ig];
7116 bytes +=
sizeof(int);
7117 bytes += ((size_t) np *
sizeof(
double));
7119 for (
int ip = 0; ip < np; ip++) {
7120 const int nt = tbl->
nt[id][ig][ip];
7121 bytes +=
sizeof(int);
7122 bytes += ((size_t) nt *
sizeof(
double));
7124 for (
int it = 0; it < nt; it++) {
7125 const int nu = tbl->
nu[id][ig][ip][it];
7126 bytes +=
sizeof(int);
7127 bytes += (2 * (size_t) nu *
sizeof(
float));
7132 const int n = tbl->
filt_n[id];
7133 bytes +=
sizeof(int);
7134 bytes += (2 * (size_t) n *
sizeof(
double));
7145 const uint8_t *buf) {
7147 const uint8_t *cur = buf;
7151 memcpy(&np, cur,
sizeof(np));
7154 if (np < 0 || np >
TBLNP)
7155 ERRMSG(
"np out of range!");
7156 tbl->
np[id][ig] = np;
7158 memcpy(tbl->
p[
id][ig], cur, (
size_t) np *
sizeof(
double));
7159 cur += ((size_t) np *
sizeof(
double));
7161 for (
int ip = 0; ip < np; ip++) {
7164 memcpy(&nt, cur,
sizeof(nt));
7167 if (nt < 0 || nt >
TBLNT)
7168 ERRMSG(
"nt out of range!");
7169 tbl->
nt[id][ig][ip] = nt;
7171 memcpy(tbl->
t[
id][ig][ip], cur, (
size_t) nt *
sizeof(
double));
7172 cur += ((size_t) nt *
sizeof(
double));
7174 for (
int it = 0; it < nt; it++) {
7177 memcpy(&nu, cur,
sizeof(nu));
7180 if (nu < 0 || nu >
TBLNU)
7181 ERRMSG(
"nu out of range!");
7182 tbl->
nu[id][ig][ip][it] = nu;
7189 memcpy(tbl->
logu[
id][ig][ip][it], cur, (
size_t) nu *
sizeof(
float));
7190 cur += ((size_t) nu *
sizeof(
float));
7192 memcpy(tbl->
logeps[
id][ig][ip][it], cur, (
size_t) nu *
sizeof(
float));
7193 cur += ((size_t) nu *
sizeof(
float));
7199 memcpy(&n, cur,
sizeof(n));
7203 ERRMSG(
"Missing or invalid filter function (filt_n) in packed table!");
7206 memcpy(tbl->
filt_nu[
id], cur, (
size_t) n *
sizeof(
double));
7207 cur += ((size_t) n *
sizeof(
double));
7209 memcpy(tbl->
filt_f[
id], cur, (
size_t) n *
sizeof(
double));
7210 cur += ((size_t) n *
sizeof(
double));
7212 return (
size_t) (cur - buf);
7224 const double remain,
7236 t1.tm_year = year - 1900;
7237 t1.tm_mon = mon - 1;
7243 *jsec = (double) timegm(&t1) - (double) timegm(&t0) + remain;
7256 static int ct_name[
NTIMER], iname = -1, igroup = -1, nname, ngroup;
7259 t1 = omp_get_wtime();
7260 const double dt = t1 - t0;
7264 rt_name[iname] += dt;
7265 rt_sq[iname] +=
POW2(dt);
7266 rt_min[iname] = (ct_name[iname] <= 0 ? dt :
MIN(rt_min[iname], dt));
7267 rt_max[iname] = (ct_name[iname] <= 0 ? dt :
MAX(rt_max[iname], dt));
7271 rt_group[igroup] += dt;
7275 for (
int i = 0; i < nname; i++) {
7276 const double mean = rt_name[i] / ct_name[i];
7277 const double variance =
MAX(0.0, rt_sq[i] / ct_name[i] -
POW2(mean));
7279 "TIMER_%s = %.3f s (min= %g s, mean= %g s, stddev= %g s, max= %g s, n= %d)",
7280 names[i], rt_name[i], rt_min[i], mean, sqrt(variance), rt_max[i],
7283 for (
int i = 0; i < ngroup; i++)
7284 LOG(1,
"TIMER_GROUP_%s = %.3f s", groups[i], rt_group[i]);
7286 for (
int i = 0; i < nname; i++)
7287 total += rt_name[i];
7288 LOG(1,
"TIMER_TOTAL = %.3f s", total);
7292 for (iname = 0; iname < nname; iname++)
7293 if (strcasecmp(name, names[iname]) == 0)
7295 for (igroup = 0; igroup < ngroup; igroup++)
7296 if (strcasecmp(group, groups[igroup]) == 0)
7300 if (iname >= nname) {
7301 sprintf(names[iname],
"%s", name);
7303 ERRMSG(
"Too many timers!");
7307 if (igroup >= ngroup) {
7308 sprintf(groups[igroup],
"%s", group);
7309 if ((++ngroup) >=
NTIMER)
7310 ERRMSG(
"Too many groups!");
7320 const char *dirname,
7321 const char *filename,
7328 if (dirname != NULL)
7329 sprintf(file,
"%s/%s", dirname, filename);
7331 sprintf(file,
"%s", filename);
7334 LOG(1,
"Write atmospheric data: %s", file);
7341 else if (ctl->
atmfmt == 2)
7345 else if (ctl->
atmfmt == 3)
7350 ERRMSG(
"Unknown file format, check ATMFMT!");
7354 LOG(2,
"Number of data points: %d", atm->
np);
7355 gsl_stats_minmax(&mini, &maxi, atm->
time, 1, (
size_t) atm->
np);
7356 LOG(2,
"Time range: %.2f ... %.2f s", mini, maxi);
7357 gsl_stats_minmax(&mini, &maxi, atm->
z, 1, (
size_t) atm->
np);
7358 LOG(2,
"Altitude range: %g ... %g km", mini, maxi);
7359 gsl_stats_minmax(&mini, &maxi, atm->
lon, 1, (
size_t) atm->
np);
7360 LOG(2,
"Longitude range: %g ... %g deg", mini, maxi);
7361 gsl_stats_minmax(&mini, &maxi, atm->
lat, 1, (
size_t) atm->
np);
7362 LOG(2,
"Latitude range: %g ... %g deg", mini, maxi);
7363 gsl_stats_minmax(&mini, &maxi, atm->
p, 1, (
size_t) atm->
np);
7364 LOG(2,
"Pressure range: %g ... %g hPa", maxi, mini);
7365 gsl_stats_minmax(&mini, &maxi, atm->
t, 1, (
size_t) atm->
np);
7366 LOG(2,
"Temperature range: %g ... %g K", mini, maxi);
7367 for (
int ig = 0; ig < ctl->
ng; ig++) {
7368 gsl_stats_minmax(&mini, &maxi, atm->
q[ig], 1, (
size_t) atm->
np);
7369 LOG(2,
"Emitter %s range: %g ... %g ppv", ctl->
emitter[ig], mini, maxi);
7371 for (
int iw = 0; iw < ctl->
nw; iw++) {
7372 gsl_stats_minmax(&mini, &maxi, atm->
k[iw], 1, (
size_t) atm->
np);
7373 LOG(2,
"Extinction range (window %d): %g ... %g km^-1", iw, mini, maxi);
7376 LOG(2,
"Cloud layer: z= %g km | dz= %g km | k= %g ... %g km^-1",
7379 LOG(2,
"Cloud layer: none");
7382 "Surface: T_s = %g K | eps= %g ... %g",
7385 LOG(2,
"Surface: none");
7391 const char *filename,
7399 if (!(out = fopen(filename,
"w")))
7400 ERRMSG(
"Cannot create file!");
7404 "# $1 = time (seconds since 2000-01-01T00:00Z)\n"
7405 "# $2 = altitude [km]\n"
7406 "# $3 = longitude [deg]\n"
7407 "# $4 = latitude [deg]\n"
7408 "# $5 = pressure [hPa]\n" "# $6 = temperature [K]\n");
7409 for (
int ig = 0; ig < ctl->
ng; ig++)
7410 fprintf(out,
"# $%d = %s volume mixing ratio [ppv]\n",
7412 for (
int iw = 0; iw < ctl->
nw; iw++)
7413 fprintf(out,
"# $%d = extinction (window %d) [km^-1]\n", ++n, iw);
7415 fprintf(out,
"# $%d = cloud layer height [km]\n", ++n);
7416 fprintf(out,
"# $%d = cloud layer depth [km]\n", ++n);
7417 for (
int icl = 0; icl < ctl->
ncl; icl++)
7418 fprintf(out,
"# $%d = cloud layer extinction (%.4f cm^-1) [km^-1]\n",
7419 ++n, ctl->
clnu[icl]);
7422 fprintf(out,
"# $%d = surface temperature [K]\n", ++n);
7423 for (
int isf = 0; isf < ctl->
nsf; isf++)
7424 fprintf(out,
"# $%d = surface emissivity (%.4f cm^-1)\n",
7425 ++n, ctl->
sfnu[isf]);
7429 for (
int ip = 0; ip < atm->
np; ip++) {
7430 if (ip == 0 || atm->
time[ip] != atm->
time[ip - 1])
7432 fprintf(out,
"%.2f %g %g %g %g %g", atm->
time[ip], atm->
z[ip],
7433 atm->
lon[ip], atm->
lat[ip], atm->
p[ip], atm->
t[ip]);
7434 for (
int ig = 0; ig < ctl->
ng; ig++)
7435 fprintf(out,
" %g", atm->
q[ig][ip]);
7436 for (
int iw = 0; iw < ctl->
nw; iw++)
7437 fprintf(out,
" %g", atm->
k[iw][ip]);
7439 fprintf(out,
" %g %g", atm->
clz, atm->
cldz);
7440 for (
int icl = 0; icl < ctl->
ncl; icl++)
7441 fprintf(out,
" %g", atm->
clk[icl]);
7444 fprintf(out,
" %g", atm->
sft);
7445 for (
int isf = 0; isf < ctl->
nsf; isf++)
7446 fprintf(out,
" %g", atm->
sfeps[isf]);
7458 const char *filename,
7464 if (!(out = fopen(filename,
"w")))
7465 ERRMSG(
"Cannot create file!");
7485 size_t np = (size_t) atm->
np;
7507 for (
int ig = 0; ig < ctl->
ng; ig++)
7511 for (
int iw = 0; iw < ctl->
nw; iw++)
7542 const char *filename,
7547 char longname[
LEN], varname[
LEN];
7549 int ncid, varid, dim_profile, dim_level;
7554 if (atm->
np < 1 || atm->
np >
NP)
7555 ERRMSG(
"Number of levels out of range!");
7558 if (nc_open(filename, NC_WRITE, &ncid) != NC_NOERR)
7559 NC(nc_create(filename, NC_NETCDF4, &ncid));
7562 int r = nc_redef(ncid);
7563 if (r != NC_NOERR && r != NC_EINDEFINE)
7567 if (nc_inq_dimid(ncid,
"profile", &dim_profile) != NC_NOERR)
7568 NC(nc_def_dim(ncid,
"profile", NC_UNLIMITED, &dim_profile));
7571 if (nc_inq_dimid(ncid,
"level", &dim_level) == NC_NOERR) {
7572 NC(nc_inq_dimlen(ncid, dim_level, &level_max));
7573 if (level_max < 1 || level_max > (
size_t)
NP)
7574 ERRMSG(
"netCDF dimension level is out of range!");
7575 if ((
size_t) atm->
np > level_max)
7576 ERRMSG(
"profile has too many levels!");
7578 level_max = (size_t) atm->
np;
7579 NC(nc_def_dim(ncid,
"level", level_max, &dim_level));
7583 int dimids[2] = { dim_profile, dim_level };
7586 const int deflate_level = 0;
7587 const int quant_digits = 0;
7590 if (nc_inq_varid(ncid,
"nlev", &varid) != NC_NOERR)
7592 "number of vertical levels",
"1", 0, 0);
7595 if (nc_inq_varid(ncid,
"time", &varid) != NC_NOERR)
7597 "time in seconds since 2000-01-01, 00:00 UTC",
"s",
7600 if (nc_inq_varid(ncid,
"z", &varid) != NC_NOERR)
7601 NC_DEF_VAR(
"z", NC_DOUBLE, 2, dimids,
"altitude",
"km", deflate_level, 0);
7603 if (nc_inq_varid(ncid,
"lon", &varid) != NC_NOERR)
7605 "longitude",
"degrees_east", deflate_level, 0);
7607 if (nc_inq_varid(ncid,
"lat", &varid) != NC_NOERR)
7609 "latitude",
"degrees_north", deflate_level, 0);
7611 if (nc_inq_varid(ncid,
"p", &varid) != NC_NOERR)
7613 "pressure",
"hPa", deflate_level, quant_digits);
7615 if (nc_inq_varid(ncid,
"t", &varid) != NC_NOERR)
7617 "temperature",
"K", deflate_level, quant_digits);
7620 for (
int ig = 0; ig < ctl->
ng; ig++)
7621 if (nc_inq_varid(ncid, ctl->
emitter[ig], &varid) != NC_NOERR) {
7622 sprintf(longname,
"%s volume mixing ratio", ctl->
emitter[ig]);
7624 longname,
"ppv", deflate_level, quant_digits);
7628 for (
int iw = 0; iw < ctl->
nw; iw++) {
7629 sprintf(varname,
"ext_win_%d", iw);
7630 if (nc_inq_varid(ncid, varname, &varid) != NC_NOERR) {
7631 sprintf(longname,
"extinction (window %d)", iw);
7633 longname,
"km**-1", deflate_level, quant_digits);
7639 if (nc_inq_varid(ncid,
"cld_z", &varid) != NC_NOERR)
7641 "cloud layer height",
"km", deflate_level, quant_digits);
7643 if (nc_inq_varid(ncid,
"cld_dz", &varid) != NC_NOERR)
7645 "cloud layer depth",
"km", deflate_level, quant_digits);
7647 for (
int icl = 0; icl < ctl->
ncl; icl++) {
7648 sprintf(varname,
"cld_k_%.4f", ctl->
clnu[icl]);
7649 if (nc_inq_varid(ncid, varname, &varid) != NC_NOERR) {
7650 sprintf(longname,
"cloud layer extinction (%.4f cm^-1)",
7652 NC_DEF_VAR(varname, NC_DOUBLE, 1, dimids, longname,
"km**-1",
7653 deflate_level, quant_digits);
7660 if (nc_inq_varid(ncid,
"srf_t", &varid) != NC_NOERR)
7662 "surface temperature",
"K", deflate_level, quant_digits);
7664 for (
int isf = 0; isf < ctl->
nsf; isf++) {
7665 sprintf(varname,
"srf_eps_%.4f", ctl->
sfnu[isf]);
7666 if (nc_inq_varid(ncid, varname, &varid) != NC_NOERR) {
7667 sprintf(longname,
"surface emissivity (%.4f cm^-1)", ctl->
sfnu[isf]);
7668 NC_DEF_VAR(varname, NC_DOUBLE, 1, dimids, longname,
"1",
7669 deflate_level, quant_digits);
7675 NC(nc_enddef(ncid));
7678 size_t start[2] = { (size_t) profile, 0 };
7679 size_t count[2] = { 1, (size_t) atm->
np };
7693 for (
int ig = 0; ig < ctl->
ng; ig++)
7697 for (
int iw = 0; iw < ctl->
nw; iw++) {
7698 sprintf(varname,
"ext_win_%d", iw);
7706 for (
int icl = 0; icl < ctl->
ncl; icl++) {
7707 sprintf(varname,
"cld_k_%.4f", ctl->
clnu[icl]);
7715 for (
int isf = 0; isf < ctl->
nsf; isf++) {
7716 sprintf(varname,
"srf_eps_%.4f", ctl->
sfnu[isf]);
7729 const char *filename,
7734 LOG(1,
"Write RFM data: %s", filename);
7738 if (!(out = fopen(filename,
"w")))
7739 ERRMSG(
"Cannot create file!");
7742 fprintf(out,
"%d\n", atm->
np);
7743 fprintf(out,
"*HGT [km]\n");
7744 for (
int ip = 0; ip < atm->
np; ip++)
7745 fprintf(out,
"%g\n", atm->
z[ip]);
7746 fprintf(out,
"*PRE [mb]\n");
7747 for (
int ip = 0; ip < atm->
np; ip++)
7748 fprintf(out,
"%g\n", atm->
p[ip]);
7749 fprintf(out,
"*TEM [K]\n");
7750 for (
int ip = 0; ip < atm->
np; ip++)
7751 fprintf(out,
"%g\n", atm->
t[ip]);
7752 for (
int ig = 0; ig < ctl->
ng; ig++) {
7753 fprintf(out,
"*%s [ppmv]\n", ctl->
emitter[ig]);
7754 for (
int ip = 0; ip < atm->
np; ip++)
7755 fprintf(out,
"%g\n", atm->
q[ig][ip] * 1e6);
7757 fprintf(out,
"*END\n");
7766 const char *dirname,
7767 const char *filename,
7769 const gsl_matrix *matrix,
7772 const char *rowspace,
7773 const char *colspace,
7784 rowspace, colspace, sort);
7793 rowspace, colspace, sort, dataset);
7797 ERRMSG(
"Unknown matrix file format, check MATRIXFMT!");
7803 const char *dirname,
7804 const char *filename,
7806 const gsl_matrix *matrix,
7809 const char *rowspace,
7810 const char *colspace,
7813 char file[
LEN], quantity[
LEN];
7815 int *cida, *ciqa, *cipa, *cira, *rida, *riqa, *ripa, *rira;
7817 size_t i, j, nc, nr;
7838 if (dirname != NULL)
7839 sprintf(file,
"%s/%s", dirname, filename);
7841 sprintf(file,
"%s", filename);
7844 LOG(1,
"Write matrix: %s", file);
7848 if (!(out = fopen(file,
"w")))
7849 ERRMSG(
"Cannot create file!");
7852 if (rowspace[0] ==
'y') {
7855 "# $1 = Row: index (measurement space)\n"
7856 "# $2 = Row: channel wavenumber [cm^-1]\n"
7857 "# $3 = Row: time (seconds since 2000-01-01T00:00Z)\n"
7858 "# $4 = Row: view point altitude [km]\n"
7859 "# $5 = Row: view point longitude [deg]\n"
7860 "# $6 = Row: view point latitude [deg]\n");
7863 nr =
obs2y(ctl, obs, NULL, rida, rira);
7868 "# $1 = Row: index (state space)\n"
7869 "# $2 = Row: name of quantity\n"
7870 "# $3 = Row: time (seconds since 2000-01-01T00:00Z)\n"
7871 "# $4 = Row: altitude [km]\n"
7872 "# $5 = Row: longitude [deg]\n" "# $6 = Row: latitude [deg]\n");
7875 nr =
atm2x(ctl, atm, NULL, riqa, ripa);
7879 if (colspace[0] ==
'y') {
7882 "# $7 = Col: index (measurement space)\n"
7883 "# $8 = Col: channel wavenumber [cm^-1]\n"
7884 "# $9 = Col: time (seconds since 2000-01-01T00:00Z)\n"
7885 "# $10 = Col: view point altitude [km]\n"
7886 "# $11 = Col: view point longitude [deg]\n"
7887 "# $12 = Col: view point latitude [deg]\n");
7890 nc =
obs2y(ctl, obs, NULL, cida, cira);
7895 "# $7 = Col: index (state space)\n"
7896 "# $8 = Col: name of quantity\n"
7897 "# $9 = Col: time (seconds since 2000-01-01T00:00Z)\n"
7898 "# $10 = Col: altitude [km]\n"
7899 "# $11 = Col: longitude [deg]\n" "# $12 = Col: latitude [deg]\n");
7902 nc =
atm2x(ctl, atm, NULL, ciqa, cipa);
7906 fprintf(out,
"# $13 = Matrix element\n\n");
7910 while (i < nr && j < nc) {
7913 if (rowspace[0] ==
'y')
7914 fprintf(out,
"%d %.4f %.2f %g %g %g",
7915 (
int) i, ctl->
nu[rida[i]],
7916 obs->
time[rira[i]], obs->
vpz[rira[i]],
7920 fprintf(out,
"%d %s %.2f %g %g %g", (
int) i, quantity,
7921 atm->
time[ripa[i]], atm->
z[ripa[i]],
7922 atm->
lon[ripa[i]], atm->
lat[ripa[i]]);
7926 if (colspace[0] ==
'y')
7927 fprintf(out,
" %d %.4f %.2f %g %g %g",
7928 (
int) j, ctl->
nu[cida[j]],
7929 obs->
time[cira[j]], obs->
vpz[cira[j]],
7933 fprintf(out,
" %d %s %.2f %g %g %g", (
int) j, quantity,
7934 atm->
time[cipa[j]], atm->
z[cipa[j]],
7935 atm->
lon[cipa[j]], atm->
lat[cipa[j]]);
7939 fprintf(out,
" %g\n", gsl_matrix_get(matrix, i, j));
7942 if (sort[0] ==
'r') {
7976 const char *dirname,
7977 const char *filename,
7978 const gsl_matrix *matrix) {
7981 const size_t nr = matrix->size1;
7982 const size_t nc = matrix->size2;
7985 if (dirname != NULL)
7986 sprintf(file,
"%s/%s", dirname, filename);
7988 sprintf(file,
"%s", filename);
7991 LOG(1,
"Write matrix: %s", file);
7995 if (!(out = fopen(file,
"w")))
7996 ERRMSG(
"Cannot create file!");
8010 for (
size_t i = 0; i < nr; i++)
8011 for (
size_t j = 0; j < nc; j++) {
8012 double value = gsl_matrix_get(matrix, i, j);
8025 const char *dirname,
8026 const char *filename,
8028 const gsl_matrix *matrix,
8031 const char *rowspace,
8032 const char *colspace,
8038 const size_t name_strlen = 100;
8040 int ncid, dimid_dataset, dimid_row, dimid_col, dimid_name, varid;
8041 int *cida, *ciqa, *cipa, *cira, *rida, *riqa, *ripa, *rira;
8043 size_t nr = matrix->size1, nc = matrix->size2, naux;
8064 if (dirname != NULL)
8065 sprintf(file,
"%s/%s", dirname, filename);
8067 sprintf(file,
"%s", filename);
8070 LOG(1,
"Write matrix: %s", file);
8073 if (nc_open(file, NC_WRITE, &ncid) != NC_NOERR)
8074 NC(nc_create(file, NC_NETCDF4, &ncid));
8077 int r = nc_redef(ncid);
8078 if (r != NC_NOERR && r != NC_EINDEFINE)
8082 if (nc_inq_dimid(ncid,
"dataset", &dimid_dataset) != NC_NOERR)
8083 NC(nc_def_dim(ncid,
"dataset", NC_UNLIMITED, &dimid_dataset));
8086 if (nc_inq_dimid(ncid,
"row", &dimid_row) == NC_NOERR) {
8087 NC(nc_inq_dimlen(ncid, dimid_row, &naux));
8089 ERRMSG(
"matrix row dimension is incompatible!");
8091 NC(nc_def_dim(ncid,
"row", nr, &dimid_row));
8094 if (nc_inq_dimid(ncid,
"col", &dimid_col) == NC_NOERR) {
8095 NC(nc_inq_dimlen(ncid, dimid_col, &naux));
8097 ERRMSG(
"matrix col dimension is incompatible!");
8099 NC(nc_def_dim(ncid,
"col", nc, &dimid_col));
8102 if (nc_inq_dimid(ncid,
"name_strlen", &dimid_name) == NC_NOERR) {
8103 NC(nc_inq_dimlen(ncid, dimid_name, &naux));
8104 if (naux != name_strlen)
8105 ERRMSG(
"matrix name_strlen dimension is incompatible!");
8107 NC(nc_def_dim(ncid,
"name_strlen", name_strlen, &dimid_name));
8110 int dimids3[3] = { dimid_dataset, dimid_row, dimid_col };
8111 int dimids1[1] = { dimid_dataset };
8112 int dimids2_row[2] = { dimid_dataset, dimid_row };
8113 int dimids2_col[2] = { dimid_dataset, dimid_col };
8114 int dimids3_rowname[3] = { dimid_dataset, dimid_row, dimid_name };
8115 int dimids3_colname[3] = { dimid_dataset, dimid_col, dimid_name };
8116 if (nc_inq_varid(ncid,
"matrix", &varid) != NC_NOERR) {
8117 NC(nc_def_var(ncid,
"matrix", NC_DOUBLE, 3, dimids3, &varid));
8118 NC(nc_put_att_text(ncid, varid,
"long_name", 14,
"matrix element"));
8119 NC(nc_put_att_text(ncid, varid,
"units", 1,
"1"));
8121 if (nc_inq_varid(ncid,
"rowspace", &varid) != NC_NOERR)
8123 "row space selector",
"1", 0, 0);
8124 if (nc_inq_varid(ncid,
"colspace", &varid) != NC_NOERR)
8126 "column space selector",
"1", 0, 0);
8127 if (nc_inq_varid(ncid,
"sort", &varid) != NC_NOERR)
8129 "matrix sort selector",
"1", 0, 0);
8130 if (nc_inq_varid(ncid,
"row_nu", &varid) != NC_NOERR)
8131 NC_DEF_VAR(
"row_nu", NC_DOUBLE, 2, dimids2_row,
8132 "row channel wavenumber",
"cm^-1", 0, 0);
8133 if (nc_inq_varid(ncid,
"row_time", &varid) != NC_NOERR)
8134 NC_DEF_VAR(
"row_time", NC_DOUBLE, 2, dimids2_row,
8135 "row time since 2000-01-01T00:00Z",
"s", 0, 0);
8136 if (nc_inq_varid(ncid,
"row_z", &varid) != NC_NOERR)
8137 NC_DEF_VAR(
"row_z", NC_DOUBLE, 2, dimids2_row,
8138 "row altitude",
"km", 0, 0);
8139 if (nc_inq_varid(ncid,
"row_lon", &varid) != NC_NOERR)
8140 NC_DEF_VAR(
"row_lon", NC_DOUBLE, 2, dimids2_row,
8141 "row longitude",
"degrees_east", 0, 0);
8142 if (nc_inq_varid(ncid,
"row_lat", &varid) != NC_NOERR)
8143 NC_DEF_VAR(
"row_lat", NC_DOUBLE, 2, dimids2_row,
8144 "row latitude",
"degrees_north", 0, 0);
8145 if (nc_inq_varid(ncid,
"row_quantity", &varid) != NC_NOERR)
8146 NC_DEF_VAR(
"row_quantity", NC_CHAR, 3, dimids3_rowname,
8147 "row state quantity name",
"1", 0, 0);
8148 if (nc_inq_varid(ncid,
"col_nu", &varid) != NC_NOERR)
8149 NC_DEF_VAR(
"col_nu", NC_DOUBLE, 2, dimids2_col,
8150 "column channel wavenumber",
"cm^-1", 0, 0);
8151 if (nc_inq_varid(ncid,
"col_time", &varid) != NC_NOERR)
8152 NC_DEF_VAR(
"col_time", NC_DOUBLE, 2, dimids2_col,
8153 "column time since 2000-01-01T00:00Z",
"s", 0, 0);
8154 if (nc_inq_varid(ncid,
"col_z", &varid) != NC_NOERR)
8155 NC_DEF_VAR(
"col_z", NC_DOUBLE, 2, dimids2_col,
8156 "column altitude",
"km", 0, 0);
8157 if (nc_inq_varid(ncid,
"col_lon", &varid) != NC_NOERR)
8158 NC_DEF_VAR(
"col_lon", NC_DOUBLE, 2, dimids2_col,
8159 "column longitude",
"degrees_east", 0, 0);
8160 if (nc_inq_varid(ncid,
"col_lat", &varid) != NC_NOERR)
8161 NC_DEF_VAR(
"col_lat", NC_DOUBLE, 2, dimids2_col,
8162 "column latitude",
"degrees_north", 0, 0);
8163 if (nc_inq_varid(ncid,
"col_quantity", &varid) != NC_NOERR)
8164 NC_DEF_VAR(
"col_quantity", NC_CHAR, 3, dimids3_colname,
8165 "column state quantity name",
"1", 0, 0);
8168 NC(nc_enddef(ncid));
8171 size_t start1[1] = { (size_t) dataset };
8172 size_t count1[1] = { 1 };
8173 NC(nc_inq_varid(ncid,
"rowspace", &varid));
8174 NC(nc_put_vara_text(ncid, varid, start1, count1, rowspace));
8175 NC(nc_inq_varid(ncid,
"colspace", &varid));
8176 NC(nc_put_vara_text(ncid, varid, start1, count1, colspace));
8177 NC(nc_inq_varid(ncid,
"sort", &varid));
8178 NC(nc_put_vara_text(ncid, varid, start1, count1, sort));
8181 if (rowspace[0] ==
'y')
8182 nr =
obs2y(ctl, obs, NULL, rida, rira);
8184 nr =
atm2x(ctl, atm, NULL, riqa, ripa);
8185 if (colspace[0] ==
'y')
8186 nc =
obs2y(ctl, obs, NULL, cida, cira);
8188 nc =
atm2x(ctl, atm, NULL, ciqa, cipa);
8191 for (
size_t i = 0; i < nr; i++) {
8192 const double nu = rowspace[0] ==
'y' ? ctl->
nu[rida[i]] : GSL_NAN;
8194 rowspace[0] ==
'y' ? obs->
time[rira[i]] : atm->
time[ripa[i]];
8195 const double z = rowspace[0] ==
'y' ? obs->
vpz[rira[i]] : atm->
z[ripa[i]];
8197 rowspace[0] ==
'y' ? obs->
vplon[rira[i]] : atm->
lon[ripa[i]];
8199 rowspace[0] ==
'y' ? obs->
vplat[rira[i]] : atm->
lat[ripa[i]];
8200 char qbuf[
LEN] = { 0 };
8201 size_t start2[2] = { (size_t) dataset, i };
8202 size_t count2[2] = { 1, 1 };
8203 size_t start3n[3] = { (size_t) dataset, i, 0 };
8204 size_t count3n[3] = { 1, 1, name_strlen };
8206 if (rowspace[0] !=
'y') {
8208 snprintf(qbuf,
LEN,
"%s", quantity);
8211 NC(nc_inq_varid(ncid,
"row_nu", &varid));
8212 NC(nc_put_vara_double(ncid, varid, start2, count2, &nu));
8213 NC(nc_inq_varid(ncid,
"row_time", &varid));
8214 NC(nc_put_vara_double(ncid, varid, start2, count2, &time));
8215 NC(nc_inq_varid(ncid,
"row_z", &varid));
8216 NC(nc_put_vara_double(ncid, varid, start2, count2, &z));
8217 NC(nc_inq_varid(ncid,
"row_lon", &varid));
8218 NC(nc_put_vara_double(ncid, varid, start2, count2, &lon));
8219 NC(nc_inq_varid(ncid,
"row_lat", &varid));
8220 NC(nc_put_vara_double(ncid, varid, start2, count2, &lat));
8221 NC(nc_inq_varid(ncid,
"row_quantity", &varid));
8222 NC(nc_put_vara_text(ncid, varid, start3n, count3n, qbuf));
8226 for (
size_t j = 0; j < nc; j++) {
8227 const double nu = colspace[0] ==
'y' ? ctl->
nu[cida[j]] : GSL_NAN;
8229 colspace[0] ==
'y' ? obs->
time[cira[j]] : atm->
time[cipa[j]];
8230 const double z = colspace[0] ==
'y' ? obs->
vpz[cira[j]] : atm->
z[cipa[j]];
8232 colspace[0] ==
'y' ? obs->
vplon[cira[j]] : atm->
lon[cipa[j]];
8234 colspace[0] ==
'y' ? obs->
vplat[cira[j]] : atm->
lat[cipa[j]];
8235 char qbuf[
LEN] = { 0 };
8236 size_t start2[2] = { (size_t) dataset, j };
8237 size_t count2[2] = { 1, 1 };
8238 size_t start3n[3] = { (size_t) dataset, j, 0 };
8239 size_t count3n[3] = { 1, 1, name_strlen };
8241 if (colspace[0] !=
'y') {
8243 snprintf(qbuf,
LEN,
"%s", quantity);
8246 NC(nc_inq_varid(ncid,
"col_nu", &varid));
8247 NC(nc_put_vara_double(ncid, varid, start2, count2, &nu));
8248 NC(nc_inq_varid(ncid,
"col_time", &varid));
8249 NC(nc_put_vara_double(ncid, varid, start2, count2, &time));
8250 NC(nc_inq_varid(ncid,
"col_z", &varid));
8251 NC(nc_put_vara_double(ncid, varid, start2, count2, &z));
8252 NC(nc_inq_varid(ncid,
"col_lon", &varid));
8253 NC(nc_put_vara_double(ncid, varid, start2, count2, &lon));
8254 NC(nc_inq_varid(ncid,
"col_lat", &varid));
8255 NC(nc_put_vara_double(ncid, varid, start2, count2, &lat));
8256 NC(nc_inq_varid(ncid,
"col_quantity", &varid));
8257 NC(nc_put_vara_text(ncid, varid, start3n, count3n, qbuf));
8261 NC(nc_inq_varid(ncid,
"matrix", &varid));
8262 for (
size_t i = 0; i < nr; i++)
8263 for (
size_t j = 0; j < nc; j++) {
8264 const double value = gsl_matrix_get(matrix, i, j);
8265 size_t start3[3] = { (size_t) dataset, i, j };
8266 size_t count3[3] = { 1, 1, 1 };
8267 NC(nc_put_vara_double(ncid, varid, start3, count3, &value));
8288 const char *dirname,
8289 const char *filename,
8296 if (dirname != NULL)
8297 sprintf(file,
"%s/%s", dirname, filename);
8299 sprintf(file,
"%s", filename);
8302 LOG(1,
"Write observation data: %s", file);
8309 else if (ctl->
obsfmt == 2)
8313 else if (ctl->
obsfmt == 3)
8318 LOG(2,
"Number of ray paths: %d", obs->
nr);
8319 gsl_stats_minmax(&mini, &maxi, obs->
time, 1, (
size_t) obs->
nr);
8320 LOG(2,
"Time range: %.2f ... %.2f s", mini, maxi);
8321 gsl_stats_minmax(&mini, &maxi, obs->
obsz, 1, (
size_t) obs->
nr);
8322 LOG(2,
"Observer altitude range: %g ... %g km", mini, maxi);
8323 gsl_stats_minmax(&mini, &maxi, obs->
obslon, 1, (
size_t) obs->
nr);
8324 LOG(2,
"Observer longitude range: %g ... %g deg", mini, maxi);
8325 gsl_stats_minmax(&mini, &maxi, obs->
obslat, 1, (
size_t) obs->
nr);
8326 LOG(2,
"Observer latitude range: %g ... %g deg", mini, maxi);
8327 gsl_stats_minmax(&mini, &maxi, obs->
vpz, 1, (
size_t) obs->
nr);
8328 LOG(2,
"View point altitude range: %g ... %g km", mini, maxi);
8329 gsl_stats_minmax(&mini, &maxi, obs->
vplon, 1, (
size_t) obs->
nr);
8330 LOG(2,
"View point longitude range: %g ... %g deg", mini, maxi);
8331 gsl_stats_minmax(&mini, &maxi, obs->
vplat, 1, (
size_t) obs->
nr);
8332 LOG(2,
"View point latitude range: %g ... %g deg", mini, maxi);
8333 gsl_stats_minmax(&mini, &maxi, obs->
tpz, 1, (
size_t) obs->
nr);
8334 LOG(2,
"Tangent point altitude range: %g ... %g km", mini, maxi);
8335 gsl_stats_minmax(&mini, &maxi, obs->
tplon, 1, (
size_t) obs->
nr);
8336 LOG(2,
"Tangent point longitude range: %g ... %g deg", mini, maxi);
8337 gsl_stats_minmax(&mini, &maxi, obs->
tplat, 1, (
size_t) obs->
nr);
8338 LOG(2,
"Tangent point latitude range: %g ... %g deg", mini, maxi);
8339 for (
int id = 0;
id < ctl->
nd;
id++) {
8340 gsl_stats_minmax(&mini, &maxi, obs->
rad[
id], 1, (
size_t) obs->
nr);
8342 LOG(2,
"Brightness temperature (%.4f cm^-1) range: %g ... %g K",
8343 ctl->
nu[
id], mini, maxi);
8345 LOG(2,
"Radiance (%.4f cm^-1) range: %g ... %g W/(m^2 sr cm^-1)",
8346 ctl->
nu[
id], mini, maxi);
8349 for (
int id = 0;
id < ctl->
nd;
id++) {
8350 gsl_stats_minmax(&mini, &maxi, obs->
tau[
id], 1, (
size_t) obs->
nr);
8351 LOG(2,
"Transmittance (%.4f cm^-1) range: %g ... %g",
8352 ctl->
nu[
id], mini, maxi);
8359 const char *filename,
8367 if (!(out = fopen(filename,
"w")))
8368 ERRMSG(
"Cannot create file!");
8372 "# $1 = time (seconds since 2000-01-01T00:00Z)\n"
8373 "# $2 = observer altitude [km]\n"
8374 "# $3 = observer longitude [deg]\n"
8375 "# $4 = observer latitude [deg]\n"
8376 "# $5 = view point altitude [km]\n"
8377 "# $6 = view point longitude [deg]\n"
8378 "# $7 = view point latitude [deg]\n"
8379 "# $8 = tangent point altitude [km]\n"
8380 "# $9 = tangent point longitude [deg]\n"
8381 "# $10 = tangent point latitude [deg]\n");
8382 for (
int id = 0;
id < ctl->
nd;
id++)
8384 fprintf(out,
"# $%d = brightness temperature (%.4f cm^-1) [K]\n",
8387 fprintf(out,
"# $%d = radiance (%.4f cm^-1) [W/(m^2 sr cm^-1)]\n",
8389 for (
int id = 0;
id < ctl->
nd;
id++)
8390 fprintf(out,
"# $%d = transmittance (%.4f cm^-1) [-]\n", ++n,
8394 for (
int ir = 0; ir < obs->
nr; ir++) {
8395 if (ir == 0 || obs->
time[ir] != obs->
time[ir - 1])
8397 fprintf(out,
"%.2f %g %g %g %g %g %g %g %g %g", obs->
time[ir],
8401 for (
int id = 0;
id < ctl->
nd;
id++)
8402 fprintf(out,
" %g", obs->
rad[
id][ir]);
8403 for (
int id = 0;
id < ctl->
nd;
id++)
8404 fprintf(out,
" %g", obs->
tau[
id][ir]);
8415 const char *filename,
8421 if (!(out = fopen(filename,
"w")))
8422 ERRMSG(
"Cannot create file!");
8433 size_t nr = (size_t) obs->
nr;
8467 for (
int id = 0;
id < ctl->
nd;
id++)
8471 for (
int id = 0;
id < ctl->
nd;
id++)
8483 const char *filename,
8486 const int profile) {
8488 char longname[
LEN], varname[
LEN];
8489 const char *spec_prefix = ctl->
write_bbt ?
"bt" :
"rad";
8491 int ncid, varid, dim_profile, dim_ray;
8496 if (obs->
nr < 1 || obs->
nr >
NR)
8497 ERRMSG(
"Number of ray paths out of range!");
8500 if (nc_open(filename, NC_WRITE, &ncid) != NC_NOERR)
8501 NC(nc_create(filename, NC_NETCDF4, &ncid));
8504 int r = nc_redef(ncid);
8505 if (r != NC_NOERR && r != NC_EINDEFINE)
8509 if (nc_inq_dimid(ncid,
"profile", &dim_profile) != NC_NOERR)
8510 NC(nc_def_dim(ncid,
"profile", NC_UNLIMITED, &dim_profile));
8513 if (nc_inq_dimid(ncid,
"ray", &dim_ray) == NC_NOERR) {
8514 NC(nc_inq_dimlen(ncid, dim_ray, &ray_max));
8515 if (ray_max < 1 || ray_max > (
size_t)
NR)
8516 ERRMSG(
"netCDF dimension ray is out of range!");
8517 if ((
size_t) obs->
nr > ray_max)
8518 ERRMSG(
"profile has too many rays!");
8520 ray_max = (size_t) obs->
nr;
8521 NC(nc_def_dim(ncid,
"ray", ray_max, &dim_ray));
8525 int dimids[2] = { dim_profile, dim_ray };
8528 const int deflate_level = 0;
8529 const int quant_digits = 0;
8532 if (nc_inq_varid(ncid,
"nray", &varid) != NC_NOERR)
8533 NC_DEF_VAR(
"nray", NC_INT, 1, dimids,
"number of ray paths",
"1", 0, 0);
8536 if (nc_inq_varid(ncid,
"time", &varid) != NC_NOERR)
8538 "time in seconds since 2000-01-01, 00:00 UTC",
"s",
8541 if (nc_inq_varid(ncid,
"obs_z", &varid) != NC_NOERR)
8543 "observer altitude",
"km", deflate_level, 0);
8545 if (nc_inq_varid(ncid,
"obs_lon", &varid) != NC_NOERR)
8547 "observer longitude",
"degrees_east", deflate_level, 0);
8549 if (nc_inq_varid(ncid,
"obs_lat", &varid) != NC_NOERR)
8551 "observer latitude",
"degrees_north", deflate_level, 0);
8553 if (nc_inq_varid(ncid,
"vp_z", &varid) != NC_NOERR)
8555 "view point altitude",
"km", deflate_level, 0);
8557 if (nc_inq_varid(ncid,
"vp_lon", &varid) != NC_NOERR)
8559 "view point longitude",
"degrees_east", deflate_level, 0);
8561 if (nc_inq_varid(ncid,
"vp_lat", &varid) != NC_NOERR)
8563 "view point latitude",
"degrees_north", deflate_level, 0);
8565 if (nc_inq_varid(ncid,
"tp_z", &varid) != NC_NOERR)
8567 "tangent point altitude",
"km", deflate_level, 0);
8569 if (nc_inq_varid(ncid,
"tp_lon", &varid) != NC_NOERR)
8571 "tangent point longitude",
"degrees_east", deflate_level, 0);
8573 if (nc_inq_varid(ncid,
"tp_lat", &varid) != NC_NOERR)
8575 "tangent point latitude",
"degrees_north", deflate_level, 0);
8578 for (
int id = 0;
id < ctl->
nd;
id++) {
8580 sprintf(varname,
"%s_%.4f", spec_prefix, ctl->
nu[
id]);
8581 if (nc_inq_varid(ncid, varname, &varid) != NC_NOERR) {
8583 sprintf(longname,
"brightness temperature (%.4f cm^-1)", ctl->
nu[
id]);
8584 NC_DEF_VAR(varname, NC_DOUBLE, 2, dimids, longname,
"K",
8585 deflate_level, quant_digits);
8587 sprintf(longname,
"radiance (%.4f cm^-1)", ctl->
nu[
id]);
8588 NC_DEF_VAR(varname, NC_DOUBLE, 2, dimids, longname,
8589 "W/(m^2 sr cm^-1)", deflate_level, quant_digits);
8593 sprintf(varname,
"tau_%.4f", ctl->
nu[
id]);
8594 if (nc_inq_varid(ncid, varname, &varid) != NC_NOERR) {
8595 sprintf(longname,
"transmittance (%.4f cm^-1)", ctl->
nu[
id]);
8596 NC_DEF_VAR(varname, NC_DOUBLE, 2, dimids, longname,
"1",
8597 deflate_level, quant_digits);
8602 NC(nc_enddef(ncid));
8605 size_t start[2] = { (size_t) profile, 0 };
8606 size_t count[2] = { 1, (size_t) obs->
nr };
8610 NC(nc_inq_varid(ncid,
"nray", &varid));
8611 NC(nc_put_vara_int(ncid, varid, start, count, &nr));
8614 NC(nc_inq_varid(ncid,
"time", &varid));
8615 NC(nc_put_vara_double(ncid, varid, start, count, obs->
time));
8617 NC(nc_inq_varid(ncid,
"obs_z", &varid));
8618 NC(nc_put_vara_double(ncid, varid, start, count, obs->
obsz));
8620 NC(nc_inq_varid(ncid,
"obs_lon", &varid));
8621 NC(nc_put_vara_double(ncid, varid, start, count, obs->
obslon));
8623 NC(nc_inq_varid(ncid,
"obs_lat", &varid));
8624 NC(nc_put_vara_double(ncid, varid, start, count, obs->
obslat));
8626 NC(nc_inq_varid(ncid,
"vp_z", &varid));
8627 NC(nc_put_vara_double(ncid, varid, start, count, obs->
vpz));
8629 NC(nc_inq_varid(ncid,
"vp_lon", &varid));
8630 NC(nc_put_vara_double(ncid, varid, start, count, obs->
vplon));
8632 NC(nc_inq_varid(ncid,
"vp_lat", &varid));
8633 NC(nc_put_vara_double(ncid, varid, start, count, obs->
vplat));
8635 NC(nc_inq_varid(ncid,
"tp_z", &varid));
8636 NC(nc_put_vara_double(ncid, varid, start, count, obs->
tpz));
8638 NC(nc_inq_varid(ncid,
"tp_lon", &varid));
8639 NC(nc_put_vara_double(ncid, varid, start, count, obs->
tplon));
8641 NC(nc_inq_varid(ncid,
"tp_lat", &varid));
8642 NC(nc_put_vara_double(ncid, varid, start, count, obs->
tplat));
8645 for (
int id = 0;
id < ctl->
nd;
id++) {
8646 sprintf(varname,
"%s_%.4f", spec_prefix, ctl->
nu[
id]);
8647 NC(nc_inq_varid(ncid, varname, &varid));
8648 NC(nc_put_vara_double(ncid, varid, start, count, obs->
rad[
id]));
8650 sprintf(varname,
"tau_%.4f", ctl->
nu[
id]);
8651 NC(nc_inq_varid(ncid, varname, &varid));
8652 NC(nc_put_vara_double(ncid, varid, start, count, obs->
tau[
id]));
8663 const char *filename,
8669 LOG(1,
"Write shape function: %s", filename);
8673 if (!(out = fopen(filename,
"w")))
8674 ERRMSG(
"Cannot create file!");
8678 "# $1 = shape function x-value [-]\n"
8679 "# $2 = shape function y-value [-]\n\n");
8682 for (
int i = 0; i < n; i++)
8683 fprintf(out,
"%.10g %.10g\n", x[i], y[i]);
8692 const char *quantity,
8696 const gsl_matrix *s) {
8699 const size_t n = s->size1;
8704 gsl_vector *x_aux = gsl_vector_alloc(n);
8707 for (
size_t i = 0; i < n; i++)
8708 gsl_vector_set(x_aux, i, sqrt(gsl_matrix_get(s, i, i)));
8712 const char *dirname;
8714 const char *shared_file =
"-";
8716 x2atm(ctl, x_aux, atm_aux);
8717 if (strcmp(quantity,
"total") == 0)
8719 else if (strcmp(quantity,
"noise") == 0)
8721 else if (strcmp(quantity,
"formod") == 0)
8723 sprintf(filename,
"atm_err_%s.tab", quantity);
8724 const char *target =
8726 write_atm(dirname, target, ctl, atm_aux, profile);
8729 gsl_vector_free(x_aux);
8739 for (
int ig = 0; ig < ctl->
ng; ig++)
8740 for (
int id = 0;
id < ctl->
nd;
id++) {
8743 if (tbl->
np[
id][ig] <= 0) {
8744 WARN(
"Skip writing empty emissivity table: emitter=%s, nu=%.4f",
8754 else if (ctl->
tblfmt == 2)
8758 else if (ctl->
tblfmt == 3)
8767 for (
int id = 0;
id < ctl->
nd;
id++) {
8768 char filename[2 *
LEN];
8769 sprintf(filename,
"%s_%.4f.filt", ctl->
tblbase, ctl->
nu[
id]);
8784 char filename[2 *
LEN];
8785 sprintf(filename,
"%s_%.4f_%s.tab", ctl->
tblbase,
8790 if (!(out = fopen(filename,
"w"))) {
8791 ERRMSG(
"Cannot create emissivity table: %s", filename);
8793 LOG(1,
"Write emissivity table: %s", filename);
8797 "# $1 = pressure [hPa]\n"
8798 "# $2 = temperature [K]\n"
8799 "# $3 = column density [molecules/cm^2]\n"
8800 "# $4 = emissivity [-]\n");
8803 for (
int ip = 0; ip < tbl->
np[id][ig]; ip++)
8804 for (
int it = 0; it < tbl->
nt[id][ig][ip]; it++) {
8806 for (
int iu = 0; iu < tbl->
nu[id][ig][ip][it]; iu++)
8807 fprintf(out,
"%g %g %e %e\n",
8808 tbl->
p[
id][ig][ip], tbl->
t[
id][ig][ip][it],
8809 exp(tbl->
logu[
id][ig][ip][it][iu]),
8810 exp(tbl->
logeps[
id][ig][ip][it][iu]));
8826 char filename[2 *
LEN];
8827 sprintf(filename,
"%s_%.4f_%s.bin",
8832 if (!(out = fopen(filename,
"w"))) {
8833 ERRMSG(
"Cannot create emissivity table: %s", filename);
8835 LOG(1,
"Write emissivity table: %s", filename);
8840 uint8_t *work = NULL;
8841 ALLOC(work, uint8_t, need);
8842 tbl_pack(tbl,
id, ig, work, &used);
8844 ERRMSG(
"Internal error: packed size mismatch!");
8850 FWRITE(work, uint8_t, used, out);
8868 char filename[2 *
LEN];
8873 if (nc_open(filename, NC_WRITE, &ncid) != NC_NOERR) {
8874 if (nc_create(filename, NC_NETCDF4 | NC_CLOBBER, &ncid) != NC_NOERR)
8875 ERRMSG(
"Cannot open or create emissivity table: %s", filename);
8878 NC(nc_enddef(ncid));
8882 char varname[
LEN], dimname[
LEN];
8883 sprintf(varname,
"tbl_%.4f", ctl->
nu[
id]);
8884 sprintf(dimname,
"len_%.4f", ctl->
nu[
id]);
8887 LOG(1,
"Write emissivity table: %s in %s", varname, filename);
8892 uint8_t *work = NULL;
8893 ALLOC(work, uint8_t, need);
8896 tbl_pack(tbl,
id, ig, work, &used);
8898 ERRMSG(
"Internal error: packed size mismatch!");
8902 if (nc_inq_varid(ncid, varname, &tmp) == NC_NOERR)
8903 ERRMSG(
"Table already present!");
8908 NC(nc_def_dim(ncid, dimname, used, &dimid));
8909 int dimids[1] = { dimid };
8911 "Packed lookup table blob",
"1", 0, 0);
8912 NC(nc_enddef(ncid));
8915 NC(nc_put_var_uchar(ncid, varid, (
const unsigned char *) work));
8928 const gsl_vector *x,
8934 for (
int ip = 0; ip < atm->
np; ip++)
8939 for (
int ip = 0; ip < atm->
np; ip++)
8944 for (
int ig = 0; ig < ctl->
ng; ig++)
8945 for (
int ip = 0; ip < atm->
np; ip++)
8951 for (
int iw = 0; iw < ctl->
nw; iw++)
8952 for (
int ip = 0; ip < atm->
np; ip++)
8963 for (
int icl = 0; icl < ctl->
ncl; icl++)
8970 for (
int isf = 0; isf < ctl->
nsf; isf++)
8978 const gsl_vector *x,
8982 *value = gsl_vector_get(x, *n);
8990 const gsl_vector *y,
8996 for (
int ir = 0; ir < obs->
nr; ir++)
8997 for (
int id = 0;
id < ctl->
nd;
id++)
8998 if (isfinite(obs->
rad[
id][ir])) {
8999 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.