JURASSIC
jurassic.c
Go to the documentation of this file.
1/*
2 This file is part of JURASSIC.
3
4 JURASSIC is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 3 of the License, or
7 (at your option) any later version.
8
9 JURASSIC is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with JURASSIC. If not, see <http://www.gnu.org/licenses/>.
16
17 Copyright (C) 2003-2025 Forschungszentrum Juelich GmbH
18*/
19
25#include "jurassic.h"
26
27/*****************************************************************************/
28
29size_t atm2x(
30 const ctl_t *ctl,
31 const atm_t *atm,
32 gsl_vector *x,
33 int *iqa,
34 int *ipa) {
35
36 size_t n = 0;
37
38 /* Add pressure... */
39 for (int ip = 0; ip < atm->np; ip++)
40 if (atm->z[ip] >= ctl->retp_zmin && atm->z[ip] <= ctl->retp_zmax)
41 atm2x_help(atm->p[ip], IDXP, ip, x, iqa, ipa, &n);
42
43 /* Add temperature... */
44 for (int ip = 0; ip < atm->np; ip++)
45 if (atm->z[ip] >= ctl->rett_zmin && atm->z[ip] <= ctl->rett_zmax)
46 atm2x_help(atm->t[ip], IDXT, ip, x, iqa, ipa, &n);
47
48 /* Add volume mixing ratios... */
49 for (int ig = 0; ig < ctl->ng; ig++)
50 for (int ip = 0; ip < atm->np; ip++)
51 if (atm->z[ip] >= ctl->retq_zmin[ig]
52 && atm->z[ip] <= ctl->retq_zmax[ig])
53 atm2x_help(atm->q[ig][ip], IDXQ(ig), ip, x, iqa, ipa, &n);
54
55 /* Add extinction... */
56 for (int iw = 0; iw < ctl->nw; iw++)
57 for (int ip = 0; ip < atm->np; ip++)
58 if (atm->z[ip] >= ctl->retk_zmin[iw]
59 && atm->z[ip] <= ctl->retk_zmax[iw])
60 atm2x_help(atm->k[iw][ip], IDXK(iw), ip, x, iqa, ipa, &n);
61
62 /* Add cloud parameters... */
63 if (ctl->ret_clz)
64 atm2x_help(atm->clz, IDXCLZ, 0, x, iqa, ipa, &n);
65 if (ctl->ret_cldz)
66 atm2x_help(atm->cldz, IDXCLDZ, 0, x, iqa, ipa, &n);
67 if (ctl->ret_clk)
68 for (int icl = 0; icl < ctl->ncl; icl++)
69 atm2x_help(atm->clk[icl], IDXCLK(icl), 0, x, iqa, ipa, &n);
70
71 /* Add surface parameters... */
72 if (ctl->ret_sfz)
73 atm2x_help(atm->sfz, IDXSFZ, 0, x, iqa, ipa, &n);
74 if (ctl->ret_sfp)
75 atm2x_help(atm->sfp, IDXSFP, 0, x, iqa, ipa, &n);
76 if (ctl->ret_sft)
77 atm2x_help(atm->sft, IDXSFT, 0, x, iqa, ipa, &n);
78 if (ctl->ret_sfeps)
79 for (int isf = 0; isf < ctl->nsf; isf++)
80 atm2x_help(atm->sfeps[isf], IDXSFEPS(isf), 0, x, iqa, ipa, &n);
81
82 return n;
83}
84
85/*****************************************************************************/
86
88 const double value,
89 const int value_iqa,
90 const int value_ip,
91 gsl_vector *x,
92 int *iqa,
93 int *ipa,
94 size_t *n) {
95
96 /* Add element to state vector... */
97 if (x != NULL)
98 gsl_vector_set(x, *n, value);
99 if (iqa != NULL)
100 iqa[*n] = value_iqa;
101 if (ipa != NULL)
102 ipa[*n] = value_ip;
103 (*n)++;
104}
105
106/*****************************************************************************/
107
109 const double *x,
110 double *z,
111 double *lon,
112 double *lat) {
113
114 const double radius = NORM(x);
115
116 *lat = RAD2DEG(asin(x[2] / radius));
117 *lon = RAD2DEG(atan2(x[1], x[0]));
118 *z = radius - RE;
119}
120
121/*****************************************************************************/
122
124 const ctl_t *ctl,
125 atm_t *atm) {
126
127 static const double z[121] = {
128 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
129 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
130 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
131 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
132 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
133 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
134 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120
135 };
136
137 static const double pre[121] = {
138 1017, 901.083, 796.45, 702.227, 617.614, 541.644, 473.437, 412.288,
139 357.603, 308.96, 265.994, 228.348, 195.619, 167.351, 143.039, 122.198,
140 104.369, 89.141, 76.1528, 65.0804, 55.641, 47.591, 40.7233, 34.8637,
141 29.8633, 25.5956, 21.9534, 18.8445, 16.1909, 13.9258, 11.9913,
142 10.34, 8.92988, 7.72454, 6.6924, 5.80701, 5.04654, 4.39238, 3.82902,
143 3.34337, 2.92413, 2.56128, 2.2464, 1.97258, 1.73384, 1.52519, 1.34242,
144 1.18197, 1.04086, 0.916546, 0.806832, 0.709875, 0.624101, 0.548176,
145 0.480974, 0.421507, 0.368904, 0.322408, 0.281386, 0.245249, 0.213465,
146 0.185549, 0.161072, 0.139644, 0.120913, 0.104568, 0.0903249, 0.0779269,
147 0.0671493, 0.0577962, 0.0496902, 0.0426736, 0.0366093, 0.0313743,
148 0.0268598, 0.0229699, 0.0196206, 0.0167399, 0.0142646, 0.0121397,
149 0.0103181, 0.00875775, 0.00742226, 0.00628076, 0.00530519, 0.00447183,
150 0.00376124, 0.00315632, 0.00264248, 0.00220738, 0.00184003, 0.00153095,
151 0.00127204, 0.00105608, 0.000876652, 0.00072798, 0.00060492,
152 0.000503201, 0.000419226, 0.000349896, 0.000292659, 0.000245421,
153 0.000206394, 0.000174125, 0.000147441, 0.000125333, 0.000106985,
154 9.173e-05, 7.90172e-05, 6.84172e-05, 5.95574e-05, 5.21183e-05,
155 4.58348e-05, 4.05127e-05, 3.59987e-05, 3.21583e-05, 2.88718e-05,
156 2.60322e-05, 2.35687e-05, 2.14263e-05, 1.95489e-05
157 };
158
159 static const double tem[121] = {
160 285.14, 279.34, 273.91, 268.3, 263.24, 256.55, 250.2, 242.82, 236.17,
161 229.87, 225.04, 221.19, 218.85, 217.19, 216.2, 215.68, 215.42, 215.55,
162 215.92, 216.4, 216.93, 217.45, 218, 218.68, 219.39, 220.25, 221.3,
163 222.41, 223.88, 225.42, 227.2, 229.52, 231.89, 234.51, 236.85, 239.42,
164 241.94, 244.57, 247.36, 250.32, 253.34, 255.82, 258.27, 260.39,
165 262.03, 263.45, 264.2, 264.78, 264.67, 264.38, 263.24, 262.03, 260.02,
166 258.09, 255.63, 253.28, 250.43, 247.81, 245.26, 242.77, 240.38,
167 237.94, 235.79, 233.53, 231.5, 229.53, 227.6, 225.62, 223.77, 222.06,
168 220.33, 218.69, 217.18, 215.64, 214.13, 212.52, 210.86, 209.25,
169 207.49, 205.81, 204.11, 202.22, 200.32, 198.39, 195.92, 193.46,
170 190.94, 188.31, 185.82, 183.57, 181.43, 179.74, 178.64, 178.1, 178.25,
171 178.7, 179.41, 180.67, 182.31, 184.18, 186.6, 189.53, 192.66, 196.54,
172 201.13, 205.93, 211.73, 217.86, 225, 233.53, 242.57, 252.14, 261.48,
173 272.97, 285.26, 299.12, 312.2, 324.17, 338.34, 352.56, 365.28
174 };
175
176 static const double c2h2[121] = {
177 1.352e-09, 2.83e-10, 1.269e-10, 6.926e-11, 4.346e-11, 2.909e-11,
178 2.014e-11, 1.363e-11, 8.71e-12, 5.237e-12, 2.718e-12, 1.375e-12,
179 5.786e-13, 2.16e-13, 7.317e-14, 2.551e-14, 1.055e-14, 4.758e-15,
180 2.056e-15, 7.703e-16, 2.82e-16, 1.035e-16, 4.382e-17, 1.946e-17,
181 9.638e-18, 5.2e-18, 2.811e-18, 1.494e-18, 7.925e-19, 4.213e-19,
182 1.998e-19, 8.78e-20, 3.877e-20, 1.728e-20, 7.743e-21, 3.536e-21,
183 1.623e-21, 7.508e-22, 3.508e-22, 1.65e-22, 7.837e-23, 3.733e-23,
184 1.808e-23, 8.77e-24, 4.285e-24, 2.095e-24, 1.032e-24, 5.082e-25,
185 2.506e-25, 1.236e-25, 6.088e-26, 2.996e-26, 1.465e-26, 0, 0, 0,
186 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
187 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
188 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
189 };
190
191 static const double c2h6[121] = {
192 2.667e-09, 2.02e-09, 1.658e-09, 1.404e-09, 1.234e-09, 1.109e-09,
193 1.012e-09, 9.262e-10, 8.472e-10, 7.71e-10, 6.932e-10, 6.216e-10,
194 5.503e-10, 4.87e-10, 4.342e-10, 3.861e-10, 3.347e-10, 2.772e-10,
195 2.209e-10, 1.672e-10, 1.197e-10, 8.536e-11, 5.783e-11, 3.846e-11,
196 2.495e-11, 1.592e-11, 1.017e-11, 6.327e-12, 3.895e-12, 2.403e-12,
197 1.416e-12, 8.101e-13, 4.649e-13, 2.686e-13, 1.557e-13, 9.14e-14,
198 5.386e-14, 3.19e-14, 1.903e-14, 1.14e-14, 6.875e-15, 4.154e-15,
199 2.538e-15, 1.553e-15, 9.548e-16, 5.872e-16, 3.63e-16, 2.244e-16,
200 1.388e-16, 8.587e-17, 5.308e-17, 3.279e-17, 2.017e-17, 1.238e-17,
201 7.542e-18, 4.585e-18, 2.776e-18, 1.671e-18, 9.985e-19, 5.937e-19,
202 3.518e-19, 2.07e-19, 1.215e-19, 7.06e-20, 4.097e-20, 2.37e-20,
203 1.363e-20, 7.802e-21, 4.441e-21, 2.523e-21, 1.424e-21, 8.015e-22,
204 4.497e-22, 2.505e-22, 1.391e-22, 7.691e-23, 4.238e-23, 2.331e-23,
205 1.274e-23, 6.929e-24, 3.752e-24, 2.02e-24, 1.083e-24, 5.774e-25,
206 3.041e-25, 1.593e-25, 8.308e-26, 4.299e-26, 2.195e-26, 1.112e-26,
207 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
208 0, 0, 0, 0, 0, 0, 0, 0, 0
209 };
210
211 static const double ccl4[121] = {
212 1.075e-10, 1.075e-10, 1.075e-10, 1.075e-10, 1.075e-10, 1.075e-10,
213 1.075e-10, 1.075e-10, 1.075e-10, 1.06e-10, 1.024e-10, 9.69e-11,
214 8.93e-11, 8.078e-11, 7.213e-11, 6.307e-11, 5.383e-11, 4.49e-11,
215 3.609e-11, 2.705e-11, 1.935e-11, 1.385e-11, 8.35e-12, 5.485e-12,
216 3.853e-12, 2.22e-12, 5.875e-13, 3.445e-13, 1.015e-13, 6.075e-14,
217 4.383e-14, 2.692e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
218 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
219 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
220 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
221 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
222 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
223 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
224 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
225 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
226 1e-14, 1e-14, 1e-14
227 };
228
229 static const double ch3oh[121] = {
230 5.01099e-10, 5.01099e-10, 5.01099e-10, 5.01099e-10, 5.01099e-10,
231 5.01099e-10, 5.50999e-10, 5.7313e-10, 5.75638e-10, 5.4086e-10,
232 4.77601e-10, 4.12907e-10, 3.6274e-10, 3.26448e-10, 2.9706e-10,
233 2.27698e-10, 1.96999e-10, 1.66212e-10, 1.17941e-10, 1.19844e-10,
234 1.11211e-10, 1.02714e-10, 9.86138e-11, 9.45133e-11, 9.04127e-11,
235 8.05243e-11, 6.3678e-11, 4.68317e-11, 4.00618e-11, 3.95786e-11,
236 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
237 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
238 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
239 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
240 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
241 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
242 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
243 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
244 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
245 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
246 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
247 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
248 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
249 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
250 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
251 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
252 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
253 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
254 3.95786e-11
255 };
256
257 static const double ch4[121] = {
258 1.864e-06, 1.835e-06, 1.819e-06, 1.805e-06, 1.796e-06, 1.788e-06,
259 1.782e-06, 1.776e-06, 1.769e-06, 1.761e-06, 1.749e-06, 1.734e-06,
260 1.716e-06, 1.692e-06, 1.654e-06, 1.61e-06, 1.567e-06, 1.502e-06,
261 1.433e-06, 1.371e-06, 1.323e-06, 1.277e-06, 1.232e-06, 1.188e-06,
262 1.147e-06, 1.108e-06, 1.07e-06, 1.027e-06, 9.854e-07, 9.416e-07,
263 8.933e-07, 8.478e-07, 7.988e-07, 7.515e-07, 7.07e-07, 6.64e-07,
264 6.239e-07, 5.864e-07, 5.512e-07, 5.184e-07, 4.87e-07, 4.571e-07,
265 4.296e-07, 4.04e-07, 3.802e-07, 3.578e-07, 3.383e-07, 3.203e-07,
266 3.032e-07, 2.889e-07, 2.76e-07, 2.635e-07, 2.519e-07, 2.409e-07,
267 2.302e-07, 2.219e-07, 2.144e-07, 2.071e-07, 1.999e-07, 1.93e-07,
268 1.862e-07, 1.795e-07, 1.731e-07, 1.668e-07, 1.607e-07, 1.548e-07,
269 1.49e-07, 1.434e-07, 1.38e-07, 1.328e-07, 1.277e-07, 1.227e-07,
270 1.18e-07, 1.134e-07, 1.089e-07, 1.046e-07, 1.004e-07, 9.635e-08,
271 9.245e-08, 8.867e-08, 8.502e-08, 8.15e-08, 7.809e-08, 7.48e-08,
272 7.159e-08, 6.849e-08, 6.55e-08, 6.262e-08, 5.98e-08, 5.708e-08,
273 5.448e-08, 5.194e-08, 4.951e-08, 4.72e-08, 4.5e-08, 4.291e-08,
274 4.093e-08, 3.905e-08, 3.729e-08, 3.563e-08, 3.408e-08, 3.265e-08,
275 3.128e-08, 2.996e-08, 2.87e-08, 2.76e-08, 2.657e-08, 2.558e-08,
276 2.467e-08, 2.385e-08, 2.307e-08, 2.234e-08, 2.168e-08, 2.108e-08,
277 2.05e-08, 1.998e-08, 1.947e-08, 1.902e-08, 1.86e-08, 1.819e-08,
278 1.782e-08
279 };
280
281 static const double clo[121] = {
282 7.419e-15, 1.061e-14, 1.518e-14, 2.195e-14, 3.175e-14, 4.666e-14,
283 6.872e-14, 1.03e-13, 1.553e-13, 2.375e-13, 3.664e-13, 5.684e-13,
284 8.915e-13, 1.402e-12, 2.269e-12, 4.125e-12, 7.501e-12, 1.257e-11,
285 2.048e-11, 3.338e-11, 5.44e-11, 8.846e-11, 1.008e-10, 1.082e-10,
286 1.157e-10, 1.232e-10, 1.312e-10, 1.539e-10, 1.822e-10, 2.118e-10,
287 2.387e-10, 2.687e-10, 2.875e-10, 3.031e-10, 3.23e-10, 3.648e-10,
288 4.117e-10, 4.477e-10, 4.633e-10, 4.794e-10, 4.95e-10, 5.104e-10,
289 5.259e-10, 5.062e-10, 4.742e-10, 4.443e-10, 4.051e-10, 3.659e-10,
290 3.305e-10, 2.911e-10, 2.54e-10, 2.215e-10, 1.927e-10, 1.675e-10,
291 1.452e-10, 1.259e-10, 1.09e-10, 9.416e-11, 8.119e-11, 6.991e-11,
292 6.015e-11, 5.163e-11, 4.43e-11, 3.789e-11, 3.24e-11, 2.769e-11,
293 2.361e-11, 2.011e-11, 1.71e-11, 1.453e-11, 1.233e-11, 1.045e-11,
294 8.851e-12, 7.48e-12, 6.316e-12, 5.326e-12, 4.487e-12, 3.778e-12,
295 3.176e-12, 2.665e-12, 2.234e-12, 1.87e-12, 1.563e-12, 1.304e-12,
296 1.085e-12, 9.007e-13, 7.468e-13, 6.179e-13, 5.092e-13, 4.188e-13,
297 3.442e-13, 2.816e-13, 2.304e-13, 1.885e-13, 1.542e-13, 1.263e-13,
298 1.035e-13, 8.5e-14, 7.004e-14, 5.783e-14, 4.795e-14, 4.007e-14,
299 3.345e-14, 2.792e-14, 2.33e-14, 1.978e-14, 1.686e-14, 1.438e-14,
300 1.234e-14, 1.07e-14, 9.312e-15, 8.131e-15, 7.164e-15, 6.367e-15,
301 5.67e-15, 5.088e-15, 4.565e-15, 4.138e-15, 3.769e-15, 3.432e-15,
302 3.148e-15
303 };
304
305 static const double clono2[121] = {
306 1.011e-13, 1.515e-13, 2.272e-13, 3.446e-13, 5.231e-13, 8.085e-13,
307 1.253e-12, 1.979e-12, 3.149e-12, 5.092e-12, 8.312e-12, 1.366e-11,
308 2.272e-11, 3.791e-11, 6.209e-11, 9.101e-11, 1.334e-10, 1.951e-10,
309 2.853e-10, 3.94e-10, 4.771e-10, 5.771e-10, 6.675e-10, 7.665e-10,
310 8.504e-10, 8.924e-10, 9.363e-10, 8.923e-10, 8.411e-10, 7.646e-10,
311 6.525e-10, 5.576e-10, 4.398e-10, 3.403e-10, 2.612e-10, 1.915e-10,
312 1.407e-10, 1.028e-10, 7.455e-11, 5.42e-11, 3.708e-11, 2.438e-11,
313 1.618e-11, 1.075e-11, 7.17e-12, 4.784e-12, 3.205e-12, 2.147e-12,
314 1.44e-12, 9.654e-13, 6.469e-13, 4.332e-13, 2.891e-13, 1.926e-13,
315 1.274e-13, 8.422e-14, 5.547e-14, 3.636e-14, 2.368e-14, 1.536e-14,
316 9.937e-15, 6.39e-15, 4.101e-15, 2.61e-15, 1.659e-15, 1.052e-15,
317 6.638e-16, 4.172e-16, 2.61e-16, 1.63e-16, 1.013e-16, 6.275e-17,
318 3.879e-17, 2.383e-17, 1.461e-17, 8.918e-18, 5.43e-18, 3.301e-18,
319 1.997e-18, 1.203e-18, 7.216e-19, 4.311e-19, 2.564e-19, 1.519e-19,
320 8.911e-20, 5.203e-20, 3.026e-20, 1.748e-20, 9.99e-21, 5.673e-21,
321 3.215e-21, 1.799e-21, 1.006e-21, 5.628e-22, 3.146e-22, 1.766e-22,
322 9.94e-23, 5.614e-23, 3.206e-23, 1.841e-23, 1.071e-23, 6.366e-24,
323 3.776e-24, 2.238e-24, 1.326e-24, 8.253e-25, 5.201e-25, 3.279e-25,
324 2.108e-25, 1.395e-25, 9.326e-26, 6.299e-26, 4.365e-26, 3.104e-26,
325 2.219e-26, 1.621e-26, 1.185e-26, 8.92e-27, 6.804e-27, 5.191e-27,
326 4.041e-27
327 };
328
329 static const double co[121] = {
330 1.907e-07, 1.553e-07, 1.362e-07, 1.216e-07, 1.114e-07, 1.036e-07,
331 9.737e-08, 9.152e-08, 8.559e-08, 7.966e-08, 7.277e-08, 6.615e-08,
332 5.884e-08, 5.22e-08, 4.699e-08, 4.284e-08, 3.776e-08, 3.274e-08,
333 2.845e-08, 2.479e-08, 2.246e-08, 2.054e-08, 1.991e-08, 1.951e-08,
334 1.94e-08, 2.009e-08, 2.1e-08, 2.201e-08, 2.322e-08, 2.45e-08,
335 2.602e-08, 2.73e-08, 2.867e-08, 2.998e-08, 3.135e-08, 3.255e-08,
336 3.352e-08, 3.426e-08, 3.484e-08, 3.53e-08, 3.593e-08, 3.671e-08,
337 3.759e-08, 3.945e-08, 4.192e-08, 4.49e-08, 5.03e-08, 5.703e-08,
338 6.538e-08, 7.878e-08, 9.644e-08, 1.196e-07, 1.498e-07, 1.904e-07,
339 2.422e-07, 3.055e-07, 3.804e-07, 4.747e-07, 5.899e-07, 7.272e-07,
340 8.91e-07, 1.071e-06, 1.296e-06, 1.546e-06, 1.823e-06, 2.135e-06,
341 2.44e-06, 2.714e-06, 2.967e-06, 3.189e-06, 3.391e-06, 3.58e-06,
342 3.773e-06, 4.022e-06, 4.346e-06, 4.749e-06, 5.199e-06, 5.668e-06,
343 6.157e-06, 6.688e-06, 7.254e-06, 7.867e-06, 8.539e-06, 9.26e-06,
344 1.009e-05, 1.119e-05, 1.228e-05, 1.365e-05, 1.506e-05, 1.641e-05,
345 1.784e-05, 1.952e-05, 2.132e-05, 2.323e-05, 2.531e-05, 2.754e-05,
346 3.047e-05, 3.459e-05, 3.922e-05, 4.439e-05, 4.825e-05, 5.077e-05,
347 5.34e-05, 5.618e-05, 5.909e-05, 6.207e-05, 6.519e-05, 6.845e-05,
348 6.819e-05, 6.726e-05, 6.622e-05, 6.512e-05, 6.671e-05, 6.862e-05,
349 7.048e-05, 7.264e-05, 7.3e-05, 7.3e-05, 7.3e-05, 7.3e-05, 7.3e-05
350 };
351
352 static const double cof2[121] = {
353 7.5e-14, 1.055e-13, 1.485e-13, 2.111e-13, 3.001e-13, 4.333e-13,
354 6.269e-13, 9.221e-13, 1.364e-12, 2.046e-12, 3.093e-12, 4.703e-12,
355 7.225e-12, 1.113e-11, 1.66e-11, 2.088e-11, 2.626e-11, 3.433e-11,
356 4.549e-11, 5.886e-11, 7.21e-11, 8.824e-11, 1.015e-10, 1.155e-10,
357 1.288e-10, 1.388e-10, 1.497e-10, 1.554e-10, 1.606e-10, 1.639e-10,
358 1.64e-10, 1.64e-10, 1.596e-10, 1.542e-10, 1.482e-10, 1.382e-10,
359 1.289e-10, 1.198e-10, 1.109e-10, 1.026e-10, 9.484e-11, 8.75e-11,
360 8.086e-11, 7.49e-11, 6.948e-11, 6.446e-11, 5.961e-11, 5.505e-11,
361 5.085e-11, 4.586e-11, 4.1e-11, 3.665e-11, 3.235e-11, 2.842e-11,
362 2.491e-11, 2.11e-11, 1.769e-11, 1.479e-11, 1.197e-11, 9.631e-12,
363 7.74e-12, 6.201e-12, 4.963e-12, 3.956e-12, 3.151e-12, 2.507e-12,
364 1.99e-12, 1.576e-12, 1.245e-12, 9.83e-13, 7.742e-13, 6.088e-13,
365 4.782e-13, 3.745e-13, 2.929e-13, 2.286e-13, 1.782e-13, 1.388e-13,
366 1.079e-13, 8.362e-14, 6.471e-14, 4.996e-14, 3.85e-14, 2.96e-14,
367 2.265e-14, 1.729e-14, 1.317e-14, 9.998e-15, 7.549e-15, 5.683e-15,
368 4.273e-15, 3.193e-15, 2.385e-15, 1.782e-15, 1.331e-15, 9.957e-16,
369 7.461e-16, 5.601e-16, 4.228e-16, 3.201e-16, 2.438e-16, 1.878e-16,
370 1.445e-16, 1.111e-16, 8.544e-17, 6.734e-17, 5.341e-17, 4.237e-17,
371 3.394e-17, 2.759e-17, 2.254e-17, 1.851e-17, 1.54e-17, 1.297e-17,
372 1.096e-17, 9.365e-18, 8e-18, 6.938e-18, 6.056e-18, 5.287e-18,
373 4.662e-18
374 };
375
376 static const double f11[121] = {
377 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10,
378 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10, 2.635e-10, 2.536e-10,
379 2.44e-10, 2.348e-10, 2.258e-10, 2.153e-10, 2.046e-10, 1.929e-10,
380 1.782e-10, 1.648e-10, 1.463e-10, 1.291e-10, 1.1e-10, 8.874e-11,
381 7.165e-11, 5.201e-11, 3.744e-11, 2.577e-11, 1.64e-11, 1.048e-11,
382 5.993e-12, 3.345e-12, 1.839e-12, 9.264e-13, 4.688e-13, 2.329e-13,
383 1.129e-13, 5.505e-14, 2.825e-14, 1.492e-14, 7.997e-15, 5.384e-15,
384 3.988e-15, 2.955e-15, 2.196e-15, 1.632e-15, 1.214e-15, 9.025e-16,
385 6.708e-16, 4.984e-16, 3.693e-16, 2.733e-16, 2.013e-16, 1.481e-16,
386 1.087e-16, 7.945e-17, 5.782e-17, 4.195e-17, 3.038e-17, 2.19e-17,
387 1.577e-17, 1.128e-17, 8.063e-18, 5.753e-18, 4.09e-18, 2.899e-18,
388 2.048e-18, 1.444e-18, 1.015e-18, 7.12e-19, 4.985e-19, 3.474e-19,
389 2.417e-19, 1.677e-19, 1.161e-19, 8.029e-20, 5.533e-20, 3.799e-20,
390 2.602e-20, 1.776e-20, 1.209e-20, 8.202e-21, 5.522e-21, 3.707e-21,
391 2.48e-21, 1.652e-21, 1.091e-21, 7.174e-22, 4.709e-22, 3.063e-22,
392 1.991e-22, 1.294e-22, 8.412e-23, 5.483e-23, 3.581e-23, 2.345e-23,
393 1.548e-23, 1.027e-23, 6.869e-24, 4.673e-24, 3.173e-24, 2.153e-24,
394 1.461e-24, 1.028e-24, 7.302e-25, 5.188e-25, 3.739e-25, 2.753e-25,
395 2.043e-25, 1.528e-25, 1.164e-25, 9.041e-26, 7.051e-26, 5.587e-26,
396 4.428e-26, 3.588e-26, 2.936e-26, 2.402e-26, 1.995e-26
397 };
398
399 static const double f113[121] = {
400 1.9e-11, 1.9e-11, 1.899e-11, 1.899e-11, 1.898e-11, 1.898e-11,
401 1.897e-11, 1.896e-11, 1.895e-11, 1.894e-11, 1.893e-11, 1.89e-11,
402 1.887e-11, 1.871e-11, 1.854e-11, 1.803e-11, 1.751e-11, 1.664e-11,
403 1.576e-11, 1.466e-11, 1.356e-11, 1.236e-11, 1.116e-11, 9.931e-12,
404 8.702e-12, 7.515e-12, 6.4238e-12, 5.3326e-12, 4.3652e-12, 3.5216e-12,
405 2.678e-12, 2.1532e-12, 1.6284e-12, 1.2202e-12, 9.286e-13, 6.37e-13,
406 4.95e-13, 3.53e-13, 2.5004e-13, 1.8612e-13, 1.222e-13, 9.704e-14,
407 7.188e-14, 5.3338e-14, 4.1414e-14, 2.949e-14, 2.3722e-14, 1.7954e-14,
408 1.37794e-14, 1.11982e-14, 8.617e-15, 7.6036e-15, 6.5902e-15,
409 5.5768e-15, 4.5634e-15, 3.55e-15, 3.1008e-15, 2.6516e-15, 2.2024e-15,
410 1.7532e-15, 1.304e-15, 1.1354e-15, 9.668e-16, 7.982e-16, 6.296e-16,
411 4.61e-16, 3.9734e-16, 3.3368e-16, 2.7002e-16, 2.0636e-16, 1.427e-16,
412 1.22804e-16, 1.02908e-16, 8.3012e-17, 6.3116e-17, 4.322e-17,
413 3.6838e-17, 3.0456e-17, 2.4074e-17, 1.7692e-17, 1.131e-17,
414 9.6202e-18, 7.9304e-18, 6.2406e-18, 4.5508e-18, 2.861e-18,
415 2.40476e-18, 1.94852e-18, 1.49228e-18, 1.03604e-18, 5.798e-19,
416 4.8502e-19, 3.9024e-19, 2.9546e-19, 2.0068e-19, 1.059e-19,
417 8.7084e-20, 6.8268e-20, 4.9452e-20, 3.0636e-20, 1.182e-20,
418 9.64344e-21, 7.46688e-21, 5.29032e-21, 3.11376e-21, 9.372e-22,
419 7.5685e-22, 5.765e-22, 3.9615e-22, 2.158e-22, 3.545e-23,
420 2.86046e-23, 2.17592e-23, 1.49138e-23, 8.0684e-24, 1.223e-24,
421 9.92358e-25, 7.61716e-25, 5.31074e-25, 3.00432e-25, 6.979e-26
422 };
423
424 static const double f114[121] = {
425 1.2e-11, 1.2e-11, 1.2e-11, 1.2e-11, 1.199e-11, 1.199e-11,
426 1.199e-11, 1.199e-11, 1.198e-11, 1.198e-11, 1.198e-11, 1.197e-11,
427 1.196e-11, 1.191e-11, 1.185e-11, 1.167e-11, 1.149e-11, 1.12e-11,
428 1.09e-11, 1.053e-11, 1.015e-11, 9.731e-12, 9.311e-12, 8.865e-12,
429 8.419e-12, 7.949e-12, 7.4774e-12, 7.0058e-12, 6.54e-12, 6.08e-12,
430 5.62e-12, 5.1908e-12, 4.7616e-12, 4.3622e-12, 3.9926e-12, 3.623e-12,
431 3.3274e-12, 3.0318e-12, 2.7702e-12, 2.5426e-12, 2.315e-12, 2.1514e-12,
432 1.9878e-12, 1.8448e-12, 1.7224e-12, 1.6e-12, 1.51e-12, 1.42e-12,
433 1.3462e-12, 1.2886e-12, 1.231e-12, 1.1922e-12, 1.1534e-12, 1.1146e-12,
434 1.0758e-12, 1.037e-12, 1.0025e-12, 9.68e-13, 9.335e-13, 8.99e-13,
435 8.645e-13, 8.344e-13, 8.043e-13, 7.742e-13, 7.441e-13, 7.14e-13,
436 6.8718e-13, 6.6036e-13, 6.3354e-13, 6.0672e-13, 5.799e-13, 5.5612e-13,
437 5.3234e-13, 5.0856e-13, 4.8478e-13, 4.61e-13, 4.394e-13, 4.178e-13,
438 3.962e-13, 3.746e-13, 3.53e-13, 3.3288e-13, 3.1276e-13, 2.9264e-13,
439 2.7252e-13, 2.524e-13, 2.3368e-13, 2.1496e-13, 1.9624e-13, 1.7752e-13,
440 1.588e-13, 1.4221e-13, 1.2562e-13, 1.0903e-13, 9.244e-14, 7.585e-14,
441 6.4942e-14, 5.4034e-14, 4.3126e-14, 3.2218e-14, 2.131e-14, 1.76694e-14,
442 1.40288e-14, 1.03882e-14, 6.7476e-15, 3.107e-15, 2.52738e-15,
443 1.94776e-15, 1.36814e-15, 7.8852e-16, 2.089e-16, 1.69288e-16,
444 1.29676e-16, 9.0064e-17, 5.0452e-17, 1.084e-17, 8.85136e-18,
445 6.86272e-18, 4.87408e-18, 2.88544e-18, 8.968e-19
446 };
447
448 static const double f12[121] = {
449 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10,
450 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10, 5.429e-10, 5.291e-10,
451 5.155e-10, 5.022e-10, 4.893e-10, 4.772e-10, 4.655e-10, 4.497e-10,
452 4.249e-10, 4.015e-10, 3.632e-10, 3.261e-10, 2.858e-10, 2.408e-10,
453 2.03e-10, 1.685e-10, 1.4e-10, 1.163e-10, 9.65e-11, 8.02e-11, 6.705e-11,
454 5.624e-11, 4.764e-11, 4.249e-11, 3.792e-11, 3.315e-11, 2.819e-11,
455 2.4e-11, 1.999e-11, 1.64e-11, 1.352e-11, 1.14e-11, 9.714e-12,
456 8.28e-12, 7.176e-12, 6.251e-12, 5.446e-12, 4.72e-12, 4.081e-12,
457 3.528e-12, 3.08e-12, 2.699e-12, 2.359e-12, 2.111e-12, 1.901e-12,
458 1.709e-12, 1.534e-12, 1.376e-12, 1.233e-12, 1.103e-12, 9.869e-13,
459 8.808e-13, 7.859e-13, 7.008e-13, 6.241e-13, 5.553e-13, 4.935e-13,
460 4.383e-13, 3.889e-13, 3.447e-13, 3.054e-13, 2.702e-13, 2.389e-13,
461 2.11e-13, 1.862e-13, 1.643e-13, 1.448e-13, 1.274e-13, 1.121e-13,
462 9.844e-14, 8.638e-14, 7.572e-14, 6.62e-14, 5.782e-14, 5.045e-14,
463 4.394e-14, 3.817e-14, 3.311e-14, 2.87e-14, 2.48e-14, 2.142e-14,
464 1.851e-14, 1.599e-14, 1.383e-14, 1.196e-14, 1.036e-14, 9e-15,
465 7.828e-15, 6.829e-15, 5.992e-15, 5.254e-15, 4.606e-15, 4.037e-15,
466 3.583e-15, 3.19e-15, 2.841e-15, 2.542e-15, 2.291e-15, 2.07e-15,
467 1.875e-15, 1.71e-15, 1.57e-15, 1.442e-15, 1.333e-15, 1.232e-15,
468 1.147e-15, 1.071e-15, 1.001e-15, 9.396e-16
469 };
470
471 static const double f14[121] = {
472 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 9e-11,
473 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 8.91e-11, 8.73e-11, 8.46e-11,
474 8.19e-11, 7.92e-11, 7.74e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
475 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
476 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
477 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
478 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
479 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
480 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
481 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
482 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
483 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
484 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
485 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
486 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
487 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
488 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11
489 };
490
491 static const double f22[121] = {
492 1.4e-10, 1.4e-10, 1.4e-10, 1.4e-10, 1.4e-10, 1.4e-10, 1.4e-10,
493 1.4e-10, 1.4e-10, 1.4e-10, 1.372e-10, 1.317e-10, 1.235e-10, 1.153e-10,
494 1.075e-10, 1.002e-10, 9.332e-11, 8.738e-11, 8.194e-11, 7.7e-11,
495 7.165e-11, 6.753e-11, 6.341e-11, 5.971e-11, 5.6e-11, 5.229e-11,
496 4.859e-11, 4.488e-11, 4.118e-11, 3.83e-11, 3.568e-11, 3.308e-11,
497 3.047e-11, 2.82e-11, 2.594e-11, 2.409e-11, 2.237e-11, 2.065e-11,
498 1.894e-11, 1.771e-11, 1.647e-11, 1.532e-11, 1.416e-11, 1.332e-11,
499 1.246e-11, 1.161e-11, 1.087e-11, 1.017e-11, 9.471e-12, 8.853e-12,
500 8.235e-12, 7.741e-12, 7.247e-12, 6.836e-12, 6.506e-12, 6.176e-12,
501 5.913e-12, 5.65e-12, 5.419e-12, 5.221e-12, 5.024e-12, 4.859e-12,
502 4.694e-12, 4.546e-12, 4.414e-12, 4.282e-12, 4.15e-12, 4.019e-12,
503 3.903e-12, 3.805e-12, 3.706e-12, 3.607e-12, 3.508e-12, 3.41e-12,
504 3.31e-12, 3.212e-12, 3.129e-12, 3.047e-12, 2.964e-12, 2.882e-12,
505 2.8e-12, 2.734e-12, 2.668e-12, 2.602e-12, 2.537e-12, 2.471e-12,
506 2.421e-12, 2.372e-12, 2.322e-12, 2.273e-12, 2.224e-12, 2.182e-12,
507 2.141e-12, 2.1e-12, 2.059e-12, 2.018e-12, 1.977e-12, 1.935e-12,
508 1.894e-12, 1.853e-12, 1.812e-12, 1.77e-12, 1.73e-12, 1.688e-12,
509 1.647e-12, 1.606e-12, 1.565e-12, 1.524e-12, 1.483e-12, 1.441e-12,
510 1.4e-12, 1.359e-12, 1.317e-12, 1.276e-12, 1.235e-12, 1.194e-12,
511 1.153e-12, 1.112e-12, 1.071e-12, 1.029e-12, 9.883e-13
512 };
513
514 static const double h2co[121] = {
515 8.71857e-11, 8.71857e-11, 8.71857e-11, 8.71857e-11, 8.71857e-11,
516 8.71857e-11, 7.72315e-11, 6.85464e-11, 6.0758e-11, 5.32087e-11,
517 4.5719e-11, 3.79458e-11, 3.07607e-11, 2.46025e-11, 1.94038e-11,
518 1.40882e-11, 1.0623e-11, 8.35457e-12, 6.87427e-12, 7.09071e-12,
519 8.96183e-12, 1.09012e-11, 1.50545e-11, 1.92077e-11, 2.3361e-11,
520 2.7054e-11, 3.01936e-11, 3.33333e-11, 3.69281e-11, 4.08069e-11,
521 4.57318e-11, 5.1348e-11, 5.69642e-11, 6.33173e-11, 6.98984e-11,
522 7.63144e-11, 8.22774e-11, 8.82405e-11, 9.3746e-11, 9.92074e-11,
523 1.04669e-10, 1.10055e-10, 1.15293e-10, 1.20531e-10, 1.26293e-10,
524 1.32585e-10, 1.35966e-10, 1.36242e-10, 1.36519e-10, 1.61155e-10,
525 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
526 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
527 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
528 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
529 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
530 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
531 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
532 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
533 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
534 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
535 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
536 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
537 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
538 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
539 1.99157e-10
540 };
541
542 static const double h2o[121] = {
543 0.01166, 0.008269, 0.005742, 0.003845, 0.00277, 0.001897, 0.001272,
544 0.000827, 0.000539, 0.0003469, 0.0001579, 3.134e-05, 1.341e-05,
545 6.764e-06, 4.498e-06, 3.703e-06, 3.724e-06, 3.899e-06, 4.002e-06,
546 4.122e-06, 4.277e-06, 4.438e-06, 4.558e-06, 4.673e-06, 4.763e-06,
547 4.809e-06, 4.856e-06, 4.936e-06, 5.021e-06, 5.114e-06, 5.222e-06,
548 5.331e-06, 5.414e-06, 5.488e-06, 5.563e-06, 5.633e-06, 5.704e-06,
549 5.767e-06, 5.819e-06, 5.872e-06, 5.914e-06, 5.949e-06, 5.984e-06,
550 6.015e-06, 6.044e-06, 6.073e-06, 6.104e-06, 6.136e-06, 6.167e-06,
551 6.189e-06, 6.208e-06, 6.226e-06, 6.212e-06, 6.185e-06, 6.158e-06,
552 6.114e-06, 6.066e-06, 6.018e-06, 5.877e-06, 5.728e-06, 5.582e-06,
553 5.437e-06, 5.296e-06, 5.156e-06, 5.02e-06, 4.886e-06, 4.754e-06,
554 4.625e-06, 4.498e-06, 4.374e-06, 4.242e-06, 4.096e-06, 3.955e-06,
555 3.817e-06, 3.683e-06, 3.491e-06, 3.204e-06, 2.94e-06, 2.696e-06,
556 2.47e-06, 2.252e-06, 2.019e-06, 1.808e-06, 1.618e-06, 1.445e-06,
557 1.285e-06, 1.105e-06, 9.489e-07, 8.121e-07, 6.938e-07, 5.924e-07,
558 5.04e-07, 4.288e-07, 3.648e-07, 3.103e-07, 2.642e-07, 2.252e-07,
559 1.921e-07, 1.643e-07, 1.408e-07, 1.211e-07, 1.048e-07, 9.063e-08,
560 7.835e-08, 6.774e-08, 5.936e-08, 5.221e-08, 4.592e-08, 4.061e-08,
561 3.62e-08, 3.236e-08, 2.902e-08, 2.62e-08, 2.383e-08, 2.171e-08,
562 1.989e-08, 1.823e-08, 1.684e-08, 1.562e-08, 1.449e-08, 1.351e-08
563 };
564
565 static const double h2o2[121] = {
566 1.779e-10, 7.938e-10, 8.953e-10, 8.032e-10, 6.564e-10, 5.159e-10,
567 4.003e-10, 3.026e-10, 2.222e-10, 1.58e-10, 1.044e-10, 6.605e-11,
568 3.413e-11, 1.453e-11, 1.062e-11, 1.009e-11, 9.597e-12, 1.175e-11,
569 1.572e-11, 2.091e-11, 2.746e-11, 3.603e-11, 4.791e-11, 6.387e-11,
570 8.239e-11, 1.007e-10, 1.23e-10, 1.363e-10, 1.489e-10, 1.585e-10,
571 1.608e-10, 1.632e-10, 1.576e-10, 1.502e-10, 1.423e-10, 1.302e-10,
572 1.192e-10, 1.085e-10, 9.795e-11, 8.854e-11, 8.057e-11, 7.36e-11,
573 6.736e-11, 6.362e-11, 6.087e-11, 5.825e-11, 5.623e-11, 5.443e-11,
574 5.27e-11, 5.098e-11, 4.931e-11, 4.769e-11, 4.611e-11, 4.458e-11,
575 4.308e-11, 4.102e-11, 3.887e-11, 3.682e-11, 3.521e-11, 3.369e-11,
576 3.224e-11, 3.082e-11, 2.946e-11, 2.814e-11, 2.687e-11, 2.566e-11,
577 2.449e-11, 2.336e-11, 2.227e-11, 2.123e-11, 2.023e-11, 1.927e-11,
578 1.835e-11, 1.746e-11, 1.661e-11, 1.58e-11, 1.502e-11, 1.428e-11,
579 1.357e-11, 1.289e-11, 1.224e-11, 1.161e-11, 1.102e-11, 1.045e-11,
580 9.895e-12, 9.369e-12, 8.866e-12, 8.386e-12, 7.922e-12, 7.479e-12,
581 7.06e-12, 6.656e-12, 6.274e-12, 5.914e-12, 5.575e-12, 5.257e-12,
582 4.959e-12, 4.679e-12, 4.42e-12, 4.178e-12, 3.954e-12, 3.75e-12,
583 3.557e-12, 3.372e-12, 3.198e-12, 3.047e-12, 2.908e-12, 2.775e-12,
584 2.653e-12, 2.544e-12, 2.442e-12, 2.346e-12, 2.26e-12, 2.183e-12,
585 2.11e-12, 2.044e-12, 1.98e-12, 1.924e-12, 1.871e-12, 1.821e-12,
586 1.775e-12
587 };
588
589 static const double hcl[121] = {
590 3.70385e-11, 3.70385e-11, 3.70385e-11, 3.70385e-11, 3.70385e-11,
591 3.70385e-11, 2.21247e-11, 1.88117e-11, 2.36957e-11, 3.72192e-11,
592 5.79399e-11, 8.04158e-11, 1.01779e-10, 1.2301e-10, 1.53924e-10,
593 1.93737e-10, 2.5561e-10, 3.84228e-10, 6.18248e-10, 6.31222e-10,
594 7.84907e-10, 9.36932e-10, 1.03508e-09, 1.13323e-09, 1.23138e-09,
595 1.31985e-09, 1.39669e-09, 1.47352e-09, 1.56375e-09, 1.66234e-09,
596 1.78086e-09, 1.91256e-09, 2.04425e-09, 2.16629e-09, 2.28535e-09,
597 2.39439e-09, 2.47597e-09, 2.55755e-09, 2.60873e-09, 2.65696e-09,
598 2.70519e-09, 2.75658e-09, 2.81422e-09, 2.87187e-09, 2.94013e-09,
599 3.01911e-09, 3.09497e-09, 3.16749e-09, 3.24001e-09, 3.30525e-09,
600 3.3665e-09, 3.42424e-09, 3.4619e-09, 3.49956e-09, 3.52273e-09,
601 3.54214e-09, 3.56154e-09, 3.57918e-09, 3.59049e-09, 3.6018e-09,
602 3.6132e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
603 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
604 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
605 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
606 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
607 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
608 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
609 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
610 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
611 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
612 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
613 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
614 3.62476e-09
615 };
616
617 static const double hcn[121] = {
618 5.5e-10, 5.5e-10, 5.5e-10, 5.5e-10, 5.5e-10, 5.5e-10, 5.5e-10,
619 5.5e-10, 5.5e-10, 5.5e-10, 5.5e-10, 5.498e-10, 5.495e-10, 5.493e-10,
620 5.49e-10, 5.488e-10, 4.717e-10, 3.946e-10, 3.174e-10, 2.4e-10,
621 1.626e-10, 1.619e-10, 1.612e-10, 1.602e-10, 1.593e-10, 1.582e-10,
622 1.572e-10, 1.56e-10, 1.549e-10, 1.539e-10, 1.53e-10, 1.519e-10,
623 1.506e-10, 1.487e-10, 1.467e-10, 1.449e-10, 1.43e-10, 1.413e-10,
624 1.397e-10, 1.382e-10, 1.368e-10, 1.354e-10, 1.337e-10, 1.315e-10,
625 1.292e-10, 1.267e-10, 1.241e-10, 1.215e-10, 1.19e-10, 1.165e-10,
626 1.141e-10, 1.118e-10, 1.096e-10, 1.072e-10, 1.047e-10, 1.021e-10,
627 9.968e-11, 9.739e-11, 9.539e-11, 9.339e-11, 9.135e-11, 8.898e-11,
628 8.664e-11, 8.439e-11, 8.249e-11, 8.075e-11, 7.904e-11, 7.735e-11,
629 7.565e-11, 7.399e-11, 7.245e-11, 7.109e-11, 6.982e-11, 6.863e-11,
630 6.755e-11, 6.657e-11, 6.587e-11, 6.527e-11, 6.476e-11, 6.428e-11,
631 6.382e-11, 6.343e-11, 6.307e-11, 6.272e-11, 6.238e-11, 6.205e-11,
632 6.17e-11, 6.137e-11, 6.102e-11, 6.072e-11, 6.046e-11, 6.03e-11,
633 6.018e-11, 6.01e-11, 6.001e-11, 5.992e-11, 5.984e-11, 5.975e-11,
634 5.967e-11, 5.958e-11, 5.95e-11, 5.941e-11, 5.933e-11, 5.925e-11,
635 5.916e-11, 5.908e-11, 5.899e-11, 5.891e-11, 5.883e-11, 5.874e-11,
636 5.866e-11, 5.858e-11, 5.85e-11, 5.841e-11, 5.833e-11, 5.825e-11,
637 5.817e-11, 5.808e-11, 5.8e-11, 5.792e-11, 5.784e-11
638 };
639
640 static const double hf[121] = {
641 2.64279e-11, 2.64279e-11, 2.64279e-11, 2.64279e-11, 2.64279e-11,
642 2.64279e-11, 2.64279e-11, 2.64279e-11, 2.64279e-11, 2.64279e-11,
643 2.64279e-11, 2.64279e-11, 2.64279e-11, 3.86691e-11, 5.22002e-11,
644 6.92471e-11, 9.13979e-11, 1.37918e-10, 2.24918e-10, 2.29824e-10,
645 2.94241e-10, 3.58363e-10, 4.12881e-10, 4.67399e-10, 5.21917e-10,
646 5.74229e-10, 6.23889e-10, 6.73549e-10, 7.24119e-10, 7.75256e-10,
647 8.319e-10, 8.92185e-10, 9.52469e-10, 1.01325e-09, 1.07419e-09,
648 1.13565e-09, 1.19856e-09, 1.26146e-09, 1.31439e-09, 1.36635e-09,
649 1.41831e-09, 1.46549e-09, 1.50321e-09, 1.54093e-09, 1.57986e-09,
650 1.62e-09, 1.66286e-09, 1.70863e-09, 1.75439e-09, 1.79827e-09,
651 1.84111e-09, 1.88125e-09, 1.90603e-09, 1.93081e-09, 1.9413e-09,
652 1.94807e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
653 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
654 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
655 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
656 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
657 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
658 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
659 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
660 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
661 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
662 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
663 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
664 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
665 1.95485e-09
666 };
667
668 static const double hno3[121] = {
669 1.809e-10, 7.234e-10, 5.899e-10, 4.342e-10, 3.277e-10, 2.661e-10,
670 2.35e-10, 2.267e-10, 2.389e-10, 2.651e-10, 3.255e-10, 4.099e-10,
671 5.42e-10, 6.978e-10, 8.807e-10, 1.112e-09, 1.405e-09, 2.04e-09,
672 3.111e-09, 4.5e-09, 5.762e-09, 7.37e-09, 7.852e-09, 8.109e-09,
673 8.067e-09, 7.554e-09, 7.076e-09, 6.268e-09, 5.524e-09, 4.749e-09,
674 3.909e-09, 3.223e-09, 2.517e-09, 1.942e-09, 1.493e-09, 1.122e-09,
675 8.449e-10, 6.361e-10, 4.787e-10, 3.611e-10, 2.804e-10, 2.215e-10,
676 1.758e-10, 1.441e-10, 1.197e-10, 9.953e-11, 8.505e-11, 7.334e-11,
677 6.325e-11, 5.625e-11, 5.058e-11, 4.548e-11, 4.122e-11, 3.748e-11,
678 3.402e-11, 3.088e-11, 2.8e-11, 2.536e-11, 2.293e-11, 2.072e-11,
679 1.871e-11, 1.687e-11, 1.52e-11, 1.368e-11, 1.23e-11, 1.105e-11,
680 9.922e-12, 8.898e-12, 7.972e-12, 7.139e-12, 6.385e-12, 5.708e-12,
681 5.099e-12, 4.549e-12, 4.056e-12, 3.613e-12, 3.216e-12, 2.862e-12,
682 2.544e-12, 2.259e-12, 2.004e-12, 1.776e-12, 1.572e-12, 1.391e-12,
683 1.227e-12, 1.082e-12, 9.528e-13, 8.379e-13, 7.349e-13, 6.436e-13,
684 5.634e-13, 4.917e-13, 4.291e-13, 3.745e-13, 3.267e-13, 2.854e-13,
685 2.494e-13, 2.181e-13, 1.913e-13, 1.68e-13, 1.479e-13, 1.31e-13,
686 1.159e-13, 1.025e-13, 9.067e-14, 8.113e-14, 7.281e-14, 6.535e-14,
687 5.892e-14, 5.348e-14, 4.867e-14, 4.439e-14, 4.073e-14, 3.76e-14,
688 3.476e-14, 3.229e-14, 3e-14, 2.807e-14, 2.635e-14, 2.473e-14,
689 2.332e-14
690 };
691
692 static const double hno4[121] = {
693 6.118e-12, 3.594e-12, 2.807e-12, 3.04e-12, 4.458e-12, 7.986e-12,
694 1.509e-11, 2.661e-11, 3.738e-11, 4.652e-11, 4.429e-11, 3.992e-11,
695 3.347e-11, 3.005e-11, 3.173e-11, 4.055e-11, 5.812e-11, 8.489e-11,
696 1.19e-10, 1.482e-10, 1.766e-10, 2.103e-10, 2.35e-10, 2.598e-10,
697 2.801e-10, 2.899e-10, 3e-10, 2.817e-10, 2.617e-10, 2.332e-10,
698 1.933e-10, 1.605e-10, 1.232e-10, 9.285e-11, 6.941e-11, 4.951e-11,
699 3.539e-11, 2.402e-11, 1.522e-11, 9.676e-12, 6.056e-12, 3.745e-12,
700 2.34e-12, 1.463e-12, 9.186e-13, 5.769e-13, 3.322e-13, 1.853e-13,
701 1.035e-13, 7.173e-14, 5.382e-14, 4.036e-14, 3.401e-14, 2.997e-14,
702 2.635e-14, 2.316e-14, 2.034e-14, 1.783e-14, 1.56e-14, 1.363e-14,
703 1.19e-14, 1.037e-14, 9.032e-15, 7.846e-15, 6.813e-15, 5.912e-15,
704 5.121e-15, 4.431e-15, 3.829e-15, 3.306e-15, 2.851e-15, 2.456e-15,
705 2.114e-15, 1.816e-15, 1.559e-15, 1.337e-15, 1.146e-15, 9.811e-16,
706 8.389e-16, 7.162e-16, 6.109e-16, 5.203e-16, 4.425e-16, 3.76e-16,
707 3.184e-16, 2.692e-16, 2.274e-16, 1.917e-16, 1.61e-16, 1.35e-16,
708 1.131e-16, 9.437e-17, 7.874e-17, 6.57e-17, 5.481e-17, 4.579e-17,
709 3.828e-17, 3.204e-17, 2.691e-17, 2.264e-17, 1.912e-17, 1.626e-17,
710 1.382e-17, 1.174e-17, 9.972e-18, 8.603e-18, 7.45e-18, 6.453e-18,
711 5.623e-18, 4.944e-18, 4.361e-18, 3.859e-18, 3.443e-18, 3.096e-18,
712 2.788e-18, 2.528e-18, 2.293e-18, 2.099e-18, 1.929e-18, 1.773e-18,
713 1.64e-18
714 };
715
716 static const double hocl[121] = {
717 1.056e-12, 1.194e-12, 1.35e-12, 1.531e-12, 1.737e-12, 1.982e-12,
718 2.263e-12, 2.599e-12, 2.991e-12, 3.459e-12, 4.012e-12, 4.662e-12,
719 5.438e-12, 6.35e-12, 7.425e-12, 8.686e-12, 1.016e-11, 1.188e-11,
720 1.389e-11, 1.659e-11, 2.087e-11, 2.621e-11, 3.265e-11, 4.064e-11,
721 4.859e-11, 5.441e-11, 6.09e-11, 6.373e-11, 6.611e-11, 6.94e-11,
722 7.44e-11, 7.97e-11, 8.775e-11, 9.722e-11, 1.064e-10, 1.089e-10,
723 1.114e-10, 1.106e-10, 1.053e-10, 1.004e-10, 9.006e-11, 7.778e-11,
724 6.739e-11, 5.636e-11, 4.655e-11, 3.845e-11, 3.042e-11, 2.368e-11,
725 1.845e-11, 1.442e-11, 1.127e-11, 8.814e-12, 6.544e-12, 4.763e-12,
726 3.449e-12, 2.612e-12, 1.999e-12, 1.526e-12, 1.16e-12, 8.793e-13,
727 6.655e-13, 5.017e-13, 3.778e-13, 2.829e-13, 2.117e-13, 1.582e-13,
728 1.178e-13, 8.755e-14, 6.486e-14, 4.799e-14, 3.54e-14, 2.606e-14,
729 1.916e-14, 1.403e-14, 1.026e-14, 7.48e-15, 5.446e-15, 3.961e-15,
730 2.872e-15, 2.076e-15, 1.498e-15, 1.077e-15, 7.726e-16, 5.528e-16,
731 3.929e-16, 2.785e-16, 1.969e-16, 1.386e-16, 9.69e-17, 6.747e-17,
732 4.692e-17, 3.236e-17, 2.232e-17, 1.539e-17, 1.061e-17, 7.332e-18,
733 5.076e-18, 3.522e-18, 2.461e-18, 1.726e-18, 1.22e-18, 8.75e-19,
734 6.264e-19, 4.482e-19, 3.207e-19, 2.368e-19, 1.762e-19, 1.312e-19,
735 9.891e-20, 7.595e-20, 5.87e-20, 4.567e-20, 3.612e-20, 2.904e-20,
736 2.343e-20, 1.917e-20, 1.568e-20, 1.308e-20, 1.1e-20, 9.25e-21,
737 7.881e-21
738 };
739
740 static const double n2o[121] = {
741 3.17e-07, 3.17e-07, 3.17e-07, 3.17e-07, 3.17e-07, 3.17e-07, 3.17e-07,
742 3.17e-07, 3.17e-07, 3.17e-07, 3.124e-07, 3.077e-07, 3.03e-07,
743 2.984e-07, 2.938e-07, 2.892e-07, 2.847e-07, 2.779e-07, 2.705e-07,
744 2.631e-07, 2.557e-07, 2.484e-07, 2.345e-07, 2.201e-07, 2.01e-07,
745 1.754e-07, 1.532e-07, 1.329e-07, 1.154e-07, 1.003e-07, 8.735e-08,
746 7.617e-08, 6.512e-08, 5.547e-08, 4.709e-08, 3.915e-08, 3.259e-08,
747 2.738e-08, 2.327e-08, 1.98e-08, 1.711e-08, 1.493e-08, 1.306e-08,
748 1.165e-08, 1.049e-08, 9.439e-09, 8.375e-09, 7.391e-09, 6.525e-09,
749 5.759e-09, 5.083e-09, 4.485e-09, 3.953e-09, 3.601e-09, 3.27e-09,
750 2.975e-09, 2.757e-09, 2.556e-09, 2.37e-09, 2.195e-09, 2.032e-09,
751 1.912e-09, 1.79e-09, 1.679e-09, 1.572e-09, 1.482e-09, 1.402e-09,
752 1.326e-09, 1.254e-09, 1.187e-09, 1.127e-09, 1.071e-09, 1.02e-09,
753 9.673e-10, 9.193e-10, 8.752e-10, 8.379e-10, 8.017e-10, 7.66e-10,
754 7.319e-10, 7.004e-10, 6.721e-10, 6.459e-10, 6.199e-10, 5.942e-10,
755 5.703e-10, 5.488e-10, 5.283e-10, 5.082e-10, 4.877e-10, 4.696e-10,
756 4.52e-10, 4.355e-10, 4.198e-10, 4.039e-10, 3.888e-10, 3.754e-10,
757 3.624e-10, 3.499e-10, 3.381e-10, 3.267e-10, 3.163e-10, 3.058e-10,
758 2.959e-10, 2.864e-10, 2.77e-10, 2.686e-10, 2.604e-10, 2.534e-10,
759 2.462e-10, 2.386e-10, 2.318e-10, 2.247e-10, 2.189e-10, 2.133e-10,
760 2.071e-10, 2.014e-10, 1.955e-10, 1.908e-10, 1.86e-10, 1.817e-10
761 };
762
763 static const double n2o5[121] = {
764 1.231e-11, 3.035e-12, 1.702e-12, 9.877e-13, 8.081e-13, 9.039e-13,
765 1.169e-12, 1.474e-12, 1.651e-12, 1.795e-12, 1.998e-12, 2.543e-12,
766 4.398e-12, 7.698e-12, 1.28e-11, 2.131e-11, 3.548e-11, 5.894e-11,
767 7.645e-11, 1.089e-10, 1.391e-10, 1.886e-10, 2.386e-10, 2.986e-10,
768 3.487e-10, 3.994e-10, 4.5e-10, 4.6e-10, 4.591e-10, 4.1e-10, 3.488e-10,
769 2.846e-10, 2.287e-10, 1.696e-10, 1.011e-10, 6.428e-11, 4.324e-11,
770 2.225e-11, 6.214e-12, 3.608e-12, 8.793e-13, 4.491e-13, 1.04e-13,
771 6.1e-14, 3.436e-14, 6.671e-15, 1.171e-15, 5.848e-16, 1.212e-16,
772 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
773 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
774 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
775 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
776 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
777 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
778 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
779 1e-16, 1e-16
780 };
781
782 static const double nh3[121] = {
783 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10,
784 1e-10, 1e-10, 1e-10, 1e-10, 9.444e-11, 8.488e-11, 7.241e-11, 5.785e-11,
785 4.178e-11, 3.018e-11, 2.18e-11, 1.574e-11, 1.137e-11, 8.211e-12,
786 5.973e-12, 4.327e-12, 3.118e-12, 2.234e-12, 1.573e-12, 1.04e-12,
787 6.762e-13, 4.202e-13, 2.406e-13, 1.335e-13, 6.938e-14, 3.105e-14,
788 1.609e-14, 1.033e-14, 6.432e-15, 4.031e-15, 2.555e-15, 1.656e-15,
789 1.115e-15, 7.904e-16, 5.63e-16, 4.048e-16, 2.876e-16, 2.004e-16,
790 1.356e-16, 9.237e-17, 6.235e-17, 4.223e-17, 3.009e-17, 2.328e-17,
791 2.002e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
792 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
793 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
794 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
795 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
796 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
797 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
798 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
799 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
800 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
801 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
802 1.914e-17
803 };
804
805 static const double no[121] = {
806 2.586e-10, 4.143e-11, 1.566e-11, 9.591e-12, 8.088e-12, 8.462e-12,
807 1.013e-11, 1.328e-11, 1.855e-11, 2.678e-11, 3.926e-11, 5.464e-11,
808 7.012e-11, 8.912e-11, 1.127e-10, 1.347e-10, 1.498e-10, 1.544e-10,
809 1.602e-10, 1.824e-10, 2.078e-10, 2.366e-10, 2.691e-10, 5.141e-10,
810 8.259e-10, 1.254e-09, 1.849e-09, 2.473e-09, 3.294e-09, 4.16e-09,
811 5.095e-09, 6.11e-09, 6.93e-09, 7.888e-09, 8.903e-09, 9.713e-09,
812 1.052e-08, 1.115e-08, 1.173e-08, 1.21e-08, 1.228e-08, 1.239e-08,
813 1.231e-08, 1.213e-08, 1.192e-08, 1.138e-08, 1.085e-08, 1.008e-08,
814 9.224e-09, 8.389e-09, 7.262e-09, 6.278e-09, 5.335e-09, 4.388e-09,
815 3.589e-09, 2.761e-09, 2.129e-09, 1.633e-09, 1.243e-09, 9.681e-10,
816 8.355e-10, 7.665e-10, 7.442e-10, 8.584e-10, 9.732e-10, 1.063e-09,
817 1.163e-09, 1.286e-09, 1.472e-09, 1.707e-09, 2.032e-09, 2.474e-09,
818 2.977e-09, 3.506e-09, 4.102e-09, 5.013e-09, 6.493e-09, 8.414e-09,
819 1.077e-08, 1.367e-08, 1.777e-08, 2.625e-08, 3.926e-08, 5.545e-08,
820 7.195e-08, 9.464e-08, 1.404e-07, 2.183e-07, 3.329e-07, 4.535e-07,
821 6.158e-07, 8.187e-07, 1.075e-06, 1.422e-06, 1.979e-06, 2.71e-06,
822 3.58e-06, 4.573e-06, 5.951e-06, 7.999e-06, 1.072e-05, 1.372e-05,
823 1.697e-05, 2.112e-05, 2.643e-05, 3.288e-05, 3.994e-05, 4.794e-05,
824 5.606e-05, 6.383e-05, 7.286e-05, 8.156e-05, 8.883e-05, 9.469e-05,
825 9.848e-05, 0.0001023, 0.0001066, 0.0001115, 0.0001145, 0.0001142,
826 0.0001133
827 };
828
829 static const double no2[121] = {
830 3.036e-09, 2.945e-10, 9.982e-11, 5.069e-11, 3.485e-11, 2.982e-11,
831 2.947e-11, 3.164e-11, 3.714e-11, 4.586e-11, 6.164e-11, 8.041e-11,
832 9.982e-11, 1.283e-10, 1.73e-10, 2.56e-10, 3.909e-10, 5.959e-10,
833 9.081e-10, 1.384e-09, 1.788e-09, 2.189e-09, 2.686e-09, 3.091e-09,
834 3.49e-09, 3.796e-09, 4.2e-09, 5.103e-09, 6.005e-09, 6.3e-09, 6.706e-09,
835 7.07e-09, 7.434e-09, 7.663e-09, 7.788e-09, 7.8e-09, 7.597e-09,
836 7.482e-09, 7.227e-09, 6.403e-09, 5.585e-09, 4.606e-09, 3.703e-09,
837 2.984e-09, 2.183e-09, 1.48e-09, 8.441e-10, 5.994e-10, 3.799e-10,
838 2.751e-10, 1.927e-10, 1.507e-10, 1.102e-10, 6.971e-11, 5.839e-11,
839 3.904e-11, 3.087e-11, 2.176e-11, 1.464e-11, 1.209e-11, 8.497e-12,
840 6.477e-12, 4.371e-12, 2.914e-12, 2.424e-12, 1.753e-12, 1.35e-12,
841 9.417e-13, 6.622e-13, 5.148e-13, 3.841e-13, 3.446e-13, 3.01e-13,
842 2.551e-13, 2.151e-13, 1.829e-13, 1.64e-13, 1.475e-13, 1.352e-13,
843 1.155e-13, 9.963e-14, 9.771e-14, 9.577e-14, 9.384e-14, 9.186e-14,
844 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14,
845 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14,
846 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14,
847 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14
848 };
849
850 static const double o3[121] = {
851 2.218e-08, 3.394e-08, 3.869e-08, 4.219e-08, 4.501e-08, 4.778e-08,
852 5.067e-08, 5.402e-08, 5.872e-08, 6.521e-08, 7.709e-08, 9.461e-08,
853 1.269e-07, 1.853e-07, 2.723e-07, 3.964e-07, 5.773e-07, 8.2e-07,
854 1.155e-06, 1.59e-06, 2.076e-06, 2.706e-06, 3.249e-06, 3.848e-06,
855 4.459e-06, 4.986e-06, 5.573e-06, 5.958e-06, 6.328e-06, 6.661e-06,
856 6.9e-06, 7.146e-06, 7.276e-06, 7.374e-06, 7.447e-06, 7.383e-06,
857 7.321e-06, 7.161e-06, 6.879e-06, 6.611e-06, 6.216e-06, 5.765e-06,
858 5.355e-06, 4.905e-06, 4.471e-06, 4.075e-06, 3.728e-06, 3.413e-06,
859 3.125e-06, 2.856e-06, 2.607e-06, 2.379e-06, 2.17e-06, 1.978e-06,
860 1.8e-06, 1.646e-06, 1.506e-06, 1.376e-06, 1.233e-06, 1.102e-06,
861 9.839e-07, 8.771e-07, 7.814e-07, 6.947e-07, 6.102e-07, 5.228e-07,
862 4.509e-07, 3.922e-07, 3.501e-07, 3.183e-07, 2.909e-07, 2.686e-07,
863 2.476e-07, 2.284e-07, 2.109e-07, 2.003e-07, 2.013e-07, 2.022e-07,
864 2.032e-07, 2.042e-07, 2.097e-07, 2.361e-07, 2.656e-07, 2.989e-07,
865 3.37e-07, 3.826e-07, 4.489e-07, 5.26e-07, 6.189e-07, 7.312e-07,
866 8.496e-07, 8.444e-07, 8.392e-07, 8.339e-07, 8.286e-07, 8.234e-07,
867 8.181e-07, 8.129e-07, 8.077e-07, 8.026e-07, 6.918e-07, 5.176e-07,
868 3.865e-07, 2.885e-07, 2.156e-07, 1.619e-07, 1.219e-07, 9.161e-08,
869 6.972e-08, 5.399e-08, 3.498e-08, 2.111e-08, 1.322e-08, 8.482e-09,
870 5.527e-09, 3.423e-09, 2.071e-09, 1.314e-09, 8.529e-10, 5.503e-10,
871 3.665e-10
872 };
873
874 static const double ocs[121] = {
875 6e-10, 6e-10, 6e-10, 6e-10, 6e-10, 6e-10, 6e-10, 6e-10, 6e-10, 5.997e-10,
876 5.989e-10, 5.881e-10, 5.765e-10, 5.433e-10, 5.074e-10, 4.567e-10,
877 4.067e-10, 3.601e-10, 3.093e-10, 2.619e-10, 2.232e-10, 1.805e-10,
878 1.46e-10, 1.187e-10, 8.03e-11, 5.435e-11, 3.686e-11, 2.217e-11,
879 1.341e-11, 8.756e-12, 4.511e-12, 2.37e-12, 1.264e-12, 8.28e-13,
880 5.263e-13, 3.209e-13, 1.717e-13, 9.068e-14, 4.709e-14, 2.389e-14,
881 1.236e-14, 1.127e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
882 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
883 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
884 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
885 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
886 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
887 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
888 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
889 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
890 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
891 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
892 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
893 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
894 1.091e-14, 1.091e-14, 1.091e-14
895 };
896
897 static const double sf6[121] = {
898 4.103e-12, 4.103e-12, 4.103e-12, 4.103e-12, 4.103e-12, 4.103e-12,
899 4.103e-12, 4.103e-12, 4.103e-12, 4.087e-12, 4.064e-12, 4.023e-12,
900 3.988e-12, 3.941e-12, 3.884e-12, 3.755e-12, 3.622e-12, 3.484e-12,
901 3.32e-12, 3.144e-12, 2.978e-12, 2.811e-12, 2.653e-12, 2.489e-12,
902 2.332e-12, 2.199e-12, 2.089e-12, 2.013e-12, 1.953e-12, 1.898e-12,
903 1.859e-12, 1.826e-12, 1.798e-12, 1.776e-12, 1.757e-12, 1.742e-12,
904 1.728e-12, 1.717e-12, 1.707e-12, 1.698e-12, 1.691e-12, 1.685e-12,
905 1.679e-12, 1.675e-12, 1.671e-12, 1.668e-12, 1.665e-12, 1.663e-12,
906 1.661e-12, 1.659e-12, 1.658e-12, 1.657e-12, 1.656e-12, 1.655e-12,
907 1.654e-12, 1.653e-12, 1.653e-12, 1.652e-12, 1.652e-12, 1.652e-12,
908 1.651e-12, 1.651e-12, 1.651e-12, 1.651e-12, 1.651e-12, 1.651e-12,
909 1.651e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
910 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
911 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
912 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
913 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
914 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
915 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
916 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12
917 };
918
919 static const double so2[121] = {
920 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10,
921 1e-10, 1e-10, 9.867e-11, 9.537e-11, 9e-11, 8.404e-11, 7.799e-11,
922 7.205e-11, 6.616e-11, 6.036e-11, 5.475e-11, 5.007e-11, 4.638e-11,
923 4.346e-11, 4.055e-11, 3.763e-11, 3.471e-11, 3.186e-11, 2.905e-11,
924 2.631e-11, 2.358e-11, 2.415e-11, 2.949e-11, 3.952e-11, 5.155e-11,
925 6.76e-11, 8.741e-11, 1.099e-10, 1.278e-10, 1.414e-10, 1.512e-10,
926 1.607e-10, 1.699e-10, 1.774e-10, 1.832e-10, 1.871e-10, 1.907e-10,
927 1.943e-10, 1.974e-10, 1.993e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
928 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
929 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
930 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
931 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
932 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
933 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
934 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10
935 };
936
937 const double *q[NG] = { NULL };
938
939 /* Identify variable... */
940 for (int ig = 0; ig < ctl->ng; ig++) {
941 q[ig] = NULL;
942 if (strcasecmp(ctl->emitter[ig], "C2H2") == 0)
943 q[ig] = c2h2;
944 if (strcasecmp(ctl->emitter[ig], "C2H6") == 0)
945 q[ig] = c2h6;
946 if (strcasecmp(ctl->emitter[ig], "CCl4") == 0)
947 q[ig] = ccl4;
948 if (strcasecmp(ctl->emitter[ig], "CH3OH") == 0)
949 q[ig] = ch3oh;
950 if (strcasecmp(ctl->emitter[ig], "CH4") == 0)
951 q[ig] = ch4;
952 if (strcasecmp(ctl->emitter[ig], "ClO") == 0)
953 q[ig] = clo;
954 if (strcasecmp(ctl->emitter[ig], "ClONO2") == 0)
955 q[ig] = clono2;
956 if (strcasecmp(ctl->emitter[ig], "CO") == 0)
957 q[ig] = co;
958 if (strcasecmp(ctl->emitter[ig], "COF2") == 0)
959 q[ig] = cof2;
960 if (strcasecmp(ctl->emitter[ig], "F11") == 0)
961 q[ig] = f11;
962 if (strcasecmp(ctl->emitter[ig], "F113") == 0)
963 q[ig] = f113;
964 if (strcasecmp(ctl->emitter[ig], "F114") == 0)
965 q[ig] = f114;
966 if (strcasecmp(ctl->emitter[ig], "F12") == 0)
967 q[ig] = f12;
968 if (strcasecmp(ctl->emitter[ig], "F14") == 0)
969 q[ig] = f14;
970 if (strcasecmp(ctl->emitter[ig], "F22") == 0)
971 q[ig] = f22;
972 if (strcasecmp(ctl->emitter[ig], "H2CO") == 0)
973 q[ig] = h2co;
974 if (strcasecmp(ctl->emitter[ig], "H2O") == 0)
975 q[ig] = h2o;
976 if (strcasecmp(ctl->emitter[ig], "H2O2") == 0)
977 q[ig] = h2o2;
978 if (strcasecmp(ctl->emitter[ig], "HCl") == 0)
979 q[ig] = hcl;
980 if (strcasecmp(ctl->emitter[ig], "HCN") == 0)
981 q[ig] = hcn;
982 if (strcasecmp(ctl->emitter[ig], "HF") == 0)
983 q[ig] = hf;
984 if (strcasecmp(ctl->emitter[ig], "HNO3") == 0)
985 q[ig] = hno3;
986 if (strcasecmp(ctl->emitter[ig], "HNO4") == 0)
987 q[ig] = hno4;
988 if (strcasecmp(ctl->emitter[ig], "HOCl") == 0)
989 q[ig] = hocl;
990 if (strcasecmp(ctl->emitter[ig], "N2O") == 0)
991 q[ig] = n2o;
992 if (strcasecmp(ctl->emitter[ig], "N2O5") == 0)
993 q[ig] = n2o5;
994 if (strcasecmp(ctl->emitter[ig], "NH3") == 0)
995 q[ig] = nh3;
996 if (strcasecmp(ctl->emitter[ig], "NO") == 0)
997 q[ig] = no;
998 if (strcasecmp(ctl->emitter[ig], "NO2") == 0)
999 q[ig] = no2;
1000 if (strcasecmp(ctl->emitter[ig], "O3") == 0)
1001 q[ig] = o3;
1002 if (strcasecmp(ctl->emitter[ig], "OCS") == 0)
1003 q[ig] = ocs;
1004 if (strcasecmp(ctl->emitter[ig], "SF6") == 0)
1005 q[ig] = sf6;
1006 if (strcasecmp(ctl->emitter[ig], "SO2") == 0)
1007 q[ig] = so2;
1008 }
1009
1010 /* Loop over atmospheric data points... */
1011 for (int ip = 0; ip < atm->np; ip++) {
1012
1013 /* Get altitude index... */
1014 const int iz = locate_reg(z, 121, atm->z[ip]);
1015
1016 /* Interpolate pressure... */
1017 atm->p[ip] = LOGY(z[iz], pre[iz], z[iz + 1], pre[iz + 1], atm->z[ip]);
1018
1019 /* Interpolate temperature... */
1020 atm->t[ip] = LIN(z[iz], tem[iz], z[iz + 1], tem[iz + 1], atm->z[ip]);
1021
1022 /* Interpolate trace gases... */
1023 for (int ig = 0; ig < ctl->ng; ig++)
1024 if (q[ig] != NULL)
1025 atm->q[ig][ip] =
1026 LIN(z[iz], q[ig][iz], z[iz + 1], q[ig][iz + 1], atm->z[ip]);
1027 else
1028 atm->q[ig][ip] = 0;
1029
1030 /* Set CO2... */
1031 if (ctl->ig_co2 >= 0)
1032 atm->q[ctl->ig_co2][ip] =
1033 371.789948e-6 + 2.026214e-6 * (atm->time[ip] - 63158400.) / 31557600.;
1034
1035 /* Set N2... */
1036 if (ctl->ig_n2 >= 0)
1037 atm->q[ctl->ig_n2][ip] = N2;
1038
1039 /* Set O2... */
1040 if (ctl->ig_o2 >= 0)
1041 atm->q[ctl->ig_o2][ip] = O2;
1042
1043 /* Set extinction to zero... */
1044 for (int iw = 0; iw < ctl->nw; iw++)
1045 atm->k[iw][ip] = 0;
1046
1047 /* Set cloud layer... */
1048 atm->clz = atm->cldz = 0;
1049 for (int icl = 0; icl < ctl->ncl; icl++)
1050 atm->clk[icl] = 0;
1051
1052 /* Set surface layer... */
1053 atm->sfz = atm->sfp = atm->sft = 0;
1054 for (int isf = 0; isf < ctl->nsf; isf++)
1055 atm->sfeps[isf] = 1;
1056 }
1057}
1058
1059/*****************************************************************************/
1060
1061double ctmco2(
1062 const double nu,
1063 const double p,
1064 const double t,
1065 const double u) {
1066
1067 static const double co2296[2001] =
1068 { 9.3388e-5, 9.7711e-5, 1.0224e-4, 1.0697e-4,
1069 1.1193e-4, 1.1712e-4, 1.2255e-4, 1.2824e-4, 1.3419e-4, 1.4043e-4,
1070 1.4695e-4, 1.5378e-4, 1.6094e-4, 1.6842e-4, 1.7626e-4, 1.8447e-4,
1071 1.9307e-4, 2.0207e-4, 2.1149e-4, 2.2136e-4, 2.3169e-4, 2.4251e-4,
1072 2.5384e-4, 2.657e-4, 2.7813e-4, 2.9114e-4, 3.0477e-4, 3.1904e-4,
1073 3.3399e-4, 3.4965e-4, 3.6604e-4, 3.8322e-4, 4.0121e-4, 4.2006e-4,
1074 4.398e-4, 4.6047e-4, 4.8214e-4, 5.0483e-4, 5.286e-4, 5.535e-4,
1075 5.7959e-4, 6.0693e-4, 6.3557e-4, 6.6558e-4, 6.9702e-4, 7.2996e-4,
1076 7.6449e-4, 8.0066e-4, 8.3856e-4, 8.7829e-4, 9.1991e-4, 9.6354e-4,
1077 .0010093, .0010572, .0011074, .00116, .0012152, .001273,
1078 .0013336, .0013972, .0014638, .0015336, .0016068, .0016835,
1079 .001764, .0018483, .0019367, .0020295, .0021267, .0022286,
1080 .0023355, .0024476, .0025652, .0026885, .0028178, .0029534,
1081 .0030956, .0032448, .0034012, .0035654, .0037375, .0039181,
1082 .0041076, .0043063, .0045148, .0047336, .0049632, .005204,
1083 .0054567, .0057219, .0060002, .0062923, .0065988, .0069204,
1084 .007258, .0076123, .0079842, .0083746, .0087844, .0092146,
1085 .0096663, .01014, .010638, .011161, .01171, .012286, .012891,
1086 .013527, .014194, .014895, .015631, .016404, .017217, .01807,
1087 .018966, .019908, .020897, .021936, .023028, .024176, .025382,
1088 .026649, .027981, .02938, .030851, .032397, .034023, .035732,
1089 .037528, .039416, .041402, .04349, .045685, .047994, .050422,
1090 .052975, .055661, .058486, .061458, .064584, .067873, .071334,
1091 .074975, .078807, .082839, .087082, .091549, .096249, .1012,
1092 .10641, .11189, .11767, .12375, .13015, .13689, .14399, .15147,
1093 .15935, .16765, .17639, .18561, .19531, .20554, .21632, .22769,
1094 .23967, .25229, .2656, .27964, .29443, .31004, .3265, .34386,
1095 .36218, .3815, .40188, .42339, .44609, .47004, .49533, .52202,
1096 .5502, .57995, .61137, .64455, .6796, .71663, .75574, .79707,
1097 .84075, .88691, .9357, .98728, 1.0418, 1.0995, 1.1605, 1.225,
1098 1.2932, 1.3654, 1.4418, 1.5227, 1.6083, 1.6989, 1.7948, 1.8964,
1099 2.004, 2.118, 2.2388, 2.3668, 2.5025, 2.6463, 2.7988, 2.9606,
1100 3.1321, 3.314, 3.5071, 3.712, 3.9296, 4.1605, 4.4058, 4.6663,
1101 4.9431, 5.2374, 5.5501, 5.8818, 6.2353, 6.6114, 7.0115, 7.4372,
1102 7.8905, 8.3731, 8.8871, 9.4349, 10.019, 10.641, 11.305, 12.013,
1103 12.769, 13.576, 14.437, 15.358, 16.342, 17.39, 18.513, 19.716,
1104 21.003, 22.379, 23.854, 25.436, 27.126, 28.942, 30.89, 32.973,
1105 35.219, 37.634, 40.224, 43.021, 46.037, 49.29, 52.803, 56.447,
1106 60.418, 64.792, 69.526, 74.637, 80.182, 86.193, 92.713, 99.786,
1107 107.47, 115.84, 124.94, 134.86, 145.69, 157.49, 170.3, 184.39,
1108 199.83, 216.4, 234.55, 254.72, 276.82, 299.85, 326.16, 354.99,
1109 386.51, 416.68, 449.89, 490.12, 534.35, 578.25, 632.26, 692.61,
1110 756.43, 834.75, 924.11, 1016.9, 996.96, 1102.7, 1219.2, 1351.9,
1111 1494.3, 1654.1, 1826.5, 2027.9, 2249., 2453.8, 2714.4, 2999.4,
1112 3209.5, 3509., 3840.4, 3907.5, 4190.7, 4533.5, 4648.3, 5059.1,
1113 5561.6, 6191.4, 6820.8, 7905.9, 9362.2, 2431.3, 2211.3, 2046.8,
1114 2023.8, 1985.9, 1905.9, 1491.1, 1369.8, 1262.2, 1200.7, 887.74,
1115 820.25, 885.23, 887.21, 816.73, 1126.9, 1216.2, 1272.4, 1579.5,
1116 1634.2, 1656.3, 1657.9, 1789.5, 1670.8, 1509.5, 8474.6, 7489.2,
1117 6793.6, 6117., 5574.1, 5141.2, 5084.6, 4745.1, 4413.2, 4102.8,
1118 4024.7, 3715., 3398.6, 3100.8, 2900.4, 2629.2, 2374., 2144.7,
1119 1955.8, 1760.8, 1591.2, 1435.2, 1296.2, 1174., 1065.1, 967.76,
1120 999.48, 897.45, 809.23, 732.77, 670.26, 611.93, 560.11, 518.77,
1121 476.84, 438.8, 408.48, 380.21, 349.24, 322.71, 296.65, 272.85,
1122 251.96, 232.04, 213.88, 197.69, 182.41, 168.41, 155.79, 144.05,
1123 133.31, 123.48, 114.5, 106.21, 98.591, 91.612, 85.156, 79.204,
1124 73.719, 68.666, 63.975, 59.637, 56.35, 52.545, 49.042, 45.788,
1125 42.78, 39.992, 37.441, 35.037, 32.8, 30.744, 28.801, 26.986,
1126 25.297, 23.731, 22.258, 20.883, 19.603, 18.403, 17.295, 16.249,
1127 15.271, 14.356, 13.501, 12.701, 11.954, 11.254, 10.6, 9.9864,
1128 9.4118, 8.8745, 8.3714, 7.8997, 7.4578, 7.0446, 6.6573, 6.2949,
1129 5.9577, 5.6395, 5.3419, 5.063, 4.8037, 4.5608, 4.3452, 4.1364,
1130 3.9413, 3.7394, 3.562, 3.3932, 3.2325, 3.0789, 2.9318, 2.7898,
1131 2.6537, 2.5225, 2.3958, 2.2305, 2.1215, 2.0245, 1.9427, 1.8795,
1132 1.8336, 1.7604, 1.7016, 1.6419, 1.5282, 1.4611, 1.3443, 1.27,
1133 1.1675, 1.0824, 1.0534, .99833, .95854, .92981, .90887, .89346,
1134 .88113, .87068, .86102, .85096, .88262, .86151, .83565, .80518,
1135 .77045, .73736, .74744, .74954, .75773, .82267, .83493, .89402,
1136 .89725, .93426, .95564, .94045, .94174, .93404, .92035, .90456,
1137 .88621, .86673, .78117, .7515, .72056, .68822, .65658, .62764,
1138 .55984, .55598, .57407, .60963, .63763, .66198, .61132, .60972,
1139 .52496, .50649, .41872, .3964, .32422, .27276, .24048, .23772,
1140 .2286, .22711, .23999, .32038, .34371, .36621, .38561, .39953,
1141 .40636, .44913, .42716, .3919, .35477, .33935, .3351, .39746,
1142 .40993, .49398, .49956, .56157, .54742, .57295, .57386, .55417,
1143 .50745, .471, .43446, .39102, .34993, .31269, .27888, .24912,
1144 .22291, .19994, .17972, .16197, .14633, .13252, .12029, .10942,
1145 .099745, .091118, .083404, .076494, .070292, .064716, .059697,
1146 .055173, .051093, .047411, .044089, .041092, .038392, .035965,
1147 .033789, .031846, .030122, .028607, .02729, .026169, .025209,
1148 .024405, .023766, .023288, .022925, .022716, .022681, .022685,
1149 .022768, .023133, .023325, .023486, .024004, .024126, .024083,
1150 .023785, .024023, .023029, .021649, .021108, .019454, .017809,
1151 .017292, .016635, .017037, .018068, .018977, .018756, .017847,
1152 .016557, .016142, .014459, .012869, .012381, .010875, .0098701,
1153 .009285, .0091698, .0091701, .0096145, .010553, .01106, .012613,
1154 .014362, .015017, .016507, .017741, .01768, .017784, .0171,
1155 .016357, .016172, .017257, .018978, .020935, .021741, .023567,
1156 .025183, .025589, .026732, .027648, .028278, .028215, .02856,
1157 .029015, .029062, .028851, .028497, .027825, .027801, .026523,
1158 .02487, .022967, .022168, .020194, .018605, .017903, .018439,
1159 .019697, .020311, .020855, .020057, .018608, .016738, .015963,
1160 .013844, .011801, .011134, .0097573, .0086007, .0086226,
1161 .0083721, .0090978, .0097616, .0098426, .011317, .012853, .01447,
1162 .014657, .015771, .016351, .016079, .014829, .013431, .013185,
1163 .013207, .01448, .016176, .017971, .018265, .019526, .020455,
1164 .019797, .019802, .0194, .018176, .017505, .016197, .015339,
1165 .014401, .013213, .012203, .011186, .010236, .0093288, .0084854,
1166 .0076837, .0069375, .0062614, .0056628, .0051153, .0046015,
1167 .0041501, .003752, .0033996, .0030865, .0028077, .0025586,
1168 .0023355, .0021353, .0019553, .0017931, .0016466, .0015141,
1169 .0013941, .0012852, .0011862, .0010962, .0010142, 9.3935e-4,
1170 8.71e-4, 8.0851e-4, 7.5132e-4, 6.9894e-4, 6.5093e-4, 6.0689e-4,
1171 5.6647e-4, 5.2935e-4, 4.9525e-4, 4.6391e-4, 4.3509e-4, 4.086e-4,
1172 3.8424e-4, 3.6185e-4, 3.4126e-4, 3.2235e-4, 3.0498e-4, 2.8904e-4,
1173 2.7444e-4, 2.6106e-4, 2.4883e-4, 2.3766e-4, 2.275e-4, 2.1827e-4,
1174 2.0992e-4, 2.0239e-4, 1.9563e-4, 1.896e-4, 1.8427e-4, 1.796e-4,
1175 1.7555e-4, 1.7209e-4, 1.692e-4, 1.6687e-4, 1.6505e-4, 1.6375e-4,
1176 1.6294e-4, 1.6261e-4, 1.6274e-4, 1.6334e-4, 1.6438e-4, 1.6587e-4,
1177 1.678e-4, 1.7017e-4, 1.7297e-4, 1.762e-4, 1.7988e-4, 1.8399e-4,
1178 1.8855e-4, 1.9355e-4, 1.9902e-4, 2.0494e-4, 2.1134e-4, 2.1823e-4,
1179 2.2561e-4, 2.335e-4, 2.4192e-4, 2.5088e-4, 2.604e-4, 2.705e-4,
1180 2.8119e-4, 2.9251e-4, 3.0447e-4, 3.171e-4, 3.3042e-4, 3.4447e-4,
1181 3.5927e-4, 3.7486e-4, 3.9127e-4, 4.0854e-4, 4.267e-4, 4.4579e-4,
1182 4.6586e-4, 4.8696e-4, 5.0912e-4, 5.324e-4, 5.5685e-4, 5.8253e-4,
1183 6.0949e-4, 6.378e-4, 6.6753e-4, 6.9873e-4, 7.3149e-4, 7.6588e-4,
1184 8.0198e-4, 8.3987e-4, 8.7964e-4, 9.2139e-4, 9.6522e-4, .0010112,
1185 .0010595, .0011102, .0011634, .0012193, .001278, .0013396,
1186 .0014043, .0014722, .0015436, .0016185, .0016972, .0017799,
1187 .0018668, .001958, .0020539, .0021547, .0022606, .0023719,
1188 .002489, .002612, .0027414, .0028775, .0030206, .0031712,
1189 .0033295, .0034962, .0036716, .0038563, .0040506, .0042553,
1190 .0044709, .004698, .0049373, .0051894, .0054552, .0057354,
1191 .006031, .0063427, .0066717, .0070188, .0073854, .0077726,
1192 .0081816, .0086138, .0090709, .0095543, .010066, .010607,
1193 .011181, .011789, .012433, .013116, .013842, .014613, .015432,
1194 .016304, .017233, .018224, .019281, .020394, .021574, .022836,
1195 .024181, .025594, .027088, .028707, .030401, .032245, .034219,
1196 .036262, .038539, .040987, .043578, .04641, .04949, .052726,
1197 .056326, .0602, .064093, .068521, .073278, .077734, .083064,
1198 .088731, .093885, .1003, .1072, .11365, .12187, .13078, .13989,
1199 .15095, .16299, .17634, .19116, .20628, .22419, .24386, .26587,
1200 .28811, .31399, .34321, .36606, .39675, .42742, .44243, .47197,
1201 .49993, .49027, .51147, .52803, .48931, .49729, .5026, .43854,
1202 .441, .44766, .43414, .46151, .50029, .55247, .43855, .32115,
1203 .32607, .3431, .36119, .38029, .41179, .43996, .47144, .51853,
1204 .55362, .59122, .66338, .69877, .74001, .82923, .86907, .90361,
1205 1.0025, 1.031, 1.0559, 1.104, 1.1178, 1.1341, 1.1547, 1.351,
1206 1.4772, 1.4812, 1.4907, 1.512, 1.5442, 1.5853, 1.6358, 1.6963,
1207 1.7674, 1.8474, 1.9353, 2.0335, 2.143, 2.2592, 2.3853, 2.5217,
1208 2.6686, 2.8273, 2.9998, 3.183, 3.3868, 3.6109, 3.8564, 4.1159,
1209 4.4079, 4.7278, 5.0497, 5.3695, 5.758, 6.0834, 6.4976, 6.9312,
1210 7.38, 7.5746, 7.9833, 8.3791, 8.3956, 8.7501, 9.1067, 9.072,
1211 9.4649, 9.9112, 10.402, 10.829, 11.605, 12.54, 12.713, 10.443,
1212 10.825, 11.375, 11.955, 12.623, 13.326, 14.101, 15.041, 15.547,
1213 16.461, 17.439, 18.716, 19.84, 21.036, 22.642, 23.901, 25.244,
1214 27.03, 28.411, 29.871, 31.403, 33.147, 34.744, 36.456, 39.239,
1215 43.605, 45.162, 47.004, 49.093, 51.391, 53.946, 56.673, 59.629,
1216 63.167, 66.576, 70.254, 74.222, 78.477, 83.034, 87.914, 93.18,
1217 98.77, 104.74, 111.15, 117.95, 125.23, 133.01, 141.33, 150.21,
1218 159.71, 169.89, 180.93, 192.54, 204.99, 218.34, 232.65, 248.,
1219 264.47, 282.14, 301.13, 321.53, 343.48, 367.08, 392.5, 419.88,
1220 449.4, 481.26, 515.64, 552.79, 592.99, 636.48, 683.61, 734.65,
1221 789.99, 850.02, 915.14, 985.81, 1062.5, 1147.1, 1237.8, 1336.4,
1222 1443.2, 1558.9, 1684.2, 1819.2, 1965.2, 2122.6, 2291.7, 2470.8,
1223 2665.7, 2874.9, 3099.4, 3337.9, 3541., 3813.3, 4111.9, 4439.3,
1224 4798.9, 5196., 5639.2, 6087.5, 6657.7, 7306.7, 8040.7, 8845.5,
1225 9702.2, 10670., 11739., 12842., 14141., 15498., 17068., 18729.,
1226 20557., 22559., 25248., 27664., 30207., 32915., 35611., 38081.,
1227 40715., 43191., 41651., 42750., 43785., 44353., 44366., 44189.,
1228 43618., 42862., 41878., 35133., 35215., 36383., 39420., 44055.,
1229 44155., 45850., 46853., 39197., 38274., 29942., 28553., 21792.,
1230 21228., 17106., 14955., 18181., 19557., 21427., 23728., 26301.,
1231 28584., 30775., 32536., 33867., 40089., 39204., 37329., 34452.,
1232 31373., 33921., 34800., 36043., 44415., 45162., 52181., 50895.,
1233 54140., 50840., 50468., 48302., 44915., 40910., 36754., 32755.,
1234 29093., 25860., 22962., 20448., 18247., 16326., 14645., 13165.,
1235 11861., 10708., 9686.9, 8779.7, 7971.9, 7250.8, 6605.7, 6027.2,
1236 5507.3, 5039.1, 4616.6, 4234.8, 3889., 3575.4, 3290.5, 3031.3,
1237 2795.2, 2579.9, 2383.1, 2203.3, 2038.6, 1887.6, 1749.1, 1621.9,
1238 1505., 1397.4, 1298.3, 1207., 1122.8, 1045., 973.1, 906.64,
1239 845.16, 788.22, 735.48, 686.57, 641.21, 599.1, 559.99, 523.64,
1240 489.85, 458.42, 429.16, 401.92, 376.54, 352.88, 330.82, 310.24,
1241 291.03, 273.09, 256.34, 240.69, 226.05, 212.37, 199.57, 187.59,
1242 176.37, 165.87, 156.03, 146.82, 138.17, 130.07, 122.47, 115.34,
1243 108.65, 102.37, 96.473, 90.934, 85.73, 80.84, 76.243, 71.922,
1244 67.858, 64.034, 60.438, 57.052, 53.866, 50.866, 48.04, 45.379,
1245 42.872, 40.51, 38.285, 36.188, 34.211, 32.347, 30.588, 28.929,
1246 27.362, 25.884, 24.489, 23.171, 21.929, 20.755, 19.646, 18.599,
1247 17.61, 16.677, 15.795, 14.961, 14.174, 13.43, 12.725, 12.06,
1248 11.431, 10.834, 10.27, 9.7361, 9.2302, 8.7518, 8.2997, 7.8724,
1249 7.4674, 7.0848, 6.7226, 6.3794, 6.054, 5.745, 5.4525, 5.1752,
1250 4.9121, 4.6625, 4.4259, 4.2015, 3.9888, 3.7872, 3.5961, 3.4149,
1251 3.2431, 3.0802, 2.9257, 2.7792, 2.6402, 2.5084, 2.3834, 2.2648,
1252 2.1522, 2.0455, 1.9441, 1.848, 1.7567, 1.6701, 1.5878, 1.5097,
1253 1.4356, 1.3651, 1.2981, 1.2345, 1.174, 1.1167, 1.062, 1.0101,
1254 .96087, .91414, .86986, .82781, .78777, .74971, .71339, .67882,
1255 .64604, .61473, .58507, .55676, .52987, .5044, .48014, .45715,
1256 .43527, .41453, .3948, .37609, .35831, .34142, .32524, .30995,
1257 .29536, .28142, .26807, .25527, .24311, .23166, .22077, .21053,
1258 .20081, .19143, .18261, .17407, .16603, .15833, .15089, .14385,
1259 .13707, .13065, .12449, .11865, .11306, .10774, .10266, .097818,
1260 .093203, .088815, .084641, .080671, .076892, .073296, .069873,
1261 .066613, .06351, .060555, .05774, .055058, .052504, .050071,
1262 .047752, .045543, .043438, .041432, .039521, .037699, .035962,
1263 .034307, .032729, .031225, .029791, .028423, .02712, .025877,
1264 .024692, .023563, .022485, .021458, .020478, .019543, .018652,
1265 .017802, .016992, .016219, .015481, .014778, .014107, .013467,
1266 .012856, .012274, .011718, .011188, .010682, .0102, .0097393,
1267 .0093001, .008881, .0084812, .0080997, .0077358, .0073885,
1268 .0070571, .0067409, .0064393, .0061514, .0058768, .0056147,
1269 .0053647, .0051262, .0048987, .0046816, .0044745, .0042769,
1270 .0040884, .0039088, .0037373, .0035739, .003418, .0032693,
1271 .0031277, .0029926, .0028639, .0027413, .0026245, .0025133,
1272 .0024074, .0023066, .0022108, .0021196, .002033, .0019507,
1273 .0018726, .0017985, .0017282, .0016617, .0015988, .0015394,
1274 .0014834, .0014306, .0013811, .0013346, .0012911, .0012506,
1275 .0012131, .0011784, .0011465, .0011175, .0010912, .0010678,
1276 .0010472, .0010295, .0010147, .001003, 9.9428e-4, 9.8883e-4,
1277 9.8673e-4, 9.8821e-4, 9.9343e-4, .0010027, .0010164, .0010348,
1278 .0010586, .0010882, .0011245, .0011685, .0012145, .0012666,
1279 .0013095, .0013688, .0014048, .0014663, .0015309, .0015499,
1280 .0016144, .0016312, .001705, .0017892, .0018499, .0019715,
1281 .0021102, .0022442, .0024284, .0025893, .0027703, .0029445,
1282 .0031193, .003346, .0034552, .0036906, .0037584, .0040084,
1283 .0041934, .0044587, .0047093, .0049759, .0053421, .0055134,
1284 .0059048, .0058663, .0061036, .0063259, .0059657, .0060653,
1285 .0060972, .0055539, .0055653, .0055772, .005331, .0054953,
1286 .0055919, .0058684, .006183, .0066675, .0069808, .0075142,
1287 .0078536, .0084282, .0089454, .0094625, .0093703, .0095857,
1288 .0099283, .010063, .010521, .0097778, .0098175, .010379, .010447,
1289 .0105, .010617, .010706, .01078, .011177, .011212, .011304,
1290 .011446, .011603, .011816, .012165, .012545, .013069, .013539,
1291 .01411, .014776, .016103, .017016, .017994, .018978, .01998,
1292 .021799, .022745, .023681, .024627, .025562, .026992, .027958,
1293 .029013, .030154, .031402, .03228, .033651, .035272, .037088,
1294 .039021, .041213, .043597, .045977, .04877, .051809, .054943,
1295 .058064, .061528, .06537, .069309, .071928, .075752, .079589,
1296 .083352, .084096, .087497, .090817, .091198, .094966, .099045,
1297 .10429, .10867, .11518, .12269, .13126, .14087, .15161, .16388,
1298 .16423, .1759, .18721, .19994, .21275, .22513, .23041, .24231,
1299 .25299, .25396, .26396, .27696, .27929, .2908, .30595, .31433,
1300 .3282, .3429, .35944, .37467, .39277, .41245, .43326, .45649,
1301 .48152, .51897, .54686, .57877, .61263, .64962, .68983, .73945,
1302 .78619, .83537, .89622, .95002, 1.0067, 1.0742, 1.1355, 1.2007,
1303 1.2738, 1.347, 1.4254, 1.5094, 1.6009, 1.6976, 1.8019, 1.9148,
1304 2.0357, 2.166, 2.3066, 2.4579, 2.6208, 2.7966, 2.986, 3.188,
1305 3.4081, 3.6456, 3.9, 4.1747, 4.4712, 4.7931, 5.1359, 5.5097,
1306 5.9117, 6.3435, 6.8003, 7.3001, 7.8385, 8.3945, 9.011, 9.6869,
1307 10.392, 11.18, 12.036, 12.938, 13.944, 14.881, 16.029, 17.255,
1308 18.574, 19.945, 21.38, 22.9, 24.477, 26.128, 27.87, 29.037,
1309 30.988, 33.145, 35.506, 37.76, 40.885, 44.487, 48.505, 52.911,
1310 57.56, 61.964, 67.217, 72.26, 78.343, 85.08, 91.867, 99.435,
1311 107.68, 116.97, 127.12, 138.32, 150.26, 163.04, 174.81, 189.26,
1312 205.61, 224.68, 240.98, 261.88, 285.1, 307.58, 334.35, 363.53,
1313 394.68, 427.85, 458.85, 489.25, 472.87, 486.93, 496.27, 501.52,
1314 501.57, 497.14, 488.09, 476.32, 393.76, 388.51, 393.42, 414.45,
1315 455.12, 514.62, 520.38, 547.42, 562.6, 487.47, 480.83, 391.06,
1316 376.92, 303.7, 295.91, 256.03, 236.73, 280.38, 310.71, 335.53,
1317 367.88, 401.94, 435.52, 469.13, 497.94, 588.82, 597.94, 597.2,
1318 588.28, 571.2, 555.75, 603.56, 638.15, 680.75, 801.72, 848.01,
1319 962.15, 990.06, 1068.1, 1076.2, 1115.3, 1134.2, 1136.6, 1119.1,
1320 1108.9, 1090.6, 1068.7, 1041.9, 1005.4, 967.98, 927.08, 780.1,
1321 751.41, 733.12, 742.65, 785.56, 855.16, 852.45, 878.1, 784.59,
1322 777.81, 765.13, 622.93, 498.09, 474.89, 386.9, 378.48, 336.17,
1323 322.04, 329.57, 350.5, 383.38, 420.02, 462.39, 499.71, 531.98,
1324 654.99, 653.43, 639.99, 605.16, 554.16, 504.42, 540.64, 552.33,
1325 679.46, 699.51, 713.91, 832.17, 919.91, 884.96, 907.57, 846.56,
1326 818.56, 768.93, 706.71, 642.17, 575.95, 515.38, 459.07, 409.02,
1327 364.61, 325.46, 291.1, 260.89, 234.39, 211.01, 190.38, 172.11,
1328 155.91, 141.49, 128.63, 117.13, 106.84, 97.584, 89.262, 81.756,
1329 74.975, 68.842, 63.28, 58.232, 53.641, 49.46, 45.649, 42.168,
1330 38.991, 36.078, 33.409, 30.96, 28.71, 26.642, 24.737, 22.985,
1331 21.37, 19.882, 18.512, 17.242, 16.073, 14.987, 13.984, 13.05,
1332 12.186, 11.384, 10.637, 9.9436, 9.2988, 8.6991, 8.141, 7.6215,
1333 7.1378, 6.6872, 6.2671, 5.8754, 5.51, 5.1691, 4.851, 4.5539,
1334 4.2764, 4.0169, 3.7742, 3.5472, 3.3348, 3.1359, 2.9495, 2.7749,
1335 2.6113, 2.4578, 2.3139, 2.1789, 2.0523, 1.9334, 1.8219, 1.7171,
1336 1.6188, 1.5263, 1.4395, 1.3579, 1.2812, 1.209, 1.1411, 1.0773,
1337 1.0171, .96048, .90713, .85684, .80959, .76495, .72282, .68309,
1338 .64563, .61035, .57707, .54573, .51622, .48834, .46199, .43709,
1339 .41359, .39129, .37034, .35064, .33198, .31442, .29784, .28218,
1340 .26732, .25337, .24017, .22774, .21601, .20479, .19426
1341 };
1342
1343 static const double co2260[2001] =
1344 { 5.7971e-5, 6.0733e-5, 6.3628e-5, 6.6662e-5,
1345 6.9843e-5, 7.3176e-5, 7.6671e-5, 8.0334e-5, 8.4175e-5, 8.8201e-5,
1346 9.2421e-5, 9.6846e-5, 1.0149e-4, 1.0635e-4, 1.1145e-4, 1.1679e-4,
1347 1.224e-4, 1.2828e-4, 1.3444e-4, 1.409e-4, 1.4768e-4, 1.5479e-4,
1348 1.6224e-4, 1.7006e-4, 1.7826e-4, 1.8685e-4, 1.9587e-4, 2.0532e-4,
1349 2.1524e-4, 2.2565e-4, 2.3656e-4, 2.48e-4, 2.6001e-4, 2.7261e-4,
1350 2.8582e-4, 2.9968e-4, 3.1422e-4, 3.2948e-4, 3.4548e-4, 3.6228e-4,
1351 3.799e-4, 3.9838e-4, 4.1778e-4, 4.3814e-4, 4.595e-4, 4.8191e-4,
1352 5.0543e-4, 5.3012e-4, 5.5603e-4, 5.8321e-4, 6.1175e-4, 6.417e-4,
1353 6.7314e-4, 7.0614e-4, 7.4078e-4, 7.7714e-4, 8.1531e-4, 8.5538e-4,
1354 8.9745e-4, 9.4162e-4, 9.8798e-4, .0010367, .0010878, .0011415,
1355 .0011978, .001257, .0013191, .0013844, .001453, .0015249,
1356 .0016006, .00168, .0017634, .001851, .001943, .0020397, .0021412,
1357 .0022479, .00236, .0024778, .0026015, .0027316, .0028682,
1358 .0030117, .0031626, .0033211, .0034877, .0036628, .0038469,
1359 .0040403, .0042436, .0044574, .004682, .0049182, .0051665,
1360 .0054276, .0057021, .0059907, .0062942, .0066133, .0069489,
1361 .0073018, .0076729, .0080632, .0084738, .0089056, .0093599,
1362 .0098377, .01034, .010869, .011426, .012011, .012627, .013276,
1363 .013958, .014676, .015431, .016226, .017063, .017944, .018872,
1364 .019848, .020876, .021958, .023098, .024298, .025561, .026892,
1365 .028293, .029769, .031323, .032961, .034686, .036503, .038418,
1366 .040435, .042561, .044801, .047161, .049649, .052271, .055035,
1367 .057948, .061019, .064256, .06767, .07127, .075066, .079069,
1368 .083291, .087744, .092441, .097396, .10262, .10814, .11396,
1369 .1201, .12658, .13342, .14064, .14826, .1563, .1648, .17376,
1370 .18323, .19324, .2038, .21496, .22674, .23919, .25234, .26624,
1371 .28093, .29646, .31287, .33021, .34855, .36794, .38844, .41012,
1372 .43305, .45731, .48297, .51011, .53884, .56924, .60141, .63547,
1373 .67152, .70969, .75012, .79292, .83826, .8863, .93718, .99111,
1374 1.0482, 1.1088, 1.173, 1.2411, 1.3133, 1.3898, 1.471, 1.5571,
1375 1.6485, 1.7455, 1.8485, 1.9577, 2.0737, 2.197, 2.3278, 2.4668,
1376 2.6145, 2.7715, 2.9383, 3.1156, 3.3042, 3.5047, 3.7181, 3.9451,
1377 4.1866, 4.4437, 4.7174, 5.0089, 5.3192, 5.65, 6.0025, 6.3782,
1378 6.7787, 7.206, 7.6617, 8.1479, 8.6669, 9.221, 9.8128, 10.445,
1379 11.12, 11.843, 12.615, 13.441, 14.325, 15.271, 16.283, 17.367,
1380 18.529, 19.776, 21.111, 22.544, 24.082, 25.731, 27.504, 29.409,
1381 31.452, 33.654, 36.024, 38.573, 41.323, 44.29, 47.492, 50.951,
1382 54.608, 58.588, 62.929, 67.629, 72.712, 78.226, 84.207, 90.699,
1383 97.749, 105.42, 113.77, 122.86, 132.78, 143.61, 155.44, 168.33,
1384 182.48, 198.01, 214.87, 233.39, 253.86, 276.34, 300.3, 327.28,
1385 356.89, 389.48, 422.29, 458.99, 501.39, 548.13, 595.62, 652.74,
1386 716.54, 784.57, 866.78, 960.59, 1062.8, 1072.5, 1189.5, 1319.4,
1387 1467.6, 1630.2, 1813.7, 2016.9, 2253., 2515.3, 2773.5, 3092.8,
1388 3444.4, 3720.4, 4104.3, 4527.5, 4645.9, 5021.7, 5462.2, 5597.,
1389 6110.6, 6732.5, 7513.8, 8270.6, 9640.6, 11487., 2796.1, 2680.1,
1390 2441.6, 2404.2, 2334.8, 2215.2, 1642.5, 1477.9, 1328.1, 1223.5,
1391 843.34, 766.96, 831.65, 834.84, 774.85, 1156.3, 1275.6, 1366.1,
1392 1795.6, 1885., 1936.5, 1953.4, 2154.4, 2002.7, 1789.8, 10381.,
1393 9040., 8216.5, 7384.7, 6721.9, 6187.7, 6143.8, 5703.9, 5276.6,
1394 4873.1, 4736., 4325.3, 3927., 3554.1, 3286.1, 2950.1, 2642.4,
1395 2368.7, 2138.9, 1914., 1719.6, 1543.9, 1388.6, 1252.1, 1132.2,
1396 1024.1, 1025.4, 920.58, 829.59, 750.54, 685.01, 624.25, 570.14,
1397 525.81, 481.85, 441.95, 408.71, 377.23, 345.86, 318.51, 292.26,
1398 268.34, 247.04, 227.14, 209.02, 192.69, 177.59, 163.78, 151.26,
1399 139.73, 129.19, 119.53, 110.7, 102.57, 95.109, 88.264, 81.948,
1400 76.13, 70.768, 65.827, 61.251, 57.022, 53.495, 49.824, 46.443,
1401 43.307, 40.405, 37.716, 35.241, 32.923, 30.77, 28.78, 26.915,
1402 25.177, 23.56, 22.059, 20.654, 19.345, 18.126, 16.988, 15.93,
1403 14.939, 14.014, 13.149, 12.343, 11.589, 10.884, 10.225, 9.6093,
1404 9.0327, 8.4934, 7.9889, 7.5166, 7.0744, 6.6604, 6.2727, 5.9098,
1405 5.5701, 5.2529, 4.955, 4.676, 4.4148, 4.171, 3.9426, 3.7332,
1406 3.5347, 3.3493, 3.1677, 3.0025, 2.8466, 2.6994, 2.5601, 2.4277,
1407 2.3016, 2.1814, 2.0664, 1.9564, 1.8279, 1.7311, 1.6427, 1.5645,
1408 1.4982, 1.443, 1.374, 1.3146, 1.2562, 1.17, 1.1105, 1.0272,
1409 .96863, .89718, .83654, .80226, .75908, .72431, .69573, .67174,
1410 .65126, .63315, .61693, .60182, .58715, .59554, .57649, .55526,
1411 .53177, .50622, .48176, .4813, .47642, .47492, .50273, .50293,
1412 .52687, .52239, .53419, .53814, .52626, .52211, .51492, .50622,
1413 .49746, .48841, .4792, .43534, .41999, .40349, .38586, .36799,
1414 .35108, .31089, .30803, .3171, .33599, .35041, .36149, .32924,
1415 .32462, .27309, .25961, .20922, .19504, .15683, .13098, .11588,
1416 .11478, .11204, .11363, .12135, .16423, .17785, .19094, .20236,
1417 .21084, .2154, .24108, .22848, .20871, .18797, .17963, .17834,
1418 .21552, .22284, .26945, .27052, .30108, .28977, .29772, .29224,
1419 .27658, .24956, .22777, .20654, .18392, .16338, .1452, .12916,
1420 .1152, .10304, .092437, .083163, .075031, .067878, .061564,
1421 .055976, .051018, .046609, .042679, .03917, .036032, .033223,
1422 .030706, .02845, .026428, .024617, .022998, .021554, .02027,
1423 .019136, .018141, .017278, .016541, .015926, .015432, .015058,
1424 .014807, .014666, .014635, .014728, .014947, .01527, .015728,
1425 .016345, .017026, .017798, .018839, .019752, .020636, .021886,
1426 .022695, .02327, .023478, .024292, .023544, .022222, .021932,
1427 .020052, .018143, .017722, .017031, .017782, .01938, .020734,
1428 .020476, .019255, .017477, .016878, .014617, .012489, .011765,
1429 .0099077, .0086446, .0079446, .0078644, .0079763, .008671,
1430 .01001, .0108, .012933, .015349, .016341, .018484, .020254,
1431 .020254, .020478, .019591, .018595, .018385, .019913, .022254,
1432 .024847, .025809, .028053, .029924, .030212, .031367, .03222,
1433 .032739, .032537, .03286, .033344, .033507, .033499, .033339,
1434 .032809, .033041, .031723, .029837, .027511, .026603, .024032,
1435 .021914, .020948, .021701, .023425, .024259, .024987, .023818,
1436 .021768, .019223, .018144, .015282, .012604, .01163, .0097907,
1437 .008336, .0082473, .0079582, .0088077, .009779, .010129, .012145,
1438 .014378, .016761, .01726, .018997, .019998, .019809, .01819,
1439 .016358, .016099, .01617, .017939, .020223, .022521, .02277,
1440 .024279, .025247, .024222, .023989, .023224, .021493, .020362,
1441 .018596, .017309, .015975, .014466, .013171, .011921, .01078,
1442 .0097229, .0087612, .0078729, .0070682, .0063494, .0057156,
1443 .0051459, .0046273, .0041712, .0037686, .0034119, .003095,
1444 .0028126, .0025603, .0023342, .0021314, .0019489, .0017845,
1445 .001636, .0015017, .00138, .0012697, .0011694, .0010782,
1446 9.9507e-4, 9.1931e-4, 8.5013e-4, 7.869e-4, 7.2907e-4, 6.7611e-4,
1447 6.2758e-4, 5.8308e-4, 5.4223e-4, 5.0473e-4, 4.7027e-4, 4.3859e-4,
1448 4.0946e-4, 3.8265e-4, 3.5798e-4, 3.3526e-4, 3.1436e-4, 2.9511e-4,
1449 2.7739e-4, 2.6109e-4, 2.4609e-4, 2.3229e-4, 2.1961e-4, 2.0797e-4,
1450 1.9729e-4, 1.875e-4, 1.7855e-4, 1.7038e-4, 1.6294e-4, 1.5619e-4,
1451 1.5007e-4, 1.4456e-4, 1.3961e-4, 1.3521e-4, 1.3131e-4, 1.2789e-4,
1452 1.2494e-4, 1.2242e-4, 1.2032e-4, 1.1863e-4, 1.1733e-4, 1.1641e-4,
1453 1.1585e-4, 1.1565e-4, 1.158e-4, 1.1629e-4, 1.1712e-4, 1.1827e-4,
1454 1.1976e-4, 1.2158e-4, 1.2373e-4, 1.262e-4, 1.2901e-4, 1.3214e-4,
1455 1.3562e-4, 1.3944e-4, 1.4361e-4, 1.4814e-4, 1.5303e-4, 1.5829e-4,
1456 1.6394e-4, 1.6999e-4, 1.7644e-4, 1.8332e-4, 1.9063e-4, 1.984e-4,
1457 2.0663e-4, 2.1536e-4, 2.246e-4, 2.3436e-4, 2.4468e-4, 2.5558e-4,
1458 2.6708e-4, 2.7921e-4, 2.92e-4, 3.0548e-4, 3.1968e-4, 3.3464e-4,
1459 3.5039e-4, 3.6698e-4, 3.8443e-4, 4.0281e-4, 4.2214e-4, 4.4248e-4,
1460 4.6389e-4, 4.864e-4, 5.1009e-4, 5.3501e-4, 5.6123e-4, 5.888e-4,
1461 6.1781e-4, 6.4833e-4, 6.8043e-4, 7.142e-4, 7.4973e-4, 7.8711e-4,
1462 8.2644e-4, 8.6783e-4, 9.1137e-4, 9.5721e-4, .0010054, .0010562,
1463 .0011096, .0011659, .0012251, .0012875, .0013532, .0014224,
1464 .0014953, .001572, .0016529, .0017381, .0018279, .0019226,
1465 .0020224, .0021277, .0022386, .0023557, .0024792, .0026095,
1466 .002747, .0028921, .0030453, .0032071, .003378, .0035586,
1467 .0037494, .003951, .0041642, .0043897, .0046282, .0048805,
1468 .0051476, .0054304, .00573, .0060473, .0063837, .0067404,
1469 .0071188, .0075203, .0079466, .0083994, .0088806, .0093922,
1470 .0099366, .010516, .011134, .011792, .012494, .013244, .014046,
1471 .014898, .015808, .016781, .017822, .018929, .020108, .02138,
1472 .022729, .02419, .02576, .027412, .029233, .031198, .033301,
1473 .035594, .038092, .040767, .04372, .046918, .050246, .053974,
1474 .058009, .061976, .066586, .071537, .076209, .081856, .087998,
1475 .093821, .10113, .10913, .11731, .12724, .13821, .15025, .1639,
1476 .17807, .19472, .21356, .23496, .25758, .28387, .31389, .34104,
1477 .37469, .40989, .43309, .46845, .5042, .5023, .52981, .55275,
1478 .51075, .51976, .52457, .44779, .44721, .4503, .4243, .45244,
1479 .49491, .55399, .39021, .24802, .2501, .2618, .27475, .28879,
1480 .31317, .33643, .36257, .4018, .43275, .46525, .53333, .56599,
1481 .60557, .70142, .74194, .77736, .88567, .91182, .93294, .98407,
1482 .98772, .99176, .9995, 1.2405, 1.3602, 1.338, 1.3255, 1.3267,
1483 1.3404, 1.3634, 1.3967, 1.4407, 1.4961, 1.5603, 1.6328, 1.7153,
1484 1.8094, 1.9091, 2.018, 2.1367, 2.264, 2.4035, 2.5562, 2.7179,
1485 2.9017, 3.1052, 3.3304, 3.5731, 3.8488, 4.1553, 4.4769, 4.7818,
1486 5.1711, 5.5204, 5.9516, 6.4097, 6.8899, 7.1118, 7.5469, 7.9735,
1487 7.9511, 8.3014, 8.6418, 8.4757, 8.8256, 9.2294, 9.6923, 10.033,
1488 10.842, 11.851, 11.78, 8.8435, 9.1381, 9.5956, 10.076, 10.629,
1489 11.22, 11.883, 12.69, 13.163, 13.974, 14.846, 16.027, 17.053,
1490 18.148, 19.715, 20.907, 22.163, 23.956, 25.235, 26.566, 27.94,
1491 29.576, 30.956, 32.432, 35.337, 39.911, 41.128, 42.625, 44.386,
1492 46.369, 48.619, 51.031, 53.674, 56.825, 59.921, 63.286, 66.929,
1493 70.859, 75.081, 79.618, 84.513, 89.739, 95.335, 101.35, 107.76,
1494 114.63, 121.98, 129.87, 138.3, 147.34, 157.04, 167.56, 178.67,
1495 190.61, 203.43, 217.19, 231.99, 247.88, 264.98, 283.37, 303.17,
1496 324.49, 347.47, 372.25, 398.98, 427.85, 459.06, 492.8, 529.31,
1497 568.89, 611.79, 658.35, 708.91, 763.87, 823.65, 888.72, 959.58,
1498 1036.8, 1121.8, 1213.9, 1314.3, 1423.8, 1543., 1672.8, 1813.4,
1499 1966.1, 2131.4, 2309.5, 2499.3, 2705., 2925.7, 3161.6, 3411.3,
1500 3611.5, 3889.2, 4191.1, 4519.3, 4877.9, 5272.9, 5712.9, 6142.7,
1501 6719.6, 7385., 8145., 8977.7, 9831.9, 10827., 11934., 13063.,
1502 14434., 15878., 17591., 19435., 21510., 23835., 26835., 29740.,
1503 32878., 36305., 39830., 43273., 46931., 50499., 49586., 51598.,
1504 53429., 54619., 55081., 55102., 54485., 53487., 52042., 42689.,
1505 42607., 44020., 47994., 54169., 53916., 55808., 56642., 46049.,
1506 44243., 32929., 30658., 21963., 20835., 15962., 13679., 17652.,
1507 19680., 22388., 25625., 29184., 32520., 35720., 38414., 40523.,
1508 49228., 48173., 45678., 41768., 37600., 41313., 42654., 44465.,
1509 55736., 56630., 65409., 63308., 66572., 61845., 60379., 56777.,
1510 51920., 46601., 41367., 36529., 32219., 28470., 25192., 22362.,
1511 19907., 17772., 15907., 14273., 12835., 11567., 10445., 9450.2,
1512 8565.1, 7776., 7070.8, 6439.2, 5872.3, 5362.4, 4903., 4488.3,
1513 4113.4, 3773.8, 3465.8, 3186.1, 2931.7, 2700.1, 2488.8, 2296.,
1514 2119.8, 1958.6, 1810.9, 1675.6, 1551.4, 1437.3, 1332.4, 1236.,
1515 1147.2, 1065.3, 989.86, 920.22, 855.91, 796.48, 741.53, 690.69,
1516 643.62, 600.02, 559.6, 522.13, 487.35, 455.06, 425.08, 397.21,
1517 371.3, 347.2, 324.78, 303.9, 284.46, 266.34, 249.45, 233.7,
1518 219.01, 205.3, 192.5, 180.55, 169.38, 158.95, 149.2, 140.07,
1519 131.54, 123.56, 116.09, 109.09, 102.54, 96.405, 90.655, 85.266,
1520 80.213, 75.475, 71.031, 66.861, 62.948, 59.275, 55.827, 52.587,
1521 49.544, 46.686, 43.998, 41.473, 39.099, 36.867, 34.768, 32.795,
1522 30.939, 29.192, 27.546, 25.998, 24.539, 23.164, 21.869, 20.65,
1523 19.501, 18.419, 17.399, 16.438, 15.532, 14.678, 13.874, 13.115,
1524 12.4, 11.726, 11.088, 10.488, 9.921, 9.3846, 8.8784, 8.3996,
1525 7.9469, 7.5197, 7.1174, 6.738, 6.379, 6.0409, 5.7213, 5.419,
1526 5.1327, 4.8611, 4.6046, 4.3617, 4.1316, 3.9138, 3.7077, 3.5125,
1527 3.3281, 3.1536, 2.9885, 2.8323, 2.6846, 2.5447, 2.4124, 2.2871,
1528 2.1686, 2.0564, 1.9501, 1.8495, 1.7543, 1.6641, 1.5787, 1.4978,
1529 1.4212, 1.3486, 1.2799, 1.2147, 1.1529, 1.0943, 1.0388, .98602,
1530 .93596, .8886, .84352, .80078, .76029, .722, .68585, .65161,
1531 .61901, .58808, .55854, .53044, .5039, .47853, .45459, .43173,
1532 .41008, .38965, .37021, .35186, .33444, .31797, .30234, .28758,
1533 .2736, .26036, .24764, .2357, .22431, .21342, .20295, .19288,
1534 .18334, .17444, .166, .15815, .15072, .14348, .13674, .13015,
1535 .12399, .11807, .11231, .10689, .10164, .096696, .091955,
1536 .087476, .083183, .079113, .075229, .071536, .068026, .064698,
1537 .06154, .058544, .055699, .052997, .050431, .047993, .045676,
1538 .043475, .041382, .039392, .037501, .035702, .033991, .032364,
1539 .030817, .029345, .027945, .026613, .025345, .024139, .022991,
1540 .021899, .02086, .019871, .018929, .018033, .01718, .016368,
1541 .015595, .014859, .014158, .013491, .012856, .012251, .011675,
1542 .011126, .010604, .010107, .0096331, .009182, .0087523, .0083431,
1543 .0079533, .0075821, .0072284, .0068915, .0065706, .0062649,
1544 .0059737, .0056963, .005432, .0051802, .0049404, .0047118,
1545 .0044941, .0042867, .0040891, .0039009, .0037216, .0035507,
1546 .003388, .0032329, .0030852, .0029445, .0028105, .0026829,
1547 .0025613, .0024455, .0023353, .0022303, .0021304, .0020353,
1548 .0019448, .0018587, .0017767, .0016988, .0016247, .0015543,
1549 .0014874, .0014238, .0013635, .0013062, .0012519, .0012005,
1550 .0011517, .0011057, .0010621, .001021, 9.8233e-4, 9.4589e-4,
1551 9.1167e-4, 8.7961e-4, 8.4964e-4, 8.2173e-4, 7.9582e-4, 7.7189e-4,
1552 7.499e-4, 7.2983e-4, 7.1167e-4, 6.9542e-4, 6.8108e-4, 6.6866e-4,
1553 6.5819e-4, 6.4971e-4, 6.4328e-4, 6.3895e-4, 6.3681e-4, 6.3697e-4,
1554 6.3956e-4, 6.4472e-4, 6.5266e-4, 6.6359e-4, 6.778e-4, 6.9563e-4,
1555 7.1749e-4, 7.4392e-4, 7.7556e-4, 8.1028e-4, 8.4994e-4, 8.8709e-4,
1556 9.3413e-4, 9.6953e-4, .0010202, .0010738, .0010976, .0011507,
1557 .0011686, .0012264, .001291, .0013346, .0014246, .0015293,
1558 .0016359, .0017824, .0019255, .0020854, .002247, .0024148,
1559 .0026199, .0027523, .0029704, .0030702, .0033047, .0035013,
1560 .0037576, .0040275, .0043089, .0046927, .0049307, .0053486,
1561 .0053809, .0056699, .0059325, .0055488, .005634, .0056392,
1562 .004946, .0048855, .0048208, .0044386, .0045498, .0046377,
1563 .0048939, .0052396, .0057324, .0060859, .0066906, .0071148,
1564 .0077224, .0082687, .008769, .0084471, .008572, .0087729,
1565 .008775, .0090742, .0080704, .0080288, .0085747, .0086087,
1566 .0086408, .0088752, .0089381, .0089757, .0093532, .0092824,
1567 .0092566, .0092645, .0092735, .009342, .0095806, .0097991,
1568 .010213, .010611, .011129, .011756, .013237, .01412, .015034,
1569 .015936, .01682, .018597, .019315, .019995, .020658, .021289,
1570 .022363, .022996, .023716, .024512, .025434, .026067, .027118,
1571 .028396, .029865, .031442, .033253, .03525, .037296, .039701,
1572 .042356, .045154, .048059, .051294, .054893, .058636, .061407,
1573 .065172, .068974, .072676, .073379, .076547, .079556, .079134,
1574 .082308, .085739, .090192, .09359, .099599, .10669, .11496,
1575 .1244, .13512, .14752, .14494, .15647, .1668, .17863, .19029,
1576 .20124, .20254, .21179, .21982, .21625, .22364, .23405, .23382,
1577 .2434, .25708, .26406, .27621, .28909, .30395, .31717, .33271,
1578 .3496, .36765, .38774, .40949, .446, .46985, .49846, .5287, .562,
1579 .59841, .64598, .68834, .7327, .78978, .8373, .88708, .94744,
1580 1.0006, 1.0574, 1.1215, 1.1856, 1.2546, 1.3292, 1.4107, 1.4974,
1581 1.5913, 1.6931, 1.8028, 1.9212, 2.0492, 2.1874, 2.3365, 2.4978,
1582 2.6718, 2.8588, 3.062, 3.2818, 3.5188, 3.7752, 4.0527, 4.3542,
1583 4.6782, 5.0312, 5.4123, 5.8246, 6.2639, 6.7435, 7.2636, 7.8064,
1584 8.4091, 9.0696, 9.7677, 10.548, 11.4, 12.309, 13.324, 14.284,
1585 15.445, 16.687, 18.019, 19.403, 20.847, 22.366, 23.925, 25.537,
1586 27.213, 28.069, 29.864, 31.829, 33.988, 35.856, 38.829, 42.321,
1587 46.319, 50.606, 55.126, 59.126, 64.162, 68.708, 74.615, 81.176,
1588 87.739, 95.494, 103.83, 113.38, 123.99, 135.8, 148.7, 162.58,
1589 176.32, 192.6, 211.47, 232.7, 252.64, 277.41, 305.38, 333.44,
1590 366.42, 402.66, 442.14, 484.53, 526.42, 568.15, 558.78, 582.6,
1591 600.98, 613.94, 619.44, 618.24, 609.84, 595.96, 484.86, 475.59,
1592 478.49, 501.56, 552.19, 628.44, 630.39, 658.92, 671.96, 562.7,
1593 545.88, 423.43, 400.14, 306.59, 294.13, 246.8, 226.51, 278.21,
1594 314.39, 347.22, 389.13, 433.16, 477.48, 521.67, 560.54, 683.6,
1595 696.37, 695.91, 683.1, 658.24, 634.89, 698.85, 742.87, 796.66,
1596 954.49, 1009.5, 1150.5, 1179.1, 1267.9, 1272.4, 1312.7, 1330.4,
1597 1331.6, 1315.8, 1308.3, 1293.3, 1274.6, 1249.5, 1213.2, 1172.1,
1598 1124.4, 930.33, 893.36, 871.27, 883.54, 940.76, 1036., 1025.6,
1599 1053.1, 914.51, 894.15, 865.03, 670.63, 508.41, 475.15, 370.85,
1600 361.06, 319.38, 312.75, 331.87, 367.13, 415., 467.94, 525.49,
1601 578.41, 624.66, 794.82, 796.97, 780.29, 736.49, 670.18, 603.75,
1602 659.67, 679.8, 857.12, 884.05, 900.65, 1046.1, 1141.9, 1083.,
1603 1089.2, 1e3, 947.08, 872.31, 787.91, 704.75, 624.93, 553.68,
1604 489.91, 434.21, 385.64, 343.3, 306.42, 274.18, 245.94, 221.11,
1605 199.23, 179.88, 162.73, 147.48, 133.88, 121.73, 110.86, 101.1,
1606 92.323, 84.417, 77.281, 70.831, 64.991, 59.694, 54.884, 50.509,
1607 46.526, 42.893, 39.58, 36.549, 33.776, 31.236, 28.907, 26.77,
1608 24.805, 23., 21.339, 19.81, 18.404, 17.105, 15.909, 14.801,
1609 13.778, 12.83, 11.954, 11.142, 10.389, 9.691, 9.0434, 8.4423,
1610 7.8842, 7.3657, 6.8838, 6.4357, 6.0189, 5.6308, 5.2696, 4.9332,
1611 4.6198, 4.3277, 4.0553, 3.8012, 3.5639, 3.3424, 3.1355, 2.9422,
1612 2.7614, 2.5924, 2.4343, 2.2864, 2.148, 2.0184, 1.8971, 1.7835,
1613 1.677, 1.5773, 1.4838, 1.3961, 1.3139, 1.2369, 1.1645, 1.0966,
1614 1.0329, .97309, .91686, .86406, .81439, .76767, .72381, .68252,
1615 .64359, .60695, .57247, .54008, .50957, .48092, .45401, .42862,
1616 .40465, .38202, .36072, .34052, .3216, .30386, .28711, .27135,
1617 .25651, .24252, .2293, .21689, .20517, .19416, .18381, .17396,
1618 .16469
1619 };
1620
1621 static const double co2230[2001] =
1622 { 2.743e-5, 2.8815e-5, 3.027e-5, 3.1798e-5,
1623 3.3405e-5, 3.5094e-5, 3.6869e-5, 3.8734e-5, 4.0694e-5, 4.2754e-5,
1624 4.492e-5, 4.7196e-5, 4.9588e-5, 5.2103e-5, 5.4747e-5, 5.7525e-5,
1625 6.0446e-5, 6.3516e-5, 6.6744e-5, 7.0137e-5, 7.3704e-5, 7.7455e-5,
1626 8.1397e-5, 8.5543e-5, 8.9901e-5, 9.4484e-5, 9.9302e-5, 1.0437e-4,
1627 1.097e-4, 1.153e-4, 1.2119e-4, 1.2738e-4, 1.3389e-4, 1.4074e-4,
1628 1.4795e-4, 1.5552e-4, 1.6349e-4, 1.7187e-4, 1.8068e-4, 1.8995e-4,
1629 1.997e-4, 2.0996e-4, 2.2075e-4, 2.321e-4, 2.4403e-4, 2.5659e-4,
1630 2.698e-4, 2.837e-4, 2.9832e-4, 3.137e-4, 3.2988e-4, 3.4691e-4,
1631 3.6483e-4, 3.8368e-4, 4.0351e-4, 4.2439e-4, 4.4635e-4, 4.6947e-4,
1632 4.9379e-4, 5.1939e-4, 5.4633e-4, 5.7468e-4, 6.0452e-4, 6.3593e-4,
1633 6.69e-4, 7.038e-4, 7.4043e-4, 7.79e-4, 8.1959e-4, 8.6233e-4,
1634 9.0732e-4, 9.5469e-4, .0010046, .0010571, .0011124, .0011706,
1635 .0012319, .0012964, .0013644, .001436, .0015114, .0015908,
1636 .0016745, .0017625, .0018553, .0019531, .002056, .0021645,
1637 .0022788, .0023992, .002526, .0026596, .0028004, .0029488,
1638 .0031052, .0032699, .0034436, .0036265, .0038194, .0040227,
1639 .0042369, .0044628, .0047008, .0049518, .0052164, .0054953,
1640 .0057894, .0060995, .0064265, .0067713, .007135, .0075184,
1641 .0079228, .0083494, .0087993, .0092738, .0097745, .010303,
1642 .01086, .011448, .012068, .012722, .013413, .014142, .014911,
1643 .015723, .01658, .017484, .018439, .019447, .020511, .021635,
1644 .022821, .024074, .025397, .026794, .02827, .029829, .031475,
1645 .033215, .035052, .036994, .039045, .041213, .043504, .045926,
1646 .048485, .05119, .05405, .057074, .060271, .063651, .067225,
1647 .071006, .075004, .079233, .083708, .088441, .093449, .098749,
1648 .10436, .11029, .11657, .12322, .13026, .13772, .14561, .15397,
1649 .16282, .1722, .18214, .19266, .20381, .21563, .22816, .24143,
1650 .2555, .27043, .28625, .30303, .32082, .3397, .35972, .38097,
1651 .40352, .42746, .45286, .47983, .50847, .53888, .57119, .6055,
1652 .64196, .6807, .72187, .76564, .81217, .86165, .91427, .97025,
1653 1.0298, 1.0932, 1.1606, 1.2324, 1.3088, 1.3902, 1.477, 1.5693,
1654 1.6678, 1.7727, 1.8845, 2.0038, 2.131, 2.2666, 2.4114, 2.5659,
1655 2.7309, 2.907, 3.0951, 3.2961, 3.5109, 3.7405, 3.986, 4.2485,
1656 4.5293, 4.8299, 5.1516, 5.4961, 5.8651, 6.2605, 6.6842, 7.1385,
1657 7.6256, 8.1481, 8.7089, 9.3109, 9.9573, 10.652, 11.398, 12.2,
1658 13.063, 13.992, 14.99, 16.064, 17.222, 18.469, 19.813, 21.263,
1659 22.828, 24.516, 26.34, 28.31, 30.437, 32.738, 35.226, 37.914,
1660 40.824, 43.974, 47.377, 51.061, 55.011, 59.299, 63.961, 69.013,
1661 74.492, 80.444, 86.919, 93.836, 101.23, 109.25, 117.98, 127.47,
1662 137.81, 149.07, 161.35, 174.75, 189.42, 205.49, 223.02, 242.26,
1663 263.45, 286.75, 311.94, 340.01, 370.86, 404.92, 440.44, 480.27,
1664 525.17, 574.71, 626.22, 686.8, 754.38, 827.07, 913.38, 1011.7,
1665 1121.5, 1161.6, 1289.5, 1432.2, 1595.4, 1777., 1983.3, 2216.1,
1666 2485.7, 2788.3, 3101.5, 3481., 3902.1, 4257.1, 4740., 5272.8,
1667 5457.9, 5946.2, 6505.3, 6668.4, 7302.4, 8061.6, 9015.8, 9908.3,
1668 11613., 13956., 3249.6, 3243., 2901.5, 2841.3, 2729.6, 2558.2,
1669 1797.8, 1583.2, 1386., 1233.5, 787.74, 701.46, 761.66, 767.21,
1670 722.83, 1180.6, 1332.1, 1461.6, 2032.9, 2166., 2255.9, 2294.7,
1671 2587.2, 2396.5, 2122.4, 12553., 10784., 9832.5, 8827.3, 8029.1,
1672 7377.9, 7347.1, 6783.8, 6239.1, 5721.1, 5503., 4975.1, 4477.8,
1673 4021.3, 3676.8, 3275.3, 2914.9, 2597.4, 2328.2, 2075.4, 1857.6,
1674 1663.6, 1493.3, 1343.8, 1213.3, 1095.6, 1066.5, 958.91, 865.15,
1675 783.31, 714.35, 650.77, 593.98, 546.2, 499.9, 457.87, 421.75,
1676 387.61, 355.25, 326.62, 299.7, 275.21, 253.17, 232.83, 214.31,
1677 197.5, 182.08, 167.98, 155.12, 143.32, 132.5, 122.58, 113.48,
1678 105.11, 97.415, 90.182, 83.463, 77.281, 71.587, 66.341, 61.493,
1679 57.014, 53.062, 49.21, 45.663, 42.38, 39.348, 36.547, 33.967,
1680 31.573, 29.357, 27.314, 25.415, 23.658, 22.03, 20.524, 19.125,
1681 17.829, 16.627, 15.511, 14.476, 13.514, 12.618, 11.786, 11.013,
1682 10.294, 9.6246, 9.0018, 8.4218, 7.8816, 7.3783, 6.9092, 6.4719,
1683 6.0641, 5.6838, 5.3289, 4.998, 4.6893, 4.4014, 4.1325, 3.8813,
1684 3.6469, 3.4283, 3.2241, 3.035, 2.8576, 2.6922, 2.5348, 2.3896,
1685 2.2535, 2.1258, 2.0059, 1.8929, 1.7862, 1.6854, 1.5898, 1.4992,
1686 1.4017, 1.3218, 1.2479, 1.1809, 1.1215, 1.0693, 1.0116, .96016,
1687 .9105, .84859, .80105, .74381, .69982, .65127, .60899, .57843,
1688 .54592, .51792, .49336, .47155, .45201, .43426, .41807, .40303,
1689 .38876, .3863, .37098, .35492, .33801, .32032, .30341, .29874,
1690 .29193, .28689, .29584, .29155, .29826, .29195, .29287, .2904,
1691 .28199, .27709, .27162, .26622, .26133, .25676, .25235, .23137,
1692 .22365, .21519, .20597, .19636, .18699, .16485, .16262, .16643,
1693 .17542, .18198, .18631, .16759, .16338, .13505, .1267, .10053,
1694 .092554, .074093, .062159, .055523, .054849, .05401, .05528,
1695 .058982, .07952, .08647, .093244, .099285, .10393, .10661,
1696 .12072, .11417, .10396, .093265, .089137, .088909, .10902,
1697 .11277, .13625, .13565, .14907, .14167, .1428, .13744, .12768,
1698 .11382, .10244, .091686, .08109, .071739, .063616, .056579,
1699 .050504, .045251, .040689, .036715, .033237, .030181, .027488,
1700 .025107, .022998, .021125, .01946, .017979, .016661, .015489,
1701 .014448, .013526, .012712, .011998, .011375, .010839, .010384,
1702 .010007, .0097053, .0094783, .0093257, .0092489, .0092504,
1703 .0093346, .0095077, .0097676, .01012, .01058, .011157, .011844,
1704 .012672, .013665, .014766, .015999, .017509, .018972, .020444,
1705 .022311, .023742, .0249, .025599, .026981, .026462, .025143,
1706 .025066, .022814, .020458, .020026, .019142, .020189, .022371,
1707 .024163, .023728, .02199, .019506, .018591, .015576, .012784,
1708 .011744, .0094777, .0079148, .0070652, .006986, .0071758,
1709 .008086, .0098025, .01087, .013609, .016764, .018137, .021061,
1710 .023498, .023576, .023965, .022828, .021519, .021283, .023364,
1711 .026457, .029782, .030856, .033486, .035515, .035543, .036558,
1712 .037198, .037472, .037045, .037284, .03777, .038085, .038366,
1713 .038526, .038282, .038915, .037697, .035667, .032941, .031959,
1714 .028692, .025918, .024596, .025592, .027873, .028935, .02984,
1715 .028148, .025305, .021912, .020454, .016732, .013357, .01205,
1716 .009731, .0079881, .0077704, .0074387, .0083895, .0096776,
1717 .010326, .01293, .015955, .019247, .020145, .02267, .024231,
1718 .024184, .022131, .019784, .01955, .01971, .022119, .025116,
1719 .027978, .028107, .029808, .030701, .029164, .028551, .027286,
1720 .024946, .023259, .020982, .019221, .017471, .015643, .014074,
1721 .01261, .011301, .010116, .0090582, .0081036, .0072542, .0065034,
1722 .0058436, .0052571, .0047321, .0042697, .0038607, .0034977,
1723 .0031747, .0028864, .0026284, .002397, .002189, .0020017,
1724 .0018326, .0016798, .0015414, .0014159, .0013019, .0011983,
1725 .0011039, .0010177, 9.391e-4, 8.6717e-4, 8.0131e-4, 7.4093e-4,
1726 6.8553e-4, 6.3464e-4, 5.8787e-4, 5.4487e-4, 5.0533e-4, 4.69e-4,
1727 4.3556e-4, 4.0474e-4, 3.7629e-4, 3.5e-4, 3.2569e-4, 3.032e-4,
1728 2.8239e-4, 2.6314e-4, 2.4535e-4, 2.2891e-4, 2.1374e-4, 1.9975e-4,
1729 1.8685e-4, 1.7498e-4, 1.6406e-4, 1.5401e-4, 1.4479e-4, 1.3633e-4,
1730 1.2858e-4, 1.2148e-4, 1.1499e-4, 1.0907e-4, 1.0369e-4, 9.8791e-5,
1731 9.4359e-5, 9.0359e-5, 8.6766e-5, 8.3555e-5, 8.0703e-5, 7.8192e-5,
1732 7.6003e-5, 7.4119e-5, 7.2528e-5, 7.1216e-5, 7.0171e-5, 6.9385e-5,
1733 6.8848e-5, 6.8554e-5, 6.8496e-5, 6.8669e-5, 6.9069e-5, 6.9694e-5,
1734 7.054e-5, 7.1608e-5, 7.2896e-5, 7.4406e-5, 7.6139e-5, 7.8097e-5,
1735 8.0283e-5, 8.2702e-5, 8.5357e-5, 8.8255e-5, 9.1402e-5, 9.4806e-5,
1736 9.8473e-5, 1.0241e-4, 1.0664e-4, 1.1115e-4, 1.1598e-4, 1.2112e-4,
1737 1.2659e-4, 1.3241e-4, 1.3859e-4, 1.4515e-4, 1.521e-4, 1.5947e-4,
1738 1.6728e-4, 1.7555e-4, 1.8429e-4, 1.9355e-4, 2.0334e-4, 2.1369e-4,
1739 2.2463e-4, 2.3619e-4, 2.4841e-4, 2.6132e-4, 2.7497e-4, 2.8938e-4,
1740 3.0462e-4, 3.2071e-4, 3.3771e-4, 3.5567e-4, 3.7465e-4, 3.947e-4,
1741 4.1588e-4, 4.3828e-4, 4.6194e-4, 4.8695e-4, 5.1338e-4, 5.4133e-4,
1742 5.7087e-4, 6.0211e-4, 6.3515e-4, 6.701e-4, 7.0706e-4, 7.4617e-4,
1743 7.8756e-4, 8.3136e-4, 8.7772e-4, 9.2681e-4, 9.788e-4, .0010339,
1744 .0010922, .001154, .0012195, .0012889, .0013626, .0014407,
1745 .0015235, .0016114, .0017048, .0018038, .001909, .0020207,
1746 .0021395, .0022657, .0023998, .0025426, .0026944, .002856,
1747 .0030281, .0032114, .0034068, .003615, .0038371, .004074,
1748 .004327, .0045971, .0048857, .0051942, .0055239, .0058766,
1749 .0062538, .0066573, .0070891, .007551, .0080455, .0085747,
1750 .0091412, .0097481, .010397, .011092, .011837, .012638, .013495,
1751 .014415, .01541, .016475, .017621, .018857, .020175, .02162,
1752 .023185, .024876, .02672, .028732, .030916, .033319, .035939,
1753 .038736, .041847, .04524, .048715, .052678, .056977, .061203,
1754 .066184, .07164, .076952, .083477, .090674, .098049, .10697,
1755 .1169, .1277, .14011, .15323, .1684, .18601, .20626, .22831,
1756 .25417, .28407, .31405, .34957, .38823, .41923, .46026, .50409,
1757 .51227, .54805, .57976, .53818, .55056, .557, .46741, .46403,
1758 .4636, .42265, .45166, .49852, .56663, .34306, .17779, .17697,
1759 .18346, .19129, .20014, .21778, .23604, .25649, .28676, .31238,
1760 .33856, .39998, .4288, .46568, .56654, .60786, .64473, .76466,
1761 .7897, .80778, .86443, .85736, .84798, .84157, 1.1385, 1.2446,
1762 1.1923, 1.1552, 1.1338, 1.1266, 1.1292, 1.1431, 1.1683, 1.2059,
1763 1.2521, 1.3069, 1.3712, 1.4471, 1.5275, 1.6165, 1.7145, 1.8189,
1764 1.9359, 2.065, 2.2007, 2.3591, 2.5362, 2.7346, 2.9515, 3.2021,
1765 3.4851, 3.7935, 4.0694, 4.4463, 4.807, 5.2443, 5.7178, 6.2231,
1766 6.4796, 6.9461, 7.4099, 7.3652, 7.7182, 8.048, 7.7373, 8.0363,
1767 8.3855, 8.8044, 9.0257, 9.8574, 10.948, 10.563, 6.8979, 7.0744,
1768 7.4121, 7.7663, 8.1768, 8.6243, 9.1437, 9.7847, 10.182, 10.849,
1769 11.572, 12.602, 13.482, 14.431, 15.907, 16.983, 18.11, 19.884,
1770 21.02, 22.18, 23.355, 24.848, 25.954, 27.13, 30.186, 34.893,
1771 35.682, 36.755, 38.111, 39.703, 41.58, 43.606, 45.868, 48.573,
1772 51.298, 54.291, 57.559, 61.116, 64.964, 69.124, 73.628, 78.471,
1773 83.683, 89.307, 95.341, 101.84, 108.83, 116.36, 124.46, 133.18,
1774 142.57, 152.79, 163.69, 175.43, 188.11, 201.79, 216.55, 232.51,
1775 249.74, 268.38, 288.54, 310.35, 333.97, 359.55, 387.26, 417.3,
1776 449.88, 485.2, 523.54, 565.14, 610.28, 659.31, 712.56, 770.43,
1777 833.36, 901.82, 976.36, 1057.6, 1146.8, 1243.8, 1350., 1466.3,
1778 1593.6, 1732.7, 1884.1, 2049.1, 2228.2, 2421.9, 2629.4, 2853.7,
1779 3094.4, 3351.1, 3622.3, 3829.8, 4123.1, 4438.3, 4777.2, 5144.1,
1780 5545.4, 5990.5, 6404.5, 6996.8, 7687.6, 8482.9, 9349.4, 10203.,
1781 11223., 12358., 13493., 14916., 16416., 18236., 20222., 22501.,
1782 25102., 28358., 31707., 35404., 39538., 43911., 48391., 53193.,
1783 58028., 58082., 61276., 64193., 66294., 67480., 67921., 67423.,
1784 66254., 64341., 51737., 51420., 53072., 58145., 66195., 65358.,
1785 67377., 67869., 53509., 50553., 35737., 32425., 21704., 19974.,
1786 14457., 12142., 16798., 19489., 23049., 27270., 31910., 36457.,
1787 40877., 44748., 47876., 59793., 58626., 55454., 50337., 44893.,
1788 50228., 52216., 54747., 69541., 70455., 81014., 77694., 80533.,
1789 73953., 70927., 65539., 59002., 52281., 45953., 40292., 35360.,
1790 31124., 27478., 24346., 21647., 19308., 17271., 15491., 13927.,
1791 12550., 11331., 10250., 9288.8, 8431.4, 7664.9, 6978.3, 6361.8,
1792 5807.4, 5307.7, 4856.8, 4449., 4079.8, 3744.9, 3440.8, 3164.2,
1793 2912.3, 2682.7, 2473., 2281.4, 2106., 1945.3, 1797.9, 1662.5,
1794 1538.1, 1423.6, 1318.1, 1221., 1131.5, 1049., 972.99, 902.87,
1795 838.01, 777.95, 722.2, 670.44, 622.35, 577.68, 536.21, 497.76,
1796 462.12, 429.13, 398.61, 370.39, 344.29, 320.16, 297.85, 277.2,
1797 258.08, 240.38, 223.97, 208.77, 194.66, 181.58, 169.43, 158.15,
1798 147.67, 137.92, 128.86, 120.44, 112.6, 105.3, 98.499, 92.166,
1799 86.264, 80.763, 75.632, 70.846, 66.381, 62.213, 58.321, 54.685,
1800 51.288, 48.114, 45.145, 42.368, 39.772, 37.341, 35.065, 32.937,
1801 30.943, 29.077, 27.33, 25.693, 24.158, 22.717, 21.367, 20.099,
1802 18.909, 17.792, 16.744, 15.761, 14.838, 13.971, 13.157, 12.393,
1803 11.676, 11.003, 10.369, 9.775, 9.2165, 8.6902, 8.1963, 7.7314,
1804 7.2923, 6.8794, 6.4898, 6.122, 5.7764, 5.4525, 5.1484, 4.8611,
1805 4.5918, 4.3379, 4.0982, 3.8716, 3.6567, 3.4545, 3.2634, 3.0828,
1806 2.9122, 2.7512, 2.5993, 2.4561, 2.3211, 2.1938, 2.0737, 1.9603,
1807 1.8534, 1.7525, 1.6572, 1.5673, 1.4824, 1.4022, 1.3265, 1.2551,
1808 1.1876, 1.1239, 1.0637, 1.0069, .9532, .90248, .85454, .80921,
1809 .76631, .72569, .6872, .65072, .61635, .5836, .55261, .52336,
1810 .49581, .46998, .44559, .42236, .40036, .37929, .35924, .34043,
1811 .32238, .30547, .28931, .27405, .25975, .24616, .23341, .22133,
1812 .20997, .19924, .18917, .17967, .17075, .16211, .15411, .14646,
1813 .13912, .13201, .12509, .11857, .11261, .10698, .10186, .097039,
1814 .092236, .087844, .083443, .07938, .075452, .071564, .067931,
1815 .064389, .061078, .057901, .054921, .052061, .049364, .046789,
1816 .04435, .042044, .039866, .037808, .035863, .034023, .032282,
1817 .030634, .029073, .027595, .026194, .024866, .023608, .022415,
1818 .021283, .02021, .019193, .018228, .017312, .016443, .015619,
1819 .014837, .014094, .01339, .012721, .012086, .011483, .010911,
1820 .010368, .009852, .0093623, .0088972, .0084556, .0080362,
1821 .0076379, .0072596, .0069003, .006559, .0062349, .0059269,
1822 .0056344, .0053565, .0050925, .0048417, .0046034, .004377,
1823 .0041618, .0039575, .0037633, .0035788, .0034034, .0032368,
1824 .0030785, .002928, .0027851, .0026492, .0025201, .0023975,
1825 .0022809, .0021701, .0020649, .0019649, .0018699, .0017796,
1826 .0016938, .0016122, .0015348, .0014612, .0013913, .001325,
1827 .0012619, .0012021, .0011452, .0010913, .0010401, 9.9149e-4,
1828 9.454e-4, 9.0169e-4, 8.6024e-4, 8.2097e-4, 7.8377e-4, 7.4854e-4,
1829 7.1522e-4, 6.8371e-4, 6.5393e-4, 6.2582e-4, 5.9932e-4, 5.7435e-4,
1830 5.5087e-4, 5.2882e-4, 5.0814e-4, 4.8881e-4, 4.7076e-4, 4.5398e-4,
1831 4.3843e-4, 4.2407e-4, 4.109e-4, 3.9888e-4, 3.88e-4, 3.7826e-4,
1832 3.6963e-4, 3.6213e-4, 3.5575e-4, 3.505e-4, 3.464e-4, 3.4346e-4,
1833 3.4173e-4, 3.4125e-4, 3.4206e-4, 3.4424e-4, 3.4787e-4, 3.5303e-4,
1834 3.5986e-4, 3.6847e-4, 3.7903e-4, 3.9174e-4, 4.0681e-4, 4.2455e-4,
1835 4.4527e-4, 4.6942e-4, 4.9637e-4, 5.2698e-4, 5.5808e-4, 5.9514e-4,
1836 6.2757e-4, 6.689e-4, 7.1298e-4, 7.3955e-4, 7.8403e-4, 8.0449e-4,
1837 8.5131e-4, 9.0256e-4, 9.3692e-4, .0010051, .0010846, .0011678,
1838 .001282, .0014016, .0015355, .0016764, .0018272, .0020055,
1839 .0021455, .0023421, .0024615, .0026786, .0028787, .0031259,
1840 .0034046, .0036985, .0040917, .0043902, .0048349, .0049531,
1841 .0052989, .0056148, .0052452, .0053357, .005333, .0045069,
1842 .0043851, .004253, .003738, .0038084, .0039013, .0041505,
1843 .0045372, .0050569, .0054507, .0061267, .0066122, .0072449,
1844 .0078012, .0082651, .0076538, .0076573, .0076806, .0075227,
1845 .0076269, .0063758, .006254, .0067749, .0067909, .0068231,
1846 .0072143, .0072762, .0072954, .007679, .0075107, .0073658,
1847 .0072441, .0071074, .0070378, .007176, .0072472, .0075844,
1848 .0079291, .008412, .0090165, .010688, .011535, .012375, .013166,
1849 .013895, .015567, .016011, .016392, .016737, .017043, .017731,
1850 .018031, .018419, .018877, .019474, .019868, .020604, .021538,
1851 .022653, .023869, .025288, .026879, .028547, .030524, .03274,
1852 .035132, .03769, .040567, .043793, .047188, .049962, .053542,
1853 .057205, .060776, .061489, .064419, .067124, .065945, .068487,
1854 .071209, .074783, .077039, .082444, .08902, .09692, .10617,
1855 .11687, .12952, .12362, .13498, .14412, .15492, .16519, .1744,
1856 .17096, .17714, .18208, .17363, .17813, .18564, .18295, .19045,
1857 .20252, .20815, .21844, .22929, .24229, .25321, .26588, .2797,
1858 .29465, .31136, .32961, .36529, .38486, .41027, .43694, .4667,
1859 .49943, .54542, .58348, .62303, .67633, .71755, .76054, .81371,
1860 .85934, .90841, .96438, 1.0207, 1.0821, 1.1491, 1.2226, 1.3018,
1861 1.388, 1.4818, 1.5835, 1.6939, 1.8137, 1.9435, 2.0843, 2.237,
1862 2.4026, 2.5818, 2.7767, 2.9885, 3.2182, 3.4679, 3.7391, 4.0349,
1863 4.3554, 4.7053, 5.0849, 5.4986, 5.9436, 6.4294, 6.9598, 7.5203,
1864 8.143, 8.8253, 9.5568, 10.371, 11.267, 12.233, 13.31, 14.357,
1865 15.598, 16.93, 18.358, 19.849, 21.408, 23.04, 24.706, 26.409,
1866 28.153, 28.795, 30.549, 32.43, 34.49, 36.027, 38.955, 42.465,
1867 46.565, 50.875, 55.378, 59.002, 63.882, 67.949, 73.693, 80.095,
1868 86.403, 94.264, 102.65, 112.37, 123.3, 135.54, 149.14, 163.83,
1869 179.17, 196.89, 217.91, 240.94, 264.13, 292.39, 324.83, 358.21,
1870 397.16, 440.5, 488.6, 541.04, 595.3, 650.43, 652.03, 688.74,
1871 719.47, 743.54, 757.68, 762.35, 756.43, 741.42, 595.43, 580.97,
1872 580.83, 605.68, 667.88, 764.49, 759.93, 789.12, 798.17, 645.66,
1873 615.65, 455.05, 421.09, 306.45, 289.14, 235.7, 215.52, 274.57,
1874 316.53, 357.73, 409.89, 465.06, 521.84, 579.02, 630.64, 794.46,
1875 813., 813.56, 796.25, 761.57, 727.97, 812.14, 866.75, 932.5,
1876 1132.8, 1194.8, 1362.2, 1387.2, 1482.3, 1479.7, 1517.9, 1533.1,
1877 1534.2, 1523.3, 1522.5, 1515.5, 1505.2, 1486.5, 1454., 1412.,
1878 1358.8, 1107.8, 1060.9, 1033.5, 1048.2, 1122.4, 1248.9, 1227.1,
1879 1255.4, 1058.9, 1020.7, 970.59, 715.24, 512.56, 468.47, 349.3,
1880 338.26, 299.22, 301.26, 332.38, 382.08, 445.49, 515.87, 590.85,
1881 662.3, 726.05, 955.59, 964.11, 945.17, 891.48, 807.11, 720.9,
1882 803.36, 834.46, 1073.9, 1107.1, 1123.6, 1296., 1393.7, 1303.1,
1883 1284.3, 1161.8, 1078.8, 976.13, 868.72, 767.4, 674.72, 593.73,
1884 523.12, 462.24, 409.75, 364.34, 325., 290.73, 260.76, 234.46,
1885 211.28, 190.78, 172.61, 156.44, 142.01, 129.12, 117.57, 107.2,
1886 97.877, 89.47, 81.882, 75.021, 68.807, 63.171, 58.052, 53.396,
1887 49.155, 45.288, 41.759, 38.531, 35.576, 32.868, 30.384, 28.102,
1888 26.003, 24.071, 22.293, 20.655, 19.147, 17.756, 16.476, 15.292,
1889 14.198, 13.183, 12.241, 11.367, 10.554, 9.7989, 9.0978, 8.4475,
1890 7.845, 7.2868, 6.7704, 6.2927, 5.8508, 5.4421, 5.064, 4.714,
1891 4.3902, 4.0902, 3.8121, 3.5543, 3.315, 3.093, 2.8869, 2.6953,
1892 2.5172, 2.3517, 2.1977, 2.0544, 1.9211, 1.7969, 1.6812, 1.5735,
1893 1.4731, 1.3794, 1.2921, 1.2107, 1.1346, 1.0637, .99744, .93554,
1894 .87771, .82368, .77313, .72587, .6816, .64014, .60134, .565,
1895 .53086, .49883, .46881, .44074, .4144, .38979, .36679, .34513,
1896 .32474, .30552, .28751, .27045, .25458, .23976, .22584, .21278,
1897 .20051, .18899, .17815, .16801, .15846, .14954, .14117, .13328,
1898 .12584
1899 };
1900
1901 /* Get CO2 continuum absorption... */
1902 const double xw = nu / 2 + 1;
1903 if (xw >= 1 && xw < 2001) {
1904 const int iw = (int) xw;
1905 const double dw = xw - iw;
1906 const double ew = 1 - dw;
1907 const double cw296 = ew * co2296[iw - 1] + dw * co2296[iw];
1908 const double cw260 = ew * co2260[iw - 1] + dw * co2260[iw];
1909 const double cw230 = ew * co2230[iw - 1] + dw * co2230[iw];
1910 const double dt230 = t - 230;
1911 const double dt260 = t - 260;
1912 const double dt296 = t - 296;
1913 const double ctw =
1914 dt260 * 5.050505e-4 * dt296 * cw230 -
1915 dt230 * 9.259259e-4 * dt296 * cw260 +
1916 dt230 * 4.208754e-4 * dt260 * cw296;
1917 return u / NA / 1000 * p / P0 * ctw;
1918 } else
1919 return 0;
1920}
1921
1922/*****************************************************************************/
1923
1924double ctmh2o(
1925 const double nu,
1926 const double p,
1927 const double t,
1928 const double q,
1929 const double u) {
1930
1931 static const double h2o296[2001] =
1932 { .17, .1695, .172, .168, .1687, .1624, .1606,
1933 .1508, .1447, .1344, .1214, .1133, .1009, .09217, .08297, .06989,
1934 .06513, .05469, .05056, .04417, .03779, .03484, .02994, .0272,
1935 .02325, .02063, .01818, .01592, .01405, .01251, .0108, .009647,
1936 .008424, .007519, .006555, .00588, .005136, .004511, .003989,
1937 .003509, .003114, .00274, .002446, .002144, .001895, .001676,
1938 .001486, .001312, .001164, .001031, 9.129e-4, 8.106e-4, 7.213e-4,
1939 6.4e-4, 5.687e-4, 5.063e-4, 4.511e-4, 4.029e-4, 3.596e-4,
1940 3.22e-4, 2.889e-4, 2.597e-4, 2.337e-4, 2.108e-4, 1.907e-4,
1941 1.728e-4, 1.57e-4, 1.43e-4, 1.305e-4, 1.195e-4, 1.097e-4,
1942 1.009e-4, 9.307e-5, 8.604e-5, 7.971e-5, 7.407e-5, 6.896e-5,
1943 6.433e-5, 6.013e-5, 5.631e-5, 5.283e-5, 4.963e-5, 4.669e-5,
1944 4.398e-5, 4.148e-5, 3.917e-5, 3.702e-5, 3.502e-5, 3.316e-5,
1945 3.142e-5, 2.978e-5, 2.825e-5, 2.681e-5, 2.546e-5, 2.419e-5,
1946 2.299e-5, 2.186e-5, 2.079e-5, 1.979e-5, 1.884e-5, 1.795e-5,
1947 1.711e-5, 1.633e-5, 1.559e-5, 1.49e-5, 1.426e-5, 1.367e-5,
1948 1.312e-5, 1.263e-5, 1.218e-5, 1.178e-5, 1.143e-5, 1.112e-5,
1949 1.088e-5, 1.07e-5, 1.057e-5, 1.05e-5, 1.051e-5, 1.059e-5,
1950 1.076e-5, 1.1e-5, 1.133e-5, 1.18e-5, 1.237e-5, 1.308e-5,
1951 1.393e-5, 1.483e-5, 1.614e-5, 1.758e-5, 1.93e-5, 2.123e-5,
1952 2.346e-5, 2.647e-5, 2.93e-5, 3.279e-5, 3.745e-5, 4.152e-5,
1953 4.813e-5, 5.477e-5, 6.203e-5, 7.331e-5, 8.056e-5, 9.882e-5,
1954 1.05e-4, 1.21e-4, 1.341e-4, 1.572e-4, 1.698e-4, 1.968e-4,
1955 2.175e-4, 2.431e-4, 2.735e-4, 2.867e-4, 3.19e-4, 3.371e-4,
1956 3.554e-4, 3.726e-4, 3.837e-4, 3.878e-4, 3.864e-4, 3.858e-4,
1957 3.841e-4, 3.852e-4, 3.815e-4, 3.762e-4, 3.618e-4, 3.579e-4,
1958 3.45e-4, 3.202e-4, 3.018e-4, 2.785e-4, 2.602e-4, 2.416e-4,
1959 2.097e-4, 1.939e-4, 1.689e-4, 1.498e-4, 1.308e-4, 1.17e-4,
1960 1.011e-4, 9.237e-5, 7.909e-5, 7.006e-5, 6.112e-5, 5.401e-5,
1961 4.914e-5, 4.266e-5, 3.963e-5, 3.316e-5, 3.037e-5, 2.598e-5,
1962 2.294e-5, 2.066e-5, 1.813e-5, 1.583e-5, 1.423e-5, 1.247e-5,
1963 1.116e-5, 9.76e-6, 8.596e-6, 7.72e-6, 6.825e-6, 6.108e-6,
1964 5.366e-6, 4.733e-6, 4.229e-6, 3.731e-6, 3.346e-6, 2.972e-6,
1965 2.628e-6, 2.356e-6, 2.102e-6, 1.878e-6, 1.678e-6, 1.507e-6,
1966 1.348e-6, 1.21e-6, 1.089e-6, 9.806e-7, 8.857e-7, 8.004e-7,
1967 7.261e-7, 6.599e-7, 6.005e-7, 5.479e-7, 5.011e-7, 4.595e-7,
1968 4.219e-7, 3.885e-7, 3.583e-7, 3.314e-7, 3.071e-7, 2.852e-7,
1969 2.654e-7, 2.474e-7, 2.311e-7, 2.162e-7, 2.026e-7, 1.902e-7,
1970 1.788e-7, 1.683e-7, 1.587e-7, 1.497e-7, 1.415e-7, 1.338e-7,
1971 1.266e-7, 1.2e-7, 1.138e-7, 1.08e-7, 1.027e-7, 9.764e-8,
1972 9.296e-8, 8.862e-8, 8.458e-8, 8.087e-8, 7.744e-8, 7.429e-8,
1973 7.145e-8, 6.893e-8, 6.664e-8, 6.468e-8, 6.322e-8, 6.162e-8,
1974 6.07e-8, 5.992e-8, 5.913e-8, 5.841e-8, 5.796e-8, 5.757e-8,
1975 5.746e-8, 5.731e-8, 5.679e-8, 5.577e-8, 5.671e-8, 5.656e-8,
1976 5.594e-8, 5.593e-8, 5.602e-8, 5.62e-8, 5.693e-8, 5.725e-8,
1977 5.858e-8, 6.037e-8, 6.249e-8, 6.535e-8, 6.899e-8, 7.356e-8,
1978 7.918e-8, 8.618e-8, 9.385e-8, 1.039e-7, 1.158e-7, 1.29e-7,
1979 1.437e-7, 1.65e-7, 1.871e-7, 2.121e-7, 2.427e-7, 2.773e-7,
1980 3.247e-7, 3.677e-7, 4.037e-7, 4.776e-7, 5.101e-7, 6.214e-7,
1981 6.936e-7, 7.581e-7, 8.486e-7, 9.355e-7, 9.942e-7, 1.063e-6,
1982 1.123e-6, 1.191e-6, 1.215e-6, 1.247e-6, 1.26e-6, 1.271e-6,
1983 1.284e-6, 1.317e-6, 1.323e-6, 1.349e-6, 1.353e-6, 1.362e-6,
1984 1.344e-6, 1.329e-6, 1.336e-6, 1.327e-6, 1.325e-6, 1.359e-6,
1985 1.374e-6, 1.415e-6, 1.462e-6, 1.526e-6, 1.619e-6, 1.735e-6,
1986 1.863e-6, 2.034e-6, 2.265e-6, 2.482e-6, 2.756e-6, 3.103e-6,
1987 3.466e-6, 3.832e-6, 4.378e-6, 4.913e-6, 5.651e-6, 6.311e-6,
1988 7.169e-6, 8.057e-6, 9.253e-6, 1.047e-5, 1.212e-5, 1.36e-5,
1989 1.569e-5, 1.776e-5, 2.02e-5, 2.281e-5, 2.683e-5, 2.994e-5,
1990 3.488e-5, 3.896e-5, 4.499e-5, 5.175e-5, 6.035e-5, 6.34e-5,
1991 7.281e-5, 7.923e-5, 8.348e-5, 9.631e-5, 1.044e-4, 1.102e-4,
1992 1.176e-4, 1.244e-4, 1.283e-4, 1.326e-4, 1.4e-4, 1.395e-4,
1993 1.387e-4, 1.363e-4, 1.314e-4, 1.241e-4, 1.228e-4, 1.148e-4,
1994 1.086e-4, 1.018e-4, 8.89e-5, 8.316e-5, 7.292e-5, 6.452e-5,
1995 5.625e-5, 5.045e-5, 4.38e-5, 3.762e-5, 3.29e-5, 2.836e-5,
1996 2.485e-5, 2.168e-5, 1.895e-5, 1.659e-5, 1.453e-5, 1.282e-5,
1997 1.132e-5, 1.001e-5, 8.836e-6, 7.804e-6, 6.922e-6, 6.116e-6,
1998 5.429e-6, 4.824e-6, 4.278e-6, 3.788e-6, 3.371e-6, 2.985e-6,
1999 2.649e-6, 2.357e-6, 2.09e-6, 1.858e-6, 1.647e-6, 1.462e-6,
2000 1.299e-6, 1.155e-6, 1.028e-6, 9.142e-7, 8.132e-7, 7.246e-7,
2001 6.451e-7, 5.764e-7, 5.151e-7, 4.603e-7, 4.121e-7, 3.694e-7,
2002 3.318e-7, 2.985e-7, 2.69e-7, 2.428e-7, 2.197e-7, 1.992e-7,
2003 1.81e-7, 1.649e-7, 1.506e-7, 1.378e-7, 1.265e-7, 1.163e-7,
2004 1.073e-7, 9.918e-8, 9.191e-8, 8.538e-8, 7.949e-8, 7.419e-8,
2005 6.94e-8, 6.508e-8, 6.114e-8, 5.761e-8, 5.437e-8, 5.146e-8,
2006 4.89e-8, 4.636e-8, 4.406e-8, 4.201e-8, 4.015e-8, 3.84e-8,
2007 3.661e-8, 3.51e-8, 3.377e-8, 3.242e-8, 3.13e-8, 3.015e-8,
2008 2.918e-8, 2.83e-8, 2.758e-8, 2.707e-8, 2.656e-8, 2.619e-8,
2009 2.609e-8, 2.615e-8, 2.63e-8, 2.675e-8, 2.745e-8, 2.842e-8,
2010 2.966e-8, 3.125e-8, 3.318e-8, 3.565e-8, 3.85e-8, 4.191e-8,
2011 4.59e-8, 5.059e-8, 5.607e-8, 6.239e-8, 6.958e-8, 7.796e-8,
2012 8.773e-8, 9.88e-8, 1.114e-7, 1.258e-7, 1.422e-7, 1.61e-7,
2013 1.822e-7, 2.06e-7, 2.337e-7, 2.645e-7, 2.996e-7, 3.393e-7,
2014 3.843e-7, 4.363e-7, 4.935e-7, 5.607e-7, 6.363e-7, 7.242e-7,
2015 8.23e-7, 9.411e-7, 1.071e-6, 1.232e-6, 1.402e-6, 1.6e-6, 1.82e-6,
2016 2.128e-6, 2.386e-6, 2.781e-6, 3.242e-6, 3.653e-6, 4.323e-6,
2017 4.747e-6, 5.321e-6, 5.919e-6, 6.681e-6, 7.101e-6, 7.983e-6,
2018 8.342e-6, 8.741e-6, 9.431e-6, 9.952e-6, 1.026e-5, 1.055e-5,
2019 1.095e-5, 1.095e-5, 1.087e-5, 1.056e-5, 1.026e-5, 9.715e-6,
2020 9.252e-6, 8.452e-6, 7.958e-6, 7.268e-6, 6.295e-6, 6.003e-6, 5e-6,
2021 4.591e-6, 3.983e-6, 3.479e-6, 3.058e-6, 2.667e-6, 2.293e-6,
2022 1.995e-6, 1.747e-6, 1.517e-6, 1.335e-6, 1.165e-6, 1.028e-6,
2023 9.007e-7, 7.956e-7, 7.015e-7, 6.192e-7, 5.491e-7, 4.859e-7,
2024 4.297e-7, 3.799e-7, 3.38e-7, 3.002e-7, 2.659e-7, 2.366e-7,
2025 2.103e-7, 1.861e-7, 1.655e-7, 1.469e-7, 1.309e-7, 1.162e-7,
2026 1.032e-7, 9.198e-8, 8.181e-8, 7.294e-8, 6.516e-8, 5.787e-8,
2027 5.163e-8, 4.612e-8, 4.119e-8, 3.695e-8, 3.308e-8, 2.976e-8,
2028 2.67e-8, 2.407e-8, 2.171e-8, 1.965e-8, 1.78e-8, 1.617e-8,
2029 1.47e-8, 1.341e-8, 1.227e-8, 1.125e-8, 1.033e-8, 9.524e-9,
2030 8.797e-9, 8.162e-9, 7.565e-9, 7.04e-9, 6.56e-9, 6.129e-9,
2031 5.733e-9, 5.376e-9, 5.043e-9, 4.75e-9, 4.466e-9, 4.211e-9,
2032 3.977e-9, 3.759e-9, 3.558e-9, 3.373e-9, 3.201e-9, 3.043e-9,
2033 2.895e-9, 2.76e-9, 2.635e-9, 2.518e-9, 2.411e-9, 2.314e-9,
2034 2.23e-9, 2.151e-9, 2.087e-9, 2.035e-9, 1.988e-9, 1.946e-9,
2035 1.927e-9, 1.916e-9, 1.916e-9, 1.933e-9, 1.966e-9, 2.018e-9,
2036 2.09e-9, 2.182e-9, 2.299e-9, 2.442e-9, 2.623e-9, 2.832e-9,
2037 3.079e-9, 3.368e-9, 3.714e-9, 4.104e-9, 4.567e-9, 5.091e-9,
2038 5.701e-9, 6.398e-9, 7.194e-9, 8.127e-9, 9.141e-9, 1.035e-8,
2039 1.177e-8, 1.338e-8, 1.508e-8, 1.711e-8, 1.955e-8, 2.216e-8,
2040 2.534e-8, 2.871e-8, 3.291e-8, 3.711e-8, 4.285e-8, 4.868e-8,
2041 5.509e-8, 6.276e-8, 7.262e-8, 8.252e-8, 9.4e-8, 1.064e-7,
2042 1.247e-7, 1.411e-7, 1.626e-7, 1.827e-7, 2.044e-7, 2.284e-7,
2043 2.452e-7, 2.854e-7, 3.026e-7, 3.278e-7, 3.474e-7, 3.693e-7,
2044 3.93e-7, 4.104e-7, 4.22e-7, 4.439e-7, 4.545e-7, 4.778e-7,
2045 4.812e-7, 5.018e-7, 4.899e-7, 5.075e-7, 5.073e-7, 5.171e-7,
2046 5.131e-7, 5.25e-7, 5.617e-7, 5.846e-7, 6.239e-7, 6.696e-7,
2047 7.398e-7, 8.073e-7, 9.15e-7, 1.009e-6, 1.116e-6, 1.264e-6,
2048 1.439e-6, 1.644e-6, 1.856e-6, 2.147e-6, 2.317e-6, 2.713e-6,
2049 2.882e-6, 2.99e-6, 3.489e-6, 3.581e-6, 4.033e-6, 4.26e-6,
2050 4.543e-6, 4.84e-6, 4.826e-6, 5.013e-6, 5.252e-6, 5.277e-6,
2051 5.306e-6, 5.236e-6, 5.123e-6, 5.171e-6, 4.843e-6, 4.615e-6,
2052 4.385e-6, 3.97e-6, 3.693e-6, 3.231e-6, 2.915e-6, 2.495e-6,
2053 2.144e-6, 1.91e-6, 1.639e-6, 1.417e-6, 1.226e-6, 1.065e-6,
2054 9.29e-7, 8.142e-7, 7.161e-7, 6.318e-7, 5.581e-7, 4.943e-7,
2055 4.376e-7, 3.884e-7, 3.449e-7, 3.06e-7, 2.712e-7, 2.412e-7,
2056 2.139e-7, 1.903e-7, 1.689e-7, 1.499e-7, 1.331e-7, 1.183e-7,
2057 1.05e-7, 9.362e-8, 8.306e-8, 7.403e-8, 6.578e-8, 5.853e-8,
2058 5.216e-8, 4.632e-8, 4.127e-8, 3.678e-8, 3.279e-8, 2.923e-8,
2059 2.612e-8, 2.339e-8, 2.094e-8, 1.877e-8, 1.686e-8, 1.516e-8,
2060 1.366e-8, 1.234e-8, 1.114e-8, 1.012e-8, 9.182e-9, 8.362e-9,
2061 7.634e-9, 6.981e-9, 6.406e-9, 5.888e-9, 5.428e-9, 5.021e-9,
2062 4.65e-9, 4.326e-9, 4.033e-9, 3.77e-9, 3.536e-9, 3.327e-9,
2063 3.141e-9, 2.974e-9, 2.825e-9, 2.697e-9, 2.584e-9, 2.488e-9,
2064 2.406e-9, 2.34e-9, 2.292e-9, 2.259e-9, 2.244e-9, 2.243e-9,
2065 2.272e-9, 2.31e-9, 2.378e-9, 2.454e-9, 2.618e-9, 2.672e-9,
2066 2.831e-9, 3.05e-9, 3.225e-9, 3.425e-9, 3.677e-9, 3.968e-9,
2067 4.221e-9, 4.639e-9, 4.96e-9, 5.359e-9, 5.649e-9, 6.23e-9,
2068 6.716e-9, 7.218e-9, 7.746e-9, 7.988e-9, 8.627e-9, 8.999e-9,
2069 9.442e-9, 9.82e-9, 1.015e-8, 1.06e-8, 1.079e-8, 1.109e-8,
2070 1.137e-8, 1.186e-8, 1.18e-8, 1.187e-8, 1.194e-8, 1.192e-8,
2071 1.224e-8, 1.245e-8, 1.246e-8, 1.318e-8, 1.377e-8, 1.471e-8,
2072 1.582e-8, 1.713e-8, 1.853e-8, 2.063e-8, 2.27e-8, 2.567e-8,
2073 2.891e-8, 3.264e-8, 3.744e-8, 4.286e-8, 4.915e-8, 5.623e-8,
2074 6.336e-8, 7.293e-8, 8.309e-8, 9.319e-8, 1.091e-7, 1.243e-7,
2075 1.348e-7, 1.449e-7, 1.62e-7, 1.846e-7, 1.937e-7, 2.04e-7,
2076 2.179e-7, 2.298e-7, 2.433e-7, 2.439e-7, 2.464e-7, 2.611e-7,
2077 2.617e-7, 2.582e-7, 2.453e-7, 2.401e-7, 2.349e-7, 2.203e-7,
2078 2.066e-7, 1.939e-7, 1.78e-7, 1.558e-7, 1.391e-7, 1.203e-7,
2079 1.048e-7, 9.464e-8, 8.306e-8, 7.239e-8, 6.317e-8, 5.52e-8,
2080 4.847e-8, 4.282e-8, 3.796e-8, 3.377e-8, 2.996e-8, 2.678e-8,
2081 2.4e-8, 2.134e-8, 1.904e-8, 1.705e-8, 1.523e-8, 1.35e-8,
2082 1.204e-8, 1.07e-8, 9.408e-9, 8.476e-9, 7.47e-9, 6.679e-9,
2083 5.929e-9, 5.267e-9, 4.711e-9, 4.172e-9, 3.761e-9, 3.288e-9,
2084 2.929e-9, 2.609e-9, 2.315e-9, 2.042e-9, 1.844e-9, 1.64e-9,
2085 1.47e-9, 1.31e-9, 1.176e-9, 1.049e-9, 9.377e-10, 8.462e-10,
2086 7.616e-10, 6.854e-10, 6.191e-10, 5.596e-10, 5.078e-10, 4.611e-10,
2087 4.197e-10, 3.83e-10, 3.505e-10, 3.215e-10, 2.956e-10, 2.726e-10,
2088 2.521e-10, 2.338e-10, 2.173e-10, 2.026e-10, 1.895e-10, 1.777e-10,
2089 1.672e-10, 1.579e-10, 1.496e-10, 1.423e-10, 1.358e-10, 1.302e-10,
2090 1.254e-10, 1.216e-10, 1.187e-10, 1.163e-10, 1.147e-10, 1.145e-10,
2091 1.15e-10, 1.17e-10, 1.192e-10, 1.25e-10, 1.298e-10, 1.345e-10,
2092 1.405e-10, 1.538e-10, 1.648e-10, 1.721e-10, 1.872e-10, 1.968e-10,
2093 2.089e-10, 2.172e-10, 2.317e-10, 2.389e-10, 2.503e-10, 2.585e-10,
2094 2.686e-10, 2.8e-10, 2.895e-10, 3.019e-10, 3.037e-10, 3.076e-10,
2095 3.146e-10, 3.198e-10, 3.332e-10, 3.397e-10, 3.54e-10, 3.667e-10,
2096 3.895e-10, 4.071e-10, 4.565e-10, 4.983e-10, 5.439e-10, 5.968e-10,
2097 6.676e-10, 7.456e-10, 8.405e-10, 9.478e-10, 1.064e-9, 1.218e-9,
2098 1.386e-9, 1.581e-9, 1.787e-9, 2.032e-9, 2.347e-9, 2.677e-9,
2099 3.008e-9, 3.544e-9, 4.056e-9, 4.687e-9, 5.331e-9, 6.227e-9,
2100 6.854e-9, 8.139e-9, 8.945e-9, 9.865e-9, 1.125e-8, 1.178e-8,
2101 1.364e-8, 1.436e-8, 1.54e-8, 1.672e-8, 1.793e-8, 1.906e-8,
2102 2.036e-8, 2.144e-8, 2.292e-8, 2.371e-8, 2.493e-8, 2.606e-8,
2103 2.706e-8, 2.866e-8, 3.036e-8, 3.136e-8, 3.405e-8, 3.665e-8,
2104 3.837e-8, 4.229e-8, 4.748e-8, 5.32e-8, 5.763e-8, 6.677e-8,
2105 7.216e-8, 7.716e-8, 8.958e-8, 9.419e-8, 1.036e-7, 1.108e-7,
2106 1.189e-7, 1.246e-7, 1.348e-7, 1.31e-7, 1.361e-7, 1.364e-7,
2107 1.363e-7, 1.343e-7, 1.293e-7, 1.254e-7, 1.235e-7, 1.158e-7,
2108 1.107e-7, 9.961e-8, 9.011e-8, 7.91e-8, 6.916e-8, 6.338e-8,
2109 5.564e-8, 4.827e-8, 4.198e-8, 3.695e-8, 3.276e-8, 2.929e-8,
2110 2.633e-8, 2.391e-8, 2.192e-8, 2.021e-8, 1.89e-8, 1.772e-8,
2111 1.667e-8, 1.603e-8, 1.547e-8, 1.537e-8, 1.492e-8, 1.515e-8,
2112 1.479e-8, 1.45e-8, 1.513e-8, 1.495e-8, 1.529e-8, 1.565e-8,
2113 1.564e-8, 1.553e-8, 1.569e-8, 1.584e-8, 1.57e-8, 1.538e-8,
2114 1.513e-8, 1.472e-8, 1.425e-8, 1.349e-8, 1.328e-8, 1.249e-8,
2115 1.17e-8, 1.077e-8, 9.514e-9, 8.614e-9, 7.46e-9, 6.621e-9,
2116 5.775e-9, 5.006e-9, 4.308e-9, 3.747e-9, 3.24e-9, 2.84e-9,
2117 2.481e-9, 2.184e-9, 1.923e-9, 1.71e-9, 1.504e-9, 1.334e-9,
2118 1.187e-9, 1.053e-9, 9.367e-10, 8.306e-10, 7.419e-10, 6.63e-10,
2119 5.918e-10, 5.277e-10, 4.717e-10, 4.222e-10, 3.783e-10, 3.39e-10,
2120 3.036e-10, 2.729e-10, 2.455e-10, 2.211e-10, 1.995e-10, 1.804e-10,
2121 1.635e-10, 1.485e-10, 1.355e-10, 1.24e-10, 1.139e-10, 1.051e-10,
2122 9.757e-11, 9.114e-11, 8.577e-11, 8.139e-11, 7.792e-11, 7.52e-11,
2123 7.39e-11, 7.311e-11, 7.277e-11, 7.482e-11, 7.698e-11, 8.162e-11,
2124 8.517e-11, 8.968e-11, 9.905e-11, 1.075e-10, 1.187e-10, 1.291e-10,
2125 1.426e-10, 1.573e-10, 1.734e-10, 1.905e-10, 2.097e-10, 2.28e-10,
2126 2.473e-10, 2.718e-10, 2.922e-10, 3.128e-10, 3.361e-10, 3.641e-10,
2127 3.91e-10, 4.196e-10, 4.501e-10, 4.932e-10, 5.258e-10, 5.755e-10,
2128 6.253e-10, 6.664e-10, 7.344e-10, 7.985e-10, 8.877e-10, 1.005e-9,
2129 1.118e-9, 1.251e-9, 1.428e-9, 1.61e-9, 1.888e-9, 2.077e-9,
2130 2.331e-9, 2.751e-9, 3.061e-9, 3.522e-9, 3.805e-9, 4.181e-9,
2131 4.575e-9, 5.167e-9, 5.634e-9, 6.007e-9, 6.501e-9, 6.829e-9,
2132 7.211e-9, 7.262e-9, 7.696e-9, 7.832e-9, 7.799e-9, 7.651e-9,
2133 7.304e-9, 7.15e-9, 6.977e-9, 6.603e-9, 6.209e-9, 5.69e-9,
2134 5.432e-9, 4.764e-9, 4.189e-9, 3.64e-9, 3.203e-9, 2.848e-9,
2135 2.51e-9, 2.194e-9, 1.946e-9, 1.75e-9, 1.567e-9, 1.426e-9,
2136 1.302e-9, 1.197e-9, 1.109e-9, 1.035e-9, 9.719e-10, 9.207e-10,
2137 8.957e-10, 8.578e-10, 8.262e-10, 8.117e-10, 7.987e-10, 7.875e-10,
2138 7.741e-10, 7.762e-10, 7.537e-10, 7.424e-10, 7.474e-10, 7.294e-10,
2139 7.216e-10, 7.233e-10, 7.075e-10, 6.892e-10, 6.618e-10, 6.314e-10,
2140 6.208e-10, 5.689e-10, 5.55e-10, 4.984e-10, 4.6e-10, 4.078e-10,
2141 3.879e-10, 3.459e-10, 2.982e-10, 2.626e-10, 2.329e-10, 1.988e-10,
2142 1.735e-10, 1.487e-10, 1.297e-10, 1.133e-10, 9.943e-11, 8.736e-11,
2143 7.726e-11, 6.836e-11, 6.053e-11, 5.384e-11, 4.789e-11, 4.267e-11,
2144 3.804e-11, 3.398e-11, 3.034e-11, 2.71e-11, 2.425e-11, 2.173e-11,
2145 1.95e-11, 1.752e-11, 1.574e-11, 1.418e-11, 1.278e-11, 1.154e-11,
2146 1.044e-11, 9.463e-12, 8.602e-12, 7.841e-12, 7.171e-12, 6.584e-12,
2147 6.073e-12, 5.631e-12, 5.254e-12, 4.937e-12, 4.679e-12, 4.476e-12,
2148 4.328e-12, 4.233e-12, 4.194e-12, 4.211e-12, 4.286e-12, 4.424e-12,
2149 4.628e-12, 4.906e-12, 5.262e-12, 5.708e-12, 6.254e-12, 6.914e-12,
2150 7.714e-12, 8.677e-12, 9.747e-12, 1.101e-11, 1.256e-11, 1.409e-11,
2151 1.597e-11, 1.807e-11, 2.034e-11, 2.316e-11, 2.622e-11, 2.962e-11,
2152 3.369e-11, 3.819e-11, 4.329e-11, 4.932e-11, 5.589e-11, 6.364e-11,
2153 7.284e-11, 8.236e-11, 9.447e-11, 1.078e-10, 1.229e-10, 1.417e-10,
2154 1.614e-10, 1.843e-10, 2.107e-10, 2.406e-10, 2.728e-10, 3.195e-10,
2155 3.595e-10, 4.153e-10, 4.736e-10, 5.41e-10, 6.088e-10, 6.769e-10,
2156 7.691e-10, 8.545e-10, 9.621e-10, 1.047e-9, 1.161e-9, 1.296e-9,
2157 1.424e-9, 1.576e-9, 1.739e-9, 1.893e-9, 2.08e-9, 2.336e-9,
2158 2.604e-9, 2.76e-9, 3.001e-9, 3.365e-9, 3.55e-9, 3.895e-9,
2159 4.183e-9, 4.614e-9, 4.846e-9, 5.068e-9, 5.427e-9, 5.541e-9,
2160 5.864e-9, 5.997e-9, 5.997e-9, 6.061e-9, 5.944e-9, 5.855e-9,
2161 5.661e-9, 5.523e-9, 5.374e-9, 4.94e-9, 4.688e-9, 4.17e-9,
2162 3.913e-9, 3.423e-9, 2.997e-9, 2.598e-9, 2.253e-9, 1.946e-9,
2163 1.71e-9, 1.507e-9, 1.336e-9, 1.19e-9, 1.068e-9, 9.623e-10,
2164 8.772e-10, 8.007e-10, 7.42e-10, 6.884e-10, 6.483e-10, 6.162e-10,
2165 5.922e-10, 5.688e-10, 5.654e-10, 5.637e-10, 5.701e-10, 5.781e-10,
2166 5.874e-10, 6.268e-10, 6.357e-10, 6.525e-10, 7.137e-10, 7.441e-10,
2167 8.024e-10, 8.485e-10, 9.143e-10, 9.536e-10, 9.717e-10, 1.018e-9,
2168 1.042e-9, 1.054e-9, 1.092e-9, 1.079e-9, 1.064e-9, 1.043e-9,
2169 1.02e-9, 9.687e-10, 9.273e-10, 9.208e-10, 9.068e-10, 7.687e-10,
2170 7.385e-10, 6.595e-10, 5.87e-10, 5.144e-10, 4.417e-10, 3.804e-10,
2171 3.301e-10, 2.866e-10, 2.509e-10, 2.202e-10, 1.947e-10, 1.719e-10,
2172 1.525e-10, 1.361e-10, 1.21e-10, 1.084e-10, 9.8e-11, 8.801e-11,
2173 7.954e-11, 7.124e-11, 6.335e-11, 5.76e-11, 5.132e-11, 4.601e-11,
2174 4.096e-11, 3.657e-11, 3.25e-11, 2.909e-11, 2.587e-11, 2.297e-11,
2175 2.05e-11, 1.828e-11, 1.632e-11, 1.462e-11, 1.314e-11, 1.185e-11,
2176 1.073e-11, 9.76e-12, 8.922e-12, 8.206e-12, 7.602e-12, 7.1e-12,
2177 6.694e-12, 6.378e-12, 6.149e-12, 6.004e-12, 5.941e-12, 5.962e-12,
2178 6.069e-12, 6.265e-12, 6.551e-12, 6.935e-12, 7.457e-12, 8.074e-12,
2179 8.811e-12, 9.852e-12, 1.086e-11, 1.207e-11, 1.361e-11, 1.553e-11,
2180 1.737e-11, 1.93e-11, 2.175e-11, 2.41e-11, 2.706e-11, 3.023e-11,
2181 3.313e-11, 3.657e-11, 4.118e-11, 4.569e-11, 5.025e-11, 5.66e-11,
2182 6.231e-11, 6.881e-11, 7.996e-11, 8.526e-11, 9.694e-11, 1.106e-10,
2183 1.222e-10, 1.355e-10, 1.525e-10, 1.775e-10, 1.924e-10, 2.181e-10,
2184 2.379e-10, 2.662e-10, 2.907e-10, 3.154e-10, 3.366e-10, 3.579e-10,
2185 3.858e-10, 4.046e-10, 4.196e-10, 4.166e-10, 4.457e-10, 4.466e-10,
2186 4.404e-10, 4.337e-10, 4.15e-10, 4.083e-10, 3.91e-10, 3.723e-10,
2187 3.514e-10, 3.303e-10, 2.847e-10, 2.546e-10, 2.23e-10, 1.994e-10,
2188 1.733e-10, 1.488e-10, 1.297e-10, 1.144e-10, 1.004e-10, 8.741e-11,
2189 7.928e-11, 7.034e-11, 6.323e-11, 5.754e-11, 5.25e-11, 4.85e-11,
2190 4.502e-11, 4.286e-11, 4.028e-11, 3.899e-11, 3.824e-11, 3.761e-11,
2191 3.804e-11, 3.839e-11, 3.845e-11, 4.244e-11, 4.382e-11, 4.582e-11,
2192 4.847e-11, 5.209e-11, 5.384e-11, 5.887e-11, 6.371e-11, 6.737e-11,
2193 7.168e-11, 7.415e-11, 7.827e-11, 8.037e-11, 8.12e-11, 8.071e-11,
2194 8.008e-11, 7.851e-11, 7.544e-11, 7.377e-11, 7.173e-11, 6.801e-11,
2195 6.267e-11, 5.727e-11, 5.288e-11, 4.853e-11, 4.082e-11, 3.645e-11,
2196 3.136e-11, 2.672e-11, 2.304e-11, 1.986e-11, 1.725e-11, 1.503e-11,
2197 1.315e-11, 1.153e-11, 1.014e-11, 8.942e-12, 7.901e-12, 6.993e-12,
2198 6.199e-12, 5.502e-12, 4.89e-12, 4.351e-12, 3.878e-12, 3.461e-12,
2199 3.094e-12, 2.771e-12, 2.488e-12, 2.241e-12, 2.025e-12, 1.838e-12,
2200 1.677e-12, 1.541e-12, 1.427e-12, 1.335e-12, 1.262e-12, 1.209e-12,
2201 1.176e-12, 1.161e-12, 1.165e-12, 1.189e-12, 1.234e-12, 1.3e-12,
2202 1.389e-12, 1.503e-12, 1.644e-12, 1.814e-12, 2.017e-12, 2.255e-12,
2203 2.534e-12, 2.858e-12, 3.231e-12, 3.661e-12, 4.153e-12, 4.717e-12,
2204 5.36e-12, 6.094e-12, 6.93e-12, 7.882e-12, 8.966e-12, 1.02e-11,
2205 1.162e-11, 1.324e-11, 1.51e-11, 1.72e-11, 1.965e-11, 2.237e-11,
2206 2.56e-11, 2.927e-11, 3.371e-11, 3.842e-11, 4.429e-11, 5.139e-11,
2207 5.798e-11, 6.697e-11, 7.626e-11, 8.647e-11, 1.022e-10, 1.136e-10,
2208 1.3e-10, 1.481e-10, 1.672e-10, 1.871e-10, 2.126e-10, 2.357e-10,
2209 2.583e-10, 2.997e-10, 3.289e-10, 3.702e-10, 4.012e-10, 4.319e-10,
2210 4.527e-10, 5.001e-10, 5.448e-10, 5.611e-10, 5.76e-10, 5.965e-10,
2211 6.079e-10, 6.207e-10, 6.276e-10, 6.222e-10, 6.137e-10, 6e-10,
2212 5.814e-10, 5.393e-10, 5.35e-10, 4.947e-10, 4.629e-10, 4.117e-10,
2213 3.712e-10, 3.372e-10, 2.923e-10, 2.55e-10, 2.232e-10, 1.929e-10,
2214 1.679e-10, 1.46e-10, 1.289e-10, 1.13e-10, 9.953e-11, 8.763e-11,
2215 7.76e-11, 6.9e-11, 6.16e-11, 5.525e-11, 4.958e-11, 4.489e-11,
2216 4.072e-11, 3.728e-11, 3.438e-11, 3.205e-11, 3.006e-11, 2.848e-11,
2217 2.766e-11, 2.688e-11, 2.664e-11, 2.67e-11, 2.696e-11, 2.786e-11,
2218 2.861e-11, 3.009e-11, 3.178e-11, 3.389e-11, 3.587e-11, 3.819e-11,
2219 4.054e-11, 4.417e-11, 4.703e-11, 5.137e-11, 5.46e-11, 6.055e-11,
2220 6.333e-11, 6.773e-11, 7.219e-11, 7.717e-11, 8.131e-11, 8.491e-11,
2221 8.574e-11, 9.01e-11, 9.017e-11, 8.999e-11, 8.959e-11, 8.838e-11,
2222 8.579e-11, 8.162e-11, 8.098e-11, 7.472e-11, 7.108e-11, 6.559e-11,
2223 5.994e-11, 5.172e-11, 4.424e-11, 3.951e-11, 3.34e-11, 2.902e-11,
2224 2.541e-11, 2.215e-11, 1.945e-11, 1.716e-11, 1.503e-11, 1.339e-11,
2225 1.185e-11, 1.05e-11, 9.336e-12, 8.307e-12, 7.312e-12, 6.55e-12,
2226 5.836e-12, 5.178e-12, 4.6e-12, 4.086e-12, 3.639e-12, 3.247e-12,
2227 2.904e-12, 2.604e-12, 2.341e-12, 2.112e-12, 1.914e-12, 1.744e-12,
2228 1.598e-12, 1.476e-12, 1.374e-12, 1.293e-12, 1.23e-12, 1.185e-12,
2229 1.158e-12, 1.147e-12, 1.154e-12, 1.177e-12, 1.219e-12, 1.28e-12,
2230 1.36e-12, 1.463e-12, 1.591e-12, 1.75e-12, 1.94e-12, 2.156e-12,
2231 2.43e-12, 2.748e-12, 3.052e-12, 3.533e-12, 3.967e-12, 4.471e-12,
2232 5.041e-12, 5.86e-12, 6.664e-12, 7.522e-12, 8.342e-12, 9.412e-12,
2233 1.072e-11, 1.213e-11, 1.343e-11, 1.496e-11, 1.664e-11, 1.822e-11,
2234 2.029e-11, 2.233e-11, 2.457e-11, 2.709e-11, 2.928e-11, 3.115e-11,
2235 3.356e-11, 3.592e-11, 3.818e-11, 3.936e-11, 4.061e-11, 4.149e-11,
2236 4.299e-11, 4.223e-11, 4.251e-11, 4.287e-11, 4.177e-11, 4.094e-11,
2237 3.942e-11, 3.772e-11, 3.614e-11, 3.394e-11, 3.222e-11, 2.791e-11,
2238 2.665e-11, 2.309e-11, 2.032e-11, 1.74e-11, 1.535e-11, 1.323e-11,
2239 1.151e-11, 9.803e-12, 8.65e-12, 7.54e-12, 6.619e-12, 5.832e-12,
2240 5.113e-12, 4.503e-12, 3.975e-12, 3.52e-12, 3.112e-12, 2.797e-12,
2241 2.5e-12, 2.24e-12, 2.013e-12, 1.819e-12, 1.653e-12, 1.513e-12,
2242 1.395e-12, 1.299e-12, 1.225e-12, 1.168e-12, 1.124e-12, 1.148e-12,
2243 1.107e-12, 1.128e-12, 1.169e-12, 1.233e-12, 1.307e-12, 1.359e-12,
2244 1.543e-12, 1.686e-12, 1.794e-12, 2.028e-12, 2.21e-12, 2.441e-12,
2245 2.653e-12, 2.828e-12, 3.093e-12, 3.28e-12, 3.551e-12, 3.677e-12,
2246 3.803e-12, 3.844e-12, 4.068e-12, 4.093e-12, 4.002e-12, 3.904e-12,
2247 3.624e-12, 3.633e-12, 3.622e-12, 3.443e-12, 3.184e-12, 2.934e-12,
2248 2.476e-12, 2.212e-12, 1.867e-12, 1.594e-12, 1.37e-12, 1.192e-12,
2249 1.045e-12, 9.211e-13, 8.17e-13, 7.29e-13, 6.55e-13, 5.929e-13,
2250 5.415e-13, 4.995e-13, 4.661e-13, 4.406e-13, 4.225e-13, 4.116e-13,
2251 4.075e-13, 4.102e-13, 4.198e-13, 4.365e-13, 4.606e-13, 4.925e-13,
2252 5.326e-13, 5.818e-13, 6.407e-13, 7.104e-13, 7.92e-13, 8.868e-13,
2253 9.964e-13, 1.123e-12, 1.268e-12, 1.434e-12, 1.626e-12, 1.848e-12,
2254 2.107e-12, 2.422e-12, 2.772e-12, 3.145e-12, 3.704e-12, 4.27e-12,
2255 4.721e-12, 5.361e-12, 6.083e-12, 7.095e-12, 7.968e-12, 9.228e-12,
2256 1.048e-11, 1.187e-11, 1.336e-11, 1.577e-11, 1.772e-11, 2.017e-11,
2257 2.25e-11, 2.63e-11, 2.911e-11, 3.356e-11, 3.82e-11, 4.173e-11,
2258 4.811e-11, 5.254e-11, 5.839e-11, 6.187e-11, 6.805e-11, 7.118e-11,
2259 7.369e-11, 7.664e-11, 7.794e-11, 7.947e-11, 8.036e-11, 7.954e-11,
2260 7.849e-11, 7.518e-11, 7.462e-11, 6.926e-11, 6.531e-11, 6.197e-11,
2261 5.421e-11, 4.777e-11, 4.111e-11, 3.679e-11, 3.166e-11, 2.786e-11,
2262 2.436e-11, 2.144e-11, 1.859e-11, 1.628e-11, 1.414e-11, 1.237e-11,
2263 1.093e-11, 9.558e-12
2264 };
2265
2266 static const double h2o260[2001] =
2267 { .2752, .2732, .2749, .2676, .2667, .2545,
2268 .2497, .2327, .2218, .2036, .1825, .1694, .1497, .1353, .121,
2269 .1014, .09405, .07848, .07195, .06246, .05306, .04853, .04138,
2270 .03735, .03171, .02785, .02431, .02111, .01845, .0164, .01405,
2271 .01255, .01098, .009797, .008646, .007779, .006898, .006099,
2272 .005453, .004909, .004413, .003959, .003581, .003199, .002871,
2273 .002583, .00233, .002086, .001874, .001684, .001512, .001361,
2274 .001225, .0011, 9.89e-4, 8.916e-4, 8.039e-4, 7.256e-4, 6.545e-4,
2275 5.918e-4, 5.359e-4, 4.867e-4, 4.426e-4, 4.033e-4, 3.682e-4,
2276 3.366e-4, 3.085e-4, 2.833e-4, 2.605e-4, 2.403e-4, 2.221e-4,
2277 2.055e-4, 1.908e-4, 1.774e-4, 1.653e-4, 1.544e-4, 1.443e-4,
2278 1.351e-4, 1.267e-4, 1.19e-4, 1.119e-4, 1.053e-4, 9.922e-5,
2279 9.355e-5, 8.831e-5, 8.339e-5, 7.878e-5, 7.449e-5, 7.043e-5,
2280 6.664e-5, 6.307e-5, 5.969e-5, 5.654e-5, 5.357e-5, 5.075e-5,
2281 4.81e-5, 4.56e-5, 4.322e-5, 4.102e-5, 3.892e-5, 3.696e-5,
2282 3.511e-5, 3.339e-5, 3.177e-5, 3.026e-5, 2.886e-5, 2.756e-5,
2283 2.636e-5, 2.527e-5, 2.427e-5, 2.337e-5, 2.257e-5, 2.185e-5,
2284 2.127e-5, 2.08e-5, 2.041e-5, 2.013e-5, 2e-5, 1.997e-5, 2.009e-5,
2285 2.031e-5, 2.068e-5, 2.124e-5, 2.189e-5, 2.267e-5, 2.364e-5,
2286 2.463e-5, 2.618e-5, 2.774e-5, 2.937e-5, 3.144e-5, 3.359e-5,
2287 3.695e-5, 4.002e-5, 4.374e-5, 4.947e-5, 5.431e-5, 6.281e-5,
2288 7.169e-5, 8.157e-5, 9.728e-5, 1.079e-4, 1.337e-4, 1.442e-4,
2289 1.683e-4, 1.879e-4, 2.223e-4, 2.425e-4, 2.838e-4, 3.143e-4,
2290 3.527e-4, 4.012e-4, 4.237e-4, 4.747e-4, 5.057e-4, 5.409e-4,
2291 5.734e-4, 5.944e-4, 6.077e-4, 6.175e-4, 6.238e-4, 6.226e-4,
2292 6.248e-4, 6.192e-4, 6.098e-4, 5.818e-4, 5.709e-4, 5.465e-4,
2293 5.043e-4, 4.699e-4, 4.294e-4, 3.984e-4, 3.672e-4, 3.152e-4,
2294 2.883e-4, 2.503e-4, 2.211e-4, 1.92e-4, 1.714e-4, 1.485e-4,
2295 1.358e-4, 1.156e-4, 1.021e-4, 8.887e-5, 7.842e-5, 7.12e-5,
2296 6.186e-5, 5.73e-5, 4.792e-5, 4.364e-5, 3.72e-5, 3.28e-5,
2297 2.946e-5, 2.591e-5, 2.261e-5, 2.048e-5, 1.813e-5, 1.63e-5,
2298 1.447e-5, 1.282e-5, 1.167e-5, 1.041e-5, 9.449e-6, 8.51e-6,
2299 7.596e-6, 6.961e-6, 6.272e-6, 5.728e-6, 5.198e-6, 4.667e-6,
2300 4.288e-6, 3.897e-6, 3.551e-6, 3.235e-6, 2.952e-6, 2.688e-6,
2301 2.449e-6, 2.241e-6, 2.05e-6, 1.879e-6, 1.722e-6, 1.582e-6,
2302 1.456e-6, 1.339e-6, 1.236e-6, 1.144e-6, 1.06e-6, 9.83e-7,
2303 9.149e-7, 8.535e-7, 7.973e-7, 7.466e-7, 6.999e-7, 6.574e-7,
2304 6.18e-7, 5.821e-7, 5.487e-7, 5.18e-7, 4.896e-7, 4.631e-7,
2305 4.386e-7, 4.16e-7, 3.945e-7, 3.748e-7, 3.562e-7, 3.385e-7,
2306 3.222e-7, 3.068e-7, 2.922e-7, 2.788e-7, 2.659e-7, 2.539e-7,
2307 2.425e-7, 2.318e-7, 2.219e-7, 2.127e-7, 2.039e-7, 1.958e-7,
2308 1.885e-7, 1.818e-7, 1.758e-7, 1.711e-7, 1.662e-7, 1.63e-7,
2309 1.605e-7, 1.58e-7, 1.559e-7, 1.545e-7, 1.532e-7, 1.522e-7,
2310 1.51e-7, 1.495e-7, 1.465e-7, 1.483e-7, 1.469e-7, 1.448e-7,
2311 1.444e-7, 1.436e-7, 1.426e-7, 1.431e-7, 1.425e-7, 1.445e-7,
2312 1.477e-7, 1.515e-7, 1.567e-7, 1.634e-7, 1.712e-7, 1.802e-7,
2313 1.914e-7, 2.024e-7, 2.159e-7, 2.295e-7, 2.461e-7, 2.621e-7,
2314 2.868e-7, 3.102e-7, 3.394e-7, 3.784e-7, 4.223e-7, 4.864e-7,
2315 5.501e-7, 6.039e-7, 7.193e-7, 7.728e-7, 9.514e-7, 1.073e-6,
2316 1.18e-6, 1.333e-6, 1.472e-6, 1.566e-6, 1.677e-6, 1.784e-6,
2317 1.904e-6, 1.953e-6, 2.02e-6, 2.074e-6, 2.128e-6, 2.162e-6,
2318 2.219e-6, 2.221e-6, 2.249e-6, 2.239e-6, 2.235e-6, 2.185e-6,
2319 2.141e-6, 2.124e-6, 2.09e-6, 2.068e-6, 2.1e-6, 2.104e-6,
2320 2.142e-6, 2.181e-6, 2.257e-6, 2.362e-6, 2.5e-6, 2.664e-6,
2321 2.884e-6, 3.189e-6, 3.48e-6, 3.847e-6, 4.313e-6, 4.79e-6,
2322 5.25e-6, 5.989e-6, 6.692e-6, 7.668e-6, 8.52e-6, 9.606e-6,
2323 1.073e-5, 1.225e-5, 1.377e-5, 1.582e-5, 1.761e-5, 2.029e-5,
2324 2.284e-5, 2.602e-5, 2.94e-5, 3.483e-5, 3.928e-5, 4.618e-5,
2325 5.24e-5, 6.132e-5, 7.183e-5, 8.521e-5, 9.111e-5, 1.07e-4,
2326 1.184e-4, 1.264e-4, 1.475e-4, 1.612e-4, 1.704e-4, 1.818e-4,
2327 1.924e-4, 1.994e-4, 2.061e-4, 2.18e-4, 2.187e-4, 2.2e-4,
2328 2.196e-4, 2.131e-4, 2.015e-4, 1.988e-4, 1.847e-4, 1.729e-4,
2329 1.597e-4, 1.373e-4, 1.262e-4, 1.087e-4, 9.439e-5, 8.061e-5,
2330 7.093e-5, 6.049e-5, 5.12e-5, 4.435e-5, 3.817e-5, 3.34e-5,
2331 2.927e-5, 2.573e-5, 2.291e-5, 2.04e-5, 1.827e-5, 1.636e-5,
2332 1.463e-5, 1.309e-5, 1.17e-5, 1.047e-5, 9.315e-6, 8.328e-6,
2333 7.458e-6, 6.665e-6, 5.94e-6, 5.316e-6, 4.752e-6, 4.252e-6,
2334 3.825e-6, 3.421e-6, 3.064e-6, 2.746e-6, 2.465e-6, 2.216e-6,
2335 1.99e-6, 1.79e-6, 1.609e-6, 1.449e-6, 1.306e-6, 1.177e-6,
2336 1.063e-6, 9.607e-7, 8.672e-7, 7.855e-7, 7.118e-7, 6.46e-7,
2337 5.871e-7, 5.34e-7, 4.868e-7, 4.447e-7, 4.068e-7, 3.729e-7,
2338 3.423e-7, 3.151e-7, 2.905e-7, 2.686e-7, 2.484e-7, 2.306e-7,
2339 2.142e-7, 1.995e-7, 1.86e-7, 1.738e-7, 1.626e-7, 1.522e-7,
2340 1.427e-7, 1.338e-7, 1.258e-7, 1.183e-7, 1.116e-7, 1.056e-7,
2341 9.972e-8, 9.46e-8, 9.007e-8, 8.592e-8, 8.195e-8, 7.816e-8,
2342 7.483e-8, 7.193e-8, 6.892e-8, 6.642e-8, 6.386e-8, 6.154e-8,
2343 5.949e-8, 5.764e-8, 5.622e-8, 5.479e-8, 5.364e-8, 5.301e-8,
2344 5.267e-8, 5.263e-8, 5.313e-8, 5.41e-8, 5.55e-8, 5.745e-8,
2345 6.003e-8, 6.311e-8, 6.713e-8, 7.173e-8, 7.724e-8, 8.368e-8,
2346 9.121e-8, 9.986e-8, 1.097e-7, 1.209e-7, 1.338e-7, 1.486e-7,
2347 1.651e-7, 1.837e-7, 2.048e-7, 2.289e-7, 2.557e-7, 2.857e-7,
2348 3.195e-7, 3.587e-7, 4.015e-7, 4.497e-7, 5.049e-7, 5.665e-7,
2349 6.366e-7, 7.121e-7, 7.996e-7, 8.946e-7, 1.002e-6, 1.117e-6,
2350 1.262e-6, 1.416e-6, 1.611e-6, 1.807e-6, 2.056e-6, 2.351e-6,
2351 2.769e-6, 3.138e-6, 3.699e-6, 4.386e-6, 5.041e-6, 6.074e-6,
2352 6.812e-6, 7.79e-6, 8.855e-6, 1.014e-5, 1.095e-5, 1.245e-5,
2353 1.316e-5, 1.39e-5, 1.504e-5, 1.583e-5, 1.617e-5, 1.652e-5,
2354 1.713e-5, 1.724e-5, 1.715e-5, 1.668e-5, 1.629e-5, 1.552e-5,
2355 1.478e-5, 1.34e-5, 1.245e-5, 1.121e-5, 9.575e-6, 8.956e-6,
2356 7.345e-6, 6.597e-6, 5.612e-6, 4.818e-6, 4.165e-6, 3.579e-6,
2357 3.041e-6, 2.623e-6, 2.29e-6, 1.984e-6, 1.748e-6, 1.534e-6,
2358 1.369e-6, 1.219e-6, 1.092e-6, 9.8e-7, 8.762e-7, 7.896e-7,
2359 7.104e-7, 6.364e-7, 5.691e-7, 5.107e-7, 4.575e-7, 4.09e-7,
2360 3.667e-7, 3.287e-7, 2.931e-7, 2.633e-7, 2.356e-7, 2.111e-7,
2361 1.895e-7, 1.697e-7, 1.525e-7, 1.369e-7, 1.233e-7, 1.114e-7,
2362 9.988e-8, 9.004e-8, 8.149e-8, 7.352e-8, 6.662e-8, 6.03e-8,
2363 5.479e-8, 4.974e-8, 4.532e-8, 4.129e-8, 3.781e-8, 3.462e-8,
2364 3.176e-8, 2.919e-8, 2.687e-8, 2.481e-8, 2.292e-8, 2.119e-8,
2365 1.967e-8, 1.828e-8, 1.706e-8, 1.589e-8, 1.487e-8, 1.393e-8,
2366 1.307e-8, 1.228e-8, 1.156e-8, 1.089e-8, 1.028e-8, 9.696e-9,
2367 9.159e-9, 8.658e-9, 8.187e-9, 7.746e-9, 7.34e-9, 6.953e-9,
2368 6.594e-9, 6.259e-9, 5.948e-9, 5.66e-9, 5.386e-9, 5.135e-9,
2369 4.903e-9, 4.703e-9, 4.515e-9, 4.362e-9, 4.233e-9, 4.117e-9,
2370 4.017e-9, 3.962e-9, 3.924e-9, 3.905e-9, 3.922e-9, 3.967e-9,
2371 4.046e-9, 4.165e-9, 4.32e-9, 4.522e-9, 4.769e-9, 5.083e-9,
2372 5.443e-9, 5.872e-9, 6.366e-9, 6.949e-9, 7.601e-9, 8.371e-9,
2373 9.22e-9, 1.02e-8, 1.129e-8, 1.251e-8, 1.393e-8, 1.542e-8,
2374 1.72e-8, 1.926e-8, 2.152e-8, 2.392e-8, 2.678e-8, 3.028e-8,
2375 3.39e-8, 3.836e-8, 4.309e-8, 4.9e-8, 5.481e-8, 6.252e-8,
2376 7.039e-8, 7.883e-8, 8.849e-8, 1.012e-7, 1.142e-7, 1.3e-7,
2377 1.475e-7, 1.732e-7, 1.978e-7, 2.304e-7, 2.631e-7, 2.988e-7,
2378 3.392e-7, 3.69e-7, 4.355e-7, 4.672e-7, 5.11e-7, 5.461e-7,
2379 5.828e-7, 6.233e-7, 6.509e-7, 6.672e-7, 6.969e-7, 7.104e-7,
2380 7.439e-7, 7.463e-7, 7.708e-7, 7.466e-7, 7.668e-7, 7.549e-7,
2381 7.586e-7, 7.384e-7, 7.439e-7, 7.785e-7, 7.915e-7, 8.31e-7,
2382 8.745e-7, 9.558e-7, 1.038e-6, 1.173e-6, 1.304e-6, 1.452e-6,
2383 1.671e-6, 1.931e-6, 2.239e-6, 2.578e-6, 3.032e-6, 3.334e-6,
2384 3.98e-6, 4.3e-6, 4.518e-6, 5.321e-6, 5.508e-6, 6.211e-6, 6.59e-6,
2385 7.046e-6, 7.555e-6, 7.558e-6, 7.875e-6, 8.319e-6, 8.433e-6,
2386 8.59e-6, 8.503e-6, 8.304e-6, 8.336e-6, 7.739e-6, 7.301e-6,
2387 6.827e-6, 6.078e-6, 5.551e-6, 4.762e-6, 4.224e-6, 3.538e-6,
2388 2.984e-6, 2.619e-6, 2.227e-6, 1.923e-6, 1.669e-6, 1.462e-6,
2389 1.294e-6, 1.155e-6, 1.033e-6, 9.231e-7, 8.238e-7, 7.36e-7,
2390 6.564e-7, 5.869e-7, 5.236e-7, 4.673e-7, 4.174e-7, 3.736e-7,
2391 3.33e-7, 2.976e-7, 2.657e-7, 2.367e-7, 2.106e-7, 1.877e-7,
2392 1.671e-7, 1.494e-7, 1.332e-7, 1.192e-7, 1.065e-7, 9.558e-8,
2393 8.586e-8, 7.717e-8, 6.958e-8, 6.278e-8, 5.666e-8, 5.121e-8,
2394 4.647e-8, 4.213e-8, 3.815e-8, 3.459e-8, 3.146e-8, 2.862e-8,
2395 2.604e-8, 2.375e-8, 2.162e-8, 1.981e-8, 1.817e-8, 1.67e-8,
2396 1.537e-8, 1.417e-8, 1.31e-8, 1.215e-8, 1.128e-8, 1.05e-8,
2397 9.793e-9, 9.158e-9, 8.586e-9, 8.068e-9, 7.595e-9, 7.166e-9,
2398 6.778e-9, 6.427e-9, 6.108e-9, 5.826e-9, 5.571e-9, 5.347e-9,
2399 5.144e-9, 4.968e-9, 4.822e-9, 4.692e-9, 4.589e-9, 4.506e-9,
2400 4.467e-9, 4.44e-9, 4.466e-9, 4.515e-9, 4.718e-9, 4.729e-9,
2401 4.937e-9, 5.249e-9, 5.466e-9, 5.713e-9, 6.03e-9, 6.436e-9,
2402 6.741e-9, 7.33e-9, 7.787e-9, 8.414e-9, 8.908e-9, 9.868e-9,
2403 1.069e-8, 1.158e-8, 1.253e-8, 1.3e-8, 1.409e-8, 1.47e-8,
2404 1.548e-8, 1.612e-8, 1.666e-8, 1.736e-8, 1.763e-8, 1.812e-8,
2405 1.852e-8, 1.923e-8, 1.897e-8, 1.893e-8, 1.888e-8, 1.868e-8,
2406 1.895e-8, 1.899e-8, 1.876e-8, 1.96e-8, 2.02e-8, 2.121e-8,
2407 2.239e-8, 2.379e-8, 2.526e-8, 2.766e-8, 2.994e-8, 3.332e-8,
2408 3.703e-8, 4.158e-8, 4.774e-8, 5.499e-8, 6.355e-8, 7.349e-8,
2409 8.414e-8, 9.846e-8, 1.143e-7, 1.307e-7, 1.562e-7, 1.817e-7,
2410 2.011e-7, 2.192e-7, 2.485e-7, 2.867e-7, 3.035e-7, 3.223e-7,
2411 3.443e-7, 3.617e-7, 3.793e-7, 3.793e-7, 3.839e-7, 4.081e-7,
2412 4.117e-7, 4.085e-7, 3.92e-7, 3.851e-7, 3.754e-7, 3.49e-7,
2413 3.229e-7, 2.978e-7, 2.691e-7, 2.312e-7, 2.029e-7, 1.721e-7,
2414 1.472e-7, 1.308e-7, 1.132e-7, 9.736e-8, 8.458e-8, 7.402e-8,
2415 6.534e-8, 5.811e-8, 5.235e-8, 4.762e-8, 4.293e-8, 3.896e-8,
2416 3.526e-8, 3.165e-8, 2.833e-8, 2.551e-8, 2.288e-8, 2.036e-8,
2417 1.82e-8, 1.626e-8, 1.438e-8, 1.299e-8, 1.149e-8, 1.03e-8,
2418 9.148e-9, 8.122e-9, 7.264e-9, 6.425e-9, 5.777e-9, 5.06e-9,
2419 4.502e-9, 4.013e-9, 3.567e-9, 3.145e-9, 2.864e-9, 2.553e-9,
2420 2.311e-9, 2.087e-9, 1.886e-9, 1.716e-9, 1.556e-9, 1.432e-9,
2421 1.311e-9, 1.202e-9, 1.104e-9, 1.013e-9, 9.293e-10, 8.493e-10,
2422 7.79e-10, 7.185e-10, 6.642e-10, 6.141e-10, 5.684e-10, 5.346e-10,
2423 5.032e-10, 4.725e-10, 4.439e-10, 4.176e-10, 3.93e-10, 3.714e-10,
2424 3.515e-10, 3.332e-10, 3.167e-10, 3.02e-10, 2.887e-10, 2.769e-10,
2425 2.665e-10, 2.578e-10, 2.503e-10, 2.436e-10, 2.377e-10, 2.342e-10,
2426 2.305e-10, 2.296e-10, 2.278e-10, 2.321e-10, 2.355e-10, 2.402e-10,
2427 2.478e-10, 2.67e-10, 2.848e-10, 2.982e-10, 3.263e-10, 3.438e-10,
2428 3.649e-10, 3.829e-10, 4.115e-10, 4.264e-10, 4.473e-10, 4.63e-10,
2429 4.808e-10, 4.995e-10, 5.142e-10, 5.313e-10, 5.318e-10, 5.358e-10,
2430 5.452e-10, 5.507e-10, 5.698e-10, 5.782e-10, 5.983e-10, 6.164e-10,
2431 6.532e-10, 6.811e-10, 7.624e-10, 8.302e-10, 9.067e-10, 9.937e-10,
2432 1.104e-9, 1.221e-9, 1.361e-9, 1.516e-9, 1.675e-9, 1.883e-9,
2433 2.101e-9, 2.349e-9, 2.614e-9, 2.92e-9, 3.305e-9, 3.724e-9,
2434 4.142e-9, 4.887e-9, 5.614e-9, 6.506e-9, 7.463e-9, 8.817e-9,
2435 9.849e-9, 1.187e-8, 1.321e-8, 1.474e-8, 1.698e-8, 1.794e-8,
2436 2.09e-8, 2.211e-8, 2.362e-8, 2.556e-8, 2.729e-8, 2.88e-8,
2437 3.046e-8, 3.167e-8, 3.367e-8, 3.457e-8, 3.59e-8, 3.711e-8,
2438 3.826e-8, 4.001e-8, 4.211e-8, 4.315e-8, 4.661e-8, 5.01e-8,
2439 5.249e-8, 5.84e-8, 6.628e-8, 7.512e-8, 8.253e-8, 9.722e-8,
2440 1.067e-7, 1.153e-7, 1.347e-7, 1.428e-7, 1.577e-7, 1.694e-7,
2441 1.833e-7, 1.938e-7, 2.108e-7, 2.059e-7, 2.157e-7, 2.185e-7,
2442 2.208e-7, 2.182e-7, 2.093e-7, 2.014e-7, 1.962e-7, 1.819e-7,
2443 1.713e-7, 1.51e-7, 1.34e-7, 1.154e-7, 9.89e-8, 8.88e-8, 7.673e-8,
2444 6.599e-8, 5.73e-8, 5.081e-8, 4.567e-8, 4.147e-8, 3.773e-8,
2445 3.46e-8, 3.194e-8, 2.953e-8, 2.759e-8, 2.594e-8, 2.442e-8,
2446 2.355e-8, 2.283e-8, 2.279e-8, 2.231e-8, 2.279e-8, 2.239e-8,
2447 2.21e-8, 2.309e-8, 2.293e-8, 2.352e-8, 2.415e-8, 2.43e-8,
2448 2.426e-8, 2.465e-8, 2.5e-8, 2.496e-8, 2.465e-8, 2.445e-8,
2449 2.383e-8, 2.299e-8, 2.165e-8, 2.113e-8, 1.968e-8, 1.819e-8,
2450 1.644e-8, 1.427e-8, 1.27e-8, 1.082e-8, 9.428e-9, 8.091e-9,
2451 6.958e-9, 5.988e-9, 5.246e-9, 4.601e-9, 4.098e-9, 3.664e-9,
2452 3.287e-9, 2.942e-9, 2.656e-9, 2.364e-9, 2.118e-9, 1.903e-9,
2453 1.703e-9, 1.525e-9, 1.365e-9, 1.229e-9, 1.107e-9, 9.96e-10,
2454 8.945e-10, 8.08e-10, 7.308e-10, 6.616e-10, 5.994e-10, 5.422e-10,
2455 4.929e-10, 4.478e-10, 4.07e-10, 3.707e-10, 3.379e-10, 3.087e-10,
2456 2.823e-10, 2.592e-10, 2.385e-10, 2.201e-10, 2.038e-10, 1.897e-10,
2457 1.774e-10, 1.667e-10, 1.577e-10, 1.502e-10, 1.437e-10, 1.394e-10,
2458 1.358e-10, 1.324e-10, 1.329e-10, 1.324e-10, 1.36e-10, 1.39e-10,
2459 1.424e-10, 1.544e-10, 1.651e-10, 1.817e-10, 1.984e-10, 2.195e-10,
2460 2.438e-10, 2.7e-10, 2.991e-10, 3.322e-10, 3.632e-10, 3.957e-10,
2461 4.36e-10, 4.701e-10, 5.03e-10, 5.381e-10, 5.793e-10, 6.19e-10,
2462 6.596e-10, 7.004e-10, 7.561e-10, 7.934e-10, 8.552e-10, 9.142e-10,
2463 9.57e-10, 1.027e-9, 1.097e-9, 1.193e-9, 1.334e-9, 1.47e-9,
2464 1.636e-9, 1.871e-9, 2.122e-9, 2.519e-9, 2.806e-9, 3.203e-9,
2465 3.846e-9, 4.362e-9, 5.114e-9, 5.643e-9, 6.305e-9, 6.981e-9,
2466 7.983e-9, 8.783e-9, 9.419e-9, 1.017e-8, 1.063e-8, 1.121e-8,
2467 1.13e-8, 1.201e-8, 1.225e-8, 1.232e-8, 1.223e-8, 1.177e-8,
2468 1.151e-8, 1.116e-8, 1.047e-8, 9.698e-9, 8.734e-9, 8.202e-9,
2469 7.041e-9, 6.074e-9, 5.172e-9, 4.468e-9, 3.913e-9, 3.414e-9,
2470 2.975e-9, 2.65e-9, 2.406e-9, 2.173e-9, 2.009e-9, 1.861e-9,
2471 1.727e-9, 1.612e-9, 1.514e-9, 1.43e-9, 1.362e-9, 1.333e-9,
2472 1.288e-9, 1.249e-9, 1.238e-9, 1.228e-9, 1.217e-9, 1.202e-9,
2473 1.209e-9, 1.177e-9, 1.157e-9, 1.165e-9, 1.142e-9, 1.131e-9,
2474 1.138e-9, 1.117e-9, 1.1e-9, 1.069e-9, 1.023e-9, 1.005e-9,
2475 9.159e-10, 8.863e-10, 7.865e-10, 7.153e-10, 6.247e-10, 5.846e-10,
2476 5.133e-10, 4.36e-10, 3.789e-10, 3.335e-10, 2.833e-10, 2.483e-10,
2477 2.155e-10, 1.918e-10, 1.709e-10, 1.529e-10, 1.374e-10, 1.235e-10,
2478 1.108e-10, 9.933e-11, 8.932e-11, 8.022e-11, 7.224e-11, 6.52e-11,
2479 5.896e-11, 5.328e-11, 4.813e-11, 4.365e-11, 3.961e-11, 3.594e-11,
2480 3.266e-11, 2.967e-11, 2.701e-11, 2.464e-11, 2.248e-11, 2.054e-11,
2481 1.878e-11, 1.721e-11, 1.579e-11, 1.453e-11, 1.341e-11, 1.241e-11,
2482 1.154e-11, 1.078e-11, 1.014e-11, 9.601e-12, 9.167e-12, 8.838e-12,
2483 8.614e-12, 8.493e-12, 8.481e-12, 8.581e-12, 8.795e-12, 9.131e-12,
2484 9.601e-12, 1.021e-11, 1.097e-11, 1.191e-11, 1.303e-11, 1.439e-11,
2485 1.601e-11, 1.778e-11, 1.984e-11, 2.234e-11, 2.474e-11, 2.766e-11,
2486 3.085e-11, 3.415e-11, 3.821e-11, 4.261e-11, 4.748e-11, 5.323e-11,
2487 5.935e-11, 6.619e-11, 7.418e-11, 8.294e-11, 9.26e-11, 1.039e-10,
2488 1.156e-10, 1.297e-10, 1.46e-10, 1.641e-10, 1.858e-10, 2.1e-10,
2489 2.383e-10, 2.724e-10, 3.116e-10, 3.538e-10, 4.173e-10, 4.727e-10,
2490 5.503e-10, 6.337e-10, 7.32e-10, 8.298e-10, 9.328e-10, 1.059e-9,
2491 1.176e-9, 1.328e-9, 1.445e-9, 1.593e-9, 1.77e-9, 1.954e-9,
2492 2.175e-9, 2.405e-9, 2.622e-9, 2.906e-9, 3.294e-9, 3.713e-9,
2493 3.98e-9, 4.384e-9, 4.987e-9, 5.311e-9, 5.874e-9, 6.337e-9,
2494 7.027e-9, 7.39e-9, 7.769e-9, 8.374e-9, 8.605e-9, 9.165e-9,
2495 9.415e-9, 9.511e-9, 9.704e-9, 9.588e-9, 9.45e-9, 9.086e-9,
2496 8.798e-9, 8.469e-9, 7.697e-9, 7.168e-9, 6.255e-9, 5.772e-9,
2497 4.97e-9, 4.271e-9, 3.653e-9, 3.154e-9, 2.742e-9, 2.435e-9,
2498 2.166e-9, 1.936e-9, 1.731e-9, 1.556e-9, 1.399e-9, 1.272e-9,
2499 1.157e-9, 1.066e-9, 9.844e-10, 9.258e-10, 8.787e-10, 8.421e-10,
2500 8.083e-10, 8.046e-10, 8.067e-10, 8.181e-10, 8.325e-10, 8.517e-10,
2501 9.151e-10, 9.351e-10, 9.677e-10, 1.071e-9, 1.126e-9, 1.219e-9,
2502 1.297e-9, 1.408e-9, 1.476e-9, 1.517e-9, 1.6e-9, 1.649e-9,
2503 1.678e-9, 1.746e-9, 1.742e-9, 1.728e-9, 1.699e-9, 1.655e-9,
2504 1.561e-9, 1.48e-9, 1.451e-9, 1.411e-9, 1.171e-9, 1.106e-9,
2505 9.714e-10, 8.523e-10, 7.346e-10, 6.241e-10, 5.371e-10, 4.704e-10,
2506 4.144e-10, 3.683e-10, 3.292e-10, 2.942e-10, 2.62e-10, 2.341e-10,
2507 2.104e-10, 1.884e-10, 1.7e-10, 1.546e-10, 1.394e-10, 1.265e-10,
2508 1.14e-10, 1.019e-10, 9.279e-11, 8.283e-11, 7.458e-11, 6.668e-11,
2509 5.976e-11, 5.33e-11, 4.794e-11, 4.289e-11, 3.841e-11, 3.467e-11,
2510 3.13e-11, 2.832e-11, 2.582e-11, 2.356e-11, 2.152e-11, 1.97e-11,
2511 1.808e-11, 1.664e-11, 1.539e-11, 1.434e-11, 1.344e-11, 1.269e-11,
2512 1.209e-11, 1.162e-11, 1.129e-11, 1.108e-11, 1.099e-11, 1.103e-11,
2513 1.119e-11, 1.148e-11, 1.193e-11, 1.252e-11, 1.329e-11, 1.421e-11,
2514 1.555e-11, 1.685e-11, 1.839e-11, 2.054e-11, 2.317e-11, 2.571e-11,
2515 2.839e-11, 3.171e-11, 3.49e-11, 3.886e-11, 4.287e-11, 4.645e-11,
2516 5.047e-11, 5.592e-11, 6.109e-11, 6.628e-11, 7.381e-11, 8.088e-11,
2517 8.966e-11, 1.045e-10, 1.12e-10, 1.287e-10, 1.486e-10, 1.662e-10,
2518 1.866e-10, 2.133e-10, 2.524e-10, 2.776e-10, 3.204e-10, 3.559e-10,
2519 4.028e-10, 4.448e-10, 4.882e-10, 5.244e-10, 5.605e-10, 6.018e-10,
2520 6.328e-10, 6.579e-10, 6.541e-10, 7.024e-10, 7.074e-10, 7.068e-10,
2521 7.009e-10, 6.698e-10, 6.545e-10, 6.209e-10, 5.834e-10, 5.412e-10,
2522 5.001e-10, 4.231e-10, 3.727e-10, 3.211e-10, 2.833e-10, 2.447e-10,
2523 2.097e-10, 1.843e-10, 1.639e-10, 1.449e-10, 1.27e-10, 1.161e-10,
2524 1.033e-10, 9.282e-11, 8.407e-11, 7.639e-11, 7.023e-11, 6.474e-11,
2525 6.142e-11, 5.76e-11, 5.568e-11, 5.472e-11, 5.39e-11, 5.455e-11,
2526 5.54e-11, 5.587e-11, 6.23e-11, 6.49e-11, 6.868e-11, 7.382e-11,
2527 8.022e-11, 8.372e-11, 9.243e-11, 1.004e-10, 1.062e-10, 1.13e-10,
2528 1.176e-10, 1.244e-10, 1.279e-10, 1.298e-10, 1.302e-10, 1.312e-10,
2529 1.295e-10, 1.244e-10, 1.211e-10, 1.167e-10, 1.098e-10, 9.927e-11,
2530 8.854e-11, 8.011e-11, 7.182e-11, 5.923e-11, 5.212e-11, 4.453e-11,
2531 3.832e-11, 3.371e-11, 2.987e-11, 2.651e-11, 2.354e-11, 2.093e-11,
2532 1.863e-11, 1.662e-11, 1.486e-11, 1.331e-11, 1.193e-11, 1.071e-11,
2533 9.628e-12, 8.66e-12, 7.801e-12, 7.031e-12, 6.347e-12, 5.733e-12,
2534 5.182e-12, 4.695e-12, 4.26e-12, 3.874e-12, 3.533e-12, 3.235e-12,
2535 2.979e-12, 2.76e-12, 2.579e-12, 2.432e-12, 2.321e-12, 2.246e-12,
2536 2.205e-12, 2.196e-12, 2.223e-12, 2.288e-12, 2.387e-12, 2.525e-12,
2537 2.704e-12, 2.925e-12, 3.191e-12, 3.508e-12, 3.876e-12, 4.303e-12,
2538 4.793e-12, 5.347e-12, 5.978e-12, 6.682e-12, 7.467e-12, 8.34e-12,
2539 9.293e-12, 1.035e-11, 1.152e-11, 1.285e-11, 1.428e-11, 1.586e-11,
2540 1.764e-11, 1.972e-11, 2.214e-11, 2.478e-11, 2.776e-11, 3.151e-11,
2541 3.591e-11, 4.103e-11, 4.66e-11, 5.395e-11, 6.306e-11, 7.172e-11,
2542 8.358e-11, 9.67e-11, 1.11e-10, 1.325e-10, 1.494e-10, 1.736e-10,
2543 2.007e-10, 2.296e-10, 2.608e-10, 3.004e-10, 3.361e-10, 3.727e-10,
2544 4.373e-10, 4.838e-10, 5.483e-10, 6.006e-10, 6.535e-10, 6.899e-10,
2545 7.687e-10, 8.444e-10, 8.798e-10, 9.135e-10, 9.532e-10, 9.757e-10,
2546 9.968e-10, 1.006e-9, 9.949e-10, 9.789e-10, 9.564e-10, 9.215e-10,
2547 8.51e-10, 8.394e-10, 7.707e-10, 7.152e-10, 6.274e-10, 5.598e-10,
2548 5.028e-10, 4.3e-10, 3.71e-10, 3.245e-10, 2.809e-10, 2.461e-10,
2549 2.154e-10, 1.91e-10, 1.685e-10, 1.487e-10, 1.313e-10, 1.163e-10,
2550 1.031e-10, 9.172e-11, 8.221e-11, 7.382e-11, 6.693e-11, 6.079e-11,
2551 5.581e-11, 5.167e-11, 4.811e-11, 4.506e-11, 4.255e-11, 4.083e-11,
2552 3.949e-11, 3.881e-11, 3.861e-11, 3.858e-11, 3.951e-11, 4.045e-11,
2553 4.24e-11, 4.487e-11, 4.806e-11, 5.133e-11, 5.518e-11, 5.919e-11,
2554 6.533e-11, 7.031e-11, 7.762e-11, 8.305e-11, 9.252e-11, 9.727e-11,
2555 1.045e-10, 1.117e-10, 1.2e-10, 1.275e-10, 1.341e-10, 1.362e-10,
2556 1.438e-10, 1.45e-10, 1.455e-10, 1.455e-10, 1.434e-10, 1.381e-10,
2557 1.301e-10, 1.276e-10, 1.163e-10, 1.089e-10, 9.911e-11, 8.943e-11,
2558 7.618e-11, 6.424e-11, 5.717e-11, 4.866e-11, 4.257e-11, 3.773e-11,
2559 3.331e-11, 2.958e-11, 2.629e-11, 2.316e-11, 2.073e-11, 1.841e-11,
2560 1.635e-11, 1.464e-11, 1.31e-11, 1.16e-11, 1.047e-11, 9.408e-12,
2561 8.414e-12, 7.521e-12, 6.705e-12, 5.993e-12, 5.371e-12, 4.815e-12,
2562 4.338e-12, 3.921e-12, 3.567e-12, 3.265e-12, 3.01e-12, 2.795e-12,
2563 2.613e-12, 2.464e-12, 2.346e-12, 2.256e-12, 2.195e-12, 2.165e-12,
2564 2.166e-12, 2.198e-12, 2.262e-12, 2.364e-12, 2.502e-12, 2.682e-12,
2565 2.908e-12, 3.187e-12, 3.533e-12, 3.946e-12, 4.418e-12, 5.013e-12,
2566 5.708e-12, 6.379e-12, 7.43e-12, 8.39e-12, 9.51e-12, 1.078e-11,
2567 1.259e-11, 1.438e-11, 1.63e-11, 1.814e-11, 2.055e-11, 2.348e-11,
2568 2.664e-11, 2.956e-11, 3.3e-11, 3.677e-11, 4.032e-11, 4.494e-11,
2569 4.951e-11, 5.452e-11, 6.014e-11, 6.5e-11, 6.915e-11, 7.45e-11,
2570 7.971e-11, 8.468e-11, 8.726e-11, 8.995e-11, 9.182e-11, 9.509e-11,
2571 9.333e-11, 9.386e-11, 9.457e-11, 9.21e-11, 9.019e-11, 8.68e-11,
2572 8.298e-11, 7.947e-11, 7.46e-11, 7.082e-11, 6.132e-11, 5.855e-11,
2573 5.073e-11, 4.464e-11, 3.825e-11, 3.375e-11, 2.911e-11, 2.535e-11,
2574 2.16e-11, 1.907e-11, 1.665e-11, 1.463e-11, 1.291e-11, 1.133e-11,
2575 9.997e-12, 8.836e-12, 7.839e-12, 6.943e-12, 6.254e-12, 5.6e-12,
2576 5.029e-12, 4.529e-12, 4.102e-12, 3.737e-12, 3.428e-12, 3.169e-12,
2577 2.959e-12, 2.798e-12, 2.675e-12, 2.582e-12, 2.644e-12, 2.557e-12,
2578 2.614e-12, 2.717e-12, 2.874e-12, 3.056e-12, 3.187e-12, 3.631e-12,
2579 3.979e-12, 4.248e-12, 4.817e-12, 5.266e-12, 5.836e-12, 6.365e-12,
2580 6.807e-12, 7.47e-12, 7.951e-12, 8.636e-12, 8.972e-12, 9.314e-12,
2581 9.445e-12, 1.003e-11, 1.013e-11, 9.937e-12, 9.729e-12, 9.064e-12,
2582 9.119e-12, 9.124e-12, 8.704e-12, 8.078e-12, 7.47e-12, 6.329e-12,
2583 5.674e-12, 4.808e-12, 4.119e-12, 3.554e-12, 3.103e-12, 2.731e-12,
2584 2.415e-12, 2.15e-12, 1.926e-12, 1.737e-12, 1.578e-12, 1.447e-12,
2585 1.34e-12, 1.255e-12, 1.191e-12, 1.146e-12, 1.121e-12, 1.114e-12,
2586 1.126e-12, 1.156e-12, 1.207e-12, 1.278e-12, 1.372e-12, 1.49e-12,
2587 1.633e-12, 1.805e-12, 2.01e-12, 2.249e-12, 2.528e-12, 2.852e-12,
2588 3.228e-12, 3.658e-12, 4.153e-12, 4.728e-12, 5.394e-12, 6.176e-12,
2589 7.126e-12, 8.188e-12, 9.328e-12, 1.103e-11, 1.276e-11, 1.417e-11,
2590 1.615e-11, 1.84e-11, 2.155e-11, 2.429e-11, 2.826e-11, 3.222e-11,
2591 3.664e-11, 4.14e-11, 4.906e-11, 5.536e-11, 6.327e-11, 7.088e-11,
2592 8.316e-11, 9.242e-11, 1.07e-10, 1.223e-10, 1.341e-10, 1.553e-10,
2593 1.703e-10, 1.9e-10, 2.022e-10, 2.233e-10, 2.345e-10, 2.438e-10,
2594 2.546e-10, 2.599e-10, 2.661e-10, 2.703e-10, 2.686e-10, 2.662e-10,
2595 2.56e-10, 2.552e-10, 2.378e-10, 2.252e-10, 2.146e-10, 1.885e-10,
2596 1.668e-10, 1.441e-10, 1.295e-10, 1.119e-10, 9.893e-11, 8.687e-11,
2597 7.678e-11, 6.685e-11, 5.879e-11, 5.127e-11, 4.505e-11, 3.997e-11,
2598 3.511e-11
2599 };
2600
2601 static const double h2ofrn[2001] = { .01095, .01126, .01205, .01322, .0143,
2602 .01506, .01548, .01534, .01486, .01373, .01262, .01134, .01001,
2603 .008702, .007475, .006481, .00548, .0046, .003833, .00311,
2604 .002543, .002049, .00168, .001374, .001046, 8.193e-4, 6.267e-4,
2605 4.968e-4, 3.924e-4, 2.983e-4, 2.477e-4, 1.997e-4, 1.596e-4,
2606 1.331e-4, 1.061e-4, 8.942e-5, 7.168e-5, 5.887e-5, 4.848e-5,
2607 3.817e-5, 3.17e-5, 2.579e-5, 2.162e-5, 1.768e-5, 1.49e-5,
2608 1.231e-5, 1.013e-5, 8.555e-6, 7.328e-6, 6.148e-6, 5.207e-6,
2609 4.387e-6, 3.741e-6, 3.22e-6, 2.753e-6, 2.346e-6, 1.985e-6,
2610 1.716e-6, 1.475e-6, 1.286e-6, 1.122e-6, 9.661e-7, 8.284e-7,
2611 7.057e-7, 6.119e-7, 5.29e-7, 4.571e-7, 3.948e-7, 3.432e-7,
2612 2.983e-7, 2.589e-7, 2.265e-7, 1.976e-7, 1.704e-7, 1.456e-7,
2613 1.26e-7, 1.101e-7, 9.648e-8, 8.415e-8, 7.34e-8, 6.441e-8,
2614 5.643e-8, 4.94e-8, 4.276e-8, 3.703e-8, 3.227e-8, 2.825e-8,
2615 2.478e-8, 2.174e-8, 1.898e-8, 1.664e-8, 1.458e-8, 1.278e-8,
2616 1.126e-8, 9.891e-9, 8.709e-9, 7.652e-9, 6.759e-9, 5.975e-9,
2617 5.31e-9, 4.728e-9, 4.214e-9, 3.792e-9, 3.463e-9, 3.226e-9,
2618 2.992e-9, 2.813e-9, 2.749e-9, 2.809e-9, 2.913e-9, 3.037e-9,
2619 3.413e-9, 3.738e-9, 4.189e-9, 4.808e-9, 5.978e-9, 7.088e-9,
2620 8.071e-9, 9.61e-9, 1.21e-8, 1.5e-8, 1.764e-8, 2.221e-8, 2.898e-8,
2621 3.948e-8, 5.068e-8, 6.227e-8, 7.898e-8, 1.033e-7, 1.437e-7,
2622 1.889e-7, 2.589e-7, 3.59e-7, 4.971e-7, 7.156e-7, 9.983e-7,
2623 1.381e-6, 1.929e-6, 2.591e-6, 3.453e-6, 4.57e-6, 5.93e-6,
2624 7.552e-6, 9.556e-6, 1.183e-5, 1.425e-5, 1.681e-5, 1.978e-5,
2625 2.335e-5, 2.668e-5, 3.022e-5, 3.371e-5, 3.715e-5, 3.967e-5,
2626 4.06e-5, 4.01e-5, 3.809e-5, 3.491e-5, 3.155e-5, 2.848e-5,
2627 2.678e-5, 2.66e-5, 2.811e-5, 3.071e-5, 3.294e-5, 3.459e-5,
2628 3.569e-5, 3.56e-5, 3.434e-5, 3.186e-5, 2.916e-5, 2.622e-5,
2629 2.275e-5, 1.918e-5, 1.62e-5, 1.373e-5, 1.182e-5, 1.006e-5,
2630 8.556e-6, 7.26e-6, 6.107e-6, 5.034e-6, 4.211e-6, 3.426e-6,
2631 2.865e-6, 2.446e-6, 1.998e-6, 1.628e-6, 1.242e-6, 1.005e-6,
2632 7.853e-7, 6.21e-7, 5.071e-7, 4.156e-7, 3.548e-7, 2.825e-7,
2633 2.261e-7, 1.916e-7, 1.51e-7, 1.279e-7, 1.059e-7, 9.14e-8,
2634 7.707e-8, 6.17e-8, 5.311e-8, 4.263e-8, 3.518e-8, 2.961e-8,
2635 2.457e-8, 2.119e-8, 1.712e-8, 1.439e-8, 1.201e-8, 1.003e-8,
2636 8.564e-9, 7.199e-9, 6.184e-9, 5.206e-9, 4.376e-9, 3.708e-9,
2637 3.157e-9, 2.725e-9, 2.361e-9, 2.074e-9, 1.797e-9, 1.562e-9,
2638 1.364e-9, 1.196e-9, 1.042e-9, 8.862e-10, 7.648e-10, 6.544e-10,
2639 5.609e-10, 4.791e-10, 4.108e-10, 3.531e-10, 3.038e-10, 2.618e-10,
2640 2.268e-10, 1.969e-10, 1.715e-10, 1.496e-10, 1.308e-10, 1.147e-10,
2641 1.008e-10, 8.894e-11, 7.885e-11, 7.031e-11, 6.355e-11, 5.854e-11,
2642 5.534e-11, 5.466e-11, 5.725e-11, 6.447e-11, 7.943e-11, 1.038e-10,
2643 1.437e-10, 2.04e-10, 2.901e-10, 4.051e-10, 5.556e-10, 7.314e-10,
2644 9.291e-10, 1.134e-9, 1.321e-9, 1.482e-9, 1.596e-9, 1.669e-9,
2645 1.715e-9, 1.762e-9, 1.817e-9, 1.828e-9, 1.848e-9, 1.873e-9,
2646 1.902e-9, 1.894e-9, 1.864e-9, 1.841e-9, 1.797e-9, 1.704e-9,
2647 1.559e-9, 1.382e-9, 1.187e-9, 1.001e-9, 8.468e-10, 7.265e-10,
2648 6.521e-10, 6.381e-10, 6.66e-10, 7.637e-10, 9.705e-10, 1.368e-9,
2649 1.856e-9, 2.656e-9, 3.954e-9, 5.96e-9, 8.72e-9, 1.247e-8,
2650 1.781e-8, 2.491e-8, 3.311e-8, 4.272e-8, 5.205e-8, 6.268e-8,
2651 7.337e-8, 8.277e-8, 9.185e-8, 1.004e-7, 1.091e-7, 1.159e-7,
2652 1.188e-7, 1.175e-7, 1.124e-7, 1.033e-7, 9.381e-8, 8.501e-8,
2653 7.956e-8, 7.894e-8, 8.331e-8, 9.102e-8, 9.836e-8, 1.035e-7,
2654 1.064e-7, 1.06e-7, 1.032e-7, 9.808e-8, 9.139e-8, 8.442e-8,
2655 7.641e-8, 6.881e-8, 6.161e-8, 5.404e-8, 4.804e-8, 4.446e-8,
2656 4.328e-8, 4.259e-8, 4.421e-8, 4.673e-8, 4.985e-8, 5.335e-8,
2657 5.796e-8, 6.542e-8, 7.714e-8, 8.827e-8, 1.04e-7, 1.238e-7,
2658 1.499e-7, 1.829e-7, 2.222e-7, 2.689e-7, 3.303e-7, 3.981e-7,
2659 4.84e-7, 5.91e-7, 7.363e-7, 9.087e-7, 1.139e-6, 1.455e-6,
2660 1.866e-6, 2.44e-6, 3.115e-6, 3.941e-6, 4.891e-6, 5.992e-6,
2661 7.111e-6, 8.296e-6, 9.21e-6, 9.987e-6, 1.044e-5, 1.073e-5,
2662 1.092e-5, 1.106e-5, 1.138e-5, 1.171e-5, 1.186e-5, 1.186e-5,
2663 1.179e-5, 1.166e-5, 1.151e-5, 1.16e-5, 1.197e-5, 1.241e-5,
2664 1.268e-5, 1.26e-5, 1.184e-5, 1.063e-5, 9.204e-6, 7.584e-6,
2665 6.053e-6, 4.482e-6, 3.252e-6, 2.337e-6, 1.662e-6, 1.18e-6,
2666 8.15e-7, 5.95e-7, 4.354e-7, 3.302e-7, 2.494e-7, 1.93e-7,
2667 1.545e-7, 1.25e-7, 1.039e-7, 8.602e-8, 7.127e-8, 5.897e-8,
2668 4.838e-8, 4.018e-8, 3.28e-8, 2.72e-8, 2.307e-8, 1.972e-8,
2669 1.654e-8, 1.421e-8, 1.174e-8, 1.004e-8, 8.739e-9, 7.358e-9,
2670 6.242e-9, 5.303e-9, 4.567e-9, 3.94e-9, 3.375e-9, 2.864e-9,
2671 2.422e-9, 2.057e-9, 1.75e-9, 1.505e-9, 1.294e-9, 1.101e-9,
2672 9.401e-10, 8.018e-10, 6.903e-10, 5.965e-10, 5.087e-10, 4.364e-10,
2673 3.759e-10, 3.247e-10, 2.809e-10, 2.438e-10, 2.123e-10, 1.853e-10,
2674 1.622e-10, 1.426e-10, 1.26e-10, 1.125e-10, 1.022e-10, 9.582e-11,
2675 9.388e-11, 9.801e-11, 1.08e-10, 1.276e-10, 1.551e-10, 1.903e-10,
2676 2.291e-10, 2.724e-10, 3.117e-10, 3.4e-10, 3.562e-10, 3.625e-10,
2677 3.619e-10, 3.429e-10, 3.221e-10, 2.943e-10, 2.645e-10, 2.338e-10,
2678 2.062e-10, 1.901e-10, 1.814e-10, 1.827e-10, 1.906e-10, 1.984e-10,
2679 2.04e-10, 2.068e-10, 2.075e-10, 2.018e-10, 1.959e-10, 1.897e-10,
2680 1.852e-10, 1.791e-10, 1.696e-10, 1.634e-10, 1.598e-10, 1.561e-10,
2681 1.518e-10, 1.443e-10, 1.377e-10, 1.346e-10, 1.342e-10, 1.375e-10,
2682 1.525e-10, 1.767e-10, 2.108e-10, 2.524e-10, 2.981e-10, 3.477e-10,
2683 4.262e-10, 5.326e-10, 6.646e-10, 8.321e-10, 1.069e-9, 1.386e-9,
2684 1.743e-9, 2.216e-9, 2.808e-9, 3.585e-9, 4.552e-9, 5.907e-9,
2685 7.611e-9, 9.774e-9, 1.255e-8, 1.666e-8, 2.279e-8, 3.221e-8,
2686 4.531e-8, 6.4e-8, 9.187e-8, 1.295e-7, 1.825e-7, 2.431e-7,
2687 3.181e-7, 4.009e-7, 4.941e-7, 5.88e-7, 6.623e-7, 7.155e-7,
2688 7.451e-7, 7.594e-7, 7.541e-7, 7.467e-7, 7.527e-7, 7.935e-7,
2689 8.461e-7, 8.954e-7, 9.364e-7, 9.843e-7, 1.024e-6, 1.05e-6,
2690 1.059e-6, 1.074e-6, 1.072e-6, 1.043e-6, 9.789e-7, 8.803e-7,
2691 7.662e-7, 6.378e-7, 5.133e-7, 3.958e-7, 2.914e-7, 2.144e-7,
2692 1.57e-7, 1.14e-7, 8.47e-8, 6.2e-8, 4.657e-8, 3.559e-8, 2.813e-8,
2693 2.222e-8, 1.769e-8, 1.391e-8, 1.125e-8, 9.186e-9, 7.704e-9,
2694 6.447e-9, 5.381e-9, 4.442e-9, 3.669e-9, 3.057e-9, 2.564e-9,
2695 2.153e-9, 1.784e-9, 1.499e-9, 1.281e-9, 1.082e-9, 9.304e-10,
2696 8.169e-10, 6.856e-10, 5.866e-10, 5.043e-10, 4.336e-10, 3.731e-10,
2697 3.175e-10, 2.745e-10, 2.374e-10, 2.007e-10, 1.737e-10, 1.508e-10,
2698 1.302e-10, 1.13e-10, 9.672e-11, 8.375e-11, 7.265e-11, 6.244e-11,
2699 5.343e-11, 4.654e-11, 3.975e-11, 3.488e-11, 3.097e-11, 2.834e-11,
2700 2.649e-11, 2.519e-11, 2.462e-11, 2.443e-11, 2.44e-11, 2.398e-11,
2701 2.306e-11, 2.183e-11, 2.021e-11, 1.821e-11, 1.599e-11, 1.403e-11,
2702 1.196e-11, 1.023e-11, 8.728e-12, 7.606e-12, 6.941e-12, 6.545e-12,
2703 6.484e-12, 6.6e-12, 6.718e-12, 6.785e-12, 6.746e-12, 6.724e-12,
2704 6.764e-12, 6.995e-12, 7.144e-12, 7.32e-12, 7.33e-12, 7.208e-12,
2705 6.789e-12, 6.09e-12, 5.337e-12, 4.62e-12, 4.037e-12, 3.574e-12,
2706 3.311e-12, 3.346e-12, 3.566e-12, 3.836e-12, 4.076e-12, 4.351e-12,
2707 4.691e-12, 5.114e-12, 5.427e-12, 6.167e-12, 7.436e-12, 8.842e-12,
2708 1.038e-11, 1.249e-11, 1.54e-11, 1.915e-11, 2.48e-11, 3.256e-11,
2709 4.339e-11, 5.611e-11, 7.519e-11, 1.037e-10, 1.409e-10, 1.883e-10,
2710 2.503e-10, 3.38e-10, 4.468e-10, 5.801e-10, 7.335e-10, 8.98e-10,
2711 1.11e-9, 1.363e-9, 1.677e-9, 2.104e-9, 2.681e-9, 3.531e-9,
2712 4.621e-9, 6.106e-9, 8.154e-9, 1.046e-8, 1.312e-8, 1.607e-8,
2713 1.948e-8, 2.266e-8, 2.495e-8, 2.655e-8, 2.739e-8, 2.739e-8,
2714 2.662e-8, 2.589e-8, 2.59e-8, 2.664e-8, 2.833e-8, 3.023e-8,
2715 3.305e-8, 3.558e-8, 3.793e-8, 3.961e-8, 4.056e-8, 4.102e-8,
2716 4.025e-8, 3.917e-8, 3.706e-8, 3.493e-8, 3.249e-8, 3.096e-8,
2717 3.011e-8, 3.111e-8, 3.395e-8, 3.958e-8, 4.875e-8, 6.066e-8,
2718 7.915e-8, 1.011e-7, 1.3e-7, 1.622e-7, 2.003e-7, 2.448e-7,
2719 2.863e-7, 3.317e-7, 3.655e-7, 3.96e-7, 4.098e-7, 4.168e-7,
2720 4.198e-7, 4.207e-7, 4.289e-7, 4.384e-7, 4.471e-7, 4.524e-7,
2721 4.574e-7, 4.633e-7, 4.785e-7, 5.028e-7, 5.371e-7, 5.727e-7,
2722 5.955e-7, 5.998e-7, 5.669e-7, 5.082e-7, 4.397e-7, 3.596e-7,
2723 2.814e-7, 2.074e-7, 1.486e-7, 1.057e-7, 7.25e-8, 4.946e-8,
2724 3.43e-8, 2.447e-8, 1.793e-8, 1.375e-8, 1.096e-8, 9.091e-9,
2725 7.709e-9, 6.631e-9, 5.714e-9, 4.886e-9, 4.205e-9, 3.575e-9,
2726 3.07e-9, 2.631e-9, 2.284e-9, 2.002e-9, 1.745e-9, 1.509e-9,
2727 1.284e-9, 1.084e-9, 9.163e-10, 7.663e-10, 6.346e-10, 5.283e-10,
2728 4.354e-10, 3.59e-10, 2.982e-10, 2.455e-10, 2.033e-10, 1.696e-10,
2729 1.432e-10, 1.211e-10, 1.02e-10, 8.702e-11, 7.38e-11, 6.293e-11,
2730 5.343e-11, 4.532e-11, 3.907e-11, 3.365e-11, 2.945e-11, 2.558e-11,
2731 2.192e-11, 1.895e-11, 1.636e-11, 1.42e-11, 1.228e-11, 1.063e-11,
2732 9.348e-12, 8.2e-12, 7.231e-12, 6.43e-12, 5.702e-12, 5.052e-12,
2733 4.469e-12, 4e-12, 3.679e-12, 3.387e-12, 3.197e-12, 3.158e-12,
2734 3.327e-12, 3.675e-12, 4.292e-12, 5.437e-12, 7.197e-12, 1.008e-11,
2735 1.437e-11, 2.035e-11, 2.905e-11, 4.062e-11, 5.528e-11, 7.177e-11,
2736 9.064e-11, 1.109e-10, 1.297e-10, 1.473e-10, 1.652e-10, 1.851e-10,
2737 2.079e-10, 2.313e-10, 2.619e-10, 2.958e-10, 3.352e-10, 3.796e-10,
2738 4.295e-10, 4.923e-10, 5.49e-10, 5.998e-10, 6.388e-10, 6.645e-10,
2739 6.712e-10, 6.549e-10, 6.38e-10, 6.255e-10, 6.253e-10, 6.459e-10,
2740 6.977e-10, 7.59e-10, 8.242e-10, 8.92e-10, 9.403e-10, 9.701e-10,
2741 9.483e-10, 9.135e-10, 8.617e-10, 7.921e-10, 7.168e-10, 6.382e-10,
2742 5.677e-10, 5.045e-10, 4.572e-10, 4.312e-10, 4.145e-10, 4.192e-10,
2743 4.541e-10, 5.368e-10, 6.771e-10, 8.962e-10, 1.21e-9, 1.659e-9,
2744 2.33e-9, 3.249e-9, 4.495e-9, 5.923e-9, 7.642e-9, 9.607e-9,
2745 1.178e-8, 1.399e-8, 1.584e-8, 1.73e-8, 1.816e-8, 1.87e-8,
2746 1.868e-8, 1.87e-8, 1.884e-8, 1.99e-8, 2.15e-8, 2.258e-8,
2747 2.364e-8, 2.473e-8, 2.602e-8, 2.689e-8, 2.731e-8, 2.816e-8,
2748 2.859e-8, 2.839e-8, 2.703e-8, 2.451e-8, 2.149e-8, 1.787e-8,
2749 1.449e-8, 1.111e-8, 8.282e-9, 6.121e-9, 4.494e-9, 3.367e-9,
2750 2.487e-9, 1.885e-9, 1.503e-9, 1.249e-9, 1.074e-9, 9.427e-10,
2751 8.439e-10, 7.563e-10, 6.772e-10, 6.002e-10, 5.254e-10, 4.588e-10,
2752 3.977e-10, 3.449e-10, 3.003e-10, 2.624e-10, 2.335e-10, 2.04e-10,
2753 1.771e-10, 1.534e-10, 1.296e-10, 1.097e-10, 9.173e-11, 7.73e-11,
2754 6.547e-11, 5.191e-11, 4.198e-11, 3.361e-11, 2.732e-11, 2.244e-11,
2755 1.791e-11, 1.509e-11, 1.243e-11, 1.035e-11, 8.969e-12, 7.394e-12,
2756 6.323e-12, 5.282e-12, 4.543e-12, 3.752e-12, 3.14e-12, 2.6e-12,
2757 2.194e-12, 1.825e-12, 1.511e-12, 1.245e-12, 1.024e-12, 8.539e-13,
2758 7.227e-13, 6.102e-13, 5.189e-13, 4.43e-13, 3.774e-13, 3.236e-13,
2759 2.8e-13, 2.444e-13, 2.156e-13, 1.932e-13, 1.775e-13, 1.695e-13,
2760 1.672e-13, 1.704e-13, 1.825e-13, 2.087e-13, 2.614e-13, 3.377e-13,
2761 4.817e-13, 6.989e-13, 1.062e-12, 1.562e-12, 2.288e-12, 3.295e-12,
2762 4.55e-12, 5.965e-12, 7.546e-12, 9.395e-12, 1.103e-11, 1.228e-11,
2763 1.318e-11, 1.38e-11, 1.421e-11, 1.39e-11, 1.358e-11, 1.336e-11,
2764 1.342e-11, 1.356e-11, 1.424e-11, 1.552e-11, 1.73e-11, 1.951e-11,
2765 2.128e-11, 2.249e-11, 2.277e-11, 2.226e-11, 2.111e-11, 1.922e-11,
2766 1.775e-11, 1.661e-11, 1.547e-11, 1.446e-11, 1.323e-11, 1.21e-11,
2767 1.054e-11, 9.283e-12, 8.671e-12, 8.67e-12, 9.429e-12, 1.062e-11,
2768 1.255e-11, 1.506e-11, 1.818e-11, 2.26e-11, 2.831e-11, 3.723e-11,
2769 5.092e-11, 6.968e-11, 9.826e-11, 1.349e-10, 1.87e-10, 2.58e-10,
2770 3.43e-10, 4.424e-10, 5.521e-10, 6.812e-10, 8.064e-10, 9.109e-10,
2771 9.839e-10, 1.028e-9, 1.044e-9, 1.029e-9, 1.005e-9, 1.002e-9,
2772 1.038e-9, 1.122e-9, 1.233e-9, 1.372e-9, 1.524e-9, 1.665e-9,
2773 1.804e-9, 1.908e-9, 2.015e-9, 2.117e-9, 2.219e-9, 2.336e-9,
2774 2.531e-9, 2.805e-9, 3.189e-9, 3.617e-9, 4.208e-9, 4.911e-9,
2775 5.619e-9, 6.469e-9, 7.188e-9, 7.957e-9, 8.503e-9, 9.028e-9,
2776 9.571e-9, 9.99e-9, 1.055e-8, 1.102e-8, 1.132e-8, 1.141e-8,
2777 1.145e-8, 1.145e-8, 1.176e-8, 1.224e-8, 1.304e-8, 1.388e-8,
2778 1.445e-8, 1.453e-8, 1.368e-8, 1.22e-8, 1.042e-8, 8.404e-9,
2779 6.403e-9, 4.643e-9, 3.325e-9, 2.335e-9, 1.638e-9, 1.19e-9,
2780 9.161e-10, 7.412e-10, 6.226e-10, 5.516e-10, 5.068e-10, 4.831e-10,
2781 4.856e-10, 5.162e-10, 5.785e-10, 6.539e-10, 7.485e-10, 8.565e-10,
2782 9.534e-10, 1.052e-9, 1.115e-9, 1.173e-9, 1.203e-9, 1.224e-9,
2783 1.243e-9, 1.248e-9, 1.261e-9, 1.265e-9, 1.25e-9, 1.217e-9,
2784 1.176e-9, 1.145e-9, 1.153e-9, 1.199e-9, 1.278e-9, 1.366e-9,
2785 1.426e-9, 1.444e-9, 1.365e-9, 1.224e-9, 1.051e-9, 8.539e-10,
2786 6.564e-10, 4.751e-10, 3.404e-10, 2.377e-10, 1.631e-10, 1.114e-10,
2787 7.87e-11, 5.793e-11, 4.284e-11, 3.3e-11, 2.62e-11, 2.152e-11,
2788 1.777e-11, 1.496e-11, 1.242e-11, 1.037e-11, 8.725e-12, 7.004e-12,
2789 5.718e-12, 4.769e-12, 3.952e-12, 3.336e-12, 2.712e-12, 2.213e-12,
2790 1.803e-12, 1.492e-12, 1.236e-12, 1.006e-12, 8.384e-13, 7.063e-13,
2791 5.879e-13, 4.93e-13, 4.171e-13, 3.569e-13, 3.083e-13, 2.688e-13,
2792 2.333e-13, 2.035e-13, 1.82e-13, 1.682e-13, 1.635e-13, 1.674e-13,
2793 1.769e-13, 2.022e-13, 2.485e-13, 3.127e-13, 4.25e-13, 5.928e-13,
2794 8.514e-13, 1.236e-12, 1.701e-12, 2.392e-12, 3.231e-12, 4.35e-12,
2795 5.559e-12, 6.915e-12, 8.519e-12, 1.013e-11, 1.146e-11, 1.24e-11,
2796 1.305e-11, 1.333e-11, 1.318e-11, 1.263e-11, 1.238e-11, 1.244e-11,
2797 1.305e-11, 1.432e-11, 1.623e-11, 1.846e-11, 2.09e-11, 2.328e-11,
2798 2.526e-11, 2.637e-11, 2.702e-11, 2.794e-11, 2.889e-11, 2.989e-11,
2799 3.231e-11, 3.68e-11, 4.375e-11, 5.504e-11, 7.159e-11, 9.502e-11,
2800 1.279e-10, 1.645e-10, 2.098e-10, 2.618e-10, 3.189e-10, 3.79e-10,
2801 4.303e-10, 4.753e-10, 5.027e-10, 5.221e-10, 5.293e-10, 5.346e-10,
2802 5.467e-10, 5.796e-10, 6.2e-10, 6.454e-10, 6.705e-10, 6.925e-10,
2803 7.233e-10, 7.35e-10, 7.538e-10, 7.861e-10, 8.077e-10, 8.132e-10,
2804 7.749e-10, 7.036e-10, 6.143e-10, 5.093e-10, 4.089e-10, 3.092e-10,
2805 2.299e-10, 1.705e-10, 1.277e-10, 9.723e-11, 7.533e-11, 6.126e-11,
2806 5.154e-11, 4.428e-11, 3.913e-11, 3.521e-11, 3.297e-11, 3.275e-11,
2807 3.46e-11, 3.798e-11, 4.251e-11, 4.745e-11, 5.232e-11, 5.606e-11,
2808 5.82e-11, 5.88e-11, 5.79e-11, 5.661e-11, 5.491e-11, 5.366e-11,
2809 5.341e-11, 5.353e-11, 5.336e-11, 5.293e-11, 5.248e-11, 5.235e-11,
2810 5.208e-11, 5.322e-11, 5.521e-11, 5.725e-11, 5.827e-11, 5.685e-11,
2811 5.245e-11, 4.612e-11, 3.884e-11, 3.129e-11, 2.404e-11, 1.732e-11,
2812 1.223e-11, 8.574e-12, 5.888e-12, 3.986e-12, 2.732e-12, 1.948e-12,
2813 1.414e-12, 1.061e-12, 8.298e-13, 6.612e-13, 5.413e-13, 4.472e-13,
2814 3.772e-13, 3.181e-13, 2.645e-13, 2.171e-13, 1.778e-13, 1.464e-13,
2815 1.183e-13, 9.637e-14, 7.991e-14, 6.668e-14, 5.57e-14, 4.663e-14,
2816 3.848e-14, 3.233e-14, 2.706e-14, 2.284e-14, 1.944e-14, 1.664e-14,
2817 1.43e-14, 1.233e-14, 1.066e-14, 9.234e-15, 8.023e-15, 6.993e-15,
2818 6.119e-15, 5.384e-15, 4.774e-15, 4.283e-15, 3.916e-15, 3.695e-15,
2819 3.682e-15, 4.004e-15, 4.912e-15, 6.853e-15, 1.056e-14, 1.712e-14,
2820 2.804e-14, 4.516e-14, 7.113e-14, 1.084e-13, 1.426e-13, 1.734e-13,
2821 1.978e-13, 2.194e-13, 2.388e-13, 2.489e-13, 2.626e-13, 2.865e-13,
2822 3.105e-13, 3.387e-13, 3.652e-13, 3.984e-13, 4.398e-13, 4.906e-13,
2823 5.55e-13, 6.517e-13, 7.813e-13, 9.272e-13, 1.164e-12, 1.434e-12,
2824 1.849e-12, 2.524e-12, 3.328e-12, 4.523e-12, 6.108e-12, 8.207e-12,
2825 1.122e-11, 1.477e-11, 1.9e-11, 2.412e-11, 2.984e-11, 3.68e-11,
2826 4.353e-11, 4.963e-11, 5.478e-11, 5.903e-11, 6.233e-11, 6.483e-11,
2827 6.904e-11, 7.569e-11, 8.719e-11, 1.048e-10, 1.278e-10, 1.557e-10,
2828 1.869e-10, 2.218e-10, 2.61e-10, 2.975e-10, 3.371e-10, 3.746e-10,
2829 4.065e-10, 4.336e-10, 4.503e-10, 4.701e-10, 4.8e-10, 4.917e-10,
2830 5.038e-10, 5.128e-10, 5.143e-10, 5.071e-10, 5.019e-10, 5.025e-10,
2831 5.183e-10, 5.496e-10, 5.877e-10, 6.235e-10, 6.42e-10, 6.234e-10,
2832 5.698e-10, 4.916e-10, 4.022e-10, 3.126e-10, 2.282e-10, 1.639e-10,
2833 1.142e-10, 7.919e-11, 5.69e-11, 4.313e-11, 3.413e-11, 2.807e-11,
2834 2.41e-11, 2.166e-11, 2.024e-11, 1.946e-11, 1.929e-11, 1.963e-11,
2835 2.035e-11, 2.162e-11, 2.305e-11, 2.493e-11, 2.748e-11, 3.048e-11,
2836 3.413e-11, 3.754e-11, 4.155e-11, 4.635e-11, 5.11e-11, 5.734e-11,
2837 6.338e-11, 6.99e-11, 7.611e-11, 8.125e-11, 8.654e-11, 8.951e-11,
2838 9.182e-11, 9.31e-11, 9.273e-11, 9.094e-11, 8.849e-11, 8.662e-11,
2839 8.67e-11, 8.972e-11, 9.566e-11, 1.025e-10, 1.083e-10, 1.111e-10,
2840 1.074e-10, 9.771e-11, 8.468e-11, 6.958e-11, 5.47e-11, 4.04e-11,
2841 2.94e-11, 2.075e-11, 1.442e-11, 1.01e-11, 7.281e-12, 5.409e-12,
2842 4.138e-12, 3.304e-12, 2.784e-12, 2.473e-12, 2.273e-12, 2.186e-12,
2843 2.118e-12, 2.066e-12, 1.958e-12, 1.818e-12, 1.675e-12, 1.509e-12,
2844 1.349e-12, 1.171e-12, 9.838e-13, 8.213e-13, 6.765e-13, 5.378e-13,
2845 4.161e-13, 3.119e-13, 2.279e-13, 1.637e-13, 1.152e-13, 8.112e-14,
2846 5.919e-14, 4.47e-14, 3.492e-14, 2.811e-14, 2.319e-14, 1.948e-14,
2847 1.66e-14, 1.432e-14, 1.251e-14, 1.109e-14, 1.006e-14, 9.45e-15,
2848 9.384e-15, 1.012e-14, 1.216e-14, 1.636e-14, 2.305e-14, 3.488e-14,
2849 5.572e-14, 8.479e-14, 1.265e-13, 1.905e-13, 2.73e-13, 3.809e-13,
2850 4.955e-13, 6.303e-13, 7.861e-13, 9.427e-13, 1.097e-12, 1.212e-12,
2851 1.328e-12, 1.415e-12, 1.463e-12, 1.495e-12, 1.571e-12, 1.731e-12,
2852 1.981e-12, 2.387e-12, 2.93e-12, 3.642e-12, 4.584e-12, 5.822e-12,
2853 7.278e-12, 9.193e-12, 1.135e-11, 1.382e-11, 1.662e-11, 1.958e-11,
2854 2.286e-11, 2.559e-11, 2.805e-11, 2.988e-11, 3.106e-11, 3.182e-11,
2855 3.2e-11, 3.258e-11, 3.362e-11, 3.558e-11, 3.688e-11, 3.8e-11,
2856 3.929e-11, 4.062e-11, 4.186e-11, 4.293e-11, 4.48e-11, 4.643e-11,
2857 4.704e-11, 4.571e-11, 4.206e-11, 3.715e-11, 3.131e-11, 2.541e-11,
2858 1.978e-11, 1.508e-11, 1.146e-11, 8.7e-12, 6.603e-12, 5.162e-12,
2859 4.157e-12, 3.408e-12, 2.829e-12, 2.405e-12, 2.071e-12, 1.826e-12,
2860 1.648e-12, 1.542e-12, 1.489e-12, 1.485e-12, 1.493e-12, 1.545e-12,
2861 1.637e-12, 1.814e-12, 2.061e-12, 2.312e-12, 2.651e-12, 3.03e-12,
2862 3.46e-12, 3.901e-12, 4.306e-12, 4.721e-12, 5.008e-12, 5.281e-12,
2863 5.541e-12, 5.791e-12, 6.115e-12, 6.442e-12, 6.68e-12, 6.791e-12,
2864 6.831e-12, 6.839e-12, 6.946e-12, 7.128e-12, 7.537e-12, 8.036e-12,
2865 8.392e-12, 8.526e-12, 8.11e-12, 7.325e-12, 6.329e-12, 5.183e-12,
2866 4.081e-12, 2.985e-12, 2.141e-12, 1.492e-12, 1.015e-12, 6.684e-13,
2867 4.414e-13, 2.987e-13, 2.038e-13, 1.391e-13, 9.86e-14, 7.24e-14,
2868 5.493e-14, 4.288e-14, 3.427e-14, 2.787e-14, 2.296e-14, 1.909e-14,
2869 1.598e-14, 1.344e-14, 1.135e-14, 9.616e-15, 8.169e-15, 6.957e-15,
2870 5.938e-15, 5.08e-15, 4.353e-15, 3.738e-15, 3.217e-15, 2.773e-15,
2871 2.397e-15, 2.077e-15, 1.805e-15, 1.575e-15, 1.382e-15, 1.221e-15,
2872 1.09e-15, 9.855e-16, 9.068e-16, 8.537e-16, 8.27e-16, 8.29e-16,
2873 8.634e-16, 9.359e-16, 1.055e-15, 1.233e-15, 1.486e-15, 1.839e-15,
2874 2.326e-15, 2.998e-15, 3.934e-15, 5.256e-15, 7.164e-15, 9.984e-15,
2875 1.427e-14, 2.099e-14, 3.196e-14, 5.121e-14, 7.908e-14, 1.131e-13,
2876 1.602e-13, 2.239e-13, 3.075e-13, 4.134e-13, 5.749e-13, 7.886e-13,
2877 1.071e-12, 1.464e-12, 2.032e-12, 2.8e-12, 3.732e-12, 4.996e-12,
2878 6.483e-12, 8.143e-12, 1.006e-11, 1.238e-11, 1.484e-11, 1.744e-11,
2879 2.02e-11, 2.274e-11, 2.562e-11, 2.848e-11, 3.191e-11, 3.617e-11,
2880 4.081e-11, 4.577e-11, 4.937e-11, 5.204e-11, 5.401e-11, 5.462e-11,
2881 5.507e-11, 5.51e-11, 5.605e-11, 5.686e-11, 5.739e-11, 5.766e-11,
2882 5.74e-11, 5.754e-11, 5.761e-11, 5.777e-11, 5.712e-11, 5.51e-11,
2883 5.088e-11, 4.438e-11, 3.728e-11, 2.994e-11, 2.305e-11, 1.715e-11,
2884 1.256e-11, 9.208e-12, 6.745e-12, 5.014e-12, 3.785e-12, 2.9e-12,
2885 2.239e-12, 1.757e-12, 1.414e-12, 1.142e-12, 9.482e-13, 8.01e-13,
2886 6.961e-13, 6.253e-13, 5.735e-13, 5.433e-13, 5.352e-13, 5.493e-13,
2887 5.706e-13, 6.068e-13, 6.531e-13, 7.109e-13, 7.767e-13, 8.59e-13,
2888 9.792e-13, 1.142e-12, 1.371e-12, 1.65e-12, 1.957e-12, 2.302e-12,
2889 2.705e-12, 3.145e-12, 3.608e-12, 4.071e-12, 4.602e-12, 5.133e-12,
2890 5.572e-12, 5.987e-12, 6.248e-12, 6.533e-12, 6.757e-12, 6.935e-12,
2891 7.224e-12, 7.422e-12, 7.538e-12, 7.547e-12, 7.495e-12, 7.543e-12,
2892 7.725e-12, 8.139e-12, 8.627e-12, 9.146e-12, 9.443e-12, 9.318e-12,
2893 8.649e-12, 7.512e-12, 6.261e-12, 4.915e-12, 3.647e-12, 2.597e-12,
2894 1.785e-12, 1.242e-12, 8.66e-13, 6.207e-13, 4.61e-13, 3.444e-13,
2895 2.634e-13, 2.1e-13, 1.725e-13, 1.455e-13, 1.237e-13, 1.085e-13,
2896 9.513e-14, 7.978e-14, 6.603e-14, 5.288e-14, 4.084e-14, 2.952e-14,
2897 2.157e-14, 1.593e-14, 1.199e-14, 9.267e-15, 7.365e-15, 6.004e-15,
2898 4.995e-15, 4.218e-15, 3.601e-15, 3.101e-15, 2.692e-15, 2.36e-15,
2899 2.094e-15, 1.891e-15, 1.755e-15, 1.699e-15, 1.755e-15, 1.987e-15,
2900 2.506e-15, 3.506e-15, 5.289e-15, 8.311e-15, 1.325e-14, 2.129e-14,
2901 3.237e-14, 4.595e-14, 6.441e-14, 8.433e-14, 1.074e-13, 1.383e-13,
2902 1.762e-13, 2.281e-13, 2.831e-13, 3.523e-13, 4.38e-13, 5.304e-13,
2903 6.29e-13, 7.142e-13, 8.032e-13, 8.934e-13, 9.888e-13, 1.109e-12,
2904 1.261e-12, 1.462e-12, 1.74e-12, 2.099e-12, 2.535e-12, 3.008e-12,
2905 3.462e-12, 3.856e-12, 4.098e-12, 4.239e-12, 4.234e-12, 4.132e-12,
2906 3.986e-12, 3.866e-12, 3.829e-12, 3.742e-12, 3.705e-12, 3.694e-12,
2907 3.765e-12, 3.849e-12, 3.929e-12, 4.056e-12, 4.092e-12, 4.047e-12,
2908 3.792e-12, 3.407e-12, 2.953e-12, 2.429e-12, 1.931e-12, 1.46e-12,
2909 1.099e-12, 8.199e-13, 6.077e-13, 4.449e-13, 3.359e-13, 2.524e-13,
2910 1.881e-13, 1.391e-13, 1.02e-13, 7.544e-14, 5.555e-14, 4.22e-14,
2911 3.321e-14, 2.686e-14, 2.212e-14, 1.78e-14, 1.369e-14, 1.094e-14,
2912 9.13e-15, 8.101e-15, 7.828e-15, 8.393e-15, 1.012e-14, 1.259e-14,
2913 1.538e-14, 1.961e-14, 2.619e-14, 3.679e-14, 5.049e-14, 6.917e-14,
2914 8.88e-14, 1.115e-13, 1.373e-13, 1.619e-13, 1.878e-13, 2.111e-13,
2915 2.33e-13, 2.503e-13, 2.613e-13, 2.743e-13, 2.826e-13, 2.976e-13,
2916 3.162e-13, 3.36e-13, 3.491e-13, 3.541e-13, 3.595e-13, 3.608e-13,
2917 3.709e-13, 3.869e-13, 4.12e-13, 4.366e-13, 4.504e-13, 4.379e-13,
2918 3.955e-13, 3.385e-13, 2.741e-13, 2.089e-13, 1.427e-13, 9.294e-14,
2919 5.775e-14, 3.565e-14, 2.21e-14, 1.398e-14, 9.194e-15, 6.363e-15,
2920 4.644e-15, 3.55e-15, 2.808e-15, 2.274e-15, 1.871e-15, 1.557e-15,
2921 1.308e-15, 1.108e-15, 9.488e-16, 8.222e-16, 7.238e-16, 6.506e-16,
2922 6.008e-16, 5.742e-16, 5.724e-16, 5.991e-16, 6.625e-16, 7.775e-16,
2923 9.734e-16, 1.306e-15, 1.88e-15, 2.879e-15, 4.616e-15, 7.579e-15,
2924 1.248e-14, 2.03e-14, 3.244e-14, 5.171e-14, 7.394e-14, 9.676e-14,
2925 1.199e-13, 1.467e-13, 1.737e-13, 2.02e-13, 2.425e-13, 3.016e-13,
2926 3.7e-13, 4.617e-13, 5.949e-13, 7.473e-13, 9.378e-13, 1.191e-12,
2927 1.481e-12, 1.813e-12, 2.232e-12, 2.722e-12, 3.254e-12, 3.845e-12,
2928 4.458e-12, 5.048e-12, 5.511e-12, 5.898e-12, 6.204e-12, 6.293e-12,
2929 6.386e-12, 6.467e-12, 6.507e-12, 6.466e-12, 6.443e-12, 6.598e-12,
2930 6.873e-12, 7.3e-12, 7.816e-12, 8.368e-12, 8.643e-12, 8.466e-12,
2931 7.871e-12, 6.853e-12, 5.714e-12, 4.482e-12, 3.392e-12, 2.613e-12,
2932 2.008e-12, 1.562e-12, 1.228e-12, 9.888e-13, 7.646e-13, 5.769e-13,
2933 4.368e-13, 3.324e-13, 2.508e-13, 1.916e-13
2934 };
2935
2936 static const double xfcrev[15] =
2937 { 1.003, 1.009, 1.015, 1.023, 1.029, 1.033, 1.037,
2938 1.039, 1.04, 1.046, 1.036, 1.027, 1.01, 1.002, 1.
2939 };
2940
2941 double sfac;
2942
2943 /* Get H2O continuum absorption... */
2944 const double xw = nu / 10 + 1;
2945 if (xw >= 1 && xw < 2001) {
2946 const int iw = (int) xw;
2947 const double dw = xw - iw;
2948 const double ew = 1 - dw;
2949 const double cw296 = ew * h2o296[iw - 1] + dw * h2o296[iw];
2950 const double cw260 = ew * h2o260[iw - 1] + dw * h2o260[iw];
2951 const double cwfrn = ew * h2ofrn[iw - 1] + dw * h2ofrn[iw];
2952 if (nu <= 820 || nu >= 960) {
2953 sfac = 1;
2954 } else {
2955 const double xx = (nu - 820) / 10;
2956 const int ix = (int) xx;
2957 const double dx = xx - ix;
2958 sfac = (1 - dx) * xfcrev[ix] + dx * xfcrev[ix + 1];
2959 }
2960 const double ctwslf =
2961 sfac * cw296 * pow(cw260 / cw296, (296 - t) / (296 - 260));
2962 const double vf2 = POW2(nu - 370);
2963 const double vf6 = POW3(vf2);
2964 const double fscal = 36100 / (vf2 + vf6 * 1e-8 + 36100) * -.25 + 1;
2965 const double ctwfrn = cwfrn * fscal;
2966 const double a1 = nu * u * tanh(.7193876 / t * nu);
2967 const double a2 = 296 / t;
2968 const double a3 = p / P0 * (q * ctwslf + (1 - q) * ctwfrn) * 1e-20;
2969 return a1 * a2 * a3;
2970 } else
2971 return 0;
2972}
2973
2974/*****************************************************************************/
2975
2976double ctmn2(
2977 const double nu,
2978 const double p,
2979 const double t) {
2980
2981 static const double ba[98] =
2982 { 0., 4.45e-8, 5.22e-8, 6.46e-8, 7.75e-8, 9.03e-8,
2983 1.06e-7, 1.21e-7, 1.37e-7, 1.57e-7, 1.75e-7, 2.01e-7, 2.3e-7,
2984 2.59e-7, 2.95e-7, 3.26e-7, 3.66e-7, 4.05e-7, 4.47e-7, 4.92e-7,
2985 5.34e-7, 5.84e-7, 6.24e-7, 6.67e-7, 7.14e-7, 7.26e-7, 7.54e-7,
2986 7.84e-7, 8.09e-7, 8.42e-7, 8.62e-7, 8.87e-7, 9.11e-7, 9.36e-7,
2987 9.76e-7, 1.03e-6, 1.11e-6, 1.23e-6, 1.39e-6, 1.61e-6, 1.76e-6,
2988 1.94e-6, 1.97e-6, 1.87e-6, 1.75e-6, 1.56e-6, 1.42e-6, 1.35e-6,
2989 1.32e-6, 1.29e-6, 1.29e-6, 1.29e-6, 1.3e-6, 1.32e-6, 1.33e-6,
2990 1.34e-6, 1.35e-6, 1.33e-6, 1.31e-6, 1.29e-6, 1.24e-6, 1.2e-6,
2991 1.16e-6, 1.1e-6, 1.04e-6, 9.96e-7, 9.38e-7, 8.63e-7, 7.98e-7,
2992 7.26e-7, 6.55e-7, 5.94e-7, 5.35e-7, 4.74e-7, 4.24e-7, 3.77e-7,
2993 3.33e-7, 2.96e-7, 2.63e-7, 2.34e-7, 2.08e-7, 1.85e-7, 1.67e-7,
2994 1.47e-7, 1.32e-7, 1.2e-7, 1.09e-7, 9.85e-8, 9.08e-8, 8.18e-8,
2995 7.56e-8, 6.85e-8, 6.14e-8, 5.83e-8, 5.77e-8, 5e-8, 4.32e-8, 0.
2996 };
2997
2998 static const double betaa[98] =
2999 { 802., 802., 761., 722., 679., 646., 609., 562.,
3000 511., 472., 436., 406., 377., 355., 338., 319., 299., 278., 255.,
3001 233., 208., 184., 149., 107., 66., 25., -13., -49., -82., -104.,
3002 -119., -130., -139., -144., -146., -146., -147., -148., -150.,
3003 -153., -160., -169., -181., -189., -195., -200., -205., -209.,
3004 -211., -210., -210., -209., -205., -199., -190., -180., -168.,
3005 -157., -143., -126., -108., -89., -63., -32., 1., 35., 65., 95.,
3006 121., 141., 152., 161., 164., 164., 161., 155., 148., 143., 137.,
3007 133., 131., 133., 139., 150., 165., 187., 213., 248., 284., 321.,
3008 372., 449., 514., 569., 609., 642., 673., 673.
3009 };
3010
3011 static const double nua[98] =
3012 { 2120., 2125., 2130., 2135., 2140., 2145., 2150.,
3013 2155., 2160., 2165., 2170., 2175., 2180., 2185., 2190., 2195.,
3014 2200., 2205., 2210., 2215., 2220., 2225., 2230., 2235., 2240.,
3015 2245., 2250., 2255., 2260., 2265., 2270., 2275., 2280., 2285.,
3016 2290., 2295., 2300., 2305., 2310., 2315., 2320., 2325., 2330.,
3017 2335., 2340., 2345., 2350., 2355., 2360., 2365., 2370., 2375.,
3018 2380., 2385., 2390., 2395., 2400., 2405., 2410., 2415., 2420.,
3019 2425., 2430., 2435., 2440., 2445., 2450., 2455., 2460., 2465.,
3020 2470., 2475., 2480., 2485., 2490., 2495., 2500., 2505., 2510.,
3021 2515., 2520., 2525., 2530., 2535., 2540., 2545., 2550., 2555.,
3022 2560., 2565., 2570., 2575., 2580., 2585., 2590., 2595., 2600., 2605.
3023 };
3024
3025 const double t0 = 273.0, tr = 296.0;
3026
3027 /* Check wavenumber range... */
3028 if (nu < nua[0] || nu > nua[97])
3029 return 0;
3030
3031 /* Interpolate B and beta... */
3032 const int idx = locate_reg(nua, 98, nu);
3033 const double b =
3034 1e6 * LIN(nua[idx], ba[idx], nua[idx + 1], ba[idx + 1], nu);
3035 const double beta =
3036 LIN(nua[idx], betaa[idx], nua[idx + 1], betaa[idx + 1], nu);
3037
3038 /* Compute absorption coefficient... */
3039 return 0.1 * POW2(p / P0 * t0 / t) * exp(beta * (1 / tr - 1 / t))
3040 * N2 * b * (N2 + (1 - N2) * (1.294 - 0.4545 * t / tr));
3041}
3042
3043/*****************************************************************************/
3044
3045double ctmo2(
3046 const double nu,
3047 const double p,
3048 const double t) {
3049
3050 static const double ba[90] =
3051 { 0., .061, .074, .084, .096, .12, .162, .208, .246,
3052 .285, .314, .38, .444, .5, .571, .673, .768, .853, .966, 1.097,
3053 1.214, 1.333, 1.466, 1.591, 1.693, 1.796, 1.922, 2.037, 2.154,
3054 2.264, 2.375, 2.508, 2.671, 2.847, 3.066, 3.417, 3.828, 4.204,
3055 4.453, 4.599, 4.528, 4.284, 3.955, 3.678, 3.477, 3.346, 3.29,
3056 3.251, 3.231, 3.226, 3.212, 3.192, 3.108, 3.033, 2.911, 2.798,
3057 2.646, 2.508, 2.322, 2.13, 1.928, 1.757, 1.588, 1.417, 1.253,
3058 1.109, .99, .888, .791, .678, .587, .524, .464, .403, .357, .32,
3059 .29, .267, .242, .215, .182, .16, .146, .128, .103, .087, .081,
3060 .071, .064, 0.
3061 };
3062
3063 static const double betaa[90] =
3064 { 467., 467., 400., 315., 379., 368., 475., 521.,
3065 531., 512., 442., 444., 430., 381., 335., 324., 296., 248., 215.,
3066 193., 158., 127., 101., 71., 31., -6., -26., -47., -63., -79.,
3067 -88., -88., -87., -90., -98., -99., -109., -134., -160., -167.,
3068 -164., -158., -153., -151., -156., -166., -168., -173., -170.,
3069 -161., -145., -126., -108., -84., -59., -29., 4., 41., 73., 97.,
3070 123., 159., 198., 220., 242., 256., 281., 311., 334., 319., 313.,
3071 321., 323., 310., 315., 320., 335., 361., 378., 373., 338., 319.,
3072 346., 322., 291., 290., 350., 371., 504., 504.
3073 };
3074
3075 static const double nua[90] =
3076 { 1360., 1365., 1370., 1375., 1380., 1385., 1390.,
3077 1395., 1400., 1405., 1410., 1415., 1420., 1425., 1430., 1435.,
3078 1440., 1445., 1450., 1455., 1460., 1465., 1470., 1475., 1480.,
3079 1485., 1490., 1495., 1500., 1505., 1510., 1515., 1520., 1525.,
3080 1530., 1535., 1540., 1545., 1550., 1555., 1560., 1565., 1570.,
3081 1575., 1580., 1585., 1590., 1595., 1600., 1605., 1610., 1615.,
3082 1620., 1625., 1630., 1635., 1640., 1645., 1650., 1655., 1660.,
3083 1665., 1670., 1675., 1680., 1685., 1690., 1695., 1700., 1705.,
3084 1710., 1715., 1720., 1725., 1730., 1735., 1740., 1745., 1750.,
3085 1755., 1760., 1765., 1770., 1775., 1780., 1785., 1790., 1795.,
3086 1800., 1805.
3087 };
3088
3089 const double t0 = 273, tr = 296;
3090
3091 /* Check wavenumber range... */
3092 if (nu < nua[0] || nu > nua[89])
3093 return 0;
3094
3095 /* Interpolate B and beta... */
3096 const int idx = locate_reg(nua, 90, nu);
3097 const double b = LIN(nua[idx], ba[idx], nua[idx + 1], ba[idx + 1], nu);
3098 const double beta =
3099 LIN(nua[idx], betaa[idx], nua[idx + 1], betaa[idx + 1], nu);
3100
3101 /* Compute absorption coefficient... */
3102 return 0.1 * POW2(p / P0 * t0 / t) * exp(beta * (1 / tr - 1 / t)) * O2 * b;
3103}
3104
3105/*****************************************************************************/
3106
3108 const ctl_t *ctl,
3109 atm_t *atm_dest,
3110 const atm_t *atm_src,
3111 const int init) {
3112
3113 /* Data size... */
3114 const size_t s = (size_t) atm_src->np * sizeof(double);
3115
3116 /* Copy data... */
3117 atm_dest->np = atm_src->np;
3118 memcpy(atm_dest->time, atm_src->time, s);
3119 memcpy(atm_dest->z, atm_src->z, s);
3120 memcpy(atm_dest->lon, atm_src->lon, s);
3121 memcpy(atm_dest->lat, atm_src->lat, s);
3122 memcpy(atm_dest->p, atm_src->p, s);
3123 memcpy(atm_dest->t, atm_src->t, s);
3124 for (int ig = 0; ig < ctl->ng; ig++)
3125 memcpy(atm_dest->q[ig], atm_src->q[ig], s);
3126 for (int iw = 0; iw < ctl->nw; iw++)
3127 memcpy(atm_dest->k[iw], atm_src->k[iw], s);
3128 atm_dest->clz = atm_src->clz;
3129 atm_dest->cldz = atm_src->cldz;
3130 for (int icl = 0; icl < ctl->ncl; icl++)
3131 atm_dest->clk[icl] = atm_src->clk[icl];
3132 atm_dest->sfz = atm_src->sfz;
3133 atm_dest->sfp = atm_src->sfp;
3134 atm_dest->sft = atm_src->sft;
3135 for (int isf = 0; isf < ctl->nsf; isf++)
3136 atm_dest->sfeps[isf] = atm_src->sfeps[isf];
3137
3138 /* Initialize... */
3139 if (init)
3140 for (int ip = 0; ip < atm_dest->np; ip++) {
3141 atm_dest->p[ip] = 0;
3142 atm_dest->t[ip] = 0;
3143 for (int ig = 0; ig < ctl->ng; ig++)
3144 atm_dest->q[ig][ip] = 0;
3145 for (int iw = 0; iw < ctl->nw; iw++)
3146 atm_dest->k[iw][ip] = 0;
3147 atm_dest->clz = 0;
3148 atm_dest->cldz = 0;
3149 for (int icl = 0; icl < ctl->ncl; icl++)
3150 atm_dest->clk[icl] = 0;
3151 atm_dest->sfz = 0;
3152 atm_dest->sfp = 0;
3153 atm_dest->sft = 0;
3154 for (int isf = 0; isf < ctl->nsf; isf++)
3155 atm_dest->sfeps[isf] = 1;
3156 }
3157}
3158
3159/*****************************************************************************/
3160
3162 const ctl_t *ctl,
3163 obs_t *obs_dest,
3164 const obs_t *obs_src,
3165 const int init) {
3166
3167 /* Data size... */
3168 const size_t s = (size_t) obs_src->nr * sizeof(double);
3169
3170 /* Copy data... */
3171 obs_dest->nr = obs_src->nr;
3172 memcpy(obs_dest->time, obs_src->time, s);
3173 memcpy(obs_dest->obsz, obs_src->obsz, s);
3174 memcpy(obs_dest->obslon, obs_src->obslon, s);
3175 memcpy(obs_dest->obslat, obs_src->obslat, s);
3176 memcpy(obs_dest->vpz, obs_src->vpz, s);
3177 memcpy(obs_dest->vplon, obs_src->vplon, s);
3178 memcpy(obs_dest->vplat, obs_src->vplat, s);
3179 memcpy(obs_dest->tpz, obs_src->tpz, s);
3180 memcpy(obs_dest->tplon, obs_src->tplon, s);
3181 memcpy(obs_dest->tplat, obs_src->tplat, s);
3182 for (int id = 0; id < ctl->nd; id++)
3183 memcpy(obs_dest->rad[id], obs_src->rad[id], s);
3184 for (int id = 0; id < ctl->nd; id++)
3185 memcpy(obs_dest->tau[id], obs_src->tau[id], s);
3186
3187 /* Initialize... */
3188 if (init)
3189 for (int id = 0; id < ctl->nd; id++)
3190 for (int ir = 0; ir < obs_dest->nr; ir++)
3191 if (isfinite(obs_dest->rad[id][ir])) {
3192 obs_dest->rad[id][ir] = 0;
3193 obs_dest->tau[id][ir] = 0;
3194 }
3195}
3196
3197/*****************************************************************************/
3198
3200 const ctl_t *ctl,
3201 const char *emitter) {
3202
3203 for (int ig = 0; ig < ctl->ng; ig++)
3204 if (strcasecmp(ctl->emitter[ig], emitter) == 0)
3205 return ig;
3206
3207 return -1;
3208}
3209
3210/*****************************************************************************/
3211
3213 const ctl_t *ctl,
3214 const tbl_t *tbl,
3215 atm_t *atm,
3216 obs_t *obs) {
3217
3218 int *mask;
3219
3220 /* Allocate... */
3221 ALLOC(mask, int,
3222 ND * NR);
3223
3224 /* Save observation mask... */
3225 for (int id = 0; id < ctl->nd; id++)
3226 for (int ir = 0; ir < obs->nr; ir++)
3227 mask[id * NR + ir] = !isfinite(obs->rad[id][ir]);
3228
3229 /* Hydrostatic equilibrium... */
3230 hydrostatic(ctl, atm);
3231
3232 /* CGA or EGA forward model... */
3233 if (ctl->formod == 0 || ctl->formod == 1)
3234 for (int ir = 0; ir < obs->nr; ir++)
3235 formod_pencil(ctl, tbl, atm, obs, ir);
3236
3237 /* Call RFM... */
3238 else if (ctl->formod == 2)
3239 formod_rfm(ctl, atm, obs);
3240
3241 /* Apply field-of-view convolution... */
3242 formod_fov(ctl, obs);
3243
3244 /* Convert radiance to brightness temperature... */
3245 if (ctl->write_bbt)
3246 for (int id = 0; id < ctl->nd; id++)
3247 for (int ir = 0; ir < obs->nr; ir++)
3248 obs->rad[id][ir] = BRIGHT(obs->rad[id][ir], ctl->nu[id]);
3249
3250 /* Apply observation mask... */
3251 for (int id = 0; id < ctl->nd; id++)
3252 for (int ir = 0; ir < obs->nr; ir++)
3253 if (mask[id * NR + ir])
3254 obs->rad[id][ir] = NAN;
3255
3256 /* Free... */
3257 free(mask);
3258}
3259
3260/*****************************************************************************/
3261
3263 const ctl_t *ctl,
3264 const los_t *los,
3265 const int ip,
3266 double *beta) {
3267
3268 /* Extinction... */
3269 for (int id = 0; id < ctl->nd; id++)
3270 beta[id] = los->k[ip][id];
3271
3272 /* CO2 continuum... */
3273 if (ctl->ctm_co2 && ctl->ig_co2 >= 0)
3274 for (int id = 0; id < ctl->nd; id++)
3275 beta[id] += ctmco2(ctl->nu[id], los->p[ip], los->t[ip],
3276 los->u[ip][ctl->ig_co2]) / los->ds[ip];
3277
3278 /* H2O continuum... */
3279 if (ctl->ctm_h2o && ctl->ig_h2o >= 0)
3280 for (int id = 0; id < ctl->nd; id++)
3281 beta[id] += ctmh2o(ctl->nu[id], los->p[ip], los->t[ip],
3282 los->q[ip][ctl->ig_h2o], los->u[ip][ctl->ig_h2o])
3283 / los->ds[ip];
3284
3285 /* N2 continuum... */
3286 if (ctl->ctm_n2)
3287 for (int id = 0; id < ctl->nd; id++)
3288 beta[id] += ctmn2(ctl->nu[id], los->p[ip], los->t[ip]);
3289
3290 /* O2 continuum... */
3291 if (ctl->ctm_o2)
3292 for (int id = 0; id < ctl->nd; id++)
3293 beta[id] += ctmo2(ctl->nu[id], los->p[ip], los->t[ip]);
3294}
3295
3296/*****************************************************************************/
3297
3299 const ctl_t *ctl,
3300 obs_t *obs) {
3301
3302 obs_t *obs2;
3303
3304 double rad[ND][NR], tau[ND][NR], z[NR];
3305
3306 /* Do not take into account FOV... */
3307 if (ctl->fov[0] == '-')
3308 return;
3309
3310 /* Allocate... */
3311 ALLOC(obs2, obs_t, 1);
3312
3313 /* Copy observation data... */
3314 copy_obs(ctl, obs2, obs, 0);
3315
3316 /* Loop over ray paths... */
3317 for (int ir = 0; ir < obs->nr; ir++) {
3318
3319 /* Get radiance and transmittance profiles... */
3320 int nz = 0;
3321 for (int ir2 = MAX(ir - NFOV, 0);
3322 ir2 < MIN(ir + 1 + NFOV, obs->nr); ir2++)
3323 if (obs->time[ir2] == obs->time[ir]) {
3324 z[nz] = obs2->vpz[ir2];
3325 for (int id = 0; id < ctl->nd; id++) {
3326 rad[id][nz] = obs2->rad[id][ir2];
3327 tau[id][nz] = obs2->tau[id][ir2];
3328 }
3329 nz++;
3330 }
3331 if (nz < 2)
3332 ERRMSG("Cannot apply FOV convolution!");
3333
3334 /* Convolute profiles with FOV... */
3335 double wsum = 0;
3336 for (int id = 0; id < ctl->nd; id++) {
3337 obs->rad[id][ir] = 0;
3338 obs->tau[id][ir] = 0;
3339 }
3340 for (int i = 0; i < ctl->fov_n; i++) {
3341 const double zfov = obs->vpz[ir] + ctl->fov_dz[i];
3342 const int idx = locate_irr(z, nz, zfov);
3343 for (int id = 0; id < ctl->nd; id++) {
3344 obs->rad[id][ir] += ctl->fov_w[i]
3345 * LIN(z[idx], rad[id][idx], z[idx + 1], rad[id][idx + 1], zfov);
3346 obs->tau[id][ir] += ctl->fov_w[i]
3347 * LIN(z[idx], tau[id][idx], z[idx + 1], tau[id][idx + 1], zfov);
3348 }
3349 wsum += ctl->fov_w[i];
3350 }
3351 for (int id = 0; id < ctl->nd; id++) {
3352 obs->rad[id][ir] /= wsum;
3353 obs->tau[id][ir] /= wsum;
3354 }
3355 }
3356
3357 /* Free... */
3358 free(obs2);
3359}
3360
3361/*****************************************************************************/
3362
3364 const ctl_t *ctl,
3365 const tbl_t *tbl,
3366 const atm_t *atm,
3367 obs_t *obs,
3368 const int ir) {
3369
3370 los_t *los;
3371
3372 double beta_ctm[ND], rad[ND], tau[ND], tau_refl[ND],
3373 tau_path[ND][NG], tau_gas[ND], x0[3], x1[3];
3374
3375 /* Allocate... */
3376 ALLOC(los, los_t, 1);
3377
3378 /* Initialize... */
3379 for (int id = 0; id < ctl->nd; id++) {
3380 rad[id] = 0;
3381 tau[id] = 1;
3382 for (int ig = 0; ig < ctl->ng; ig++)
3383 tau_path[id][ig] = 1;
3384 }
3385
3386 /* Raytracing... */
3387 raytrace(ctl, atm, obs, los, ir);
3388
3389 /* Loop over LOS points... */
3390 for (int ip = 0; ip < los->np; ip++) {
3391
3392 /* Get trace gas transmittance... */
3393 if (ctl->formod == 0)
3394 intpol_tbl_cga(ctl, tbl, los, ip, tau_path, tau_gas);
3395 else
3396 intpol_tbl_ega(ctl, tbl, los, ip, tau_path, tau_gas);
3397
3398 /* Get continuum absorption... */
3399 formod_continua(ctl, los, ip, beta_ctm);
3400
3401 /* Compute Planck function... */
3402 formod_srcfunc(ctl, tbl, los->t[ip], los->src[ip]);
3403
3404 /* Loop over channels... */
3405 for (int id = 0; id < ctl->nd; id++)
3406 if (tau_gas[id] > 0) {
3407
3408 /* Get segment emissivity... */
3409 los->eps[ip][id] = 1 - tau_gas[id] * exp(-beta_ctm[id] * los->ds[ip]);
3410
3411 /* Compute radiance... */
3412 rad[id] += los->src[ip][id] * los->eps[ip][id] * tau[id];
3413
3414 /* Compute path transmittance... */
3415 tau[id] *= (1 - los->eps[ip][id]);
3416 }
3417 }
3418
3419 /* Check whether LOS hit the ground... */
3420 if (ctl->sftype >= 1 && los->sft > 0) {
3421
3422 /* Add surface emissions... */
3423 double src_sf[ND];
3424 formod_srcfunc(ctl, tbl, los->sft, src_sf);
3425 for (int id = 0; id < ctl->nd; id++)
3426 rad[id] += los->sfeps[id] * src_sf[id] * tau[id];
3427
3428 /* Check reflectivity... */
3429 int refl = 0;
3430 if (ctl->sftype >= 2)
3431 for (int id = 0; id < ctl->nd; id++)
3432 if (los->sfeps[id] < 1) {
3433 refl = 1;
3434 break;
3435 }
3436
3437 /* Calculate reflection... */
3438 if (refl) {
3439
3440 /* Initialize... */
3441 for (int id = 0; id < ctl->nd; id++)
3442 tau_refl[id] = 1;
3443
3444 /* Add down-welling radiance... */
3445 for (int ip = los->np - 1; ip >= 0; ip--)
3446 for (int id = 0; id < ctl->nd; id++) {
3447 rad[id] += los->src[ip][id] * los->eps[ip][id] * tau_refl[id]
3448 * tau[id] * (1 - los->sfeps[id]);
3449 tau_refl[id] *= (1 - los->eps[ip][id]);
3450 }
3451
3452 /* Add solar term... */
3453 if (ctl->sftype >= 3) {
3454
3455 /* Get solar zenith angle... */
3456 double sza2;
3457 if (ctl->sfsza < 0)
3458 sza2 =
3459 sza(obs->time[ir], los->lon[los->np - 1], los->lat[los->np - 1]);
3460 else
3461 sza2 = ctl->sfsza;
3462
3463 /* Check solar zenith angle... */
3464 if (sza2 < 89.999) {
3465
3466 /* Get angle of incidence... */
3467 geo2cart(los->z[los->np - 1], los->lon[los->np - 1],
3468 los->lat[los->np - 1], x0);
3469 geo2cart(los->z[0], los->lon[0], los->lat[0], x1);
3470 for (int i = 0; i < 3; i++)
3471 x1[i] -= x0[i];
3472 const double cosa = DOTP(x0, x1) / NORM(x0) / NORM(x1);
3473
3474 /* Get ratio of SZA and incident radiation... */
3475 const double rcos = cosa / cos(DEG2RAD(sza2));
3476
3477 /* Add solar radiation... */
3478 for (int id = 0; id < ctl->nd; id++)
3479 rad[id] += 6.764e-5 / (2. * M_PI) * PLANCK(TSUN, ctl->nu[id])
3480 * tau_refl[id] * (1 - los->sfeps[id]) * tau[id] * rcos;
3481 }
3482 }
3483 }
3484 }
3485
3486 /* Copy results... */
3487 for (int id = 0; id < ctl->nd; id++) {
3488 obs->rad[id][ir] = rad[id];
3489 obs->tau[id][ir] = tau[id];
3490 }
3491
3492 /* Free... */
3493 free(los);
3494}
3495
3496/*****************************************************************************/
3497
3499 const ctl_t *ctl,
3500 const atm_t *atm,
3501 obs_t *obs) {
3502
3503 los_t *los;
3504
3505 FILE *out;
3506
3507 char cmd[2 * LEN], filename[2 * LEN],
3508 rfmflg[LEN] = { "RAD TRA MIX LIN SFC" };
3509
3510 double f[NSHAPE], nu[NSHAPE], nu0, nu1, obsz = -999, tsurf,
3511 xd[3], xo[3], xv[3], z[NR], zmin, zmax;
3512
3513 int n, nadir = 0;
3514
3515 /* Allocate... */
3516 ALLOC(los, los_t, 1);
3517
3518 /* Check observer positions... */
3519 for (int ir = 1; ir < obs->nr; ir++)
3520 if (obs->obsz[ir] != obs->obsz[0]
3521 || obs->obslon[ir] != obs->obslon[0]
3522 || obs->obslat[ir] != obs->obslat[0])
3523 ERRMSG("RFM interface requires identical observer positions!");
3524
3525 /* Check extinction data... */
3526 for (int iw = 0; iw < ctl->nw; iw++)
3527 for (int ip = 0; ip < atm->np; ip++)
3528 if (atm->k[iw][ip] != 0)
3529 ERRMSG("RFM interface cannot handle extinction data!");
3530
3531 /* Get altitude range of atmospheric data... */
3532 gsl_stats_minmax(&zmin, &zmax, atm->z, 1, (size_t) atm->np);
3533
3534 /* Observer within atmosphere? */
3535 if (obs->obsz[0] >= zmin && obs->obsz[0] <= zmax) {
3536 obsz = obs->obsz[0];
3537 strcat(rfmflg, " OBS");
3538 }
3539
3540 /* Determine tangent altitude or air mass factor... */
3541 for (int ir = 0; ir < obs->nr; ir++) {
3542
3543 /* Raytracing... */
3544 raytrace(ctl, atm, obs, los, ir);
3545
3546 /* Nadir? */
3547 if (obs->tpz[ir] <= zmin) {
3548 geo2cart(obs->obsz[ir], obs->obslon[ir], obs->obslat[ir], xo);
3549 geo2cart(obs->vpz[ir], obs->vplon[ir], obs->vplat[ir], xv);
3550 for (int i = 0; i < 3; i++)
3551 xd[i] = xo[i] - xv[i];
3552 z[ir] = NORM(xo) * NORM(xd) / DOTP(xo, xd);
3553 nadir++;
3554 } else
3555 z[ir] = obs->tpz[ir];
3556 }
3557 if (nadir > 0 && nadir < obs->nr)
3558 ERRMSG("Limb and nadir not simultaneously possible!");
3559
3560 /* Nadir? */
3561 if (nadir)
3562 strcat(rfmflg, " NAD");
3563
3564 /* Get surface temperature... */
3565 tsurf = atm->t[gsl_stats_min_index(atm->z, 1, (size_t) atm->np)];
3566
3567 /* Refraction? */
3568 if (!nadir && !ctl->refrac)
3569 strcat(rfmflg, " GEO");
3570
3571 /* Continua? */
3572 if (ctl->ctm_co2 || ctl->ctm_h2o || ctl->ctm_n2 || ctl->ctm_o2)
3573 strcat(rfmflg, " CTM");
3574
3575 /* Write atmospheric data file... */
3576 write_atm_rfm("rfm.atm", ctl, atm);
3577
3578 /* Loop over channels... */
3579 for (int id = 0; id < ctl->nd; id++) {
3580
3581 /* Read filter function... */
3582 sprintf(filename, "%s_%.4f.filt", ctl->tblbase, ctl->nu[id]);
3583 read_shape(filename, nu, f, &n);
3584
3585 /* Set spectral range... */
3586 nu0 = nu[0];
3587 nu1 = nu[n - 1];
3588
3589 /* Create RFM driver file... */
3590 if (!(out = fopen("rfm.drv", "w")))
3591 ERRMSG("Cannot create file!");
3592 fprintf(out, "*HDR\nRFM call by JURASSIC.\n");
3593 fprintf(out, "*FLG\n%s\n", rfmflg);
3594 fprintf(out, "*SPC\n%.4f %.4f 0.0005\n", nu0, nu1);
3595 fprintf(out, "*GAS\n");
3596 for (int ig = 0; ig < ctl->ng; ig++)
3597 fprintf(out, "%s\n", ctl->emitter[ig]);
3598 fprintf(out, "*ATM\nrfm.atm\n");
3599 fprintf(out, "*TAN\n");
3600 for (int ir = 0; ir < obs->nr; ir++)
3601 fprintf(out, "%g\n", z[ir]);
3602 fprintf(out, "*SFC\n%g 1.0\n", tsurf);
3603 if (obsz >= 0)
3604 fprintf(out, "*OBS\n%g\n", obsz);
3605 fprintf(out, "*HIT\n%s\n", ctl->rfmhit);
3606 fprintf(out, "*XSC\n");
3607 for (int ig = 0; ig < ctl->ng; ig++)
3608 if (ctl->rfmxsc[ig][0] != '-')
3609 fprintf(out, "%s\n", ctl->rfmxsc[ig]);
3610 fprintf(out, "*END\n");
3611 fclose(out);
3612
3613 /* Remove temporary files... */
3614 if (system("rm -f rfm.runlog rad_*.asc tra_*.asc"))
3615 ERRMSG("Cannot remove temporary files!");
3616
3617 /* Call RFM... */
3618 sprintf(cmd, "echo | %s", ctl->rfmbin);
3619 if (system(cmd))
3620 ERRMSG("Error while calling RFM!");
3621
3622 /* Read data... */
3623 for (int ir = 0; ir < obs->nr; ir++) {
3624 obs->rad[id][ir] = read_obs_rfm("rad", z[ir], nu, f, n) * 1e-5;
3625 obs->tau[id][ir] = read_obs_rfm("tra", z[ir], nu, f, n);
3626 }
3627 }
3628
3629 /* Remove temporary files... */
3630 if (system("rm -f rfm.drv rfm.atm rfm.runlog rad_*.asc tra_*.asc"))
3631 ERRMSG("Error while removing temporary files!");
3632
3633 /* Free... */
3634 free(los);
3635}
3636
3637/*****************************************************************************/
3638
3640 const ctl_t *ctl,
3641 const tbl_t *tbl,
3642 const double t,
3643 double *src) {
3644
3645 /* Determine index in temperature array... */
3646 const int it = locate_reg(tbl->st, TBLNS, t);
3647
3648 /* Interpolate Planck function value... */
3649 for (int id = 0; id < ctl->nd; id++)
3650 src[id] = LIN(tbl->st[it], tbl->sr[it][id],
3651 tbl->st[it + 1], tbl->sr[it + 1][id], t);
3652}
3653
3654/*****************************************************************************/
3655
3657 const double z,
3658 const double lon,
3659 const double lat,
3660 double *x) {
3661
3662 const double radius = z + RE;
3663
3664 const double latrad = lat / 180. * M_PI;
3665 const double lonrad = lon / 180. * M_PI;
3666
3667 const double coslat = cos(latrad);
3668
3669 x[0] = radius * coslat * cos(lonrad);
3670 x[1] = radius * coslat * sin(lonrad);
3671 x[2] = radius * sin(latrad);
3672}
3673
3674/*****************************************************************************/
3675
3677 const ctl_t *ctl,
3678 atm_t *atm) {
3679
3680 const double mmair = 28.96456e-3, mmh2o = 18.0153e-3;
3681
3682 const int ipts = 20;
3683
3684 double dzmin = 1e99, e = 0;
3685
3686 int ipref = 0;
3687
3688 /* Check reference height... */
3689 if (ctl->hydz < 0)
3690 return;
3691
3692 /* Find air parcel next to reference height... */
3693 for (int ip = 0; ip < atm->np; ip++)
3694 if (fabs(atm->z[ip] - ctl->hydz) < dzmin) {
3695 dzmin = fabs(atm->z[ip] - ctl->hydz);
3696 ipref = ip;
3697 }
3698
3699 /* Upper part of profile... */
3700 for (int ip = ipref + 1; ip < atm->np; ip++) {
3701 double mean = 0;
3702 for (int i = 0; i < ipts; i++) {
3703 if (ctl->ig_h2o >= 0)
3704 e = LIN(0.0, atm->q[ctl->ig_h2o][ip - 1],
3705 ipts - 1.0, atm->q[ctl->ig_h2o][ip], (double) i);
3706 mean += (e * mmh2o + (1 - e) * mmair)
3707 * G0 / RI
3708 / LIN(0.0, atm->t[ip - 1], ipts - 1.0, atm->t[ip], (double) i) / ipts;
3709 }
3710
3711 /* Compute p(z,T)... */
3712 atm->p[ip] =
3713 exp(log(atm->p[ip - 1]) - mean * 1000 * (atm->z[ip] - atm->z[ip - 1]));
3714 }
3715
3716 /* Lower part of profile... */
3717 for (int ip = ipref - 1; ip >= 0; ip--) {
3718 double mean = 0;
3719 for (int i = 0; i < ipts; i++) {
3720 if (ctl->ig_h2o >= 0)
3721 e = LIN(0.0, atm->q[ctl->ig_h2o][ip + 1],
3722 ipts - 1.0, atm->q[ctl->ig_h2o][ip], (double) i);
3723 mean += (e * mmh2o + (1 - e) * mmair)
3724 * G0 / RI
3725 / LIN(0.0, atm->t[ip + 1], ipts - 1.0, atm->t[ip], (double) i) / ipts;
3726 }
3727
3728 /* Compute p(z,T)... */
3729 atm->p[ip] =
3730 exp(log(atm->p[ip + 1]) - mean * 1000 * (atm->z[ip] - atm->z[ip + 1]));
3731 }
3732}
3733
3734/*****************************************************************************/
3735
3737 const ctl_t *ctl,
3738 const int idx,
3739 char *quantity) {
3740
3741 if (idx == IDXP)
3742 sprintf(quantity, "PRESSURE");
3743
3744 if (idx == IDXT)
3745 sprintf(quantity, "TEMPERATURE");
3746
3747 for (int ig = 0; ig < ctl->ng; ig++)
3748 if (idx == IDXQ(ig))
3749 sprintf(quantity, "%s", ctl->emitter[ig]);
3750
3751 for (int iw = 0; iw < ctl->nw; iw++)
3752 if (idx == IDXK(iw))
3753 sprintf(quantity, "EXTINCT_WINDOW_%d", iw);
3754
3755 if (idx == IDXCLZ)
3756 sprintf(quantity, "CLOUD_HEIGHT");
3757
3758 if (idx == IDXCLDZ)
3759 sprintf(quantity, "CLOUD_DEPTH");
3760
3761 for (int icl = 0; icl < ctl->ncl; icl++)
3762 if (idx == IDXCLK(icl))
3763 sprintf(quantity, "CLOUD_EXTINCT_%.4f", ctl->clnu[icl]);
3764
3765 if (idx == IDXSFZ)
3766 sprintf(quantity, "SURFACE_HEIGHT");
3767
3768 if (idx == IDXSFP)
3769 sprintf(quantity, "SURFACE_PRESSURE");
3770
3771 if (idx == IDXSFT)
3772 sprintf(quantity, "SURFACE_TEMPERATURE");
3773
3774 for (int isf = 0; isf < ctl->nsf; isf++)
3775 if (idx == IDXSFEPS(isf))
3776 sprintf(quantity, "SURFACE_EMISSIVITY_%.4f", ctl->sfnu[isf]);
3777}
3778
3779/*****************************************************************************/
3780
3782 const ctl_t *ctl,
3783 tbl_t *tbl) {
3784
3785 char filename[2 * LEN];
3786
3787 double f[NSHAPE], nu[NSHAPE];
3788
3789 int n;
3790
3791 /* Write info... */
3792 LOG(1, "Initialize source function table...");
3793 LOG(2, "Number of data points: %d", TBLNS);
3794
3795 /* Loop over channels... */
3796 for (int id = 0; id < ctl->nd; id++) {
3797
3798 /* Read filter function... */
3799 sprintf(filename, "%s_%.4f.filt", ctl->tblbase, ctl->nu[id]);
3800 read_shape(filename, nu, f, &n);
3801
3802 /* Get minimum grid spacing... */
3803 double dnu = 1.0;
3804 for (int i = 1; i < n; i++)
3805 dnu = MIN(dnu, nu[i] - nu[i - 1]);
3806
3807 /* Compute source function table... */
3808#pragma omp parallel for default(none) shared(ctl,tbl,id,nu,f,n,dnu)
3809 for (int it = 0; it < TBLNS; it++) {
3810
3811 /* Set temperature... */
3812 tbl->st[it] = LIN(0.0, TMIN, TBLNS - 1.0, TMAX, (double) it);
3813
3814 /* Integrate Planck function... */
3815 double fsum = tbl->sr[it][id] = 0;
3816 for (double fnu = nu[0]; fnu <= nu[n - 1]; fnu += dnu) {
3817 const int i = locate_irr(nu, n, fnu);
3818 const double ff = LIN(nu[i], f[i], nu[i + 1], f[i + 1], fnu);
3819 fsum += ff;
3820 tbl->sr[it][id] += ff * PLANCK(tbl->st[it], fnu);
3821 }
3822 tbl->sr[it][id] /= fsum;
3823 }
3824
3825 /* Write info... */
3826 LOG(2,
3827 "channel= %.4f cm^-1 | T= %g ... %g K | B= %g ... %g W/(m^2 sr cm^-1)",
3828 ctl->nu[id], tbl->st[0], tbl->st[TBLNS - 1], tbl->sr[0][id],
3829 tbl->sr[TBLNS - 1][id]);
3830 }
3831}
3832
3833/*****************************************************************************/
3834
3836 const ctl_t *ctl,
3837 const atm_t *atm,
3838 const double z,
3839 double *p,
3840 double *t,
3841 double *q,
3842 double *k) {
3843
3844 /* Get array index... */
3845 const int ip = locate_irr(atm->z, atm->np, z);
3846
3847 /* Interpolate... */
3848 *p = LOGY(atm->z[ip], atm->p[ip], atm->z[ip + 1], atm->p[ip + 1], z);
3849 *t = LIN(atm->z[ip], atm->t[ip], atm->z[ip + 1], atm->t[ip + 1], z);
3850 for (int ig = 0; ig < ctl->ng; ig++)
3851 q[ig] =
3852 LIN(atm->z[ip], atm->q[ig][ip], atm->z[ip + 1], atm->q[ig][ip + 1], z);
3853 for (int iw = 0; iw < ctl->nw; iw++)
3854 k[iw] =
3855 LIN(atm->z[ip], atm->k[iw][ip], atm->z[ip + 1], atm->k[iw][ip + 1], z);
3856}
3857
3858/*****************************************************************************/
3859
3861 const ctl_t *ctl,
3862 const tbl_t *tbl,
3863 const los_t *los,
3864 const int ip,
3865 double tau_path[ND][NG],
3866 double tau_seg[ND]) {
3867
3868 double eps;
3869
3870 /* Loop over channels... */
3871 for (int id = 0; id < ctl->nd; id++) {
3872
3873 /* Initialize... */
3874 tau_seg[id] = 1;
3875
3876 /* Loop over emitters.... */
3877 for (int ig = 0; ig < ctl->ng; ig++) {
3878
3879 /* Check size of table (pressure) and column density... */
3880 if (tbl->np[id][ig] < 30 || los->cgu[ip][ig] <= 0)
3881 eps = 0;
3882
3883 /* Check transmittance... */
3884 else if (tau_path[id][ig] < 1e-9)
3885 eps = 1;
3886
3887 /* Interpolate... */
3888 else {
3889
3890 /* Determine pressure and temperature indices... */
3891 const int ipr =
3892 locate_irr(tbl->p[id][ig], tbl->np[id][ig], los->cgp[ip][ig]);
3893 const int it0 = locate_reg(tbl->t[id][ig][ipr], tbl->nt[id][ig][ipr],
3894 los->cgt[ip][ig]);
3895 const int it1 =
3896 locate_reg(tbl->t[id][ig][ipr + 1], tbl->nt[id][ig][ipr + 1],
3897 los->cgt[ip][ig]);
3898
3899 /* Check size of table (temperature and column density)... */
3900 if (tbl->nt[id][ig][ipr] < 2 || tbl->nt[id][ig][ipr + 1] < 2
3901 || tbl->nu[id][ig][ipr][it0] < 2
3902 || tbl->nu[id][ig][ipr][it0 + 1] < 2
3903 || tbl->nu[id][ig][ipr + 1][it1] < 2
3904 || tbl->nu[id][ig][ipr + 1][it1 + 1] < 2)
3905 eps = 0;
3906
3907 else {
3908
3909 /* Get emissivities of extended path... */
3910 double eps00
3911 = intpol_tbl_eps(tbl, ig, id, ipr, it0, los->cgu[ip][ig]);
3912 double eps01 =
3913 intpol_tbl_eps(tbl, ig, id, ipr, it0 + 1, los->cgu[ip][ig]);
3914 double eps10 =
3915 intpol_tbl_eps(tbl, ig, id, ipr + 1, it1, los->cgu[ip][ig]);
3916 double eps11 =
3917 intpol_tbl_eps(tbl, ig, id, ipr + 1, it1 + 1, los->cgu[ip][ig]);
3918
3919 /* Interpolate with respect to temperature... */
3920 eps00 = LIN(tbl->t[id][ig][ipr][it0], eps00,
3921 tbl->t[id][ig][ipr][it0 + 1], eps01, los->cgt[ip][ig]);
3922 eps11 = LIN(tbl->t[id][ig][ipr + 1][it1], eps10,
3923 tbl->t[id][ig][ipr + 1][it1 + 1],
3924 eps11, los->cgt[ip][ig]);
3925
3926 /* Interpolate with respect to pressure... */
3927 eps00 = LOGX(tbl->p[id][ig][ipr], eps00,
3928 tbl->p[id][ig][ipr + 1], eps11, los->cgp[ip][ig]);
3929
3930 /* Check emssivity range... */
3931 eps00 = MAX(MIN(eps00, 1), 0);
3932
3933 /* Determine segment emissivity... */
3934 eps = 1 - (1 - eps00) / tau_path[id][ig];
3935 }
3936 }
3937
3938 /* Get transmittance of extended path... */
3939 tau_path[id][ig] *= (1 - eps);
3940
3941 /* Get segment transmittance... */
3942 tau_seg[id] *= (1 - eps);
3943 }
3944 }
3945}
3946
3947/*****************************************************************************/
3948
3950 const ctl_t *ctl,
3951 const tbl_t *tbl,
3952 const los_t *los,
3953 const int ip,
3954 double tau_path[ND][NG],
3955 double tau_seg[ND]) {
3956
3957 double eps, u;
3958
3959 /* Loop over channels... */
3960 for (int id = 0; id < ctl->nd; id++) {
3961
3962 /* Initialize... */
3963 tau_seg[id] = 1;
3964
3965 /* Loop over emitters.... */
3966 for (int ig = 0; ig < ctl->ng; ig++) {
3967
3968 /* Check size of table (pressure) and column density... */
3969 if (tbl->np[id][ig] < 30 || los->cgu[ip][ig] <= 0)
3970 eps = 0;
3971
3972 /* Check transmittance... */
3973 else if (tau_path[id][ig] < 1e-9)
3974 eps = 1;
3975
3976 /* Interpolate... */
3977 else {
3978
3979 /* Determine pressure and temperature indices... */
3980 const int ipr =
3981 locate_irr(tbl->p[id][ig], tbl->np[id][ig], los->p[ip]);
3982 const int it0 =
3983 locate_reg(tbl->t[id][ig][ipr], tbl->nt[id][ig][ipr], los->t[ip]);
3984 const int it1 =
3985 locate_reg(tbl->t[id][ig][ipr + 1], tbl->nt[id][ig][ipr + 1],
3986 los->t[ip]);
3987
3988 /* Check size of table (temperature and column density)... */
3989 if (tbl->nt[id][ig][ipr] < 2 || tbl->nt[id][ig][ipr + 1] < 2
3990 || tbl->nu[id][ig][ipr][it0] < 2
3991 || tbl->nu[id][ig][ipr][it0 + 1] < 2
3992 || tbl->nu[id][ig][ipr + 1][it1] < 2
3993 || tbl->nu[id][ig][ipr + 1][it1 + 1] < 2)
3994 eps = 0;
3995
3996 else {
3997
3998 /* Get emissivities of extended path... */
3999 u = intpol_tbl_u(tbl, ig, id, ipr, it0, 1 - tau_path[id][ig]);
4000 double eps00
4001 = intpol_tbl_eps(tbl, ig, id, ipr, it0, u + los->u[ip][ig]);
4002
4003 u = intpol_tbl_u(tbl, ig, id, ipr, it0 + 1, 1 - tau_path[id][ig]);
4004 double eps01 =
4005 intpol_tbl_eps(tbl, ig, id, ipr, it0 + 1, u + los->u[ip][ig]);
4006
4007 u = intpol_tbl_u(tbl, ig, id, ipr + 1, it1, 1 - tau_path[id][ig]);
4008 double eps10 =
4009 intpol_tbl_eps(tbl, ig, id, ipr + 1, it1, u + los->u[ip][ig]);
4010
4011 u =
4012 intpol_tbl_u(tbl, ig, id, ipr + 1, it1 + 1, 1 - tau_path[id][ig]);
4013 double eps11 =
4014 intpol_tbl_eps(tbl, ig, id, ipr + 1, it1 + 1, u + los->u[ip][ig]);
4015
4016 /* Interpolate with respect to temperature... */
4017 eps00 = LIN(tbl->t[id][ig][ipr][it0], eps00,
4018 tbl->t[id][ig][ipr][it0 + 1], eps01, los->t[ip]);
4019 eps11 = LIN(tbl->t[id][ig][ipr + 1][it1], eps10,
4020 tbl->t[id][ig][ipr + 1][it1 + 1], eps11, los->t[ip]);
4021
4022 /* Interpolate with respect to pressure... */
4023 eps00 = LIN(tbl->p[id][ig][ipr], eps00,
4024 tbl->p[id][ig][ipr + 1], eps11, los->p[ip]);
4025
4026 /* Check emssivity range... */
4027 eps00 = MAX(MIN(eps00, 1), 0);
4028
4029 /* Determine segment emissivity... */
4030 eps = 1 - (1 - eps00) / tau_path[id][ig];
4031 }
4032 }
4033
4034 /* Get transmittance of extended path... */
4035 tau_path[id][ig] *= (1 - eps);
4036
4037 /* Get segment transmittance... */
4038 tau_seg[id] *= (1 - eps);
4039 }
4040 }
4041}
4042
4043/*****************************************************************************/
4044
4045inline double intpol_tbl_eps(
4046 const tbl_t *tbl,
4047 const int ig,
4048 const int id,
4049 const int ip,
4050 const int it,
4051 const double u) {
4052
4053 const int nu = tbl->nu[id][ig][ip][it];
4054 const float *u_arr = tbl->u[id][ig][ip][it];
4055 const float *eps_arr = tbl->eps[id][ig][ip][it];
4056
4057 const double u_min = u_arr[0];
4058 const double u_max = u_arr[nu - 1];
4059
4060 /* Lower extrapolation */
4061 if (u < u_min)
4062 return LIN(0.0, 0.0, u_min, eps_arr[0], u);
4063
4064 /* Upper extrapolation */
4065 if (u > u_max) {
4066 const double a = log(1.0 - eps_arr[nu - 1]) / u_max;
4067 return 1.0 - exp(a * u);
4068 }
4069
4070 /* Interpolation */
4071 const int idx = locate_tbl(u_arr, nu, u);
4072 return LIN(u_arr[idx], eps_arr[idx], u_arr[idx + 1], eps_arr[idx + 1], u);
4073}
4074
4075/*****************************************************************************/
4076
4077inline double intpol_tbl_u(
4078 const tbl_t *tbl,
4079 const int ig,
4080 const int id,
4081 const int ip,
4082 const int it,
4083 const double eps) {
4084
4085 const int nu = tbl->nu[id][ig][ip][it];
4086 const float *eps_arr = tbl->eps[id][ig][ip][it];
4087 const float *u_arr = tbl->u[id][ig][ip][it];
4088
4089 const double eps_min = eps_arr[0];
4090 const double eps_max = eps_arr[nu - 1];
4091
4092 /* Lower boundary extrapolation */
4093 if (eps < eps_min)
4094 return LIN(0.0, 0.0, eps_min, u_arr[0], eps);
4095
4096 /* Upper boundary extrapolation (log-inverse) */
4097 if (eps > eps_max) {
4098 const double a = log(1.0 - eps_max) / u_arr[nu - 1];
4099 return log(1.0 - eps) / a;
4100 }
4101
4102 /* Interpolation */
4103 const int idx = locate_tbl(eps_arr, nu, eps);
4104 return LIN(eps_arr[idx], u_arr[idx], eps_arr[idx + 1], u_arr[idx + 1], eps);
4105}
4106
4107/*****************************************************************************/
4108
4110 const double jsec,
4111 int *year,
4112 int *mon,
4113 int *day,
4114 int *hour,
4115 int *min,
4116 int *sec,
4117 double *remain) {
4118
4119 struct tm t0, *t1;
4120
4121 t0.tm_year = 100;
4122 t0.tm_mon = 0;
4123 t0.tm_mday = 1;
4124 t0.tm_hour = 0;
4125 t0.tm_min = 0;
4126 t0.tm_sec = 0;
4127
4128 time_t jsec0 = (time_t) jsec + timegm(&t0);
4129 t1 = gmtime(&jsec0);
4130
4131 *year = t1->tm_year + 1900;
4132 *mon = t1->tm_mon + 1;
4133 *day = t1->tm_mday;
4134 *hour = t1->tm_hour;
4135 *min = t1->tm_min;
4136 *sec = t1->tm_sec;
4137 *remain = jsec - floor(jsec);
4138}
4139
4140/*****************************************************************************/
4141
4143 const ctl_t *ctl,
4144 const tbl_t *tbl,
4145 atm_t *atm,
4146 obs_t *obs,
4147 gsl_matrix *k) {
4148
4149 int *iqa;
4150
4151 /* Get sizes... */
4152 const size_t m = k->size1;
4153 const size_t n = k->size2;
4154
4155 /* Allocate... */
4156 gsl_vector *x0 = gsl_vector_alloc(n);
4157 gsl_vector *yy0 = gsl_vector_alloc(m);
4158 ALLOC(iqa, int,
4159 N);
4160
4161 /* Compute radiance for undisturbed atmospheric data... */
4162 formod(ctl, tbl, atm, obs);
4163
4164 /* Compose vectors... */
4165 atm2x(ctl, atm, x0, iqa, NULL);
4166 obs2y(ctl, obs, yy0, NULL, NULL);
4167
4168 /* Initialize kernel matrix... */
4169 gsl_matrix_set_zero(k);
4170
4171 /* Loop over state vector elements... */
4172#pragma omp parallel for default(none) shared(ctl,tbl,atm,obs,k,x0,yy0,n,m,iqa)
4173 for (size_t j = 0; j < n; j++) {
4174
4175 /* Allocate... */
4176 atm_t *atm1;
4177 obs_t *obs1;
4178 ALLOC(atm1, atm_t, 1);
4179 ALLOC(obs1, obs_t, 1);
4180 gsl_vector *x1 = gsl_vector_alloc(n);
4181 gsl_vector *yy1 = gsl_vector_alloc(m);
4182
4183 /* Set perturbation size... */
4184 double h;
4185 if (iqa[j] == IDXP)
4186 h = MAX(fabs(0.01 * gsl_vector_get(x0, j)), 1e-7);
4187 else if (iqa[j] == IDXT)
4188 h = 1.0;
4189 else if (iqa[j] >= IDXQ(0) && iqa[j] < IDXQ(ctl->ng))
4190 h = MAX(fabs(0.01 * gsl_vector_get(x0, j)), 1e-15);
4191 else if (iqa[j] >= IDXK(0) && iqa[j] < IDXK(ctl->nw))
4192 h = 1e-4;
4193 else if (iqa[j] == IDXCLZ || iqa[j] == IDXCLDZ)
4194 h = 1.0;
4195 else if (iqa[j] >= IDXCLK(0) && iqa[j] < IDXCLK(ctl->ncl))
4196 h = 1e-4;
4197 else if (iqa[j] == IDXSFZ)
4198 h = 0.1;
4199 else if (iqa[j] == IDXSFP)
4200 h = 10.0;
4201 else if (iqa[j] == IDXSFT)
4202 h = 1.0;
4203 else if (iqa[j] >= IDXSFEPS(0) && iqa[j] < IDXSFEPS(ctl->nsf))
4204 h = 1e-2;
4205 else
4206 ERRMSG("Cannot set perturbation size!");
4207
4208 /* Disturb state vector element... */
4209 gsl_vector_memcpy(x1, x0);
4210 gsl_vector_set(x1, j, gsl_vector_get(x1, j) + h);
4211 copy_atm(ctl, atm1, atm, 0);
4212 copy_obs(ctl, obs1, obs, 0);
4213 x2atm(ctl, x1, atm1);
4214
4215 /* Compute radiance for disturbed atmospheric data... */
4216 formod(ctl, tbl, atm1, obs1);
4217
4218 /* Compose measurement vector for disturbed radiance data... */
4219 obs2y(ctl, obs1, yy1, NULL, NULL);
4220
4221 /* Compute derivatives... */
4222 for (size_t i = 0; i < m; i++)
4223 gsl_matrix_set(k, i, j,
4224 (gsl_vector_get(yy1, i) - gsl_vector_get(yy0, i)) / h);
4225
4226 /* Free... */
4227 gsl_vector_free(x1);
4228 gsl_vector_free(yy1);
4229 free(atm1);
4230 free(obs1);
4231 }
4232
4233 /* Free... */
4234 gsl_vector_free(x0);
4235 gsl_vector_free(yy0);
4236 free(iqa);
4237}
4238
4239/*****************************************************************************/
4240
4242 const double *xx,
4243 const int n,
4244 const double x) {
4245
4246 int ilo = 0;
4247 int ihi = n - 1;
4248 int i = (ihi + ilo) >> 1;
4249
4250 if (xx[i] < xx[i + 1])
4251 while (ihi > ilo + 1) {
4252 i = (ihi + ilo) >> 1;
4253 if (xx[i] > x)
4254 ihi = i;
4255 else
4256 ilo = i;
4257 } else
4258 while (ihi > ilo + 1) {
4259 i = (ihi + ilo) >> 1;
4260 if (xx[i] <= x)
4261 ihi = i;
4262 else
4263 ilo = i;
4264 }
4265
4266 return ilo;
4267}
4268
4269/*****************************************************************************/
4270
4272 const double *xx,
4273 const int n,
4274 const double x) {
4275
4276 /* Calculate index... */
4277 const int i = (int) ((x - xx[0]) / (xx[1] - xx[0]));
4278
4279 /* Check range... */
4280 if (i < 0)
4281 return 0;
4282 else if (i > n - 2)
4283 return n - 2;
4284 else
4285 return i;
4286}
4287
4288/*****************************************************************************/
4289
4290inline int locate_tbl(
4291 const float *xx,
4292 const int n,
4293 const double x) {
4294
4295 int ilo = 0;
4296 int ihi = n - 1;
4297 int i = (ihi + ilo) >> 1;
4298
4299 while (ihi > ilo + 1) {
4300 i = (ihi + ilo) >> 1;
4301 if (xx[i] > x)
4302 ihi = i;
4303 else
4304 ilo = i;
4305 }
4306
4307 return ilo;
4308}
4309
4310/*****************************************************************************/
4311
4312size_t obs2y(
4313 const ctl_t *ctl,
4314 const obs_t *obs,
4315 gsl_vector *y,
4316 int *ida,
4317 int *ira) {
4318
4319 size_t m = 0;
4320
4321 /* Determine measurement vector... */
4322 for (int ir = 0; ir < obs->nr; ir++)
4323 for (int id = 0; id < ctl->nd; id++)
4324 if (isfinite(obs->rad[id][ir])) {
4325 if (y != NULL)
4326 gsl_vector_set(y, m, obs->rad[id][ir]);
4327 if (ida != NULL)
4328 ida[m] = id;
4329 if (ira != NULL)
4330 ira[m] = ir;
4331 m++;
4332 }
4333
4334 return m;
4335}
4336
4337/*****************************************************************************/
4338
4340 const ctl_t *ctl,
4341 const atm_t *atm,
4342 obs_t *obs,
4343 los_t *los,
4344 const int ir) {
4345
4346 const double h = 0.02, zrefrac = 60;
4347
4348 double ex0[3], ex1[3], k[NW], lat, lon, n, ng[3], norm, p, q[NG], t,
4349 x[3], xh[3], xobs[3], xvp[3], z = 1e99, zmax, zmin;
4350
4351 int stop = 0;
4352
4353 /* Initialize... */
4354 los->np = 0;
4355 los->sft = -999;
4356 obs->tpz[ir] = obs->vpz[ir];
4357 obs->tplon[ir] = obs->vplon[ir];
4358 obs->tplat[ir] = obs->vplat[ir];
4359
4360 /* Get altitude range of atmospheric data... */
4361 gsl_stats_minmax(&zmin, &zmax, atm->z, 1, (size_t) atm->np);
4362 if (ctl->nsf > 0) {
4363 zmin = MAX(atm->sfz, zmin);
4364 if (atm->sfp > 0) {
4365 const int ip = locate_irr(atm->p, atm->np, atm->sfp);
4366 const double zip =
4367 LIN(log(atm->p[ip]), atm->z[ip], log(atm->p[ip + 1]), atm->z[ip + 1],
4368 log(atm->sfp));
4369 zmin = MAX(zip, zmin);
4370 }
4371 }
4372
4373 /* Check observer altitude... */
4374 if (obs->obsz[ir] < zmin)
4375 ERRMSG("Observer below surface!");
4376
4377 /* Check view point altitude... */
4378 if (obs->vpz[ir] > zmax)
4379 return;
4380
4381 /* Determine Cartesian coordinates for observer and view point... */
4382 geo2cart(obs->obsz[ir], obs->obslon[ir], obs->obslat[ir], xobs);
4383 geo2cart(obs->vpz[ir], obs->vplon[ir], obs->vplat[ir], xvp);
4384
4385 /* Determine initial tangent vector... */
4386 for (int i = 0; i < 3; i++)
4387 ex0[i] = xvp[i] - xobs[i];
4388 norm = NORM(ex0);
4389 for (int i = 0; i < 3; i++)
4390 ex0[i] /= norm;
4391
4392 /* Observer within atmosphere... */
4393 for (int i = 0; i < 3; i++)
4394 x[i] = xobs[i];
4395
4396 /* Observer above atmosphere (search entry point)... */
4397 if (obs->obsz[ir] > zmax) {
4398 double dmax = norm, dmin = 0;
4399 while (fabs(dmin - dmax) > 0.001) {
4400 const double d = (dmax + dmin) / 2;
4401 for (int i = 0; i < 3; i++)
4402 x[i] = xobs[i] + d * ex0[i];
4403 cart2geo(x, &z, &lon, &lat);
4404 if (z <= zmax && z > zmax - 0.001)
4405 break;
4406 if (z < zmax - 0.0005)
4407 dmax = d;
4408 else
4409 dmin = d;
4410 }
4411 }
4412
4413 /* Ray-tracing... */
4414 while (1) {
4415
4416 /* Set step length... */
4417 double ds = ctl->rayds;
4418 if (ctl->raydz > 0) {
4419 norm = NORM(x);
4420 for (int i = 0; i < 3; i++)
4421 xh[i] = x[i] / norm;
4422 const double cosa = fabs(DOTP(ex0, xh));
4423 if (cosa != 0)
4424 ds = MIN(ctl->rayds, ctl->raydz / cosa);
4425 }
4426
4427 /* Determine geolocation... */
4428 cart2geo(x, &z, &lon, &lat);
4429
4430 /* Check if LOS hits the ground or has left atmosphere... */
4431 if (z < zmin || z > zmax) {
4432 stop = (z < zmin ? 2 : 1);
4433 const double frac =
4434 ((z <
4435 zmin ? zmin : zmax) - los->z[los->np - 1]) / (z - los->z[los->np -
4436 1]);
4437 geo2cart(los->z[los->np - 1], los->lon[los->np - 1],
4438 los->lat[los->np - 1], xh);
4439 for (int i = 0; i < 3; i++)
4440 x[i] = xh[i] + frac * (x[i] - xh[i]);
4441 cart2geo(x, &z, &lon, &lat);
4442 los->ds[los->np - 1] = ds * frac;
4443 ds = 0;
4444 }
4445
4446 /* Interpolate atmospheric data... */
4447 intpol_atm(ctl, atm, z, &p, &t, q, k);
4448
4449 /* Save data... */
4450 los->lon[los->np] = lon;
4451 los->lat[los->np] = lat;
4452 los->z[los->np] = z;
4453 los->p[los->np] = p;
4454 los->t[los->np] = t;
4455 for (int ig = 0; ig < ctl->ng; ig++)
4456 los->q[los->np][ig] = q[ig];
4457 for (int id = 0; id < ctl->nd; id++)
4458 los->k[los->np][id] = k[ctl->window[id]];
4459 los->ds[los->np] = ds;
4460
4461 /* Add cloud extinction... */
4462 if (ctl->ncl > 0 && atm->cldz > 0) {
4463 const double aux = exp(-0.5 * POW2((z - atm->clz) / atm->cldz));
4464 for (int id = 0; id < ctl->nd; id++) {
4465 const int icl = locate_irr(ctl->clnu, ctl->ncl, ctl->nu[id]);
4466 los->k[los->np][id]
4467 += aux * LIN(ctl->clnu[icl], atm->clk[icl],
4468 ctl->clnu[icl + 1], atm->clk[icl + 1], ctl->nu[id]);
4469 }
4470 }
4471
4472 /* Increment and check number of LOS points... */
4473 if ((++los->np) > NLOS)
4474 ERRMSG("Too many LOS points!");
4475
4476 /* Check stop flag... */
4477 if (stop) {
4478
4479 /* Set surface temperature... */
4480 if (ctl->nsf > 0 && atm->sft > 0)
4481 t = atm->sft;
4482 los->sft = (stop == 2 ? t : -999);
4483
4484 /* Set surface emissivity... */
4485 for (int id = 0; id < ctl->nd; id++) {
4486 los->sfeps[id] = 1.0;
4487 if (ctl->nsf > 0) {
4488 const int isf = locate_irr(ctl->sfnu, ctl->nsf, ctl->nu[id]);
4489 los->sfeps[id] = LIN(ctl->sfnu[isf], atm->sfeps[isf],
4490 ctl->sfnu[isf + 1], atm->sfeps[isf + 1],
4491 ctl->nu[id]);
4492 }
4493 }
4494
4495 /* Leave raytracer... */
4496 break;
4497 }
4498
4499 /* Determine refractivity... */
4500 if (ctl->refrac && z <= zrefrac)
4501 n = 1 + REFRAC(p, t);
4502 else
4503 n = 1;
4504
4505 /* Construct new tangent vector (first term)... */
4506 for (int i = 0; i < 3; i++)
4507 ex1[i] = ex0[i] * n;
4508
4509 /* Compute gradient of refractivity... */
4510 if (ctl->refrac && z <= zrefrac) {
4511 for (int i = 0; i < 3; i++)
4512 xh[i] = x[i] + 0.5 * ds * ex0[i];
4513 cart2geo(xh, &z, &lon, &lat);
4514 intpol_atm(ctl, atm, z, &p, &t, q, k);
4515 n = REFRAC(p, t);
4516 for (int i = 0; i < 3; i++) {
4517 xh[i] += h;
4518 cart2geo(xh, &z, &lon, &lat);
4519 intpol_atm(ctl, atm, z, &p, &t, q, k);
4520 ng[i] = (REFRAC(p, t) - n) / h;
4521 xh[i] -= h;
4522 }
4523 } else
4524 for (int i = 0; i < 3; i++)
4525 ng[i] = 0;
4526
4527 /* Construct new tangent vector (second term)... */
4528 for (int i = 0; i < 3; i++)
4529 ex1[i] += ds * ng[i];
4530
4531 /* Normalize new tangent vector... */
4532 norm = NORM(ex1);
4533 for (int i = 0; i < 3; i++)
4534 ex1[i] /= norm;
4535
4536 /* Determine next point of LOS... */
4537 for (int i = 0; i < 3; i++)
4538 x[i] += 0.5 * ds * (ex0[i] + ex1[i]);
4539
4540 /* Copy tangent vector... */
4541 for (int i = 0; i < 3; i++)
4542 ex0[i] = ex1[i];
4543 }
4544
4545 /* Get tangent point (to be done before changing segment lengths!)... */
4546 tangent_point(los, &obs->tpz[ir], &obs->tplon[ir], &obs->tplat[ir]);
4547
4548 /* Change segment lengths according to trapezoid rule... */
4549 for (int ip = los->np - 1; ip >= 1; ip--)
4550 los->ds[ip] = 0.5 * (los->ds[ip - 1] + los->ds[ip]);
4551 los->ds[0] *= 0.5;
4552
4553 /* Compute column density... */
4554 for (int ip = 0; ip < los->np; ip++)
4555 for (int ig = 0; ig < ctl->ng; ig++)
4556 los->u[ip][ig] = 10 * los->q[ip][ig] * los->p[ip]
4557 / (KB * los->t[ip]) * los->ds[ip];
4558
4559 /* Compute Curtis-Godson means... */
4560 for (int ig = 0; ig < ctl->ng; ig++) {
4561 los->cgu[0][ig] = los->u[0][ig];
4562 los->cgp[0][ig] = los->u[0][ig] * los->p[0];
4563 los->cgt[0][ig] = los->u[0][ig] * los->t[0];
4564 }
4565 for (int ip = 1; ip < los->np; ip++)
4566 for (int ig = 0; ig < ctl->ng; ig++) {
4567 los->cgu[ip][ig] = los->cgu[ip - 1][ig] + los->u[ip][ig];
4568 los->cgp[ip][ig] = los->cgp[ip - 1][ig] + los->u[ip][ig] * los->p[ip];
4569 los->cgt[ip][ig] = los->cgt[ip - 1][ig] + los->u[ip][ig] * los->t[ip];
4570 }
4571 for (int ip = 0; ip < los->np; ip++)
4572 for (int ig = 0; ig < ctl->ng; ig++)
4573 if (los->cgu[ip][ig] != 0) {
4574 los->cgp[ip][ig] /= los->cgu[ip][ig];
4575 los->cgt[ip][ig] /= los->cgu[ip][ig];
4576 }
4577}
4578
4579/*****************************************************************************/
4580
4582 const char *dirname,
4583 const char *filename,
4584 const ctl_t *ctl,
4585 atm_t *atm) {
4586
4587 FILE *in;
4588
4589 char file[LEN], line[LEN], *tok;
4590
4591 /* Init... */
4592 atm->np = 0;
4593
4594 /* Set filename... */
4595 if (dirname != NULL)
4596 sprintf(file, "%s/%s", dirname, filename);
4597 else
4598 sprintf(file, "%s", filename);
4599
4600 /* Write info... */
4601 LOG(1, "Read atmospheric data: %s", file);
4602
4603 /* Open file... */
4604 if (!(in = fopen(file, "r")))
4605 ERRMSG("Cannot open file!");
4606
4607 /* Read line... */
4608 while (fgets(line, LEN, in)) {
4609
4610 /* Read data... */
4611 TOK(line, tok, "%lg", atm->time[atm->np]);
4612 TOK(NULL, tok, "%lg", atm->z[atm->np]);
4613 TOK(NULL, tok, "%lg", atm->lon[atm->np]);
4614 TOK(NULL, tok, "%lg", atm->lat[atm->np]);
4615 TOK(NULL, tok, "%lg", atm->p[atm->np]);
4616 TOK(NULL, tok, "%lg", atm->t[atm->np]);
4617 for (int ig = 0; ig < ctl->ng; ig++)
4618 TOK(NULL, tok, "%lg", atm->q[ig][atm->np]);
4619 for (int iw = 0; iw < ctl->nw; iw++)
4620 TOK(NULL, tok, "%lg", atm->k[iw][atm->np]);
4621 if (ctl->ncl > 0 && atm->np == 0) {
4622 TOK(NULL, tok, "%lg", atm->clz);
4623 TOK(NULL, tok, "%lg", atm->cldz);
4624 for (int icl = 0; icl < ctl->ncl; icl++)
4625 TOK(NULL, tok, "%lg", atm->clk[icl]);
4626 }
4627 if (ctl->nsf > 0 && atm->np == 0) {
4628 TOK(NULL, tok, "%lg", atm->sfz);
4629 TOK(NULL, tok, "%lg", atm->sfp);
4630 TOK(NULL, tok, "%lg", atm->sft);
4631 for (int isf = 0; isf < ctl->nsf; isf++)
4632 TOK(NULL, tok, "%lg", atm->sfeps[isf]);
4633 }
4634
4635 /* Increment data point counter... */
4636 if ((++atm->np) > NP)
4637 ERRMSG("Too many data points!");
4638 }
4639
4640 /* Close file... */
4641 fclose(in);
4642
4643 /* Check number of points... */
4644 if (atm->np < 1)
4645 ERRMSG("Could not read any data!");
4646
4647 /* Write info... */
4648 double mini, maxi;
4649 LOG(2, "Number of data points: %d", atm->np);
4650 gsl_stats_minmax(&mini, &maxi, atm->time, 1, (size_t) atm->np);
4651 LOG(2, "Time range: %.2f ... %.2f s", mini, maxi);
4652 gsl_stats_minmax(&mini, &maxi, atm->z, 1, (size_t) atm->np);
4653 LOG(2, "Altitude range: %g ... %g km", mini, maxi);
4654 gsl_stats_minmax(&mini, &maxi, atm->lon, 1, (size_t) atm->np);
4655 LOG(2, "Longitude range: %g ... %g deg", mini, maxi);
4656 gsl_stats_minmax(&mini, &maxi, atm->lat, 1, (size_t) atm->np);
4657 LOG(2, "Latitude range: %g ... %g deg", mini, maxi);
4658 gsl_stats_minmax(&mini, &maxi, atm->p, 1, (size_t) atm->np);
4659 LOG(2, "Pressure range: %g ... %g hPa", maxi, mini);
4660 gsl_stats_minmax(&mini, &maxi, atm->t, 1, (size_t) atm->np);
4661 LOG(2, "Temperature range: %g ... %g K", mini, maxi);
4662 for (int ig = 0; ig < ctl->ng; ig++) {
4663 gsl_stats_minmax(&mini, &maxi, atm->q[ig], 1, (size_t) atm->np);
4664 LOG(2, "Emitter %s range: %g ... %g ppv", ctl->emitter[ig], mini, maxi);
4665 }
4666 for (int iw = 0; iw < ctl->nw; iw++) {
4667 gsl_stats_minmax(&mini, &maxi, atm->k[iw], 1, (size_t) atm->np);
4668 LOG(2, "Extinction range (window %d): %g ... %g km^-1", iw, mini, maxi);
4669 }
4670 if (ctl->ncl > 0 && atm->np == 0) {
4671 LOG(2, "Cloud layer: z= %g km | dz= %g km | k= %g ... %g km^-1",
4672 atm->clz, atm->cldz, atm->clk[0], atm->clk[ctl->ncl - 1]);
4673 } else
4674 LOG(2, "Cloud layer: none");
4675 if (ctl->nsf > 0 && atm->np == 0) {
4676 LOG(2,
4677 "Surface layer: z_s= %g km | p_s= %g hPa | T_s = %g K | eps= %g ... %g",
4678 atm->sfz, atm->sfp, atm->sft, atm->sfeps[0],
4679 atm->sfeps[ctl->nsf - 1]);
4680 } else
4681 LOG(2, "Surface layer: none");
4682}
4683
4684/*****************************************************************************/
4685
4687 int argc,
4688 char *argv[],
4689 ctl_t *ctl) {
4690
4691 /* Write info... */
4692 LOG(1, "\nJuelich Rapid Spectral Simulation Code (JURASSIC)\n"
4693 "(executable: %s | version: %s | compiled: %s, %s)\n",
4694 argv[0], VERSION, __DATE__, __TIME__);
4695
4696 /* Emitters... */
4697 ctl->ng = (int) scan_ctl(argc, argv, "NG", -1, "0", NULL);
4698 if (ctl->ng < 0 || ctl->ng > NG)
4699 ERRMSG("Set 0 <= NG <= MAX!");
4700 for (int ig = 0; ig < ctl->ng; ig++)
4701 scan_ctl(argc, argv, "EMITTER", ig, "", ctl->emitter[ig]);
4702 ctl->ig_co2 = find_emitter(ctl, "CO2");
4703 ctl->ig_h2o = find_emitter(ctl, "H2O");
4704 ctl->ig_n2 = find_emitter(ctl, "N2");
4705 ctl->ig_o2 = find_emitter(ctl, "O2");
4706
4707 /* Radiance channels... */
4708 ctl->nd = (int) scan_ctl(argc, argv, "ND", -1, "0", NULL);
4709 if (ctl->nd < 0 || ctl->nd > ND)
4710 ERRMSG("Set 0 <= ND <= MAX!");
4711 for (int id = 0; id < ctl->nd; id++)
4712 ctl->nu[id] = scan_ctl(argc, argv, "NU", id, "", NULL);
4713
4714 /* Spectral windows... */
4715 ctl->nw = (int) scan_ctl(argc, argv, "NW", -1, "1", NULL);
4716 if (ctl->nw < 0 || ctl->nw > NW)
4717 ERRMSG("Set 0 <= NW <= MAX!");
4718 for (int id = 0; id < ctl->nd; id++)
4719 ctl->window[id] = (int) scan_ctl(argc, argv, "WINDOW", id, "0", NULL);
4720
4721 /* Cloud data... */
4722 ctl->ncl = (int) scan_ctl(argc, argv, "NCL", -1, "0", NULL);
4723 if (ctl->ncl < 0 || ctl->ncl > NCL)
4724 ERRMSG("Set 0 <= NCL <= MAX!");
4725 if (ctl->ncl == 1)
4726 ERRMSG("Set NCL > 1!");
4727 for (int icl = 0; icl < ctl->ncl; icl++)
4728 ctl->clnu[icl] = scan_ctl(argc, argv, "CLNU", icl, "", NULL);
4729
4730 /* Surface data... */
4731 ctl->nsf = (int) scan_ctl(argc, argv, "NSF", -1, "0", NULL);
4732 if (ctl->nsf < 0 || ctl->nsf > NSF)
4733 ERRMSG("Set 0 <= NSF <= MAX!");
4734 if (ctl->nsf == 1)
4735 ERRMSG("Set NSF > 1!");
4736 for (int isf = 0; isf < ctl->nsf; isf++)
4737 ctl->sfnu[isf] = scan_ctl(argc, argv, "SFNU", isf, "", NULL);
4738 ctl->sftype = (int) scan_ctl(argc, argv, "SFTYPE", -1, "2", NULL);
4739 if (ctl->sftype < 0 || ctl->sftype > 3)
4740 ERRMSG("Set 0 <= SFTYPE <= 3!");
4741 ctl->sfsza = scan_ctl(argc, argv, "SFSZA", -1, "-999", NULL);
4742
4743 /* Emissivity look-up tables... */
4744 scan_ctl(argc, argv, "TBLBASE", -1, "-", ctl->tblbase);
4745 ctl->tblfmt = (int) scan_ctl(argc, argv, "TBLFMT", -1, "1", NULL);
4746
4747 /* Hydrostatic equilibrium... */
4748 ctl->hydz = scan_ctl(argc, argv, "HYDZ", -1, "-999", NULL);
4749
4750 /* Continua... */
4751 ctl->ctm_co2 = (int) scan_ctl(argc, argv, "CTM_CO2", -1, "1", NULL);
4752 ctl->ctm_h2o = (int) scan_ctl(argc, argv, "CTM_H2O", -1, "1", NULL);
4753 ctl->ctm_n2 = (int) scan_ctl(argc, argv, "CTM_N2", -1, "1", NULL);
4754 ctl->ctm_o2 = (int) scan_ctl(argc, argv, "CTM_O2", -1, "1", NULL);
4755
4756 /* Ray-tracing... */
4757 ctl->refrac = (int) scan_ctl(argc, argv, "REFRAC", -1, "1", NULL);
4758 ctl->rayds = scan_ctl(argc, argv, "RAYDS", -1, "10", NULL);
4759 ctl->raydz = scan_ctl(argc, argv, "RAYDZ", -1, "0.1", NULL);
4760
4761 /* Field of view... */
4762 scan_ctl(argc, argv, "FOV", -1, "-", ctl->fov);
4763 if (ctl->fov[0] != '-')
4764 read_shape(ctl->fov, ctl->fov_dz, ctl->fov_w, &ctl->fov_n);
4765
4766 /* Retrieval interface... */
4767 ctl->retp_zmin = scan_ctl(argc, argv, "RETP_ZMIN", -1, "-999", NULL);
4768 ctl->retp_zmax = scan_ctl(argc, argv, "RETP_ZMAX", -1, "-999", NULL);
4769 ctl->rett_zmin = scan_ctl(argc, argv, "RETT_ZMIN", -1, "-999", NULL);
4770 ctl->rett_zmax = scan_ctl(argc, argv, "RETT_ZMAX", -1, "-999", NULL);
4771 for (int ig = 0; ig < ctl->ng; ig++) {
4772 ctl->retq_zmin[ig] = scan_ctl(argc, argv, "RETQ_ZMIN", ig, "-999", NULL);
4773 ctl->retq_zmax[ig] = scan_ctl(argc, argv, "RETQ_ZMAX", ig, "-999", NULL);
4774 }
4775 for (int iw = 0; iw < ctl->nw; iw++) {
4776 ctl->retk_zmin[iw] = scan_ctl(argc, argv, "RETK_ZMIN", iw, "-999", NULL);
4777 ctl->retk_zmax[iw] = scan_ctl(argc, argv, "RETK_ZMAX", iw, "-999", NULL);
4778 }
4779 ctl->ret_clz = (int) scan_ctl(argc, argv, "RET_CLZ", -1, "0", NULL);
4780 ctl->ret_cldz = (int) scan_ctl(argc, argv, "RET_CLDZ", -1, "0", NULL);
4781 ctl->ret_clk = (int) scan_ctl(argc, argv, "RET_CLK", -1, "0", NULL);
4782 ctl->ret_sfz = (int) scan_ctl(argc, argv, "RET_SFZ", -1, "0", NULL);
4783 ctl->ret_sfp = (int) scan_ctl(argc, argv, "RET_SFP", -1, "0", NULL);
4784 ctl->ret_sft = (int) scan_ctl(argc, argv, "RET_SFT", -1, "0", NULL);
4785 ctl->ret_sfeps = (int) scan_ctl(argc, argv, "RET_SFEPS", -1, "0", NULL);
4786
4787 /* Output flags... */
4788 ctl->write_bbt = (int) scan_ctl(argc, argv, "WRITE_BBT", -1, "0", NULL);
4789 ctl->write_matrix =
4790 (int) scan_ctl(argc, argv, "WRITE_MATRIX", -1, "0", NULL);
4791
4792 /* External forward models... */
4793 ctl->formod = (int) scan_ctl(argc, argv, "FORMOD", -1, "1", NULL);
4794 scan_ctl(argc, argv, "RFMBIN", -1, "-", ctl->rfmbin);
4795 scan_ctl(argc, argv, "RFMHIT", -1, "-", ctl->rfmhit);
4796 for (int ig = 0; ig < ctl->ng; ig++)
4797 scan_ctl(argc, argv, "RFMXSC", ig, "-", ctl->rfmxsc[ig]);
4798}
4799
4800/*****************************************************************************/
4801
4803 const char *dirname,
4804 const char *filename,
4805 gsl_matrix *matrix) {
4806
4807 FILE *in;
4808
4809 char dum[LEN], file[LEN], line[LEN];
4810
4811 double value;
4812
4813 int i, j;
4814
4815 /* Set filename... */
4816 if (dirname != NULL)
4817 sprintf(file, "%s/%s", dirname, filename);
4818 else
4819 sprintf(file, "%s", filename);
4820
4821 /* Write info... */
4822 LOG(1, "Read matrix: %s", file);
4823
4824 /* Open file... */
4825 if (!(in = fopen(file, "r")))
4826 ERRMSG("Cannot open file!");
4827
4828 /* Read data... */
4829 gsl_matrix_set_zero(matrix);
4830 while (fgets(line, LEN, in))
4831 if (sscanf(line, "%d %s %s %s %s %s %d %s %s %s %s %s %lg",
4832 &i, dum, dum, dum, dum, dum,
4833 &j, dum, dum, dum, dum, dum, &value) == 13)
4834 gsl_matrix_set(matrix, (size_t) i, (size_t) j, value);
4835
4836 /* Close file... */
4837 fclose(in);
4838}
4839
4840/*****************************************************************************/
4841
4843 const char *dirname,
4844 const char *filename,
4845 const ctl_t *ctl,
4846 obs_t *obs) {
4847
4848 FILE *in;
4849
4850 char file[LEN], line[LEN], *tok;
4851
4852 /* Init... */
4853 obs->nr = 0;
4854
4855 /* Set filename... */
4856 if (dirname != NULL)
4857 sprintf(file, "%s/%s", dirname, filename);
4858 else
4859 sprintf(file, "%s", filename);
4860
4861 /* Write info... */
4862 LOG(1, "Read observation data: %s", file);
4863
4864 /* Open file... */
4865 if (!(in = fopen(file, "r")))
4866 ERRMSG("Cannot open file!");
4867
4868 /* Read line... */
4869 while (fgets(line, LEN, in)) {
4870
4871 /* Read data... */
4872 TOK(line, tok, "%lg", obs->time[obs->nr]);
4873 TOK(NULL, tok, "%lg", obs->obsz[obs->nr]);
4874 TOK(NULL, tok, "%lg", obs->obslon[obs->nr]);
4875 TOK(NULL, tok, "%lg", obs->obslat[obs->nr]);
4876 TOK(NULL, tok, "%lg", obs->vpz[obs->nr]);
4877 TOK(NULL, tok, "%lg", obs->vplon[obs->nr]);
4878 TOK(NULL, tok, "%lg", obs->vplat[obs->nr]);
4879 TOK(NULL, tok, "%lg", obs->tpz[obs->nr]);
4880 TOK(NULL, tok, "%lg", obs->tplon[obs->nr]);
4881 TOK(NULL, tok, "%lg", obs->tplat[obs->nr]);
4882 for (int id = 0; id < ctl->nd; id++)
4883 TOK(NULL, tok, "%lg", obs->rad[id][obs->nr]);
4884 for (int id = 0; id < ctl->nd; id++)
4885 TOK(NULL, tok, "%lg", obs->tau[id][obs->nr]);
4886
4887 /* Increment counter... */
4888 if ((++obs->nr) > NR)
4889 ERRMSG("Too many rays!");
4890 }
4891
4892 /* Close file... */
4893 fclose(in);
4894
4895 /* Check number of points... */
4896 if (obs->nr < 1)
4897 ERRMSG("Could not read any data!");
4898
4899 /* Write info... */
4900 double mini, maxi;
4901 LOG(2, "Number of ray paths: %d", obs->nr);
4902 gsl_stats_minmax(&mini, &maxi, obs->time, 1, (size_t) obs->nr);
4903 LOG(2, "Time range: %.2f ... %.2f s", mini, maxi);
4904 gsl_stats_minmax(&mini, &maxi, obs->obsz, 1, (size_t) obs->nr);
4905 LOG(2, "Observer altitude range: %g ... %g km", mini, maxi);
4906 gsl_stats_minmax(&mini, &maxi, obs->obslon, 1, (size_t) obs->nr);
4907 LOG(2, "Observer longitude range: %g ... %g deg", mini, maxi);
4908 gsl_stats_minmax(&mini, &maxi, obs->obslat, 1, (size_t) obs->nr);
4909 LOG(2, "Observer latitude range: %g ... %g deg", mini, maxi);
4910 gsl_stats_minmax(&mini, &maxi, obs->vpz, 1, (size_t) obs->nr);
4911 LOG(2, "View point altitude range: %g ... %g km", mini, maxi);
4912 gsl_stats_minmax(&mini, &maxi, obs->vplon, 1, (size_t) obs->nr);
4913 LOG(2, "View point longitude range: %g ... %g deg", mini, maxi);
4914 gsl_stats_minmax(&mini, &maxi, obs->vplat, 1, (size_t) obs->nr);
4915 LOG(2, "View point latitude range: %g ... %g deg", mini, maxi);
4916 gsl_stats_minmax(&mini, &maxi, obs->tpz, 1, (size_t) obs->nr);
4917 LOG(2, "Tangent point altitude range: %g ... %g km", mini, maxi);
4918 gsl_stats_minmax(&mini, &maxi, obs->tplon, 1, (size_t) obs->nr);
4919 LOG(2, "Tangent point longitude range: %g ... %g deg", mini, maxi);
4920 gsl_stats_minmax(&mini, &maxi, obs->tplat, 1, (size_t) obs->nr);
4921 LOG(2, "Tangent point latitude range: %g ... %g deg", mini, maxi);
4922 for (int id = 0; id < ctl->nd; id++) {
4923 gsl_stats_minmax(&mini, &maxi, obs->rad[id], 1, (size_t) obs->nr);
4924 if (ctl->write_bbt) {
4925 LOG(2, "Brightness temperature (%.4f cm^-1) range: %g ... %g K",
4926 ctl->nu[id], mini, maxi);
4927 } else {
4928 LOG(2, "Radiance (%.4f cm^-1) range: %g ... %g W/(m^2 sr cm^-1)",
4929 ctl->nu[id], mini, maxi);
4930 }
4931 }
4932 for (int id = 0; id < ctl->nd; id++) {
4933 gsl_stats_minmax(&mini, &maxi, obs->tau[id], 1, (size_t) obs->nr);
4934 if (ctl->write_bbt) {
4935 LOG(2, "Transmittance (%.4f cm^-1) range: %g ... %g",
4936 ctl->nu[id], mini, maxi);
4937 }
4938 }
4939}
4940
4941/*****************************************************************************/
4942
4944 const char *basename,
4945 const double z,
4946 double *nu,
4947 double *f,
4948 int n) {
4949
4950 FILE *in;
4951
4952 char filename[LEN];
4953
4954 double filt, fsum = 0, nu2[NSHAPE], *nurfm, *rad, radsum = 0;
4955
4956 int npts;
4957
4958 /* Allocate... */
4959 ALLOC(nurfm, double,
4960 RFMNPTS);
4961 ALLOC(rad, double,
4962 RFMNPTS);
4963
4964 /* Search RFM spectrum... */
4965 sprintf(filename, "%s_%05d.asc", basename, (int) (z * 1000));
4966 if (!(in = fopen(filename, "r"))) {
4967 sprintf(filename, "%s_%05d.asc", basename, (int) (z * 1000) + 1);
4968 if (!(in = fopen(filename, "r")))
4969 ERRMSG("Cannot find RFM data file!");
4970 }
4971 fclose(in);
4972
4973 /* Read RFM spectrum... */
4974 read_rfm_spec(filename, nurfm, rad, &npts);
4975
4976 /* Set wavenumbers... */
4977 nu2[0] = nu[0];
4978 nu2[n - 1] = nu[n - 1];
4979 for (int i = 1; i < n - 1; i++)
4980 nu2[i] = LIN(0.0, nu2[0], n - 1.0, nu2[n - 1], i);
4981
4982 /* Convolute... */
4983 for (int ipts = 0; ipts < npts; ipts++)
4984 if (nurfm[ipts] >= nu2[0] && nurfm[ipts] <= nu2[n - 1]) {
4985 const int idx = locate_irr(nu2, n, nurfm[ipts]);
4986 filt = LIN(nu2[idx], f[idx], nu2[idx + 1], f[idx + 1], nurfm[ipts]);
4987 fsum += filt;
4988 radsum += filt * rad[ipts];
4989 }
4990
4991 /* Free... */
4992 free(nurfm);
4993 free(rad);
4994
4995 /* Return radiance... */
4996 return radsum / fsum;
4997}
4998
4999/*****************************************************************************/
5000
5002 const char *filename,
5003 double *nu,
5004 double *rad,
5005 int *npts) {
5006
5007 FILE *in;
5008
5009 char *line = NULL, *tok;
5010
5011 size_t line_buf_size = 0;
5012
5013 double dnu, nu0, nu1;
5014
5015 int ipts = 0;
5016
5017 /* Write info... */
5018 LOG(1, "Read RFM data: %s", filename);
5019
5020 /* Open file... */
5021 if (!(in = fopen(filename, "r")))
5022 ERRMSG("Cannot open file!");
5023
5024 /* Read header... */
5025 for (int i = 0; i < 4; i++)
5026 if (getline(&line, &line_buf_size, in) == -1)
5027 ERRMSG("Error while reading file header!");
5028 if (sscanf(line, "%d %lg %lg %lg", npts, &nu0, &dnu, &nu1) != 4)
5029 ERRMSG("Invalid spectrum header format!");
5030
5031 /* Check number of spectral grid points... */
5032 if (*npts > RFMNPTS)
5033 ERRMSG("Too many spectral grid points!");
5034
5035 /* Read radiance data... */
5036 while (getline(&line, &line_buf_size, in) != -1 && ipts < *npts) {
5037 tok = strtok(line, " \t\n");
5038 while (tok != NULL && ipts < *npts) {
5039 if (sscanf(tok, "%lg", &rad[ipts]) == 1)
5040 ipts++;
5041 tok = strtok(NULL, " \t\n");
5042 }
5043 }
5044
5045 /* Check number of spectral grid points... */
5046 if (ipts != *npts)
5047 ERRMSG("Error while reading RFM data!");
5048
5049 /* Compute wavenumbers... */
5050 for (ipts = 0; ipts < *npts; ipts++)
5051 nu[ipts] = LIN(0.0, nu0, (double) (*npts - 1), nu1, (double) ipts);
5052
5053 /* Close file... */
5054 fclose(in);
5055
5056 /* Free.. */
5057 free(line);
5058}
5059
5060/*****************************************************************************/
5061
5063 const char *filename,
5064 double *x,
5065 double *y,
5066 int *n) {
5067
5068 FILE *in;
5069
5070 char line[LEN];
5071
5072 /* Write info... */
5073 LOG(1, "Read shape function: %s", filename);
5074
5075 /* Open file... */
5076 if (!(in = fopen(filename, "r")))
5077 ERRMSG("Cannot open file!");
5078
5079 /* Read data... */
5080 *n = 0;
5081 while (fgets(line, LEN, in))
5082 if (sscanf(line, "%lg %lg", &x[*n], &y[*n]) == 2)
5083 if ((++(*n)) > NSHAPE)
5084 ERRMSG("Too many data points!");
5085
5086 /* Close file... */
5087 fclose(in);
5088
5089 /* Check number of data points... */
5090 if (*n < 2)
5091 ERRMSG("Could not read any data!");
5092
5093 /* Write info... */
5094 double mini, maxi;
5095 LOG(2, "Number of data points: %d", *n);
5096 gsl_stats_minmax(&mini, &maxi, x, 1, (size_t) *n);
5097 LOG(2, "Range of x values: %.4f ... %.4f", mini, maxi);
5098 gsl_stats_minmax(&mini, &maxi, y, 1, (size_t) *n);
5099 LOG(2, "Range of y values: %g ... %g", mini, maxi);
5100}
5101
5102/*****************************************************************************/
5103
5105 const ctl_t *ctl) {
5106
5107 FILE *in;
5108
5109 char filename[2 * LEN], line[LEN];
5110
5111 double eps, press, temp, u;
5112
5113 /* Allocate... */
5114 tbl_t *tbl;
5115 ALLOC(tbl, tbl_t, 1);
5116
5117 /* Loop over trace gases and channels... */
5118 for (int id = 0; id < ctl->nd; id++)
5119 for (int ig = 0; ig < ctl->ng; ig++) {
5120
5121 /* Initialize... */
5122 tbl->np[id][ig] = -1;
5123 double eps_old = -999;
5124 double press_old = -999;
5125 double temp_old = -999;
5126 double u_old = -999;
5127 int nrange = 0;
5128
5129 /* Set filename... */
5130 sprintf(filename, "%s_%.4f_%s.%s", ctl->tblbase,
5131 ctl->nu[id], ctl->emitter[ig],
5132 ctl->tblfmt == 1 ? "tab" : "bin");
5133
5134 /* Write info... */
5135 LOG(1, "Read emissivity table: %s", filename);
5136
5137 /* Try to open file... */
5138 if (!(in = fopen(filename, "r"))) {
5139 WARN("Missing emissivity table: %s", filename);
5140 continue;
5141 }
5142
5143 /* Read ASCII tables... */
5144 if (ctl->tblfmt == 1) {
5145
5146 /* Read data... */
5147 while (fgets(line, LEN, in)) {
5148
5149 /* Parse line... */
5150 if (sscanf(line, "%lg %lg %lg %lg", &press, &temp, &u, &eps) != 4)
5151 continue;
5152
5153 /* Check ranges... */
5154 if (u < UMIN || u > UMAX || eps < EPSMIN || eps > EPSMAX) {
5155 nrange++;
5156 continue;
5157 }
5158
5159 /* Determine pressure index... */
5160 if (press != press_old) {
5161 press_old = press;
5162 if ((++tbl->np[id][ig]) >= TBLNP)
5163 ERRMSG("Too many pressure levels!");
5164 tbl->nt[id][ig][tbl->np[id][ig]] = -1;
5165 }
5166
5167 /* Determine temperature index... */
5168 if (temp != temp_old) {
5169 temp_old = temp;
5170 if ((++tbl->nt[id][ig][tbl->np[id][ig]]) >= TBLNT)
5171 ERRMSG("Too many temperatures!");
5172 tbl->nu[id][ig][tbl->np[id][ig]]
5173 [tbl->nt[id][ig][tbl->np[id][ig]]] = -1;
5174 }
5175
5176 /* Determine column density index... */
5177 if ((eps > eps_old && u > u_old) || tbl->nu[id][ig][tbl->np[id][ig]]
5178 [tbl->nt[id][ig][tbl->np[id][ig]]] < 0) {
5179 eps_old = eps;
5180 u_old = u;
5181 if ((++tbl->nu[id][ig][tbl->np[id][ig]]
5182 [tbl->nt[id][ig][tbl->np[id][ig]]]) >= TBLNU)
5183 ERRMSG("Too many column densities!");
5184 }
5185
5186 /* Store data... */
5187 tbl->p[id][ig][tbl->np[id][ig]] = press;
5188 tbl->t[id][ig][tbl->np[id][ig]][tbl->nt[id][ig][tbl->np[id][ig]]]
5189 = temp;
5190 tbl->u[id][ig][tbl->np[id][ig]][tbl->nt[id][ig][tbl->np[id][ig]]]
5191 [tbl->nu[id][ig][tbl->np[id][ig]]
5192 [tbl->nt[id][ig][tbl->np[id][ig]]]] = (float) u;
5193 tbl->eps[id][ig][tbl->np[id][ig]][tbl->nt[id][ig][tbl->np[id][ig]]]
5194 [tbl->nu[id][ig][tbl->np[id][ig]]
5195 [tbl->nt[id][ig][tbl->np[id][ig]]]] = (float) eps;
5196 }
5197
5198 /* Increment counters... */
5199 tbl->np[id][ig]++;
5200 for (int ip = 0; ip < tbl->np[id][ig]; ip++) {
5201 tbl->nt[id][ig][ip]++;
5202 for (int it = 0; it < tbl->nt[id][ig][ip]; it++)
5203 tbl->nu[id][ig][ip][it]++;
5204 }
5205 }
5206
5207 /* Read binary data... */
5208 else if (ctl->tblfmt == 2) {
5209
5210 /* Read data... */
5211 FREAD(&tbl->np[id][ig], int,
5212 1,
5213 in);
5214 if (tbl->np[id][ig] > TBLNP)
5215 ERRMSG("Too many pressure levels!");
5216 FREAD(tbl->p[id][ig], double,
5217 (size_t) tbl->np[id][ig],
5218 in);
5219 for (int ip = 0; ip < tbl->np[id][ig]; ip++) {
5220 FREAD(&tbl->nt[id][ig][ip], int,
5221 1,
5222 in);
5223 if (tbl->nt[id][ig][ip] > TBLNT)
5224 ERRMSG("Too many temperatures!");
5225 FREAD(tbl->t[id][ig][ip], double,
5226 (size_t) tbl->nt[id][ig][ip],
5227 in);
5228 for (int it = 0; it < tbl->nt[id][ig][ip]; it++) {
5229 FREAD(&tbl->nu[id][ig][ip][it], int,
5230 1,
5231 in);
5232 if (tbl->nu[id][ig][ip][it] > TBLNU)
5233 ERRMSG("Too many column densities!");
5234 FREAD(tbl->u[id][ig][ip][it], float,
5235 (size_t) tbl->nu[id][ig][ip][it],
5236 in);
5237 FREAD(tbl->eps[id][ig][ip][it], float,
5238 (size_t) tbl->nu[id][ig][ip][it],
5239 in);
5240 }
5241 }
5242 }
5243
5244 /* Error message... */
5245 else
5246 ERRMSG("Unknown look-up table format!");
5247
5248 /* Check ranges... */
5249 if (nrange > 0)
5250 WARN("Column density or emissivity out of range (%d data points)!",
5251 nrange);
5252
5253 /* Close file... */
5254 fclose(in);
5255
5256 /* Write info... */
5257 for (int ip = 0; ip < tbl->np[id][ig]; ip++)
5258 LOG(2,
5259 "p[%2d]= %.5e hPa | T[0:%2d]= %.2f ... %.2f K | u[0:%3d]= %.5e ... %.5e molec/cm^2 | eps[0:%3d]= %.5e ... %.5e",
5260 ip, tbl->p[id][ig][ip], tbl->nt[id][ig][ip] - 1,
5261 tbl->t[id][ig][ip][0],
5262 tbl->t[id][ig][ip][tbl->nt[id][ig][ip] - 1],
5263 tbl->nu[id][ig][ip][0] - 1, tbl->u[id][ig][ip][0][0],
5264 tbl->u[id][ig][ip][0][tbl->nu[id][ig][ip][0] - 1],
5265 tbl->nu[id][ig][ip][0] - 1, tbl->eps[id][ig][ip][0][0],
5266 tbl->eps[id][ig][ip][0][tbl->nu[id][ig][ip][0] - 1]);
5267 }
5268
5269 /* Initialize source function... */
5270 init_srcfunc(ctl, tbl);
5271
5272 /* Return pointer... */
5273 return tbl;
5274}
5275
5276/*****************************************************************************/
5277
5279 int argc,
5280 char *argv[],
5281 const char *varname,
5282 const int arridx,
5283 const char *defvalue,
5284 char *value) {
5285
5286 FILE *in = NULL;
5287
5288 char dummy[LEN], fullname1[LEN], fullname2[LEN], line[LEN],
5289 rvarname[LEN], rval[LEN];
5290
5291 int contain = 0;
5292
5293 /* Open file... */
5294 if (argv[1][0] != '-')
5295 if (!(in = fopen(argv[1], "r")))
5296 ERRMSG("Cannot open file!");
5297
5298 /* Set full variable name... */
5299 if (arridx >= 0) {
5300 sprintf(fullname1, "%s[%d]", varname, arridx);
5301 sprintf(fullname2, "%s[*]", varname);
5302 } else {
5303 sprintf(fullname1, "%s", varname);
5304 sprintf(fullname2, "%s", varname);
5305 }
5306
5307 /* Read data... */
5308 if (in != NULL)
5309 while (fgets(line, LEN, in))
5310 if (sscanf(line, "%s %s %s", rvarname, dummy, rval) == 3)
5311 if (strcasecmp(rvarname, fullname1) == 0 ||
5312 strcasecmp(rvarname, fullname2) == 0) {
5313 contain = 1;
5314 break;
5315 }
5316 for (int i = 1; i < argc - 1; i++)
5317 if (strcasecmp(argv[i], fullname1) == 0 ||
5318 strcasecmp(argv[i], fullname2) == 0) {
5319 sprintf(rval, "%s", argv[i + 1]);
5320 contain = 1;
5321 break;
5322 }
5323
5324 /* Close file... */
5325 if (in != NULL)
5326 fclose(in);
5327
5328 /* Check for missing variables... */
5329 if (!contain) {
5330 if (strlen(defvalue) > 0)
5331 sprintf(rval, "%s", defvalue);
5332 else
5333 ERRMSG("Missing variable %s!\n", fullname1);
5334 }
5335
5336 /* Write info... */
5337 LOG(1, "%s = %s", fullname1, rval);
5338
5339 /* Return values... */
5340 if (value != NULL)
5341 sprintf(value, "%s", rval);
5342 return atof(rval);
5343}
5344
5345/*****************************************************************************/
5346
5347double sza(
5348 const double sec,
5349 const double lon,
5350 const double lat) {
5351
5352 /* Number of days and fraction with respect to 2000-01-01T12:00Z... */
5353 const double D = sec / 86400 - 0.5;
5354
5355 /* Geocentric apparent ecliptic longitude [rad]... */
5356 const double g = DEG2RAD(357.529 + 0.98560028 * D);
5357 const double q = 280.459 + 0.98564736 * D;
5358 const double L = DEG2RAD(q + 1.915 * sin(g) + 0.020 * sin(2 * g));
5359
5360 /* Mean obliquity of the ecliptic [rad]... */
5361 const double e = DEG2RAD(23.439 - 0.00000036 * D);
5362
5363 /* Declination [rad]... */
5364 const double dec = asin(sin(e) * sin(L));
5365
5366 /* Right ascension [rad]... */
5367 const double ra = atan2(cos(e) * sin(L), cos(L));
5368
5369 /* Greenwich Mean Sidereal Time [h]... */
5370 const double GMST = 18.697374558 + 24.06570982441908 * D;
5371
5372 /* Local Sidereal Time [h]... */
5373 const double LST = GMST + lon / 15;
5374
5375 /* Hour angle [rad]... */
5376 const double h = LST / 12 * M_PI - ra;
5377
5378 /* Convert latitude... */
5379 const double latr = DEG2RAD(lat);
5380
5381 /* Return solar zenith angle [deg]... */
5382 return RAD2DEG(acos(sin(latr) * sin(dec) + cos(latr) * cos(dec) * cos(h)));
5383}
5384
5385/*****************************************************************************/
5386
5388 const los_t *los,
5389 double *tpz,
5390 double *tplon,
5391 double *tplat) {
5392
5393 double dummy, v[3], v0[3], v2[3];
5394
5395 /* Find minimum altitude... */
5396 const size_t ip = gsl_stats_min_index(los->z, 1, (size_t) los->np);
5397
5398 /* Nadir or zenith... */
5399 if (ip <= 0 || ip >= (size_t) los->np - 1) {
5400 *tpz = los->z[los->np - 1];
5401 *tplon = los->lon[los->np - 1];
5402 *tplat = los->lat[los->np - 1];
5403 }
5404
5405 /* Limb... */
5406 else {
5407
5408 /* Determine interpolating polynomial y=a*x^2+b*x+c... */
5409 const double yy0 = los->z[ip - 1];
5410 const double yy1 = los->z[ip];
5411 const double yy2 = los->z[ip + 1];
5412 const double x1 = sqrt(POW2(los->ds[ip]) - POW2(yy1 - yy0));
5413 const double x2 = x1 + sqrt(POW2(los->ds[ip + 1]) - POW2(yy2 - yy1));
5414 const double a = 1 / (x1 - x2) * (-(yy0 - yy1) / x1 + (yy0 - yy2) / x2);
5415 const double b = -(yy0 - yy1) / x1 - a * x1;
5416 const double c = yy0;
5417
5418 /* Get tangent point location... */
5419 const double x = -b / (2 * a);
5420 *tpz = a * x * x + b * x + c;
5421 geo2cart(los->z[ip - 1], los->lon[ip - 1], los->lat[ip - 1], v0);
5422 geo2cart(los->z[ip + 1], los->lon[ip + 1], los->lat[ip + 1], v2);
5423 for (int i = 0; i < 3; i++)
5424 v[i] = LIN(0.0, v0[i], x2, v2[i], x);
5425 cart2geo(v, &dummy, tplon, tplat);
5426 }
5427}
5428
5429/*****************************************************************************/
5430
5432 const int year,
5433 const int mon,
5434 const int day,
5435 const int hour,
5436 const int min,
5437 const int sec,
5438 const double remain,
5439 double *jsec) {
5440
5441 struct tm t0, t1;
5442
5443 t0.tm_year = 100;
5444 t0.tm_mon = 0;
5445 t0.tm_mday = 1;
5446 t0.tm_hour = 0;
5447 t0.tm_min = 0;
5448 t0.tm_sec = 0;
5449
5450 t1.tm_year = year - 1900;
5451 t1.tm_mon = mon - 1;
5452 t1.tm_mday = day;
5453 t1.tm_hour = hour;
5454 t1.tm_min = min;
5455 t1.tm_sec = sec;
5456
5457 *jsec = (double) timegm(&t1) - (double) timegm(&t0) + remain;
5458}
5459
5460/*****************************************************************************/
5461
5463 const char *name,
5464 const char *file,
5465 const char *func,
5466 int line,
5467 int mode) {
5468
5469 static double w0[10];
5470
5471 static int l0[10], nt;
5472
5473 /* Start new timer... */
5474 if (mode == 1) {
5475 w0[nt] = omp_get_wtime();
5476 l0[nt] = line;
5477 if ((++nt) >= 10)
5478 ERRMSG("Too many timers!");
5479 }
5480
5481 /* Write elapsed time... */
5482 else {
5483
5484 /* Check timer index... */
5485 if (nt - 1 < 0)
5486 ERRMSG("Coding error!");
5487
5488 /* Write elapsed time... */
5489 LOG(1, "Timer '%s' (%s, %s, l%d-%d): %.3f sec",
5490 name, file, func, l0[nt - 1], line, omp_get_wtime() - w0[nt - 1]);
5491 }
5492
5493 /* Stop timer... */
5494 if (mode == 3)
5495 nt--;
5496}
5497
5498/*****************************************************************************/
5499
5501 const char *dirname,
5502 const char *filename,
5503 const ctl_t *ctl,
5504 const atm_t *atm) {
5505
5506 FILE *out;
5507
5508 char file[LEN];
5509
5510 int n = 6;
5511
5512 /* Set filename... */
5513 if (dirname != NULL)
5514 sprintf(file, "%s/%s", dirname, filename);
5515 else
5516 sprintf(file, "%s", filename);
5517
5518 /* Write info... */
5519 LOG(1, "Write atmospheric data: %s", file);
5520
5521 /* Create file... */
5522 if (!(out = fopen(file, "w")))
5523 ERRMSG("Cannot create file!");
5524
5525 /* Write header... */
5526 fprintf(out,
5527 "# $1 = time (seconds since 2000-01-01T00:00Z)\n"
5528 "# $2 = altitude [km]\n"
5529 "# $3 = longitude [deg]\n"
5530 "# $4 = latitude [deg]\n"
5531 "# $5 = pressure [hPa]\n" "# $6 = temperature [K]\n");
5532 for (int ig = 0; ig < ctl->ng; ig++)
5533 fprintf(out, "# $%d = %s volume mixing ratio [ppv]\n",
5534 ++n, ctl->emitter[ig]);
5535 for (int iw = 0; iw < ctl->nw; iw++)
5536 fprintf(out, "# $%d = extinction (window %d) [km^-1]\n", ++n, iw);
5537 if (ctl->ncl > 0) {
5538 fprintf(out, "# $%d = cloud layer height [km]\n", ++n);
5539 fprintf(out, "# $%d = cloud layer depth [km]\n", ++n);
5540 for (int icl = 0; icl < ctl->ncl; icl++)
5541 fprintf(out, "# $%d = cloud layer extinction (%.4f cm^-1) [km^-1]\n",
5542 ++n, ctl->clnu[icl]);
5543 }
5544 if (ctl->nsf > 0) {
5545 fprintf(out, "# $%d = surface layer height [km]\n", ++n);
5546 fprintf(out, "# $%d = surface layer pressure [hPa]\n", ++n);
5547 fprintf(out, "# $%d = surface layer temperature [K]\n", ++n);
5548 for (int isf = 0; isf < ctl->nsf; isf++)
5549 fprintf(out, "# $%d = surface layer emissivity (%.4f cm^-1)\n",
5550 ++n, ctl->sfnu[isf]);
5551 }
5552
5553 /* Write data... */
5554 for (int ip = 0; ip < atm->np; ip++) {
5555 if (ip == 0 || atm->time[ip] != atm->time[ip - 1])
5556 fprintf(out, "\n");
5557 fprintf(out, "%.2f %g %g %g %g %g", atm->time[ip], atm->z[ip],
5558 atm->lon[ip], atm->lat[ip], atm->p[ip], atm->t[ip]);
5559 for (int ig = 0; ig < ctl->ng; ig++)
5560 fprintf(out, " %g", atm->q[ig][ip]);
5561 for (int iw = 0; iw < ctl->nw; iw++)
5562 fprintf(out, " %g", atm->k[iw][ip]);
5563 if (ctl->ncl > 0) {
5564 fprintf(out, " %g %g", atm->clz, atm->cldz);
5565 for (int icl = 0; icl < ctl->ncl; icl++)
5566 fprintf(out, " %g", atm->clk[icl]);
5567 }
5568 if (ctl->nsf > 0) {
5569 fprintf(out, " %g %g %g", atm->sfz, atm->sfp, atm->sft);
5570 for (int isf = 0; isf < ctl->nsf; isf++)
5571 fprintf(out, " %g", atm->sfeps[isf]);
5572 }
5573 fprintf(out, "\n");
5574 }
5575
5576 /* Close file... */
5577 fclose(out);
5578
5579 /* Write info... */
5580 double mini, maxi;
5581 LOG(2, "Number of data points: %d", atm->np);
5582 gsl_stats_minmax(&mini, &maxi, atm->time, 1, (size_t) atm->np);
5583 LOG(2, "Time range: %.2f ... %.2f s", mini, maxi);
5584 gsl_stats_minmax(&mini, &maxi, atm->z, 1, (size_t) atm->np);
5585 LOG(2, "Altitude range: %g ... %g km", mini, maxi);
5586 gsl_stats_minmax(&mini, &maxi, atm->lon, 1, (size_t) atm->np);
5587 LOG(2, "Longitude range: %g ... %g deg", mini, maxi);
5588 gsl_stats_minmax(&mini, &maxi, atm->lat, 1, (size_t) atm->np);
5589 LOG(2, "Latitude range: %g ... %g deg", mini, maxi);
5590 gsl_stats_minmax(&mini, &maxi, atm->p, 1, (size_t) atm->np);
5591 LOG(2, "Pressure range: %g ... %g hPa", maxi, mini);
5592 gsl_stats_minmax(&mini, &maxi, atm->t, 1, (size_t) atm->np);
5593 LOG(2, "Temperature range: %g ... %g K", mini, maxi);
5594 for (int ig = 0; ig < ctl->ng; ig++) {
5595 gsl_stats_minmax(&mini, &maxi, atm->q[ig], 1, (size_t) atm->np);
5596 LOG(2, "Emitter %s range: %g ... %g ppv", ctl->emitter[ig], mini, maxi);
5597 }
5598 for (int iw = 0; iw < ctl->nw; iw++) {
5599 gsl_stats_minmax(&mini, &maxi, atm->k[iw], 1, (size_t) atm->np);
5600 LOG(2, "Extinction range (window %d): %g ... %g km^-1", iw, mini, maxi);
5601 }
5602 if (ctl->ncl > 0 && atm->np == 0) {
5603 LOG(2, "Cloud layer: z= %g km | dz= %g km | k= %g ... %g km^-1",
5604 atm->clz, atm->cldz, atm->clk[0], atm->clk[ctl->ncl - 1]);
5605 } else
5606 LOG(2, "Cloud layer: none");
5607 if (ctl->nsf > 0 && atm->np == 0) {
5608 LOG(2,
5609 "Surface layer: z_s= %g km | p_s= %g hPa | T_s = %g K | eps= %g ... %g",
5610 atm->sfz, atm->sfp, atm->sft, atm->sfeps[0],
5611 atm->sfeps[ctl->nsf - 1]);
5612 } else
5613 LOG(2, "Surface layer: none");
5614}
5615
5616/*****************************************************************************/
5617
5619 const char *filename,
5620 const ctl_t *ctl,
5621 const atm_t *atm) {
5622
5623 FILE *out;
5624
5625 /* Write info... */
5626 LOG(1, "Write RFM data: %s", filename);
5627
5628 /* Create file... */
5629 if (!(out = fopen(filename, "w")))
5630 ERRMSG("Cannot create file!");
5631
5632 /* Write data... */
5633 fprintf(out, "%d\n", atm->np);
5634 fprintf(out, "*HGT [km]\n");
5635 for (int ip = 0; ip < atm->np; ip++)
5636 fprintf(out, "%g\n", atm->z[ip]);
5637 fprintf(out, "*PRE [mb]\n");
5638 for (int ip = 0; ip < atm->np; ip++)
5639 fprintf(out, "%g\n", atm->p[ip]);
5640 fprintf(out, "*TEM [K]\n");
5641 for (int ip = 0; ip < atm->np; ip++)
5642 fprintf(out, "%g\n", atm->t[ip]);
5643 for (int ig = 0; ig < ctl->ng; ig++) {
5644 fprintf(out, "*%s [ppmv]\n", ctl->emitter[ig]);
5645 for (int ip = 0; ip < atm->np; ip++)
5646 fprintf(out, "%g\n", atm->q[ig][ip] * 1e6);
5647 }
5648 fprintf(out, "*END\n");
5649
5650 /* Close file... */
5651 fclose(out);
5652}
5653
5654/*****************************************************************************/
5655
5657 const char *dirname,
5658 const char *filename,
5659 const ctl_t *ctl,
5660 const gsl_matrix *matrix,
5661 const atm_t *atm,
5662 const obs_t *obs,
5663 const char *rowspace,
5664 const char *colspace,
5665 const char *sort) {
5666
5667 FILE *out;
5668
5669 char file[LEN], quantity[LEN];
5670
5671 int *cida, *ciqa, *cipa, *cira, *rida, *riqa, *ripa, *rira;
5672
5673 size_t i, j, nc, nr;
5674
5675 /* Check output flag... */
5676 if (!ctl->write_matrix)
5677 return;
5678
5679 /* Allocate... */
5680 ALLOC(cida, int,
5681 M);
5682 ALLOC(ciqa, int,
5683 N);
5684 ALLOC(cipa, int,
5685 N);
5686 ALLOC(cira, int,
5687 M);
5688 ALLOC(rida, int,
5689 M);
5690 ALLOC(riqa, int,
5691 N);
5692 ALLOC(ripa, int,
5693 N);
5694 ALLOC(rira, int,
5695 M);
5696
5697 /* Set filename... */
5698 if (dirname != NULL)
5699 sprintf(file, "%s/%s", dirname, filename);
5700 else
5701 sprintf(file, "%s", filename);
5702
5703 /* Write info... */
5704 LOG(1, "Write matrix: %s", file);
5705
5706 /* Create file... */
5707 if (!(out = fopen(file, "w")))
5708 ERRMSG("Cannot create file!");
5709
5710 /* Write header (row space)... */
5711 if (rowspace[0] == 'y') {
5712
5713 fprintf(out,
5714 "# $1 = Row: index (measurement space)\n"
5715 "# $2 = Row: channel wavenumber [cm^-1]\n"
5716 "# $3 = Row: time (seconds since 2000-01-01T00:00Z)\n"
5717 "# $4 = Row: view point altitude [km]\n"
5718 "# $5 = Row: view point longitude [deg]\n"
5719 "# $6 = Row: view point latitude [deg]\n");
5720
5721 /* Get number of rows... */
5722 nr = obs2y(ctl, obs, NULL, rida, rira);
5723
5724 } else {
5725
5726 fprintf(out,
5727 "# $1 = Row: index (state space)\n"
5728 "# $2 = Row: name of quantity\n"
5729 "# $3 = Row: time (seconds since 2000-01-01T00:00Z)\n"
5730 "# $4 = Row: altitude [km]\n"
5731 "# $5 = Row: longitude [deg]\n" "# $6 = Row: latitude [deg]\n");
5732
5733 /* Get number of rows... */
5734 nr = atm2x(ctl, atm, NULL, riqa, ripa);
5735 }
5736
5737 /* Write header (column space)... */
5738 if (colspace[0] == 'y') {
5739
5740 fprintf(out,
5741 "# $7 = Col: index (measurement space)\n"
5742 "# $8 = Col: channel wavenumber [cm^-1]\n"
5743 "# $9 = Col: time (seconds since 2000-01-01T00:00Z)\n"
5744 "# $10 = Col: view point altitude [km]\n"
5745 "# $11 = Col: view point longitude [deg]\n"
5746 "# $12 = Col: view point latitude [deg]\n");
5747
5748 /* Get number of columns... */
5749 nc = obs2y(ctl, obs, NULL, cida, cira);
5750
5751 } else {
5752
5753 fprintf(out,
5754 "# $7 = Col: index (state space)\n"
5755 "# $8 = Col: name of quantity\n"
5756 "# $9 = Col: time (seconds since 2000-01-01T00:00Z)\n"
5757 "# $10 = Col: altitude [km]\n"
5758 "# $11 = Col: longitude [deg]\n" "# $12 = Col: latitude [deg]\n");
5759
5760 /* Get number of columns... */
5761 nc = atm2x(ctl, atm, NULL, ciqa, cipa);
5762 }
5763
5764 /* Write header entry... */
5765 fprintf(out, "# $13 = Matrix element\n\n");
5766
5767 /* Write matrix data... */
5768 i = j = 0;
5769 while (i < nr && j < nc) {
5770
5771 /* Write info about the row... */
5772 if (rowspace[0] == 'y')
5773 fprintf(out, "%d %.4f %.2f %g %g %g",
5774 (int) i, ctl->nu[rida[i]],
5775 obs->time[rira[i]], obs->vpz[rira[i]],
5776 obs->vplon[rira[i]], obs->vplat[rira[i]]);
5777 else {
5778 idx2name(ctl, riqa[i], quantity);
5779 fprintf(out, "%d %s %.2f %g %g %g", (int) i, quantity,
5780 atm->time[ripa[i]], atm->z[ripa[i]],
5781 atm->lon[ripa[i]], atm->lat[ripa[i]]);
5782 }
5783
5784 /* Write info about the column... */
5785 if (colspace[0] == 'y')
5786 fprintf(out, " %d %.4f %.2f %g %g %g",
5787 (int) j, ctl->nu[cida[j]],
5788 obs->time[cira[j]], obs->vpz[cira[j]],
5789 obs->vplon[cira[j]], obs->vplat[cira[j]]);
5790 else {
5791 idx2name(ctl, ciqa[j], quantity);
5792 fprintf(out, " %d %s %.2f %g %g %g", (int) j, quantity,
5793 atm->time[cipa[j]], atm->z[cipa[j]],
5794 atm->lon[cipa[j]], atm->lat[cipa[j]]);
5795 }
5796
5797 /* Write matrix entry... */
5798 fprintf(out, " %g\n", gsl_matrix_get(matrix, i, j));
5799
5800 /* Set matrix indices... */
5801 if (sort[0] == 'r') {
5802 j++;
5803 if (j >= nc) {
5804 j = 0;
5805 i++;
5806 fprintf(out, "\n");
5807 }
5808 } else {
5809 i++;
5810 if (i >= nr) {
5811 i = 0;
5812 j++;
5813 fprintf(out, "\n");
5814 }
5815 }
5816 }
5817
5818 /* Close file... */
5819 fclose(out);
5820
5821 /* Free... */
5822 free(cida);
5823 free(ciqa);
5824 free(cipa);
5825 free(cira);
5826 free(rida);
5827 free(riqa);
5828 free(ripa);
5829 free(rira);
5830}
5831
5832/*****************************************************************************/
5833
5835 const char *dirname,
5836 const char *filename,
5837 const ctl_t *ctl,
5838 const obs_t *obs) {
5839
5840 FILE *out;
5841
5842 char file[LEN];
5843
5844 int n = 10;
5845
5846 /* Set filename... */
5847 if (dirname != NULL)
5848 sprintf(file, "%s/%s", dirname, filename);
5849 else
5850 sprintf(file, "%s", filename);
5851
5852 /* Write info... */
5853 LOG(1, "Write observation data: %s", file);
5854
5855 /* Create file... */
5856 if (!(out = fopen(file, "w")))
5857 ERRMSG("Cannot create file!");
5858
5859 /* Write header... */
5860 fprintf(out,
5861 "# $1 = time (seconds since 2000-01-01T00:00Z)\n"
5862 "# $2 = observer altitude [km]\n"
5863 "# $3 = observer longitude [deg]\n"
5864 "# $4 = observer latitude [deg]\n"
5865 "# $5 = view point altitude [km]\n"
5866 "# $6 = view point longitude [deg]\n"
5867 "# $7 = view point latitude [deg]\n"
5868 "# $8 = tangent point altitude [km]\n"
5869 "# $9 = tangent point longitude [deg]\n"
5870 "# $10 = tangent point latitude [deg]\n");
5871 for (int id = 0; id < ctl->nd; id++)
5872 if (ctl->write_bbt)
5873 fprintf(out, "# $%d = brightness temperature (%.4f cm^-1) [K]\n",
5874 ++n, ctl->nu[id]);
5875 else
5876 fprintf(out, "# $%d = radiance (%.4f cm^-1) [W/(m^2 sr cm^-1)]\n",
5877 ++n, ctl->nu[id]);
5878 for (int id = 0; id < ctl->nd; id++)
5879 fprintf(out, "# $%d = transmittance (%.4f cm^-1) [-]\n", ++n,
5880 ctl->nu[id]);
5881
5882 /* Write data... */
5883 for (int ir = 0; ir < obs->nr; ir++) {
5884 if (ir == 0 || obs->time[ir] != obs->time[ir - 1])
5885 fprintf(out, "\n");
5886 fprintf(out, "%.2f %g %g %g %g %g %g %g %g %g", obs->time[ir],
5887 obs->obsz[ir], obs->obslon[ir], obs->obslat[ir],
5888 obs->vpz[ir], obs->vplon[ir], obs->vplat[ir],
5889 obs->tpz[ir], obs->tplon[ir], obs->tplat[ir]);
5890 for (int id = 0; id < ctl->nd; id++)
5891 fprintf(out, " %g", obs->rad[id][ir]);
5892 for (int id = 0; id < ctl->nd; id++)
5893 fprintf(out, " %g", obs->tau[id][ir]);
5894 fprintf(out, "\n");
5895 }
5896
5897 /* Close file... */
5898 fclose(out);
5899
5900 /* Write info... */
5901 double mini, maxi;
5902 LOG(2, "Number of ray paths: %d", obs->nr);
5903 gsl_stats_minmax(&mini, &maxi, obs->time, 1, (size_t) obs->nr);
5904 LOG(2, "Time range: %.2f ... %.2f s", mini, maxi);
5905 gsl_stats_minmax(&mini, &maxi, obs->obsz, 1, (size_t) obs->nr);
5906 LOG(2, "Observer altitude range: %g ... %g km", mini, maxi);
5907 gsl_stats_minmax(&mini, &maxi, obs->obslon, 1, (size_t) obs->nr);
5908 LOG(2, "Observer longitude range: %g ... %g deg", mini, maxi);
5909 gsl_stats_minmax(&mini, &maxi, obs->obslat, 1, (size_t) obs->nr);
5910 LOG(2, "Observer latitude range: %g ... %g deg", mini, maxi);
5911 gsl_stats_minmax(&mini, &maxi, obs->vpz, 1, (size_t) obs->nr);
5912 LOG(2, "View point altitude range: %g ... %g km", mini, maxi);
5913 gsl_stats_minmax(&mini, &maxi, obs->vplon, 1, (size_t) obs->nr);
5914 LOG(2, "View point longitude range: %g ... %g deg", mini, maxi);
5915 gsl_stats_minmax(&mini, &maxi, obs->vplat, 1, (size_t) obs->nr);
5916 LOG(2, "View point latitude range: %g ... %g deg", mini, maxi);
5917 gsl_stats_minmax(&mini, &maxi, obs->tpz, 1, (size_t) obs->nr);
5918 LOG(2, "Tangent point altitude range: %g ... %g km", mini, maxi);
5919 gsl_stats_minmax(&mini, &maxi, obs->tplon, 1, (size_t) obs->nr);
5920 LOG(2, "Tangent point longitude range: %g ... %g deg", mini, maxi);
5921 gsl_stats_minmax(&mini, &maxi, obs->tplat, 1, (size_t) obs->nr);
5922 LOG(2, "Tangent point latitude range: %g ... %g deg", mini, maxi);
5923 for (int id = 0; id < ctl->nd; id++) {
5924 gsl_stats_minmax(&mini, &maxi, obs->rad[id], 1, (size_t) obs->nr);
5925 if (ctl->write_bbt) {
5926 LOG(2, "Brightness temperature (%.4f cm^-1) range: %g ... %g K",
5927 ctl->nu[id], mini, maxi);
5928 } else {
5929 LOG(2, "Radiance (%.4f cm^-1) range: %g ... %g W/(m^2 sr cm^-1)",
5930 ctl->nu[id], mini, maxi);
5931 }
5932 }
5933 for (int id = 0; id < ctl->nd; id++) {
5934 gsl_stats_minmax(&mini, &maxi, obs->tau[id], 1, (size_t) obs->nr);
5935 if (ctl->write_bbt) {
5936 LOG(2, "Transmittance (%.4f cm^-1) range: %g ... %g",
5937 ctl->nu[id], mini, maxi);
5938 }
5939 }
5940}
5941
5942/*****************************************************************************/
5943
5945 const char *filename,
5946 const double *x,
5947 const double *y,
5948 const int n) {
5949
5950 FILE *out;
5951
5952 /* Write info... */
5953 LOG(1, "Write shape function: %s", filename);
5954
5955 /* Create file... */
5956 if (!(out = fopen(filename, "w")))
5957 ERRMSG("Cannot create file!");
5958
5959 /* Write header... */
5960 fprintf(out,
5961 "# $1 = shape function x-value [-]\n"
5962 "# $2 = shape function y-value [-]\n\n");
5963
5964 /* Write data... */
5965 for (int i = 0; i < n; i++)
5966 fprintf(out, "%.10g %.10g\n", x[i], y[i]);
5967
5968 /* Close file... */
5969 fclose(out);
5970}
5971
5972/*****************************************************************************/
5973
5975 const ctl_t *ctl,
5976 const tbl_t *tbl) {
5977
5978 FILE *out;
5979
5980 char filename[2 * LEN];
5981
5982 /* Loop over emitters and detectors... */
5983 for (int ig = 0; ig < ctl->ng; ig++)
5984 for (int id = 0; id < ctl->nd; id++) {
5985
5986 /* Set filename... */
5987 sprintf(filename, "%s_%.4f_%s.%s", ctl->tblbase,
5988 ctl->nu[id], ctl->emitter[ig],
5989 ctl->tblfmt == 1 ? "tab" : "bin");
5990
5991 /* Write info... */
5992 LOG(1, "Write emissivity table: %s", filename);
5993
5994 /* Create file... */
5995 if (!(out = fopen(filename, "w")))
5996 ERRMSG("Cannot create file!");
5997
5998 /* Write ASCII data... */
5999 if (ctl->tblfmt == 1) {
6000
6001 /* Write header... */
6002 fprintf(out,
6003 "# $1 = pressure [hPa]\n"
6004 "# $2 = temperature [K]\n"
6005 "# $3 = column density [molecules/cm^2]\n"
6006 "# $4 = emissivity [-]\n");
6007
6008 /* Save table file... */
6009 for (int ip = 0; ip < tbl->np[id][ig]; ip++)
6010 for (int it = 0; it < tbl->nt[id][ig][ip]; it++) {
6011 fprintf(out, "\n");
6012 for (int iu = 0; iu < tbl->nu[id][ig][ip][it]; iu++)
6013 fprintf(out, "%g %g %e %e\n",
6014 tbl->p[id][ig][ip], tbl->t[id][ig][ip][it],
6015 tbl->u[id][ig][ip][it][iu],
6016 tbl->eps[id][ig][ip][it][iu]);
6017 }
6018 }
6019
6020 /* Write binary data... */
6021 else if (ctl->tblfmt == 2) {
6022 FWRITE(&tbl->np[id][ig], int,
6023 1,
6024 out);
6025 FWRITE(tbl->p[id][ig], double,
6026 (size_t) tbl->np[id][ig],
6027 out);
6028 for (int ip = 0; ip < tbl->np[id][ig]; ip++) {
6029 FWRITE(&tbl->nt[id][ig][ip], int,
6030 1,
6031 out);
6032 FWRITE(tbl->t[id][ig][ip], double,
6033 (size_t) tbl->nt[id][ig][ip],
6034 out);
6035 for (int it = 0; it < tbl->nt[id][ig][ip]; it++) {
6036 FWRITE(&tbl->nu[id][ig][ip][it], int,
6037 1,
6038 out);
6039 FWRITE(tbl->u[id][ig][ip][it], float,
6040 (size_t) tbl->nu[id][ig][ip][it],
6041 out);
6042 FWRITE(tbl->eps[id][ig][ip][it], float,
6043 (size_t) tbl->nu[id][ig][ip][it],
6044 out);
6045 }
6046 }
6047 }
6048
6049 /* Error message... */
6050 else
6051 ERRMSG("Unknown look-up table format!");
6052
6053 /* Close file... */
6054 fclose(out);
6055 }
6056}
6057
6058/*****************************************************************************/
6059
6061 const ctl_t *ctl,
6062 const gsl_vector *x,
6063 atm_t *atm) {
6064
6065 size_t n = 0;
6066
6067 /* Get pressure... */
6068 for (int ip = 0; ip < atm->np; ip++)
6069 if (atm->z[ip] >= ctl->retp_zmin && atm->z[ip] <= ctl->retp_zmax)
6070 x2atm_help(&atm->p[ip], x, &n);
6071
6072 /* Get temperature... */
6073 for (int ip = 0; ip < atm->np; ip++)
6074 if (atm->z[ip] >= ctl->rett_zmin && atm->z[ip] <= ctl->rett_zmax)
6075 x2atm_help(&atm->t[ip], x, &n);
6076
6077 /* Get volume mixing ratio... */
6078 for (int ig = 0; ig < ctl->ng; ig++)
6079 for (int ip = 0; ip < atm->np; ip++)
6080 if (atm->z[ip] >= ctl->retq_zmin[ig]
6081 && atm->z[ip] <= ctl->retq_zmax[ig])
6082 x2atm_help(&atm->q[ig][ip], x, &n);
6083
6084 /* Get extinction... */
6085 for (int iw = 0; iw < ctl->nw; iw++)
6086 for (int ip = 0; ip < atm->np; ip++)
6087 if (atm->z[ip] >= ctl->retk_zmin[iw]
6088 && atm->z[ip] <= ctl->retk_zmax[iw])
6089 x2atm_help(&atm->k[iw][ip], x, &n);
6090
6091 /* Get cloud data... */
6092 if (ctl->ret_clz)
6093 x2atm_help(&atm->clz, x, &n);
6094 if (ctl->ret_cldz)
6095 x2atm_help(&atm->cldz, x, &n);
6096 if (ctl->ret_clk)
6097 for (int icl = 0; icl < ctl->ncl; icl++)
6098 x2atm_help(&atm->clk[icl], x, &n);
6099
6100 /* Get surface data... */
6101 if (ctl->ret_sfz)
6102 x2atm_help(&atm->sfz, x, &n);
6103 if (ctl->ret_sfp)
6104 x2atm_help(&atm->sfp, x, &n);
6105 if (ctl->ret_sft)
6106 x2atm_help(&atm->sft, x, &n);
6107 if (ctl->ret_sfeps)
6108 for (int isf = 0; isf < ctl->nsf; isf++)
6109 x2atm_help(&atm->sfeps[isf], x, &n);
6110}
6111
6112/*****************************************************************************/
6113
6115 double *value,
6116 const gsl_vector *x,
6117 size_t *n) {
6118
6119 /* Get state vector element... */
6120 *value = gsl_vector_get(x, *n);
6121 (*n)++;
6122}
6123
6124/*****************************************************************************/
6125
6127 const ctl_t *ctl,
6128 const gsl_vector *y,
6129 obs_t *obs) {
6130
6131 size_t m = 0;
6132
6133 /* Decompose measurement vector... */
6134 for (int ir = 0; ir < obs->nr; ir++)
6135 for (int id = 0; id < ctl->nd; id++)
6136 if (isfinite(obs->rad[id][ir])) {
6137 obs->rad[id][ir] = gsl_vector_get(y, m);
6138 m++;
6139 }
6140}
void read_matrix(const char *dirname, const char *filename, gsl_matrix *matrix)
Read matrix.
Definition: jurassic.c:4802
void timer(const char *name, const char *file, const char *func, int line, int mode)
Measure wall-clock time.
Definition: jurassic.c:5462
void read_rfm_spec(const char *filename, double *nu, double *rad, int *npts)
Read RFM spectrum.
Definition: jurassic.c:5001
void write_atm(const char *dirname, const char *filename, const ctl_t *ctl, const atm_t *atm)
Write atmospheric data.
Definition: jurassic.c:5500
int locate_reg(const double *xx, const int n, const double x)
Find array index for regular grid.
Definition: jurassic.c:4271
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])
Get transmittance from look-up tables (EGA method).
Definition: jurassic.c:3949
double read_obs_rfm(const char *basename, const double z, double *nu, double *f, int n)
Read observation data in RFM format.
Definition: jurassic.c:4943
void formod_rfm(const ctl_t *ctl, const atm_t *atm, obs_t *obs)
Apply RFM for radiative transfer calculations.
Definition: jurassic.c:3498
double ctmo2(const double nu, const double p, const double t)
Compute oxygen continuum (absorption coefficient).
Definition: jurassic.c:3045
void idx2name(const ctl_t *ctl, const int idx, char *quantity)
Determine name of state vector quantity for given index.
Definition: jurassic.c:3736
void read_ctl(int argc, char *argv[], ctl_t *ctl)
Read forward model control parameters.
Definition: jurassic.c:4686
void formod_continua(const ctl_t *ctl, const los_t *los, const int ip, double *beta)
Compute absorption coefficient of continua.
Definition: jurassic.c:3262
void raytrace(const ctl_t *ctl, const atm_t *atm, obs_t *obs, los_t *los, const int ir)
Do ray-tracing to determine LOS.
Definition: jurassic.c:4339
int locate_irr(const double *xx, const int n, const double x)
Find array index for irregular grid.
Definition: jurassic.c:4241
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)
Convert date to seconds.
Definition: jurassic.c:5431
void x2atm(const ctl_t *ctl, const gsl_vector *x, atm_t *atm)
Decompose parameter vector or state vector.
Definition: jurassic.c:6060
void atm2x_help(const double value, const int value_iqa, const int value_ip, gsl_vector *x, int *iqa, int *ipa, size_t *n)
Add element to state vector.
Definition: jurassic.c:87
double ctmh2o(const double nu, const double p, const double t, const double q, const double u)
Compute water vapor continuum (optical depth).
Definition: jurassic.c:1924
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])
Get transmittance from look-up tables (CGA method).
Definition: jurassic.c:3860
void write_atm_rfm(const char *filename, const ctl_t *ctl, const atm_t *atm)
Write atmospheric data in RFM format.
Definition: jurassic.c:5618
double intpol_tbl_u(const tbl_t *tbl, const int ig, const int id, const int ip, const int it, const double eps)
Interpolate column density from look-up tables.
Definition: jurassic.c:4077
double intpol_tbl_eps(const tbl_t *tbl, const int ig, const int id, const int ip, const int it, const double u)
Interpolate emissivity from look-up tables.
Definition: jurassic.c:4045
void write_tbl(const ctl_t *ctl, const tbl_t *tbl)
Write look-up table data.
Definition: jurassic.c:5974
void intpol_atm(const ctl_t *ctl, const atm_t *atm, const double z, double *p, double *t, double *q, double *k)
Interpolate atmospheric data.
Definition: jurassic.c:3835
int find_emitter(const ctl_t *ctl, const char *emitter)
Find index of an emitter.
Definition: jurassic.c:3199
double sza(const double sec, const double lon, const double lat)
Calculate solar zenith angle.
Definition: jurassic.c:5347
void tangent_point(const los_t *los, double *tpz, double *tplon, double *tplat)
Find tangent point of a given LOS.
Definition: jurassic.c:5387
void formod_pencil(const ctl_t *ctl, const tbl_t *tbl, const atm_t *atm, obs_t *obs, const int ir)
Compute radiative transfer for a pencil beam.
Definition: jurassic.c:3363
double ctmco2(const double nu, const double p, const double t, const double u)
Compute carbon dioxide continuum (optical depth).
Definition: jurassic.c:1061
void read_atm(const char *dirname, const char *filename, const ctl_t *ctl, atm_t *atm)
Read atmospheric data.
Definition: jurassic.c:4581
void copy_obs(const ctl_t *ctl, obs_t *obs_dest, const obs_t *obs_src, const int init)
Copy and initialize observation data.
Definition: jurassic.c:3161
void read_obs(const char *dirname, const char *filename, const ctl_t *ctl, obs_t *obs)
Read observation data.
Definition: jurassic.c:4842
void write_obs(const char *dirname, const char *filename, const ctl_t *ctl, const obs_t *obs)
Write observation data.
Definition: jurassic.c:5834
void x2atm_help(double *value, const gsl_vector *x, size_t *n)
Get element from state vector.
Definition: jurassic.c:6114
void cart2geo(const double *x, double *z, double *lon, double *lat)
Convert Cartesian coordinates to geolocation.
Definition: jurassic.c:108
void formod_fov(const ctl_t *ctl, obs_t *obs)
Apply field of view convolution.
Definition: jurassic.c:3298
void kernel(const ctl_t *ctl, const tbl_t *tbl, atm_t *atm, obs_t *obs, gsl_matrix *k)
Compute Jacobians.
Definition: jurassic.c:4142
void init_srcfunc(const ctl_t *ctl, tbl_t *tbl)
Initialize source function table.
Definition: jurassic.c:3781
double scan_ctl(int argc, char *argv[], const char *varname, const int arridx, const char *defvalue, char *value)
Search control parameter file for variable entry.
Definition: jurassic.c:5278
void write_shape(const char *filename, const double *x, const double *y, const int n)
Write shape function.
Definition: jurassic.c:5944
void formod(const ctl_t *ctl, const tbl_t *tbl, atm_t *atm, obs_t *obs)
Determine ray paths and compute radiative transfer.
Definition: jurassic.c:3212
void formod_srcfunc(const ctl_t *ctl, const tbl_t *tbl, const double t, double *src)
Compute Planck source function.
Definition: jurassic.c:3639
void jsec2time(const double jsec, int *year, int *mon, int *day, int *hour, int *min, int *sec, double *remain)
Convert seconds to date.
Definition: jurassic.c:4109
tbl_t * read_tbl(const ctl_t *ctl)
Read look-up table data.
Definition: jurassic.c:5104
void copy_atm(const ctl_t *ctl, atm_t *atm_dest, const atm_t *atm_src, const int init)
Copy and initialize atmospheric data.
Definition: jurassic.c:3107
size_t obs2y(const ctl_t *ctl, const obs_t *obs, gsl_vector *y, int *ida, int *ira)
Compose measurement vector.
Definition: jurassic.c:4312
void y2obs(const ctl_t *ctl, const gsl_vector *y, obs_t *obs)
Decompose measurement vector.
Definition: jurassic.c:6126
void hydrostatic(const ctl_t *ctl, atm_t *atm)
Set hydrostatic equilibrium.
Definition: jurassic.c:3676
void read_shape(const char *filename, double *x, double *y, int *n)
Read shape function.
Definition: jurassic.c:5062
double ctmn2(const double nu, const double p, const double t)
Compute nitrogen continuum (absorption coefficient).
Definition: jurassic.c:2976
size_t atm2x(const ctl_t *ctl, const atm_t *atm, gsl_vector *x, int *iqa, int *ipa)
Compose state vector or parameter vector.
Definition: jurassic.c:29
void climatology(const ctl_t *ctl, atm_t *atm)
Interpolate climatological data.
Definition: jurassic.c:123
void geo2cart(const double z, const double lon, const double lat, double *x)
Convert geolocation to Cartesian coordinates.
Definition: jurassic.c:3656
void write_matrix(const char *dirname, const char *filename, const ctl_t *ctl, const gsl_matrix *matrix, const atm_t *atm, const obs_t *obs, const char *rowspace, const char *colspace, const char *sort)
Write matrix.
Definition: jurassic.c:5656
int locate_tbl(const float *xx, const int n, const double x)
Find array index in float array.
Definition: jurassic.c:4290
JURASSIC library declarations.
#define N
Maximum size of state vector.
Definition: jurassic.h:404
#define IDXCLZ
Index for cloud layer height.
Definition: jurassic.h:469
#define LEN
Maximum length of ASCII data lines.
Definition: jurassic.h:394
#define RE
Mean radius of Earth [km].
Definition: jurassic.h:315
#define BRIGHT(rad, nu)
Compute brightness temperature.
Definition: jurassic.h:127
#define P0
Standard pressure [hPa].
Definition: jurassic.h:310
#define KB
Boltzmann constant [kg m^2/(K s^2)].
Definition: jurassic.h:285
#define POW2(x)
Compute x^2.
Definition: jurassic.h:188
#define NFOV
Number of ray paths used for FOV calculations.
Definition: jurassic.h:424
#define FWRITE(ptr, type, size, out)
Write binary data.
Definition: jurassic.h:151
#define DOTP(a, b)
Compute dot product of two vectors.
Definition: jurassic.h:142
#define O2
Oxygen concentration.
Definition: jurassic.h:305
#define UMAX
Maximum column density [molecules/cm^2].
Definition: jurassic.h:350
#define MIN(a, b)
Macro to determine the minimum of two values.
Definition: jurassic.h:161
#define IDXCLDZ
Index for cloud layer depth.
Definition: jurassic.h:472
#define ERRMSG(...)
Print error message and quit program.
Definition: jurassic.h:238
#define RFMNPTS
Maximum number of RFM spectral grid points.
Definition: jurassic.h:449
#define IDXK(iw)
Indices for extinction.
Definition: jurassic.h:466
#define M
Maximum size of measurement vector.
Definition: jurassic.h:399
#define G0
Standard gravity [m/s^2].
Definition: jurassic.h:275
#define ND
Maximum number of radiance channels.
Definition: jurassic.h:364
#define NA
Avogadro's number.
Definition: jurassic.h:295
#define LOGY(x0, y0, x1, y1, x)
Compute logarithmic interpolation in y.
Definition: jurassic.h:175
#define NSHAPE
Maximum number of shape function grid points.
Definition: jurassic.h:419
#define IDXSFT
Index for surface layer temperature.
Definition: jurassic.h:484
#define RI
Ideal gas constant [J/(mol K)].
Definition: jurassic.h:320
#define NORM(a)
Compute norm of a vector.
Definition: jurassic.h:181
#define IDXSFEPS(isf)
Indices for surface layer emissivity.
Definition: jurassic.h:487
#define IDXCLK(icl)
Indices for cloud layer extinction.
Definition: jurassic.h:475
#define LOGX(x0, y0, x1, y1, x)
Compute logarithmic interpolation in x.
Definition: jurassic.h:169
#define TOK(line, tok, format, var)
Read string tokens.
Definition: jurassic.h:206
#define WARN(...)
Print warning message.
Definition: jurassic.h:232
#define TBLNU
Maximum number of column densities in emissivity tables.
Definition: jurassic.h:439
#define IDXP
Index for pressure.
Definition: jurassic.h:457
#define ALLOC(ptr, type, n)
Allocate memory.
Definition: jurassic.h:122
#define DEG2RAD(deg)
Convert degrees to radians.
Definition: jurassic.h:131
#define TSUN
Effective temperature of the sun [K].
Definition: jurassic.h:340
#define IDXSFP
Index for surface layer pressure.
Definition: jurassic.h:481
#define RAD2DEG(rad)
Convert radians to degrees.
Definition: jurassic.h:194
#define TBLNT
Maximum number of temperatures in emissivity tables.
Definition: jurassic.h:434
#define NP
Maximum number of atmospheric data points.
Definition: jurassic.h:374
#define POW3(x)
Compute x^3.
Definition: jurassic.h:191
#define PLANCK(T, nu)
Compute Planck function.
Definition: jurassic.h:184
#define NG
Maximum number of emitters.
Definition: jurassic.h:369
#define EPSMAX
Maximum emissivity.
Definition: jurassic.h:270
#define LOG(level,...)
Print log message.
Definition: jurassic.h:222
#define TBLNS
Maximum number of source function temperature levels.
Definition: jurassic.h:444
#define N2
Nitrogen concentration.
Definition: jurassic.h:300
#define REFRAC(p, T)
Compute refractivity (return value is n - 1).
Definition: jurassic.h:198
#define TBLNP
Maximum number of pressure levels in emissivity tables.
Definition: jurassic.h:429
#define NSF
Maximum number of surface layer spectral grid points.
Definition: jurassic.h:384
#define NCL
Maximum number of cloud layer spectral grid points.
Definition: jurassic.h:359
#define FREAD(ptr, type, size, out)
Read binary data.
Definition: jurassic.h:145
#define LIN(x0, y0, x1, y1, x)
Compute linear interpolation.
Definition: jurassic.h:165
#define NLOS
Maximum number of LOS points.
Definition: jurassic.h:414
#define NR
Maximum number of ray paths.
Definition: jurassic.h:379
#define IDXQ(ig)
Indices for volume mixing ratios.
Definition: jurassic.h:463
#define TMAX
Maximum temperature for source function [K].
Definition: jurassic.h:335
#define TMIN
Minimum temperature for source function [K].
Definition: jurassic.h:330
#define NW
Maximum number of spectral windows.
Definition: jurassic.h:389
#define MAX(a, b)
Macro to determine the maximum of two values.
Definition: jurassic.h:157
#define IDXT
Index for temperature.
Definition: jurassic.h:460
#define IDXSFZ
Index for surface layer height.
Definition: jurassic.h:478
Atmospheric data.
Definition: jurassic.h:494
double time[NP]
Time (seconds since 2000-01-01T00:00Z).
Definition: jurassic.h:500
double sfeps[NSF]
Surface emissivity.
Definition: jurassic.h:542
double k[NW][NP]
Extinction [km^-1].
Definition: jurassic.h:521
double sfz
Surface height [km].
Definition: jurassic.h:533
double lat[NP]
Latitude [deg].
Definition: jurassic.h:509
double lon[NP]
Longitude [deg].
Definition: jurassic.h:506
double t[NP]
Temperature [K].
Definition: jurassic.h:515
double sfp
Surface pressure [hPa].
Definition: jurassic.h:536
double clz
Cloud layer height [km].
Definition: jurassic.h:524
int np
Number of data points.
Definition: jurassic.h:497
double cldz
Cloud layer depth [km].
Definition: jurassic.h:527
double sft
Surface temperature [K].
Definition: jurassic.h:539
double z[NP]
Altitude [km].
Definition: jurassic.h:503
double clk[NCL]
Cloud layer extinction [km^-1].
Definition: jurassic.h:530
double q[NG][NP]
Volume mixing ratio [ppv].
Definition: jurassic.h:518
double p[NP]
Pressure [hPa].
Definition: jurassic.h:512
Forward model control parameters.
Definition: jurassic.h:547
int write_matrix
Write matrix file (0=no, 1=yes).
Definition: jurassic.h:688
int nw
Number of spectral windows.
Definition: jurassic.h:574
double retp_zmin
Minimum altitude for pressure retrieval [km].
Definition: jurassic.h:640
double nu[ND]
Centroid wavenumber of each channel [cm^-1].
Definition: jurassic.h:571
int ig_co2
Emitter index of CO2.
Definition: jurassic.h:556
double retk_zmax[NW]
Maximum altitude for extinction retrieval [km].
Definition: jurassic.h:661
double sfnu[NSF]
Surface layer wavenumber [cm^-1].
Definition: jurassic.h:589
char rfmhit[LEN]
HITRAN file for RFM.
Definition: jurassic.h:697
char tblbase[LEN]
Basename for table files and filter function files.
Definition: jurassic.h:598
char rfmbin[LEN]
Path to RFM binary.
Definition: jurassic.h:694
double hydz
Reference height for hydrostatic pressure profile (-999 to skip) [km].
Definition: jurassic.h:604
int ret_sfz
Retrieve surface layer height (0=no, 1=yes).
Definition: jurassic.h:673
int ctm_co2
Compute CO2 continuum (0=no, 1=yes).
Definition: jurassic.h:607
double rett_zmax
Maximum altitude for temperature retrieval [km].
Definition: jurassic.h:649
int ret_sfeps
Retrieve surface layer emissivity (0=no, 1=yes).
Definition: jurassic.h:682
int ret_sft
Retrieve surface layer temperature (0=no, 1=yes).
Definition: jurassic.h:679
int ret_clz
Retrieve cloud layer height (0=no, 1=yes).
Definition: jurassic.h:664
int ctm_n2
Compute N2 continuum (0=no, 1=yes).
Definition: jurassic.h:613
char fov[LEN]
Field-of-view data file.
Definition: jurassic.h:628
char rfmxsc[NG][LEN]
Emitter cross-section files for RFM.
Definition: jurassic.h:700
int window[ND]
Window index of each channel.
Definition: jurassic.h:577
int ctm_h2o
Compute H2O continuum (0=no, 1=yes).
Definition: jurassic.h:610
int formod
Forward model (0=CGA, 1=EGA, 2=RFM).
Definition: jurassic.h:691
double retq_zmax[NG]
Maximum altitude for volume mixing ratio retrieval [km].
Definition: jurassic.h:655
double retq_zmin[NG]
Minimum altitude for volume mixing ratio retrieval [km].
Definition: jurassic.h:652
int ng
Number of emitters.
Definition: jurassic.h:550
double clnu[NCL]
Cloud layer wavenumber [cm^-1].
Definition: jurassic.h:583
int refrac
Take into account refractivity (0=no, 1=yes).
Definition: jurassic.h:619
int ig_o2
Emitter index of O2.
Definition: jurassic.h:565
double rett_zmin
Minimum altitude for temperature retrieval [km].
Definition: jurassic.h:646
double sfsza
Solar zenith angle at the surface [deg] (-999=auto).
Definition: jurassic.h:595
int nd
Number of radiance channels.
Definition: jurassic.h:568
int fov_n
Field-of-view number of data points.
Definition: jurassic.h:637
int sftype
Surface treatment (0=none, 1=emissions, 2=downward, 3=solar).
Definition: jurassic.h:592
int ret_sfp
Retrieve surface layer pressure (0=no, 1=yes).
Definition: jurassic.h:676
double retk_zmin[NW]
Minimum altitude for extinction retrieval [km].
Definition: jurassic.h:658
int ncl
Number of cloud layer spectral grid points.
Definition: jurassic.h:580
int ig_n2
Emitter index of N2.
Definition: jurassic.h:562
double fov_dz[NSHAPE]
Field-of-view vertical distance [km].
Definition: jurassic.h:631
int ctm_o2
Compute O2 continuum (0=no, 1=yes).
Definition: jurassic.h:616
int ret_clk
Retrieve cloud layer extinction (0=no, 1=yes).
Definition: jurassic.h:670
char emitter[NG][LEN]
Name of each emitter.
Definition: jurassic.h:553
int nsf
Number of surface layer spectral grid points.
Definition: jurassic.h:586
double rayds
Maximum step length for raytracing [km].
Definition: jurassic.h:622
int ret_cldz
Retrieve cloud layer depth (0=no, 1=yes).
Definition: jurassic.h:667
int ig_h2o
Emitter index of H2O.
Definition: jurassic.h:559
int tblfmt
Look-up table file format (1=ASCII, 2=binary).
Definition: jurassic.h:601
double raydz
Vertical step length for raytracing [km].
Definition: jurassic.h:625
int write_bbt
Use brightness temperature instead of radiance (0=no, 1=yes).
Definition: jurassic.h:685
double fov_w[NSHAPE]
Field-of-view weighting factor.
Definition: jurassic.h:634
double retp_zmax
Maximum altitude for pressure retrieval [km].
Definition: jurassic.h:643
Line-of-sight data.
Definition: jurassic.h:705
double z[NLOS]
Altitude [km].
Definition: jurassic.h:711
double eps[NLOS][ND]
Segment emissivity.
Definition: jurassic.h:753
double cgu[NLOS][NG]
Curtis-Godson column density [molecules/cm^2].
Definition: jurassic.h:750
double q[NLOS][NG]
Volume mixing ratio [ppv].
Definition: jurassic.h:726
double sft
Surface temperature [K].
Definition: jurassic.h:732
double cgt[NLOS][NG]
Curtis-Godson temperature [K].
Definition: jurassic.h:747
double lon[NLOS]
Longitude [deg].
Definition: jurassic.h:714
double ds[NLOS]
Segment length [km].
Definition: jurassic.h:738
int np
Number of LOS points.
Definition: jurassic.h:708
double u[NLOS][NG]
Column density [molecules/cm^2].
Definition: jurassic.h:741
double lat[NLOS]
Latitude [deg].
Definition: jurassic.h:717
double src[NLOS][ND]
Segment source function [W/(m^2 sr cm^-1)].
Definition: jurassic.h:756
double k[NLOS][ND]
Extinction [km^-1].
Definition: jurassic.h:729
double sfeps[ND]
Surface emissivity.
Definition: jurassic.h:735
double cgp[NLOS][NG]
Curtis-Godson pressure [hPa].
Definition: jurassic.h:744
double t[NLOS]
Temperature [K].
Definition: jurassic.h:723
double p[NLOS]
Pressure [hPa].
Definition: jurassic.h:720
Observation geometry and radiance data.
Definition: jurassic.h:761
double tau[ND][NR]
Transmittance of ray path.
Definition: jurassic.h:797
double rad[ND][NR]
Radiance [W/(m^2 sr cm^-1)].
Definition: jurassic.h:800
double tplon[NR]
Tangent point longitude [deg].
Definition: jurassic.h:791
double vpz[NR]
View point altitude [km].
Definition: jurassic.h:779
double vplat[NR]
View point latitude [deg].
Definition: jurassic.h:785
double obslon[NR]
Observer longitude [deg].
Definition: jurassic.h:773
double obslat[NR]
Observer latitude [deg].
Definition: jurassic.h:776
double obsz[NR]
Observer altitude [km].
Definition: jurassic.h:770
double tplat[NR]
Tangent point latitude [deg].
Definition: jurassic.h:794
double vplon[NR]
View point longitude [deg].
Definition: jurassic.h:782
double time[NR]
Time (seconds since 2000-01-01T00:00Z).
Definition: jurassic.h:767
double tpz[NR]
Tangent point altitude [km].
Definition: jurassic.h:788
int nr
Number of ray paths.
Definition: jurassic.h:764
Emissivity look-up tables.
Definition: jurassic.h:805
double sr[TBLNS][ND]
Source function radiance [W/(m^2 sr cm^-1)].
Definition: jurassic.h:832
double p[ND][NG][TBLNP]
Pressure [hPa].
Definition: jurassic.h:817
int nu[ND][NG][TBLNP][TBLNT]
Number of column densities.
Definition: jurassic.h:814
int nt[ND][NG][TBLNP]
Number of temperatures.
Definition: jurassic.h:811
float eps[ND][NG][TBLNP][TBLNT][TBLNU]
Emissivity.
Definition: jurassic.h:826
float u[ND][NG][TBLNP][TBLNT][TBLNU]
Column density [molecules/cm^2].
Definition: jurassic.h:823
double t[ND][NG][TBLNP][TBLNT]
Temperature [K].
Definition: jurassic.h:820
double st[TBLNS]
Source function temperature [K].
Definition: jurassic.h:829
int np[ND][NG]
Number of pressure levels.
Definition: jurassic.h:808