2 #ifndef __JPHYSICS__TOULON__
3 #define __JPHYSICS__TOULON__
88 const double x = lambda;
90 if (x > zmap.begin()->first && x < zmap.rbegin()->first) {
92 map_t::const_iterator i = zmap.lower_bound(x);
93 map_t::const_iterator
j = i;
97 if (i == zmap.begin()) {
102 const double x1 = i->first;
103 const double x2 =
j->first;
105 const double y1 = i->second;
106 const double y2 =
j->second;
108 return y1 + (y2 - y1) * (x - x1) / (x2 - x1);
130 zmap[300.0] = 32.290;
131 zmap[310.0] = 34.000;
132 zmap[320.0] = 35.730;
133 zmap[330.0] = 37.480;
134 zmap[340.0] = 39.260;
135 zmap[350.0] = 41.070;
136 zmap[360.0] = 42.890;
137 zmap[370.0] = 44.740;
138 zmap[380.0] = 46.600;
139 zmap[390.0] = 48.490;
140 zmap[400.0] = 50.390;
141 zmap[410.0] = 52.310;
142 zmap[420.0] = 54.250;
143 zmap[430.0] = 56.210;
144 zmap[440.0] = 58.180;
145 zmap[450.0] = 60.160;
146 zmap[460.0] = 62.160;
147 zmap[470.0] = 64.180;
148 zmap[480.0] = 66.210;
149 zmap[490.0] = 68.240;
150 zmap[500.0] = 70.300;
151 zmap[510.0] = 72.360;
152 zmap[520.0] = 74.430;
153 zmap[530.0] = 76.510;
154 zmap[540.0] = 78.610;
155 zmap[550.0] = 80.710;
156 zmap[560.0] = 82.820;
157 zmap[570.0] = 84.940;
158 zmap[580.0] = 87.070;
159 zmap[590.0] = 89.200;
160 zmap[600.0] = 91.340;
161 zmap[610.0] = 93.490;
162 zmap[620.0] = 95.000;
165 const double x = lambda;
167 if (x > zmap.begin()->first && x < zmap.rbegin()->first) {
169 map_t::const_iterator i = zmap.lower_bound(x);
170 map_t::const_iterator
j = i;
174 if (i == zmap.begin()) {
179 const double x1 = i->first;
180 const double x2 =
j->first;
182 const double y1 = i->second;
183 const double y2 =
j->second;
185 return y1 + (y2 - y1) * (x - x1) / (x2 - x1);
207 zmap[300.0] = 43.410;
208 zmap[310.0] = 49.990;
209 zmap[320.0] = 57.300;
210 zmap[330.0] = 65.400;
211 zmap[340.0] = 74.360;
212 zmap[350.0] = 84.230;
213 zmap[360.0] = 95.080;
214 zmap[370.0] = 106.970;
215 zmap[380.0] = 119.970;
216 zmap[390.0] = 134.140;
217 zmap[400.0] = 149.570;
218 zmap[410.0] = 166.330;
219 zmap[420.0] = 184.490;
220 zmap[430.0] = 204.130;
221 zmap[440.0] = 225.340;
222 zmap[450.0] = 248.200;
223 zmap[460.0] = 272.800;
224 zmap[470.0] = 299.230;
225 zmap[480.0] = 327.590;
226 zmap[490.0] = 357.960;
227 zmap[500.0] = 390.450;
228 zmap[510.0] = 425.150;
229 zmap[520.0] = 462.170;
230 zmap[530.0] = 501.620;
231 zmap[540.0] = 543.610;
232 zmap[550.0] = 588.240;
233 zmap[560.0] = 635.620;
234 zmap[570.0] = 685.890;
235 zmap[580.0] = 739.150;
236 zmap[590.0] = 795.530;
237 zmap[600.0] = 855.150;
238 zmap[610.0] = 918.140;
239 zmap[620.0] = 979.000;
242 const double x = lambda;
244 if (x > zmap.begin()->first && x < zmap.rbegin()->first) {
246 map_t::const_iterator i = zmap.lower_bound(x);
247 map_t::const_iterator
j = i;
251 if (i == zmap.begin()) {
256 const double x1 = i->first;
257 const double x2 =
j->first;
259 const double y1 = i->second;
260 const double y2 =
j->second;
262 return y1 + (y2 - y1) * (x - x1) / (x2 - x1);
281 const double a0 = 1.0 / (1.0 + a/3.0) / (4*
PI);
283 return a0 * (1.0 + a*x*x);
307 static JPolint2Function1D_t f1;
311 f1[+0.0017] = +19.377;
312 f1[+0.0022] = +17.907;
313 f1[+0.0028] = +16.464;
314 f1[+0.0035] = +15.333;
315 f1[+0.0044] = +14.148;
316 f1[+0.0055] = +13.043;
317 f1[+0.0069] = +12.059;
318 f1[+0.0087] = +12.021;
319 f1[+0.0110] = +9.992;
320 f1[+0.0139] = +8.898;
321 f1[+0.0175] = +7.853;
322 f1[+0.0220] = +6.845;
323 f1[+0.0277] = +5.900;
324 f1[+0.0348] = +4.989;
325 f1[+0.0438] = +4.175;
326 f1[+0.0552] = +3.473;
327 f1[+0.0695] = +2.870;
328 f1[+0.0875] = +2.358;
329 f1[+0.1101] = +1.938;
330 f1[+0.1386] = +1.579;
331 f1[+0.1745] = +1.258;
332 f1[+0.2618] = +0.796;
333 f1[+0.3491] = +0.525;
334 f1[+0.4363] = +0.391;
335 f1[+0.5236] = +0.270;
336 f1[+0.6109] = +0.214;
337 f1[+0.6981] = +0.170;
338 f1[+0.7854] = +0.136;
339 f1[+0.8727] = +0.110;
340 f1[+0.9599] = +0.087;
341 f1[+1.0472] = +0.071;
342 f1[+1.1345] = +0.060;
343 f1[+1.2217] = +0.050;
344 f1[+1.3090] = +0.042;
345 f1[+1.3963] = +0.036;
346 f1[+1.4835] = +0.031;
347 f1[+1.5708] = +0.027;
348 f1[+1.6581] = +0.024;
349 f1[+1.7453] = +0.021;
350 f1[+1.8326] = +0.019;
351 f1[+1.9199] = +0.017;
352 f1[+2.0071] = +0.016;
353 f1[+2.0944] = +0.015;
354 f1[+2.1817] = +0.013;
355 f1[+2.2689] = +0.012;
356 f1[+2.3562] = +0.011;
357 f1[+2.4435] = +0.009;
358 f1[+2.5307] = +0.008;
359 f1[+2.6180] = +0.007;
360 f1[+2.7053] = +0.007;
361 f1[+2.7925] = +0.006;
362 f1[+2.8798] = +0.005;
363 f1[+2.9671] = +0.003;
364 f1[+3.0543] = +0.002;
365 f1[+3.1416] = -0.000;
367 for (JPolint1Function1D_t::iterator i = f1.begin(); i != f1.end(); ++i) {
369 const double x = i->getX();
370 const double y = i->getY();
377 f1.setExceptionHandler(
new JPolint2Function1D_t::JDefaultResult(0.0));
380 const double x = acos(ct);
394 static JGridPolint1Function1D_t f1;
802 f1.setExceptionHandler(
new JGridPolint1Function1D_t::JDefaultResult(0.0));
817 inline double getQE(
const double lambda,
const bool option)
821 tuple(
const double __QE,
822 const double __l_gel,
823 const double __l_glass) :
834 static const tuple ntuple[] = {
835 tuple(0.000e-2, 0.00, 0.00),
836 tuple(1.988e-2, 100.81, 148.37),
837 tuple(2.714e-2, 99.94, 142.87),
838 tuple(3.496e-2, 99.89, 135.64),
839 tuple(4.347e-2, 96.90, 134.58),
840 tuple(5.166e-2, 96.42, 138.27),
841 tuple(6.004e-2, 94.36, 142.40),
842 tuple(6.885e-2, 89.09, 147.16),
843 tuple(8.105e-2, 90.10, 151.80),
844 tuple(10.13e-2, 86.95, 150.88),
845 tuple(13.03e-2, 85.88, 145.68),
846 tuple(15.29e-2, 84.49, 139.70),
847 tuple(16.37e-2, 81.08, 126.55),
848 tuple(17.11e-2, 78.18, 118.86),
849 tuple(17.86e-2, 76.48, 113.90),
850 tuple(18.95e-2, 74.55, 116.08),
851 tuple(20.22e-2, 72.31, 109.23),
852 tuple(21.26e-2, 68.05, 81.63),
853 tuple(22.10e-2, 66.91, 65.66),
854 tuple(22.65e-2, 64.48, 77.30),
855 tuple(23.07e-2, 62.53, 73.02),
856 tuple(23.14e-2, 59.38, 81.25),
857 tuple(23.34e-2, 56.64, 128.04),
858 tuple(22.95e-2, 53.29, 61.84),
859 tuple(22.95e-2, 48.96, 19.23),
860 tuple(22.74e-2, 45.71, 27.21),
861 tuple(23.48e-2, 41.88, 18.09),
862 tuple(22.59e-2, 37.14, 8.41),
863 tuple(20.61e-2, 30.49, 3.92),
864 tuple(17.68e-2, 23.08, 1.82),
865 tuple(13.18e-2, 15.60, 0.84),
866 tuple(7.443e-2, 8.00, 0.39),
867 tuple(2.526e-2, 0.00, 0.17),
868 tuple(0.000e-2, 0.00, 0.00)
871 static const double cola = 0.9;
872 static const double x_glass = 1.5;
873 static const double x_gel = 1.0;
876 static const int N =
sizeof(ntuple) /
sizeof(ntuple[0]) - 1;
878 static const double xmax = 620.0;
879 static const double xmin = 290.0;
881 const double x = lambda;
885 if (x > xmin && x < xmax) {
887 const int i = (int) (N * (x - xmax) / (xmin - xmax));
888 const int j = (i == N ? i - 1 : i + 1);
890 const double x1 = xmax + i * (xmin - xmax) / N;
891 const double x2 = xmax +
j * (xmin - xmax) / N;
893 const double dx = (x - x1) / (x1 - x2);
895 const double QE = ntuple[i].QE + (ntuple[i].QE - ntuple[
j].QE ) * dx;
896 const double l_gel = ntuple[i].l_gel + (ntuple[i].l_gel - ntuple[
j].l_gel ) * dx;
897 const double l_glass = ntuple[i].l_glass + (ntuple[i].l_glass - ntuple[
j].l_glass) * dx;
903 if (l_glass > 0.0 && l_gel > 0.0)
904 y *= exp(-x_glass/l_glass) * exp(-x_gel/l_gel);
920 inline double getQE(
const double lambda)
922 return getQE(lambda,
true);