themis.c (44121B)
1 /* Copyright (C) 2017, 2018, 2025 |Méso|Star> 2 * 3 * This program is free software: you can redistribute it and/or modify 4 * it under the terms of the GNU General Public License as published by 5 * the Free Software Foundation, either version 3 of the License, or 6 * (at your option) any later version. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU General Public License for more details. 12 * 13 * You should have received a copy of the GNU General Public License 14 * along with this program. If not, see <http://www.gnu.org/licenses/>. */ 15 16 #include <float.h> 17 #include <stdio.h> 18 #include <math.h> 19 20 /******************************************************************************* 21 * Data 22 ******************************************************************************/ 23 static const double solar_spectrum[][2] = { /* Wavelength data */ 24 {2.800000e-01, 1.755832e-22}, 25 {2.850000e-01, 3.294496e-13}, 26 {2.900000e-01, 9.825731e-07}, 27 {2.950000e-01, 4.867814e-03}, 28 {3.000000e-01, 5.930555e-01}, 29 {3.050000e-01, 1.009141e+01}, 30 {3.100000e-01, 3.418097e+01}, 31 {3.150000e-01, 8.042174e+01}, 32 {3.200000e-01, 1.269513e+02}, 33 {3.250000e-01, 1.755832e+02}, 34 {3.300000e-01, 2.802401e+02}, 35 {3.350000e-01, 2.853227e+02}, 36 {3.400000e-01, 3.165119e+02}, 37 {3.450000e-01, 3.021880e+02}, 38 {3.500000e-01, 3.613318e+02}, 39 {3.550000e-01, 4.239411e+02}, 40 {3.600000e-01, 4.052276e+02}, 41 {3.650000e-01, 4.730351e+02}, 42 {3.700000e-01, 5.417667e+02}, 43 {3.750000e-01, 4.694541e+02}, 44 {3.800000e-01, 5.618663e+02}, 45 {3.850000e-01, 5.083828e+02}, 46 {3.900000e-01, 6.487338e+02}, 47 {3.950000e-01, 6.482718e+02}, 48 {4.000000e-01, 9.550803e+02}, 49 {4.050000e-01, 9.825730e+02}, 50 {4.100000e-01, 9.814178e+02}, 51 {4.150000e-01, 1.076949e+03}, 52 {4.200000e-01, 1.098781e+03}, 53 {4.250000e-01, 1.125350e+03}, 54 {4.300000e-01, 8.677508e+02}, 55 {4.350000e-01, 1.148568e+03}, 56 {4.400000e-01, 1.220997e+03}, 57 {4.450000e-01, 1.329581e+03}, 58 {4.500000e-01, 1.492457e+03}, 59 {4.550000e-01, 1.458958e+03}, 60 {4.600000e-01, 1.491302e+03}, 61 {4.650000e-01, 1.502854e+03}, 62 {4.700000e-01, 1.461268e+03}, 63 {4.750000e-01, 1.546750e+03}, 64 {4.800000e-01, 1.581404e+03}, 65 {4.850000e-01, 1.485527e+03}, 66 {4.900000e-01, 1.568698e+03}, 67 {4.950000e-01, 1.591801e+03}, 68 {5.000000e-01, 1.539819e+03}, 69 {5.050000e-01, 1.549060e+03}, 70 {5.100000e-01, 1.569853e+03}, 71 {5.150000e-01, 1.554836e+03}, 72 {5.200000e-01, 1.516716e+03}, 73 {5.250000e-01, 1.613748e+03}, 74 {5.300000e-01, 1.609128e+03}, 75 {5.350000e-01, 1.610283e+03}, 76 {5.400000e-01, 1.515560e+03}, 77 {5.450000e-01, 1.592956e+03}, 78 {5.500000e-01, 1.595266e+03}, 79 {5.550000e-01, 1.618369e+03}, 80 {5.600000e-01, 1.557146e+03}, 81 {5.650000e-01, 1.554836e+03}, 82 {5.700000e-01, 1.515560e+03}, 83 {5.750000e-01, 1.542129e+03}, 84 {5.800000e-01, 1.561767e+03}, 85 {5.850000e-01, 1.582559e+03}, 86 {5.900000e-01, 1.363080e+03}, 87 {5.950000e-01, 1.440476e+03}, 88 {6.000000e-01, 1.523647e+03}, 89 {6.050000e-01, 1.558301e+03}, 90 {6.100000e-01, 1.539819e+03}, 91 {6.150000e-01, 1.543284e+03}, 92 {6.200000e-01, 1.555991e+03}, 93 {6.250000e-01, 1.473975e+03}, 94 {6.300000e-01, 1.460113e+03}, 95 {6.350000e-01, 1.519026e+03}, 96 {6.400000e-01, 1.524802e+03}, 97 {6.450000e-01, 1.524802e+03}, 98 {6.500000e-01, 1.461268e+03}, 99 {6.550000e-01, 1.398890e+03}, 100 {6.600000e-01, 1.465889e+03}, 101 {6.650000e-01, 1.490147e+03}, 102 {6.700000e-01, 1.493613e+03}, 103 {6.750000e-01, 1.482061e+03}, 104 {6.800000e-01, 1.473975e+03}, 105 {6.850000e-01, 1.438165e+03}, 106 {6.900000e-01, 1.227927e+03}, 107 {6.950000e-01, 1.281064e+03}, 108 {7.000000e-01, 1.282220e+03}, 109 {7.050000e-01, 1.331891e+03}, 110 {7.100000e-01, 1.342288e+03}, 111 {7.150000e-01, 1.306478e+03}, 112 {7.200000e-01, 8.671732e+02}, 113 {7.250000e-01, 9.532321e+02}, 114 {7.300000e-01, 1.061239e+03}, 115 {7.350000e-01, 1.217531e+03}, 116 {7.400000e-01, 1.253341e+03}, 117 {7.450000e-01, 1.311098e+03}, 118 {7.500000e-01, 1.303012e+03}, 119 {7.550000e-01, 1.293771e+03}, 120 {7.600000e-01, 2.831280e+02}, 121 {7.650000e-01, 7.233567e+02}, 122 {7.700000e-01, 1.226772e+03}, 123 {7.750000e-01, 1.236014e+03}, 124 {7.800000e-01, 1.237169e+03}, 125 {7.850000e-01, 1.229083e+03}, 126 {7.900000e-01, 1.118765e+03}, 127 {7.950000e-01, 1.164394e+03}, 128 {8.000000e-01, 1.134014e+03}, 129 {8.050000e-01, 1.121307e+03}, 130 {8.100000e-01, 1.091042e+03}, 131 {8.150000e-01, 8.507700e+02}, 132 {8.200000e-01, 8.317100e+02}, 133 {8.250000e-01, 1.000362e+03}, 134 {8.300000e-01, 9.195016e+02}, 135 {8.350000e-01, 1.049456e+03}, 136 {8.400000e-01, 1.061354e+03}, 137 {8.450000e-01, 1.078220e+03}, 138 {8.500000e-01, 1.017921e+03}, 139 {8.550000e-01, 9.829195e+02}, 140 {8.600000e-01, 1.063665e+03}, 141 {8.650000e-01, 1.007640e+03}, 142 {8.700000e-01, 1.043219e+03}, 143 {8.750000e-01, 1.036288e+03}, 144 {8.800000e-01, 1.023003e+03}, 145 {8.850000e-01, 1.012145e+03}, 146 {8.900000e-01, 1.000016e+03}, 147 {8.950000e-01, 8.095311e+02}, 148 {9.000000e-01, 7.268221e+02}, 149 {9.050000e-01, 8.257032e+02}, 150 {9.100000e-01, 5.527406e+02}, 151 {9.150000e-01, 6.158120e+02}, 152 {9.200000e-01, 7.346772e+02}, 153 {9.250000e-01, 6.600543e+02}, 154 {9.300000e-01, 3.049603e+02}, 155 {9.350000e-01, 1.475130e+02}, 156 {9.400000e-01, 3.614473e+02}, 157 {9.450000e-01, 2.581767e+02}, 158 {9.500000e-01, 6.159275e+01}, 159 {9.550000e-01, 2.303375e+02}, 160 {9.600000e-01, 3.137395e+02}, 161 {9.650000e-01, 4.293703e+02}, 162 {9.700000e-01, 5.969830e+02}, 163 {9.750000e-01, 5.647542e+02}, 164 {9.800000e-01, 5.682197e+02}, 165 {9.850000e-01, 6.823488e+02}, 166 {9.900000e-01, 7.674835e+02}, 167 {9.950000e-01, 8.192344e+02}, 168 {1.000000e+00, 8.012140e+02}, 169 {1.005000e+00, 7.822695e+02}, 170 {1.010000e+00, 7.758006e+02}, 171 {1.015000e+00, 7.794971e+02}, 172 {1.020000e+00, 7.657508e+02}, 173 {1.025000e+00, 7.675990e+02}, 174 {1.030000e+00, 7.572027e+02}, 175 {1.035000e+00, 7.464597e+02}, 176 {1.040000e+00, 7.380271e+02}, 177 {1.045000e+00, 7.256670e+02}, 178 {1.050000e+00, 7.190826e+02}, 179 {1.055000e+00, 7.090328e+02}, 180 {1.060000e+00, 6.904348e+02}, 181 {1.065000e+00, 6.854677e+02}, 182 {1.070000e+00, 6.587836e+02}, 183 {1.075000e+00, 6.438822e+02}, 184 {1.080000e+00, 6.396081e+02}, 185 {1.085000e+00, 6.422650e+02}, 186 {1.090000e+00, 5.934020e+02}, 187 {1.095000e+00, 5.304462e+02}, 188 {1.100000e+00, 4.647180e+02}, 189 {1.105000e+00, 4.916330e+02}, 190 {1.110000e+00, 4.297168e+02}, 191 {1.115000e+00, 1.782401e+02}, 192 {1.120000e+00, 6.423805e+01}, 193 {1.125000e+00, 6.967882e+01}, 194 {1.130000e+00, 2.260634e+01}, 195 {1.135000e+00, 4.263669e+00}, 196 {1.140000e+00, 1.699230e+02}, 197 {1.145000e+00, 6.558958e+01}, 198 {1.150000e+00, 6.521993e+01}, 199 {1.155000e+00, 2.327633e+02}, 200 {1.160000e+00, 2.165912e+02}, 201 {1.165000e+00, 3.331461e+02}, 202 {1.170000e+00, 4.473907e+02}, 203 {1.175000e+00, 4.572095e+02}, 204 {1.180000e+00, 4.366478e+02}, 205 {1.185000e+00, 3.854745e+02}, 206 {1.190000e+00, 4.808901e+02}, 207 {1.195000e+00, 4.510872e+02}, 208 {1.200000e+00, 4.587112e+02}, 209 {1.205000e+00, 4.491234e+02}, 210 {1.210000e+00, 4.704937e+02}, 211 {1.215000e+00, 4.268290e+02}, 212 {1.220000e+00, 4.885141e+02}, 213 {1.225000e+00, 4.982174e+02}, 214 {1.230000e+00, 4.974088e+02}, 215 {1.235000e+00, 5.173929e+02}, 216 {1.240000e+00, 5.160068e+02}, 217 {1.245000e+00, 5.130034e+02}, 218 {1.250000e+00, 5.102310e+02}, 219 {1.255000e+00, 5.015674e+02}, 220 {1.260000e+00, 4.792729e+02}, 221 {1.265000e+00, 4.427701e+02}, 222 {1.270000e+00, 4.321427e+02}, 223 {1.275000e+00, 4.596353e+02}, 224 {1.280000e+00, 4.599818e+02}, 225 {1.285000e+00, 4.644869e+02}, 226 {1.290000e+00, 4.539751e+02}, 227 {1.295000e+00, 4.331823e+02}, 228 {1.300000e+00, 3.504734e+02}, 229 {1.305000e+00, 4.007225e+02}, 230 {1.310000e+00, 2.752729e+02}, 231 {1.315000e+00, 2.498596e+02}, 232 {1.320000e+00, 2.327633e+02}, 233 {1.325000e+00, 3.078482e+02}, 234 {1.330000e+00, 1.720023e+02}, 235 {1.335000e+00, 1.822831e+02}, 236 {1.340000e+00, 1.253341e+02}, 237 {1.345000e+00, 5.043397e+01}, 238 {1.350000e+00, 1.852865e+00}, 239 {1.355000e+00, 1.421993e-06}, 240 {1.360000e+00, 4.201291e-07}, 241 {1.365000e+00, 2.019207e-16}, 242 {1.370000e+00, 8.799954e-09}, 243 {1.375000e+00, 7.149241e-04}, 244 {1.380000e+00, 2.424666e-04}, 245 {1.385000e+00, 1.434700e-06}, 246 {1.390000e+00, 1.954519e-03}, 247 {1.395000e+00, 2.606025e-07}, 248 {1.400000e+00, 3.272548e-12}, 249 {1.405000e+00, 6.190464e-08}, 250 {1.410000e+00, 5.661404e-03}, 251 {1.415000e+00, 1.804349e-03}, 252 {1.420000e+00, 7.145775e-01}, 253 {1.425000e+00, 4.718799e+00}, 254 {1.430000e+00, 2.378460e+01}, 255 {1.435000e+00, 3.674541e+00}, 256 {1.440000e+00, 1.269513e+01}, 257 {1.445000e+00, 1.381563e+01}, 258 {1.450000e+00, 7.487701e+00}, 259 {1.455000e+00, 3.016104e+01}, 260 {1.460000e+00, 4.723420e+01}, 261 {1.465000e+00, 5.845073e+01}, 262 {1.470000e+00, 1.375787e+01}, 263 {1.475000e+00, 1.321495e+02}, 264 {1.480000e+00, 2.521699e+01}, 265 {1.485000e+00, 8.132276e+01}, 266 {1.490000e+00, 1.404666e+02}, 267 {1.495000e+00, 1.506319e+02}, 268 {1.500000e+00, 2.457010e+02}, 269 {1.505000e+00, 1.679592e+02}, 270 {1.510000e+00, 2.838210e+02}, 271 {1.515000e+00, 2.803556e+02}, 272 {1.520000e+00, 2.709988e+02}, 273 {1.525000e+00, 2.742333e+02}, 274 {1.530000e+00, 2.812797e+02}, 275 {1.535000e+00, 2.921381e+02}, 276 {1.540000e+00, 3.012639e+02}, 277 {1.545000e+00, 3.099275e+02}, 278 {1.550000e+00, 3.042673e+02}, 279 {1.555000e+00, 3.003397e+02}, 280 {1.560000e+00, 3.006863e+02}, 281 {1.565000e+00, 2.990691e+02}, 282 {1.570000e+00, 2.735402e+02}, 283 {1.575000e+00, 2.793159e+02}, 284 {1.580000e+00, 2.746953e+02}, 285 {1.585000e+00, 2.874020e+02}, 286 {1.590000e+00, 2.694972e+02}, 287 {1.595000e+00, 2.856693e+02}, 288 {1.600000e+00, 2.646455e+02}, 289 {1.605000e+00, 2.668403e+02}, 290 {1.610000e+00, 2.498596e+02}, 291 {1.615000e+00, 2.667248e+02}, 292 {1.620000e+00, 2.664938e+02}, 293 {1.625000e+00, 2.700747e+02}, 294 {1.630000e+00, 2.686885e+02}, 295 {1.635000e+00, 2.596784e+02}, 296 {1.640000e+00, 2.400408e+02}, 297 {1.645000e+00, 2.470872e+02}, 298 {1.650000e+00, 2.502061e+02}, 299 {1.655000e+00, 2.505526e+02}, 300 {1.660000e+00, 2.503216e+02}, 301 {1.665000e+00, 2.378460e+02}, 302 {1.670000e+00, 2.482423e+02}, 303 {1.675000e+00, 2.396942e+02}, 304 {1.680000e+00, 2.306840e+02}, 305 {1.685000e+00, 2.391166e+02}, 306 {1.690000e+00, 2.287203e+02}, 307 {1.695000e+00, 2.350736e+02}, 308 {1.700000e+00, 2.195945e+02}, 309 {1.705000e+00, 2.177463e+02}, 310 {1.710000e+00, 2.065413e+02}, 311 {1.715000e+00, 2.040000e+02}, 312 {1.720000e+00, 2.040000e+02}, 313 {1.725000e+00, 1.882899e+02}, 314 {1.730000e+00, 1.879434e+02}, 315 {1.735000e+00, 1.700385e+02}, 316 {1.740000e+00, 1.747746e+02}, 317 {1.745000e+00, 1.594111e+02}, 318 {1.750000e+00, 1.725798e+02}, 319 {1.755000e+00, 1.523647e+02}, 320 {1.760000e+00, 1.639162e+02}, 321 {1.765000e+00, 1.238324e+02}, 322 {1.770000e+00, 1.276444e+02}, 323 {1.775000e+00, 9.467632e+01}, 324 {1.780000e+00, 7.652887e+01}, 325 {1.785000e+00, 4.875900e+01}, 326 {1.790000e+00, 6.226274e+01}, 327 {1.795000e+00, 1.964915e+01}, 328 {1.800000e+00, 1.596421e+01}, 329 {1.805000e+00, 2.681110e+00}, 330 {1.810000e+00, 1.351529e+00}, 331 {1.815000e+00, 1.782401e-01}, 332 {1.820000e+00, 2.100068e-02}, 333 {1.825000e+00, 2.950260e-02}, 334 {1.830000e+00, 5.069966e-06}, 335 {1.835000e+00, 3.109671e-06}, 336 {1.840000e+00, 1.126390e-08}, 337 {1.845000e+00, 7.945141e-07}, 338 {1.850000e+00, 2.736557e-07}, 339 {1.855000e+00, 5.976761e-08}, 340 {1.860000e+00, 3.084258e-05}, 341 {1.865000e+00, 2.344960e-05}, 342 {1.870000e+00, 4.700317e-13}, 343 {1.875000e+00, 1.053730e-12}, 344 {1.880000e+00, 3.766953e-04}, 345 {1.885000e+00, 1.557146e-04}, 346 {1.890000e+00, 8.908538e-04}, 347 {1.895000e+00, 8.015605e-04}, 348 {1.900000e+00, 3.690713e-07}, 349 {1.905000e+00, 3.564802e-07}, 350 {1.910000e+00, 3.483941e-05}, 351 {1.915000e+00, 8.942038e-05}, 352 {1.920000e+00, 3.726523e-03}, 353 {1.925000e+00, 2.120861e-02}, 354 {1.930000e+00, 1.522491e-02}, 355 {1.935000e+00, 3.087723e-01}, 356 {1.940000e+00, 3.988743e-01}, 357 {1.945000e+00, 2.781608e+00}, 358 {1.950000e+00, 6.680249e+00}, 359 {1.955000e+00, 2.853227e+00}, 360 {1.960000e+00, 1.102131e+01}, 361 {1.965000e+00, 1.737350e+01}, 362 {1.970000e+00, 3.748471e+01}, 363 {1.975000e+00, 5.294065e+01}, 364 {1.980000e+00, 6.599388e+01}, 365 {1.985000e+00, 7.625164e+01}, 366 {1.990000e+00, 7.612457e+01}, 367 {1.995000e+00, 7.584733e+01}, 368 {2.000000e+00, 3.413477e+01}, 369 {2.005000e+00, 1.133320e+01}, 370 {2.010000e+00, 3.980657e+01}, 371 {2.015000e+00, 2.313771e+01}, 372 {2.020000e+00, 4.245187e+01}, 373 {2.025000e+00, 7.589354e+01}, 374 {2.030000e+00, 8.488063e+01}, 375 {2.035000e+00, 1.036519e+02}, 376 {2.040000e+00, 9.467632e+01}, 377 {2.045000e+00, 9.695198e+01}, 378 {2.050000e+00, 7.200067e+01}, 379 {2.055000e+00, 5.648697e+01}, 380 {2.060000e+00, 7.166568e+01}, 381 {2.065000e+00, 6.471166e+01}, 382 {2.070000e+00, 6.833884e+01}, 383 {2.075000e+00, 8.371392e+01}, 384 {2.080000e+00, 9.408720e+01}, 385 {2.085000e+00, 9.265481e+01}, 386 {2.090000e+00, 9.914677e+01}, 387 {2.095000e+00, 9.885798e+01}, 388 {2.100000e+00, 9.155741e+01}, 389 {2.105000e+00, 1.043450e+02}, 390 {2.110000e+00, 9.829195e+01}, 391 {2.115000e+00, 1.024158e+02}, 392 {2.120000e+00, 9.531166e+01}, 393 {2.125000e+00, 9.782989e+01}, 394 {2.130000e+00, 9.974745e+01}, 395 {2.135000e+00, 1.005561e+02}, 396 {2.140000e+00, 1.021848e+02}, 397 {2.145000e+00, 1.008102e+02}, 398 {2.150000e+00, 9.193861e+01}, 399 {2.155000e+00, 9.273567e+01}, 400 {2.160000e+00, 9.260860e+01}, 401 {2.165000e+00, 8.261653e+01}, 402 {2.170000e+00, 9.129173e+01}, 403 {2.175000e+00, 8.697146e+01}, 404 {2.180000e+00, 9.136104e+01}, 405 {2.185000e+00, 7.770713e+01}, 406 {2.190000e+00, 8.627836e+01}, 407 {2.195000e+00, 8.574699e+01}, 408 {2.200000e+00, 7.709490e+01}, 409 {2.205000e+00, 8.019071e+01}, 410 {2.210000e+00, 8.848471e+01}, 411 {2.215000e+00, 8.380634e+01}, 412 {2.220000e+00, 8.744507e+01}, 413 {2.225000e+00, 8.378323e+01}, 414 {2.230000e+00, 8.583941e+01}, 415 {2.235000e+00, 8.345979e+01}, 416 {2.240000e+00, 8.287066e+01}, 417 {2.245000e+00, 7.990192e+01}, 418 {2.250000e+00, 8.172706e+01}, 419 {2.255000e+00, 7.652887e+01}, 420 {2.260000e+00, 7.598595e+01}, 421 {2.265000e+00, 7.731438e+01}, 422 {2.270000e+00, 7.353703e+01}, 423 {2.275000e+00, 7.257825e+01}, 424 {2.280000e+00, 7.551234e+01}, 425 {2.285000e+00, 7.141155e+01}, 426 {2.290000e+00, 7.159637e+01}, 427 {2.295000e+00, 6.921676e+01}, 428 {2.300000e+00, 6.564733e+01}, 429 {2.305000e+00, 6.586681e+01}, 430 {2.310000e+00, 6.974813e+01}, 431 {2.315000e+00, 6.378754e+01}, 432 {2.320000e+00, 5.589784e+01}, 433 {2.325000e+00, 5.843918e+01}, 434 {2.330000e+00, 6.036829e+01}, 435 {2.335000e+00, 6.296738e+01}, 436 {2.340000e+00, 4.414994e+01}, 437 {2.345000e+00, 5.389943e+01}, 438 {2.350000e+00, 4.024552e+01}, 439 {2.355000e+00, 4.850487e+01}, 440 {2.360000e+00, 5.193567e+01}, 441 {2.365000e+00, 4.863193e+01}, 442 {2.370000e+00, 2.624507e+01}, 443 {2.375000e+00, 4.312185e+01}, 444 {2.380000e+00, 3.800453e+01}, 445 {2.385000e+00, 2.428131e+01}, 446 {2.390000e+00, 3.251755e+01}, 447 {2.395000e+00, 3.768108e+01}, 448 {2.400000e+00, 4.099637e+01}, 449 {2.405000e+00, 2.709988e+01}, 450 {2.410000e+00, 2.648765e+01}, 451 {2.415000e+00, 1.916399e+01}, 452 {2.420000e+00, 1.944122e+01}, 453 {2.425000e+00, 2.625662e+01}, 454 {2.430000e+00, 3.942537e+01}, 455 {2.435000e+00, 8.307859e+00}, 456 {2.440000e+00, 3.668765e+01}, 457 {2.445000e+00, 1.312254e+01}, 458 {2.450000e+00, 6.917055e+00}, 459 {2.455000e+00, 1.529422e+01}, 460 {2.460000e+00, 2.475492e+01}, 461 {2.465000e+00, 1.468199e+01}, 462 {2.470000e+00, 7.535062e+00}, 463 {2.475000e+00, 7.232412e+00}, 464 {2.480000e+00, 2.036534e+00}, 465 {2.485000e+00, 1.159773e+00}, 466 {2.490000e+00, 4.409218e-01}, 467 {2.495000e+00, 3.889400e-01}, 468 {2.500000e+00, 1.192118e+00}, 469 {2.505000e+00, 1.178256e-01}, 470 {2.510000e+00, 2.302220e-01}, 471 {2.515000e+00, 2.307995e-02}, 472 {2.520000e+00, 5.186636e-03}, 473 {2.525000e+00, 8.529648e-05}, 474 {2.530000e+00, 5.429218e-08}, 475 {2.535000e+00, 2.571370e-09}, 476 {2.540000e+00, 1.254496e-08}, 477 {2.545000e+00, 7.580113e-14}, 478 {2.550000e+00, 1.089194e-20}, 479 {2.555000e+00, 1.036288e-12}, 480 {2.560000e+00, 6.137327e-14}, 481 {2.565000e+00, 1.341132e-19}, 482 {2.570000e+00, 4.495855e-27}, 483 {2.575000e+00, 2.718519e-43}, 484 {2.580000e+00, 8.278980e-35}, 485 {2.585000e+00, 0.000000e+00}, 486 {2.590000e+00, 0.000000e+00}, 487 {2.595000e+00, 0.000000e+00}, 488 {2.600000e+00, 1.401298e-45}, 489 {2.605000e+00, 0.000000e+00}, 490 {2.610000e+00, 0.000000e+00}, 491 {2.615000e+00, 0.000000e+00}, 492 {2.620000e+00, 6.389921e-43}, 493 {2.625000e+00, 0.000000e+00}, 494 {2.630000e+00, 0.000000e+00}, 495 {2.635000e+00, 8.243170e-23}, 496 {2.640000e+00, 1.977622e-25}, 497 {2.645000e+00, 3.870917e-28}, 498 {2.650000e+00, 5.282514e-31}, 499 {2.655000e+00, 2.101948e-44}, 500 {2.660000e+00, 7.691007e-38}, 501 {2.665000e+00, 0.000000e+00}, 502 {2.670000e+00, 0.000000e+00}, 503 {2.675000e+00, 0.000000e+00}, 504 {2.680000e+00, 0.000000e+00}, 505 {2.685000e+00, 0.000000e+00}, 506 {2.690000e+00, 4.203895e-45}, 507 {2.695000e+00, 0.000000e+00}, 508 {2.700000e+00, 0.000000e+00}, 509 {2.705000e+00, 0.000000e+00}, 510 {2.710000e+00, 0.000000e+00}, 511 {2.715000e+00, 9.111803e-41}, 512 {2.720000e+00, 0.000000e+00}, 513 {2.725000e+00, 1.520181e-30}, 514 {2.730000e+00, 1.561767e-30}, 515 {2.735000e+00, 7.793816e-32}, 516 {2.740000e+00, 3.076172e-38}, 517 {2.745000e+00, 1.721178e-37}, 518 {2.750000e+00, 5.867237e-42}, 519 {2.755000e+00, 0.000000e+00}, 520 {2.760000e+00, 0.000000e+00}, 521 {2.765000e+00, 2.810487e-38}, 522 {2.770000e+00, 6.439977e-34}, 523 {2.775000e+00, 0.000000e+00}, 524 {2.780000e+00, 3.463169e-41}, 525 {2.785000e+00, 1.364235e-36}, 526 {2.790000e+00, 8.396806e-22}, 527 {2.795000e+00, 9.365979e-23}, 528 {2.800000e+00, 1.356149e-14}, 529 {2.805000e+00, 2.779298e-16}, 530 {2.810000e+00, 4.397667e-12}, 531 {2.815000e+00, 3.218256e-12}, 532 {2.820000e+00, 7.425322e-14}, 533 {2.825000e+00, 1.903692e-08}, 534 {2.830000e+00, 3.691868e-06}, 535 {2.835000e+00, 4.135447e-13}, 536 {2.840000e+00, 6.424960e-08}, 537 {2.845000e+00, 2.679955e-04}, 538 {2.850000e+00, 4.470441e-07}, 539 {2.855000e+00, 3.652593e-07}, 540 {2.860000e+00, 2.067724e-04}, 541 {2.865000e+00, 3.345323e-03}, 542 {2.870000e+00, 1.248720e-05}, 543 {2.875000e+00, 1.402356e-02}, 544 {2.880000e+00, 8.862332e-03}, 545 {2.885000e+00, 1.924485e-02}, 546 {2.890000e+00, 7.473839e-03}, 547 {2.895000e+00, 4.261359e-01}, 548 {2.900000e+00, 9.198482e-02}, 549 {2.905000e+00, 2.128947e-03}, 550 {2.910000e+00, 6.100362e-01}, 551 {2.915000e+00, 1.715402e-01}, 552 {2.920000e+00, 6.144258e-01}, 553 {2.925000e+00, 2.073499e-01}, 554 {2.930000e+00, 1.656489e+00}, 555 {2.935000e+00, 2.313771e+00}, 556 {2.940000e+00, 2.400408e-01}, 557 {2.945000e+00, 1.966070e-01}, 558 {2.950000e+00, 1.638007e+00}, 559 {2.955000e+00, 7.849263e-01}, 560 {2.960000e+00, 1.492457e+00}, 561 {2.965000e+00, 3.734609e+00}, 562 {2.970000e+00, 4.676059e-02}, 563 {2.975000e+00, 1.094623e-01}, 564 {2.980000e+00, 2.450079e-01}, 565 {2.985000e+00, 3.056534e+00}, 566 {2.990000e+00, 6.057621e+00}, 567 {2.995000e+00, 1.480906e+00}, 568 {3.000000e+00, 3.981812e+00}, 569 {3.005000e+00, 9.241222e-01}, 570 {3.010000e+00, 3.634111e+00}, 571 {3.015000e+00, 2.126636e+00}, 572 {3.020000e+00, 4.987950e-02}, 573 {3.025000e+00, 3.859366e+00}, 574 {3.030000e+00, 2.861314e+00}, 575 {3.035000e+00, 7.404530e-01}, 576 {3.040000e+00, 5.771143e-01}, 577 {3.045000e+00, 1.351529e+00}, 578 {3.050000e+00, 1.505164e-01}, 579 {3.055000e+00, 2.044620e-02}, 580 {3.060000e+00, 3.115447e+00}, 581 {3.065000e+00, 8.756058e-01}, 582 {3.070000e+00, 3.492027e-01}, 583 {3.075000e+00, 2.830124e+00}, 584 {3.080000e+00, 1.386183e+00}, 585 {3.085000e+00, 3.766953e-01}, 586 {3.090000e+00, 5.635991e-01}, 587 {3.095000e+00, 7.939365e-02}, 588 {3.100000e+00, 1.830917e+00}, 589 {3.105000e+00, 2.093137e-01}, 590 {3.110000e+00, 8.597802e-02}, 591 {3.115000e+00, 5.444235e-01}, 592 {3.120000e+00, 5.816194e+00}, 593 {3.125000e+00, 1.196738e+00}, 594 {3.130000e+00, 3.370736e+00}, 595 {3.135000e+00, 7.649422e+00}, 596 {3.140000e+00, 1.336512e+00}, 597 {3.145000e+00, 1.344598e+00}, 598 {3.150000e+00, 3.883624e+00}, 599 {3.155000e+00, 3.158188e+00}, 600 {3.160000e+00, 6.340634e+00}, 601 {3.165000e+00, 1.286840e+01}, 602 {3.170000e+00, 9.983986e+00}, 603 {3.175000e+00, 7.336376e+00}, 604 {3.180000e+00, 8.348289e+00}, 605 {3.185000e+00, 5.731868e+00}, 606 {3.190000e+00, 2.194790e+00}, 607 {3.195000e+00, 8.751438e-01}, 608 {3.200000e+00, 4.146999e-02}, 609 {3.205000e+00, 2.004190e-02}, 610 {3.210000e+00, 9.394858e-03}, 611 {3.215000e+00, 4.889762e-02}, 612 {3.220000e+00, 4.417304e-01}, 613 {3.225000e+00, 2.447769e-02}, 614 {3.230000e+00, 5.661404e-02}, 615 {3.235000e+00, 4.230170e+00}, 616 {3.240000e+00, 1.881744e+00}, 617 {3.245000e+00, 1.957984e-01}, 618 {3.250000e+00, 1.468199e+00}, 619 {3.255000e+00, 6.918210e+00}, 620 {3.260000e+00, 5.117327e-01}, 621 {3.265000e+00, 7.144620e-01}, 622 {3.270000e+00, 3.461993e-01}, 623 {3.275000e+00, 3.131619e+00}, 624 {3.280000e+00, 1.364235e+00}, 625 {3.285000e+00, 8.155379e+00}, 626 {3.290000e+00, 6.398391e+00}, 627 {3.295000e+00, 3.224031e-01}, 628 {3.300000e+00, 6.914745e-01}, 629 {3.305000e+00, 1.679592e+00}, 630 {3.310000e+00, 2.510147e+00}, 631 {3.315000e+00, 1.062972e-02}, 632 {3.320000e+00, 8.433771e-03}, 633 {3.325000e+00, 2.253703e+00}, 634 {3.330000e+00, 3.401925e+00}, 635 {3.335000e+00, 7.758006e+00}, 636 {3.340000e+00, 1.736195e+00}, 637 {3.345000e+00, 2.252548e+00}, 638 {3.350000e+00, 6.016036e+00}, 639 {3.355000e+00, 2.031914e+00}, 640 {3.360000e+00, 3.474700e+00}, 641 {3.365000e+00, 5.899365e+00}, 642 {3.370000e+00, 2.852072e+00}, 643 {3.375000e+00, 6.880090e+00}, 644 {3.380000e+00, 4.453114e+00}, 645 {3.385000e+00, 6.382219e+00}, 646 {3.390000e+00, 1.068632e+01}, 647 {3.395000e+00, 9.365979e+00}, 648 {3.400000e+00, 1.320340e+01}, 649 {3.405000e+00, 3.969105e+00}, 650 {3.410000e+00, 5.988312e+00}, 651 {3.415000e+00, 7.733748e+00}, 652 {3.420000e+00, 1.455493e+01}, 653 {3.425000e+00, 1.114838e+01}, 654 {3.430000e+00, 1.007986e+01}, 655 {3.435000e+00, 1.171325e+01}, 656 {3.440000e+00, 8.677508e+00}, 657 {3.445000e+00, 1.164394e+01}, 658 {3.450000e+00, 1.297237e+01}, 659 {3.455000e+00, 8.471891e+00}, 660 {3.460000e+00, 1.351529e+01}, 661 {3.465000e+00, 1.125581e+01}, 662 {3.470000e+00, 1.354994e+01}, 663 {3.475000e+00, 1.190963e+01}, 664 {3.480000e+00, 1.279909e+01}, 665 {3.485000e+00, 1.338822e+01}, 666 {3.490000e+00, 1.101785e+01}, 667 {3.495000e+00, 1.378097e+01}, 668 {3.500000e+00, 1.314564e+01}, 669 {3.505000e+00, 1.318029e+01}, 670 {3.510000e+00, 1.311098e+01}, 671 {3.515000e+00, 1.164394e+01}, 672 {3.520000e+00, 1.328426e+01}, 673 {3.525000e+00, 1.208290e+01}, 674 {3.530000e+00, 1.186342e+01}, 675 {3.535000e+00, 9.635130e+00}, 676 {3.540000e+00, 9.058708e+00}, 677 {3.545000e+00, 9.734473e+00}, 678 {3.550000e+00, 1.095316e+01}, 679 {3.555000e+00, 8.415288e+00}, 680 {3.560000e+00, 1.149146e+01}, 681 {3.565000e+00, 1.214066e+01}, 682 {3.570000e+00, 7.699093e+00}, 683 {3.575000e+00, 8.362151e+00}, 684 {3.580000e+00, 1.120383e+01}, 685 {3.585000e+00, 9.255084e+00}, 686 {3.590000e+00, 9.442219e+00}, 687 {3.595000e+00, 9.932004e+00}, 688 {3.600000e+00, 1.093930e+01}, 689 {3.605000e+00, 1.156308e+01}, 690 {3.610000e+00, 9.555424e+00}, 691 {3.615000e+00, 9.627044e+00}, 692 {3.620000e+00, 1.319185e+01}, 693 {3.625000e+00, 1.099243e+01}, 694 {3.630000e+00, 1.045760e+01}, 695 {3.635000e+00, 1.072906e+01}, 696 {3.640000e+00, 1.296081e+01}, 697 {3.645000e+00, 1.189807e+01}, 698 {3.650000e+00, 1.092312e+01}, 699 {3.655000e+00, 1.193273e+01}, 700 {3.660000e+00, 1.182876e+01}, 701 {3.665000e+00, 1.105135e+01}, 702 {3.670000e+00, 7.242808e+00}, 703 {3.675000e+00, 2.920226e+00}, 704 {3.680000e+00, 7.257825e+00}, 705 {3.685000e+00, 9.436443e+00}, 706 {3.690000e+00, 1.000940e+01}, 707 {3.695000e+00, 1.061470e+01}, 708 {3.700000e+00, 1.223307e+01}, 709 {3.705000e+00, 1.205980e+01}, 710 {3.710000e+00, 9.839592e+00}, 711 {3.715000e+00, 9.526545e+00}, 712 {3.720000e+00, 1.134938e+01}, 713 {3.725000e+00, 1.208290e+01}, 714 {3.730000e+00, 9.712525e+00}, 715 {3.735000e+00, 8.408357e+00}, 716 {3.740000e+00, 9.006726e+00}, 717 {3.745000e+00, 1.160929e+01}, 718 {3.750000e+00, 9.896194e+00}, 719 {3.755000e+00, 9.294360e+00}, 720 {3.760000e+00, 8.864643e+00}, 721 {3.765000e+00, 8.670577e+00}, 722 {3.770000e+00, 9.617802e+00}, 723 {3.775000e+00, 9.493046e+00}, 724 {3.780000e+00, 1.045991e+01}, 725 {3.785000e+00, 8.957055e+00}, 726 {3.790000e+00, 7.537372e+00}, 727 {3.795000e+00, 9.389082e+00}, 728 {3.800000e+00, 1.133089e+01}, 729 {3.805000e+00, 1.009604e+01}, 730 {3.810000e+00, 8.170396e+00}, 731 {3.815000e+00, 7.491166e+00}, 732 {3.820000e+00, 1.101207e+01}, 733 {3.825000e+00, 1.056734e+01}, 734 {3.830000e+00, 1.079721e+01}, 735 {3.835000e+00, 7.306342e+00}, 736 {3.840000e+00, 9.927383e+00}, 737 {3.845000e+00, 9.710215e+00}, 738 {3.850000e+00, 9.877712e+00}, 739 {3.855000e+00, 9.170758e+00}, 740 {3.860000e+00, 8.479977e+00}, 741 {3.865000e+00, 9.136104e+00}, 742 {3.870000e+00, 8.273204e+00}, 743 {3.875000e+00, 7.294790e+00}, 744 {3.880000e+00, 7.233567e+00}, 745 {3.885000e+00, 7.671370e+00}, 746 {3.890000e+00, 7.663284e+00}, 747 {3.895000e+00, 8.552751e+00}, 748 {3.900000e+00, 8.527338e+00}, 749 {3.905000e+00, 9.039071e+00}, 750 {3.910000e+00, 8.155379e+00}, 751 {3.915000e+00, 7.950917e+00}, 752 {3.920000e+00, 7.851574e+00}, 753 {3.925000e+00, 7.636715e+00}, 754 {3.930000e+00, 8.031777e+00}, 755 {3.935000e+00, 8.475356e+00}, 756 {3.940000e+00, 8.463805e+00}, 757 {3.945000e+00, 8.571234e+00}, 758 {3.950000e+00, 8.652095e+00}, 759 {3.955000e+00, 8.907383e+00}, 760 {3.960000e+00, 8.891211e+00}, 761 {3.965000e+00, 8.962831e+00}, 762 {3.970000e+00, 8.746817e+00}, 763 {3.975000e+00, 8.585096e+00}, 764 {3.980000e+00, 8.561993e+00}, 765 {3.985000e+00, 8.552751e+00}, 766 {3.990000e+00, 8.494994e+00}, 767 {3.995000e+00, 8.284756e+00}, 768 {4.000000e+00, 8.193499e+00} 769 }; 770 771 static const double ref_mirror[][2] = { /* Wavelength data */ 772 {2.500000e+03, 9.002169e+01}, 773 {2.490000e+03, 8.875519e+01}, 774 {2.480000e+03, 8.935681e+01}, 775 {2.470000e+03, 8.933026e+01}, 776 {2.460000e+03, 8.959640e+01}, 777 {2.450000e+03, 8.948807e+01}, 778 {2.440000e+03, 8.930347e+01}, 779 {2.430000e+03, 8.987267e+01}, 780 {2.420000e+03, 8.969878e+01}, 781 {2.410000e+03, 8.985492e+01}, 782 {2.400000e+03, 8.983934e+01}, 783 {2.390000e+03, 9.015015e+01}, 784 {2.380000e+03, 9.033044e+01}, 785 {2.370000e+03, 9.021459e+01}, 786 {2.360000e+03, 9.036620e+01}, 787 {2.350000e+03, 9.070931e+01}, 788 {2.340000e+03, 9.090450e+01}, 789 {2.330000e+03, 9.102770e+01}, 790 {2.320000e+03, 9.156487e+01}, 791 {2.310000e+03, 9.187077e+01}, 792 {2.300000e+03, 9.185011e+01}, 793 {2.290000e+03, 9.168735e+01}, 794 {2.280000e+03, 9.153958e+01}, 795 {2.270000e+03, 9.148136e+01}, 796 {2.260000e+03, 9.142628e+01}, 797 {2.250000e+03, 9.115726e+01}, 798 {2.240000e+03, 9.120969e+01}, 799 {2.230000e+03, 9.117910e+01}, 800 {2.220000e+03, 9.116260e+01}, 801 {2.210000e+03, 9.127687e+01}, 802 {2.200000e+03, 9.131850e+01}, 803 {2.190000e+03, 9.132679e+01}, 804 {2.180000e+03, 9.134534e+01}, 805 {2.170000e+03, 9.114151e+01}, 806 {2.160000e+03, 9.068787e+01}, 807 {2.150000e+03, 9.051109e+01}, 808 {2.140000e+03, 9.048801e+01}, 809 {2.130000e+03, 9.050297e+01}, 810 {2.120000e+03, 9.101611e+01}, 811 {2.110000e+03, 9.129543e+01}, 812 {2.100000e+03, 9.170773e+01}, 813 {2.090000e+03, 9.191200e+01}, 814 {2.080000e+03, 9.210053e+01}, 815 {2.070000e+03, 9.224890e+01}, 816 {2.060000e+03, 9.238735e+01}, 817 {2.050000e+03, 9.265939e+01}, 818 {2.040000e+03, 9.294904e+01}, 819 {2.030000e+03, 9.320248e+01}, 820 {2.020000e+03, 9.360339e+01}, 821 {2.010000e+03, 9.394395e+01}, 822 {2.000000e+03, 9.445172e+01}, 823 {1.990000e+03, 9.481448e+01}, 824 {1.980000e+03, 9.514061e+01}, 825 {1.970000e+03, 9.537082e+01}, 826 {1.960000e+03, 9.562746e+01}, 827 {1.950000e+03, 9.585700e+01}, 828 {1.940000e+03, 9.592551e+01}, 829 {1.930000e+03, 9.583197e+01}, 830 {1.920000e+03, 9.581526e+01}, 831 {1.910000e+03, 9.551694e+01}, 832 {1.900000e+03, 9.513596e+01}, 833 {1.890000e+03, 9.482872e+01}, 834 {1.880000e+03, 9.450699e+01}, 835 {1.870000e+03, 9.433634e+01}, 836 {1.860000e+03, 9.431637e+01}, 837 {1.850000e+03, 9.432624e+01}, 838 {1.840000e+03, 9.447005e+01}, 839 {1.830000e+03, 9.459088e+01}, 840 {1.820000e+03, 9.478791e+01}, 841 {1.810000e+03, 9.496258e+01}, 842 {1.800000e+03, 9.518331e+01}, 843 {1.790000e+03, 9.525677e+01}, 844 {1.780000e+03, 9.536103e+01}, 845 {1.770000e+03, 9.542614e+01}, 846 {1.760000e+03, 9.543584e+01}, 847 {1.750000e+03, 9.539315e+01}, 848 {1.740000e+03, 9.536543e+01}, 849 {1.730000e+03, 9.531860e+01}, 850 {1.720000e+03, 9.536415e+01}, 851 {1.710000e+03, 9.538762e+01}, 852 {1.700000e+03, 9.532991e+01}, 853 {1.690000e+03, 9.526815e+01}, 854 {1.680000e+03, 9.526891e+01}, 855 {1.670000e+03, 9.535363e+01}, 856 {1.660000e+03, 9.535061e+01}, 857 {1.650000e+03, 9.539629e+01}, 858 {1.640000e+03, 9.543298e+01}, 859 {1.630000e+03, 9.547403e+01}, 860 {1.620000e+03, 9.553451e+01}, 861 {1.610000e+03, 9.546091e+01}, 862 {1.600000e+03, 9.544562e+01}, 863 {1.590000e+03, 9.541650e+01}, 864 {1.580000e+03, 9.536031e+01}, 865 {1.570000e+03, 9.532507e+01}, 866 {1.560000e+03, 9.522473e+01}, 867 {1.550000e+03, 9.511299e+01}, 868 {1.540000e+03, 9.504054e+01}, 869 {1.530000e+03, 9.497032e+01}, 870 {1.520000e+03, 9.484760e+01}, 871 {1.510000e+03, 9.478913e+01}, 872 {1.500000e+03, 9.472796e+01}, 873 {1.490000e+03, 9.467186e+01}, 874 {1.480000e+03, 9.458646e+01}, 875 {1.470000e+03, 9.444527e+01}, 876 {1.460000e+03, 9.425820e+01}, 877 {1.450000e+03, 9.401962e+01}, 878 {1.440000e+03, 9.379675e+01}, 879 {1.430000e+03, 9.353042e+01}, 880 {1.420000e+03, 9.318069e+01}, 881 {1.410000e+03, 9.295930e+01}, 882 {1.400000e+03, 9.276019e+01}, 883 {1.390000e+03, 9.260818e+01}, 884 {1.380000e+03, 9.244196e+01}, 885 {1.370000e+03, 9.226486e+01}, 886 {1.360000e+03, 9.220292e+01}, 887 {1.350000e+03, 9.219144e+01}, 888 {1.340000e+03, 9.213460e+01}, 889 {1.330000e+03, 9.210777e+01}, 890 {1.320000e+03, 9.208756e+01}, 891 {1.310000e+03, 9.196632e+01}, 892 {1.300000e+03, 9.183512e+01}, 893 {1.290000e+03, 9.170703e+01}, 894 {1.280000e+03, 9.168185e+01}, 895 {1.270000e+03, 9.168346e+01}, 896 {1.260000e+03, 9.158861e+01}, 897 {1.250000e+03, 9.150678e+01}, 898 {1.240000e+03, 9.147020e+01}, 899 {1.230000e+03, 9.145164e+01}, 900 {1.220000e+03, 9.144785e+01}, 901 {1.210000e+03, 9.139342e+01}, 902 {1.200000e+03, 9.134400e+01}, 903 {1.190000e+03, 9.130375e+01}, 904 {1.180000e+03, 9.123543e+01}, 905 {1.170000e+03, 9.119971e+01}, 906 {1.160000e+03, 9.117647e+01}, 907 {1.150000e+03, 9.119447e+01}, 908 {1.140000e+03, 9.112846e+01}, 909 {1.130000e+03, 9.102717e+01}, 910 {1.120000e+03, 9.098567e+01}, 911 {1.110000e+03, 9.101431e+01}, 912 {1.100000e+03, 9.103447e+01}, 913 {1.090000e+03, 9.103535e+01}, 914 {1.080000e+03, 9.104751e+01}, 915 {1.070000e+03, 9.104776e+01}, 916 {1.060000e+03, 9.105524e+01}, 917 {1.050000e+03, 9.105882e+01}, 918 {1.040000e+03, 9.100527e+01}, 919 {1.030000e+03, 9.098834e+01}, 920 {1.020000e+03, 9.099553e+01}, 921 {1.010000e+03, 9.097986e+01}, 922 {1.000000e+03, 9.099072e+01}, 923 {9.900000e+02, 9.101458e+01}, 924 {9.800000e+02, 9.102811e+01}, 925 {9.700000e+02, 9.107101e+01}, 926 {9.600000e+02, 9.113153e+01}, 927 {9.500000e+02, 9.115299e+01}, 928 {9.400000e+02, 9.120361e+01}, 929 {9.300000e+02, 9.129536e+01}, 930 {9.200000e+02, 9.134410e+01}, 931 {9.100000e+02, 9.139206e+01}, 932 {9.000000e+02, 9.149245e+01}, 933 {8.900000e+02, 9.162473e+01}, 934 {8.800000e+02, 9.170761e+01}, 935 {8.700000e+02, 9.175441e+01}, 936 {8.600000e+02, 9.183147e+01}, 937 {8.500000e+02, 9.193368e+01}, 938 {8.400000e+02, 9.194690e+01}, 939 {8.300000e+02, 9.171778e+01}, 940 {8.200000e+02, 9.176028e+01}, 941 {8.100000e+02, 9.201883e+01}, 942 {8.000000e+02, 9.219911e+01}, 943 {7.900000e+02, 9.231172e+01}, 944 {7.800000e+02, 9.241025e+01}, 945 {7.700000e+02, 9.257628e+01}, 946 {7.600000e+02, 9.270184e+01}, 947 {7.500000e+02, 9.294644e+01}, 948 {7.400000e+02, 9.311713e+01}, 949 {7.300000e+02, 9.325057e+01}, 950 {7.200000e+02, 9.335799e+01}, 951 {7.100000e+02, 9.342017e+01}, 952 {7.000000e+02, 9.359630e+01}, 953 {6.900000e+02, 9.374759e+01}, 954 {6.800000e+02, 9.377639e+01}, 955 {6.700000e+02, 9.382298e+01}, 956 {6.600000e+02, 9.401642e+01}, 957 {6.500000e+02, 9.414445e+01}, 958 {6.400000e+02, 9.416447e+01}, 959 {6.300000e+02, 9.422827e+01}, 960 {6.200000e+02, 9.429821e+01}, 961 {6.100000e+02, 9.440004e+01}, 962 {6.000000e+02, 9.444127e+01}, 963 {5.900000e+02, 9.435277e+01}, 964 {5.800000e+02, 9.419932e+01}, 965 {5.700000e+02, 9.412157e+01}, 966 {5.600000e+02, 9.399156e+01}, 967 {5.500000e+02, 9.370412e+01}, 968 {5.400000e+02, 9.335538e+01}, 969 {5.300000e+02, 9.332679e+01}, 970 {5.200000e+02, 9.322582e+01}, 971 {5.100000e+02, 9.292740e+01}, 972 {5.000000e+02, 9.256215e+01}, 973 {4.900000e+02, 9.206820e+01}, 974 {4.800000e+02, 9.164663e+01}, 975 {4.700000e+02, 9.113393e+01}, 976 {4.600000e+02, 9.048467e+01}, 977 {4.500000e+02, 8.966771e+01}, 978 {4.400000e+02, 8.882944e+01}, 979 {4.300000e+02, 8.800727e+01}, 980 {4.200000e+02, 8.709829e+01}, 981 {4.100000e+02, 8.630209e+01}, 982 {4.000000e+02, 8.492516e+01}, 983 {3.900000e+02, 8.232475e+01}, 984 {3.800000e+02, 7.954367e+01}, 985 {3.700000e+02, 7.680205e+01}, 986 {3.600000e+02, 7.167577e+01}, 987 {3.500000e+02, 6.186407e+01}, 988 {3.400000e+02, 4.548824e+01}, 989 {3.300000e+02, 2.374455e+01}, 990 {3.200000e+02, 9.198518e+00}, 991 {3.100000e+02, 5.704781e+00}, 992 {3.000000e+02, 5.738476e+00}, 993 {2.900000e+02, 5.864941e+00}, 994 {2.800000e+02, 6.030176e+00}, 995 {2.700000e+02, 6.278084e+00}, 996 {2.600000e+02, 6.773841e+00} 997 }; 998 999 struct nine_mod { 1000 double position[3]; 1001 double corner[2]; 1002 }; 1003 static const struct nine_mod nine_mods[] = { 1004 {{-3.454, -1.86, 0.048}, {0.897, 1.81}}, 1005 {{-1.468, -1.86, 0.018}, {0.897, 1.81}}, 1006 {{ 1.468, -1.86, 0.018}, {0.897, 1.81}}, 1007 {{ 3.454, -1.86, 0.048}, {0.897, 1.81}}, 1008 {{-3.454, 1.86, 0.048}, {0.897, 1.81}}, 1009 {{-1.468, 1.86, 0.018}, {0.897, 1.81}}, 1010 {{ 1.468, 1.86, 0.018}, {0.897, 1.81}}, 1011 {{ 3.454, 1.86, 0.048}, {0.897, 1.81}}, 1012 {{ 0.000, 2.39, 0.018}, {0.414, 1.23}} 1013 }; 1014 1015 struct heliostat { 1016 const char* name; 1017 double position[3]; 1018 double focal; 1019 }; 1020 static const struct heliostat heliostats[] = { 1021 {"B01", {-11.8340, 46.539, 17.84}, 100}, 1022 {"B02", {-0.1490, 48.302, 17.82}, 100}, 1023 {"B03", {11.6700, 47.095, 17.82}, 100}, 1024 {"A01", {-23.6440, 56.246, 20.58}, 100}, 1025 {"B04", {-12.2040, 59.919, 21.07}, 100}, 1026 {"B05", {-0.2320, 60.911, 21.08}, 100}, 1027 {"B06", {11.6830, 59.625, 21.08}, 100}, 1028 {"C01", {23.2590, 56.299, 20.06}, 100}, 1029 {"A02", {-34.9700, 64.211, 21.08}, 100}, 1030 {"A03", {-23.9610, 69.246, 22.08}, 100}, 1031 {"B07", {-12.3260, 72.401, 22.08}, 100}, 1032 {"B08", {-0.2880, 73.22, 22.08}, 100}, 1033 {"B09", {11.7100, 72.156, 22.08}, 100}, 1034 {"C02", {34.5770, 64.338, 20.57}, 100}, 1035 {"C03", {23.3390, 68.96, 21.58}, 100}, 1036 {"A04", {-56.4100, 64.734, 20.57}, 100}, 1037 {"A05", {-46.4600, 71.829, 20.68}, 100}, 1038 {"A06", {-35.6270, 77.407, 21.79}, 100}, 1039 {"A07", {-24.2400, 81.6, 23.58}, 100}, 1040 {"B10", {-12.3970, 84.186, 23.88}, 100}, 1041 {"B11", {-0.3100, 85.049, 23.28}, 100}, 1042 {"B12", {11.7380, 84.168, 23.08}, 100}, 1043 {"C04", {23.4850, 81.342, 22.68}, 100}, 1044 {"C05", {34.8230, 77.083, 22.57}, 100}, 1045 {"C06", {45.7280, 71.581, 21.57}, 100}, 1046 {"A08", {-76.1610, 63.161, 20.97}, 140}, 1047 {"A09", {-67.2300, 71.623, 20.98}, 140}, 1048 {"A10", {-57.5040, 79.046, 21.77}, 140}, 1049 {"A11", {-47.2340, 85.563, 22.17}, 140}, 1050 {"A12", {-36.0550, 90.471, 23.28}, 140}, 1051 {"A13", {-24.4030, 94.008, 24.87}, 140}, 1052 {"B13", {-12.4910, 96.285, 25.17}, 140}, 1053 {"B14", {-0.3820, 96.908, 24.88}, 140}, 1054 {"B15", {11.7240, 96.223, 24.47}, 140}, 1055 {"C07", {23.6220, 93.93, 23.88}, 140}, 1056 {"C08", {35.1820, 90.172, 24.07}, 140}, 1057 {"C09", {46.1050, 84.895, 24.09}, 140}, 1058 {"C10", {56.1270, 78.041, 23.69}, 140}, 1059 {"C11", {66.0610, 70.824, 23.19}, 140}, 1060 {"A14", {-86.4690, 69.749, 22.08}, 140}, 1061 {"A15", {-78.2180, 78.758, 22.59}, 140}, 1062 {"A16", {-68.7400, 86.574, 22.89}, 140}, 1063 {"A17", {-58.6550, 93.434, 23.79}, 140}, 1064 {"A18", {-47.7270, 98.92, 24.59}, 140}, 1065 {"A19", {-36.3690, 103.313, 26.08}, 140}, 1066 {"A20", {-24.6600, 106.615, 26.79}, 140}, 1067 {"B16", {-12.6160, 108.352, 27.29}, 140}, 1068 {"B17", {11.7500, 108.23, 26.38}, 140}, 1069 {"C12", {23.8020, 106.594, 26.08}, 140}, 1070 {"C13", {35.5140, 103.362, 26.08}, 140}, 1071 {"C14", {46.6490, 98.487, 26.08}, 140}, 1072 {"C15", {57.0640, 92.301, 25.17}, 140}, 1073 {"C16", {67.0710, 85.344, 25.18}, 140}, 1074 {"C17", {77.0880, 78.083, 24.58}, 140}, 1075 {"C18", {85.8240, 69.393, 23.29}, 140}, 1076 {"D01", {-98.3820, 79.186, 23.18}, 140}, 1077 {"D02", {-88.9220, 87.315, 24.08}, 140}, 1078 {"D03", {-79.5600, 95.245, 24.58}, 140}, 1079 {"D04", {-69.1900, 101.875, 26.27}, 140}, 1080 {"D05", {-58.1580, 107.337, 27.19}, 140}, 1081 {"D06", {-47.3180, 112.903, 28.36}, 140}, 1082 {"E01", {-36.1280, 117.572, 28.85}, 140}, 1083 {"E02", {-24.5960, 121.288, 28.77}, 140}, 1084 {"E03", {-12.6570, 123.567, 28.46}, 140}, 1085 {"E04", {-0.4750, 123.792, 28.26}, 140}, 1086 {"E05", {11.6570, 123.129, 27.77}, 140}, 1087 {"E06", {23.4160, 120.183, 28.37}, 140}, 1088 {"E07", {35.2270, 117.24, 28.55}, 140}, 1089 {"F01", {46.8990, 113.692, 28.75}, 140}, 1090 {"F02", {57.5370, 107.794, 28.45}, 140}, 1091 {"F03", {67.3980, 100.753, 27.67}, 140}, 1092 {"F04", {77.2170, 93.558, 27.65}, 140}, 1093 {"F05", {87.4920, 86.435, 26.99}, 140}, 1094 {"F06", {95.2200, 77.038, 26.08}, 140}, 1095 {"D07", {-110.017, 89.957, 24.68}, 200}, 1096 {"D08", {-100.877, 98.302, 25.78}, 200}, 1097 {"D09", {-90.1820, 105.059, 26.87}, 200}, 1098 {"D10", {-80.4400, 112.431, 27.86}, 200}, 1099 {"D11", {-69.7650, 118.547, 28.77}, 140}, 1100 {"D12", {-58.7820, 123.826, 29.75}, 140}, 1101 {"D13", {-48.0520, 129.561, 29.98}, 140}, 1102 {"E08", {-36.7080, 133.913, 30.66}, 140}, 1103 {"E09", {-24.8130, 136.403, 30.77}, 140}, 1104 {"E10", {-12.7110, 137.909, 30.85}, 140}, 1105 {"E11", {-0.5520, 138.269, 30.66}, 140}, 1106 {"F07", {47.2000, 129.579, 30.55}, 140}, 1107 {"F08", {58.3950, 124.823, 30.36}, 140}, 1108 {"F09", {68.5430, 118.115, 30.24}, 140}, 1109 {"F10", {77.7420, 110.194, 30.23}, 140}, 1110 {"F11", {87.8490, 103.232, 30.15}, 140}, 1111 {"F12", {97.5330, 95.576, 29.66}, 140}, 1112 {"F13", {104.4740, 85.645, 28.96}, 140}, 1113 {"D14", {-121.779, 102.198, 26.26}, 200}, 1114 {"D15", {-112.519, 110.4, 27.27}, 200}, 1115 {"D16", {-102.334, 117.583, 28.26}, 200}, 1116 {"D17", {-92.7160, 125.102, 29.27}, 200}, 1117 {"D18", {-82.1320, 131.386, 30.17}, 200}, 1118 {"D19", {-71.1180, 136.747, 31.06}, 200}, 1119 {"D20", {-59.9610, 141.661, 32.07}, 200}, 1120 {"D21", {-48.9840, 146.93, 32.66}, 200}, 1121 {"E15", {-37.3880, 150.568, 33.48}, 200}, 1122 {"E16", {-25.0940, 151.617, 33.68}, 200}, 1123 {"E17", {-12.7640, 151.597, 33.76}, 200}, 1124 {"E18", {-0.6340, 152.314, 33.66}, 200}, 1125 {"E19", {11.5570, 152.435, 33.57}, 200}, 1126 {"E20", {23.7670, 151.509, 33.46}, 200}, 1127 {"E21", {35.8480, 149.697, 33.25}, 200}, 1128 {"F14", {47.7370, 146.913, 32.75}, 200}, 1129 {"F15", {59.2600, 142.885, 32.55}, 200}, 1130 {"F16", {70.1740, 137.545, 32.26}, 200}, 1131 {"F17", {80.0350, 130.385, 32.26}, 200}, 1132 {"F18", {89.1590, 122.299, 32.15}, 200}, 1133 {"F19", {98.8470, 114.88, 32.06}, 200}, 1134 {"F20", {107.5660, 106.391, 31.84}, 200}, 1135 {"F21", {114.6430, 96.48, 31.65}, 200} 1136 }; 1137 1138 /******************************************************************************* 1139 * Helper macros 1140 ******************************************************************************/ 1141 #define SZ(Array) (sizeof(Array)/sizeof(Array[0])) 1142 #define SPLIT2(Array) Array[0], Array[1] 1143 #define SPLIT3(Array) Array[0], Array[1], Array[2] 1144 1145 /******************************************************************************* 1146 * Helper functions 1147 ******************************************************************************/ 1148 static void 1149 print_section(const char* name) 1150 { 1151 printf("########################################\n"); 1152 printf("# %s\n", name); 1153 printf("########################################\n"); 1154 } 1155 1156 static void 1157 print_spectrum 1158 (const char* name, 1159 const double spectrum[][2], 1160 const size_t ndata, 1161 const double scale[2]) 1162 { 1163 size_t i; 1164 printf("- spectrum: &%s\n", name); 1165 for(i=0; i<ndata; ++i) { 1166 printf(" - {wavelength: %e, data: %e}\n", 1167 spectrum[i][0]*scale[0], 1168 spectrum[i][1]*scale[1]); 1169 } 1170 } 1171 1172 /* Heliostat */ 1173 static void 1174 print_heliostat 1175 (const struct heliostat* hstat, 1176 const double tgt_pt[3], 1177 const double themis_target[3]) 1178 { 1179 const double PI = acos(-1.0); 1180 size_t i; 1181 1182 printf("- entity:\n"); 1183 printf(" name: %s\n", hstat->name); 1184 printf(" transform: {translation: [%g,%g,%g]}\n", SPLIT3(hstat->position)); 1185 printf(" children:\n"); 1186 printf(" - name: cethel3\n"); 1187 printf(" primary: 0\n"); 1188 printf(" geometry:\n"); 1189 printf(" - material: *occultant\n"); 1190 printf(" transform: {translation: [0, 0, -2.5]}\n"); 1191 printf(" cylinder: {height: 5, radius: 0.3}\n"); 1192 printf(" children:\n"); 1193 printf(" - name: pivot\n"); 1194 printf(" zx_pivot: {target: {position: [%g,%g,%g]}}\n", SPLIT3(tgt_pt)); 1195 printf(" children:\n"); 1196 printf(" - name: nine_mods\n"); 1197 printf(" primary: 1\n"); 1198 printf(" transform: {rotation: [-90, 0, 180]}\n"); 1199 printf(" geometry:\n"); 1200 1201 for(i=0; i<SZ(nine_mods); ++i) { 1202 const double* xyz = nine_mods[i].position; 1203 const double* corner = nine_mods[i].corner; 1204 double v[3]; 1205 double rotx, roty, zbar, focal_h, slant_range; 1206 1207 /* compute the rotation of the modules : parabolic structure with focal = 1208 * slant_range */ 1209 v[0] = themis_target[0] - hstat->position[0]; 1210 v[1] = themis_target[1] - hstat->position[1]; 1211 v[2] = themis_target[2] - hstat->position[2]; 1212 slant_range = sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); 1213 1214 focal_h = slant_range; /* structure parabolique et module sphérique */ 1215 zbar = 2.0 * focal_h ; /* - 0.25*xyz[1]*xyz[1]/focal_h ;*/ 1216 rotx = atan(xyz[1]/zbar) * 180.0 / PI; 1217 roty = -atan(xyz[0]/zbar) * 180.0 / PI; 1218 1219 /* print the module transform and the spherical module surface */ 1220 printf(" - material: *specular\n"); 1221 printf(" transform: {translation: [%g, %g, %g], rotation: [%g, %g, 0]}\n", 1222 SPLIT3(xyz), rotx, roty); 1223 printf(" hemisphere: {\ 1224 radius: %g, slices: 32, \ 1225 clip: [{operation: AND, vertices: [[-%g,-%g],[-%g, %g],[%g,%g],[%g,-%g]]}]}\n", 1226 hstat->focal * 2, 1227 SPLIT2(corner), 1228 SPLIT2(corner), 1229 SPLIT2(corner), 1230 SPLIT2(corner)); 1231 } 1232 } 1233 1234 /* Target definition */ 1235 static void 1236 print_target(const double size, const unsigned slices, const double tgt_pt[3]) 1237 { 1238 const double hsz = size * 0.5; /* Half size */ 1239 printf("- entity:\n"); 1240 printf(" name: target_e\n"); 1241 printf(" primary: 0\n"); 1242 printf(" transform: {translation: [%g, %g, %g], rotation: [-90, 0, 0]}\n", 1243 tgt_pt[0], tgt_pt[1]+0.5, tgt_pt[2] - 0.1); /* X rotation -37-90 = -127*/ 1244 printf(" geometry:\n"); 1245 printf(" - material: *occultant\n"); 1246 printf(" plane:\n"); 1247 printf(" slices: %u\n", slices); 1248 printf(" clip:\n"); 1249 printf(" - operation: AND\n"); 1250 printf(" vertices: [[%g, %g],[%g, %G],[%g, %g],[%g, %g]]\n", 1251 -hsz, -hsz, -hsz, hsz, hsz, hsz, hsz, -hsz); 1252 } 1253 1254 1255 /******************************************************************************* 1256 * Main program 1257 ******************************************************************************/ 1258 int 1259 main(int argc, char** argv) 1260 { 1261 const double one[2] = {1, 1}; 1262 const double scl[2] = {0.001, 0.01}; 1263 const double target_point[3] = {0, 6.2, 87.15};/* Aiming point for the flux computation */ 1264 const double themis_target[3] = { 0, 6.2, 87.15};/* to compute slant range */ 1265 const double corr = 4. ;/* correction length due to offset of the stl */ 1266 size_t i; 1267 1268 /* Spectra */ 1269 print_section("Spectra"); 1270 print_spectrum("solar_spectrum", solar_spectrum, SZ(solar_spectrum), one); 1271 printf("\n"); 1272 print_spectrum("ref_mirror", ref_mirror, SZ(ref_mirror), scl); 1273 printf("\n"); 1274 1275 /* Sun & atmosphere */ 1276 print_section("Sun & atmosphere"); 1277 printf("- sun: {dni: 1000, spectrum: *solar_spectrum}\n"); 1278 printf("- atmosphere: {extinction: 0.0001}\n"); 1279 printf("\n"); 1280 1281 /* Materials */ 1282 print_section("Materials"); 1283 printf("- material: &occultant {matte: {reflectivity: 0}}\n"); 1284 printf("- material: &specular {mirror: {reflectivity: *ref_mirror, slope_error: 1.e-3}}\n"); 1285 printf("- material: &lambertian\n"); 1286 printf(" front: {matte: {reflectivity: 0.9}}\n"); 1287 printf(" back: {matte: {reflectivity: 0.0}}\n"); 1288 printf("\n"); 1289 1290 /* Themis tower */ 1291 print_section("Tower"); 1292 1293 print_target(3, 128, target_point); 1294 1295 printf("- entity:\n"); 1296 printf(" name: tower\n"); 1297 printf(" primary: 0\n"); 1298 printf(" transform: {translation: [0, %g, 0]}\n", -corr); 1299 printf(" geometry:\n"); 1300 printf(" - {material: *occultant, stl: {path: top_tower.stl}}\n"); 1301 printf(" - {material: *occultant, stl: {path: grd_tower.stl}}\n"); 1302 printf("\n"); 1303 1304 printf("- entity:\n"); 1305 printf(" name: nextcsp_rcv\n"); 1306 printf(" primary: 0\n"); 1307 printf(" transform: {translation: [0, %g, %g]}\n", 1308 target_point[1], target_point[2] - 2.5); 1309 printf(" geometry: \n"); 1310 printf(" - {material: *lambertian, stl: {path: disp.stl}}\n"); 1311 printf(" - {material: *lambertian, stl: {path: pnew1.stl}}\n"); 1312 printf(" - {material: *lambertian, stl: {path: pnew2.stl}}\n"); 1313 printf(" - {material: *lambertian, stl: {path: pnup.stl}}\n"); 1314 printf("\n"); 1315 1316 /* Templates of the heliostat */ 1317 print_section("Heliostats"); 1318 for(i=0; i<SZ(heliostats); ++i) { 1319 print_heliostat(&heliostats[i], target_point, themis_target); 1320 printf("\n"); 1321 } 1322 return 0; 1323 } 1324