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 eneral Public License
15 along with JURASSIC. If not, see <http://www.gnu.org/licenses/>.
16
17 Copyright (C) 2003-2021 Forschungszentrum Juelich GmbH
18*/
19
25#include "jurassic.h"
26
27/*****************************************************************************/
28
29size_t atm2x(
30 ctl_t * ctl,
31 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 double value,
89 int value_iqa,
90 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/*****************************************************************************/
108
110 double rad,
111 double nu) {
112
113 return C2 * nu / gsl_log1p(C1 * POW3(nu) / rad);
114}
115
116
117/*****************************************************************************/
118
120 double *x,
121 double *z,
122 double *lon,
123 double *lat) {
124
125 double radius = NORM(x);
126
127 *lat = asin(x[2] / radius) * 180 / M_PI;
128 *lon = atan2(x[1], x[0]) * 180 / M_PI;
129 *z = radius - RE;
130}
131
132/*****************************************************************************/
133
135 ctl_t * ctl,
136 atm_t * atm) {
137
138 static double z[121] = {
139 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
140 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
141 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
142 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
143 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
144 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
145 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120
146 };
147
148 static double pre[121] = {
149 1017, 901.083, 796.45, 702.227, 617.614, 541.644, 473.437, 412.288,
150 357.603, 308.96, 265.994, 228.348, 195.619, 167.351, 143.039, 122.198,
151 104.369, 89.141, 76.1528, 65.0804, 55.641, 47.591, 40.7233, 34.8637,
152 29.8633, 25.5956, 21.9534, 18.8445, 16.1909, 13.9258, 11.9913,
153 10.34, 8.92988, 7.72454, 6.6924, 5.80701, 5.04654, 4.39238, 3.82902,
154 3.34337, 2.92413, 2.56128, 2.2464, 1.97258, 1.73384, 1.52519, 1.34242,
155 1.18197, 1.04086, 0.916546, 0.806832, 0.709875, 0.624101, 0.548176,
156 0.480974, 0.421507, 0.368904, 0.322408, 0.281386, 0.245249, 0.213465,
157 0.185549, 0.161072, 0.139644, 0.120913, 0.104568, 0.0903249, 0.0779269,
158 0.0671493, 0.0577962, 0.0496902, 0.0426736, 0.0366093, 0.0313743,
159 0.0268598, 0.0229699, 0.0196206, 0.0167399, 0.0142646, 0.0121397,
160 0.0103181, 0.00875775, 0.00742226, 0.00628076, 0.00530519, 0.00447183,
161 0.00376124, 0.00315632, 0.00264248, 0.00220738, 0.00184003, 0.00153095,
162 0.00127204, 0.00105608, 0.000876652, 0.00072798, 0.00060492,
163 0.000503201, 0.000419226, 0.000349896, 0.000292659, 0.000245421,
164 0.000206394, 0.000174125, 0.000147441, 0.000125333, 0.000106985,
165 9.173e-05, 7.90172e-05, 6.84172e-05, 5.95574e-05, 5.21183e-05,
166 4.58348e-05, 4.05127e-05, 3.59987e-05, 3.21583e-05, 2.88718e-05,
167 2.60322e-05, 2.35687e-05, 2.14263e-05, 1.95489e-05
168 };
169
170 static double tem[121] = {
171 285.14, 279.34, 273.91, 268.3, 263.24, 256.55, 250.2, 242.82, 236.17,
172 229.87, 225.04, 221.19, 218.85, 217.19, 216.2, 215.68, 215.42, 215.55,
173 215.92, 216.4, 216.93, 217.45, 218, 218.68, 219.39, 220.25, 221.3,
174 222.41, 223.88, 225.42, 227.2, 229.52, 231.89, 234.51, 236.85, 239.42,
175 241.94, 244.57, 247.36, 250.32, 253.34, 255.82, 258.27, 260.39,
176 262.03, 263.45, 264.2, 264.78, 264.67, 264.38, 263.24, 262.03, 260.02,
177 258.09, 255.63, 253.28, 250.43, 247.81, 245.26, 242.77, 240.38,
178 237.94, 235.79, 233.53, 231.5, 229.53, 227.6, 225.62, 223.77, 222.06,
179 220.33, 218.69, 217.18, 215.64, 214.13, 212.52, 210.86, 209.25,
180 207.49, 205.81, 204.11, 202.22, 200.32, 198.39, 195.92, 193.46,
181 190.94, 188.31, 185.82, 183.57, 181.43, 179.74, 178.64, 178.1, 178.25,
182 178.7, 179.41, 180.67, 182.31, 184.18, 186.6, 189.53, 192.66, 196.54,
183 201.13, 205.93, 211.73, 217.86, 225, 233.53, 242.57, 252.14, 261.48,
184 272.97, 285.26, 299.12, 312.2, 324.17, 338.34, 352.56, 365.28
185 };
186
187 static double c2h2[121] = {
188 1.352e-09, 2.83e-10, 1.269e-10, 6.926e-11, 4.346e-11, 2.909e-11,
189 2.014e-11, 1.363e-11, 8.71e-12, 5.237e-12, 2.718e-12, 1.375e-12,
190 5.786e-13, 2.16e-13, 7.317e-14, 2.551e-14, 1.055e-14, 4.758e-15,
191 2.056e-15, 7.703e-16, 2.82e-16, 1.035e-16, 4.382e-17, 1.946e-17,
192 9.638e-18, 5.2e-18, 2.811e-18, 1.494e-18, 7.925e-19, 4.213e-19,
193 1.998e-19, 8.78e-20, 3.877e-20, 1.728e-20, 7.743e-21, 3.536e-21,
194 1.623e-21, 7.508e-22, 3.508e-22, 1.65e-22, 7.837e-23, 3.733e-23,
195 1.808e-23, 8.77e-24, 4.285e-24, 2.095e-24, 1.032e-24, 5.082e-25,
196 2.506e-25, 1.236e-25, 6.088e-26, 2.996e-26, 1.465e-26, 0, 0, 0,
197 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
198 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
199 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
200 };
201
202 static double c2h6[121] = {
203 2.667e-09, 2.02e-09, 1.658e-09, 1.404e-09, 1.234e-09, 1.109e-09,
204 1.012e-09, 9.262e-10, 8.472e-10, 7.71e-10, 6.932e-10, 6.216e-10,
205 5.503e-10, 4.87e-10, 4.342e-10, 3.861e-10, 3.347e-10, 2.772e-10,
206 2.209e-10, 1.672e-10, 1.197e-10, 8.536e-11, 5.783e-11, 3.846e-11,
207 2.495e-11, 1.592e-11, 1.017e-11, 6.327e-12, 3.895e-12, 2.403e-12,
208 1.416e-12, 8.101e-13, 4.649e-13, 2.686e-13, 1.557e-13, 9.14e-14,
209 5.386e-14, 3.19e-14, 1.903e-14, 1.14e-14, 6.875e-15, 4.154e-15,
210 2.538e-15, 1.553e-15, 9.548e-16, 5.872e-16, 3.63e-16, 2.244e-16,
211 1.388e-16, 8.587e-17, 5.308e-17, 3.279e-17, 2.017e-17, 1.238e-17,
212 7.542e-18, 4.585e-18, 2.776e-18, 1.671e-18, 9.985e-19, 5.937e-19,
213 3.518e-19, 2.07e-19, 1.215e-19, 7.06e-20, 4.097e-20, 2.37e-20,
214 1.363e-20, 7.802e-21, 4.441e-21, 2.523e-21, 1.424e-21, 8.015e-22,
215 4.497e-22, 2.505e-22, 1.391e-22, 7.691e-23, 4.238e-23, 2.331e-23,
216 1.274e-23, 6.929e-24, 3.752e-24, 2.02e-24, 1.083e-24, 5.774e-25,
217 3.041e-25, 1.593e-25, 8.308e-26, 4.299e-26, 2.195e-26, 1.112e-26,
218 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
219 0, 0, 0, 0, 0, 0, 0, 0, 0
220 };
221
222 static double ccl4[121] = {
223 1.075e-10, 1.075e-10, 1.075e-10, 1.075e-10, 1.075e-10, 1.075e-10,
224 1.075e-10, 1.075e-10, 1.075e-10, 1.06e-10, 1.024e-10, 9.69e-11,
225 8.93e-11, 8.078e-11, 7.213e-11, 6.307e-11, 5.383e-11, 4.49e-11,
226 3.609e-11, 2.705e-11, 1.935e-11, 1.385e-11, 8.35e-12, 5.485e-12,
227 3.853e-12, 2.22e-12, 5.875e-13, 3.445e-13, 1.015e-13, 6.075e-14,
228 4.383e-14, 2.692e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
229 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
230 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
231 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
232 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
233 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
234 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
235 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
236 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
237 1e-14, 1e-14, 1e-14
238 };
239
240 static double ch4[121] = {
241 1.864e-06, 1.835e-06, 1.819e-06, 1.805e-06, 1.796e-06, 1.788e-06,
242 1.782e-06, 1.776e-06, 1.769e-06, 1.761e-06, 1.749e-06, 1.734e-06,
243 1.716e-06, 1.692e-06, 1.654e-06, 1.61e-06, 1.567e-06, 1.502e-06,
244 1.433e-06, 1.371e-06, 1.323e-06, 1.277e-06, 1.232e-06, 1.188e-06,
245 1.147e-06, 1.108e-06, 1.07e-06, 1.027e-06, 9.854e-07, 9.416e-07,
246 8.933e-07, 8.478e-07, 7.988e-07, 7.515e-07, 7.07e-07, 6.64e-07,
247 6.239e-07, 5.864e-07, 5.512e-07, 5.184e-07, 4.87e-07, 4.571e-07,
248 4.296e-07, 4.04e-07, 3.802e-07, 3.578e-07, 3.383e-07, 3.203e-07,
249 3.032e-07, 2.889e-07, 2.76e-07, 2.635e-07, 2.519e-07, 2.409e-07,
250 2.302e-07, 2.219e-07, 2.144e-07, 2.071e-07, 1.999e-07, 1.93e-07,
251 1.862e-07, 1.795e-07, 1.731e-07, 1.668e-07, 1.607e-07, 1.548e-07,
252 1.49e-07, 1.434e-07, 1.38e-07, 1.328e-07, 1.277e-07, 1.227e-07,
253 1.18e-07, 1.134e-07, 1.089e-07, 1.046e-07, 1.004e-07, 9.635e-08,
254 9.245e-08, 8.867e-08, 8.502e-08, 8.15e-08, 7.809e-08, 7.48e-08,
255 7.159e-08, 6.849e-08, 6.55e-08, 6.262e-08, 5.98e-08, 5.708e-08,
256 5.448e-08, 5.194e-08, 4.951e-08, 4.72e-08, 4.5e-08, 4.291e-08,
257 4.093e-08, 3.905e-08, 3.729e-08, 3.563e-08, 3.408e-08, 3.265e-08,
258 3.128e-08, 2.996e-08, 2.87e-08, 2.76e-08, 2.657e-08, 2.558e-08,
259 2.467e-08, 2.385e-08, 2.307e-08, 2.234e-08, 2.168e-08, 2.108e-08,
260 2.05e-08, 1.998e-08, 1.947e-08, 1.902e-08, 1.86e-08, 1.819e-08,
261 1.782e-08
262 };
263
264 static double clo[121] = {
265 7.419e-15, 1.061e-14, 1.518e-14, 2.195e-14, 3.175e-14, 4.666e-14,
266 6.872e-14, 1.03e-13, 1.553e-13, 2.375e-13, 3.664e-13, 5.684e-13,
267 8.915e-13, 1.402e-12, 2.269e-12, 4.125e-12, 7.501e-12, 1.257e-11,
268 2.048e-11, 3.338e-11, 5.44e-11, 8.846e-11, 1.008e-10, 1.082e-10,
269 1.157e-10, 1.232e-10, 1.312e-10, 1.539e-10, 1.822e-10, 2.118e-10,
270 2.387e-10, 2.687e-10, 2.875e-10, 3.031e-10, 3.23e-10, 3.648e-10,
271 4.117e-10, 4.477e-10, 4.633e-10, 4.794e-10, 4.95e-10, 5.104e-10,
272 5.259e-10, 5.062e-10, 4.742e-10, 4.443e-10, 4.051e-10, 3.659e-10,
273 3.305e-10, 2.911e-10, 2.54e-10, 2.215e-10, 1.927e-10, 1.675e-10,
274 1.452e-10, 1.259e-10, 1.09e-10, 9.416e-11, 8.119e-11, 6.991e-11,
275 6.015e-11, 5.163e-11, 4.43e-11, 3.789e-11, 3.24e-11, 2.769e-11,
276 2.361e-11, 2.011e-11, 1.71e-11, 1.453e-11, 1.233e-11, 1.045e-11,
277 8.851e-12, 7.48e-12, 6.316e-12, 5.326e-12, 4.487e-12, 3.778e-12,
278 3.176e-12, 2.665e-12, 2.234e-12, 1.87e-12, 1.563e-12, 1.304e-12,
279 1.085e-12, 9.007e-13, 7.468e-13, 6.179e-13, 5.092e-13, 4.188e-13,
280 3.442e-13, 2.816e-13, 2.304e-13, 1.885e-13, 1.542e-13, 1.263e-13,
281 1.035e-13, 8.5e-14, 7.004e-14, 5.783e-14, 4.795e-14, 4.007e-14,
282 3.345e-14, 2.792e-14, 2.33e-14, 1.978e-14, 1.686e-14, 1.438e-14,
283 1.234e-14, 1.07e-14, 9.312e-15, 8.131e-15, 7.164e-15, 6.367e-15,
284 5.67e-15, 5.088e-15, 4.565e-15, 4.138e-15, 3.769e-15, 3.432e-15,
285 3.148e-15
286 };
287
288 static double clono2[121] = {
289 1.011e-13, 1.515e-13, 2.272e-13, 3.446e-13, 5.231e-13, 8.085e-13,
290 1.253e-12, 1.979e-12, 3.149e-12, 5.092e-12, 8.312e-12, 1.366e-11,
291 2.272e-11, 3.791e-11, 6.209e-11, 9.101e-11, 1.334e-10, 1.951e-10,
292 2.853e-10, 3.94e-10, 4.771e-10, 5.771e-10, 6.675e-10, 7.665e-10,
293 8.504e-10, 8.924e-10, 9.363e-10, 8.923e-10, 8.411e-10, 7.646e-10,
294 6.525e-10, 5.576e-10, 4.398e-10, 3.403e-10, 2.612e-10, 1.915e-10,
295 1.407e-10, 1.028e-10, 7.455e-11, 5.42e-11, 3.708e-11, 2.438e-11,
296 1.618e-11, 1.075e-11, 7.17e-12, 4.784e-12, 3.205e-12, 2.147e-12,
297 1.44e-12, 9.654e-13, 6.469e-13, 4.332e-13, 2.891e-13, 1.926e-13,
298 1.274e-13, 8.422e-14, 5.547e-14, 3.636e-14, 2.368e-14, 1.536e-14,
299 9.937e-15, 6.39e-15, 4.101e-15, 2.61e-15, 1.659e-15, 1.052e-15,
300 6.638e-16, 4.172e-16, 2.61e-16, 1.63e-16, 1.013e-16, 6.275e-17,
301 3.879e-17, 2.383e-17, 1.461e-17, 8.918e-18, 5.43e-18, 3.301e-18,
302 1.997e-18, 1.203e-18, 7.216e-19, 4.311e-19, 2.564e-19, 1.519e-19,
303 8.911e-20, 5.203e-20, 3.026e-20, 1.748e-20, 9.99e-21, 5.673e-21,
304 3.215e-21, 1.799e-21, 1.006e-21, 5.628e-22, 3.146e-22, 1.766e-22,
305 9.94e-23, 5.614e-23, 3.206e-23, 1.841e-23, 1.071e-23, 6.366e-24,
306 3.776e-24, 2.238e-24, 1.326e-24, 8.253e-25, 5.201e-25, 3.279e-25,
307 2.108e-25, 1.395e-25, 9.326e-26, 6.299e-26, 4.365e-26, 3.104e-26,
308 2.219e-26, 1.621e-26, 1.185e-26, 8.92e-27, 6.804e-27, 5.191e-27,
309 4.041e-27
310 };
311
312 static double co[121] = {
313 1.907e-07, 1.553e-07, 1.362e-07, 1.216e-07, 1.114e-07, 1.036e-07,
314 9.737e-08, 9.152e-08, 8.559e-08, 7.966e-08, 7.277e-08, 6.615e-08,
315 5.884e-08, 5.22e-08, 4.699e-08, 4.284e-08, 3.776e-08, 3.274e-08,
316 2.845e-08, 2.479e-08, 2.246e-08, 2.054e-08, 1.991e-08, 1.951e-08,
317 1.94e-08, 2.009e-08, 2.1e-08, 2.201e-08, 2.322e-08, 2.45e-08,
318 2.602e-08, 2.73e-08, 2.867e-08, 2.998e-08, 3.135e-08, 3.255e-08,
319 3.352e-08, 3.426e-08, 3.484e-08, 3.53e-08, 3.593e-08, 3.671e-08,
320 3.759e-08, 3.945e-08, 4.192e-08, 4.49e-08, 5.03e-08, 5.703e-08,
321 6.538e-08, 7.878e-08, 9.644e-08, 1.196e-07, 1.498e-07, 1.904e-07,
322 2.422e-07, 3.055e-07, 3.804e-07, 4.747e-07, 5.899e-07, 7.272e-07,
323 8.91e-07, 1.071e-06, 1.296e-06, 1.546e-06, 1.823e-06, 2.135e-06,
324 2.44e-06, 2.714e-06, 2.967e-06, 3.189e-06, 3.391e-06, 3.58e-06,
325 3.773e-06, 4.022e-06, 4.346e-06, 4.749e-06, 5.199e-06, 5.668e-06,
326 6.157e-06, 6.688e-06, 7.254e-06, 7.867e-06, 8.539e-06, 9.26e-06,
327 1.009e-05, 1.119e-05, 1.228e-05, 1.365e-05, 1.506e-05, 1.641e-05,
328 1.784e-05, 1.952e-05, 2.132e-05, 2.323e-05, 2.531e-05, 2.754e-05,
329 3.047e-05, 3.459e-05, 3.922e-05, 4.439e-05, 4.825e-05, 5.077e-05,
330 5.34e-05, 5.618e-05, 5.909e-05, 6.207e-05, 6.519e-05, 6.845e-05,
331 6.819e-05, 6.726e-05, 6.622e-05, 6.512e-05, 6.671e-05, 6.862e-05,
332 7.048e-05, 7.264e-05, 7.3e-05, 7.3e-05, 7.3e-05, 7.3e-05, 7.3e-05
333 };
334
335 static double cof2[121] = {
336 7.5e-14, 1.055e-13, 1.485e-13, 2.111e-13, 3.001e-13, 4.333e-13,
337 6.269e-13, 9.221e-13, 1.364e-12, 2.046e-12, 3.093e-12, 4.703e-12,
338 7.225e-12, 1.113e-11, 1.66e-11, 2.088e-11, 2.626e-11, 3.433e-11,
339 4.549e-11, 5.886e-11, 7.21e-11, 8.824e-11, 1.015e-10, 1.155e-10,
340 1.288e-10, 1.388e-10, 1.497e-10, 1.554e-10, 1.606e-10, 1.639e-10,
341 1.64e-10, 1.64e-10, 1.596e-10, 1.542e-10, 1.482e-10, 1.382e-10,
342 1.289e-10, 1.198e-10, 1.109e-10, 1.026e-10, 9.484e-11, 8.75e-11,
343 8.086e-11, 7.49e-11, 6.948e-11, 6.446e-11, 5.961e-11, 5.505e-11,
344 5.085e-11, 4.586e-11, 4.1e-11, 3.665e-11, 3.235e-11, 2.842e-11,
345 2.491e-11, 2.11e-11, 1.769e-11, 1.479e-11, 1.197e-11, 9.631e-12,
346 7.74e-12, 6.201e-12, 4.963e-12, 3.956e-12, 3.151e-12, 2.507e-12,
347 1.99e-12, 1.576e-12, 1.245e-12, 9.83e-13, 7.742e-13, 6.088e-13,
348 4.782e-13, 3.745e-13, 2.929e-13, 2.286e-13, 1.782e-13, 1.388e-13,
349 1.079e-13, 8.362e-14, 6.471e-14, 4.996e-14, 3.85e-14, 2.96e-14,
350 2.265e-14, 1.729e-14, 1.317e-14, 9.998e-15, 7.549e-15, 5.683e-15,
351 4.273e-15, 3.193e-15, 2.385e-15, 1.782e-15, 1.331e-15, 9.957e-16,
352 7.461e-16, 5.601e-16, 4.228e-16, 3.201e-16, 2.438e-16, 1.878e-16,
353 1.445e-16, 1.111e-16, 8.544e-17, 6.734e-17, 5.341e-17, 4.237e-17,
354 3.394e-17, 2.759e-17, 2.254e-17, 1.851e-17, 1.54e-17, 1.297e-17,
355 1.096e-17, 9.365e-18, 8e-18, 6.938e-18, 6.056e-18, 5.287e-18,
356 4.662e-18
357 };
358
359 static double f11[121] = {
360 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10,
361 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10, 2.635e-10, 2.536e-10,
362 2.44e-10, 2.348e-10, 2.258e-10, 2.153e-10, 2.046e-10, 1.929e-10,
363 1.782e-10, 1.648e-10, 1.463e-10, 1.291e-10, 1.1e-10, 8.874e-11,
364 7.165e-11, 5.201e-11, 3.744e-11, 2.577e-11, 1.64e-11, 1.048e-11,
365 5.993e-12, 3.345e-12, 1.839e-12, 9.264e-13, 4.688e-13, 2.329e-13,
366 1.129e-13, 5.505e-14, 2.825e-14, 1.492e-14, 7.997e-15, 5.384e-15,
367 3.988e-15, 2.955e-15, 2.196e-15, 1.632e-15, 1.214e-15, 9.025e-16,
368 6.708e-16, 4.984e-16, 3.693e-16, 2.733e-16, 2.013e-16, 1.481e-16,
369 1.087e-16, 7.945e-17, 5.782e-17, 4.195e-17, 3.038e-17, 2.19e-17,
370 1.577e-17, 1.128e-17, 8.063e-18, 5.753e-18, 4.09e-18, 2.899e-18,
371 2.048e-18, 1.444e-18, 1.015e-18, 7.12e-19, 4.985e-19, 3.474e-19,
372 2.417e-19, 1.677e-19, 1.161e-19, 8.029e-20, 5.533e-20, 3.799e-20,
373 2.602e-20, 1.776e-20, 1.209e-20, 8.202e-21, 5.522e-21, 3.707e-21,
374 2.48e-21, 1.652e-21, 1.091e-21, 7.174e-22, 4.709e-22, 3.063e-22,
375 1.991e-22, 1.294e-22, 8.412e-23, 5.483e-23, 3.581e-23, 2.345e-23,
376 1.548e-23, 1.027e-23, 6.869e-24, 4.673e-24, 3.173e-24, 2.153e-24,
377 1.461e-24, 1.028e-24, 7.302e-25, 5.188e-25, 3.739e-25, 2.753e-25,
378 2.043e-25, 1.528e-25, 1.164e-25, 9.041e-26, 7.051e-26, 5.587e-26,
379 4.428e-26, 3.588e-26, 2.936e-26, 2.402e-26, 1.995e-26
380 };
381
382 static double f12[121] = {
383 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10,
384 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10, 5.429e-10, 5.291e-10,
385 5.155e-10, 5.022e-10, 4.893e-10, 4.772e-10, 4.655e-10, 4.497e-10,
386 4.249e-10, 4.015e-10, 3.632e-10, 3.261e-10, 2.858e-10, 2.408e-10,
387 2.03e-10, 1.685e-10, 1.4e-10, 1.163e-10, 9.65e-11, 8.02e-11, 6.705e-11,
388 5.624e-11, 4.764e-11, 4.249e-11, 3.792e-11, 3.315e-11, 2.819e-11,
389 2.4e-11, 1.999e-11, 1.64e-11, 1.352e-11, 1.14e-11, 9.714e-12,
390 8.28e-12, 7.176e-12, 6.251e-12, 5.446e-12, 4.72e-12, 4.081e-12,
391 3.528e-12, 3.08e-12, 2.699e-12, 2.359e-12, 2.111e-12, 1.901e-12,
392 1.709e-12, 1.534e-12, 1.376e-12, 1.233e-12, 1.103e-12, 9.869e-13,
393 8.808e-13, 7.859e-13, 7.008e-13, 6.241e-13, 5.553e-13, 4.935e-13,
394 4.383e-13, 3.889e-13, 3.447e-13, 3.054e-13, 2.702e-13, 2.389e-13,
395 2.11e-13, 1.862e-13, 1.643e-13, 1.448e-13, 1.274e-13, 1.121e-13,
396 9.844e-14, 8.638e-14, 7.572e-14, 6.62e-14, 5.782e-14, 5.045e-14,
397 4.394e-14, 3.817e-14, 3.311e-14, 2.87e-14, 2.48e-14, 2.142e-14,
398 1.851e-14, 1.599e-14, 1.383e-14, 1.196e-14, 1.036e-14, 9e-15,
399 7.828e-15, 6.829e-15, 5.992e-15, 5.254e-15, 4.606e-15, 4.037e-15,
400 3.583e-15, 3.19e-15, 2.841e-15, 2.542e-15, 2.291e-15, 2.07e-15,
401 1.875e-15, 1.71e-15, 1.57e-15, 1.442e-15, 1.333e-15, 1.232e-15,
402 1.147e-15, 1.071e-15, 1.001e-15, 9.396e-16
403 };
404
405 static double f14[121] = {
406 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 9e-11,
407 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 8.91e-11, 8.73e-11, 8.46e-11,
408 8.19e-11, 7.92e-11, 7.74e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
409 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
410 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
411 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
412 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
413 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
414 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
415 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
416 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
417 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
418 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
419 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
420 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
421 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
422 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11
423 };
424
425 static double f22[121] = {
426 1.4e-10, 1.4e-10, 1.4e-10, 1.4e-10, 1.4e-10, 1.4e-10, 1.4e-10,
427 1.4e-10, 1.4e-10, 1.4e-10, 1.372e-10, 1.317e-10, 1.235e-10, 1.153e-10,
428 1.075e-10, 1.002e-10, 9.332e-11, 8.738e-11, 8.194e-11, 7.7e-11,
429 7.165e-11, 6.753e-11, 6.341e-11, 5.971e-11, 5.6e-11, 5.229e-11,
430 4.859e-11, 4.488e-11, 4.118e-11, 3.83e-11, 3.568e-11, 3.308e-11,
431 3.047e-11, 2.82e-11, 2.594e-11, 2.409e-11, 2.237e-11, 2.065e-11,
432 1.894e-11, 1.771e-11, 1.647e-11, 1.532e-11, 1.416e-11, 1.332e-11,
433 1.246e-11, 1.161e-11, 1.087e-11, 1.017e-11, 9.471e-12, 8.853e-12,
434 8.235e-12, 7.741e-12, 7.247e-12, 6.836e-12, 6.506e-12, 6.176e-12,
435 5.913e-12, 5.65e-12, 5.419e-12, 5.221e-12, 5.024e-12, 4.859e-12,
436 4.694e-12, 4.546e-12, 4.414e-12, 4.282e-12, 4.15e-12, 4.019e-12,
437 3.903e-12, 3.805e-12, 3.706e-12, 3.607e-12, 3.508e-12, 3.41e-12,
438 3.31e-12, 3.212e-12, 3.129e-12, 3.047e-12, 2.964e-12, 2.882e-12,
439 2.8e-12, 2.734e-12, 2.668e-12, 2.602e-12, 2.537e-12, 2.471e-12,
440 2.421e-12, 2.372e-12, 2.322e-12, 2.273e-12, 2.224e-12, 2.182e-12,
441 2.141e-12, 2.1e-12, 2.059e-12, 2.018e-12, 1.977e-12, 1.935e-12,
442 1.894e-12, 1.853e-12, 1.812e-12, 1.77e-12, 1.73e-12, 1.688e-12,
443 1.647e-12, 1.606e-12, 1.565e-12, 1.524e-12, 1.483e-12, 1.441e-12,
444 1.4e-12, 1.359e-12, 1.317e-12, 1.276e-12, 1.235e-12, 1.194e-12,
445 1.153e-12, 1.112e-12, 1.071e-12, 1.029e-12, 9.883e-13
446 };
447
448 static double h2o[121] = {
449 0.01166, 0.008269, 0.005742, 0.003845, 0.00277, 0.001897, 0.001272,
450 0.000827, 0.000539, 0.0003469, 0.0001579, 3.134e-05, 1.341e-05,
451 6.764e-06, 4.498e-06, 3.703e-06, 3.724e-06, 3.899e-06, 4.002e-06,
452 4.122e-06, 4.277e-06, 4.438e-06, 4.558e-06, 4.673e-06, 4.763e-06,
453 4.809e-06, 4.856e-06, 4.936e-06, 5.021e-06, 5.114e-06, 5.222e-06,
454 5.331e-06, 5.414e-06, 5.488e-06, 5.563e-06, 5.633e-06, 5.704e-06,
455 5.767e-06, 5.819e-06, 5.872e-06, 5.914e-06, 5.949e-06, 5.984e-06,
456 6.015e-06, 6.044e-06, 6.073e-06, 6.104e-06, 6.136e-06, 6.167e-06,
457 6.189e-06, 6.208e-06, 6.226e-06, 6.212e-06, 6.185e-06, 6.158e-06,
458 6.114e-06, 6.066e-06, 6.018e-06, 5.877e-06, 5.728e-06, 5.582e-06,
459 5.437e-06, 5.296e-06, 5.156e-06, 5.02e-06, 4.886e-06, 4.754e-06,
460 4.625e-06, 4.498e-06, 4.374e-06, 4.242e-06, 4.096e-06, 3.955e-06,
461 3.817e-06, 3.683e-06, 3.491e-06, 3.204e-06, 2.94e-06, 2.696e-06,
462 2.47e-06, 2.252e-06, 2.019e-06, 1.808e-06, 1.618e-06, 1.445e-06,
463 1.285e-06, 1.105e-06, 9.489e-07, 8.121e-07, 6.938e-07, 5.924e-07,
464 5.04e-07, 4.288e-07, 3.648e-07, 3.103e-07, 2.642e-07, 2.252e-07,
465 1.921e-07, 1.643e-07, 1.408e-07, 1.211e-07, 1.048e-07, 9.063e-08,
466 7.835e-08, 6.774e-08, 5.936e-08, 5.221e-08, 4.592e-08, 4.061e-08,
467 3.62e-08, 3.236e-08, 2.902e-08, 2.62e-08, 2.383e-08, 2.171e-08,
468 1.989e-08, 1.823e-08, 1.684e-08, 1.562e-08, 1.449e-08, 1.351e-08
469 };
470
471 static double h2o2[121] = {
472 1.779e-10, 7.938e-10, 8.953e-10, 8.032e-10, 6.564e-10, 5.159e-10,
473 4.003e-10, 3.026e-10, 2.222e-10, 1.58e-10, 1.044e-10, 6.605e-11,
474 3.413e-11, 1.453e-11, 1.062e-11, 1.009e-11, 9.597e-12, 1.175e-11,
475 1.572e-11, 2.091e-11, 2.746e-11, 3.603e-11, 4.791e-11, 6.387e-11,
476 8.239e-11, 1.007e-10, 1.23e-10, 1.363e-10, 1.489e-10, 1.585e-10,
477 1.608e-10, 1.632e-10, 1.576e-10, 1.502e-10, 1.423e-10, 1.302e-10,
478 1.192e-10, 1.085e-10, 9.795e-11, 8.854e-11, 8.057e-11, 7.36e-11,
479 6.736e-11, 6.362e-11, 6.087e-11, 5.825e-11, 5.623e-11, 5.443e-11,
480 5.27e-11, 5.098e-11, 4.931e-11, 4.769e-11, 4.611e-11, 4.458e-11,
481 4.308e-11, 4.102e-11, 3.887e-11, 3.682e-11, 3.521e-11, 3.369e-11,
482 3.224e-11, 3.082e-11, 2.946e-11, 2.814e-11, 2.687e-11, 2.566e-11,
483 2.449e-11, 2.336e-11, 2.227e-11, 2.123e-11, 2.023e-11, 1.927e-11,
484 1.835e-11, 1.746e-11, 1.661e-11, 1.58e-11, 1.502e-11, 1.428e-11,
485 1.357e-11, 1.289e-11, 1.224e-11, 1.161e-11, 1.102e-11, 1.045e-11,
486 9.895e-12, 9.369e-12, 8.866e-12, 8.386e-12, 7.922e-12, 7.479e-12,
487 7.06e-12, 6.656e-12, 6.274e-12, 5.914e-12, 5.575e-12, 5.257e-12,
488 4.959e-12, 4.679e-12, 4.42e-12, 4.178e-12, 3.954e-12, 3.75e-12,
489 3.557e-12, 3.372e-12, 3.198e-12, 3.047e-12, 2.908e-12, 2.775e-12,
490 2.653e-12, 2.544e-12, 2.442e-12, 2.346e-12, 2.26e-12, 2.183e-12,
491 2.11e-12, 2.044e-12, 1.98e-12, 1.924e-12, 1.871e-12, 1.821e-12,
492 1.775e-12
493 };
494
495 static double hcn[121] = {
496 5.5e-10, 5.5e-10, 5.5e-10, 5.5e-10, 5.5e-10, 5.5e-10, 5.5e-10,
497 5.5e-10, 5.5e-10, 5.5e-10, 5.5e-10, 5.498e-10, 5.495e-10, 5.493e-10,
498 5.49e-10, 5.488e-10, 4.717e-10, 3.946e-10, 3.174e-10, 2.4e-10,
499 1.626e-10, 1.619e-10, 1.612e-10, 1.602e-10, 1.593e-10, 1.582e-10,
500 1.572e-10, 1.56e-10, 1.549e-10, 1.539e-10, 1.53e-10, 1.519e-10,
501 1.506e-10, 1.487e-10, 1.467e-10, 1.449e-10, 1.43e-10, 1.413e-10,
502 1.397e-10, 1.382e-10, 1.368e-10, 1.354e-10, 1.337e-10, 1.315e-10,
503 1.292e-10, 1.267e-10, 1.241e-10, 1.215e-10, 1.19e-10, 1.165e-10,
504 1.141e-10, 1.118e-10, 1.096e-10, 1.072e-10, 1.047e-10, 1.021e-10,
505 9.968e-11, 9.739e-11, 9.539e-11, 9.339e-11, 9.135e-11, 8.898e-11,
506 8.664e-11, 8.439e-11, 8.249e-11, 8.075e-11, 7.904e-11, 7.735e-11,
507 7.565e-11, 7.399e-11, 7.245e-11, 7.109e-11, 6.982e-11, 6.863e-11,
508 6.755e-11, 6.657e-11, 6.587e-11, 6.527e-11, 6.476e-11, 6.428e-11,
509 6.382e-11, 6.343e-11, 6.307e-11, 6.272e-11, 6.238e-11, 6.205e-11,
510 6.17e-11, 6.137e-11, 6.102e-11, 6.072e-11, 6.046e-11, 6.03e-11,
511 6.018e-11, 6.01e-11, 6.001e-11, 5.992e-11, 5.984e-11, 5.975e-11,
512 5.967e-11, 5.958e-11, 5.95e-11, 5.941e-11, 5.933e-11, 5.925e-11,
513 5.916e-11, 5.908e-11, 5.899e-11, 5.891e-11, 5.883e-11, 5.874e-11,
514 5.866e-11, 5.858e-11, 5.85e-11, 5.841e-11, 5.833e-11, 5.825e-11,
515 5.817e-11, 5.808e-11, 5.8e-11, 5.792e-11, 5.784e-11
516 };
517
518 static double hno3[121] = {
519 1.809e-10, 7.234e-10, 5.899e-10, 4.342e-10, 3.277e-10, 2.661e-10,
520 2.35e-10, 2.267e-10, 2.389e-10, 2.651e-10, 3.255e-10, 4.099e-10,
521 5.42e-10, 6.978e-10, 8.807e-10, 1.112e-09, 1.405e-09, 2.04e-09,
522 3.111e-09, 4.5e-09, 5.762e-09, 7.37e-09, 7.852e-09, 8.109e-09,
523 8.067e-09, 7.554e-09, 7.076e-09, 6.268e-09, 5.524e-09, 4.749e-09,
524 3.909e-09, 3.223e-09, 2.517e-09, 1.942e-09, 1.493e-09, 1.122e-09,
525 8.449e-10, 6.361e-10, 4.787e-10, 3.611e-10, 2.804e-10, 2.215e-10,
526 1.758e-10, 1.441e-10, 1.197e-10, 9.953e-11, 8.505e-11, 7.334e-11,
527 6.325e-11, 5.625e-11, 5.058e-11, 4.548e-11, 4.122e-11, 3.748e-11,
528 3.402e-11, 3.088e-11, 2.8e-11, 2.536e-11, 2.293e-11, 2.072e-11,
529 1.871e-11, 1.687e-11, 1.52e-11, 1.368e-11, 1.23e-11, 1.105e-11,
530 9.922e-12, 8.898e-12, 7.972e-12, 7.139e-12, 6.385e-12, 5.708e-12,
531 5.099e-12, 4.549e-12, 4.056e-12, 3.613e-12, 3.216e-12, 2.862e-12,
532 2.544e-12, 2.259e-12, 2.004e-12, 1.776e-12, 1.572e-12, 1.391e-12,
533 1.227e-12, 1.082e-12, 9.528e-13, 8.379e-13, 7.349e-13, 6.436e-13,
534 5.634e-13, 4.917e-13, 4.291e-13, 3.745e-13, 3.267e-13, 2.854e-13,
535 2.494e-13, 2.181e-13, 1.913e-13, 1.68e-13, 1.479e-13, 1.31e-13,
536 1.159e-13, 1.025e-13, 9.067e-14, 8.113e-14, 7.281e-14, 6.535e-14,
537 5.892e-14, 5.348e-14, 4.867e-14, 4.439e-14, 4.073e-14, 3.76e-14,
538 3.476e-14, 3.229e-14, 3e-14, 2.807e-14, 2.635e-14, 2.473e-14,
539 2.332e-14
540 };
541
542 static double hno4[121] = {
543 6.118e-12, 3.594e-12, 2.807e-12, 3.04e-12, 4.458e-12, 7.986e-12,
544 1.509e-11, 2.661e-11, 3.738e-11, 4.652e-11, 4.429e-11, 3.992e-11,
545 3.347e-11, 3.005e-11, 3.173e-11, 4.055e-11, 5.812e-11, 8.489e-11,
546 1.19e-10, 1.482e-10, 1.766e-10, 2.103e-10, 2.35e-10, 2.598e-10,
547 2.801e-10, 2.899e-10, 3e-10, 2.817e-10, 2.617e-10, 2.332e-10,
548 1.933e-10, 1.605e-10, 1.232e-10, 9.285e-11, 6.941e-11, 4.951e-11,
549 3.539e-11, 2.402e-11, 1.522e-11, 9.676e-12, 6.056e-12, 3.745e-12,
550 2.34e-12, 1.463e-12, 9.186e-13, 5.769e-13, 3.322e-13, 1.853e-13,
551 1.035e-13, 7.173e-14, 5.382e-14, 4.036e-14, 3.401e-14, 2.997e-14,
552 2.635e-14, 2.316e-14, 2.034e-14, 1.783e-14, 1.56e-14, 1.363e-14,
553 1.19e-14, 1.037e-14, 9.032e-15, 7.846e-15, 6.813e-15, 5.912e-15,
554 5.121e-15, 4.431e-15, 3.829e-15, 3.306e-15, 2.851e-15, 2.456e-15,
555 2.114e-15, 1.816e-15, 1.559e-15, 1.337e-15, 1.146e-15, 9.811e-16,
556 8.389e-16, 7.162e-16, 6.109e-16, 5.203e-16, 4.425e-16, 3.76e-16,
557 3.184e-16, 2.692e-16, 2.274e-16, 1.917e-16, 1.61e-16, 1.35e-16,
558 1.131e-16, 9.437e-17, 7.874e-17, 6.57e-17, 5.481e-17, 4.579e-17,
559 3.828e-17, 3.204e-17, 2.691e-17, 2.264e-17, 1.912e-17, 1.626e-17,
560 1.382e-17, 1.174e-17, 9.972e-18, 8.603e-18, 7.45e-18, 6.453e-18,
561 5.623e-18, 4.944e-18, 4.361e-18, 3.859e-18, 3.443e-18, 3.096e-18,
562 2.788e-18, 2.528e-18, 2.293e-18, 2.099e-18, 1.929e-18, 1.773e-18,
563 1.64e-18
564 };
565
566 static double hocl[121] = {
567 1.056e-12, 1.194e-12, 1.35e-12, 1.531e-12, 1.737e-12, 1.982e-12,
568 2.263e-12, 2.599e-12, 2.991e-12, 3.459e-12, 4.012e-12, 4.662e-12,
569 5.438e-12, 6.35e-12, 7.425e-12, 8.686e-12, 1.016e-11, 1.188e-11,
570 1.389e-11, 1.659e-11, 2.087e-11, 2.621e-11, 3.265e-11, 4.064e-11,
571 4.859e-11, 5.441e-11, 6.09e-11, 6.373e-11, 6.611e-11, 6.94e-11,
572 7.44e-11, 7.97e-11, 8.775e-11, 9.722e-11, 1.064e-10, 1.089e-10,
573 1.114e-10, 1.106e-10, 1.053e-10, 1.004e-10, 9.006e-11, 7.778e-11,
574 6.739e-11, 5.636e-11, 4.655e-11, 3.845e-11, 3.042e-11, 2.368e-11,
575 1.845e-11, 1.442e-11, 1.127e-11, 8.814e-12, 6.544e-12, 4.763e-12,
576 3.449e-12, 2.612e-12, 1.999e-12, 1.526e-12, 1.16e-12, 8.793e-13,
577 6.655e-13, 5.017e-13, 3.778e-13, 2.829e-13, 2.117e-13, 1.582e-13,
578 1.178e-13, 8.755e-14, 6.486e-14, 4.799e-14, 3.54e-14, 2.606e-14,
579 1.916e-14, 1.403e-14, 1.026e-14, 7.48e-15, 5.446e-15, 3.961e-15,
580 2.872e-15, 2.076e-15, 1.498e-15, 1.077e-15, 7.726e-16, 5.528e-16,
581 3.929e-16, 2.785e-16, 1.969e-16, 1.386e-16, 9.69e-17, 6.747e-17,
582 4.692e-17, 3.236e-17, 2.232e-17, 1.539e-17, 1.061e-17, 7.332e-18,
583 5.076e-18, 3.522e-18, 2.461e-18, 1.726e-18, 1.22e-18, 8.75e-19,
584 6.264e-19, 4.482e-19, 3.207e-19, 2.368e-19, 1.762e-19, 1.312e-19,
585 9.891e-20, 7.595e-20, 5.87e-20, 4.567e-20, 3.612e-20, 2.904e-20,
586 2.343e-20, 1.917e-20, 1.568e-20, 1.308e-20, 1.1e-20, 9.25e-21,
587 7.881e-21
588 };
589
590 static double n2o[121] = {
591 3.17e-07, 3.17e-07, 3.17e-07, 3.17e-07, 3.17e-07, 3.17e-07, 3.17e-07,
592 3.17e-07, 3.17e-07, 3.17e-07, 3.124e-07, 3.077e-07, 3.03e-07,
593 2.984e-07, 2.938e-07, 2.892e-07, 2.847e-07, 2.779e-07, 2.705e-07,
594 2.631e-07, 2.557e-07, 2.484e-07, 2.345e-07, 2.201e-07, 2.01e-07,
595 1.754e-07, 1.532e-07, 1.329e-07, 1.154e-07, 1.003e-07, 8.735e-08,
596 7.617e-08, 6.512e-08, 5.547e-08, 4.709e-08, 3.915e-08, 3.259e-08,
597 2.738e-08, 2.327e-08, 1.98e-08, 1.711e-08, 1.493e-08, 1.306e-08,
598 1.165e-08, 1.049e-08, 9.439e-09, 8.375e-09, 7.391e-09, 6.525e-09,
599 5.759e-09, 5.083e-09, 4.485e-09, 3.953e-09, 3.601e-09, 3.27e-09,
600 2.975e-09, 2.757e-09, 2.556e-09, 2.37e-09, 2.195e-09, 2.032e-09,
601 1.912e-09, 1.79e-09, 1.679e-09, 1.572e-09, 1.482e-09, 1.402e-09,
602 1.326e-09, 1.254e-09, 1.187e-09, 1.127e-09, 1.071e-09, 1.02e-09,
603 9.673e-10, 9.193e-10, 8.752e-10, 8.379e-10, 8.017e-10, 7.66e-10,
604 7.319e-10, 7.004e-10, 6.721e-10, 6.459e-10, 6.199e-10, 5.942e-10,
605 5.703e-10, 5.488e-10, 5.283e-10, 5.082e-10, 4.877e-10, 4.696e-10,
606 4.52e-10, 4.355e-10, 4.198e-10, 4.039e-10, 3.888e-10, 3.754e-10,
607 3.624e-10, 3.499e-10, 3.381e-10, 3.267e-10, 3.163e-10, 3.058e-10,
608 2.959e-10, 2.864e-10, 2.77e-10, 2.686e-10, 2.604e-10, 2.534e-10,
609 2.462e-10, 2.386e-10, 2.318e-10, 2.247e-10, 2.189e-10, 2.133e-10,
610 2.071e-10, 2.014e-10, 1.955e-10, 1.908e-10, 1.86e-10, 1.817e-10
611 };
612
613 static double n2o5[121] = {
614 1.231e-11, 3.035e-12, 1.702e-12, 9.877e-13, 8.081e-13, 9.039e-13,
615 1.169e-12, 1.474e-12, 1.651e-12, 1.795e-12, 1.998e-12, 2.543e-12,
616 4.398e-12, 7.698e-12, 1.28e-11, 2.131e-11, 3.548e-11, 5.894e-11,
617 7.645e-11, 1.089e-10, 1.391e-10, 1.886e-10, 2.386e-10, 2.986e-10,
618 3.487e-10, 3.994e-10, 4.5e-10, 4.6e-10, 4.591e-10, 4.1e-10, 3.488e-10,
619 2.846e-10, 2.287e-10, 1.696e-10, 1.011e-10, 6.428e-11, 4.324e-11,
620 2.225e-11, 6.214e-12, 3.608e-12, 8.793e-13, 4.491e-13, 1.04e-13,
621 6.1e-14, 3.436e-14, 6.671e-15, 1.171e-15, 5.848e-16, 1.212e-16,
622 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
623 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
624 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
625 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
626 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
627 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
628 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
629 1e-16, 1e-16
630 };
631
632 static double nh3[121] = {
633 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10,
634 1e-10, 1e-10, 1e-10, 1e-10, 9.444e-11, 8.488e-11, 7.241e-11, 5.785e-11,
635 4.178e-11, 3.018e-11, 2.18e-11, 1.574e-11, 1.137e-11, 8.211e-12,
636 5.973e-12, 4.327e-12, 3.118e-12, 2.234e-12, 1.573e-12, 1.04e-12,
637 6.762e-13, 4.202e-13, 2.406e-13, 1.335e-13, 6.938e-14, 3.105e-14,
638 1.609e-14, 1.033e-14, 6.432e-15, 4.031e-15, 2.555e-15, 1.656e-15,
639 1.115e-15, 7.904e-16, 5.63e-16, 4.048e-16, 2.876e-16, 2.004e-16,
640 1.356e-16, 9.237e-17, 6.235e-17, 4.223e-17, 3.009e-17, 2.328e-17,
641 2.002e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
642 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
643 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
644 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
645 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
646 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
647 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
648 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
649 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
650 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
651 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
652 1.914e-17
653 };
654
655 static double no[121] = {
656 2.586e-10, 4.143e-11, 1.566e-11, 9.591e-12, 8.088e-12, 8.462e-12,
657 1.013e-11, 1.328e-11, 1.855e-11, 2.678e-11, 3.926e-11, 5.464e-11,
658 7.012e-11, 8.912e-11, 1.127e-10, 1.347e-10, 1.498e-10, 1.544e-10,
659 1.602e-10, 1.824e-10, 2.078e-10, 2.366e-10, 2.691e-10, 5.141e-10,
660 8.259e-10, 1.254e-09, 1.849e-09, 2.473e-09, 3.294e-09, 4.16e-09,
661 5.095e-09, 6.11e-09, 6.93e-09, 7.888e-09, 8.903e-09, 9.713e-09,
662 1.052e-08, 1.115e-08, 1.173e-08, 1.21e-08, 1.228e-08, 1.239e-08,
663 1.231e-08, 1.213e-08, 1.192e-08, 1.138e-08, 1.085e-08, 1.008e-08,
664 9.224e-09, 8.389e-09, 7.262e-09, 6.278e-09, 5.335e-09, 4.388e-09,
665 3.589e-09, 2.761e-09, 2.129e-09, 1.633e-09, 1.243e-09, 9.681e-10,
666 8.355e-10, 7.665e-10, 7.442e-10, 8.584e-10, 9.732e-10, 1.063e-09,
667 1.163e-09, 1.286e-09, 1.472e-09, 1.707e-09, 2.032e-09, 2.474e-09,
668 2.977e-09, 3.506e-09, 4.102e-09, 5.013e-09, 6.493e-09, 8.414e-09,
669 1.077e-08, 1.367e-08, 1.777e-08, 2.625e-08, 3.926e-08, 5.545e-08,
670 7.195e-08, 9.464e-08, 1.404e-07, 2.183e-07, 3.329e-07, 4.535e-07,
671 6.158e-07, 8.187e-07, 1.075e-06, 1.422e-06, 1.979e-06, 2.71e-06,
672 3.58e-06, 4.573e-06, 5.951e-06, 7.999e-06, 1.072e-05, 1.372e-05,
673 1.697e-05, 2.112e-05, 2.643e-05, 3.288e-05, 3.994e-05, 4.794e-05,
674 5.606e-05, 6.383e-05, 7.286e-05, 8.156e-05, 8.883e-05, 9.469e-05,
675 9.848e-05, 0.0001023, 0.0001066, 0.0001115, 0.0001145, 0.0001142,
676 0.0001133
677 };
678
679 static double no2[121] = {
680 3.036e-09, 2.945e-10, 9.982e-11, 5.069e-11, 3.485e-11, 2.982e-11,
681 2.947e-11, 3.164e-11, 3.714e-11, 4.586e-11, 6.164e-11, 8.041e-11,
682 9.982e-11, 1.283e-10, 1.73e-10, 2.56e-10, 3.909e-10, 5.959e-10,
683 9.081e-10, 1.384e-09, 1.788e-09, 2.189e-09, 2.686e-09, 3.091e-09,
684 3.49e-09, 3.796e-09, 4.2e-09, 5.103e-09, 6.005e-09, 6.3e-09, 6.706e-09,
685 7.07e-09, 7.434e-09, 7.663e-09, 7.788e-09, 7.8e-09, 7.597e-09,
686 7.482e-09, 7.227e-09, 6.403e-09, 5.585e-09, 4.606e-09, 3.703e-09,
687 2.984e-09, 2.183e-09, 1.48e-09, 8.441e-10, 5.994e-10, 3.799e-10,
688 2.751e-10, 1.927e-10, 1.507e-10, 1.102e-10, 6.971e-11, 5.839e-11,
689 3.904e-11, 3.087e-11, 2.176e-11, 1.464e-11, 1.209e-11, 8.497e-12,
690 6.477e-12, 4.371e-12, 2.914e-12, 2.424e-12, 1.753e-12, 1.35e-12,
691 9.417e-13, 6.622e-13, 5.148e-13, 3.841e-13, 3.446e-13, 3.01e-13,
692 2.551e-13, 2.151e-13, 1.829e-13, 1.64e-13, 1.475e-13, 1.352e-13,
693 1.155e-13, 9.963e-14, 9.771e-14, 9.577e-14, 9.384e-14, 9.186e-14,
694 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14,
695 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14,
696 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14,
697 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14
698 };
699
700 static double o3[121] = {
701 2.218e-08, 3.394e-08, 3.869e-08, 4.219e-08, 4.501e-08, 4.778e-08,
702 5.067e-08, 5.402e-08, 5.872e-08, 6.521e-08, 7.709e-08, 9.461e-08,
703 1.269e-07, 1.853e-07, 2.723e-07, 3.964e-07, 5.773e-07, 8.2e-07,
704 1.155e-06, 1.59e-06, 2.076e-06, 2.706e-06, 3.249e-06, 3.848e-06,
705 4.459e-06, 4.986e-06, 5.573e-06, 5.958e-06, 6.328e-06, 6.661e-06,
706 6.9e-06, 7.146e-06, 7.276e-06, 7.374e-06, 7.447e-06, 7.383e-06,
707 7.321e-06, 7.161e-06, 6.879e-06, 6.611e-06, 6.216e-06, 5.765e-06,
708 5.355e-06, 4.905e-06, 4.471e-06, 4.075e-06, 3.728e-06, 3.413e-06,
709 3.125e-06, 2.856e-06, 2.607e-06, 2.379e-06, 2.17e-06, 1.978e-06,
710 1.8e-06, 1.646e-06, 1.506e-06, 1.376e-06, 1.233e-06, 1.102e-06,
711 9.839e-07, 8.771e-07, 7.814e-07, 6.947e-07, 6.102e-07, 5.228e-07,
712 4.509e-07, 3.922e-07, 3.501e-07, 3.183e-07, 2.909e-07, 2.686e-07,
713 2.476e-07, 2.284e-07, 2.109e-07, 2.003e-07, 2.013e-07, 2.022e-07,
714 2.032e-07, 2.042e-07, 2.097e-07, 2.361e-07, 2.656e-07, 2.989e-07,
715 3.37e-07, 3.826e-07, 4.489e-07, 5.26e-07, 6.189e-07, 7.312e-07,
716 8.496e-07, 8.444e-07, 8.392e-07, 8.339e-07, 8.286e-07, 8.234e-07,
717 8.181e-07, 8.129e-07, 8.077e-07, 8.026e-07, 6.918e-07, 5.176e-07,
718 3.865e-07, 2.885e-07, 2.156e-07, 1.619e-07, 1.219e-07, 9.161e-08,
719 6.972e-08, 5.399e-08, 3.498e-08, 2.111e-08, 1.322e-08, 8.482e-09,
720 5.527e-09, 3.423e-09, 2.071e-09, 1.314e-09, 8.529e-10, 5.503e-10,
721 3.665e-10
722 };
723
724 static double ocs[121] = {
725 6e-10, 6e-10, 6e-10, 6e-10, 6e-10, 6e-10, 6e-10, 6e-10, 6e-10, 5.997e-10,
726 5.989e-10, 5.881e-10, 5.765e-10, 5.433e-10, 5.074e-10, 4.567e-10,
727 4.067e-10, 3.601e-10, 3.093e-10, 2.619e-10, 2.232e-10, 1.805e-10,
728 1.46e-10, 1.187e-10, 8.03e-11, 5.435e-11, 3.686e-11, 2.217e-11,
729 1.341e-11, 8.756e-12, 4.511e-12, 2.37e-12, 1.264e-12, 8.28e-13,
730 5.263e-13, 3.209e-13, 1.717e-13, 9.068e-14, 4.709e-14, 2.389e-14,
731 1.236e-14, 1.127e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
732 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
733 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
734 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
735 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
736 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
737 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
738 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
739 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
740 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
741 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
742 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
743 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
744 1.091e-14, 1.091e-14, 1.091e-14
745 };
746
747 static double sf6[121] = {
748 4.103e-12, 4.103e-12, 4.103e-12, 4.103e-12, 4.103e-12, 4.103e-12,
749 4.103e-12, 4.103e-12, 4.103e-12, 4.087e-12, 4.064e-12, 4.023e-12,
750 3.988e-12, 3.941e-12, 3.884e-12, 3.755e-12, 3.622e-12, 3.484e-12,
751 3.32e-12, 3.144e-12, 2.978e-12, 2.811e-12, 2.653e-12, 2.489e-12,
752 2.332e-12, 2.199e-12, 2.089e-12, 2.013e-12, 1.953e-12, 1.898e-12,
753 1.859e-12, 1.826e-12, 1.798e-12, 1.776e-12, 1.757e-12, 1.742e-12,
754 1.728e-12, 1.717e-12, 1.707e-12, 1.698e-12, 1.691e-12, 1.685e-12,
755 1.679e-12, 1.675e-12, 1.671e-12, 1.668e-12, 1.665e-12, 1.663e-12,
756 1.661e-12, 1.659e-12, 1.658e-12, 1.657e-12, 1.656e-12, 1.655e-12,
757 1.654e-12, 1.653e-12, 1.653e-12, 1.652e-12, 1.652e-12, 1.652e-12,
758 1.651e-12, 1.651e-12, 1.651e-12, 1.651e-12, 1.651e-12, 1.651e-12,
759 1.651e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
760 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
761 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
762 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
763 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
764 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
765 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
766 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12
767 };
768
769 static double so2[121] = {
770 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10,
771 1e-10, 1e-10, 9.867e-11, 9.537e-11, 9e-11, 8.404e-11, 7.799e-11,
772 7.205e-11, 6.616e-11, 6.036e-11, 5.475e-11, 5.007e-11, 4.638e-11,
773 4.346e-11, 4.055e-11, 3.763e-11, 3.471e-11, 3.186e-11, 2.905e-11,
774 2.631e-11, 2.358e-11, 2.415e-11, 2.949e-11, 3.952e-11, 5.155e-11,
775 6.76e-11, 8.741e-11, 1.099e-10, 1.278e-10, 1.414e-10, 1.512e-10,
776 1.607e-10, 1.699e-10, 1.774e-10, 1.832e-10, 1.871e-10, 1.907e-10,
777 1.943e-10, 1.974e-10, 1.993e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
778 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
779 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
780 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
781 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
782 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
783 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
784 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10
785 };
786
787 static int ig_co2 = -999;
788
789 double *q[NG] = { NULL };
790
791 /* Find emitter index of CO2... */
792 if (ig_co2 == -999)
793 ig_co2 = find_emitter(ctl, "CO2");
794
795 /* Identify variable... */
796 for (int ig = 0; ig < ctl->ng; ig++) {
797 q[ig] = NULL;
798 if (strcasecmp(ctl->emitter[ig], "C2H2") == 0)
799 q[ig] = c2h2;
800 if (strcasecmp(ctl->emitter[ig], "C2H6") == 0)
801 q[ig] = c2h6;
802 if (strcasecmp(ctl->emitter[ig], "CCl4") == 0)
803 q[ig] = ccl4;
804 if (strcasecmp(ctl->emitter[ig], "CH4") == 0)
805 q[ig] = ch4;
806 if (strcasecmp(ctl->emitter[ig], "ClO") == 0)
807 q[ig] = clo;
808 if (strcasecmp(ctl->emitter[ig], "ClONO2") == 0)
809 q[ig] = clono2;
810 if (strcasecmp(ctl->emitter[ig], "CO") == 0)
811 q[ig] = co;
812 if (strcasecmp(ctl->emitter[ig], "COF2") == 0)
813 q[ig] = cof2;
814 if (strcasecmp(ctl->emitter[ig], "F11") == 0)
815 q[ig] = f11;
816 if (strcasecmp(ctl->emitter[ig], "F12") == 0)
817 q[ig] = f12;
818 if (strcasecmp(ctl->emitter[ig], "F14") == 0)
819 q[ig] = f14;
820 if (strcasecmp(ctl->emitter[ig], "F22") == 0)
821 q[ig] = f22;
822 if (strcasecmp(ctl->emitter[ig], "H2O") == 0)
823 q[ig] = h2o;
824 if (strcasecmp(ctl->emitter[ig], "H2O2") == 0)
825 q[ig] = h2o2;
826 if (strcasecmp(ctl->emitter[ig], "HCN") == 0)
827 q[ig] = hcn;
828 if (strcasecmp(ctl->emitter[ig], "HNO3") == 0)
829 q[ig] = hno3;
830 if (strcasecmp(ctl->emitter[ig], "HNO4") == 0)
831 q[ig] = hno4;
832 if (strcasecmp(ctl->emitter[ig], "HOCl") == 0)
833 q[ig] = hocl;
834 if (strcasecmp(ctl->emitter[ig], "N2O") == 0)
835 q[ig] = n2o;
836 if (strcasecmp(ctl->emitter[ig], "N2O5") == 0)
837 q[ig] = n2o5;
838 if (strcasecmp(ctl->emitter[ig], "NH3") == 0)
839 q[ig] = nh3;
840 if (strcasecmp(ctl->emitter[ig], "NO") == 0)
841 q[ig] = no;
842 if (strcasecmp(ctl->emitter[ig], "NO2") == 0)
843 q[ig] = no2;
844 if (strcasecmp(ctl->emitter[ig], "O3") == 0)
845 q[ig] = o3;
846 if (strcasecmp(ctl->emitter[ig], "OCS") == 0)
847 q[ig] = ocs;
848 if (strcasecmp(ctl->emitter[ig], "SF6") == 0)
849 q[ig] = sf6;
850 if (strcasecmp(ctl->emitter[ig], "SO2") == 0)
851 q[ig] = so2;
852 }
853
854 /* Loop over atmospheric data points... */
855 for (int ip = 0; ip < atm->np; ip++) {
856
857 /* Get altitude index... */
858 int iz = locate_reg(z, 121, atm->z[ip]);
859
860 /* Interpolate pressure... */
861 atm->p[ip] = LOGY(z[iz], pre[iz], z[iz + 1], pre[iz + 1], atm->z[ip]);
862
863 /* Interpolate temperature... */
864 atm->t[ip] = LIN(z[iz], tem[iz], z[iz + 1], tem[iz + 1], atm->z[ip]);
865
866 /* Interpolate trace gases... */
867 for (int ig = 0; ig < ctl->ng; ig++)
868 if (q[ig] != NULL)
869 atm->q[ig][ip] =
870 LIN(z[iz], q[ig][iz], z[iz + 1], q[ig][iz + 1], atm->z[ip]);
871 else
872 atm->q[ig][ip] = 0;
873
874 /* Set CO2... */
875 if (ig_co2 >= 0)
876 atm->q[ig_co2][ip] =
877 371.789948e-6 + 2.026214e-6 * (atm->time[ip] - 63158400.) / 31557600.;
878
879 /* Set extinction to zero... */
880 for (int iw = 0; iw < ctl->nw; iw++)
881 atm->k[iw][ip] = 0;
882
883 /* Set cloud layer... */
884 atm->clz = atm->cldz = 0;
885 for (int icl = 0; icl < ctl->ncl; icl++)
886 atm->clk[icl] = 0;
887
888 /* Set surface layer... */
889 atm->sfz = atm->sfp = atm->sft = 0;
890 for (int isf = 0; isf < ctl->nsf; isf++)
891 atm->sfeps[isf] = 1;
892 }
893}
894
895/*****************************************************************************/
896
897double ctmco2(
898 double nu,
899 double p,
900 double t,
901 double u) {
902
903 static double co2296[2001] = { 9.3388e-5, 9.7711e-5, 1.0224e-4, 1.0697e-4,
904 1.1193e-4, 1.1712e-4, 1.2255e-4, 1.2824e-4, 1.3419e-4, 1.4043e-4,
905 1.4695e-4, 1.5378e-4, 1.6094e-4, 1.6842e-4, 1.7626e-4, 1.8447e-4,
906 1.9307e-4, 2.0207e-4, 2.1149e-4, 2.2136e-4, 2.3169e-4, 2.4251e-4,
907 2.5384e-4, 2.657e-4, 2.7813e-4, 2.9114e-4, 3.0477e-4, 3.1904e-4,
908 3.3399e-4, 3.4965e-4, 3.6604e-4, 3.8322e-4, 4.0121e-4, 4.2006e-4,
909 4.398e-4, 4.6047e-4, 4.8214e-4, 5.0483e-4, 5.286e-4, 5.535e-4,
910 5.7959e-4, 6.0693e-4, 6.3557e-4, 6.6558e-4, 6.9702e-4, 7.2996e-4,
911 7.6449e-4, 8.0066e-4, 8.3856e-4, 8.7829e-4, 9.1991e-4, 9.6354e-4,
912 .0010093, .0010572, .0011074, .00116, .0012152, .001273,
913 .0013336, .0013972, .0014638, .0015336, .0016068, .0016835,
914 .001764, .0018483, .0019367, .0020295, .0021267, .0022286,
915 .0023355, .0024476, .0025652, .0026885, .0028178, .0029534,
916 .0030956, .0032448, .0034012, .0035654, .0037375, .0039181,
917 .0041076, .0043063, .0045148, .0047336, .0049632, .005204,
918 .0054567, .0057219, .0060002, .0062923, .0065988, .0069204,
919 .007258, .0076123, .0079842, .0083746, .0087844, .0092146,
920 .0096663, .01014, .010638, .011161, .01171, .012286, .012891,
921 .013527, .014194, .014895, .015631, .016404, .017217, .01807,
922 .018966, .019908, .020897, .021936, .023028, .024176, .025382,
923 .026649, .027981, .02938, .030851, .032397, .034023, .035732,
924 .037528, .039416, .041402, .04349, .045685, .047994, .050422,
925 .052975, .055661, .058486, .061458, .064584, .067873, .071334,
926 .074975, .078807, .082839, .087082, .091549, .096249, .1012,
927 .10641, .11189, .11767, .12375, .13015, .13689, .14399, .15147,
928 .15935, .16765, .17639, .18561, .19531, .20554, .21632, .22769,
929 .23967, .25229, .2656, .27964, .29443, .31004, .3265, .34386,
930 .36218, .3815, .40188, .42339, .44609, .47004, .49533, .52202,
931 .5502, .57995, .61137, .64455, .6796, .71663, .75574, .79707,
932 .84075, .88691, .9357, .98728, 1.0418, 1.0995, 1.1605, 1.225,
933 1.2932, 1.3654, 1.4418, 1.5227, 1.6083, 1.6989, 1.7948, 1.8964,
934 2.004, 2.118, 2.2388, 2.3668, 2.5025, 2.6463, 2.7988, 2.9606,
935 3.1321, 3.314, 3.5071, 3.712, 3.9296, 4.1605, 4.4058, 4.6663,
936 4.9431, 5.2374, 5.5501, 5.8818, 6.2353, 6.6114, 7.0115, 7.4372,
937 7.8905, 8.3731, 8.8871, 9.4349, 10.019, 10.641, 11.305, 12.013,
938 12.769, 13.576, 14.437, 15.358, 16.342, 17.39, 18.513, 19.716,
939 21.003, 22.379, 23.854, 25.436, 27.126, 28.942, 30.89, 32.973,
940 35.219, 37.634, 40.224, 43.021, 46.037, 49.29, 52.803, 56.447,
941 60.418, 64.792, 69.526, 74.637, 80.182, 86.193, 92.713, 99.786,
942 107.47, 115.84, 124.94, 134.86, 145.69, 157.49, 170.3, 184.39,
943 199.83, 216.4, 234.55, 254.72, 276.82, 299.85, 326.16, 354.99,
944 386.51, 416.68, 449.89, 490.12, 534.35, 578.25, 632.26, 692.61,
945 756.43, 834.75, 924.11, 1016.9, 996.96, 1102.7, 1219.2, 1351.9,
946 1494.3, 1654.1, 1826.5, 2027.9, 2249., 2453.8, 2714.4, 2999.4,
947 3209.5, 3509., 3840.4, 3907.5, 4190.7, 4533.5, 4648.3, 5059.1,
948 5561.6, 6191.4, 6820.8, 7905.9, 9362.2, 2431.3, 2211.3, 2046.8,
949 2023.8, 1985.9, 1905.9, 1491.1, 1369.8, 1262.2, 1200.7, 887.74,
950 820.25, 885.23, 887.21, 816.73, 1126.9, 1216.2, 1272.4, 1579.5,
951 1634.2, 1656.3, 1657.9, 1789.5, 1670.8, 1509.5, 8474.6, 7489.2,
952 6793.6, 6117., 5574.1, 5141.2, 5084.6, 4745.1, 4413.2, 4102.8,
953 4024.7, 3715., 3398.6, 3100.8, 2900.4, 2629.2, 2374., 2144.7,
954 1955.8, 1760.8, 1591.2, 1435.2, 1296.2, 1174., 1065.1, 967.76,
955 999.48, 897.45, 809.23, 732.77, 670.26, 611.93, 560.11, 518.77,
956 476.84, 438.8, 408.48, 380.21, 349.24, 322.71, 296.65, 272.85,
957 251.96, 232.04, 213.88, 197.69, 182.41, 168.41, 155.79, 144.05,
958 133.31, 123.48, 114.5, 106.21, 98.591, 91.612, 85.156, 79.204,
959 73.719, 68.666, 63.975, 59.637, 56.35, 52.545, 49.042, 45.788,
960 42.78, 39.992, 37.441, 35.037, 32.8, 30.744, 28.801, 26.986,
961 25.297, 23.731, 22.258, 20.883, 19.603, 18.403, 17.295, 16.249,
962 15.271, 14.356, 13.501, 12.701, 11.954, 11.254, 10.6, 9.9864,
963 9.4118, 8.8745, 8.3714, 7.8997, 7.4578, 7.0446, 6.6573, 6.2949,
964 5.9577, 5.6395, 5.3419, 5.063, 4.8037, 4.5608, 4.3452, 4.1364,
965 3.9413, 3.7394, 3.562, 3.3932, 3.2325, 3.0789, 2.9318, 2.7898,
966 2.6537, 2.5225, 2.3958, 2.2305, 2.1215, 2.0245, 1.9427, 1.8795,
967 1.8336, 1.7604, 1.7016, 1.6419, 1.5282, 1.4611, 1.3443, 1.27,
968 1.1675, 1.0824, 1.0534, .99833, .95854, .92981, .90887, .89346,
969 .88113, .87068, .86102, .85096, .88262, .86151, .83565, .80518,
970 .77045, .73736, .74744, .74954, .75773, .82267, .83493, .89402,
971 .89725, .93426, .95564, .94045, .94174, .93404, .92035, .90456,
972 .88621, .86673, .78117, .7515, .72056, .68822, .65658, .62764,
973 .55984, .55598, .57407, .60963, .63763, .66198, .61132, .60972,
974 .52496, .50649, .41872, .3964, .32422, .27276, .24048, .23772,
975 .2286, .22711, .23999, .32038, .34371, .36621, .38561, .39953,
976 .40636, .44913, .42716, .3919, .35477, .33935, .3351, .39746,
977 .40993, .49398, .49956, .56157, .54742, .57295, .57386, .55417,
978 .50745, .471, .43446, .39102, .34993, .31269, .27888, .24912,
979 .22291, .19994, .17972, .16197, .14633, .13252, .12029, .10942,
980 .099745, .091118, .083404, .076494, .070292, .064716, .059697,
981 .055173, .051093, .047411, .044089, .041092, .038392, .035965,
982 .033789, .031846, .030122, .028607, .02729, .026169, .025209,
983 .024405, .023766, .023288, .022925, .022716, .022681, .022685,
984 .022768, .023133, .023325, .023486, .024004, .024126, .024083,
985 .023785, .024023, .023029, .021649, .021108, .019454, .017809,
986 .017292, .016635, .017037, .018068, .018977, .018756, .017847,
987 .016557, .016142, .014459, .012869, .012381, .010875, .0098701,
988 .009285, .0091698, .0091701, .0096145, .010553, .01106, .012613,
989 .014362, .015017, .016507, .017741, .01768, .017784, .0171,
990 .016357, .016172, .017257, .018978, .020935, .021741, .023567,
991 .025183, .025589, .026732, .027648, .028278, .028215, .02856,
992 .029015, .029062, .028851, .028497, .027825, .027801, .026523,
993 .02487, .022967, .022168, .020194, .018605, .017903, .018439,
994 .019697, .020311, .020855, .020057, .018608, .016738, .015963,
995 .013844, .011801, .011134, .0097573, .0086007, .0086226,
996 .0083721, .0090978, .0097616, .0098426, .011317, .012853, .01447,
997 .014657, .015771, .016351, .016079, .014829, .013431, .013185,
998 .013207, .01448, .016176, .017971, .018265, .019526, .020455,
999 .019797, .019802, .0194, .018176, .017505, .016197, .015339,
1000 .014401, .013213, .012203, .011186, .010236, .0093288, .0084854,
1001 .0076837, .0069375, .0062614, .0056628, .0051153, .0046015,
1002 .0041501, .003752, .0033996, .0030865, .0028077, .0025586,
1003 .0023355, .0021353, .0019553, .0017931, .0016466, .0015141,
1004 .0013941, .0012852, .0011862, .0010962, .0010142, 9.3935e-4,
1005 8.71e-4, 8.0851e-4, 7.5132e-4, 6.9894e-4, 6.5093e-4, 6.0689e-4,
1006 5.6647e-4, 5.2935e-4, 4.9525e-4, 4.6391e-4, 4.3509e-4, 4.086e-4,
1007 3.8424e-4, 3.6185e-4, 3.4126e-4, 3.2235e-4, 3.0498e-4, 2.8904e-4,
1008 2.7444e-4, 2.6106e-4, 2.4883e-4, 2.3766e-4, 2.275e-4, 2.1827e-4,
1009 2.0992e-4, 2.0239e-4, 1.9563e-4, 1.896e-4, 1.8427e-4, 1.796e-4,
1010 1.7555e-4, 1.7209e-4, 1.692e-4, 1.6687e-4, 1.6505e-4, 1.6375e-4,
1011 1.6294e-4, 1.6261e-4, 1.6274e-4, 1.6334e-4, 1.6438e-4, 1.6587e-4,
1012 1.678e-4, 1.7017e-4, 1.7297e-4, 1.762e-4, 1.7988e-4, 1.8399e-4,
1013 1.8855e-4, 1.9355e-4, 1.9902e-4, 2.0494e-4, 2.1134e-4, 2.1823e-4,
1014 2.2561e-4, 2.335e-4, 2.4192e-4, 2.5088e-4, 2.604e-4, 2.705e-4,
1015 2.8119e-4, 2.9251e-4, 3.0447e-4, 3.171e-4, 3.3042e-4, 3.4447e-4,
1016 3.5927e-4, 3.7486e-4, 3.9127e-4, 4.0854e-4, 4.267e-4, 4.4579e-4,
1017 4.6586e-4, 4.8696e-4, 5.0912e-4, 5.324e-4, 5.5685e-4, 5.8253e-4,
1018 6.0949e-4, 6.378e-4, 6.6753e-4, 6.9873e-4, 7.3149e-4, 7.6588e-4,
1019 8.0198e-4, 8.3987e-4, 8.7964e-4, 9.2139e-4, 9.6522e-4, .0010112,
1020 .0010595, .0011102, .0011634, .0012193, .001278, .0013396,
1021 .0014043, .0014722, .0015436, .0016185, .0016972, .0017799,
1022 .0018668, .001958, .0020539, .0021547, .0022606, .0023719,
1023 .002489, .002612, .0027414, .0028775, .0030206, .0031712,
1024 .0033295, .0034962, .0036716, .0038563, .0040506, .0042553,
1025 .0044709, .004698, .0049373, .0051894, .0054552, .0057354,
1026 .006031, .0063427, .0066717, .0070188, .0073854, .0077726,
1027 .0081816, .0086138, .0090709, .0095543, .010066, .010607,
1028 .011181, .011789, .012433, .013116, .013842, .014613, .015432,
1029 .016304, .017233, .018224, .019281, .020394, .021574, .022836,
1030 .024181, .025594, .027088, .028707, .030401, .032245, .034219,
1031 .036262, .038539, .040987, .043578, .04641, .04949, .052726,
1032 .056326, .0602, .064093, .068521, .073278, .077734, .083064,
1033 .088731, .093885, .1003, .1072, .11365, .12187, .13078, .13989,
1034 .15095, .16299, .17634, .19116, .20628, .22419, .24386, .26587,
1035 .28811, .31399, .34321, .36606, .39675, .42742, .44243, .47197,
1036 .49993, .49027, .51147, .52803, .48931, .49729, .5026, .43854,
1037 .441, .44766, .43414, .46151, .50029, .55247, .43855, .32115,
1038 .32607, .3431, .36119, .38029, .41179, .43996, .47144, .51853,
1039 .55362, .59122, .66338, .69877, .74001, .82923, .86907, .90361,
1040 1.0025, 1.031, 1.0559, 1.104, 1.1178, 1.1341, 1.1547, 1.351,
1041 1.4772, 1.4812, 1.4907, 1.512, 1.5442, 1.5853, 1.6358, 1.6963,
1042 1.7674, 1.8474, 1.9353, 2.0335, 2.143, 2.2592, 2.3853, 2.5217,
1043 2.6686, 2.8273, 2.9998, 3.183, 3.3868, 3.6109, 3.8564, 4.1159,
1044 4.4079, 4.7278, 5.0497, 5.3695, 5.758, 6.0834, 6.4976, 6.9312,
1045 7.38, 7.5746, 7.9833, 8.3791, 8.3956, 8.7501, 9.1067, 9.072,
1046 9.4649, 9.9112, 10.402, 10.829, 11.605, 12.54, 12.713, 10.443,
1047 10.825, 11.375, 11.955, 12.623, 13.326, 14.101, 15.041, 15.547,
1048 16.461, 17.439, 18.716, 19.84, 21.036, 22.642, 23.901, 25.244,
1049 27.03, 28.411, 29.871, 31.403, 33.147, 34.744, 36.456, 39.239,
1050 43.605, 45.162, 47.004, 49.093, 51.391, 53.946, 56.673, 59.629,
1051 63.167, 66.576, 70.254, 74.222, 78.477, 83.034, 87.914, 93.18,
1052 98.77, 104.74, 111.15, 117.95, 125.23, 133.01, 141.33, 150.21,
1053 159.71, 169.89, 180.93, 192.54, 204.99, 218.34, 232.65, 248.,
1054 264.47, 282.14, 301.13, 321.53, 343.48, 367.08, 392.5, 419.88,
1055 449.4, 481.26, 515.64, 552.79, 592.99, 636.48, 683.61, 734.65,
1056 789.99, 850.02, 915.14, 985.81, 1062.5, 1147.1, 1237.8, 1336.4,
1057 1443.2, 1558.9, 1684.2, 1819.2, 1965.2, 2122.6, 2291.7, 2470.8,
1058 2665.7, 2874.9, 3099.4, 3337.9, 3541., 3813.3, 4111.9, 4439.3,
1059 4798.9, 5196., 5639.2, 6087.5, 6657.7, 7306.7, 8040.7, 8845.5,
1060 9702.2, 10670., 11739., 12842., 14141., 15498., 17068., 18729.,
1061 20557., 22559., 25248., 27664., 30207., 32915., 35611., 38081.,
1062 40715., 43191., 41651., 42750., 43785., 44353., 44366., 44189.,
1063 43618., 42862., 41878., 35133., 35215., 36383., 39420., 44055.,
1064 44155., 45850., 46853., 39197., 38274., 29942., 28553., 21792.,
1065 21228., 17106., 14955., 18181., 19557., 21427., 23728., 26301.,
1066 28584., 30775., 32536., 33867., 40089., 39204., 37329., 34452.,
1067 31373., 33921., 34800., 36043., 44415., 45162., 52181., 50895.,
1068 54140., 50840., 50468., 48302., 44915., 40910., 36754., 32755.,
1069 29093., 25860., 22962., 20448., 18247., 16326., 14645., 13165.,
1070 11861., 10708., 9686.9, 8779.7, 7971.9, 7250.8, 6605.7, 6027.2,
1071 5507.3, 5039.1, 4616.6, 4234.8, 3889., 3575.4, 3290.5, 3031.3,
1072 2795.2, 2579.9, 2383.1, 2203.3, 2038.6, 1887.6, 1749.1, 1621.9,
1073 1505., 1397.4, 1298.3, 1207., 1122.8, 1045., 973.1, 906.64,
1074 845.16, 788.22, 735.48, 686.57, 641.21, 599.1, 559.99, 523.64,
1075 489.85, 458.42, 429.16, 401.92, 376.54, 352.88, 330.82, 310.24,
1076 291.03, 273.09, 256.34, 240.69, 226.05, 212.37, 199.57, 187.59,
1077 176.37, 165.87, 156.03, 146.82, 138.17, 130.07, 122.47, 115.34,
1078 108.65, 102.37, 96.473, 90.934, 85.73, 80.84, 76.243, 71.922,
1079 67.858, 64.034, 60.438, 57.052, 53.866, 50.866, 48.04, 45.379,
1080 42.872, 40.51, 38.285, 36.188, 34.211, 32.347, 30.588, 28.929,
1081 27.362, 25.884, 24.489, 23.171, 21.929, 20.755, 19.646, 18.599,
1082 17.61, 16.677, 15.795, 14.961, 14.174, 13.43, 12.725, 12.06,
1083 11.431, 10.834, 10.27, 9.7361, 9.2302, 8.7518, 8.2997, 7.8724,
1084 7.4674, 7.0848, 6.7226, 6.3794, 6.054, 5.745, 5.4525, 5.1752,
1085 4.9121, 4.6625, 4.4259, 4.2015, 3.9888, 3.7872, 3.5961, 3.4149,
1086 3.2431, 3.0802, 2.9257, 2.7792, 2.6402, 2.5084, 2.3834, 2.2648,
1087 2.1522, 2.0455, 1.9441, 1.848, 1.7567, 1.6701, 1.5878, 1.5097,
1088 1.4356, 1.3651, 1.2981, 1.2345, 1.174, 1.1167, 1.062, 1.0101,
1089 .96087, .91414, .86986, .82781, .78777, .74971, .71339, .67882,
1090 .64604, .61473, .58507, .55676, .52987, .5044, .48014, .45715,
1091 .43527, .41453, .3948, .37609, .35831, .34142, .32524, .30995,
1092 .29536, .28142, .26807, .25527, .24311, .23166, .22077, .21053,
1093 .20081, .19143, .18261, .17407, .16603, .15833, .15089, .14385,
1094 .13707, .13065, .12449, .11865, .11306, .10774, .10266, .097818,
1095 .093203, .088815, .084641, .080671, .076892, .073296, .069873,
1096 .066613, .06351, .060555, .05774, .055058, .052504, .050071,
1097 .047752, .045543, .043438, .041432, .039521, .037699, .035962,
1098 .034307, .032729, .031225, .029791, .028423, .02712, .025877,
1099 .024692, .023563, .022485, .021458, .020478, .019543, .018652,
1100 .017802, .016992, .016219, .015481, .014778, .014107, .013467,
1101 .012856, .012274, .011718, .011188, .010682, .0102, .0097393,
1102 .0093001, .008881, .0084812, .0080997, .0077358, .0073885,
1103 .0070571, .0067409, .0064393, .0061514, .0058768, .0056147,
1104 .0053647, .0051262, .0048987, .0046816, .0044745, .0042769,
1105 .0040884, .0039088, .0037373, .0035739, .003418, .0032693,
1106 .0031277, .0029926, .0028639, .0027413, .0026245, .0025133,
1107 .0024074, .0023066, .0022108, .0021196, .002033, .0019507,
1108 .0018726, .0017985, .0017282, .0016617, .0015988, .0015394,
1109 .0014834, .0014306, .0013811, .0013346, .0012911, .0012506,
1110 .0012131, .0011784, .0011465, .0011175, .0010912, .0010678,
1111 .0010472, .0010295, .0010147, .001003, 9.9428e-4, 9.8883e-4,
1112 9.8673e-4, 9.8821e-4, 9.9343e-4, .0010027, .0010164, .0010348,
1113 .0010586, .0010882, .0011245, .0011685, .0012145, .0012666,
1114 .0013095, .0013688, .0014048, .0014663, .0015309, .0015499,
1115 .0016144, .0016312, .001705, .0017892, .0018499, .0019715,
1116 .0021102, .0022442, .0024284, .0025893, .0027703, .0029445,
1117 .0031193, .003346, .0034552, .0036906, .0037584, .0040084,
1118 .0041934, .0044587, .0047093, .0049759, .0053421, .0055134,
1119 .0059048, .0058663, .0061036, .0063259, .0059657, .0060653,
1120 .0060972, .0055539, .0055653, .0055772, .005331, .0054953,
1121 .0055919, .0058684, .006183, .0066675, .0069808, .0075142,
1122 .0078536, .0084282, .0089454, .0094625, .0093703, .0095857,
1123 .0099283, .010063, .010521, .0097778, .0098175, .010379, .010447,
1124 .0105, .010617, .010706, .01078, .011177, .011212, .011304,
1125 .011446, .011603, .011816, .012165, .012545, .013069, .013539,
1126 .01411, .014776, .016103, .017016, .017994, .018978, .01998,
1127 .021799, .022745, .023681, .024627, .025562, .026992, .027958,
1128 .029013, .030154, .031402, .03228, .033651, .035272, .037088,
1129 .039021, .041213, .043597, .045977, .04877, .051809, .054943,
1130 .058064, .061528, .06537, .069309, .071928, .075752, .079589,
1131 .083352, .084096, .087497, .090817, .091198, .094966, .099045,
1132 .10429, .10867, .11518, .12269, .13126, .14087, .15161, .16388,
1133 .16423, .1759, .18721, .19994, .21275, .22513, .23041, .24231,
1134 .25299, .25396, .26396, .27696, .27929, .2908, .30595, .31433,
1135 .3282, .3429, .35944, .37467, .39277, .41245, .43326, .45649,
1136 .48152, .51897, .54686, .57877, .61263, .64962, .68983, .73945,
1137 .78619, .83537, .89622, .95002, 1.0067, 1.0742, 1.1355, 1.2007,
1138 1.2738, 1.347, 1.4254, 1.5094, 1.6009, 1.6976, 1.8019, 1.9148,
1139 2.0357, 2.166, 2.3066, 2.4579, 2.6208, 2.7966, 2.986, 3.188,
1140 3.4081, 3.6456, 3.9, 4.1747, 4.4712, 4.7931, 5.1359, 5.5097,
1141 5.9117, 6.3435, 6.8003, 7.3001, 7.8385, 8.3945, 9.011, 9.6869,
1142 10.392, 11.18, 12.036, 12.938, 13.944, 14.881, 16.029, 17.255,
1143 18.574, 19.945, 21.38, 22.9, 24.477, 26.128, 27.87, 29.037,
1144 30.988, 33.145, 35.506, 37.76, 40.885, 44.487, 48.505, 52.911,
1145 57.56, 61.964, 67.217, 72.26, 78.343, 85.08, 91.867, 99.435,
1146 107.68, 116.97, 127.12, 138.32, 150.26, 163.04, 174.81, 189.26,
1147 205.61, 224.68, 240.98, 261.88, 285.1, 307.58, 334.35, 363.53,
1148 394.68, 427.85, 458.85, 489.25, 472.87, 486.93, 496.27, 501.52,
1149 501.57, 497.14, 488.09, 476.32, 393.76, 388.51, 393.42, 414.45,
1150 455.12, 514.62, 520.38, 547.42, 562.6, 487.47, 480.83, 391.06,
1151 376.92, 303.7, 295.91, 256.03, 236.73, 280.38, 310.71, 335.53,
1152 367.88, 401.94, 435.52, 469.13, 497.94, 588.82, 597.94, 597.2,
1153 588.28, 571.2, 555.75, 603.56, 638.15, 680.75, 801.72, 848.01,
1154 962.15, 990.06, 1068.1, 1076.2, 1115.3, 1134.2, 1136.6, 1119.1,
1155 1108.9, 1090.6, 1068.7, 1041.9, 1005.4, 967.98, 927.08, 780.1,
1156 751.41, 733.12, 742.65, 785.56, 855.16, 852.45, 878.1, 784.59,
1157 777.81, 765.13, 622.93, 498.09, 474.89, 386.9, 378.48, 336.17,
1158 322.04, 329.57, 350.5, 383.38, 420.02, 462.39, 499.71, 531.98,
1159 654.99, 653.43, 639.99, 605.16, 554.16, 504.42, 540.64, 552.33,
1160 679.46, 699.51, 713.91, 832.17, 919.91, 884.96, 907.57, 846.56,
1161 818.56, 768.93, 706.71, 642.17, 575.95, 515.38, 459.07, 409.02,
1162 364.61, 325.46, 291.1, 260.89, 234.39, 211.01, 190.38, 172.11,
1163 155.91, 141.49, 128.63, 117.13, 106.84, 97.584, 89.262, 81.756,
1164 74.975, 68.842, 63.28, 58.232, 53.641, 49.46, 45.649, 42.168,
1165 38.991, 36.078, 33.409, 30.96, 28.71, 26.642, 24.737, 22.985,
1166 21.37, 19.882, 18.512, 17.242, 16.073, 14.987, 13.984, 13.05,
1167 12.186, 11.384, 10.637, 9.9436, 9.2988, 8.6991, 8.141, 7.6215,
1168 7.1378, 6.6872, 6.2671, 5.8754, 5.51, 5.1691, 4.851, 4.5539,
1169 4.2764, 4.0169, 3.7742, 3.5472, 3.3348, 3.1359, 2.9495, 2.7749,
1170 2.6113, 2.4578, 2.3139, 2.1789, 2.0523, 1.9334, 1.8219, 1.7171,
1171 1.6188, 1.5263, 1.4395, 1.3579, 1.2812, 1.209, 1.1411, 1.0773,
1172 1.0171, .96048, .90713, .85684, .80959, .76495, .72282, .68309,
1173 .64563, .61035, .57707, .54573, .51622, .48834, .46199, .43709,
1174 .41359, .39129, .37034, .35064, .33198, .31442, .29784, .28218,
1175 .26732, .25337, .24017, .22774, .21601, .20479, .19426
1176 };
1177
1178 static double co2260[2001] = { 5.7971e-5, 6.0733e-5, 6.3628e-5, 6.6662e-5,
1179 6.9843e-5, 7.3176e-5, 7.6671e-5, 8.0334e-5, 8.4175e-5, 8.8201e-5,
1180 9.2421e-5, 9.6846e-5, 1.0149e-4, 1.0635e-4, 1.1145e-4, 1.1679e-4,
1181 1.224e-4, 1.2828e-4, 1.3444e-4, 1.409e-4, 1.4768e-4, 1.5479e-4,
1182 1.6224e-4, 1.7006e-4, 1.7826e-4, 1.8685e-4, 1.9587e-4, 2.0532e-4,
1183 2.1524e-4, 2.2565e-4, 2.3656e-4, 2.48e-4, 2.6001e-4, 2.7261e-4,
1184 2.8582e-4, 2.9968e-4, 3.1422e-4, 3.2948e-4, 3.4548e-4, 3.6228e-4,
1185 3.799e-4, 3.9838e-4, 4.1778e-4, 4.3814e-4, 4.595e-4, 4.8191e-4,
1186 5.0543e-4, 5.3012e-4, 5.5603e-4, 5.8321e-4, 6.1175e-4, 6.417e-4,
1187 6.7314e-4, 7.0614e-4, 7.4078e-4, 7.7714e-4, 8.1531e-4, 8.5538e-4,
1188 8.9745e-4, 9.4162e-4, 9.8798e-4, .0010367, .0010878, .0011415,
1189 .0011978, .001257, .0013191, .0013844, .001453, .0015249,
1190 .0016006, .00168, .0017634, .001851, .001943, .0020397, .0021412,
1191 .0022479, .00236, .0024778, .0026015, .0027316, .0028682,
1192 .0030117, .0031626, .0033211, .0034877, .0036628, .0038469,
1193 .0040403, .0042436, .0044574, .004682, .0049182, .0051665,
1194 .0054276, .0057021, .0059907, .0062942, .0066133, .0069489,
1195 .0073018, .0076729, .0080632, .0084738, .0089056, .0093599,
1196 .0098377, .01034, .010869, .011426, .012011, .012627, .013276,
1197 .013958, .014676, .015431, .016226, .017063, .017944, .018872,
1198 .019848, .020876, .021958, .023098, .024298, .025561, .026892,
1199 .028293, .029769, .031323, .032961, .034686, .036503, .038418,
1200 .040435, .042561, .044801, .047161, .049649, .052271, .055035,
1201 .057948, .061019, .064256, .06767, .07127, .075066, .079069,
1202 .083291, .087744, .092441, .097396, .10262, .10814, .11396,
1203 .1201, .12658, .13342, .14064, .14826, .1563, .1648, .17376,
1204 .18323, .19324, .2038, .21496, .22674, .23919, .25234, .26624,
1205 .28093, .29646, .31287, .33021, .34855, .36794, .38844, .41012,
1206 .43305, .45731, .48297, .51011, .53884, .56924, .60141, .63547,
1207 .67152, .70969, .75012, .79292, .83826, .8863, .93718, .99111,
1208 1.0482, 1.1088, 1.173, 1.2411, 1.3133, 1.3898, 1.471, 1.5571,
1209 1.6485, 1.7455, 1.8485, 1.9577, 2.0737, 2.197, 2.3278, 2.4668,
1210 2.6145, 2.7715, 2.9383, 3.1156, 3.3042, 3.5047, 3.7181, 3.9451,
1211 4.1866, 4.4437, 4.7174, 5.0089, 5.3192, 5.65, 6.0025, 6.3782,
1212 6.7787, 7.206, 7.6617, 8.1479, 8.6669, 9.221, 9.8128, 10.445,
1213 11.12, 11.843, 12.615, 13.441, 14.325, 15.271, 16.283, 17.367,
1214 18.529, 19.776, 21.111, 22.544, 24.082, 25.731, 27.504, 29.409,
1215 31.452, 33.654, 36.024, 38.573, 41.323, 44.29, 47.492, 50.951,
1216 54.608, 58.588, 62.929, 67.629, 72.712, 78.226, 84.207, 90.699,
1217 97.749, 105.42, 113.77, 122.86, 132.78, 143.61, 155.44, 168.33,
1218 182.48, 198.01, 214.87, 233.39, 253.86, 276.34, 300.3, 327.28,
1219 356.89, 389.48, 422.29, 458.99, 501.39, 548.13, 595.62, 652.74,
1220 716.54, 784.57, 866.78, 960.59, 1062.8, 1072.5, 1189.5, 1319.4,
1221 1467.6, 1630.2, 1813.7, 2016.9, 2253., 2515.3, 2773.5, 3092.8,
1222 3444.4, 3720.4, 4104.3, 4527.5, 4645.9, 5021.7, 5462.2, 5597.,
1223 6110.6, 6732.5, 7513.8, 8270.6, 9640.6, 11487., 2796.1, 2680.1,
1224 2441.6, 2404.2, 2334.8, 2215.2, 1642.5, 1477.9, 1328.1, 1223.5,
1225 843.34, 766.96, 831.65, 834.84, 774.85, 1156.3, 1275.6, 1366.1,
1226 1795.6, 1885., 1936.5, 1953.4, 2154.4, 2002.7, 1789.8, 10381.,
1227 9040., 8216.5, 7384.7, 6721.9, 6187.7, 6143.8, 5703.9, 5276.6,
1228 4873.1, 4736., 4325.3, 3927., 3554.1, 3286.1, 2950.1, 2642.4,
1229 2368.7, 2138.9, 1914., 1719.6, 1543.9, 1388.6, 1252.1, 1132.2,
1230 1024.1, 1025.4, 920.58, 829.59, 750.54, 685.01, 624.25, 570.14,
1231 525.81, 481.85, 441.95, 408.71, 377.23, 345.86, 318.51, 292.26,
1232 268.34, 247.04, 227.14, 209.02, 192.69, 177.59, 163.78, 151.26,
1233 139.73, 129.19, 119.53, 110.7, 102.57, 95.109, 88.264, 81.948,
1234 76.13, 70.768, 65.827, 61.251, 57.022, 53.495, 49.824, 46.443,
1235 43.307, 40.405, 37.716, 35.241, 32.923, 30.77, 28.78, 26.915,
1236 25.177, 23.56, 22.059, 20.654, 19.345, 18.126, 16.988, 15.93,
1237 14.939, 14.014, 13.149, 12.343, 11.589, 10.884, 10.225, 9.6093,
1238 9.0327, 8.4934, 7.9889, 7.5166, 7.0744, 6.6604, 6.2727, 5.9098,
1239 5.5701, 5.2529, 4.955, 4.676, 4.4148, 4.171, 3.9426, 3.7332,
1240 3.5347, 3.3493, 3.1677, 3.0025, 2.8466, 2.6994, 2.5601, 2.4277,
1241 2.3016, 2.1814, 2.0664, 1.9564, 1.8279, 1.7311, 1.6427, 1.5645,
1242 1.4982, 1.443, 1.374, 1.3146, 1.2562, 1.17, 1.1105, 1.0272,
1243 .96863, .89718, .83654, .80226, .75908, .72431, .69573, .67174,
1244 .65126, .63315, .61693, .60182, .58715, .59554, .57649, .55526,
1245 .53177, .50622, .48176, .4813, .47642, .47492, .50273, .50293,
1246 .52687, .52239, .53419, .53814, .52626, .52211, .51492, .50622,
1247 .49746, .48841, .4792, .43534, .41999, .40349, .38586, .36799,
1248 .35108, .31089, .30803, .3171, .33599, .35041, .36149, .32924,
1249 .32462, .27309, .25961, .20922, .19504, .15683, .13098, .11588,
1250 .11478, .11204, .11363, .12135, .16423, .17785, .19094, .20236,
1251 .21084, .2154, .24108, .22848, .20871, .18797, .17963, .17834,
1252 .21552, .22284, .26945, .27052, .30108, .28977, .29772, .29224,
1253 .27658, .24956, .22777, .20654, .18392, .16338, .1452, .12916,
1254 .1152, .10304, .092437, .083163, .075031, .067878, .061564,
1255 .055976, .051018, .046609, .042679, .03917, .036032, .033223,
1256 .030706, .02845, .026428, .024617, .022998, .021554, .02027,
1257 .019136, .018141, .017278, .016541, .015926, .015432, .015058,
1258 .014807, .014666, .014635, .014728, .014947, .01527, .015728,
1259 .016345, .017026, .017798, .018839, .019752, .020636, .021886,
1260 .022695, .02327, .023478, .024292, .023544, .022222, .021932,
1261 .020052, .018143, .017722, .017031, .017782, .01938, .020734,
1262 .020476, .019255, .017477, .016878, .014617, .012489, .011765,
1263 .0099077, .0086446, .0079446, .0078644, .0079763, .008671,
1264 .01001, .0108, .012933, .015349, .016341, .018484, .020254,
1265 .020254, .020478, .019591, .018595, .018385, .019913, .022254,
1266 .024847, .025809, .028053, .029924, .030212, .031367, .03222,
1267 .032739, .032537, .03286, .033344, .033507, .033499, .033339,
1268 .032809, .033041, .031723, .029837, .027511, .026603, .024032,
1269 .021914, .020948, .021701, .023425, .024259, .024987, .023818,
1270 .021768, .019223, .018144, .015282, .012604, .01163, .0097907,
1271 .008336, .0082473, .0079582, .0088077, .009779, .010129, .012145,
1272 .014378, .016761, .01726, .018997, .019998, .019809, .01819,
1273 .016358, .016099, .01617, .017939, .020223, .022521, .02277,
1274 .024279, .025247, .024222, .023989, .023224, .021493, .020362,
1275 .018596, .017309, .015975, .014466, .013171, .011921, .01078,
1276 .0097229, .0087612, .0078729, .0070682, .0063494, .0057156,
1277 .0051459, .0046273, .0041712, .0037686, .0034119, .003095,
1278 .0028126, .0025603, .0023342, .0021314, .0019489, .0017845,
1279 .001636, .0015017, .00138, .0012697, .0011694, .0010782,
1280 9.9507e-4, 9.1931e-4, 8.5013e-4, 7.869e-4, 7.2907e-4, 6.7611e-4,
1281 6.2758e-4, 5.8308e-4, 5.4223e-4, 5.0473e-4, 4.7027e-4, 4.3859e-4,
1282 4.0946e-4, 3.8265e-4, 3.5798e-4, 3.3526e-4, 3.1436e-4, 2.9511e-4,
1283 2.7739e-4, 2.6109e-4, 2.4609e-4, 2.3229e-4, 2.1961e-4, 2.0797e-4,
1284 1.9729e-4, 1.875e-4, 1.7855e-4, 1.7038e-4, 1.6294e-4, 1.5619e-4,
1285 1.5007e-4, 1.4456e-4, 1.3961e-4, 1.3521e-4, 1.3131e-4, 1.2789e-4,
1286 1.2494e-4, 1.2242e-4, 1.2032e-4, 1.1863e-4, 1.1733e-4, 1.1641e-4,
1287 1.1585e-4, 1.1565e-4, 1.158e-4, 1.1629e-4, 1.1712e-4, 1.1827e-4,
1288 1.1976e-4, 1.2158e-4, 1.2373e-4, 1.262e-4, 1.2901e-4, 1.3214e-4,
1289 1.3562e-4, 1.3944e-4, 1.4361e-4, 1.4814e-4, 1.5303e-4, 1.5829e-4,
1290 1.6394e-4, 1.6999e-4, 1.7644e-4, 1.8332e-4, 1.9063e-4, 1.984e-4,
1291 2.0663e-4, 2.1536e-4, 2.246e-4, 2.3436e-4, 2.4468e-4, 2.5558e-4,
1292 2.6708e-4, 2.7921e-4, 2.92e-4, 3.0548e-4, 3.1968e-4, 3.3464e-4,
1293 3.5039e-4, 3.6698e-4, 3.8443e-4, 4.0281e-4, 4.2214e-4, 4.4248e-4,
1294 4.6389e-4, 4.864e-4, 5.1009e-4, 5.3501e-4, 5.6123e-4, 5.888e-4,
1295 6.1781e-4, 6.4833e-4, 6.8043e-4, 7.142e-4, 7.4973e-4, 7.8711e-4,
1296 8.2644e-4, 8.6783e-4, 9.1137e-4, 9.5721e-4, .0010054, .0010562,
1297 .0011096, .0011659, .0012251, .0012875, .0013532, .0014224,
1298 .0014953, .001572, .0016529, .0017381, .0018279, .0019226,
1299 .0020224, .0021277, .0022386, .0023557, .0024792, .0026095,
1300 .002747, .0028921, .0030453, .0032071, .003378, .0035586,
1301 .0037494, .003951, .0041642, .0043897, .0046282, .0048805,
1302 .0051476, .0054304, .00573, .0060473, .0063837, .0067404,
1303 .0071188, .0075203, .0079466, .0083994, .0088806, .0093922,
1304 .0099366, .010516, .011134, .011792, .012494, .013244, .014046,
1305 .014898, .015808, .016781, .017822, .018929, .020108, .02138,
1306 .022729, .02419, .02576, .027412, .029233, .031198, .033301,
1307 .035594, .038092, .040767, .04372, .046918, .050246, .053974,
1308 .058009, .061976, .066586, .071537, .076209, .081856, .087998,
1309 .093821, .10113, .10913, .11731, .12724, .13821, .15025, .1639,
1310 .17807, .19472, .21356, .23496, .25758, .28387, .31389, .34104,
1311 .37469, .40989, .43309, .46845, .5042, .5023, .52981, .55275,
1312 .51075, .51976, .52457, .44779, .44721, .4503, .4243, .45244,
1313 .49491, .55399, .39021, .24802, .2501, .2618, .27475, .28879,
1314 .31317, .33643, .36257, .4018, .43275, .46525, .53333, .56599,
1315 .60557, .70142, .74194, .77736, .88567, .91182, .93294, .98407,
1316 .98772, .99176, .9995, 1.2405, 1.3602, 1.338, 1.3255, 1.3267,
1317 1.3404, 1.3634, 1.3967, 1.4407, 1.4961, 1.5603, 1.6328, 1.7153,
1318 1.8094, 1.9091, 2.018, 2.1367, 2.264, 2.4035, 2.5562, 2.7179,
1319 2.9017, 3.1052, 3.3304, 3.5731, 3.8488, 4.1553, 4.4769, 4.7818,
1320 5.1711, 5.5204, 5.9516, 6.4097, 6.8899, 7.1118, 7.5469, 7.9735,
1321 7.9511, 8.3014, 8.6418, 8.4757, 8.8256, 9.2294, 9.6923, 10.033,
1322 10.842, 11.851, 11.78, 8.8435, 9.1381, 9.5956, 10.076, 10.629,
1323 11.22, 11.883, 12.69, 13.163, 13.974, 14.846, 16.027, 17.053,
1324 18.148, 19.715, 20.907, 22.163, 23.956, 25.235, 26.566, 27.94,
1325 29.576, 30.956, 32.432, 35.337, 39.911, 41.128, 42.625, 44.386,
1326 46.369, 48.619, 51.031, 53.674, 56.825, 59.921, 63.286, 66.929,
1327 70.859, 75.081, 79.618, 84.513, 89.739, 95.335, 101.35, 107.76,
1328 114.63, 121.98, 129.87, 138.3, 147.34, 157.04, 167.56, 178.67,
1329 190.61, 203.43, 217.19, 231.99, 247.88, 264.98, 283.37, 303.17,
1330 324.49, 347.47, 372.25, 398.98, 427.85, 459.06, 492.8, 529.31,
1331 568.89, 611.79, 658.35, 708.91, 763.87, 823.65, 888.72, 959.58,
1332 1036.8, 1121.8, 1213.9, 1314.3, 1423.8, 1543., 1672.8, 1813.4,
1333 1966.1, 2131.4, 2309.5, 2499.3, 2705., 2925.7, 3161.6, 3411.3,
1334 3611.5, 3889.2, 4191.1, 4519.3, 4877.9, 5272.9, 5712.9, 6142.7,
1335 6719.6, 7385., 8145., 8977.7, 9831.9, 10827., 11934., 13063.,
1336 14434., 15878., 17591., 19435., 21510., 23835., 26835., 29740.,
1337 32878., 36305., 39830., 43273., 46931., 50499., 49586., 51598.,
1338 53429., 54619., 55081., 55102., 54485., 53487., 52042., 42689.,
1339 42607., 44020., 47994., 54169., 53916., 55808., 56642., 46049.,
1340 44243., 32929., 30658., 21963., 20835., 15962., 13679., 17652.,
1341 19680., 22388., 25625., 29184., 32520., 35720., 38414., 40523.,
1342 49228., 48173., 45678., 41768., 37600., 41313., 42654., 44465.,
1343 55736., 56630., 65409., 63308., 66572., 61845., 60379., 56777.,
1344 51920., 46601., 41367., 36529., 32219., 28470., 25192., 22362.,
1345 19907., 17772., 15907., 14273., 12835., 11567., 10445., 9450.2,
1346 8565.1, 7776., 7070.8, 6439.2, 5872.3, 5362.4, 4903., 4488.3,
1347 4113.4, 3773.8, 3465.8, 3186.1, 2931.7, 2700.1, 2488.8, 2296.,
1348 2119.8, 1958.6, 1810.9, 1675.6, 1551.4, 1437.3, 1332.4, 1236.,
1349 1147.2, 1065.3, 989.86, 920.22, 855.91, 796.48, 741.53, 690.69,
1350 643.62, 600.02, 559.6, 522.13, 487.35, 455.06, 425.08, 397.21,
1351 371.3, 347.2, 324.78, 303.9, 284.46, 266.34, 249.45, 233.7,
1352 219.01, 205.3, 192.5, 180.55, 169.38, 158.95, 149.2, 140.07,
1353 131.54, 123.56, 116.09, 109.09, 102.54, 96.405, 90.655, 85.266,
1354 80.213, 75.475, 71.031, 66.861, 62.948, 59.275, 55.827, 52.587,
1355 49.544, 46.686, 43.998, 41.473, 39.099, 36.867, 34.768, 32.795,
1356 30.939, 29.192, 27.546, 25.998, 24.539, 23.164, 21.869, 20.65,
1357 19.501, 18.419, 17.399, 16.438, 15.532, 14.678, 13.874, 13.115,
1358 12.4, 11.726, 11.088, 10.488, 9.921, 9.3846, 8.8784, 8.3996,
1359 7.9469, 7.5197, 7.1174, 6.738, 6.379, 6.0409, 5.7213, 5.419,
1360 5.1327, 4.8611, 4.6046, 4.3617, 4.1316, 3.9138, 3.7077, 3.5125,
1361 3.3281, 3.1536, 2.9885, 2.8323, 2.6846, 2.5447, 2.4124, 2.2871,
1362 2.1686, 2.0564, 1.9501, 1.8495, 1.7543, 1.6641, 1.5787, 1.4978,
1363 1.4212, 1.3486, 1.2799, 1.2147, 1.1529, 1.0943, 1.0388, .98602,
1364 .93596, .8886, .84352, .80078, .76029, .722, .68585, .65161,
1365 .61901, .58808, .55854, .53044, .5039, .47853, .45459, .43173,
1366 .41008, .38965, .37021, .35186, .33444, .31797, .30234, .28758,
1367 .2736, .26036, .24764, .2357, .22431, .21342, .20295, .19288,
1368 .18334, .17444, .166, .15815, .15072, .14348, .13674, .13015,
1369 .12399, .11807, .11231, .10689, .10164, .096696, .091955,
1370 .087476, .083183, .079113, .075229, .071536, .068026, .064698,
1371 .06154, .058544, .055699, .052997, .050431, .047993, .045676,
1372 .043475, .041382, .039392, .037501, .035702, .033991, .032364,
1373 .030817, .029345, .027945, .026613, .025345, .024139, .022991,
1374 .021899, .02086, .019871, .018929, .018033, .01718, .016368,
1375 .015595, .014859, .014158, .013491, .012856, .012251, .011675,
1376 .011126, .010604, .010107, .0096331, .009182, .0087523, .0083431,
1377 .0079533, .0075821, .0072284, .0068915, .0065706, .0062649,
1378 .0059737, .0056963, .005432, .0051802, .0049404, .0047118,
1379 .0044941, .0042867, .0040891, .0039009, .0037216, .0035507,
1380 .003388, .0032329, .0030852, .0029445, .0028105, .0026829,
1381 .0025613, .0024455, .0023353, .0022303, .0021304, .0020353,
1382 .0019448, .0018587, .0017767, .0016988, .0016247, .0015543,
1383 .0014874, .0014238, .0013635, .0013062, .0012519, .0012005,
1384 .0011517, .0011057, .0010621, .001021, 9.8233e-4, 9.4589e-4,
1385 9.1167e-4, 8.7961e-4, 8.4964e-4, 8.2173e-4, 7.9582e-4, 7.7189e-4,
1386 7.499e-4, 7.2983e-4, 7.1167e-4, 6.9542e-4, 6.8108e-4, 6.6866e-4,
1387 6.5819e-4, 6.4971e-4, 6.4328e-4, 6.3895e-4, 6.3681e-4, 6.3697e-4,
1388 6.3956e-4, 6.4472e-4, 6.5266e-4, 6.6359e-4, 6.778e-4, 6.9563e-4,
1389 7.1749e-4, 7.4392e-4, 7.7556e-4, 8.1028e-4, 8.4994e-4, 8.8709e-4,
1390 9.3413e-4, 9.6953e-4, .0010202, .0010738, .0010976, .0011507,
1391 .0011686, .0012264, .001291, .0013346, .0014246, .0015293,
1392 .0016359, .0017824, .0019255, .0020854, .002247, .0024148,
1393 .0026199, .0027523, .0029704, .0030702, .0033047, .0035013,
1394 .0037576, .0040275, .0043089, .0046927, .0049307, .0053486,
1395 .0053809, .0056699, .0059325, .0055488, .005634, .0056392,
1396 .004946, .0048855, .0048208, .0044386, .0045498, .0046377,
1397 .0048939, .0052396, .0057324, .0060859, .0066906, .0071148,
1398 .0077224, .0082687, .008769, .0084471, .008572, .0087729,
1399 .008775, .0090742, .0080704, .0080288, .0085747, .0086087,
1400 .0086408, .0088752, .0089381, .0089757, .0093532, .0092824,
1401 .0092566, .0092645, .0092735, .009342, .0095806, .0097991,
1402 .010213, .010611, .011129, .011756, .013237, .01412, .015034,
1403 .015936, .01682, .018597, .019315, .019995, .020658, .021289,
1404 .022363, .022996, .023716, .024512, .025434, .026067, .027118,
1405 .028396, .029865, .031442, .033253, .03525, .037296, .039701,
1406 .042356, .045154, .048059, .051294, .054893, .058636, .061407,
1407 .065172, .068974, .072676, .073379, .076547, .079556, .079134,
1408 .082308, .085739, .090192, .09359, .099599, .10669, .11496,
1409 .1244, .13512, .14752, .14494, .15647, .1668, .17863, .19029,
1410 .20124, .20254, .21179, .21982, .21625, .22364, .23405, .23382,
1411 .2434, .25708, .26406, .27621, .28909, .30395, .31717, .33271,
1412 .3496, .36765, .38774, .40949, .446, .46985, .49846, .5287, .562,
1413 .59841, .64598, .68834, .7327, .78978, .8373, .88708, .94744,
1414 1.0006, 1.0574, 1.1215, 1.1856, 1.2546, 1.3292, 1.4107, 1.4974,
1415 1.5913, 1.6931, 1.8028, 1.9212, 2.0492, 2.1874, 2.3365, 2.4978,
1416 2.6718, 2.8588, 3.062, 3.2818, 3.5188, 3.7752, 4.0527, 4.3542,
1417 4.6782, 5.0312, 5.4123, 5.8246, 6.2639, 6.7435, 7.2636, 7.8064,
1418 8.4091, 9.0696, 9.7677, 10.548, 11.4, 12.309, 13.324, 14.284,
1419 15.445, 16.687, 18.019, 19.403, 20.847, 22.366, 23.925, 25.537,
1420 27.213, 28.069, 29.864, 31.829, 33.988, 35.856, 38.829, 42.321,
1421 46.319, 50.606, 55.126, 59.126, 64.162, 68.708, 74.615, 81.176,
1422 87.739, 95.494, 103.83, 113.38, 123.99, 135.8, 148.7, 162.58,
1423 176.32, 192.6, 211.47, 232.7, 252.64, 277.41, 305.38, 333.44,
1424 366.42, 402.66, 442.14, 484.53, 526.42, 568.15, 558.78, 582.6,
1425 600.98, 613.94, 619.44, 618.24, 609.84, 595.96, 484.86, 475.59,
1426 478.49, 501.56, 552.19, 628.44, 630.39, 658.92, 671.96, 562.7,
1427 545.88, 423.43, 400.14, 306.59, 294.13, 246.8, 226.51, 278.21,
1428 314.39, 347.22, 389.13, 433.16, 477.48, 521.67, 560.54, 683.6,
1429 696.37, 695.91, 683.1, 658.24, 634.89, 698.85, 742.87, 796.66,
1430 954.49, 1009.5, 1150.5, 1179.1, 1267.9, 1272.4, 1312.7, 1330.4,
1431 1331.6, 1315.8, 1308.3, 1293.3, 1274.6, 1249.5, 1213.2, 1172.1,
1432 1124.4, 930.33, 893.36, 871.27, 883.54, 940.76, 1036., 1025.6,
1433 1053.1, 914.51, 894.15, 865.03, 670.63, 508.41, 475.15, 370.85,
1434 361.06, 319.38, 312.75, 331.87, 367.13, 415., 467.94, 525.49,
1435 578.41, 624.66, 794.82, 796.97, 780.29, 736.49, 670.18, 603.75,
1436 659.67, 679.8, 857.12, 884.05, 900.65, 1046.1, 1141.9, 1083.,
1437 1089.2, 1e3, 947.08, 872.31, 787.91, 704.75, 624.93, 553.68,
1438 489.91, 434.21, 385.64, 343.3, 306.42, 274.18, 245.94, 221.11,
1439 199.23, 179.88, 162.73, 147.48, 133.88, 121.73, 110.86, 101.1,
1440 92.323, 84.417, 77.281, 70.831, 64.991, 59.694, 54.884, 50.509,
1441 46.526, 42.893, 39.58, 36.549, 33.776, 31.236, 28.907, 26.77,
1442 24.805, 23., 21.339, 19.81, 18.404, 17.105, 15.909, 14.801,
1443 13.778, 12.83, 11.954, 11.142, 10.389, 9.691, 9.0434, 8.4423,
1444 7.8842, 7.3657, 6.8838, 6.4357, 6.0189, 5.6308, 5.2696, 4.9332,
1445 4.6198, 4.3277, 4.0553, 3.8012, 3.5639, 3.3424, 3.1355, 2.9422,
1446 2.7614, 2.5924, 2.4343, 2.2864, 2.148, 2.0184, 1.8971, 1.7835,
1447 1.677, 1.5773, 1.4838, 1.3961, 1.3139, 1.2369, 1.1645, 1.0966,
1448 1.0329, .97309, .91686, .86406, .81439, .76767, .72381, .68252,
1449 .64359, .60695, .57247, .54008, .50957, .48092, .45401, .42862,
1450 .40465, .38202, .36072, .34052, .3216, .30386, .28711, .27135,
1451 .25651, .24252, .2293, .21689, .20517, .19416, .18381, .17396,
1452 .16469
1453 };
1454
1455 static double co2230[2001] = { 2.743e-5, 2.8815e-5, 3.027e-5, 3.1798e-5,
1456 3.3405e-5, 3.5094e-5, 3.6869e-5, 3.8734e-5, 4.0694e-5, 4.2754e-5,
1457 4.492e-5, 4.7196e-5, 4.9588e-5, 5.2103e-5, 5.4747e-5, 5.7525e-5,
1458 6.0446e-5, 6.3516e-5, 6.6744e-5, 7.0137e-5, 7.3704e-5, 7.7455e-5,
1459 8.1397e-5, 8.5543e-5, 8.9901e-5, 9.4484e-5, 9.9302e-5, 1.0437e-4,
1460 1.097e-4, 1.153e-4, 1.2119e-4, 1.2738e-4, 1.3389e-4, 1.4074e-4,
1461 1.4795e-4, 1.5552e-4, 1.6349e-4, 1.7187e-4, 1.8068e-4, 1.8995e-4,
1462 1.997e-4, 2.0996e-4, 2.2075e-4, 2.321e-4, 2.4403e-4, 2.5659e-4,
1463 2.698e-4, 2.837e-4, 2.9832e-4, 3.137e-4, 3.2988e-4, 3.4691e-4,
1464 3.6483e-4, 3.8368e-4, 4.0351e-4, 4.2439e-4, 4.4635e-4, 4.6947e-4,
1465 4.9379e-4, 5.1939e-4, 5.4633e-4, 5.7468e-4, 6.0452e-4, 6.3593e-4,
1466 6.69e-4, 7.038e-4, 7.4043e-4, 7.79e-4, 8.1959e-4, 8.6233e-4,
1467 9.0732e-4, 9.5469e-4, .0010046, .0010571, .0011124, .0011706,
1468 .0012319, .0012964, .0013644, .001436, .0015114, .0015908,
1469 .0016745, .0017625, .0018553, .0019531, .002056, .0021645,
1470 .0022788, .0023992, .002526, .0026596, .0028004, .0029488,
1471 .0031052, .0032699, .0034436, .0036265, .0038194, .0040227,
1472 .0042369, .0044628, .0047008, .0049518, .0052164, .0054953,
1473 .0057894, .0060995, .0064265, .0067713, .007135, .0075184,
1474 .0079228, .0083494, .0087993, .0092738, .0097745, .010303,
1475 .01086, .011448, .012068, .012722, .013413, .014142, .014911,
1476 .015723, .01658, .017484, .018439, .019447, .020511, .021635,
1477 .022821, .024074, .025397, .026794, .02827, .029829, .031475,
1478 .033215, .035052, .036994, .039045, .041213, .043504, .045926,
1479 .048485, .05119, .05405, .057074, .060271, .063651, .067225,
1480 .071006, .075004, .079233, .083708, .088441, .093449, .098749,
1481 .10436, .11029, .11657, .12322, .13026, .13772, .14561, .15397,
1482 .16282, .1722, .18214, .19266, .20381, .21563, .22816, .24143,
1483 .2555, .27043, .28625, .30303, .32082, .3397, .35972, .38097,
1484 .40352, .42746, .45286, .47983, .50847, .53888, .57119, .6055,
1485 .64196, .6807, .72187, .76564, .81217, .86165, .91427, .97025,
1486 1.0298, 1.0932, 1.1606, 1.2324, 1.3088, 1.3902, 1.477, 1.5693,
1487 1.6678, 1.7727, 1.8845, 2.0038, 2.131, 2.2666, 2.4114, 2.5659,
1488 2.7309, 2.907, 3.0951, 3.2961, 3.5109, 3.7405, 3.986, 4.2485,
1489 4.5293, 4.8299, 5.1516, 5.4961, 5.8651, 6.2605, 6.6842, 7.1385,
1490 7.6256, 8.1481, 8.7089, 9.3109, 9.9573, 10.652, 11.398, 12.2,
1491 13.063, 13.992, 14.99, 16.064, 17.222, 18.469, 19.813, 21.263,
1492 22.828, 24.516, 26.34, 28.31, 30.437, 32.738, 35.226, 37.914,
1493 40.824, 43.974, 47.377, 51.061, 55.011, 59.299, 63.961, 69.013,
1494 74.492, 80.444, 86.919, 93.836, 101.23, 109.25, 117.98, 127.47,
1495 137.81, 149.07, 161.35, 174.75, 189.42, 205.49, 223.02, 242.26,
1496 263.45, 286.75, 311.94, 340.01, 370.86, 404.92, 440.44, 480.27,
1497 525.17, 574.71, 626.22, 686.8, 754.38, 827.07, 913.38, 1011.7,
1498 1121.5, 1161.6, 1289.5, 1432.2, 1595.4, 1777., 1983.3, 2216.1,
1499 2485.7, 2788.3, 3101.5, 3481., 3902.1, 4257.1, 4740., 5272.8,
1500 5457.9, 5946.2, 6505.3, 6668.4, 7302.4, 8061.6, 9015.8, 9908.3,
1501 11613., 13956., 3249.6, 3243., 2901.5, 2841.3, 2729.6, 2558.2,
1502 1797.8, 1583.2, 1386., 1233.5, 787.74, 701.46, 761.66, 767.21,
1503 722.83, 1180.6, 1332.1, 1461.6, 2032.9, 2166., 2255.9, 2294.7,
1504 2587.2, 2396.5, 2122.4, 12553., 10784., 9832.5, 8827.3, 8029.1,
1505 7377.9, 7347.1, 6783.8, 6239.1, 5721.1, 5503., 4975.1, 4477.8,
1506 4021.3, 3676.8, 3275.3, 2914.9, 2597.4, 2328.2, 2075.4, 1857.6,
1507 1663.6, 1493.3, 1343.8, 1213.3, 1095.6, 1066.5, 958.91, 865.15,
1508 783.31, 714.35, 650.77, 593.98, 546.2, 499.9, 457.87, 421.75,
1509 387.61, 355.25, 326.62, 299.7, 275.21, 253.17, 232.83, 214.31,
1510 197.5, 182.08, 167.98, 155.12, 143.32, 132.5, 122.58, 113.48,
1511 105.11, 97.415, 90.182, 83.463, 77.281, 71.587, 66.341, 61.493,
1512 57.014, 53.062, 49.21, 45.663, 42.38, 39.348, 36.547, 33.967,
1513 31.573, 29.357, 27.314, 25.415, 23.658, 22.03, 20.524, 19.125,
1514 17.829, 16.627, 15.511, 14.476, 13.514, 12.618, 11.786, 11.013,
1515 10.294, 9.6246, 9.0018, 8.4218, 7.8816, 7.3783, 6.9092, 6.4719,
1516 6.0641, 5.6838, 5.3289, 4.998, 4.6893, 4.4014, 4.1325, 3.8813,
1517 3.6469, 3.4283, 3.2241, 3.035, 2.8576, 2.6922, 2.5348, 2.3896,
1518 2.2535, 2.1258, 2.0059, 1.8929, 1.7862, 1.6854, 1.5898, 1.4992,
1519 1.4017, 1.3218, 1.2479, 1.1809, 1.1215, 1.0693, 1.0116, .96016,
1520 .9105, .84859, .80105, .74381, .69982, .65127, .60899, .57843,
1521 .54592, .51792, .49336, .47155, .45201, .43426, .41807, .40303,
1522 .38876, .3863, .37098, .35492, .33801, .32032, .30341, .29874,
1523 .29193, .28689, .29584, .29155, .29826, .29195, .29287, .2904,
1524 .28199, .27709, .27162, .26622, .26133, .25676, .25235, .23137,
1525 .22365, .21519, .20597, .19636, .18699, .16485, .16262, .16643,
1526 .17542, .18198, .18631, .16759, .16338, .13505, .1267, .10053,
1527 .092554, .074093, .062159, .055523, .054849, .05401, .05528,
1528 .058982, .07952, .08647, .093244, .099285, .10393, .10661,
1529 .12072, .11417, .10396, .093265, .089137, .088909, .10902,
1530 .11277, .13625, .13565, .14907, .14167, .1428, .13744, .12768,
1531 .11382, .10244, .091686, .08109, .071739, .063616, .056579,
1532 .050504, .045251, .040689, .036715, .033237, .030181, .027488,
1533 .025107, .022998, .021125, .01946, .017979, .016661, .015489,
1534 .014448, .013526, .012712, .011998, .011375, .010839, .010384,
1535 .010007, .0097053, .0094783, .0093257, .0092489, .0092504,
1536 .0093346, .0095077, .0097676, .01012, .01058, .011157, .011844,
1537 .012672, .013665, .014766, .015999, .017509, .018972, .020444,
1538 .022311, .023742, .0249, .025599, .026981, .026462, .025143,
1539 .025066, .022814, .020458, .020026, .019142, .020189, .022371,
1540 .024163, .023728, .02199, .019506, .018591, .015576, .012784,
1541 .011744, .0094777, .0079148, .0070652, .006986, .0071758,
1542 .008086, .0098025, .01087, .013609, .016764, .018137, .021061,
1543 .023498, .023576, .023965, .022828, .021519, .021283, .023364,
1544 .026457, .029782, .030856, .033486, .035515, .035543, .036558,
1545 .037198, .037472, .037045, .037284, .03777, .038085, .038366,
1546 .038526, .038282, .038915, .037697, .035667, .032941, .031959,
1547 .028692, .025918, .024596, .025592, .027873, .028935, .02984,
1548 .028148, .025305, .021912, .020454, .016732, .013357, .01205,
1549 .009731, .0079881, .0077704, .0074387, .0083895, .0096776,
1550 .010326, .01293, .015955, .019247, .020145, .02267, .024231,
1551 .024184, .022131, .019784, .01955, .01971, .022119, .025116,
1552 .027978, .028107, .029808, .030701, .029164, .028551, .027286,
1553 .024946, .023259, .020982, .019221, .017471, .015643, .014074,
1554 .01261, .011301, .010116, .0090582, .0081036, .0072542, .0065034,
1555 .0058436, .0052571, .0047321, .0042697, .0038607, .0034977,
1556 .0031747, .0028864, .0026284, .002397, .002189, .0020017,
1557 .0018326, .0016798, .0015414, .0014159, .0013019, .0011983,
1558 .0011039, .0010177, 9.391e-4, 8.6717e-4, 8.0131e-4, 7.4093e-4,
1559 6.8553e-4, 6.3464e-4, 5.8787e-4, 5.4487e-4, 5.0533e-4, 4.69e-4,
1560 4.3556e-4, 4.0474e-4, 3.7629e-4, 3.5e-4, 3.2569e-4, 3.032e-4,
1561 2.8239e-4, 2.6314e-4, 2.4535e-4, 2.2891e-4, 2.1374e-4, 1.9975e-4,
1562 1.8685e-4, 1.7498e-4, 1.6406e-4, 1.5401e-4, 1.4479e-4, 1.3633e-4,
1563 1.2858e-4, 1.2148e-4, 1.1499e-4, 1.0907e-4, 1.0369e-4, 9.8791e-5,
1564 9.4359e-5, 9.0359e-5, 8.6766e-5, 8.3555e-5, 8.0703e-5, 7.8192e-5,
1565 7.6003e-5, 7.4119e-5, 7.2528e-5, 7.1216e-5, 7.0171e-5, 6.9385e-5,
1566 6.8848e-5, 6.8554e-5, 6.8496e-5, 6.8669e-5, 6.9069e-5, 6.9694e-5,
1567 7.054e-5, 7.1608e-5, 7.2896e-5, 7.4406e-5, 7.6139e-5, 7.8097e-5,
1568 8.0283e-5, 8.2702e-5, 8.5357e-5, 8.8255e-5, 9.1402e-5, 9.4806e-5,
1569 9.8473e-5, 1.0241e-4, 1.0664e-4, 1.1115e-4, 1.1598e-4, 1.2112e-4,
1570 1.2659e-4, 1.3241e-4, 1.3859e-4, 1.4515e-4, 1.521e-4, 1.5947e-4,
1571 1.6728e-4, 1.7555e-4, 1.8429e-4, 1.9355e-4, 2.0334e-4, 2.1369e-4,
1572 2.2463e-4, 2.3619e-4, 2.4841e-4, 2.6132e-4, 2.7497e-4, 2.8938e-4,
1573 3.0462e-4, 3.2071e-4, 3.3771e-4, 3.5567e-4, 3.7465e-4, 3.947e-4,
1574 4.1588e-4, 4.3828e-4, 4.6194e-4, 4.8695e-4, 5.1338e-4, 5.4133e-4,
1575 5.7087e-4, 6.0211e-4, 6.3515e-4, 6.701e-4, 7.0706e-4, 7.4617e-4,
1576 7.8756e-4, 8.3136e-4, 8.7772e-4, 9.2681e-4, 9.788e-4, .0010339,
1577 .0010922, .001154, .0012195, .0012889, .0013626, .0014407,
1578 .0015235, .0016114, .0017048, .0018038, .001909, .0020207,
1579 .0021395, .0022657, .0023998, .0025426, .0026944, .002856,
1580 .0030281, .0032114, .0034068, .003615, .0038371, .004074,
1581 .004327, .0045971, .0048857, .0051942, .0055239, .0058766,
1582 .0062538, .0066573, .0070891, .007551, .0080455, .0085747,
1583 .0091412, .0097481, .010397, .011092, .011837, .012638, .013495,
1584 .014415, .01541, .016475, .017621, .018857, .020175, .02162,
1585 .023185, .024876, .02672, .028732, .030916, .033319, .035939,
1586 .038736, .041847, .04524, .048715, .052678, .056977, .061203,
1587 .066184, .07164, .076952, .083477, .090674, .098049, .10697,
1588 .1169, .1277, .14011, .15323, .1684, .18601, .20626, .22831,
1589 .25417, .28407, .31405, .34957, .38823, .41923, .46026, .50409,
1590 .51227, .54805, .57976, .53818, .55056, .557, .46741, .46403,
1591 .4636, .42265, .45166, .49852, .56663, .34306, .17779, .17697,
1592 .18346, .19129, .20014, .21778, .23604, .25649, .28676, .31238,
1593 .33856, .39998, .4288, .46568, .56654, .60786, .64473, .76466,
1594 .7897, .80778, .86443, .85736, .84798, .84157, 1.1385, 1.2446,
1595 1.1923, 1.1552, 1.1338, 1.1266, 1.1292, 1.1431, 1.1683, 1.2059,
1596 1.2521, 1.3069, 1.3712, 1.4471, 1.5275, 1.6165, 1.7145, 1.8189,
1597 1.9359, 2.065, 2.2007, 2.3591, 2.5362, 2.7346, 2.9515, 3.2021,
1598 3.4851, 3.7935, 4.0694, 4.4463, 4.807, 5.2443, 5.7178, 6.2231,
1599 6.4796, 6.9461, 7.4099, 7.3652, 7.7182, 8.048, 7.7373, 8.0363,
1600 8.3855, 8.8044, 9.0257, 9.8574, 10.948, 10.563, 6.8979, 7.0744,
1601 7.4121, 7.7663, 8.1768, 8.6243, 9.1437, 9.7847, 10.182, 10.849,
1602 11.572, 12.602, 13.482, 14.431, 15.907, 16.983, 18.11, 19.884,
1603 21.02, 22.18, 23.355, 24.848, 25.954, 27.13, 30.186, 34.893,
1604 35.682, 36.755, 38.111, 39.703, 41.58, 43.606, 45.868, 48.573,
1605 51.298, 54.291, 57.559, 61.116, 64.964, 69.124, 73.628, 78.471,
1606 83.683, 89.307, 95.341, 101.84, 108.83, 116.36, 124.46, 133.18,
1607 142.57, 152.79, 163.69, 175.43, 188.11, 201.79, 216.55, 232.51,
1608 249.74, 268.38, 288.54, 310.35, 333.97, 359.55, 387.26, 417.3,
1609 449.88, 485.2, 523.54, 565.14, 610.28, 659.31, 712.56, 770.43,
1610 833.36, 901.82, 976.36, 1057.6, 1146.8, 1243.8, 1350., 1466.3,
1611 1593.6, 1732.7, 1884.1, 2049.1, 2228.2, 2421.9, 2629.4, 2853.7,
1612 3094.4, 3351.1, 3622.3, 3829.8, 4123.1, 4438.3, 4777.2, 5144.1,
1613 5545.4, 5990.5, 6404.5, 6996.8, 7687.6, 8482.9, 9349.4, 10203.,
1614 11223., 12358., 13493., 14916., 16416., 18236., 20222., 22501.,
1615 25102., 28358., 31707., 35404., 39538., 43911., 48391., 53193.,
1616 58028., 58082., 61276., 64193., 66294., 67480., 67921., 67423.,
1617 66254., 64341., 51737., 51420., 53072., 58145., 66195., 65358.,
1618 67377., 67869., 53509., 50553., 35737., 32425., 21704., 19974.,
1619 14457., 12142., 16798., 19489., 23049., 27270., 31910., 36457.,
1620 40877., 44748., 47876., 59793., 58626., 55454., 50337., 44893.,
1621 50228., 52216., 54747., 69541., 70455., 81014., 77694., 80533.,
1622 73953., 70927., 65539., 59002., 52281., 45953., 40292., 35360.,
1623 31124., 27478., 24346., 21647., 19308., 17271., 15491., 13927.,
1624 12550., 11331., 10250., 9288.8, 8431.4, 7664.9, 6978.3, 6361.8,
1625 5807.4, 5307.7, 4856.8, 4449., 4079.8, 3744.9, 3440.8, 3164.2,
1626 2912.3, 2682.7, 2473., 2281.4, 2106., 1945.3, 1797.9, 1662.5,
1627 1538.1, 1423.6, 1318.1, 1221., 1131.5, 1049., 972.99, 902.87,
1628 838.01, 777.95, 722.2, 670.44, 622.35, 577.68, 536.21, 497.76,
1629 462.12, 429.13, 398.61, 370.39, 344.29, 320.16, 297.85, 277.2,
1630 258.08, 240.38, 223.97, 208.77, 194.66, 181.58, 169.43, 158.15,
1631 147.67, 137.92, 128.86, 120.44, 112.6, 105.3, 98.499, 92.166,
1632 86.264, 80.763, 75.632, 70.846, 66.381, 62.213, 58.321, 54.685,
1633 51.288, 48.114, 45.145, 42.368, 39.772, 37.341, 35.065, 32.937,
1634 30.943, 29.077, 27.33, 25.693, 24.158, 22.717, 21.367, 20.099,
1635 18.909, 17.792, 16.744, 15.761, 14.838, 13.971, 13.157, 12.393,
1636 11.676, 11.003, 10.369, 9.775, 9.2165, 8.6902, 8.1963, 7.7314,
1637 7.2923, 6.8794, 6.4898, 6.122, 5.7764, 5.4525, 5.1484, 4.8611,
1638 4.5918, 4.3379, 4.0982, 3.8716, 3.6567, 3.4545, 3.2634, 3.0828,
1639 2.9122, 2.7512, 2.5993, 2.4561, 2.3211, 2.1938, 2.0737, 1.9603,
1640 1.8534, 1.7525, 1.6572, 1.5673, 1.4824, 1.4022, 1.3265, 1.2551,
1641 1.1876, 1.1239, 1.0637, 1.0069, .9532, .90248, .85454, .80921,
1642 .76631, .72569, .6872, .65072, .61635, .5836, .55261, .52336,
1643 .49581, .46998, .44559, .42236, .40036, .37929, .35924, .34043,
1644 .32238, .30547, .28931, .27405, .25975, .24616, .23341, .22133,
1645 .20997, .19924, .18917, .17967, .17075, .16211, .15411, .14646,
1646 .13912, .13201, .12509, .11857, .11261, .10698, .10186, .097039,
1647 .092236, .087844, .083443, .07938, .075452, .071564, .067931,
1648 .064389, .061078, .057901, .054921, .052061, .049364, .046789,
1649 .04435, .042044, .039866, .037808, .035863, .034023, .032282,
1650 .030634, .029073, .027595, .026194, .024866, .023608, .022415,
1651 .021283, .02021, .019193, .018228, .017312, .016443, .015619,
1652 .014837, .014094, .01339, .012721, .012086, .011483, .010911,
1653 .010368, .009852, .0093623, .0088972, .0084556, .0080362,
1654 .0076379, .0072596, .0069003, .006559, .0062349, .0059269,
1655 .0056344, .0053565, .0050925, .0048417, .0046034, .004377,
1656 .0041618, .0039575, .0037633, .0035788, .0034034, .0032368,
1657 .0030785, .002928, .0027851, .0026492, .0025201, .0023975,
1658 .0022809, .0021701, .0020649, .0019649, .0018699, .0017796,
1659 .0016938, .0016122, .0015348, .0014612, .0013913, .001325,
1660 .0012619, .0012021, .0011452, .0010913, .0010401, 9.9149e-4,
1661 9.454e-4, 9.0169e-4, 8.6024e-4, 8.2097e-4, 7.8377e-4, 7.4854e-4,
1662 7.1522e-4, 6.8371e-4, 6.5393e-4, 6.2582e-4, 5.9932e-4, 5.7435e-4,
1663 5.5087e-4, 5.2882e-4, 5.0814e-4, 4.8881e-4, 4.7076e-4, 4.5398e-4,
1664 4.3843e-4, 4.2407e-4, 4.109e-4, 3.9888e-4, 3.88e-4, 3.7826e-4,
1665 3.6963e-4, 3.6213e-4, 3.5575e-4, 3.505e-4, 3.464e-4, 3.4346e-4,
1666 3.4173e-4, 3.4125e-4, 3.4206e-4, 3.4424e-4, 3.4787e-4, 3.5303e-4,
1667 3.5986e-4, 3.6847e-4, 3.7903e-4, 3.9174e-4, 4.0681e-4, 4.2455e-4,
1668 4.4527e-4, 4.6942e-4, 4.9637e-4, 5.2698e-4, 5.5808e-4, 5.9514e-4,
1669 6.2757e-4, 6.689e-4, 7.1298e-4, 7.3955e-4, 7.8403e-4, 8.0449e-4,
1670 8.5131e-4, 9.0256e-4, 9.3692e-4, .0010051, .0010846, .0011678,
1671 .001282, .0014016, .0015355, .0016764, .0018272, .0020055,
1672 .0021455, .0023421, .0024615, .0026786, .0028787, .0031259,
1673 .0034046, .0036985, .0040917, .0043902, .0048349, .0049531,
1674 .0052989, .0056148, .0052452, .0053357, .005333, .0045069,
1675 .0043851, .004253, .003738, .0038084, .0039013, .0041505,
1676 .0045372, .0050569, .0054507, .0061267, .0066122, .0072449,
1677 .0078012, .0082651, .0076538, .0076573, .0076806, .0075227,
1678 .0076269, .0063758, .006254, .0067749, .0067909, .0068231,
1679 .0072143, .0072762, .0072954, .007679, .0075107, .0073658,
1680 .0072441, .0071074, .0070378, .007176, .0072472, .0075844,
1681 .0079291, .008412, .0090165, .010688, .011535, .012375, .013166,
1682 .013895, .015567, .016011, .016392, .016737, .017043, .017731,
1683 .018031, .018419, .018877, .019474, .019868, .020604, .021538,
1684 .022653, .023869, .025288, .026879, .028547, .030524, .03274,
1685 .035132, .03769, .040567, .043793, .047188, .049962, .053542,
1686 .057205, .060776, .061489, .064419, .067124, .065945, .068487,
1687 .071209, .074783, .077039, .082444, .08902, .09692, .10617,
1688 .11687, .12952, .12362, .13498, .14412, .15492, .16519, .1744,
1689 .17096, .17714, .18208, .17363, .17813, .18564, .18295, .19045,
1690 .20252, .20815, .21844, .22929, .24229, .25321, .26588, .2797,
1691 .29465, .31136, .32961, .36529, .38486, .41027, .43694, .4667,
1692 .49943, .54542, .58348, .62303, .67633, .71755, .76054, .81371,
1693 .85934, .90841, .96438, 1.0207, 1.0821, 1.1491, 1.2226, 1.3018,
1694 1.388, 1.4818, 1.5835, 1.6939, 1.8137, 1.9435, 2.0843, 2.237,
1695 2.4026, 2.5818, 2.7767, 2.9885, 3.2182, 3.4679, 3.7391, 4.0349,
1696 4.3554, 4.7053, 5.0849, 5.4986, 5.9436, 6.4294, 6.9598, 7.5203,
1697 8.143, 8.8253, 9.5568, 10.371, 11.267, 12.233, 13.31, 14.357,
1698 15.598, 16.93, 18.358, 19.849, 21.408, 23.04, 24.706, 26.409,
1699 28.153, 28.795, 30.549, 32.43, 34.49, 36.027, 38.955, 42.465,
1700 46.565, 50.875, 55.378, 59.002, 63.882, 67.949, 73.693, 80.095,
1701 86.403, 94.264, 102.65, 112.37, 123.3, 135.54, 149.14, 163.83,
1702 179.17, 196.89, 217.91, 240.94, 264.13, 292.39, 324.83, 358.21,
1703 397.16, 440.5, 488.6, 541.04, 595.3, 650.43, 652.03, 688.74,
1704 719.47, 743.54, 757.68, 762.35, 756.43, 741.42, 595.43, 580.97,
1705 580.83, 605.68, 667.88, 764.49, 759.93, 789.12, 798.17, 645.66,
1706 615.65, 455.05, 421.09, 306.45, 289.14, 235.7, 215.52, 274.57,
1707 316.53, 357.73, 409.89, 465.06, 521.84, 579.02, 630.64, 794.46,
1708 813., 813.56, 796.25, 761.57, 727.97, 812.14, 866.75, 932.5,
1709 1132.8, 1194.8, 1362.2, 1387.2, 1482.3, 1479.7, 1517.9, 1533.1,
1710 1534.2, 1523.3, 1522.5, 1515.5, 1505.2, 1486.5, 1454., 1412.,
1711 1358.8, 1107.8, 1060.9, 1033.5, 1048.2, 1122.4, 1248.9, 1227.1,
1712 1255.4, 1058.9, 1020.7, 970.59, 715.24, 512.56, 468.47, 349.3,
1713 338.26, 299.22, 301.26, 332.38, 382.08, 445.49, 515.87, 590.85,
1714 662.3, 726.05, 955.59, 964.11, 945.17, 891.48, 807.11, 720.9,
1715 803.36, 834.46, 1073.9, 1107.1, 1123.6, 1296., 1393.7, 1303.1,
1716 1284.3, 1161.8, 1078.8, 976.13, 868.72, 767.4, 674.72, 593.73,
1717 523.12, 462.24, 409.75, 364.34, 325., 290.73, 260.76, 234.46,
1718 211.28, 190.78, 172.61, 156.44, 142.01, 129.12, 117.57, 107.2,
1719 97.877, 89.47, 81.882, 75.021, 68.807, 63.171, 58.052, 53.396,
1720 49.155, 45.288, 41.759, 38.531, 35.576, 32.868, 30.384, 28.102,
1721 26.003, 24.071, 22.293, 20.655, 19.147, 17.756, 16.476, 15.292,
1722 14.198, 13.183, 12.241, 11.367, 10.554, 9.7989, 9.0978, 8.4475,
1723 7.845, 7.2868, 6.7704, 6.2927, 5.8508, 5.4421, 5.064, 4.714,
1724 4.3902, 4.0902, 3.8121, 3.5543, 3.315, 3.093, 2.8869, 2.6953,
1725 2.5172, 2.3517, 2.1977, 2.0544, 1.9211, 1.7969, 1.6812, 1.5735,
1726 1.4731, 1.3794, 1.2921, 1.2107, 1.1346, 1.0637, .99744, .93554,
1727 .87771, .82368, .77313, .72587, .6816, .64014, .60134, .565,
1728 .53086, .49883, .46881, .44074, .4144, .38979, .36679, .34513,
1729 .32474, .30552, .28751, .27045, .25458, .23976, .22584, .21278,
1730 .20051, .18899, .17815, .16801, .15846, .14954, .14117, .13328,
1731 .12584
1732 };
1733
1734 /* Get CO2 continuum absorption... */
1735 double xw = nu / 2 + 1;
1736 if (xw >= 1 && xw < 2001) {
1737 int iw = (int) xw;
1738 double dw = xw - iw;
1739 double ew = 1 - dw;
1740 double cw296 = ew * co2296[iw - 1] + dw * co2296[iw];
1741 double cw260 = ew * co2260[iw - 1] + dw * co2260[iw];
1742 double cw230 = ew * co2230[iw - 1] + dw * co2230[iw];
1743 double dt230 = t - 230;
1744 double dt260 = t - 260;
1745 double dt296 = t - 296;
1746 double ctw = dt260 * 5.050505e-4 * dt296 * cw230 - dt230 * 9.259259e-4
1747 * dt296 * cw260 + dt230 * 4.208754e-4 * dt260 * cw296;
1748 return u / NA / 1000 * p / P0 * ctw;
1749 } else
1750 return 0;
1751}
1752
1753/*****************************************************************************/
1754
1755double ctmh2o(
1756 double nu,
1757 double p,
1758 double t,
1759 double q,
1760 double u) {
1761
1762 static double h2o296[2001] = { .17, .1695, .172, .168, .1687, .1624, .1606,
1763 .1508, .1447, .1344, .1214, .1133, .1009, .09217, .08297, .06989,
1764 .06513, .05469, .05056, .04417, .03779, .03484, .02994, .0272,
1765 .02325, .02063, .01818, .01592, .01405, .01251, .0108, .009647,
1766 .008424, .007519, .006555, .00588, .005136, .004511, .003989,
1767 .003509, .003114, .00274, .002446, .002144, .001895, .001676,
1768 .001486, .001312, .001164, .001031, 9.129e-4, 8.106e-4, 7.213e-4,
1769 6.4e-4, 5.687e-4, 5.063e-4, 4.511e-4, 4.029e-4, 3.596e-4,
1770 3.22e-4, 2.889e-4, 2.597e-4, 2.337e-4, 2.108e-4, 1.907e-4,
1771 1.728e-4, 1.57e-4, 1.43e-4, 1.305e-4, 1.195e-4, 1.097e-4,
1772 1.009e-4, 9.307e-5, 8.604e-5, 7.971e-5, 7.407e-5, 6.896e-5,
1773 6.433e-5, 6.013e-5, 5.631e-5, 5.283e-5, 4.963e-5, 4.669e-5,
1774 4.398e-5, 4.148e-5, 3.917e-5, 3.702e-5, 3.502e-5, 3.316e-5,
1775 3.142e-5, 2.978e-5, 2.825e-5, 2.681e-5, 2.546e-5, 2.419e-5,
1776 2.299e-5, 2.186e-5, 2.079e-5, 1.979e-5, 1.884e-5, 1.795e-5,
1777 1.711e-5, 1.633e-5, 1.559e-5, 1.49e-5, 1.426e-5, 1.367e-5,
1778 1.312e-5, 1.263e-5, 1.218e-5, 1.178e-5, 1.143e-5, 1.112e-5,
1779 1.088e-5, 1.07e-5, 1.057e-5, 1.05e-5, 1.051e-5, 1.059e-5,
1780 1.076e-5, 1.1e-5, 1.133e-5, 1.18e-5, 1.237e-5, 1.308e-5,
1781 1.393e-5, 1.483e-5, 1.614e-5, 1.758e-5, 1.93e-5, 2.123e-5,
1782 2.346e-5, 2.647e-5, 2.93e-5, 3.279e-5, 3.745e-5, 4.152e-5,
1783 4.813e-5, 5.477e-5, 6.203e-5, 7.331e-5, 8.056e-5, 9.882e-5,
1784 1.05e-4, 1.21e-4, 1.341e-4, 1.572e-4, 1.698e-4, 1.968e-4,
1785 2.175e-4, 2.431e-4, 2.735e-4, 2.867e-4, 3.19e-4, 3.371e-4,
1786 3.554e-4, 3.726e-4, 3.837e-4, 3.878e-4, 3.864e-4, 3.858e-4,
1787 3.841e-4, 3.852e-4, 3.815e-4, 3.762e-4, 3.618e-4, 3.579e-4,
1788 3.45e-4, 3.202e-4, 3.018e-4, 2.785e-4, 2.602e-4, 2.416e-4,
1789 2.097e-4, 1.939e-4, 1.689e-4, 1.498e-4, 1.308e-4, 1.17e-4,
1790 1.011e-4, 9.237e-5, 7.909e-5, 7.006e-5, 6.112e-5, 5.401e-5,
1791 4.914e-5, 4.266e-5, 3.963e-5, 3.316e-5, 3.037e-5, 2.598e-5,
1792 2.294e-5, 2.066e-5, 1.813e-5, 1.583e-5, 1.423e-5, 1.247e-5,
1793 1.116e-5, 9.76e-6, 8.596e-6, 7.72e-6, 6.825e-6, 6.108e-6,
1794 5.366e-6, 4.733e-6, 4.229e-6, 3.731e-6, 3.346e-6, 2.972e-6,
1795 2.628e-6, 2.356e-6, 2.102e-6, 1.878e-6, 1.678e-6, 1.507e-6,
1796 1.348e-6, 1.21e-6, 1.089e-6, 9.806e-7, 8.857e-7, 8.004e-7,
1797 7.261e-7, 6.599e-7, 6.005e-7, 5.479e-7, 5.011e-7, 4.595e-7,
1798 4.219e-7, 3.885e-7, 3.583e-7, 3.314e-7, 3.071e-7, 2.852e-7,
1799 2.654e-7, 2.474e-7, 2.311e-7, 2.162e-7, 2.026e-7, 1.902e-7,
1800 1.788e-7, 1.683e-7, 1.587e-7, 1.497e-7, 1.415e-7, 1.338e-7,
1801 1.266e-7, 1.2e-7, 1.138e-7, 1.08e-7, 1.027e-7, 9.764e-8,
1802 9.296e-8, 8.862e-8, 8.458e-8, 8.087e-8, 7.744e-8, 7.429e-8,
1803 7.145e-8, 6.893e-8, 6.664e-8, 6.468e-8, 6.322e-8, 6.162e-8,
1804 6.07e-8, 5.992e-8, 5.913e-8, 5.841e-8, 5.796e-8, 5.757e-8,
1805 5.746e-8, 5.731e-8, 5.679e-8, 5.577e-8, 5.671e-8, 5.656e-8,
1806 5.594e-8, 5.593e-8, 5.602e-8, 5.62e-8, 5.693e-8, 5.725e-8,
1807 5.858e-8, 6.037e-8, 6.249e-8, 6.535e-8, 6.899e-8, 7.356e-8,
1808 7.918e-8, 8.618e-8, 9.385e-8, 1.039e-7, 1.158e-7, 1.29e-7,
1809 1.437e-7, 1.65e-7, 1.871e-7, 2.121e-7, 2.427e-7, 2.773e-7,
1810 3.247e-7, 3.677e-7, 4.037e-7, 4.776e-7, 5.101e-7, 6.214e-7,
1811 6.936e-7, 7.581e-7, 8.486e-7, 9.355e-7, 9.942e-7, 1.063e-6,
1812 1.123e-6, 1.191e-6, 1.215e-6, 1.247e-6, 1.26e-6, 1.271e-6,
1813 1.284e-6, 1.317e-6, 1.323e-6, 1.349e-6, 1.353e-6, 1.362e-6,
1814 1.344e-6, 1.329e-6, 1.336e-6, 1.327e-6, 1.325e-6, 1.359e-6,
1815 1.374e-6, 1.415e-6, 1.462e-6, 1.526e-6, 1.619e-6, 1.735e-6,
1816 1.863e-6, 2.034e-6, 2.265e-6, 2.482e-6, 2.756e-6, 3.103e-6,
1817 3.466e-6, 3.832e-6, 4.378e-6, 4.913e-6, 5.651e-6, 6.311e-6,
1818 7.169e-6, 8.057e-6, 9.253e-6, 1.047e-5, 1.212e-5, 1.36e-5,
1819 1.569e-5, 1.776e-5, 2.02e-5, 2.281e-5, 2.683e-5, 2.994e-5,
1820 3.488e-5, 3.896e-5, 4.499e-5, 5.175e-5, 6.035e-5, 6.34e-5,
1821 7.281e-5, 7.923e-5, 8.348e-5, 9.631e-5, 1.044e-4, 1.102e-4,
1822 1.176e-4, 1.244e-4, 1.283e-4, 1.326e-4, 1.4e-4, 1.395e-4,
1823 1.387e-4, 1.363e-4, 1.314e-4, 1.241e-4, 1.228e-4, 1.148e-4,
1824 1.086e-4, 1.018e-4, 8.89e-5, 8.316e-5, 7.292e-5, 6.452e-5,
1825 5.625e-5, 5.045e-5, 4.38e-5, 3.762e-5, 3.29e-5, 2.836e-5,
1826 2.485e-5, 2.168e-5, 1.895e-5, 1.659e-5, 1.453e-5, 1.282e-5,
1827 1.132e-5, 1.001e-5, 8.836e-6, 7.804e-6, 6.922e-6, 6.116e-6,
1828 5.429e-6, 4.824e-6, 4.278e-6, 3.788e-6, 3.371e-6, 2.985e-6,
1829 2.649e-6, 2.357e-6, 2.09e-6, 1.858e-6, 1.647e-6, 1.462e-6,
1830 1.299e-6, 1.155e-6, 1.028e-6, 9.142e-7, 8.132e-7, 7.246e-7,
1831 6.451e-7, 5.764e-7, 5.151e-7, 4.603e-7, 4.121e-7, 3.694e-7,
1832 3.318e-7, 2.985e-7, 2.69e-7, 2.428e-7, 2.197e-7, 1.992e-7,
1833 1.81e-7, 1.649e-7, 1.506e-7, 1.378e-7, 1.265e-7, 1.163e-7,
1834 1.073e-7, 9.918e-8, 9.191e-8, 8.538e-8, 7.949e-8, 7.419e-8,
1835 6.94e-8, 6.508e-8, 6.114e-8, 5.761e-8, 5.437e-8, 5.146e-8,
1836 4.89e-8, 4.636e-8, 4.406e-8, 4.201e-8, 4.015e-8, 3.84e-8,
1837 3.661e-8, 3.51e-8, 3.377e-8, 3.242e-8, 3.13e-8, 3.015e-8,
1838 2.918e-8, 2.83e-8, 2.758e-8, 2.707e-8, 2.656e-8, 2.619e-8,
1839 2.609e-8, 2.615e-8, 2.63e-8, 2.675e-8, 2.745e-8, 2.842e-8,
1840 2.966e-8, 3.125e-8, 3.318e-8, 3.565e-8, 3.85e-8, 4.191e-8,
1841 4.59e-8, 5.059e-8, 5.607e-8, 6.239e-8, 6.958e-8, 7.796e-8,
1842 8.773e-8, 9.88e-8, 1.114e-7, 1.258e-7, 1.422e-7, 1.61e-7,
1843 1.822e-7, 2.06e-7, 2.337e-7, 2.645e-7, 2.996e-7, 3.393e-7,
1844 3.843e-7, 4.363e-7, 4.935e-7, 5.607e-7, 6.363e-7, 7.242e-7,
1845 8.23e-7, 9.411e-7, 1.071e-6, 1.232e-6, 1.402e-6, 1.6e-6, 1.82e-6,
1846 2.128e-6, 2.386e-6, 2.781e-6, 3.242e-6, 3.653e-6, 4.323e-6,
1847 4.747e-6, 5.321e-6, 5.919e-6, 6.681e-6, 7.101e-6, 7.983e-6,
1848 8.342e-6, 8.741e-6, 9.431e-6, 9.952e-6, 1.026e-5, 1.055e-5,
1849 1.095e-5, 1.095e-5, 1.087e-5, 1.056e-5, 1.026e-5, 9.715e-6,
1850 9.252e-6, 8.452e-6, 7.958e-6, 7.268e-6, 6.295e-6, 6.003e-6, 5e-6,
1851 4.591e-6, 3.983e-6, 3.479e-6, 3.058e-6, 2.667e-6, 2.293e-6,
1852 1.995e-6, 1.747e-6, 1.517e-6, 1.335e-6, 1.165e-6, 1.028e-6,
1853 9.007e-7, 7.956e-7, 7.015e-7, 6.192e-7, 5.491e-7, 4.859e-7,
1854 4.297e-7, 3.799e-7, 3.38e-7, 3.002e-7, 2.659e-7, 2.366e-7,
1855 2.103e-7, 1.861e-7, 1.655e-7, 1.469e-7, 1.309e-7, 1.162e-7,
1856 1.032e-7, 9.198e-8, 8.181e-8, 7.294e-8, 6.516e-8, 5.787e-8,
1857 5.163e-8, 4.612e-8, 4.119e-8, 3.695e-8, 3.308e-8, 2.976e-8,
1858 2.67e-8, 2.407e-8, 2.171e-8, 1.965e-8, 1.78e-8, 1.617e-8,
1859 1.47e-8, 1.341e-8, 1.227e-8, 1.125e-8, 1.033e-8, 9.524e-9,
1860 8.797e-9, 8.162e-9, 7.565e-9, 7.04e-9, 6.56e-9, 6.129e-9,
1861 5.733e-9, 5.376e-9, 5.043e-9, 4.75e-9, 4.466e-9, 4.211e-9,
1862 3.977e-9, 3.759e-9, 3.558e-9, 3.373e-9, 3.201e-9, 3.043e-9,
1863 2.895e-9, 2.76e-9, 2.635e-9, 2.518e-9, 2.411e-9, 2.314e-9,
1864 2.23e-9, 2.151e-9, 2.087e-9, 2.035e-9, 1.988e-9, 1.946e-9,
1865 1.927e-9, 1.916e-9, 1.916e-9, 1.933e-9, 1.966e-9, 2.018e-9,
1866 2.09e-9, 2.182e-9, 2.299e-9, 2.442e-9, 2.623e-9, 2.832e-9,
1867 3.079e-9, 3.368e-9, 3.714e-9, 4.104e-9, 4.567e-9, 5.091e-9,
1868 5.701e-9, 6.398e-9, 7.194e-9, 8.127e-9, 9.141e-9, 1.035e-8,
1869 1.177e-8, 1.338e-8, 1.508e-8, 1.711e-8, 1.955e-8, 2.216e-8,
1870 2.534e-8, 2.871e-8, 3.291e-8, 3.711e-8, 4.285e-8, 4.868e-8,
1871 5.509e-8, 6.276e-8, 7.262e-8, 8.252e-8, 9.4e-8, 1.064e-7,
1872 1.247e-7, 1.411e-7, 1.626e-7, 1.827e-7, 2.044e-7, 2.284e-7,
1873 2.452e-7, 2.854e-7, 3.026e-7, 3.278e-7, 3.474e-7, 3.693e-7,
1874 3.93e-7, 4.104e-7, 4.22e-7, 4.439e-7, 4.545e-7, 4.778e-7,
1875 4.812e-7, 5.018e-7, 4.899e-7, 5.075e-7, 5.073e-7, 5.171e-7,
1876 5.131e-7, 5.25e-7, 5.617e-7, 5.846e-7, 6.239e-7, 6.696e-7,
1877 7.398e-7, 8.073e-7, 9.15e-7, 1.009e-6, 1.116e-6, 1.264e-6,
1878 1.439e-6, 1.644e-6, 1.856e-6, 2.147e-6, 2.317e-6, 2.713e-6,
1879 2.882e-6, 2.99e-6, 3.489e-6, 3.581e-6, 4.033e-6, 4.26e-6,
1880 4.543e-6, 4.84e-6, 4.826e-6, 5.013e-6, 5.252e-6, 5.277e-6,
1881 5.306e-6, 5.236e-6, 5.123e-6, 5.171e-6, 4.843e-6, 4.615e-6,
1882 4.385e-6, 3.97e-6, 3.693e-6, 3.231e-6, 2.915e-6, 2.495e-6,
1883 2.144e-6, 1.91e-6, 1.639e-6, 1.417e-6, 1.226e-6, 1.065e-6,
1884 9.29e-7, 8.142e-7, 7.161e-7, 6.318e-7, 5.581e-7, 4.943e-7,
1885 4.376e-7, 3.884e-7, 3.449e-7, 3.06e-7, 2.712e-7, 2.412e-7,
1886 2.139e-7, 1.903e-7, 1.689e-7, 1.499e-7, 1.331e-7, 1.183e-7,
1887 1.05e-7, 9.362e-8, 8.306e-8, 7.403e-8, 6.578e-8, 5.853e-8,
1888 5.216e-8, 4.632e-8, 4.127e-8, 3.678e-8, 3.279e-8, 2.923e-8,
1889 2.612e-8, 2.339e-8, 2.094e-8, 1.877e-8, 1.686e-8, 1.516e-8,
1890 1.366e-8, 1.234e-8, 1.114e-8, 1.012e-8, 9.182e-9, 8.362e-9,
1891 7.634e-9, 6.981e-9, 6.406e-9, 5.888e-9, 5.428e-9, 5.021e-9,
1892 4.65e-9, 4.326e-9, 4.033e-9, 3.77e-9, 3.536e-9, 3.327e-9,
1893 3.141e-9, 2.974e-9, 2.825e-9, 2.697e-9, 2.584e-9, 2.488e-9,
1894 2.406e-9, 2.34e-9, 2.292e-9, 2.259e-9, 2.244e-9, 2.243e-9,
1895 2.272e-9, 2.31e-9, 2.378e-9, 2.454e-9, 2.618e-9, 2.672e-9,
1896 2.831e-9, 3.05e-9, 3.225e-9, 3.425e-9, 3.677e-9, 3.968e-9,
1897 4.221e-9, 4.639e-9, 4.96e-9, 5.359e-9, 5.649e-9, 6.23e-9,
1898 6.716e-9, 7.218e-9, 7.746e-9, 7.988e-9, 8.627e-9, 8.999e-9,
1899 9.442e-9, 9.82e-9, 1.015e-8, 1.06e-8, 1.079e-8, 1.109e-8,
1900 1.137e-8, 1.186e-8, 1.18e-8, 1.187e-8, 1.194e-8, 1.192e-8,
1901 1.224e-8, 1.245e-8, 1.246e-8, 1.318e-8, 1.377e-8, 1.471e-8,
1902 1.582e-8, 1.713e-8, 1.853e-8, 2.063e-8, 2.27e-8, 2.567e-8,
1903 2.891e-8, 3.264e-8, 3.744e-8, 4.286e-8, 4.915e-8, 5.623e-8,
1904 6.336e-8, 7.293e-8, 8.309e-8, 9.319e-8, 1.091e-7, 1.243e-7,
1905 1.348e-7, 1.449e-7, 1.62e-7, 1.846e-7, 1.937e-7, 2.04e-7,
1906 2.179e-7, 2.298e-7, 2.433e-7, 2.439e-7, 2.464e-7, 2.611e-7,
1907 2.617e-7, 2.582e-7, 2.453e-7, 2.401e-7, 2.349e-7, 2.203e-7,
1908 2.066e-7, 1.939e-7, 1.78e-7, 1.558e-7, 1.391e-7, 1.203e-7,
1909 1.048e-7, 9.464e-8, 8.306e-8, 7.239e-8, 6.317e-8, 5.52e-8,
1910 4.847e-8, 4.282e-8, 3.796e-8, 3.377e-8, 2.996e-8, 2.678e-8,
1911 2.4e-8, 2.134e-8, 1.904e-8, 1.705e-8, 1.523e-8, 1.35e-8,
1912 1.204e-8, 1.07e-8, 9.408e-9, 8.476e-9, 7.47e-9, 6.679e-9,
1913 5.929e-9, 5.267e-9, 4.711e-9, 4.172e-9, 3.761e-9, 3.288e-9,
1914 2.929e-9, 2.609e-9, 2.315e-9, 2.042e-9, 1.844e-9, 1.64e-9,
1915 1.47e-9, 1.31e-9, 1.176e-9, 1.049e-9, 9.377e-10, 8.462e-10,
1916 7.616e-10, 6.854e-10, 6.191e-10, 5.596e-10, 5.078e-10, 4.611e-10,
1917 4.197e-10, 3.83e-10, 3.505e-10, 3.215e-10, 2.956e-10, 2.726e-10,
1918 2.521e-10, 2.338e-10, 2.173e-10, 2.026e-10, 1.895e-10, 1.777e-10,
1919 1.672e-10, 1.579e-10, 1.496e-10, 1.423e-10, 1.358e-10, 1.302e-10,
1920 1.254e-10, 1.216e-10, 1.187e-10, 1.163e-10, 1.147e-10, 1.145e-10,
1921 1.15e-10, 1.17e-10, 1.192e-10, 1.25e-10, 1.298e-10, 1.345e-10,
1922 1.405e-10, 1.538e-10, 1.648e-10, 1.721e-10, 1.872e-10, 1.968e-10,
1923 2.089e-10, 2.172e-10, 2.317e-10, 2.389e-10, 2.503e-10, 2.585e-10,
1924 2.686e-10, 2.8e-10, 2.895e-10, 3.019e-10, 3.037e-10, 3.076e-10,
1925 3.146e-10, 3.198e-10, 3.332e-10, 3.397e-10, 3.54e-10, 3.667e-10,
1926 3.895e-10, 4.071e-10, 4.565e-10, 4.983e-10, 5.439e-10, 5.968e-10,
1927 6.676e-10, 7.456e-10, 8.405e-10, 9.478e-10, 1.064e-9, 1.218e-9,
1928 1.386e-9, 1.581e-9, 1.787e-9, 2.032e-9, 2.347e-9, 2.677e-9,
1929 3.008e-9, 3.544e-9, 4.056e-9, 4.687e-9, 5.331e-9, 6.227e-9,
1930 6.854e-9, 8.139e-9, 8.945e-9, 9.865e-9, 1.125e-8, 1.178e-8,
1931 1.364e-8, 1.436e-8, 1.54e-8, 1.672e-8, 1.793e-8, 1.906e-8,
1932 2.036e-8, 2.144e-8, 2.292e-8, 2.371e-8, 2.493e-8, 2.606e-8,
1933 2.706e-8, 2.866e-8, 3.036e-8, 3.136e-8, 3.405e-8, 3.665e-8,
1934 3.837e-8, 4.229e-8, 4.748e-8, 5.32e-8, 5.763e-8, 6.677e-8,
1935 7.216e-8, 7.716e-8, 8.958e-8, 9.419e-8, 1.036e-7, 1.108e-7,
1936 1.189e-7, 1.246e-7, 1.348e-7, 1.31e-7, 1.361e-7, 1.364e-7,
1937 1.363e-7, 1.343e-7, 1.293e-7, 1.254e-7, 1.235e-7, 1.158e-7,
1938 1.107e-7, 9.961e-8, 9.011e-8, 7.91e-8, 6.916e-8, 6.338e-8,
1939 5.564e-8, 4.827e-8, 4.198e-8, 3.695e-8, 3.276e-8, 2.929e-8,
1940 2.633e-8, 2.391e-8, 2.192e-8, 2.021e-8, 1.89e-8, 1.772e-8,
1941 1.667e-8, 1.603e-8, 1.547e-8, 1.537e-8, 1.492e-8, 1.515e-8,
1942 1.479e-8, 1.45e-8, 1.513e-8, 1.495e-8, 1.529e-8, 1.565e-8,
1943 1.564e-8, 1.553e-8, 1.569e-8, 1.584e-8, 1.57e-8, 1.538e-8,
1944 1.513e-8, 1.472e-8, 1.425e-8, 1.349e-8, 1.328e-8, 1.249e-8,
1945 1.17e-8, 1.077e-8, 9.514e-9, 8.614e-9, 7.46e-9, 6.621e-9,
1946 5.775e-9, 5.006e-9, 4.308e-9, 3.747e-9, 3.24e-9, 2.84e-9,
1947 2.481e-9, 2.184e-9, 1.923e-9, 1.71e-9, 1.504e-9, 1.334e-9,
1948 1.187e-9, 1.053e-9, 9.367e-10, 8.306e-10, 7.419e-10, 6.63e-10,
1949 5.918e-10, 5.277e-10, 4.717e-10, 4.222e-10, 3.783e-10, 3.39e-10,
1950 3.036e-10, 2.729e-10, 2.455e-10, 2.211e-10, 1.995e-10, 1.804e-10,
1951 1.635e-10, 1.485e-10, 1.355e-10, 1.24e-10, 1.139e-10, 1.051e-10,
1952 9.757e-11, 9.114e-11, 8.577e-11, 8.139e-11, 7.792e-11, 7.52e-11,
1953 7.39e-11, 7.311e-11, 7.277e-11, 7.482e-11, 7.698e-11, 8.162e-11,
1954 8.517e-11, 8.968e-11, 9.905e-11, 1.075e-10, 1.187e-10, 1.291e-10,
1955 1.426e-10, 1.573e-10, 1.734e-10, 1.905e-10, 2.097e-10, 2.28e-10,
1956 2.473e-10, 2.718e-10, 2.922e-10, 3.128e-10, 3.361e-10, 3.641e-10,
1957 3.91e-10, 4.196e-10, 4.501e-10, 4.932e-10, 5.258e-10, 5.755e-10,
1958 6.253e-10, 6.664e-10, 7.344e-10, 7.985e-10, 8.877e-10, 1.005e-9,
1959 1.118e-9, 1.251e-9, 1.428e-9, 1.61e-9, 1.888e-9, 2.077e-9,
1960 2.331e-9, 2.751e-9, 3.061e-9, 3.522e-9, 3.805e-9, 4.181e-9,
1961 4.575e-9, 5.167e-9, 5.634e-9, 6.007e-9, 6.501e-9, 6.829e-9,
1962 7.211e-9, 7.262e-9, 7.696e-9, 7.832e-9, 7.799e-9, 7.651e-9,
1963 7.304e-9, 7.15e-9, 6.977e-9, 6.603e-9, 6.209e-9, 5.69e-9,
1964 5.432e-9, 4.764e-9, 4.189e-9, 3.64e-9, 3.203e-9, 2.848e-9,
1965 2.51e-9, 2.194e-9, 1.946e-9, 1.75e-9, 1.567e-9, 1.426e-9,
1966 1.302e-9, 1.197e-9, 1.109e-9, 1.035e-9, 9.719e-10, 9.207e-10,
1967 8.957e-10, 8.578e-10, 8.262e-10, 8.117e-10, 7.987e-10, 7.875e-10,
1968 7.741e-10, 7.762e-10, 7.537e-10, 7.424e-10, 7.474e-10, 7.294e-10,
1969 7.216e-10, 7.233e-10, 7.075e-10, 6.892e-10, 6.618e-10, 6.314e-10,
1970 6.208e-10, 5.689e-10, 5.55e-10, 4.984e-10, 4.6e-10, 4.078e-10,
1971 3.879e-10, 3.459e-10, 2.982e-10, 2.626e-10, 2.329e-10, 1.988e-10,
1972 1.735e-10, 1.487e-10, 1.297e-10, 1.133e-10, 9.943e-11, 8.736e-11,
1973 7.726e-11, 6.836e-11, 6.053e-11, 5.384e-11, 4.789e-11, 4.267e-11,
1974 3.804e-11, 3.398e-11, 3.034e-11, 2.71e-11, 2.425e-11, 2.173e-11,
1975 1.95e-11, 1.752e-11, 1.574e-11, 1.418e-11, 1.278e-11, 1.154e-11,
1976 1.044e-11, 9.463e-12, 8.602e-12, 7.841e-12, 7.171e-12, 6.584e-12,
1977 6.073e-12, 5.631e-12, 5.254e-12, 4.937e-12, 4.679e-12, 4.476e-12,
1978 4.328e-12, 4.233e-12, 4.194e-12, 4.211e-12, 4.286e-12, 4.424e-12,
1979 4.628e-12, 4.906e-12, 5.262e-12, 5.708e-12, 6.254e-12, 6.914e-12,
1980 7.714e-12, 8.677e-12, 9.747e-12, 1.101e-11, 1.256e-11, 1.409e-11,
1981 1.597e-11, 1.807e-11, 2.034e-11, 2.316e-11, 2.622e-11, 2.962e-11,
1982 3.369e-11, 3.819e-11, 4.329e-11, 4.932e-11, 5.589e-11, 6.364e-11,
1983 7.284e-11, 8.236e-11, 9.447e-11, 1.078e-10, 1.229e-10, 1.417e-10,
1984 1.614e-10, 1.843e-10, 2.107e-10, 2.406e-10, 2.728e-10, 3.195e-10,
1985 3.595e-10, 4.153e-10, 4.736e-10, 5.41e-10, 6.088e-10, 6.769e-10,
1986 7.691e-10, 8.545e-10, 9.621e-10, 1.047e-9, 1.161e-9, 1.296e-9,
1987 1.424e-9, 1.576e-9, 1.739e-9, 1.893e-9, 2.08e-9, 2.336e-9,
1988 2.604e-9, 2.76e-9, 3.001e-9, 3.365e-9, 3.55e-9, 3.895e-9,
1989 4.183e-9, 4.614e-9, 4.846e-9, 5.068e-9, 5.427e-9, 5.541e-9,
1990 5.864e-9, 5.997e-9, 5.997e-9, 6.061e-9, 5.944e-9, 5.855e-9,
1991 5.661e-9, 5.523e-9, 5.374e-9, 4.94e-9, 4.688e-9, 4.17e-9,
1992 3.913e-9, 3.423e-9, 2.997e-9, 2.598e-9, 2.253e-9, 1.946e-9,
1993 1.71e-9, 1.507e-9, 1.336e-9, 1.19e-9, 1.068e-9, 9.623e-10,
1994 8.772e-10, 8.007e-10, 7.42e-10, 6.884e-10, 6.483e-10, 6.162e-10,
1995 5.922e-10, 5.688e-10, 5.654e-10, 5.637e-10, 5.701e-10, 5.781e-10,
1996 5.874e-10, 6.268e-10, 6.357e-10, 6.525e-10, 7.137e-10, 7.441e-10,
1997 8.024e-10, 8.485e-10, 9.143e-10, 9.536e-10, 9.717e-10, 1.018e-9,
1998 1.042e-9, 1.054e-9, 1.092e-9, 1.079e-9, 1.064e-9, 1.043e-9,
1999 1.02e-9, 9.687e-10, 9.273e-10, 9.208e-10, 9.068e-10, 7.687e-10,
2000 7.385e-10, 6.595e-10, 5.87e-10, 5.144e-10, 4.417e-10, 3.804e-10,
2001 3.301e-10, 2.866e-10, 2.509e-10, 2.202e-10, 1.947e-10, 1.719e-10,
2002 1.525e-10, 1.361e-10, 1.21e-10, 1.084e-10, 9.8e-11, 8.801e-11,
2003 7.954e-11, 7.124e-11, 6.335e-11, 5.76e-11, 5.132e-11, 4.601e-11,
2004 4.096e-11, 3.657e-11, 3.25e-11, 2.909e-11, 2.587e-11, 2.297e-11,
2005 2.05e-11, 1.828e-11, 1.632e-11, 1.462e-11, 1.314e-11, 1.185e-11,
2006 1.073e-11, 9.76e-12, 8.922e-12, 8.206e-12, 7.602e-12, 7.1e-12,
2007 6.694e-12, 6.378e-12, 6.149e-12, 6.004e-12, 5.941e-12, 5.962e-12,
2008 6.069e-12, 6.265e-12, 6.551e-12, 6.935e-12, 7.457e-12, 8.074e-12,
2009 8.811e-12, 9.852e-12, 1.086e-11, 1.207e-11, 1.361e-11, 1.553e-11,
2010 1.737e-11, 1.93e-11, 2.175e-11, 2.41e-11, 2.706e-11, 3.023e-11,
2011 3.313e-11, 3.657e-11, 4.118e-11, 4.569e-11, 5.025e-11, 5.66e-11,
2012 6.231e-11, 6.881e-11, 7.996e-11, 8.526e-11, 9.694e-11, 1.106e-10,
2013 1.222e-10, 1.355e-10, 1.525e-10, 1.775e-10, 1.924e-10, 2.181e-10,
2014 2.379e-10, 2.662e-10, 2.907e-10, 3.154e-10, 3.366e-10, 3.579e-10,
2015 3.858e-10, 4.046e-10, 4.196e-10, 4.166e-10, 4.457e-10, 4.466e-10,
2016 4.404e-10, 4.337e-10, 4.15e-10, 4.083e-10, 3.91e-10, 3.723e-10,
2017 3.514e-10, 3.303e-10, 2.847e-10, 2.546e-10, 2.23e-10, 1.994e-10,
2018 1.733e-10, 1.488e-10, 1.297e-10, 1.144e-10, 1.004e-10, 8.741e-11,
2019 7.928e-11, 7.034e-11, 6.323e-11, 5.754e-11, 5.25e-11, 4.85e-11,
2020 4.502e-11, 4.286e-11, 4.028e-11, 3.899e-11, 3.824e-11, 3.761e-11,
2021 3.804e-11, 3.839e-11, 3.845e-11, 4.244e-11, 4.382e-11, 4.582e-11,
2022 4.847e-11, 5.209e-11, 5.384e-11, 5.887e-11, 6.371e-11, 6.737e-11,
2023 7.168e-11, 7.415e-11, 7.827e-11, 8.037e-11, 8.12e-11, 8.071e-11,
2024 8.008e-11, 7.851e-11, 7.544e-11, 7.377e-11, 7.173e-11, 6.801e-11,
2025 6.267e-11, 5.727e-11, 5.288e-11, 4.853e-11, 4.082e-11, 3.645e-11,
2026 3.136e-11, 2.672e-11, 2.304e-11, 1.986e-11, 1.725e-11, 1.503e-11,
2027 1.315e-11, 1.153e-11, 1.014e-11, 8.942e-12, 7.901e-12, 6.993e-12,
2028 6.199e-12, 5.502e-12, 4.89e-12, 4.351e-12, 3.878e-12, 3.461e-12,
2029 3.094e-12, 2.771e-12, 2.488e-12, 2.241e-12, 2.025e-12, 1.838e-12,
2030 1.677e-12, 1.541e-12, 1.427e-12, 1.335e-12, 1.262e-12, 1.209e-12,
2031 1.176e-12, 1.161e-12, 1.165e-12, 1.189e-12, 1.234e-12, 1.3e-12,
2032 1.389e-12, 1.503e-12, 1.644e-12, 1.814e-12, 2.017e-12, 2.255e-12,
2033 2.534e-12, 2.858e-12, 3.231e-12, 3.661e-12, 4.153e-12, 4.717e-12,
2034 5.36e-12, 6.094e-12, 6.93e-12, 7.882e-12, 8.966e-12, 1.02e-11,
2035 1.162e-11, 1.324e-11, 1.51e-11, 1.72e-11, 1.965e-11, 2.237e-11,
2036 2.56e-11, 2.927e-11, 3.371e-11, 3.842e-11, 4.429e-11, 5.139e-11,
2037 5.798e-11, 6.697e-11, 7.626e-11, 8.647e-11, 1.022e-10, 1.136e-10,
2038 1.3e-10, 1.481e-10, 1.672e-10, 1.871e-10, 2.126e-10, 2.357e-10,
2039 2.583e-10, 2.997e-10, 3.289e-10, 3.702e-10, 4.012e-10, 4.319e-10,
2040 4.527e-10, 5.001e-10, 5.448e-10, 5.611e-10, 5.76e-10, 5.965e-10,
2041 6.079e-10, 6.207e-10, 6.276e-10, 6.222e-10, 6.137e-10, 6e-10,
2042 5.814e-10, 5.393e-10, 5.35e-10, 4.947e-10, 4.629e-10, 4.117e-10,
2043 3.712e-10, 3.372e-10, 2.923e-10, 2.55e-10, 2.232e-10, 1.929e-10,
2044 1.679e-10, 1.46e-10, 1.289e-10, 1.13e-10, 9.953e-11, 8.763e-11,
2045 7.76e-11, 6.9e-11, 6.16e-11, 5.525e-11, 4.958e-11, 4.489e-11,
2046 4.072e-11, 3.728e-11, 3.438e-11, 3.205e-11, 3.006e-11, 2.848e-11,
2047 2.766e-11, 2.688e-11, 2.664e-11, 2.67e-11, 2.696e-11, 2.786e-11,
2048 2.861e-11, 3.009e-11, 3.178e-11, 3.389e-11, 3.587e-11, 3.819e-11,
2049 4.054e-11, 4.417e-11, 4.703e-11, 5.137e-11, 5.46e-11, 6.055e-11,
2050 6.333e-11, 6.773e-11, 7.219e-11, 7.717e-11, 8.131e-11, 8.491e-11,
2051 8.574e-11, 9.01e-11, 9.017e-11, 8.999e-11, 8.959e-11, 8.838e-11,
2052 8.579e-11, 8.162e-11, 8.098e-11, 7.472e-11, 7.108e-11, 6.559e-11,
2053 5.994e-11, 5.172e-11, 4.424e-11, 3.951e-11, 3.34e-11, 2.902e-11,
2054 2.541e-11, 2.215e-11, 1.945e-11, 1.716e-11, 1.503e-11, 1.339e-11,
2055 1.185e-11, 1.05e-11, 9.336e-12, 8.307e-12, 7.312e-12, 6.55e-12,
2056 5.836e-12, 5.178e-12, 4.6e-12, 4.086e-12, 3.639e-12, 3.247e-12,
2057 2.904e-12, 2.604e-12, 2.341e-12, 2.112e-12, 1.914e-12, 1.744e-12,
2058 1.598e-12, 1.476e-12, 1.374e-12, 1.293e-12, 1.23e-12, 1.185e-12,
2059 1.158e-12, 1.147e-12, 1.154e-12, 1.177e-12, 1.219e-12, 1.28e-12,
2060 1.36e-12, 1.463e-12, 1.591e-12, 1.75e-12, 1.94e-12, 2.156e-12,
2061 2.43e-12, 2.748e-12, 3.052e-12, 3.533e-12, 3.967e-12, 4.471e-12,
2062 5.041e-12, 5.86e-12, 6.664e-12, 7.522e-12, 8.342e-12, 9.412e-12,
2063 1.072e-11, 1.213e-11, 1.343e-11, 1.496e-11, 1.664e-11, 1.822e-11,
2064 2.029e-11, 2.233e-11, 2.457e-11, 2.709e-11, 2.928e-11, 3.115e-11,
2065 3.356e-11, 3.592e-11, 3.818e-11, 3.936e-11, 4.061e-11, 4.149e-11,
2066 4.299e-11, 4.223e-11, 4.251e-11, 4.287e-11, 4.177e-11, 4.094e-11,
2067 3.942e-11, 3.772e-11, 3.614e-11, 3.394e-11, 3.222e-11, 2.791e-11,
2068 2.665e-11, 2.309e-11, 2.032e-11, 1.74e-11, 1.535e-11, 1.323e-11,
2069 1.151e-11, 9.803e-12, 8.65e-12, 7.54e-12, 6.619e-12, 5.832e-12,
2070 5.113e-12, 4.503e-12, 3.975e-12, 3.52e-12, 3.112e-12, 2.797e-12,
2071 2.5e-12, 2.24e-12, 2.013e-12, 1.819e-12, 1.653e-12, 1.513e-12,
2072 1.395e-12, 1.299e-12, 1.225e-12, 1.168e-12, 1.124e-12, 1.148e-12,
2073 1.107e-12, 1.128e-12, 1.169e-12, 1.233e-12, 1.307e-12, 1.359e-12,
2074 1.543e-12, 1.686e-12, 1.794e-12, 2.028e-12, 2.21e-12, 2.441e-12,
2075 2.653e-12, 2.828e-12, 3.093e-12, 3.28e-12, 3.551e-12, 3.677e-12,
2076 3.803e-12, 3.844e-12, 4.068e-12, 4.093e-12, 4.002e-12, 3.904e-12,
2077 3.624e-12, 3.633e-12, 3.622e-12, 3.443e-12, 3.184e-12, 2.934e-12,
2078 2.476e-12, 2.212e-12, 1.867e-12, 1.594e-12, 1.37e-12, 1.192e-12,
2079 1.045e-12, 9.211e-13, 8.17e-13, 7.29e-13, 6.55e-13, 5.929e-13,
2080 5.415e-13, 4.995e-13, 4.661e-13, 4.406e-13, 4.225e-13, 4.116e-13,
2081 4.075e-13, 4.102e-13, 4.198e-13, 4.365e-13, 4.606e-13, 4.925e-13,
2082 5.326e-13, 5.818e-13, 6.407e-13, 7.104e-13, 7.92e-13, 8.868e-13,
2083 9.964e-13, 1.123e-12, 1.268e-12, 1.434e-12, 1.626e-12, 1.848e-12,
2084 2.107e-12, 2.422e-12, 2.772e-12, 3.145e-12, 3.704e-12, 4.27e-12,
2085 4.721e-12, 5.361e-12, 6.083e-12, 7.095e-12, 7.968e-12, 9.228e-12,
2086 1.048e-11, 1.187e-11, 1.336e-11, 1.577e-11, 1.772e-11, 2.017e-11,
2087 2.25e-11, 2.63e-11, 2.911e-11, 3.356e-11, 3.82e-11, 4.173e-11,
2088 4.811e-11, 5.254e-11, 5.839e-11, 6.187e-11, 6.805e-11, 7.118e-11,
2089 7.369e-11, 7.664e-11, 7.794e-11, 7.947e-11, 8.036e-11, 7.954e-11,
2090 7.849e-11, 7.518e-11, 7.462e-11, 6.926e-11, 6.531e-11, 6.197e-11,
2091 5.421e-11, 4.777e-11, 4.111e-11, 3.679e-11, 3.166e-11, 2.786e-11,
2092 2.436e-11, 2.144e-11, 1.859e-11, 1.628e-11, 1.414e-11, 1.237e-11,
2093 1.093e-11, 9.558e-12
2094 };
2095
2096 static double h2o260[2001] = { .2752, .2732, .2749, .2676, .2667, .2545,
2097 .2497, .2327, .2218, .2036, .1825, .1694, .1497, .1353, .121,
2098 .1014, .09405, .07848, .07195, .06246, .05306, .04853, .04138,
2099 .03735, .03171, .02785, .02431, .02111, .01845, .0164, .01405,
2100 .01255, .01098, .009797, .008646, .007779, .006898, .006099,
2101 .005453, .004909, .004413, .003959, .003581, .003199, .002871,
2102 .002583, .00233, .002086, .001874, .001684, .001512, .001361,
2103 .001225, .0011, 9.89e-4, 8.916e-4, 8.039e-4, 7.256e-4, 6.545e-4,
2104 5.918e-4, 5.359e-4, 4.867e-4, 4.426e-4, 4.033e-4, 3.682e-4,
2105 3.366e-4, 3.085e-4, 2.833e-4, 2.605e-4, 2.403e-4, 2.221e-4,
2106 2.055e-4, 1.908e-4, 1.774e-4, 1.653e-4, 1.544e-4, 1.443e-4,
2107 1.351e-4, 1.267e-4, 1.19e-4, 1.119e-4, 1.053e-4, 9.922e-5,
2108 9.355e-5, 8.831e-5, 8.339e-5, 7.878e-5, 7.449e-5, 7.043e-5,
2109 6.664e-5, 6.307e-5, 5.969e-5, 5.654e-5, 5.357e-5, 5.075e-5,
2110 4.81e-5, 4.56e-5, 4.322e-5, 4.102e-5, 3.892e-5, 3.696e-5,
2111 3.511e-5, 3.339e-5, 3.177e-5, 3.026e-5, 2.886e-5, 2.756e-5,
2112 2.636e-5, 2.527e-5, 2.427e-5, 2.337e-5, 2.257e-5, 2.185e-5,
2113 2.127e-5, 2.08e-5, 2.041e-5, 2.013e-5, 2e-5, 1.997e-5, 2.009e-5,
2114 2.031e-5, 2.068e-5, 2.124e-5, 2.189e-5, 2.267e-5, 2.364e-5,
2115 2.463e-5, 2.618e-5, 2.774e-5, 2.937e-5, 3.144e-5, 3.359e-5,
2116 3.695e-5, 4.002e-5, 4.374e-5, 4.947e-5, 5.431e-5, 6.281e-5,
2117 7.169e-5, 8.157e-5, 9.728e-5, 1.079e-4, 1.337e-4, 1.442e-4,
2118 1.683e-4, 1.879e-4, 2.223e-4, 2.425e-4, 2.838e-4, 3.143e-4,
2119 3.527e-4, 4.012e-4, 4.237e-4, 4.747e-4, 5.057e-4, 5.409e-4,
2120 5.734e-4, 5.944e-4, 6.077e-4, 6.175e-4, 6.238e-4, 6.226e-4,
2121 6.248e-4, 6.192e-4, 6.098e-4, 5.818e-4, 5.709e-4, 5.465e-4,
2122 5.043e-4, 4.699e-4, 4.294e-4, 3.984e-4, 3.672e-4, 3.152e-4,
2123 2.883e-4, 2.503e-4, 2.211e-4, 1.92e-4, 1.714e-4, 1.485e-4,
2124 1.358e-4, 1.156e-4, 1.021e-4, 8.887e-5, 7.842e-5, 7.12e-5,
2125 6.186e-5, 5.73e-5, 4.792e-5, 4.364e-5, 3.72e-5, 3.28e-5,
2126 2.946e-5, 2.591e-5, 2.261e-5, 2.048e-5, 1.813e-5, 1.63e-5,
2127 1.447e-5, 1.282e-5, 1.167e-5, 1.041e-5, 9.449e-6, 8.51e-6,
2128 7.596e-6, 6.961e-6, 6.272e-6, 5.728e-6, 5.198e-6, 4.667e-6,
2129 4.288e-6, 3.897e-6, 3.551e-6, 3.235e-6, 2.952e-6, 2.688e-6,
2130 2.449e-6, 2.241e-6, 2.05e-6, 1.879e-6, 1.722e-6, 1.582e-6,
2131 1.456e-6, 1.339e-6, 1.236e-6, 1.144e-6, 1.06e-6, 9.83e-7,
2132 9.149e-7, 8.535e-7, 7.973e-7, 7.466e-7, 6.999e-7, 6.574e-7,
2133 6.18e-7, 5.821e-7, 5.487e-7, 5.18e-7, 4.896e-7, 4.631e-7,
2134 4.386e-7, 4.16e-7, 3.945e-7, 3.748e-7, 3.562e-7, 3.385e-7,
2135 3.222e-7, 3.068e-7, 2.922e-7, 2.788e-7, 2.659e-7, 2.539e-7,
2136 2.425e-7, 2.318e-7, 2.219e-7, 2.127e-7, 2.039e-7, 1.958e-7,
2137 1.885e-7, 1.818e-7, 1.758e-7, 1.711e-7, 1.662e-7, 1.63e-7,
2138 1.605e-7, 1.58e-7, 1.559e-7, 1.545e-7, 1.532e-7, 1.522e-7,
2139 1.51e-7, 1.495e-7, 1.465e-7, 1.483e-7, 1.469e-7, 1.448e-7,
2140 1.444e-7, 1.436e-7, 1.426e-7, 1.431e-7, 1.425e-7, 1.445e-7,
2141 1.477e-7, 1.515e-7, 1.567e-7, 1.634e-7, 1.712e-7, 1.802e-7,
2142 1.914e-7, 2.024e-7, 2.159e-7, 2.295e-7, 2.461e-7, 2.621e-7,
2143 2.868e-7, 3.102e-7, 3.394e-7, 3.784e-7, 4.223e-7, 4.864e-7,
2144 5.501e-7, 6.039e-7, 7.193e-7, 7.728e-7, 9.514e-7, 1.073e-6,
2145 1.18e-6, 1.333e-6, 1.472e-6, 1.566e-6, 1.677e-6, 1.784e-6,
2146 1.904e-6, 1.953e-6, 2.02e-6, 2.074e-6, 2.128e-6, 2.162e-6,
2147 2.219e-6, 2.221e-6, 2.249e-6, 2.239e-6, 2.235e-6, 2.185e-6,
2148 2.141e-6, 2.124e-6, 2.09e-6, 2.068e-6, 2.1e-6, 2.104e-6,
2149 2.142e-6, 2.181e-6, 2.257e-6, 2.362e-6, 2.5e-6, 2.664e-6,
2150 2.884e-6, 3.189e-6, 3.48e-6, 3.847e-6, 4.313e-6, 4.79e-6,
2151 5.25e-6, 5.989e-6, 6.692e-6, 7.668e-6, 8.52e-6, 9.606e-6,
2152 1.073e-5, 1.225e-5, 1.377e-5, 1.582e-5, 1.761e-5, 2.029e-5,
2153 2.284e-5, 2.602e-5, 2.94e-5, 3.483e-5, 3.928e-5, 4.618e-5,
2154 5.24e-5, 6.132e-5, 7.183e-5, 8.521e-5, 9.111e-5, 1.07e-4,
2155 1.184e-4, 1.264e-4, 1.475e-4, 1.612e-4, 1.704e-4, 1.818e-4,
2156 1.924e-4, 1.994e-4, 2.061e-4, 2.18e-4, 2.187e-4, 2.2e-4,
2157 2.196e-4, 2.131e-4, 2.015e-4, 1.988e-4, 1.847e-4, 1.729e-4,
2158 1.597e-4, 1.373e-4, 1.262e-4, 1.087e-4, 9.439e-5, 8.061e-5,
2159 7.093e-5, 6.049e-5, 5.12e-5, 4.435e-5, 3.817e-5, 3.34e-5,
2160 2.927e-5, 2.573e-5, 2.291e-5, 2.04e-5, 1.827e-5, 1.636e-5,
2161 1.463e-5, 1.309e-5, 1.17e-5, 1.047e-5, 9.315e-6, 8.328e-6,
2162 7.458e-6, 6.665e-6, 5.94e-6, 5.316e-6, 4.752e-6, 4.252e-6,
2163 3.825e-6, 3.421e-6, 3.064e-6, 2.746e-6, 2.465e-6, 2.216e-6,
2164 1.99e-6, 1.79e-6, 1.609e-6, 1.449e-6, 1.306e-6, 1.177e-6,
2165 1.063e-6, 9.607e-7, 8.672e-7, 7.855e-7, 7.118e-7, 6.46e-7,
2166 5.871e-7, 5.34e-7, 4.868e-7, 4.447e-7, 4.068e-7, 3.729e-7,
2167 3.423e-7, 3.151e-7, 2.905e-7, 2.686e-7, 2.484e-7, 2.306e-7,
2168 2.142e-7, 1.995e-7, 1.86e-7, 1.738e-7, 1.626e-7, 1.522e-7,
2169 1.427e-7, 1.338e-7, 1.258e-7, 1.183e-7, 1.116e-7, 1.056e-7,
2170 9.972e-8, 9.46e-8, 9.007e-8, 8.592e-8, 8.195e-8, 7.816e-8,
2171 7.483e-8, 7.193e-8, 6.892e-8, 6.642e-8, 6.386e-8, 6.154e-8,
2172 5.949e-8, 5.764e-8, 5.622e-8, 5.479e-8, 5.364e-8, 5.301e-8,
2173 5.267e-8, 5.263e-8, 5.313e-8, 5.41e-8, 5.55e-8, 5.745e-8,
2174 6.003e-8, 6.311e-8, 6.713e-8, 7.173e-8, 7.724e-8, 8.368e-8,
2175 9.121e-8, 9.986e-8, 1.097e-7, 1.209e-7, 1.338e-7, 1.486e-7,
2176 1.651e-7, 1.837e-7, 2.048e-7, 2.289e-7, 2.557e-7, 2.857e-7,
2177 3.195e-7, 3.587e-7, 4.015e-7, 4.497e-7, 5.049e-7, 5.665e-7,
2178 6.366e-7, 7.121e-7, 7.996e-7, 8.946e-7, 1.002e-6, 1.117e-6,
2179 1.262e-6, 1.416e-6, 1.611e-6, 1.807e-6, 2.056e-6, 2.351e-6,
2180 2.769e-6, 3.138e-6, 3.699e-6, 4.386e-6, 5.041e-6, 6.074e-6,
2181 6.812e-6, 7.79e-6, 8.855e-6, 1.014e-5, 1.095e-5, 1.245e-5,
2182 1.316e-5, 1.39e-5, 1.504e-5, 1.583e-5, 1.617e-5, 1.652e-5,
2183 1.713e-5, 1.724e-5, 1.715e-5, 1.668e-5, 1.629e-5, 1.552e-5,
2184 1.478e-5, 1.34e-5, 1.245e-5, 1.121e-5, 9.575e-6, 8.956e-6,
2185 7.345e-6, 6.597e-6, 5.612e-6, 4.818e-6, 4.165e-6, 3.579e-6,
2186 3.041e-6, 2.623e-6, 2.29e-6, 1.984e-6, 1.748e-6, 1.534e-6,
2187 1.369e-6, 1.219e-6, 1.092e-6, 9.8e-7, 8.762e-7, 7.896e-7,
2188 7.104e-7, 6.364e-7, 5.691e-7, 5.107e-7, 4.575e-7, 4.09e-7,
2189 3.667e-7, 3.287e-7, 2.931e-7, 2.633e-7, 2.356e-7, 2.111e-7,
2190 1.895e-7, 1.697e-7, 1.525e-7, 1.369e-7, 1.233e-7, 1.114e-7,
2191 9.988e-8, 9.004e-8, 8.149e-8, 7.352e-8, 6.662e-8, 6.03e-8,
2192 5.479e-8, 4.974e-8, 4.532e-8, 4.129e-8, 3.781e-8, 3.462e-8,
2193 3.176e-8, 2.919e-8, 2.687e-8, 2.481e-8, 2.292e-8, 2.119e-8,
2194 1.967e-8, 1.828e-8, 1.706e-8, 1.589e-8, 1.487e-8, 1.393e-8,
2195 1.307e-8, 1.228e-8, 1.156e-8, 1.089e-8, 1.028e-8, 9.696e-9,
2196 9.159e-9, 8.658e-9, 8.187e-9, 7.746e-9, 7.34e-9, 6.953e-9,
2197 6.594e-9, 6.259e-9, 5.948e-9, 5.66e-9, 5.386e-9, 5.135e-9,
2198 4.903e-9, 4.703e-9, 4.515e-9, 4.362e-9, 4.233e-9, 4.117e-9,
2199 4.017e-9, 3.962e-9, 3.924e-9, 3.905e-9, 3.922e-9, 3.967e-9,
2200 4.046e-9, 4.165e-9, 4.32e-9, 4.522e-9, 4.769e-9, 5.083e-9,
2201 5.443e-9, 5.872e-9, 6.366e-9, 6.949e-9, 7.601e-9, 8.371e-9,
2202 9.22e-9, 1.02e-8, 1.129e-8, 1.251e-8, 1.393e-8, 1.542e-8,
2203 1.72e-8, 1.926e-8, 2.152e-8, 2.392e-8, 2.678e-8, 3.028e-8,
2204 3.39e-8, 3.836e-8, 4.309e-8, 4.9e-8, 5.481e-8, 6.252e-8,
2205 7.039e-8, 7.883e-8, 8.849e-8, 1.012e-7, 1.142e-7, 1.3e-7,
2206 1.475e-7, 1.732e-7, 1.978e-7, 2.304e-7, 2.631e-7, 2.988e-7,
2207 3.392e-7, 3.69e-7, 4.355e-7, 4.672e-7, 5.11e-7, 5.461e-7,
2208 5.828e-7, 6.233e-7, 6.509e-7, 6.672e-7, 6.969e-7, 7.104e-7,
2209 7.439e-7, 7.463e-7, 7.708e-7, 7.466e-7, 7.668e-7, 7.549e-7,
2210 7.586e-7, 7.384e-7, 7.439e-7, 7.785e-7, 7.915e-7, 8.31e-7,
2211 8.745e-7, 9.558e-7, 1.038e-6, 1.173e-6, 1.304e-6, 1.452e-6,
2212 1.671e-6, 1.931e-6, 2.239e-6, 2.578e-6, 3.032e-6, 3.334e-6,
2213 3.98e-6, 4.3e-6, 4.518e-6, 5.321e-6, 5.508e-6, 6.211e-6, 6.59e-6,
2214 7.046e-6, 7.555e-6, 7.558e-6, 7.875e-6, 8.319e-6, 8.433e-6,
2215 8.59e-6, 8.503e-6, 8.304e-6, 8.336e-6, 7.739e-6, 7.301e-6,
2216 6.827e-6, 6.078e-6, 5.551e-6, 4.762e-6, 4.224e-6, 3.538e-6,
2217 2.984e-6, 2.619e-6, 2.227e-6, 1.923e-6, 1.669e-6, 1.462e-6,
2218 1.294e-6, 1.155e-6, 1.033e-6, 9.231e-7, 8.238e-7, 7.36e-7,
2219 6.564e-7, 5.869e-7, 5.236e-7, 4.673e-7, 4.174e-7, 3.736e-7,
2220 3.33e-7, 2.976e-7, 2.657e-7, 2.367e-7, 2.106e-7, 1.877e-7,
2221 1.671e-7, 1.494e-7, 1.332e-7, 1.192e-7, 1.065e-7, 9.558e-8,
2222 8.586e-8, 7.717e-8, 6.958e-8, 6.278e-8, 5.666e-8, 5.121e-8,
2223 4.647e-8, 4.213e-8, 3.815e-8, 3.459e-8, 3.146e-8, 2.862e-8,
2224 2.604e-8, 2.375e-8, 2.162e-8, 1.981e-8, 1.817e-8, 1.67e-8,
2225 1.537e-8, 1.417e-8, 1.31e-8, 1.215e-8, 1.128e-8, 1.05e-8,
2226 9.793e-9, 9.158e-9, 8.586e-9, 8.068e-9, 7.595e-9, 7.166e-9,
2227 6.778e-9, 6.427e-9, 6.108e-9, 5.826e-9, 5.571e-9, 5.347e-9,
2228 5.144e-9, 4.968e-9, 4.822e-9, 4.692e-9, 4.589e-9, 4.506e-9,
2229 4.467e-9, 4.44e-9, 4.466e-9, 4.515e-9, 4.718e-9, 4.729e-9,
2230 4.937e-9, 5.249e-9, 5.466e-9, 5.713e-9, 6.03e-9, 6.436e-9,
2231 6.741e-9, 7.33e-9, 7.787e-9, 8.414e-9, 8.908e-9, 9.868e-9,
2232 1.069e-8, 1.158e-8, 1.253e-8, 1.3e-8, 1.409e-8, 1.47e-8,
2233 1.548e-8, 1.612e-8, 1.666e-8, 1.736e-8, 1.763e-8, 1.812e-8,
2234 1.852e-8, 1.923e-8, 1.897e-8, 1.893e-8, 1.888e-8, 1.868e-8,
2235 1.895e-8, 1.899e-8, 1.876e-8, 1.96e-8, 2.02e-8, 2.121e-8,
2236 2.239e-8, 2.379e-8, 2.526e-8, 2.766e-8, 2.994e-8, 3.332e-8,
2237 3.703e-8, 4.158e-8, 4.774e-8, 5.499e-8, 6.355e-8, 7.349e-8,
2238 8.414e-8, 9.846e-8, 1.143e-7, 1.307e-7, 1.562e-7, 1.817e-7,
2239 2.011e-7, 2.192e-7, 2.485e-7, 2.867e-7, 3.035e-7, 3.223e-7,
2240 3.443e-7, 3.617e-7, 3.793e-7, 3.793e-7, 3.839e-7, 4.081e-7,
2241 4.117e-7, 4.085e-7, 3.92e-7, 3.851e-7, 3.754e-7, 3.49e-7,
2242 3.229e-7, 2.978e-7, 2.691e-7, 2.312e-7, 2.029e-7, 1.721e-7,
2243 1.472e-7, 1.308e-7, 1.132e-7, 9.736e-8, 8.458e-8, 7.402e-8,
2244 6.534e-8, 5.811e-8, 5.235e-8, 4.762e-8, 4.293e-8, 3.896e-8,
2245 3.526e-8, 3.165e-8, 2.833e-8, 2.551e-8, 2.288e-8, 2.036e-8,
2246 1.82e-8, 1.626e-8, 1.438e-8, 1.299e-8, 1.149e-8, 1.03e-8,
2247 9.148e-9, 8.122e-9, 7.264e-9, 6.425e-9, 5.777e-9, 5.06e-9,
2248 4.502e-9, 4.013e-9, 3.567e-9, 3.145e-9, 2.864e-9, 2.553e-9,
2249 2.311e-9, 2.087e-9, 1.886e-9, 1.716e-9, 1.556e-9, 1.432e-9,
2250 1.311e-9, 1.202e-9, 1.104e-9, 1.013e-9, 9.293e-10, 8.493e-10,
2251 7.79e-10, 7.185e-10, 6.642e-10, 6.141e-10, 5.684e-10, 5.346e-10,
2252 5.032e-10, 4.725e-10, 4.439e-10, 4.176e-10, 3.93e-10, 3.714e-10,
2253 3.515e-10, 3.332e-10, 3.167e-10, 3.02e-10, 2.887e-10, 2.769e-10,
2254 2.665e-10, 2.578e-10, 2.503e-10, 2.436e-10, 2.377e-10, 2.342e-10,
2255 2.305e-10, 2.296e-10, 2.278e-10, 2.321e-10, 2.355e-10, 2.402e-10,
2256 2.478e-10, 2.67e-10, 2.848e-10, 2.982e-10, 3.263e-10, 3.438e-10,
2257 3.649e-10, 3.829e-10, 4.115e-10, 4.264e-10, 4.473e-10, 4.63e-10,
2258 4.808e-10, 4.995e-10, 5.142e-10, 5.313e-10, 5.318e-10, 5.358e-10,
2259 5.452e-10, 5.507e-10, 5.698e-10, 5.782e-10, 5.983e-10, 6.164e-10,
2260 6.532e-10, 6.811e-10, 7.624e-10, 8.302e-10, 9.067e-10, 9.937e-10,
2261 1.104e-9, 1.221e-9, 1.361e-9, 1.516e-9, 1.675e-9, 1.883e-9,
2262 2.101e-9, 2.349e-9, 2.614e-9, 2.92e-9, 3.305e-9, 3.724e-9,
2263 4.142e-9, 4.887e-9, 5.614e-9, 6.506e-9, 7.463e-9, 8.817e-9,
2264 9.849e-9, 1.187e-8, 1.321e-8, 1.474e-8, 1.698e-8, 1.794e-8,
2265 2.09e-8, 2.211e-8, 2.362e-8, 2.556e-8, 2.729e-8, 2.88e-8,
2266 3.046e-8, 3.167e-8, 3.367e-8, 3.457e-8, 3.59e-8, 3.711e-8,
2267 3.826e-8, 4.001e-8, 4.211e-8, 4.315e-8, 4.661e-8, 5.01e-8,
2268 5.249e-8, 5.84e-8, 6.628e-8, 7.512e-8, 8.253e-8, 9.722e-8,
2269 1.067e-7, 1.153e-7, 1.347e-7, 1.428e-7, 1.577e-7, 1.694e-7,
2270 1.833e-7, 1.938e-7, 2.108e-7, 2.059e-7, 2.157e-7, 2.185e-7,
2271 2.208e-7, 2.182e-7, 2.093e-7, 2.014e-7, 1.962e-7, 1.819e-7,
2272 1.713e-7, 1.51e-7, 1.34e-7, 1.154e-7, 9.89e-8, 8.88e-8, 7.673e-8,
2273 6.599e-8, 5.73e-8, 5.081e-8, 4.567e-8, 4.147e-8, 3.773e-8,
2274 3.46e-8, 3.194e-8, 2.953e-8, 2.759e-8, 2.594e-8, 2.442e-8,
2275 2.355e-8, 2.283e-8, 2.279e-8, 2.231e-8, 2.279e-8, 2.239e-8,
2276 2.21e-8, 2.309e-8, 2.293e-8, 2.352e-8, 2.415e-8, 2.43e-8,
2277 2.426e-8, 2.465e-8, 2.5e-8, 2.496e-8, 2.465e-8, 2.445e-8,
2278 2.383e-8, 2.299e-8, 2.165e-8, 2.113e-8, 1.968e-8, 1.819e-8,
2279 1.644e-8, 1.427e-8, 1.27e-8, 1.082e-8, 9.428e-9, 8.091e-9,
2280 6.958e-9, 5.988e-9, 5.246e-9, 4.601e-9, 4.098e-9, 3.664e-9,
2281 3.287e-9, 2.942e-9, 2.656e-9, 2.364e-9, 2.118e-9, 1.903e-9,
2282 1.703e-9, 1.525e-9, 1.365e-9, 1.229e-9, 1.107e-9, 9.96e-10,
2283 8.945e-10, 8.08e-10, 7.308e-10, 6.616e-10, 5.994e-10, 5.422e-10,
2284 4.929e-10, 4.478e-10, 4.07e-10, 3.707e-10, 3.379e-10, 3.087e-10,
2285 2.823e-10, 2.592e-10, 2.385e-10, 2.201e-10, 2.038e-10, 1.897e-10,
2286 1.774e-10, 1.667e-10, 1.577e-10, 1.502e-10, 1.437e-10, 1.394e-10,
2287 1.358e-10, 1.324e-10, 1.329e-10, 1.324e-10, 1.36e-10, 1.39e-10,
2288 1.424e-10, 1.544e-10, 1.651e-10, 1.817e-10, 1.984e-10, 2.195e-10,
2289 2.438e-10, 2.7e-10, 2.991e-10, 3.322e-10, 3.632e-10, 3.957e-10,
2290 4.36e-10, 4.701e-10, 5.03e-10, 5.381e-10, 5.793e-10, 6.19e-10,
2291 6.596e-10, 7.004e-10, 7.561e-10, 7.934e-10, 8.552e-10, 9.142e-10,
2292 9.57e-10, 1.027e-9, 1.097e-9, 1.193e-9, 1.334e-9, 1.47e-9,
2293 1.636e-9, 1.871e-9, 2.122e-9, 2.519e-9, 2.806e-9, 3.203e-9,
2294 3.846e-9, 4.362e-9, 5.114e-9, 5.643e-9, 6.305e-9, 6.981e-9,
2295 7.983e-9, 8.783e-9, 9.419e-9, 1.017e-8, 1.063e-8, 1.121e-8,
2296 1.13e-8, 1.201e-8, 1.225e-8, 1.232e-8, 1.223e-8, 1.177e-8,
2297 1.151e-8, 1.116e-8, 1.047e-8, 9.698e-9, 8.734e-9, 8.202e-9,
2298 7.041e-9, 6.074e-9, 5.172e-9, 4.468e-9, 3.913e-9, 3.414e-9,
2299 2.975e-9, 2.65e-9, 2.406e-9, 2.173e-9, 2.009e-9, 1.861e-9,
2300 1.727e-9, 1.612e-9, 1.514e-9, 1.43e-9, 1.362e-9, 1.333e-9,
2301 1.288e-9, 1.249e-9, 1.238e-9, 1.228e-9, 1.217e-9, 1.202e-9,
2302 1.209e-9, 1.177e-9, 1.157e-9, 1.165e-9, 1.142e-9, 1.131e-9,
2303 1.138e-9, 1.117e-9, 1.1e-9, 1.069e-9, 1.023e-9, 1.005e-9,
2304 9.159e-10, 8.863e-10, 7.865e-10, 7.153e-10, 6.247e-10, 5.846e-10,
2305 5.133e-10, 4.36e-10, 3.789e-10, 3.335e-10, 2.833e-10, 2.483e-10,
2306 2.155e-10, 1.918e-10, 1.709e-10, 1.529e-10, 1.374e-10, 1.235e-10,
2307 1.108e-10, 9.933e-11, 8.932e-11, 8.022e-11, 7.224e-11, 6.52e-11,
2308 5.896e-11, 5.328e-11, 4.813e-11, 4.365e-11, 3.961e-11, 3.594e-11,
2309 3.266e-11, 2.967e-11, 2.701e-11, 2.464e-11, 2.248e-11, 2.054e-11,
2310 1.878e-11, 1.721e-11, 1.579e-11, 1.453e-11, 1.341e-11, 1.241e-11,
2311 1.154e-11, 1.078e-11, 1.014e-11, 9.601e-12, 9.167e-12, 8.838e-12,
2312 8.614e-12, 8.493e-12, 8.481e-12, 8.581e-12, 8.795e-12, 9.131e-12,
2313 9.601e-12, 1.021e-11, 1.097e-11, 1.191e-11, 1.303e-11, 1.439e-11,
2314 1.601e-11, 1.778e-11, 1.984e-11, 2.234e-11, 2.474e-11, 2.766e-11,
2315 3.085e-11, 3.415e-11, 3.821e-11, 4.261e-11, 4.748e-11, 5.323e-11,
2316 5.935e-11, 6.619e-11, 7.418e-11, 8.294e-11, 9.26e-11, 1.039e-10,
2317 1.156e-10, 1.297e-10, 1.46e-10, 1.641e-10, 1.858e-10, 2.1e-10,
2318 2.383e-10, 2.724e-10, 3.116e-10, 3.538e-10, 4.173e-10, 4.727e-10,
2319 5.503e-10, 6.337e-10, 7.32e-10, 8.298e-10, 9.328e-10, 1.059e-9,
2320 1.176e-9, 1.328e-9, 1.445e-9, 1.593e-9, 1.77e-9, 1.954e-9,
2321 2.175e-9, 2.405e-9, 2.622e-9, 2.906e-9, 3.294e-9, 3.713e-9,
2322 3.98e-9, 4.384e-9, 4.987e-9, 5.311e-9, 5.874e-9, 6.337e-9,
2323 7.027e-9, 7.39e-9, 7.769e-9, 8.374e-9, 8.605e-9, 9.165e-9,
2324 9.415e-9, 9.511e-9, 9.704e-9, 9.588e-9, 9.45e-9, 9.086e-9,
2325 8.798e-9, 8.469e-9, 7.697e-9, 7.168e-9, 6.255e-9, 5.772e-9,
2326 4.97e-9, 4.271e-9, 3.653e-9, 3.154e-9, 2.742e-9, 2.435e-9,
2327 2.166e-9, 1.936e-9, 1.731e-9, 1.556e-9, 1.399e-9, 1.272e-9,
2328 1.157e-9, 1.066e-9, 9.844e-10, 9.258e-10, 8.787e-10, 8.421e-10,
2329 8.083e-10, 8.046e-10, 8.067e-10, 8.181e-10, 8.325e-10, 8.517e-10,
2330 9.151e-10, 9.351e-10, 9.677e-10, 1.071e-9, 1.126e-9, 1.219e-9,
2331 1.297e-9, 1.408e-9, 1.476e-9, 1.517e-9, 1.6e-9, 1.649e-9,
2332 1.678e-9, 1.746e-9, 1.742e-9, 1.728e-9, 1.699e-9, 1.655e-9,
2333 1.561e-9, 1.48e-9, 1.451e-9, 1.411e-9, 1.171e-9, 1.106e-9,
2334 9.714e-10, 8.523e-10, 7.346e-10, 6.241e-10, 5.371e-10, 4.704e-10,
2335 4.144e-10, 3.683e-10, 3.292e-10, 2.942e-10, 2.62e-10, 2.341e-10,
2336 2.104e-10, 1.884e-10, 1.7e-10, 1.546e-10, 1.394e-10, 1.265e-10,
2337 1.14e-10, 1.019e-10, 9.279e-11, 8.283e-11, 7.458e-11, 6.668e-11,
2338 5.976e-11, 5.33e-11, 4.794e-11, 4.289e-11, 3.841e-11, 3.467e-11,
2339 3.13e-11, 2.832e-11, 2.582e-11, 2.356e-11, 2.152e-11, 1.97e-11,
2340 1.808e-11, 1.664e-11, 1.539e-11, 1.434e-11, 1.344e-11, 1.269e-11,
2341 1.209e-11, 1.162e-11, 1.129e-11, 1.108e-11, 1.099e-11, 1.103e-11,
2342 1.119e-11, 1.148e-11, 1.193e-11, 1.252e-11, 1.329e-11, 1.421e-11,
2343 1.555e-11, 1.685e-11, 1.839e-11, 2.054e-11, 2.317e-11, 2.571e-11,
2344 2.839e-11, 3.171e-11, 3.49e-11, 3.886e-11, 4.287e-11, 4.645e-11,
2345 5.047e-11, 5.592e-11, 6.109e-11, 6.628e-11, 7.381e-11, 8.088e-11,
2346 8.966e-11, 1.045e-10, 1.12e-10, 1.287e-10, 1.486e-10, 1.662e-10,
2347 1.866e-10, 2.133e-10, 2.524e-10, 2.776e-10, 3.204e-10, 3.559e-10,
2348 4.028e-10, 4.448e-10, 4.882e-10, 5.244e-10, 5.605e-10, 6.018e-10,
2349 6.328e-10, 6.579e-10, 6.541e-10, 7.024e-10, 7.074e-10, 7.068e-10,
2350 7.009e-10, 6.698e-10, 6.545e-10, 6.209e-10, 5.834e-10, 5.412e-10,
2351 5.001e-10, 4.231e-10, 3.727e-10, 3.211e-10, 2.833e-10, 2.447e-10,
2352 2.097e-10, 1.843e-10, 1.639e-10, 1.449e-10, 1.27e-10, 1.161e-10,
2353 1.033e-10, 9.282e-11, 8.407e-11, 7.639e-11, 7.023e-11, 6.474e-11,
2354 6.142e-11, 5.76e-11, 5.568e-11, 5.472e-11, 5.39e-11, 5.455e-11,
2355 5.54e-11, 5.587e-11, 6.23e-11, 6.49e-11, 6.868e-11, 7.382e-11,
2356 8.022e-11, 8.372e-11, 9.243e-11, 1.004e-10, 1.062e-10, 1.13e-10,
2357 1.176e-10, 1.244e-10, 1.279e-10, 1.298e-10, 1.302e-10, 1.312e-10,
2358 1.295e-10, 1.244e-10, 1.211e-10, 1.167e-10, 1.098e-10, 9.927e-11,
2359 8.854e-11, 8.011e-11, 7.182e-11, 5.923e-11, 5.212e-11, 4.453e-11,
2360 3.832e-11, 3.371e-11, 2.987e-11, 2.651e-11, 2.354e-11, 2.093e-11,
2361 1.863e-11, 1.662e-11, 1.486e-11, 1.331e-11, 1.193e-11, 1.071e-11,
2362 9.628e-12, 8.66e-12, 7.801e-12, 7.031e-12, 6.347e-12, 5.733e-12,
2363 5.182e-12, 4.695e-12, 4.26e-12, 3.874e-12, 3.533e-12, 3.235e-12,
2364 2.979e-12, 2.76e-12, 2.579e-12, 2.432e-12, 2.321e-12, 2.246e-12,
2365 2.205e-12, 2.196e-12, 2.223e-12, 2.288e-12, 2.387e-12, 2.525e-12,
2366 2.704e-12, 2.925e-12, 3.191e-12, 3.508e-12, 3.876e-12, 4.303e-12,
2367 4.793e-12, 5.347e-12, 5.978e-12, 6.682e-12, 7.467e-12, 8.34e-12,
2368 9.293e-12, 1.035e-11, 1.152e-11, 1.285e-11, 1.428e-11, 1.586e-11,
2369 1.764e-11, 1.972e-11, 2.214e-11, 2.478e-11, 2.776e-11, 3.151e-11,
2370 3.591e-11, 4.103e-11, 4.66e-11, 5.395e-11, 6.306e-11, 7.172e-11,
2371 8.358e-11, 9.67e-11, 1.11e-10, 1.325e-10, 1.494e-10, 1.736e-10,
2372 2.007e-10, 2.296e-10, 2.608e-10, 3.004e-10, 3.361e-10, 3.727e-10,
2373 4.373e-10, 4.838e-10, 5.483e-10, 6.006e-10, 6.535e-10, 6.899e-10,
2374 7.687e-10, 8.444e-10, 8.798e-10, 9.135e-10, 9.532e-10, 9.757e-10,
2375 9.968e-10, 1.006e-9, 9.949e-10, 9.789e-10, 9.564e-10, 9.215e-10,
2376 8.51e-10, 8.394e-10, 7.707e-10, 7.152e-10, 6.274e-10, 5.598e-10,
2377 5.028e-10, 4.3e-10, 3.71e-10, 3.245e-10, 2.809e-10, 2.461e-10,
2378 2.154e-10, 1.91e-10, 1.685e-10, 1.487e-10, 1.313e-10, 1.163e-10,
2379 1.031e-10, 9.172e-11, 8.221e-11, 7.382e-11, 6.693e-11, 6.079e-11,
2380 5.581e-11, 5.167e-11, 4.811e-11, 4.506e-11, 4.255e-11, 4.083e-11,
2381 3.949e-11, 3.881e-11, 3.861e-11, 3.858e-11, 3.951e-11, 4.045e-11,
2382 4.24e-11, 4.487e-11, 4.806e-11, 5.133e-11, 5.518e-11, 5.919e-11,
2383 6.533e-11, 7.031e-11, 7.762e-11, 8.305e-11, 9.252e-11, 9.727e-11,
2384 1.045e-10, 1.117e-10, 1.2e-10, 1.275e-10, 1.341e-10, 1.362e-10,
2385 1.438e-10, 1.45e-10, 1.455e-10, 1.455e-10, 1.434e-10, 1.381e-10,
2386 1.301e-10, 1.276e-10, 1.163e-10, 1.089e-10, 9.911e-11, 8.943e-11,
2387 7.618e-11, 6.424e-11, 5.717e-11, 4.866e-11, 4.257e-11, 3.773e-11,
2388 3.331e-11, 2.958e-11, 2.629e-11, 2.316e-11, 2.073e-11, 1.841e-11,
2389 1.635e-11, 1.464e-11, 1.31e-11, 1.16e-11, 1.047e-11, 9.408e-12,
2390 8.414e-12, 7.521e-12, 6.705e-12, 5.993e-12, 5.371e-12, 4.815e-12,
2391 4.338e-12, 3.921e-12, 3.567e-12, 3.265e-12, 3.01e-12, 2.795e-12,
2392 2.613e-12, 2.464e-12, 2.346e-12, 2.256e-12, 2.195e-12, 2.165e-12,
2393 2.166e-12, 2.198e-12, 2.262e-12, 2.364e-12, 2.502e-12, 2.682e-12,
2394 2.908e-12, 3.187e-12, 3.533e-12, 3.946e-12, 4.418e-12, 5.013e-12,
2395 5.708e-12, 6.379e-12, 7.43e-12, 8.39e-12, 9.51e-12, 1.078e-11,
2396 1.259e-11, 1.438e-11, 1.63e-11, 1.814e-11, 2.055e-11, 2.348e-11,
2397 2.664e-11, 2.956e-11, 3.3e-11, 3.677e-11, 4.032e-11, 4.494e-11,
2398 4.951e-11, 5.452e-11, 6.014e-11, 6.5e-11, 6.915e-11, 7.45e-11,
2399 7.971e-11, 8.468e-11, 8.726e-11, 8.995e-11, 9.182e-11, 9.509e-11,
2400 9.333e-11, 9.386e-11, 9.457e-11, 9.21e-11, 9.019e-11, 8.68e-11,
2401 8.298e-11, 7.947e-11, 7.46e-11, 7.082e-11, 6.132e-11, 5.855e-11,
2402 5.073e-11, 4.464e-11, 3.825e-11, 3.375e-11, 2.911e-11, 2.535e-11,
2403 2.16e-11, 1.907e-11, 1.665e-11, 1.463e-11, 1.291e-11, 1.133e-11,
2404 9.997e-12, 8.836e-12, 7.839e-12, 6.943e-12, 6.254e-12, 5.6e-12,
2405 5.029e-12, 4.529e-12, 4.102e-12, 3.737e-12, 3.428e-12, 3.169e-12,
2406 2.959e-12, 2.798e-12, 2.675e-12, 2.582e-12, 2.644e-12, 2.557e-12,
2407 2.614e-12, 2.717e-12, 2.874e-12, 3.056e-12, 3.187e-12, 3.631e-12,
2408 3.979e-12, 4.248e-12, 4.817e-12, 5.266e-12, 5.836e-12, 6.365e-12,
2409 6.807e-12, 7.47e-12, 7.951e-12, 8.636e-12, 8.972e-12, 9.314e-12,
2410 9.445e-12, 1.003e-11, 1.013e-11, 9.937e-12, 9.729e-12, 9.064e-12,
2411 9.119e-12, 9.124e-12, 8.704e-12, 8.078e-12, 7.47e-12, 6.329e-12,
2412 5.674e-12, 4.808e-12, 4.119e-12, 3.554e-12, 3.103e-12, 2.731e-12,
2413 2.415e-12, 2.15e-12, 1.926e-12, 1.737e-12, 1.578e-12, 1.447e-12,
2414 1.34e-12, 1.255e-12, 1.191e-12, 1.146e-12, 1.121e-12, 1.114e-12,
2415 1.126e-12, 1.156e-12, 1.207e-12, 1.278e-12, 1.372e-12, 1.49e-12,
2416 1.633e-12, 1.805e-12, 2.01e-12, 2.249e-12, 2.528e-12, 2.852e-12,
2417 3.228e-12, 3.658e-12, 4.153e-12, 4.728e-12, 5.394e-12, 6.176e-12,
2418 7.126e-12, 8.188e-12, 9.328e-12, 1.103e-11, 1.276e-11, 1.417e-11,
2419 1.615e-11, 1.84e-11, 2.155e-11, 2.429e-11, 2.826e-11, 3.222e-11,
2420 3.664e-11, 4.14e-11, 4.906e-11, 5.536e-11, 6.327e-11, 7.088e-11,
2421 8.316e-11, 9.242e-11, 1.07e-10, 1.223e-10, 1.341e-10, 1.553e-10,
2422 1.703e-10, 1.9e-10, 2.022e-10, 2.233e-10, 2.345e-10, 2.438e-10,
2423 2.546e-10, 2.599e-10, 2.661e-10, 2.703e-10, 2.686e-10, 2.662e-10,
2424 2.56e-10, 2.552e-10, 2.378e-10, 2.252e-10, 2.146e-10, 1.885e-10,
2425 1.668e-10, 1.441e-10, 1.295e-10, 1.119e-10, 9.893e-11, 8.687e-11,
2426 7.678e-11, 6.685e-11, 5.879e-11, 5.127e-11, 4.505e-11, 3.997e-11,
2427 3.511e-11
2428 };
2429
2430 static double h2ofrn[2001] = { .01095, .01126, .01205, .01322, .0143,
2431 .01506, .01548, .01534, .01486, .01373, .01262, .01134, .01001,
2432 .008702, .007475, .006481, .00548, .0046, .003833, .00311,
2433 .002543, .002049, .00168, .001374, .001046, 8.193e-4, 6.267e-4,
2434 4.968e-4, 3.924e-4, 2.983e-4, 2.477e-4, 1.997e-4, 1.596e-4,
2435 1.331e-4, 1.061e-4, 8.942e-5, 7.168e-5, 5.887e-5, 4.848e-5,
2436 3.817e-5, 3.17e-5, 2.579e-5, 2.162e-5, 1.768e-5, 1.49e-5,
2437 1.231e-5, 1.013e-5, 8.555e-6, 7.328e-6, 6.148e-6, 5.207e-6,
2438 4.387e-6, 3.741e-6, 3.22e-6, 2.753e-6, 2.346e-6, 1.985e-6,
2439 1.716e-6, 1.475e-6, 1.286e-6, 1.122e-6, 9.661e-7, 8.284e-7,
2440 7.057e-7, 6.119e-7, 5.29e-7, 4.571e-7, 3.948e-7, 3.432e-7,
2441 2.983e-7, 2.589e-7, 2.265e-7, 1.976e-7, 1.704e-7, 1.456e-7,
2442 1.26e-7, 1.101e-7, 9.648e-8, 8.415e-8, 7.34e-8, 6.441e-8,
2443 5.643e-8, 4.94e-8, 4.276e-8, 3.703e-8, 3.227e-8, 2.825e-8,
2444 2.478e-8, 2.174e-8, 1.898e-8, 1.664e-8, 1.458e-8, 1.278e-8,
2445 1.126e-8, 9.891e-9, 8.709e-9, 7.652e-9, 6.759e-9, 5.975e-9,
2446 5.31e-9, 4.728e-9, 4.214e-9, 3.792e-9, 3.463e-9, 3.226e-9,
2447 2.992e-9, 2.813e-9, 2.749e-9, 2.809e-9, 2.913e-9, 3.037e-9,
2448 3.413e-9, 3.738e-9, 4.189e-9, 4.808e-9, 5.978e-9, 7.088e-9,
2449 8.071e-9, 9.61e-9, 1.21e-8, 1.5e-8, 1.764e-8, 2.221e-8, 2.898e-8,
2450 3.948e-8, 5.068e-8, 6.227e-8, 7.898e-8, 1.033e-7, 1.437e-7,
2451 1.889e-7, 2.589e-7, 3.59e-7, 4.971e-7, 7.156e-7, 9.983e-7,
2452 1.381e-6, 1.929e-6, 2.591e-6, 3.453e-6, 4.57e-6, 5.93e-6,
2453 7.552e-6, 9.556e-6, 1.183e-5, 1.425e-5, 1.681e-5, 1.978e-5,
2454 2.335e-5, 2.668e-5, 3.022e-5, 3.371e-5, 3.715e-5, 3.967e-5,
2455 4.06e-5, 4.01e-5, 3.809e-5, 3.491e-5, 3.155e-5, 2.848e-5,
2456 2.678e-5, 2.66e-5, 2.811e-5, 3.071e-5, 3.294e-5, 3.459e-5,
2457 3.569e-5, 3.56e-5, 3.434e-5, 3.186e-5, 2.916e-5, 2.622e-5,
2458 2.275e-5, 1.918e-5, 1.62e-5, 1.373e-5, 1.182e-5, 1.006e-5,
2459 8.556e-6, 7.26e-6, 6.107e-6, 5.034e-6, 4.211e-6, 3.426e-6,
2460 2.865e-6, 2.446e-6, 1.998e-6, 1.628e-6, 1.242e-6, 1.005e-6,
2461 7.853e-7, 6.21e-7, 5.071e-7, 4.156e-7, 3.548e-7, 2.825e-7,
2462 2.261e-7, 1.916e-7, 1.51e-7, 1.279e-7, 1.059e-7, 9.14e-8,
2463 7.707e-8, 6.17e-8, 5.311e-8, 4.263e-8, 3.518e-8, 2.961e-8,
2464 2.457e-8, 2.119e-8, 1.712e-8, 1.439e-8, 1.201e-8, 1.003e-8,
2465 8.564e-9, 7.199e-9, 6.184e-9, 5.206e-9, 4.376e-9, 3.708e-9,
2466 3.157e-9, 2.725e-9, 2.361e-9, 2.074e-9, 1.797e-9, 1.562e-9,
2467 1.364e-9, 1.196e-9, 1.042e-9, 8.862e-10, 7.648e-10, 6.544e-10,
2468 5.609e-10, 4.791e-10, 4.108e-10, 3.531e-10, 3.038e-10, 2.618e-10,
2469 2.268e-10, 1.969e-10, 1.715e-10, 1.496e-10, 1.308e-10, 1.147e-10,
2470 1.008e-10, 8.894e-11, 7.885e-11, 7.031e-11, 6.355e-11, 5.854e-11,
2471 5.534e-11, 5.466e-11, 5.725e-11, 6.447e-11, 7.943e-11, 1.038e-10,
2472 1.437e-10, 2.04e-10, 2.901e-10, 4.051e-10, 5.556e-10, 7.314e-10,
2473 9.291e-10, 1.134e-9, 1.321e-9, 1.482e-9, 1.596e-9, 1.669e-9,
2474 1.715e-9, 1.762e-9, 1.817e-9, 1.828e-9, 1.848e-9, 1.873e-9,
2475 1.902e-9, 1.894e-9, 1.864e-9, 1.841e-9, 1.797e-9, 1.704e-9,
2476 1.559e-9, 1.382e-9, 1.187e-9, 1.001e-9, 8.468e-10, 7.265e-10,
2477 6.521e-10, 6.381e-10, 6.66e-10, 7.637e-10, 9.705e-10, 1.368e-9,
2478 1.856e-9, 2.656e-9, 3.954e-9, 5.96e-9, 8.72e-9, 1.247e-8,
2479 1.781e-8, 2.491e-8, 3.311e-8, 4.272e-8, 5.205e-8, 6.268e-8,
2480 7.337e-8, 8.277e-8, 9.185e-8, 1.004e-7, 1.091e-7, 1.159e-7,
2481 1.188e-7, 1.175e-7, 1.124e-7, 1.033e-7, 9.381e-8, 8.501e-8,
2482 7.956e-8, 7.894e-8, 8.331e-8, 9.102e-8, 9.836e-8, 1.035e-7,
2483 1.064e-7, 1.06e-7, 1.032e-7, 9.808e-8, 9.139e-8, 8.442e-8,
2484 7.641e-8, 6.881e-8, 6.161e-8, 5.404e-8, 4.804e-8, 4.446e-8,
2485 4.328e-8, 4.259e-8, 4.421e-8, 4.673e-8, 4.985e-8, 5.335e-8,
2486 5.796e-8, 6.542e-8, 7.714e-8, 8.827e-8, 1.04e-7, 1.238e-7,
2487 1.499e-7, 1.829e-7, 2.222e-7, 2.689e-7, 3.303e-7, 3.981e-7,
2488 4.84e-7, 5.91e-7, 7.363e-7, 9.087e-7, 1.139e-6, 1.455e-6,
2489 1.866e-6, 2.44e-6, 3.115e-6, 3.941e-6, 4.891e-6, 5.992e-6,
2490 7.111e-6, 8.296e-6, 9.21e-6, 9.987e-6, 1.044e-5, 1.073e-5,
2491 1.092e-5, 1.106e-5, 1.138e-5, 1.171e-5, 1.186e-5, 1.186e-5,
2492 1.179e-5, 1.166e-5, 1.151e-5, 1.16e-5, 1.197e-5, 1.241e-5,
2493 1.268e-5, 1.26e-5, 1.184e-5, 1.063e-5, 9.204e-6, 7.584e-6,
2494 6.053e-6, 4.482e-6, 3.252e-6, 2.337e-6, 1.662e-6, 1.18e-6,
2495 8.15e-7, 5.95e-7, 4.354e-7, 3.302e-7, 2.494e-7, 1.93e-7,
2496 1.545e-7, 1.25e-7, 1.039e-7, 8.602e-8, 7.127e-8, 5.897e-8,
2497 4.838e-8, 4.018e-8, 3.28e-8, 2.72e-8, 2.307e-8, 1.972e-8,
2498 1.654e-8, 1.421e-8, 1.174e-8, 1.004e-8, 8.739e-9, 7.358e-9,
2499 6.242e-9, 5.303e-9, 4.567e-9, 3.94e-9, 3.375e-9, 2.864e-9,
2500 2.422e-9, 2.057e-9, 1.75e-9, 1.505e-9, 1.294e-9, 1.101e-9,
2501 9.401e-10, 8.018e-10, 6.903e-10, 5.965e-10, 5.087e-10, 4.364e-10,
2502 3.759e-10, 3.247e-10, 2.809e-10, 2.438e-10, 2.123e-10, 1.853e-10,
2503 1.622e-10, 1.426e-10, 1.26e-10, 1.125e-10, 1.022e-10, 9.582e-11,
2504 9.388e-11, 9.801e-11, 1.08e-10, 1.276e-10, 1.551e-10, 1.903e-10,
2505 2.291e-10, 2.724e-10, 3.117e-10, 3.4e-10, 3.562e-10, 3.625e-10,
2506 3.619e-10, 3.429e-10, 3.221e-10, 2.943e-10, 2.645e-10, 2.338e-10,
2507 2.062e-10, 1.901e-10, 1.814e-10, 1.827e-10, 1.906e-10, 1.984e-10,
2508 2.04e-10, 2.068e-10, 2.075e-10, 2.018e-10, 1.959e-10, 1.897e-10,
2509 1.852e-10, 1.791e-10, 1.696e-10, 1.634e-10, 1.598e-10, 1.561e-10,
2510 1.518e-10, 1.443e-10, 1.377e-10, 1.346e-10, 1.342e-10, 1.375e-10,
2511 1.525e-10, 1.767e-10, 2.108e-10, 2.524e-10, 2.981e-10, 3.477e-10,
2512 4.262e-10, 5.326e-10, 6.646e-10, 8.321e-10, 1.069e-9, 1.386e-9,
2513 1.743e-9, 2.216e-9, 2.808e-9, 3.585e-9, 4.552e-9, 5.907e-9,
2514 7.611e-9, 9.774e-9, 1.255e-8, 1.666e-8, 2.279e-8, 3.221e-8,
2515 4.531e-8, 6.4e-8, 9.187e-8, 1.295e-7, 1.825e-7, 2.431e-7,
2516 3.181e-7, 4.009e-7, 4.941e-7, 5.88e-7, 6.623e-7, 7.155e-7,
2517 7.451e-7, 7.594e-7, 7.541e-7, 7.467e-7, 7.527e-7, 7.935e-7,
2518 8.461e-7, 8.954e-7, 9.364e-7, 9.843e-7, 1.024e-6, 1.05e-6,
2519 1.059e-6, 1.074e-6, 1.072e-6, 1.043e-6, 9.789e-7, 8.803e-7,
2520 7.662e-7, 6.378e-7, 5.133e-7, 3.958e-7, 2.914e-7, 2.144e-7,
2521 1.57e-7, 1.14e-7, 8.47e-8, 6.2e-8, 4.657e-8, 3.559e-8, 2.813e-8,
2522 2.222e-8, 1.769e-8, 1.391e-8, 1.125e-8, 9.186e-9, 7.704e-9,
2523 6.447e-9, 5.381e-9, 4.442e-9, 3.669e-9, 3.057e-9, 2.564e-9,
2524 2.153e-9, 1.784e-9, 1.499e-9, 1.281e-9, 1.082e-9, 9.304e-10,
2525 8.169e-10, 6.856e-10, 5.866e-10, 5.043e-10, 4.336e-10, 3.731e-10,
2526 3.175e-10, 2.745e-10, 2.374e-10, 2.007e-10, 1.737e-10, 1.508e-10,
2527 1.302e-10, 1.13e-10, 9.672e-11, 8.375e-11, 7.265e-11, 6.244e-11,
2528 5.343e-11, 4.654e-11, 3.975e-11, 3.488e-11, 3.097e-11, 2.834e-11,
2529 2.649e-11, 2.519e-11, 2.462e-11, 2.443e-11, 2.44e-11, 2.398e-11,
2530 2.306e-11, 2.183e-11, 2.021e-11, 1.821e-11, 1.599e-11, 1.403e-11,
2531 1.196e-11, 1.023e-11, 8.728e-12, 7.606e-12, 6.941e-12, 6.545e-12,
2532 6.484e-12, 6.6e-12, 6.718e-12, 6.785e-12, 6.746e-12, 6.724e-12,
2533 6.764e-12, 6.995e-12, 7.144e-12, 7.32e-12, 7.33e-12, 7.208e-12,
2534 6.789e-12, 6.09e-12, 5.337e-12, 4.62e-12, 4.037e-12, 3.574e-12,
2535 3.311e-12, 3.346e-12, 3.566e-12, 3.836e-12, 4.076e-12, 4.351e-12,
2536 4.691e-12, 5.114e-12, 5.427e-12, 6.167e-12, 7.436e-12, 8.842e-12,
2537 1.038e-11, 1.249e-11, 1.54e-11, 1.915e-11, 2.48e-11, 3.256e-11,
2538 4.339e-11, 5.611e-11, 7.519e-11, 1.037e-10, 1.409e-10, 1.883e-10,
2539 2.503e-10, 3.38e-10, 4.468e-10, 5.801e-10, 7.335e-10, 8.98e-10,
2540 1.11e-9, 1.363e-9, 1.677e-9, 2.104e-9, 2.681e-9, 3.531e-9,
2541 4.621e-9, 6.106e-9, 8.154e-9, 1.046e-8, 1.312e-8, 1.607e-8,
2542 1.948e-8, 2.266e-8, 2.495e-8, 2.655e-8, 2.739e-8, 2.739e-8,
2543 2.662e-8, 2.589e-8, 2.59e-8, 2.664e-8, 2.833e-8, 3.023e-8,
2544 3.305e-8, 3.558e-8, 3.793e-8, 3.961e-8, 4.056e-8, 4.102e-8,
2545 4.025e-8, 3.917e-8, 3.706e-8, 3.493e-8, 3.249e-8, 3.096e-8,
2546 3.011e-8, 3.111e-8, 3.395e-8, 3.958e-8, 4.875e-8, 6.066e-8,
2547 7.915e-8, 1.011e-7, 1.3e-7, 1.622e-7, 2.003e-7, 2.448e-7,
2548 2.863e-7, 3.317e-7, 3.655e-7, 3.96e-7, 4.098e-7, 4.168e-7,
2549 4.198e-7, 4.207e-7, 4.289e-7, 4.384e-7, 4.471e-7, 4.524e-7,
2550 4.574e-7, 4.633e-7, 4.785e-7, 5.028e-7, 5.371e-7, 5.727e-7,
2551 5.955e-7, 5.998e-7, 5.669e-7, 5.082e-7, 4.397e-7, 3.596e-7,
2552 2.814e-7, 2.074e-7, 1.486e-7, 1.057e-7, 7.25e-8, 4.946e-8,
2553 3.43e-8, 2.447e-8, 1.793e-8, 1.375e-8, 1.096e-8, 9.091e-9,
2554 7.709e-9, 6.631e-9, 5.714e-9, 4.886e-9, 4.205e-9, 3.575e-9,
2555 3.07e-9, 2.631e-9, 2.284e-9, 2.002e-9, 1.745e-9, 1.509e-9,
2556 1.284e-9, 1.084e-9, 9.163e-10, 7.663e-10, 6.346e-10, 5.283e-10,
2557 4.354e-10, 3.59e-10, 2.982e-10, 2.455e-10, 2.033e-10, 1.696e-10,
2558 1.432e-10, 1.211e-10, 1.02e-10, 8.702e-11, 7.38e-11, 6.293e-11,
2559 5.343e-11, 4.532e-11, 3.907e-11, 3.365e-11, 2.945e-11, 2.558e-11,
2560 2.192e-11, 1.895e-11, 1.636e-11, 1.42e-11, 1.228e-11, 1.063e-11,
2561 9.348e-12, 8.2e-12, 7.231e-12, 6.43e-12, 5.702e-12, 5.052e-12,
2562 4.469e-12, 4e-12, 3.679e-12, 3.387e-12, 3.197e-12, 3.158e-12,
2563 3.327e-12, 3.675e-12, 4.292e-12, 5.437e-12, 7.197e-12, 1.008e-11,
2564 1.437e-11, 2.035e-11, 2.905e-11, 4.062e-11, 5.528e-11, 7.177e-11,
2565 9.064e-11, 1.109e-10, 1.297e-10, 1.473e-10, 1.652e-10, 1.851e-10,
2566 2.079e-10, 2.313e-10, 2.619e-10, 2.958e-10, 3.352e-10, 3.796e-10,
2567 4.295e-10, 4.923e-10, 5.49e-10, 5.998e-10, 6.388e-10, 6.645e-10,
2568 6.712e-10, 6.549e-10, 6.38e-10, 6.255e-10, 6.253e-10, 6.459e-10,
2569 6.977e-10, 7.59e-10, 8.242e-10, 8.92e-10, 9.403e-10, 9.701e-10,
2570 9.483e-10, 9.135e-10, 8.617e-10, 7.921e-10, 7.168e-10, 6.382e-10,
2571 5.677e-10, 5.045e-10, 4.572e-10, 4.312e-10, 4.145e-10, 4.192e-10,
2572 4.541e-10, 5.368e-10, 6.771e-10, 8.962e-10, 1.21e-9, 1.659e-9,
2573 2.33e-9, 3.249e-9, 4.495e-9, 5.923e-9, 7.642e-9, 9.607e-9,
2574 1.178e-8, 1.399e-8, 1.584e-8, 1.73e-8, 1.816e-8, 1.87e-8,
2575 1.868e-8, 1.87e-8, 1.884e-8, 1.99e-8, 2.15e-8, 2.258e-8,
2576 2.364e-8, 2.473e-8, 2.602e-8, 2.689e-8, 2.731e-8, 2.816e-8,
2577 2.859e-8, 2.839e-8, 2.703e-8, 2.451e-8, 2.149e-8, 1.787e-8,
2578 1.449e-8, 1.111e-8, 8.282e-9, 6.121e-9, 4.494e-9, 3.367e-9,
2579 2.487e-9, 1.885e-9, 1.503e-9, 1.249e-9, 1.074e-9, 9.427e-10,
2580 8.439e-10, 7.563e-10, 6.772e-10, 6.002e-10, 5.254e-10, 4.588e-10,
2581 3.977e-10, 3.449e-10, 3.003e-10, 2.624e-10, 2.335e-10, 2.04e-10,
2582 1.771e-10, 1.534e-10, 1.296e-10, 1.097e-10, 9.173e-11, 7.73e-11,
2583 6.547e-11, 5.191e-11, 4.198e-11, 3.361e-11, 2.732e-11, 2.244e-11,
2584 1.791e-11, 1.509e-11, 1.243e-11, 1.035e-11, 8.969e-12, 7.394e-12,
2585 6.323e-12, 5.282e-12, 4.543e-12, 3.752e-12, 3.14e-12, 2.6e-12,
2586 2.194e-12, 1.825e-12, 1.511e-12, 1.245e-12, 1.024e-12, 8.539e-13,
2587 7.227e-13, 6.102e-13, 5.189e-13, 4.43e-13, 3.774e-13, 3.236e-13,
2588 2.8e-13, 2.444e-13, 2.156e-13, 1.932e-13, 1.775e-13, 1.695e-13,
2589 1.672e-13, 1.704e-13, 1.825e-13, 2.087e-13, 2.614e-13, 3.377e-13,
2590 4.817e-13, 6.989e-13, 1.062e-12, 1.562e-12, 2.288e-12, 3.295e-12,
2591 4.55e-12, 5.965e-12, 7.546e-12, 9.395e-12, 1.103e-11, 1.228e-11,
2592 1.318e-11, 1.38e-11, 1.421e-11, 1.39e-11, 1.358e-11, 1.336e-11,
2593 1.342e-11, 1.356e-11, 1.424e-11, 1.552e-11, 1.73e-11, 1.951e-11,
2594 2.128e-11, 2.249e-11, 2.277e-11, 2.226e-11, 2.111e-11, 1.922e-11,
2595 1.775e-11, 1.661e-11, 1.547e-11, 1.446e-11, 1.323e-11, 1.21e-11,
2596 1.054e-11, 9.283e-12, 8.671e-12, 8.67e-12, 9.429e-12, 1.062e-11,
2597 1.255e-11, 1.506e-11, 1.818e-11, 2.26e-11, 2.831e-11, 3.723e-11,
2598 5.092e-11, 6.968e-11, 9.826e-11, 1.349e-10, 1.87e-10, 2.58e-10,
2599 3.43e-10, 4.424e-10, 5.521e-10, 6.812e-10, 8.064e-10, 9.109e-10,
2600 9.839e-10, 1.028e-9, 1.044e-9, 1.029e-9, 1.005e-9, 1.002e-9,
2601 1.038e-9, 1.122e-9, 1.233e-9, 1.372e-9, 1.524e-9, 1.665e-9,
2602 1.804e-9, 1.908e-9, 2.015e-9, 2.117e-9, 2.219e-9, 2.336e-9,
2603 2.531e-9, 2.805e-9, 3.189e-9, 3.617e-9, 4.208e-9, 4.911e-9,
2604 5.619e-9, 6.469e-9, 7.188e-9, 7.957e-9, 8.503e-9, 9.028e-9,
2605 9.571e-9, 9.99e-9, 1.055e-8, 1.102e-8, 1.132e-8, 1.141e-8,
2606 1.145e-8, 1.145e-8, 1.176e-8, 1.224e-8, 1.304e-8, 1.388e-8,
2607 1.445e-8, 1.453e-8, 1.368e-8, 1.22e-8, 1.042e-8, 8.404e-9,
2608 6.403e-9, 4.643e-9, 3.325e-9, 2.335e-9, 1.638e-9, 1.19e-9,
2609 9.161e-10, 7.412e-10, 6.226e-10, 5.516e-10, 5.068e-10, 4.831e-10,
2610 4.856e-10, 5.162e-10, 5.785e-10, 6.539e-10, 7.485e-10, 8.565e-10,
2611 9.534e-10, 1.052e-9, 1.115e-9, 1.173e-9, 1.203e-9, 1.224e-9,
2612 1.243e-9, 1.248e-9, 1.261e-9, 1.265e-9, 1.25e-9, 1.217e-9,
2613 1.176e-9, 1.145e-9, 1.153e-9, 1.199e-9, 1.278e-9, 1.366e-9,
2614 1.426e-9, 1.444e-9, 1.365e-9, 1.224e-9, 1.051e-9, 8.539e-10,
2615 6.564e-10, 4.751e-10, 3.404e-10, 2.377e-10, 1.631e-10, 1.114e-10,
2616 7.87e-11, 5.793e-11, 4.284e-11, 3.3e-11, 2.62e-11, 2.152e-11,
2617 1.777e-11, 1.496e-11, 1.242e-11, 1.037e-11, 8.725e-12, 7.004e-12,
2618 5.718e-12, 4.769e-12, 3.952e-12, 3.336e-12, 2.712e-12, 2.213e-12,
2619 1.803e-12, 1.492e-12, 1.236e-12, 1.006e-12, 8.384e-13, 7.063e-13,
2620 5.879e-13, 4.93e-13, 4.171e-13, 3.569e-13, 3.083e-13, 2.688e-13,
2621 2.333e-13, 2.035e-13, 1.82e-13, 1.682e-13, 1.635e-13, 1.674e-13,
2622 1.769e-13, 2.022e-13, 2.485e-13, 3.127e-13, 4.25e-13, 5.928e-13,
2623 8.514e-13, 1.236e-12, 1.701e-12, 2.392e-12, 3.231e-12, 4.35e-12,
2624 5.559e-12, 6.915e-12, 8.519e-12, 1.013e-11, 1.146e-11, 1.24e-11,
2625 1.305e-11, 1.333e-11, 1.318e-11, 1.263e-11, 1.238e-11, 1.244e-11,
2626 1.305e-11, 1.432e-11, 1.623e-11, 1.846e-11, 2.09e-11, 2.328e-11,
2627 2.526e-11, 2.637e-11, 2.702e-11, 2.794e-11, 2.889e-11, 2.989e-11,
2628 3.231e-11, 3.68e-11, 4.375e-11, 5.504e-11, 7.159e-11, 9.502e-11,
2629 1.279e-10, 1.645e-10, 2.098e-10, 2.618e-10, 3.189e-10, 3.79e-10,
2630 4.303e-10, 4.753e-10, 5.027e-10, 5.221e-10, 5.293e-10, 5.346e-10,
2631 5.467e-10, 5.796e-10, 6.2e-10, 6.454e-10, 6.705e-10, 6.925e-10,
2632 7.233e-10, 7.35e-10, 7.538e-10, 7.861e-10, 8.077e-10, 8.132e-10,
2633 7.749e-10, 7.036e-10, 6.143e-10, 5.093e-10, 4.089e-10, 3.092e-10,
2634 2.299e-10, 1.705e-10, 1.277e-10, 9.723e-11, 7.533e-11, 6.126e-11,
2635 5.154e-11, 4.428e-11, 3.913e-11, 3.521e-11, 3.297e-11, 3.275e-11,
2636 3.46e-11, 3.798e-11, 4.251e-11, 4.745e-11, 5.232e-11, 5.606e-11,
2637 5.82e-11, 5.88e-11, 5.79e-11, 5.661e-11, 5.491e-11, 5.366e-11,
2638 5.341e-11, 5.353e-11, 5.336e-11, 5.293e-11, 5.248e-11, 5.235e-11,
2639 5.208e-11, 5.322e-11, 5.521e-11, 5.725e-11, 5.827e-11, 5.685e-11,
2640 5.245e-11, 4.612e-11, 3.884e-11, 3.129e-11, 2.404e-11, 1.732e-11,
2641 1.223e-11, 8.574e-12, 5.888e-12, 3.986e-12, 2.732e-12, 1.948e-12,
2642 1.414e-12, 1.061e-12, 8.298e-13, 6.612e-13, 5.413e-13, 4.472e-13,
2643 3.772e-13, 3.181e-13, 2.645e-13, 2.171e-13, 1.778e-13, 1.464e-13,
2644 1.183e-13, 9.637e-14, 7.991e-14, 6.668e-14, 5.57e-14, 4.663e-14,
2645 3.848e-14, 3.233e-14, 2.706e-14, 2.284e-14, 1.944e-14, 1.664e-14,
2646 1.43e-14, 1.233e-14, 1.066e-14, 9.234e-15, 8.023e-15, 6.993e-15,
2647 6.119e-15, 5.384e-15, 4.774e-15, 4.283e-15, 3.916e-15, 3.695e-15,
2648 3.682e-15, 4.004e-15, 4.912e-15, 6.853e-15, 1.056e-14, 1.712e-14,
2649 2.804e-14, 4.516e-14, 7.113e-14, 1.084e-13, 1.426e-13, 1.734e-13,
2650 1.978e-13, 2.194e-13, 2.388e-13, 2.489e-13, 2.626e-13, 2.865e-13,
2651 3.105e-13, 3.387e-13, 3.652e-13, 3.984e-13, 4.398e-13, 4.906e-13,
2652 5.55e-13, 6.517e-13, 7.813e-13, 9.272e-13, 1.164e-12, 1.434e-12,
2653 1.849e-12, 2.524e-12, 3.328e-12, 4.523e-12, 6.108e-12, 8.207e-12,
2654 1.122e-11, 1.477e-11, 1.9e-11, 2.412e-11, 2.984e-11, 3.68e-11,
2655 4.353e-11, 4.963e-11, 5.478e-11, 5.903e-11, 6.233e-11, 6.483e-11,
2656 6.904e-11, 7.569e-11, 8.719e-11, 1.048e-10, 1.278e-10, 1.557e-10,
2657 1.869e-10, 2.218e-10, 2.61e-10, 2.975e-10, 3.371e-10, 3.746e-10,
2658 4.065e-10, 4.336e-10, 4.503e-10, 4.701e-10, 4.8e-10, 4.917e-10,
2659 5.038e-10, 5.128e-10, 5.143e-10, 5.071e-10, 5.019e-10, 5.025e-10,
2660 5.183e-10, 5.496e-10, 5.877e-10, 6.235e-10, 6.42e-10, 6.234e-10,
2661 5.698e-10, 4.916e-10, 4.022e-10, 3.126e-10, 2.282e-10, 1.639e-10,
2662 1.142e-10, 7.919e-11, 5.69e-11, 4.313e-11, 3.413e-11, 2.807e-11,
2663 2.41e-11, 2.166e-11, 2.024e-11, 1.946e-11, 1.929e-11, 1.963e-11,
2664 2.035e-11, 2.162e-11, 2.305e-11, 2.493e-11, 2.748e-11, 3.048e-11,
2665 3.413e-11, 3.754e-11, 4.155e-11, 4.635e-11, 5.11e-11, 5.734e-11,
2666 6.338e-11, 6.99e-11, 7.611e-11, 8.125e-11, 8.654e-11, 8.951e-11,
2667 9.182e-11, 9.31e-11, 9.273e-11, 9.094e-11, 8.849e-11, 8.662e-11,
2668 8.67e-11, 8.972e-11, 9.566e-11, 1.025e-10, 1.083e-10, 1.111e-10,
2669 1.074e-10, 9.771e-11, 8.468e-11, 6.958e-11, 5.47e-11, 4.04e-11,
2670 2.94e-11, 2.075e-11, 1.442e-11, 1.01e-11, 7.281e-12, 5.409e-12,
2671 4.138e-12, 3.304e-12, 2.784e-12, 2.473e-12, 2.273e-12, 2.186e-12,
2672 2.118e-12, 2.066e-12, 1.958e-12, 1.818e-12, 1.675e-12, 1.509e-12,
2673 1.349e-12, 1.171e-12, 9.838e-13, 8.213e-13, 6.765e-13, 5.378e-13,
2674 4.161e-13, 3.119e-13, 2.279e-13, 1.637e-13, 1.152e-13, 8.112e-14,
2675 5.919e-14, 4.47e-14, 3.492e-14, 2.811e-14, 2.319e-14, 1.948e-14,
2676 1.66e-14, 1.432e-14, 1.251e-14, 1.109e-14, 1.006e-14, 9.45e-15,
2677 9.384e-15, 1.012e-14, 1.216e-14, 1.636e-14, 2.305e-14, 3.488e-14,
2678 5.572e-14, 8.479e-14, 1.265e-13, 1.905e-13, 2.73e-13, 3.809e-13,
2679 4.955e-13, 6.303e-13, 7.861e-13, 9.427e-13, 1.097e-12, 1.212e-12,
2680 1.328e-12, 1.415e-12, 1.463e-12, 1.495e-12, 1.571e-12, 1.731e-12,
2681 1.981e-12, 2.387e-12, 2.93e-12, 3.642e-12, 4.584e-12, 5.822e-12,
2682 7.278e-12, 9.193e-12, 1.135e-11, 1.382e-11, 1.662e-11, 1.958e-11,
2683 2.286e-11, 2.559e-11, 2.805e-11, 2.988e-11, 3.106e-11, 3.182e-11,
2684 3.2e-11, 3.258e-11, 3.362e-11, 3.558e-11, 3.688e-11, 3.8e-11,
2685 3.929e-11, 4.062e-11, 4.186e-11, 4.293e-11, 4.48e-11, 4.643e-11,
2686 4.704e-11, 4.571e-11, 4.206e-11, 3.715e-11, 3.131e-11, 2.541e-11,
2687 1.978e-11, 1.508e-11, 1.146e-11, 8.7e-12, 6.603e-12, 5.162e-12,
2688 4.157e-12, 3.408e-12, 2.829e-12, 2.405e-12, 2.071e-12, 1.826e-12,
2689 1.648e-12, 1.542e-12, 1.489e-12, 1.485e-12, 1.493e-12, 1.545e-12,
2690 1.637e-12, 1.814e-12, 2.061e-12, 2.312e-12, 2.651e-12, 3.03e-12,
2691 3.46e-12, 3.901e-12, 4.306e-12, 4.721e-12, 5.008e-12, 5.281e-12,
2692 5.541e-12, 5.791e-12, 6.115e-12, 6.442e-12, 6.68e-12, 6.791e-12,
2693 6.831e-12, 6.839e-12, 6.946e-12, 7.128e-12, 7.537e-12, 8.036e-12,
2694 8.392e-12, 8.526e-12, 8.11e-12, 7.325e-12, 6.329e-12, 5.183e-12,
2695 4.081e-12, 2.985e-12, 2.141e-12, 1.492e-12, 1.015e-12, 6.684e-13,
2696 4.414e-13, 2.987e-13, 2.038e-13, 1.391e-13, 9.86e-14, 7.24e-14,
2697 5.493e-14, 4.288e-14, 3.427e-14, 2.787e-14, 2.296e-14, 1.909e-14,
2698 1.598e-14, 1.344e-14, 1.135e-14, 9.616e-15, 8.169e-15, 6.957e-15,
2699 5.938e-15, 5.08e-15, 4.353e-15, 3.738e-15, 3.217e-15, 2.773e-15,
2700 2.397e-15, 2.077e-15, 1.805e-15, 1.575e-15, 1.382e-15, 1.221e-15,
2701 1.09e-15, 9.855e-16, 9.068e-16, 8.537e-16, 8.27e-16, 8.29e-16,
2702 8.634e-16, 9.359e-16, 1.055e-15, 1.233e-15, 1.486e-15, 1.839e-15,
2703 2.326e-15, 2.998e-15, 3.934e-15, 5.256e-15, 7.164e-15, 9.984e-15,
2704 1.427e-14, 2.099e-14, 3.196e-14, 5.121e-14, 7.908e-14, 1.131e-13,
2705 1.602e-13, 2.239e-13, 3.075e-13, 4.134e-13, 5.749e-13, 7.886e-13,
2706 1.071e-12, 1.464e-12, 2.032e-12, 2.8e-12, 3.732e-12, 4.996e-12,
2707 6.483e-12, 8.143e-12, 1.006e-11, 1.238e-11, 1.484e-11, 1.744e-11,
2708 2.02e-11, 2.274e-11, 2.562e-11, 2.848e-11, 3.191e-11, 3.617e-11,
2709 4.081e-11, 4.577e-11, 4.937e-11, 5.204e-11, 5.401e-11, 5.462e-11,
2710 5.507e-11, 5.51e-11, 5.605e-11, 5.686e-11, 5.739e-11, 5.766e-11,
2711 5.74e-11, 5.754e-11, 5.761e-11, 5.777e-11, 5.712e-11, 5.51e-11,
2712 5.088e-11, 4.438e-11, 3.728e-11, 2.994e-11, 2.305e-11, 1.715e-11,
2713 1.256e-11, 9.208e-12, 6.745e-12, 5.014e-12, 3.785e-12, 2.9e-12,
2714 2.239e-12, 1.757e-12, 1.414e-12, 1.142e-12, 9.482e-13, 8.01e-13,
2715 6.961e-13, 6.253e-13, 5.735e-13, 5.433e-13, 5.352e-13, 5.493e-13,
2716 5.706e-13, 6.068e-13, 6.531e-13, 7.109e-13, 7.767e-13, 8.59e-13,
2717 9.792e-13, 1.142e-12, 1.371e-12, 1.65e-12, 1.957e-12, 2.302e-12,
2718 2.705e-12, 3.145e-12, 3.608e-12, 4.071e-12, 4.602e-12, 5.133e-12,
2719 5.572e-12, 5.987e-12, 6.248e-12, 6.533e-12, 6.757e-12, 6.935e-12,
2720 7.224e-12, 7.422e-12, 7.538e-12, 7.547e-12, 7.495e-12, 7.543e-12,
2721 7.725e-12, 8.139e-12, 8.627e-12, 9.146e-12, 9.443e-12, 9.318e-12,
2722 8.649e-12, 7.512e-12, 6.261e-12, 4.915e-12, 3.647e-12, 2.597e-12,
2723 1.785e-12, 1.242e-12, 8.66e-13, 6.207e-13, 4.61e-13, 3.444e-13,
2724 2.634e-13, 2.1e-13, 1.725e-13, 1.455e-13, 1.237e-13, 1.085e-13,
2725 9.513e-14, 7.978e-14, 6.603e-14, 5.288e-14, 4.084e-14, 2.952e-14,
2726 2.157e-14, 1.593e-14, 1.199e-14, 9.267e-15, 7.365e-15, 6.004e-15,
2727 4.995e-15, 4.218e-15, 3.601e-15, 3.101e-15, 2.692e-15, 2.36e-15,
2728 2.094e-15, 1.891e-15, 1.755e-15, 1.699e-15, 1.755e-15, 1.987e-15,
2729 2.506e-15, 3.506e-15, 5.289e-15, 8.311e-15, 1.325e-14, 2.129e-14,
2730 3.237e-14, 4.595e-14, 6.441e-14, 8.433e-14, 1.074e-13, 1.383e-13,
2731 1.762e-13, 2.281e-13, 2.831e-13, 3.523e-13, 4.38e-13, 5.304e-13,
2732 6.29e-13, 7.142e-13, 8.032e-13, 8.934e-13, 9.888e-13, 1.109e-12,
2733 1.261e-12, 1.462e-12, 1.74e-12, 2.099e-12, 2.535e-12, 3.008e-12,
2734 3.462e-12, 3.856e-12, 4.098e-12, 4.239e-12, 4.234e-12, 4.132e-12,
2735 3.986e-12, 3.866e-12, 3.829e-12, 3.742e-12, 3.705e-12, 3.694e-12,
2736 3.765e-12, 3.849e-12, 3.929e-12, 4.056e-12, 4.092e-12, 4.047e-12,
2737 3.792e-12, 3.407e-12, 2.953e-12, 2.429e-12, 1.931e-12, 1.46e-12,
2738 1.099e-12, 8.199e-13, 6.077e-13, 4.449e-13, 3.359e-13, 2.524e-13,
2739 1.881e-13, 1.391e-13, 1.02e-13, 7.544e-14, 5.555e-14, 4.22e-14,
2740 3.321e-14, 2.686e-14, 2.212e-14, 1.78e-14, 1.369e-14, 1.094e-14,
2741 9.13e-15, 8.101e-15, 7.828e-15, 8.393e-15, 1.012e-14, 1.259e-14,
2742 1.538e-14, 1.961e-14, 2.619e-14, 3.679e-14, 5.049e-14, 6.917e-14,
2743 8.88e-14, 1.115e-13, 1.373e-13, 1.619e-13, 1.878e-13, 2.111e-13,
2744 2.33e-13, 2.503e-13, 2.613e-13, 2.743e-13, 2.826e-13, 2.976e-13,
2745 3.162e-13, 3.36e-13, 3.491e-13, 3.541e-13, 3.595e-13, 3.608e-13,
2746 3.709e-13, 3.869e-13, 4.12e-13, 4.366e-13, 4.504e-13, 4.379e-13,
2747 3.955e-13, 3.385e-13, 2.741e-13, 2.089e-13, 1.427e-13, 9.294e-14,
2748 5.775e-14, 3.565e-14, 2.21e-14, 1.398e-14, 9.194e-15, 6.363e-15,
2749 4.644e-15, 3.55e-15, 2.808e-15, 2.274e-15, 1.871e-15, 1.557e-15,
2750 1.308e-15, 1.108e-15, 9.488e-16, 8.222e-16, 7.238e-16, 6.506e-16,
2751 6.008e-16, 5.742e-16, 5.724e-16, 5.991e-16, 6.625e-16, 7.775e-16,
2752 9.734e-16, 1.306e-15, 1.88e-15, 2.879e-15, 4.616e-15, 7.579e-15,
2753 1.248e-14, 2.03e-14, 3.244e-14, 5.171e-14, 7.394e-14, 9.676e-14,
2754 1.199e-13, 1.467e-13, 1.737e-13, 2.02e-13, 2.425e-13, 3.016e-13,
2755 3.7e-13, 4.617e-13, 5.949e-13, 7.473e-13, 9.378e-13, 1.191e-12,
2756 1.481e-12, 1.813e-12, 2.232e-12, 2.722e-12, 3.254e-12, 3.845e-12,
2757 4.458e-12, 5.048e-12, 5.511e-12, 5.898e-12, 6.204e-12, 6.293e-12,
2758 6.386e-12, 6.467e-12, 6.507e-12, 6.466e-12, 6.443e-12, 6.598e-12,
2759 6.873e-12, 7.3e-12, 7.816e-12, 8.368e-12, 8.643e-12, 8.466e-12,
2760 7.871e-12, 6.853e-12, 5.714e-12, 4.482e-12, 3.392e-12, 2.613e-12,
2761 2.008e-12, 1.562e-12, 1.228e-12, 9.888e-13, 7.646e-13, 5.769e-13,
2762 4.368e-13, 3.324e-13, 2.508e-13, 1.916e-13
2763 };
2764
2765 static double xfcrev[15] =
2766 { 1.003, 1.009, 1.015, 1.023, 1.029, 1.033, 1.037,
2767 1.039, 1.04, 1.046, 1.036, 1.027, 1.01, 1.002, 1.
2768 };
2769
2770 double sfac;
2771
2772 /* Get H2O continuum absorption... */
2773 double xw = nu / 10 + 1;
2774 if (xw >= 1 && xw < 2001) {
2775 int iw = (int) xw;
2776 double dw = xw - iw;
2777 double ew = 1 - dw;
2778 double cw296 = ew * h2o296[iw - 1] + dw * h2o296[iw];
2779 double cw260 = ew * h2o260[iw - 1] + dw * h2o260[iw];
2780 double cwfrn = ew * h2ofrn[iw - 1] + dw * h2ofrn[iw];
2781 if (nu <= 820 || nu >= 960) {
2782 sfac = 1;
2783 } else {
2784 double xx = (nu - 820) / 10;
2785 int ix = (int) xx;
2786 double dx = xx - ix;
2787 sfac = (1 - dx) * xfcrev[ix] + dx * xfcrev[ix + 1];
2788 }
2789 double ctwslf =
2790 sfac * cw296 * pow(cw260 / cw296, (296 - t) / (296 - 260));
2791 double vf2 = POW2(nu - 370);
2792 double vf6 = POW3(vf2);
2793 double fscal = 36100 / (vf2 + vf6 * 1e-8 + 36100) * -.25 + 1;
2794 double ctwfrn = cwfrn * fscal;
2795 double a1 = nu * u * tanh(.7193876 / t * nu);
2796 double a2 = 296 / t;
2797 double a3 = p / P0 * (q * ctwslf + (1 - q) * ctwfrn) * 1e-20;
2798 return a1 * a2 * a3;
2799 } else
2800 return 0;
2801}
2802
2803/*****************************************************************************/
2804
2805double ctmn2(
2806 double nu,
2807 double p,
2808 double t) {
2809
2810 static double ba[98] = { 0., 4.45e-8, 5.22e-8, 6.46e-8, 7.75e-8, 9.03e-8,
2811 1.06e-7, 1.21e-7, 1.37e-7, 1.57e-7, 1.75e-7, 2.01e-7, 2.3e-7,
2812 2.59e-7, 2.95e-7, 3.26e-7, 3.66e-7, 4.05e-7, 4.47e-7, 4.92e-7,
2813 5.34e-7, 5.84e-7, 6.24e-7, 6.67e-7, 7.14e-7, 7.26e-7, 7.54e-7,
2814 7.84e-7, 8.09e-7, 8.42e-7, 8.62e-7, 8.87e-7, 9.11e-7, 9.36e-7,
2815 9.76e-7, 1.03e-6, 1.11e-6, 1.23e-6, 1.39e-6, 1.61e-6, 1.76e-6,
2816 1.94e-6, 1.97e-6, 1.87e-6, 1.75e-6, 1.56e-6, 1.42e-6, 1.35e-6,
2817 1.32e-6, 1.29e-6, 1.29e-6, 1.29e-6, 1.3e-6, 1.32e-6, 1.33e-6,
2818 1.34e-6, 1.35e-6, 1.33e-6, 1.31e-6, 1.29e-6, 1.24e-6, 1.2e-6,
2819 1.16e-6, 1.1e-6, 1.04e-6, 9.96e-7, 9.38e-7, 8.63e-7, 7.98e-7,
2820 7.26e-7, 6.55e-7, 5.94e-7, 5.35e-7, 4.74e-7, 4.24e-7, 3.77e-7,
2821 3.33e-7, 2.96e-7, 2.63e-7, 2.34e-7, 2.08e-7, 1.85e-7, 1.67e-7,
2822 1.47e-7, 1.32e-7, 1.2e-7, 1.09e-7, 9.85e-8, 9.08e-8, 8.18e-8,
2823 7.56e-8, 6.85e-8, 6.14e-8, 5.83e-8, 5.77e-8, 5e-8, 4.32e-8, 0.
2824 };
2825
2826 static double betaa[98] = { 802., 802., 761., 722., 679., 646., 609., 562.,
2827 511., 472., 436., 406., 377., 355., 338., 319., 299., 278., 255.,
2828 233., 208., 184., 149., 107., 66., 25., -13., -49., -82., -104.,
2829 -119., -130., -139., -144., -146., -146., -147., -148., -150.,
2830 -153., -160., -169., -181., -189., -195., -200., -205., -209.,
2831 -211., -210., -210., -209., -205., -199., -190., -180., -168.,
2832 -157., -143., -126., -108., -89., -63., -32., 1., 35., 65., 95.,
2833 121., 141., 152., 161., 164., 164., 161., 155., 148., 143., 137.,
2834 133., 131., 133., 139., 150., 165., 187., 213., 248., 284., 321.,
2835 372., 449., 514., 569., 609., 642., 673., 673.
2836 };
2837
2838 static double nua[98] = { 2120., 2125., 2130., 2135., 2140., 2145., 2150.,
2839 2155., 2160., 2165., 2170., 2175., 2180., 2185., 2190., 2195.,
2840 2200., 2205., 2210., 2215., 2220., 2225., 2230., 2235., 2240.,
2841 2245., 2250., 2255., 2260., 2265., 2270., 2275., 2280., 2285.,
2842 2290., 2295., 2300., 2305., 2310., 2315., 2320., 2325., 2330.,
2843 2335., 2340., 2345., 2350., 2355., 2360., 2365., 2370., 2375.,
2844 2380., 2385., 2390., 2395., 2400., 2405., 2410., 2415., 2420.,
2845 2425., 2430., 2435., 2440., 2445., 2450., 2455., 2460., 2465.,
2846 2470., 2475., 2480., 2485., 2490., 2495., 2500., 2505., 2510.,
2847 2515., 2520., 2525., 2530., 2535., 2540., 2545., 2550., 2555.,
2848 2560., 2565., 2570., 2575., 2580., 2585., 2590., 2595., 2600., 2605.
2849 };
2850
2851 const double q_n2 = 0.79, t0 = 273.0, tr = 296.0;
2852
2853 /* Check wavenumber range... */
2854 if (nu < nua[0] || nu > nua[97])
2855 return 0;
2856
2857 /* Interpolate B and beta... */
2858 int idx = locate_reg(nua, 98, nu);
2859 double b = LIN(nua[idx], ba[idx], nua[idx + 1], ba[idx + 1], nu);
2860 double beta = LIN(nua[idx], betaa[idx], nua[idx + 1], betaa[idx + 1], nu);
2861
2862 /* Compute absorption coefficient... */
2863 return 0.1 * POW2(p / P0 * t0 / t) * exp(beta * (1 / tr - 1 / t))
2864 * q_n2 * b * (q_n2 + (1 - q_n2) * (1.294 - 0.4545 * t / tr));
2865}
2866
2867/*****************************************************************************/
2868
2869double ctmo2(
2870 double nu,
2871 double p,
2872 double t) {
2873
2874 static double ba[90] = { 0., .061, .074, .084, .096, .12, .162, .208, .246,
2875 .285, .314, .38, .444, .5, .571, .673, .768, .853, .966, 1.097,
2876 1.214, 1.333, 1.466, 1.591, 1.693, 1.796, 1.922, 2.037, 2.154,
2877 2.264, 2.375, 2.508, 2.671, 2.847, 3.066, 3.417, 3.828, 4.204,
2878 4.453, 4.599, 4.528, 4.284, 3.955, 3.678, 3.477, 3.346, 3.29,
2879 3.251, 3.231, 3.226, 3.212, 3.192, 3.108, 3.033, 2.911, 2.798,
2880 2.646, 2.508, 2.322, 2.13, 1.928, 1.757, 1.588, 1.417, 1.253,
2881 1.109, .99, .888, .791, .678, .587, .524, .464, .403, .357, .32,
2882 .29, .267, .242, .215, .182, .16, .146, .128, .103, .087, .081,
2883 .071, .064, 0.
2884 };
2885
2886 static double betaa[90] = { 467., 467., 400., 315., 379., 368., 475., 521.,
2887 531., 512., 442., 444., 430., 381., 335., 324., 296., 248., 215.,
2888 193., 158., 127., 101., 71., 31., -6., -26., -47., -63., -79.,
2889 -88., -88., -87., -90., -98., -99., -109., -134., -160., -167.,
2890 -164., -158., -153., -151., -156., -166., -168., -173., -170.,
2891 -161., -145., -126., -108., -84., -59., -29., 4., 41., 73., 97.,
2892 123., 159., 198., 220., 242., 256., 281., 311., 334., 319., 313.,
2893 321., 323., 310., 315., 320., 335., 361., 378., 373., 338., 319.,
2894 346., 322., 291., 290., 350., 371., 504., 504.
2895 };
2896
2897 static double nua[90] = { 1360., 1365., 1370., 1375., 1380., 1385., 1390.,
2898 1395., 1400., 1405., 1410., 1415., 1420., 1425., 1430., 1435.,
2899 1440., 1445., 1450., 1455., 1460., 1465., 1470., 1475., 1480.,
2900 1485., 1490., 1495., 1500., 1505., 1510., 1515., 1520., 1525.,
2901 1530., 1535., 1540., 1545., 1550., 1555., 1560., 1565., 1570.,
2902 1575., 1580., 1585., 1590., 1595., 1600., 1605., 1610., 1615.,
2903 1620., 1625., 1630., 1635., 1640., 1645., 1650., 1655., 1660.,
2904 1665., 1670., 1675., 1680., 1685., 1690., 1695., 1700., 1705.,
2905 1710., 1715., 1720., 1725., 1730., 1735., 1740., 1745., 1750.,
2906 1755., 1760., 1765., 1770., 1775., 1780., 1785., 1790., 1795.,
2907 1800., 1805.
2908 };
2909
2910 const double q_o2 = 0.21, t0 = 273, tr = 296;
2911
2912 /* Check wavenumber range... */
2913 if (nu < nua[0] || nu > nua[89])
2914 return 0;
2915
2916 /* Interpolate B and beta... */
2917 int idx = locate_reg(nua, 90, nu);
2918 double b = LIN(nua[idx], ba[idx], nua[idx + 1], ba[idx + 1], nu);
2919 double beta = LIN(nua[idx], betaa[idx], nua[idx + 1], betaa[idx + 1], nu);
2920
2921 /* Compute absorption coefficient... */
2922 return 0.1 * POW2(p / P0 * t0 / t) * exp(beta * (1 / tr - 1 / t)) * q_o2 *
2923 b;
2924}
2925
2926/*****************************************************************************/
2927
2929 ctl_t * ctl,
2930 atm_t * atm_dest,
2931 atm_t * atm_src,
2932 int init) {
2933
2934 /* Data size... */
2935 size_t s = (size_t) atm_src->np * sizeof(double);
2936
2937 /* Copy data... */
2938 atm_dest->np = atm_src->np;
2939 memcpy(atm_dest->time, atm_src->time, s);
2940 memcpy(atm_dest->z, atm_src->z, s);
2941 memcpy(atm_dest->lon, atm_src->lon, s);
2942 memcpy(atm_dest->lat, atm_src->lat, s);
2943 memcpy(atm_dest->p, atm_src->p, s);
2944 memcpy(atm_dest->t, atm_src->t, s);
2945 for (int ig = 0; ig < ctl->ng; ig++)
2946 memcpy(atm_dest->q[ig], atm_src->q[ig], s);
2947 for (int iw = 0; iw < ctl->nw; iw++)
2948 memcpy(atm_dest->k[iw], atm_src->k[iw], s);
2949 atm_dest->clz = atm_src->clz;
2950 atm_dest->cldz = atm_src->cldz;
2951 for (int icl = 0; icl < ctl->ncl; icl++)
2952 atm_dest->clk[icl] = atm_src->clk[icl];
2953 atm_dest->sfz = atm_src->sfz;
2954 atm_dest->sfp = atm_src->sfp;
2955 atm_dest->sft = atm_src->sft;
2956 for (int isf = 0; isf < ctl->nsf; isf++)
2957 atm_dest->sfeps[isf] = atm_src->sfeps[isf];
2958
2959 /* Initialize... */
2960 if (init)
2961 for (int ip = 0; ip < atm_dest->np; ip++) {
2962 atm_dest->p[ip] = 0;
2963 atm_dest->t[ip] = 0;
2964 for (int ig = 0; ig < ctl->ng; ig++)
2965 atm_dest->q[ig][ip] = 0;
2966 for (int iw = 0; iw < ctl->nw; iw++)
2967 atm_dest->k[iw][ip] = 0;
2968 atm_dest->clz = 0;
2969 atm_dest->cldz = 0;
2970 for (int icl = 0; icl < ctl->ncl; icl++)
2971 atm_dest->clk[icl] = 0;
2972 atm_dest->sfz = 0;
2973 atm_dest->sfp = 0;
2974 atm_dest->sft = 0;
2975 for (int isf = 0; isf < ctl->nsf; isf++)
2976 atm_dest->sfeps[isf] = 1;
2977 }
2978}
2979
2980/*****************************************************************************/
2981
2983 ctl_t * ctl,
2984 obs_t * obs_dest,
2985 obs_t * obs_src,
2986 int init) {
2987
2988 /* Data size... */
2989 size_t s = (size_t) obs_src->nr * sizeof(double);
2990
2991 /* Copy data... */
2992 obs_dest->nr = obs_src->nr;
2993 memcpy(obs_dest->time, obs_src->time, s);
2994 memcpy(obs_dest->obsz, obs_src->obsz, s);
2995 memcpy(obs_dest->obslon, obs_src->obslon, s);
2996 memcpy(obs_dest->obslat, obs_src->obslat, s);
2997 memcpy(obs_dest->vpz, obs_src->vpz, s);
2998 memcpy(obs_dest->vplon, obs_src->vplon, s);
2999 memcpy(obs_dest->vplat, obs_src->vplat, s);
3000 memcpy(obs_dest->tpz, obs_src->tpz, s);
3001 memcpy(obs_dest->tplon, obs_src->tplon, s);
3002 memcpy(obs_dest->tplat, obs_src->tplat, s);
3003 for (int id = 0; id < ctl->nd; id++)
3004 memcpy(obs_dest->rad[id], obs_src->rad[id], s);
3005 for (int id = 0; id < ctl->nd; id++)
3006 memcpy(obs_dest->tau[id], obs_src->tau[id], s);
3007
3008 /* Initialize... */
3009 if (init)
3010 for (int id = 0; id < ctl->nd; id++)
3011 for (int ir = 0; ir < obs_dest->nr; ir++)
3012 if (isfinite(obs_dest->rad[id][ir])) {
3013 obs_dest->rad[id][ir] = 0;
3014 obs_dest->tau[id][ir] = 0;
3015 }
3016}
3017
3018/*****************************************************************************/
3019
3021 ctl_t * ctl,
3022 const char *emitter) {
3023
3024 for (int ig = 0; ig < ctl->ng; ig++)
3025 if (strcasecmp(ctl->emitter[ig], emitter) == 0)
3026 return ig;
3027
3028 return -1;
3029}
3030
3031/*****************************************************************************/
3032
3034 ctl_t * ctl,
3035 atm_t * atm,
3036 obs_t * obs) {
3037
3038 int *mask;
3039
3040 /* Allocate... */
3041 ALLOC(mask, int,
3042 ND * NR);
3043
3044 /* Save observation mask... */
3045 for (int id = 0; id < ctl->nd; id++)
3046 for (int ir = 0; ir < obs->nr; ir++)
3047 mask[id * NR + ir] = !isfinite(obs->rad[id][ir]);
3048
3049 /* Hydrostatic equilibrium... */
3050 hydrostatic(ctl, atm);
3051
3052 /* CGA or EGA forward model... */
3053 if (ctl->formod == 0 || ctl->formod == 1)
3054 for (int ir = 0; ir < obs->nr; ir++)
3055 formod_pencil(ctl, atm, obs, ir);
3056
3057 /* Call RFM... */
3058 else if (ctl->formod == 2)
3059 formod_rfm(ctl, atm, obs);
3060
3061 /* Apply field-of-view convolution... */
3062 formod_fov(ctl, obs);
3063
3064 /* Convert radiance to brightness temperature... */
3065 if (ctl->write_bbt)
3066 for (int id = 0; id < ctl->nd; id++)
3067 for (int ir = 0; ir < obs->nr; ir++)
3068 obs->rad[id][ir] = brightness(obs->rad[id][ir], ctl->nu[id]);
3069
3070 /* Apply observation mask... */
3071 for (int id = 0; id < ctl->nd; id++)
3072 for (int ir = 0; ir < obs->nr; ir++)
3073 if (mask[id * NR + ir])
3074 obs->rad[id][ir] = NAN;
3075
3076 /* Free... */
3077 free(mask);
3078}
3079
3080/*****************************************************************************/
3081
3083 ctl_t * ctl,
3084 los_t * los,
3085 int ip,
3086 double *beta) {
3087
3088 static int ig_co2 = -999, ig_h2o = -999;
3089
3090 /* Extinction... */
3091 for (int id = 0; id < ctl->nd; id++)
3092 beta[id] = los->k[ip][id];
3093
3094 /* CO2 continuum... */
3095 if (ctl->ctm_co2) {
3096 if (ig_co2 == -999)
3097 ig_co2 = find_emitter(ctl, "CO2");
3098 if (ig_co2 >= 0)
3099 for (int id = 0; id < ctl->nd; id++)
3100 beta[id] += ctmco2(ctl->nu[id], los->p[ip], los->t[ip],
3101 los->u[ip][ig_co2]) / los->ds[ip];
3102 }
3103
3104 /* H2O continuum... */
3105 if (ctl->ctm_h2o) {
3106 if (ig_h2o == -999)
3107 ig_h2o = find_emitter(ctl, "H2O");
3108 if (ig_h2o >= 0)
3109 for (int id = 0; id < ctl->nd; id++)
3110 beta[id] += ctmh2o(ctl->nu[id], los->p[ip], los->t[ip],
3111 los->q[ip][ig_h2o], los->u[ip][ig_h2o])
3112 / los->ds[ip];
3113 }
3114
3115 /* N2 continuum... */
3116 if (ctl->ctm_n2)
3117 for (int id = 0; id < ctl->nd; id++)
3118 beta[id] += ctmn2(ctl->nu[id], los->p[ip], los->t[ip]);
3119
3120 /* O2 continuum... */
3121 if (ctl->ctm_o2)
3122 for (int id = 0; id < ctl->nd; id++)
3123 beta[id] += ctmo2(ctl->nu[id], los->p[ip], los->t[ip]);
3124}
3125
3126/*****************************************************************************/
3127
3129 ctl_t * ctl,
3130 obs_t * obs) {
3131
3132 static double dz[NSHAPE], w[NSHAPE];
3133
3134 static int init = 0, n;
3135
3136 obs_t *obs2;
3137
3138 double rad[ND][NR], tau[ND][NR], z[NR];
3139
3140 /* Do not take into account FOV... */
3141 if (ctl->fov[0] == '-')
3142 return;
3143
3144 /* Initialize FOV data... */
3145 if (!init) {
3146 init = 1;
3147 read_shape(ctl->fov, dz, w, &n);
3148 }
3149
3150 /* Allocate... */
3151 ALLOC(obs2, obs_t, 1);
3152
3153 /* Copy observation data... */
3154 copy_obs(ctl, obs2, obs, 0);
3155
3156 /* Loop over ray paths... */
3157 for (int ir = 0; ir < obs->nr; ir++) {
3158
3159 /* Get radiance and transmittance profiles... */
3160 int nz = 0;
3161 for (int ir2 = MAX(ir - NFOV, 0);
3162 ir2 < MIN(ir + 1 + NFOV, obs->nr); ir2++)
3163 if (obs->time[ir2] == obs->time[ir]) {
3164 z[nz] = obs2->vpz[ir2];
3165 for (int id = 0; id < ctl->nd; id++) {
3166 rad[id][nz] = obs2->rad[id][ir2];
3167 tau[id][nz] = obs2->tau[id][ir2];
3168 }
3169 nz++;
3170 }
3171 if (nz < 2)
3172 ERRMSG("Cannot apply FOV convolution!");
3173
3174 /* Convolute profiles with FOV... */
3175 double wsum = 0;
3176 for (int id = 0; id < ctl->nd; id++) {
3177 obs->rad[id][ir] = 0;
3178 obs->tau[id][ir] = 0;
3179 }
3180 for (int i = 0; i < n; i++) {
3181 double zfov = obs->vpz[ir] + dz[i];
3182 int idx = locate_irr(z, nz, zfov);
3183 for (int id = 0; id < ctl->nd; id++) {
3184 obs->rad[id][ir] += w[i]
3185 * LIN(z[idx], rad[id][idx], z[idx + 1], rad[id][idx + 1], zfov);
3186 obs->tau[id][ir] += w[i]
3187 * LIN(z[idx], tau[id][idx], z[idx + 1], tau[id][idx + 1], zfov);
3188 }
3189 wsum += w[i];
3190 }
3191 for (int id = 0; id < ctl->nd; id++) {
3192 obs->rad[id][ir] /= wsum;
3193 obs->tau[id][ir] /= wsum;
3194 }
3195 }
3196
3197 /* Free... */
3198 free(obs2);
3199}
3200
3201/*****************************************************************************/
3202
3204 ctl_t * ctl,
3205 atm_t * atm,
3206 obs_t * obs,
3207 int ir) {
3208
3209 static tbl_t *tbl;
3210
3211 static int init = 0;
3212
3213 los_t *los;
3214
3215 double beta_ctm[ND], rad[ND], tau[ND], tau_refl[ND],
3216 tau_path[ND][NG], tau_gas[ND], x0[3], x1[3];
3217
3218 /* Initialize look-up tables... */
3219 if (!init) {
3220 init = 1;
3221 ALLOC(tbl, tbl_t, 1);
3222 read_tbl(ctl, tbl);
3223 init_srcfunc(ctl, tbl);
3224 }
3225
3226 /* Allocate... */
3227 ALLOC(los, los_t, 1);
3228
3229 /* Initialize... */
3230 for (int id = 0; id < ctl->nd; id++) {
3231 rad[id] = 0;
3232 tau[id] = 1;
3233 for (int ig = 0; ig < ctl->ng; ig++)
3234 tau_path[id][ig] = 1;
3235 }
3236
3237 /* Raytracing... */
3238 raytrace(ctl, atm, obs, los, ir);
3239
3240 /* Loop over LOS points... */
3241 for (int ip = 0; ip < los->np; ip++) {
3242
3243 /* Get trace gas transmittance... */
3244 if (ctl->formod == 0)
3245 intpol_tbl_cga(ctl, tbl, los, ip, tau_path, tau_gas);
3246 else
3247 intpol_tbl_ega(ctl, tbl, los, ip, tau_path, tau_gas);
3248
3249 /* Get continuum absorption... */
3250 formod_continua(ctl, los, ip, beta_ctm);
3251
3252 /* Compute Planck function... */
3253 formod_srcfunc(ctl, tbl, los->t[ip], los->src[ip]);
3254
3255 /* Loop over channels... */
3256 for (int id = 0; id < ctl->nd; id++)
3257 if (tau_gas[id] > 0) {
3258
3259 /* Get segment emissivity... */
3260 los->eps[ip][id] = 1 - tau_gas[id] * exp(-beta_ctm[id] * los->ds[ip]);
3261
3262 /* Compute radiance... */
3263 rad[id] += los->src[ip][id] * los->eps[ip][id] * tau[id];
3264
3265 /* Compute path transmittance... */
3266 tau[id] *= (1 - los->eps[ip][id]);
3267 }
3268 }
3269
3270 /* Check whether LOS hit the ground... */
3271 if (ctl->sftype >= 1 && los->sft > 0) {
3272
3273 /* Add surface emissions... */
3274 double src_sf[ND];
3275 formod_srcfunc(ctl, tbl, los->sft, src_sf);
3276 for (int id = 0; id < ctl->nd; id++)
3277 rad[id] += los->sfeps[id] * src_sf[id] * tau[id];
3278
3279 /* Check reflectivity... */
3280 int refl = 0;
3281 if (ctl->sftype >= 2)
3282 for (int id = 0; id < ctl->nd; id++)
3283 if (los->sfeps[id] < 1) {
3284 refl = 1;
3285 break;
3286 }
3287
3288 /* Calculate reflection... */
3289 if (refl) {
3290
3291 /* Initialize... */
3292 for (int id = 0; id < ctl->nd; id++)
3293 tau_refl[id] = 1;
3294
3295 /* Add down-welling radiance... */
3296 for (int ip = los->np - 1; ip >= 0; ip--)
3297 for (int id = 0; id < ctl->nd; id++) {
3298 rad[id] += los->src[ip][id] * los->eps[ip][id] * tau_refl[id]
3299 * tau[id] * (1 - los->sfeps[id]);
3300 tau_refl[id] *= (1 - los->eps[ip][id]);
3301 }
3302
3303 /* Add solar term... */
3304 if (ctl->sftype >= 3) {
3305
3306 /* Get solar zenith angle... */
3307 double sza2;
3308 if (ctl->sfsza < 0)
3309 sza2 =
3310 sza(obs->time[ir], los->lon[los->np - 1], los->lat[los->np - 1]);
3311 else
3312 sza2 = ctl->sfsza;
3313
3314 /* Check solar zenith angle... */
3315 if (sza2 < 89.999) {
3316
3317 /* Get angle of incidence... */
3318 geo2cart(los->z[los->np - 1], los->lon[los->np - 1],
3319 los->lat[los->np - 1], x0);
3320 geo2cart(los->z[0], los->lon[0], los->lat[0], x1);
3321 for (int i = 0; i < 3; i++)
3322 x1[i] -= x0[i];
3323 double cosa = DOTP(x0, x1) / NORM(x0) / NORM(x1);
3324
3325 /* Get ratio of SZA and incident radiation... */
3326 double rcos = cosa / cos(sza2 * M_PI / 180.);
3327
3328 /* Add solar radiation... */
3329 for (int id = 0; id < ctl->nd; id++)
3330 rad[id] += 6.764e-5 / (2. * M_PI) * planck(TSUN, ctl->nu[id])
3331 * tau_refl[id] * (1 - los->sfeps[id]) * tau[id] * rcos;
3332 }
3333 }
3334 }
3335 }
3336
3337 /* Copy results... */
3338 for (int id = 0; id < ctl->nd; id++) {
3339 obs->rad[id][ir] = rad[id];
3340 obs->tau[id][ir] = tau[id];
3341 }
3342
3343 /* Free... */
3344 free(los);
3345}
3346
3347/*****************************************************************************/
3348
3350 ctl_t * ctl,
3351 atm_t * atm,
3352 obs_t * obs) {
3353
3354 los_t *los;
3355
3356 FILE *out;
3357
3358 char cmd[2 * LEN], filename[2 * LEN],
3359 rfmflg[LEN] = { "RAD TRA MIX LIN SFC" };
3360
3361 double f[NSHAPE], nu[NSHAPE], nu0, nu1, obsz = -999, tsurf,
3362 xd[3], xo[3], xv[3], z[NR], zmin, zmax;
3363
3364 int i, id, ig, ip, ir, iw, n, nadir = 0;
3365
3366 /* Allocate... */
3367 ALLOC(los, los_t, 1);
3368
3369 /* Check observer positions... */
3370 for (ir = 1; ir < obs->nr; ir++)
3371 if (obs->obsz[ir] != obs->obsz[0]
3372 || obs->obslon[ir] != obs->obslon[0]
3373 || obs->obslat[ir] != obs->obslat[0])
3374 ERRMSG("RFM interface requires identical observer positions!");
3375
3376 /* Check extinction data... */
3377 for (iw = 0; iw < ctl->nw; iw++)
3378 for (ip = 0; ip < atm->np; ip++)
3379 if (atm->k[iw][ip] != 0)
3380 ERRMSG("RFM interface cannot handle extinction data!");
3381
3382 /* Get altitude range of atmospheric data... */
3383 gsl_stats_minmax(&zmin, &zmax, atm->z, 1, (size_t) atm->np);
3384
3385 /* Observer within atmosphere? */
3386 if (obs->obsz[0] >= zmin && obs->obsz[0] <= zmax) {
3387 obsz = obs->obsz[0];
3388 strcat(rfmflg, " OBS");
3389 }
3390
3391 /* Determine tangent altitude or air mass factor... */
3392 for (ir = 0; ir < obs->nr; ir++) {
3393
3394 /* Raytracing... */
3395 raytrace(ctl, atm, obs, los, ir);
3396
3397 /* Nadir? */
3398 if (obs->tpz[ir] <= zmin) {
3399 geo2cart(obs->obsz[ir], obs->obslon[ir], obs->obslat[ir], xo);
3400 geo2cart(obs->vpz[ir], obs->vplon[ir], obs->vplat[ir], xv);
3401 for (i = 0; i < 3; i++)
3402 xd[i] = xo[i] - xv[i];
3403 z[ir] = NORM(xo) * NORM(xd) / DOTP(xo, xd);
3404 nadir++;
3405 } else
3406 z[ir] = obs->tpz[ir];
3407 }
3408 if (nadir > 0 && nadir < obs->nr)
3409 ERRMSG("Limb and nadir not simultaneously possible!");
3410
3411 /* Nadir? */
3412 if (nadir)
3413 strcat(rfmflg, " NAD");
3414
3415 /* Get surface temperature... */
3416 tsurf = atm->t[gsl_stats_min_index(atm->z, 1, (size_t) atm->np)];
3417
3418 /* Refraction? */
3419 if (!nadir && !ctl->refrac)
3420 strcat(rfmflg, " GEO");
3421
3422 /* Continua? */
3423 if (ctl->ctm_co2 || ctl->ctm_h2o || ctl->ctm_n2 || ctl->ctm_o2)
3424 strcat(rfmflg, " CTM");
3425
3426 /* Write atmospheric data file... */
3427 write_atm_rfm("rfm.atm", ctl, atm);
3428
3429 /* Loop over channels... */
3430 for (id = 0; id < ctl->nd; id++) {
3431
3432 /* Read filter function... */
3433 sprintf(filename, "%s_%.4f.filt", ctl->tblbase, ctl->nu[id]);
3434 read_shape(filename, nu, f, &n);
3435
3436 /* Set spectral range... */
3437 nu0 = nu[0];
3438 nu1 = nu[n - 1];
3439
3440 /* Create RFM driver file... */
3441 if (!(out = fopen("rfm.drv", "w")))
3442 ERRMSG("Cannot create file!");
3443 fprintf(out, "*HDR\nRFM call by JURASSIC.\n");
3444 fprintf(out, "*FLG\n%s\n", rfmflg);
3445 fprintf(out, "*SPC\n%.4f %.4f 0.0005\n", nu0, nu1);
3446 fprintf(out, "*GAS\n");
3447 for (ig = 0; ig < ctl->ng; ig++)
3448 fprintf(out, "%s\n", ctl->emitter[ig]);
3449 fprintf(out, "*ATM\nrfm.atm\n");
3450 fprintf(out, "*TAN\n");
3451 for (ir = 0; ir < obs->nr; ir++)
3452 fprintf(out, "%g\n", z[ir]);
3453 fprintf(out, "*SFC\n%g 1.0\n", tsurf);
3454 if (obsz >= 0)
3455 fprintf(out, "*OBS\n%g\n", obsz);
3456 fprintf(out, "*HIT\n%s\n", ctl->rfmhit);
3457 fprintf(out, "*XSC\n");
3458 for (ig = 0; ig < ctl->ng; ig++)
3459 if (ctl->rfmxsc[ig][0] != '-')
3460 fprintf(out, "%s\n", ctl->rfmxsc[ig]);
3461 fprintf(out, "*END\n");
3462 fclose(out);
3463
3464 /* Remove temporary files... */
3465 if (system("rm -f rfm.runlog rad_*.asc tra_*.asc"))
3466 ERRMSG("Cannot remove temporary files!");
3467
3468 /* Call RFM... */
3469 sprintf(cmd, "echo | %s", ctl->rfmbin);
3470 if (system(cmd))
3471 ERRMSG("Error while calling RFM!");
3472
3473 /* Read data... */
3474 for (ir = 0; ir < obs->nr; ir++) {
3475 obs->rad[id][ir] = read_obs_rfm("rad", z[ir], nu, f, n) * 1e-5;
3476 obs->tau[id][ir] = read_obs_rfm("tra", z[ir], nu, f, n);
3477 }
3478 }
3479
3480 /* Remove temporary files... */
3481 if (system("rm -f rfm.drv rfm.atm rfm.runlog rad_*.asc tra_*.asc"))
3482 ERRMSG("Error while removing temporary files!");
3483
3484 /* Free... */
3485 free(los);
3486}
3487
3488/*****************************************************************************/
3489
3491 ctl_t * ctl,
3492 tbl_t * tbl,
3493 double t,
3494 double *src) {
3495
3496 /* Determine index in temperature array... */
3497 int it = locate_reg(tbl->st, TBLNS, t);
3498
3499 /* Interpolate Planck function value... */
3500 for (int id = 0; id < ctl->nd; id++)
3501 src[id] = LIN(tbl->st[it], tbl->sr[it][id],
3502 tbl->st[it + 1], tbl->sr[it + 1][id], t);
3503}
3504
3505/*****************************************************************************/
3506
3508 double z,
3509 double lon,
3510 double lat,
3511 double *x) {
3512
3513 double radius = z + RE;
3514
3515 x[0] = radius * cos(lat / 180 * M_PI) * cos(lon / 180 * M_PI);
3516 x[1] = radius * cos(lat / 180 * M_PI) * sin(lon / 180 * M_PI);
3517 x[2] = radius * sin(lat / 180 * M_PI);
3518}
3519
3520/*****************************************************************************/
3521
3523 ctl_t * ctl,
3524 atm_t * atm) {
3525
3526 const double mmair = 28.96456e-3, mmh2o = 18.0153e-3;
3527
3528 const int ipts = 20;
3529
3530 static int ig_h2o = -999;
3531
3532 double dzmin = 1e99, e = 0;
3533
3534 int ipref = 0;
3535
3536 /* Check reference height... */
3537 if (ctl->hydz < 0)
3538 return;
3539
3540 /* Determine emitter index of H2O... */
3541 if (ig_h2o == -999)
3542 ig_h2o = find_emitter(ctl, "H2O");
3543
3544 /* Find air parcel next to reference height... */
3545 for (int ip = 0; ip < atm->np; ip++)
3546 if (fabs(atm->z[ip] - ctl->hydz) < dzmin) {
3547 dzmin = fabs(atm->z[ip] - ctl->hydz);
3548 ipref = ip;
3549 }
3550
3551 /* Upper part of profile... */
3552 for (int ip = ipref + 1; ip < atm->np; ip++) {
3553 double mean = 0;
3554 for (int i = 0; i < ipts; i++) {
3555 if (ig_h2o >= 0)
3556 e = LIN(0.0, atm->q[ig_h2o][ip - 1],
3557 ipts - 1.0, atm->q[ig_h2o][ip], (double) i);
3558 mean += (e * mmh2o + (1 - e) * mmair)
3559 * G0 / RI
3560 / LIN(0.0, atm->t[ip - 1], ipts - 1.0, atm->t[ip], (double) i) / ipts;
3561 }
3562
3563 /* Compute p(z,T)... */
3564 atm->p[ip] =
3565 exp(log(atm->p[ip - 1]) - mean * 1000 * (atm->z[ip] - atm->z[ip - 1]));
3566 }
3567
3568 /* Lower part of profile... */
3569 for (int ip = ipref - 1; ip >= 0; ip--) {
3570 double mean = 0;
3571 for (int i = 0; i < ipts; i++) {
3572 if (ig_h2o >= 0)
3573 e = LIN(0.0, atm->q[ig_h2o][ip + 1],
3574 ipts - 1.0, atm->q[ig_h2o][ip], (double) i);
3575 mean += (e * mmh2o + (1 - e) * mmair)
3576 * G0 / RI
3577 / LIN(0.0, atm->t[ip + 1], ipts - 1.0, atm->t[ip], (double) i) / ipts;
3578 }
3579
3580 /* Compute p(z,T)... */
3581 atm->p[ip] =
3582 exp(log(atm->p[ip + 1]) - mean * 1000 * (atm->z[ip] - atm->z[ip + 1]));
3583 }
3584}
3585
3586/*****************************************************************************/
3587
3589 ctl_t * ctl,
3590 int idx,
3591 char *quantity) {
3592
3593 if (idx == IDXP)
3594 sprintf(quantity, "PRESSURE");
3595
3596 if (idx == IDXT)
3597 sprintf(quantity, "TEMPERATURE");
3598
3599 for (int ig = 0; ig < ctl->ng; ig++)
3600 if (idx == IDXQ(ig))
3601 sprintf(quantity, "%s", ctl->emitter[ig]);
3602
3603 for (int iw = 0; iw < ctl->nw; iw++)
3604 if (idx == IDXK(iw))
3605 sprintf(quantity, "EXTINCT_WINDOW_%d", iw);
3606
3607 if (idx == IDXCLZ)
3608 sprintf(quantity, "CLOUD_HEIGHT");
3609
3610 if (idx == IDXCLDZ)
3611 sprintf(quantity, "CLOUD_DEPTH");
3612
3613 for (int icl = 0; icl < ctl->ncl; icl++)
3614 if (idx == IDXCLK(icl))
3615 sprintf(quantity, "CLOUD_EXTINCT_%.4f", ctl->clnu[icl]);
3616
3617 if (idx == IDXSFZ)
3618 sprintf(quantity, "SURFACE_HEIGHT");
3619
3620 if (idx == IDXSFP)
3621 sprintf(quantity, "SURFACE_PRESSURE");
3622
3623 if (idx == IDXSFT)
3624 sprintf(quantity, "SURFACE_TEMPERATURE");
3625
3626 for (int isf = 0; isf < ctl->nsf; isf++)
3627 if (idx == IDXSFEPS(isf))
3628 sprintf(quantity, "SURFACE_EMISSIVITY_%.4f", ctl->sfnu[isf]);
3629}
3630
3631/*****************************************************************************/
3632
3634 ctl_t * ctl,
3635 tbl_t * tbl) {
3636
3637 char filename[2 * LEN];
3638
3639 double f[NSHAPE], nu[NSHAPE];
3640
3641 int n;
3642
3643 /* Write info... */
3644 LOG(1, "Initialize source function table...");
3645 LOG(2, "Number of data points: %d", TBLNS);
3646
3647 /* Loop over channels... */
3648 for (int id = 0; id < ctl->nd; id++) {
3649
3650 /* Read filter function... */
3651 sprintf(filename, "%s_%.4f.filt", ctl->tblbase, ctl->nu[id]);
3652 read_shape(filename, nu, f, &n);
3653
3654 /* Get minimum grid spacing... */
3655 double dnu = 1.0;
3656 for (int i = 1; i < n; i++)
3657 dnu = MIN(dnu, nu[i] - nu[i - 1]);
3658
3659 /* Compute source function table... */
3660#pragma omp parallel for default(none) shared(ctl,tbl,id,nu,f,n,dnu)
3661 for (int it = 0; it < TBLNS; it++) {
3662
3663 /* Set temperature... */
3664 tbl->st[it] = LIN(0.0, TMIN, TBLNS - 1.0, TMAX, (double) it);
3665
3666 /* Integrate Planck function... */
3667 double fsum = tbl->sr[it][id] = 0;
3668 for (double fnu = nu[0]; fnu <= nu[n - 1]; fnu += dnu) {
3669 int i = locate_irr(nu, n, fnu);
3670 double ff = LIN(nu[i], f[i], nu[i + 1], f[i + 1], fnu);
3671 fsum += ff;
3672 tbl->sr[it][id] += ff * planck(tbl->st[it], fnu);
3673 }
3674 tbl->sr[it][id] /= fsum;
3675 }
3676
3677 /* Write info... */
3678 LOG(2,
3679 "channel= %.4f cm^-1 | T= %g ... %g K | B= %g ... %g W/(m^2 sr cm^-1)",
3680 ctl->nu[id], tbl->st[0], tbl->st[TBLNS - 1], tbl->sr[0][id],
3681 tbl->sr[TBLNS - 1][id]);
3682 }
3683}
3684
3685/*****************************************************************************/
3686
3688 ctl_t * ctl,
3689 atm_t * atm,
3690 double z,
3691 double *p,
3692 double *t,
3693 double *q,
3694 double *k) {
3695
3696 /* Get array index... */
3697 int ip = locate_irr(atm->z, atm->np, z);
3698
3699 /* Interpolate... */
3700 *p = LOGY(atm->z[ip], atm->p[ip], atm->z[ip + 1], atm->p[ip + 1], z);
3701 *t = LIN(atm->z[ip], atm->t[ip], atm->z[ip + 1], atm->t[ip + 1], z);
3702 for (int ig = 0; ig < ctl->ng; ig++)
3703 q[ig] =
3704 LIN(atm->z[ip], atm->q[ig][ip], atm->z[ip + 1], atm->q[ig][ip + 1], z);
3705 for (int iw = 0; iw < ctl->nw; iw++)
3706 k[iw] =
3707 LIN(atm->z[ip], atm->k[iw][ip], atm->z[ip + 1], atm->k[iw][ip + 1], z);
3708}
3709
3710/*****************************************************************************/
3711
3713 ctl_t * ctl,
3714 tbl_t * tbl,
3715 los_t * los,
3716 int ip,
3717 double tau_path[ND][NG],
3718 double tau_seg[ND]) {
3719
3720 double eps;
3721
3722 /* Loop over channels... */
3723 for (int id = 0; id < ctl->nd; id++) {
3724
3725 /* Initialize... */
3726 tau_seg[id] = 1;
3727
3728 /* Loop over emitters.... */
3729 for (int ig = 0; ig < ctl->ng; ig++) {
3730
3731 /* Check size of table (pressure)... */
3732 if (tbl->np[id][ig] < 30)
3733 eps = 0;
3734
3735 /* Check transmittance... */
3736 else if (tau_path[id][ig] < 1e-9)
3737 eps = 1;
3738
3739 /* Interpolate... */
3740 else {
3741
3742 /* Determine pressure and temperature indices... */
3743 int ipr = locate_irr(tbl->p[id][ig], tbl->np[id][ig],
3744 los->cgp[ip][ig]);
3745 int it0 = locate_reg(tbl->t[id][ig][ipr], tbl->nt[id][ig][ipr],
3746 los->cgt[ip][ig]);
3747 int it1 =
3748 locate_reg(tbl->t[id][ig][ipr + 1], tbl->nt[id][ig][ipr + 1],
3749 los->cgt[ip][ig]);
3750
3751 /* Check size of table (temperature and column density)... */
3752 if (tbl->nt[id][ig][ipr] < 2 || tbl->nt[id][ig][ipr + 1] < 2
3753 || tbl->nu[id][ig][ipr][it0] < 2
3754 || tbl->nu[id][ig][ipr][it0 + 1] < 2
3755 || tbl->nu[id][ig][ipr + 1][it1] < 2
3756 || tbl->nu[id][ig][ipr + 1][it1 + 1] < 2)
3757 eps = 0;
3758
3759 else {
3760
3761 /* Get emissivities of extended path... */
3762 double eps00
3763 = intpol_tbl_eps(tbl, ig, id, ipr, it0, los->cgu[ip][ig]);
3764 double eps01 =
3765 intpol_tbl_eps(tbl, ig, id, ipr, it0 + 1, los->cgu[ip][ig]);
3766 double eps10 =
3767 intpol_tbl_eps(tbl, ig, id, ipr + 1, it1, los->cgu[ip][ig]);
3768 double eps11 =
3769 intpol_tbl_eps(tbl, ig, id, ipr + 1, it1 + 1, los->cgu[ip][ig]);
3770
3771 /* Interpolate with respect to temperature... */
3772 eps00 = LIN(tbl->t[id][ig][ipr][it0], eps00,
3773 tbl->t[id][ig][ipr][it0 + 1], eps01, los->cgt[ip][ig]);
3774 eps11 = LIN(tbl->t[id][ig][ipr + 1][it1], eps10,
3775 tbl->t[id][ig][ipr + 1][it1 + 1],
3776 eps11, los->cgt[ip][ig]);
3777
3778 /* Interpolate with respect to pressure... */
3779 eps00 = LOGX(tbl->p[id][ig][ipr], eps00,
3780 tbl->p[id][ig][ipr + 1], eps11, los->cgp[ip][ig]);
3781
3782 /* Check emssivity range... */
3783 eps00 = MAX(MIN(eps00, 1), 0);
3784
3785 /* Determine segment emissivity... */
3786 eps = 1 - (1 - eps00) / tau_path[id][ig];
3787 }
3788 }
3789
3790 /* Get transmittance of extended path... */
3791 tau_path[id][ig] *= (1 - eps);
3792
3793 /* Get segment transmittance... */
3794 tau_seg[id] *= (1 - eps);
3795 }
3796 }
3797}
3798
3799/*****************************************************************************/
3800
3802 ctl_t * ctl,
3803 tbl_t * tbl,
3804 los_t * los,
3805 int ip,
3806 double tau_path[ND][NG],
3807 double tau_seg[ND]) {
3808
3809 double eps, u;
3810
3811 /* Loop over channels... */
3812 for (int id = 0; id < ctl->nd; id++) {
3813
3814 /* Initialize... */
3815 tau_seg[id] = 1;
3816
3817 /* Loop over emitters.... */
3818 for (int ig = 0; ig < ctl->ng; ig++) {
3819
3820 /* Check size of table (pressure)... */
3821 if (tbl->np[id][ig] < 30)
3822 eps = 0;
3823
3824 /* Check transmittance... */
3825 else if (tau_path[id][ig] < 1e-9)
3826 eps = 1;
3827
3828 /* Interpolate... */
3829 else {
3830
3831 /* Determine pressure and temperature indices... */
3832 int ipr = locate_irr(tbl->p[id][ig], tbl->np[id][ig], los->p[ip]);
3833 int it0 =
3834 locate_reg(tbl->t[id][ig][ipr], tbl->nt[id][ig][ipr], los->t[ip]);
3835 int it1 =
3836 locate_reg(tbl->t[id][ig][ipr + 1], tbl->nt[id][ig][ipr + 1],
3837 los->t[ip]);
3838
3839 /* Check size of table (temperature and column density)... */
3840 if (tbl->nt[id][ig][ipr] < 2 || tbl->nt[id][ig][ipr + 1] < 2
3841 || tbl->nu[id][ig][ipr][it0] < 2
3842 || tbl->nu[id][ig][ipr][it0 + 1] < 2
3843 || tbl->nu[id][ig][ipr + 1][it1] < 2
3844 || tbl->nu[id][ig][ipr + 1][it1 + 1] < 2)
3845 eps = 0;
3846
3847 else {
3848
3849 /* Get emissivities of extended path... */
3850 u = intpol_tbl_u(tbl, ig, id, ipr, it0, 1 - tau_path[id][ig]);
3851 double eps00
3852 = intpol_tbl_eps(tbl, ig, id, ipr, it0, u + los->u[ip][ig]);
3853
3854 u = intpol_tbl_u(tbl, ig, id, ipr, it0 + 1, 1 - tau_path[id][ig]);
3855 double eps01 =
3856 intpol_tbl_eps(tbl, ig, id, ipr, it0 + 1, u + los->u[ip][ig]);
3857
3858 u = intpol_tbl_u(tbl, ig, id, ipr + 1, it1, 1 - tau_path[id][ig]);
3859 double eps10 =
3860 intpol_tbl_eps(tbl, ig, id, ipr + 1, it1, u + los->u[ip][ig]);
3861
3862 u =
3863 intpol_tbl_u(tbl, ig, id, ipr + 1, it1 + 1, 1 - tau_path[id][ig]);
3864 double eps11 =
3865 intpol_tbl_eps(tbl, ig, id, ipr + 1, it1 + 1, u + los->u[ip][ig]);
3866
3867 /* Interpolate with respect to temperature... */
3868 eps00 = LIN(tbl->t[id][ig][ipr][it0], eps00,
3869 tbl->t[id][ig][ipr][it0 + 1], eps01, los->t[ip]);
3870 eps11 = LIN(tbl->t[id][ig][ipr + 1][it1], eps10,
3871 tbl->t[id][ig][ipr + 1][it1 + 1], eps11, los->t[ip]);
3872
3873 /* Interpolate with respect to pressure... */
3874 eps00 = LIN(tbl->p[id][ig][ipr], eps00,
3875 tbl->p[id][ig][ipr + 1], eps11, los->p[ip]);
3876
3877 /* Check emssivity range... */
3878 eps00 = MAX(MIN(eps00, 1), 0);
3879
3880 /* Determine segment emissivity... */
3881 eps = 1 - (1 - eps00) / tau_path[id][ig];
3882 }
3883 }
3884
3885 /* Get transmittance of extended path... */
3886 tau_path[id][ig] *= (1 - eps);
3887
3888 /* Get segment transmittance... */
3889 tau_seg[id] *= (1 - eps);
3890 }
3891 }
3892}
3893
3894/*****************************************************************************/
3895
3897 tbl_t * tbl,
3898 int ig,
3899 int id,
3900 int ip,
3901 int it,
3902 double u) {
3903
3904 /* Lower boundary... */
3905 if (u < tbl->u[id][ig][ip][it][0])
3906 return LIN(0, 0, tbl->u[id][ig][ip][it][0], tbl->eps[id][ig][ip][it][0],
3907 u);
3908
3909 /* Upper boundary... */
3910 else if (u > tbl->u[id][ig][ip][it][tbl->nu[id][ig][ip][it] - 1]) {
3911 double a =
3912 log(1 -
3913 tbl->eps[id][ig][ip][it][tbl->nu[id][ig][ip][it] -
3914 1]) /
3915 tbl->u[id][ig][ip][it][tbl->nu[id][ig][ip][it] - 1];
3916 return 1 - exp(a * u);
3917 }
3918
3919 /* Interpolation... */
3920 else {
3921
3922 /* Get index... */
3923 int idx = locate_tbl(tbl->u[id][ig][ip][it], tbl->nu[id][ig][ip][it], u);
3924
3925 /* Interpolate... */
3926 return
3927 LIN(tbl->u[id][ig][ip][it][idx], tbl->eps[id][ig][ip][it][idx],
3928 tbl->u[id][ig][ip][it][idx + 1], tbl->eps[id][ig][ip][it][idx + 1],
3929 u);
3930 }
3931}
3932
3933/*****************************************************************************/
3934
3936 tbl_t * tbl,
3937 int ig,
3938 int id,
3939 int ip,
3940 int it,
3941 double eps) {
3942
3943 /* Lower boundary... */
3944 if (eps < tbl->eps[id][ig][ip][it][0])
3945 return LIN(0, 0, tbl->eps[id][ig][ip][it][0], tbl->u[id][ig][ip][it][0],
3946 eps);
3947
3948 /* Upper boundary... */
3949 else if (eps > tbl->eps[id][ig][ip][it][tbl->nu[id][ig][ip][it] - 1]) {
3950 double a =
3951 log(1 -
3952 tbl->eps[id][ig][ip][it][tbl->nu[id][ig][ip][it] -
3953 1]) /
3954 tbl->u[id][ig][ip][it][tbl->nu[id][ig][ip][it] - 1];
3955 return log(1 - eps) / a;
3956 }
3957
3958 /* Interpolation... */
3959 else {
3960
3961 /* Get index... */
3962 int idx
3963 = locate_tbl(tbl->eps[id][ig][ip][it], tbl->nu[id][ig][ip][it], eps);
3964
3965 /* Interpolate... */
3966 return
3967 LIN(tbl->eps[id][ig][ip][it][idx], tbl->u[id][ig][ip][it][idx],
3968 tbl->eps[id][ig][ip][it][idx + 1], tbl->u[id][ig][ip][it][idx + 1],
3969 eps);
3970 }
3971}
3972
3973/*****************************************************************************/
3974
3976 double jsec,
3977 int *year,
3978 int *mon,
3979 int *day,
3980 int *hour,
3981 int *min,
3982 int *sec,
3983 double *remain) {
3984
3985 struct tm t0, *t1;
3986
3987 t0.tm_year = 100;
3988 t0.tm_mon = 0;
3989 t0.tm_mday = 1;
3990 t0.tm_hour = 0;
3991 t0.tm_min = 0;
3992 t0.tm_sec = 0;
3993
3994 time_t jsec0 = (time_t) jsec + timegm(&t0);
3995 t1 = gmtime(&jsec0);
3996
3997 *year = t1->tm_year + 1900;
3998 *mon = t1->tm_mon + 1;
3999 *day = t1->tm_mday;
4000 *hour = t1->tm_hour;
4001 *min = t1->tm_min;
4002 *sec = t1->tm_sec;
4003 *remain = jsec - floor(jsec);
4004}
4005
4006/*****************************************************************************/
4007
4009 ctl_t * ctl,
4010 atm_t * atm,
4011 obs_t * obs,
4012 gsl_matrix * k) {
4013
4014 atm_t *atm1;
4015 obs_t *obs1;
4016
4017 gsl_vector *x0, *x1, *yy0, *yy1;
4018
4019 int *iqa;
4020
4021 /* Get sizes... */
4022 size_t m = k->size1;
4023 size_t n = k->size2;
4024
4025 /* Allocate... */
4026 x0 = gsl_vector_alloc(n);
4027 yy0 = gsl_vector_alloc(m);
4028 ALLOC(iqa, int,
4029 N);
4030
4031 /* Compute radiance for undisturbed atmospheric data... */
4032 formod(ctl, atm, obs);
4033
4034 /* Compose vectors... */
4035 atm2x(ctl, atm, x0, iqa, NULL);
4036 obs2y(ctl, obs, yy0, NULL, NULL);
4037
4038 /* Initialize kernel matrix... */
4039 gsl_matrix_set_zero(k);
4040
4041 /* Loop over state vector elements... */
4042#pragma omp parallel for default(none) shared(ctl,atm,obs,k,x0,yy0,n,m,iqa) private(x1, yy1, atm1, obs1)
4043 for (size_t j = 0; j < n; j++) {
4044
4045 /* Allocate... */
4046 x1 = gsl_vector_alloc(n);
4047 yy1 = gsl_vector_alloc(m);
4048 ALLOC(atm1, atm_t, 1);
4049 ALLOC(obs1, obs_t, 1);
4050
4051 /* Set perturbation size... */
4052 double h;
4053 if (iqa[j] == IDXP)
4054 h = MAX(fabs(0.01 * gsl_vector_get(x0, j)), 1e-7);
4055 else if (iqa[j] == IDXT)
4056 h = 1.0;
4057 else if (iqa[j] >= IDXQ(0) && iqa[j] < IDXQ(ctl->ng))
4058 h = MAX(fabs(0.01 * gsl_vector_get(x0, j)), 1e-15);
4059 else if (iqa[j] >= IDXK(0) && iqa[j] < IDXK(ctl->nw))
4060 h = 1e-4;
4061 else if (iqa[j] == IDXCLZ || iqa[j] == IDXCLDZ)
4062 h = 1.0;
4063 else if (iqa[j] >= IDXCLK(0) && iqa[j] < IDXCLK(ctl->ncl))
4064 h = 1e-4;
4065 else if (iqa[j] == IDXSFZ)
4066 h = 0.1;
4067 else if (iqa[j] == IDXSFP)
4068 h = 10.0;
4069 else if (iqa[j] == IDXSFT)
4070 h = 1.0;
4071 else if (iqa[j] >= IDXSFEPS(0) && iqa[j] < IDXSFEPS(ctl->nsf))
4072 h = 1e-2;
4073 else
4074 ERRMSG("Cannot set perturbation size!");
4075
4076 /* Disturb state vector element... */
4077 gsl_vector_memcpy(x1, x0);
4078 gsl_vector_set(x1, j, gsl_vector_get(x1, j) + h);
4079 copy_atm(ctl, atm1, atm, 0);
4080 copy_obs(ctl, obs1, obs, 0);
4081 x2atm(ctl, x1, atm1);
4082
4083 /* Compute radiance for disturbed atmospheric data... */
4084 formod(ctl, atm1, obs1);
4085
4086 /* Compose measurement vector for disturbed radiance data... */
4087 obs2y(ctl, obs1, yy1, NULL, NULL);
4088
4089 /* Compute derivatives... */
4090 for (size_t i = 0; i < m; i++)
4091 gsl_matrix_set(k, i, j,
4092 (gsl_vector_get(yy1, i) - gsl_vector_get(yy0, i)) / h);
4093
4094 /* Free... */
4095 gsl_vector_free(x1);
4096 gsl_vector_free(yy1);
4097 free(atm1);
4098 free(obs1);
4099 }
4100
4101 /* Free... */
4102 gsl_vector_free(x0);
4103 gsl_vector_free(yy0);
4104 free(iqa);
4105}
4106
4107/*****************************************************************************/
4108
4110 double *xx,
4111 int n,
4112 double x) {
4113
4114 int ilo = 0;
4115 int ihi = n - 1;
4116 int i = (ihi + ilo) >> 1;
4117
4118 if (xx[i] < xx[i + 1])
4119 while (ihi > ilo + 1) {
4120 i = (ihi + ilo) >> 1;
4121 if (xx[i] > x)
4122 ihi = i;
4123 else
4124 ilo = i;
4125 } else
4126 while (ihi > ilo + 1) {
4127 i = (ihi + ilo) >> 1;
4128 if (xx[i] <= x)
4129 ihi = i;
4130 else
4131 ilo = i;
4132 }
4133
4134 return ilo;
4135}
4136
4137/*****************************************************************************/
4138
4140 double *xx,
4141 int n,
4142 double x) {
4143
4144 /* Calculate index... */
4145 int i = (int) ((x - xx[0]) / (xx[1] - xx[0]));
4146
4147 /* Check range... */
4148 if (i < 0)
4149 return 0;
4150 else if (i > n - 2)
4151 return n - 2;
4152 else
4153 return i;
4154}
4155
4156/*****************************************************************************/
4157
4159 float *xx,
4160 int n,
4161 double x) {
4162
4163 int ilo = 0;
4164 int ihi = n - 1;
4165 int i = (ihi + ilo) >> 1;
4166
4167 while (ihi > ilo + 1) {
4168 i = (ihi + ilo) >> 1;
4169 if (xx[i] > x)
4170 ihi = i;
4171 else
4172 ilo = i;
4173 }
4174
4175 return ilo;
4176}
4177
4178/*****************************************************************************/
4179
4180size_t obs2y(
4181 ctl_t * ctl,
4182 obs_t * obs,
4183 gsl_vector * y,
4184 int *ida,
4185 int *ira) {
4186
4187 size_t m = 0;
4188
4189 /* Determine measurement vector... */
4190 for (int ir = 0; ir < obs->nr; ir++)
4191 for (int id = 0; id < ctl->nd; id++)
4192 if (isfinite(obs->rad[id][ir])) {
4193 if (y != NULL)
4194 gsl_vector_set(y, m, obs->rad[id][ir]);
4195 if (ida != NULL)
4196 ida[m] = id;
4197 if (ira != NULL)
4198 ira[m] = ir;
4199 m++;
4200 }
4201
4202 return m;
4203}
4204
4205/*****************************************************************************/
4206
4207double planck(
4208 double t,
4209 double nu) {
4210
4211 return C1 * POW3(nu) / gsl_expm1(C2 * nu / t);
4212}
4213
4214/*****************************************************************************/
4215
4217 ctl_t * ctl,
4218 atm_t * atm,
4219 obs_t * obs,
4220 los_t * los,
4221 int ir) {
4222
4223 const double h = 0.02, zrefrac = 60;
4224
4225 double ds, ex0[3], ex1[3], k[NW], lat, lon, n, ng[3], norm,
4226 p, q[NG], t, x[3], xh[3], xobs[3], xvp[3], z = 1e99, zmax, zmin;
4227
4228 int stop = 0;
4229
4230 /* Initialize... */
4231 los->np = 0;
4232 los->sft = -999;
4233 obs->tpz[ir] = obs->vpz[ir];
4234 obs->tplon[ir] = obs->vplon[ir];
4235 obs->tplat[ir] = obs->vplat[ir];
4236
4237 /* Get altitude range of atmospheric data... */
4238 gsl_stats_minmax(&zmin, &zmax, atm->z, 1, (size_t) atm->np);
4239 if (ctl->nsf > 0) {
4240 zmin = MAX(atm->sfz, zmin);
4241 if (atm->sfp > 0) {
4242 int ip = locate_irr(atm->p, atm->np, atm->sfp);
4243 double zip = LIN(log(atm->p[ip]), atm->z[ip],
4244 log(atm->p[ip + 1]), atm->z[ip + 1], log(atm->sfp));
4245 zmin = MAX(zip, zmin);
4246 }
4247 }
4248
4249 /* Check observer altitude... */
4250 if (obs->obsz[ir] < zmin)
4251 ERRMSG("Observer below surface!");
4252
4253 /* Check view point altitude... */
4254 if (obs->vpz[ir] > zmax)
4255 return;
4256
4257 /* Determine Cartesian coordinates for observer and view point... */
4258 geo2cart(obs->obsz[ir], obs->obslon[ir], obs->obslat[ir], xobs);
4259 geo2cart(obs->vpz[ir], obs->vplon[ir], obs->vplat[ir], xvp);
4260
4261 /* Determine initial tangent vector... */
4262 for (int i = 0; i < 3; i++)
4263 ex0[i] = xvp[i] - xobs[i];
4264 norm = NORM(ex0);
4265 for (int i = 0; i < 3; i++)
4266 ex0[i] /= norm;
4267
4268 /* Observer within atmosphere... */
4269 for (int i = 0; i < 3; i++)
4270 x[i] = xobs[i];
4271
4272 /* Observer above atmosphere (search entry point)... */
4273 if (obs->obsz[ir] > zmax) {
4274 double dmax = norm, dmin = 0;
4275 while (fabs(dmin - dmax) > 0.001) {
4276 double d = (dmax + dmin) / 2;
4277 for (int i = 0; i < 3; i++)
4278 x[i] = xobs[i] + d * ex0[i];
4279 cart2geo(x, &z, &lon, &lat);
4280 if (z <= zmax && z > zmax - 0.001)
4281 break;
4282 if (z < zmax - 0.0005)
4283 dmax = d;
4284 else
4285 dmin = d;
4286 }
4287 }
4288
4289 /* Ray-tracing... */
4290 while (1) {
4291
4292 /* Set step length... */
4293 ds = ctl->rayds;
4294 if (ctl->raydz > 0) {
4295 norm = NORM(x);
4296 for (int i = 0; i < 3; i++)
4297 xh[i] = x[i] / norm;
4298 double cosa = fabs(DOTP(ex0, xh));
4299 if (cosa != 0)
4300 ds = MIN(ctl->rayds, ctl->raydz / cosa);
4301 }
4302
4303 /* Determine geolocation... */
4304 cart2geo(x, &z, &lon, &lat);
4305
4306 /* Check if LOS hits the ground or has left atmosphere... */
4307 if (z < zmin || z > zmax) {
4308 stop = (z < zmin ? 2 : 1);
4309 double frac =
4310 ((z <
4311 zmin ? zmin : zmax) - los->z[los->np - 1]) / (z - los->z[los->np -
4312 1]);
4313 geo2cart(los->z[los->np - 1], los->lon[los->np - 1],
4314 los->lat[los->np - 1], xh);
4315 for (int i = 0; i < 3; i++)
4316 x[i] = xh[i] + frac * (x[i] - xh[i]);
4317 cart2geo(x, &z, &lon, &lat);
4318 los->ds[los->np - 1] = ds * frac;
4319 ds = 0;
4320 }
4321
4322 /* Interpolate atmospheric data... */
4323 intpol_atm(ctl, atm, z, &p, &t, q, k);
4324
4325 /* Save data... */
4326 los->lon[los->np] = lon;
4327 los->lat[los->np] = lat;
4328 los->z[los->np] = z;
4329 los->p[los->np] = p;
4330 los->t[los->np] = t;
4331 for (int ig = 0; ig < ctl->ng; ig++)
4332 los->q[los->np][ig] = q[ig];
4333 for (int id = 0; id < ctl->nd; id++)
4334 los->k[los->np][id] = k[ctl->window[id]];
4335 los->ds[los->np] = ds;
4336
4337 /* Add cloud extinction... */
4338 if (ctl->ncl > 0 && atm->cldz > 0) {
4339 double aux = exp(-0.5 * POW2((z - atm->clz) / atm->cldz));
4340 for (int id = 0; id < ctl->nd; id++) {
4341 int icl = locate_irr(ctl->clnu, ctl->ncl, ctl->nu[id]);
4342 los->k[los->np][id]
4343 += aux * LIN(ctl->clnu[icl], atm->clk[icl],
4344 ctl->clnu[icl + 1], atm->clk[icl + 1], ctl->nu[id]);
4345 }
4346 }
4347
4348 /* Increment and check number of LOS points... */
4349 if ((++los->np) > NLOS)
4350 ERRMSG("Too many LOS points!");
4351
4352 /* Check stop flag... */
4353 if (stop) {
4354
4355 /* Set surface temperature... */
4356 if (ctl->nsf > 0 && atm->sft > 0)
4357 t = atm->sft;
4358 los->sft = (stop == 2 ? t : -999);
4359
4360 /* Set surface emissivity... */
4361 for (int id = 0; id < ctl->nd; id++) {
4362 los->sfeps[id] = 1.0;
4363 if (ctl->nsf > 0) {
4364 int isf = locate_irr(ctl->sfnu, ctl->nsf, ctl->nu[id]);
4365 los->sfeps[id] = LIN(ctl->sfnu[isf], atm->sfeps[isf],
4366 ctl->sfnu[isf + 1], atm->sfeps[isf + 1],
4367 ctl->nu[id]);
4368 }
4369 }
4370
4371 /* Leave raytracer... */
4372 break;
4373 }
4374
4375 /* Determine refractivity... */
4376 if (ctl->refrac && z <= zrefrac)
4377 n = 1 + refractivity(p, t);
4378 else
4379 n = 1;
4380
4381 /* Construct new tangent vector (first term)... */
4382 for (int i = 0; i < 3; i++)
4383 ex1[i] = ex0[i] * n;
4384
4385 /* Compute gradient of refractivity... */
4386 if (ctl->refrac && z <= zrefrac) {
4387 for (int i = 0; i < 3; i++)
4388 xh[i] = x[i] + 0.5 * ds * ex0[i];
4389 cart2geo(xh, &z, &lon, &lat);
4390 intpol_atm(ctl, atm, z, &p, &t, q, k);
4391 n = refractivity(p, t);
4392 for (int i = 0; i < 3; i++) {
4393 xh[i] += h;
4394 cart2geo(xh, &z, &lon, &lat);
4395 intpol_atm(ctl, atm, z, &p, &t, q, k);
4396 ng[i] = (refractivity(p, t) - n) / h;
4397 xh[i] -= h;
4398 }
4399 } else
4400 for (int i = 0; i < 3; i++)
4401 ng[i] = 0;
4402
4403 /* Construct new tangent vector (second term)... */
4404 for (int i = 0; i < 3; i++)
4405 ex1[i] += ds * ng[i];
4406
4407 /* Normalize new tangent vector... */
4408 norm = NORM(ex1);
4409 for (int i = 0; i < 3; i++)
4410 ex1[i] /= norm;
4411
4412 /* Determine next point of LOS... */
4413 for (int i = 0; i < 3; i++)
4414 x[i] += 0.5 * ds * (ex0[i] + ex1[i]);
4415
4416 /* Copy tangent vector... */
4417 for (int i = 0; i < 3; i++)
4418 ex0[i] = ex1[i];
4419 }
4420
4421 /* Get tangent point (to be done before changing segment lengths!)... */
4422 tangent_point(los, &obs->tpz[ir], &obs->tplon[ir], &obs->tplat[ir]);
4423
4424 /* Change segment lengths according to trapezoid rule... */
4425 for (int ip = los->np - 1; ip >= 1; ip--)
4426 los->ds[ip] = 0.5 * (los->ds[ip - 1] + los->ds[ip]);
4427 los->ds[0] *= 0.5;
4428
4429 /* Compute column density... */
4430 for (int ip = 0; ip < los->np; ip++)
4431 for (int ig = 0; ig < ctl->ng; ig++)
4432 los->u[ip][ig] = 10 * los->q[ip][ig] * los->p[ip]
4433 / (KB * los->t[ip]) * los->ds[ip];
4434
4435 /* Compute Curtis-Godson means... */
4436 for (int ig = 0; ig < ctl->ng; ig++) {
4437 los->cgu[0][ig] = los->u[0][ig];
4438 los->cgp[0][ig] = los->u[0][ig] * los->p[0];
4439 los->cgt[0][ig] = los->u[0][ig] * los->t[0];
4440 }
4441 for (int ip = 1; ip < los->np; ip++)
4442 for (int ig = 0; ig < ctl->ng; ig++) {
4443 los->cgu[ip][ig] = los->cgu[ip - 1][ig] + los->u[ip][ig];
4444 los->cgp[ip][ig] = los->cgp[ip - 1][ig] + los->u[ip][ig] * los->p[ip];
4445 los->cgt[ip][ig] = los->cgt[ip - 1][ig] + los->u[ip][ig] * los->t[ip];
4446 }
4447 for (int ip = 0; ip < los->np; ip++)
4448 for (int ig = 0; ig < ctl->ng; ig++) {
4449 los->cgp[ip][ig] /= los->cgu[ip][ig];
4450 los->cgt[ip][ig] /= los->cgu[ip][ig];
4451 }
4452}
4453
4454/*****************************************************************************/
4455
4457 const char *dirname,
4458 const char *filename,
4459 ctl_t * ctl,
4460 atm_t * atm) {
4461
4462 FILE *in;
4463
4464 char file[LEN], line[LEN], *tok;
4465
4466 /* Init... */
4467 atm->np = 0;
4468
4469 /* Set filename... */
4470 if (dirname != NULL)
4471 sprintf(file, "%s/%s", dirname, filename);
4472 else
4473 sprintf(file, "%s", filename);
4474
4475 /* Write info... */
4476 LOG(1, "Read atmospheric data: %s", file);
4477
4478 /* Open file... */
4479 if (!(in = fopen(file, "r")))
4480 ERRMSG("Cannot open file!");
4481
4482 /* Read line... */
4483 while (fgets(line, LEN, in)) {
4484
4485 /* Read data... */
4486 TOK(line, tok, "%lg", atm->time[atm->np]);
4487 TOK(NULL, tok, "%lg", atm->z[atm->np]);
4488 TOK(NULL, tok, "%lg", atm->lon[atm->np]);
4489 TOK(NULL, tok, "%lg", atm->lat[atm->np]);
4490 TOK(NULL, tok, "%lg", atm->p[atm->np]);
4491 TOK(NULL, tok, "%lg", atm->t[atm->np]);
4492 for (int ig = 0; ig < ctl->ng; ig++)
4493 TOK(NULL, tok, "%lg", atm->q[ig][atm->np]);
4494 for (int iw = 0; iw < ctl->nw; iw++)
4495 TOK(NULL, tok, "%lg", atm->k[iw][atm->np]);
4496 if (ctl->ncl > 0 && atm->np == 0) {
4497 TOK(NULL, tok, "%lg", atm->clz);
4498 TOK(NULL, tok, "%lg", atm->cldz);
4499 for (int icl = 0; icl < ctl->ncl; icl++)
4500 TOK(NULL, tok, "%lg", atm->clk[icl]);
4501 }
4502 if (ctl->nsf > 0 && atm->np == 0) {
4503 TOK(NULL, tok, "%lg", atm->sfz);
4504 TOK(NULL, tok, "%lg", atm->sfp);
4505 TOK(NULL, tok, "%lg", atm->sft);
4506 for (int isf = 0; isf < ctl->nsf; isf++)
4507 TOK(NULL, tok, "%lg", atm->sfeps[isf]);
4508 }
4509
4510 /* Increment data point counter... */
4511 if ((++atm->np) > NP)
4512 ERRMSG("Too many data points!");
4513 }
4514
4515 /* Close file... */
4516 fclose(in);
4517
4518 /* Check number of points... */
4519 if (atm->np < 1)
4520 ERRMSG("Could not read any data!");
4521
4522 /* Write info... */
4523 double mini, maxi;
4524 LOG(2, "Number of data points: %d", atm->np);
4525 gsl_stats_minmax(&mini, &maxi, atm->time, 1, (size_t) atm->np);
4526 LOG(2, "Time range: %.2f ... %.2f s", mini, maxi);
4527 gsl_stats_minmax(&mini, &maxi, atm->z, 1, (size_t) atm->np);
4528 LOG(2, "Altitude range: %g ... %g km", mini, maxi);
4529 gsl_stats_minmax(&mini, &maxi, atm->lon, 1, (size_t) atm->np);
4530 LOG(2, "Longitude range: %g ... %g deg", mini, maxi);
4531 gsl_stats_minmax(&mini, &maxi, atm->lat, 1, (size_t) atm->np);
4532 LOG(2, "Latitude range: %g ... %g deg", mini, maxi);
4533 gsl_stats_minmax(&mini, &maxi, atm->p, 1, (size_t) atm->np);
4534 LOG(2, "Pressure range: %g ... %g hPa", maxi, mini);
4535 gsl_stats_minmax(&mini, &maxi, atm->t, 1, (size_t) atm->np);
4536 LOG(2, "Temperature range: %g ... %g K", mini, maxi);
4537 for (int ig = 0; ig < ctl->ng; ig++) {
4538 gsl_stats_minmax(&mini, &maxi, atm->q[ig], 1, (size_t) atm->np);
4539 LOG(2, "Emitter %s range: %g ... %g ppv", ctl->emitter[ig], mini, maxi);
4540 }
4541 for (int iw = 0; iw < ctl->nw; iw++) {
4542 gsl_stats_minmax(&mini, &maxi, atm->k[iw], 1, (size_t) atm->np);
4543 LOG(2, "Extinction range (window %d): %g ... %g km^-1", iw, mini, maxi);
4544 }
4545 if (ctl->ncl > 0 && atm->np == 0) {
4546 LOG(2, "Cloud layer: z= %g km | dz= %g km | k= %g ... %g km^-1",
4547 atm->clz, atm->cldz, atm->clk[0], atm->clk[ctl->ncl - 1]);
4548 } else
4549 LOG(2, "Cloud layer: none");
4550 if (ctl->nsf > 0 && atm->np == 0) {
4551 LOG(2,
4552 "Surface layer: z_s= %g km | p_s= %g hPa | T_s = %g K | eps= %g ... %g",
4553 atm->sfz, atm->sfp, atm->sft, atm->sfeps[0],
4554 atm->sfeps[ctl->nsf - 1]);
4555 } else
4556 LOG(2, "Surface layer: none");
4557}
4558
4559/*****************************************************************************/
4560
4562 int argc,
4563 char *argv[],
4564 ctl_t * ctl) {
4565
4566 /* Write info... */
4567 LOG(1, "\nJuelich Rapid Spectral Simulation Code (JURASSIC)\n"
4568 "(executable: %s | version: %s | compiled: %s, %s)\n",
4569 argv[0], VERSION, __DATE__, __TIME__);
4570
4571 /* Emitters... */
4572 ctl->ng = (int) scan_ctl(argc, argv, "NG", -1, "0", NULL);
4573 if (ctl->ng < 0 || ctl->ng > NG)
4574 ERRMSG("Set 0 <= NG <= MAX!");
4575 for (int ig = 0; ig < ctl->ng; ig++)
4576 scan_ctl(argc, argv, "EMITTER", ig, "", ctl->emitter[ig]);
4577
4578 /* Radiance channels... */
4579 ctl->nd = (int) scan_ctl(argc, argv, "ND", -1, "0", NULL);
4580 if (ctl->nd < 0 || ctl->nd > ND)
4581 ERRMSG("Set 0 <= ND <= MAX!");
4582 for (int id = 0; id < ctl->nd; id++)
4583 ctl->nu[id] = scan_ctl(argc, argv, "NU", id, "", NULL);
4584
4585 /* Spectral windows... */
4586 ctl->nw = (int) scan_ctl(argc, argv, "NW", -1, "1", NULL);
4587 if (ctl->nw < 0 || ctl->nw > NW)
4588 ERRMSG("Set 0 <= NW <= MAX!");
4589 for (int id = 0; id < ctl->nd; id++)
4590 ctl->window[id] = (int) scan_ctl(argc, argv, "WINDOW", id, "0", NULL);
4591
4592 /* Cloud data... */
4593 ctl->ncl = (int) scan_ctl(argc, argv, "NCL", -1, "0", NULL);
4594 if (ctl->ncl < 0 || ctl->ncl > NCL)
4595 ERRMSG("Set 0 <= NCL <= MAX!");
4596 if (ctl->ncl == 1)
4597 ERRMSG("Set NCL > 1!");
4598 for (int icl = 0; icl < ctl->ncl; icl++)
4599 ctl->clnu[icl] = scan_ctl(argc, argv, "CLNU", icl, "", NULL);
4600
4601 /* Surface data... */
4602 ctl->nsf = (int) scan_ctl(argc, argv, "NSF", -1, "0", NULL);
4603 if (ctl->nsf < 0 || ctl->nsf > NSF)
4604 ERRMSG("Set 0 <= NSF <= MAX!");
4605 if (ctl->nsf == 1)
4606 ERRMSG("Set NSF > 1!");
4607 for (int isf = 0; isf < ctl->nsf; isf++)
4608 ctl->sfnu[isf] = scan_ctl(argc, argv, "SFNU", isf, "", NULL);
4609 ctl->sftype = (int) scan_ctl(argc, argv, "SFTYPE", -1, "2", NULL);
4610 if (ctl->sftype < 0 || ctl->sftype > 3)
4611 ERRMSG("Set 0 <= SFTYPE <= 3!");
4612 ctl->sfsza = scan_ctl(argc, argv, "SFSZA", -1, "-999", NULL);
4613
4614 /* Emissivity look-up tables... */
4615 scan_ctl(argc, argv, "TBLBASE", -1, "-", ctl->tblbase);
4616 ctl->tblfmt = (int) scan_ctl(argc, argv, "TBLFMT", -1, "1", NULL);
4617
4618 /* Hydrostatic equilibrium... */
4619 ctl->hydz = scan_ctl(argc, argv, "HYDZ", -1, "-999", NULL);
4620
4621 /* Continua... */
4622 ctl->ctm_co2 = (int) scan_ctl(argc, argv, "CTM_CO2", -1, "1", NULL);
4623 ctl->ctm_h2o = (int) scan_ctl(argc, argv, "CTM_H2O", -1, "1", NULL);
4624 ctl->ctm_n2 = (int) scan_ctl(argc, argv, "CTM_N2", -1, "1", NULL);
4625 ctl->ctm_o2 = (int) scan_ctl(argc, argv, "CTM_O2", -1, "1", NULL);
4626
4627 /* Ray-tracing... */
4628 ctl->refrac = (int) scan_ctl(argc, argv, "REFRAC", -1, "1", NULL);
4629 ctl->rayds = scan_ctl(argc, argv, "RAYDS", -1, "10", NULL);
4630 ctl->raydz = scan_ctl(argc, argv, "RAYDZ", -1, "0.1", NULL);
4631
4632 /* Field of view... */
4633 scan_ctl(argc, argv, "FOV", -1, "-", ctl->fov);
4634
4635 /* Retrieval interface... */
4636 ctl->retp_zmin = scan_ctl(argc, argv, "RETP_ZMIN", -1, "-999", NULL);
4637 ctl->retp_zmax = scan_ctl(argc, argv, "RETP_ZMAX", -1, "-999", NULL);
4638 ctl->rett_zmin = scan_ctl(argc, argv, "RETT_ZMIN", -1, "-999", NULL);
4639 ctl->rett_zmax = scan_ctl(argc, argv, "RETT_ZMAX", -1, "-999", NULL);
4640 for (int ig = 0; ig < ctl->ng; ig++) {
4641 ctl->retq_zmin[ig] = scan_ctl(argc, argv, "RETQ_ZMIN", ig, "-999", NULL);
4642 ctl->retq_zmax[ig] = scan_ctl(argc, argv, "RETQ_ZMAX", ig, "-999", NULL);
4643 }
4644 for (int iw = 0; iw < ctl->nw; iw++) {
4645 ctl->retk_zmin[iw] = scan_ctl(argc, argv, "RETK_ZMIN", iw, "-999", NULL);
4646 ctl->retk_zmax[iw] = scan_ctl(argc, argv, "RETK_ZMAX", iw, "-999", NULL);
4647 }
4648 ctl->ret_clz = (int) scan_ctl(argc, argv, "RET_CLZ", -1, "0", NULL);
4649 ctl->ret_cldz = (int) scan_ctl(argc, argv, "RET_CLDZ", -1, "0", NULL);
4650 ctl->ret_clk = (int) scan_ctl(argc, argv, "RET_CLK", -1, "0", NULL);
4651 ctl->ret_sfz = (int) scan_ctl(argc, argv, "RET_SFZ", -1, "0", NULL);
4652 ctl->ret_sfp = (int) scan_ctl(argc, argv, "RET_SFP", -1, "0", NULL);
4653 ctl->ret_sft = (int) scan_ctl(argc, argv, "RET_SFT", -1, "0", NULL);
4654 ctl->ret_sfeps = (int) scan_ctl(argc, argv, "RET_SFEPS", -1, "0", NULL);
4655
4656 /* Output flags... */
4657 ctl->write_bbt = (int) scan_ctl(argc, argv, "WRITE_BBT", -1, "0", NULL);
4658 ctl->write_matrix =
4659 (int) scan_ctl(argc, argv, "WRITE_MATRIX", -1, "0", NULL);
4660
4661 /* External forward models... */
4662 ctl->formod = (int) scan_ctl(argc, argv, "FORMOD", -1, "1", NULL);
4663 scan_ctl(argc, argv, "RFMBIN", -1, "-", ctl->rfmbin);
4664 scan_ctl(argc, argv, "RFMHIT", -1, "-", ctl->rfmhit);
4665 for (int ig = 0; ig < ctl->ng; ig++)
4666 scan_ctl(argc, argv, "RFMXSC", ig, "-", ctl->rfmxsc[ig]);
4667}
4668
4669/*****************************************************************************/
4670
4672 const char *dirname,
4673 const char *filename,
4674 gsl_matrix * matrix) {
4675
4676 FILE *in;
4677
4678 char dum[LEN], file[LEN], line[LEN];
4679
4680 double value;
4681
4682 int i, j;
4683
4684 /* Set filename... */
4685 if (dirname != NULL)
4686 sprintf(file, "%s/%s", dirname, filename);
4687 else
4688 sprintf(file, "%s", filename);
4689
4690 /* Write info... */
4691 LOG(1, "Read matrix: %s", file);
4692
4693 /* Open file... */
4694 if (!(in = fopen(file, "r")))
4695 ERRMSG("Cannot open file!");
4696
4697 /* Read data... */
4698 gsl_matrix_set_zero(matrix);
4699 while (fgets(line, LEN, in))
4700 if (sscanf(line, "%d %s %s %s %s %s %d %s %s %s %s %s %lg",
4701 &i, dum, dum, dum, dum, dum,
4702 &j, dum, dum, dum, dum, dum, &value) == 13)
4703 gsl_matrix_set(matrix, (size_t) i, (size_t) j, value);
4704
4705 /* Close file... */
4706 fclose(in);
4707}
4708
4709/*****************************************************************************/
4710
4712 const char *dirname,
4713 const char *filename,
4714 ctl_t * ctl,
4715 obs_t * obs) {
4716
4717 FILE *in;
4718
4719 char file[LEN], line[LEN], *tok;
4720
4721 /* Init... */
4722 obs->nr = 0;
4723
4724 /* Set filename... */
4725 if (dirname != NULL)
4726 sprintf(file, "%s/%s", dirname, filename);
4727 else
4728 sprintf(file, "%s", filename);
4729
4730 /* Write info... */
4731 LOG(1, "Read observation data: %s", file);
4732
4733 /* Open file... */
4734 if (!(in = fopen(file, "r")))
4735 ERRMSG("Cannot open file!");
4736
4737 /* Read line... */
4738 while (fgets(line, LEN, in)) {
4739
4740 /* Read data... */
4741 TOK(line, tok, "%lg", obs->time[obs->nr]);
4742 TOK(NULL, tok, "%lg", obs->obsz[obs->nr]);
4743 TOK(NULL, tok, "%lg", obs->obslon[obs->nr]);
4744 TOK(NULL, tok, "%lg", obs->obslat[obs->nr]);
4745 TOK(NULL, tok, "%lg", obs->vpz[obs->nr]);
4746 TOK(NULL, tok, "%lg", obs->vplon[obs->nr]);
4747 TOK(NULL, tok, "%lg", obs->vplat[obs->nr]);
4748 TOK(NULL, tok, "%lg", obs->tpz[obs->nr]);
4749 TOK(NULL, tok, "%lg", obs->tplon[obs->nr]);
4750 TOK(NULL, tok, "%lg", obs->tplat[obs->nr]);
4751 for (int id = 0; id < ctl->nd; id++)
4752 TOK(NULL, tok, "%lg", obs->rad[id][obs->nr]);
4753 for (int id = 0; id < ctl->nd; id++)
4754 TOK(NULL, tok, "%lg", obs->tau[id][obs->nr]);
4755
4756 /* Increment counter... */
4757 if ((++obs->nr) > NR)
4758 ERRMSG("Too many rays!");
4759 }
4760
4761 /* Close file... */
4762 fclose(in);
4763
4764 /* Check number of points... */
4765 if (obs->nr < 1)
4766 ERRMSG("Could not read any data!");
4767
4768 /* Write info... */
4769 double mini, maxi;
4770 LOG(2, "Number of ray paths: %d", obs->nr);
4771 gsl_stats_minmax(&mini, &maxi, obs->time, 1, (size_t) obs->nr);
4772 LOG(2, "Time range: %.2f ... %.2f s", mini, maxi);
4773 gsl_stats_minmax(&mini, &maxi, obs->obsz, 1, (size_t) obs->nr);
4774 LOG(2, "Observer altitude range: %g ... %g km", mini, maxi);
4775 gsl_stats_minmax(&mini, &maxi, obs->obslon, 1, (size_t) obs->nr);
4776 LOG(2, "Observer longitude range: %g ... %g deg", mini, maxi);
4777 gsl_stats_minmax(&mini, &maxi, obs->obslat, 1, (size_t) obs->nr);
4778 LOG(2, "Observer latitude range: %g ... %g deg", mini, maxi);
4779 gsl_stats_minmax(&mini, &maxi, obs->vpz, 1, (size_t) obs->nr);
4780 LOG(2, "View point altitude range: %g ... %g km", mini, maxi);
4781 gsl_stats_minmax(&mini, &maxi, obs->vplon, 1, (size_t) obs->nr);
4782 LOG(2, "View point longitude range: %g ... %g deg", mini, maxi);
4783 gsl_stats_minmax(&mini, &maxi, obs->vplat, 1, (size_t) obs->nr);
4784 LOG(2, "View point latitude range: %g ... %g deg", mini, maxi);
4785 gsl_stats_minmax(&mini, &maxi, obs->tpz, 1, (size_t) obs->nr);
4786 LOG(2, "Tangent point altitude range: %g ... %g km", mini, maxi);
4787 gsl_stats_minmax(&mini, &maxi, obs->tplon, 1, (size_t) obs->nr);
4788 LOG(2, "Tangent point longitude range: %g ... %g deg", mini, maxi);
4789 gsl_stats_minmax(&mini, &maxi, obs->tplat, 1, (size_t) obs->nr);
4790 LOG(2, "Tangent point latitude range: %g ... %g deg", mini, maxi);
4791 for (int id = 0; id < ctl->nd; id++) {
4792 gsl_stats_minmax(&mini, &maxi, obs->rad[id], 1, (size_t) obs->nr);
4793 if (ctl->write_bbt) {
4794 LOG(2, "Brightness temperature (%.4f cm^-1) range: %g ... %g K",
4795 ctl->nu[id], mini, maxi);
4796 } else {
4797 LOG(2, "Radiance (%.4f cm^-1) range: %g ... %g W/(m^2 sr cm^-1)",
4798 ctl->nu[id], mini, maxi);
4799 }
4800 }
4801 for (int id = 0; id < ctl->nd; id++) {
4802 gsl_stats_minmax(&mini, &maxi, obs->tau[id], 1, (size_t) obs->nr);
4803 if (ctl->write_bbt) {
4804 LOG(2, "Transmittance (%.4f cm^-1) range: %g ... %g",
4805 ctl->nu[id], mini, maxi);
4806 }
4807 }
4808}
4809
4810/*****************************************************************************/
4811
4813 const char *basename,
4814 double z,
4815 double *nu,
4816 double *f,
4817 int n) {
4818
4819 FILE *in;
4820
4821 char filename[LEN];
4822
4823 double filt, fsum = 0, nu2[NSHAPE], *nurfm, *rad, radsum = 0;
4824
4825 int i, idx, ipts, npts;
4826
4827 /* Allocate... */
4828 ALLOC(nurfm, double,
4829 RFMNPTS);
4830 ALLOC(rad, double,
4831 RFMNPTS);
4832
4833 /* Search RFM spectrum... */
4834 sprintf(filename, "%s_%05d.asc", basename, (int) (z * 1000));
4835 if (!(in = fopen(filename, "r"))) {
4836 sprintf(filename, "%s_%05d.asc", basename, (int) (z * 1000) + 1);
4837 if (!(in = fopen(filename, "r")))
4838 ERRMSG("Cannot find RFM data file!");
4839 }
4840 fclose(in);
4841
4842 /* Read RFM spectrum... */
4843 read_rfm_spec(filename, nurfm, rad, &npts);
4844
4845 /* Set wavenumbers... */
4846 nu2[0] = nu[0];
4847 nu2[n - 1] = nu[n - 1];
4848 for (i = 1; i < n - 1; i++)
4849 nu2[i] = LIN(0.0, nu2[0], n - 1.0, nu2[n - 1], i);
4850
4851 /* Convolute... */
4852 for (ipts = 0; ipts < npts; ipts++)
4853 if (nurfm[ipts] >= nu2[0] && nurfm[ipts] <= nu2[n - 1]) {
4854 idx = locate_irr(nu2, n, nurfm[ipts]);
4855 filt = LIN(nu2[idx], f[idx], nu2[idx + 1], f[idx + 1], nurfm[ipts]);
4856 fsum += filt;
4857 radsum += filt * rad[ipts];
4858 }
4859
4860 /* Free... */
4861 free(nurfm);
4862 free(rad);
4863
4864 /* Return radiance... */
4865 return radsum / fsum;
4866}
4867
4868/*****************************************************************************/
4869
4871 const char *filename,
4872 double *nu,
4873 double *rad,
4874 int *npts) {
4875
4876 FILE *in;
4877
4878 char line[RFMLINE], *tok;
4879
4880 double dnu, nu0, nu1;
4881
4882 int i, ipts = 0;
4883
4884 /* Write info... */
4885 LOG(1, "Read RFM data: %s", filename);
4886
4887 /* Open file... */
4888 if (!(in = fopen(filename, "r")))
4889 ERRMSG("Cannot open file!");
4890
4891 /* Read header...... */
4892 for (i = 0; i < 4; i++)
4893 if (fgets(line, RFMLINE, in) == NULL)
4894 ERRMSG("Error while reading file header!");
4895 sscanf(line, "%d %lg %lg %lg", npts, &nu0, &dnu, &nu1);
4896 if (*npts > RFMNPTS)
4897 ERRMSG("Too many spectral grid points!");
4898
4899 /* Read radiance data... */
4900 while (fgets(line, RFMLINE, in) && ipts < *npts) {
4901 if ((tok = strtok(line, " \t\n")) != NULL)
4902 if (sscanf(tok, "%lg", &rad[ipts]) == 1)
4903 ipts++;
4904 while ((tok = strtok(NULL, " \t\n")) != NULL)
4905 if (sscanf(tok, "%lg", &rad[ipts]) == 1)
4906 ipts++;
4907 }
4908 if (ipts != *npts)
4909 ERRMSG("Error while reading RFM data!");
4910
4911 /* Compute wavenumbers... */
4912 for (ipts = 0; ipts < *npts; ipts++)
4913 nu[ipts] = LIN(0.0, nu0, (double) (*npts - 1), nu1, (double) ipts);
4914
4915 /* Close file... */
4916 fclose(in);
4917}
4918
4919/*****************************************************************************/
4920
4922 const char *filename,
4923 double *x,
4924 double *y,
4925 int *n) {
4926
4927 FILE *in;
4928
4929 char line[LEN];
4930
4931 /* Write info... */
4932 LOG(1, "Read shape function: %s", filename);
4933
4934 /* Open file... */
4935 if (!(in = fopen(filename, "r")))
4936 ERRMSG("Cannot open file!");
4937
4938 /* Read data... */
4939 *n = 0;
4940 while (fgets(line, LEN, in))
4941 if (sscanf(line, "%lg %lg", &x[*n], &y[*n]) == 2)
4942 if ((++(*n)) > NSHAPE)
4943 ERRMSG("Too many data points!");
4944
4945 /* Close file... */
4946 fclose(in);
4947
4948 /* Check number of data points... */
4949 if (*n < 2)
4950 ERRMSG("Could not read any data!");
4951
4952 /* Write info... */
4953 double mini, maxi;
4954 LOG(2, "Number of data points: %d", *n);
4955 gsl_stats_minmax(&mini, &maxi, x, 1, (size_t) *n);
4956 LOG(2, "Range of x values: %.4f ... %.4f", mini, maxi);
4957 gsl_stats_minmax(&mini, &maxi, y, 1, (size_t) *n);
4958 LOG(2, "Range of y values: %g ... %g", mini, maxi);
4959}
4960
4961/*****************************************************************************/
4962
4964 ctl_t * ctl,
4965 tbl_t * tbl) {
4966
4967 FILE *in;
4968
4969 char filename[2 * LEN], line[LEN];
4970
4971 double eps, press, temp, u;
4972
4973 /* Loop over trace gases and channels... */
4974 for (int id = 0; id < ctl->nd; id++)
4975 for (int ig = 0; ig < ctl->ng; ig++) {
4976
4977 /* Initialize... */
4978 tbl->np[id][ig] = -1;
4979 double eps_old = -999;
4980 double press_old = -999;
4981 double temp_old = -999;
4982 double u_old = -999;
4983 int nrange = 0;
4984
4985 /* Set filename... */
4986 sprintf(filename, "%s_%.4f_%s.%s", ctl->tblbase,
4987 ctl->nu[id], ctl->emitter[ig],
4988 ctl->tblfmt == 1 ? "tab" : "bin");
4989
4990 /* Write info... */
4991 LOG(1, "Read emissivity table: %s", filename);
4992
4993 /* Try to open file... */
4994 if (!(in = fopen(filename, "r"))) {
4995 WARN("Missing emissivity table: %s", filename);
4996 continue;
4997 }
4998
4999 /* Read ASCII tables... */
5000 if (ctl->tblfmt == 1) {
5001
5002 /* Read data... */
5003 while (fgets(line, LEN, in)) {
5004
5005 /* Parse line... */
5006 if (sscanf(line, "%lg %lg %lg %lg", &press, &temp, &u, &eps) != 4)
5007 continue;
5008
5009 /* Check ranges... */
5010 if (u < UMIN || u > UMAX || eps < EPSMIN || eps > EPSMAX) {
5011 nrange++;
5012 continue;
5013 }
5014
5015 /* Determine pressure index... */
5016 if (press != press_old) {
5017 press_old = press;
5018 if ((++tbl->np[id][ig]) >= TBLNP)
5019 ERRMSG("Too many pressure levels!");
5020 tbl->nt[id][ig][tbl->np[id][ig]] = -1;
5021 }
5022
5023 /* Determine temperature index... */
5024 if (temp != temp_old) {
5025 temp_old = temp;
5026 if ((++tbl->nt[id][ig][tbl->np[id][ig]]) >= TBLNT)
5027 ERRMSG("Too many temperatures!");
5028 tbl->nu[id][ig][tbl->np[id][ig]]
5029 [tbl->nt[id][ig][tbl->np[id][ig]]] = -1;
5030 }
5031
5032 /* Determine column density index... */
5033 if ((eps > eps_old && u > u_old) || tbl->nu[id][ig][tbl->np[id][ig]]
5034 [tbl->nt[id][ig][tbl->np[id][ig]]] < 0) {
5035 eps_old = eps;
5036 u_old = u;
5037 if ((++tbl->nu[id][ig][tbl->np[id][ig]]
5038 [tbl->nt[id][ig][tbl->np[id][ig]]]) >= TBLNU)
5039 ERRMSG("Too many column densities!");
5040 }
5041
5042 /* Store data... */
5043 tbl->p[id][ig][tbl->np[id][ig]] = press;
5044 tbl->t[id][ig][tbl->np[id][ig]][tbl->nt[id][ig][tbl->np[id][ig]]]
5045 = temp;
5046 tbl->u[id][ig][tbl->np[id][ig]][tbl->nt[id][ig][tbl->np[id][ig]]]
5047 [tbl->nu[id][ig][tbl->np[id][ig]]
5048 [tbl->nt[id][ig][tbl->np[id][ig]]]] = (float) u;
5049 tbl->eps[id][ig][tbl->np[id][ig]][tbl->nt[id][ig][tbl->np[id][ig]]]
5050 [tbl->nu[id][ig][tbl->np[id][ig]]
5051 [tbl->nt[id][ig][tbl->np[id][ig]]]] = (float) eps;
5052 }
5053
5054 /* Increment counters... */
5055 tbl->np[id][ig]++;
5056 for (int ip = 0; ip < tbl->np[id][ig]; ip++) {
5057 tbl->nt[id][ig][ip]++;
5058 for (int it = 0; it < tbl->nt[id][ig][ip]; it++)
5059 tbl->nu[id][ig][ip][it]++;
5060 }
5061 }
5062
5063 /* Read binary data... */
5064 else if (ctl->tblfmt == 2) {
5065
5066 /* Read data... */
5067 FREAD(&tbl->np[id][ig], int,
5068 1,
5069 in);
5070 if (tbl->np[id][ig] > TBLNP)
5071 ERRMSG("Too many pressure levels!");
5072 FREAD(tbl->p[id][ig], double,
5073 (size_t) tbl->np[id][ig],
5074 in);
5075 for (int ip = 0; ip < tbl->np[id][ig]; ip++) {
5076 FREAD(&tbl->nt[id][ig][ip], int,
5077 1,
5078 in);
5079 if (tbl->nt[id][ig][ip] > TBLNT)
5080 ERRMSG("Too many temperatures!");
5081 FREAD(tbl->t[id][ig][ip], double,
5082 (size_t) tbl->nt[id][ig][ip],
5083 in);
5084 for (int it = 0; it < tbl->nt[id][ig][ip]; it++) {
5085 FREAD(&tbl->nu[id][ig][ip][it], int,
5086 1,
5087 in);
5088 if (tbl->nu[id][ig][ip][it] > TBLNU)
5089 ERRMSG("Too many column densities!");
5090 FREAD(tbl->u[id][ig][ip][it], float,
5091 (size_t) tbl->nu[id][ig][ip][it],
5092 in);
5093 FREAD(tbl->eps[id][ig][ip][it], float,
5094 (size_t) tbl->nu[id][ig][ip][it],
5095 in);
5096 }
5097 }
5098 }
5099
5100 /* Error message... */
5101 else
5102 ERRMSG("Unknown look-up table format!");
5103
5104 /* Check ranges... */
5105 if (nrange > 0)
5106 WARN("Column density or emissivity out of range (%d data points)!",
5107 nrange);
5108
5109 /* Close file... */
5110 fclose(in);
5111
5112 /* Write info... */
5113 for (int ip = 0; ip < tbl->np[id][ig]; ip++)
5114 LOG(2,
5115 "p[%2d]= %.5e hPa | T[0:%2d]= %.2f ... %.2f K | u[0:%3d]= %.5e ... %.5e molec/cm^2 | eps[0:%3d]= %.5e ... %.5e",
5116 ip, tbl->p[id][ig][ip], tbl->nt[id][ig][ip] - 1,
5117 tbl->t[id][ig][ip][0],
5118 tbl->t[id][ig][ip][tbl->nt[id][ig][ip] - 1],
5119 tbl->nu[id][ig][ip][0] - 1, tbl->u[id][ig][ip][0][0],
5120 tbl->u[id][ig][ip][0][tbl->nu[id][ig][ip][0] - 1],
5121 tbl->nu[id][ig][ip][0] - 1, tbl->eps[id][ig][ip][0][0],
5122 tbl->eps[id][ig][ip][0][tbl->nu[id][ig][ip][0] - 1]);
5123 }
5124}
5125
5126/*****************************************************************************/
5127
5129 double p,
5130 double t) {
5131
5132 /* Refractivity of air at 4 to 15 micron... */
5133 return 7.753e-05 * p / t;
5134}
5135
5136/*****************************************************************************/
5137
5139 int argc,
5140 char *argv[],
5141 const char *varname,
5142 int arridx,
5143 const char *defvalue,
5144 char *value) {
5145
5146 FILE *in = NULL;
5147
5148 char dummy[LEN], fullname1[LEN], fullname2[LEN], line[LEN],
5149 rvarname[LEN], rval[LEN];
5150
5151 int contain = 0;
5152
5153 /* Open file... */
5154 if (argv[1][0] != '-')
5155 if (!(in = fopen(argv[1], "r")))
5156 ERRMSG("Cannot open file!");
5157
5158 /* Set full variable name... */
5159 if (arridx >= 0) {
5160 sprintf(fullname1, "%s[%d]", varname, arridx);
5161 sprintf(fullname2, "%s[*]", varname);
5162 } else {
5163 sprintf(fullname1, "%s", varname);
5164 sprintf(fullname2, "%s", varname);
5165 }
5166
5167 /* Read data... */
5168 if (in != NULL)
5169 while (fgets(line, LEN, in))
5170 if (sscanf(line, "%s %s %s", rvarname, dummy, rval) == 3)
5171 if (strcasecmp(rvarname, fullname1) == 0 ||
5172 strcasecmp(rvarname, fullname2) == 0) {
5173 contain = 1;
5174 break;
5175 }
5176 for (int i = 1; i < argc - 1; i++)
5177 if (strcasecmp(argv[i], fullname1) == 0 ||
5178 strcasecmp(argv[i], fullname2) == 0) {
5179 sprintf(rval, "%s", argv[i + 1]);
5180 contain = 1;
5181 break;
5182 }
5183
5184 /* Close file... */
5185 if (in != NULL)
5186 fclose(in);
5187
5188 /* Check for missing variables... */
5189 if (!contain) {
5190 if (strlen(defvalue) > 0)
5191 sprintf(rval, "%s", defvalue);
5192 else
5193 ERRMSG("Missing variable %s!\n", fullname1);
5194 }
5195
5196 /* Write info... */
5197 LOG(1, "%s = %s", fullname1, rval);
5198
5199 /* Return values... */
5200 if (value != NULL)
5201 sprintf(value, "%s", rval);
5202 return atof(rval);
5203}
5204
5205/*****************************************************************************/
5206
5207double sza(
5208 double sec,
5209 double lon,
5210 double lat) {
5211
5212 /* Number of days and fraction with respect to 2000-01-01T12:00Z... */
5213 double D = sec / 86400 - 0.5;
5214
5215 /* Geocentric apparent ecliptic longitude [rad]... */
5216 double g = (357.529 + 0.98560028 * D) * M_PI / 180;
5217 double q = 280.459 + 0.98564736 * D;
5218 double L = (q + 1.915 * sin(g) + 0.020 * sin(2 * g)) * M_PI / 180;
5219
5220 /* Mean obliquity of the ecliptic [rad]... */
5221 double e = (23.439 - 0.00000036 * D) * M_PI / 180;
5222
5223 /* Declination [rad]... */
5224 double dec = asin(sin(e) * sin(L));
5225
5226 /* Right ascension [rad]... */
5227 double ra = atan2(cos(e) * sin(L), cos(L));
5228
5229 /* Greenwich Mean Sidereal Time [h]... */
5230 double GMST = 18.697374558 + 24.06570982441908 * D;
5231
5232 /* Local Sidereal Time [h]... */
5233 double LST = GMST + lon / 15;
5234
5235 /* Hour angle [rad]... */
5236 double h = LST / 12 * M_PI - ra;
5237
5238 /* Convert latitude... */
5239 lat *= M_PI / 180;
5240
5241 /* Return solar zenith angle [deg]... */
5242 return acos(sin(lat) * sin(dec) +
5243 cos(lat) * cos(dec) * cos(h)) * 180 / M_PI;
5244}
5245
5246/*****************************************************************************/
5247
5249 los_t * los,
5250 double *tpz,
5251 double *tplon,
5252 double *tplat) {
5253
5254 double dummy, v[3], v0[3], v2[3];
5255
5256 /* Find minimum altitude... */
5257 size_t ip = gsl_stats_min_index(los->z, 1, (size_t) los->np);
5258
5259 /* Nadir or zenith... */
5260 if (ip <= 0 || ip >= (size_t) los->np - 1) {
5261 *tpz = los->z[los->np - 1];
5262 *tplon = los->lon[los->np - 1];
5263 *tplat = los->lat[los->np - 1];
5264 }
5265
5266 /* Limb... */
5267 else {
5268
5269 /* Determine interpolating polynomial y=a*x^2+b*x+c... */
5270 double yy0 = los->z[ip - 1];
5271 double yy1 = los->z[ip];
5272 double yy2 = los->z[ip + 1];
5273 double x1 = sqrt(POW2(los->ds[ip]) - POW2(yy1 - yy0));
5274 double x2 = x1 + sqrt(POW2(los->ds[ip + 1]) - POW2(yy2 - yy1));
5275 double a = 1 / (x1 - x2) * (-(yy0 - yy1) / x1 + (yy0 - yy2) / x2);
5276 double b = -(yy0 - yy1) / x1 - a * x1;
5277 double c = yy0;
5278
5279 /* Get tangent point location... */
5280 double x = -b / (2 * a);
5281 *tpz = a * x * x + b * x + c;
5282 geo2cart(los->z[ip - 1], los->lon[ip - 1], los->lat[ip - 1], v0);
5283 geo2cart(los->z[ip + 1], los->lon[ip + 1], los->lat[ip + 1], v2);
5284 for (int i = 0; i < 3; i++)
5285 v[i] = LIN(0.0, v0[i], x2, v2[i], x);
5286 cart2geo(v, &dummy, tplon, tplat);
5287 }
5288}
5289
5290/*****************************************************************************/
5291
5293 int year,
5294 int mon,
5295 int day,
5296 int hour,
5297 int min,
5298 int sec,
5299 double remain,
5300 double *jsec) {
5301
5302 struct tm t0, t1;
5303
5304 t0.tm_year = 100;
5305 t0.tm_mon = 0;
5306 t0.tm_mday = 1;
5307 t0.tm_hour = 0;
5308 t0.tm_min = 0;
5309 t0.tm_sec = 0;
5310
5311 t1.tm_year = year - 1900;
5312 t1.tm_mon = mon - 1;
5313 t1.tm_mday = day;
5314 t1.tm_hour = hour;
5315 t1.tm_min = min;
5316 t1.tm_sec = sec;
5317
5318 *jsec = (double) timegm(&t1) - (double) timegm(&t0) + remain;
5319}
5320
5321/*****************************************************************************/
5322
5324 const char *name,
5325 const char *file,
5326 const char *func,
5327 int line,
5328 int mode) {
5329
5330 static double w0[10];
5331
5332 static int l0[10], nt;
5333
5334 /* Start new timer... */
5335 if (mode == 1) {
5336 w0[nt] = omp_get_wtime();
5337 l0[nt] = line;
5338 if ((++nt) >= 10)
5339 ERRMSG("Too many timers!");
5340 }
5341
5342 /* Write elapsed time... */
5343 else {
5344
5345 /* Check timer index... */
5346 if (nt - 1 < 0)
5347 ERRMSG("Coding error!");
5348
5349 /* Write elapsed time... */
5350 LOG(1, "Timer '%s' (%s, %s, l%d-%d): %.3f sec",
5351 name, file, func, l0[nt - 1], line, omp_get_wtime() - w0[nt - 1]);
5352 }
5353
5354 /* Stop timer... */
5355 if (mode == 3)
5356 nt--;
5357}
5358
5359/*****************************************************************************/
5360
5362 const char *dirname,
5363 const char *filename,
5364 ctl_t * ctl,
5365 atm_t * atm) {
5366
5367 FILE *out;
5368
5369 char file[LEN];
5370
5371 int n = 6;
5372
5373 /* Set filename... */
5374 if (dirname != NULL)
5375 sprintf(file, "%s/%s", dirname, filename);
5376 else
5377 sprintf(file, "%s", filename);
5378
5379 /* Write info... */
5380 LOG(1, "Write atmospheric data: %s", file);
5381
5382 /* Create file... */
5383 if (!(out = fopen(file, "w")))
5384 ERRMSG("Cannot create file!");
5385
5386 /* Write header... */
5387 fprintf(out,
5388 "# $1 = time (seconds since 2000-01-01T00:00Z)\n"
5389 "# $2 = altitude [km]\n"
5390 "# $3 = longitude [deg]\n"
5391 "# $4 = latitude [deg]\n"
5392 "# $5 = pressure [hPa]\n" "# $6 = temperature [K]\n");
5393 for (int ig = 0; ig < ctl->ng; ig++)
5394 fprintf(out, "# $%d = %s volume mixing ratio [ppv]\n",
5395 ++n, ctl->emitter[ig]);
5396 for (int iw = 0; iw < ctl->nw; iw++)
5397 fprintf(out, "# $%d = extinction (window %d) [km^-1]\n", ++n, iw);
5398 if (ctl->ncl > 0) {
5399 fprintf(out, "# $%d = cloud layer height [km]\n", ++n);
5400 fprintf(out, "# $%d = cloud layer depth [km]\n", ++n);
5401 for (int icl = 0; icl < ctl->ncl; icl++)
5402 fprintf(out, "# $%d = cloud layer extinction (%.4f cm^-1) [km^-1]\n",
5403 ++n, ctl->clnu[icl]);
5404 }
5405 if (ctl->nsf > 0) {
5406 fprintf(out, "# $%d = surface layer height [km]\n", ++n);
5407 fprintf(out, "# $%d = surface layer pressure [hPa]\n", ++n);
5408 fprintf(out, "# $%d = surface layer temperature [K]\n", ++n);
5409 for (int isf = 0; isf < ctl->nsf; isf++)
5410 fprintf(out, "# $%d = surface layer emissivity (%.4f cm^-1)\n",
5411 ++n, ctl->sfnu[isf]);
5412 }
5413
5414 /* Write data... */
5415 for (int ip = 0; ip < atm->np; ip++) {
5416 if (ip == 0 || atm->time[ip] != atm->time[ip - 1])
5417 fprintf(out, "\n");
5418 fprintf(out, "%.2f %g %g %g %g %g", atm->time[ip], atm->z[ip],
5419 atm->lon[ip], atm->lat[ip], atm->p[ip], atm->t[ip]);
5420 for (int ig = 0; ig < ctl->ng; ig++)
5421 fprintf(out, " %g", atm->q[ig][ip]);
5422 for (int iw = 0; iw < ctl->nw; iw++)
5423 fprintf(out, " %g", atm->k[iw][ip]);
5424 if (ctl->ncl > 0) {
5425 fprintf(out, " %g %g", atm->clz, atm->cldz);
5426 for (int icl = 0; icl < ctl->ncl; icl++)
5427 fprintf(out, " %g", atm->clk[icl]);
5428 }
5429 if (ctl->nsf > 0) {
5430 fprintf(out, " %g %g %g", atm->sfz, atm->sfp, atm->sft);
5431 for (int isf = 0; isf < ctl->nsf; isf++)
5432 fprintf(out, " %g", atm->sfeps[isf]);
5433 }
5434 fprintf(out, "\n");
5435 }
5436
5437 /* Close file... */
5438 fclose(out);
5439
5440 /* Write info... */
5441 double mini, maxi;
5442 LOG(2, "Number of data points: %d", atm->np);
5443 gsl_stats_minmax(&mini, &maxi, atm->time, 1, (size_t) atm->np);
5444 LOG(2, "Time range: %.2f ... %.2f s", mini, maxi);
5445 gsl_stats_minmax(&mini, &maxi, atm->z, 1, (size_t) atm->np);
5446 LOG(2, "Altitude range: %g ... %g km", mini, maxi);
5447 gsl_stats_minmax(&mini, &maxi, atm->lon, 1, (size_t) atm->np);
5448 LOG(2, "Longitude range: %g ... %g deg", mini, maxi);
5449 gsl_stats_minmax(&mini, &maxi, atm->lat, 1, (size_t) atm->np);
5450 LOG(2, "Latitude range: %g ... %g deg", mini, maxi);
5451 gsl_stats_minmax(&mini, &maxi, atm->p, 1, (size_t) atm->np);
5452 LOG(2, "Pressure range: %g ... %g hPa", maxi, mini);
5453 gsl_stats_minmax(&mini, &maxi, atm->t, 1, (size_t) atm->np);
5454 LOG(2, "Temperature range: %g ... %g K", mini, maxi);
5455 for (int ig = 0; ig < ctl->ng; ig++) {
5456 gsl_stats_minmax(&mini, &maxi, atm->q[ig], 1, (size_t) atm->np);
5457 LOG(2, "Emitter %s range: %g ... %g ppv", ctl->emitter[ig], mini, maxi);
5458 }
5459 for (int iw = 0; iw < ctl->nw; iw++) {
5460 gsl_stats_minmax(&mini, &maxi, atm->k[iw], 1, (size_t) atm->np);
5461 LOG(2, "Extinction range (window %d): %g ... %g km^-1", iw, mini, maxi);
5462 }
5463 if (ctl->ncl > 0 && atm->np == 0) {
5464 LOG(2, "Cloud layer: z= %g km | dz= %g km | k= %g ... %g km^-1",
5465 atm->clz, atm->cldz, atm->clk[0], atm->clk[ctl->ncl - 1]);
5466 } else
5467 LOG(2, "Cloud layer: none");
5468 if (ctl->nsf > 0 && atm->np == 0) {
5469 LOG(2,
5470 "Surface layer: z_s= %g km | p_s= %g hPa | T_s = %g K | eps= %g ... %g",
5471 atm->sfz, atm->sfp, atm->sft, atm->sfeps[0],
5472 atm->sfeps[ctl->nsf - 1]);
5473 } else
5474 LOG(2, "Surface layer: none");
5475}
5476
5477/*****************************************************************************/
5478
5480 const char *filename,
5481 ctl_t * ctl,
5482 atm_t * atm) {
5483
5484 FILE *out;
5485
5486 int ig, ip;
5487
5488 /* Write info... */
5489 LOG(1, "Write RFM data: %s", filename);
5490
5491 /* Create file... */
5492 if (!(out = fopen(filename, "w")))
5493 ERRMSG("Cannot create file!");
5494
5495 /* Write data... */
5496 fprintf(out, "%d\n", atm->np);
5497 fprintf(out, "*HGT [km]\n");
5498 for (ip = 0; ip < atm->np; ip++)
5499 fprintf(out, "%g\n", atm->z[ip]);
5500 fprintf(out, "*PRE [mb]\n");
5501 for (ip = 0; ip < atm->np; ip++)
5502 fprintf(out, "%g\n", atm->p[ip]);
5503 fprintf(out, "*TEM [K]\n");
5504 for (ip = 0; ip < atm->np; ip++)
5505 fprintf(out, "%g\n", atm->t[ip]);
5506 for (ig = 0; ig < ctl->ng; ig++) {
5507 fprintf(out, "*%s [ppmv]\n", ctl->emitter[ig]);
5508 for (ip = 0; ip < atm->np; ip++)
5509 fprintf(out, "%g\n", atm->q[ig][ip] * 1e6);
5510 }
5511 fprintf(out, "*END\n");
5512
5513 /* Close file... */
5514 fclose(out);
5515}
5516
5517/*****************************************************************************/
5518
5520 const char *dirname,
5521 const char *filename,
5522 ctl_t * ctl,
5523 gsl_matrix * matrix,
5524 atm_t * atm,
5525 obs_t * obs,
5526 const char *rowspace,
5527 const char *colspace,
5528 const char *sort) {
5529
5530 FILE *out;
5531
5532 char file[LEN], quantity[LEN];
5533
5534 int *cida, *ciqa, *cipa, *cira, *rida, *riqa, *ripa, *rira;
5535
5536 size_t i, j, nc, nr;
5537
5538 /* Check output flag... */
5539 if (!ctl->write_matrix)
5540 return;
5541
5542 /* Allocate... */
5543 ALLOC(cida, int,
5544 M);
5545 ALLOC(ciqa, int,
5546 N);
5547 ALLOC(cipa, int,
5548 N);
5549 ALLOC(cira, int,
5550 M);
5551 ALLOC(rida, int,
5552 M);
5553 ALLOC(riqa, int,
5554 N);
5555 ALLOC(ripa, int,
5556 N);
5557 ALLOC(rira, int,
5558 M);
5559
5560 /* Set filename... */
5561 if (dirname != NULL)
5562 sprintf(file, "%s/%s", dirname, filename);
5563 else
5564 sprintf(file, "%s", filename);
5565
5566 /* Write info... */
5567 LOG(1, "Write matrix: %s", file);
5568
5569 /* Create file... */
5570 if (!(out = fopen(file, "w")))
5571 ERRMSG("Cannot create file!");
5572
5573 /* Write header (row space)... */
5574 if (rowspace[0] == 'y') {
5575
5576 fprintf(out,
5577 "# $1 = Row: index (measurement space)\n"
5578 "# $2 = Row: channel wavenumber [cm^-1]\n"
5579 "# $3 = Row: time (seconds since 2000-01-01T00:00Z)\n"
5580 "# $4 = Row: view point altitude [km]\n"
5581 "# $5 = Row: view point longitude [deg]\n"
5582 "# $6 = Row: view point latitude [deg]\n");
5583
5584 /* Get number of rows... */
5585 nr = obs2y(ctl, obs, NULL, rida, rira);
5586
5587 } else {
5588
5589 fprintf(out,
5590 "# $1 = Row: index (state space)\n"
5591 "# $2 = Row: name of quantity\n"
5592 "# $3 = Row: time (seconds since 2000-01-01T00:00Z)\n"
5593 "# $4 = Row: altitude [km]\n"
5594 "# $5 = Row: longitude [deg]\n" "# $6 = Row: latitude [deg]\n");
5595
5596 /* Get number of rows... */
5597 nr = atm2x(ctl, atm, NULL, riqa, ripa);
5598 }
5599
5600 /* Write header (column space)... */
5601 if (colspace[0] == 'y') {
5602
5603 fprintf(out,
5604 "# $7 = Col: index (measurement space)\n"
5605 "# $8 = Col: channel wavenumber [cm^-1]\n"
5606 "# $9 = Col: time (seconds since 2000-01-01T00:00Z)\n"
5607 "# $10 = Col: view point altitude [km]\n"
5608 "# $11 = Col: view point longitude [deg]\n"
5609 "# $12 = Col: view point latitude [deg]\n");
5610
5611 /* Get number of columns... */
5612 nc = obs2y(ctl, obs, NULL, cida, cira);
5613
5614 } else {
5615
5616 fprintf(out,
5617 "# $7 = Col: index (state space)\n"
5618 "# $8 = Col: name of quantity\n"
5619 "# $9 = Col: time (seconds since 2000-01-01T00:00Z)\n"
5620 "# $10 = Col: altitude [km]\n"
5621 "# $11 = Col: longitude [deg]\n" "# $12 = Col: latitude [deg]\n");
5622
5623 /* Get number of columns... */
5624 nc = atm2x(ctl, atm, NULL, ciqa, cipa);
5625 }
5626
5627 /* Write header entry... */
5628 fprintf(out, "# $13 = Matrix element\n\n");
5629
5630 /* Write matrix data... */
5631 i = j = 0;
5632 while (i < nr && j < nc) {
5633
5634 /* Write info about the row... */
5635 if (rowspace[0] == 'y')
5636 fprintf(out, "%d %.4f %.2f %g %g %g",
5637 (int) i, ctl->nu[rida[i]],
5638 obs->time[rira[i]], obs->vpz[rira[i]],
5639 obs->vplon[rira[i]], obs->vplat[rira[i]]);
5640 else {
5641 idx2name(ctl, riqa[i], quantity);
5642 fprintf(out, "%d %s %.2f %g %g %g", (int) i, quantity,
5643 atm->time[ripa[i]], atm->z[ripa[i]],
5644 atm->lon[ripa[i]], atm->lat[ripa[i]]);
5645 }
5646
5647 /* Write info about the column... */
5648 if (colspace[0] == 'y')
5649 fprintf(out, " %d %.4f %.2f %g %g %g",
5650 (int) j, ctl->nu[cida[j]],
5651 obs->time[cira[j]], obs->vpz[cira[j]],
5652 obs->vplon[cira[j]], obs->vplat[cira[j]]);
5653 else {
5654 idx2name(ctl, ciqa[j], quantity);
5655 fprintf(out, " %d %s %.2f %g %g %g", (int) j, quantity,
5656 atm->time[cipa[j]], atm->z[cipa[j]],
5657 atm->lon[cipa[j]], atm->lat[cipa[j]]);
5658 }
5659
5660 /* Write matrix entry... */
5661 fprintf(out, " %g\n", gsl_matrix_get(matrix, i, j));
5662
5663 /* Set matrix indices... */
5664 if (sort[0] == 'r') {
5665 j++;
5666 if (j >= nc) {
5667 j = 0;
5668 i++;
5669 fprintf(out, "\n");
5670 }
5671 } else {
5672 i++;
5673 if (i >= nr) {
5674 i = 0;
5675 j++;
5676 fprintf(out, "\n");
5677 }
5678 }
5679 }
5680
5681 /* Close file... */
5682 fclose(out);
5683
5684 /* Free... */
5685 free(cida);
5686 free(ciqa);
5687 free(cipa);
5688 free(cira);
5689 free(rida);
5690 free(riqa);
5691 free(ripa);
5692 free(rira);
5693}
5694
5695/*****************************************************************************/
5696
5698 const char *dirname,
5699 const char *filename,
5700 ctl_t * ctl,
5701 obs_t * obs) {
5702
5703 FILE *out;
5704
5705 char file[LEN];
5706
5707 int n = 10;
5708
5709 /* Set filename... */
5710 if (dirname != NULL)
5711 sprintf(file, "%s/%s", dirname, filename);
5712 else
5713 sprintf(file, "%s", filename);
5714
5715 /* Write info... */
5716 LOG(1, "Write observation data: %s", file);
5717
5718 /* Create file... */
5719 if (!(out = fopen(file, "w")))
5720 ERRMSG("Cannot create file!");
5721
5722 /* Write header... */
5723 fprintf(out,
5724 "# $1 = time (seconds since 2000-01-01T00:00Z)\n"
5725 "# $2 = observer altitude [km]\n"
5726 "# $3 = observer longitude [deg]\n"
5727 "# $4 = observer latitude [deg]\n"
5728 "# $5 = view point altitude [km]\n"
5729 "# $6 = view point longitude [deg]\n"
5730 "# $7 = view point latitude [deg]\n"
5731 "# $8 = tangent point altitude [km]\n"
5732 "# $9 = tangent point longitude [deg]\n"
5733 "# $10 = tangent point latitude [deg]\n");
5734 for (int id = 0; id < ctl->nd; id++)
5735 if (ctl->write_bbt)
5736 fprintf(out, "# $%d = brightness temperature (%.4f cm^-1) [K]\n",
5737 ++n, ctl->nu[id]);
5738 else
5739 fprintf(out, "# $%d = radiance (%.4f cm^-1) [W/(m^2 sr cm^-1)]\n",
5740 ++n, ctl->nu[id]);
5741 for (int id = 0; id < ctl->nd; id++)
5742 fprintf(out, "# $%d = transmittance (%.4f cm^-1) [-]\n", ++n,
5743 ctl->nu[id]);
5744
5745 /* Write data... */
5746 for (int ir = 0; ir < obs->nr; ir++) {
5747 if (ir == 0 || obs->time[ir] != obs->time[ir - 1])
5748 fprintf(out, "\n");
5749 fprintf(out, "%.2f %g %g %g %g %g %g %g %g %g", obs->time[ir],
5750 obs->obsz[ir], obs->obslon[ir], obs->obslat[ir],
5751 obs->vpz[ir], obs->vplon[ir], obs->vplat[ir],
5752 obs->tpz[ir], obs->tplon[ir], obs->tplat[ir]);
5753 for (int id = 0; id < ctl->nd; id++)
5754 fprintf(out, " %g", obs->rad[id][ir]);
5755 for (int id = 0; id < ctl->nd; id++)
5756 fprintf(out, " %g", obs->tau[id][ir]);
5757 fprintf(out, "\n");
5758 }
5759
5760 /* Close file... */
5761 fclose(out);
5762
5763 /* Write info... */
5764 double mini, maxi;
5765 LOG(2, "Number of ray paths: %d", obs->nr);
5766 gsl_stats_minmax(&mini, &maxi, obs->time, 1, (size_t) obs->nr);
5767 LOG(2, "Time range: %.2f ... %.2f s", mini, maxi);
5768 gsl_stats_minmax(&mini, &maxi, obs->obsz, 1, (size_t) obs->nr);
5769 LOG(2, "Observer altitude range: %g ... %g km", mini, maxi);
5770 gsl_stats_minmax(&mini, &maxi, obs->obslon, 1, (size_t) obs->nr);
5771 LOG(2, "Observer longitude range: %g ... %g deg", mini, maxi);
5772 gsl_stats_minmax(&mini, &maxi, obs->obslat, 1, (size_t) obs->nr);
5773 LOG(2, "Observer latitude range: %g ... %g deg", mini, maxi);
5774 gsl_stats_minmax(&mini, &maxi, obs->vpz, 1, (size_t) obs->nr);
5775 LOG(2, "View point altitude range: %g ... %g km", mini, maxi);
5776 gsl_stats_minmax(&mini, &maxi, obs->vplon, 1, (size_t) obs->nr);
5777 LOG(2, "View point longitude range: %g ... %g deg", mini, maxi);
5778 gsl_stats_minmax(&mini, &maxi, obs->vplat, 1, (size_t) obs->nr);
5779 LOG(2, "View point latitude range: %g ... %g deg", mini, maxi);
5780 gsl_stats_minmax(&mini, &maxi, obs->tpz, 1, (size_t) obs->nr);
5781 LOG(2, "Tangent point altitude range: %g ... %g km", mini, maxi);
5782 gsl_stats_minmax(&mini, &maxi, obs->tplon, 1, (size_t) obs->nr);
5783 LOG(2, "Tangent point longitude range: %g ... %g deg", mini, maxi);
5784 gsl_stats_minmax(&mini, &maxi, obs->tplat, 1, (size_t) obs->nr);
5785 LOG(2, "Tangent point latitude range: %g ... %g deg", mini, maxi);
5786 for (int id = 0; id < ctl->nd; id++) {
5787 gsl_stats_minmax(&mini, &maxi, obs->rad[id], 1, (size_t) obs->nr);
5788 if (ctl->write_bbt) {
5789 LOG(2, "Brightness temperature (%.4f cm^-1) range: %g ... %g K",
5790 ctl->nu[id], mini, maxi);
5791 } else {
5792 LOG(2, "Radiance (%.4f cm^-1) range: %g ... %g W/(m^2 sr cm^-1)",
5793 ctl->nu[id], mini, maxi);
5794 }
5795 }
5796 for (int id = 0; id < ctl->nd; id++) {
5797 gsl_stats_minmax(&mini, &maxi, obs->tau[id], 1, (size_t) obs->nr);
5798 if (ctl->write_bbt) {
5799 LOG(2, "Transmittance (%.4f cm^-1) range: %g ... %g",
5800 ctl->nu[id], mini, maxi);
5801 }
5802 }
5803}
5804
5805/*****************************************************************************/
5806
5808 const char *filename,
5809 double *x,
5810 double *y,
5811 int n) {
5812
5813 FILE *out;
5814
5815 /* Write info... */
5816 LOG(1, "Write shape function: %s", filename);
5817
5818 /* Create file... */
5819 if (!(out = fopen(filename, "w")))
5820 ERRMSG("Cannot create file!");
5821
5822 /* Write header... */
5823 fprintf(out,
5824 "# $1 = shape function x-value [-]\n"
5825 "# $2 = shape function y-value [-]\n\n");
5826
5827 /* Write data... */
5828 for (int i = 0; i < n; i++)
5829 fprintf(out, "%.10g %.10g\n", x[i], y[i]);
5830
5831 /* Close file... */
5832 fclose(out);
5833}
5834
5835/*****************************************************************************/
5836
5838 ctl_t * ctl,
5839 tbl_t * tbl) {
5840
5841 FILE *out;
5842
5843 char filename[2 * LEN];
5844
5845 /* Loop over emitters and detectors... */
5846 for (int ig = 0; ig < ctl->ng; ig++)
5847 for (int id = 0; id < ctl->nd; id++) {
5848
5849 /* Set filename... */
5850 sprintf(filename, "%s_%.4f_%s.%s", ctl->tblbase,
5851 ctl->nu[id], ctl->emitter[ig],
5852 ctl->tblfmt == 1 ? "tab" : "bin");
5853
5854 /* Write info... */
5855 LOG(1, "Write emissivity table: %s", filename);
5856
5857 /* Create file... */
5858 if (!(out = fopen(filename, "w")))
5859 ERRMSG("Cannot create file!");
5860
5861 /* Write ASCII data... */
5862 if (ctl->tblfmt == 1) {
5863
5864 /* Write header... */
5865 fprintf(out,
5866 "# $1 = pressure [hPa]\n"
5867 "# $2 = temperature [K]\n"
5868 "# $3 = column density [molecules/cm^2]\n"
5869 "# $4 = emissivity [-]\n");
5870
5871 /* Save table file... */
5872 for (int ip = 0; ip < tbl->np[id][ig]; ip++)
5873 for (int it = 0; it < tbl->nt[id][ig][ip]; it++) {
5874 fprintf(out, "\n");
5875 for (int iu = 0; iu < tbl->nu[id][ig][ip][it]; iu++)
5876 fprintf(out, "%g %g %e %e\n",
5877 tbl->p[id][ig][ip], tbl->t[id][ig][ip][it],
5878 tbl->u[id][ig][ip][it][iu],
5879 tbl->eps[id][ig][ip][it][iu]);
5880 }
5881 }
5882
5883 /* Write binary data... */
5884 else if (ctl->tblfmt == 2) {
5885 FWRITE(&tbl->np[id][ig], int,
5886 1,
5887 out);
5888 FWRITE(tbl->p[id][ig], double,
5889 (size_t) tbl->np[id][ig],
5890 out);
5891 for (int ip = 0; ip < tbl->np[id][ig]; ip++) {
5892 FWRITE(&tbl->nt[id][ig][ip], int,
5893 1,
5894 out);
5895 FWRITE(tbl->t[id][ig][ip], double,
5896 (size_t) tbl->nt[id][ig][ip],
5897 out);
5898 for (int it = 0; it < tbl->nt[id][ig][ip]; it++) {
5899 FWRITE(&tbl->nu[id][ig][ip][it], int,
5900 1,
5901 out);
5902 FWRITE(tbl->u[id][ig][ip][it], float,
5903 (size_t) tbl->nu[id][ig][ip][it],
5904 out);
5905 FWRITE(tbl->eps[id][ig][ip][it], float,
5906 (size_t) tbl->nu[id][ig][ip][it],
5907 out);
5908 }
5909 }
5910 }
5911
5912 /* Error message... */
5913 else
5914 ERRMSG("Unknown look-up table format!");
5915
5916 /* Close file... */
5917 fclose(out);
5918 }
5919}
5920
5921/*****************************************************************************/
5922
5924 ctl_t * ctl,
5925 gsl_vector * x,
5926 atm_t * atm) {
5927
5928 size_t n = 0;
5929
5930 /* Get pressure... */
5931 for (int ip = 0; ip < atm->np; ip++)
5932 if (atm->z[ip] >= ctl->retp_zmin && atm->z[ip] <= ctl->retp_zmax)
5933 x2atm_help(&atm->p[ip], x, &n);
5934
5935 /* Get temperature... */
5936 for (int ip = 0; ip < atm->np; ip++)
5937 if (atm->z[ip] >= ctl->rett_zmin && atm->z[ip] <= ctl->rett_zmax)
5938 x2atm_help(&atm->t[ip], x, &n);
5939
5940 /* Get volume mixing ratio... */
5941 for (int ig = 0; ig < ctl->ng; ig++)
5942 for (int ip = 0; ip < atm->np; ip++)
5943 if (atm->z[ip] >= ctl->retq_zmin[ig]
5944 && atm->z[ip] <= ctl->retq_zmax[ig])
5945 x2atm_help(&atm->q[ig][ip], x, &n);
5946
5947 /* Get extinction... */
5948 for (int iw = 0; iw < ctl->nw; iw++)
5949 for (int ip = 0; ip < atm->np; ip++)
5950 if (atm->z[ip] >= ctl->retk_zmin[iw]
5951 && atm->z[ip] <= ctl->retk_zmax[iw])
5952 x2atm_help(&atm->k[iw][ip], x, &n);
5953
5954 /* Get cloud data... */
5955 if (ctl->ret_clz)
5956 x2atm_help(&atm->clz, x, &n);
5957 if (ctl->ret_cldz)
5958 x2atm_help(&atm->cldz, x, &n);
5959 if (ctl->ret_clk)
5960 for (int icl = 0; icl < ctl->ncl; icl++)
5961 x2atm_help(&atm->clk[icl], x, &n);
5962
5963 /* Get surface data... */
5964 if (ctl->ret_sfz)
5965 x2atm_help(&atm->sfz, x, &n);
5966 if (ctl->ret_sfp)
5967 x2atm_help(&atm->sfp, x, &n);
5968 if (ctl->ret_sft)
5969 x2atm_help(&atm->sft, x, &n);
5970 if (ctl->ret_sfeps)
5971 for (int isf = 0; isf < ctl->nsf; isf++)
5972 x2atm_help(&atm->sfeps[isf], x, &n);
5973}
5974
5975/*****************************************************************************/
5976
5978 double *value,
5979 gsl_vector * x,
5980 size_t *n) {
5981
5982 /* Get state vector element... */
5983 *value = gsl_vector_get(x, *n);
5984 (*n)++;
5985}
5986
5987/*****************************************************************************/
5988
5990 ctl_t * ctl,
5991 gsl_vector * y,
5992 obs_t * obs) {
5993
5994 size_t m = 0;
5995
5996 /* Decompose measurement vector... */
5997 for (int ir = 0; ir < obs->nr; ir++)
5998 for (int id = 0; id < ctl->nd; id++)
5999 if (isfinite(obs->rad[id][ir])) {
6000 obs->rad[id][ir] = gsl_vector_get(y, m);
6001 m++;
6002 }
6003}
void write_shape(const char *filename, double *x, double *y, int n)
Write shape function.
Definition: jurassic.c:5807
double planck(double t, double nu)
Compute Planck function.
Definition: jurassic.c:4207
int locate_tbl(float *xx, int n, double x)
Find array index in float array.
Definition: jurassic.c:4158
void read_matrix(const char *dirname, const char *filename, gsl_matrix *matrix)
Read matrix.
Definition: jurassic.c:4671
void timer(const char *name, const char *file, const char *func, int line, int mode)
Measure wall-clock time.
Definition: jurassic.c:5323
void read_rfm_spec(const char *filename, double *nu, double *rad, int *npts)
Read RFM spectrum.
Definition: jurassic.c:4870
void x2atm(ctl_t *ctl, gsl_vector *x, atm_t *atm)
Decompose parameter vector or state vector.
Definition: jurassic.c:5923
int locate_irr(double *xx, int n, double x)
Find array index for irregular grid.
Definition: jurassic.c:4109
void read_atm(const char *dirname, const char *filename, ctl_t *ctl, atm_t *atm)
Read atmospheric data.
Definition: jurassic.c:4456
void climatology(ctl_t *ctl, atm_t *atm)
Interpolate climatological data.
Definition: jurassic.c:134
void init_srcfunc(ctl_t *ctl, tbl_t *tbl)
Initialize source function table.
Definition: jurassic.c:3633
void x2atm_help(double *value, gsl_vector *x, size_t *n)
Get element from state vector.
Definition: jurassic.c:5977
void read_ctl(int argc, char *argv[], ctl_t *ctl)
Read forward model control parameters.
Definition: jurassic.c:4561
void y2obs(ctl_t *ctl, gsl_vector *y, obs_t *obs)
Decompose measurement vector.
Definition: jurassic.c:5989
void raytrace(ctl_t *ctl, atm_t *atm, obs_t *obs, los_t *los, int ir)
Do ray-tracing to determine LOS.
Definition: jurassic.c:4216
void copy_obs(ctl_t *ctl, obs_t *obs_dest, obs_t *obs_src, int init)
Copy and initialize observation data.
Definition: jurassic.c:2982
void write_atm(const char *dirname, const char *filename, ctl_t *ctl, atm_t *atm)
Write atmospheric data.
Definition: jurassic.c:5361
double intpol_tbl_eps(tbl_t *tbl, int ig, int id, int ip, int it, double u)
Interpolate emissivity from look-up tables.
Definition: jurassic.c:3896
void read_tbl(ctl_t *ctl, tbl_t *tbl)
Read look-up table data.
Definition: jurassic.c:4963
void formod_fov(ctl_t *ctl, obs_t *obs)
Apply field of view convolution.
Definition: jurassic.c:3128
size_t obs2y(ctl_t *ctl, obs_t *obs, gsl_vector *y, int *ida, int *ira)
Compose measurement vector.
Definition: jurassic.c:4180
void time2jsec(int year, int mon, int day, int hour, int min, int sec, double remain, double *jsec)
Convert date to seconds.
Definition: jurassic.c:5292
void formod_pencil(ctl_t *ctl, atm_t *atm, obs_t *obs, int ir)
Compute radiative transfer for a pencil beam.
Definition: jurassic.c:3203
void tangent_point(los_t *los, double *tpz, double *tplon, double *tplat)
Find tangent point of a given LOS.
Definition: jurassic.c:5248
void write_obs(const char *dirname, const char *filename, ctl_t *ctl, obs_t *obs)
Write observation data.
Definition: jurassic.c:5697
void write_atm_rfm(const char *filename, ctl_t *ctl, atm_t *atm)
Write atmospheric data in RFM format.
Definition: jurassic.c:5479
void write_matrix(const char *dirname, const char *filename, ctl_t *ctl, gsl_matrix *matrix, atm_t *atm, obs_t *obs, const char *rowspace, const char *colspace, const char *sort)
Write matrix.
Definition: jurassic.c:5519
double refractivity(double p, double t)
Compute refractivity (return value is n - 1).
Definition: jurassic.c:5128
void hydrostatic(ctl_t *ctl, atm_t *atm)
Set hydrostatic equilibrium.
Definition: jurassic.c:3522
int locate_reg(double *xx, int n, double x)
Find array index for regular grid.
Definition: jurassic.c:4139
void intpol_atm(ctl_t *ctl, atm_t *atm, double z, double *p, double *t, double *q, double *k)
Interpolate atmospheric data.
Definition: jurassic.c:3687
double ctmo2(double nu, double p, double t)
Compute oxygen continuum (absorption coefficient).
Definition: jurassic.c:2869
void idx2name(ctl_t *ctl, int idx, char *quantity)
Determine name of state vector quantity for given index.
Definition: jurassic.c:3588
void intpol_tbl_ega(ctl_t *ctl, tbl_t *tbl, los_t *los, int ip, double tau_path[ND][NG], double tau_seg[ND])
Get transmittance from look-up tables (EGA method).
Definition: jurassic.c:3801
void formod_srcfunc(ctl_t *ctl, tbl_t *tbl, double t, double *src)
Compute Planck source function.
Definition: jurassic.c:3490
void jsec2time(double jsec, int *year, int *mon, int *day, int *hour, int *min, int *sec, double *remain)
Convert seconds to date.
Definition: jurassic.c:3975
double brightness(double rad, double nu)
Compute brightness temperature.
Definition: jurassic.c:109
void intpol_tbl_cga(ctl_t *ctl, tbl_t *tbl, los_t *los, int ip, double tau_path[ND][NG], double tau_seg[ND])
Get transmittance from look-up tables (CGA method).
Definition: jurassic.c:3712
void read_obs(const char *dirname, const char *filename, ctl_t *ctl, obs_t *obs)
Read observation data.
Definition: jurassic.c:4711
double ctmn2(double nu, double p, double t)
Compute nitrogen continuum (absorption coefficient).
Definition: jurassic.c:2805
int find_emitter(ctl_t *ctl, const char *emitter)
Find index of an emitter.
Definition: jurassic.c:3020
double scan_ctl(int argc, char *argv[], const char *varname, int arridx, const char *defvalue, char *value)
Search control parameter file for variable entry.
Definition: jurassic.c:5138
double sza(double sec, double lon, double lat)
Calculate solar zenith angle.
Definition: jurassic.c:5207
void read_shape(const char *filename, double *x, double *y, int *n)
Read shape function.
Definition: jurassic.c:4921
void geo2cart(double z, double lon, double lat, double *x)
Convert geolocation to Cartesian coordinates.
Definition: jurassic.c:3507
void formod(ctl_t *ctl, atm_t *atm, obs_t *obs)
Determine ray paths and compute radiative transfer.
Definition: jurassic.c:3033
double ctmh2o(double nu, double p, double t, double q, double u)
Compute water vapor continuum (optical depth).
Definition: jurassic.c:1755
double read_obs_rfm(const char *basename, double z, double *nu, double *f, int n)
Read observation data in RFM format.
Definition: jurassic.c:4812
void kernel(ctl_t *ctl, atm_t *atm, obs_t *obs, gsl_matrix *k)
Compute Jacobians.
Definition: jurassic.c:4008
void formod_continua(ctl_t *ctl, los_t *los, int ip, double *beta)
Compute absorption coefficient of continua.
Definition: jurassic.c:3082
void atm2x_help(double value, int value_iqa, int value_ip, gsl_vector *x, int *iqa, int *ipa, size_t *n)
Add element to state vector.
Definition: jurassic.c:87
double intpol_tbl_u(tbl_t *tbl, int ig, int id, int ip, int it, double eps)
Interpolate column density from look-up tables.
Definition: jurassic.c:3935
void write_tbl(ctl_t *ctl, tbl_t *tbl)
Write look-up table data.
Definition: jurassic.c:5837
void copy_atm(ctl_t *ctl, atm_t *atm_dest, atm_t *atm_src, int init)
Copy and initialize atmospheric data.
Definition: jurassic.c:2928
size_t atm2x(ctl_t *ctl, atm_t *atm, gsl_vector *x, int *iqa, int *ipa)
Compose state vector or parameter vector.
Definition: jurassic.c:29
void formod_rfm(ctl_t *ctl, atm_t *atm, obs_t *obs)
Apply RFM for radiative transfer calculations.
Definition: jurassic.c:3349
void cart2geo(double *x, double *z, double *lon, double *lat)
Convert Cartesian coordinates to geolocation.
Definition: jurassic.c:119
double ctmco2(double nu, double p, double t, double u)
Compute carbon dioxide continuum (optical depth).
Definition: jurassic.c:897
JURASSIC library declarations.
#define N
Maximum size of state vector.
Definition: jurassic.h:373
#define IDXCLZ
Index for cloud layer height.
Definition: jurassic.h:443
#define LEN
Maximum length of ASCII data lines.
Definition: jurassic.h:363
#define RE
Mean radius of Earth [km].
Definition: jurassic.h:279
#define P0
Standard pressure [hPa].
Definition: jurassic.h:289
#define KB
Boltzmann constant [kg m^2/(K s^2)].
Definition: jurassic.h:264
#define POW2(x)
Compute x^2.
Definition: jurassic.h:175
#define NFOV
Number of ray paths used for FOV calculations.
Definition: jurassic.h:393
#define FWRITE(ptr, type, size, out)
Write binary data.
Definition: jurassic.h:142
#define DOTP(a, b)
Compute dot product of two vectors.
Definition: jurassic.h:133
#define UMAX
Maximum column density [molecules/cm^2].
Definition: jurassic.h:319
#define MIN(a, b)
Macro to determine the minimum of two values.
Definition: jurassic.h:152
#define IDXCLDZ
Index for cloud layer depth.
Definition: jurassic.h:446
#define ERRMSG(...)
Print error message and quit program.
Definition: jurassic.h:217
#define C1
First spectroscopic constant (c_1 = 2 h c^2) [W/(m^2 sr cm^-4)].
Definition: jurassic.h:234
#define RFMNPTS
Maximum number of RFM spectral grid points.
Definition: jurassic.h:418
#define IDXK(iw)
Indices for extinction.
Definition: jurassic.h:440
#define M
Maximum size of measurement vector.
Definition: jurassic.h:368
#define G0
Standard gravity [m/s^2].
Definition: jurassic.h:254
#define ND
Maximum number of radiance channels.
Definition: jurassic.h:333
#define NA
Avogadro's number.
Definition: jurassic.h:274
#define LOGY(x0, y0, x1, y1, x)
Compute logarithmic interpolation in y.
Definition: jurassic.h:166
#define NSHAPE
Maximum number of shape function grid points.
Definition: jurassic.h:388
#define IDXSFT
Index for surface layer temperature.
Definition: jurassic.h:458
#define RI
Ideal gas constant [J/(mol K)].
Definition: jurassic.h:284
#define NORM(a)
Compute norm of a vector.
Definition: jurassic.h:172
#define IDXSFEPS(isf)
Indices for surface layer emissivity.
Definition: jurassic.h:461
#define IDXCLK(icl)
Indices for cloud layer extinction.
Definition: jurassic.h:449
#define LOGX(x0, y0, x1, y1, x)
Compute logarithmic interpolation in x.
Definition: jurassic.h:160
#define TOK(line, tok, format, var)
Read string tokens.
Definition: jurassic.h:185
#define WARN(...)
Print warning message.
Definition: jurassic.h:211
#define TBLNU
Maximum number of column densities in emissivity tables.
Definition: jurassic.h:408
#define IDXP
Index for pressure.
Definition: jurassic.h:431
#define ALLOC(ptr, type, n)
Allocate memory.
Definition: jurassic.h:121
#define TSUN
Effective temperature of the sun [K].
Definition: jurassic.h:309
#define IDXSFP
Index for surface layer pressure.
Definition: jurassic.h:455
#define TBLNT
Maximum number of temperatures in emissivity tables.
Definition: jurassic.h:403
#define NP
Maximum number of atmospheric data points.
Definition: jurassic.h:343
#define POW3(x)
Compute x^3.
Definition: jurassic.h:178
#define NG
Maximum number of emitters.
Definition: jurassic.h:338
#define EPSMAX
Maximum emissivity.
Definition: jurassic.h:249
#define LOG(level,...)
Print log message.
Definition: jurassic.h:201
#define TBLNS
Maximum number of source function temperature levels.
Definition: jurassic.h:413
#define C2
Second spectroscopic constant (c_2 = h c / k) [K/cm^-1].
Definition: jurassic.h:239
#define TBLNP
Maximum number of pressure levels in emissivity tables.
Definition: jurassic.h:398
#define NSF
Maximum number of surface layer spectral grid points.
Definition: jurassic.h:353
#define NCL
Maximum number of cloud layer spectral grid points.
Definition: jurassic.h:328
#define FREAD(ptr, type, size, out)
Read binary data.
Definition: jurassic.h:136
#define LIN(x0, y0, x1, y1, x)
Compute linear interpolation.
Definition: jurassic.h:156
#define NLOS
Maximum number of LOS points.
Definition: jurassic.h:383
#define NR
Maximum number of ray paths.
Definition: jurassic.h:348
#define IDXQ(ig)
Indices for volume mixing ratios.
Definition: jurassic.h:437
#define RFMLINE
Maximum length of RFM data lines.
Definition: jurassic.h:423
#define TMAX
Maximum temperature for source function [K].
Definition: jurassic.h:304
#define TMIN
Minimum temperature for source function [K].
Definition: jurassic.h:299
#define NW
Maximum number of spectral windows.
Definition: jurassic.h:358
#define MAX(a, b)
Macro to determine the maximum of two values.
Definition: jurassic.h:148
#define IDXT
Index for temperature.
Definition: jurassic.h:434
#define IDXSFZ
Index for surface layer height.
Definition: jurassic.h:452
Atmospheric data.
Definition: jurassic.h:468
double time[NP]
Time (seconds since 2000-01-01T00:00Z).
Definition: jurassic.h:474
double sfeps[NSF]
Surface emissivity.
Definition: jurassic.h:516
double k[NW][NP]
Extinction [km^-1].
Definition: jurassic.h:495
double sfz
Surface height [km].
Definition: jurassic.h:507
double lat[NP]
Latitude [deg].
Definition: jurassic.h:483
double lon[NP]
Longitude [deg].
Definition: jurassic.h:480
double t[NP]
Temperature [K].
Definition: jurassic.h:489
double sfp
Surface pressure [hPa].
Definition: jurassic.h:510
double clz
Cloud layer height [km].
Definition: jurassic.h:498
int np
Number of data points.
Definition: jurassic.h:471
double cldz
Cloud layer depth [km].
Definition: jurassic.h:501
double sft
Surface temperature [K].
Definition: jurassic.h:513
double z[NP]
Altitude [km].
Definition: jurassic.h:477
double clk[NCL]
Cloud layer extinction [km^-1].
Definition: jurassic.h:504
double q[NG][NP]
Volume mixing ratio [ppv].
Definition: jurassic.h:492
double p[NP]
Pressure [hPa].
Definition: jurassic.h:486
Forward model control parameters.
Definition: jurassic.h:521
int write_matrix
Write matrix file (0=no, 1=yes).
Definition: jurassic.h:641
int nw
Number of spectral windows.
Definition: jurassic.h:536
double retp_zmin
Minimum altitude for pressure retrieval [km].
Definition: jurassic.h:593
double nu[ND]
Centroid wavenumber of each channel [cm^-1].
Definition: jurassic.h:533
double retk_zmax[NW]
Maximum altitude for extinction retrieval [km].
Definition: jurassic.h:614
double sfnu[NSF]
Surface layer wavenumber [cm^-1].
Definition: jurassic.h:551
char rfmhit[LEN]
HITRAN file for RFM.
Definition: jurassic.h:650
char tblbase[LEN]
Basename for table files and filter function files.
Definition: jurassic.h:560
char rfmbin[LEN]
Path to RFM binary.
Definition: jurassic.h:647
double hydz
Reference height for hydrostatic pressure profile (-999 to skip) [km].
Definition: jurassic.h:566
int ret_sfz
Retrieve surface layer height (0=no, 1=yes).
Definition: jurassic.h:626
int ctm_co2
Compute CO2 continuum (0=no, 1=yes).
Definition: jurassic.h:569
double rett_zmax
Maximum altitude for temperature retrieval [km].
Definition: jurassic.h:602
int ret_sfeps
Retrieve surface layer emissivity (0=no, 1=yes).
Definition: jurassic.h:635
int ret_sft
Retrieve surface layer temperature (0=no, 1=yes).
Definition: jurassic.h:632
int ret_clz
Retrieve cloud layer height (0=no, 1=yes).
Definition: jurassic.h:617
int ctm_n2
Compute N2 continuum (0=no, 1=yes).
Definition: jurassic.h:575
char fov[LEN]
Field-of-view data file.
Definition: jurassic.h:590
char rfmxsc[NG][LEN]
Emitter cross-section files for RFM.
Definition: jurassic.h:653
int window[ND]
Window index of each channel.
Definition: jurassic.h:539
int ctm_h2o
Compute H2O continuum (0=no, 1=yes).
Definition: jurassic.h:572
int formod
Forward model (0=CGA, 1=EGA, 2=RFM).
Definition: jurassic.h:644
double retq_zmax[NG]
Maximum altitude for volume mixing ratio retrieval [km].
Definition: jurassic.h:608
double retq_zmin[NG]
Minimum altitude for volume mixing ratio retrieval [km].
Definition: jurassic.h:605
int ng
Number of emitters.
Definition: jurassic.h:524
double clnu[NCL]
Cloud layer wavenumber [cm^-1].
Definition: jurassic.h:545
int refrac
Take into account refractivity (0=no, 1=yes).
Definition: jurassic.h:581
double rett_zmin
Minimum altitude for temperature retrieval [km].
Definition: jurassic.h:599
double sfsza
Solar zenith angle at the surface [deg] (-999=auto).
Definition: jurassic.h:557
int nd
Number of radiance channels.
Definition: jurassic.h:530
int sftype
Surface treatment (0=none, 1=emissions, 2=downward, 3=solar).
Definition: jurassic.h:554
int ret_sfp
Retrieve surface layer pressure (0=no, 1=yes).
Definition: jurassic.h:629
double retk_zmin[NW]
Minimum altitude for extinction retrieval [km].
Definition: jurassic.h:611
int ncl
Number of cloud layer spectral grid points.
Definition: jurassic.h:542
int ctm_o2
Compute O2 continuum (0=no, 1=yes).
Definition: jurassic.h:578
int ret_clk
Retrieve cloud layer extinction (0=no, 1=yes).
Definition: jurassic.h:623
char emitter[NG][LEN]
Name of each emitter.
Definition: jurassic.h:527
int nsf
Number of surface layer spectral grid points.
Definition: jurassic.h:548
double rayds
Maximum step length for raytracing [km].
Definition: jurassic.h:584
int ret_cldz
Retrieve cloud layer depth (0=no, 1=yes).
Definition: jurassic.h:620
int tblfmt
Look-up table file format (1=ASCII, 2=binary).
Definition: jurassic.h:563
double raydz
Vertical step length for raytracing [km].
Definition: jurassic.h:587
int write_bbt
Use brightness temperature instead of radiance (0=no, 1=yes).
Definition: jurassic.h:638
double retp_zmax
Maximum altitude for pressure retrieval [km].
Definition: jurassic.h:596
Line-of-sight data.
Definition: jurassic.h:658
double z[NLOS]
Altitude [km].
Definition: jurassic.h:664
double eps[NLOS][ND]
Segment emissivity.
Definition: jurassic.h:706
double cgu[NLOS][NG]
Curtis-Godson column density [molecules/cm^2].
Definition: jurassic.h:703
double q[NLOS][NG]
Volume mixing ratio [ppv].
Definition: jurassic.h:679
double sft
Surface temperature [K].
Definition: jurassic.h:685
double cgt[NLOS][NG]
Curtis-Godson temperature [K].
Definition: jurassic.h:700
double lon[NLOS]
Longitude [deg].
Definition: jurassic.h:667
double ds[NLOS]
Segment length [km].
Definition: jurassic.h:691
int np
Number of LOS points.
Definition: jurassic.h:661
double u[NLOS][NG]
Column density [molecules/cm^2].
Definition: jurassic.h:694
double lat[NLOS]
Latitude [deg].
Definition: jurassic.h:670
double src[NLOS][ND]
Segment source function [W/(m^2 sr cm^-1)].
Definition: jurassic.h:709
double k[NLOS][ND]
Extinction [km^-1].
Definition: jurassic.h:682
double sfeps[ND]
Surface emissivity.
Definition: jurassic.h:688
double cgp[NLOS][NG]
Curtis-Godson pressure [hPa].
Definition: jurassic.h:697
double t[NLOS]
Temperature [K].
Definition: jurassic.h:676
double p[NLOS]
Pressure [hPa].
Definition: jurassic.h:673
Observation geometry and radiance data.
Definition: jurassic.h:714
double tau[ND][NR]
Transmittance of ray path.
Definition: jurassic.h:750
double rad[ND][NR]
Radiance [W/(m^2 sr cm^-1)].
Definition: jurassic.h:753
double tplon[NR]
Tangent point longitude [deg].
Definition: jurassic.h:744
double vpz[NR]
View point altitude [km].
Definition: jurassic.h:732
double vplat[NR]
View point latitude [deg].
Definition: jurassic.h:738
double obslon[NR]
Observer longitude [deg].
Definition: jurassic.h:726
double obslat[NR]
Observer latitude [deg].
Definition: jurassic.h:729
double obsz[NR]
Observer altitude [km].
Definition: jurassic.h:723
double tplat[NR]
Tangent point latitude [deg].
Definition: jurassic.h:747
double vplon[NR]
View point longitude [deg].
Definition: jurassic.h:735
double time[NR]
Time (seconds since 2000-01-01T00:00Z).
Definition: jurassic.h:720
double tpz[NR]
Tangent point altitude [km].
Definition: jurassic.h:741
int nr
Number of ray paths.
Definition: jurassic.h:717
Emissivity look-up tables.
Definition: jurassic.h:758
double sr[TBLNS][ND]
Source function radiance [W/(m^2 sr cm^-1)].
Definition: jurassic.h:785
double p[ND][NG][TBLNP]
Pressure [hPa].
Definition: jurassic.h:770
int nu[ND][NG][TBLNP][TBLNT]
Number of column densities.
Definition: jurassic.h:767
int nt[ND][NG][TBLNP]
Number of temperatures.
Definition: jurassic.h:764
float eps[ND][NG][TBLNP][TBLNT][TBLNU]
Emissivity.
Definition: jurassic.h:779
float u[ND][NG][TBLNP][TBLNT][TBLNU]
Column density [molecules/cm^2].
Definition: jurassic.h:776
double t[ND][NG][TBLNP][TBLNT]
Temperature [K].
Definition: jurassic.h:773
double st[TBLNS]
Source function temperature [K].
Definition: jurassic.h:782
int np[ND][NG]
Number of pressure levels.
Definition: jurassic.h:761