ARTS  2.2.66
continua.cc
Go to the documentation of this file.
1 /* Copyright (C) 2001-2012
2  Thomas Kuhn <tkuhn@uni-bremen.de>
3  Stefan Buehler <sbuehler@ltu.se>
4 
5  This program is free software; you can redistribute it and/or modify it
6  under the terms of the GNU General Public License as published by the
7  Free Software Foundation; either version 2, or (at your option) any
8  later version.
9 
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with this program; if not, write to the Free Software
17  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
18  USA. */
19 
375 #include <cmath>
376 #include "arts.h"
377 #include "matpackI.h"
378 #include "array.h"
379 #include "absorption.h"
380 #include "continua.h"
381 #include "global_data.h"
382 
383 
384 // #################################################################################
385 
386 // global constants as defined in constants.cc
387 
388 extern const Numeric EULER_NUMBER;
389 extern const Numeric LOG10_EULER_NUMBER;
390 extern const Numeric NAT_LOG_TEN;
391 extern const Numeric PI;
392 extern const Numeric SPEED_OF_LIGHT;
393 
394 // numerical constants specific defined for the file continua.cc
395 
396 // conversion from neper to decibel:
397 //const Numeric Np_to_dB = (10.000000 * LOG10_EULER_NUMBER); // [dB/Np]
398 // conversion from decibel to neper:
399 //const Numeric dB_to_Np = (1.000000 / Np_to_dB); // [Np/dB]
400 // conversion from GHz to Hz:
401 //const Numeric GHz_to_Hz = 1.000000e9; // [Hz/GHz]
402 // conversion from Hz to GHz:
403 const Numeric Hz_to_GHz = 1.000000e-9; // [GHz/Hz]
404 // conversion from kPa to Pa:
405 //const Numeric kPa_to_Pa = 1.000000e3; // [kPa/Pa]
406 // conversion from Pa to kPa:
407 const Numeric Pa_to_kPa = 1.000000e-3; // [Pa/kPa]
408 // conversion from hPa to Pa (hPa = mbar):
409 //const Numeric hPa_to_Pa = 1.000000e2; // [hPa/Pa]
410 // conversion from Pa to hPa (hPa = mbar):
411 const Numeric Pa_to_hPa = 1.000000e-2; // [Pa/hPa]
412 
413 // MPM pre-factor for unit setting:
414 //const Numeric dB_m_Hz = 0.1820427855916028e-06; // [dB/m/Hz] (4 * pi / c) * 10 * log(e)
415 //const Numeric dB_km_GHz = 0.1820427855916028e+06; // [dB/km/GHz] (4 * pi / c) * 10 * log(e)
416 
417 
418 // absorption unit conversions
419 
420 // conversion from dB/km to Np/km for absorption units:
421 //const Numeric dB_km_to_Np_km = dB_to_Np;
422 // conversion from dB/km to Np/m for absorption units:
423 //const Numeric dB_km_to_Np_m = (1.00000e-3 / (10.0 * LOG10_EULER_NUMBER));
424 // conversion from dB/km to 1/m for absorption units:
425 const Numeric dB_km_to_1_m = (1.00000e-3 / (10.0 * LOG10_EULER_NUMBER));
426 
427 
428 // lower limit for absorption calculation due to underflow error:
429 
430 const Numeric VMRCalcLimit = 1.000e-25;
431 
432 
434 // arrays of the CKD H2O, CO2, N2, O2 absorption models
436 
437 // additional array fields due to different numbering schemes of F77 and C/C++
438 const int addF77fields = 1;
439 
440 
442 // Continuum data constants
444 
445 /*
446  ---------------------------------------------------------------------
447 
448 c 29 August 2002
449 c
450 c This version, ckd_2.4.2, is composed of the updates to all continua
451 c including water vapor (ckd_2.2). This is to retain consistency between the
452 c continuum and the HITRAN line parameters.
453 c
454 
455  further information can be found under
456  http://www.rtweb.aer.com/continuum_frame.html
457 
458  Transformation from original F77 code to C/C++ by
459  T. Kuhn, iup Bremen, October 2003
460 
461  ---------------------------------------------------------------------
462  */
463 // H2O self continuum parameters at T=296 K for the CKD versions 0 to 2.4.2
464 // date of last update: 06/28/82
465 // units of (CM**3/MOL)*1.E-20
466 const Numeric SL296_ckd_0_v1 = -20.0;
467 const Numeric SL296_ckd_0_v2 = 20000.0;
468 const Numeric SL296_ckd_0_dv = 10.0;
469 const int SL296_ckd_0_npt = 2003;
471  0.0000e-00, 1.1109e-01, 1.0573e-01,
472  1.0162e-01, 1.0573e-01, 1.1109e-01, 1.2574e-01, 1.3499e-01, // f02740
473  1.4327e-01, 1.5065e-01, 1.5164e-01, 1.5022e-01, 1.3677e-01, // f02750
474  1.3115e-01, 1.2253e-01, 1.1271e-01, 1.0070e-01, 8.7495e-02, // f02760
475  8.0118e-02, 6.9940e-02, 6.2034e-02, 5.6051e-02, 4.7663e-02, // f02770
476  4.2450e-02, 3.6690e-02, 3.3441e-02, 3.0711e-02, 2.5205e-02, // f02780
477  2.2113e-02, 1.8880e-02, 1.6653e-02, 1.4626e-02, 1.2065e-02, // f02790
478  1.0709e-02, 9.1783e-03, 7.7274e-03, 6.7302e-03, 5.6164e-03, // f02800
479  4.9089e-03, 4.1497e-03, 3.5823e-03, 3.1124e-03, 2.6414e-03, // f02810
480  2.3167e-03, 2.0156e-03, 1.7829e-03, 1.5666e-03, 1.3928e-03, // f02820
481  1.2338e-03, 1.0932e-03, 9.7939e-04, 8.8241e-04, 7.9173e-04, // f02830
482  7.1296e-04, 6.4179e-04, 5.8031e-04, 5.2647e-04, 4.7762e-04, // f02850
483  4.3349e-04, 3.9355e-04, 3.5887e-04, 3.2723e-04, 2.9919e-04, // f02860
484  2.7363e-04, 2.5013e-04, 2.2876e-04, 2.0924e-04, 1.9193e-04, // f02870
485  1.7618e-04, 1.6188e-04, 1.4891e-04, 1.3717e-04, 1.2647e-04, // f02880
486  1.1671e-04, 1.0786e-04, 9.9785e-05, 9.2350e-05, 8.5539e-05, // f02890
487  7.9377e-05, 7.3781e-05, 6.8677e-05, 6.3993e-05, 5.9705e-05, // f02900
488  5.5788e-05, 5.2196e-05, 4.8899e-05, 4.5865e-05, 4.3079e-05, // f02910
489  4.0526e-05, 3.8182e-05, 3.6025e-05, 3.4038e-05, 3.2203e-05, // f02920
490  3.0511e-05, 2.8949e-05, 2.7505e-05, 2.6170e-05, 2.4933e-05, // f02930
491  2.3786e-05, 2.2722e-05, 2.1736e-05, 2.0819e-05, 1.9968e-05, // f02940
492  1.9178e-05, 1.8442e-05, 1.7760e-05, 1.7127e-05, 1.6541e-05, // f02960
493  1.5997e-05, 1.5495e-05, 1.5034e-05, 1.4614e-05, 1.4230e-05, // f02970
494  1.3883e-05, 1.3578e-05, 1.3304e-05, 1.3069e-05, 1.2876e-05, // f02980
495  1.2732e-05, 1.2626e-05, 1.2556e-05, 1.2544e-05, 1.2604e-05, // f02990
496  1.2719e-05, 1.2883e-05, 1.3164e-05, 1.3581e-05, 1.4187e-05, // f03000
497  1.4866e-05, 1.5669e-05, 1.6717e-05, 1.8148e-05, 2.0268e-05, // f03010
498  2.2456e-05, 2.5582e-05, 2.9183e-05, 3.3612e-05, 3.9996e-05, // f03020
499  4.6829e-05, 5.5055e-05, 6.5897e-05, 7.5360e-05, 8.7213e-05, // f03030
500  1.0046e-04, 1.1496e-04, 1.2943e-04, 1.5049e-04, 1.6973e-04, // f03040
501  1.8711e-04, 2.0286e-04, 2.2823e-04, 2.6780e-04, 2.8766e-04, // f03050
502  3.1164e-04, 3.3640e-04, 3.6884e-04, 3.9159e-04, 3.8712e-04, // f03070
503  3.7433e-04, 3.4503e-04, 3.1003e-04, 2.8027e-04, 2.5253e-04, // f03080
504  2.3408e-04, 2.2836e-04, 2.4442e-04, 2.7521e-04, 2.9048e-04, // f03090
505  3.0489e-04, 3.2646e-04, 3.3880e-04, 3.3492e-04, 3.0987e-04, // f03100
506  2.9482e-04, 2.8711e-04, 2.6068e-04, 2.2683e-04, 1.9996e-04, // f03110
507  1.7788e-04, 1.6101e-04, 1.3911e-04, 1.2013e-04, 1.0544e-04, // f03120
508  9.4224e-05, 8.1256e-05, 7.3667e-05, 6.2233e-05, 5.5906e-05, // f03130
509  5.1619e-05, 4.5140e-05, 4.0273e-05, 3.3268e-05, 3.0258e-05, // f03140
510  2.6440e-05, 2.3103e-05, 2.0749e-05, 1.8258e-05, 1.6459e-05, // f03150
511  1.4097e-05, 1.2052e-05, 1.0759e-05, 9.1400e-06, 8.1432e-06, // f03160
512  7.1460e-06, 6.4006e-06, 5.6995e-06, 4.9372e-06, 4.4455e-06, // f03180
513  3.9033e-06, 3.4740e-06, 3.1269e-06, 2.8059e-06, 2.5558e-06, // f03190
514  2.2919e-06, 2.0846e-06, 1.8983e-06, 1.7329e-06, 1.5929e-06, // f03200
515  1.4631e-06, 1.3513e-06, 1.2461e-06, 1.1519e-06, 1.0682e-06, // f03210
516  9.9256e-07, 9.2505e-07, 8.6367e-07, 8.0857e-07, 7.5674e-07, // f03220
517  7.0934e-07, 6.6580e-07, 6.2580e-07, 5.8853e-07, 5.5333e-07, // f03230
518  5.2143e-07, 4.9169e-07, 4.6431e-07, 4.3898e-07, 4.1564e-07, // f03240
519  3.9405e-07, 3.7403e-07, 3.5544e-07, 3.3819e-07, 3.2212e-07, // f03250
520  3.0714e-07, 2.9313e-07, 2.8003e-07, 2.6777e-07, 2.5628e-07, // f03260
521  2.4551e-07, 2.3540e-07, 2.2591e-07, 2.1701e-07, 2.0866e-07, // f03270
522  2.0082e-07, 1.9349e-07, 1.8665e-07, 1.8027e-07, 1.7439e-07, // f03290
523  1.6894e-07, 1.6400e-07, 1.5953e-07, 1.5557e-07, 1.5195e-07, // f03300
524  1.4888e-07, 1.4603e-07, 1.4337e-07, 1.4093e-07, 1.3828e-07, // f03310
525  1.3569e-07, 1.3270e-07, 1.2984e-07, 1.2714e-07, 1.2541e-07, // f03320
526  1.2399e-07, 1.2102e-07, 1.1878e-07, 1.1728e-07, 1.1644e-07, // f03330
527  1.1491e-07, 1.1305e-07, 1.1235e-07, 1.1228e-07, 1.1224e-07, // f03340
528  1.1191e-07, 1.1151e-07, 1.1098e-07, 1.1068e-07, 1.1109e-07, // f03350
529  1.1213e-07, 1.1431e-07, 1.1826e-07, 1.2322e-07, 1.3025e-07, // f03360
530  1.4066e-07, 1.5657e-07, 1.7214e-07, 1.9449e-07, 2.2662e-07, // f03370
531  2.6953e-07, 3.1723e-07, 3.7028e-07, 4.4482e-07, 5.3852e-07, // f03380
532  6.2639e-07, 7.2175e-07, 7.7626e-07, 8.7248e-07, 9.6759e-07, // f03400
533  1.0102e-06, 1.0620e-06, 1.1201e-06, 1.2107e-06, 1.2998e-06, // f03410
534  1.3130e-06, 1.2856e-06, 1.2350e-06, 1.1489e-06, 1.0819e-06, // f03420
535  1.0120e-06, 9.4795e-07, 9.2858e-07, 9.8060e-07, 1.0999e-06, // f03430
536  1.1967e-06, 1.2672e-06, 1.3418e-06, 1.3864e-06, 1.4330e-06, // f03440
537  1.4592e-06, 1.4598e-06, 1.4774e-06, 1.4726e-06, 1.4820e-06, // f03450
538  1.5050e-06, 1.4984e-06, 1.5181e-06, 1.5888e-06, 1.6850e-06, // f03460
539  1.7690e-06, 1.9277e-06, 2.1107e-06, 2.3068e-06, 2.5347e-06, // f03470
540  2.8069e-06, 3.1345e-06, 3.5822e-06, 3.9051e-06, 4.3422e-06, // f03480
541  4.8704e-06, 5.5351e-06, 6.3454e-06, 7.2690e-06, 8.2974e-06, // f03490
542  9.7609e-06, 1.1237e-05, 1.3187e-05, 1.5548e-05, 1.8784e-05, // f03510
543  2.1694e-05, 2.5487e-05, 3.0092e-05, 3.5385e-05, 4.2764e-05, // f03520
544  4.9313e-05, 5.5800e-05, 6.2968e-05, 7.1060e-05, 7.7699e-05, // f03530
545  8.7216e-05, 8.9335e-05, 9.2151e-05, 9.2779e-05, 9.4643e-05, // f03540
546  9.7978e-05, 1.0008e-04, 1.0702e-04, 1.1026e-04, 1.0828e-04, // f03550
547  1.0550e-04, 1.0432e-04, 1.0428e-04, 9.8980e-05, 9.4992e-05, // f03560
548  9.5159e-05, 1.0058e-04, 1.0738e-04, 1.1550e-04, 1.1229e-04, // f03570
549  1.0596e-04, 1.0062e-04, 9.1742e-05, 8.4492e-05, 6.8099e-05, // f03580
550  5.6295e-05, 4.6502e-05, 3.8071e-05, 3.0721e-05, 2.3297e-05, // f03590
551  1.8688e-05, 1.4830e-05, 1.2049e-05, 9.6754e-06, 7.9192e-06, // f03600
552  6.6673e-06, 5.6468e-06, 4.8904e-06, 4.2289e-06, 3.6880e-06, // f03620
553  3.2396e-06, 2.8525e-06, 2.5363e-06, 2.2431e-06, 1.9949e-06, // f03630
554  1.7931e-06, 1.6164e-06, 1.4431e-06, 1.2997e-06, 1.1559e-06, // f03640
555  1.0404e-06, 9.4300e-07, 8.4597e-07, 7.6133e-07, 6.8623e-07, // f03650
556  6.2137e-07, 5.6345e-07, 5.1076e-07, 4.6246e-07, 4.1906e-07, // f03660
557  3.8063e-07, 3.4610e-07, 3.1554e-07, 2.8795e-07, 2.6252e-07, // f03670
558  2.3967e-07, 2.1901e-07, 2.0052e-07, 1.8384e-07, 1.6847e-07, // f03680
559  1.5459e-07, 1.4204e-07, 1.3068e-07, 1.2036e-07, 1.1095e-07, // f03690
560  1.0237e-07, 9.4592e-08, 8.7530e-08, 8.1121e-08, 7.5282e-08, // f03700
561  6.9985e-08, 6.5189e-08, 6.0874e-08, 5.6989e-08, 5.3530e-08, // f03710
562  5.0418e-08, 4.7745e-08, 4.5367e-08, 4.3253e-08, 4.1309e-08, // f03730
563  3.9695e-08, 3.8094e-08, 3.6482e-08, 3.4897e-08, 3.3500e-08, // f03740
564  3.2302e-08, 3.0854e-08, 2.9698e-08, 2.8567e-08, 2.7600e-08, // f03750
565  2.6746e-08, 2.5982e-08, 2.5510e-08, 2.5121e-08, 2.4922e-08, // f03760
566  2.4909e-08, 2.5013e-08, 2.5216e-08, 2.5589e-08, 2.6049e-08, // f03770
567  2.6451e-08, 2.6978e-08, 2.7687e-08, 2.8600e-08, 2.9643e-08, // f03780
568  3.0701e-08, 3.2058e-08, 3.3695e-08, 3.5558e-08, 3.7634e-08, // f03790
569  3.9875e-08, 4.2458e-08, 4.5480e-08, 4.8858e-08, 5.2599e-08, // f03800
570  5.7030e-08, 6.2067e-08, 6.7911e-08, 7.4579e-08, 8.1902e-08, // f03810
571  8.9978e-08, 9.9870e-08, 1.1102e-07, 1.2343e-07, 1.3732e-07, // f03820
572  1.5394e-07, 1.7318e-07, 1.9383e-07, 2.1819e-07, 2.4666e-07, // f03840
573  2.8109e-07, 3.2236e-07, 3.7760e-07, 4.4417e-07, 5.2422e-07, // f03850
574  6.1941e-07, 7.4897e-07, 9.2041e-07, 1.1574e-06, 1.4126e-06, // f03860
575  1.7197e-06, 2.1399e-06, 2.6266e-06, 3.3424e-06, 3.8418e-06, // f03870
576  4.5140e-06, 5.0653e-06, 5.8485e-06, 6.5856e-06, 6.8937e-06, // f03880
577  6.9121e-06, 6.9005e-06, 6.9861e-06, 6.8200e-06, 6.6089e-06, // f03890
578  6.5809e-06, 7.3496e-06, 8.0311e-06, 8.3186e-06, 8.4260e-06, // f03900
579  9.0644e-06, 9.4965e-06, 9.4909e-06, 9.0160e-06, 9.1494e-06, // f03910
580  9.3629e-06, 9.5944e-06, 9.5459e-06, 8.9919e-06, 8.6040e-06, // f03920
581  7.8613e-06, 7.1567e-06, 6.2677e-06, 5.1899e-06, 4.4188e-06, // f03930
582  3.7167e-06, 3.0636e-06, 2.5573e-06, 2.0317e-06, 1.6371e-06, // f03950
583  1.3257e-06, 1.0928e-06, 8.9986e-07, 7.4653e-07, 6.1111e-07, // f03960
584  5.1395e-07, 4.3500e-07, 3.7584e-07, 3.2633e-07, 2.8413e-07, // f03970
585  2.4723e-07, 2.1709e-07, 1.9294e-07, 1.7258e-07, 1.5492e-07, // f03980
586  1.3820e-07, 1.2389e-07, 1.1189e-07, 1.0046e-07, 9.0832e-08, // f03990
587  8.2764e-08, 7.4191e-08, 6.7085e-08, 6.0708e-08, 5.4963e-08, // f04000
588  4.9851e-08, 4.5044e-08, 4.0916e-08, 3.7220e-08, 3.3678e-08, // f04010
589  3.0663e-08, 2.7979e-08, 2.5495e-08, 2.3286e-08, 2.1233e-08, // f04020
590  1.9409e-08, 1.7770e-08, 1.6260e-08, 1.4885e-08, 1.3674e-08, // f04030
591  1.2543e-08, 1.1551e-08, 1.0655e-08, 9.8585e-09, 9.1398e-09, // f04040
592  8.4806e-09, 7.8899e-09, 7.3547e-09, 6.8670e-09, 6.4131e-09, // f04060
593  5.9930e-09, 5.6096e-09, 5.2592e-09, 4.9352e-09, 4.6354e-09, // f04070
594  4.3722e-09, 4.1250e-09, 3.9081e-09, 3.7118e-09, 3.5372e-09, // f04080
595  3.3862e-09, 3.2499e-09, 3.1324e-09, 3.0313e-09, 2.9438e-09, // f04090
596  2.8686e-09, 2.8050e-09, 2.7545e-09, 2.7149e-09, 2.6907e-09, // f04100
597  2.6724e-09, 2.6649e-09, 2.6642e-09, 2.6725e-09, 2.6871e-09, // f04110
598  2.7056e-09, 2.7357e-09, 2.7781e-09, 2.8358e-09, 2.9067e-09, // f04120
599  2.9952e-09, 3.1020e-09, 3.2253e-09, 3.3647e-09, 3.5232e-09, // f04130
600  3.7037e-09, 3.9076e-09, 4.1385e-09, 4.3927e-09, 4.6861e-09, // f04140
601  5.0238e-09, 5.4027e-09, 5.8303e-09, 6.3208e-09, 6.8878e-09, // f04150
602  7.5419e-09, 8.3130e-09, 9.1952e-09, 1.0228e-08, 1.1386e-08, // f04170
603  1.2792e-08, 1.4521e-08, 1.6437e-08, 1.8674e-08, 2.1160e-08, // f04180
604  2.4506e-08, 2.8113e-08, 3.2636e-08, 3.7355e-08, 4.2234e-08, // f04190
605  4.9282e-08, 5.7358e-08, 6.6743e-08, 7.8821e-08, 9.4264e-08, // f04200
606  1.1542e-07, 1.3684e-07, 1.6337e-07, 2.0056e-07, 2.3252e-07, // f04210
607  2.6127e-07, 2.9211e-07, 3.3804e-07, 3.7397e-07, 3.8205e-07, // f04220
608  3.8810e-07, 3.9499e-07, 3.9508e-07, 3.7652e-07, 3.5859e-07, // f04230
609  3.6198e-07, 3.7871e-07, 4.0925e-07, 4.2717e-07, 4.8241e-07, // f04240
610  5.2008e-07, 5.6530e-07, 5.9531e-07, 6.1994e-07, 6.5080e-07, // f04250
611  6.6355e-07, 6.9193e-07, 6.9930e-07, 7.3058e-07, 7.4678e-07, // f04260
612  7.9193e-07, 8.3627e-07, 9.1267e-07, 1.0021e-06, 1.1218e-06, // f04280
613  1.2899e-06, 1.4447e-06, 1.7268e-06, 2.0025e-06, 2.3139e-06, // f04290
614  2.5599e-06, 2.8920e-06, 3.3059e-06, 3.5425e-06, 3.9522e-06, // f04300
615  4.0551e-06, 4.2818e-06, 4.2892e-06, 4.4210e-06, 4.5614e-06, // f04310
616  4.6739e-06, 4.9482e-06, 5.1118e-06, 5.0986e-06, 4.9417e-06, // f04320
617  4.9022e-06, 4.8449e-06, 4.8694e-06, 4.8111e-06, 4.9378e-06, // f04330
618  5.3231e-06, 5.7362e-06, 6.2350e-06, 6.0951e-06, 5.7281e-06, // f04340
619  5.4585e-06, 4.9032e-06, 4.3009e-06, 3.4776e-06, 2.8108e-06, // f04350
620  2.2993e-06, 1.7999e-06, 1.3870e-06, 1.0750e-06, 8.5191e-07, // f04360
621  6.7951e-07, 5.5336e-07, 4.6439e-07, 4.0243e-07, 3.5368e-07, // f04370
622  3.1427e-07, 2.7775e-07, 2.4486e-07, 2.1788e-07, 1.9249e-07, // f04390
623  1.7162e-07, 1.5115e-07, 1.3478e-07, 1.2236e-07, 1.1139e-07, // f04400
624  1.0092e-07, 9.0795e-08, 8.2214e-08, 7.4691e-08, 6.7486e-08, // f04410
625  6.0414e-08, 5.4584e-08, 4.8754e-08, 4.3501e-08, 3.8767e-08, // f04420
626  3.4363e-08, 3.0703e-08, 2.7562e-08, 2.4831e-08, 2.2241e-08, // f04430
627  1.9939e-08, 1.8049e-08, 1.6368e-08, 1.4863e-08, 1.3460e-08, // f04440
628  1.2212e-08, 1.1155e-08, 1.0185e-08, 9.3417e-09, 8.5671e-09, // f04450
629  7.8292e-09, 7.1749e-09, 6.5856e-09, 6.0588e-09, 5.5835e-09, // f04460
630  5.1350e-09, 4.7395e-09, 4.3771e-09, 4.0476e-09, 3.7560e-09, // f04470
631  3.4861e-09, 3.2427e-09, 3.0240e-09, 2.8278e-09, 2.6531e-09, // f04480
632  2.4937e-09, 2.3511e-09, 2.2245e-09, 2.1133e-09, 2.0159e-09, // f04500
633  1.9330e-09, 1.8669e-09, 1.8152e-09, 1.7852e-09, 1.7752e-09, // f04510
634  1.7823e-09, 1.8194e-09, 1.8866e-09, 1.9759e-09, 2.0736e-09, // f04520
635  2.2083e-09, 2.3587e-09, 2.4984e-09, 2.6333e-09, 2.8160e-09, // f04530
636  3.0759e-09, 3.3720e-09, 3.6457e-09, 4.0668e-09, 4.4541e-09, // f04540
637  4.7976e-09, 5.0908e-09, 5.4811e-09, 6.1394e-09, 6.3669e-09, // f04550
638  6.5714e-09, 6.8384e-09, 7.1918e-09, 7.3741e-09, 7.2079e-09, // f04560
639  7.2172e-09, 7.2572e-09, 7.3912e-09, 7.6188e-09, 8.3291e-09, // f04570
640  8.7885e-09, 9.2412e-09, 1.0021e-08, 1.0752e-08, 1.1546e-08, // f04580
641  1.1607e-08, 1.1949e-08, 1.2346e-08, 1.2516e-08, 1.2826e-08, // f04590
642  1.3053e-08, 1.3556e-08, 1.4221e-08, 1.5201e-08, 1.6661e-08, // f04610
643  1.8385e-08, 2.0585e-08, 2.3674e-08, 2.7928e-08, 3.3901e-08, // f04620
644  4.1017e-08, 4.9595e-08, 6.0432e-08, 7.6304e-08, 9.0764e-08, // f04630
645  1.0798e-07, 1.2442e-07, 1.4404e-07, 1.6331e-07, 1.8339e-07, // f04640
646  2.0445e-07, 2.2288e-07, 2.3083e-07, 2.3196e-07, 2.3919e-07, // f04650
647  2.3339e-07, 2.3502e-07, 2.3444e-07, 2.6395e-07, 2.9928e-07, // f04660
648  3.0025e-07, 3.0496e-07, 3.1777e-07, 3.4198e-07, 3.4739e-07, // f04670
649  3.2696e-07, 3.4100e-07, 3.5405e-07, 3.7774e-07, 3.8285e-07, // f04680
650  3.6797e-07, 3.5800e-07, 3.2283e-07, 2.9361e-07, 2.4881e-07, // f04690
651  2.0599e-07, 1.7121e-07, 1.3641e-07, 1.1111e-07, 8.9413e-08, // f04700
652  7.3455e-08, 6.2078e-08, 5.2538e-08, 4.5325e-08, 3.9005e-08, // f04720
653  3.4772e-08, 3.1203e-08, 2.8132e-08, 2.5250e-08, 2.2371e-08, // f04730
654  2.0131e-08, 1.7992e-08, 1.6076e-08, 1.4222e-08, 1.2490e-08, // f04740
655  1.1401e-08, 1.0249e-08, 9.2279e-09, 8.5654e-09, 7.6227e-09, // f04750
656  6.9648e-09, 6.2466e-09, 5.7252e-09, 5.3800e-09, 4.6960e-09, // f04760
657  4.2194e-09, 3.7746e-09, 3.3813e-09, 3.0656e-09, 2.6885e-09, // f04770
658  2.4311e-09, 2.1572e-09, 1.8892e-09, 1.7038e-09, 1.4914e-09, // f04780
659  1.3277e-09, 1.1694e-09, 1.0391e-09, 9.2779e-10, 8.3123e-10, // f04790
660  7.4968e-10, 6.8385e-10, 6.2915e-10, 5.7784e-10, 5.2838e-10, // f04800
661  4.8382e-10, 4.4543e-10, 4.1155e-10, 3.7158e-10, 3.3731e-10, // f04810
662  3.0969e-10, 2.8535e-10, 2.6416e-10, 2.4583e-10, 2.2878e-10, // f04830
663  2.1379e-10, 2.0073e-10, 1.8907e-10, 1.7866e-10, 1.6936e-10, // f04840
664  1.6119e-10, 1.5424e-10, 1.4847e-10, 1.4401e-10, 1.4068e-10, // f04850
665  1.3937e-10, 1.3943e-10, 1.4281e-10, 1.4766e-10, 1.5701e-10, // f04860
666  1.7079e-10, 1.8691e-10, 2.0081e-10, 2.1740e-10, 2.4847e-10, // f04870
667  2.6463e-10, 2.7087e-10, 2.7313e-10, 2.8352e-10, 2.9511e-10, // f04880
668  2.8058e-10, 2.7227e-10, 2.7356e-10, 2.8012e-10, 2.8034e-10, // f04890
669  2.9031e-10, 3.1030e-10, 3.3745e-10, 3.8152e-10, 4.0622e-10, // f04900
670  4.2673e-10, 4.3879e-10, 4.5488e-10, 4.7179e-10, 4.6140e-10, // f04910
671  4.6339e-10, 4.6716e-10, 4.7024e-10, 4.7931e-10, 4.8503e-10, // f04920
672  4.9589e-10, 4.9499e-10, 5.0363e-10, 5.3184e-10, 5.6451e-10, // f04940
673  6.0932e-10, 6.6469e-10, 7.4076e-10, 8.3605e-10, 9.4898e-10, // f04950
674  1.0935e-09, 1.2593e-09, 1.4913e-09, 1.8099e-09, 2.1842e-09, // f04960
675  2.7284e-09, 3.2159e-09, 3.7426e-09, 4.5226e-09, 5.3512e-09, // f04970
676  6.1787e-09, 6.8237e-09, 7.9421e-09, 9.0002e-09, 9.6841e-09, // f04980
677  9.9558e-09, 1.0232e-08, 1.0591e-08, 1.0657e-08, 1.0441e-08, // f04990
678  1.0719e-08, 1.1526e-08, 1.2962e-08, 1.4336e-08, 1.6150e-08, // f05000
679  1.8417e-08, 2.0725e-08, 2.3426e-08, 2.5619e-08, 2.7828e-08, // f05010
680  3.0563e-08, 3.3438e-08, 3.6317e-08, 4.0400e-08, 4.4556e-08, // f05020
681  5.0397e-08, 5.3315e-08, 5.9185e-08, 6.5311e-08, 6.9188e-08, // f05030
682  7.7728e-08, 7.9789e-08, 8.6598e-08, 8.7768e-08, 9.1773e-08, // f05050
683  9.7533e-08, 1.0007e-07, 1.0650e-07, 1.0992e-07, 1.0864e-07, // f05060
684  1.0494e-07, 1.0303e-07, 1.0031e-07, 1.0436e-07, 1.0537e-07, // f05070
685  1.1184e-07, 1.2364e-07, 1.3651e-07, 1.4881e-07, 1.4723e-07, // f05080
686  1.4118e-07, 1.3371e-07, 1.1902e-07, 1.0007e-07, 7.9628e-08, // f05090
687  6.4362e-08, 5.0243e-08, 3.8133e-08, 2.9400e-08, 2.3443e-08, // f05100
688  1.9319e-08, 1.6196e-08, 1.4221e-08, 1.2817e-08, 1.1863e-08, // f05110
689  1.1383e-08, 1.1221e-08, 1.1574e-08, 1.1661e-08, 1.2157e-08, // f05120
690  1.2883e-08, 1.3295e-08, 1.4243e-08, 1.4240e-08, 1.4614e-08, // f05130
691  1.4529e-08, 1.4685e-08, 1.4974e-08, 1.4790e-08, 1.4890e-08, // f05140
692  1.4704e-08, 1.4142e-08, 1.3374e-08, 1.2746e-08, 1.2172e-08, // f05160
693  1.2336e-08, 1.2546e-08, 1.3065e-08, 1.4090e-08, 1.5215e-08, // f05170
694  1.6540e-08, 1.6144e-08, 1.5282e-08, 1.4358e-08, 1.2849e-08, // f05180
695  1.0998e-08, 8.6956e-09, 7.0881e-09, 5.5767e-09, 4.2792e-09, // f05190
696  3.2233e-09, 2.5020e-09, 1.9985e-09, 1.5834e-09, 1.3015e-09, // f05200
697  1.0948e-09, 9.4141e-10, 8.1465e-10, 7.1517e-10, 6.2906e-10, // f05210
698  5.5756e-10, 4.9805e-10, 4.3961e-10, 3.9181e-10, 3.5227e-10, // f05220
699  3.1670e-10, 2.8667e-10, 2.5745e-10, 2.3212e-10, 2.0948e-10, // f05230
700  1.8970e-10, 1.7239e-10, 1.5659e-10, 1.4301e-10, 1.3104e-10, // f05240
701  1.2031e-10, 1.1095e-10, 1.0262e-10, 9.5130e-11, 8.8595e-11, // f05250
702  8.2842e-11, 7.7727e-11, 7.3199e-11, 6.9286e-11, 6.5994e-11, // f05270
703  6.3316e-11, 6.1244e-11, 5.9669e-11, 5.8843e-11, 5.8832e-11, // f05280
704  5.9547e-11, 6.1635e-11, 6.4926e-11, 7.0745e-11, 7.8802e-11, // f05290
705  8.6724e-11, 1.0052e-10, 1.1575e-10, 1.3626e-10, 1.5126e-10, // f05300
706  1.6751e-10, 1.9239e-10, 2.1748e-10, 2.2654e-10, 2.2902e-10, // f05310
707  2.3240e-10, 2.4081e-10, 2.3930e-10, 2.2378e-10, 2.2476e-10, // f05320
708  2.2791e-10, 2.4047e-10, 2.5305e-10, 2.8073e-10, 3.1741e-10, // f05330
709  3.6592e-10, 4.1495e-10, 4.6565e-10, 5.0990e-10, 5.5607e-10, // f05340
710  6.1928e-10, 6.6779e-10, 7.3350e-10, 8.1434e-10, 8.9635e-10, // f05350
711  9.9678e-10, 1.1256e-09, 1.2999e-09, 1.4888e-09, 1.7642e-09, // f05360
712  1.9606e-09, 2.2066e-09, 2.4601e-09, 2.7218e-09, 3.0375e-09, // f05380
713  3.1591e-09, 3.2852e-09, 3.2464e-09, 3.3046e-09, 3.2710e-09, // f05390
714  3.2601e-09, 3.3398e-09, 3.7446e-09, 4.0795e-09, 4.0284e-09, // f05400
715  4.0584e-09, 4.1677e-09, 4.5358e-09, 4.4097e-09, 4.2744e-09, // f05410
716  4.5449e-09, 4.8147e-09, 5.2656e-09, 5.2476e-09, 5.0275e-09, // f05420
717  4.7968e-09, 4.3654e-09, 3.9530e-09, 3.2447e-09, 2.6489e-09, // f05430
718  2.1795e-09, 1.7880e-09, 1.4309e-09, 1.1256e-09, 9.1903e-10, // f05440
719  7.6533e-10, 6.3989e-10, 5.5496e-10, 4.9581e-10, 4.5722e-10, // f05450
720  4.3898e-10, 4.3505e-10, 4.3671e-10, 4.5329e-10, 4.6827e-10, // f05460
721  4.9394e-10, 5.1122e-10, 5.1649e-10, 5.0965e-10, 4.9551e-10, // f05470
722  4.8928e-10, 4.7947e-10, 4.7989e-10, 4.9071e-10, 4.8867e-10, // f05490
723  4.7260e-10, 4.5756e-10, 4.5400e-10, 4.5993e-10, 4.4042e-10, // f05500
724  4.3309e-10, 4.4182e-10, 4.6735e-10, 5.0378e-10, 5.2204e-10, // f05510
725  5.0166e-10, 4.6799e-10, 4.3119e-10, 3.8803e-10, 3.3291e-10, // f05520
726  2.6289e-10, 2.1029e-10, 1.7011e-10, 1.3345e-10, 1.0224e-10, // f05530
727  7.8207e-11, 6.2451e-11, 5.0481e-11, 4.1507e-11, 3.5419e-11, // f05540
728  3.0582e-11, 2.6900e-11, 2.3778e-11, 2.1343e-11, 1.9182e-11, // f05550
729  1.7162e-11, 1.5391e-11, 1.3877e-11, 1.2619e-11, 1.1450e-11, // f05560
730  1.0461e-11, 9.6578e-12, 8.9579e-12, 8.3463e-12, 7.8127e-12, // f05570
731  7.3322e-12, 6.9414e-12, 6.6037e-12, 6.3285e-12, 6.1095e-12, // f05580
732  5.9387e-12, 5.8118e-12, 5.7260e-12, 5.6794e-12, 5.6711e-12, // f05600
733  5.7003e-12, 5.7670e-12, 5.8717e-12, 6.0151e-12, 6.1984e-12, // f05610
734  6.4232e-12, 6.6918e-12, 7.0065e-12, 7.3705e-12, 7.7873e-12, // f05620
735  8.2612e-12, 8.7972e-12, 9.4009e-12, 1.0079e-11, 1.0840e-11, // f05630
736  1.1692e-11, 1.2648e-11, 1.3723e-11, 1.4935e-11, 1.6313e-11, // f05640
737  1.7905e-11, 1.9740e-11, 2.1898e-11, 2.4419e-11, 2.7426e-11, // f05650
738  3.0869e-11, 3.4235e-11, 3.7841e-11, 4.1929e-11, 4.6776e-11, // f05660
739  5.2123e-11, 5.8497e-11, 6.5294e-11, 7.4038e-11, 8.4793e-11, // f05670
740  9.6453e-11, 1.1223e-10, 1.2786e-10, 1.4882e-10, 1.7799e-10, // f05680
741  2.0766e-10, 2.4523e-10, 2.8591e-10, 3.3386e-10, 4.0531e-10, // f05690
742  4.7663e-10, 5.4858e-10, 6.3377e-10, 7.1688e-10, 8.4184e-10, // f05710
743  9.5144e-10, 1.0481e-09, 1.1356e-09, 1.2339e-09, 1.3396e-09, // f05720
744  1.4375e-09, 1.5831e-09, 1.7323e-09, 1.9671e-09, 2.2976e-09, // f05730
745  2.6679e-09, 3.0777e-09, 3.4321e-09, 3.8192e-09, 4.2711e-09, // f05740
746  4.4903e-09, 4.8931e-09, 5.2253e-09, 5.4040e-09, 5.6387e-09, // f05750
747  5.6704e-09, 6.0345e-09, 6.1079e-09, 6.2576e-09, 6.4039e-09, // f05760
748  6.3776e-09, 6.1878e-09, 5.8616e-09, 5.7036e-09, 5.5840e-09, // f05770
749  5.6905e-09, 5.8931e-09, 6.2478e-09, 6.8291e-09, 7.4528e-09, // f05780
750  7.6078e-09, 7.3898e-09, 6.7573e-09, 5.9827e-09, 5.0927e-09, // f05790
751  4.0099e-09, 3.1933e-09, 2.4296e-09, 1.8485e-09, 1.4595e-09, // f05800
752  1.2017e-09, 1.0164e-09, 8.7433e-10, 7.7108e-10, 7.0049e-10, // f05820
753  6.5291e-10, 6.1477e-10, 5.9254e-10, 5.8150e-10, 5.7591e-10, // f05830
754  5.8490e-10, 5.8587e-10, 5.9636e-10, 6.2408e-10, 6.5479e-10, // f05840
755  7.0480e-10, 7.2313e-10, 7.5524e-10, 8.0863e-10, 8.3386e-10, // f05850
756  9.2342e-10, 9.6754e-10, 1.0293e-09, 1.0895e-09, 1.1330e-09, // f05860
757  1.2210e-09, 1.2413e-09, 1.2613e-09, 1.2671e-09, 1.2225e-09, // f05870
758  1.1609e-09, 1.0991e-09, 1.0600e-09, 1.0570e-09, 1.0818e-09, // f05880
759  1.1421e-09, 1.2270e-09, 1.3370e-09, 1.4742e-09, 1.4946e-09, // f05890
760  1.4322e-09, 1.3210e-09, 1.1749e-09, 1.0051e-09, 7.8387e-10, // f05900
761  6.1844e-10, 4.6288e-10, 3.4164e-10, 2.5412e-10, 1.9857e-10, // f05910
762  1.5876e-10, 1.2966e-10, 1.0920e-10, 9.4811e-11, 8.3733e-11, // f05930
763  7.3906e-11, 6.7259e-11, 6.1146e-11, 5.7119e-11, 5.3546e-11, // f05940
764  4.8625e-11, 4.4749e-11, 4.1089e-11, 3.7825e-11, 3.4465e-11, // f05950
765  3.1018e-11, 2.8109e-11, 2.5610e-11, 2.2859e-11, 2.0490e-11, // f05960
766  1.8133e-11, 1.5835e-11, 1.3949e-11, 1.2295e-11, 1.0799e-11, // f05970
767  9.6544e-12, 8.7597e-12, 7.9990e-12, 7.3973e-12, 6.9035e-12, // f05980
768  6.4935e-12, 6.1195e-12, 5.8235e-12, 5.5928e-12, 5.4191e-12, // f05990
769  5.2993e-12, 5.2338e-12, 5.2272e-12, 5.2923e-12, 5.4252e-12, // f06000
770  5.6523e-12, 5.9433e-12, 6.3197e-12, 6.9016e-12, 7.5016e-12, // f06010
771  8.2885e-12, 9.4050e-12, 1.0605e-11, 1.2257e-11, 1.3622e-11, // f06020
772  1.5353e-11, 1.7543e-11, 1.9809e-11, 2.2197e-11, 2.4065e-11, // f06040
773  2.6777e-11, 2.9751e-11, 3.2543e-11, 3.5536e-11, 3.9942e-11, // f06050
774  4.6283e-11, 5.4556e-11, 6.5490e-11, 7.6803e-11, 9.0053e-11, // f06060
775  1.0852e-10, 1.2946e-10, 1.4916e-10, 1.7748e-10, 2.0073e-10, // f06070
776  2.2485e-10, 2.5114e-10, 2.7715e-10, 3.1319e-10, 3.3305e-10, // f06080
777  3.5059e-10, 3.5746e-10, 3.6311e-10, 3.7344e-10, 3.6574e-10, // f06090
778  3.7539e-10, 3.9434e-10, 4.3510e-10, 4.3340e-10, 4.2588e-10, // f06100
779  4.3977e-10, 4.6062e-10, 4.7687e-10, 4.6457e-10, 4.8578e-10, // f06110
780  5.2344e-10, 5.6752e-10, 5.8702e-10, 5.6603e-10, 5.3784e-10, // f06120
781  4.9181e-10, 4.3272e-10, 3.5681e-10, 2.8814e-10, 2.3320e-10, // f06130
782  1.8631e-10, 1.4587e-10, 1.1782e-10, 9.8132e-11, 8.2528e-11, // f06150
783  6.9174e-11, 6.1056e-11, 5.3459e-11, 4.7116e-11, 4.1878e-11, // f06160
784  3.8125e-11, 3.6347e-11, 3.5071e-11, 3.3897e-11, 3.3541e-11, // f06170
785  3.3563e-11, 3.5469e-11, 3.8111e-11, 3.8675e-11, 4.1333e-11, // f06180
786  4.3475e-11, 4.6476e-11, 4.9761e-11, 5.1380e-11, 5.4135e-11, // f06190
787  5.3802e-11, 5.5158e-11, 5.6864e-11, 5.9311e-11, 6.3827e-11, // f06200
788  6.7893e-11, 6.8230e-11, 6.6694e-11, 6.6018e-11, 6.4863e-11, // f06210
789  6.5893e-11, 6.3813e-11, 6.4741e-11, 6.8630e-11, 7.0255e-11, // f06220
790  7.0667e-11, 6.8810e-11, 6.4104e-11, 5.8136e-11, 4.7242e-11, // f06230
791  3.7625e-11, 3.1742e-11, 2.5581e-11, 1.8824e-11, 1.3303e-11, // f06240
792  9.6919e-12, 7.5353e-12, 6.0986e-12, 5.0742e-12, 4.3094e-12, // f06260
793  3.7190e-12, 3.2520e-12, 2.8756e-12, 2.5680e-12, 2.3139e-12, // f06270
794  2.1025e-12, 1.9257e-12, 1.7777e-12, 1.6539e-12, 1.5508e-12, // f06280
795  1.4657e-12, 1.3966e-12, 1.3417e-12, 1.2998e-12, 1.2700e-12, // f06290
796  1.2514e-12, 1.2437e-12, 1.2463e-12, 1.2592e-12, 1.2823e-12, // f06300
797  1.3157e-12, 1.3596e-12, 1.4144e-12, 1.4806e-12, 1.5588e-12, // f06310
798  1.6497e-12, 1.7544e-12, 1.8738e-12, 2.0094e-12, 2.1626e-12, // f06320
799  2.3354e-12, 2.5297e-12, 2.7483e-12, 2.9941e-12, 3.2708e-12, // f06330
800  3.5833e-12, 3.9374e-12, 4.3415e-12, 4.8079e-12, 5.3602e-12, // f06340
801  5.9816e-12, 6.7436e-12, 7.6368e-12, 8.6812e-12, 9.8747e-12, // f06350
802  1.1350e-11, 1.3181e-11, 1.5406e-11, 1.7868e-11, 2.0651e-11, // f06370
803  2.4504e-11, 2.9184e-11, 3.4159e-11, 3.9979e-11, 4.8704e-11, // f06380
804  5.7856e-11, 6.7576e-11, 7.9103e-11, 9.4370e-11, 1.1224e-10, // f06390
805  1.3112e-10, 1.5674e-10, 1.8206e-10, 2.0576e-10, 2.3187e-10, // f06400
806  2.7005e-10, 3.0055e-10, 3.3423e-10, 3.6956e-10, 3.8737e-10, // f06410
807  4.2630e-10, 4.5154e-10, 4.8383e-10, 5.3582e-10, 5.8109e-10, // f06420
808  6.3741e-10, 6.3874e-10, 6.3870e-10, 6.5818e-10, 6.5056e-10, // f06430
809  6.5291e-10, 6.3159e-10, 6.3984e-10, 6.4549e-10, 6.5444e-10, // f06440
810  6.7035e-10, 6.7665e-10, 6.9124e-10, 6.8451e-10, 6.9255e-10, // f06450
811  6.9923e-10, 7.0396e-10, 6.7715e-10, 6.0371e-10, 5.3774e-10, // f06460
812  4.6043e-10, 3.7635e-10, 2.9484e-10, 2.2968e-10, 1.8185e-10, // f06480
813  1.4191e-10, 1.1471e-10, 9.4790e-11, 7.9613e-11, 6.7989e-11, // f06490
814  5.9391e-11, 5.2810e-11, 4.7136e-11, 4.2618e-11, 3.8313e-11, // f06500
815  3.4686e-11, 3.1669e-11, 2.9110e-11, 2.6871e-11, 2.5074e-11, // f06510
816  2.4368e-11, 2.3925e-11, 2.4067e-11, 2.4336e-11, 2.4704e-11, // f06520
817  2.5823e-11, 2.7177e-11, 2.9227e-11, 3.1593e-11, 3.5730e-11, // f06530
818  4.0221e-11, 4.3994e-11, 4.8448e-11, 5.3191e-11, 5.8552e-11, // f06540
819  6.3458e-11, 6.6335e-11, 7.2457e-11, 7.9091e-11, 8.2234e-11, // f06550
820  8.7668e-11, 8.7951e-11, 9.2952e-11, 9.6157e-11, 9.5926e-11, // f06560
821  1.0120e-10, 1.0115e-10, 9.9577e-11, 9.6633e-11, 9.2891e-11, // f06570
822  9.3315e-11, 9.5584e-11, 1.0064e-10, 1.0509e-10, 1.1455e-10, // f06590
823  1.2443e-10, 1.2963e-10, 1.2632e-10, 1.1308e-10, 1.0186e-10, // f06600
824  8.5880e-11, 6.7863e-11, 5.1521e-11, 3.7780e-11, 2.8842e-11, // f06610
825  2.2052e-11, 1.7402e-11, 1.4406e-11, 1.1934e-11, 1.0223e-11, // f06620
826  8.9544e-12, 7.9088e-12, 7.0675e-12, 6.2222e-12, 5.6051e-12, // f06630
827  5.0502e-12, 4.5578e-12, 4.2636e-12, 3.9461e-12, 3.7599e-12, // f06640
828  3.5215e-12, 3.2467e-12, 3.0018e-12, 2.6558e-12, 2.3928e-12, // f06650
829  2.0707e-12, 1.7575e-12, 1.5114e-12, 1.2941e-12, 1.1004e-12, // f06660
830  9.5175e-13, 8.2894e-13, 7.3253e-13, 6.5551e-13, 5.9098e-13, // f06670
831  5.3548e-13, 4.8697e-13, 4.4413e-13, 4.0600e-13, 3.7188e-13, // f06680
832  3.4121e-13, 3.1356e-13, 2.8856e-13, 2.6590e-13, 2.4533e-13, // f06700
833  2.2663e-13, 2.0960e-13, 1.9407e-13, 1.7990e-13, 1.6695e-13, // f06710
834  1.5512e-13, 1.4429e-13, 1.3437e-13, 1.2527e-13, 1.1693e-13, // f06720
835  1.0927e-13, 1.0224e-13, 9.5767e-14, 8.9816e-14, 8.4335e-14, // f06730
836  7.9285e-14, 7.4626e-14, 7.0325e-14, 6.6352e-14, 6.2676e-14, // f06740
837  5.9274e-14, 5.6121e-14, 5.3195e-14, 5.0479e-14, 4.7953e-14, // f06750
838  4.5602e-14, 4.3411e-14, 4.1367e-14, 3.9456e-14, 3.7670e-14, // f06760
839  3.5996e-14, 3.4427e-14, 3.2952e-14, 3.1566e-14, 3.0261e-14, // f06770
840  2.9030e-14, 2.7868e-14, 2.6770e-14, 2.5730e-14, 2.4745e-14, // f06780
841  2.3809e-14, 2.2921e-14, 2.2076e-14, 2.1271e-14, 2.0504e-14, // f06790
842  1.9772e-14, 1.9073e-14, 1.8404e-14, 1.7764e-14, 1.7151e-14, // f06810
843  1.6564e-14, 1.6000e-14, 1.5459e-14, 1.4939e-14, 1.4439e-14, // f06820
844  1.3958e-14, 1.3495e-14, 1.3049e-14, 1.2620e-14, 1.2206e-14, // f06830
845  1.1807e-14, 1.1422e-14, 1.1050e-14, 1.0691e-14, 1.0345e-14, // f06840
846  1.0010e-14, 9.6870e-15, 9.3747e-15, 9.0727e-15, 8.7808e-15, // f06850
847  8.4986e-15, 8.2257e-15, 7.9617e-15, 7.7064e-15, 7.4594e-15, // f06860
848  7.2204e-15, 6.9891e-15, 6.7653e-15, 6.5488e-15, 6.3392e-15, // f06870
849  6.1363e-15, 5.9399e-15, 5.7499e-15, 5.5659e-15, 5.3878e-15, // f06880
850  5.2153e-15, 5.0484e-15, 4.8868e-15, 4.7303e-15, 4.5788e-15, // f06890
851  4.4322e-15, 4.2902e-15, 4.1527e-15, 4.0196e-15, 3.8907e-15, // f06900
852  3.7659e-15, 3.6451e-15, 3.5281e-15, 3.4149e-15, 3.3052e-15, // f06920
853  3.1991e-15, 3.0963e-15, 2.9967e-15, 2.9004e-15, 2.8071e-15, // f06930
854  2.7167e-15, 2.6293e-15, 2.5446e-15, 2.4626e-15, 2.3833e-15, // f06940
855  2.3064e-15, 2.2320e-15, 2.1600e-15, 2.0903e-15, 2.0228e-15, // f06950
856  1.9574e-15, 1.8942e-15, 1.8329e-15, 1.7736e-15, 1.7163e-15, // f06960
857  1.6607e-15, 1.6069e-15, 1.5548e-15, 1.5044e-15, 1.4557e-15, // f06970
858  1.4084e-15, 1.3627e-15, 1.3185e-15, 1.2757e-15, 1.2342e-15, // f06980
859  1.1941e-15, 1.1552e-15, 1.1177e-15, 1.0813e-15, 1.0461e-15, // f06990
860  1.0120e-15, 9.7900e-16, 9.4707e-16, 9.1618e-16, 8.8628e-16, // f07000
861  8.5734e-16, 8.2933e-16, 8.0223e-16, 7.7600e-16, 7.5062e-16, // f07010
862  7.2606e-16, 7.0229e-16, 6.7929e-16, 6.5703e-16, 6.3550e-16, // f07030
863  6.1466e-16, 5.9449e-16, 5.7498e-16, 5.5610e-16, 5.3783e-16, // f07040
864  5.2015e-16, 5.0305e-16, 4.8650e-16, 4.7049e-16, 4.5500e-16, // f07050
865  4.4002e-16, 4.2552e-16, 4.1149e-16, 3.9792e-16, 3.8479e-16, // f07060
866  3.7209e-16, 3.5981e-16, 3.4792e-16, 3.3642e-16, 3.2530e-16, // f07070
867  3.1454e-16, 3.0413e-16, 2.9406e-16, 2.8432e-16, 2.7490e-16, // f07080
868  2.6579e-16, 2.5697e-16, 2.4845e-16, 2.4020e-16, 2.3223e-16, // f07090
869  2.2451e-16, 2.1705e-16, 2.0984e-16, 2.0286e-16, 1.9611e-16, // f07100
870  1.8958e-16, 1.8327e-16, 1.7716e-16, 1.7126e-16, 1.6555e-16, // f07110
871  1.6003e-16, 1.5469e-16, 1.4952e-16, 1.4453e-16, 1.3970e-16, // f07120
872  1.3503e-16};
873 
874 
875 
876 // H2O foreign continuum parameters at T=296 K for the CKD versions 0 to 2.4.2
877 // date of last update: 06/28/82
878 // units of (CM**3/MOL)*1.E-20
879 const Numeric FH2O_ckd_0_v1 = -20.0;
880 const Numeric FH2O_ckd_0_v2 = 20000.0;
881 const Numeric FH2O_ckd_0_dv = 10.0;
882 const int FH2O_ckd_0_npt = 2003;
884  0.0000e-00, 1.2859E-02, 1.1715E-02,
885  1.1038E-02, 1.1715E-02, 1.2859E-02, 1.5326E-02, 1.6999E-02, // F12660
886  1.8321E-02, 1.9402E-02, 1.9570E-02, 1.9432E-02, 1.7572E-02, // F12670
887  1.6760E-02, 1.5480E-02, 1.3984E-02, 1.2266E-02, 1.0467E-02, // F12680
888  9.4526E-03, 8.0485E-03, 6.9484E-03, 6.1416E-03, 5.0941E-03, // F12690
889  4.4836E-03, 3.8133E-03, 3.4608E-03, 3.1487E-03, 2.4555E-03, // F12700
890  2.0977E-03, 1.7266E-03, 1.4920E-03, 1.2709E-03, 9.8081E-04, // F12710
891  8.5063E-04, 6.8822E-04, 5.3809E-04, 4.4679E-04, 3.3774E-04, // F12720
892  2.7979E-04, 2.1047E-04, 1.6511E-04, 1.2993E-04, 9.3033E-05, // F12730
893  7.4360E-05, 5.6428E-05, 4.5442E-05, 3.4575E-05, 2.7903E-05, // F12740
894  2.1374E-05, 1.6075E-05, 1.3022E-05, 1.0962E-05, 8.5959E-06, // F12750
895  6.9125E-06, 5.3808E-06, 4.3586E-06, 3.6394E-06, 2.9552E-06, // F12770
896  2.3547E-06, 1.8463E-06, 1.6036E-06, 1.3483E-06, 1.1968E-06, // F12780
897  1.0333E-06, 8.4484E-07, 6.7195E-07, 5.0947E-07, 4.2343E-07, // F12790
898  3.4453E-07, 2.7830E-07, 2.3063E-07, 1.9951E-07, 1.7087E-07, // F12800
899  1.4393E-07, 1.2575E-07, 1.0750E-07, 8.2325E-08, 5.7524E-08, // F12810
900  4.4482E-08, 3.8106E-08, 3.4315E-08, 2.9422E-08, 2.5069E-08, // F12820
901  2.2402E-08, 1.9349E-08, 1.6152E-08, 1.2208E-08, 8.9660E-09, // F12830
902  7.1322E-09, 6.1028E-09, 5.2938E-09, 4.5350E-09, 3.4977E-09, // F12840
903  2.9511E-09, 2.4734E-09, 2.0508E-09, 1.8507E-09, 1.6373E-09, // F12850
904  1.5171E-09, 1.3071E-09, 1.2462E-09, 1.2148E-09, 1.2590E-09, // F12860
905  1.3153E-09, 1.3301E-09, 1.4483E-09, 1.6944E-09, 2.0559E-09, // F12880
906  2.2954E-09, 2.6221E-09, 3.2606E-09, 4.2392E-09, 5.2171E-09, // F12890
907  6.2553E-09, 8.2548E-09, 9.5842E-09, 1.1280E-08, 1.3628E-08, // F12900
908  1.7635E-08, 2.1576E-08, 2.4835E-08, 3.0014E-08, 3.8485E-08, // F12910
909  4.7440E-08, 5.5202E-08, 7.0897E-08, 9.6578E-08, 1.3976E-07, // F12920
910  1.8391E-07, 2.3207E-07, 2.9960E-07, 4.0408E-07, 5.9260E-07, // F12930
911  7.8487E-07, 1.0947E-06, 1.4676E-06, 1.9325E-06, 2.6587E-06, // F12940
912  3.4534E-06, 4.4376E-06, 5.8061E-06, 7.0141E-06, 8.4937E-06, // F12950
913  1.0186E-05, 1.2034E-05, 1.3837E-05, 1.6595E-05, 1.9259E-05, // F12960
914  2.1620E-05, 2.3681E-05, 2.7064E-05, 3.2510E-05, 3.5460E-05, // F12970
915  3.9109E-05, 4.2891E-05, 4.7757E-05, 5.0981E-05, 5.0527E-05, // F12990
916  4.8618E-05, 4.4001E-05, 3.7982E-05, 3.2667E-05, 2.7794E-05, // F13000
917  2.4910E-05, 2.4375E-05, 2.7316E-05, 3.2579E-05, 3.5499E-05, // F13010
918  3.8010E-05, 4.1353E-05, 4.3323E-05, 4.3004E-05, 3.9790E-05, // F13020
919  3.7718E-05, 3.6360E-05, 3.2386E-05, 2.7409E-05, 2.3626E-05, // F13030
920  2.0631E-05, 1.8371E-05, 1.5445E-05, 1.2989E-05, 1.1098E-05, // F13040
921  9.6552E-06, 8.0649E-06, 7.2365E-06, 5.9137E-06, 5.2759E-06, // F13050
922  4.8860E-06, 4.1321E-06, 3.5918E-06, 2.7640E-06, 2.4892E-06, // F13060
923  2.1018E-06, 1.7848E-06, 1.5855E-06, 1.3569E-06, 1.1986E-06, // F13070
924  9.4693E-07, 7.4097E-07, 6.3443E-07, 4.8131E-07, 4.0942E-07, // F13080
925  3.3316E-07, 2.8488E-07, 2.3461E-07, 1.7397E-07, 1.4684E-07, // F13100
926  1.0953E-07, 8.5396E-08, 6.9261E-08, 5.4001E-08, 4.5430E-08, // F13110
927  3.2791E-08, 2.5995E-08, 2.0225E-08, 1.5710E-08, 1.3027E-08, // F13120
928  1.0229E-08, 8.5277E-09, 6.5249E-09, 5.0117E-09, 3.9906E-09, // F13130
929  3.2332E-09, 2.7847E-09, 2.4570E-09, 2.3359E-09, 2.0599E-09, // F13140
930  1.8436E-09, 1.6559E-09, 1.4910E-09, 1.2794E-09, 9.8229E-10, // F13150
931  8.0054E-10, 6.0769E-10, 4.5646E-10, 3.3111E-10, 2.4428E-10, // F13160
932  1.8007E-10, 1.3291E-10, 9.7974E-11, 7.8271E-11, 6.3833E-11, // F13170
933  5.4425E-11, 4.6471E-11, 4.0209E-11, 3.5227E-11, 3.1212E-11, // F13180
934  2.8840E-11, 2.7762E-11, 2.7935E-11, 3.2012E-11, 3.9525E-11, // F13190
935  5.0303E-11, 6.8027E-11, 9.3954E-11, 1.2986E-10, 1.8478E-10, // F13210
936  2.5331E-10, 3.4827E-10, 4.6968E-10, 6.2380E-10, 7.9106E-10, // F13220
937  1.0026E-09, 1.2102E-09, 1.4146E-09, 1.6154E-09, 1.7510E-09, // F13230
938  1.8575E-09, 1.8742E-09, 1.8700E-09, 1.8582E-09, 1.9657E-09, // F13240
939  2.1204E-09, 2.0381E-09, 2.0122E-09, 2.0436E-09, 2.1213E-09, // F13250
940  2.0742E-09, 1.9870E-09, 2.0465E-09, 2.1556E-09, 2.2222E-09, // F13260
941  2.1977E-09, 2.1047E-09, 1.9334E-09, 1.7357E-09, 1.5754E-09, // F13270
942  1.4398E-09, 1.4018E-09, 1.5459E-09, 1.7576E-09, 2.1645E-09, // F13280
943  2.9480E-09, 4.4439E-09, 5.8341E-09, 8.0757E-09, 1.1658E-08, // F13290
944  1.6793E-08, 2.2694E-08, 2.9468E-08, 3.9278E-08, 5.2145E-08, // F13300
945  6.4378E-08, 7.7947E-08, 8.5321E-08, 9.7848E-08, 1.0999E-07, // F13320
946  1.1489E-07, 1.2082E-07, 1.2822E-07, 1.4053E-07, 1.5238E-07, // F13330
947  1.5454E-07, 1.5018E-07, 1.4048E-07, 1.2359E-07, 1.0858E-07, // F13340
948  9.3486E-08, 8.1638E-08, 7.7690E-08, 8.4625E-08, 1.0114E-07, // F13350
949  1.1430E-07, 1.2263E-07, 1.3084E-07, 1.3380E-07, 1.3573E-07, // F13360
950  1.3441E-07, 1.2962E-07, 1.2638E-07, 1.1934E-07, 1.1371E-07, // F13370
951  1.0871E-07, 9.8843E-08, 9.1877E-08, 9.1050E-08, 9.3213E-08, // F13380
952  9.2929E-08, 1.0155E-07, 1.1263E-07, 1.2370E-07, 1.3636E-07, // F13390
953  1.5400E-07, 1.7656E-07, 2.1329E-07, 2.3045E-07, 2.5811E-07, // F13400
954  2.9261E-07, 3.4259E-07, 4.0770E-07, 4.8771E-07, 5.8081E-07, // F13410
955  7.2895E-07, 8.7482E-07, 1.0795E-06, 1.3384E-06, 1.7208E-06, // F13430
956  2.0677E-06, 2.5294E-06, 3.1123E-06, 3.7900E-06, 4.7752E-06, // F13440
957  5.6891E-06, 6.6261E-06, 7.6246E-06, 8.7730E-06, 9.6672E-06, // F13450
958  1.0980E-05, 1.1287E-05, 1.1670E-05, 1.1635E-05, 1.1768E-05, // F13460
959  1.2039E-05, 1.2253E-05, 1.3294E-05, 1.4005E-05, 1.3854E-05, // F13470
960  1.3420E-05, 1.3003E-05, 1.2645E-05, 1.1715E-05, 1.1258E-05, // F13480
961  1.1516E-05, 1.2494E-05, 1.3655E-05, 1.4931E-05, 1.4649E-05, // F13490
962  1.3857E-05, 1.3120E-05, 1.1791E-05, 1.0637E-05, 8.2760E-06, // F13500
963  6.5821E-06, 5.1959E-06, 4.0158E-06, 3.0131E-06, 2.0462E-06, // F13510
964  1.4853E-06, 1.0365E-06, 7.3938E-07, 4.9752E-07, 3.4148E-07, // F13520
965  2.4992E-07, 1.8363E-07, 1.4591E-07, 1.1380E-07, 9.0588E-08, // F13540
966  7.3697E-08, 6.0252E-08, 5.1868E-08, 4.2660E-08, 3.6163E-08, // F13550
967  3.2512E-08, 2.9258E-08, 2.4238E-08, 2.1209E-08, 1.6362E-08, // F13560
968  1.3871E-08, 1.2355E-08, 9.6940E-09, 7.7735E-09, 6.2278E-09, // F13570
969  5.2282E-09, 4.3799E-09, 3.5545E-09, 2.7527E-09, 2.0950E-09, // F13580
970  1.6344E-09, 1.2689E-09, 1.0403E-09, 8.4880E-10, 6.3461E-10, // F13590
971  4.7657E-10, 3.5220E-10, 2.7879E-10, 2.3021E-10, 1.6167E-10, // F13600
972  1.1732E-10, 8.9206E-11, 7.0596E-11, 5.8310E-11, 4.4084E-11, // F13610
973  3.1534E-11, 2.5068E-11, 2.2088E-11, 2.2579E-11, 2.2637E-11, // F13620
974  2.5705E-11, 3.2415E-11, 4.6116E-11, 6.5346E-11, 9.4842E-11, // F13630
975  1.2809E-10, 1.8211E-10, 2.4052E-10, 3.0270E-10, 3.5531E-10, // F13650
976  4.2402E-10, 4.6730E-10, 4.7942E-10, 4.6813E-10, 4.5997E-10, // F13660
977  4.5788E-10, 4.0311E-10, 3.7367E-10, 3.3149E-10, 2.9281E-10, // F13670
978  2.5231E-10, 2.1152E-10, 1.9799E-10, 1.8636E-10, 1.9085E-10, // F13680
979  2.0786E-10, 2.2464E-10, 2.3785E-10, 2.5684E-10, 2.7499E-10, // F13690
980  2.6962E-10, 2.6378E-10, 2.6297E-10, 2.6903E-10, 2.7035E-10, // F13700
981  2.5394E-10, 2.5655E-10, 2.7184E-10, 2.9013E-10, 3.0585E-10, // F13710
982  3.0791E-10, 3.1667E-10, 3.4343E-10, 3.7365E-10, 4.0269E-10, // F13720
983  4.7260E-10, 5.6584E-10, 6.9791E-10, 8.6569E-10, 1.0393E-09, // F13730
984  1.2067E-09, 1.5047E-09, 1.8583E-09, 2.2357E-09, 2.6498E-09, // F13740
985  3.2483E-09, 3.9927E-09, 4.6618E-09, 5.5555E-09, 6.6609E-09, // F13760
986  8.2139E-09, 1.0285E-08, 1.3919E-08, 1.8786E-08, 2.5150E-08, // F13770
987  3.3130E-08, 4.5442E-08, 6.3370E-08, 9.0628E-08, 1.2118E-07, // F13780
988  1.5927E-07, 2.1358E-07, 2.7825E-07, 3.7671E-07, 4.4894E-07, // F13790
989  5.4442E-07, 6.2240E-07, 7.3004E-07, 8.3384E-07, 8.7933E-07, // F13800
990  8.8080E-07, 8.6939E-07, 8.6541E-07, 8.2055E-07, 7.7278E-07, // F13810
991  7.5989E-07, 8.6909E-07, 9.7945E-07, 1.0394E-06, 1.0646E-06, // F13820
992  1.1509E-06, 1.2017E-06, 1.1915E-06, 1.1259E-06, 1.1549E-06, // F13830
993  1.1938E-06, 1.2356E-06, 1.2404E-06, 1.1716E-06, 1.1149E-06, // F13840
994  1.0073E-06, 8.9845E-07, 7.6639E-07, 6.1517E-07, 5.0887E-07, // F13850
995  4.1269E-07, 3.2474E-07, 2.5698E-07, 1.8893E-07, 1.4009E-07, // F13870
996  1.0340E-07, 7.7724E-08, 5.7302E-08, 4.2178E-08, 2.9603E-08, // F13880
997  2.1945E-08, 1.6301E-08, 1.2806E-08, 1.0048E-08, 7.8970E-09, // F13890
998  6.1133E-09, 4.9054E-09, 4.1985E-09, 3.6944E-09, 3.2586E-09, // F13900
999  2.7362E-09, 2.3647E-09, 2.1249E-09, 1.8172E-09, 1.6224E-09, // F13910
1000  1.5158E-09, 1.2361E-09, 1.0682E-09, 9.2312E-10, 7.9220E-10, // F13920
1001  6.8174E-10, 5.6147E-10, 4.8268E-10, 4.1534E-10, 3.3106E-10, // F13930
1002  2.8275E-10, 2.4584E-10, 2.0742E-10, 1.7840E-10, 1.4664E-10, // F13940
1003  1.2390E-10, 1.0497E-10, 8.5038E-11, 6.7008E-11, 5.6355E-11, // F13950
1004  4.3323E-11, 3.6914E-11, 3.2262E-11, 3.0749E-11, 3.0318E-11, // F13960
1005  2.9447E-11, 2.9918E-11, 3.0668E-11, 3.1315E-11, 3.0329E-11, // F13980
1006  2.8259E-11, 2.6065E-11, 2.3578E-11, 2.0469E-11, 1.6908E-11, // F13990
1007  1.4912E-11, 1.1867E-11, 9.9730E-12, 8.1014E-12, 6.7528E-12, // F14000
1008  6.3133E-12, 5.8599E-12, 6.0145E-12, 6.5105E-12, 7.0537E-12, // F14010
1009  7.4973E-12, 7.8519E-12, 8.5039E-12, 9.1995E-12, 1.0694E-11, // F14020
1010  1.1659E-11, 1.2685E-11, 1.3087E-11, 1.3222E-11, 1.2634E-11, // F14030
1011  1.1077E-11, 9.6259E-12, 8.3202E-12, 7.4857E-12, 6.8069E-12, // F14040
1012  6.7496E-12, 7.3116E-12, 8.0171E-12, 8.6394E-12, 9.2659E-12, // F14050
1013  1.0048E-11, 1.0941E-11, 1.2226E-11, 1.3058E-11, 1.5193E-11, // F14060
1014  1.8923E-11, 2.3334E-11, 2.8787E-11, 3.6693E-11, 4.8295E-11, // F14070
1015  6.4260E-11, 8.8269E-11, 1.1865E-10, 1.5961E-10, 2.0605E-10, // F14090
1016  2.7349E-10, 3.7193E-10, 4.8216E-10, 6.1966E-10, 7.7150E-10, // F14100
1017  1.0195E-09, 1.2859E-09, 1.6535E-09, 2.0316E-09, 2.3913E-09, // F14110
1018  3.0114E-09, 3.7495E-09, 4.6504E-09, 5.9145E-09, 7.6840E-09, // F14120
1019  1.0304E-08, 1.3010E-08, 1.6441E-08, 2.1475E-08, 2.5892E-08, // F14130
1020  2.9788E-08, 3.3820E-08, 4.0007E-08, 4.4888E-08, 4.5765E-08, // F14140
1021  4.6131E-08, 4.6239E-08, 4.4849E-08, 4.0729E-08, 3.6856E-08, // F14150
1022  3.6164E-08, 3.7606E-08, 4.1457E-08, 4.3750E-08, 5.1150E-08, // F14160
1023  5.6054E-08, 6.1586E-08, 6.4521E-08, 6.6494E-08, 6.9024E-08, // F14170
1024  6.8893E-08, 7.0901E-08, 6.9760E-08, 7.1485E-08, 7.0740E-08, // F14180
1025  7.3764E-08, 7.6618E-08, 8.4182E-08, 9.3838E-08, 1.0761E-07, // F14200
1026  1.2851E-07, 1.4748E-07, 1.8407E-07, 2.2109E-07, 2.6392E-07, // F14210
1027  2.9887E-07, 3.4493E-07, 4.0336E-07, 4.3551E-07, 4.9231E-07, // F14220
1028  5.0728E-07, 5.3781E-07, 5.3285E-07, 5.4496E-07, 5.5707E-07, // F14230
1029  5.6944E-07, 6.1123E-07, 6.4317E-07, 6.4581E-07, 6.1999E-07, // F14240
1030  6.0191E-07, 5.7762E-07, 5.7241E-07, 5.7013E-07, 6.0160E-07, // F14250
1031  6.6905E-07, 7.4095E-07, 8.2121E-07, 8.0947E-07, 7.6145E-07, // F14260
1032  7.2193E-07, 6.3722E-07, 5.4316E-07, 4.2186E-07, 3.2528E-07, // F14270
1033  2.5207E-07, 1.8213E-07, 1.2658E-07, 8.6746E-08, 6.0216E-08, // F14280
1034  4.1122E-08, 2.8899E-08, 2.1740E-08, 1.7990E-08, 1.5593E-08, // F14290
1035  1.3970E-08, 1.2238E-08, 1.0539E-08, 9.2386E-09, 7.8481E-09, // F14310
1036  6.8704E-09, 5.7615E-09, 5.0434E-09, 4.6886E-09, 4.3770E-09, // F14320
1037  3.9768E-09, 3.5202E-09, 3.1854E-09, 2.9009E-09, 2.5763E-09, // F14330
1038  2.2135E-09, 1.9455E-09, 1.6248E-09, 1.3368E-09, 1.0842E-09, // F14340
1039  8.4254E-10, 6.7414E-10, 5.4667E-10, 4.5005E-10, 3.4932E-10, // F14350
1040  2.6745E-10, 2.2053E-10, 1.8162E-10, 1.4935E-10, 1.1618E-10, // F14360
1041  9.1888E-11, 8.0672E-11, 6.8746E-11, 6.2668E-11, 5.5715E-11, // F14370
1042  4.5074E-11, 3.7669E-11, 3.2082E-11, 2.8085E-11, 2.4838E-11, // F14380
1043  1.9791E-11, 1.6964E-11, 1.3887E-11, 1.1179E-11, 9.7499E-12, // F14390
1044  7.8255E-12, 6.3698E-12, 5.3265E-12, 4.6588E-12, 4.4498E-12, // F14400
1045  3.9984E-12, 3.7513E-12, 3.7176E-12, 3.9148E-12, 4.2702E-12, // F14420
1046  5.0090E-12, 6.5801E-12, 8.7787E-12, 1.2718E-11, 1.8375E-11, // F14430
1047  2.5304E-11, 3.5403E-11, 4.8842E-11, 6.4840E-11, 8.0911E-11, // F14440
1048  1.0136E-10, 1.2311E-10, 1.4203E-10, 1.5869E-10, 1.8093E-10, // F14450
1049  2.1370E-10, 2.5228E-10, 2.8816E-10, 3.4556E-10, 3.9860E-10, // F14460
1050  4.4350E-10, 4.7760E-10, 5.2357E-10, 6.0827E-10, 6.3635E-10, // F14470
1051  6.5886E-10, 6.8753E-10, 7.2349E-10, 7.2789E-10, 6.8232E-10, // F14480
1052  6.6081E-10, 6.4232E-10, 6.3485E-10, 6.4311E-10, 7.2235E-10, // F14490
1053  7.7263E-10, 8.1668E-10, 9.0324E-10, 9.7643E-10, 1.0535E-09, // F14500
1054  1.0195E-09, 1.0194E-09, 1.0156E-09, 9.6792E-10, 9.2725E-10, // F14510
1055  8.7347E-10, 8.4484E-10, 8.2647E-10, 8.4363E-10, 9.1261E-10, // F14530
1056  1.0051E-09, 1.1511E-09, 1.4037E-09, 1.8066E-09, 2.4483E-09, // F14540
1057  3.2739E-09, 4.3194E-09, 5.6902E-09, 7.7924E-09, 9.7376E-09, // F14550
1058  1.2055E-08, 1.4303E-08, 1.6956E-08, 1.9542E-08, 2.2233E-08, // F14560
1059  2.5186E-08, 2.7777E-08, 2.8943E-08, 2.8873E-08, 2.9417E-08, // F14570
1060  2.7954E-08, 2.7524E-08, 2.7040E-08, 3.1254E-08, 3.6843E-08, // F14580
1061  3.7797E-08, 3.8713E-08, 4.0135E-08, 4.2824E-08, 4.3004E-08, // F14590
1062  4.0279E-08, 4.2781E-08, 4.5220E-08, 4.8948E-08, 5.0172E-08, // F14600
1063  4.8499E-08, 4.7182E-08, 4.2204E-08, 3.7701E-08, 3.0972E-08, // F14610
1064  2.4654E-08, 1.9543E-08, 1.4609E-08, 1.1171E-08, 8.3367E-09, // F14620
1065  6.3791E-09, 5.0790E-09, 4.0655E-09, 3.3658E-09, 2.7882E-09, // F14640
1066  2.4749E-09, 2.2287E-09, 2.0217E-09, 1.8191E-09, 1.5897E-09, // F14650
1067  1.4191E-09, 1.2448E-09, 1.0884E-09, 9.3585E-10, 7.9429E-10, // F14660
1068  7.3214E-10, 6.5008E-10, 5.7549E-10, 5.4300E-10, 4.7251E-10, // F14670
1069  4.3451E-10, 3.8446E-10, 3.5589E-10, 3.4432E-10, 2.8209E-10, // F14680
1070  2.4620E-10, 2.1278E-10, 1.8406E-10, 1.6314E-10, 1.3261E-10, // F14690
1071  1.1696E-10, 9.6865E-11, 7.6814E-11, 6.6411E-11, 5.0903E-11, // F14700
1072  4.0827E-11, 3.0476E-11, 2.3230E-11, 1.7707E-11, 1.3548E-11, // F14710
1073  1.0719E-11, 9.3026E-12, 8.7967E-12, 8.3136E-12, 7.3918E-12, // F14720
1074  6.5293E-12, 5.9243E-12, 5.3595E-12, 3.5266E-12, 2.2571E-12, // F14730
1075  1.6150E-12, 1.1413E-12, 8.4998E-13, 7.0803E-13, 5.1747E-13, // F14750
1076  4.0694E-13, 3.6528E-13, 3.3670E-13, 3.1341E-13, 2.9390E-13, // F14760
1077  2.8680E-13, 3.1283E-13, 3.7294E-13, 5.0194E-13, 6.7919E-13, // F14770
1078  1.0455E-12, 1.5230E-12, 2.3932E-12, 3.4231E-12, 5.0515E-12, // F14780
1079  7.3193E-12, 9.9406E-12, 1.2193E-11, 1.4742E-11, 1.9269E-11, // F14790
1080  2.1816E-11, 2.2750E-11, 2.2902E-11, 2.3888E-11, 2.4902E-11, // F14800
1081  2.2160E-11, 2.0381E-11, 1.9903E-11, 2.0086E-11, 1.9304E-11, // F14810
1082  2.0023E-11, 2.2244E-11, 2.5450E-11, 3.1228E-11, 3.4560E-11, // F14820
1083  3.6923E-11, 3.7486E-11, 3.8124E-11, 3.8317E-11, 3.4737E-11, // F14830
1084  3.3037E-11, 3.1724E-11, 2.9840E-11, 2.8301E-11, 2.5857E-11, // F14840
1085  2.3708E-11, 1.9452E-11, 1.6232E-11, 1.5174E-11, 1.4206E-11, // F14860
1086  1.4408E-11, 1.5483E-11, 1.8642E-11, 2.3664E-11, 3.0181E-11, // F14870
1087  4.0160E-11, 5.2287E-11, 7.2754E-11, 1.0511E-10, 1.4531E-10, // F14880
1088  2.0998E-10, 2.6883E-10, 3.3082E-10, 4.2638E-10, 5.3132E-10, // F14890
1089  6.3617E-10, 7.1413E-10, 8.5953E-10, 9.9715E-10, 1.0796E-09, // F14900
1090  1.0978E-09, 1.1052E-09, 1.1095E-09, 1.0641E-09, 9.7881E-10, // F14910
1091  9.6590E-10, 1.0332E-09, 1.1974E-09, 1.3612E-09, 1.5829E-09, // F14920
1092  1.8655E-09, 2.1465E-09, 2.4779E-09, 2.7370E-09, 2.9915E-09, // F14930
1093  3.3037E-09, 3.6347E-09, 3.9587E-09, 4.4701E-09, 5.0122E-09, // F14940
1094  5.8044E-09, 6.1916E-09, 6.9613E-09, 7.7863E-09, 8.2820E-09, // F14950
1095  9.4359E-09, 9.7387E-09, 1.0656E-08, 1.0746E-08, 1.1210E-08, // F14970
1096  1.1905E-08, 1.2194E-08, 1.3145E-08, 1.3738E-08, 1.3634E-08, // F14980
1097  1.3011E-08, 1.2511E-08, 1.1805E-08, 1.2159E-08, 1.2390E-08, // F14990
1098  1.3625E-08, 1.5678E-08, 1.7886E-08, 1.9933E-08, 1.9865E-08, // F15000
1099  1.9000E-08, 1.7812E-08, 1.5521E-08, 1.2593E-08, 9.5635E-09, // F15010
1100  7.2987E-09, 5.2489E-09, 3.5673E-09, 2.4206E-09, 1.6977E-09, // F15020
1101  1.2456E-09, 9.3744E-10, 7.8379E-10, 6.9960E-10, 6.6451E-10, // F15030
1102  6.8521E-10, 7.4234E-10, 8.6658E-10, 9.4972E-10, 1.0791E-09, // F15040
1103  1.2359E-09, 1.3363E-09, 1.5025E-09, 1.5368E-09, 1.6152E-09, // F15050
1104  1.6184E-09, 1.6557E-09, 1.7035E-09, 1.6916E-09, 1.7237E-09, // F15060
1105  1.7175E-09, 1.6475E-09, 1.5335E-09, 1.4272E-09, 1.3282E-09, // F15080
1106  1.3459E-09, 1.4028E-09, 1.5192E-09, 1.7068E-09, 1.9085E-09, // F15090
1107  2.1318E-09, 2.1020E-09, 1.9942E-09, 1.8654E-09, 1.6391E-09, // F15100
1108  1.3552E-09, 1.0186E-09, 7.8540E-10, 5.7022E-10, 3.9247E-10, // F15110
1109  2.5441E-10, 1.6699E-10, 1.1132E-10, 6.8989E-11, 4.5255E-11, // F15120
1110  3.1106E-11, 2.3161E-11, 1.7618E-11, 1.4380E-11, 1.1601E-11, // F15130
1111  9.7148E-12, 8.4519E-12, 6.5392E-12, 5.4113E-12, 4.7624E-12, // F15140
1112  4.0617E-12, 3.6173E-12, 2.8608E-12, 2.2724E-12, 1.7436E-12, // F15150
1113  1.3424E-12, 1.0358E-12, 7.3064E-13, 5.4500E-13, 4.0551E-13, // F15160
1114  2.8642E-13, 2.1831E-13, 1.6860E-13, 1.2086E-13, 1.0150E-13, // F15170
1115  9.3550E-14, 8.4105E-14, 7.3051E-14, 6.9796E-14, 7.9949E-14, // F15190
1116  1.0742E-13, 1.5639E-13, 2.1308E-13, 3.1226E-13, 4.6853E-13, // F15200
1117  6.6917E-13, 1.0088E-12, 1.4824E-12, 2.2763E-12, 3.3917E-12, // F15210
1118  4.4585E-12, 6.3187E-12, 8.4189E-12, 1.1302E-11, 1.3431E-11, // F15220
1119  1.5679E-11, 1.9044E-11, 2.2463E-11, 2.3605E-11, 2.3619E-11, // F15230
1120  2.3505E-11, 2.3805E-11, 2.2549E-11, 1.9304E-11, 1.8382E-11, // F15240
1121  1.7795E-11, 1.8439E-11, 1.9146E-11, 2.1966E-11, 2.6109E-11, // F15250
1122  3.1883E-11, 3.7872E-11, 4.3966E-11, 4.8789E-11, 5.3264E-11, // F15260
1123  5.9705E-11, 6.3744E-11, 7.0163E-11, 7.9114E-11, 8.8287E-11, // F15270
1124  9.9726E-11, 1.1498E-10, 1.3700E-10, 1.6145E-10, 1.9913E-10, // F15280
1125  2.2778E-10, 2.6216E-10, 2.9770E-10, 3.3405E-10, 3.7821E-10, // F15300
1126  3.9552E-10, 4.1322E-10, 4.0293E-10, 4.0259E-10, 3.8853E-10, // F15310
1127  3.7842E-10, 3.8551E-10, 4.4618E-10, 5.0527E-10, 5.0695E-10, // F15320
1128  5.1216E-10, 5.1930E-10, 5.5794E-10, 5.3320E-10, 5.2008E-10, // F15330
1129  5.6888E-10, 6.1883E-10, 6.9006E-10, 6.9505E-10, 6.6768E-10, // F15340
1130  6.3290E-10, 5.6753E-10, 5.0327E-10, 3.9830E-10, 3.1147E-10, // F15350
1131  2.4416E-10, 1.8860E-10, 1.3908E-10, 9.9156E-11, 7.3779E-11, // F15360
1132  5.6048E-11, 4.2457E-11, 3.4505E-11, 2.9881E-11, 2.7865E-11, // F15370
1133  2.8471E-11, 3.1065E-11, 3.4204E-11, 3.9140E-11, 4.3606E-11, // F15380
1134  4.9075E-11, 5.3069E-11, 5.5236E-11, 5.5309E-11, 5.3832E-11, // F15390
1135  5.3183E-11, 5.1783E-11, 5.2042E-11, 5.4422E-11, 5.5656E-11, // F15410
1136  5.4409E-11, 5.2659E-11, 5.1696E-11, 5.1726E-11, 4.9003E-11, // F15420
1137  4.9050E-11, 5.1700E-11, 5.6818E-11, 6.3129E-11, 6.6542E-11, // F15430
1138  6.4367E-11, 5.9908E-11, 5.4470E-11, 4.7903E-11, 3.9669E-11, // F15440
1139  2.9651E-11, 2.2286E-11, 1.6742E-11, 1.1827E-11, 7.7739E-12, // F15450
1140  4.8805E-12, 3.1747E-12, 2.0057E-12, 1.2550E-12, 8.7434E-13, // F15460
1141  6.2755E-13, 4.9752E-13, 4.0047E-13, 3.5602E-13, 3.0930E-13, // F15470
1142  2.4903E-13, 1.9316E-13, 1.4995E-13, 1.2059E-13, 8.7242E-14, // F15480
1143  6.4511E-14, 5.3300E-14, 4.3741E-14, 3.4916E-14, 2.6560E-14, // F15490
1144  1.6923E-14, 1.1816E-14, 6.7071E-15, 3.6474E-15, 2.0686E-15, // F15500
1145  1.1925E-15, 6.8948E-16, 3.9661E-16, 2.2576E-16, 1.2669E-16, // F15520
1146  6.9908E-17, 3.7896E-17, 2.0280E-17, 1.1016E-17, 6.7816E-18, // F15530
1147  6.0958E-18, 8.9913E-18, 1.7201E-17, 3.4964E-17, 7.0722E-17, // F15540
1148  1.4020E-16, 2.7167E-16, 5.1478E-16, 9.5500E-16, 1.7376E-15, // F15550
1149  3.1074E-15, 5.4789E-15, 9.5640E-15, 1.6635E-14, 2.9145E-14, // F15560
1150  5.2179E-14, 8.8554E-14, 1.4764E-13, 2.3331E-13, 3.5996E-13, // F15570
1151  5.2132E-13, 6.3519E-13, 7.3174E-13, 8.3752E-13, 9.8916E-13, // F15580
1152  1.1515E-12, 1.4034E-12, 1.6594E-12, 2.1021E-12, 2.7416E-12, // F15590
1153  3.4135E-12, 4.5517E-12, 5.5832E-12, 7.2303E-12, 9.9484E-12, // F15600
1154  1.2724E-11, 1.6478E-11, 2.0588E-11, 2.5543E-11, 3.3625E-11, // F15610
1155  4.1788E-11, 5.0081E-11, 6.0144E-11, 6.9599E-11, 8.4408E-11, // F15630
1156  9.7143E-11, 1.0805E-10, 1.1713E-10, 1.2711E-10, 1.3727E-10, // F15640
1157  1.4539E-10, 1.6049E-10, 1.7680E-10, 2.0557E-10, 2.4967E-10, // F15650
1158  3.0096E-10, 3.5816E-10, 4.0851E-10, 4.6111E-10, 5.2197E-10, // F15660
1159  5.5043E-10, 6.0324E-10, 6.4983E-10, 6.7498E-10, 7.0545E-10, // F15670
1160  7.0680E-10, 7.5218E-10, 7.5723E-10, 7.7840E-10, 8.0081E-10, // F15680
1161  8.0223E-10, 7.7271E-10, 7.1676E-10, 6.7819E-10, 6.4753E-10, // F15690
1162  6.5844E-10, 7.0163E-10, 7.7503E-10, 8.8152E-10, 9.9022E-10, // F15700
1163  1.0229E-09, 9.9296E-10, 8.9911E-10, 7.7813E-10, 6.3785E-10, // F15710
1164  4.7491E-10, 3.5280E-10, 2.4349E-10, 1.6502E-10, 1.1622E-10, // F15720
1165  8.6715E-11, 6.7360E-11, 5.3910E-11, 4.5554E-11, 4.1300E-11, // F15740
1166  3.9728E-11, 3.9000E-11, 3.9803E-11, 4.1514E-11, 4.3374E-11, // F15750
1167  4.6831E-11, 4.8921E-11, 5.1995E-11, 5.7242E-11, 6.2759E-11, // F15760
1168  7.0801E-11, 7.4555E-11, 7.9754E-11, 8.7616E-11, 9.1171E-11, // F15770
1169  1.0349E-10, 1.1047E-10, 1.2024E-10, 1.2990E-10, 1.3725E-10, // F15780
1170  1.5005E-10, 1.5268E-10, 1.5535E-10, 1.5623E-10, 1.5009E-10, // F15790
1171  1.4034E-10, 1.3002E-10, 1.2225E-10, 1.1989E-10, 1.2411E-10, // F15800
1172  1.3612E-10, 1.5225E-10, 1.7202E-10, 1.9471E-10, 1.9931E-10, // F15810
1173  1.9079E-10, 1.7478E-10, 1.5259E-10, 1.2625E-10, 9.3332E-11, // F15820
1174  6.8796E-11, 4.6466E-11, 2.9723E-11, 1.8508E-11, 1.2106E-11, // F15830
1175  8.0142E-12, 5.4066E-12, 3.9329E-12, 3.1665E-12, 2.7420E-12, // F15850
1176  2.3996E-12, 2.3804E-12, 2.3242E-12, 2.4476E-12, 2.5331E-12, // F15860
1177  2.3595E-12, 2.2575E-12, 2.1298E-12, 2.0088E-12, 1.8263E-12, // F15870
1178  1.6114E-12, 1.4422E-12, 1.2946E-12, 1.0837E-12, 9.1282E-13, // F15880
1179  7.2359E-13, 5.3307E-13, 3.8837E-13, 2.6678E-13, 1.6769E-13, // F15890
1180  1.0826E-13, 7.2364E-14, 4.5201E-14, 3.0808E-14, 2.2377E-14, // F15900
1181  1.7040E-14, 9.2181E-15, 5.2934E-15, 3.5774E-15, 3.1431E-15, // F15910
1182  3.7647E-15, 5.6428E-15, 9.5139E-15, 1.7322E-14, 2.8829E-14, // F15920
1183  4.7708E-14, 6.9789E-14, 9.7267E-14, 1.4662E-13, 1.9429E-13, // F15930
1184  2.5998E-13, 3.6636E-13, 4.7960E-13, 6.5129E-13, 7.7638E-13, // F15940
1185  9.3774E-13, 1.1467E-12, 1.3547E-12, 1.5686E-12, 1.6893E-12, // F15960
1186  1.9069E-12, 2.1352E-12, 2.3071E-12, 2.4759E-12, 2.8247E-12, // F15970
1187  3.4365E-12, 4.3181E-12, 5.6107E-12, 7.0017E-12, 8.6408E-12, // F15980
1188  1.0974E-11, 1.3742E-11, 1.6337E-11, 2.0157E-11, 2.3441E-11, // F15990
1189  2.6733E-11, 3.0247E-11, 3.3737E-11, 3.8618E-11, 4.1343E-11, // F16000
1190  4.3870E-11, 4.4685E-11, 4.4881E-11, 4.5526E-11, 4.3628E-11, // F16010
1191  4.4268E-11, 4.6865E-11, 5.3426E-11, 5.4020E-11, 5.3218E-11, // F16020
1192  5.4587E-11, 5.6360E-11, 5.7740E-11, 5.6426E-11, 6.0399E-11, // F16030
1193  6.6981E-11, 7.4319E-11, 7.7977E-11, 7.5539E-11, 7.1610E-11, // F16040
1194  6.4606E-11, 5.5498E-11, 4.3944E-11, 3.3769E-11, 2.5771E-11, // F16050
1195  1.9162E-11, 1.3698E-11, 1.0173E-11, 7.8925E-12, 6.1938E-12, // F16070
1196  4.7962E-12, 4.0811E-12, 3.3912E-12, 2.8625E-12, 2.4504E-12, // F16080
1197  2.2188E-12, 2.2139E-12, 2.2499E-12, 2.2766E-12, 2.3985E-12, // F16090
1198  2.5459E-12, 2.9295E-12, 3.4196E-12, 3.6155E-12, 4.0733E-12, // F16100
1199  4.4610E-12, 4.9372E-12, 5.4372E-12, 5.7304E-12, 6.1640E-12, // F16110
1200  6.1278E-12, 6.2940E-12, 6.4947E-12, 6.8174E-12, 7.5190E-12, // F16120
1201  8.2608E-12, 8.4971E-12, 8.3484E-12, 8.1888E-12, 7.8552E-12, // F16130
1202  7.8468E-12, 7.5943E-12, 7.9096E-12, 8.6869E-12, 9.1303E-12, // F16140
1203  9.2547E-12, 8.9322E-12, 8.2177E-12, 7.3408E-12, 5.7956E-12, // F16150
1204  4.4470E-12, 3.5881E-12, 2.6748E-12, 1.7074E-12, 9.6700E-13, // F16160
1205  5.2645E-13, 2.9943E-13, 1.7316E-13, 1.0039E-13, 5.7859E-14, // F16180
1206  3.2968E-14, 1.8499E-14, 1.0192E-14, 5.5015E-15, 2.9040E-15, // F16190
1207  1.4968E-15, 7.5244E-16, 3.6852E-16, 1.7568E-16, 8.1464E-17, // F16200
1208  3.6717E-17, 1.6076E-17, 6.8341E-18, 2.8195E-18, 1.1286E-18, // F16210
1209  .0000E+00, .0000E+00, .0000E+00, .0000E+00, .0000E+00, // F16220
1210  .0000E+00, .0000E+00, .0000E+00, .0000E+00, 1.4070E-18, // F16230
1211  3.0405E-18, 6.4059E-18, 1.3169E-17, 2.6443E-17, 5.1917E-17, // F16240
1212  9.9785E-17, 1.8802E-16, 3.4788E-16, 6.3328E-16, 1.1370E-15, // F16250
1213  2.0198E-15, 3.5665E-15, 6.3053E-15, 1.1309E-14, 2.1206E-14, // F16260
1214  3.2858E-14, 5.5165E-14, 8.6231E-14, 1.2776E-13, 1.7780E-13, // F16270
1215  2.5266E-13, 3.6254E-13, 5.1398E-13, 6.8289E-13, 8.7481E-13, // F16290
1216  1.1914E-12, 1.6086E-12, 2.0469E-12, 2.5761E-12, 3.4964E-12, // F16300
1217  4.4980E-12, 5.5356E-12, 6.7963E-12, 8.5720E-12, 1.0700E-11, // F16310
1218  1.2983E-11, 1.6270E-11, 1.9609E-11, 2.2668E-11, 2.5963E-11, // F16320
1219  3.0918E-11, 3.4930E-11, 3.9330E-11, 4.4208E-11, 4.6431E-11, // F16330
1220  5.1141E-11, 5.4108E-11, 5.8077E-11, 6.5050E-11, 7.2126E-11, // F16340
1221  8.1064E-11, 8.1973E-11, 8.1694E-11, 8.3081E-11, 8.0240E-11, // F16350
1222  7.9225E-11, 7.6256E-11, 7.8468E-11, 8.0041E-11, 8.1585E-11, // F16360
1223  8.3485E-11, 8.3774E-11, 8.5870E-11, 8.6104E-11, 8.8516E-11, // F16370
1224  9.0814E-11, 9.2522E-11, 8.8913E-11, 7.8381E-11, 6.8568E-11, // F16380
1225  5.6797E-11, 4.4163E-11, 3.2369E-11, 2.3259E-11, 1.6835E-11, // F16400
1226  1.1733E-11, 8.5273E-12, 6.3805E-12, 4.8983E-12, 3.8831E-12, // F16410
1227  3.2610E-12, 2.8577E-12, 2.5210E-12, 2.2913E-12, 2.0341E-12, // F16420
1228  1.8167E-12, 1.6395E-12, 1.4890E-12, 1.3516E-12, 1.2542E-12, // F16430
1229  1.2910E-12, 1.3471E-12, 1.4689E-12, 1.5889E-12, 1.6989E-12, // F16440
1230  1.8843E-12, 2.0902E-12, 2.3874E-12, 2.7294E-12, 3.3353E-12, // F16450
1231  4.0186E-12, 4.5868E-12, 5.2212E-12, 5.8856E-12, 6.5991E-12, // F16460
1232  7.2505E-12, 7.6637E-12, 8.5113E-12, 9.4832E-12, 9.9678E-12, // F16470
1233  1.0723E-11, 1.0749E-11, 1.1380E-11, 1.1774E-11, 1.1743E-11, // F16480
1234  1.2493E-11, 1.2559E-11, 1.2332E-11, 1.1782E-11, 1.1086E-11, // F16490
1235  1.0945E-11, 1.1178E-11, 1.2083E-11, 1.3037E-11, 1.4730E-11, // F16510
1236  1.6450E-11, 1.7403E-11, 1.7004E-11, 1.5117E-11, 1.3339E-11, // F16520
1237  1.0844E-11, 8.0915E-12, 5.6615E-12, 3.7196E-12, 2.5194E-12, // F16530
1238  1.6569E-12, 1.1201E-12, 8.2335E-13, 6.0270E-13, 4.8205E-13, // F16540
1239  4.1313E-13, 3.6243E-13, 3.2575E-13, 2.7730E-13, 2.5292E-13, // F16550
1240  2.3062E-13, 2.1126E-13, 2.1556E-13, 2.1213E-13, 2.2103E-13, // F16560
1241  2.1927E-13, 2.0794E-13, 1.9533E-13, 1.6592E-13, 1.4521E-13, // F16570
1242  1.1393E-13, 8.3772E-14, 6.2077E-14, 4.3337E-14, 2.7165E-14, // F16580
1243  1.6821E-14, 9.5407E-15, 5.3093E-15, 3.0320E-15, 1.7429E-15, // F16590
1244  9.9828E-16, 5.6622E-16, 3.1672E-16, 1.7419E-16, 9.3985E-17, // F16600
1245  4.9656E-17, 2.5652E-17, 1.2942E-17, 6.3695E-18, 3.0554E-18, // F16620
1246  1.4273E-18, -0. , -0. , -0. , -0. , // F16630
1247  -0. , 0. , 0. , 0. , 0. , // F16640
1248  0. , 0. , 0. , 0. , 0. , // F16650
1249  0. , 0. , 0. , 0. , 0. , // F16660
1250  0. , 0. , 0. , 0. , 0. , // F16670
1251  0. , 0. , 0. , 0. , 0. , // F16680
1252  0. , 0. , 0. , 0. , 0. , // F16690
1253  0. , 0. , 0. , 0. , 0. , // F16700
1254  0. , 0. , 0. , 0. , 0. , // F16710
1255  0. , 0. , 0. , 0. , 0. , // F16730
1256  0. , 0. , 0. , 0. , 0. , // F16740
1257  0. , 0. , 0. , 0. , 0. , // F16750
1258  0. , 0. , 0. , 0. , 0. , // F16760
1259  0. , 0. , 0. , 0. , 0. , // F16770
1260  0. , 0. , 0. , 0. , 0. , // F16780
1261  0. , 0. , 0. , 0. , 0. , // F16790
1262  0. , 0. , 0. , 0. , 0. , // F16800
1263  0. , 0. , 0. , 0. , 0. , // F16810
1264  0. , 0. , 0. , 0. , 0. , // F16820
1265  0. , 0. , 0. , 0. , 0. , // F16840
1266  0. , 0. , 0. , 0. , 0. , // F16850
1267  0. , 0. , 0. , 0. , 0. , // F16860
1268  0. , 0. , 0. , 0. , 0. , // F16870
1269  0. , 0. , 0. , 0. , 0. , // F16880
1270  0. , 0. , 0. , 0. , 0. , // F16890
1271  0. , 0. , 0. , 0. , 0. , // F16900
1272  0. , 0. , 0. , 0. , 0. , // F16910
1273  0. , 0. , 0. , 0. , 0. , // F16920
1274  0. , 0. , 0. , 0. , 0. , // F16930
1275  0. , 0. , 0. , 0. , 0. , // F16950
1276  0. , 0. , 0. , 0. , 0. , // F16960
1277  0. , 0. , 0. , 0. , 0. , // F16970
1278  0. , 0. , 0. , 0. , 0. , // F16980
1279  0. , 0. , 0. , 0. , 0. , // F16990
1280  0. , 0. , 0. , 0. , 0. , // F17000
1281  0. , 0. , 0. , 0. , 0. , // F17010
1282  0. , 0. , 0. , 0. , 0. , // F17020
1283  0. , 0. , 0. , 0. , 0. , // F17030
1284  0. , 0. , 0. , 0. , 0. , // F17040
1285  0.};
1286 
1287 
1288 
1289 
1290 
1291 
1292 // H2O self continuum parameters at T=260 K for the CKD versions 0 to 2.4.2
1293 // date of last update: 06/28/82
1294 // units of (CM**3/MOL)*1.E-20
1295 const Numeric SL260_ckd_0_v1 = -20.0;
1296 const Numeric SL260_ckd_0_v2 = 20000.0;
1298 const int SL260_ckd_0_npt = 2003;
1300  0.0000e-00, 1.7750e-01, 1.7045e-01,
1301  1.6457e-01, 1.7045e-01, 1.7750e-01, 2.0036e-01, 2.1347e-01, // f07700
1302  2.2454e-01, 2.3428e-01, 2.3399e-01, 2.3022e-01, 2.0724e-01, // f07710
1303  1.9712e-01, 1.8317e-01, 1.6724e-01, 1.4780e-01, 1.2757e-01, // f07720
1304  1.1626e-01, 1.0098e-01, 8.9033e-02, 7.9770e-02, 6.7416e-02, // f07730
1305  5.9588e-02, 5.1117e-02, 4.6218e-02, 4.2179e-02, 3.4372e-02, // f07740
1306  2.9863e-02, 2.5252e-02, 2.2075e-02, 1.9209e-02, 1.5816e-02, // f07750
1307  1.3932e-02, 1.1943e-02, 1.0079e-02, 8.7667e-03, 7.4094e-03, // f07760
1308  6.4967e-03, 5.5711e-03, 4.8444e-03, 4.2552e-03, 3.6953e-03, // f07770
1309  3.2824e-03, 2.9124e-03, 2.6102e-03, 2.3370e-03, 2.1100e-03, // f07780
1310  1.9008e-03, 1.7145e-03, 1.5573e-03, 1.4206e-03, 1.2931e-03, // f07790
1311  1.1803e-03, 1.0774e-03, 9.8616e-04, 9.0496e-04, 8.3071e-04, // f07810
1312  7.6319e-04, 7.0149e-04, 6.4637e-04, 5.9566e-04, 5.4987e-04, // f07820
1313  5.0768e-04, 4.6880e-04, 4.3317e-04, 4.0037e-04, 3.7064e-04, // f07830
1314  3.4325e-04, 3.1809e-04, 2.9501e-04, 2.7382e-04, 2.5430e-04, // f07840
1315  2.3630e-04, 2.1977e-04, 2.0452e-04, 1.9042e-04, 1.7740e-04, // f07850
1316  1.6544e-04, 1.5442e-04, 1.4425e-04, 1.3486e-04, 1.2618e-04, // f07860
1317  1.1817e-04, 1.1076e-04, 1.0391e-04, 9.7563e-05, 9.1696e-05, // f07870
1318  8.6272e-05, 8.1253e-05, 7.6607e-05, 7.2302e-05, 6.8311e-05, // f07880
1319  6.4613e-05, 6.1183e-05, 5.8001e-05, 5.5048e-05, 5.2307e-05, // f07890
1320  4.9761e-05, 4.7395e-05, 4.5197e-05, 4.3155e-05, 4.1256e-05, // f07900
1321  3.9491e-05, 3.7849e-05, 3.6324e-05, 3.4908e-05, 3.3594e-05, // f07920
1322  3.2374e-05, 3.1244e-05, 3.0201e-05, 2.9240e-05, 2.8356e-05, // f07930
1323  2.7547e-05, 2.6814e-05, 2.6147e-05, 2.5551e-05, 2.5029e-05, // f07940
1324  2.4582e-05, 2.4203e-05, 2.3891e-05, 2.3663e-05, 2.3531e-05, // f07950
1325  2.3483e-05, 2.3516e-05, 2.3694e-05, 2.4032e-05, 2.4579e-05, // f07960
1326  2.5234e-05, 2.6032e-05, 2.7119e-05, 2.8631e-05, 3.0848e-05, // f07970
1327  3.3262e-05, 3.6635e-05, 4.0732e-05, 4.5923e-05, 5.3373e-05, // f07980
1328  6.1875e-05, 7.2031e-05, 8.5980e-05, 9.8642e-05, 1.1469e-04, // f07990
1329  1.3327e-04, 1.5390e-04, 1.7513e-04, 2.0665e-04, 2.3609e-04, // f08000
1330  2.6220e-04, 2.8677e-04, 3.2590e-04, 3.8624e-04, 4.1570e-04, // f08010
1331  4.5207e-04, 4.9336e-04, 5.4500e-04, 5.8258e-04, 5.8086e-04, // f08030
1332  5.6977e-04, 5.3085e-04, 4.8020e-04, 4.3915e-04, 4.0343e-04, // f08040
1333  3.7853e-04, 3.7025e-04, 3.9637e-04, 4.4675e-04, 4.7072e-04, // f08050
1334  4.9022e-04, 5.2076e-04, 5.3676e-04, 5.2755e-04, 4.8244e-04, // f08060
1335  4.5473e-04, 4.3952e-04, 3.9614e-04, 3.4086e-04, 2.9733e-04, // f08070
1336  2.6367e-04, 2.3767e-04, 2.0427e-04, 1.7595e-04, 1.5493e-04, // f08080
1337  1.3851e-04, 1.1874e-04, 1.0735e-04, 9.0490e-05, 8.1149e-05, // f08090
1338  7.4788e-05, 6.5438e-05, 5.8248e-05, 4.8076e-05, 4.3488e-05, // f08100
1339  3.7856e-05, 3.3034e-05, 2.9592e-05, 2.6088e-05, 2.3497e-05, // f08110
1340  2.0279e-05, 1.7526e-05, 1.5714e-05, 1.3553e-05, 1.2145e-05, // f08120
1341  1.0802e-05, 9.7681e-06, 8.8196e-06, 7.8291e-06, 7.1335e-06, // f08140
1342  6.4234e-06, 5.8391e-06, 5.3532e-06, 4.9079e-06, 4.5378e-06, // f08150
1343  4.1716e-06, 3.8649e-06, 3.5893e-06, 3.3406e-06, 3.1199e-06, // f08160
1344  2.9172e-06, 2.7348e-06, 2.5644e-06, 2.4086e-06, 2.2664e-06, // f08170
1345  2.1359e-06, 2.0159e-06, 1.9051e-06, 1.8031e-06, 1.7074e-06, // f08180
1346  1.6185e-06, 1.5356e-06, 1.4584e-06, 1.3861e-06, 1.3179e-06, // f08190
1347  1.2545e-06, 1.1951e-06, 1.1395e-06, 1.0873e-06, 1.0384e-06, // f08200
1348  9.9250e-07, 9.4935e-07, 9.0873e-07, 8.7050e-07, 8.3446e-07, // f08210
1349  8.0046e-07, 7.6834e-07, 7.3800e-07, 7.0931e-07, 6.8217e-07, // f08220
1350  6.5648e-07, 6.3214e-07, 6.0909e-07, 5.8725e-07, 5.6655e-07, // f08230
1351  5.4693e-07, 5.2835e-07, 5.1077e-07, 4.9416e-07, 4.7853e-07, // f08250
1352  4.6381e-07, 4.5007e-07, 4.3728e-07, 4.2550e-07, 4.1450e-07, // f08260
1353  4.0459e-07, 3.9532e-07, 3.8662e-07, 3.7855e-07, 3.7041e-07, // f08270
1354  3.6254e-07, 3.5420e-07, 3.4617e-07, 3.3838e-07, 3.3212e-07, // f08280
1355  3.2655e-07, 3.1865e-07, 3.1203e-07, 3.0670e-07, 3.0252e-07, // f08290
1356  2.9749e-07, 2.9184e-07, 2.8795e-07, 2.8501e-07, 2.8202e-07, // f08300
1357  2.7856e-07, 2.7509e-07, 2.7152e-07, 2.6844e-07, 2.6642e-07, // f08310
1358  2.6548e-07, 2.6617e-07, 2.6916e-07, 2.7372e-07, 2.8094e-07, // f08320
1359  2.9236e-07, 3.1035e-07, 3.2854e-07, 3.5481e-07, 3.9377e-07, // f08330
1360  4.4692e-07, 5.0761e-07, 5.7715e-07, 6.7725e-07, 8.0668e-07, // f08340
1361  9.3716e-07, 1.0797e-06, 1.1689e-06, 1.3217e-06, 1.4814e-06, // f08360
1362  1.5627e-06, 1.6519e-06, 1.7601e-06, 1.9060e-06, 2.0474e-06, // f08370
1363  2.0716e-06, 2.0433e-06, 1.9752e-06, 1.8466e-06, 1.7526e-06, // f08380
1364  1.6657e-06, 1.5870e-06, 1.5633e-06, 1.6520e-06, 1.8471e-06, // f08390
1365  1.9953e-06, 2.0975e-06, 2.2016e-06, 2.2542e-06, 2.3081e-06, // f08400
1366  2.3209e-06, 2.2998e-06, 2.3056e-06, 2.2757e-06, 2.2685e-06, // f08410
1367  2.2779e-06, 2.2348e-06, 2.2445e-06, 2.3174e-06, 2.4284e-06, // f08420
1368  2.5290e-06, 2.7340e-06, 2.9720e-06, 3.2332e-06, 3.5392e-06, // f08430
1369  3.9013e-06, 4.3334e-06, 4.9088e-06, 5.3428e-06, 5.9142e-06, // f08440
1370  6.6106e-06, 7.4709e-06, 8.5019e-06, 9.6835e-06, 1.0984e-05, // f08450
1371  1.2831e-05, 1.4664e-05, 1.7080e-05, 2.0103e-05, 2.4148e-05, // f08470
1372  2.7948e-05, 3.2855e-05, 3.9046e-05, 4.6429e-05, 5.6633e-05, // f08480
1373  6.6305e-05, 7.6048e-05, 8.7398e-05, 1.0034e-04, 1.1169e-04, // f08490
1374  1.2813e-04, 1.3354e-04, 1.3952e-04, 1.4204e-04, 1.4615e-04, // f08500
1375  1.5144e-04, 1.5475e-04, 1.6561e-04, 1.7135e-04, 1.6831e-04, // f08510
1376  1.6429e-04, 1.6353e-04, 1.6543e-04, 1.5944e-04, 1.5404e-04, // f08520
1377  1.5458e-04, 1.6287e-04, 1.7277e-04, 1.8387e-04, 1.7622e-04, // f08530
1378  1.6360e-04, 1.5273e-04, 1.3667e-04, 1.2364e-04, 9.7576e-05, // f08540
1379  7.9140e-05, 6.4241e-05, 5.1826e-05, 4.1415e-05, 3.1347e-05, // f08550
1380  2.5125e-05, 2.0027e-05, 1.6362e-05, 1.3364e-05, 1.1117e-05, // f08560
1381  9.4992e-06, 8.1581e-06, 7.1512e-06, 6.2692e-06, 5.5285e-06, // f08580
1382  4.9000e-06, 4.3447e-06, 3.8906e-06, 3.4679e-06, 3.1089e-06, // f08590
1383  2.8115e-06, 2.5496e-06, 2.2982e-06, 2.0861e-06, 1.8763e-06, // f08600
1384  1.7035e-06, 1.5548e-06, 1.4107e-06, 1.2839e-06, 1.1706e-06, // f08610
1385  1.0709e-06, 9.8099e-07, 8.9901e-07, 8.2394e-07, 7.5567e-07, // f08620
1386  6.9434e-07, 6.3867e-07, 5.8845e-07, 5.4263e-07, 5.0033e-07, // f08630
1387  4.6181e-07, 4.2652e-07, 3.9437e-07, 3.6497e-07, 3.3781e-07, // f08640
1388  3.1292e-07, 2.9011e-07, 2.6915e-07, 2.4989e-07, 2.3215e-07, // f08650
1389  2.1582e-07, 2.0081e-07, 1.8700e-07, 1.7432e-07, 1.6264e-07, // f08660
1390  1.5191e-07, 1.4207e-07, 1.3306e-07, 1.2484e-07, 1.1737e-07, // f08670
1391  1.1056e-07, 1.0451e-07, 9.9060e-08, 9.4135e-08, 8.9608e-08, // f08690
1392  8.5697e-08, 8.1945e-08, 7.8308e-08, 7.4808e-08, 7.1686e-08, // f08700
1393  6.8923e-08, 6.5869e-08, 6.3308e-08, 6.0840e-08, 5.8676e-08, // f08710
1394  5.6744e-08, 5.5016e-08, 5.3813e-08, 5.2792e-08, 5.2097e-08, // f08720
1395  5.1737e-08, 5.1603e-08, 5.1656e-08, 5.1989e-08, 5.2467e-08, // f08730
1396  5.2918e-08, 5.3589e-08, 5.4560e-08, 5.5869e-08, 5.7403e-08, // f08740
1397  5.8968e-08, 6.0973e-08, 6.3432e-08, 6.6245e-08, 6.9353e-08, // f08750
1398  7.2686e-08, 7.6541e-08, 8.0991e-08, 8.5950e-08, 9.1429e-08, // f08760
1399  9.7851e-08, 1.0516e-07, 1.1349e-07, 1.2295e-07, 1.3335e-07, // f08770
1400  1.4488e-07, 1.5864e-07, 1.7412e-07, 1.9140e-07, 2.1078e-07, // f08780
1401  2.3369e-07, 2.5996e-07, 2.8848e-07, 3.2169e-07, 3.5991e-07, // f08800
1402  4.0566e-07, 4.5969e-07, 5.3094e-07, 6.1458e-07, 7.1155e-07, // f08810
1403  8.3045e-07, 9.9021e-07, 1.2042e-06, 1.4914e-06, 1.8145e-06, // f08820
1404  2.2210e-06, 2.7831e-06, 3.4533e-06, 4.4446e-06, 5.1989e-06, // f08830
1405  6.2289e-06, 7.1167e-06, 8.3949e-06, 9.6417e-06, 1.0313e-05, // f08840
1406  1.0485e-05, 1.0641e-05, 1.0898e-05, 1.0763e-05, 1.0506e-05, // f08850
1407  1.0497e-05, 1.1696e-05, 1.2654e-05, 1.3029e-05, 1.3175e-05, // f08860
1408  1.4264e-05, 1.4985e-05, 1.4999e-05, 1.4317e-05, 1.4616e-05, // f08870
1409  1.4963e-05, 1.5208e-05, 1.4942e-05, 1.3879e-05, 1.3087e-05, // f08880
1410  1.1727e-05, 1.0515e-05, 9.0073e-06, 7.3133e-06, 6.1181e-06, // f08890
1411  5.0623e-06, 4.1105e-06, 3.3915e-06, 2.6711e-06, 2.1464e-06, // f08910
1412  1.7335e-06, 1.4302e-06, 1.1847e-06, 9.9434e-07, 8.2689e-07, // f08920
1413  7.0589e-07, 6.0750e-07, 5.3176e-07, 4.6936e-07, 4.1541e-07, // f08930
1414  3.6625e-07, 3.2509e-07, 2.9156e-07, 2.6308e-07, 2.3819e-07, // f08940
1415  2.1421e-07, 1.9366e-07, 1.7626e-07, 1.5982e-07, 1.4567e-07, // f08950
1416  1.3354e-07, 1.2097e-07, 1.1029e-07, 1.0063e-07, 9.2003e-08, // f08960
1417  8.4245e-08, 7.7004e-08, 7.0636e-08, 6.4923e-08, 5.9503e-08, // f08970
1418  5.4742e-08, 5.0450e-08, 4.6470e-08, 4.2881e-08, 3.9550e-08, // f08980
1419  3.6541e-08, 3.3803e-08, 3.1279e-08, 2.8955e-08, 2.6858e-08, // f08990
1420  2.4905e-08, 2.3146e-08, 2.1539e-08, 2.0079e-08, 1.8746e-08, // f09000
1421  1.7517e-08, 1.6396e-08, 1.5369e-08, 1.4426e-08, 1.3543e-08, // f09020
1422  1.2724e-08, 1.1965e-08, 1.1267e-08, 1.0617e-08, 1.0010e-08, // f09030
1423  9.4662e-09, 8.9553e-09, 8.4988e-09, 8.0807e-09, 7.7043e-09, // f09040
1424  7.3721e-09, 7.0707e-09, 6.8047e-09, 6.5702e-09, 6.3634e-09, // f09050
1425  6.1817e-09, 6.0239e-09, 5.8922e-09, 5.7824e-09, 5.7019e-09, // f09060
1426  5.6368e-09, 5.5940e-09, 5.5669e-09, 5.5583e-09, 5.5653e-09, // f09070
1427  5.5837e-09, 5.6243e-09, 5.6883e-09, 5.7800e-09, 5.8964e-09, // f09080
1428  6.0429e-09, 6.2211e-09, 6.4282e-09, 6.6634e-09, 6.9306e-09, // f09090
1429  7.2336e-09, 7.5739e-09, 7.9562e-09, 8.3779e-09, 8.8575e-09, // f09100
1430  9.3992e-09, 1.0004e-08, 1.0684e-08, 1.1450e-08, 1.2320e-08, // f09110
1431  1.3311e-08, 1.4455e-08, 1.5758e-08, 1.7254e-08, 1.8927e-08, // f09130
1432  2.0930e-08, 2.3348e-08, 2.6074e-08, 2.9221e-08, 3.2770e-08, // f09140
1433  3.7485e-08, 4.2569e-08, 4.8981e-08, 5.5606e-08, 6.2393e-08, // f09150
1434  7.1901e-08, 8.2921e-08, 9.5513e-08, 1.1111e-07, 1.3143e-07, // f09160
1435  1.5971e-07, 1.8927e-07, 2.2643e-07, 2.7860e-07, 3.2591e-07, // f09170
1436  3.7024e-07, 4.2059e-07, 4.9432e-07, 5.5543e-07, 5.7498e-07, // f09180
1437  5.9210e-07, 6.1005e-07, 6.1577e-07, 5.9193e-07, 5.6602e-07, // f09190
1438  5.7403e-07, 6.0050e-07, 6.4723e-07, 6.7073e-07, 7.5415e-07, // f09200
1439  8.0982e-07, 8.7658e-07, 9.1430e-07, 9.4459e-07, 9.8347e-07, // f09210
1440  9.8768e-07, 1.0153e-06, 1.0066e-06, 1.0353e-06, 1.0353e-06, // f09220
1441  1.0722e-06, 1.1138e-06, 1.1923e-06, 1.2947e-06, 1.4431e-06, // f09240
1442  1.6537e-06, 1.8662e-06, 2.2473e-06, 2.6464e-06, 3.1041e-06, // f09250
1443  3.4858e-06, 4.0167e-06, 4.6675e-06, 5.0983e-06, 5.7997e-06, // f09260
1444  6.0503e-06, 6.4687e-06, 6.5396e-06, 6.7986e-06, 7.0244e-06, // f09270
1445  7.2305e-06, 7.6732e-06, 7.9783e-06, 7.9846e-06, 7.7617e-06, // f09280
1446  7.7657e-06, 7.7411e-06, 7.8816e-06, 7.8136e-06, 8.0051e-06, // f09290
1447  8.5799e-06, 9.1659e-06, 9.8646e-06, 9.4920e-06, 8.7670e-06, // f09300
1448  8.2034e-06, 7.2297e-06, 6.2324e-06, 4.9315e-06, 3.9128e-06, // f09310
1449  3.1517e-06, 2.4469e-06, 1.8815e-06, 1.4627e-06, 1.1698e-06, // f09320
1450  9.4686e-07, 7.8486e-07, 6.6970e-07, 5.8811e-07, 5.2198e-07, // f09330
1451  4.6809e-07, 4.1671e-07, 3.7006e-07, 3.3066e-07, 2.9387e-07, // f09350
1452  2.6415e-07, 2.3409e-07, 2.0991e-07, 1.9132e-07, 1.7519e-07, // f09360
1453  1.5939e-07, 1.4368e-07, 1.3050e-07, 1.1883e-07, 1.0772e-07, // f09370
1454  9.6884e-08, 8.7888e-08, 7.8956e-08, 7.1024e-08, 6.3824e-08, // f09380
1455  5.7256e-08, 5.1769e-08, 4.7037e-08, 4.2901e-08, 3.8970e-08, // f09390
1456  3.5467e-08, 3.2502e-08, 2.9827e-08, 2.7389e-08, 2.5111e-08, // f09400
1457  2.3056e-08, 2.1267e-08, 1.9610e-08, 1.8133e-08, 1.6775e-08, // f09410
1458  1.5491e-08, 1.4329e-08, 1.3265e-08, 1.2300e-08, 1.1420e-08, // f09420
1459  1.0593e-08, 9.8475e-09, 9.1585e-09, 8.5256e-09, 7.9525e-09, // f09430
1460  7.4226e-09, 6.9379e-09, 6.4950e-09, 6.0911e-09, 5.7242e-09, // f09440
1461  5.3877e-09, 5.0821e-09, 4.8051e-09, 4.5554e-09, 4.3315e-09, // f09460
1462  4.1336e-09, 3.9632e-09, 3.8185e-09, 3.7080e-09, 3.6296e-09, // f09470
1463  3.5804e-09, 3.5776e-09, 3.6253e-09, 3.7115e-09, 3.8151e-09, // f09480
1464  3.9804e-09, 4.1742e-09, 4.3581e-09, 4.5306e-09, 4.7736e-09, // f09490
1465  5.1297e-09, 5.5291e-09, 5.9125e-09, 6.4956e-09, 7.0362e-09, // f09500
1466  7.5318e-09, 7.9947e-09, 8.6438e-09, 9.7227e-09, 1.0130e-08, // f09510
1467  1.0549e-08, 1.1064e-08, 1.1702e-08, 1.2043e-08, 1.1781e-08, // f09520
1468  1.1838e-08, 1.1917e-08, 1.2131e-08, 1.2476e-08, 1.3611e-08, // f09530
1469  1.4360e-08, 1.5057e-08, 1.6247e-08, 1.7284e-08, 1.8420e-08, // f09540
1470  1.8352e-08, 1.8722e-08, 1.9112e-08, 1.9092e-08, 1.9311e-08, // f09550
1471  1.9411e-08, 1.9884e-08, 2.0508e-08, 2.1510e-08, 2.3143e-08, // f09570
1472  2.5050e-08, 2.7596e-08, 3.1231e-08, 3.6260e-08, 4.3410e-08, // f09580
1473  5.2240e-08, 6.3236e-08, 7.7522e-08, 9.8688e-08, 1.1859e-07, // f09590
1474  1.4341e-07, 1.6798e-07, 1.9825e-07, 2.2898e-07, 2.6257e-07, // f09600
1475  2.9884e-07, 3.3247e-07, 3.4936e-07, 3.5583e-07, 3.7150e-07, // f09610
1476  3.6580e-07, 3.7124e-07, 3.7030e-07, 4.1536e-07, 4.6656e-07, // f09620
1477  4.6677e-07, 4.7507e-07, 4.9653e-07, 5.3795e-07, 5.4957e-07, // f09630
1478  5.2238e-07, 5.4690e-07, 5.6569e-07, 5.9844e-07, 5.9835e-07, // f09640
1479  5.6522e-07, 5.4123e-07, 4.7904e-07, 4.2851e-07, 3.5603e-07, // f09650
1480  2.8932e-07, 2.3655e-07, 1.8592e-07, 1.4943e-07, 1.1971e-07, // f09660
1481  9.8482e-08, 8.3675e-08, 7.1270e-08, 6.2496e-08, 5.4999e-08, // f09680
1482  4.9821e-08, 4.5387e-08, 4.1340e-08, 3.7453e-08, 3.3298e-08, // f09690
1483  3.0120e-08, 2.7032e-08, 2.4236e-08, 2.1500e-08, 1.8988e-08, // f09700
1484  1.7414e-08, 1.5706e-08, 1.4192e-08, 1.3204e-08, 1.1759e-08, // f09710
1485  1.0737e-08, 9.6309e-09, 8.8179e-09, 8.2619e-09, 7.2264e-09, // f09720
1486  6.4856e-09, 5.8037e-09, 5.2093e-09, 4.7205e-09, 4.1749e-09, // f09730
1487  3.7852e-09, 3.3915e-09, 3.0089e-09, 2.7335e-09, 2.4398e-09, // f09740
1488  2.2031e-09, 1.9786e-09, 1.7890e-09, 1.6266e-09, 1.4830e-09, // f09750
1489  1.3576e-09, 1.2518e-09, 1.1587e-09, 1.0726e-09, 9.9106e-10, // f09760
1490  9.1673e-10, 8.5084e-10, 7.9147e-10, 7.2882e-10, 6.7342e-10, // f09770
1491  6.2593e-10, 5.8294e-10, 5.4435e-10, 5.0997e-10, 4.7806e-10, // f09790
1492  4.4931e-10, 4.2357e-10, 4.0023e-10, 3.7909e-10, 3.5999e-10, // f09800
1493  3.4285e-10, 3.2776e-10, 3.1468e-10, 3.0377e-10, 2.9479e-10, // f09810
1494  2.8877e-10, 2.8512e-10, 2.8617e-10, 2.8976e-10, 3.0001e-10, // f09820
1495  3.1718e-10, 3.3898e-10, 3.5857e-10, 3.8358e-10, 4.3131e-10, // f09830
1496  4.5741e-10, 4.6948e-10, 4.7594e-10, 4.9529e-10, 5.1563e-10, // f09840
1497  4.9475e-10, 4.8369e-10, 4.8829e-10, 5.0047e-10, 5.0203e-10, // f09850
1498  5.1954e-10, 5.5352e-10, 5.9928e-10, 6.7148e-10, 7.1121e-10, // f09860
1499  7.4317e-10, 7.6039e-10, 7.8313e-10, 8.0684e-10, 7.8553e-10, // f09870
1500  7.8312e-10, 7.8537e-10, 7.8872e-10, 8.0185e-10, 8.1004e-10, // f09880
1501  8.2608e-10, 8.2525e-10, 8.3857e-10, 8.7920e-10, 9.2451e-10, // f09900
1502  9.8661e-10, 1.0629e-09, 1.1659e-09, 1.2922e-09, 1.4387e-09, // f09910
1503  1.6254e-09, 1.8425e-09, 2.1428e-09, 2.5477e-09, 3.0379e-09, // f09920
1504  3.7570e-09, 4.4354e-09, 5.1802e-09, 6.2769e-09, 7.4894e-09, // f09930
1505  8.7474e-09, 9.8037e-09, 1.1582e-08, 1.3293e-08, 1.4471e-08, // f09940
1506  1.5025e-08, 1.5580e-08, 1.6228e-08, 1.6413e-08, 1.6020e-08, // f09950
1507  1.6393e-08, 1.7545e-08, 1.9590e-08, 2.1449e-08, 2.3856e-08, // f09960
1508  2.7050e-08, 3.0214e-08, 3.3733e-08, 3.6487e-08, 3.9353e-08, // f09970
1509  4.2660e-08, 4.6385e-08, 4.9955e-08, 5.5313e-08, 6.0923e-08, // f09980
1510  6.8948e-08, 7.3649e-08, 8.2602e-08, 9.2212e-08, 9.9080e-08, // f09990
1511  1.1319e-07, 1.1790e-07, 1.2941e-07, 1.3199e-07, 1.3914e-07, // f10010
1512  1.4843e-07, 1.5300e-07, 1.6419e-07, 1.7095e-07, 1.6988e-07, // f10020
1513  1.6494e-07, 1.6327e-07, 1.6067e-07, 1.6909e-07, 1.7118e-07, // f10030
1514  1.8106e-07, 1.9857e-07, 2.1696e-07, 2.3385e-07, 2.2776e-07, // f10040
1515  2.1402e-07, 1.9882e-07, 1.7362e-07, 1.4308e-07, 1.1158e-07, // f10050
1516  8.8781e-08, 6.8689e-08, 5.2062e-08, 4.0427e-08, 3.2669e-08, // f10060
1517  2.7354e-08, 2.3200e-08, 2.0580e-08, 1.8676e-08, 1.7329e-08, // f10070
1518  1.6621e-08, 1.6433e-08, 1.6953e-08, 1.7134e-08, 1.7948e-08, // f10080
1519  1.9107e-08, 1.9875e-08, 2.1416e-08, 2.1556e-08, 2.2265e-08, // f10090
1520  2.2171e-08, 2.2534e-08, 2.3029e-08, 2.2828e-08, 2.3143e-08, // f10100
1521  2.2965e-08, 2.2223e-08, 2.1108e-08, 2.0265e-08, 1.9516e-08, // f10120
1522  1.9941e-08, 2.0312e-08, 2.1080e-08, 2.2611e-08, 2.4210e-08, // f10130
1523  2.6069e-08, 2.5097e-08, 2.3318e-08, 2.1543e-08, 1.8942e-08, // f10140
1524  1.5960e-08, 1.2386e-08, 9.9340e-09, 7.7502e-09, 5.9462e-09, // f10150
1525  4.5113e-09, 3.5523e-09, 2.8844e-09, 2.3394e-09, 1.9584e-09, // f10160
1526  1.6749e-09, 1.4624e-09, 1.2809e-09, 1.1359e-09, 1.0087e-09, // f10170
1527  9.0166e-10, 8.1079e-10, 7.2219e-10, 6.4922e-10, 5.8803e-10, // f10180
1528  5.3290e-10, 4.8590e-10, 4.4111e-10, 4.0184e-10, 3.6644e-10, // f10190
1529  3.3529e-10, 3.0789e-10, 2.8286e-10, 2.6089e-10, 2.4125e-10, // f10200
1530  2.2355e-10, 2.0783e-10, 1.9370e-10, 1.8088e-10, 1.6948e-10, // f10210
1531  1.5929e-10, 1.5013e-10, 1.4193e-10, 1.3470e-10, 1.2841e-10, // f10230
1532  1.2307e-10, 1.1865e-10, 1.1502e-10, 1.1243e-10, 1.1099e-10, // f10240
1533  1.1066e-10, 1.1216e-10, 1.1529e-10, 1.2171e-10, 1.3128e-10, // f10250
1534  1.4153e-10, 1.5962e-10, 1.8048e-10, 2.0936e-10, 2.3165e-10, // f10260
1535  2.5746e-10, 2.9600e-10, 3.3707e-10, 3.5267e-10, 3.5953e-10, // f10270
1536  3.6822e-10, 3.8363e-10, 3.8286e-10, 3.5883e-10, 3.6154e-10, // f10280
1537  3.6653e-10, 3.8507e-10, 4.0250e-10, 4.4435e-10, 4.9889e-10, // f10290
1538  5.6932e-10, 6.3599e-10, 7.0281e-10, 7.5777e-10, 8.1279e-10, // f10300
1539  8.8910e-10, 9.3400e-10, 1.0076e-09, 1.0945e-09, 1.1898e-09, // f10310
1540  1.3108e-09, 1.4725e-09, 1.7028e-09, 1.9619e-09, 2.3527e-09, // f10320
1541  2.6488e-09, 3.0327e-09, 3.4396e-09, 3.8797e-09, 4.4115e-09, // f10340
1542  4.6853e-09, 4.9553e-09, 4.9551e-09, 5.1062e-09, 5.0996e-09, // f10350
1543  5.1119e-09, 5.2283e-09, 5.8297e-09, 6.3439e-09, 6.2675e-09, // f10360
1544  6.3296e-09, 6.5173e-09, 7.1685e-09, 7.0528e-09, 6.8856e-09, // f10370
1545  7.3182e-09, 7.6990e-09, 8.3461e-09, 8.1946e-09, 7.7153e-09, // f10380
1546  7.2411e-09, 6.4511e-09, 5.7336e-09, 4.6105e-09, 3.6962e-09, // f10390
1547  2.9944e-09, 2.4317e-09, 1.9399e-09, 1.5331e-09, 1.2633e-09, // f10400
1548  1.0613e-09, 9.0136e-10, 7.9313e-10, 7.1543e-10, 6.6485e-10, // f10410
1549  6.4225e-10, 6.3980e-10, 6.4598e-10, 6.7428e-10, 7.0270e-10, // f10420
1550  7.4694e-10, 7.7946e-10, 7.9395e-10, 7.8716e-10, 7.6933e-10, // f10430
1551  7.6220e-10, 7.4825e-10, 7.4805e-10, 7.6511e-10, 7.6492e-10, // f10450
1552  7.4103e-10, 7.1979e-10, 7.1686e-10, 7.3403e-10, 7.1142e-10, // f10460
1553  7.0212e-10, 7.1548e-10, 7.5253e-10, 8.0444e-10, 8.2378e-10, // f10470
1554  7.8004e-10, 7.1712e-10, 6.4978e-10, 5.7573e-10, 4.8675e-10, // f10480
1555  3.7945e-10, 3.0118e-10, 2.4241e-10, 1.9100e-10, 1.4816e-10, // f10490
1556  1.1567e-10, 9.4183e-11, 7.7660e-11, 6.5270e-11, 5.6616e-11, // f10500
1557  4.9576e-11, 4.4137e-11, 3.9459e-11, 3.5759e-11, 3.2478e-11, // f10510
1558  2.9419e-11, 2.6703e-11, 2.4365e-11, 2.2412e-11, 2.0606e-11, // f10520
1559  1.9067e-11, 1.7800e-11, 1.6695e-11, 1.5729e-11, 1.4887e-11, // f10530
1560  1.4135e-11, 1.3519e-11, 1.2992e-11, 1.2563e-11, 1.2223e-11, // f10540
1561  1.1962e-11, 1.1775e-11, 1.1657e-11, 1.1605e-11, 1.1619e-11, // f10560
1562  1.1697e-11, 1.1839e-11, 1.2046e-11, 1.2319e-11, 1.2659e-11, // f10570
1563  1.3070e-11, 1.3553e-11, 1.4113e-11, 1.4754e-11, 1.5480e-11, // f10580
1564  1.6298e-11, 1.7214e-11, 1.8236e-11, 1.9372e-11, 2.0635e-11, // f10590
1565  2.2036e-11, 2.3590e-11, 2.5317e-11, 2.7242e-11, 2.9400e-11, // f10600
1566  3.1849e-11, 3.4654e-11, 3.7923e-11, 4.1695e-11, 4.6055e-11, // f10610
1567  5.0940e-11, 5.5624e-11, 6.0667e-11, 6.6261e-11, 7.2692e-11, // f10620
1568  7.9711e-11, 8.7976e-11, 9.6884e-11, 1.0775e-10, 1.2093e-10, // f10630
1569  1.3531e-10, 1.5404e-10, 1.7315e-10, 1.9862e-10, 2.3341e-10, // f10640
1570  2.7014e-10, 3.1716e-10, 3.6957e-10, 4.3233e-10, 5.2566e-10, // f10650
1571  6.2251e-10, 7.2149e-10, 8.3958e-10, 9.5931e-10, 1.1388e-09, // f10670
1572  1.2973e-09, 1.4442e-09, 1.5638e-09, 1.6974e-09, 1.8489e-09, // f10680
1573  1.9830e-09, 2.1720e-09, 2.3662e-09, 2.6987e-09, 3.1697e-09, // f10690
1574  3.6907e-09, 4.2625e-09, 4.7946e-09, 5.3848e-09, 6.0897e-09, // f10700
1575  6.4730e-09, 7.1483e-09, 7.7432e-09, 8.0851e-09, 8.5013e-09, // f10710
1576  8.5909e-09, 9.1890e-09, 9.3124e-09, 9.5936e-09, 9.8787e-09, // f10720
1577  9.9036e-09, 9.6712e-09, 9.2036e-09, 9.0466e-09, 8.9380e-09, // f10730
1578  9.1815e-09, 9.5092e-09, 1.0027e-08, 1.0876e-08, 1.1744e-08, // f10740
1579  1.1853e-08, 1.1296e-08, 1.0134e-08, 8.8245e-09, 7.3930e-09, // f10750
1580  5.7150e-09, 4.4884e-09, 3.4027e-09, 2.6054e-09, 2.0790e-09, // f10760
1581  1.7267e-09, 1.4724e-09, 1.2722e-09, 1.1234e-09, 1.0186e-09, // f10780
1582  9.4680e-10, 8.8854e-10, 8.5127e-10, 8.3157e-10, 8.2226e-10, // f10790
1583  8.3395e-10, 8.3294e-10, 8.4725e-10, 8.8814e-10, 9.3697e-10, // f10800
1584  1.0112e-09, 1.0412e-09, 1.0948e-09, 1.1810e-09, 1.2267e-09, // f10810
1585  1.3690e-09, 1.4512e-09, 1.5568e-09, 1.6552e-09, 1.7321e-09, // f10820
1586  1.8797e-09, 1.9210e-09, 1.9686e-09, 1.9917e-09, 1.9357e-09, // f10830
1587  1.8486e-09, 1.7575e-09, 1.7113e-09, 1.7163e-09, 1.7623e-09, // f10840
1588  1.8536e-09, 1.9765e-09, 2.1334e-09, 2.3237e-09, 2.3259e-09, // f10850
1589  2.1833e-09, 1.9785e-09, 1.7308e-09, 1.4596e-09, 1.1198e-09, // f10860
1590  8.7375e-10, 6.5381e-10, 4.8677e-10, 3.6756e-10, 2.9155e-10, // f10870
1591  2.3735e-10, 1.9590e-10, 1.6638e-10, 1.4549e-10, 1.2947e-10, // f10890
1592  1.1511e-10, 1.0548e-10, 9.6511e-11, 9.0469e-11, 8.5170e-11, // f10900
1593  7.7804e-11, 7.1971e-11, 6.6213e-11, 6.1063e-11, 5.5881e-11, // f10910
1594  5.0508e-11, 4.5932e-11, 4.1997e-11, 3.7672e-11, 3.3972e-11, // f10920
1595  3.0318e-11, 2.6769e-11, 2.3874e-11, 2.1336e-11, 1.9073e-11, // f10930
1596  1.7313e-11, 1.5904e-11, 1.4684e-11, 1.3698e-11, 1.2873e-11, // f10940
1597  1.2175e-11, 1.1542e-11, 1.1024e-11, 1.0602e-11, 1.0267e-11, // f10950
1598  1.0012e-11, 9.8379e-12, 9.7482e-12, 9.7564e-12, 9.8613e-12, // f10960
1599  1.0092e-11, 1.0418e-11, 1.0868e-11, 1.1585e-11, 1.2351e-11, // f10970
1600  1.3372e-11, 1.4841e-11, 1.6457e-11, 1.8681e-11, 2.0550e-11, // f10980
1601  2.2912e-11, 2.5958e-11, 2.9137e-11, 3.2368e-11, 3.4848e-11, // f11000
1602  3.8462e-11, 4.2190e-11, 4.5629e-11, 4.9022e-11, 5.4232e-11, // f11010
1603  6.1900e-11, 7.1953e-11, 8.5368e-11, 9.9699e-11, 1.1734e-10, // f11020
1604  1.4185e-10, 1.7017e-10, 1.9813e-10, 2.3859e-10, 2.7304e-10, // f11030
1605  3.0971e-10, 3.5129e-10, 3.9405e-10, 4.5194e-10, 4.8932e-10, // f11040
1606  5.2436e-10, 5.4098e-10, 5.5542e-10, 5.7794e-10, 5.6992e-10, // f11050
1607  5.8790e-10, 6.1526e-10, 6.8034e-10, 6.7956e-10, 6.6864e-10, // f11060
1608  6.9329e-10, 7.2971e-10, 7.6546e-10, 7.5078e-10, 7.8406e-10, // f11070
1609  8.3896e-10, 9.0111e-10, 9.1994e-10, 8.7189e-10, 8.1426e-10, // f11080
1610  7.3097e-10, 6.3357e-10, 5.1371e-10, 4.0936e-10, 3.2918e-10, // f11090
1611  2.6255e-10, 2.0724e-10, 1.6879e-10, 1.4165e-10, 1.1989e-10, // f11110
1612  1.0125e-10, 8.9629e-11, 7.8458e-11, 6.8826e-11, 6.0935e-11, // f11120
1613  5.5208e-11, 5.2262e-11, 5.0260e-11, 4.8457e-11, 4.7888e-11, // f11130
1614  4.8032e-11, 5.0838e-11, 5.4668e-11, 5.5790e-11, 6.0056e-11, // f11140
1615  6.3811e-11, 6.8848e-11, 7.4590e-11, 7.8249e-11, 8.3371e-11, // f11150
1616  8.3641e-11, 8.6591e-11, 8.9599e-11, 9.3487e-11, 1.0066e-10, // f11160
1617  1.0765e-10, 1.0851e-10, 1.0619e-10, 1.0557e-10, 1.0460e-10, // f11170
1618  1.0796e-10, 1.0523e-10, 1.0674e-10, 1.1261e-10, 1.1431e-10, // f11180
1619  1.1408e-10, 1.0901e-10, 9.9105e-11, 8.8077e-11, 6.9928e-11, // f11190
1620  5.4595e-11, 4.5401e-11, 3.6313e-11, 2.6986e-11, 1.9463e-11, // f11200
1621  1.4577e-11, 1.1583e-11, 9.5492e-12, 8.0770e-12, 6.9642e-12, // f11220
1622  6.0966e-12, 5.4046e-12, 4.8431e-12, 4.3815e-12, 3.9987e-12, // f11230
1623  3.6790e-12, 3.4113e-12, 3.1868e-12, 2.9992e-12, 2.8434e-12, // f11240
1624  2.7153e-12, 2.6120e-12, 2.5311e-12, 2.4705e-12, 2.4290e-12, // f11250
1625  2.4053e-12, 2.3988e-12, 2.4087e-12, 2.4349e-12, 2.4771e-12, // f11260
1626  2.5355e-12, 2.6103e-12, 2.7019e-12, 2.8110e-12, 2.9383e-12, // f11270
1627  3.0848e-12, 3.2518e-12, 3.4405e-12, 3.6527e-12, 3.8902e-12, // f11280
1628  4.1555e-12, 4.4510e-12, 4.7801e-12, 5.1462e-12, 5.5539e-12, // f11290
1629  6.0086e-12, 6.5171e-12, 7.0884e-12, 7.7357e-12, 8.4831e-12, // f11300
1630  9.3096e-12, 1.0282e-11, 1.1407e-11, 1.2690e-11, 1.4148e-11, // f11310
1631  1.5888e-11, 1.7992e-11, 2.0523e-11, 2.3342e-11, 2.6578e-11, // f11330
1632  3.0909e-11, 3.6228e-11, 4.2053e-11, 4.9059e-11, 5.9273e-11, // f11340
1633  7.0166e-11, 8.2298e-11, 9.7071e-11, 1.1673e-10, 1.4010e-10, // f11350
1634  1.6621e-10, 2.0127e-10, 2.3586e-10, 2.7050e-10, 3.0950e-10, // f11360
1635  3.6584e-10, 4.1278e-10, 4.6591e-10, 5.2220e-10, 5.5246e-10, // f11370
1636  6.1500e-10, 6.5878e-10, 7.1167e-10, 7.9372e-10, 8.6975e-10, // f11380
1637  9.6459e-10, 9.7368e-10, 9.8142e-10, 1.0202e-09, 1.0200e-09, // f11390
1638  1.0356e-09, 1.0092e-09, 1.0269e-09, 1.0366e-09, 1.0490e-09, // f11400
1639  1.0717e-09, 1.0792e-09, 1.1016e-09, 1.0849e-09, 1.0929e-09, // f11410
1640  1.0971e-09, 1.0969e-09, 1.0460e-09, 9.2026e-10, 8.1113e-10, // f11420
1641  6.8635e-10, 5.5369e-10, 4.2908e-10, 3.3384e-10, 2.6480e-10, // f11440
1642  2.0810e-10, 1.6915e-10, 1.4051e-10, 1.1867e-10, 1.0158e-10, // f11450
1643  8.8990e-11, 7.9175e-11, 7.0440e-11, 6.3453e-11, 5.7009e-11, // f11460
1644  5.1662e-11, 4.7219e-11, 4.3454e-11, 4.0229e-11, 3.7689e-11, // f11470
1645  3.6567e-11, 3.5865e-11, 3.5955e-11, 3.5928e-11, 3.6298e-11, // f11480
1646  3.7629e-11, 3.9300e-11, 4.1829e-11, 4.4806e-11, 5.0534e-11, // f11490
1647  5.6672e-11, 6.2138e-11, 6.8678e-11, 7.6111e-11, 8.4591e-11, // f11500
1648  9.2634e-11, 9.8085e-11, 1.0830e-10, 1.1949e-10, 1.2511e-10, // f11510
1649  1.3394e-10, 1.3505e-10, 1.4342e-10, 1.4874e-10, 1.4920e-10, // f11520
1650  1.5872e-10, 1.5972e-10, 1.5821e-10, 1.5425e-10, 1.4937e-10, // f11530
1651  1.5089e-10, 1.5521e-10, 1.6325e-10, 1.6924e-10, 1.8265e-10, // f11550
1652  1.9612e-10, 2.0176e-10, 1.9359e-10, 1.7085e-10, 1.5197e-10, // f11560
1653  1.2646e-10, 9.8552e-11, 7.4530e-11, 5.5052e-11, 4.2315e-11, // f11570
1654  3.2736e-11, 2.6171e-11, 2.1909e-11, 1.8286e-11, 1.5752e-11, // f11580
1655  1.3859e-11, 1.2288e-11, 1.1002e-11, 9.7534e-12, 8.8412e-12, // f11590
1656  8.0169e-12, 7.2855e-12, 6.8734e-12, 6.4121e-12, 6.1471e-12, // f11600
1657  5.7780e-12, 5.3478e-12, 4.9652e-12, 4.4043e-12, 3.9862e-12, // f11610
1658  3.4684e-12, 2.9681e-12, 2.5791e-12, 2.2339e-12, 1.9247e-12, // f11620
1659  1.6849e-12, 1.4863e-12, 1.3291e-12, 1.2021e-12, 1.0947e-12, // f11630
1660  1.0015e-12, 9.1935e-13, 8.4612e-13, 7.8036e-13, 7.2100e-13, // f11640
1661  6.6718e-13, 6.1821e-13, 5.7353e-13, 5.3269e-13, 4.9526e-13, // f11660
1662  4.6093e-13, 4.2937e-13, 4.0034e-13, 3.7361e-13, 3.4895e-13, // f11670
1663  3.2621e-13, 3.0520e-13, 2.8578e-13, 2.6782e-13, 2.5120e-13, // f11680
1664  2.3581e-13, 2.2154e-13, 2.0832e-13, 1.9605e-13, 1.8466e-13, // f11690
1665  1.7408e-13, 1.6425e-13, 1.5511e-13, 1.4661e-13, 1.3869e-13, // f11700
1666  1.3131e-13, 1.2444e-13, 1.1803e-13, 1.1205e-13, 1.0646e-13, // f11710
1667  1.0124e-13, 9.6358e-14, 9.1789e-14, 8.7509e-14, 8.3498e-14, // f11720
1668  7.9735e-14, 7.6202e-14, 7.2882e-14, 6.9760e-14, 6.6822e-14, // f11730
1669  6.4053e-14, 6.1442e-14, 5.8978e-14, 5.6650e-14, 5.4448e-14, // f11740
1670  5.2364e-14, 5.0389e-14, 4.8516e-14, 4.6738e-14, 4.5048e-14, // f11750
1671  4.3441e-14, 4.1911e-14, 4.0453e-14, 3.9063e-14, 3.7735e-14, // f11770
1672  3.6467e-14, 3.5254e-14, 3.4093e-14, 3.2980e-14, 3.1914e-14, // f11780
1673  3.0891e-14, 2.9909e-14, 2.8965e-14, 2.8058e-14, 2.7185e-14, // f11790
1674  2.6344e-14, 2.5535e-14, 2.4755e-14, 2.4002e-14, 2.3276e-14, // f11800
1675  2.2576e-14, 2.1899e-14, 2.1245e-14, 2.0613e-14, 2.0002e-14, // f11810
1676  1.9411e-14, 1.8839e-14, 1.8285e-14, 1.7749e-14, 1.7230e-14, // f11820
1677  1.6727e-14, 1.6240e-14, 1.5768e-14, 1.5310e-14, 1.4867e-14, // f11830
1678  1.4436e-14, 1.4019e-14, 1.3614e-14, 1.3221e-14, 1.2840e-14, // f11840
1679  1.2471e-14, 1.2112e-14, 1.1764e-14, 1.1425e-14, 1.1097e-14, // f11850
1680  1.0779e-14, 1.0469e-14, 1.0169e-14, 9.8775e-15, 9.5943e-15, // f11860
1681  9.3193e-15, 9.0522e-15, 8.7928e-15, 8.5409e-15, 8.2962e-15, // f11880
1682  8.0586e-15, 7.8278e-15, 7.6036e-15, 7.3858e-15, 7.1742e-15, // f11890
1683  6.9687e-15, 6.7691e-15, 6.5752e-15, 6.3868e-15, 6.2038e-15, // f11900
1684  6.0260e-15, 5.8533e-15, 5.6856e-15, 5.5226e-15, 5.3642e-15, // f11910
1685  5.2104e-15, 5.0610e-15, 4.9158e-15, 4.7748e-15, 4.6378e-15, // f11920
1686  4.5047e-15, 4.3753e-15, 4.2497e-15, 4.1277e-15, 4.0091e-15, // f11930
1687  3.8939e-15, 3.7820e-15, 3.6733e-15, 3.5677e-15, 3.4651e-15, // f11940
1688  3.3655e-15, 3.2686e-15, 3.1746e-15, 3.0832e-15, 2.9944e-15, // f11950
1689  2.9082e-15, 2.8244e-15, 2.7431e-15, 2.6640e-15, 2.5872e-15, // f11960
1690  2.5126e-15, 2.4401e-15, 2.3697e-15, 2.3014e-15, 2.2349e-15, // f11970
1691  2.1704e-15, 2.1077e-15, 2.0468e-15, 1.9877e-15, 1.9302e-15, // f11990
1692  1.8744e-15, 1.8202e-15, 1.7675e-15, 1.7164e-15, 1.6667e-15, // f12000
1693  1.6184e-15, 1.5716e-15, 1.5260e-15, 1.4818e-15, 1.4389e-15, // f12010
1694  1.3971e-15, 1.3566e-15, 1.3172e-15, 1.2790e-15, 1.2419e-15, // f12020
1695  1.2058e-15, 1.1708e-15, 1.1368e-15, 1.1037e-15, 1.0716e-15, // f12030
1696  1.0405e-15, 1.0102e-15, 9.8079e-16, 9.5224e-16, 9.2451e-16, // f12040
1697  8.9758e-16, 8.7142e-16, 8.4602e-16, 8.2136e-16, 7.9740e-16, // f12050
1698  7.7414e-16, 7.5154e-16, 7.2961e-16, 7.0830e-16, 6.8761e-16, // f12060
1699  6.6752e-16, 6.4801e-16, 6.2906e-16, 6.1066e-16, 5.9280e-16, // f12070
1700  5.7545e-16, 5.5860e-16, 5.4224e-16, 5.2636e-16, 5.1094e-16, // f12080
1701  4.9596e-16};
1702 
1703 
1704 
1705 
1706 
1707 
1708 
1709 /*
1710  --------------------------- CKD_MT_1.00 -------------------------
1711 
1712  11 February 2003
1713 
1714  Release Notes for MT_CKD_1.00
1715 
1716  Prepared by S. A. Clough,
1717  AER Inc.,
1718  131 Harwell Avenue
1719  Lexington, MA 02421
1720  clough@aer.com
1721 
1722  This is the initial release of the MT_CKD water vapor continuum and
1723  represents the first recomputation of the entire self and foreign
1724  broadened continuum since the original model was developed in the
1725  1980s. This version of the continuum is implemented in the line-by-line
1726  model LBLRTM v7.01 and will be utilized in all related AER Radiative
1727  Transfer models.
1728 
1729  further information can be found under
1730  http://www.rtweb.aer.com/continuum_frame.html
1731 
1732  Transformation from original F77 code to C/C++ by
1733  T. Kuhn, iup Bremen, August 2003
1734 
1735  --------------------------- CKD_MT_1.00 -------------------------
1736  */
1737 
1738 
1739 // H2O self continuum parameters at T=296 K
1740 // date of last update: 11/18/02
1741 // units of (CM**3/MOL)*1.E-20
1745 const int SL296_ckd_mt_100_npt = 2003;
1747  0.000e0, 1.720e-01, 1.695e-01,
1748  1.700e-01, 1.695e-01, 1.720e-01, 1.680e-01, 1.687e-01,
1749  1.624e-01, 1.606e-01, 1.508e-01, 1.447e-01, 1.344e-01,
1750  1.214e-01, 1.133e-01, 1.009e-01, 9.217e-02, 8.297e-02,
1751  6.989e-02, 6.513e-02, 5.469e-02, 5.056e-02, 4.417e-02,
1752  3.779e-02, 3.484e-02, 2.994e-02, 2.720e-02, 2.325e-02,
1753  2.063e-02, 1.818e-02, 1.592e-02, 1.405e-02, 1.251e-02,
1754  1.080e-02, 9.647e-03, 8.424e-03, 7.519e-03, 6.555e-03,
1755  5.880e-03, 5.136e-03, 4.511e-03, 3.989e-03, 3.509e-03,
1756  3.114e-03, 2.740e-03, 2.446e-03, 2.144e-03, 1.895e-03,
1757  1.676e-03, 1.486e-03, 1.312e-03, 1.164e-03, 1.031e-03,
1758  9.129e-04, 8.106e-04, 7.213e-04, 6.400e-04, 5.687e-04,
1759  5.063e-04, 4.511e-04, 4.029e-04, 3.596e-04, 3.220e-04,
1760  2.889e-04, 2.597e-04, 2.337e-04, 2.108e-04, 1.907e-04,
1761  1.728e-04, 1.570e-04, 1.430e-04, 1.305e-04, 1.195e-04,
1762  1.097e-04, 1.009e-04, 9.307e-05, 8.604e-05, 7.971e-05,
1763  7.407e-05, 6.896e-05, 6.433e-05, 6.013e-05, 5.631e-05,
1764  5.283e-05, 4.963e-05, 4.669e-05, 4.398e-05, 4.148e-05,
1765  3.917e-05, 3.702e-05, 3.502e-05, 3.316e-05, 3.142e-05,
1766  2.978e-05, 2.825e-05, 2.681e-05, 2.546e-05, 2.419e-05,
1767  2.299e-05, 2.186e-05, 2.079e-05, 1.979e-05, 1.884e-05,
1768  1.795e-05, 1.711e-05, 1.633e-05, 1.559e-05, 1.490e-05,
1769  1.426e-05, 1.367e-05, 1.312e-05, 1.263e-05, 1.218e-05,
1770  1.178e-05, 1.143e-05, 1.112e-05, 1.088e-05, 1.070e-05,
1771  1.057e-05, 1.050e-05, 1.051e-05, 1.059e-05, 1.076e-05,
1772  1.100e-05, 1.133e-05, 1.180e-05, 1.237e-05, 1.308e-05,
1773  1.393e-05, 1.483e-05, 1.614e-05, 1.758e-05, 1.930e-05,
1774  2.123e-05, 2.346e-05, 2.647e-05, 2.930e-05, 3.279e-05,
1775  3.745e-05, 4.152e-05, 4.813e-05, 5.477e-05, 6.203e-05,
1776  7.331e-05, 8.056e-05, 9.882e-05, 1.050e-04, 1.210e-04,
1777  1.341e-04, 1.572e-04, 1.698e-04, 1.968e-04, 2.175e-04,
1778  2.431e-04, 2.735e-04, 2.867e-04, 3.190e-04, 3.371e-04,
1779  3.554e-04, 3.726e-04, 3.837e-04, 3.878e-04, 3.864e-04,
1780  3.858e-04, 3.841e-04, 3.852e-04, 3.815e-04, 3.762e-04,
1781  3.618e-04, 3.579e-04, 3.450e-04, 3.202e-04, 3.018e-04,
1782  2.785e-04, 2.602e-04, 2.416e-04, 2.097e-04, 1.939e-04,
1783  1.689e-04, 1.498e-04, 1.308e-04, 1.170e-04, 1.011e-04,
1784  9.237e-05, 7.909e-05, 7.006e-05, 6.112e-05, 5.401e-05,
1785  4.914e-05, 4.266e-05, 3.963e-05, 3.316e-05, 3.037e-05,
1786  2.598e-05, 2.294e-05, 2.066e-05, 1.813e-05, 1.583e-05,
1787  1.423e-05, 1.247e-05, 1.116e-05, 9.760e-06, 8.596e-06,
1788  7.720e-06, 6.825e-06, 6.108e-06, 5.366e-06, 4.733e-06,
1789  4.229e-06, 3.731e-06, 3.346e-06, 2.972e-06, 2.628e-06,
1790  2.356e-06, 2.102e-06, 1.878e-06, 1.678e-06, 1.507e-06,
1791  1.348e-06, 1.210e-06, 1.089e-06, 9.806e-07, 8.857e-07,
1792  8.004e-07, 7.261e-07, 6.599e-07, 6.005e-07, 5.479e-07,
1793  5.011e-07, 4.595e-07, 4.219e-07, 3.885e-07, 3.583e-07,
1794  3.314e-07, 3.071e-07, 2.852e-07, 2.654e-07, 2.474e-07,
1795  2.311e-07, 2.162e-07, 2.026e-07, 1.902e-07, 1.788e-07,
1796  1.683e-07, 1.587e-07, 1.497e-07, 1.415e-07, 1.338e-07,
1797  1.266e-07, 1.200e-07, 1.138e-07, 1.080e-07, 1.027e-07,
1798  9.764e-08, 9.296e-08, 8.862e-08, 8.458e-08, 8.087e-08,
1799  7.744e-08, 7.429e-08, 7.145e-08, 6.893e-08, 6.664e-08,
1800  6.468e-08, 6.322e-08, 6.162e-08, 6.070e-08, 5.992e-08,
1801  5.913e-08, 5.841e-08, 5.796e-08, 5.757e-08, 5.746e-08,
1802  5.731e-08, 5.679e-08, 5.577e-08, 5.671e-08, 5.656e-08,
1803  5.594e-08, 5.593e-08, 5.602e-08, 5.620e-08, 5.693e-08,
1804  5.725e-08, 5.858e-08, 6.037e-08, 6.249e-08, 6.535e-08,
1805  6.899e-08, 7.356e-08, 7.918e-08, 8.618e-08, 9.385e-08,
1806  1.039e-07, 1.158e-07, 1.290e-07, 1.437e-07, 1.650e-07,
1807  1.871e-07, 2.121e-07, 2.427e-07, 2.773e-07, 3.247e-07,
1808  3.677e-07, 4.037e-07, 4.776e-07, 5.101e-07, 6.214e-07,
1809  6.936e-07, 7.581e-07, 8.486e-07, 9.355e-07, 9.942e-07,
1810  1.063e-06, 1.123e-06, 1.191e-06, 1.215e-06, 1.247e-06,
1811  1.260e-06, 1.271e-06, 1.284e-06, 1.317e-06, 1.323e-06,
1812  1.349e-06, 1.353e-06, 1.362e-06, 1.344e-06, 1.329e-06,
1813  1.336e-06, 1.327e-06, 1.325e-06, 1.359e-06, 1.374e-06,
1814  1.415e-06, 1.462e-06, 1.526e-06, 1.619e-06, 1.735e-06,
1815  1.863e-06, 2.034e-06, 2.265e-06, 2.482e-06, 2.756e-06,
1816  3.103e-06, 3.466e-06, 3.832e-06, 4.378e-06, 4.913e-06,
1817  5.651e-06, 6.311e-06, 7.169e-06, 8.057e-06, 9.253e-06,
1818  1.047e-05, 1.212e-05, 1.360e-05, 1.569e-05, 1.776e-05,
1819  2.020e-05, 2.281e-05, 2.683e-05, 2.994e-05, 3.488e-05,
1820  3.896e-05, 4.499e-05, 5.175e-05, 6.035e-05, 6.340e-05,
1821  7.281e-05, 7.923e-05, 8.348e-05, 9.631e-05, 1.044e-04,
1822  1.102e-04, 1.176e-04, 1.244e-04, 1.283e-04, 1.326e-04,
1823  1.400e-04, 1.395e-04, 1.387e-04, 1.363e-04, 1.314e-04,
1824  1.241e-04, 1.228e-04, 1.148e-04, 1.086e-04, 1.018e-04,
1825  8.890e-05, 8.316e-05, 7.292e-05, 6.452e-05, 5.625e-05,
1826  5.045e-05, 4.380e-05, 3.762e-05, 3.290e-05, 2.836e-05,
1827  2.485e-05, 2.168e-05, 1.895e-05, 1.659e-05, 1.453e-05,
1828  1.282e-05, 1.132e-05, 1.001e-05, 8.836e-06, 7.804e-06,
1829  6.922e-06, 6.116e-06, 5.429e-06, 4.824e-06, 4.278e-06,
1830  3.788e-06, 3.371e-06, 2.985e-06, 2.649e-06, 2.357e-06,
1831  2.090e-06, 1.858e-06, 1.647e-06, 1.462e-06, 1.299e-06,
1832  1.155e-06, 1.028e-06, 9.142e-07, 8.132e-07, 7.246e-07,
1833  6.451e-07, 5.764e-07, 5.151e-07, 4.603e-07, 4.121e-07,
1834  3.694e-07, 3.318e-07, 2.985e-07, 2.690e-07, 2.428e-07,
1835  2.197e-07, 1.992e-07, 1.810e-07, 1.649e-07, 1.506e-07,
1836  1.378e-07, 1.265e-07, 1.163e-07, 1.073e-07, 9.918e-08,
1837  9.191e-08, 8.538e-08, 7.949e-08, 7.419e-08, 6.940e-08,
1838  6.508e-08, 6.114e-08, 5.761e-08, 5.437e-08, 5.146e-08,
1839  4.890e-08, 4.636e-08, 4.406e-08, 4.201e-08, 4.015e-08,
1840  3.840e-08, 3.661e-08, 3.510e-08, 3.377e-08, 3.242e-08,
1841  3.130e-08, 3.015e-08, 2.918e-08, 2.830e-08, 2.758e-08,
1842  2.707e-08, 2.656e-08, 2.619e-08, 2.609e-08, 2.615e-08,
1843  2.630e-08, 2.675e-08, 2.745e-08, 2.842e-08, 2.966e-08,
1844  3.125e-08, 3.318e-08, 3.565e-08, 3.850e-08, 4.191e-08,
1845  4.590e-08, 5.059e-08, 5.607e-08, 6.239e-08, 6.958e-08,
1846  7.796e-08, 8.773e-08, 9.880e-08, 1.114e-07, 1.258e-07,
1847  1.422e-07, 1.610e-07, 1.822e-07, 2.060e-07, 2.337e-07,
1848  2.645e-07, 2.996e-07, 3.393e-07, 3.843e-07, 4.363e-07,
1849  4.935e-07, 5.607e-07, 6.363e-07, 7.242e-07, 8.230e-07,
1850  9.411e-07, 1.071e-06, 1.232e-06, 1.402e-06, 1.600e-06,
1851  1.820e-06, 2.128e-06, 2.386e-06, 2.781e-06, 3.242e-06,
1852  3.653e-06, 4.323e-06, 4.747e-06, 5.321e-06, 5.919e-06,
1853  6.681e-06, 7.101e-06, 7.983e-06, 8.342e-06, 8.741e-06,
1854  9.431e-06, 9.952e-06, 1.026e-05, 1.055e-05, 1.095e-05,
1855  1.095e-05, 1.087e-05, 1.056e-05, 1.026e-05, 9.715e-06,
1856  9.252e-06, 8.452e-06, 7.958e-06, 7.268e-06, 6.295e-06,
1857  6.003e-06, 5.000e-06, 4.591e-06, 3.983e-06, 3.479e-06,
1858  3.058e-06, 2.667e-06, 2.293e-06, 1.995e-06, 1.747e-06,
1859  1.517e-06, 1.335e-06, 1.165e-06, 1.028e-06, 9.007e-07,
1860  7.956e-07, 7.015e-07, 6.192e-07, 5.491e-07, 4.859e-07,
1861  4.297e-07, 3.799e-07, 3.380e-07, 3.002e-07, 2.659e-07,
1862  2.366e-07, 2.103e-07, 1.861e-07, 1.655e-07, 1.469e-07,
1863  1.309e-07, 1.162e-07, 1.032e-07, 9.198e-08, 8.181e-08,
1864  7.294e-08, 6.516e-08, 5.787e-08, 5.163e-08, 4.612e-08,
1865  4.119e-08, 3.695e-08, 3.308e-08, 2.976e-08, 2.670e-08,
1866  2.407e-08, 2.171e-08, 1.965e-08, 1.780e-08, 1.617e-08,
1867  1.470e-08, 1.341e-08, 1.227e-08, 1.125e-08, 1.033e-08,
1868  9.524e-09, 8.797e-09, 8.162e-09, 7.565e-09, 7.040e-09,
1869  6.560e-09, 6.129e-09, 5.733e-09, 5.376e-09, 5.043e-09,
1870  4.750e-09, 4.466e-09, 4.211e-09, 3.977e-09, 3.759e-09,
1871  3.558e-09, 3.373e-09, 3.201e-09, 3.043e-09, 2.895e-09,
1872  2.760e-09, 2.635e-09, 2.518e-09, 2.411e-09, 2.314e-09,
1873  2.230e-09, 2.151e-09, 2.087e-09, 2.035e-09, 1.988e-09,
1874  1.946e-09, 1.927e-09, 1.916e-09, 1.916e-09, 1.933e-09,
1875  1.966e-09, 2.018e-09, 2.090e-09, 2.182e-09, 2.299e-09,
1876  2.442e-09, 2.623e-09, 2.832e-09, 3.079e-09, 3.368e-09,
1877  3.714e-09, 4.104e-09, 4.567e-09, 5.091e-09, 5.701e-09,
1878  6.398e-09, 7.194e-09, 8.127e-09, 9.141e-09, 1.035e-08,
1879  1.177e-08, 1.338e-08, 1.508e-08, 1.711e-08, 1.955e-08,
1880  2.216e-08, 2.534e-08, 2.871e-08, 3.291e-08, 3.711e-08,
1881  4.285e-08, 4.868e-08, 5.509e-08, 6.276e-08, 7.262e-08,
1882  8.252e-08, 9.400e-08, 1.064e-07, 1.247e-07, 1.411e-07,
1883  1.626e-07, 1.827e-07, 2.044e-07, 2.284e-07, 2.452e-07,
1884  2.854e-07, 3.026e-07, 3.278e-07, 3.474e-07, 3.693e-07,
1885  3.930e-07, 4.104e-07, 4.220e-07, 4.439e-07, 4.545e-07,
1886  4.778e-07, 4.812e-07, 5.018e-07, 4.899e-07, 5.075e-07,
1887  5.073e-07, 5.171e-07, 5.131e-07, 5.250e-07, 5.617e-07,
1888  5.846e-07, 6.239e-07, 6.696e-07, 7.398e-07, 8.073e-07,
1889  9.150e-07, 1.009e-06, 1.116e-06, 1.264e-06, 1.439e-06,
1890  1.644e-06, 1.856e-06, 2.147e-06, 2.317e-06, 2.713e-06,
1891  2.882e-06, 2.990e-06, 3.489e-06, 3.581e-06, 4.033e-06,
1892  4.260e-06, 4.543e-06, 4.840e-06, 4.826e-06, 5.013e-06,
1893  5.252e-06, 5.277e-06, 5.306e-06, 5.236e-06, 5.123e-06,
1894  5.171e-06, 4.843e-06, 4.615e-06, 4.385e-06, 3.970e-06,
1895  3.693e-06, 3.231e-06, 2.915e-06, 2.495e-06, 2.144e-06,
1896  1.910e-06, 1.639e-06, 1.417e-06, 1.226e-06, 1.065e-06,
1897  9.290e-07, 8.142e-07, 7.161e-07, 6.318e-07, 5.581e-07,
1898  4.943e-07, 4.376e-07, 3.884e-07, 3.449e-07, 3.060e-07,
1899  2.712e-07, 2.412e-07, 2.139e-07, 1.903e-07, 1.689e-07,
1900  1.499e-07, 1.331e-07, 1.183e-07, 1.050e-07, 9.362e-08,
1901  8.306e-08, 7.403e-08, 6.578e-08, 5.853e-08, 5.216e-08,
1902  4.632e-08, 4.127e-08, 3.678e-08, 3.279e-08, 2.923e-08,
1903  2.612e-08, 2.339e-08, 2.094e-08, 1.877e-08, 1.686e-08,
1904  1.516e-08, 1.366e-08, 1.234e-08, 1.114e-08, 1.012e-08,
1905  9.182e-09, 8.362e-09, 7.634e-09, 6.981e-09, 6.406e-09,
1906  5.888e-09, 5.428e-09, 5.021e-09, 4.650e-09, 4.326e-09,
1907  4.033e-09, 3.770e-09, 3.536e-09, 3.327e-09, 3.141e-09,
1908  2.974e-09, 2.825e-09, 2.697e-09, 2.584e-09, 2.488e-09,
1909  2.406e-09, 2.340e-09, 2.292e-09, 2.259e-09, 2.244e-09,
1910  2.243e-09, 2.272e-09, 2.310e-09, 2.378e-09, 2.454e-09,
1911  2.618e-09, 2.672e-09, 2.831e-09, 3.050e-09, 3.225e-09,
1912  3.425e-09, 3.677e-09, 3.968e-09, 4.221e-09, 4.639e-09,
1913  4.960e-09, 5.359e-09, 5.649e-09, 6.230e-09, 6.716e-09,
1914  7.218e-09, 7.746e-09, 7.988e-09, 8.627e-09, 8.999e-09,
1915  9.442e-09, 9.820e-09, 1.015e-08, 1.060e-08, 1.079e-08,
1916  1.109e-08, 1.137e-08, 1.186e-08, 1.180e-08, 1.187e-08,
1917  1.194e-08, 1.192e-08, 1.224e-08, 1.245e-08, 1.246e-08,
1918  1.318e-08, 1.377e-08, 1.471e-08, 1.582e-08, 1.713e-08,
1919  1.853e-08, 2.063e-08, 2.270e-08, 2.567e-08, 2.891e-08,
1920  3.264e-08, 3.744e-08, 4.286e-08, 4.915e-08, 5.623e-08,
1921  6.336e-08, 7.293e-08, 8.309e-08, 9.319e-08, 1.091e-07,
1922  1.243e-07, 1.348e-07, 1.449e-07, 1.620e-07, 1.846e-07,
1923  1.937e-07, 2.040e-07, 2.179e-07, 2.298e-07, 2.433e-07,
1924  2.439e-07, 2.464e-07, 2.611e-07, 2.617e-07, 2.582e-07,
1925  2.453e-07, 2.401e-07, 2.349e-07, 2.203e-07, 2.066e-07,
1926  1.939e-07, 1.780e-07, 1.558e-07, 1.391e-07, 1.203e-07,
1927  1.048e-07, 9.464e-08, 8.306e-08, 7.239e-08, 6.317e-08,
1928  5.520e-08, 4.847e-08, 4.282e-08, 3.796e-08, 3.377e-08,
1929  2.996e-08, 2.678e-08, 2.400e-08, 2.134e-08, 1.904e-08,
1930  1.705e-08, 1.523e-08, 1.350e-08, 1.204e-08, 1.070e-08,
1931  9.408e-09, 8.476e-09, 7.470e-09, 6.679e-09, 5.929e-09,
1932  5.267e-09, 4.711e-09, 4.172e-09, 3.761e-09, 3.288e-09,
1933  2.929e-09, 2.609e-09, 2.315e-09, 2.042e-09, 1.844e-09,
1934  1.640e-09, 1.470e-09, 1.310e-09, 1.176e-09, 1.049e-09,
1935  9.377e-10, 8.462e-10, 7.616e-10, 6.854e-10, 6.191e-10,
1936  5.596e-10, 5.078e-10, 4.611e-10, 4.197e-10, 3.830e-10,
1937  3.505e-10, 3.215e-10, 2.956e-10, 2.726e-10, 2.521e-10,
1938  2.338e-10, 2.173e-10, 2.026e-10, 1.895e-10, 1.777e-10,
1939  1.672e-10, 1.579e-10, 1.496e-10, 1.423e-10, 1.358e-10,
1940  1.302e-10, 1.254e-10, 1.216e-10, 1.187e-10, 1.163e-10,
1941  1.147e-10, 1.145e-10, 1.150e-10, 1.170e-10, 1.192e-10,
1942  1.250e-10, 1.298e-10, 1.345e-10, 1.405e-10, 1.538e-10,
1943  1.648e-10, 1.721e-10, 1.872e-10, 1.968e-10, 2.089e-10,
1944  2.172e-10, 2.317e-10, 2.389e-10, 2.503e-10, 2.585e-10,
1945  2.686e-10, 2.800e-10, 2.895e-10, 3.019e-10, 3.037e-10,
1946  3.076e-10, 3.146e-10, 3.198e-10, 3.332e-10, 3.397e-10,
1947  3.540e-10, 3.667e-10, 3.895e-10, 4.071e-10, 4.565e-10,
1948  4.983e-10, 5.439e-10, 5.968e-10, 6.676e-10, 7.456e-10,
1949  8.405e-10, 9.478e-10, 1.064e-09, 1.218e-09, 1.386e-09,
1950  1.581e-09, 1.787e-09, 2.032e-09, 2.347e-09, 2.677e-09,
1951  3.008e-09, 3.544e-09, 4.056e-09, 4.687e-09, 5.331e-09,
1952  6.227e-09, 6.854e-09, 8.139e-09, 8.945e-09, 9.865e-09,
1953  1.125e-08, 1.178e-08, 1.364e-08, 1.436e-08, 1.540e-08,
1954  1.672e-08, 1.793e-08, 1.906e-08, 2.036e-08, 2.144e-08,
1955  2.292e-08, 2.371e-08, 2.493e-08, 2.606e-08, 2.706e-08,
1956  2.866e-08, 3.036e-08, 3.136e-08, 3.405e-08, 3.665e-08,
1957  3.837e-08, 4.229e-08, 4.748e-08, 5.320e-08, 5.763e-08,
1958  6.677e-08, 7.216e-08, 7.716e-08, 8.958e-08, 9.419e-08,
1959  1.036e-07, 1.108e-07, 1.189e-07, 1.246e-07, 1.348e-07,
1960  1.310e-07, 1.361e-07, 1.364e-07, 1.363e-07, 1.343e-07,
1961  1.293e-07, 1.254e-07, 1.235e-07, 1.158e-07, 1.107e-07,
1962  9.961e-08, 9.011e-08, 7.910e-08, 6.916e-08, 6.338e-08,
1963  5.564e-08, 4.827e-08, 4.198e-08, 3.695e-08, 3.276e-08,
1964  2.929e-08, 2.633e-08, 2.391e-08, 2.192e-08, 2.021e-08,
1965  1.890e-08, 1.772e-08, 1.667e-08, 1.603e-08, 1.547e-08,
1966  1.537e-08, 1.492e-08, 1.515e-08, 1.479e-08, 1.450e-08,
1967  1.513e-08, 1.495e-08, 1.529e-08, 1.565e-08, 1.564e-08,
1968  1.553e-08, 1.569e-08, 1.584e-08, 1.570e-08, 1.538e-08,
1969  1.513e-08, 1.472e-08, 1.425e-08, 1.349e-08, 1.328e-08,
1970  1.249e-08, 1.170e-08, 1.077e-08, 9.514e-09, 8.614e-09,
1971  7.460e-09, 6.621e-09, 5.775e-09, 5.006e-09, 4.308e-09,
1972  3.747e-09, 3.240e-09, 2.840e-09, 2.481e-09, 2.184e-09,
1973  1.923e-09, 1.710e-09, 1.504e-09, 1.334e-09, 1.187e-09,
1974  1.053e-09, 9.367e-10, 8.306e-10, 7.419e-10, 6.630e-10,
1975  5.918e-10, 5.277e-10, 4.717e-10, 4.222e-10, 3.783e-10,
1976  3.390e-10, 3.036e-10, 2.729e-10, 2.455e-10, 2.211e-10,
1977  1.995e-10, 1.804e-10, 1.635e-10, 1.485e-10, 1.355e-10,
1978  1.240e-10, 1.139e-10, 1.051e-10, 9.757e-11, 9.114e-11,
1979  8.577e-11, 8.139e-11, 7.792e-11, 7.520e-11, 7.390e-11,
1980  7.311e-11, 7.277e-11, 7.482e-11, 7.698e-11, 8.162e-11,
1981  8.517e-11, 8.968e-11, 9.905e-11, 1.075e-10, 1.187e-10,
1982  1.291e-10, 1.426e-10, 1.573e-10, 1.734e-10, 1.905e-10,
1983  2.097e-10, 2.280e-10, 2.473e-10, 2.718e-10, 2.922e-10,
1984  3.128e-10, 3.361e-10, 3.641e-10, 3.910e-10, 4.196e-10,
1985  4.501e-10, 4.932e-10, 5.258e-10, 5.755e-10, 6.253e-10,
1986  6.664e-10, 7.344e-10, 7.985e-10, 8.877e-10, 1.005e-09,
1987  1.118e-09, 1.251e-09, 1.428e-09, 1.610e-09, 1.888e-09,
1988  2.077e-09, 2.331e-09, 2.751e-09, 3.061e-09, 3.522e-09,
1989  3.805e-09, 4.181e-09, 4.575e-09, 5.167e-09, 5.634e-09,
1990  6.007e-09, 6.501e-09, 6.829e-09, 7.211e-09, 7.262e-09,
1991  7.696e-09, 7.832e-09, 7.799e-09, 7.651e-09, 7.304e-09,
1992  7.150e-09, 6.977e-09, 6.603e-09, 6.209e-09, 5.690e-09,
1993  5.432e-09, 4.764e-09, 4.189e-09, 3.640e-09, 3.203e-09,
1994  2.848e-09, 2.510e-09, 2.194e-09, 1.946e-09, 1.750e-09,
1995  1.567e-09, 1.426e-09, 1.302e-09, 1.197e-09, 1.109e-09,
1996  1.035e-09, 9.719e-10, 9.207e-10, 8.957e-10, 8.578e-10,
1997  8.262e-10, 8.117e-10, 7.987e-10, 7.875e-10, 7.741e-10,
1998  7.762e-10, 7.537e-10, 7.424e-10, 7.474e-10, 7.294e-10,
1999  7.216e-10, 7.233e-10, 7.075e-10, 6.892e-10, 6.618e-10,
2000  6.314e-10, 6.208e-10, 5.689e-10, 5.550e-10, 4.984e-10,
2001  4.600e-10, 4.078e-10, 3.879e-10, 3.459e-10, 2.982e-10,
2002  2.626e-10, 2.329e-10, 1.988e-10, 1.735e-10, 1.487e-10,
2003  1.297e-10, 1.133e-10, 9.943e-11, 8.736e-11, 7.726e-11,
2004  6.836e-11, 6.053e-11, 5.384e-11, 4.789e-11, 4.267e-11,
2005  3.804e-11, 3.398e-11, 3.034e-11, 2.710e-11, 2.425e-11,
2006  2.173e-11, 1.950e-11, 1.752e-11, 1.574e-11, 1.418e-11,
2007  1.278e-11, 1.154e-11, 1.044e-11, 9.463e-12, 8.602e-12,
2008  7.841e-12, 7.171e-12, 6.584e-12, 6.073e-12, 5.631e-12,
2009  5.254e-12, 4.937e-12, 4.679e-12, 4.476e-12, 4.328e-12,
2010  4.233e-12, 4.194e-12, 4.211e-12, 4.286e-12, 4.424e-12,
2011  4.628e-12, 4.906e-12, 5.262e-12, 5.708e-12, 6.254e-12,
2012  6.914e-12, 7.714e-12, 8.677e-12, 9.747e-12, 1.101e-11,
2013  1.256e-11, 1.409e-11, 1.597e-11, 1.807e-11, 2.034e-11,
2014  2.316e-11, 2.622e-11, 2.962e-11, 3.369e-11, 3.819e-11,
2015  4.329e-11, 4.932e-11, 5.589e-11, 6.364e-11, 7.284e-11,
2016  8.236e-11, 9.447e-11, 1.078e-10, 1.229e-10, 1.417e-10,
2017  1.614e-10, 1.843e-10, 2.107e-10, 2.406e-10, 2.728e-10,
2018  3.195e-10, 3.595e-10, 4.153e-10, 4.736e-10, 5.410e-10,
2019  6.088e-10, 6.769e-10, 7.691e-10, 8.545e-10, 9.621e-10,
2020  1.047e-09, 1.161e-09, 1.296e-09, 1.424e-09, 1.576e-09,
2021  1.739e-09, 1.893e-09, 2.080e-09, 2.336e-09, 2.604e-09,
2022  2.760e-09, 3.001e-09, 3.365e-09, 3.550e-09, 3.895e-09,
2023  4.183e-09, 4.614e-09, 4.846e-09, 5.068e-09, 5.427e-09,
2024  5.541e-09, 5.864e-09, 5.997e-09, 5.997e-09, 6.061e-09,
2025  5.944e-09, 5.855e-09, 5.661e-09, 5.523e-09, 5.374e-09,
2026  4.940e-09, 4.688e-09, 4.170e-09, 3.913e-09, 3.423e-09,
2027  2.997e-09, 2.598e-09, 2.253e-09, 1.946e-09, 1.710e-09,
2028  1.507e-09, 1.336e-09, 1.190e-09, 1.068e-09, 9.623e-10,
2029  8.772e-10, 8.007e-10, 7.420e-10, 6.884e-10, 6.483e-10,
2030  6.162e-10, 5.922e-10, 5.688e-10, 5.654e-10, 5.637e-10,
2031  5.701e-10, 5.781e-10, 5.874e-10, 6.268e-10, 6.357e-10,
2032  6.525e-10, 7.137e-10, 7.441e-10, 8.024e-10, 8.485e-10,
2033  9.143e-10, 9.536e-10, 9.717e-10, 1.018e-09, 1.042e-09,
2034  1.054e-09, 1.092e-09, 1.079e-09, 1.064e-09, 1.043e-09,
2035  1.020e-09, 9.687e-10, 9.273e-10, 9.208e-10, 9.068e-10,
2036  7.687e-10, 7.385e-10, 6.595e-10, 5.870e-10, 5.144e-10,
2037  4.417e-10, 3.804e-10, 3.301e-10, 2.866e-10, 2.509e-10,
2038  2.202e-10, 1.947e-10, 1.719e-10, 1.525e-10, 1.361e-10,
2039  1.210e-10, 1.084e-10, 9.800e-11, 8.801e-11, 7.954e-11,
2040  7.124e-11, 6.335e-11, 5.760e-11, 5.132e-11, 4.601e-11,
2041  4.096e-11, 3.657e-11, 3.250e-11, 2.909e-11, 2.587e-11,
2042  2.297e-11, 2.050e-11, 1.828e-11, 1.632e-11, 1.462e-11,
2043  1.314e-11, 1.185e-11, 1.073e-11, 9.760e-12, 8.922e-12,
2044  8.206e-12, 7.602e-12, 7.100e-12, 6.694e-12, 6.378e-12,
2045  6.149e-12, 6.004e-12, 5.941e-12, 5.962e-12, 6.069e-12,
2046  6.265e-12, 6.551e-12, 6.935e-12, 7.457e-12, 8.074e-12,
2047  8.811e-12, 9.852e-12, 1.086e-11, 1.207e-11, 1.361e-11,
2048  1.553e-11, 1.737e-11, 1.930e-11, 2.175e-11, 2.410e-11,
2049  2.706e-11, 3.023e-11, 3.313e-11, 3.657e-11, 4.118e-11,
2050  4.569e-11, 5.025e-11, 5.660e-11, 6.231e-11, 6.881e-11,
2051  7.996e-11, 8.526e-11, 9.694e-11, 1.106e-10, 1.222e-10,
2052  1.355e-10, 1.525e-10, 1.775e-10, 1.924e-10, 2.181e-10,
2053  2.379e-10, 2.662e-10, 2.907e-10, 3.154e-10, 3.366e-10,
2054  3.579e-10, 3.858e-10, 4.046e-10, 4.196e-10, 4.166e-10,
2055  4.457e-10, 4.466e-10, 4.404e-10, 4.337e-10, 4.150e-10,
2056  4.083e-10, 3.910e-10, 3.723e-10, 3.514e-10, 3.303e-10,
2057  2.847e-10, 2.546e-10, 2.230e-10, 1.994e-10, 1.733e-10,
2058  1.488e-10, 1.297e-10, 1.144e-10, 1.004e-10, 8.741e-11,
2059  7.928e-11, 7.034e-11, 6.323e-11, 5.754e-11, 5.250e-11,
2060  4.850e-11, 4.502e-11, 4.286e-11, 4.028e-11, 3.899e-11,
2061  3.824e-11, 3.761e-11, 3.804e-11, 3.839e-11, 3.845e-11,
2062  4.244e-11, 4.382e-11, 4.582e-11, 4.847e-11, 5.209e-11,
2063  5.384e-11, 5.887e-11, 6.371e-11, 6.737e-11, 7.168e-11,
2064  7.415e-11, 7.827e-11, 8.037e-11, 8.120e-11, 8.071e-11,
2065  8.008e-11, 7.851e-11, 7.544e-11, 7.377e-11, 7.173e-11,
2066  6.801e-11, 6.267e-11, 5.727e-11, 5.288e-11, 4.853e-11,
2067  4.082e-11, 3.645e-11, 3.136e-11, 2.672e-11, 2.304e-11,
2068  1.986e-11, 1.725e-11, 1.503e-11, 1.315e-11, 1.153e-11,
2069  1.014e-11, 8.942e-12, 7.901e-12, 6.993e-12, 6.199e-12,
2070  5.502e-12, 4.890e-12, 4.351e-12, 3.878e-12, 3.461e-12,
2071  3.094e-12, 2.771e-12, 2.488e-12, 2.241e-12, 2.025e-12,
2072  1.838e-12, 1.677e-12, 1.541e-12, 1.427e-12, 1.335e-12,
2073  1.262e-12, 1.209e-12, 1.176e-12, 1.161e-12, 1.165e-12,
2074  1.189e-12, 1.234e-12, 1.300e-12, 1.389e-12, 1.503e-12,
2075  1.644e-12, 1.814e-12, 2.017e-12, 2.255e-12, 2.534e-12,
2076  2.858e-12, 3.231e-12, 3.661e-12, 4.153e-12, 4.717e-12,
2077  5.360e-12, 6.094e-12, 6.930e-12, 7.882e-12, 8.966e-12,
2078  1.020e-11, 1.162e-11, 1.324e-11, 1.510e-11, 1.720e-11,
2079  1.965e-11, 2.237e-11, 2.560e-11, 2.927e-11, 3.371e-11,
2080  3.842e-11, 4.429e-11, 5.139e-11, 5.798e-11, 6.697e-11,
2081  7.626e-11, 8.647e-11, 1.022e-10, 1.136e-10, 1.300e-10,
2082  1.481e-10, 1.672e-10, 1.871e-10, 2.126e-10, 2.357e-10,
2083  2.583e-10, 2.997e-10, 3.289e-10, 3.702e-10, 4.012e-10,
2084  4.319e-10, 4.527e-10, 5.001e-10, 5.448e-10, 5.611e-10,
2085  5.760e-10, 5.965e-10, 6.079e-10, 6.207e-10, 6.276e-10,
2086  6.222e-10, 6.137e-10, 6.000e-10, 5.814e-10, 5.393e-10,
2087  5.350e-10, 4.947e-10, 4.629e-10, 4.117e-10, 3.712e-10,
2088  3.372e-10, 2.923e-10, 2.550e-10, 2.232e-10, 1.929e-10,
2089  1.679e-10, 1.460e-10, 1.289e-10, 1.130e-10, 9.953e-11,
2090  8.763e-11, 7.760e-11, 6.900e-11, 6.160e-11, 5.525e-11,
2091  4.958e-11, 4.489e-11, 4.072e-11, 3.728e-11, 3.438e-11,
2092  3.205e-11, 3.006e-11, 2.848e-11, 2.766e-11, 2.688e-11,
2093  2.664e-11, 2.670e-11, 2.696e-11, 2.786e-11, 2.861e-11,
2094  3.009e-11, 3.178e-11, 3.389e-11, 3.587e-11, 3.819e-11,
2095  4.054e-11, 4.417e-11, 4.703e-11, 5.137e-11, 5.460e-11,
2096  6.055e-11, 6.333e-11, 6.773e-11, 7.219e-11, 7.717e-11,
2097  8.131e-11, 8.491e-11, 8.574e-11, 9.010e-11, 9.017e-11,
2098  8.999e-11, 8.959e-11, 8.838e-11, 8.579e-11, 8.162e-11,
2099  8.098e-11, 7.472e-11, 7.108e-11, 6.559e-11, 5.994e-11,
2100  5.172e-11, 4.424e-11, 3.951e-11, 3.340e-11, 2.902e-11,
2101  2.541e-11, 2.215e-11, 1.945e-11, 1.716e-11, 1.503e-11,
2102  1.339e-11, 1.185e-11, 1.050e-11, 9.336e-12, 8.307e-12,
2103  7.312e-12, 6.550e-12, 5.836e-12, 5.178e-12, 4.600e-12,
2104  4.086e-12, 3.639e-12, 3.247e-12, 2.904e-12, 2.604e-12,
2105  2.341e-12, 2.112e-12, 1.914e-12, 1.744e-12, 1.598e-12,
2106  1.476e-12, 1.374e-12, 1.293e-12, 1.230e-12, 1.185e-12,
2107  1.158e-12, 1.147e-12, 1.154e-12, 1.177e-12, 1.219e-12,
2108  1.280e-12, 1.360e-12, 1.463e-12, 1.591e-12, 1.750e-12,
2109  1.940e-12, 2.156e-12, 2.430e-12, 2.748e-12, 3.052e-12,
2110  3.533e-12, 3.967e-12, 4.471e-12, 5.041e-12, 5.860e-12,
2111  6.664e-12, 7.522e-12, 8.342e-12, 9.412e-12, 1.072e-11,
2112  1.213e-11, 1.343e-11, 1.496e-11, 1.664e-11, 1.822e-11,
2113  2.029e-11, 2.233e-11, 2.457e-11, 2.709e-11, 2.928e-11,
2114  3.115e-11, 3.356e-11, 3.592e-11, 3.818e-11, 3.936e-11,
2115  4.061e-11, 4.149e-11, 4.299e-11, 4.223e-11, 4.251e-11,
2116  4.287e-11, 4.177e-11, 4.094e-11, 3.942e-11, 3.772e-11,
2117  3.614e-11, 3.394e-11, 3.222e-11, 2.791e-11, 2.665e-11,
2118  2.309e-11, 2.032e-11, 1.740e-11, 1.535e-11, 1.323e-11,
2119  1.151e-11, 9.803e-12, 8.650e-12, 7.540e-12, 6.619e-12,
2120  5.832e-12, 5.113e-12, 4.503e-12, 3.975e-12, 3.520e-12,
2121  3.112e-12, 2.797e-12, 2.500e-12, 2.240e-12, 2.013e-12,
2122  1.819e-12, 1.653e-12, 1.513e-12, 1.395e-12, 1.299e-12,
2123  1.225e-12, 1.168e-12, 1.124e-12, 1.148e-12, 1.107e-12,
2124  1.128e-12, 1.169e-12, 1.233e-12, 1.307e-12, 1.359e-12,
2125  1.543e-12, 1.686e-12, 1.794e-12, 2.028e-12, 2.210e-12,
2126  2.441e-12, 2.653e-12, 2.828e-12, 3.093e-12, 3.280e-12,
2127  3.551e-12, 3.677e-12, 3.803e-12, 3.844e-12, 4.068e-12,
2128  4.093e-12, 4.002e-12, 3.904e-12, 3.624e-12, 3.633e-12,
2129  3.622e-12, 3.443e-12, 3.184e-12, 2.934e-12, 2.476e-12,
2130  2.212e-12, 1.867e-12, 1.594e-12, 1.370e-12, 1.192e-12,
2131  1.045e-12, 9.211e-13, 8.170e-13, 7.290e-13, 6.550e-13,
2132  5.929e-13, 5.415e-13, 4.995e-13, 4.661e-13, 4.406e-13,
2133  4.225e-13, 4.116e-13, 4.075e-13, 4.102e-13, 4.198e-13,
2134  4.365e-13, 4.606e-13, 4.925e-13, 5.326e-13, 5.818e-13,
2135  6.407e-13, 7.104e-13, 7.920e-13, 8.868e-13, 9.964e-13,
2136  1.123e-12, 1.268e-12, 1.434e-12, 1.626e-12, 1.848e-12,
2137  2.107e-12, 2.422e-12, 2.772e-12, 3.145e-12, 3.704e-12,
2138  4.270e-12, 4.721e-12, 5.361e-12, 6.083e-12, 7.095e-12,
2139  7.968e-12, 9.228e-12, 1.048e-11, 1.187e-11, 1.336e-11,
2140  1.577e-11, 1.772e-11, 2.017e-11, 2.250e-11, 2.630e-11,
2141  2.911e-11, 3.356e-11, 3.820e-11, 4.173e-11, 4.811e-11,
2142  5.254e-11, 5.839e-11, 6.187e-11, 6.805e-11, 7.118e-11,
2143  7.369e-11, 7.664e-11, 7.794e-11, 7.947e-11, 8.036e-11,
2144  7.954e-11, 7.849e-11, 7.518e-11, 7.462e-11, 6.926e-11,
2145  6.531e-11, 6.197e-11, 5.421e-11, 4.777e-11, 4.111e-11,
2146  3.679e-11, 3.166e-11, 2.786e-11, 2.436e-11, 2.144e-11,
2147  1.859e-11, 1.628e-11, 1.414e-11, 1.237e-11, 1.093e-11,
2148  9.558e-12 };
2149 
2150 // H2O self continuum parameters at T=260 K
2151 // date of last update: 11/18/02
2152 // units of (CM**3/MOL)*1.E-20
2156 const int SL260_ckd_mt_100_npt = 2003;
2158  0.000e0, 2.749e-01, 2.732e-01,
2159  2.752e-01, 2.732e-01, 2.749e-01, 2.676e-01, 2.667e-01,
2160  2.545e-01, 2.497e-01, 2.327e-01, 2.218e-01, 2.036e-01,
2161  1.825e-01, 1.694e-01, 1.497e-01, 1.353e-01, 1.210e-01,
2162  1.014e-01, 9.405e-02, 7.848e-02, 7.195e-02, 6.246e-02,
2163  5.306e-02, 4.853e-02, 4.138e-02, 3.735e-02, 3.171e-02,
2164  2.785e-02, 2.431e-02, 2.111e-02, 1.845e-02, 1.640e-02,
2165  1.405e-02, 1.255e-02, 1.098e-02, 9.797e-03, 8.646e-03,
2166  7.779e-03, 6.898e-03, 6.099e-03, 5.453e-03, 4.909e-03,
2167  4.413e-03, 3.959e-03, 3.581e-03, 3.199e-03, 2.871e-03,
2168  2.583e-03, 2.330e-03, 2.086e-03, 1.874e-03, 1.684e-03,
2169  1.512e-03, 1.361e-03, 1.225e-03, 1.100e-03, 9.890e-04,
2170  8.916e-04, 8.039e-04, 7.256e-04, 6.545e-04, 5.918e-04,
2171  5.359e-04, 4.867e-04, 4.426e-04, 4.033e-04, 3.682e-04,
2172  3.366e-04, 3.085e-04, 2.833e-04, 2.605e-04, 2.403e-04,
2173  2.221e-04, 2.055e-04, 1.908e-04, 1.774e-04, 1.653e-04,
2174  1.544e-04, 1.443e-04, 1.351e-04, 1.267e-04, 1.190e-04,
2175  1.119e-04, 1.053e-04, 9.922e-05, 9.355e-05, 8.831e-05,
2176  8.339e-05, 7.878e-05, 7.449e-05, 7.043e-05, 6.664e-05,
2177  6.307e-05, 5.969e-05, 5.654e-05, 5.357e-05, 5.075e-05,
2178  4.810e-05, 4.560e-05, 4.322e-05, 4.102e-05, 3.892e-05,
2179  3.696e-05, 3.511e-05, 3.339e-05, 3.177e-05, 3.026e-05,
2180  2.886e-05, 2.756e-05, 2.636e-05, 2.527e-05, 2.427e-05,
2181  2.337e-05, 2.257e-05, 2.185e-05, 2.127e-05, 2.080e-05,
2182  2.041e-05, 2.013e-05, 2.000e-05, 1.997e-05, 2.009e-05,
2183  2.031e-05, 2.068e-05, 2.124e-05, 2.189e-05, 2.267e-05,
2184  2.364e-05, 2.463e-05, 2.618e-05, 2.774e-05, 2.937e-05,
2185  3.144e-05, 3.359e-05, 3.695e-05, 4.002e-05, 4.374e-05,
2186  4.947e-05, 5.431e-05, 6.281e-05, 7.169e-05, 8.157e-05,
2187  9.728e-05, 1.079e-04, 1.337e-04, 1.442e-04, 1.683e-04,
2188  1.879e-04, 2.223e-04, 2.425e-04, 2.838e-04, 3.143e-04,
2189  3.527e-04, 4.012e-04, 4.237e-04, 4.747e-04, 5.057e-04,
2190  5.409e-04, 5.734e-04, 5.944e-04, 6.077e-04, 6.175e-04,
2191  6.238e-04, 6.226e-04, 6.248e-04, 6.192e-04, 6.098e-04,
2192  5.818e-04, 5.709e-04, 5.465e-04, 5.043e-04, 4.699e-04,
2193  4.294e-04, 3.984e-04, 3.672e-04, 3.152e-04, 2.883e-04,
2194  2.503e-04, 2.211e-04, 1.920e-04, 1.714e-04, 1.485e-04,
2195  1.358e-04, 1.156e-04, 1.021e-04, 8.887e-05, 7.842e-05,
2196  7.120e-05, 6.186e-05, 5.730e-05, 4.792e-05, 4.364e-05,
2197  3.720e-05, 3.280e-05, 2.946e-05, 2.591e-05, 2.261e-05,
2198  2.048e-05, 1.813e-05, 1.630e-05, 1.447e-05, 1.282e-05,
2199  1.167e-05, 1.041e-05, 9.449e-06, 8.510e-06, 7.596e-06,
2200  6.961e-06, 6.272e-06, 5.728e-06, 5.198e-06, 4.667e-06,
2201  4.288e-06, 3.897e-06, 3.551e-06, 3.235e-06, 2.952e-06,
2202  2.688e-06, 2.449e-06, 2.241e-06, 2.050e-06, 1.879e-06,
2203  1.722e-06, 1.582e-06, 1.456e-06, 1.339e-06, 1.236e-06,
2204  1.144e-06, 1.060e-06, 9.830e-07, 9.149e-07, 8.535e-07,
2205  7.973e-07, 7.466e-07, 6.999e-07, 6.574e-07, 6.180e-07,
2206  5.821e-07, 5.487e-07, 5.180e-07, 4.896e-07, 4.631e-07,
2207  4.386e-07, 4.160e-07, 3.945e-07, 3.748e-07, 3.562e-07,
2208  3.385e-07, 3.222e-07, 3.068e-07, 2.922e-07, 2.788e-07,
2209  2.659e-07, 2.539e-07, 2.425e-07, 2.318e-07, 2.219e-07,
2210  2.127e-07, 2.039e-07, 1.958e-07, 1.885e-07, 1.818e-07,
2211  1.758e-07, 1.711e-07, 1.662e-07, 1.630e-07, 1.605e-07,
2212  1.580e-07, 1.559e-07, 1.545e-07, 1.532e-07, 1.522e-07,
2213  1.510e-07, 1.495e-07, 1.465e-07, 1.483e-07, 1.469e-07,
2214  1.448e-07, 1.444e-07, 1.436e-07, 1.426e-07, 1.431e-07,
2215  1.425e-07, 1.445e-07, 1.477e-07, 1.515e-07, 1.567e-07,
2216  1.634e-07, 1.712e-07, 1.802e-07, 1.914e-07, 2.024e-07,
2217  2.159e-07, 2.295e-07, 2.461e-07, 2.621e-07, 2.868e-07,
2218  3.102e-07, 3.394e-07, 3.784e-07, 4.223e-07, 4.864e-07,
2219  5.501e-07, 6.039e-07, 7.193e-07, 7.728e-07, 9.514e-07,
2220  1.073e-06, 1.180e-06, 1.333e-06, 1.472e-06, 1.566e-06,
2221  1.677e-06, 1.784e-06, 1.904e-06, 1.953e-06, 2.020e-06,
2222  2.074e-06, 2.128e-06, 2.162e-06, 2.219e-06, 2.221e-06,
2223  2.249e-06, 2.239e-06, 2.235e-06, 2.185e-06, 2.141e-06,
2224  2.124e-06, 2.090e-06, 2.068e-06, 2.100e-06, 2.104e-06,
2225  2.142e-06, 2.181e-06, 2.257e-06, 2.362e-06, 2.500e-06,
2226  2.664e-06, 2.884e-06, 3.189e-06, 3.480e-06, 3.847e-06,
2227  4.313e-06, 4.790e-06, 5.250e-06, 5.989e-06, 6.692e-06,
2228  7.668e-06, 8.520e-06, 9.606e-06, 1.073e-05, 1.225e-05,
2229  1.377e-05, 1.582e-05, 1.761e-05, 2.029e-05, 2.284e-05,
2230  2.602e-05, 2.940e-05, 3.483e-05, 3.928e-05, 4.618e-05,
2231  5.240e-05, 6.132e-05, 7.183e-05, 8.521e-05, 9.111e-05,
2232  1.070e-04, 1.184e-04, 1.264e-04, 1.475e-04, 1.612e-04,
2233  1.704e-04, 1.818e-04, 1.924e-04, 1.994e-04, 2.061e-04,
2234  2.180e-04, 2.187e-04, 2.200e-04, 2.196e-04, 2.131e-04,
2235  2.015e-04, 1.988e-04, 1.847e-04, 1.729e-04, 1.597e-04,
2236  1.373e-04, 1.262e-04, 1.087e-04, 9.439e-05, 8.061e-05,
2237  7.093e-05, 6.049e-05, 5.120e-05, 4.435e-05, 3.817e-05,
2238  3.340e-05, 2.927e-05, 2.573e-05, 2.291e-05, 2.040e-05,
2239  1.827e-05, 1.636e-05, 1.463e-05, 1.309e-05, 1.170e-05,
2240  1.047e-05, 9.315e-06, 8.328e-06, 7.458e-06, 6.665e-06,
2241  5.940e-06, 5.316e-06, 4.752e-06, 4.252e-06, 3.825e-06,
2242  3.421e-06, 3.064e-06, 2.746e-06, 2.465e-06, 2.216e-06,
2243  1.990e-06, 1.790e-06, 1.609e-06, 1.449e-06, 1.306e-06,
2244  1.177e-06, 1.063e-06, 9.607e-07, 8.672e-07, 7.855e-07,
2245  7.118e-07, 6.460e-07, 5.871e-07, 5.340e-07, 4.868e-07,
2246  4.447e-07, 4.068e-07, 3.729e-07, 3.423e-07, 3.151e-07,
2247  2.905e-07, 2.686e-07, 2.484e-07, 2.306e-07, 2.142e-07,
2248  1.995e-07, 1.860e-07, 1.738e-07, 1.626e-07, 1.522e-07,
2249  1.427e-07, 1.338e-07, 1.258e-07, 1.183e-07, 1.116e-07,
2250  1.056e-07, 9.972e-08, 9.460e-08, 9.007e-08, 8.592e-08,
2251  8.195e-08, 7.816e-08, 7.483e-08, 7.193e-08, 6.892e-08,
2252  6.642e-08, 6.386e-08, 6.154e-08, 5.949e-08, 5.764e-08,
2253  5.622e-08, 5.479e-08, 5.364e-08, 5.301e-08, 5.267e-08,
2254  5.263e-08, 5.313e-08, 5.410e-08, 5.550e-08, 5.745e-08,
2255  6.003e-08, 6.311e-08, 6.713e-08, 7.173e-08, 7.724e-08,
2256  8.368e-08, 9.121e-08, 9.986e-08, 1.097e-07, 1.209e-07,
2257  1.338e-07, 1.486e-07, 1.651e-07, 1.837e-07, 2.048e-07,
2258  2.289e-07, 2.557e-07, 2.857e-07, 3.195e-07, 3.587e-07,
2259  4.015e-07, 4.497e-07, 5.049e-07, 5.665e-07, 6.366e-07,
2260  7.121e-07, 7.996e-07, 8.946e-07, 1.002e-06, 1.117e-06,
2261  1.262e-06, 1.416e-06, 1.611e-06, 1.807e-06, 2.056e-06,
2262  2.351e-06, 2.769e-06, 3.138e-06, 3.699e-06, 4.386e-06,
2263  5.041e-06, 6.074e-06, 6.812e-06, 7.790e-06, 8.855e-06,
2264  1.014e-05, 1.095e-05, 1.245e-05, 1.316e-05, 1.390e-05,
2265  1.504e-05, 1.583e-05, 1.617e-05, 1.652e-05, 1.713e-05,
2266  1.724e-05, 1.715e-05, 1.668e-05, 1.629e-05, 1.552e-05,
2267  1.478e-05, 1.340e-05, 1.245e-05, 1.121e-05, 9.575e-06,
2268  8.956e-06, 7.345e-06, 6.597e-06, 5.612e-06, 4.818e-06,
2269  4.165e-06, 3.579e-06, 3.041e-06, 2.623e-06, 2.290e-06,
2270  1.984e-06, 1.748e-06, 1.534e-06, 1.369e-06, 1.219e-06,
2271  1.092e-06, 9.800e-07, 8.762e-07, 7.896e-07, 7.104e-07,
2272  6.364e-07, 5.691e-07, 5.107e-07, 4.575e-07, 4.090e-07,
2273  3.667e-07, 3.287e-07, 2.931e-07, 2.633e-07, 2.356e-07,
2274  2.111e-07, 1.895e-07, 1.697e-07, 1.525e-07, 1.369e-07,
2275  1.233e-07, 1.114e-07, 9.988e-08, 9.004e-08, 8.149e-08,
2276  7.352e-08, 6.662e-08, 6.030e-08, 5.479e-08, 4.974e-08,
2277  4.532e-08, 4.129e-08, 3.781e-08, 3.462e-08, 3.176e-08,
2278  2.919e-08, 2.687e-08, 2.481e-08, 2.292e-08, 2.119e-08,
2279  1.967e-08, 1.828e-08, 1.706e-08, 1.589e-08, 1.487e-08,
2280  1.393e-08, 1.307e-08, 1.228e-08, 1.156e-08, 1.089e-08,
2281  1.028e-08, 9.696e-09, 9.159e-09, 8.658e-09, 8.187e-09,
2282  7.746e-09, 7.340e-09, 6.953e-09, 6.594e-09, 6.259e-09,
2283  5.948e-09, 5.660e-09, 5.386e-09, 5.135e-09, 4.903e-09,
2284  4.703e-09, 4.515e-09, 4.362e-09, 4.233e-09, 4.117e-09,
2285  4.017e-09, 3.962e-09, 3.924e-09, 3.905e-09, 3.922e-09,
2286  3.967e-09, 4.046e-09, 4.165e-09, 4.320e-09, 4.522e-09,
2287  4.769e-09, 5.083e-09, 5.443e-09, 5.872e-09, 6.366e-09,
2288  6.949e-09, 7.601e-09, 8.371e-09, 9.220e-09, 1.020e-08,
2289  1.129e-08, 1.251e-08, 1.393e-08, 1.542e-08, 1.720e-08,
2290  1.926e-08, 2.152e-08, 2.392e-08, 2.678e-08, 3.028e-08,
2291  3.390e-08, 3.836e-08, 4.309e-08, 4.900e-08, 5.481e-08,
2292  6.252e-08, 7.039e-08, 7.883e-08, 8.849e-08, 1.012e-07,
2293  1.142e-07, 1.300e-07, 1.475e-07, 1.732e-07, 1.978e-07,
2294  2.304e-07, 2.631e-07, 2.988e-07, 3.392e-07, 3.690e-07,
2295  4.355e-07, 4.672e-07, 5.110e-07, 5.461e-07, 5.828e-07,
2296  6.233e-07, 6.509e-07, 6.672e-07, 6.969e-07, 7.104e-07,
2297  7.439e-07, 7.463e-07, 7.708e-07, 7.466e-07, 7.668e-07,
2298  7.549e-07, 7.586e-07, 7.384e-07, 7.439e-07, 7.785e-07,
2299  7.915e-07, 8.310e-07, 8.745e-07, 9.558e-07, 1.038e-06,
2300  1.173e-06, 1.304e-06, 1.452e-06, 1.671e-06, 1.931e-06,
2301  2.239e-06, 2.578e-06, 3.032e-06, 3.334e-06, 3.980e-06,
2302  4.300e-06, 4.518e-06, 5.321e-06, 5.508e-06, 6.211e-06,
2303  6.590e-06, 7.046e-06, 7.555e-06, 7.558e-06, 7.875e-06,
2304  8.319e-06, 8.433e-06, 8.590e-06, 8.503e-06, 8.304e-06,
2305  8.336e-06, 7.739e-06, 7.301e-06, 6.827e-06, 6.078e-06,
2306  5.551e-06, 4.762e-06, 4.224e-06, 3.538e-06, 2.984e-06,
2307  2.619e-06, 2.227e-06, 1.923e-06, 1.669e-06, 1.462e-06,
2308  1.294e-06, 1.155e-06, 1.033e-06, 9.231e-07, 8.238e-07,
2309  7.360e-07, 6.564e-07, 5.869e-07, 5.236e-07, 4.673e-07,
2310  4.174e-07, 3.736e-07, 3.330e-07, 2.976e-07, 2.657e-07,
2311  2.367e-07, 2.106e-07, 1.877e-07, 1.671e-07, 1.494e-07,
2312  1.332e-07, 1.192e-07, 1.065e-07, 9.558e-08, 8.586e-08,
2313  7.717e-08, 6.958e-08, 6.278e-08, 5.666e-08, 5.121e-08,
2314  4.647e-08, 4.213e-08, 3.815e-08, 3.459e-08, 3.146e-08,
2315  2.862e-08, 2.604e-08, 2.375e-08, 2.162e-08, 1.981e-08,
2316  1.817e-08, 1.670e-08, 1.537e-08, 1.417e-08, 1.310e-08,
2317  1.215e-08, 1.128e-08, 1.050e-08, 9.793e-09, 9.158e-09,
2318  8.586e-09, 8.068e-09, 7.595e-09, 7.166e-09, 6.778e-09,
2319  6.427e-09, 6.108e-09, 5.826e-09, 5.571e-09, 5.347e-09,
2320  5.144e-09, 4.968e-09, 4.822e-09, 4.692e-09, 4.589e-09,
2321  4.506e-09, 4.467e-09, 4.440e-09, 4.466e-09, 4.515e-09,
2322  4.718e-09, 4.729e-09, 4.937e-09, 5.249e-09, 5.466e-09,
2323  5.713e-09, 6.030e-09, 6.436e-09, 6.741e-09, 7.330e-09,
2324  7.787e-09, 8.414e-09, 8.908e-09, 9.868e-09, 1.069e-08,
2325  1.158e-08, 1.253e-08, 1.300e-08, 1.409e-08, 1.470e-08,
2326  1.548e-08, 1.612e-08, 1.666e-08, 1.736e-08, 1.763e-08,
2327  1.812e-08, 1.852e-08, 1.923e-08, 1.897e-08, 1.893e-08,
2328  1.888e-08, 1.868e-08, 1.895e-08, 1.899e-08, 1.876e-08,
2329  1.960e-08, 2.020e-08, 2.121e-08, 2.239e-08, 2.379e-08,
2330  2.526e-08, 2.766e-08, 2.994e-08, 3.332e-08, 3.703e-08,
2331  4.158e-08, 4.774e-08, 5.499e-08, 6.355e-08, 7.349e-08,
2332  8.414e-08, 9.846e-08, 1.143e-07, 1.307e-07, 1.562e-07,
2333  1.817e-07, 2.011e-07, 2.192e-07, 2.485e-07, 2.867e-07,
2334  3.035e-07, 3.223e-07, 3.443e-07, 3.617e-07, 3.793e-07,
2335  3.793e-07, 3.839e-07, 4.081e-07, 4.117e-07, 4.085e-07,
2336  3.920e-07, 3.851e-07, 3.754e-07, 3.490e-07, 3.229e-07,
2337  2.978e-07, 2.691e-07, 2.312e-07, 2.029e-07, 1.721e-07,
2338  1.472e-07, 1.308e-07, 1.132e-07, 9.736e-08, 8.458e-08,
2339  7.402e-08, 6.534e-08, 5.811e-08, 5.235e-08, 4.762e-08,
2340  4.293e-08, 3.896e-08, 3.526e-08, 3.165e-08, 2.833e-08,
2341  2.551e-08, 2.288e-08, 2.036e-08, 1.820e-08, 1.626e-08,
2342  1.438e-08, 1.299e-08, 1.149e-08, 1.030e-08, 9.148e-09,
2343  8.122e-09, 7.264e-09, 6.425e-09, 5.777e-09, 5.060e-09,
2344  4.502e-09, 4.013e-09, 3.567e-09, 3.145e-09, 2.864e-09,
2345  2.553e-09, 2.311e-09, 2.087e-09, 1.886e-09, 1.716e-09,
2346  1.556e-09, 1.432e-09, 1.311e-09, 1.202e-09, 1.104e-09,
2347  1.013e-09, 9.293e-10, 8.493e-10, 7.790e-10, 7.185e-10,
2348  6.642e-10, 6.141e-10, 5.684e-10, 5.346e-10, 5.032e-10,
2349  4.725e-10, 4.439e-10, 4.176e-10, 3.930e-10, 3.714e-10,
2350  3.515e-10, 3.332e-10, 3.167e-10, 3.020e-10, 2.887e-10,
2351  2.769e-10, 2.665e-10, 2.578e-10, 2.503e-10, 2.436e-10,
2352  2.377e-10, 2.342e-10, 2.305e-10, 2.296e-10, 2.278e-10,
2353  2.321e-10, 2.355e-10, 2.402e-10, 2.478e-10, 2.670e-10,
2354  2.848e-10, 2.982e-10, 3.263e-10, 3.438e-10, 3.649e-10,
2355  3.829e-10, 4.115e-10, 4.264e-10, 4.473e-10, 4.630e-10,
2356  4.808e-10, 4.995e-10, 5.142e-10, 5.313e-10, 5.318e-10,
2357  5.358e-10, 5.452e-10, 5.507e-10, 5.698e-10, 5.782e-10,
2358  5.983e-10, 6.164e-10, 6.532e-10, 6.811e-10, 7.624e-10,
2359  8.302e-10, 9.067e-10, 9.937e-10, 1.104e-09, 1.221e-09,
2360  1.361e-09, 1.516e-09, 1.675e-09, 1.883e-09, 2.101e-09,
2361  2.349e-09, 2.614e-09, 2.920e-09, 3.305e-09, 3.724e-09,
2362  4.142e-09, 4.887e-09, 5.614e-09, 6.506e-09, 7.463e-09,
2363  8.817e-09, 9.849e-09, 1.187e-08, 1.321e-08, 1.474e-08,
2364  1.698e-08, 1.794e-08, 2.090e-08, 2.211e-08, 2.362e-08,
2365  2.556e-08, 2.729e-08, 2.880e-08, 3.046e-08, 3.167e-08,
2366  3.367e-08, 3.457e-08, 3.590e-08, 3.711e-08, 3.826e-08,
2367  4.001e-08, 4.211e-08, 4.315e-08, 4.661e-08, 5.010e-08,
2368  5.249e-08, 5.840e-08, 6.628e-08, 7.512e-08, 8.253e-08,
2369  9.722e-08, 1.067e-07, 1.153e-07, 1.347e-07, 1.428e-07,
2370  1.577e-07, 1.694e-07, 1.833e-07, 1.938e-07, 2.108e-07,
2371  2.059e-07, 2.157e-07, 2.185e-07, 2.208e-07, 2.182e-07,
2372  2.093e-07, 2.014e-07, 1.962e-07, 1.819e-07, 1.713e-07,
2373  1.510e-07, 1.340e-07, 1.154e-07, 9.890e-08, 8.880e-08,
2374  7.673e-08, 6.599e-08, 5.730e-08, 5.081e-08, 4.567e-08,
2375  4.147e-08, 3.773e-08, 3.460e-08, 3.194e-08, 2.953e-08,
2376  2.759e-08, 2.594e-08, 2.442e-08, 2.355e-08, 2.283e-08,
2377  2.279e-08, 2.231e-08, 2.279e-08, 2.239e-08, 2.210e-08,
2378  2.309e-08, 2.293e-08, 2.352e-08, 2.415e-08, 2.430e-08,
2379  2.426e-08, 2.465e-08, 2.500e-08, 2.496e-08, 2.465e-08,
2380  2.445e-08, 2.383e-08, 2.299e-08, 2.165e-08, 2.113e-08,
2381  1.968e-08, 1.819e-08, 1.644e-08, 1.427e-08, 1.270e-08,
2382  1.082e-08, 9.428e-09, 8.091e-09, 6.958e-09, 5.988e-09,
2383  5.246e-09, 4.601e-09, 4.098e-09, 3.664e-09, 3.287e-09,
2384  2.942e-09, 2.656e-09, 2.364e-09, 2.118e-09, 1.903e-09,
2385  1.703e-09, 1.525e-09, 1.365e-09, 1.229e-09, 1.107e-09,
2386  9.960e-10, 8.945e-10, 8.080e-10, 7.308e-10, 6.616e-10,
2387  5.994e-10, 5.422e-10, 4.929e-10, 4.478e-10, 4.070e-10,
2388  3.707e-10, 3.379e-10, 3.087e-10, 2.823e-10, 2.592e-10,
2389  2.385e-10, 2.201e-10, 2.038e-10, 1.897e-10, 1.774e-10,
2390  1.667e-10, 1.577e-10, 1.502e-10, 1.437e-10, 1.394e-10,
2391  1.358e-10, 1.324e-10, 1.329e-10, 1.324e-10, 1.360e-10,
2392  1.390e-10, 1.424e-10, 1.544e-10, 1.651e-10, 1.817e-10,
2393  1.984e-10, 2.195e-10, 2.438e-10, 2.700e-10, 2.991e-10,
2394  3.322e-10, 3.632e-10, 3.957e-10, 4.360e-10, 4.701e-10,
2395  5.030e-10, 5.381e-10, 5.793e-10, 6.190e-10, 6.596e-10,
2396  7.004e-10, 7.561e-10, 7.934e-10, 8.552e-10, 9.142e-10,
2397  9.570e-10, 1.027e-09, 1.097e-09, 1.193e-09, 1.334e-09,
2398  1.470e-09, 1.636e-09, 1.871e-09, 2.122e-09, 2.519e-09,
2399  2.806e-09, 3.203e-09, 3.846e-09, 4.362e-09, 5.114e-09,
2400  5.643e-09, 6.305e-09, 6.981e-09, 7.983e-09, 8.783e-09,
2401  9.419e-09, 1.017e-08, 1.063e-08, 1.121e-08, 1.130e-08,
2402  1.201e-08, 1.225e-08, 1.232e-08, 1.223e-08, 1.177e-08,
2403  1.151e-08, 1.116e-08, 1.047e-08, 9.698e-09, 8.734e-09,
2404  8.202e-09, 7.041e-09, 6.074e-09, 5.172e-09, 4.468e-09,
2405  3.913e-09, 3.414e-09, 2.975e-09, 2.650e-09, 2.406e-09,
2406  2.173e-09, 2.009e-09, 1.861e-09, 1.727e-09, 1.612e-09,
2407  1.514e-09, 1.430e-09, 1.362e-09, 1.333e-09, 1.288e-09,
2408  1.249e-09, 1.238e-09, 1.228e-09, 1.217e-09, 1.202e-09,
2409  1.209e-09, 1.177e-09, 1.157e-09, 1.165e-09, 1.142e-09,
2410  1.131e-09, 1.138e-09, 1.117e-09, 1.100e-09, 1.069e-09,
2411  1.023e-09, 1.005e-09, 9.159e-10, 8.863e-10, 7.865e-10,
2412  7.153e-10, 6.247e-10, 5.846e-10, 5.133e-10, 4.360e-10,
2413  3.789e-10, 3.335e-10, 2.833e-10, 2.483e-10, 2.155e-10,
2414  1.918e-10, 1.709e-10, 1.529e-10, 1.374e-10, 1.235e-10,
2415  1.108e-10, 9.933e-11, 8.932e-11, 8.022e-11, 7.224e-11,
2416  6.520e-11, 5.896e-11, 5.328e-11, 4.813e-11, 4.365e-11,
2417  3.961e-11, 3.594e-11, 3.266e-11, 2.967e-11, 2.701e-11,
2418  2.464e-11, 2.248e-11, 2.054e-11, 1.878e-11, 1.721e-11,
2419  1.579e-11, 1.453e-11, 1.341e-11, 1.241e-11, 1.154e-11,
2420  1.078e-11, 1.014e-11, 9.601e-12, 9.167e-12, 8.838e-12,
2421  8.614e-12, 8.493e-12, 8.481e-12, 8.581e-12, 8.795e-12,
2422  9.131e-12, 9.601e-12, 1.021e-11, 1.097e-11, 1.191e-11,
2423  1.303e-11, 1.439e-11, 1.601e-11, 1.778e-11, 1.984e-11,
2424  2.234e-11, 2.474e-11, 2.766e-11, 3.085e-11, 3.415e-11,
2425  3.821e-11, 4.261e-11, 4.748e-11, 5.323e-11, 5.935e-11,
2426  6.619e-11, 7.418e-11, 8.294e-11, 9.260e-11, 1.039e-10,
2427  1.156e-10, 1.297e-10, 1.460e-10, 1.641e-10, 1.858e-10,
2428  2.100e-10, 2.383e-10, 2.724e-10, 3.116e-10, 3.538e-10,
2429  4.173e-10, 4.727e-10, 5.503e-10, 6.337e-10, 7.320e-10,
2430  8.298e-10, 9.328e-10, 1.059e-09, 1.176e-09, 1.328e-09,
2431  1.445e-09, 1.593e-09, 1.770e-09, 1.954e-09, 2.175e-09,
2432  2.405e-09, 2.622e-09, 2.906e-09, 3.294e-09, 3.713e-09,
2433  3.980e-09, 4.384e-09, 4.987e-09, 5.311e-09, 5.874e-09,
2434  6.337e-09, 7.027e-09, 7.390e-09, 7.769e-09, 8.374e-09,
2435  8.605e-09, 9.165e-09, 9.415e-09, 9.511e-09, 9.704e-09,
2436  9.588e-09, 9.450e-09, 9.086e-09, 8.798e-09, 8.469e-09,
2437  7.697e-09, 7.168e-09, 6.255e-09, 5.772e-09, 4.970e-09,
2438  4.271e-09, 3.653e-09, 3.154e-09, 2.742e-09, 2.435e-09,
2439  2.166e-09, 1.936e-09, 1.731e-09, 1.556e-09, 1.399e-09,
2440  1.272e-09, 1.157e-09, 1.066e-09, 9.844e-10, 9.258e-10,
2441  8.787e-10, 8.421e-10, 8.083e-10, 8.046e-10, 8.067e-10,
2442  8.181e-10, 8.325e-10, 8.517e-10, 9.151e-10, 9.351e-10,
2443  9.677e-10, 1.071e-09, 1.126e-09, 1.219e-09, 1.297e-09,
2444  1.408e-09, 1.476e-09, 1.517e-09, 1.600e-09, 1.649e-09,
2445  1.678e-09, 1.746e-09, 1.742e-09, 1.728e-09, 1.699e-09,
2446  1.655e-09, 1.561e-09, 1.480e-09, 1.451e-09, 1.411e-09,
2447  1.171e-09, 1.106e-09, 9.714e-10, 8.523e-10, 7.346e-10,
2448  6.241e-10, 5.371e-10, 4.704e-10, 4.144e-10, 3.683e-10,
2449  3.292e-10, 2.942e-10, 2.620e-10, 2.341e-10, 2.104e-10,
2450  1.884e-10, 1.700e-10, 1.546e-10, 1.394e-10, 1.265e-10,
2451  1.140e-10, 1.019e-10, 9.279e-11, 8.283e-11, 7.458e-11,
2452  6.668e-11, 5.976e-11, 5.330e-11, 4.794e-11, 4.289e-11,
2453  3.841e-11, 3.467e-11, 3.130e-11, 2.832e-11, 2.582e-11,
2454  2.356e-11, 2.152e-11, 1.970e-11, 1.808e-11, 1.664e-11,
2455  1.539e-11, 1.434e-11, 1.344e-11, 1.269e-11, 1.209e-11,
2456  1.162e-11, 1.129e-11, 1.108e-11, 1.099e-11, 1.103e-11,
2457  1.119e-11, 1.148e-11, 1.193e-11, 1.252e-11, 1.329e-11,
2458  1.421e-11, 1.555e-11, 1.685e-11, 1.839e-11, 2.054e-11,
2459  2.317e-11, 2.571e-11, 2.839e-11, 3.171e-11, 3.490e-11,
2460  3.886e-11, 4.287e-11, 4.645e-11, 5.047e-11, 5.592e-11,
2461  6.109e-11, 6.628e-11, 7.381e-11, 8.088e-11, 8.966e-11,
2462  1.045e-10, 1.120e-10, 1.287e-10, 1.486e-10, 1.662e-10,
2463  1.866e-10, 2.133e-10, 2.524e-10, 2.776e-10, 3.204e-10,
2464  3.559e-10, 4.028e-10, 4.448e-10, 4.882e-10, 5.244e-10,
2465  5.605e-10, 6.018e-10, 6.328e-10, 6.579e-10, 6.541e-10,
2466  7.024e-10, 7.074e-10, 7.068e-10, 7.009e-10, 6.698e-10,
2467  6.545e-10, 6.209e-10, 5.834e-10, 5.412e-10, 5.001e-10,
2468  4.231e-10, 3.727e-10, 3.211e-10, 2.833e-10, 2.447e-10,
2469  2.097e-10, 1.843e-10, 1.639e-10, 1.449e-10, 1.270e-10,
2470  1.161e-10, 1.033e-10, 9.282e-11, 8.407e-11, 7.639e-11,
2471  7.023e-11, 6.474e-11, 6.142e-11, 5.760e-11, 5.568e-11,
2472  5.472e-11, 5.390e-11, 5.455e-11, 5.540e-11, 5.587e-11,
2473  6.230e-11, 6.490e-11, 6.868e-11, 7.382e-11, 8.022e-11,
2474  8.372e-11, 9.243e-11, 1.004e-10, 1.062e-10, 1.130e-10,
2475  1.176e-10, 1.244e-10, 1.279e-10, 1.298e-10, 1.302e-10,
2476  1.312e-10, 1.295e-10, 1.244e-10, 1.211e-10, 1.167e-10,
2477  1.098e-10, 9.927e-11, 8.854e-11, 8.011e-11, 7.182e-11,
2478  5.923e-11, 5.212e-11, 4.453e-11, 3.832e-11, 3.371e-11,
2479  2.987e-11, 2.651e-11, 2.354e-11, 2.093e-11, 1.863e-11,
2480  1.662e-11, 1.486e-11, 1.331e-11, 1.193e-11, 1.071e-11,
2481  9.628e-12, 8.660e-12, 7.801e-12, 7.031e-12, 6.347e-12,
2482  5.733e-12, 5.182e-12, 4.695e-12, 4.260e-12, 3.874e-12,
2483  3.533e-12, 3.235e-12, 2.979e-12, 2.760e-12, 2.579e-12,
2484  2.432e-12, 2.321e-12, 2.246e-12, 2.205e-12, 2.196e-12,
2485  2.223e-12, 2.288e-12, 2.387e-12, 2.525e-12, 2.704e-12,
2486  2.925e-12, 3.191e-12, 3.508e-12, 3.876e-12, 4.303e-12,
2487  4.793e-12, 5.347e-12, 5.978e-12, 6.682e-12, 7.467e-12,
2488  8.340e-12, 9.293e-12, 1.035e-11, 1.152e-11, 1.285e-11,
2489  1.428e-11, 1.586e-11, 1.764e-11, 1.972e-11, 2.214e-11,
2490  2.478e-11, 2.776e-11, 3.151e-11, 3.591e-11, 4.103e-11,
2491  4.660e-11, 5.395e-11, 6.306e-11, 7.172e-11, 8.358e-11,
2492  9.670e-11, 1.110e-10, 1.325e-10, 1.494e-10, 1.736e-10,
2493  2.007e-10, 2.296e-10, 2.608e-10, 3.004e-10, 3.361e-10,
2494  3.727e-10, 4.373e-10, 4.838e-10, 5.483e-10, 6.006e-10,
2495  6.535e-10, 6.899e-10, 7.687e-10, 8.444e-10, 8.798e-10,
2496  9.135e-10, 9.532e-10, 9.757e-10, 9.968e-10, 1.006e-09,
2497  9.949e-10, 9.789e-10, 9.564e-10, 9.215e-10, 8.510e-10,
2498  8.394e-10, 7.707e-10, 7.152e-10, 6.274e-10, 5.598e-10,
2499  5.028e-10, 4.300e-10, 3.710e-10, 3.245e-10, 2.809e-10,
2500  2.461e-10, 2.154e-10, 1.910e-10, 1.685e-10, 1.487e-10,
2501  1.313e-10, 1.163e-10, 1.031e-10, 9.172e-11, 8.221e-11,
2502  7.382e-11, 6.693e-11, 6.079e-11, 5.581e-11, 5.167e-11,
2503  4.811e-11, 4.506e-11, 4.255e-11, 4.083e-11, 3.949e-11,
2504  3.881e-11, 3.861e-11, 3.858e-11, 3.951e-11, 4.045e-11,
2505  4.240e-11, 4.487e-11, 4.806e-11, 5.133e-11, 5.518e-11,
2506  5.919e-11, 6.533e-11, 7.031e-11, 7.762e-11, 8.305e-11,
2507  9.252e-11, 9.727e-11, 1.045e-10, 1.117e-10, 1.200e-10,
2508  1.275e-10, 1.341e-10, 1.362e-10, 1.438e-10, 1.450e-10,
2509  1.455e-10, 1.455e-10, 1.434e-10, 1.381e-10, 1.301e-10,
2510  1.276e-10, 1.163e-10, 1.089e-10, 9.911e-11, 8.943e-11,
2511  7.618e-11, 6.424e-11, 5.717e-11, 4.866e-11, 4.257e-11,
2512  3.773e-11, 3.331e-11, 2.958e-11, 2.629e-11, 2.316e-11,
2513  2.073e-11, 1.841e-11, 1.635e-11, 1.464e-11, 1.310e-11,
2514  1.160e-11, 1.047e-11, 9.408e-12, 8.414e-12, 7.521e-12,
2515  6.705e-12, 5.993e-12, 5.371e-12, 4.815e-12, 4.338e-12,
2516  3.921e-12, 3.567e-12, 3.265e-12, 3.010e-12, 2.795e-12,
2517  2.613e-12, 2.464e-12, 2.346e-12, 2.256e-12, 2.195e-12,
2518  2.165e-12, 2.166e-12, 2.198e-12, 2.262e-12, 2.364e-12,
2519  2.502e-12, 2.682e-12, 2.908e-12, 3.187e-12, 3.533e-12,
2520  3.946e-12, 4.418e-12, 5.013e-12, 5.708e-12, 6.379e-12,
2521  7.430e-12, 8.390e-12, 9.510e-12, 1.078e-11, 1.259e-11,
2522  1.438e-11, 1.630e-11, 1.814e-11, 2.055e-11, 2.348e-11,
2523  2.664e-11, 2.956e-11, 3.300e-11, 3.677e-11, 4.032e-11,
2524  4.494e-11, 4.951e-11, 5.452e-11, 6.014e-11, 6.500e-11,
2525  6.915e-11, 7.450e-11, 7.971e-11, 8.468e-11, 8.726e-11,
2526  8.995e-11, 9.182e-11, 9.509e-11, 9.333e-11, 9.386e-11,
2527  9.457e-11, 9.210e-11, 9.019e-11, 8.680e-11, 8.298e-11,
2528  7.947e-11, 7.460e-11, 7.082e-11, 6.132e-11, 5.855e-11,
2529  5.073e-11, 4.464e-11, 3.825e-11, 3.375e-11, 2.911e-11,
2530  2.535e-11, 2.160e-11, 1.907e-11, 1.665e-11, 1.463e-11,
2531  1.291e-11, 1.133e-11, 9.997e-12, 8.836e-12, 7.839e-12,
2532  6.943e-12, 6.254e-12, 5.600e-12, 5.029e-12, 4.529e-12,
2533  4.102e-12, 3.737e-12, 3.428e-12, 3.169e-12, 2.959e-12,
2534  2.798e-12, 2.675e-12, 2.582e-12, 2.644e-12, 2.557e-12,
2535  2.614e-12, 2.717e-12, 2.874e-12, 3.056e-12, 3.187e-12,
2536  3.631e-12, 3.979e-12, 4.248e-12, 4.817e-12, 5.266e-12,
2537  5.836e-12, 6.365e-12, 6.807e-12, 7.470e-12, 7.951e-12,
2538  8.636e-12, 8.972e-12, 9.314e-12, 9.445e-12, 1.003e-11,
2539  1.013e-11, 9.937e-12, 9.729e-12, 9.064e-12, 9.119e-12,
2540  9.124e-12, 8.704e-12, 8.078e-12, 7.470e-12, 6.329e-12,
2541  5.674e-12, 4.808e-12, 4.119e-12, 3.554e-12, 3.103e-12,
2542  2.731e-12, 2.415e-12, 2.150e-12, 1.926e-12, 1.737e-12,
2543  1.578e-12, 1.447e-12, 1.340e-12, 1.255e-12, 1.191e-12,
2544  1.146e-12, 1.121e-12, 1.114e-12, 1.126e-12, 1.156e-12,
2545  1.207e-12, 1.278e-12, 1.372e-12, 1.490e-12, 1.633e-12,
2546  1.805e-12, 2.010e-12, 2.249e-12, 2.528e-12, 2.852e-12,
2547  3.228e-12, 3.658e-12, 4.153e-12, 4.728e-12, 5.394e-12,
2548  6.176e-12, 7.126e-12, 8.188e-12, 9.328e-12, 1.103e-11,
2549  1.276e-11, 1.417e-11, 1.615e-11, 1.840e-11, 2.155e-11,
2550  2.429e-11, 2.826e-11, 3.222e-11, 3.664e-11, 4.140e-11,
2551  4.906e-11, 5.536e-11, 6.327e-11, 7.088e-11, 8.316e-11,
2552  9.242e-11, 1.070e-10, 1.223e-10, 1.341e-10, 1.553e-10,
2553  1.703e-10, 1.900e-10, 2.022e-10, 2.233e-10, 2.345e-10,
2554  2.438e-10, 2.546e-10, 2.599e-10, 2.661e-10, 2.703e-10,
2555  2.686e-10, 2.662e-10, 2.560e-10, 2.552e-10, 2.378e-10,
2556  2.252e-10, 2.146e-10, 1.885e-10, 1.668e-10, 1.441e-10,
2557  1.295e-10, 1.119e-10, 9.893e-11, 8.687e-11, 7.678e-11,
2558  6.685e-11, 5.879e-11, 5.127e-11, 4.505e-11, 3.997e-11,
2559  3.511e-11};
2560 
2561 
2562 // H2O foreign continuum parameters at all temperatures
2563 // date of last update: 11/18/02
2564 // units of (CM**3/MOL)*1.E-20
2566 const Numeric FH2O_ckd_mt_100_v2 = 20000.0;
2568 const int FH2O_ckd_mt_100_npt = 2003;
2570  0.000e0, 1.205e-02, 1.126e-02,
2571  1.095e-02, 1.126e-02, 1.205e-02, 1.322e-02, 1.430e-02,
2572  1.506e-02, 1.548e-02, 1.534e-02, 1.486e-02, 1.373e-02,
2573  1.262e-02, 1.134e-02, 1.001e-02, 8.702e-03, 7.475e-03,
2574  6.481e-03, 5.480e-03, 4.600e-03, 3.833e-03, 3.110e-03,
2575  2.543e-03, 2.049e-03, 1.680e-03, 1.374e-03, 1.046e-03,
2576  8.193e-04, 6.267e-04, 4.968e-04, 3.924e-04, 2.983e-04,
2577  2.477e-04, 1.997e-04, 1.596e-04, 1.331e-04, 1.061e-04,
2578  8.942e-05, 7.168e-05, 5.887e-05, 4.848e-05, 3.817e-05,
2579  3.170e-05, 2.579e-05, 2.162e-05, 1.768e-05, 1.490e-05,
2580  1.231e-05, 1.013e-05, 8.555e-06, 7.328e-06, 6.148e-06,
2581  5.207e-06, 4.387e-06, 3.741e-06, 3.220e-06, 2.753e-06,
2582  2.346e-06, 1.985e-06, 1.716e-06, 1.475e-06, 1.286e-06,
2583  1.122e-06, 9.661e-07, 8.284e-07, 7.057e-07, 6.119e-07,
2584  5.290e-07, 4.571e-07, 3.948e-07, 3.432e-07, 2.983e-07,
2585  2.589e-07, 2.265e-07, 1.976e-07, 1.704e-07, 1.456e-07,
2586  1.260e-07, 1.101e-07, 9.648e-08, 8.415e-08, 7.340e-08,
2587  6.441e-08, 5.643e-08, 4.940e-08, 4.276e-08, 3.703e-08,
2588  3.227e-08, 2.825e-08, 2.478e-08, 2.174e-08, 1.898e-08,
2589  1.664e-08, 1.458e-08, 1.278e-08, 1.126e-08, 9.891e-09,
2590  8.709e-09, 7.652e-09, 6.759e-09, 5.975e-09, 5.310e-09,
2591  4.728e-09, 4.214e-09, 3.792e-09, 3.463e-09, 3.226e-09,
2592  2.992e-09, 2.813e-09, 2.749e-09, 2.809e-09, 2.913e-09,
2593  3.037e-09, 3.413e-09, 3.738e-09, 4.189e-09, 4.808e-09,
2594  5.978e-09, 7.088e-09, 8.071e-09, 9.610e-09, 1.210e-08,
2595  1.500e-08, 1.764e-08, 2.221e-08, 2.898e-08, 3.948e-08,
2596  5.068e-08, 6.227e-08, 7.898e-08, 1.033e-07, 1.437e-07,
2597  1.889e-07, 2.589e-07, 3.590e-07, 4.971e-07, 7.156e-07,
2598  9.983e-07, 1.381e-06, 1.929e-06, 2.591e-06, 3.453e-06,
2599  4.570e-06, 5.930e-06, 7.552e-06, 9.556e-06, 1.183e-05,
2600  1.425e-05, 1.681e-05, 1.978e-05, 2.335e-05, 2.668e-05,
2601  3.022e-05, 3.371e-05, 3.715e-05, 3.967e-05, 4.060e-05,
2602  4.010e-05, 3.809e-05, 3.491e-05, 3.155e-05, 2.848e-05,
2603  2.678e-05, 2.660e-05, 2.811e-05, 3.071e-05, 3.294e-05,
2604  3.459e-05, 3.569e-05, 3.560e-05, 3.434e-05, 3.186e-05,
2605  2.916e-05, 2.622e-05, 2.275e-05, 1.918e-05, 1.620e-05,
2606  1.373e-05, 1.182e-05, 1.006e-05, 8.556e-06, 7.260e-06,
2607  6.107e-06, 5.034e-06, 4.211e-06, 3.426e-06, 2.865e-06,
2608  2.446e-06, 1.998e-06, 1.628e-06, 1.242e-06, 1.005e-06,
2609  7.853e-07, 6.210e-07, 5.071e-07, 4.156e-07, 3.548e-07,
2610  2.825e-07, 2.261e-07, 1.916e-07, 1.510e-07, 1.279e-07,
2611  1.059e-07, 9.140e-08, 7.707e-08, 6.170e-08, 5.311e-08,
2612  4.263e-08, 3.518e-08, 2.961e-08, 2.457e-08, 2.119e-08,
2613  1.712e-08, 1.439e-08, 1.201e-08, 1.003e-08, 8.564e-09,
2614  7.199e-09, 6.184e-09, 5.206e-09, 4.376e-09, 3.708e-09,
2615  3.157e-09, 2.725e-09, 2.361e-09, 2.074e-09, 1.797e-09,
2616  1.562e-09, 1.364e-09, 1.196e-09, 1.042e-09, 8.862e-10,
2617  7.648e-10, 6.544e-10, 5.609e-10, 4.791e-10, 4.108e-10,
2618  3.531e-10, 3.038e-10, 2.618e-10, 2.268e-10, 1.969e-10,
2619  1.715e-10, 1.496e-10, 1.308e-10, 1.147e-10, 1.008e-10,
2620  8.894e-11, 7.885e-11, 7.031e-11, 6.355e-11, 5.854e-11,
2621  5.534e-11, 5.466e-11, 5.725e-11, 6.447e-11, 7.943e-11,
2622  1.038e-10, 1.437e-10, 2.040e-10, 2.901e-10, 4.051e-10,
2623  5.556e-10, 7.314e-10, 9.291e-10, 1.134e-09, 1.321e-09,
2624  1.482e-09, 1.596e-09, 1.669e-09, 1.715e-09, 1.762e-09,
2625  1.817e-09, 1.828e-09, 1.848e-09, 1.873e-09, 1.902e-09,
2626  1.894e-09, 1.864e-09, 1.841e-09, 1.797e-09, 1.704e-09,
2627  1.559e-09, 1.382e-09, 1.187e-09, 1.001e-09, 8.468e-10,
2628  7.265e-10, 6.521e-10, 6.381e-10, 6.660e-10, 7.637e-10,
2629  9.705e-10, 1.368e-09, 1.856e-09, 2.656e-09, 3.954e-09,
2630  5.960e-09, 8.720e-09, 1.247e-08, 1.781e-08, 2.491e-08,
2631  3.311e-08, 4.272e-08, 5.205e-08, 6.268e-08, 7.337e-08,
2632  8.277e-08, 9.185e-08, 1.004e-07, 1.091e-07, 1.159e-07,
2633  1.188e-07, 1.175e-07, 1.124e-07, 1.033e-07, 9.381e-08,
2634  8.501e-08, 7.956e-08, 7.894e-08, 8.331e-08, 9.102e-08,
2635  9.836e-08, 1.035e-07, 1.064e-07, 1.060e-07, 1.032e-07,
2636  9.808e-08, 9.139e-08, 8.442e-08, 7.641e-08, 6.881e-08,
2637  6.161e-08, 5.404e-08, 4.804e-08, 4.446e-08, 4.328e-08,
2638  4.259e-08, 4.421e-08, 4.673e-08, 4.985e-08, 5.335e-08,
2639  5.796e-08, 6.542e-08, 7.714e-08, 8.827e-08, 1.040e-07,
2640  1.238e-07, 1.499e-07, 1.829e-07, 2.222e-07, 2.689e-07,
2641  3.303e-07, 3.981e-07, 4.840e-07, 5.910e-07, 7.363e-07,
2642  9.087e-07, 1.139e-06, 1.455e-06, 1.866e-06, 2.440e-06,
2643  3.115e-06, 3.941e-06, 4.891e-06, 5.992e-06, 7.111e-06,
2644  8.296e-06, 9.210e-06, 9.987e-06, 1.044e-05, 1.073e-05,
2645  1.092e-05, 1.106e-05, 1.138e-05, 1.171e-05, 1.186e-05,
2646  1.186e-05, 1.179e-05, 1.166e-05, 1.151e-05, 1.160e-05,
2647  1.197e-05, 1.241e-05, 1.268e-05, 1.260e-05, 1.184e-05,
2648  1.063e-05, 9.204e-06, 7.584e-06, 6.053e-06, 4.482e-06,
2649  3.252e-06, 2.337e-06, 1.662e-06, 1.180e-06, 8.150e-07,
2650  5.950e-07, 4.354e-07, 3.302e-07, 2.494e-07, 1.930e-07,
2651  1.545e-07, 1.250e-07, 1.039e-07, 8.602e-08, 7.127e-08,
2652  5.897e-08, 4.838e-08, 4.018e-08, 3.280e-08, 2.720e-08,
2653  2.307e-08, 1.972e-08, 1.654e-08, 1.421e-08, 1.174e-08,
2654  1.004e-08, 8.739e-09, 7.358e-09, 6.242e-09, 5.303e-09,
2655  4.567e-09, 3.940e-09, 3.375e-09, 2.864e-09, 2.422e-09,
2656  2.057e-09, 1.750e-09, 1.505e-09, 1.294e-09, 1.101e-09,
2657  9.401e-10, 8.018e-10, 6.903e-10, 5.965e-10, 5.087e-10,
2658  4.364e-10, 3.759e-10, 3.247e-10, 2.809e-10, 2.438e-10,
2659  2.123e-10, 1.853e-10, 1.622e-10, 1.426e-10, 1.260e-10,
2660  1.125e-10, 1.022e-10, 9.582e-11, 9.388e-11, 9.801e-11,
2661  1.080e-10, 1.276e-10, 1.551e-10, 1.903e-10, 2.291e-10,
2662  2.724e-10, 3.117e-10, 3.400e-10, 3.562e-10, 3.625e-10,
2663  3.619e-10, 3.429e-10, 3.221e-10, 2.943e-10, 2.645e-10,
2664  2.338e-10, 2.062e-10, 1.901e-10, 1.814e-10, 1.827e-10,
2665  1.906e-10, 1.984e-10, 2.040e-10, 2.068e-10, 2.075e-10,
2666  2.018e-10, 1.959e-10, 1.897e-10, 1.852e-10, 1.791e-10,
2667  1.696e-10, 1.634e-10, 1.598e-10, 1.561e-10, 1.518e-10,
2668  1.443e-10, 1.377e-10, 1.346e-10, 1.342e-10, 1.375e-10,
2669  1.525e-10, 1.767e-10, 2.108e-10, 2.524e-10, 2.981e-10,
2670  3.477e-10, 4.262e-10, 5.326e-10, 6.646e-10, 8.321e-10,
2671  1.069e-09, 1.386e-09, 1.743e-09, 2.216e-09, 2.808e-09,
2672  3.585e-09, 4.552e-09, 5.907e-09, 7.611e-09, 9.774e-09,
2673  1.255e-08, 1.666e-08, 2.279e-08, 3.221e-08, 4.531e-08,
2674  6.400e-08, 9.187e-08, 1.295e-07, 1.825e-07, 2.431e-07,
2675  3.181e-07, 4.009e-07, 4.941e-07, 5.880e-07, 6.623e-07,
2676  7.155e-07, 7.451e-07, 7.594e-07, 7.541e-07, 7.467e-07,
2677  7.527e-07, 7.935e-07, 8.461e-07, 8.954e-07, 9.364e-07,
2678  9.843e-07, 1.024e-06, 1.050e-06, 1.059e-06, 1.074e-06,
2679  1.072e-06, 1.043e-06, 9.789e-07, 8.803e-07, 7.662e-07,
2680  6.378e-07, 5.133e-07, 3.958e-07, 2.914e-07, 2.144e-07,
2681  1.570e-07, 1.140e-07, 8.470e-08, 6.200e-08, 4.657e-08,
2682  3.559e-08, 2.813e-08, 2.222e-08, 1.769e-08, 1.391e-08,
2683  1.125e-08, 9.186e-09, 7.704e-09, 6.447e-09, 5.381e-09,
2684  4.442e-09, 3.669e-09, 3.057e-09, 2.564e-09, 2.153e-09,
2685  1.784e-09, 1.499e-09, 1.281e-09, 1.082e-09, 9.304e-10,
2686  8.169e-10, 6.856e-10, 5.866e-10, 5.043e-10, 4.336e-10,
2687  3.731e-10, 3.175e-10, 2.745e-10, 2.374e-10, 2.007e-10,
2688  1.737e-10, 1.508e-10, 1.302e-10, 1.130e-10, 9.672e-11,
2689  8.375e-11, 7.265e-11, 6.244e-11, 5.343e-11, 4.654e-11,
2690  3.975e-11, 3.488e-11, 3.097e-11, 2.834e-11, 2.649e-11,
2691  2.519e-11, 2.462e-11, 2.443e-11, 2.440e-11, 2.398e-11,
2692  2.306e-11, 2.183e-11, 2.021e-11, 1.821e-11, 1.599e-11,
2693  1.403e-11, 1.196e-11, 1.023e-11, 8.728e-12, 7.606e-12,
2694  6.941e-12, 6.545e-12, 6.484e-12, 6.600e-12, 6.718e-12,
2695  6.785e-12, 6.746e-12, 6.724e-12, 6.764e-12, 6.995e-12,
2696  7.144e-12, 7.320e-12, 7.330e-12, 7.208e-12, 6.789e-12,
2697  6.090e-12, 5.337e-12, 4.620e-12, 4.037e-12, 3.574e-12,
2698  3.311e-12, 3.346e-12, 3.566e-12, 3.836e-12, 4.076e-12,
2699  4.351e-12, 4.691e-12, 5.114e-12, 5.427e-12, 6.167e-12,
2700  7.436e-12, 8.842e-12, 1.038e-11, 1.249e-11, 1.540e-11,
2701  1.915e-11, 2.480e-11, 3.256e-11, 4.339e-11, 5.611e-11,
2702  7.519e-11, 1.037e-10, 1.409e-10, 1.883e-10, 2.503e-10,
2703  3.380e-10, 4.468e-10, 5.801e-10, 7.335e-10, 8.980e-10,
2704  1.110e-09, 1.363e-09, 1.677e-09, 2.104e-09, 2.681e-09,
2705  3.531e-09, 4.621e-09, 6.106e-09, 8.154e-09, 1.046e-08,
2706  1.312e-08, 1.607e-08, 1.948e-08, 2.266e-08, 2.495e-08,
2707  2.655e-08, 2.739e-08, 2.739e-08, 2.662e-08, 2.589e-08,
2708  2.590e-08, 2.664e-08, 2.833e-08, 3.023e-08, 3.305e-08,
2709  3.558e-08, 3.793e-08, 3.961e-08, 4.056e-08, 4.102e-08,
2710  4.025e-08, 3.917e-08, 3.706e-08, 3.493e-08, 3.249e-08,
2711  3.096e-08, 3.011e-08, 3.111e-08, 3.395e-08, 3.958e-08,
2712  4.875e-08, 6.066e-08, 7.915e-08, 1.011e-07, 1.300e-07,
2713  1.622e-07, 2.003e-07, 2.448e-07, 2.863e-07, 3.317e-07,
2714  3.655e-07, 3.960e-07, 4.098e-07, 4.168e-07, 4.198e-07,
2715  4.207e-07, 4.289e-07, 4.384e-07, 4.471e-07, 4.524e-07,
2716  4.574e-07, 4.633e-07, 4.785e-07, 5.028e-07, 5.371e-07,
2717  5.727e-07, 5.955e-07, 5.998e-07, 5.669e-07, 5.082e-07,
2718  4.397e-07, 3.596e-07, 2.814e-07, 2.074e-07, 1.486e-07,
2719  1.057e-07, 7.250e-08, 4.946e-08, 3.430e-08, 2.447e-08,
2720  1.793e-08, 1.375e-08, 1.096e-08, 9.091e-09, 7.709e-09,
2721  6.631e-09, 5.714e-09, 4.886e-09, 4.205e-09, 3.575e-09,
2722  3.070e-09, 2.631e-09, 2.284e-09, 2.002e-09, 1.745e-09,
2723  1.509e-09, 1.284e-09, 1.084e-09, 9.163e-10, 7.663e-10,
2724  6.346e-10, 5.283e-10, 4.354e-10, 3.590e-10, 2.982e-10,
2725  2.455e-10, 2.033e-10, 1.696e-10, 1.432e-10, 1.211e-10,
2726  1.020e-10, 8.702e-11, 7.380e-11, 6.293e-11, 5.343e-11,
2727  4.532e-11, 3.907e-11, 3.365e-11, 2.945e-11, 2.558e-11,
2728  2.192e-11, 1.895e-11, 1.636e-11, 1.420e-11, 1.228e-11,
2729  1.063e-11, 9.348e-12, 8.200e-12, 7.231e-12, 6.430e-12,
2730  5.702e-12, 5.052e-12, 4.469e-12, 4.000e-12, 3.679e-12,
2731  3.387e-12, 3.197e-12, 3.158e-12, 3.327e-12, 3.675e-12,
2732  4.292e-12, 5.437e-12, 7.197e-12, 1.008e-11, 1.437e-11,
2733  2.035e-11, 2.905e-11, 4.062e-11, 5.528e-11, 7.177e-11,
2734  9.064e-11, 1.109e-10, 1.297e-10, 1.473e-10, 1.652e-10,
2735  1.851e-10, 2.079e-10, 2.313e-10, 2.619e-10, 2.958e-10,
2736  3.352e-10, 3.796e-10, 4.295e-10, 4.923e-10, 5.490e-10,
2737  5.998e-10, 6.388e-10, 6.645e-10, 6.712e-10, 6.549e-10,
2738  6.380e-10, 6.255e-10, 6.253e-10, 6.459e-10, 6.977e-10,
2739  7.590e-10, 8.242e-10, 8.920e-10, 9.403e-10, 9.701e-10,
2740  9.483e-10, 9.135e-10, 8.617e-10, 7.921e-10, 7.168e-10,
2741  6.382e-10, 5.677e-10, 5.045e-10, 4.572e-10, 4.312e-10,
2742  4.145e-10, 4.192e-10, 4.541e-10, 5.368e-10, 6.771e-10,
2743  8.962e-10, 1.210e-09, 1.659e-09, 2.330e-09, 3.249e-09,
2744  4.495e-09, 5.923e-09, 7.642e-09, 9.607e-09, 1.178e-08,
2745  1.399e-08, 1.584e-08, 1.730e-08, 1.816e-08, 1.870e-08,
2746  1.868e-08, 1.870e-08, 1.884e-08, 1.990e-08, 2.150e-08,
2747  2.258e-08, 2.364e-08, 2.473e-08, 2.602e-08, 2.689e-08,
2748  2.731e-08, 2.816e-08, 2.859e-08, 2.839e-08, 2.703e-08,
2749  2.451e-08, 2.149e-08, 1.787e-08, 1.449e-08, 1.111e-08,
2750  8.282e-09, 6.121e-09, 4.494e-09, 3.367e-09, 2.487e-09,
2751  1.885e-09, 1.503e-09, 1.249e-09, 1.074e-09, 9.427e-10,
2752  8.439e-10, 7.563e-10, 6.772e-10, 6.002e-10, 5.254e-10,
2753  4.588e-10, 3.977e-10, 3.449e-10, 3.003e-10, 2.624e-10,
2754  2.335e-10, 2.040e-10, 1.771e-10, 1.534e-10, 1.296e-10,
2755  1.097e-10, 9.173e-11, 7.730e-11, 6.547e-11, 5.191e-11,
2756  4.198e-11, 3.361e-11, 2.732e-11, 2.244e-11, 1.791e-11,
2757  1.509e-11, 1.243e-11, 1.035e-11, 8.969e-12, 7.394e-12,
2758  6.323e-12, 5.282e-12, 4.543e-12, 3.752e-12, 3.140e-12,
2759  2.600e-12, 2.194e-12, 1.825e-12, 1.511e-12, 1.245e-12,
2760  1.024e-12, 8.539e-13, 7.227e-13, 6.102e-13, 5.189e-13,
2761  4.430e-13, 3.774e-13, 3.236e-13, 2.800e-13, 2.444e-13,
2762  2.156e-13, 1.932e-13, 1.775e-13, 1.695e-13, 1.672e-13,
2763  1.704e-13, 1.825e-13, 2.087e-13, 2.614e-13, 3.377e-13,
2764  4.817e-13, 6.989e-13, 1.062e-12, 1.562e-12, 2.288e-12,
2765  3.295e-12, 4.550e-12, 5.965e-12, 7.546e-12, 9.395e-12,
2766  1.103e-11, 1.228e-11, 1.318e-11, 1.380e-11, 1.421e-11,
2767  1.390e-11, 1.358e-11, 1.336e-11, 1.342e-11, 1.356e-11,
2768  1.424e-11, 1.552e-11, 1.730e-11, 1.951e-11, 2.128e-11,
2769  2.249e-11, 2.277e-11, 2.226e-11, 2.111e-11, 1.922e-11,
2770  1.775e-11, 1.661e-11, 1.547e-11, 1.446e-11, 1.323e-11,
2771  1.210e-11, 1.054e-11, 9.283e-12, 8.671e-12, 8.670e-12,
2772  9.429e-12, 1.062e-11, 1.255e-11, 1.506e-11, 1.818e-11,
2773  2.260e-11, 2.831e-11, 3.723e-11, 5.092e-11, 6.968e-11,
2774  9.826e-11, 1.349e-10, 1.870e-10, 2.580e-10, 3.430e-10,
2775  4.424e-10, 5.521e-10, 6.812e-10, 8.064e-10, 9.109e-10,
2776  9.839e-10, 1.028e-09, 1.044e-09, 1.029e-09, 1.005e-09,
2777  1.002e-09, 1.038e-09, 1.122e-09, 1.233e-09, 1.372e-09,
2778  1.524e-09, 1.665e-09, 1.804e-09, 1.908e-09, 2.015e-09,
2779  2.117e-09, 2.219e-09, 2.336e-09, 2.531e-09, 2.805e-09,
2780  3.189e-09, 3.617e-09, 4.208e-09, 4.911e-09, 5.619e-09,
2781  6.469e-09, 7.188e-09, 7.957e-09, 8.503e-09, 9.028e-09,
2782  9.571e-09, 9.990e-09, 1.055e-08, 1.102e-08, 1.132e-08,
2783  1.141e-08, 1.145e-08, 1.145e-08, 1.176e-08, 1.224e-08,
2784  1.304e-08, 1.388e-08, 1.445e-08, 1.453e-08, 1.368e-08,
2785  1.220e-08, 1.042e-08, 8.404e-09, 6.403e-09, 4.643e-09,
2786  3.325e-09, 2.335e-09, 1.638e-09, 1.190e-09, 9.161e-10,
2787  7.412e-10, 6.226e-10, 5.516e-10, 5.068e-10, 4.831e-10,
2788  4.856e-10, 5.162e-10, 5.785e-10, 6.539e-10, 7.485e-10,
2789  8.565e-10, 9.534e-10, 1.052e-09, 1.115e-09, 1.173e-09,
2790  1.203e-09, 1.224e-09, 1.243e-09, 1.248e-09, 1.261e-09,
2791  1.265e-09, 1.250e-09, 1.217e-09, 1.176e-09, 1.145e-09,
2792  1.153e-09, 1.199e-09, 1.278e-09, 1.366e-09, 1.426e-09,
2793  1.444e-09, 1.365e-09, 1.224e-09, 1.051e-09, 8.539e-10,
2794  6.564e-10, 4.751e-10, 3.404e-10, 2.377e-10, 1.631e-10,
2795  1.114e-10, 7.870e-11, 5.793e-11, 4.284e-11, 3.300e-11,
2796  2.620e-11, 2.152e-11, 1.777e-11, 1.496e-11, 1.242e-11,
2797  1.037e-11, 8.725e-12, 7.004e-12, 5.718e-12, 4.769e-12,
2798  3.952e-12, 3.336e-12, 2.712e-12, 2.213e-12, 1.803e-12,
2799  1.492e-12, 1.236e-12, 1.006e-12, 8.384e-13, 7.063e-13,
2800  5.879e-13, 4.930e-13, 4.171e-13, 3.569e-13, 3.083e-13,
2801  2.688e-13, 2.333e-13, 2.035e-13, 1.820e-13, 1.682e-13,
2802  1.635e-13, 1.674e-13, 1.769e-13, 2.022e-13, 2.485e-13,
2803  3.127e-13, 4.250e-13, 5.928e-13, 8.514e-13, 1.236e-12,
2804  1.701e-12, 2.392e-12, 3.231e-12, 4.350e-12, 5.559e-12,
2805  6.915e-12, 8.519e-12, 1.013e-11, 1.146e-11, 1.240e-11,
2806  1.305e-11, 1.333e-11, 1.318e-11, 1.263e-11, 1.238e-11,
2807  1.244e-11, 1.305e-11, 1.432e-11, 1.623e-11, 1.846e-11,
2808  2.090e-11, 2.328e-11, 2.526e-11, 2.637e-11, 2.702e-11,
2809  2.794e-11, 2.889e-11, 2.989e-11, 3.231e-11, 3.680e-11,
2810  4.375e-11, 5.504e-11, 7.159e-11, 9.502e-11, 1.279e-10,
2811  1.645e-10, 2.098e-10, 2.618e-10, 3.189e-10, 3.790e-10,
2812  4.303e-10, 4.753e-10, 5.027e-10, 5.221e-10, 5.293e-10,
2813  5.346e-10, 5.467e-10, 5.796e-10, 6.200e-10, 6.454e-10,
2814  6.705e-10, 6.925e-10, 7.233e-10, 7.350e-10, 7.538e-10,
2815  7.861e-10, 8.077e-10, 8.132e-10, 7.749e-10, 7.036e-10,
2816  6.143e-10, 5.093e-10, 4.089e-10, 3.092e-10, 2.299e-10,
2817  1.705e-10, 1.277e-10, 9.723e-11, 7.533e-11, 6.126e-11,
2818  5.154e-11, 4.428e-11, 3.913e-11, 3.521e-11, 3.297e-11,
2819  3.275e-11, 3.460e-11, 3.798e-11, 4.251e-11, 4.745e-11,
2820  5.232e-11, 5.606e-11, 5.820e-11, 5.880e-11, 5.790e-11,
2821  5.661e-11, 5.491e-11, 5.366e-11, 5.341e-11, 5.353e-11,
2822  5.336e-11, 5.293e-11, 5.248e-11, 5.235e-11, 5.208e-11,
2823  5.322e-11, 5.521e-11, 5.725e-11, 5.827e-11, 5.685e-11,
2824  5.245e-11, 4.612e-11, 3.884e-11, 3.129e-11, 2.404e-11,
2825  1.732e-11, 1.223e-11, 8.574e-12, 5.888e-12, 3.986e-12,
2826  2.732e-12, 1.948e-12, 1.414e-12, 1.061e-12, 8.298e-13,
2827  6.612e-13, 5.413e-13, 4.472e-13, 3.772e-13, 3.181e-13,
2828  2.645e-13, 2.171e-13, 1.778e-13, 1.464e-13, 1.183e-13,
2829  9.637e-14, 7.991e-14, 6.668e-14, 5.570e-14, 4.663e-14,
2830  3.848e-14, 3.233e-14, 2.706e-14, 2.284e-14, 1.944e-14,
2831  1.664e-14, 1.430e-14, 1.233e-14, 1.066e-14, 9.234e-15,
2832  8.023e-15, 6.993e-15, 6.119e-15, 5.384e-15, 4.774e-15,
2833  4.283e-15, 3.916e-15, 3.695e-15, 3.682e-15, 4.004e-15,
2834  4.912e-15, 6.853e-15, 1.056e-14, 1.712e-14, 2.804e-14,
2835  4.516e-14, 7.113e-14, 1.084e-13, 1.426e-13, 1.734e-13,
2836  1.978e-13, 2.194e-13, 2.388e-13, 2.489e-13, 2.626e-13,
2837  2.865e-13, 3.105e-13, 3.387e-13, 3.652e-13, 3.984e-13,
2838  4.398e-13, 4.906e-13, 5.550e-13, 6.517e-13, 7.813e-13,
2839  9.272e-13, 1.164e-12, 1.434e-12, 1.849e-12, 2.524e-12,
2840  3.328e-12, 4.523e-12, 6.108e-12, 8.207e-12, 1.122e-11,
2841  1.477e-11, 1.900e-11, 2.412e-11, 2.984e-11, 3.680e-11,
2842  4.353e-11, 4.963e-11, 5.478e-11, 5.903e-11, 6.233e-11,
2843  6.483e-11, 6.904e-11, 7.569e-11, 8.719e-11, 1.048e-10,
2844  1.278e-10, 1.557e-10, 1.869e-10, 2.218e-10, 2.610e-10,
2845  2.975e-10, 3.371e-10, 3.746e-10, 4.065e-10, 4.336e-10,
2846  4.503e-10, 4.701e-10, 4.800e-10, 4.917e-10, 5.038e-10,
2847  5.128e-10, 5.143e-10, 5.071e-10, 5.019e-10, 5.025e-10,
2848  5.183e-10, 5.496e-10, 5.877e-10, 6.235e-10, 6.420e-10,
2849  6.234e-10, 5.698e-10, 4.916e-10, 4.022e-10, 3.126e-10,
2850  2.282e-10, 1.639e-10, 1.142e-10, 7.919e-11, 5.690e-11,
2851  4.313e-11, 3.413e-11, 2.807e-11, 2.410e-11, 2.166e-11,
2852  2.024e-11, 1.946e-11, 1.929e-11, 1.963e-11, 2.035e-11,
2853  2.162e-11, 2.305e-11, 2.493e-11, 2.748e-11, 3.048e-11,
2854  3.413e-11, 3.754e-11, 4.155e-11, 4.635e-11, 5.110e-11,
2855  5.734e-11, 6.338e-11, 6.990e-11, 7.611e-11, 8.125e-11,
2856  8.654e-11, 8.951e-11, 9.182e-11, 9.310e-11, 9.273e-11,
2857  9.094e-11, 8.849e-11, 8.662e-11, 8.670e-11, 8.972e-11,
2858  9.566e-11, 1.025e-10, 1.083e-10, 1.111e-10, 1.074e-10,
2859  9.771e-11, 8.468e-11, 6.958e-11, 5.470e-11, 4.040e-11,
2860  2.940e-11, 2.075e-11, 1.442e-11, 1.010e-11, 7.281e-12,
2861  5.409e-12, 4.138e-12, 3.304e-12, 2.784e-12, 2.473e-12,
2862  2.273e-12, 2.186e-12, 2.118e-12, 2.066e-12, 1.958e-12,
2863  1.818e-12, 1.675e-12, 1.509e-12, 1.349e-12, 1.171e-12,
2864  9.838e-13, 8.213e-13, 6.765e-13, 5.378e-13, 4.161e-13,
2865  3.119e-13, 2.279e-13, 1.637e-13, 1.152e-13, 8.112e-14,
2866  5.919e-14, 4.470e-14, 3.492e-14, 2.811e-14, 2.319e-14,
2867  1.948e-14, 1.660e-14, 1.432e-14, 1.251e-14, 1.109e-14,
2868  1.006e-14, 9.450e-15, 9.384e-15, 1.012e-14, 1.216e-14,
2869  1.636e-14, 2.305e-14, 3.488e-14, 5.572e-14, 8.479e-14,
2870  1.265e-13, 1.905e-13, 2.730e-13, 3.809e-13, 4.955e-13,
2871  6.303e-13, 7.861e-13, 9.427e-13, 1.097e-12, 1.212e-12,
2872  1.328e-12, 1.415e-12, 1.463e-12, 1.495e-12, 1.571e-12,
2873  1.731e-12, 1.981e-12, 2.387e-12, 2.930e-12, 3.642e-12,
2874  4.584e-12, 5.822e-12, 7.278e-12, 9.193e-12, 1.135e-11,
2875  1.382e-11, 1.662e-11, 1.958e-11, 2.286e-11, 2.559e-11,
2876  2.805e-11, 2.988e-11, 3.106e-11, 3.182e-11, 3.200e-11,
2877  3.258e-11, 3.362e-11, 3.558e-11, 3.688e-11, 3.800e-11,
2878  3.929e-11, 4.062e-11, 4.186e-11, 4.293e-11, 4.480e-11,
2879  4.643e-11, 4.704e-11, 4.571e-11, 4.206e-11, 3.715e-11,
2880  3.131e-11, 2.541e-11, 1.978e-11, 1.508e-11, 1.146e-11,
2881  8.700e-12, 6.603e-12, 5.162e-12, 4.157e-12, 3.408e-12,
2882  2.829e-12, 2.405e-12, 2.071e-12, 1.826e-12, 1.648e-12,
2883  1.542e-12, 1.489e-12, 1.485e-12, 1.493e-12, 1.545e-12,
2884  1.637e-12, 1.814e-12, 2.061e-12, 2.312e-12, 2.651e-12,
2885  3.030e-12, 3.460e-12, 3.901e-12, 4.306e-12, 4.721e-12,
2886  5.008e-12, 5.281e-12, 5.541e-12, 5.791e-12, 6.115e-12,
2887  6.442e-12, 6.680e-12, 6.791e-12, 6.831e-12, 6.839e-12,
2888  6.946e-12, 7.128e-12, 7.537e-12, 8.036e-12, 8.392e-12,
2889  8.526e-12, 8.110e-12, 7.325e-12, 6.329e-12, 5.183e-12,
2890  4.081e-12, 2.985e-12, 2.141e-12, 1.492e-12, 1.015e-12,
2891  6.684e-13, 4.414e-13, 2.987e-13, 2.038e-13, 1.391e-13,
2892  9.860e-14, 7.240e-14, 5.493e-14, 4.288e-14, 3.427e-14,
2893  2.787e-14, 2.296e-14, 1.909e-14, 1.598e-14, 1.344e-14,
2894  1.135e-14, 9.616e-15, 8.169e-15, 6.957e-15, 5.938e-15,
2895  5.080e-15, 4.353e-15, 3.738e-15, 3.217e-15, 2.773e-15,
2896  2.397e-15, 2.077e-15, 1.805e-15, 1.575e-15, 1.382e-15,
2897  1.221e-15, 1.090e-15, 9.855e-16, 9.068e-16, 8.537e-16,
2898  8.270e-16, 8.290e-16, 8.634e-16, 9.359e-16, 1.055e-15,
2899  1.233e-15, 1.486e-15, 1.839e-15, 2.326e-15, 2.998e-15,
2900  3.934e-15, 5.256e-15, 7.164e-15, 9.984e-15, 1.427e-14,
2901  2.099e-14, 3.196e-14, 5.121e-14, 7.908e-14, 1.131e-13,
2902  1.602e-13, 2.239e-13, 3.075e-13, 4.134e-13, 5.749e-13,
2903  7.886e-13, 1.071e-12, 1.464e-12, 2.032e-12, 2.800e-12,
2904  3.732e-12, 4.996e-12, 6.483e-12, 8.143e-12, 1.006e-11,
2905  1.238e-11, 1.484e-11, 1.744e-11, 2.020e-11, 2.274e-11,
2906  2.562e-11, 2.848e-11, 3.191e-11, 3.617e-11, 4.081e-11,
2907  4.577e-11, 4.937e-11, 5.204e-11, 5.401e-11, 5.462e-11,
2908  5.507e-11, 5.510e-11, 5.605e-11, 5.686e-11, 5.739e-11,
2909  5.766e-11, 5.740e-11, 5.754e-11, 5.761e-11, 5.777e-11,
2910  5.712e-11, 5.510e-11, 5.088e-11, 4.438e-11, 3.728e-11,
2911  2.994e-11, 2.305e-11, 1.715e-11, 1.256e-11, 9.208e-12,
2912  6.745e-12, 5.014e-12, 3.785e-12, 2.900e-12, 2.239e-12,
2913  1.757e-12, 1.414e-12, 1.142e-12, 9.482e-13, 8.010e-13,
2914  6.961e-13, 6.253e-13, 5.735e-13, 5.433e-13, 5.352e-13,
2915  5.493e-13, 5.706e-13, 6.068e-13, 6.531e-13, 7.109e-13,
2916  7.767e-13, 8.590e-13, 9.792e-13, 1.142e-12, 1.371e-12,
2917  1.650e-12, 1.957e-12, 2.302e-12, 2.705e-12, 3.145e-12,
2918  3.608e-12, 4.071e-12, 4.602e-12, 5.133e-12, 5.572e-12,
2919  5.987e-12, 6.248e-12, 6.533e-12, 6.757e-12, 6.935e-12,
2920  7.224e-12, 7.422e-12, 7.538e-12, 7.547e-12, 7.495e-12,
2921  7.543e-12, 7.725e-12, 8.139e-12, 8.627e-12, 9.146e-12,
2922  9.443e-12, 9.318e-12, 8.649e-12, 7.512e-12, 6.261e-12,
2923  4.915e-12, 3.647e-12, 2.597e-12, 1.785e-12, 1.242e-12,
2924  8.660e-13, 6.207e-13, 4.610e-13, 3.444e-13, 2.634e-13,
2925  2.100e-13, 1.725e-13, 1.455e-13, 1.237e-13, 1.085e-13,
2926  9.513e-14, 7.978e-14, 6.603e-14, 5.288e-14, 4.084e-14,
2927  2.952e-14, 2.157e-14, 1.593e-14, 1.199e-14, 9.267e-15,
2928  7.365e-15, 6.004e-15, 4.995e-15, 4.218e-15, 3.601e-15,
2929  3.101e-15, 2.692e-15, 2.360e-15, 2.094e-15, 1.891e-15,
2930  1.755e-15, 1.699e-15, 1.755e-15, 1.987e-15, 2.506e-15,
2931  3.506e-15, 5.289e-15, 8.311e-15, 1.325e-14, 2.129e-14,
2932  3.237e-14, 4.595e-14, 6.441e-14, 8.433e-14, 1.074e-13,
2933  1.383e-13, 1.762e-13, 2.281e-13, 2.831e-13, 3.523e-13,
2934  4.380e-13, 5.304e-13, 6.290e-13, 7.142e-13, 8.032e-13,
2935  8.934e-13, 9.888e-13, 1.109e-12, 1.261e-12, 1.462e-12,
2936  1.740e-12, 2.099e-12, 2.535e-12, 3.008e-12, 3.462e-12,
2937  3.856e-12, 4.098e-12, 4.239e-12, 4.234e-12, 4.132e-12,
2938  3.986e-12, 3.866e-12, 3.829e-12, 3.742e-12, 3.705e-12,
2939  3.694e-12, 3.765e-12, 3.849e-12, 3.929e-12, 4.056e-12,
2940  4.092e-12, 4.047e-12, 3.792e-12, 3.407e-12, 2.953e-12,
2941  2.429e-12, 1.931e-12, 1.460e-12, 1.099e-12, 8.199e-13,
2942  6.077e-13, 4.449e-13, 3.359e-13, 2.524e-13, 1.881e-13,
2943  1.391e-13, 1.020e-13, 7.544e-14, 5.555e-14, 4.220e-14,
2944  3.321e-14, 2.686e-14, 2.212e-14, 1.780e-14, 1.369e-14,
2945  1.094e-14, 9.130e-15, 8.101e-15, 7.828e-15, 8.393e-15,
2946  1.012e-14, 1.259e-14, 1.538e-14, 1.961e-14, 2.619e-14,
2947  3.679e-14, 5.049e-14, 6.917e-14, 8.880e-14, 1.115e-13,
2948  1.373e-13, 1.619e-13, 1.878e-13, 2.111e-13, 2.330e-13,
2949  2.503e-13, 2.613e-13, 2.743e-13, 2.826e-13, 2.976e-13,
2950  3.162e-13, 3.360e-13, 3.491e-13, 3.541e-13, 3.595e-13,
2951  3.608e-13, 3.709e-13, 3.869e-13, 4.120e-13, 4.366e-13,
2952  4.504e-13, 4.379e-13, 3.955e-13, 3.385e-13, 2.741e-13,
2953  2.089e-13, 1.427e-13, 9.294e-14, 5.775e-14, 3.565e-14,
2954  2.210e-14, 1.398e-14, 9.194e-15, 6.363e-15, 4.644e-15,
2955  3.550e-15, 2.808e-15, 2.274e-15, 1.871e-15, 1.557e-15,
2956  1.308e-15, 1.108e-15, 9.488e-16, 8.222e-16, 7.238e-16,
2957  6.506e-16, 6.008e-16, 5.742e-16, 5.724e-16, 5.991e-16,
2958  6.625e-16, 7.775e-16, 9.734e-16, 1.306e-15, 1.880e-15,
2959  2.879e-15, 4.616e-15, 7.579e-15, 1.248e-14, 2.030e-14,
2960  3.244e-14, 5.171e-14, 7.394e-14, 9.676e-14, 1.199e-13,
2961  1.467e-13, 1.737e-13, 2.020e-13, 2.425e-13, 3.016e-13,
2962  3.700e-13, 4.617e-13, 5.949e-13, 7.473e-13, 9.378e-13,
2963  1.191e-12, 1.481e-12, 1.813e-12, 2.232e-12, 2.722e-12,
2964  3.254e-12, 3.845e-12, 4.458e-12, 5.048e-12, 5.511e-12,
2965  5.898e-12, 6.204e-12, 6.293e-12, 6.386e-12, 6.467e-12,
2966  6.507e-12, 6.466e-12, 6.443e-12, 6.598e-12, 6.873e-12,
2967  7.300e-12, 7.816e-12, 8.368e-12, 8.643e-12, 8.466e-12,
2968  7.871e-12, 6.853e-12, 5.714e-12, 4.482e-12, 3.392e-12,
2969  2.613e-12, 2.008e-12, 1.562e-12, 1.228e-12, 9.888e-13,
2970  7.646e-13, 5.769e-13, 4.368e-13, 3.324e-13, 2.508e-13,
2971  1.916e-13};
2972 
2973 
2974 // CO2 continuum Ridgeway 1982, implementation of CKD_MT_1.00
2975 // UNITS OF (CM**3/MOL)*1.E-20
2977 const Numeric FCO2_ckd_mt_100_v2 = 10000.0;
2979 const int FCO2_ckd_mt_100_npt = 1003;
2981  0.000e0, 1.1110E-11, 1.0188E-11,
2982  9.3516E-12, 1.0188E-11, 1.1110E-11, 1.2127E-11, 1.3251E-11, // F17590
2983  1.4495E-11, 1.5872E-11, 1.7400E-11, 1.9097E-11, 2.0985E-11, // F17600
2984  2.3087E-11, 2.5431E-11, 2.8051E-11, 3.0982E-11, 3.4268E-11, // F17610
2985  3.7956E-11, 4.2105E-11, 4.6779E-11, 5.2056E-11, 5.8025E-11, // F17620
2986  6.4791E-11, 7.2477E-11, 8.1226E-11, 9.1209E-11, 1.0263E-10, // F17630
2987  1.1572E-10, 1.3078E-10, 1.4814E-10, 1.6821E-10, 1.9148E-10, // F17640
2988  2.1857E-10, 2.5019E-10, 2.8723E-10, 3.3080E-10, 3.8223E-10, // F17650
2989  4.4321E-10, 5.1583E-10, 6.0274E-10, 7.0725E-10, 8.3363E-10, // F17660
2990  9.8735E-10, 1.1755E-09, 1.4074E-09, 1.6953E-09, 2.0557E-09, // F17670
2991  2.5107E-09, 3.0909E-09, 3.8391E-09, 4.8165E-09, 6.1117E-09, // F17680
2992  7.8550E-09, 1.0241E-08, 1.3593E-08, 1.8344E-08, 2.5408E-08, // F17700
2993  3.6386E-08, 5.4251E-08, 8.4262E-08, 1.3273E-07, 2.1867E-07, // F17710
2994  3.5007E-07, 6.0011E-07, 1.0797E-06, 1.8254E-06, 3.1621E-06, // F17720
2995  4.0293E-06, 4.3683E-06, 4.4552E-06, 4.2684E-06, 3.9341E-06, // F17730
2996  2.5972E-06, 1.5617E-06, 8.9063E-07, 5.0360E-07, 3.0616E-07, // F17740
2997  1.9066E-07, 1.1904E-07, 7.6078E-08, 4.9304E-08, 3.3335E-08, // F17750
2998  2.3494E-08, 1.7114E-08, 1.2742E-08, 9.6068E-09, 7.3706E-09, // F17760
2999  5.7386E-09, 4.5302E-09, 3.6223E-09, 2.9309E-09, 2.4001E-09, // F17770
3000  1.9927E-09, 1.6877E-09, 1.4602E-09, 1.2764E-09, 1.1317E-09, // F17780
3001  1.0273E-09, 9.1943E-10, 8.0353E-10, 6.8746E-10, 5.9354E-10, // F17790
3002  5.1722E-10, 4.4975E-10, 4.2350E-10, 4.2282E-10, 4.2610E-10, // F17810
3003  4.5465E-10, 4.6166E-10, 4.3149E-10, 3.7615E-10, 3.1576E-10, // F17820
3004  2.6490E-10, 1.9143E-10, 1.2885E-10, 9.4954E-11, 7.6499E-11, // F17830
3005  6.4581E-11, 5.5923E-11, 4.9200E-11, 4.3813E-11, 3.9533E-11, // F17840
3006  3.6338E-11, 3.4320E-11, 3.3329E-11, 3.2400E-11, 3.1700E-11, // F17850
3007  3.1267E-11, 2.9940E-11, 2.7628E-11, 2.4496E-11, 2.1764E-11, // F17860
3008  1.9306E-11, 1.7352E-11, 1.7292E-11, 1.8733E-11, 2.0224E-11, // F17870
3009  2.2396E-11, 2.4225E-11, 2.4890E-11, 2.3513E-11, 2.0824E-11, // F17880
3010  1.8642E-11, 1.5676E-11, 1.2882E-11, 1.1054E-11, 1.0074E-11, // F17890
3011  9.6324E-12, 9.4910E-12, 9.5134E-12, 9.6427E-12, 9.8552E-12, // F17900
3012  1.0140E-11, 1.0494E-11, 1.0915E-11, 1.1405E-11, 1.1965E-11, // F17920
3013  1.2601E-11, 1.3316E-11, 1.4116E-11, 1.5006E-11, 1.5997E-11, // F17930
3014  1.7092E-11, 1.8305E-11, 1.9641E-11, 2.1121E-11, 2.2744E-11, // F17940
3015  2.4503E-11, 2.6419E-11, 2.8221E-11, 3.0609E-11, 3.3260E-11, // F17950
3016  3.6247E-11, 3.9581E-11, 4.3279E-11, 4.7376E-11, 5.1932E-11, // F17960
3017  5.7001E-11, 6.2654E-11, 6.8973E-11, 7.6058E-11, 8.4037E-11, // F17970
3018  9.3081E-11, 1.0344E-10, 1.1547E-10, 1.2970E-10, 1.4659E-10, // F17980
3019  1.6724E-10, 1.9481E-10, 2.3520E-10, 2.9424E-10, 3.6319E-10, // F17990
3020  4.2279E-10, 4.8494E-10, 5.2296E-10, 5.6111E-10, 5.8935E-10, // F18000
3021  6.0807E-10, 6.4204E-10, 6.8457E-10, 7.6709E-10, 8.7664E-10, // F18010
3022  1.0183E-09, 1.2116E-09, 1.4874E-09, 1.8596E-09, 2.2742E-09, // F18030
3023  2.7577E-09, 3.1932E-09, 3.6381E-09, 4.1207E-09, 4.6458E-09, // F18040
3024  5.3065E-09, 6.0741E-09, 7.1942E-09, 8.7103E-09, 1.0713E-08, // F18050
3025  1.3344E-08, 1.6831E-08, 2.1524E-08, 2.7967E-08, 3.7047E-08, // F18060
3026  5.0312E-08, 7.0566E-08, 1.0275E-07, 1.5419E-07, 2.3309E-07, // F18070
3027  3.4843E-07, 5.3194E-07, 8.7207E-07, 1.5075E-06, 2.7077E-06, // F18080
3028  4.7125E-06, 7.1734E-06, 9.2381E-06, 1.1507E-05, 1.3737E-05, // F18090
3029  1.4004E-05, 1.2679E-05, 1.0478E-05, 8.5684E-06, 6.1472E-06, // F18100
3030  3.2424E-06, 1.5291E-06, 8.0390E-07, 4.6767E-07, 2.9170E-07, // F18110
3031  1.9148E-07, 1.3076E-07, 9.2156E-08, 6.6652E-08, 4.9265E-08, // F18120
3032  3.7094E-08, 2.8380E-08, 2.2019E-08, 1.7297E-08, 1.3738E-08, // F18140
3033  1.1019E-08, 8.9178E-09, 7.2762E-09, 5.9810E-09, 4.9500E-09, // F18150
3034  4.1226E-09, 3.4534E-09, 2.9082E-09, 2.4611E-09, 2.0922E-09, // F18160
3035  1.7864E-09, 1.5313E-09, 1.3176E-09, 1.1379E-09, 9.8612E-10, // F18170
3036  8.5741E-10, 7.4782E-10, 6.5416E-10, 5.7384E-10, 5.0471E-10, // F18180
3037  4.4503E-10, 3.9334E-10, 3.4841E-10, 3.0927E-10, 2.7510E-10, // F18190
3038  2.4519E-10, 2.1893E-10, 1.9587E-10, 1.7555E-10, 1.5762E-10, // F18200
3039  1.4178E-10, 1.2772E-10, 1.1524E-10, 1.0414E-10, 9.4248E-11, // F18210
3040  8.5421E-11, 7.7530E-11, 7.0466E-11, 6.4134E-11, 5.8450E-11, // F18220
3041  5.3342E-11, 4.8746E-11, 4.4607E-11, 4.0874E-11, 3.7507E-11, // F18230
3042  3.4466E-11, 3.1719E-11, 2.9237E-11, 2.6993E-11, 2.4968E-11, // F18250
3043  2.3139E-11, 2.1494E-11, 2.0022E-11, 1.8709E-11, 1.7541E-11, // F18260
3044  1.6533E-11, 1.5690E-11, 1.5027E-11, 1.4560E-11, 1.4169E-11, // F18270
3045  1.3796E-11, 1.3553E-11, 1.3526E-11, 1.3567E-11, 1.3399E-11, // F18280
3046  1.3149E-11, 1.3049E-11, 1.3078E-11, 1.3093E-11, 1.3168E-11, // F18290
3047  1.3572E-11, 1.4383E-11, 1.5698E-11, 1.7658E-11, 2.0197E-11, // F18300
3048  2.2845E-11, 2.5944E-11, 3.0250E-11, 3.5900E-11, 4.1482E-11, // F18310
3049  4.6602E-11, 5.2453E-11, 5.9754E-11, 6.9308E-11, 8.0696E-11, // F18320
3050  9.5737E-11, 1.1733E-10, 1.4793E-10, 1.9119E-10, 2.5355E-10, // F18330
3051  3.4588E-10, 4.8343E-10, 6.9378E-10, 1.0212E-09, 1.4858E-09, // F18340
3052  2.0906E-09, 3.0576E-09, 4.6318E-09, 7.1585E-09, 1.1259E-08, // F18360
3053  1.7954E-08, 2.9760E-08, 4.6693E-08, 6.2035E-08, 7.4399E-08, // F18370
3054  9.1705E-08, 9.9448E-08, 9.5181E-08, 8.3050E-08, 7.1756E-08, // F18380
3055  6.6261E-08, 6.0357E-08, 6.6988E-08, 8.3419E-08, 9.8834E-08, // F18390
3056  1.2385E-07, 1.3962E-07, 1.3651E-07, 1.1963E-07, 9.7731E-08, // F18400
3057  8.0083E-08, 5.1660E-08, 2.5778E-08, 1.2600E-08, 6.8779E-09, // F18410
3058  4.1161E-09, 2.6276E-09, 1.7595E-09, 1.2225E-09, 8.7493E-10, // F18420
3059  6.4179E-10, 4.7987E-10, 3.6491E-10, 2.8191E-10, 2.2084E-10, // F18430
3060  1.7507E-10, 1.4025E-10, 1.1344E-10, 9.2580E-11, 7.6170E-11, // F18440
3061  6.3142E-11, 5.2694E-11, 4.4260E-11, 3.7421E-11, 3.1847E-11, // F18450
3062  2.7263E-11, 2.3352E-11, 2.0081E-11, 1.7332E-11, 1.5000E-11, // F18470
3063  1.2978E-11, 1.1204E-11, 9.7513E-12, 8.5300E-12, 7.4888E-12, // F18480
3064  6.5947E-12, 5.8231E-12, 5.1548E-12, 4.5739E-12, 4.0675E-12, // F18490
3065  3.6250E-12, 3.2371E-12, 2.8963E-12, 2.5964E-12, 2.3316E-12, // F18500
3066  2.0975E-12, 1.8902E-12, 1.7061E-12, 1.5425E-12, 1.3967E-12, // F18510
3067  1.2665E-12, 1.1503E-12, 1.0463E-12, 9.5319E-13, 8.6963E-13, // F18520
3068  7.9461E-13, 7.2718E-13, 6.6654E-13, 6.1201E-13, 5.6296E-13, // F18530
3069  5.1894E-13, 4.7969E-13, 4.4494E-13, 4.1320E-13, 3.8529E-13, // F18540
3070  3.6202E-13, 3.4320E-13, 3.2546E-13, 3.0741E-13, 2.9156E-13, // F18550
3071  2.7819E-13, 2.6576E-13, 2.5327E-13, 2.4319E-13, 2.3770E-13, // F18560
3072  2.3645E-13, 2.3967E-13, 2.4960E-13, 2.6858E-13, 2.9679E-13, // F18580
3073  3.3247E-13, 3.8487E-13, 4.7576E-13, 6.1833E-13, 8.0740E-13, // F18590
3074  1.0267E-12, 1.2291E-12, 1.4710E-12, 1.7211E-12, 1.8251E-12, // F18600
3075  1.8982E-12, 1.9768E-12, 2.1877E-12, 2.5008E-12, 3.0545E-12, // F18610
3076  4.1513E-12, 5.7469E-12, 7.7913E-12, 1.0873E-11, 1.5538E-11, // F18620
3077  2.2838E-11, 3.4153E-11, 4.9751E-11, 7.0591E-11, 1.0794E-10, // F18630
3078  1.7287E-10, 2.6554E-10, 3.5250E-10, 4.1952E-10, 5.1979E-10, // F18640
3079  5.7649E-10, 5.6168E-10, 5.0014E-10, 4.3670E-10, 4.0057E-10, // F18650
3080  3.5169E-10, 3.7578E-10, 5.5054E-10, 8.8962E-10, 1.2940E-09, // F18660
3081  1.6293E-09, 2.0553E-09, 2.3945E-09, 2.3926E-09, 2.1385E-09, // F18670
3082  1.7637E-09, 1.4623E-09, 1.0150E-09, 5.5612E-10, 3.5162E-10, // F18690
3083  3.4009E-10, 4.1744E-10, 5.0009E-10, 6.0748E-10, 7.3258E-10, // F18700
3084  7.6553E-10, 7.2066E-10, 6.1317E-10, 5.1585E-10, 3.9136E-10, // F18710
3085  2.2991E-10, 1.2590E-10, 6.9549E-11, 3.8699E-11, 2.2976E-11, // F18720
3086  1.4702E-11, 9.9989E-12, 7.1233E-12, 5.2612E-12, 4.0298E-12, // F18730
3087  3.2395E-12, 2.7932E-12, 2.6331E-12, 2.7835E-12, 3.3167E-12, // F18740
3088  3.3581E-12, 3.3404E-12, 3.1243E-12, 2.8459E-12, 2.4092E-12, // F18750
3089  1.5349E-12, 9.7039E-13, 5.8611E-13, 3.9686E-13, 2.9332E-13, // F18760
3090  2.2795E-13, 1.8432E-13, 1.5287E-13, 1.2898E-13, 1.1019E-13, // F18770
3091  9.5041E-14, 8.2617E-14, 7.2310E-14, 6.3711E-14, 5.6561E-14, // F18780
3092  5.0763E-14, 4.6525E-14, 4.4418E-14, 4.4681E-14, 4.7199E-14, // F18800
3093  5.0389E-14, 5.3620E-14, 6.0817E-14, 6.0192E-14, 5.5878E-14, // F18810
3094  4.9874E-14, 4.3955E-14, 3.9854E-14, 3.1697E-14, 3.1135E-14, // F18820
3095  3.4683E-14, 3.8789E-14, 4.6932E-14, 5.0213E-14, 4.7156E-14, // F18830
3096  4.2130E-14, 3.5554E-14, 3.0465E-14, 1.9216E-14, 1.1378E-14, // F18840
3097  8.2878E-15, 6.8260E-15, 6.0960E-15, 5.8135E-15, 5.9618E-15, // F18850
3098  6.8295E-15, 9.2943E-15, 1.2572E-14, 1.4837E-14, 1.8595E-14, // F18860
3099  2.1533E-14, 2.2008E-14, 2.1305E-14, 1.9743E-14, 2.0413E-14, // F18870
3100  2.1131E-14, 2.5346E-14, 3.3709E-14, 4.3995E-14, 5.8911E-14, // F18880
3101  7.8451E-14, 1.0537E-13, 1.4559E-13, 2.0405E-13, 2.6734E-13, // F18890
3102  3.5029E-13, 4.9788E-13, 7.3207E-13, 1.0979E-12, 1.4960E-12, // F18910
3103  1.7906E-12, 2.2171E-12, 2.5369E-12, 2.5873E-12, 2.3871E-12, // F18920
3104  2.0730E-12, 1.9095E-12, 1.6227E-12, 1.3981E-12, 1.5228E-12, // F18930
3105  2.0956E-12, 3.2493E-12, 5.2740E-12, 8.6666E-12, 1.2672E-11, // F18940
3106  1.5725E-11, 1.9496E-11, 2.2858E-11, 2.2939E-11, 2.0597E-11, // F18950
3107  1.7021E-11, 1.4456E-11, 1.0794E-11, 7.1327E-12, 6.5438E-12, // F18960
3108  8.8057E-12, 1.2311E-11, 1.5284E-11, 1.9273E-11, 2.2796E-11, // F18970
3109  2.3156E-11, 2.0914E-11, 1.7298E-11, 1.4424E-11, 1.0127E-11, // F18980
3110  5.2952E-12, 2.5759E-12, 1.4304E-12, 9.4758E-13, 7.9895E-13, // F18990
3111  9.1124E-13, 1.2297E-12, 1.5898E-12, 1.9056E-12, 2.3905E-12, // F19000
3112  2.6695E-12, 2.6297E-12, 2.3467E-12, 2.0058E-12, 1.6773E-12, // F19020
3113  1.1327E-12, 6.7331E-13, 4.0954E-13, 2.5152E-13, 1.4491E-13, // F19030
3114  9.0916E-14, 6.6510E-14, 5.9022E-14, 6.4403E-14, 8.3126E-14, // F19040
3115  1.2409E-13, 1.5153E-13, 1.6909E-13, 1.7938E-13, 1.9169E-13, // F19050
3116  2.1173E-13, 2.1941E-13, 2.6360E-13, 3.5956E-13, 4.8369E-13, // F19060
3117  5.9657E-13, 7.4062E-13, 8.9452E-13, 8.7899E-13, 8.2012E-13, // F19070
3118  7.4109E-13, 6.9845E-13, 6.3130E-13, 5.6538E-13, 6.9516E-13, // F19080
3119  9.9486E-13, 1.5226E-12, 2.4155E-12, 3.9119E-12, 6.3541E-12, // F19090
3120  1.0075E-11, 1.5903E-11, 2.5091E-11, 3.6282E-11, 4.6076E-11, // F19100
3121  5.6240E-11, 7.1126E-11, 7.0230E-11, 6.3642E-11, 5.3722E-11, // F19110
3122  4.4651E-11, 3.4409E-11, 1.5287E-11, 7.2479E-12, 3.9218E-12, // F19130
3123  2.3172E-12, 1.4585E-12, 9.6297E-13, 6.6017E-13, 4.6655E-13, // F19140
3124  3.3814E-13, 2.5034E-13, 1.8874E-13, 1.4457E-13, 1.1228E-13, // F19150
3125  8.8284E-14, 7.0188E-14, 5.6365E-14, 4.5685E-14, 3.7357E-14, // F19160
3126  3.0817E-14, 2.5674E-14, 2.1679E-14, 1.8780E-14, 1.7243E-14, // F19170
3127  1.6273E-14, 1.5201E-14, 1.5091E-14, 1.4725E-14, 1.3668E-14, // F19180
3128  1.1940E-14, 1.0097E-14, 8.8905E-15, 7.1475E-15, 5.8080E-15, // F19190
3129  5.5216E-15, 5.9338E-15, 7.1932E-15, 9.9780E-15, 1.6167E-14, // F19200
3130  2.9100E-14, 5.2355E-14, 8.4889E-14, 1.1311E-13, 1.4192E-13, // F19210
3131  1.7648E-13, 1.8657E-13, 1.7498E-13, 1.4877E-13, 1.2578E-13, // F19220
3132  1.0051E-13, 6.7213E-14, 5.4750E-14, 7.0454E-14, 1.1351E-13, // F19240
3133  1.8015E-13, 2.4825E-13, 3.0875E-13, 3.9200E-13, 4.2550E-13, // F19250
3134  4.0067E-13, 3.4438E-13, 2.8204E-13, 2.2432E-13, 1.3172E-13, // F19260
3135  6.2820E-14, 3.6474E-14, 2.9409E-14, 3.4164E-14, 4.8300E-14, // F19270
3136  6.4140E-14, 7.7284E-14, 9.7973E-14, 1.0969E-13, 1.0580E-13, // F19280
3137  9.2070E-14, 7.5008E-14, 6.1722E-14, 3.8874E-14, 1.9007E-14, // F19290
3138  9.6765E-15, 5.5169E-15, 3.5254E-15, 2.5012E-15, 2.0013E-15, // F19300
3139  1.8810E-15, 2.2143E-15, 3.5332E-15, 5.7552E-15, 7.3359E-15, // F19310
3140  8.3292E-15, 9.9174E-15, 1.0930E-14, 1.1185E-14, 1.0884E-14, // F19320
3141  1.0577E-14, 1.1048E-14, 1.1611E-14, 1.1128E-14, 1.0729E-14, // F19330
3142  1.0248E-14, 1.0630E-14, 1.1793E-14, 1.3977E-14, 1.9857E-14, // F19350
3143  2.9182E-14, 4.2229E-14, 6.2710E-14, 9.0717E-14, 1.2561E-13, // F19360
3144  1.6951E-13, 2.2520E-13, 3.2470E-13, 4.5178E-13, 6.3104E-13, // F19370
3145  8.7521E-13, 1.1073E-12, 1.3534E-12, 1.6954E-12, 1.7005E-12, // F19380
3146  1.5993E-12, 1.4416E-12, 1.3280E-12, 1.2760E-12, 1.1076E-12, // F19390
3147  1.2850E-12, 1.6208E-12, 1.9527E-12, 2.4941E-12, 2.5077E-12, // F19400
3148  2.3156E-12, 2.0069E-12, 1.6301E-12, 1.2885E-12, 5.9863E-13, // F19410
3149  2.8012E-13, 1.5065E-13, 8.8802E-14, 5.5888E-14, 3.6951E-14, // F19420
3150  2.5393E-14, 1.8001E-14, 1.3093E-14, 9.7308E-15, 7.3665E-15, // F19430
3151  5.6662E-15, 4.4194E-15, 3.4897E-15, 2.7857E-15, 2.2457E-15, // F19440
3152  1.8264E-15, 1.4973E-15, 1.2365E-15, 1.0280E-15, 8.5996E-16, // F19460
3153  7.2345E-16, 6.1182E-16, 5.1994E-16, 4.4388E-16, 3.8055E-16, // F19470
3154  3.2756E-16, 2.8300E-16, 2.4537E-16, 2.1347E-16, 1.8630E-16, // F19480
3155  1.6307E-16, 1.4314E-16, 1.2599E-16, 1.1117E-16, 9.8344E-17, // F19490
3156  8.7197E-17, 7.7487E-17, 6.9004E-17, 6.1577E-17, 5.5060E-17, // F19500
3157  4.9325E-17, 4.4271E-17, 3.9810E-17, 3.5861E-17, 3.2361E-17, // F19510
3158  2.9252E-17, 2.6487E-17, 2.4023E-17, 2.1826E-17, 1.9862E-17, // F19520
3159  1.8107E-17, 1.6536E-17, 1.5129E-17, 1.3869E-17, 1.2739E-17, // F19530
3160  1.1726E-17, 1.0820E-17, 1.0009E-17, 9.2846E-18, 8.6398E-18, // F19540
3161  8.0682E-18, 7.5641E-18, 7.1229E-18, 6.7411E-18, 6.4161E-18, // F19550
3162  6.1455E-18, 5.9290E-18, 5.7662E-18, 5.6574E-18, 5.6049E-18, // F19570
3163  5.6112E-18, 5.6811E-18, 5.8200E-18, 6.0364E-18, 6.3405E-18, // F19580
3164  6.7450E-18, 7.2674E-18, 7.9298E-18, 8.7613E-18, 9.8010E-18, // F19590
3165  1.1086E-17, 1.2686E-17, 1.4679E-17, 1.7177E-17, 2.0335E-17, // F19600
3166  2.4384E-17, 2.9538E-17, 3.6416E-17, 4.5520E-17, 5.7788E-17, // F19610
3167  7.4676E-17, 9.8513E-17, 1.3323E-16, 1.8570E-16, 2.6897E-16, // F19620
3168  4.0958E-16, 6.6785E-16, 1.2064E-15, 2.4023E-15, 4.3240E-15, // F19630
3169  6.6353E-15, 8.6393E-15, 1.1433E-14, 1.3946E-14, 1.3611E-14, // F19640
3170  1.2557E-14, 1.0934E-14, 1.0039E-14, 8.5099E-15, 7.9557E-15, // F19650
3171  1.1346E-14, 1.8512E-14, 2.9285E-14, 4.1585E-14, 5.2809E-14, // F19660
3172  7.0377E-14, 7.8094E-14, 7.3735E-14, 6.5845E-14, 5.5023E-14, // F19680
3173  4.6866E-14, 2.7430E-14, 1.5975E-14, 1.4522E-14, 1.7075E-14, // F19690
3174  2.0408E-14, 2.5119E-14, 3.1194E-14, 3.0280E-14, 2.7676E-14, // F19700
3175  2.3344E-14, 1.9466E-14, 1.4140E-14, 6.2087E-15, 3.0307E-15, // F19710
3176  1.6815E-15, 1.0169E-15, 6.5448E-16, 4.4162E-16, 3.0928E-16, // F19720
3177  2.2320E-16, 1.6511E-16, 1.2471E-16, 9.5881E-17, 7.4850E-17, // F19730
3178  5.9216E-17, 4.7400E-17, 3.8338E-17, 3.1298E-17, 2.5765E-17, // F19740
3179  2.1371E-17, 1.7848E-17, 1.5000E-17, 1.2679E-17, 1.0774E-17, // F19750
3180  9.2002E-18, 7.8922E-18, 6.7987E-18, 5.8800E-18, 5.1042E-18, // F19760
3181  4.4461E-18, 3.8855E-18, 3.4060E-18, 2.9944E-18, 2.6397E-18, // F19770
3182  2.3331E-18};
3183 
3184 // CO2 continuum Ridgeway 1982, implementation of CKD_MT_2.50
3185 //Hartmann line coupling: isotopes 1 and 2
3186 // UNITS OF (CM**3/MOL)*1.E-20
3188 const Numeric FCO2_ckd_mt_250_v2 = 10000.0;
3190 const int FCO2_ckd_mt_250_npt = 5003;
3192  8.391e-13, 8.359e-13,
3193  8.345e-13, 8.359e-13, 8.391e-13, 8.439e-13, 8.500e-13,
3194  8.573e-13, 8.655e-13, 8.750e-13, 8.859e-13, 8.981e-13,
3195  9.119e-13, 9.273e-13, 9.442e-13, 9.626e-13, 9.825e-13,
3196  1.004e-12, 1.027e-12, 1.052e-12, 1.078e-12, 1.106e-12,
3197  1.135e-12, 1.166e-12, 1.199e-12, 1.233e-12, 1.270e-12,
3198  1.308e-12, 1.347e-12, 1.389e-12, 1.432e-12, 1.478e-12,
3199  1.525e-12, 1.574e-12, 1.625e-12, 1.678e-12, 1.734e-12,
3200  1.791e-12, 1.850e-12, 1.912e-12, 1.976e-12, 2.042e-12,
3201  2.110e-12, 2.181e-12, 2.254e-12, 2.329e-12, 2.408e-12,
3202  2.488e-12, 2.572e-12, 2.658e-12, 2.746e-12, 2.838e-12,
3203  2.933e-12, 3.030e-12, 3.130e-12, 3.234e-12, 3.341e-12,
3204  3.451e-12, 3.564e-12, 3.681e-12, 3.801e-12, 3.925e-12,
3205  4.053e-12, 4.184e-12, 4.320e-12, 4.459e-12, 4.603e-12,
3206  4.750e-12, 4.902e-12, 5.059e-12, 5.220e-12, 5.386e-12,
3207  5.556e-12, 5.732e-12, 5.912e-12, 6.098e-12, 6.290e-12,
3208  6.487e-12, 6.689e-12, 6.897e-12, 7.112e-12, 7.333e-12,
3209  7.560e-12, 7.793e-12, 8.034e-12, 8.281e-12, 8.535e-12,
3210  8.797e-12, 9.067e-12, 9.344e-12, 9.629e-12, 9.923e-12,
3211  1.023e-11, 1.054e-11, 1.086e-11, 1.119e-11, 1.152e-11,
3212  1.187e-11, 1.223e-11, 1.260e-11, 1.298e-11, 1.338e-11,
3213  1.378e-11, 1.419e-11, 1.462e-11, 1.506e-11, 1.552e-11,
3214  1.598e-11, 1.646e-11, 1.696e-11, 1.747e-11, 1.799e-11,
3215  1.854e-11, 1.909e-11, 1.967e-11, 2.026e-11, 2.087e-11,
3216  2.150e-11, 2.214e-11, 2.281e-11, 2.350e-11, 2.421e-11,
3217  2.494e-11, 2.569e-11, 2.647e-11, 2.727e-11, 2.810e-11,
3218  2.895e-11, 2.983e-11, 3.073e-11, 3.167e-11, 3.263e-11,
3219  3.363e-11, 3.466e-11, 3.572e-11, 3.681e-11, 3.794e-11,
3220  3.910e-11, 4.031e-11, 4.155e-11, 4.283e-11, 4.416e-11,
3221  4.552e-11, 4.694e-11, 4.840e-11, 4.991e-11, 5.147e-11,
3222  5.308e-11, 5.474e-11, 5.646e-11, 5.824e-11, 6.008e-11,
3223  6.199e-11, 6.395e-11, 6.599e-11, 6.809e-11, 7.027e-11,
3224  7.253e-11, 7.486e-11, 7.728e-11, 7.978e-11, 8.237e-11,
3225  8.505e-11, 8.782e-11, 9.070e-11, 9.368e-11, 9.677e-11,
3226  9.997e-11, 1.033e-10, 1.067e-10, 1.103e-10, 1.140e-10,
3227  1.178e-10, 1.218e-10, 1.259e-10, 1.302e-10, 1.347e-10,
3228  1.393e-10, 1.441e-10, 1.491e-10, 1.542e-10, 1.596e-10,
3229  1.652e-10, 1.710e-10, 1.770e-10, 1.833e-10, 1.899e-10,
3230  1.966e-10, 2.037e-10, 2.111e-10, 2.187e-10, 2.267e-10,
3231  2.350e-10, 2.437e-10, 2.527e-10, 2.621e-10, 2.719e-10,
3232  2.821e-10, 2.928e-10, 3.039e-10, 3.155e-10, 3.276e-10,
3233  3.403e-10, 3.535e-10, 3.674e-10, 3.818e-10, 3.969e-10,
3234  4.127e-10, 4.293e-10, 4.466e-10, 4.647e-10, 4.837e-10,
3235  5.036e-10, 5.245e-10, 5.464e-10, 5.695e-10, 5.937e-10,
3236  6.191e-10, 6.459e-10, 6.742e-10, 7.039e-10, 7.353e-10,
3237  7.683e-10, 8.032e-10, 8.400e-10, 8.785e-10, 9.213e-10,
3238  9.661e-10, 1.013e-09, 1.062e-09, 1.114e-09, 1.169e-09,
3239  1.226e-09, 1.286e-09, 1.350e-09, 1.417e-09, 1.488e-09,
3240  1.564e-09, 1.643e-09, 1.728e-09, 1.818e-09, 1.914e-09,
3241  2.016e-09, 2.126e-09, 2.244e-09, 2.378e-09, 2.522e-09,
3242  2.677e-09, 2.843e-09, 3.024e-09, 3.220e-09, 3.437e-09,
3243  3.676e-09, 3.941e-09, 4.236e-09, 4.565e-09, 4.931e-09,
3244  5.336e-09, 5.784e-09, 6.276e-09, 6.817e-09, 7.410e-09,
3245  8.108e-09, 9.238e-09, 1.044e-08, 1.167e-08, 1.292e-08,
3246  1.419e-08, 1.548e-08, 1.679e-08, 1.816e-08, 1.956e-08,
3247  2.103e-08, 2.258e-08, 2.425e-08, 2.609e-08, 2.815e-08,
3248  3.051e-08, 3.326e-08, 3.653e-08, 4.040e-08, 4.546e-08,
3249  5.160e-08, 5.909e-08, 6.836e-08, 7.995e-08, 9.457e-08,
3250  1.130e-07, 1.366e-07, 1.731e-07, 2.156e-07, 2.655e-07,
3251  3.241e-07, 3.927e-07, 4.723e-07, 5.639e-07, 6.685e-07,
3252  7.872e-07, 9.510e-07, 1.199e-06, 1.528e-06, 1.847e-06,
3253  2.155e-06, 2.453e-06, 2.742e-06, 3.026e-06, 3.308e-06,
3254  3.594e-06, 3.895e-06, 4.227e-06, 4.609e-06, 5.073e-06,
3255  5.660e-06, 6.406e-06, 7.410e-06, 8.801e-06, 1.052e-05,
3256  1.261e-05, 1.512e-05, 1.808e-05, 2.149e-05, 2.535e-05,
3257  2.970e-05, 3.413e-05, 4.573e-05, 6.122e-05, 7.642e-05,
3258  9.099e-05, 1.048e-04, 1.176e-04, 1.294e-04, 1.398e-04,
3259  1.488e-04, 1.561e-04, 1.616e-04, 1.653e-04, 1.670e-04,
3260  1.666e-04, 1.642e-04, 1.599e-04, 1.538e-04, 1.460e-04,
3261  1.365e-04, 1.256e-04, 1.132e-04, 9.969e-05, 8.499e-05,
3262  6.925e-05, 5.260e-05, 4.198e-05, 3.475e-05, 2.933e-05,
3263  2.457e-05, 2.043e-05, 1.690e-05, 1.394e-05, 1.151e-05,
3264  9.559e-06, 8.021e-06, 6.826e-06, 5.920e-06, 5.232e-06,
3265  4.703e-06, 4.285e-06, 3.941e-06, 3.643e-06, 3.368e-06,
3266  3.106e-06, 2.847e-06, 2.585e-06, 2.316e-06, 2.040e-06,
3267  1.755e-06, 1.463e-06, 1.165e-06, 9.093e-07, 8.070e-07,
3268  6.991e-07, 6.009e-07, 5.118e-07, 4.319e-07, 3.612e-07,
3269  2.996e-07, 2.465e-07, 2.012e-07, 1.633e-07, 1.370e-07,
3270  1.172e-07, 1.015e-07, 8.892e-08, 7.876e-08, 7.053e-08,
3271  6.378e-08, 5.817e-08, 5.367e-08, 4.988e-08, 4.660e-08,
3272  4.372e-08, 4.113e-08, 3.874e-08, 3.651e-08, 3.439e-08,
3273  3.234e-08, 3.033e-08, 2.836e-08, 2.641e-08, 2.448e-08,
3274  2.255e-08, 2.062e-08, 1.869e-08, 1.677e-08, 1.532e-08,
3275  1.417e-08, 1.317e-08, 1.226e-08, 1.143e-08, 1.068e-08,
3276  1.001e-08, 9.396e-09, 8.846e-09, 8.350e-09, 7.902e-09,
3277  7.496e-09, 7.125e-09, 6.784e-09, 6.467e-09, 6.171e-09,
3278  5.892e-09, 5.629e-09, 5.379e-09, 5.161e-09, 4.952e-09,
3279  4.756e-09, 4.571e-09, 4.396e-09, 4.232e-09, 4.077e-09,
3280  3.930e-09, 3.792e-09, 3.662e-09, 3.541e-09, 3.426e-09,
3281  3.320e-09, 3.221e-09, 3.129e-09, 3.045e-09, 2.967e-09,
3282  2.898e-09, 2.839e-09, 2.788e-09, 2.743e-09, 2.706e-09,
3283  2.676e-09, 2.653e-09, 2.638e-09, 2.633e-09, 2.640e-09,
3284  2.661e-09, 2.700e-09, 2.760e-09, 2.844e-09, 2.953e-09,
3285  3.092e-09, 3.260e-09, 3.459e-09, 3.685e-09, 3.936e-09,
3286  4.205e-09, 4.482e-09, 4.756e-09, 5.015e-09, 5.255e-09,
3287  5.479e-09, 5.696e-09, 5.915e-09, 6.139e-09, 6.369e-09,
3288  6.596e-09, 6.811e-09, 6.999e-09, 7.148e-09, 7.244e-09,
3289  7.280e-09, 7.252e-09, 7.159e-09, 7.007e-09, 6.799e-09,
3290  6.547e-09, 6.260e-09, 5.948e-09, 5.618e-09, 5.279e-09,
3291  4.935e-09, 4.584e-09, 4.224e-09, 3.849e-09, 3.457e-09,
3292  3.055e-09, 2.658e-09, 2.285e-09, 1.948e-09, 1.661e-09,
3293  1.429e-09, 1.254e-09, 1.133e-09, 1.060e-09, 1.031e-09,
3294  1.038e-09, 1.079e-09, 1.151e-09, 1.254e-09, 1.391e-09,
3295  1.564e-09, 1.777e-09, 2.033e-09, 2.335e-09, 2.682e-09,
3296  3.072e-09, 3.497e-09, 3.947e-09, 4.407e-09, 4.859e-09,
3297  5.293e-09, 5.707e-09, 6.108e-09, 6.510e-09, 6.919e-09,
3298  7.337e-09, 7.762e-09, 8.178e-09, 8.573e-09, 8.923e-09,
3299  9.211e-09, 9.419e-09, 9.536e-09, 9.554e-09, 9.473e-09,
3300  9.300e-09, 9.043e-09, 8.715e-09, 8.330e-09, 7.904e-09,
3301  7.447e-09, 6.968e-09, 6.471e-09, 5.955e-09, 5.414e-09,
3302  4.843e-09, 4.246e-09, 3.644e-09, 3.054e-09, 2.504e-09,
3303  2.010e-09, 1.584e-09, 1.234e-09, 9.578e-10, 7.490e-10,
3304  5.962e-10, 4.887e-10, 4.149e-10, 3.652e-10, 3.309e-10,
3305  3.067e-10, 2.892e-10, 2.758e-10, 2.650e-10, 2.560e-10,
3306  2.482e-10, 2.413e-10, 2.351e-10, 2.295e-10, 2.244e-10,
3307  2.197e-10, 2.154e-10, 2.113e-10, 2.075e-10, 2.039e-10,
3308  2.005e-10, 1.973e-10, 1.942e-10, 1.912e-10, 1.884e-10,
3309  1.857e-10, 1.831e-10, 1.805e-10, 1.781e-10, 1.757e-10,
3310  1.734e-10, 1.712e-10, 1.691e-10, 1.670e-10, 1.649e-10,
3311  1.629e-10, 1.610e-10, 1.591e-10, 1.573e-10, 1.555e-10,
3312  1.537e-10, 1.520e-10, 1.503e-10, 1.487e-10, 1.471e-10,
3313  1.455e-10, 1.440e-10, 1.425e-10, 1.410e-10, 1.396e-10,
3314  1.381e-10, 1.368e-10, 1.354e-10, 1.341e-10, 1.328e-10,
3315  1.315e-10, 1.303e-10, 1.290e-10, 1.278e-10, 1.267e-10,
3316  1.255e-10, 1.244e-10, 1.233e-10, 1.222e-10, 1.211e-10,
3317  1.201e-10, 1.190e-10, 1.180e-10, 1.170e-10, 1.161e-10,
3318  1.151e-10, 1.142e-10, 1.133e-10, 1.124e-10, 1.115e-10,
3319  1.106e-10, 1.098e-10, 1.089e-10, 1.081e-10, 1.073e-10,
3320  1.065e-10, 1.058e-10, 1.050e-10, 1.043e-10, 1.036e-10,
3321  1.028e-10, 1.022e-10, 1.015e-10, 1.008e-10, 1.001e-10,
3322  9.950e-11, 9.887e-11, 9.825e-11, 9.765e-11, 9.705e-11,
3323  9.647e-11, 9.591e-11, 9.535e-11, 9.480e-11, 9.427e-11,
3324  9.375e-11, 9.324e-11, 9.274e-11, 9.225e-11, 9.177e-11,
3325  9.131e-11, 9.085e-11, 9.040e-11, 8.997e-11, 8.954e-11,
3326  8.913e-11, 8.872e-11, 8.833e-11, 8.794e-11, 8.757e-11,
3327  8.720e-11, 8.684e-11, 8.650e-11, 8.616e-11, 8.583e-11,
3328  8.551e-11, 8.520e-11, 8.490e-11, 8.461e-11, 8.432e-11,
3329  8.405e-11, 8.378e-11, 8.352e-11, 8.327e-11, 8.303e-11,
3330  8.280e-11, 8.257e-11, 8.236e-11, 8.215e-11, 8.195e-11,
3331  8.176e-11, 8.158e-11, 8.140e-11, 8.123e-11, 8.107e-11,
3332  8.092e-11, 8.078e-11, 8.064e-11, 8.051e-11, 8.039e-11,
3333  8.028e-11, 8.018e-11, 8.008e-11, 7.999e-11, 7.991e-11,
3334  7.983e-11, 7.976e-11, 7.971e-11, 7.965e-11, 7.961e-11,
3335  7.957e-11, 7.954e-11, 7.952e-11, 7.951e-11, 7.950e-11,
3336  7.950e-11, 7.951e-11, 7.952e-11, 7.955e-11, 7.958e-11,
3337  7.961e-11, 7.966e-11, 7.971e-11, 7.977e-11, 7.984e-11,
3338  7.991e-11, 8.000e-11, 8.009e-11, 8.018e-11, 8.029e-11,
3339  8.040e-11, 8.052e-11, 8.065e-11, 8.079e-11, 8.093e-11,
3340  8.108e-11, 8.124e-11, 8.141e-11, 8.158e-11, 8.176e-11,
3341  8.195e-11, 8.215e-11, 8.235e-11, 8.257e-11, 8.279e-11,
3342  8.302e-11, 8.326e-11, 8.350e-11, 8.376e-11, 8.402e-11,
3343  8.429e-11, 8.457e-11, 8.486e-11, 8.515e-11, 8.546e-11,
3344  8.577e-11, 8.609e-11, 8.642e-11, 8.676e-11, 8.711e-11,
3345  8.747e-11, 8.783e-11, 8.821e-11, 8.859e-11, 8.898e-11,
3346  8.939e-11, 8.980e-11, 9.022e-11, 9.065e-11, 9.109e-11,
3347  9.155e-11, 9.201e-11, 9.248e-11, 9.296e-11, 9.345e-11,
3348  9.395e-11, 9.446e-11, 9.499e-11, 9.552e-11, 9.606e-11,
3349  9.662e-11, 9.719e-11, 9.776e-11, 9.835e-11, 9.895e-11,
3350  9.956e-11, 1.002e-10, 1.008e-10, 1.015e-10, 1.021e-10,
3351  1.028e-10, 1.035e-10, 1.042e-10, 1.049e-10, 1.056e-10,
3352  1.063e-10, 1.071e-10, 1.079e-10, 1.086e-10, 1.094e-10,
3353  1.102e-10, 1.111e-10, 1.119e-10, 1.127e-10, 1.136e-10,
3354  1.145e-10, 1.154e-10, 1.163e-10, 1.172e-10, 1.181e-10,
3355  1.191e-10, 1.201e-10, 1.211e-10, 1.221e-10, 1.231e-10,
3356  1.241e-10, 1.252e-10, 1.263e-10, 1.274e-10, 1.285e-10,
3357  1.296e-10, 1.308e-10, 1.319e-10, 1.331e-10, 1.344e-10,
3358  1.356e-10, 1.368e-10, 1.381e-10, 1.394e-10, 1.407e-10,
3359  1.421e-10, 1.435e-10, 1.448e-10, 1.463e-10, 1.477e-10,
3360  1.492e-10, 1.506e-10, 1.522e-10, 1.537e-10, 1.553e-10,
3361  1.568e-10, 1.585e-10, 1.601e-10, 1.618e-10, 1.635e-10,
3362  1.652e-10, 1.670e-10, 1.688e-10, 1.706e-10, 1.725e-10,
3363  1.744e-10, 1.763e-10, 1.782e-10, 1.802e-10, 1.823e-10,
3364  1.843e-10, 1.864e-10, 1.886e-10, 1.907e-10, 1.929e-10,
3365  1.952e-10, 1.975e-10, 1.998e-10, 2.022e-10, 2.046e-10,
3366  2.071e-10, 2.096e-10, 2.122e-10, 2.148e-10, 2.174e-10,
3367  2.202e-10, 2.229e-10, 2.257e-10, 2.286e-10, 2.315e-10,
3368  2.345e-10, 2.375e-10, 2.406e-10, 2.438e-10, 2.470e-10,
3369  2.503e-10, 2.536e-10, 2.570e-10, 2.605e-10, 2.641e-10,
3370  2.677e-10, 2.714e-10, 2.752e-10, 2.791e-10, 2.831e-10,
3371  2.871e-10, 2.913e-10, 2.955e-10, 2.999e-10, 3.043e-10,
3372  3.089e-10, 3.136e-10, 3.184e-10, 3.234e-10, 3.285e-10,
3373  3.337e-10, 3.391e-10, 3.447e-10, 3.505e-10, 3.564e-10,
3374  3.626e-10, 3.689e-10, 3.754e-10, 3.822e-10, 3.892e-10,
3375  3.965e-10, 4.041e-10, 4.120e-10, 4.203e-10, 4.290e-10,
3376  4.381e-10, 4.478e-10, 4.581e-10, 4.691e-10, 4.807e-10,
3377  4.931e-10, 5.062e-10, 5.200e-10, 5.346e-10, 5.499e-10,
3378  5.659e-10, 5.826e-10, 6.002e-10, 6.189e-10, 6.392e-10,
3379  6.606e-10, 6.834e-10, 7.080e-10, 7.348e-10, 7.643e-10,
3380  7.974e-10, 8.351e-10, 8.791e-10, 9.301e-10, 9.894e-10,
3381  1.059e-09, 1.140e-09, 1.235e-09, 1.346e-09, 1.472e-09,
3382  1.616e-09, 1.777e-09, 1.954e-09, 2.147e-09, 2.347e-09,
3383  2.549e-09, 2.747e-09, 2.941e-09, 3.126e-09, 3.309e-09,
3384  3.589e-09, 3.848e-09, 4.066e-09, 4.238e-09, 4.365e-09,
3385  4.445e-09, 4.481e-09, 4.474e-09, 4.426e-09, 4.341e-09,
3386  4.223e-09, 4.076e-09, 3.905e-09, 3.717e-09, 3.516e-09,
3387  3.308e-09, 3.100e-09, 2.897e-09, 2.701e-09, 2.514e-09,
3388  2.332e-09, 2.156e-09, 1.985e-09, 1.819e-09, 1.659e-09,
3389  1.635e-09, 1.630e-09, 1.634e-09, 1.642e-09, 1.654e-09,
3390  1.668e-09, 1.685e-09, 1.705e-09, 1.728e-09, 1.754e-09,
3391  1.785e-09, 1.819e-09, 1.859e-09, 1.903e-09, 1.952e-09,
3392  2.007e-09, 2.068e-09, 2.134e-09, 2.207e-09, 2.287e-09,
3393  2.374e-09, 2.469e-09, 2.573e-09, 2.686e-09, 2.810e-09,
3394  2.947e-09, 3.098e-09, 3.285e-09, 3.494e-09, 3.729e-09,
3395  3.999e-09, 4.311e-09, 4.677e-09, 5.110e-09, 5.628e-09,
3396  6.239e-09, 6.963e-09, 7.806e-09, 8.772e-09, 9.860e-09,
3397  1.106e-08, 1.236e-08, 1.375e-08, 1.519e-08, 1.666e-08,
3398  1.817e-08, 1.962e-08, 2.240e-08, 2.516e-08, 2.762e-08,
3399  2.977e-08, 3.157e-08, 3.303e-08, 3.411e-08, 3.479e-08,
3400  3.524e-08, 3.533e-08, 3.506e-08, 3.445e-08, 3.353e-08,
3401  3.236e-08, 3.096e-08, 2.939e-08, 2.769e-08, 2.589e-08,
3402  2.404e-08, 2.215e-08, 2.024e-08, 1.832e-08, 1.640e-08,
3403  1.449e-08, 1.261e-08, 1.203e-08, 1.188e-08, 1.185e-08,
3404  1.188e-08, 1.195e-08, 1.205e-08, 1.216e-08, 1.228e-08,
3405  1.250e-08, 1.278e-08, 1.307e-08, 1.337e-08, 1.369e-08,
3406  1.402e-08, 1.436e-08, 1.474e-08, 1.513e-08, 1.556e-08,
3407  1.601e-08, 1.651e-08, 1.703e-08, 1.760e-08, 1.821e-08,
3408  1.886e-08, 1.957e-08, 2.032e-08, 2.119e-08, 2.213e-08,
3409  2.313e-08, 2.420e-08, 2.534e-08, 2.656e-08, 2.785e-08,
3410  2.923e-08, 3.070e-08, 3.228e-08, 3.396e-08, 3.577e-08,
3411  3.772e-08, 3.981e-08, 4.207e-08, 4.451e-08, 4.715e-08,
3412  5.001e-08, 5.313e-08, 5.654e-08, 6.027e-08, 6.438e-08,
3413  6.891e-08, 7.395e-08, 7.959e-08, 8.594e-08, 9.315e-08,
3414  1.014e-07, 1.109e-07, 1.220e-07, 1.351e-07, 1.506e-07,
3415  1.691e-07, 1.914e-07, 2.184e-07, 2.511e-07, 2.910e-07,
3416  3.396e-07, 3.986e-07, 4.703e-07, 5.565e-07, 6.598e-07,
3417  7.824e-07, 9.260e-07, 1.092e-06, 1.282e-06, 1.495e-06,
3418  1.730e-06, 1.984e-06, 2.254e-06, 2.533e-06, 2.816e-06,
3419  3.100e-06, 3.386e-06, 3.683e-06, 3.999e-06, 4.343e-06,
3420  4.721e-06, 5.140e-06, 5.603e-06, 6.119e-06, 6.699e-06,
3421  7.361e-06, 8.132e-06, 9.049e-06, 1.017e-05, 1.155e-05,
3422  1.329e-05, 1.549e-05, 1.827e-05, 2.178e-05, 2.619e-05,
3423  3.169e-05, 3.845e-05, 4.668e-05, 5.656e-05, 6.822e-05,
3424  8.175e-05, 9.719e-05, 1.145e-04, 1.334e-04, 1.537e-04,
3425  1.748e-04, 1.960e-04, 2.167e-04, 2.363e-04, 2.549e-04,
3426  2.731e-04, 2.911e-04, 3.094e-04, 3.277e-04, 3.458e-04,
3427  3.629e-04, 3.782e-04, 3.910e-04, 4.003e-04, 4.058e-04,
3428  4.069e-04, 4.038e-04, 3.964e-04, 3.853e-04, 3.709e-04,
3429  3.538e-04, 3.348e-04, 3.143e-04, 2.928e-04, 2.707e-04,
3430  2.481e-04, 2.250e-04, 2.010e-04, 1.760e-04, 1.504e-04,
3431  1.250e-04, 1.010e-04, 7.907e-05, 6.005e-05, 4.430e-05,
3432  3.180e-05, 2.231e-05, 1.544e-05, 1.069e-05, 7.481e-06,
3433  5.397e-06, 4.055e-06, 3.178e-06, 2.581e-06, 2.153e-06,
3434  1.827e-06, 1.568e-06, 1.357e-06, 1.182e-06, 1.035e-06,
3435  9.114e-07, 8.059e-07, 7.156e-07, 6.378e-07, 5.706e-07,
3436  5.122e-07, 4.612e-07, 4.165e-07, 3.771e-07, 3.424e-07,
3437  3.116e-07, 2.843e-07, 2.599e-07, 2.381e-07, 2.186e-07,
3438  2.010e-07, 1.852e-07, 1.709e-07, 1.580e-07, 1.463e-07,
3439  1.356e-07, 1.259e-07, 1.171e-07, 1.090e-07, 1.017e-07,
3440  9.489e-08, 8.868e-08, 8.297e-08, 7.772e-08, 7.288e-08,
3441  6.841e-08, 6.428e-08, 6.045e-08, 5.691e-08, 5.362e-08,
3442  5.057e-08, 4.773e-08, 4.508e-08, 4.262e-08, 4.032e-08,
3443  3.818e-08, 3.617e-08, 3.430e-08, 3.255e-08, 3.090e-08,
3444  2.936e-08, 2.791e-08, 2.655e-08, 2.527e-08, 2.407e-08,
3445  2.294e-08, 2.187e-08, 2.087e-08, 1.992e-08, 1.902e-08,
3446  1.818e-08, 1.738e-08, 1.662e-08, 1.590e-08, 1.522e-08,
3447  1.458e-08, 1.397e-08, 1.339e-08, 1.284e-08, 1.232e-08,
3448  1.183e-08, 1.136e-08, 1.091e-08, 1.048e-08, 1.008e-08,
3449  9.691e-09, 9.322e-09, 8.971e-09, 8.636e-09, 8.316e-09,
3450  8.011e-09, 7.720e-09, 7.441e-09, 7.175e-09, 6.921e-09,
3451  6.677e-09, 6.444e-09, 6.221e-09, 6.008e-09, 5.803e-09,
3452  5.607e-09, 5.419e-09, 5.239e-09, 5.066e-09, 4.900e-09,
3453  4.740e-09, 4.587e-09, 4.440e-09, 4.299e-09, 4.163e-09,
3454  4.033e-09, 3.907e-09, 3.787e-09, 3.671e-09, 3.559e-09,
3455  3.451e-09, 3.347e-09, 3.247e-09, 3.151e-09, 3.058e-09,
3456  2.969e-09, 2.883e-09, 2.799e-09, 2.719e-09, 2.642e-09,
3457  2.567e-09, 2.495e-09, 2.425e-09, 2.357e-09, 2.292e-09,
3458  2.229e-09, 2.169e-09, 2.110e-09, 2.053e-09, 1.998e-09,
3459  1.945e-09, 1.893e-09, 1.843e-09, 1.795e-09, 1.748e-09,
3460  1.703e-09, 1.659e-09, 1.617e-09, 1.576e-09, 1.536e-09,
3461  1.497e-09, 1.460e-09, 1.424e-09, 1.388e-09, 1.354e-09,
3462  1.321e-09, 1.289e-09, 1.258e-09, 1.227e-09, 1.198e-09,
3463  1.169e-09, 1.142e-09, 1.115e-09, 1.088e-09, 1.063e-09,
3464  1.038e-09, 1.014e-09, 9.908e-10, 9.681e-10, 9.460e-10,
3465  9.246e-10, 9.037e-10, 8.834e-10, 8.636e-10, 8.444e-10,
3466  8.257e-10, 8.074e-10, 7.897e-10, 7.724e-10, 7.556e-10,
3467  7.393e-10, 7.233e-10, 7.078e-10, 6.927e-10, 6.779e-10,
3468  6.636e-10, 6.496e-10, 6.359e-10, 6.226e-10, 6.097e-10,
3469  5.970e-10, 5.847e-10, 5.727e-10, 5.610e-10, 5.495e-10,
3470  5.384e-10, 5.275e-10, 5.169e-10, 5.065e-10, 4.964e-10,
3471  4.865e-10, 4.769e-10, 4.675e-10, 4.583e-10, 4.493e-10,
3472  4.406e-10, 4.320e-10, 4.236e-10, 4.155e-10, 4.075e-10,
3473  3.997e-10, 3.921e-10, 3.846e-10, 3.774e-10, 3.703e-10,
3474  3.633e-10, 3.565e-10, 3.499e-10, 3.434e-10, 3.370e-10,
3475  3.308e-10, 3.248e-10, 3.188e-10, 3.130e-10, 3.073e-10,
3476  3.018e-10, 2.963e-10, 2.910e-10, 2.858e-10, 2.807e-10,
3477  2.757e-10, 2.708e-10, 2.660e-10, 2.613e-10, 2.567e-10,
3478  2.523e-10, 2.479e-10, 2.436e-10, 2.393e-10, 2.352e-10,
3479  2.312e-10, 2.272e-10, 2.233e-10, 2.195e-10, 2.158e-10,
3480  2.121e-10, 2.086e-10, 2.051e-10, 2.016e-10, 1.983e-10,
3481  1.950e-10, 1.917e-10, 1.886e-10, 1.855e-10, 1.824e-10,
3482  1.794e-10, 1.765e-10, 1.736e-10, 1.708e-10, 1.680e-10,
3483  1.653e-10, 1.627e-10, 1.601e-10, 1.575e-10, 1.550e-10,
3484  1.525e-10, 1.501e-10, 1.478e-10, 1.454e-10, 1.431e-10,
3485  1.409e-10, 1.387e-10, 1.366e-10, 1.344e-10, 1.324e-10,
3486  1.303e-10, 1.283e-10, 1.264e-10, 1.244e-10, 1.225e-10,
3487  1.207e-10, 1.189e-10, 1.171e-10, 1.153e-10, 1.136e-10,
3488  1.119e-10, 1.102e-10, 1.086e-10, 1.070e-10, 1.054e-10,
3489  1.039e-10, 1.023e-10, 1.008e-10, 9.937e-11, 9.793e-11,
3490  9.651e-11, 9.512e-11, 9.375e-11, 9.241e-11, 9.109e-11,
3491  8.979e-11, 8.852e-11, 8.726e-11, 8.603e-11, 8.483e-11,
3492  8.364e-11, 8.247e-11, 8.132e-11, 8.020e-11, 7.909e-11,
3493  7.800e-11, 7.693e-11, 7.588e-11, 7.485e-11, 7.384e-11,
3494  7.284e-11, 7.186e-11, 7.090e-11, 6.995e-11, 6.902e-11,
3495  6.811e-11, 6.721e-11, 6.633e-11, 6.546e-11, 6.461e-11,
3496  6.377e-11, 6.295e-11, 6.214e-11, 6.135e-11, 6.057e-11,
3497  5.980e-11, 5.905e-11, 5.831e-11, 5.758e-11, 5.687e-11,
3498  5.617e-11, 5.548e-11, 5.481e-11, 5.415e-11, 5.350e-11,
3499  5.286e-11, 5.224e-11, 5.163e-11, 5.103e-11, 5.045e-11,
3500  4.989e-11, 4.934e-11, 4.881e-11, 4.830e-11, 4.781e-11,
3501  4.734e-11, 4.689e-11, 4.646e-11, 4.605e-11, 4.565e-11,
3502  4.527e-11, 4.489e-11, 4.453e-11, 4.417e-11, 4.381e-11,
3503  4.346e-11, 4.312e-11, 4.279e-11, 4.247e-11, 4.216e-11,
3504  4.187e-11, 4.160e-11, 4.136e-11, 4.114e-11, 4.097e-11,
3505  4.084e-11, 4.075e-11, 4.073e-11, 4.077e-11, 4.089e-11,
3506  4.110e-11, 4.142e-11, 4.185e-11, 4.238e-11, 4.301e-11,
3507  4.372e-11, 4.448e-11, 4.527e-11, 4.604e-11, 4.677e-11,
3508  4.742e-11, 4.798e-11, 4.844e-11, 4.879e-11, 4.905e-11,
3509  4.924e-11, 4.936e-11, 4.940e-11, 4.939e-11, 4.937e-11,
3510  4.935e-11, 4.938e-11, 4.946e-11, 4.963e-11, 4.987e-11,
3511  5.018e-11, 5.057e-11, 5.100e-11, 5.147e-11, 5.195e-11,
3512  5.242e-11, 5.285e-11, 5.321e-11, 5.346e-11, 5.358e-11,
3513  5.352e-11, 5.327e-11, 5.283e-11, 5.217e-11, 5.133e-11,
3514  5.034e-11, 4.918e-11, 4.786e-11, 4.643e-11, 4.492e-11,
3515  4.338e-11, 4.186e-11, 4.042e-11, 3.908e-11, 3.789e-11,
3516  3.685e-11, 3.598e-11, 3.527e-11, 3.472e-11, 3.430e-11,
3517  3.402e-11, 3.385e-11, 3.379e-11, 3.382e-11, 3.395e-11,
3518  3.420e-11, 3.466e-11, 3.519e-11, 3.579e-11, 3.645e-11,
3519  3.718e-11, 3.798e-11, 3.886e-11, 3.982e-11, 4.088e-11,
3520  4.204e-11, 4.331e-11, 4.471e-11, 4.626e-11, 4.800e-11,
3521  4.996e-11, 5.219e-11, 5.475e-11, 5.769e-11, 6.108e-11,
3522  6.494e-11, 6.930e-11, 7.414e-11, 7.941e-11, 8.501e-11,
3523  9.086e-11, 9.693e-11, 1.029e-10, 1.087e-10, 1.142e-10,
3524  1.193e-10, 1.240e-10, 1.282e-10, 1.342e-10, 1.412e-10,
3525  1.485e-10, 1.559e-10, 1.639e-10, 1.725e-10, 1.821e-10,
3526  1.928e-10, 2.047e-10, 2.175e-10, 2.312e-10, 2.454e-10,
3527  2.596e-10, 2.735e-10, 2.867e-10, 2.988e-10, 3.094e-10,
3528  3.182e-10, 3.248e-10, 3.291e-10, 3.308e-10, 3.298e-10,
3529  3.260e-10, 3.195e-10, 3.101e-10, 3.000e-10, 2.891e-10,
3530  2.769e-10, 2.635e-10, 2.493e-10, 2.347e-10, 2.204e-10,
3531  2.068e-10, 1.944e-10, 1.836e-10, 1.746e-10, 1.675e-10,
3532  1.622e-10, 1.586e-10, 1.565e-10, 1.559e-10, 1.564e-10,
3533  1.579e-10, 1.604e-10, 1.636e-10, 1.675e-10, 1.721e-10,
3534  1.774e-10, 1.833e-10, 1.899e-10, 1.973e-10, 2.055e-10,
3535  2.146e-10, 2.247e-10, 2.360e-10, 2.486e-10, 2.626e-10,
3536  2.784e-10, 2.960e-10, 3.158e-10, 3.380e-10, 3.630e-10,
3537  3.913e-10, 4.234e-10, 4.599e-10, 5.020e-10, 5.507e-10,
3538  6.075e-10, 6.737e-10, 7.509e-10, 8.409e-10, 9.452e-10,
3539  1.066e-09, 1.203e-09, 1.360e-09, 1.535e-09, 1.730e-09,
3540  1.945e-09, 2.179e-09, 2.436e-09, 2.721e-09, 3.044e-09,
3541  3.417e-09, 3.853e-09, 4.362e-09, 4.955e-09, 5.639e-09,
3542  6.417e-09, 7.287e-09, 8.241e-09, 9.269e-09, 1.035e-08,
3543  1.145e-08, 1.256e-08, 1.365e-08, 1.475e-08, 1.589e-08,
3544  1.710e-08, 1.842e-08, 1.988e-08, 2.149e-08, 2.326e-08,
3545  2.520e-08, 2.731e-08, 2.962e-08, 3.215e-08, 3.498e-08,
3546  3.823e-08, 4.199e-08, 4.646e-08, 5.180e-08, 5.819e-08,
3547  6.582e-08, 7.484e-08, 8.539e-08, 9.756e-08, 1.114e-07,
3548  1.270e-07, 1.443e-07, 1.635e-07, 1.848e-07, 2.090e-07,
3549  2.371e-07, 2.706e-07, 3.111e-07, 3.601e-07, 4.190e-07,
3550  4.892e-07, 5.717e-07, 6.668e-07, 7.748e-07, 8.947e-07,
3551  1.025e-06, 1.162e-06, 1.301e-06, 1.439e-06, 1.570e-06,
3552  1.692e-06, 1.808e-06, 1.920e-06, 2.034e-06, 2.150e-06,
3553  2.269e-06, 2.386e-06, 2.499e-06, 2.600e-06, 2.684e-06,
3554  2.746e-06, 2.781e-06, 2.788e-06, 2.768e-06, 2.720e-06,
3555  2.648e-06, 2.556e-06, 2.448e-06, 2.328e-06, 2.198e-06,
3556  2.063e-06, 1.923e-06, 1.779e-06, 1.628e-06, 1.469e-06,
3557  1.300e-06, 1.126e-06, 9.526e-07, 7.885e-07, 6.394e-07,
3558  5.112e-07, 4.064e-07, 3.262e-07, 2.698e-07, 2.352e-07,
3559  2.206e-07, 2.235e-07, 2.429e-07, 2.784e-07, 3.302e-07,
3560  3.995e-07, 4.880e-07, 5.968e-07, 7.277e-07, 8.811e-07,
3561  1.056e-06, 1.251e-06, 1.461e-06, 1.680e-06, 1.901e-06,
3562  2.116e-06, 2.321e-06, 2.519e-06, 2.715e-06, 2.913e-06,
3563  3.115e-06, 3.321e-06, 3.526e-06, 3.724e-06, 3.905e-06,
3564  4.059e-06, 4.181e-06, 4.261e-06, 4.295e-06, 4.283e-06,
3565  4.225e-06, 4.126e-06, 3.991e-06, 3.826e-06, 3.637e-06,
3566  3.432e-06, 3.215e-06, 2.989e-06, 2.755e-06, 2.511e-06,
3567  2.254e-06, 1.985e-06, 1.706e-06, 1.429e-06, 1.166e-06,
3568  9.250e-07, 7.135e-07, 5.356e-07, 3.921e-07, 2.814e-07,
3569  1.988e-07, 1.398e-07, 9.915e-08, 7.137e-08, 5.280e-08,
3570  4.038e-08, 3.192e-08, 2.601e-08, 2.164e-08, 1.836e-08,
3571  1.578e-08, 1.371e-08, 1.199e-08, 1.056e-08, 9.353e-09,
3572  8.321e-09, 7.436e-09, 6.672e-09, 6.010e-09, 5.433e-09,
3573  4.929e-09, 4.487e-09, 4.098e-09, 3.754e-09, 3.448e-09,
3574  3.174e-09, 2.929e-09, 2.708e-09, 2.507e-09, 2.325e-09,
3575  2.159e-09, 2.006e-09, 1.866e-09, 1.738e-09, 1.619e-09,
3576  1.510e-09, 1.409e-09, 1.316e-09, 1.230e-09, 1.149e-09,
3577  1.074e-09, 1.003e-09, 9.372e-10, 8.757e-10, 8.186e-10,
3578  7.661e-10, 7.179e-10, 6.740e-10, 6.339e-10, 5.974e-10,
3579  5.641e-10, 5.335e-10, 5.053e-10, 4.791e-10, 4.548e-10,
3580  4.321e-10, 4.109e-10, 3.909e-10, 3.722e-10, 3.546e-10,
3581  3.380e-10, 3.224e-10, 3.076e-10, 2.936e-10, 2.804e-10,
3582  2.680e-10, 2.562e-10, 2.451e-10, 2.346e-10, 2.246e-10,
3583  2.153e-10, 2.064e-10, 1.981e-10, 1.901e-10, 1.826e-10,
3584  1.755e-10, 1.687e-10, 1.623e-10, 1.562e-10, 1.503e-10,
3585  1.448e-10, 1.395e-10, 1.344e-10, 1.296e-10, 1.250e-10,
3586  1.206e-10, 1.165e-10, 1.125e-10, 1.087e-10, 1.050e-10,
3587  1.015e-10, 9.822e-11, 9.506e-11, 9.203e-11, 8.915e-11,
3588  8.640e-11, 8.377e-11, 8.127e-11, 7.888e-11, 7.660e-11,
3589  7.442e-11, 7.234e-11, 7.035e-11, 6.844e-11, 6.661e-11,
3590  6.486e-11, 6.316e-11, 6.154e-11, 5.998e-11, 5.850e-11,
3591  5.710e-11, 5.582e-11, 5.460e-11, 5.344e-11, 5.234e-11,
3592  5.132e-11, 5.040e-11, 4.961e-11, 4.896e-11, 4.845e-11,
3593  4.806e-11, 4.774e-11, 4.742e-11, 4.702e-11, 4.652e-11,
3594  4.594e-11, 4.527e-11, 4.451e-11, 4.366e-11, 4.274e-11,
3595  4.172e-11, 4.063e-11, 3.946e-11, 3.822e-11, 3.693e-11,
3596  3.560e-11, 3.428e-11, 3.293e-11, 3.155e-11, 3.014e-11,
3597  2.872e-11, 2.734e-11, 2.603e-11, 2.482e-11, 2.376e-11,
3598  2.286e-11, 2.211e-11, 2.146e-11, 2.088e-11, 2.032e-11,
3599  1.980e-11, 1.930e-11, 1.882e-11, 1.836e-11, 1.792e-11,
3600  1.749e-11, 1.708e-11, 1.669e-11, 1.630e-11, 1.593e-11,
3601  1.557e-11, 1.522e-11, 1.488e-11, 1.456e-11, 1.424e-11,
3602  1.392e-11, 1.362e-11, 1.333e-11, 1.304e-11, 1.276e-11,
3603  1.249e-11, 1.223e-11, 1.197e-11, 1.172e-11, 1.147e-11,
3604  1.124e-11, 1.100e-11, 1.078e-11, 1.056e-11, 1.034e-11,
3605  1.013e-11, 9.924e-12, 9.723e-12, 9.528e-12, 9.336e-12,
3606  9.149e-12, 8.967e-12, 8.789e-12, 8.615e-12, 8.445e-12,
3607  8.278e-12, 8.116e-12, 7.957e-12, 7.802e-12, 7.650e-12,
3608  7.502e-12, 7.357e-12, 7.215e-12, 7.076e-12, 6.940e-12,
3609  6.807e-12, 6.677e-12, 6.550e-12, 6.426e-12, 6.304e-12,
3610  6.185e-12, 6.068e-12, 5.954e-12, 5.842e-12, 5.732e-12,
3611  5.625e-12, 5.520e-12, 5.417e-12, 5.316e-12, 5.217e-12,
3612  5.121e-12, 5.026e-12, 4.933e-12, 4.842e-12, 4.753e-12,
3613  4.665e-12, 4.580e-12, 4.496e-12, 4.414e-12, 4.333e-12,
3614  4.254e-12, 4.176e-12, 4.100e-12, 4.025e-12, 3.952e-12,
3615  3.880e-12, 3.810e-12, 3.741e-12, 3.673e-12, 3.607e-12,
3616  3.542e-12, 3.478e-12, 3.415e-12, 3.353e-12, 3.293e-12,
3617  3.233e-12, 3.175e-12, 3.118e-12, 3.062e-12, 3.007e-12,
3618  2.953e-12, 2.899e-12, 2.847e-12, 2.796e-12, 2.746e-12,
3619  2.696e-12, 2.648e-12, 2.600e-12, 2.554e-12, 2.508e-12,
3620  2.463e-12, 2.418e-12, 2.375e-12, 2.332e-12, 2.290e-12,
3621  2.249e-12, 2.208e-12, 2.168e-12, 2.129e-12, 2.090e-12,
3622  2.053e-12, 2.015e-12, 1.979e-12, 1.943e-12, 1.908e-12,
3623  1.873e-12, 1.839e-12, 1.805e-12, 1.772e-12, 1.740e-12,
3624  1.708e-12, 1.677e-12, 1.646e-12, 1.616e-12, 1.586e-12,
3625  1.557e-12, 1.528e-12, 1.500e-12, 1.472e-12, 1.445e-12,
3626  1.418e-12, 1.391e-12, 1.365e-12, 1.340e-12, 1.314e-12,
3627  1.290e-12, 1.265e-12, 1.241e-12, 1.218e-12, 1.195e-12,
3628  1.172e-12, 1.150e-12, 1.128e-12, 1.106e-12, 1.085e-12,
3629  1.064e-12, 1.043e-12, 1.023e-12, 1.003e-12, 9.835e-13,
3630  9.643e-13, 9.453e-13, 9.267e-13, 9.084e-13, 8.904e-13,
3631  8.727e-13, 8.553e-13, 8.382e-13, 8.213e-13, 8.048e-13,
3632  7.885e-13, 7.725e-13, 7.568e-13, 7.414e-13, 7.262e-13,
3633  7.113e-13, 6.966e-13, 6.822e-13, 6.680e-13, 6.541e-13,
3634  6.404e-13, 6.270e-13, 6.138e-13, 6.009e-13, 5.882e-13,
3635  5.757e-13, 5.634e-13, 5.514e-13, 5.396e-13, 5.280e-13,
3636  5.167e-13, 5.055e-13, 4.946e-13, 4.839e-13, 4.734e-13,
3637  4.631e-13, 4.531e-13, 4.432e-13, 4.336e-13, 4.241e-13,
3638  4.149e-13, 4.059e-13, 3.971e-13, 3.885e-13, 3.801e-13,
3639  3.720e-13, 3.640e-13, 3.562e-13, 3.487e-13, 3.414e-13,
3640  3.342e-13, 3.274e-13, 3.207e-13, 3.142e-13, 3.080e-13,
3641  3.020e-13, 2.963e-13, 2.908e-13, 2.856e-13, 2.806e-13,
3642  2.759e-13, 2.715e-13, 2.673e-13, 2.635e-13, 2.600e-13,
3643  2.569e-13, 2.542e-13, 2.519e-13, 2.500e-13, 2.487e-13,
3644  2.479e-13, 2.477e-13, 2.483e-13, 2.498e-13, 2.524e-13,
3645  2.562e-13, 2.614e-13, 2.684e-13, 2.776e-13, 2.894e-13,
3646  3.045e-13, 3.235e-13, 3.472e-13, 3.765e-13, 4.123e-13,
3647  4.554e-13, 5.064e-13, 5.654e-13, 6.321e-13, 7.055e-13,
3648  7.844e-13, 8.666e-13, 9.498e-13, 1.032e-12, 1.111e-12,
3649  1.186e-12, 1.257e-12, 1.322e-12, 1.377e-12, 1.473e-12,
3650  1.580e-12, 1.690e-12, 1.806e-12, 1.930e-12, 2.066e-12,
3651  2.217e-12, 2.386e-12, 2.572e-12, 2.771e-12, 2.983e-12,
3652  3.199e-12, 3.414e-12, 3.619e-12, 3.810e-12, 3.980e-12,
3653  4.123e-12, 4.235e-12, 4.311e-12, 4.348e-12, 4.343e-12,
3654  4.296e-12, 4.204e-12, 4.069e-12, 3.891e-12, 3.711e-12,
3655  3.520e-12, 3.310e-12, 3.085e-12, 2.854e-12, 2.622e-12,
3656  2.400e-12, 2.198e-12, 2.022e-12, 1.879e-12, 1.772e-12,
3657  1.703e-12, 1.673e-12, 1.680e-12, 1.723e-12, 1.799e-12,
3658  1.911e-12, 2.055e-12, 2.231e-12, 2.440e-12, 2.683e-12,
3659  2.960e-12, 3.271e-12, 3.620e-12, 4.012e-12, 4.456e-12,
3660  4.958e-12, 5.520e-12, 6.142e-12, 6.818e-12, 7.538e-12,
3661  8.289e-12, 9.052e-12, 9.821e-12, 1.060e-11, 1.140e-11,
3662  1.226e-11, 1.320e-11, 1.426e-11, 1.547e-11, 1.686e-11,
3663  1.846e-11, 2.030e-11, 2.243e-11, 2.487e-11, 2.767e-11,
3664  3.089e-11, 3.452e-11, 3.858e-11, 4.305e-11, 4.791e-11,
3665  5.309e-11, 5.851e-11, 6.412e-11, 6.995e-11, 7.609e-11,
3666  8.271e-11, 8.987e-11, 9.758e-11, 1.058e-10, 1.146e-10,
3667  1.237e-10, 1.331e-10, 1.428e-10, 1.530e-10, 1.638e-10,
3668  1.755e-10, 1.886e-10, 2.036e-10, 2.212e-10, 2.418e-10,
3669  2.662e-10, 2.949e-10, 3.287e-10, 3.677e-10, 4.130e-10,
3670  4.648e-10, 5.232e-10, 5.877e-10, 6.574e-10, 7.307e-10,
3671  8.058e-10, 8.802e-10, 9.540e-10, 1.027e-09, 1.102e-09,
3672  1.181e-09, 1.268e-09, 1.365e-09, 1.476e-09, 1.601e-09,
3673  1.744e-09, 1.908e-09, 2.099e-09, 2.323e-09, 2.589e-09,
3674  2.904e-09, 3.278e-09, 3.721e-09, 4.237e-09, 4.828e-09,
3675  5.491e-09, 6.214e-09, 6.977e-09, 7.752e-09, 8.508e-09,
3676  9.225e-09, 9.899e-09, 1.055e-08, 1.120e-08, 1.187e-08,
3677  1.256e-08, 1.325e-08, 1.395e-08, 1.461e-08, 1.520e-08,
3678  1.569e-08, 1.605e-08, 1.626e-08, 1.631e-08, 1.620e-08,
3679  1.594e-08, 1.553e-08, 1.501e-08, 1.439e-08, 1.370e-08,
3680  1.296e-08, 1.219e-08, 1.139e-08, 1.055e-08, 9.668e-09,
3681  8.719e-09, 7.720e-09, 6.699e-09, 5.699e-09, 4.763e-09,
3682  3.920e-09, 3.193e-09, 2.592e-09, 2.116e-09, 1.754e-09,
3683  1.496e-09, 1.322e-09, 1.222e-09, 1.179e-09, 1.188e-09,
3684  1.242e-09, 1.341e-09, 1.488e-09, 1.691e-09, 1.963e-09,
3685  2.320e-09, 2.783e-09, 3.375e-09, 4.124e-09, 5.059e-09,
3686  6.212e-09, 7.615e-09, 9.297e-09, 1.128e-08, 1.359e-08,
3687  1.623e-08, 1.920e-08, 2.246e-08, 2.598e-08, 2.967e-08,
3688  3.341e-08, 3.709e-08, 4.060e-08, 4.393e-08, 4.715e-08,
3689  5.035e-08, 5.359e-08, 5.689e-08, 6.020e-08, 6.340e-08,
3690  6.637e-08, 6.892e-08, 7.091e-08, 7.222e-08, 7.275e-08,
3691  7.249e-08, 7.146e-08, 6.970e-08, 6.732e-08, 6.443e-08,
3692  6.112e-08, 5.751e-08, 5.370e-08, 4.974e-08, 4.570e-08,
3693  4.155e-08, 3.726e-08, 3.279e-08, 2.817e-08, 2.355e-08,
3694  1.910e-08, 1.501e-08, 1.141e-08, 8.412e-09, 6.023e-09,
3695  4.215e-09, 2.923e-09, 2.033e-09, 1.455e-09, 1.093e-09,
3696  8.740e-10, 7.431e-10, 6.659e-10, 6.264e-10, 6.148e-10,
3697  6.290e-10, 6.704e-10, 7.425e-10, 8.507e-10, 1.003e-09,
3698  1.207e-09, 1.473e-09, 1.814e-09, 2.240e-09, 2.764e-09,
3699  3.393e-09, 4.135e-09, 4.986e-09, 5.942e-09, 6.983e-09,
3700  8.082e-09, 9.200e-09, 1.030e-08, 1.135e-08, 1.236e-08,
3701  1.334e-08, 1.434e-08, 1.536e-08, 1.642e-08, 1.749e-08,
3702  1.854e-08, 1.954e-08, 2.042e-08, 2.114e-08, 2.167e-08,
3703  2.198e-08, 2.205e-08, 2.189e-08, 2.153e-08, 2.099e-08,
3704  2.030e-08, 1.949e-08, 1.859e-08, 1.763e-08, 1.662e-08,
3705  1.556e-08, 1.445e-08, 1.325e-08, 1.197e-08, 1.060e-08,
3706  9.205e-09, 7.832e-09, 6.544e-09, 5.383e-09, 4.378e-09,
3707  3.539e-09, 2.863e-09, 2.326e-09, 1.907e-09, 1.578e-09,
3708  1.311e-09, 1.088e-09, 8.975e-10, 7.318e-10, 5.895e-10,
3709  4.686e-10, 3.686e-10, 2.875e-10, 2.242e-10, 1.750e-10,
3710  1.380e-10, 1.104e-10, 8.948e-11, 7.378e-11, 6.180e-11,
3711  5.251e-11, 4.520e-11, 3.940e-11, 3.475e-11, 3.099e-11,
3712  2.792e-11, 2.537e-11, 2.323e-11, 2.141e-11, 1.985e-11,
3713  1.850e-11, 1.734e-11, 1.633e-11, 1.545e-11, 1.468e-11,
3714  1.399e-11, 1.338e-11, 1.281e-11, 1.228e-11, 1.179e-11,
3715  1.133e-11, 1.091e-11, 1.055e-11, 1.019e-11, 9.838e-12,
3716  9.494e-12, 9.161e-12, 8.845e-12, 8.544e-12, 8.258e-12,
3717  7.982e-12, 7.708e-12, 7.428e-12, 7.141e-12, 6.853e-12,
3718  6.574e-12, 6.319e-12, 6.101e-12, 5.933e-12, 5.825e-12,
3719  5.790e-12, 5.845e-12, 6.018e-12, 6.355e-12, 6.862e-12,
3720  7.521e-12, 8.372e-12, 9.455e-12, 1.076e-11, 1.231e-11,
3721  1.415e-11, 1.635e-11, 1.900e-11, 2.233e-11, 2.688e-11,
3722  3.335e-11, 4.316e-11, 5.277e-11, 6.203e-11, 7.088e-11,
3723  7.925e-11, 8.706e-11, 9.420e-11, 1.005e-10, 1.059e-10,
3724  1.101e-10, 1.130e-10, 1.145e-10, 1.146e-10, 1.132e-10,
3725  1.104e-10, 1.063e-10, 1.008e-10, 9.418e-11, 8.642e-11,
3726  7.766e-11, 6.805e-11, 5.779e-11, 4.724e-11, 3.706e-11,
3727  2.875e-11, 2.362e-11, 1.918e-11, 1.520e-11, 1.168e-11,
3728  8.671e-12, 6.195e-12, 4.263e-12, 2.844e-12, 1.873e-12,
3729  1.259e-12, 8.916e-13, 6.808e-13, 5.494e-13, 4.535e-13,
3730  3.758e-13, 3.113e-13, 2.571e-13, 2.110e-13, 1.714e-13,
3731  1.372e-13, 1.074e-13, 8.140e-14, 5.888e-14, 3.992e-14,
3732  2.574e-14, 2.098e-14, 1.985e-14, 1.894e-14, 1.804e-14,
3733  1.721e-14, 1.645e-14, 1.570e-14, 1.509e-14, 1.449e-14,
3734  1.389e-14, 1.336e-14, 1.291e-14, 1.238e-14, 1.200e-14,
3735  1.155e-14, 1.117e-14, 1.079e-14, 1.042e-14, 1.004e-14,
3736  9.736e-15, 9.434e-15, 9.132e-15, 8.830e-15, 8.604e-15,
3737  8.302e-15, 8.075e-15, 7.849e-15, 7.623e-15, 7.381e-15,
3738  7.170e-15, 6.974e-15, 6.777e-15, 6.589e-15, 6.408e-15,
3739  6.234e-15, 6.068e-15, 5.909e-15, 5.751e-15, 5.600e-15,
3740  5.457e-15, 5.321e-15, 5.185e-15, 5.057e-15, 4.928e-15,
3741  4.808e-15, 4.694e-15, 4.581e-15, 4.475e-15, 4.370e-15,
3742  4.272e-15, 4.174e-15, 4.083e-15, 3.992e-15, 3.909e-15,
3743  3.834e-15, 3.758e-15, 3.691e-15, 3.623e-15, 3.562e-15,
3744  3.509e-15, 3.464e-15, 3.426e-15, 3.396e-15, 3.374e-15,
3745  3.351e-15, 3.343e-15, 3.336e-15, 3.343e-15, 3.358e-15,
3746  3.374e-15, 3.396e-15, 3.434e-15, 3.472e-15, 3.517e-15,
3747  3.562e-15, 3.608e-15, 3.653e-15, 3.706e-15, 3.751e-15,
3748  3.437e-14, 7.989e-14, 1.282e-13, 1.776e-13, 2.263e-13,
3749  2.729e-13, 3.172e-13, 3.605e-13, 4.054e-13, 4.547e-13,
3750  5.102e-13, 5.724e-13, 6.399e-13, 7.079e-13, 7.639e-13,
3751  8.028e-13, 8.255e-13, 8.329e-13, 8.264e-13, 8.071e-13,
3752  7.764e-13, 7.358e-13, 6.868e-13, 6.310e-13, 5.700e-13,
3753  5.051e-13, 4.376e-13, 3.681e-13, 2.968e-13, 2.234e-13,
3754  1.473e-13, 6.888e-14, 3.200e-15, 3.147e-15, 3.087e-15,
3755  3.011e-15, 2.898e-15, 2.755e-15, 2.611e-15, 2.483e-15,
3756  2.392e-15, 2.340e-15, 2.317e-15, 2.317e-15, 2.332e-15,
3757  2.347e-15, 2.385e-15, 2.430e-15, 2.491e-15, 2.558e-15,
3758  2.619e-15, 3.956e-14, 8.813e-14, 1.397e-13, 1.926e-13,
3759  2.457e-13, 2.970e-13, 3.453e-13, 3.918e-13, 4.390e-13,
3760  4.899e-13, 5.472e-13, 6.123e-13, 6.845e-13, 7.615e-13,
3761  8.299e-13, 8.795e-13, 9.111e-13, 9.260e-13, 9.252e-13,
3762  9.099e-13, 8.817e-13, 8.421e-13, 7.925e-13, 7.350e-13,
3763  6.711e-13, 6.022e-13, 5.297e-13, 4.544e-13, 3.767e-13,
3764  2.965e-13, 2.132e-13, 1.265e-13, 3.808e-14, 2.408e-15,
3765  2.302e-15, 2.158e-15, 1.985e-15, 1.796e-15, 1.615e-15,
3766  1.449e-15, 1.313e-15, 1.177e-15, 1.057e-15, 9.509e-16,
3767  8.604e-16, 7.849e-16, 7.336e-16, 6.928e-16, 6.589e-16,
3768  6.257e-16, 5.947e-16, 5.698e-16, 5.494e-16, 5.321e-16,
3769  5.155e-16, 5.004e-16, 4.875e-16, 4.770e-16, 4.679e-16,
3770  4.604e-16, 4.528e-16, 4.475e-16, 4.430e-16, 4.408e-16,
3771  4.385e-16, 4.377e-16, 4.385e-16, 4.400e-16, 4.438e-16,
3772  4.498e-16, 4.574e-16, 4.664e-16, 4.777e-16, 4.936e-16,
3773  5.155e-16, 5.442e-16, 5.781e-16, 6.166e-16, 6.581e-16,
3774  7.011e-16, 7.479e-16, 8.000e-16, 8.528e-16, 9.057e-16,
3775  9.509e-16, 9.887e-16, 1.019e-15, 1.049e-15, 1.079e-15,
3776  1.117e-15, 1.170e-15, 1.230e-15, 1.291e-15, 1.351e-15,
3777  1.404e-15, 1.457e-15, 1.509e-15, 1.555e-15, 1.592e-15,
3778  1.623e-15, 1.645e-15, 1.660e-15, 1.660e-15, 1.660e-15,
3779  1.660e-15, 1.660e-15, 1.653e-15, 1.638e-15, 1.623e-15,
3780  1.608e-15, 1.585e-15, 1.555e-15, 1.532e-15, 1.502e-15,
3781  1.487e-15, 1.487e-15, 1.502e-15, 1.509e-15, 1.525e-15,
3782  1.540e-15, 1.547e-15, 1.547e-15, 1.555e-15, 1.570e-15,
3783  1.592e-15, 1.638e-15, 1.691e-15, 1.751e-15, 1.826e-15,
3784  1.917e-15, 2.015e-15, 2.136e-15, 2.264e-15, 2.408e-15,
3785  2.543e-15, 2.687e-15, 2.830e-15, 2.981e-15, 3.140e-15,
3786  3.321e-15, 3.517e-15, 1.344e-14, 5.071e-14, 9.298e-14,
3787  1.386e-13, 1.864e-13, 2.353e-13, 2.838e-13, 3.317e-13,
3788  3.798e-13, 4.276e-13, 4.770e-13, 5.299e-13, 5.879e-13,
3789  6.531e-13, 7.277e-13, 8.135e-13, 9.128e-13, 1.028e-12,
3790  1.163e-12, 1.320e-12, 1.506e-12, 1.723e-12, 1.983e-12,
3791  2.292e-12, 2.657e-12, 3.080e-12, 3.560e-12, 4.093e-12,
3792  4.664e-12, 5.252e-12, 5.837e-12, 6.395e-12, 6.924e-12,
3793  7.424e-12, 7.909e-12, 8.394e-12, 8.890e-12, 9.398e-12,
3794  9.911e-12, 1.042e-11, 1.092e-11, 1.140e-11, 1.184e-11,
3795  1.226e-11, 1.268e-11, 1.311e-11, 1.360e-11, 1.420e-11,
3796  1.499e-11, 1.603e-11, 1.740e-11, 1.916e-11, 2.136e-11,
3797  2.401e-11, 2.709e-11, 3.051e-11, 3.419e-11, 3.796e-11,
3798  4.166e-11, 4.519e-11, 4.858e-11, 5.189e-11, 5.528e-11,
3799  5.883e-11, 6.257e-11, 6.644e-11, 7.032e-11, 7.407e-11,
3800  7.751e-11, 8.044e-11, 8.273e-11, 8.424e-11, 8.491e-11,
3801  8.472e-11, 8.371e-11, 8.193e-11, 7.954e-11, 7.660e-11,
3802  7.327e-11, 6.964e-11, 6.579e-11, 6.175e-11, 5.748e-11,
3803  5.295e-11, 4.807e-11, 4.289e-11, 3.757e-11, 3.230e-11,
3804  2.731e-11, 2.278e-11, 1.881e-11, 1.546e-11, 1.273e-11,
3805  1.058e-11, 8.955e-12, 7.746e-12, 6.902e-12, 6.331e-12,
3806  5.989e-12, 5.820e-12, 5.808e-12, 5.927e-12, 6.175e-12,
3807  6.552e-12, 7.059e-12, 7.708e-12, 8.512e-12, 9.506e-12,
3808  1.072e-11, 1.220e-11, 1.402e-11, 1.623e-11, 1.889e-11,
3809  2.204e-11, 2.573e-11, 2.996e-11, 3.477e-11, 4.016e-11,
3810  4.617e-11, 5.289e-11, 6.051e-11, 6.933e-11, 7.972e-11,
3811  9.209e-11, 1.068e-10, 1.243e-10, 1.447e-10, 1.684e-10,
3812  1.953e-10, 2.254e-10, 2.582e-10, 2.933e-10, 3.297e-10,
3813  3.662e-10, 4.014e-10, 4.345e-10, 4.655e-10, 4.951e-10,
3814  5.248e-10, 5.554e-10, 5.872e-10, 6.200e-10, 6.526e-10,
3815  6.838e-10, 7.115e-10, 7.342e-10, 7.503e-10, 7.590e-10,
3816  7.597e-10, 7.526e-10, 7.380e-10, 7.170e-10, 6.905e-10,
3817  6.597e-10, 6.255e-10, 5.889e-10, 5.506e-10, 5.107e-10,
3818  4.691e-10, 4.252e-10, 3.786e-10, 3.296e-10, 2.797e-10,
3819  2.307e-10, 1.848e-10, 1.440e-10, 1.091e-10, 8.078e-11,
3820  5.881e-11, 4.268e-11, 3.141e-11, 2.402e-11, 1.953e-11,
3821  1.711e-11, 1.615e-11, 1.625e-11, 1.722e-11, 1.901e-11,
3822  2.170e-11, 2.541e-11, 3.033e-11, 3.670e-11, 4.480e-11,
3823  5.496e-11, 6.753e-11, 8.287e-11, 1.013e-10, 1.232e-10,
3824  1.486e-10, 1.776e-10, 2.100e-10, 2.453e-10, 2.826e-10,
3825  3.207e-10, 3.585e-10, 3.947e-10, 4.295e-10, 4.634e-10,
3826  4.975e-10, 5.327e-10, 5.691e-10, 6.066e-10, 6.440e-10,
3827  6.801e-10, 7.130e-10, 7.410e-10, 7.624e-10, 7.761e-10,
3828  7.814e-10, 7.782e-10, 7.670e-10, 7.483e-10, 7.233e-10,
3829  6.931e-10, 6.588e-10, 6.215e-10, 5.819e-10, 5.402e-10,
3830  4.966e-10, 4.506e-10, 4.017e-10, 3.503e-10, 2.981e-10,
3831  2.468e-10, 1.987e-10, 1.552e-10, 1.179e-10, 8.705e-11,
3832  6.278e-11, 4.457e-11, 3.136e-11, 2.219e-11, 1.601e-11,
3833  1.191e-11, 9.181e-12, 7.312e-12, 6.003e-12, 5.040e-12,
3834  4.304e-12, 3.722e-12, 3.250e-12, 2.861e-12, 2.533e-12,
3835  2.254e-12, 2.016e-12, 1.812e-12, 1.637e-12, 1.491e-12,
3836  1.370e-12, 1.275e-12, 1.205e-12, 1.164e-12, 1.153e-12,
3837  1.179e-12, 1.248e-12, 1.370e-12, 1.561e-12, 1.839e-12,
3838  2.232e-12, 2.761e-12, 3.467e-12, 4.391e-12, 5.580e-12,
3839  7.078e-12, 8.932e-12, 1.117e-11, 1.382e-11, 1.688e-11,
3840  2.031e-11, 2.403e-11, 2.792e-11, 3.188e-11, 3.573e-11,
3841  3.941e-11, 4.294e-11, 4.645e-11, 5.000e-11, 5.367e-11,
3842  5.743e-11, 6.123e-11, 6.491e-11, 6.837e-11, 7.141e-11,
3843  7.392e-11, 7.576e-11, 7.687e-11, 7.720e-11, 7.678e-11,
3844  7.567e-11, 7.396e-11, 7.187e-11, 6.938e-11, 6.665e-11,
3845  6.373e-11, 6.070e-11, 5.757e-11, 5.426e-11, 5.070e-11,
3846  4.683e-11, 4.269e-11, 3.841e-11, 3.420e-11, 3.020e-11,
3847  2.654e-11, 2.330e-11, 2.050e-11, 1.812e-11, 1.611e-11,
3848  1.439e-11, 1.291e-11, 1.158e-11, 1.037e-11, 9.206e-12,
3849  8.084e-12, 7.010e-12, 6.045e-12, 5.105e-12, 4.203e-12,
3850  3.363e-12, 2.610e-12, 1.964e-12, 1.429e-12, 1.009e-12,
3851  6.869e-13, 4.567e-13, 2.909e-13, 1.790e-13, 1.033e-13,
3852  5.183e-14, 1.809e-14, 8.906e-15, 8.151e-15, 7.472e-15,
3853  6.860e-15, 6.332e-15, 5.902e-15, 5.555e-15, 5.268e-15,
3854  5.019e-15, 4.808e-15, 4.657e-15, 4.551e-15, 4.483e-15,
3855  4.453e-15, 4.460e-15, 4.498e-15, 4.581e-15, 4.702e-15,
3856  4.860e-15, 5.049e-15, 5.275e-15, 5.540e-15, 5.864e-15,
3857  6.272e-15, 3.285e-14, 8.652e-14, 1.564e-13, 2.476e-13,
3858  3.706e-13, 5.518e-13, 8.262e-13, 1.265e-12, 1.708e-12,
3859  2.148e-12, 2.584e-12, 3.012e-12, 3.432e-12, 3.836e-12,
3860  4.219e-12, 4.571e-12, 4.879e-12, 5.133e-12, 5.322e-12,
3861  5.439e-12, 5.482e-12, 5.452e-12, 5.352e-12, 5.185e-12,
3862  4.955e-12, 4.666e-12, 4.323e-12, 3.935e-12, 3.511e-12,
3863  3.069e-12, 2.641e-12, 2.302e-12, 2.118e-12, 1.978e-12,
3864  1.874e-12, 1.809e-12, 1.787e-12, 1.812e-12, 1.888e-12,
3865  2.015e-12, 2.195e-12, 2.429e-12, 2.721e-12, 3.074e-12,
3866  3.495e-12, 3.990e-12, 4.564e-12, 5.216e-12, 5.943e-12,
3867  6.726e-12, 7.566e-12, 8.462e-12, 9.412e-12, 1.040e-11,
3868  1.142e-11, 1.244e-11, 1.342e-11, 1.433e-11, 1.519e-11,
3869  1.602e-11, 1.688e-11, 1.782e-11, 1.890e-11, 2.010e-11,
3870  2.139e-11, 2.268e-11, 2.375e-11, 2.445e-11, 2.481e-11,
3871  2.486e-11, 2.464e-11, 2.417e-11, 2.349e-11, 2.262e-11,
3872  2.157e-11, 2.038e-11, 1.908e-11, 1.770e-11, 1.626e-11,
3873  1.477e-11, 1.323e-11, 1.165e-11, 9.999e-12, 8.290e-12,
3874  6.576e-12, 4.935e-12, 3.475e-12, 2.280e-12, 1.419e-12,
3875  9.163e-13, 7.470e-13, 7.556e-13, 7.834e-13, 8.307e-13,
3876  8.969e-13, 9.822e-13, 1.088e-12, 1.215e-12, 1.367e-12,
3877  1.546e-12, 1.755e-12, 1.999e-12, 2.283e-12, 2.614e-12,
3878  2.998e-12, 3.446e-12, 3.968e-12, 4.576e-12, 5.280e-12,
3879  6.095e-12, 7.031e-12, 8.103e-12, 9.320e-12, 1.070e-11,
3880  1.225e-11, 1.400e-11, 1.600e-11, 1.825e-11, 2.082e-11,
3881  2.377e-11, 2.719e-11, 3.115e-11, 3.576e-11, 4.110e-11,
3882  4.725e-11, 5.425e-11, 6.219e-11, 7.118e-11, 8.133e-11,
3883  9.264e-11, 1.052e-10, 1.190e-10, 1.341e-10, 1.506e-10,
3884  1.684e-10, 1.879e-10, 2.094e-10, 2.339e-10, 2.624e-10,
3885  2.956e-10, 3.345e-10, 3.795e-10, 4.309e-10, 4.883e-10,
3886  5.499e-10, 6.166e-10, 6.887e-10, 7.664e-10, 8.495e-10,
3887  9.372e-10, 1.028e-09, 1.119e-09, 1.209e-09, 1.293e-09,
3888  1.372e-09, 1.448e-09, 1.526e-09, 1.612e-09, 1.711e-09,
3889  1.822e-09, 1.944e-09, 2.070e-09, 2.175e-09, 2.246e-09,
3890  2.287e-09, 2.298e-09, 2.285e-09, 2.248e-09, 2.190e-09,
3891  2.111e-09, 2.016e-09, 1.906e-09, 1.785e-09, 1.657e-09,
3892  1.521e-09, 1.382e-09, 1.238e-09, 1.089e-09, 9.341e-10,
3893  7.733e-10, 6.100e-10, 4.528e-10, 3.101e-10, 1.906e-10,
3894  1.028e-10, 4.896e-11, 2.904e-11, 2.392e-11, 1.984e-11,
3895  1.661e-11, 1.403e-11, 1.193e-11, 1.023e-11, 8.815e-12,
3896  7.641e-12, 6.658e-12, 5.828e-12, 5.123e-12, 4.521e-12,
3897  4.004e-12, 3.558e-12, 3.171e-12, 2.834e-12, 2.539e-12,
3898  2.280e-12, 2.052e-12, 1.850e-12, 1.671e-12, 1.512e-12,
3899  1.370e-12, 1.243e-12, 1.129e-12, 1.026e-12, 9.339e-13,
3900  8.504e-13, 7.748e-13, 7.063e-13, 6.440e-13, 5.872e-13,
3901  5.354e-13, 4.881e-13, 4.448e-13, 4.051e-13, 3.686e-13,
3902  3.351e-13, 3.042e-13, 2.757e-13, 2.494e-13, 2.252e-13,
3903  2.027e-13, 1.818e-13, 1.625e-13, 1.446e-13, 1.280e-13,
3904  1.125e-13, 9.815e-14, 8.481e-14, 7.242e-14, 6.095e-14,
3905  5.034e-14, 4.060e-14, 3.174e-14, 2.390e-14, 1.717e-14,
3906  1.206e-14, 1.034e-14, 9.811e-15, 9.358e-15, 8.906e-15,
3907  8.453e-15, 8.075e-15, 7.698e-15, 7.328e-15, 6.989e-15,
3908  6.664e-15, 6.355e-15, 6.068e-15, 5.796e-15, 5.540e-15,
3909  5.298e-15, 5.064e-15, 4.845e-15, 4.642e-15, 4.445e-15,
3910  4.257e-15, 4.075e-15, 3.909e-15, 3.743e-15, 3.592e-15,
3911  3.449e-15, 3.306e-15, 3.177e-15, 3.057e-15, 2.936e-15,
3912  2.823e-15, 2.709e-15, 2.611e-15, 2.513e-15, 2.415e-15,
3913  2.325e-15, 2.242e-15, 2.158e-15, 2.083e-15, 2.008e-15,
3914  1.940e-15, 1.872e-15, 1.804e-15, 1.743e-15, 1.691e-15,
3915  1.638e-15, 1.585e-15, 1.540e-15, 1.494e-15, 1.457e-15,
3916  1.419e-15, 1.389e-15, 1.358e-15, 1.343e-15, 1.321e-15,
3917  1.298e-15, 1.283e-15, 1.268e-15, 1.253e-15, 1.245e-15,
3918  5.862e-15, 3.288e-14, 6.265e-14, 9.326e-14, 1.234e-13,
3919  1.522e-13, 1.796e-13, 2.058e-13, 2.317e-13, 2.575e-13,
3920  2.833e-13, 3.087e-13, 3.328e-13, 3.550e-13, 3.742e-13,
3921  3.895e-13, 4.003e-13, 4.058e-13, 4.058e-13, 4.003e-13,
3922  3.895e-13, 3.742e-13, 3.548e-13, 3.324e-13, 3.077e-13,
3923  2.818e-13, 2.549e-13, 2.274e-13, 1.990e-13, 1.691e-13,
3924  1.374e-13, 1.040e-13, 6.996e-14, 3.648e-14, 5.560e-15,
3925  6.709e-16, 6.468e-16, 6.196e-16, 5.917e-16, 5.645e-16,
3926  5.396e-16, 5.162e-16, 4.928e-16, 4.717e-16, 4.528e-16,
3927  4.385e-16, 4.279e-16, 4.211e-16, 4.181e-16, 4.166e-16,
3928  4.166e-16, 4.189e-16, 4.226e-16, 4.279e-16, 4.370e-16,
3929  4.475e-16, 4.611e-16, 4.755e-16, 4.936e-16, 5.155e-16,
3930  5.426e-16, 5.736e-16, 6.060e-16, 6.453e-16, 6.928e-16,
3931  2.296e-14, 5.327e-14, 8.601e-14, 1.202e-13, 1.548e-13,
3932  1.892e-13, 2.235e-13, 2.581e-13, 2.945e-13, 3.339e-13,
3933  3.774e-13, 4.261e-13, 4.803e-13, 5.411e-13, 6.089e-13,
3934  6.851e-13, 7.711e-13, 8.691e-13, 9.818e-13, 1.112e-12,
3935  1.263e-12, 1.436e-12, 1.634e-12, 1.856e-12, 2.099e-12,
3936  2.358e-12, 2.625e-12, 2.889e-12, 3.139e-12, 3.373e-12,
3937  3.595e-12, 3.811e-12, 4.032e-12, 4.260e-12, 4.497e-12,
3938  4.736e-12, 4.970e-12, 5.185e-12, 5.369e-12, 5.511e-12,
3939  5.600e-12, 5.630e-12, 5.600e-12, 5.512e-12, 5.369e-12,
3940  5.181e-12, 4.955e-12, 4.699e-12, 4.424e-12, 4.134e-12,
3941  3.833e-12, 3.520e-12, 3.193e-12, 2.847e-12, 2.481e-12,
3942  2.103e-12, 1.730e-12, 1.375e-12, 1.053e-12, 7.751e-13,
3943  5.442e-13, 3.613e-13, 2.236e-13, 1.239e-13, 5.619e-14,
3944  1.470e-14, 4.747e-15, 4.483e-15, 4.279e-15, 4.158e-15,
3945  4.136e-15, 4.204e-15, 4.355e-15, 1.840e-14, 4.496e-14,
3946  8.112e-14, 1.284e-13, 1.892e-13, 2.667e-13, 3.638e-13,
3947  4.862e-13, 6.386e-13, 8.266e-13, 1.056e-12, 1.334e-12,
3948  1.665e-12, 2.055e-12, 2.506e-12, 3.021e-12, 3.595e-12,
3949  4.225e-12, 4.900e-12, 5.605e-12, 6.318e-12, 7.018e-12,
3950  7.688e-12, 8.326e-12, 8.949e-12, 9.578e-12, 1.023e-11,
3951  1.089e-11, 1.157e-11, 1.224e-11, 1.286e-11, 1.339e-11,
3952  1.380e-11, 1.407e-11, 1.418e-11, 1.412e-11, 1.390e-11,
3953  1.354e-11, 1.306e-11, 1.247e-11, 1.181e-11, 1.108e-11,
3954  1.032e-11, 9.520e-12, 8.700e-12, 7.857e-12, 6.985e-12,
3955  6.077e-12, 5.144e-12, 4.213e-12, 3.324e-12, 2.518e-12,
3956  1.820e-12, 1.251e-12, 8.129e-13, 4.967e-13, 2.819e-13,
3957  1.460e-13, 6.531e-14, 1.977e-14, 6.506e-15, 5.547e-15,
3958  4.740e-15, 4.113e-15, 3.645e-15, 3.291e-15, 3.004e-15,
3959  2.755e-15, 2.536e-15, 2.392e-15, 2.302e-15, 2.249e-15,
3960  2.219e-15, 2.226e-15, 2.264e-15, 2.340e-15, 2.445e-15,
3961  2.581e-15, 8.149e-15, 4.005e-14, 8.285e-14, 1.376e-13,
3962  2.056e-13, 2.892e-13, 3.902e-13, 5.099e-13, 6.488e-13,
3963  8.062e-13, 9.798e-13, 1.166e-12, 1.358e-12, 1.551e-12,
3964  1.737e-12, 1.915e-12, 2.088e-12, 2.261e-12, 2.440e-12,
3965  2.626e-12, 2.818e-12, 3.010e-12, 3.195e-12, 3.365e-12,
3966  3.508e-12, 3.618e-12, 3.689e-12, 3.718e-12, 3.705e-12,
3967  3.652e-12, 3.564e-12, 3.447e-12, 3.305e-12, 3.146e-12,
3968  2.973e-12, 2.790e-12, 2.600e-12, 2.400e-12, 2.189e-12,
3969  1.963e-12, 1.722e-12, 1.473e-12, 1.226e-12, 9.909e-13,
3970  7.778e-13, 5.938e-13, 4.407e-13, 3.182e-13, 2.235e-13,
3971  1.522e-13, 9.812e-14, 5.676e-14, 2.415e-14, 1.683e-15,
3972  1.434e-15, 1.238e-15, 1.079e-15, 9.434e-16, 8.302e-16,
3973  7.306e-16, 6.400e-16, 5.691e-16, 5.117e-16, 4.626e-16,
3974  4.166e-16, 3.743e-16, 3.411e-16, 3.132e-16, 2.891e-16,
3975  2.664e-16, 2.453e-16, 2.279e-16, 2.136e-16, 2.008e-16,
3976  1.887e-16, 1.781e-16, 1.698e-16, 1.623e-16, 1.562e-16,
3977  1.509e-16, 1.472e-16, 1.434e-16, 1.419e-16, 1.411e-16,
3978  1.419e-16, 1.434e-16, 1.457e-16, 1.502e-16, 1.570e-16,
3979  1.668e-16, 1.811e-16, 1.985e-16, 2.181e-16, 2.415e-16,
3980  2.664e-16, 2.966e-16, 3.313e-16, 3.675e-16, 4.030e-16,
3981  4.347e-16, 4.619e-16, 4.875e-16, 5.117e-16, 5.336e-16,
3982  5.540e-16, 5.706e-16, 5.849e-16, 5.977e-16, 6.113e-16,
3983  1.061e-14, 2.170e-14, 3.323e-14, 4.525e-14, 5.762e-14,
3984  7.011e-14, 8.221e-14, 9.352e-14, 1.034e-13, 1.115e-13,
3985  1.176e-13, 1.216e-13, 1.234e-13, 1.229e-13, 1.206e-13,
3986  1.170e-13, 1.127e-13, 1.081e-13, 1.038e-13, 1.002e-13,
3987  9.738e-14, 9.552e-14, 9.443e-14, 9.389e-14, 9.366e-14,
3988  9.377e-14, 9.433e-14, 9.567e-14, 9.768e-14, 1.005e-13,
3989  1.046e-13, 1.106e-13, 1.191e-13, 1.304e-13, 1.446e-13,
3990  1.611e-13, 1.789e-13, 1.960e-13, 2.106e-13, 2.203e-13,
3991  2.255e-13, 2.263e-13, 2.231e-13, 2.165e-13, 2.068e-13,
3992  1.945e-13, 1.800e-13, 1.637e-13, 1.462e-13, 1.278e-13,
3993  1.088e-13, 8.916e-14, 6.893e-14, 4.796e-14, 2.634e-14,
3994  4.974e-15, 8.151e-16, 8.302e-16, 8.453e-16, 8.679e-16,
3995  8.906e-16, 9.132e-16, 9.358e-16, 9.660e-16, 1.004e-15,
3996  1.057e-15, 1.125e-15, 1.200e-15, 1.291e-15, 1.389e-15,
3997  6.595e-15, 2.605e-14, 4.954e-14, 7.688e-14, 1.083e-13,
3998  1.441e-13, 1.841e-13, 2.286e-13, 2.772e-13, 3.294e-13,
3999  3.845e-13, 4.415e-13, 4.993e-13, 5.575e-13, 6.175e-13,
4000  6.813e-13, 7.524e-13, 8.335e-13, 9.256e-13, 1.029e-12,
4001  1.141e-12, 1.253e-12, 1.358e-12, 1.460e-12, 1.561e-12,
4002  1.663e-12, 1.770e-12, 1.884e-12, 2.005e-12, 2.136e-12,
4003  2.276e-12, 2.426e-12, 2.585e-12, 2.750e-12, 2.918e-12,
4004  3.082e-12, 3.243e-12, 3.398e-12, 3.558e-12, 3.735e-12,
4005  3.947e-12, 4.208e-12, 4.525e-12, 4.897e-12, 5.316e-12,
4006  5.752e-12, 6.174e-12, 6.589e-12, 7.013e-12, 7.462e-12,
4007  7.957e-12, 8.518e-12, 9.167e-12, 9.929e-12, 1.082e-11,
4008  1.187e-11, 1.309e-11, 1.449e-11, 1.607e-11, 1.782e-11,
4009  1.972e-11, 2.172e-11, 2.376e-11, 2.578e-11, 2.771e-11,
4010  2.956e-11, 3.140e-11, 3.336e-11, 3.556e-11, 3.809e-11,
4011  4.093e-11, 4.398e-11, 4.703e-11, 4.986e-11, 5.188e-11,
4012  5.313e-11, 5.366e-11, 5.352e-11, 5.277e-11, 5.147e-11,
4013  4.970e-11, 4.753e-11, 4.503e-11, 4.228e-11, 3.936e-11,
4014  3.631e-11, 3.316e-11, 2.993e-11, 2.661e-11, 2.317e-11,
4015  1.961e-11, 1.604e-11, 1.264e-11, 9.610e-12, 7.158e-12,
4016  5.460e-12, 4.584e-12, 4.502e-12, 5.024e-12, 5.734e-12,
4017  6.605e-12, 7.649e-12, 8.877e-12, 1.031e-11, 1.195e-11,
4018  1.382e-11, 1.593e-11, 1.828e-11, 2.090e-11, 2.377e-11,
4019  2.691e-11, 3.027e-11, 3.380e-11, 3.740e-11, 4.095e-11,
4020  4.430e-11, 4.743e-11, 5.043e-11, 5.352e-11, 5.687e-11,
4021  6.059e-11, 6.473e-11, 6.903e-11, 7.342e-11, 7.661e-11,
4022  7.866e-11, 7.963e-11, 7.959e-11, 7.862e-11, 7.683e-11,
4023  7.428e-11, 7.108e-11, 6.733e-11, 6.313e-11, 5.862e-11,
4024  5.389e-11, 4.904e-11, 4.412e-11, 3.915e-11, 3.410e-11,
4025  2.889e-11, 2.350e-11, 1.814e-11, 1.303e-11, 8.549e-12,
4026  4.950e-12, 2.450e-12, 1.118e-12, 8.048e-13, 6.484e-13,
4027  5.257e-13, 4.281e-13, 3.496e-13, 2.858e-13, 2.334e-13,
4028  1.900e-13, 1.538e-13, 1.235e-13, 9.783e-14, 7.609e-14,
4029  5.762e-14, 4.193e-14, 2.872e-14, 1.785e-14, 9.478e-15,
4030  6.702e-15, 6.045e-15, 5.502e-15, 5.034e-15, 4.611e-15,
4031  4.219e-15, 3.857e-15, 3.547e-15, 3.268e-15, 3.019e-15,
4032  2.792e-15, 2.574e-15, 2.385e-15, 2.219e-15, 2.060e-15,
4033  1.917e-15, 1.781e-15, 1.660e-15, 1.555e-15, 1.457e-15,
4034  1.358e-15, 1.268e-15, 1.192e-15, 1.117e-15, 1.049e-15,
4035  9.887e-16, 9.283e-16, 8.755e-16, 8.226e-16, 7.774e-16,
4036  7.343e-16, 6.928e-16, 6.551e-16, 6.204e-16, 5.872e-16,
4037  5.562e-16, 5.268e-16, 4.996e-16, 4.740e-16, 4.506e-16,
4038  4.279e-16, 4.060e-16, 3.864e-16, 3.675e-16, 3.502e-16,
4039  3.336e-16, 3.177e-16, 3.026e-16, 2.891e-16, 2.762e-16,
4040  2.634e-16, 2.513e-16, 2.400e-16, 2.302e-16, 2.196e-16,
4041  2.106e-16, 2.015e-16, 1.925e-16, 1.849e-16, 1.766e-16,
4042  1.698e-16, 1.623e-16, 1.562e-16, 1.494e-16, 1.434e-16,
4043  1.381e-16, 1.321e-16, 1.275e-16, 1.223e-16, 1.177e-16,
4044  1.132e-16, 1.087e-16, 1.049e-16, 1.004e-16, 9.660e-17,
4045  9.358e-17, 8.981e-17, 8.679e-17, 8.377e-17, 8.075e-17,
4046  7.774e-17, 7.479e-17, 7.215e-17, 6.966e-17, 6.725e-17,
4047  6.491e-17, 6.264e-17, 6.053e-17, 5.849e-17, 5.653e-17,
4048  5.457e-17, 5.275e-17, 5.102e-17, 4.936e-17, 4.777e-17,
4049  4.619e-17, 4.468e-17, 4.325e-17, 4.189e-17, 4.053e-17,
4050  3.925e-17, 3.804e-17, 3.683e-17, 3.570e-17, 3.457e-17,
4051  3.351e-17, 3.245e-17, 3.147e-17, 3.057e-17, 2.958e-17,
4052  2.875e-17, 2.785e-17, 2.702e-17, 2.626e-17, 2.551e-17,
4053  2.475e-17, 2.400e-17, 2.332e-17, 2.264e-17, 2.196e-17,
4054  2.136e-17, 2.075e-17, 2.015e-17, 1.962e-17, 1.902e-17,
4055  1.849e-17, 1.804e-17, 1.751e-17, 1.706e-17, 1.660e-17,
4056  1.615e-17, 1.570e-17, 1.525e-17, 1.487e-17, 1.442e-17,
4057  1.404e-17, 1.366e-17, 1.336e-17, 1.298e-17, 1.260e-17,
4058  1.230e-17, 1.200e-17, 1.170e-17, 1.140e-17, 1.109e-17,
4059  1.079e-17, 1.057e-17, 1.026e-17, 1.004e-17, 9.736e-18,
4060  9.509e-18, 9.283e-18, 9.057e-18, 8.830e-18, 8.604e-18,
4061  8.377e-18, 8.226e-18, 8.000e-18, 7.774e-18, 7.623e-18,
4062  7.419e-18, 7.245e-18, 7.072e-18, 6.906e-18, 6.740e-18,
4063  6.581e-18, 6.423e-18, 6.279e-18, 6.128e-18, 5.985e-18,
4064  5.849e-18, 5.713e-18, 5.585e-18, 5.457e-18, 5.328e-18,
4065  5.208e-18, 5.087e-18, 4.974e-18, 4.860e-18, 4.755e-18,
4066  4.649e-18, 4.543e-18, 4.445e-18, 4.347e-18, 4.249e-18,
4067  4.158e-18, 4.068e-18, 3.977e-18, 3.887e-18, 3.804e-18,
4068  3.721e-18, 3.645e-18, 3.562e-18, 3.487e-18, 3.411e-18,
4069  3.343e-18, 3.268e-18, 3.200e-18, 3.132e-18, 3.072e-18,
4070  3.004e-18, 2.943e-18, 2.883e-18, 2.823e-18, 2.762e-18,
4071  2.709e-18, 2.649e-18, 2.596e-18, 2.543e-18, 2.491e-18,
4072  2.445e-18, 2.392e-18, 2.347e-18, 2.302e-18, 2.257e-18,
4073  2.211e-18, 2.166e-18, 2.121e-18, 2.083e-18, 2.038e-18,
4074  2.000e-18, 1.962e-18, 1.925e-18, 1.887e-18, 1.849e-18,
4075  1.811e-18, 1.781e-18, 1.743e-18, 1.713e-18, 1.683e-18,
4076  1.645e-18, 1.615e-18, 1.585e-18, 1.555e-18, 1.525e-18,
4077  1.502e-18, 1.472e-18, 1.442e-18, 1.419e-18, 1.389e-18,
4078  1.366e-18, 1.343e-18, 1.321e-18, 1.291e-18, 1.268e-18,
4079  1.245e-18, 1.223e-18, 1.208e-18, 1.185e-18, 1.162e-18,
4080  1.140e-18, 1.125e-18, 1.102e-18, 1.087e-18, 1.064e-18,
4081  1.049e-18, 1.026e-18, 1.011e-18, 9.962e-19, 9.811e-19,
4082  9.585e-19, 9.434e-19, 9.283e-19, 9.132e-19, 8.981e-19,
4083  8.830e-19, 8.679e-19, 8.604e-19, 8.453e-19, 8.302e-19,
4084  8.151e-19, 8.075e-19, 7.925e-19, 7.774e-19, 7.698e-19,
4085  7.547e-19, 7.442e-19, 7.328e-19, 7.215e-19, 7.109e-19,
4086  7.011e-19, 6.906e-19, 6.808e-19, 6.709e-19, 6.611e-19,
4087  6.521e-19, 6.430e-19, 6.340e-19, 6.257e-19, 6.174e-19,
4088  6.091e-19, 6.008e-19, 5.932e-19, 5.857e-19, 5.781e-19,
4089  5.706e-19, 5.638e-19, 5.570e-19, 5.502e-19, 5.442e-19,
4090  5.374e-19, 5.313e-19, 5.253e-19, 5.200e-19, 5.140e-19,
4091  5.087e-19, 5.034e-19, 4.981e-19, 4.936e-19, 4.891e-19,
4092  4.845e-19, 4.800e-19, 4.755e-19, 4.717e-19, 4.679e-19,
4093  4.642e-19, 4.604e-19, 4.566e-19, 4.536e-19, 4.506e-19,
4094  4.475e-19, 4.445e-19, 4.423e-19, 4.400e-19, 4.370e-19,
4095  4.355e-19, 4.332e-19, 4.317e-19, 4.294e-19, 4.287e-19,
4096  4.272e-19, 4.257e-19, 4.249e-19, 4.242e-19, 4.234e-19,
4097  4.234e-19, 4.226e-19, 4.226e-19, 4.226e-19, 4.234e-19,
4098  4.234e-19, 4.242e-19, 4.249e-19, 4.264e-19, 4.272e-19,
4099  4.287e-19, 4.302e-19, 4.325e-19, 4.347e-19, 4.370e-19,
4100  4.392e-19, 4.423e-19, 4.453e-19, 4.483e-19, 4.521e-19,
4101  4.558e-19, 4.596e-19, 4.642e-19, 4.687e-19, 4.732e-19,
4102  4.785e-19, 4.838e-19, 4.898e-19, 4.958e-19, 5.026e-19,
4103  5.094e-19, 5.162e-19, 5.238e-19, 5.313e-19, 5.396e-19,
4104  5.487e-19, 5.577e-19, 5.668e-19, 5.774e-19, 5.872e-19,
4105  5.985e-19, 6.098e-19, 6.219e-19, 6.347e-19, 6.475e-19,
4106  6.611e-19, 6.755e-19, 6.906e-19, 7.064e-19, 7.223e-19,
4107  7.396e-19, 7.547e-19, 7.774e-19, 7.925e-19, 8.151e-19,
4108  8.377e-19, 8.604e-19, 8.830e-19, 9.057e-19, 9.283e-19,
4109  9.585e-19, 9.887e-19, 1.011e-18, 1.042e-18, 1.072e-18,
4110  1.109e-18, 1.140e-18, 1.177e-18, 1.215e-18, 1.253e-18,
4111  1.298e-18, 1.343e-18, 1.389e-18, 1.434e-18, 1.479e-18,
4112  1.532e-18, 1.592e-18, 1.645e-18, 1.706e-18, 1.774e-18,
4113  1.842e-18, 1.909e-18, 1.985e-18, 2.060e-18, 2.143e-18,
4114  2.226e-18, 2.325e-18, 2.423e-18, 2.521e-18, 2.634e-18,
4115  2.747e-18, 2.868e-18, 3.004e-18, 3.132e-18, 3.283e-18,
4116  3.434e-18, 3.600e-18, 3.774e-18, 3.955e-18, 4.151e-18,
4117  4.362e-18, 4.589e-18, 4.823e-18, 5.072e-18, 5.343e-18,
4118  5.638e-18, 5.947e-18, 6.279e-18, 6.634e-18, 7.011e-18,
4119  7.434e-18, 7.925e-18, 8.377e-18, 8.906e-18, 9.434e-18,
4120  1.004e-17, 1.072e-17, 1.147e-17, 1.223e-17, 1.306e-17,
4121  1.404e-17, 1.509e-17, 1.615e-17, 1.736e-17, 1.872e-17,
4122  2.030e-17, 2.204e-17, 2.377e-17, 2.581e-17, 2.815e-17,
4123  3.094e-17, 3.389e-17, 3.706e-17, 4.068e-17, 4.498e-17,
4124  5.042e-17, 5.638e-17, 6.279e-17, 7.019e-17, 7.925e-17,
4125  9.132e-17, 1.049e-16, 1.208e-16, 1.389e-16, 1.592e-16,
4126  1.811e-16, 2.060e-16, 2.340e-16, 2.634e-16, 2.943e-16,
4127  3.260e-16, 3.600e-16, 3.955e-16, 4.309e-16, 1.103e-14,
4128  2.506e-14, 4.104e-14, 5.874e-14, 7.793e-14, 9.821e-14,
4129  1.190e-13, 1.397e-13, 1.596e-13, 1.784e-13, 1.965e-13,
4130  2.147e-13, 2.340e-13, 2.551e-13, 2.783e-13, 3.032e-13,
4131  3.282e-13, 3.517e-13, 3.712e-13, 3.839e-13, 3.902e-13,
4132  3.907e-13, 3.857e-13, 3.758e-13, 3.617e-13, 3.440e-13,
4133  3.234e-13, 3.005e-13, 2.758e-13, 2.500e-13, 2.232e-13,
4134  1.957e-13, 1.672e-13, 1.376e-13, 1.068e-13, 7.534e-14,
4135  4.448e-14, 1.646e-14, 7.117e-16, 6.853e-16, 6.611e-16,
4136  6.423e-16, 6.242e-16, 6.060e-16, 5.925e-16, 5.887e-16,
4137  6.008e-16, 6.279e-16, 6.679e-16, 7.192e-16, 7.849e-16,
4138  8.604e-16, 9.434e-16, 1.237e-14, 2.704e-14, 4.486e-14,
4139  6.621e-14, 9.162e-14, 1.215e-13, 1.567e-13, 1.979e-13,
4140  2.458e-13, 3.012e-13, 3.647e-13, 4.369e-13, 5.184e-13,
4141  6.090e-13, 7.084e-13, 8.155e-13, 9.281e-13, 1.044e-12,
4142  1.160e-12, 1.272e-12, 1.377e-12, 1.480e-12, 1.584e-12,
4143  1.698e-12, 1.828e-12, 1.975e-12, 2.140e-12, 2.312e-12,
4144  2.455e-12, 2.557e-12, 2.620e-12, 2.647e-12, 2.640e-12,
4145  2.602e-12, 2.536e-12, 2.446e-12, 2.334e-12, 2.206e-12,
4146  2.063e-12, 1.911e-12, 1.750e-12, 1.584e-12, 1.413e-12,
4147  1.237e-12, 1.054e-12, 8.642e-13, 6.704e-13, 4.821e-13,
4148  3.093e-13, 1.651e-13, 5.853e-14, 2.657e-15, 2.340e-15,
4149  2.068e-15, 1.849e-15, 1.645e-15, 1.472e-15, 1.321e-15,
4150  1.208e-15, 1.132e-15, 1.094e-15, 1.079e-15, 4.198e-15,
4151  1.473e-14, 2.792e-14, 4.378e-14, 6.256e-14, 8.443e-14,
4152  1.096e-13, 1.382e-13, 1.702e-13, 2.055e-13, 2.437e-13,
4153  2.843e-13, 3.262e-13, 3.682e-13, 4.090e-13, 4.477e-13,
4154  4.847e-13, 5.220e-13, 5.617e-13, 6.059e-13, 6.555e-13,
4155  7.100e-13, 7.681e-13, 8.206e-13, 8.615e-13, 8.884e-13,
4156  9.020e-13, 9.031e-13, 8.928e-13, 8.720e-13, 8.425e-13,
4157  8.051e-13, 7.613e-13, 7.123e-13, 6.594e-13, 6.037e-13,
4158  5.458e-13, 4.862e-13, 4.248e-13, 3.610e-13, 2.945e-13,
4159  2.263e-13, 1.588e-13, 9.623e-14, 4.206e-14, 1.162e-15,
4160  1.064e-15, 9.509e-16, 8.226e-16, 6.913e-16, 5.683e-16,
4161  4.687e-16, 3.955e-16, 3.404e-16, 2.974e-16, 2.619e-16,
4162  2.287e-16, 1.985e-16, 1.758e-16, 1.570e-16, 1.419e-16,
4163  1.268e-16, 1.132e-16, 1.019e-16, 9.283e-17, 8.453e-17,
4164  7.698e-17, 6.966e-17, 6.362e-17, 5.842e-17, 5.381e-17,
4165  4.943e-17, 4.536e-17, 4.189e-17, 3.879e-17, 3.600e-17,
4166  3.336e-17, 3.087e-17, 2.875e-17, 2.679e-17, 2.506e-17,
4167  2.332e-17, 2.181e-17, 2.038e-17, 1.909e-17, 1.796e-17,
4168  1.683e-17, 1.585e-17, 1.487e-17, 1.404e-17, 1.321e-17,
4169  1.245e-17, 1.177e-17, 1.109e-17, 1.049e-17, 9.962e-18,
4170  9.434e-18, 8.906e-18, 8.453e-18, 8.000e-18, 7.623e-18,
4171  7.238e-18, 6.875e-18, 6.543e-18, 6.226e-18, 5.932e-18,
4172  5.653e-18, 5.381e-18, 5.132e-18, 4.898e-18, 4.679e-18,
4173  4.468e-18, 4.272e-18, 4.083e-18, 3.902e-18, 3.736e-18,
4174  3.577e-18, 3.426e-18, 3.283e-18, 3.147e-18, 3.019e-18,
4175  2.891e-18, 2.777e-18, 2.664e-18, 2.558e-18, 2.460e-18,
4176  2.362e-18, 2.272e-18, 2.181e-18, 2.098e-18, 2.023e-18,
4177  1.947e-18, 1.872e-18, 1.804e-18, 1.736e-18, 1.675e-18,
4178  1.615e-18, 1.555e-18, 1.502e-18, 1.449e-18, 1.396e-18,
4179  1.351e-18, 1.298e-18, 1.253e-18, 1.215e-18, 1.170e-18,
4180  1.132e-18, 1.094e-18, 1.057e-18, 1.026e-18, 9.887e-19,
4181  9.585e-19, 9.283e-19, 8.981e-19, 8.679e-19, 8.377e-19,
4182  8.151e-19, 7.849e-19, 7.623e-19, 7.396e-19, 7.162e-19,
4183  6.943e-19, 6.732e-19, 6.528e-19, 6.332e-19, 6.143e-19,
4184  5.955e-19, 5.781e-19, 5.608e-19, 5.442e-19, 5.283e-19,
4185  5.132e-19, 4.981e-19, 4.838e-19, 4.702e-19, 4.566e-19,
4186  4.438e-19, 4.309e-19, 4.189e-19, 4.075e-19, 3.962e-19,
4187  3.849e-19, 3.743e-19, 3.645e-19, 3.547e-19, 3.449e-19,
4188  3.358e-19, 3.268e-19, 3.177e-19, 3.094e-19, 3.011e-19,
4189  2.936e-19, 2.853e-19, 2.785e-19, 2.709e-19, 2.642e-19,
4190  2.574e-19, 2.506e-19, 2.438e-19, 2.377e-19, 2.317e-19,
4191  2.257e-19, 2.204e-19, 2.151e-19, 2.098e-19, 2.045e-19,
4192  1.992e-19, 1.970e-19, 1.970e-19, 1.962e-19, 1.902e-19,
4193  1.887e-19};
4194 
4195 // CKD_MT 1.00 implementation of N2-N2 model of
4196 // Borysow, A, and L. Frommhold,
4197 // "Collision-induced rototranslational absorption spectra of N2-N2
4198 // pairs for temperatures from 50 to 300 K", The
4199 // Astrophysical Journal, 311, 1043-1057, 1986.
4200 // absorption coefficient in units of [cm^-1 Amagat^-2]
4201 // these data are for T=296K
4207  0.0000e0,
4208  0.4303E-06, 0.4850E-06, 0.4979E-06, 0.4850E-06, 0.4303E-06,
4209  0.3715E-06, 0.3292E-06, 0.3086E-06, 0.2920E-06, 0.2813E-06,
4210  0.2804E-06, 0.2738E-06, 0.2726E-06, 0.2724E-06, 0.2635E-06,
4211  0.2621E-06, 0.2547E-06, 0.2428E-06, 0.2371E-06, 0.2228E-06,
4212  0.2100E-06, 0.1991E-06, 0.1822E-06, 0.1697E-06, 0.1555E-06,
4213  0.1398E-06, 0.1281E-06, 0.1138E-06, 0.1012E-06, 0.9078E-07,
4214  0.7879E-07, 0.6944E-07, 0.6084E-07, 0.5207E-07, 0.4540E-07,
4215  0.3897E-07, 0.3313E-07, 0.2852E-07, 0.2413E-07, 0.2045E-07,
4216  0.1737E-07, 0.1458E-07, 0.1231E-07, 0.1031E-07, 0.8586E-08,
4217  0.7162E-08, 0.5963E-08, 0.4999E-08, 0.4226E-08, 0.3607E-08,
4218  0.3090E-08, 0.2669E-08, 0.2325E-08, 0.2024E-08, 0.1783E-08,
4219  0.1574E-08, 0.1387E-08, 0.1236E-08, 0.1098E-08, 0.9777E-09,
4220  0.8765E-09, 0.7833E-09, 0.7022E-09, 0.6317E-09, 0.5650E-09,
4221  0.5100E-09, 0.4572E-09, 0.4115E-09, 0.3721E-09, 0.3339E-09,
4222  0.3005E-09, 0.2715E-09, 0.2428E-09};
4223 
4225  0.0e0,
4226  1.3534, 1.3517, 1.3508, 1.3517, 1.3534,
4227  1.3558, 1.3584, 1.3607, 1.3623, 1.3632,
4228  1.3634, 1.3632, 1.3627, 1.3620, 1.3612,
4229  1.3605, 1.3597, 1.3590, 1.3585, 1.3582,
4230  1.3579, 1.3577, 1.3577, 1.3580, 1.3586,
4231  1.3594, 1.3604, 1.3617, 1.3633, 1.3653,
4232  1.3677, 1.3706, 1.3742, 1.3780, 1.3822,
4233  1.3868, 1.3923, 1.3989, 1.4062, 1.4138,
4234  1.4216, 1.4298, 1.4388, 1.4491, 1.4604,
4235  1.4718, 1.4829, 1.4930, 1.5028, 1.5138,
4236  1.5265, 1.5392, 1.5499, 1.5577, 1.5639,
4237  1.5714, 1.5816, 1.5920, 1.6003, 1.6051,
4238  1.6072, 1.6097, 1.6157, 1.6157, 1.6157,
4239  1.6157, 1.6157, 1.6157, 1.6157, 1.6157,
4240  1.6157, 1.6157, 1.6157};
4241 
4242 // CKD_MT 1.00 implementation of N2-N2 model of
4243 // Borysow, A, and L. Frommhold,
4244 // "Collision-induced rototranslational absorption spectra of N2-N2
4245 // pairs for temperatures from 50 to 300 K", The
4246 // Astrophysical Journal, 311, 1043-1057, 1986.
4247 // absorption coefficient in units of [cm^-1 Amagat^-2]
4248 // these data are for T=220K
4254  0.0000e0,
4255  0.4946E-06, 0.5756E-06, 0.5964E-06, 0.5756E-06, 0.4946E-06,
4256  0.4145E-06, 0.3641E-06, 0.3482E-06, 0.3340E-06, 0.3252E-06,
4257  0.3299E-06, 0.3206E-06, 0.3184E-06, 0.3167E-06, 0.2994E-06,
4258  0.2943E-06, 0.2794E-06, 0.2582E-06, 0.2468E-06, 0.2237E-06,
4259  0.2038E-06, 0.1873E-06, 0.1641E-06, 0.1474E-06, 0.1297E-06,
4260  0.1114E-06, 0.9813E-07, 0.8309E-07, 0.7059E-07, 0.6068E-07,
4261  0.5008E-07, 0.4221E-07, 0.3537E-07, 0.2885E-07, 0.2407E-07,
4262  0.1977E-07, 0.1605E-07, 0.1313E-07, 0.1057E-07, 0.8482E-08,
4263  0.6844E-08, 0.5595E-08, 0.4616E-08, 0.3854E-08, 0.3257E-08,
4264  0.2757E-08, 0.2372E-08, 0.2039E-08, 0.1767E-08, 0.1548E-08,
4265  0.1346E-08, 0.1181E-08, 0.1043E-08, 0.9110E-09, 0.8103E-09,
4266  0.7189E-09, 0.6314E-09, 0.5635E-09, 0.4976E-09, 0.4401E-09,
4267  0.3926E-09, 0.3477E-09, 0.3085E-09, 0.2745E-09, 0.2416E-09,
4268  0.2155E-09, 0.1895E-09, 0.1678E-09, 0.1493E-09, 0.1310E-09,
4269  0.1154E-09, 0.1019E-09, 0.8855E-10};
4270 
4272  0.0e0,
4273  1.3536, 1.3515, 1.3502, 1.3515, 1.3536,
4274  1.3565, 1.3592, 1.3612, 1.3623, 1.3626,
4275  1.3623, 1.3616, 1.3609, 1.3600, 1.3591,
4276  1.3583, 1.3576, 1.3571, 1.3571, 1.3572,
4277  1.3574, 1.3578, 1.3585, 1.3597, 1.3616,
4278  1.3640, 1.3666, 1.3698, 1.3734, 1.3776,
4279  1.3828, 1.3894, 1.3969, 1.4049, 1.4127,
4280  1.4204, 1.4302, 1.4427, 1.4562, 1.4687,
4281  1.4798, 1.4894, 1.5000, 1.5142, 1.5299,
4282  1.5441, 1.5555, 1.5615, 1.5645, 1.5730,
4283  1.5880, 1.6028, 1.6121, 1.6133, 1.6094,
4284  1.6117, 1.6244, 1.6389, 1.6485, 1.6513,
4285  1.6468, 1.6438, 1.6523, 1.6523, 1.6523,
4286  1.6523, 1.6523, 1.6523, 1.6523, 1.6523,
4287  1.6523, 1.6523, 1.6523};
4288 
4289 // CKD_MT 1.00 implementation of N2-N2 model of
4290 // Lafferty, W.J., A.M. Solodov,A. Weber, W.B. Olson and J._M. Hartmann,
4291 // Infrared collision-induced absorption by N2 near 4.3 microns for
4292 // atmospheric applications: measurements and emprirical modeling,
4293 // Appl. Optics, 35, 5911-5917, (1996).
4297 const int N2N2_N2F_ckd_mt_100_npt = 118;
4299  0.000E+00,
4300  0.000E+00, 2.000E-10, 5.200E-09, 1.020E-08, 1.520E-08,
4301  2.020E-08, 2.520E-08, 3.020E-08, 4.450E-08, 5.220E-08,
4302  6.460E-08, 7.750E-08, 9.030E-08, 1.060E-07, 1.210E-07,
4303  1.370E-07, 1.570E-07, 1.750E-07, 2.010E-07, 2.300E-07,
4304  2.590E-07, 2.950E-07, 3.260E-07, 3.660E-07, 4.050E-07,
4305  4.470E-07, 4.920E-07, 5.340E-07, 5.840E-07, 6.240E-07,
4306  6.670E-07, 7.140E-07, 7.260E-07, 7.540E-07, 7.840E-07,
4307  8.090E-07, 8.420E-07, 8.620E-07, 8.870E-07, 9.110E-07,
4308  9.360E-07, 9.760E-07, 1.030E-06, 1.110E-06, 1.230E-06,
4309  1.390E-06, 1.610E-06, 1.760E-06, 1.940E-06, 1.970E-06,
4310  1.870E-06, 1.750E-06, 1.560E-06, 1.420E-06, 1.350E-06,
4311  1.320E-06, 1.290E-06, 1.290E-06, 1.290E-06, 1.300E-06,
4312  1.320E-06, 1.330E-06, 1.340E-06, 1.350E-06, 1.330E-06,
4313  1.310E-06, 1.290E-06, 1.240E-06, 1.200E-06, 1.160E-06,
4314  1.100E-06, 1.040E-06, 9.960E-07, 9.380E-07, 8.630E-07,
4315  7.980E-07, 7.260E-07, 6.550E-07, 5.940E-07, 5.350E-07,
4316  4.740E-07, 4.240E-07, 3.770E-07, 3.330E-07, 2.960E-07,
4317  2.630E-07, 2.340E-07, 2.080E-07, 1.850E-07, 1.670E-07,
4318  1.470E-07, 1.320E-07, 1.200E-07, 1.090E-07, 9.850E-08,
4319  9.080E-08, 8.180E-08, 7.560E-08, 6.850E-08, 6.140E-08,
4320  5.830E-08, 5.770E-08, 5.000E-08, 4.320E-08, 3.140E-08,
4321  2.890E-08, 2.640E-08, 2.390E-08, 2.140E-08, 1.890E-08,
4322  1.640E-08, 1.390E-08, 1.140E-08, 8.900E-09, 6.400E-09,
4323  3.900E-09, 1.400E-09, 0.000E+00};
4324 
4325 // temperature coefficients:
4327  0.000E+00,
4328  1.040E+03, 1.010E+03, 9.800E+02, 9.500E+02, 9.200E+02,
4329  8.900E+02, 8.600E+02, 8.300E+02, 8.020E+02, 7.610E+02,
4330  7.220E+02, 6.790E+02, 6.460E+02, 6.090E+02, 5.620E+02,
4331  5.110E+02, 4.720E+02, 4.360E+02, 4.060E+02, 3.770E+02,
4332  3.550E+02, 3.380E+02, 3.190E+02, 2.990E+02, 2.780E+02,
4333  2.550E+02, 2.330E+02, 2.080E+02, 1.840E+02, 1.490E+02,
4334  1.070E+02, 6.600E+01, 2.500E+01, -1.300E+01, -4.900E+01,
4335  -8.200E+01, -1.040E+02, -1.190E+02, -1.300E+02, -1.390E+02,
4336  -1.440E+02, -1.460E+02, -1.460E+02, -1.470E+02, -1.480E+02,
4337  -1.500E+02, -1.530E+02, -1.600E+02, -1.690E+02, -1.810E+02,
4338  -1.890E+02, -1.950E+02, -2.000E+02, -2.050E+02, -2.090E+02,
4339  -2.110E+02, -2.100E+02, -2.100E+02, -2.090E+02, -2.050E+02,
4340  -1.990E+02, -1.900E+02, -1.800E+02, -1.680E+02, -1.570E+02,
4341  -1.430E+02, -1.260E+02, -1.080E+02, -8.900E+01, -6.300E+01,
4342  -3.200E+01, 1.000E+00, 3.500E+01, 6.500E+01, 9.500E+01,
4343  1.210E+02, 1.410E+02, 1.520E+02, 1.610E+02, 1.640E+02,
4344  1.640E+02, 1.610E+02, 1.550E+02, 1.480E+02, 1.430E+02,
4345  1.370E+02, 1.330E+02, 1.310E+02, 1.330E+02, 1.390E+02,
4346  1.500E+02, 1.650E+02, 1.870E+02, 2.130E+02, 2.480E+02,
4347  2.840E+02, 3.210E+02, 3.720E+02, 4.490E+02, 5.140E+02,
4348  5.690E+02, 6.090E+02, 6.420E+02, 6.730E+02, 7.000E+02,
4349  7.300E+02, 7.600E+02, 7.900E+02, 8.200E+02, 8.500E+02,
4350  8.800E+02, 9.100E+02, 9.400E+02, 9.700E+02, 1.000E+03,
4351  1.030E+03, 1.060E+03, 1.090E+03};
4352 
4353 // CKD_MT 2.50 implementation of N2-N2 model of
4354 // Lafferty, W.J., A.M. Solodov,A. Weber, W.B. Olson and J._M. Hartmann,
4355 // Infrared collision-induced absorption by N2 near 4.3 microns for
4356 // atmospheric applications: measurements and emprirical modeling,
4357 // Appl. Optics, 35, 5911-5917, (1996).
4358 const Numeric N2N2_N2F_ckd_mt_250_v1 = 2001.766357;
4359 const Numeric N2N2_N2F_ckd_mt_250_v2 = 2710.466309;
4360 const Numeric N2N2_N2F_ckd_mt_250_dv = 3.981461525;
4361 const int N2N2_N2F_ckd_mt_250_npt = 179;
4363  0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00,
4364  0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00,
4365  0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00, 9.280E-11,
4366  3.660E-10, 8.130E-10, 1.430E-09, 2.230E-09, 3.210E-09,
4367  4.370E-09, 5.750E-09, 7.340E-09, 9.190E-09, 1.130E-08,
4368  1.370E-08, 1.650E-08, 1.960E-08, 2.310E-08, 2.710E-08,
4369  3.160E-08, 3.660E-08, 4.230E-08, 4.860E-08, 5.570E-08,
4370  6.350E-08, 7.230E-08, 8.200E-08, 9.270E-08, 1.050E-07,
4371  1.180E-07, 1.320E-07, 1.480E-07, 1.650E-07, 1.840E-07,
4372  2.040E-07, 2.270E-07, 2.510E-07, 2.770E-07, 3.060E-07,
4373  3.360E-07, 3.670E-07, 4.010E-07, 4.330E-07, 4.710E-07,
4374  5.050E-07, 5.450E-07, 5.790E-07, 6.200E-07, 6.540E-07,
4375  6.940E-07, 7.240E-07, 7.610E-07, 7.880E-07, 8.220E-07,
4376  8.440E-07, 8.720E-07, 8.930E-07, 9.190E-07, 9.370E-07,
4377  9.620E-07, 9.870E-07, 1.020E-06, 1.060E-06, 1.110E-06,
4378  1.180E-06, 1.280E-06, 1.400E-06, 1.570E-06, 1.750E-06,
4379  1.880E-06, 2.020E-06, 2.080E-06, 2.060E-06, 1.960E-06,
4380  1.860E-06, 1.710E-06, 1.570E-06, 1.490E-06, 1.440E-06,
4381  1.410E-06, 1.390E-06, 1.380E-06, 1.380E-06, 1.390E-06,
4382  1.390E-06, 1.410E-06, 1.420E-06, 1.430E-06, 1.420E-06,
4383  1.430E-06, 1.410E-06, 1.400E-06, 1.370E-06, 1.350E-06,
4384  1.310E-06, 1.270E-06, 1.220E-06, 1.170E-06, 1.120E-06,
4385  1.060E-06, 1.010E-06, 9.470E-07, 8.910E-07, 8.290E-07,
4386  7.740E-07, 7.160E-07, 6.620E-07, 6.090E-07, 5.600E-07,
4387  5.130E-07, 4.680E-07, 4.290E-07, 3.900E-07, 3.560E-07,
4388  3.240E-07, 2.950E-07, 2.680E-07, 2.440E-07, 2.230E-07,
4389  2.030E-07, 1.850E-07, 1.690E-07, 1.540E-07, 1.410E-07,
4390  1.290E-07, 1.180E-07, 1.080E-07, 9.950E-08, 9.100E-08,
4391  8.380E-08, 7.700E-08, 7.100E-08, 6.510E-08, 6.010E-08,
4392  5.550E-08, 5.110E-08, 4.710E-08, 4.340E-08, 3.980E-08,
4393  3.660E-08, 3.380E-08, 3.110E-08, 2.840E-08, 2.610E-08,
4394  2.390E-08, 2.210E-08, 2.010E-08, 1.830E-08, 1.710E-08,
4395  1.550E-08, 1.450E-08, 1.320E-08, 1.250E-08, 1.140E-08,
4396  1.070E-08, 1.000E-08, 8.100E-09, 6.400E-09, 4.900E-09,
4397  3.600E-09, 2.500E-09, 1.600E-09, 9.000E-10, 4.000E-10,
4398  1.000E-10, 0.000E+00, 0.000E+00, 0.000E+00};
4399 
4400 // temperature coefficients:
4402  0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00,
4403  0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00,
4404  0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00, 1.880E-10,
4405  7.160E-10, 1.530E-09, 2.580E-09, 3.840E-09, 5.270E-09,
4406  6.850E-09, 8.550E-09, 1.040E-08, 1.230E-08, 1.440E-08,
4407  1.650E-08, 1.880E-08, 2.130E-08, 2.400E-08, 2.690E-08,
4408  3.010E-08, 3.360E-08, 3.750E-08, 4.180E-08, 4.670E-08,
4409  5.210E-08, 5.830E-08, 6.520E-08, 7.290E-08, 8.170E-08,
4410  9.150E-08, 1.030E-07, 1.150E-07, 1.290E-07, 1.440E-07,
4411  1.610E-07, 1.800E-07, 2.020E-07, 2.250E-07, 2.510E-07,
4412  2.790E-07, 3.090E-07, 3.430E-07, 3.770E-07, 4.160E-07,
4413  4.540E-07, 4.990E-07, 5.370E-07, 5.850E-07, 6.250E-07,
4414  6.750E-07, 7.130E-07, 7.610E-07, 7.970E-07, 8.410E-07,
4415  8.720E-07, 9.100E-07, 9.380E-07, 9.720E-07, 9.940E-07,
4416  1.020E-06, 1.050E-06, 1.080E-06, 1.120E-06, 1.170E-06,
4417  1.240E-06, 1.340E-06, 1.470E-06, 1.660E-06, 1.870E-06,
4418  2.040E-06, 2.220E-06, 2.300E-06, 2.290E-06, 2.160E-06,
4419  2.050E-06, 1.870E-06, 1.710E-06, 1.620E-06, 1.580E-06,
4420  1.550E-06, 1.540E-06, 1.540E-06, 1.550E-06, 1.560E-06,
4421  1.570E-06, 1.590E-06, 1.590E-06, 1.600E-06, 1.580E-06,
4422  1.570E-06, 1.540E-06, 1.510E-06, 1.470E-06, 1.430E-06,
4423  1.370E-06, 1.310E-06, 1.250E-06, 1.180E-06, 1.110E-06,
4424  1.040E-06, 9.740E-07, 9.020E-07, 8.360E-07, 7.650E-07,
4425  7.050E-07, 6.430E-07, 5.860E-07, 5.320E-07, 4.820E-07,
4426  4.370E-07, 3.950E-07, 3.570E-07, 3.220E-07, 2.910E-07,
4427  2.630E-07, 2.390E-07, 2.160E-07, 1.960E-07, 1.780E-07,
4428  1.620E-07, 1.480E-07, 1.330E-07, 1.220E-07, 1.120E-07,
4429  1.020E-07, 9.280E-08, 8.420E-08, 7.700E-08, 6.990E-08,
4430  6.390E-08, 5.880E-08, 5.380E-08, 4.840E-08, 4.380E-08,
4431  4.020E-08, 3.690E-08, 3.290E-08, 3.050E-08, 2.720E-08,
4432  2.490E-08, 2.260E-08, 2.020E-08, 1.810E-08, 1.620E-08,
4433  1.500E-08, 1.310E-08, 1.100E-08, 1.020E-08, 8.730E-09,
4434  8.190E-09, 6.630E-09, 5.960E-09, 5.110E-09, 4.500E-09,
4435  3.810E-09, 2.680E-09, 3.050E-09, 2.480E-09, 1.370E-09,
4436  1.550E-09, 4.690E-10, 5.120E-10, 0.000E+00, 0.000E+00,
4437  0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00};
4438 
4439 
4440 // CKD_MT 1.00 implementation of oxygen collision induced fundamental model of
4441 // F. Thibault, V. Menoux, R. Le Doucen, L. Rosenman,
4442 // J.-M. Hartmann, Ch. Boulet,
4443 // "Infrared collision-induced absorption by O2 near 6.4 microns for
4444 // atmospheric applications: measurements and emprirical modeling",
4445 // Appl. Optics, 35, 5911-5917, (1996).
4449 const int O2O2_O2F_ckd_mt_100_npt = 103;
4451  0.000E+00,
4452  0.000E+00, 9.744E-09, 2.256E-08, 3.538E-08, 4.820E-08,
4453  6.100E-08, 7.400E-08, 8.400E-08, 9.600E-08, 1.200E-07,
4454  1.620E-07, 2.080E-07, 2.460E-07, 2.850E-07, 3.140E-07,
4455  3.800E-07, 4.440E-07, 5.000E-07, 5.710E-07, 6.730E-07,
4456  7.680E-07, 8.530E-07, 9.660E-07, 1.100E-06, 1.210E-06,
4457  1.330E-06, 1.470E-06, 1.590E-06, 1.690E-06, 1.800E-06,
4458  1.920E-06, 2.040E-06, 2.150E-06, 2.260E-06, 2.370E-06,
4459  2.510E-06, 2.670E-06, 2.850E-06, 3.070E-06, 3.420E-06,
4460  3.830E-06, 4.200E-06, 4.450E-06, 4.600E-06, 4.530E-06,
4461  4.280E-06, 3.960E-06, 3.680E-06, 3.480E-06, 3.350E-06,
4462  3.290E-06, 3.250E-06, 3.230E-06, 3.230E-06, 3.210E-06,
4463  3.190E-06, 3.110E-06, 3.030E-06, 2.910E-06, 2.800E-06,
4464  2.650E-06, 2.510E-06, 2.320E-06, 2.130E-06, 1.930E-06,
4465  1.760E-06, 1.590E-06, 1.420E-06, 1.250E-06, 1.110E-06,
4466  9.900E-07, 8.880E-07, 7.910E-07, 6.780E-07, 5.870E-07,
4467  5.240E-07, 4.640E-07, 4.030E-07, 3.570E-07, 3.200E-07,
4468  2.900E-07, 2.670E-07, 2.420E-07, 2.150E-07, 1.820E-07,
4469  1.600E-07, 1.460E-07, 1.280E-07, 1.030E-07, 8.700E-08,
4470  8.100E-08, 7.100E-08, 6.400E-08, 5.807E-08, 5.139E-08,
4471  4.496E-08, 3.854E-08, 3.212E-08, 2.569E-08, 1.927E-08,
4472  1.285E-08, 6.423E-09, 0.000E+00};
4473 
4475  0.000E+00,
4476  4.000E+02, 4.000E+02, 4.000E+02, 4.000E+02, 4.000E+02,
4477  4.670E+02, 4.000E+02, 3.150E+02, 3.790E+02, 3.680E+02,
4478  4.750E+02, 5.210E+02, 5.310E+02, 5.120E+02, 4.420E+02,
4479  4.440E+02, 4.300E+02, 3.810E+02, 3.350E+02, 3.240E+02,
4480  2.960E+02, 2.480E+02, 2.150E+02, 1.930E+02, 1.580E+02,
4481  1.270E+02, 1.010E+02, 7.100E+01, 3.100E+01, -6.000E+00,
4482  -2.600E+01, -4.700E+01, -6.300E+01, -7.900E+01, -8.800E+01,
4483  -8.800E+01, -8.700E+01, -9.000E+01, -9.800E+01, -9.900E+01,
4484  -1.090E+02, -1.340E+02, -1.600E+02, -1.670E+02, -1.640E+02,
4485  -1.580E+02, -1.530E+02, -1.510E+02, -1.560E+02, -1.660E+02,
4486  -1.680E+02, -1.730E+02, -1.700E+02, -1.610E+02, -1.450E+02,
4487  -1.260E+02, -1.080E+02, -8.400E+01, -5.900E+01, -2.900E+01,
4488  4.000E+00, 4.100E+01, 7.300E+01, 9.700E+01, 1.230E+02,
4489  1.590E+02, 1.980E+02, 2.200E+02, 2.420E+02, 2.560E+02,
4490  2.810E+02, 3.110E+02, 3.340E+02, 3.190E+02, 3.130E+02,
4491  3.210E+02, 3.230E+02, 3.100E+02, 3.150E+02, 3.200E+02,
4492  3.350E+02, 3.610E+02, 3.780E+02, 3.730E+02, 3.380E+02,
4493  3.190E+02, 3.460E+02, 3.220E+02, 2.910E+02, 2.900E+02,
4494  3.500E+02, 3.710E+02, 5.040E+02, 4.000E+02, 4.000E+02,
4495  4.000E+02, 4.000E+02, 4.000E+02, 4.000E+02, 4.000E+02,
4496  4.000E+02, 4.000E+02, 4.000E+02};
4497 
4498 
4499 
4500 // CKD_MT 1.00 implementation of oxygen v0<-v0 band model of
4501 // Mate et al. over the spectral region 7550-8486 cm-1:
4502 // B. Mate, C. Lugez, G.T. Fraser, W.J. Lafferty,
4503 // "Absolute Intensities for the O2 1.27 micron
4504 // continuum absorption",
4505 // J. Geophys. Res., 104, 30,585-30,590, 1999.
4506 //
4507 // The units of these continua coefficients are 1 / (amagat_O2*amagat_air)
4508 //
4509 // Also, refer to the paper "Observed Atmospheric
4510 // Collision Induced Absorption in Near Infrared Oxygen Bands",
4511 // Mlawer, Clough, Brown, Stephen, Landry, Goldman, & Murcray,
4512 // Journal of Geophysical Research (1998).
4513 //
4514 // (comment: v0<--v0 band around 7536 to 8500 cm-1 (1.27mu))
4515 const Numeric O2_00_ckd_mt_100_v1 = 7536.000e0;
4516 const Numeric O2_00_ckd_mt_100_v2 = 8500.000e0;
4518 const int O2_00_ckd_mt_100_npt = 483;
4520  0.000E+00,
4521  0.000E+00, 4.355E-11, 8.709E-11, 1.742E-10, 3.484E-10,
4522  6.968E-10, 1.394E-09, 2.787E-09, 3.561E-09, 3.314E-09,
4523  3.368E-09, 3.435E-09, 2.855E-09, 3.244E-09, 3.447E-09,
4524  3.891E-09, 4.355E-09, 3.709E-09, 4.265E-09, 4.772E-09,
4525  4.541E-09, 4.557E-09, 4.915E-09, 4.688E-09, 5.282E-09,
4526  5.755E-09, 5.096E-09, 5.027E-09, 4.860E-09, 4.724E-09,
4527  5.048E-09, 5.248E-09, 5.473E-09, 4.852E-09, 5.362E-09,
4528  6.157E-09, 6.150E-09, 6.347E-09, 6.388E-09, 6.213E-09,
4529  6.521E-09, 8.470E-09, 8.236E-09, 8.269E-09, 8.776E-09,
4530  9.122E-09, 9.189E-09, 9.778E-09, 8.433E-09, 9.964E-09,
4531  9.827E-09, 1.064E-08, 1.063E-08, 1.031E-08, 1.098E-08,
4532  1.156E-08, 1.295E-08, 1.326E-08, 1.467E-08, 1.427E-08,
4533  1.452E-08, 1.456E-08, 1.554E-08, 1.605E-08, 1.659E-08,
4534  1.754E-08, 1.757E-08, 1.876E-08, 1.903E-08, 1.876E-08,
4535  1.869E-08, 2.036E-08, 2.203E-08, 2.221E-08, 2.284E-08,
4536  2.288E-08, 2.394E-08, 2.509E-08, 2.663E-08, 2.720E-08,
4537  2.839E-08, 2.923E-08, 2.893E-08, 2.949E-08, 2.962E-08,
4538  3.057E-08, 3.056E-08, 3.364E-08, 3.563E-08, 3.743E-08,
4539  3.813E-08, 3.946E-08, 4.082E-08, 4.201E-08, 4.297E-08,
4540  4.528E-08, 4.587E-08, 4.704E-08, 4.962E-08, 5.115E-08,
4541  5.341E-08, 5.365E-08, 5.557E-08, 5.891E-08, 6.084E-08,
4542  6.270E-08, 6.448E-08, 6.622E-08, 6.939E-08, 7.233E-08,
4543  7.498E-08, 7.749E-08, 8.027E-08, 8.387E-08, 8.605E-08,
4544  8.888E-08, 9.277E-08, 9.523E-08, 9.880E-08, 1.037E-07,
4545  1.076E-07, 1.114E-07, 1.151E-07, 1.203E-07, 1.246E-07,
4546  1.285E-07, 1.345E-07, 1.408E-07, 1.465E-07, 1.519E-07,
4547  1.578E-07, 1.628E-07, 1.685E-07, 1.760E-07, 1.847E-07,
4548  1.929E-07, 2.002E-07, 2.070E-07, 2.177E-07, 2.262E-07,
4549  2.365E-07, 2.482E-07, 2.587E-07, 2.655E-07, 2.789E-07,
4550  2.925E-07, 3.023E-07, 3.153E-07, 3.296E-07, 3.409E-07,
4551  3.532E-07, 3.680E-07, 3.859E-07, 3.951E-07, 4.074E-07,
4552  4.210E-07, 4.381E-07, 4.588E-07, 4.792E-07, 4.958E-07,
4553  5.104E-07, 5.271E-07, 5.501E-07, 5.674E-07, 5.913E-07,
4554  6.243E-07, 6.471E-07, 6.622E-07, 6.831E-07, 6.987E-07,
4555  7.159E-07, 7.412E-07, 7.698E-07, 7.599E-07, 7.600E-07,
4556  7.918E-07, 8.026E-07, 8.051E-07, 8.049E-07, 7.914E-07,
4557  7.968E-07, 7.945E-07, 7.861E-07, 7.864E-07, 7.741E-07,
4558  7.675E-07, 7.592E-07, 7.400E-07, 7.362E-07, 7.285E-07,
4559  7.173E-07, 6.966E-07, 6.744E-07, 6.597E-07, 6.413E-07,
4560  6.265E-07, 6.110E-07, 5.929E-07, 5.717E-07, 5.592E-07,
4561  5.411E-07, 5.235E-07, 5.061E-07, 4.845E-07, 4.732E-07,
4562  4.593E-07, 4.467E-07, 4.328E-07, 4.161E-07, 4.035E-07,
4563  3.922E-07, 3.820E-07, 3.707E-07, 3.585E-07, 3.475E-07,
4564  3.407E-07, 3.317E-07, 3.226E-07, 3.134E-07, 3.016E-07,
4565  2.969E-07, 2.894E-07, 2.814E-07, 2.749E-07, 2.657E-07,
4566  2.610E-07, 2.536E-07, 2.467E-07, 2.394E-07, 2.337E-07,
4567  2.302E-07, 2.241E-07, 2.191E-07, 2.140E-07, 2.093E-07,
4568  2.052E-07, 1.998E-07, 1.963E-07, 1.920E-07, 1.862E-07,
4569  1.834E-07, 1.795E-07, 1.745E-07, 1.723E-07, 1.686E-07,
4570  1.658E-07, 1.629E-07, 1.595E-07, 1.558E-07, 1.523E-07,
4571  1.498E-07, 1.466E-07, 1.452E-07, 1.431E-07, 1.408E-07,
4572  1.381E-07, 1.362E-07, 1.320E-07, 1.298E-07, 1.262E-07,
4573  1.247E-07, 1.234E-07, 1.221E-07, 1.197E-07, 1.176E-07,
4574  1.142E-07, 1.121E-07, 1.099E-07, 1.081E-07, 1.073E-07,
4575  1.061E-07, 1.041E-07, 1.019E-07, 9.969E-08, 9.727E-08,
4576  9.642E-08, 9.487E-08, 9.318E-08, 9.116E-08, 9.046E-08,
4577  8.827E-08, 8.689E-08, 8.433E-08, 8.324E-08, 8.204E-08,
4578  8.036E-08, 7.951E-08, 7.804E-08, 7.524E-08, 7.392E-08,
4579  7.227E-08, 7.176E-08, 6.975E-08, 6.914E-08, 6.859E-08,
4580  6.664E-08, 6.506E-08, 6.368E-08, 6.262E-08, 6.026E-08,
4581  6.002E-08, 5.866E-08, 5.867E-08, 5.641E-08, 5.589E-08,
4582  5.499E-08, 5.309E-08, 5.188E-08, 5.139E-08, 4.991E-08,
4583  4.951E-08, 4.833E-08, 4.640E-08, 4.524E-08, 4.479E-08,
4584  4.304E-08, 4.228E-08, 4.251E-08, 4.130E-08, 3.984E-08,
4585  3.894E-08, 3.815E-08, 3.732E-08, 3.664E-08, 3.512E-08,
4586  3.463E-08, 3.503E-08, 3.218E-08, 3.253E-08, 3.107E-08,
4587  2.964E-08, 2.920E-08, 2.888E-08, 2.981E-08, 2.830E-08,
4588  2.750E-08, 2.580E-08, 2.528E-08, 2.444E-08, 2.378E-08,
4589  2.413E-08, 2.234E-08, 2.316E-08, 2.199E-08, 2.088E-08,
4590  1.998E-08, 1.920E-08, 1.942E-08, 1.859E-08, 1.954E-08,
4591  1.955E-08, 1.749E-08, 1.720E-08, 1.702E-08, 1.521E-08,
4592  1.589E-08, 1.469E-08, 1.471E-08, 1.543E-08, 1.433E-08,
4593  1.298E-08, 1.274E-08, 1.226E-08, 1.204E-08, 1.201E-08,
4594  1.298E-08, 1.220E-08, 1.220E-08, 1.096E-08, 1.080E-08,
4595  9.868E-09, 9.701E-09, 1.130E-08, 9.874E-09, 9.754E-09,
4596  9.651E-09, 9.725E-09, 8.413E-09, 7.705E-09, 7.846E-09,
4597  8.037E-09, 9.163E-09, 8.098E-09, 8.160E-09, 7.511E-09,
4598  7.011E-09, 6.281E-09, 6.502E-09, 7.323E-09, 7.569E-09,
4599  5.941E-09, 5.867E-09, 5.676E-09, 4.840E-09, 5.063E-09,
4600  5.207E-09, 4.917E-09, 5.033E-09, 5.356E-09, 3.795E-09,
4601  4.983E-09, 4.600E-09, 3.635E-09, 3.099E-09, 2.502E-09,
4602  3.823E-09, 3.464E-09, 4.332E-09, 3.612E-09, 3.682E-09,
4603  3.709E-09, 3.043E-09, 3.593E-09, 3.995E-09, 4.460E-09,
4604  3.583E-09, 3.290E-09, 3.132E-09, 2.812E-09, 3.109E-09,
4605  3.874E-09, 3.802E-09, 4.024E-09, 3.901E-09, 2.370E-09,
4606  1.821E-09, 2.519E-09, 4.701E-09, 3.855E-09, 4.685E-09,
4607  5.170E-09, 4.387E-09, 4.148E-09, 4.043E-09, 3.545E-09,
4608  3.392E-09, 3.609E-09, 4.635E-09, 3.467E-09, 2.558E-09,
4609  3.389E-09, 2.672E-09, 2.468E-09, 1.989E-09, 2.816E-09,
4610  4.023E-09, 2.664E-09, 2.219E-09, 3.169E-09, 1.654E-09,
4611  3.189E-09, 2.535E-09, 2.618E-09, 3.265E-09, 2.138E-09,
4612  1.822E-09, 2.920E-09, 2.002E-09, 1.300E-09, 3.764E-09,
4613  3.212E-09, 3.222E-09, 2.961E-09, 2.108E-09, 1.708E-09,
4614  2.636E-09, 2.937E-09, 2.939E-09, 2.732E-09, 2.218E-09,
4615  1.046E-09, 6.419E-10, 1.842E-09, 1.112E-09, 1.265E-09,
4616  4.087E-09, 2.044E-09, 1.022E-09, 5.109E-10, 2.554E-10,
4617  1.277E-10, 6.386E-11, 0.000E+00};
4618 
4619 // CKD_MT 1.00 implementation of oxygen v0<-v0 band model of
4620 // Mate et al. over the spectral region 7550-8486 cm-1:
4621 // B. Mate, C. Lugez, G.T. Fraser, W.J. Lafferty,
4622 // "Absolute Intensities for the O2 1.27 micron
4623 // continuum absorption",
4624 // J. Geophys. Res., 104, 30,585-30,590, 1999.
4625 //
4626 // The units of these continua coefficients are 1 / (amagat_O2*amagat_air)
4627 //
4628 // Also, refer to the paper "Observed Atmospheric
4629 // Collision Induced Absorption in Near Infrared Oxygen Bands",
4630 // Mlawer, Clough, Brown, Stephen, Landry, Goldman, & Murcray,
4631 // Journal of Geophysical Research (1998).
4632 //
4633 // (comment: v1<--v0 band around 9100 to 11000 cm-1 (1mu))
4634 const Numeric O2_10_ckd_mt_100_v1 = 9100.000e0;
4635 const Numeric O2_10_ckd_mt_100_v2 = 11000.000e0;
4637 
4638 const Numeric O2_vis_ckd_mt_250_v1 = 15000.000e0;
4639 const Numeric O2_vis_ckd_mt_250_v2 = 29870.000e0;
4641 const int O2_vis_ckd_mt_250_npt = 1488;
4643  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
4644  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
4645  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
4646  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4647  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 0.00E+00,
4648  0.00E+00, 0.00E+00, 6.06E-04, 1.00E-03, 1.00E-03,
4649  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4650  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
4651  2.49E-03, 3.00E-03, 3.00E-03, 3.00E-03, 4.00E-03,
4652  4.00E-03, 5.00E-03, 5.00E-03, 6.00E-03, 7.00E-03,
4653  8.00E-03, 9.00E-03, 1.00E-02, 1.10E-02, 1.25E-02,
4654  1.46E-02, 1.60E-02, 1.80E-02, 2.00E-02, 2.23E-02,
4655  2.50E-02, 2.69E-02, 3.00E-02, 3.30E-02, 3.63E-02,
4656  4.01E-02, 4.42E-02, 4.67E-02, 5.14E-02, 5.55E-02,
4657  5.96E-02, 6.43E-02, 6.94E-02, 7.37E-02, 7.88E-02,
4658  8.38E-02, 8.86E-02, 9.37E-02, 9.89E-02, 1.03E-01,
4659  1.07E-01, 1.10E-01, 1.14E-01, 1.16E-01, 1.18E-01,
4660  1.19E-01, 1.20E-01, 1.21E-01, 1.20E-01, 1.20E-01,
4661  1.19E-01, 1.17E-01, 1.16E-01, 1.13E-01, 1.10E-01,
4662  1.07E-01, 1.03E-01, 9.97E-02, 9.58E-02, 9.15E-02,
4663  8.80E-02, 8.41E-02, 7.94E-02, 7.53E-02, 7.17E-02,
4664  6.83E-02, 6.43E-02, 6.08E-02, 5.69E-02, 5.31E-02,
4665  5.02E-02, 4.77E-02, 4.40E-02, 4.23E-02, 3.94E-02,
4666  3.70E-02, 3.51E-02, 3.30E-02, 3.10E-02, 2.90E-02,
4667  2.79E-02, 2.60E-02, 2.50E-02, 2.32E-02, 2.20E-02,
4668  2.10E-02, 2.00E-02, 1.90E-02, 1.80E-02, 1.70E-02,
4669  1.65E-02, 1.50E-02, 1.40E-02, 1.30E-02, 1.30E-02,
4670  1.20E-02, 1.10E-02, 1.10E-02, 1.00E-02, 1.00E-02,
4671  9.00E-03, 9.00E-03, 9.00E-03, 8.00E-03, 8.00E-03,
4672  7.01E-03, 7.00E-03, 7.00E-03, 6.98E-03, 6.00E-03,
4673  5.80E-03, 5.00E-03, 5.00E-03, 5.00E-03, 4.00E-03,
4674  4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03,
4675  4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 3.00E-03,
4676  3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
4677  3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
4678  3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
4679  3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
4680  4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 5.00E-03,
4681  5.00E-03, 6.00E-03, 6.00E-03, 7.00E-03, 7.41E-03,
4682  8.15E-03, 9.00E-03, 1.01E-02, 1.10E-02, 1.20E-02,
4683  1.40E-02, 1.50E-02, 1.70E-02, 1.85E-02, 1.97E-02,
4684  2.24E-02, 2.47E-02, 2.74E-02, 3.06E-02, 3.36E-02,
4685  3.70E-02, 4.05E-02, 4.49E-02, 4.93E-02, 5.47E-02,
4686  6.01E-02, 6.52E-02, 7.23E-02, 7.89E-02, 8.80E-02,
4687  9.61E-02, 1.05E-01, 1.17E-01, 1.26E-01, 1.39E-01,
4688  1.49E-01, 1.60E-01, 1.68E-01, 1.74E-01, 1.79E-01,
4689  1.82E-01, 1.84E-01, 1.85E-01, 1.84E-01, 1.83E-01,
4690  1.81E-01, 1.80E-01, 1.77E-01, 1.74E-01, 1.71E-01,
4691  1.68E-01, 1.64E-01, 1.60E-01, 1.55E-01, 1.51E-01,
4692  1.46E-01, 1.40E-01, 1.36E-01, 1.30E-01, 1.25E-01,
4693  1.20E-01, 1.14E-01, 1.09E-01, 1.05E-01, 9.93E-02,
4694  9.30E-02, 8.88E-02, 8.38E-02, 7.94E-02, 7.51E-02,
4695  7.08E-02, 6.66E-02, 6.32E-02, 6.01E-02, 5.55E-02,
4696  5.24E-02, 4.93E-02, 4.63E-02, 4.41E-02, 4.15E-02,
4697  3.90E-02, 3.63E-02, 3.50E-02, 3.26E-02, 3.05E-02,
4698  2.94E-02, 2.73E-02, 2.62E-02, 2.46E-02, 2.36E-02,
4699  2.25E-02, 2.10E-02, 2.00E-02, 1.90E-02, 1.80E-02,
4700  1.76E-02, 1.70E-02, 1.60E-02, 1.50E-02, 1.49E-02,
4701  1.40E-02, 1.30E-02, 1.30E-02, 1.22E-02, 1.20E-02,
4702  1.20E-02, 1.10E-02, 1.10E-02, 1.10E-02, 1.00E-02,
4703  1.00E-02, 1.00E-02, 1.00E-02, 9.16E-03, 9.00E-03,
4704  9.00E-03, 9.00E-03, 9.00E-03, 8.49E-03, 8.00E-03,
4705  8.00E-03, 8.00E-03, 8.00E-03, 8.00E-03, 8.00E-03,
4706  8.00E-03, 7.00E-03, 8.00E-03, 7.00E-03, 7.00E-03,
4707  7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03,
4708  7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03,
4709  7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03,
4710  7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03,
4711  7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03,
4712  7.00E-03, 7.00E-03, 8.00E-03, 8.00E-03, 8.00E-03,
4713  8.00E-03, 8.00E-03, 8.00E-03, 9.00E-03, 9.00E-03,
4714  9.00E-03, 9.07E-03, 1.00E-02, 1.00E-02, 1.00E-02,
4715  1.10E-02, 1.10E-02, 1.20E-02, 1.22E-02, 1.30E-02,
4716  1.31E-02, 1.40E-02, 1.50E-02, 1.60E-02, 1.70E-02,
4717  1.82E-02, 2.00E-02, 2.01E-02, 2.10E-02, 2.20E-02,
4718  2.28E-02, 2.30E-02, 2.30E-02, 2.30E-02, 2.30E-02,
4719  2.30E-02, 2.30E-02, 2.30E-02, 2.20E-02, 2.20E-02,
4720  2.20E-02, 2.10E-02, 2.10E-02, 2.00E-02, 2.00E-02,
4721  1.90E-02, 1.90E-02, 1.82E-02, 1.80E-02, 1.74E-02,
4722  1.70E-02, 1.63E-02, 1.60E-02, 1.50E-02, 1.49E-02,
4723  1.40E-02, 1.37E-02, 1.30E-02, 1.30E-02, 1.21E-02,
4724  1.20E-02, 1.13E-02, 1.09E-02, 1.00E-02, 9.34E-03,
4725  9.00E-03, 8.43E-03, 8.00E-03, 7.39E-03, 7.00E-03,
4726  6.00E-03, 6.00E-03, 5.74E-03, 5.00E-03, 5.00E-03,
4727  5.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03,
4728  4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03,
4729  3.17E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
4730  3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
4731  3.00E-03, 3.00E-03, 3.00E-03, 2.00E-03, 2.00E-03,
4732  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
4733  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
4734  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
4735  1.04E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4736  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4737  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4738  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4739  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4740  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4741  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4742  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4743  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4744  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4745  1.00E-03, 1.00E-03, 1.41E-03, 2.00E-03, 2.00E-03,
4746  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
4747  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
4748  2.00E-03, 2.00E-03, 2.00E-03, 1.98E-03, 1.46E-03,
4749  1.05E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4750  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4751  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4752  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4753  1.00E-03, 1.00E-03, 1.71E-03, 2.00E-03, 2.00E-03,
4754  2.00E-03, 2.00E-03, 2.00E-03, 3.00E-03, 3.00E-03,
4755  3.82E-03, 4.00E-03, 4.17E-03, 5.00E-03, 6.00E-03,
4756  7.00E-03, 7.73E-03, 8.07E-03, 9.70E-03, 1.17E-02,
4757  1.31E-02, 1.47E-02, 1.64E-02, 1.81E-02, 2.07E-02,
4758  2.37E-02, 2.70E-02, 2.97E-02, 3.27E-02, 3.70E-02,
4759  4.13E-02, 4.49E-02, 4.89E-02, 5.38E-02, 5.98E-02,
4760  6.45E-02, 6.94E-02, 7.41E-02, 8.01E-02, 8.51E-02,
4761  9.00E-02, 9.49E-02, 9.88E-02, 1.01E-01, 1.04E-01,
4762  1.07E-01, 1.07E-01, 1.06E-01, 1.03E-01, 1.00E-01,
4763  9.66E-02, 8.93E-02, 8.35E-02, 7.92E-02, 7.33E-02,
4764  6.84E-02, 6.40E-02, 5.91E-02, 5.57E-02, 5.26E-02,
4765  5.03E-02, 4.75E-02, 4.48E-02, 4.26E-02, 4.07E-02,
4766  3.83E-02, 3.69E-02, 3.47E-02, 3.24E-02, 3.11E-02,
4767  2.85E-02, 2.69E-02, 2.55E-02, 2.42E-02, 2.21E-02,
4768  2.09E-02, 1.93E-02, 1.77E-02, 1.62E-02, 1.60E-02,
4769  1.44E-02, 1.36E-02, 1.30E-02, 1.16E-02, 1.10E-02,
4770  1.00E-02, 1.00E-02, 9.00E-03, 8.27E-03, 8.00E-03,
4771  7.45E-03, 7.00E-03, 7.00E-03, 6.18E-03, 6.00E-03,
4772  6.00E-03, 5.00E-03, 5.00E-03, 5.00E-03, 5.00E-03,
4773  4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03,
4774  4.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
4775  3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 2.07E-03,
4776  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
4777  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
4778  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
4779  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
4780  2.00E-03, 1.28E-03, 2.00E-03, 2.00E-03, 2.00E-03,
4781  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
4782  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
4783  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
4784  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
4785  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
4786  3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
4787  4.00E-03, 4.00E-03, 4.00E-03, 4.57E-03, 5.00E-03,
4788  5.00E-03, 5.64E-03, 6.00E-03, 6.67E-03, 7.00E-03,
4789  7.35E-03, 8.00E-03, 8.36E-03, 9.00E-03, 9.00E-03,
4790  1.00E-02, 1.00E-02, 1.00E-02, 1.00E-02, 1.00E-02,
4791  1.00E-02, 1.00E-02, 9.65E-03, 9.00E-03, 9.00E-03,
4792  8.00E-03, 8.00E-03, 7.69E-03, 7.00E-03, 7.00E-03,
4793  6.44E-03, 6.00E-03, 6.00E-03, 6.00E-03, 5.00E-03,
4794  5.00E-03, 5.00E-03, 5.00E-03, 5.00E-03, 4.00E-03,
4795  4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 3.98E-03,
4796  3.01E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
4797  3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 2.54E-03,
4798  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
4799  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
4800  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
4801  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
4802  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
4803  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
4804  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
4805  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
4806  1.33E-03, 1.89E-03, 1.07E-03, 1.06E-03, 1.00E-03,
4807  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4808  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4809  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4810  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4811  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4812  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4813  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4814  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4815  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4816  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4817  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4818  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4819  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4820  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4821  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4822  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4823  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4824  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 5.50E-04,
4825  0.00E+00, 0.00E+00, 1.00E-03, 1.00E-03, 7.51E-04,
4826  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
4827  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
4828  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
4829  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
4830  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
4831  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
4832  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
4833  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
4834  0.00E+00, 0.00E+00, 0.00E+00, 1.34E-04, 1.00E-03,
4835  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4836  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4837  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4838  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4839  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4840  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4841  1.00E-03, 7.65E-05, 1.00E-03, 1.00E-03, 1.00E-03,
4842  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4843  1.00E-03, 1.20E-04, 0.00E+00, 0.00E+00, 0.00E+00,
4844  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
4845  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
4846  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
4847  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
4848  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
4849  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
4850  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
4851  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
4852  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
4853  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
4854  0.00E+00, 6.09E-04, 3.47E-04, 6.97E-04, 2.60E-04,
4855  7.81E-04, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4856  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4857  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4858  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4859  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4860  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4861  1.00E-03, 1.68E-03, 2.00E-03, 2.00E-03, 2.00E-03,
4862  2.00E-03, 2.76E-03, 3.00E-03, 3.00E-03, 3.00E-03,
4863  3.80E-03, 4.00E-03, 4.82E-03, 5.00E-03, 5.84E-03,
4864  6.00E-03, 6.85E-03, 7.85E-03, 8.86E-03, 9.86E-03,
4865  1.09E-02, 1.19E-02, 1.29E-02, 1.47E-02, 1.59E-02,
4866  1.77E-02, 1.97E-02, 2.09E-02, 2.27E-02, 2.47E-02,
4867  2.67E-02, 2.87E-02, 3.07E-02, 3.26E-02, 3.38E-02,
4868  3.56E-02, 3.68E-02, 3.86E-02, 3.90E-02, 3.98E-02,
4869  4.07E-02, 4.10E-02, 4.10E-02, 4.03E-02, 3.93E-02,
4870  3.83E-02, 3.73E-02, 3.64E-02, 3.48E-02, 3.34E-02,
4871  3.18E-02, 2.99E-02, 2.85E-02, 2.70E-02, 2.50E-02,
4872  2.31E-02, 2.11E-02, 1.92E-02, 1.76E-02, 1.63E-02,
4873  1.47E-02, 1.34E-02, 1.17E-02, 1.07E-02, 9.78E-03,
4874  8.81E-03, 7.84E-03, 6.88E-03, 6.00E-03, 5.94E-03,
4875  5.00E-03, 5.00E-03, 4.05E-03, 4.00E-03, 3.13E-03,
4876  3.00E-03, 3.00E-03, 2.24E-03, 2.00E-03, 2.00E-03,
4877  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 1.54E-03,
4878  1.41E-03, 1.64E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4879  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4880  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4881  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4882  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4883  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4884  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4885  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4886  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4887  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
4888  1.00E-03, 1.15E-03, 2.00E-03, 2.00E-03, 2.00E-03,
4889  2.00E-03, 2.00E-03, 2.00E-03, 2.56E-03, 3.00E-03,
4890  3.00E-03, 3.30E-03, 4.00E-03, 4.00E-03, 4.04E-03,
4891  4.95E-03, 5.85E-03, 6.00E-03, 6.67E-03, 7.58E-03,
4892  8.48E-03, 9.39E-03, 1.03E-02, 1.14E-02, 1.31E-02,
4893  1.40E-02, 1.58E-02, 1.76E-02, 1.94E-02, 2.12E-02,
4894  2.30E-02, 2.56E-02, 2.89E-02, 3.16E-02, 3.44E-02,
4895  3.80E-02, 4.16E-02, 4.52E-02, 4.87E-02, 5.23E-02,
4896  5.59E-02, 5.91E-02, 6.20E-02, 6.53E-02, 6.71E-02,
4897  6.89E-02, 6.98E-02, 7.07E-02, 7.10E-02, 7.10E-02,
4898  7.06E-02, 6.97E-02, 6.89E-02, 6.80E-02, 6.71E-02,
4899  6.54E-02, 6.43E-02, 6.29E-02, 6.11E-02, 5.94E-02,
4900  5.74E-02, 5.48E-02, 5.31E-02, 5.05E-02, 4.86E-02,
4901  4.62E-02, 4.41E-02, 4.23E-02, 4.03E-02, 3.78E-02,
4902  3.61E-02, 3.43E-02, 3.26E-02, 3.08E-02, 2.91E-02,
4903  2.73E-02, 2.58E-02, 2.49E-02, 2.31E-02, 2.22E-02,
4904  2.07E-02, 1.95E-02, 1.86E-02, 1.77E-02, 1.69E-02,
4905  1.60E-02, 1.51E-02, 1.43E-02, 1.40E-02, 1.35E-02,
4906  1.27E-02, 1.18E-02, 1.10E-02, 1.10E-02, 1.02E-02,
4907  1.00E-02, 1.00E-02, 9.67E-03, 8.81E-03, 8.05E-03,
4908  8.90E-03, 8.24E-03, 8.00E-03, 7.53E-03, 7.00E-03,
4909  7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03, 6.42E-03,
4910  6.00E-03, 6.00E-03, 6.00E-03, 6.00E-03, 5.18E-03,
4911  5.00E-03, 5.00E-03, 5.00E-03, 4.80E-03, 4.04E-03,
4912  4.89E-03, 4.27E-03, 4.00E-03, 4.00E-03, 4.00E-03,
4913  4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03,
4914  4.00E-03, 4.00E-03, 4.00E-03, 3.20E-03, 3.00E-03,
4915  3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
4916  3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
4917  3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
4918  3.00E-03, 3.75E-03, 4.00E-03, 4.00E-03, 4.00E-03,
4919  4.00E-03, 4.00E-03, 4.69E-03, 5.00E-03, 5.00E-03,
4920  5.15E-03, 5.97E-03, 6.00E-03, 6.61E-03, 7.43E-03,
4921  8.00E-03, 8.06E-03, 8.88E-03, 9.70E-03, 1.05E-02,
4922  1.13E-02, 1.21E-02, 1.30E-02, 1.38E-02, 1.52E-02,
4923  1.64E-02, 1.72E-02, 1.80E-02, 1.88E-02, 1.96E-02,
4924  2.04E-02, 2.10E-02, 2.10E-02, 2.10E-02, 2.10E-02,
4925  2.10E-02, 2.10E-02, 2.10E-02, 2.10E-02, 2.10E-02,
4926  2.05E-02, 2.00E-02, 1.99E-02, 1.91E-02, 1.90E-02,
4927  1.85E-02, 1.80E-02, 1.79E-02, 1.71E-02, 1.63E-02,
4928  1.55E-02, 1.47E-02, 1.40E-02, 1.40E-02, 1.33E-02,
4929  1.25E-02, 1.20E-02, 1.19E-02, 1.11E-02, 1.03E-02,
4930  1.00E-02, 9.75E-03, 9.00E-03, 9.00E-03, 8.37E-03,
4931  8.00E-03, 8.00E-03, 8.00E-03, 7.22E-03, 7.00E-03,
4932  7.00E-03, 6.86E-03, 6.07E-03, 6.00E-03, 6.00E-03,
4933  6.00E-03, 5.93E-03, 5.15E-03, 5.00E-03, 5.00E-03,
4934  5.00E-03, 5.00E-03, 5.00E-03, 5.00E-03, 5.00E-03,
4935  5.00E-03, 5.00E-03, 5.00E-03, 5.00E-03, 5.00E-03,
4936  5.00E-03, 5.00E-03, 5.00E-03, 4.68E-03, 4.00E-03,
4937  4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03,
4938  4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03,
4939  4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03,
4940  1.00E-03, 2.00E-04, 0.};
4941 
4942 // #################################################################################
4943 // ############################## WATER VAPOR MODELS ###############################
4944 // #################################################################################
4946 
4981  const Numeric CCin, // continuum scale factor
4982  const Numeric CLin, // line strength scale factor
4983  const Numeric CWin, // line broadening scale factor
4984  const String& model,
4985  ConstVectorView f_grid,
4986  ConstVectorView abs_p,
4987  ConstVectorView abs_t,
4988  ConstVectorView vmr,
4989  const Verbosity& verbosity)
4990 {
4991  CREATE_OUT3;
4992 
4993  //
4994  // Coefficients are from Liebe, Radio Science, 20(5), 1985, 1069
4995  // 0 1 2 3
4996  // f0 b1 b2 b3
4997  // [GHz] [kHz/kPa] [1] [GHz/kPa]
4998  const Numeric mpm87[30][4] = {
4999  { 22.235080, 0.1090, 2.143, 27.84e-3},
5000  { 67.813960, 0.0011, 8.730, 27.60e-3},
5001  { 119.995940, 0.0007, 8.347, 27.00e-3},
5002  { 183.310117, 2.3000, 0.653, 31.64e-3},
5003  { 321.225644, 0.0464, 6.156, 21.40e-3},
5004  { 325.152919, 1.5400, 1.515, 29.70e-3},
5005  { 336.187000, 0.0010, 9.802, 26.50e-3},
5006  { 380.197372, 11.9000, 1.018, 30.36e-3},
5007  { 390.134508, 0.0044, 7.318, 19.00e-3},
5008  { 437.346667, 0.0637, 5.015, 13.70e-3},
5009  { 439.150812, 0.9210, 3.561, 16.40e-3},
5010  { 443.018295, 0.1940, 5.015, 14.40e-3},
5011  { 448.001075, 10.6000, 1.370, 23.80e-3},
5012  { 470.888947, 0.3300, 3.561, 18.20e-3},
5013  { 474.689127, 1.2800, 2.342, 19.80e-3},
5014  { 488.491133, 0.2530, 2.814, 24.90e-3},
5015  { 503.568532, 0.0374, 6.693, 11.50e-3},
5016  { 504.482692, 0.0125, 6.693, 11.90e-3},
5017  { 556.936002, 510.0000, 0.114, 30.00e-3},
5018  { 620.700807, 5.0900, 2.150, 22.30e-3},
5019  { 658.006500, 0.2740, 7.767, 30.00e-3},
5020  { 752.033227, 250.0000, 0.336, 28.60e-3},
5021  { 841.073593, 0.0130, 8.113, 14.10e-3},
5022  { 859.865000, 0.1330, 7.989, 28.60e-3},
5023  { 899.407000, 0.0550, 7.845, 28.60e-3},
5024  { 902.555000, 0.0380, 8.360, 26.40e-3},
5025  { 906.205524, 0.1830, 5.039, 23.40e-3},
5026  { 916.171582, 8.5600, 1.369, 25.30e-3},
5027  { 970.315022, 9.1600, 1.842, 24.00e-3},
5028  { 987.926764, 138.0000, 0.178, 28.60e-3}};
5029 
5030  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
5031  // standard values for the MPM87 model (Radio Science, 20(5), 1985, 1069):
5032  const Numeric CC_MPM87 = 1.00000;
5033  const Numeric CL_MPM87 = 1.00000;
5034  const Numeric CW_MPM87 = 1.00000;
5035  // ---------------------------------------------------------------------------------------
5036 
5037 
5038  // select the parameter set (!!model dominates values!!):
5039  Numeric CC, CL, CW;
5040  if ( model == "MPM87" )
5041  {
5042  CC = CC_MPM87;
5043  CL = CL_MPM87;
5044  CW = CW_MPM87;
5045  }
5046  else if ( model == "MPM87Lines" )
5047  {
5048  CC = 0.000;
5049  CL = CL_MPM87;
5050  CW = CW_MPM87;
5051  }
5052  else if ( model == "MPM87Continuum" )
5053  {
5054  CC = CC_MPM87;
5055  CL = 0.000;
5056  CW = 0.000;
5057  }
5058  else if ( model == "user" )
5059  {
5060  CC = CCin;
5061  CL = CLin;
5062  CW = CWin;
5063  }
5064  else
5065  {
5066  ostringstream os;
5067  os << "H2O-MPM87: ERROR! Wrong model values given.\n"
5068  << "Valid models are: 'MPM87', 'MPM87Lines', 'MPM87Continuum', and 'user'" << '\n';
5069  throw runtime_error(os.str());
5070  }
5071  out3 << "H2O-MPM87: (model=" << model << ") parameter values in use:\n"
5072  << " CC = " << CC << "\n"
5073  << " CL = " << CL << "\n"
5074  << " CW = " << CW << "\n";
5075 
5076 
5077  // number of lines of liebe line catalog (30 lines)
5078  const Index i_first = 0;
5079  const Index i_last = 29;
5080 
5081  const Index n_p = abs_p.nelem(); // Number of pressure levels
5082  const Index n_f = f_grid.nelem(); // Number of frequencies
5083 
5084  // Check that dimensions of abs_p, abs_t, and vmr agree:
5085  assert ( n_p==abs_t.nelem() );
5086  assert ( n_p==vmr.nelem() );
5087 
5088  // Check that dimensions of pxsec are consistent with n_f
5089  // and n_p. It should be [n_f,n_p]:
5090  assert ( n_f==pxsec.nrows() );
5091  assert ( n_p==pxsec.ncols() );
5092 
5093  // Loop pressure/temperature (pressure in [hPa] therefore the factor 0.01)
5094  for ( Index i=0; i<n_p; ++i )
5095  {
5096  // here the total pressure is not multiplied by the H2O vmr for the
5097  // P_H2O calculation because we calculate pxsec and not abs: abs = vmr * pxsec
5098  Numeric pwv_dummy = Pa_to_kPa * abs_p[i];
5099  // relative inverse temperature [1]
5100  Numeric theta = (300.0 / abs_t[i]);
5101  // H2O partial pressure [kPa]
5102  Numeric pwv = Pa_to_kPa * abs_p[i] * vmr[i];
5103  // dry air partial pressure [kPa]
5104  Numeric pda = (Pa_to_kPa * abs_p[i]) - pwv;
5105  // H2O continuum absorption [dB/km/GHz2] like in the original MPM87
5106  Numeric Nppc = CC * pwv_dummy * pow(theta, (Numeric)3.0) * 1.000e-5
5107  * ( (0.113 * pda) + (3.57 * pwv * pow(theta, (Numeric)7.8)) );
5108 
5109  // Loop over input frequency
5110  for ( Index s=0; s<n_f; ++s )
5111  {
5112  // input frequency in [GHz]
5113  Numeric ff = f_grid[s] * Hz_to_GHz;
5114  // H2O line contribution at position f
5115  Numeric Nppl = 0.000;
5116 
5117  // Loop over MPM89 H2O spectral lines
5118  for ( Index l = i_first; l <= i_last; ++l )
5119  {
5120  // line strength [kHz]
5121  Numeric strength = CL * pwv_dummy * mpm87[l][1]
5122  * pow(theta,(Numeric)3.5) * exp(mpm87[l][2]*(1.000-theta));
5123  // line broadening parameter [GHz]
5124  Numeric gam = CW * mpm87[l][3] *
5125  ( (4.80 * pwv * pow(theta, (Numeric)1.1)) +
5126  ( pda * pow(theta, (Numeric)0.6)) );
5127  // effective line width with Doppler broadening [GHz]
5128  // gam = sqrt(gam*gam + (2.14e-12 * mpm87[l][0] * mpm87[l][0] / theta));
5129  // H2O line absorption [dB/km/GHz] like in the original MPM87
5130  Nppl += strength * MPMLineShapeFunction(gam, mpm87[l][0], ff);
5131  }
5132  // pxsec = abs/vmr [1/m] but MPM87 is in [dB/km] --> conversion necessary
5133  pxsec(s,i) += dB_km_to_1_m * 0.1820 * ff * ( Nppl + (Nppc * ff) );
5134  }
5135  }
5136  return;
5137 }
5138 //
5139 // #################################################################################
5141 
5167  const Numeric CCin, // continuum scale factor
5168  const Numeric CLin, // line strength scale factor
5169  const Numeric CWin, // line broadening scale factor
5170  const String& model, // model
5171  ConstVectorView f_grid,
5172  ConstVectorView abs_p,
5173  ConstVectorView abs_t,
5174  ConstVectorView vmr,
5175  const Verbosity& verbosity)
5176 {
5177  CREATE_OUT3;
5178 
5179  //
5180  // Coefficients are from Liebe, Int. J. Infrared and Millimeter Waves, 10(6), 1989, 631
5181  // 0 1 2 3 4 5 6
5182  // f0 b1 b2 b3 b4 b5 b6
5183  // [GHz] [kHz/kPa] [1] [MHz/kPa] [1] [1] [1]
5184  const Numeric mpm89[30][7] = {
5185  { 22.235080, 0.1090, 2.143, 28.11, 0.69, 4.80, 1.00},
5186  { 67.813960, 0.0011, 8.735, 28.58, 0.69, 4.93, 0.82},
5187  { 119.995940, 0.0007, 8.356, 29.48, 0.70, 4.78, 0.79},
5188  { 183.310074, 2.3000, 0.668, 28.13, 0.64, 5.30, 0.85},
5189  { 321.225644, 0.0464, 6.181, 23.03, 0.67, 4.69, 0.54},
5190  { 325.152919, 1.5400, 1.540, 27.83, 0.68, 4.85, 0.74},
5191  { 336.187000, 0.0010, 9.829, 26.93, 0.69, 4.74, 0.61},
5192  { 380.197372, 11.9000, 1.048, 28.73, 0.69, 5.38, 0.84},
5193  { 390.134508, 0.0044, 7.350, 21.52, 0.63, 4.81, 0.55},
5194  { 437.346667, 0.0637, 5.050, 18.45, 0.60, 4.23, 0.48},
5195  { 439.150812, 0.9210, 3.596, 21.00, 0.63, 4.29, 0.52},
5196  { 443.018295, 0.1940, 5.050, 18.60, 0.60, 4.23, 0.50},
5197  { 448.001075, 10.6000, 1.405, 26.32, 0.66, 4.84, 0.67},
5198  { 470.888947, 0.3300, 3.599, 21.52, 0.66, 4.57, 0.65},
5199  { 474.689127, 1.2800, 2.381, 23.55, 0.65, 4.65, 0.64},
5200  { 488.491133, 0.2530, 2.853, 26.02, 0.69, 5.04, 0.72},
5201  { 503.568532, 0.0374, 6.733, 16.12, 0.61, 3.98, 0.43},
5202  { 504.482692, 0.0125, 6.733, 16.12, 0.61, 4.01, 0.45},
5203  { 556.936002, 510.0000, 0.159, 32.10, 0.69, 4.11, 1.00},
5204  { 620.700807, 5.0900, 2.200, 24.38, 0.71, 4.68, 0.68},
5205  { 658.006500, 0.2740, 7.820, 32.10, 0.69, 4.14, 1.00},
5206  { 752.033227, 250.0000, 0.396, 30.60, 0.68, 4.09, 0.84},
5207  { 841.073593, 0.0130, 8.180, 15.90, 0.33, 5.76, 0.45},
5208  { 859.865000, 0.1330, 7.989, 30.60, 0.68, 4.09, 0.84},
5209  { 899.407000, 0.0550, 7.917, 29.85, 0.68, 4.53, 0.90},
5210  { 902.555000, 0.0380, 8.432, 28.65, 0.70, 5.10, 0.95},
5211  { 906.205524, 0.1830, 5.111, 24.08, 0.70, 4.70, 0.53},
5212  { 916.171582, 8.5600, 1.442, 26.70, 0.70, 4.78, 0.78},
5213  { 970.315022, 9.1600, 1.920, 25.50, 0.64, 4.94, 0.67},
5214  { 987.926764, 138.0000, 0.258, 29.85, 0.68, 4.55, 0.90}};
5215 
5216  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
5217  // standard values for the MPM89 model
5218  // (Liebe, Int. J. Infrared and Millimeter Waves, 10(6), 1989, 631):
5219  const Numeric CC_MPM89 = 1.00000;
5220  const Numeric CL_MPM89 = 1.00000;
5221  const Numeric CW_MPM89 = 1.00000;
5222  // ---------------------------------------------------------------------------------------
5223 
5224 
5225  // select the parameter set (!!model goes for values!!):
5226  Numeric CC, CL, CW;
5227  if ( model == "MPM89" )
5228  {
5229  CC = CC_MPM89;
5230  CL = CL_MPM89;
5231  CW = CW_MPM89;
5232  }
5233  else if ( model == "MPM89Lines" )
5234  {
5235  CC = 0.000;
5236  CL = CL_MPM89;
5237  CW = CW_MPM89;
5238  }
5239  else if ( model == "MPM89Continuum" )
5240  {
5241  CC = CC_MPM89;
5242  CL = 0.000;
5243  CW = 0.000;
5244  }
5245  else if ( model == "user" )
5246  {
5247  CC = CCin;
5248  CL = CLin;
5249  CW = CWin;
5250  }
5251  else
5252  {
5253  ostringstream os;
5254  os << "H2O-MPM89: ERROR! Wrong model values given.\n"
5255  << "Valid models are: 'MPM89', 'MPM89Lines', 'MPM89Continuum', and 'user'" << '\n';
5256  throw runtime_error(os.str());
5257  }
5258  out3 << "H2O-MPM89: (model=" << model << ") parameter values in use:\n"
5259  << " CC = " << CC << "\n"
5260  << " CL = " << CL << "\n"
5261  << " CW = " << CW << "\n";
5262 
5263 
5264  // number of lines of Liebe line catalog (30 lines)
5265  const Index i_first = 0;
5266  const Index i_last = 29;
5267 
5268  const Index n_p = abs_p.nelem(); // Number of pressure levels
5269  const Index n_f = f_grid.nelem(); // Number of frequencies
5270 
5271  // Check that dimensions of abs_p, abs_t, and vmr agree:
5272  assert ( n_p==abs_t.nelem() );
5273  assert ( n_p==vmr.nelem() );
5274 
5275  // Check that dimensions of pxsec are consistent with n_f
5276  // and n_p. It should be [n_f,n_p]:
5277  assert ( n_f==pxsec.nrows() );
5278  assert ( n_p==pxsec.ncols() );
5279 
5280  // Loop pressure/temperature (pressure in [hPa] therefore the factor 0.01)
5281  for ( Index i=0; i<n_p; ++i )
5282  {
5283  // here the total pressure is not multiplied by the H2O vmr for the
5284  // P_H2O calculation because we calculate pxsec and not abs: abs = vmr * pxsec
5285  Numeric pwv_dummy = Pa_to_kPa * abs_p[i];
5286  // relative inverse temperature [1]
5287  Numeric theta = (300.0 / abs_t[i]);
5288  // H2O partial pressure [kPa]
5289  Numeric pwv = Pa_to_kPa * abs_p[i] * vmr[i];
5290  // dry air partial pressure [kPa]
5291  Numeric pda = (Pa_to_kPa * abs_p[i]) - pwv;
5292  // H2O continuum absorption [dB/km/GHz^2] like in the original MPM89
5293  Numeric Nppc = CC * pwv_dummy * pow(theta, (Numeric)3.0) * 1.000e-5
5294  * ( (0.113 * pda) + (3.57 * pwv * pow(theta, (Numeric)7.5)) );
5295 
5296  // Loop over input frequency
5297  for ( Index s=0; s<n_f; ++s )
5298  {
5299  // input frequency in [GHz]
5300  Numeric ff = f_grid[s] * Hz_to_GHz;
5301  // H2O line contribution at position f
5302  Numeric Nppl = 0.000;
5303 
5304  // Loop over MPM89 spectral lines:
5305  for ( Index l = i_first; l <= i_last; ++l )
5306  {
5307  // line strength [kHz]
5308  Numeric strength = CL * pwv_dummy * mpm89[l][1]
5309  * pow(theta, (Numeric)3.5) * exp(mpm89[l][2]*(1.000-theta));
5310  // line broadening parameter [GHz]
5311  Numeric gam = CW * mpm89[l][3] * 0.001
5312  * ( mpm89[l][5] * pwv * pow(theta, mpm89[l][6]) +
5313  pda * pow(theta, mpm89[l][4]) );
5314  // Doppler line width [GHz]
5315  // Numeric gamd = 1.46e-6 * mpm89[l][0] / sqrt(theta);
5316  // effective line width [GHz]
5317  // gam = 0.535 * gam + sqrt(0.217*gam*gam + gamd*gamd);
5318  // H2O line absorption [dB/km/GHz] like in the original MPM89
5319  Nppl += strength * MPMLineShapeFunction(gam, mpm89[l][0], ff);
5320  }
5321  // pxsec = abs/vmr [1/m] but MPM89 is in [dB/km] --> conversion necessary
5322  pxsec(s,i) += dB_km_to_1_m * 0.1820 * ff * ( Nppl + (Nppc * ff) );
5323  }
5324  }
5325  return;
5326 }
5327 //
5328 // #################################################################################
5330 
5371  const Numeric CCin, // continuum scale factor
5372  const Numeric CLin, // line strength scale factor
5373  const Numeric CWin, // line broadening scale factor
5374  const String& model,
5375  ConstVectorView f_grid,
5376  ConstVectorView abs_p,
5377  ConstVectorView abs_t,
5378  ConstVectorView vmr,
5379  const Verbosity& verbosity)
5380 {
5381  CREATE_OUT3;
5382 
5383  //
5384  /*
5385 CTKS OTHER DATA USED IF NOT FROM THEORETICAL CALC. IN A. BAUER ET AL. 41(1989)49-54:
5386 CTKS --------------------------------------------------------------------------------------------------------------
5387 CTKS | T=300 K | T=300 K | T=300 K |
5388 CTKS F ISO|GWVHZO NWVHZO| GWVNZ NWVNZ| GWVAIR NWVAIR| REFERENCE
5389 CTKS GHZ 1 |MHZ/TORR 1 | MHZ/TORR 1 | MHZ/TORR 1 |
5390 CTKS --------------------------------------------------------------------------------------------------------------
5391 CTKS 22.2 1 18.00(18) - 4.10 -- 3.77 -- LIEBE ET AL., J.CHEM.PHYS., 50(1969)727
5392 CTKS 183.3 1 19.88 0.85 4.07(7) 0.63(10) 3.75(6) 0.64(10) A. BAUER ET AL. JQSRT 41(1989)49-54
5393 CTKS 183.3 1 - - 4.19(17) 0.74(3) 3.89(14) 0.76(3) T. M. GOYETTE ET AL. J. MOLEC. SPEC, 143(1990)346
5394 CTKS 203.4 2 -- -- 4.214 0.93 3.833 0.89 J.-M. COLMONT ET AL. J. MOLEC. SPEC. 193(1999)233-243
5395 CTKS 225.9 4 -- -- 4.21 0.70 3.798 0.75 J.-M. COLMONT ET AL. J. MOLEC. SPEC. 193(1999)233-243
5396 CTKS 241.6 4 -- -- 4.45 0.77 4.08 0.80 J.-M. COLMONT ET AL. J. MOLEC. SPEC. 193(1999)233-243
5397 CTKS 241.9 4 -- -- 3.47 0.67 3.07 0.70 J.-M. COLMONT ET AL. J. MOLEC. SPEC. 193(1999)233-243
5398 CTKS 325.1 1 -- -- 4.011 0.63 3.633 0.64 J.-M. COLMONT ET AL. J. MOLEC. SPEC. 193(1999)233-243
5399 CTKS 380.2 1 20.61(7) 0.89(1) 4.24(7) 0.52(14) 3.83(6) 0.54(14) A. BAUER ET AL. JQSRT 41(1987) 531
5400 CTKS 380.2 1 - - 4.16(4) 0.70(3) 3.80 0.72 T. M. GOYETTE ET AL. JQSRT 41(1993)485
5401 CTKS 439.2 1 12.95(25)0.62(9) -- -- -- -- V. N. MARKOV, J. MOLEC. SPEC, 164(1994)233
5402 CTKS 752.0 1 4.16(18) -- 3.75 -- S. S. D. GASSTER ET AL. JOSA, 5(1988)593
5403 CTKS 987.9 1 4.42(23) -- 4.01 -- S. S. D. GASSTER ET AL. JOSA, 5(1988)593
5404 */
5405  // Coefficients are from Liebe et al., AGARD CP-May93, Paper 3/1-10
5406  // 0 1 2 3 4 5 6
5407  // f0 b1 b2 b3 b4 b5 b6
5408  // [MHz] [kHz/kPa] [1] [MHz/hPa] [1] [1]
5409  // air self air self
5410  const Numeric mpm02[35][7] = {
5411  { 22235.0800, 0.10947, 2.1678, 2.811, 4.80, 0.69, 0.61},
5412  { 67803.9600, 0.00111, 8.7518, 2.858, 4.93, 0.69, 0.82},
5413  { 119995.9400, 0.00072, 8.3688, 2.948, 4.78, 0.70, 0.79},
5414  { 183310.1170, 2.30351, 0.6794, 3.050, 5.30, 0.76, 0.85},
5415  { 321225.6400, 0.04646, 6.1792, 2.303, 4.69, 0.67, 0.54},
5416  { 325152.9190, 1.53869, 1.5408, 2.783, 4.85, 0.68, 0.74},
5417  { 336227.6200, 0.00099, 9.8233, 2.693, 4.74, 0.64, 0.61},
5418  { 380197.3720, 11.9079, 1.0439, 2.873, 5.38, 0.72, 0.89},
5419  { 390134.5080, 0.00437, 7.3408, 2.152, 4.81, 0.63, 0.55},
5420  { 437346.6670, 0.06378, 5.0384, 1.845, 4.23, 0.60, 0.48},
5421  { 439150.8120, 0.92144, 3.5853, 2.100, 4.29, 0.63, 0.62},
5422  { 443018.2950, 0.19384, 5.0384, 1.860, 4.23, 0.60, 0.50},
5423  { 448001.0750, 10.6190, 1.3952, 2.632, 4.84, 0.66, 0.67},
5424  { 470888.9470, 0.33005, 3.5853, 2.152, 4.57, 0.66, 0.65},
5425  { 474689.1270, 1.27660, 2.3674, 2.355, 4.65, 0.65, 0.64},
5426  { 488491.1330, 0.25312, 2.8391, 2.602, 5.04, 0.69, 0.72},
5427  { 503568.5320, 0.03746, 6.7158, 1.612, 3.98, 0.61, 0.43},
5428  { 504482.6920, 0.01250, 6.7158, 1.612, 4.01, 0.61, 0.45},
5429  { 547676.4400, 1.01467, 0.1427, 2.600, 4.50, 0.69, 1.00}, // *
5430  { 552020.9600, 0.18668, 0.1452, 2.600, 4.50, 0.69, 1.00}, // *
5431  { 556936.0020, 510.51086, 0.1405, 3.210, 4.11, 0.69, 1.00},
5432  { 620700.8070, 5.10539, 2.3673, 2.438, 4.68, 0.71, 0.68},
5433  { 645905.6200, 0.00667, 8.6065, 1.800, 4.00, 0.60, 0.43},
5434  { 658006.5500, 0.27451, 7.7889, 3.210, 4.14, 0.69, 1.00},
5435  { 752033.2270, 249.68466, 0.3625, 3.060, 4.09, 0.68, 0.84},
5436  { 841051.1620, 0.01308, 8.1347, 1.590, 5.76, 0.33, 0.45},
5437  { 859965.6490, 0.13326, 8.0114, 3.060, 4.09, 0.68, 0.84},
5438  { 899302.1710, 0.05492, 7.8676, 2.985, 4.53, 0.68, 0.90},
5439  { 902609.4360, 0.03854, 8.3823, 2.865, 5.10, 0.70, 0.95},
5440  { 906206.1180, 0.18323, 5.0628, 2.408, 4.70, 0.70, 0.53},
5441  { 916171.5820, 8.56444, 1.3943, 2.670, 4.78, 0.70, 0.78},
5442  { 923113.1900, 0.00784, 10.2441, 2.900, 5.00, 0.66, 0.67},
5443  { 970315.0220, 9.16280, 1.8673, 2.550, 4.94, 0.64, 0.67},
5444  { 987926.7640, 138.28461, 0.2045, 2.985, 4.55, 0.68, 0.90},
5445  //--------------------------------------------------------------------
5446  { 1780.000000, 2230.00000, 0.952, 17.620, 30.50, 2.00, 5.00}}; // pseudo continuum line
5447 
5448  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
5449  // standard values for the MPM93 model (J. Liebe and G. A. Hufford and M. G. Cotton,
5450  // "Propagation modeling of moist air and suspended water/ice
5451  // particles at frequencies below 1000 GHz",
5452  // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
5453  // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21)
5454  const Numeric CC_MPM02 = 1.00000;
5455  const Numeric CL_MPM02 = 1.00000;
5456  const Numeric CW_MPM02 = 1.00000;
5457  // ---------------------------------------------------------------------------------------
5458 
5459 
5460  // select the parameter set (!!model dominates values!!):
5461  Numeric CC, CL, CW;
5462  // number of lines of Liebe line catalog (0-33 lines, 34 cont. pseudo line)
5463  Index i_first = 0;
5464  Index i_last = 34;
5465  if ( model == "MPM02" )
5466  {
5467  CC = CC_MPM02;
5468  CL = CL_MPM02;
5469  CW = CW_MPM02;
5470  i_first = 0;
5471  i_last = 34;
5472  }
5473  else if ( model == "MPM02Lines" )
5474  {
5475  CC = 0.000;
5476  CL = CL_MPM02;
5477  CW = CW_MPM02;
5478  i_first = 0;
5479  i_last = 33;
5480  }
5481  else if ( model == "MPM02Continuum" )
5482  {
5483  CC = CC_MPM02;
5484  CL = 0.000;
5485  CW = 0.000;
5486  i_first = 34;
5487  i_last = 34;
5488  }
5489  else if ( model == "user" )
5490  {
5491  CC = CCin;
5492  CL = CLin;
5493  CW = CWin;
5494  i_first = 0;
5495  i_last = 34;
5496 
5497  }
5498  else
5499  {
5500  ostringstream os;
5501  os << "H2O-MPM02: ERROR! Wrong model values given.\n"
5502  << "Valid models are: 'MPM02', 'MPM02Lines', 'MPM02Continuum', and 'user'" << '\n';
5503  throw runtime_error(os.str());
5504  }
5505  out3 << "H2O-MPM02: (model=" << model << ") parameter values in use:\n"
5506  << " CC = " << CC << "\n"
5507  << " CL = " << CL << "\n"
5508  << " CW = " << CW << "\n";
5509 
5510 
5511  const Index n_p = abs_p.nelem(); // Number of pressure levels
5512  const Index n_f = f_grid.nelem(); // Number of frequencies
5513 
5514  // Check that dimensions of abs_p, abs_t, and vmr agree:
5515  assert ( n_p==abs_t.nelem() );
5516  assert ( n_p==vmr.nelem() );
5517 
5518  // Check that dimensions of pxsec are consistent with n_f
5519  // and n_p. It should be [n_f,n_p]:
5520  assert ( n_f==pxsec.nrows() );
5521  assert ( n_p==pxsec.ncols() );
5522 
5523  // Loop pressure/temperature (pressure in hPa therefore the factor 0.01)
5524  for ( Index i=0; i<n_p; ++i )
5525  {
5526  // here the total pressure is not multiplied by the H2O vmr for the
5527  // P_H2O calculation because we calculate pxsec and not abs: abs = vmr * pxsec
5528  Numeric pwv_dummy = Pa_to_hPa * abs_p[i];
5529  // relative inverse temperature [1]
5530  Numeric theta = (300.0 / abs_t[i]);
5531  // H2O partial pressure [hPa]
5532  Numeric pwv = Pa_to_hPa * abs_p[i] * vmr[i];
5533  // dry air partial pressure [hPa]
5534  Numeric pda = (Pa_to_hPa * abs_p[i]) - pwv;
5535  // Loop over MPM02 spectral lines:
5536 
5537  // Loop over input frequency
5538  for ( Index s=0; s<n_f; ++s )
5539  {
5540  // input frequency in [GHz]
5541  Numeric ff = f_grid[s] * Hz_to_GHz;
5542 
5543  for ( Index l = i_first; l <= i_last; ++l )
5544  {
5545  // line strength [ppm]. The missing vmr of H2O will be multiplied
5546  // at the stage of absorption calculation: abs / vmr * pxsec.
5547  Numeric strength = 0.00;
5548  Numeric gam = 0.00;
5549  if ( (l >= 0) && (l <= 33) ) // ---- just the lines ------------------
5550  {
5551  strength = CL * pwv_dummy * mpm02[l][1] *
5552  pow(theta, (Numeric)3.5) * exp(mpm02[l][2]*(1.0-theta));
5553  // line broadening parameter [GHz]
5554  gam = CW * mpm02[l][3] * 0.001 *
5555  ( (mpm02[l][4] * pwv * pow(theta, mpm02[l][6])) +
5556  ( pda * pow(theta, mpm02[l][5])) );
5557  }
5558  else if ( l == 34 ) // ----- just the continuum pseudo-line ----------
5559  {
5560  strength = CC * pwv_dummy * mpm02[l][1] *
5561  pow(theta, (Numeric)3.5) * exp(mpm02[l][2]*(1.0-theta));
5562  // line broadening parameter [GHz]
5563  gam = mpm02[l][3] * 0.001 *
5564  ( (mpm02[l][4] * pwv * pow(theta, mpm02[l][6])) +
5565  ( pda * pow(theta, mpm02[l][5])) );
5566  }
5567  else // ----- if something strange happens ---------------------------
5568  {
5569  ostringstream os;
5570  os << "H2O-MPM02: wrong line number detected l=" << l << " (0-34)\n";
5571  throw runtime_error(os.str());
5572  return;
5573  } // ---------------------------------------------------------------
5574  // Doppler line width [GHz]
5575  // Numeric gamd = 1.46e-6 * mpm02[l][0] / sqrt(theta);
5576  // effective line width [GHz]
5577  //gam = 0.535 * gam + sqrt(0.217*gam*gam + gamd*gamd);
5578  // absorption [dB/km] like in the original MPM02
5579  Numeric Npp = strength * MPMLineShapeFunction(gam, mpm02[l][0], ff);
5580  // pxsec = abs/vmr [1/m] but MPM89 is in [dB/km] --> conversion necessary
5581  pxsec(s,i) += dB_km_to_1_m * 0.1820 * ff * Npp;
5582  }
5583  }
5584  }
5585  return;
5586 }
5587 //
5588 //
5589 // #################################################################################
5591 
5631  const Numeric CCin, // continuum scale factor
5632  const Numeric CLin, // line strength scale factor
5633  const Numeric CWin, // line broadening scale factor
5634  const String& model,
5635  ConstVectorView f_grid,
5636  ConstVectorView abs_p,
5637  ConstVectorView abs_t,
5638  ConstVectorView vmr,
5639  const Verbosity& verbosity)
5640 {
5641  CREATE_OUT3;
5642 
5643  //
5644  // Coefficients are from Liebe et al., AGARD CP-May93, Paper 3/1-10
5645  // 0 1 2 3 4 5 6
5646  // f0 b1 b2 b3 b4 b5 b6
5647  // [GHz] [kHz/hPa] [1] [MHz/hPa] [1] [1] [1]
5648  const Numeric mpm93[35][7] = {
5649  { 22.235080, 0.01130, 2.143, 2.811, 4.80, 0.69, 1.00},
5650  { 67.803960, 0.00012, 8.735, 2.858, 4.93, 0.69, 0.82},
5651  { 119.995940, 0.00008, 8.356, 2.948, 4.78, 0.70, 0.79},
5652  { 183.310091, 0.24200, 0.668, 3.050, 5.30, 0.64, 0.85},
5653  { 321.225644, 0.00483, 6.181, 2.303, 4.69, 0.67, 0.54},
5654  { 325.152919, 0.14990, 1.540, 2.783, 4.85, 0.68, 0.74},
5655  { 336.222601, 0.00011, 9.829, 2.693, 4.74, 0.69, 0.61},
5656  { 380.197372, 1.15200, 1.048, 2.873, 5.38, 0.54, 0.89},
5657  { 390.134508, 0.00046, 7.350, 2.152, 4.81, 0.63, 0.55},
5658  { 437.346667, 0.00650, 5.050, 1.845, 4.23, 0.60, 0.48},
5659  { 439.150812, 0.09218, 3.596, 2.100, 4.29, 0.63, 0.52},
5660  { 443.018295, 0.01976, 5.050, 1.860, 4.23, 0.60, 0.50},
5661  { 448.001075, 1.03200, 1.405, 2.632, 4.84, 0.66, 0.67},
5662  { 470.888947, 0.03297, 3.599, 2.152, 4.57, 0.66, 0.65},
5663  { 474.689127, 0.12620, 2.381, 2.355, 4.65, 0.65, 0.64},
5664  { 488.491133, 0.02520, 2.853, 2.602, 5.04, 0.69, 0.72},
5665  { 503.568532, 0.00390, 6.733, 1.612, 3.98, 0.61, 0.43},
5666  { 504.482692, 0.00130, 6.733, 1.612, 4.01, 0.61, 0.45},
5667 // { 547.676440, 0.97010, 0.114, 2.600, 4.50, 0.70, 1.00},
5668 // { 552.020960, 1.47700, 0.114, 2.600, 4.50, 0.70, 1.00},
5669  { 547.676440, 0.97010*0.00199983, 0.114, 2.600, 4.50, 0.70, 1.00}, // isotopologue ratio multiplied
5670  { 552.020960, 1.47700*0.00037200, 0.114, 2.600, 4.50, 0.70, 1.00}, // isotopologue ratio multiplied
5671  { 556.936002, 48.74000, 0.159, 3.210, 4.11, 0.69, 1.00},
5672  { 620.700807, 0.50120, 2.200, 2.438, 4.68, 0.71, 0.68},
5673  { 645.866155, 0.00713, 8.580, 1.800, 4.00, 0.60, 0.50}, // ?? JPL tag 18003 (H2O) f_o = 645.7660100GHz
5674  { 658.005280, 0.03022, 7.820, 3.210, 4.14, 0.69, 1.00},
5675  { 752.033227, 23.96000, 0.396, 3.060, 4.09, 0.68, 0.84},
5676  { 841.053973, 0.00140, 8.180, 1.590, 5.76, 0.33, 0.45},
5677  { 859.962313, 0.01472, 7.989, 3.060, 4.09, 0.68, 0.84},
5678  { 899.306675, 0.00605, 7.917, 2.985, 4.53, 0.68, 0.90},
5679  { 902.616173, 0.00426, 8.432, 2.865, 5.10, 0.70, 0.95},
5680  { 906.207325, 0.01876, 5.111, 2.408, 4.70, 0.70, 0.53},
5681  { 916.171582, 0.83400, 1.442, 2.670, 4.78, 0.70, 0.78},
5682  { 923.118427, 0.00869, 10.220, 2.900, 5.00, 0.70, 0.80},
5683  { 970.315022, 0.89720, 1.920, 2.550, 4.94, 0.64, 0.67},
5684  { 987.926764, 13.21000, 0.258, 2.985, 4.55, 0.68, 0.90},
5685  //--------------------------------------------------------------------
5686  { 1780.000000, 2230.00000, 0.952, 17.620, 30.50, 2.00, 5.00}}; // pseudo continuum line
5687 
5688  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
5689  // standard values for the MPM93 model (J. Liebe and G. A. Hufford and M. G. Cotton,
5690  // "Propagation modeling of moist air and suspended water/ice
5691  // particles at frequencies below 1000 GHz",
5692  // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
5693  // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21)
5694  const Numeric CC_MPM93 = 1.00000;
5695  const Numeric CL_MPM93 = 1.00000;
5696  const Numeric CW_MPM93 = 1.00000;
5697  // ---------------------------------------------------------------------------------------
5698 
5699 
5700  // select the parameter set (!!model dominates values!!):
5701  Numeric CC, CL, CW;
5702  // number of lines of Liebe line catalog (0-33 lines, 34 cont. pseudo line)
5703  Index i_first = 0;
5704  Index i_last = 34;
5705  if ( model == "MPM93" )
5706  {
5707  CC = CC_MPM93;
5708  CL = CL_MPM93;
5709  CW = CW_MPM93;
5710  i_first = 0;
5711  i_last = 34;
5712  }
5713  else if ( model == "MPM93Lines" )
5714  {
5715  CC = 0.000;
5716  CL = CL_MPM93;
5717  CW = CW_MPM93;
5718  i_first = 0;
5719  i_last = 33;
5720  }
5721  else if ( model == "MPM93Continuum" )
5722  {
5723  CC = CC_MPM93;
5724  CL = 0.000;
5725  CW = 0.000;
5726  i_first = 34;
5727  i_last = 34;
5728  }
5729  else if ( model == "user" )
5730  {
5731  CC = CCin;
5732  CL = CLin;
5733  CW = CWin;
5734  i_first = 0;
5735  i_last = 34;
5736 
5737  }
5738  else
5739  {
5740  ostringstream os;
5741  os << "H2O-MPM93: ERROR! Wrong model values given.\n"
5742  << "Valid models are: 'MPM93', 'MPM93Lines', 'MPM93Continuum', and 'user'" << '\n';
5743  throw runtime_error(os.str());
5744  }
5745  out3 << "H2O-MPM93: (model=" << model << ") parameter values in use:\n"
5746  << " CC = " << CC << "\n"
5747  << " CL = " << CL << "\n"
5748  << " CW = " << CW << "\n";
5749 
5750 
5751  const Index n_p = abs_p.nelem(); // Number of pressure levels
5752  const Index n_f = f_grid.nelem(); // Number of frequencies
5753 
5754  // Check that dimensions of abs_p, abs_t, and vmr agree:
5755  assert ( n_p==abs_t.nelem() );
5756  assert ( n_p==vmr.nelem() );
5757 
5758  // Check that dimensions of pxsec are consistent with n_f
5759  // and n_p. It should be [n_f,n_p]:
5760  assert ( n_f==pxsec.nrows() );
5761  assert ( n_p==pxsec.ncols() );
5762 
5763  // Loop pressure/temperature (pressure in hPa therefore the factor 0.01)
5764  for ( Index i=0; i<n_p; ++i )
5765  {
5766  // here the total pressure is not multiplied by the H2O vmr for the
5767  // P_H2O calculation because we calculate pxsec and not abs: abs = vmr * pxsec
5768  Numeric pwv_dummy = Pa_to_hPa * abs_p[i];
5769  // relative inverse temperature [1]
5770  Numeric theta = (300.0 / abs_t[i]);
5771  // H2O partial pressure [hPa]
5772  Numeric pwv = Pa_to_hPa * abs_p[i] * vmr[i];
5773  // dry air partial pressure [hPa]
5774  Numeric pda = (Pa_to_hPa * abs_p[i]) - pwv;
5775  // Loop over MPM93 spectral lines:
5776 
5777  // Loop over input frequency
5778  for ( Index s=0; s<n_f; ++s )
5779  {
5780  // input frequency in [GHz]
5781  Numeric ff = f_grid[s] * Hz_to_GHz;
5782 
5783  for ( Index l = i_first; l <= i_last; ++l )
5784  {
5785  // line strength [ppm]. The missing vmr of H2O will be multiplied
5786  // at the stage of absorption calculation: abs / vmr * pxsec.
5787  Numeric strength = 0.00;
5788  Numeric gam = 0.00;
5789  if ( (l >= 0) && (l <= 33) ) // ---- just the lines ------------------
5790  {
5791  strength = CL * pwv_dummy * mpm93[l][1]
5792  * pow(theta, (Numeric)3.5) * exp(mpm93[l][2]*(1.0-theta));
5793  // line broadening parameter [GHz]
5794  gam = CW * mpm93[l][3] * 0.001 *
5795  ( (mpm93[l][4] * pwv * pow(theta, mpm93[l][6])) +
5796  ( pda * pow(theta, mpm93[l][5])) );
5797  }
5798  else if ( l == 34 ) // ----- just the continuum pseudo-line ----------
5799  {
5800  strength = CC * pwv_dummy * mpm93[l][1]
5801  * pow(theta, (Numeric)3.5) * exp(mpm93[l][2]*(1.0-theta));
5802  // line broadening parameter [GHz]
5803  gam = mpm93[l][3] * 0.001 *
5804  ( (mpm93[l][4] * pwv * pow(theta, mpm93[l][6])) +
5805  ( pda * pow(theta, mpm93[l][5])) );
5806  }
5807  else // ----- if something strange happens ---------------------------
5808  {
5809  ostringstream os;
5810  os << "H2O-MPM93: wrong line number detected l=" << l << " (0-34)\n";
5811  throw runtime_error(os.str());
5812  return;
5813  } // ---------------------------------------------------------------
5814  // Doppler line width [GHz]
5815  // Numeric gamd = 1.46e-6 * mpm93[l][0] / sqrt(theta);
5816  // effective line width [GHz]
5817  //gam = 0.535 * gam + sqrt(0.217*gam*gam + gamd*gamd);
5818  // absorption [dB/km] like in the original MPM93
5819  Numeric Npp = strength * MPMLineShapeFunction(gam, mpm93[l][0], ff);
5820  // pxsec = abs/vmr [1/m] but MPM89 is in [dB/km] --> conversion necessary
5821  pxsec(s,i) += dB_km_to_1_m * 0.1820 * ff * Npp;
5822  }
5823  }
5824  }
5825  return;
5826 }
5827 //
5828 // #################################################################################
5830 
5857  const Numeric CCin, // continuum scale factor
5858  const Numeric CLin, // line strength scale factor
5859  const Numeric CWin, // line broadening scale factor
5860  const String& model,
5861  ConstVectorView f_grid,
5862  ConstVectorView abs_p,
5863  ConstVectorView abs_t,
5864  ConstVectorView vmr,
5865  const Verbosity& verbosity)
5866 {
5867  CREATE_OUT3;
5868 
5869  // REFERENCES:
5870  // LINE INTENSITIES FROM HITRAN92 (SELECTION THRESHOLD=
5871  // HALF OF CONTINUUM ABSORPTION AT 1000 MB).
5872  // WIDTHS MEASURED AT 22,183,380 GHZ, OTHERS CALCULATED:
5873  // H.J.LIEBE AND T.A.DILLON, J.CHEM.PHYS. V.50, PP.727-732 (1969) &
5874  // H.J.LIEBE ET AL., JQSRT V.9, PP. 31-47 (1969) (22GHz);
5875  // A.BAUER ET AL., JQSRT V.37, PP.531-539 (1987) &
5876  // ASA WORKSHOP (SEPT. 1989) (380GHz);
5877  // AND A.BAUER ET AL., JQSRT V.41, PP.49-54 (1989) (OTHER LINES).
5878  // AIR-BROADENED CONTINUUM BASED ON LIEBE & LAYTON, NTIA
5879  // REPORT 87-224 (1987); SELF-BROADENED CONTINUUM BASED ON
5880  // LIEBE ET AL, AGARD CONF. PROC. 542 (MAY 1993),
5881  // BUT READJUSTED FOR LINE SHAPE OF
5882  // CLOUGH et al, ATMOS. RESEARCH V.23, PP.229-241 (1989).
5883  //
5884  // Coefficients are from P. W. Rosenkranz., Radio Science, 33(4), 919, 1998
5885  // line frequencies [GHz]
5886  const Numeric PWRfl[15] = { 22.2350800, 183.3101170, 321.2256400, 325.1529190, 380.1973720,
5887  439.1508120, 443.0182950, 448.0010750, 470.8889470, 474.6891270,
5888  488.4911330, 556.9360020, 620.7008070, 752.0332270, 916.1715820 };
5889  // line intensities at 300K [Hz * cm2] (see Janssen Appendix to Chap.2 for this)
5890  const Numeric PWRs1[15] = { 1.31e-14, 2.273e-12, 8.036e-14, 2.694e-12, 2.438e-11,
5891  2.179e-12, 4.624e-13, 2.562e-11, 8.369e-13, 3.263e-12,
5892  6.659e-13, 1.531e-9, 1.707e-11, 1.011e-9, 4.227e-11 };
5893  // T coeff. of intensities [1]
5894  const Numeric PWRb2[15] = { 2.144, 0.668, 6.179, 1.541, 1.048,
5895  3.595, 5.048, 1.405, 3.597, 2.379,
5896  2.852, 0.159, 2.391, 0.396, 1.441 };
5897  // air-broadened width parameters at 300K [GHz/hPa]
5898  const Numeric PWRw3[15] = { 0.00281, 0.00281, 0.00230, 0.00278, 0.00287,
5899  0.00210, 0.00186, 0.00263, 0.00215, 0.00236,
5900  0.00260, 0.00321, 0.00244, 0.00306, 0.00267 };
5901  // T-exponent of air-broadening [1]
5902  const Numeric PWRx[15] = { 0.69, 0.64, 0.67, 0.68, 0.54,
5903  0.63, 0.60, 0.66, 0.66, 0.65,
5904  0.69, 0.69, 0.71, 0.68, 0.70 };
5905  // self-broadened width parameters at 300K [GHz/hPa]
5906  const Numeric PWRws[15] = { 0.01349, 0.01491, 0.01080, 0.01350, 0.01541,
5907  0.00900, 0.00788, 0.01275, 0.00983, 0.01095,
5908  0.01313, 0.01320, 0.01140, 0.01253, 0.01275 };
5909 
5910  // T-exponent of self-broadening [1]
5911  const Numeric PWRxs[15] = { 0.61, 0.85, 0.54, 0.74, 0.89,
5912  0.52, 0.50, 0.67, 0.65, 0.64,
5913  0.72, 1.00, 0.68, 0.84, 0.78 };
5914 
5915  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
5916  // standard values for the MPM87 model (P. W. Rosenkranz., Radio Science, 33(4), 919, 1998):
5917  const Numeric CC_PWR98 = 1.00000;
5918  const Numeric CL_PWR98 = 1.00000;
5919  const Numeric CW_PWR98 = 1.00000;
5920  // ---------------------------------------------------------------------------------------
5921 
5922 
5923  // select the parameter set (!!model dominates values!!):
5924  Numeric CC, CL, CW;
5925  if ( model == "Rosenkranz" )
5926  {
5927  CC = CC_PWR98;
5928  CL = CL_PWR98;
5929  CW = CW_PWR98;
5930  }
5931  else if ( model == "RosenkranzLines" )
5932  {
5933  CC = 0.000;
5934  CL = CL_PWR98;
5935  CW = CW_PWR98;
5936  }
5937  else if ( model == "RosenkranzContinuum" )
5938  {
5939  CC = CC_PWR98;
5940  CL = 0.000;
5941  CW = 0.000;
5942  }
5943  else if ( model == "user" )
5944  {
5945  CC = CCin;
5946  CL = CLin;
5947  CW = CWin;
5948  }
5949  else
5950  {
5951  ostringstream os;
5952  os << "H2O-PWR98: ERROR! Wrong model values given.\n"
5953  << "Valid models are: 'Rosenkranz', 'RosenkranzLines', 'RosenkranzContinuum', and 'user'" << '\n';
5954  throw runtime_error(os.str());
5955  }
5956  out3 << "H2O-PWR98: (model=" << model << ") parameter values in use:\n"
5957  << " CC = " << CC << "\n"
5958  << " CL = " << CL << "\n"
5959  << " CW = " << CW << "\n";
5960 
5961 
5962  const Index n_p = abs_p.nelem(); // Number of pressure levels
5963  const Index n_f = f_grid.nelem(); // Number of frequencies
5964 
5965  // Check that dimensions of abs_p, abs_t, and vmr agree:
5966  assert ( n_p==abs_t.nelem() );
5967  assert ( n_p==vmr.nelem() );
5968 
5969  // Check that dimensions of pxsec are consistent with n_f
5970  // and n_p. It should be [n_f,n_p]:
5971  assert ( n_f==pxsec.nrows() );
5972  assert ( n_p==pxsec.ncols() );
5973 
5974  // Loop pressure/temperature:
5975 #pragma omp parallel for \
5976  if (!arts_omp_in_parallel() \
5977  && n_p >= arts_omp_get_max_threads())
5978  for ( Index i=0; i<n_p; ++i )
5979  {
5980  // here the total pressure is not multiplied by the H2O vmr for the
5981  // P_H2O calculation because we calculate pxsec and not abs: abs = vmr * pxsec
5982  Numeric pvap_dummy = Pa_to_hPa * abs_p[i];
5983  // water vapor partial pressure [hPa]
5984  Numeric pvap = Pa_to_hPa * abs_p[i] * vmr[i];
5985  // dry air partial pressure [hPa]
5986  Numeric pda = (Pa_to_hPa * abs_p[i]) - pvap;
5987  // Rosenkranz number density (Rosenkranz H2O mass density in [g/m³])
5988  // [g/m³] = [g*K / Pa*m³] * [Pa/K]
5989  // rho = (M_H2O / R) * (P_H2O / T)
5990  // rho = 2.1667 * abs_p * vmr / abs_t
5991  // den = 3.335e16 * rho
5992  // FIXME Numeric den = 3.335e16 * (2.1667 * abs_p[i] * vmr[i] / abs_t[i]);
5993  Numeric den_dummy = 3.335e16 * (2.1667 * abs_p[i] / abs_t[i]);
5994  // inverse relative temperature [1]
5995  Numeric ti = (300.0 / abs_t[i]);
5996  Numeric ti2 = pow(ti, (Numeric)2.5);
5997 
5998  // continuum term [Np/km/GHz2]
5999  Numeric con = CC * pvap_dummy * pow(ti, (Numeric)3.0) * 1.000e-9
6000  * ( (0.543 * pda) + (17.96 * pvap * pow(ti, (Numeric)4.5)) );
6001 
6002  // Loop over input frequency
6003  for ( Index s=0; s<n_f; ++s )
6004  {
6005  // input frequency in [GHz]
6006  Numeric ff = f_grid[s] * Hz_to_GHz;
6007  // line contribution at position f
6008  Numeric sum = 0.000;
6009 
6010  // Loop over spectral lines
6011  for (Index l = 0; l < 15; l++)
6012  {
6013  Numeric width = ( CW * PWRw3[l] * pda * pow(ti, PWRx[l]) ) +
6014  ( PWRws[l] * pvap * pow(ti, PWRxs[l]));
6015  // Numeric width = CW * ( PWRw3[l] * pda * pow(ti, PWRx[l]) +
6016  // PWRws[l] * pvap * pow(ti, PWRxs[l]) );
6017  Numeric wsq = width * width;
6018  Numeric strength = CL * PWRs1[l] * ti2 * exp(PWRb2[l]*(1.0 - ti));
6019  // frequency differences
6020  Numeric df0 = ff - PWRfl[l];
6021  Numeric df1 = ff + PWRfl[l];
6022  // use Clough's definition of local line contribution
6023  Numeric base = width / (wsq + 562500.000);
6024  // positive and negative resonances
6025  Numeric res = 0.000;
6026  if (fabs(df0) < 750.0) res += width / (df0*df0 + wsq) - base;
6027  if (fabs(df1) < 750.0) res += width / (df1*df1 + wsq) - base;
6028  sum += strength * res * pow( (ff/PWRfl[l]),
6029  (Numeric)2.0 );
6030  }
6031  // line term [Np/km]
6032  Numeric absl = 0.3183e-4 * den_dummy * sum;
6033  // pxsec = abs/vmr [1/m] (Rosenkranz model in [Np/km])
6034  // 4.1907e-5 = 0.230259 * 0.1820 * 1.0e-3 (1/(10*log(e)) = 0.230259)
6035  pxsec(s,i) += 1.000e-3 * ( absl + (con * ff * ff) );
6036  }
6037  }
6038  return;
6039 }
6040 //
6041 // #################################################################################
6042 //
6044 
6070  const Numeric CCin, // continuum scale factor
6071  const Numeric CLin, // line strength scale factor
6072  const Numeric CWin, // line broadening scale factor
6073  const String& model,
6074  ConstVectorView f_grid,
6075  ConstVectorView abs_p,
6076  ConstVectorView abs_t,
6077  ConstVectorView vmr,
6078  const Verbosity& verbosity)
6079 {
6080  CREATE_OUT3;
6081 
6082  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
6083  // standard values for the CP98 model (S. L. Cruz-Pol et al., Radio Science, 33(5), 1319, 1998):
6084  const Numeric CC_CP98 = 1.2369; // +/- 0.155 !LARGE!
6085  const Numeric CL_CP98 = 1.0639; // +/- 0.016
6086  const Numeric CW_CP98 = 1.0658; // +/- 0.0096
6087  // ---------------------------------------------------------------------------------------
6088 
6089  // select the parameter set (!!model dominates values!!):
6090  Numeric CC, CL, CW;
6091  if ( model == "CruzPol" )
6092  {
6093  CC = CC_CP98;
6094  CL = CL_CP98;
6095  CW = CW_CP98;
6096  }
6097  else if ( model == "CruzPolLine" )
6098  {
6099  CC = 0.000;
6100  CL = CL_CP98;
6101  CW = CW_CP98;
6102  }
6103  else if ( model == "CruzPolContinuum" )
6104  {
6105  CC = CC_CP98;
6106  CL = 0.000;
6107  CW = 0.000;
6108  }
6109  else if ( model == "user" )
6110  {
6111  CC = CCin;
6112  CL = CLin;
6113  CW = CWin;
6114  }
6115  else
6116  {
6117  ostringstream os;
6118  os << "H2O-CP98: ERROR! Wrong model values given.\n"
6119  << "Valid models are: 'CruzPol', 'CruzPolLine', 'CruzPolContinuum', and 'user'" << "\n";
6120  throw runtime_error(os.str());
6121  }
6122  out3 << "H2O-CP98: (model=" << model << ") parameter values in use:\n"
6123  << " CC = " << CC << "\n"
6124  << " CL = " << CL << "\n"
6125  << " CW = " << CW << "\n";
6126 
6127  const Index n_p = abs_p.nelem(); // Number of pressure levels
6128  const Index n_f = f_grid.nelem(); // Number of frequencies
6129 
6130  // Check that dimensions of abs_p, abs_t, and vmr agree:
6131  assert ( n_p==abs_t.nelem() );
6132  assert ( n_p==vmr.nelem() );
6133 
6134  // Check that dimensions of pxsec are consistent with n_f
6135  // and n_p. It should be [n_f,n_p]:
6136  assert ( n_f==pxsec.nrows() );
6137  assert ( n_p==pxsec.ncols() );
6138 
6139  // Loop pressure/temperature (pressure in [hPa] therefore the factor 0.01)
6140  for ( Index i=0; i<n_p; ++i )
6141  {
6142  // calculate pxsec only if VMR(H2O) > VMRCalcLimit
6143  if (vmr[i] > VMRCalcLimit)
6144  {
6145  // relative inverse temperature [1]
6146  Numeric theta = (300.0 / abs_t[i]);
6147  // H2O partial pressure [hPa]
6148  Numeric pwv = Pa_to_hPa * abs_p[i] * vmr[i];
6149  // dry air partial pressure [hPa]
6150  Numeric pda = (Pa_to_hPa * abs_p[i]) - pwv;
6151  // line strength
6152  Numeric TL = CL * 0.0109 * pwv * pow(theta,(Numeric)3.5)
6153  * exp(2.143*(1.0-theta));
6154  // line broadening parameter [GHz]
6155  Numeric gam = CW * 0.002784 *
6156  ( (pda * pow(theta,(Numeric)0.6))
6157  + (4.80 * pwv * pow(theta,(Numeric)1.1)) );
6158  // continuum term
6159  Numeric TC = CC * pwv * pow(theta, (Numeric)3.0) * 1.000e-7
6160  * ( (0.113 * pda) + (3.57 * pwv * pow(theta,(Numeric)7.5)) );
6161 
6162  // Loop over input frequency
6163  for ( Index s=0; s<n_f; ++s )
6164  {
6165  // input frequency in [GHz]
6166  Numeric ff = f_grid[s] * Hz_to_GHz;
6167  Numeric TSf = MPMLineShapeFunction(gam, 22.235080, ff);
6168  // pxsec = abs/vmr [1/m] (Cruz-Pol model in [Np/km])
6169  pxsec(s,i) += 4.1907e-5 * ff * ( (TL * TSf) + (ff * TC) ) / vmr[i];
6170  }
6171  }
6172  }
6173  return;
6174 }
6175 //
6176 // #################################################################################
6178 
6202  const Numeric Cin,
6203  const Numeric xin,
6204  const String& model,
6205  ConstVectorView f_grid,
6206  ConstVectorView abs_p,
6207  ConstVectorView abs_t,
6208  ConstVectorView vmr,
6209  const Verbosity& verbosity)
6210 {
6211  CREATE_OUT3;
6212 
6213  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
6214  // standard values for the Rosenkranz model (Radio Science, 33(4), 919, 1998):
6215  const Numeric Cs_PWR = 1.796e-33; // [1/m / (Hz²*Pa²)]
6216  const Numeric xs_PWR = 4.5; // [1]
6217  // standard values for the Cruz-Pol model (Radio Science, 33(5), 1319, 1998):
6218  const Numeric Cs_CP = 1.851e-33; // [1/m / (Hz²*Pa²)]
6219  const Numeric xs_CP = 7.5; // [1]
6220  // standard values for the MPM89 model (Int. J. Inf. and Millim. Waves, 10(6), 1989, 631):
6221  const Numeric Cs_MPM89 = 1.500e-33; // [1/m / (Hz²*Pa²)]
6222  const Numeric xs_MPM89 = 7.5; // [1]
6223  // standard values for the MPM87 model (Radio Science, 20(5), 1985, 1069):
6224  const Numeric Cs_MPM87 = 1.500e-33; // [1/m / (Hz²*Pa²)]
6225  const Numeric xs_MPM87 = 7.5; // [1]
6226  // ---------------------------------------------------------------------------------------
6227 
6228  // select the parameter set (!!model goes for values!!):
6229  Numeric C, x;
6230  if ( model == "Rosenkranz" )
6231  {
6232  C = Cs_PWR;
6233  x = xs_PWR;
6234  }
6235  else if ( model == "CruzPol" )
6236  {
6237  C = Cs_CP;
6238  x = xs_CP;
6239  }
6240  else if ( model == "MPM89" )
6241  {
6242  C = Cs_MPM89;
6243  x = xs_MPM89;
6244  }
6245  else if ( model == "MPM87" )
6246  {
6247  C = Cs_MPM87;
6248  x = xs_MPM87;
6249  }
6250  else if ( model == "user" )
6251  {
6252  C = Cin;
6253  x = xin;
6254  }
6255  else
6256  {
6257  ostringstream os;
6258  os << "H2O-SelfContStandardType: ERROR! Wrong model values given.\n"
6259  << "allowed models are: 'Rosenkranz', 'CruzPol', 'MPM89', 'MPM87', 'user'" << '\n';
6260  throw runtime_error(os.str());
6261  }
6262  out3 << "H2O-SelfContStandardType: (model=" << model << ") parameter values in use:\n"
6263  << " C_s = " << C << "\n"
6264  << " x_s = " << x << "\n";
6265 
6266 
6267 
6268  const Index n_p = abs_p.nelem(); // Number of pressure levels
6269  const Index n_f = f_grid.nelem(); // Number of frequencies
6270 
6271  // Check that dimensions of abs_p, abs_t, and vmr agree:
6272  assert ( n_p==abs_t.nelem() );
6273  assert ( n_p==vmr.nelem() );
6274 
6275  // Check that dimensions of pxsec are consistent with n_f
6276  // and n_p. It should be [n_f,n_p]:
6277  assert ( n_f==pxsec.nrows() );
6278  assert ( n_p==pxsec.ncols() );
6279 
6280  // Loop over pressure/temperature grid:
6281  for ( Index i=0; i<n_p; ++i )
6282  {
6283  // Dummy scalar holds everything except the quadratic frequency dependence.
6284  // The second vmr of H2O will be multiplied at the stage of absorption
6285  // calculation: abs = vmr * pxsec.
6286  Numeric dummy =
6287  C * pow( (Numeric)300./abs_t[i], x+(Numeric)3. )
6288  * pow( abs_p[i], (Numeric)2. ) * vmr[i];
6289 
6290  // Loop over frequency grid:
6291  for ( Index s=0; s<n_f; ++s )
6292  {
6293  pxsec(s,i) += dummy * pow( f_grid[s], (Numeric)2. );
6294  // cout << "pxsec(" << s << "," << i << "): " << pxsec(s,i) << "\n";
6295  }
6296  }
6297 }
6298 //
6299 // #################################################################################
6301 
6326  const Numeric Cin,
6327  const Numeric xin,
6328  const String& model,
6329  ConstVectorView f_grid,
6330  ConstVectorView abs_p,
6331  ConstVectorView abs_t,
6332  ConstVectorView vmr,
6333  const Verbosity& verbosity)
6334 {
6335  CREATE_OUT3;
6336 
6337  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
6338  // standard values for the Rosenkranz model (Radio Science, 33(4), 919, 1998):
6339  const Numeric Cf_PWR = 5.43e-35 ; // [1/m / (Hz²*Pa²)]
6340  const Numeric xf_PWR = 0.0; // [1]
6341  // standard values for the Cruz-Pol model (Radio Science, 33(5), 1319, 1998):
6342  const Numeric Cf_CP = 5.85e-35; // [1/m / (Hz²*Pa²)]
6343  const Numeric xf_CP = 0.0; // [1]
6344  // standard values for the MPM89 model (Int. J. Inf. and Millim. Waves, 10(6), 1989, 631):
6345  const Numeric Cf_MPM89 = 4.74e-35; // [1/m / (Hz²*Pa²)]
6346  const Numeric xf_MPM89 = 0.0; // [1]
6347  // standard values for the MPM87 model (Radio Science, 20(5), 1985, 1069):
6348  const Numeric Cf_MPM87 = 4.74e-35; // [1/m / (Hz²*Pa²)]
6349  const Numeric xf_MPM87 = 0.0; // [1]
6350  // ---------------------------------------------------------------------------------------
6351 
6352 
6353  // select the parameter set (!!model goes for values!!):
6354  Numeric C, x;
6355  if ( model == "Rosenkranz" )
6356  {
6357  C = Cf_PWR;
6358  x = xf_PWR;
6359  }
6360  else if ( model == "CruzPol" )
6361  {
6362  C = Cf_CP;
6363  x = xf_CP;
6364  }
6365  else if ( model == "MPM89" )
6366  {
6367  C = Cf_MPM89;
6368  x = xf_MPM89;
6369  }
6370  else if ( model == "MPM87" )
6371  {
6372  C = Cf_MPM87;
6373  x = xf_MPM87;
6374  }
6375  else if ( model == "user" )
6376  {
6377  C = Cin;
6378  x = xin;
6379  }
6380  else
6381  {
6382  ostringstream os;
6383  os << "H2O-ForeignContStandardType: ERROR! Wrong model values given.\n"
6384  << "allowed models are: 'Rosenkranz', 'CruzPol', 'MPM89', 'MPM87', 'user'" << '\n';
6385  throw runtime_error(os.str());
6386  }
6387  out3 << "H2O-ForeignContStandardType: (model=" << model << ") parameter values in use:\n"
6388  << " C_s = " << C << "\n"
6389  << " x_s = " << x << "\n";
6390 
6391  const Index n_p = abs_p.nelem(); // Number of pressure levels
6392  const Index n_f = f_grid.nelem(); // Number of frequencies
6393 
6394  // Check that dimensions of abs_p, abs_t, and vmr agree:
6395  assert ( n_p==abs_t.nelem() );
6396  assert ( n_p==vmr.nelem() );
6397 
6398  // Check that dimensions of pxsec are consistent with n_f
6399  // and n_p. It should be [n_f,n_p]:
6400  assert ( n_f==pxsec.nrows() );
6401  assert ( n_p==pxsec.ncols() );
6402 
6403  // Loop pressure/temperature:
6404  for ( Index i=0; i<n_p; ++i )
6405  {
6406  // Dry air partial pressure: p_dry := p_tot - p_h2o.
6407  Numeric pdry = abs_p[i] * (1.000e0-vmr[i]);
6408  // Dummy scalar holds everything except the quadratic frequency dependence.
6409  // The vmr of H2O will be multiplied at the stage of absorption
6410  // calculation: abs = vmr * pxsec.
6411  Numeric dummy = C * pow( (Numeric)300./abs_t[i], x+(Numeric)3. )
6412  * abs_p[i] * pdry;
6413 
6414  // Loop frequency:
6415  for ( Index s=0; s<n_f; ++s )
6416  {
6417  pxsec(s,i) += dummy * pow( f_grid[s], (Numeric)2. );
6418  // cout << "pxsec(" << s << "," << i << "): " << pxsec(s,i) << "\n";
6419  }
6420  }
6421 }
6422 //
6423 //
6424 // #################################################################################
6426 
6450  const Numeric Cin,
6451  const Numeric xin,
6452  const String& model,
6453  ConstVectorView f_grid,
6454  ConstVectorView abs_p,
6455  ConstVectorView abs_t,
6456  ConstVectorView vmr,
6457  const Verbosity& verbosity)
6458 {
6459  CREATE_OUT3;
6460 
6461  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
6462  // standard values for Q. Ma and R. H. Tipping, J. Chem. Phys., 117(23), 10581, 2002:
6463  // the Cf value is originally given in dB/km/kPa^2/GHz^2.0389. the conversion factor is
6464  // then 1.0283E-28 to get arts units. Additionally the Cf value is divided by 1.08 to
6465  // get the Cf for air.
6466  const Numeric Cf_MaTipping = 1.8590e-35; // [1/m / (Hz²*Pa²)]
6467  const Numeric xf_MaTipping = 4.6019; // [1]
6468  // ---------------------------------------------------------------------------------------
6469 
6470 
6471  // select the parameter set (!!model goes for values!!):
6472  Numeric C, x;
6473  if ( model == "MaTipping" )
6474  {
6475  C = Cf_MaTipping;
6476  x = xf_MaTipping;
6477  }
6478  else if ( model == "user" )
6479  {
6480  C = Cin;
6481  x = xin;
6482  }
6483  else
6484  {
6485  ostringstream os;
6486  os << "H2O-MaTipping_H2O_foreign_continuum: ERROR! Wrong model values given.\n"
6487  << "allowed models are: 'MaTipping', 'user'" << '\n';
6488  throw runtime_error(os.str());
6489  }
6490  out3 << "H2O-MaTipping_H2O_foreign_continuum: (model=" << model << ") parameter values in use:\n"
6491  << " C_s = " << C << "\n"
6492  << " x_s = " << x << "\n";
6493 
6494  const Index n_p = abs_p.nelem(); // Number of pressure levels
6495  const Index n_f = f_grid.nelem(); // Number of frequencies
6496 
6497  // Check that dimensions of abs_p, abs_t, and vmr agree:
6498  assert ( n_p==abs_t.nelem() );
6499  assert ( n_p==vmr.nelem() );
6500 
6501  // Check that dimensions of pxsec are consistent with n_f
6502  // and n_p. It should be [n_f,n_p]:
6503  assert ( n_f==pxsec.nrows() );
6504  assert ( n_p==pxsec.ncols() );
6505 
6506  // Loop pressure/temperature:
6507  for ( Index i=0; i<n_p; ++i )
6508  {
6509  // Dry air partial pressure: p_dry := p_tot - p_h2o.
6510  Numeric pdry = abs_p[i] * (1.000e0-vmr[i]);
6511  // Dummy scalar holds everything except the quadratic frequency dependence.
6512  // The vmr of H2O will be multiplied at the stage of absorption
6513  // calculation: abs = vmr * pxsec.
6514  Numeric dummy = C * pow( (Numeric)300./abs_t[i], x )
6515  * abs_p[i] * pdry;
6516 
6517  // Loop frequency:
6518  for ( Index s=0; s<n_f; ++s )
6519  {
6520  pxsec(s,i) += dummy * pow( f_grid[s], (Numeric)2.0389 );
6521  // cout << "pxsec(" << s << "," << i << "): " << pxsec(s,i) << "\n";
6522  }
6523  }
6524 }
6525 //
6526 // #################################################################################
6527 
6528 
6529 
6530 // =================================================================================
6531 
6532 
6534  const Numeric /* V2A */,
6535  const Numeric DVA,
6536  ConstVectorView A,
6537  const Numeric VI)
6538 {
6539 
6540 // ----------------------------------------------------------------------
6541  // THIS SUBROUTINE INTERPOLATES THE A ARRAY STORED
6542  // FROM V1A TO V2A IN INCREMENTS OF DVA INTO XINT
6543 // ----------------------------------------------------------------------
6544 
6545  const Numeric ONEPL = 1.001; // original value given in F77 code
6546  // FIXME const Numeric ONEMI = 0.999; // original value given in F77 code
6547 
6548  //const Numeric ONEPL = 0.001; // modified value for C/C++ code
6549 
6550  Numeric RECDVA = 1.00e0/DVA;
6551 
6552  int J = (int) ((VI-V1A)*RECDVA + ONEPL) ;
6553  Numeric VJ = V1A + DVA * (Numeric)(J-1);
6554  Numeric P = RECDVA * (VI-VJ);
6555  Numeric C = (3.00e0-2.00e0*P) * P * P;
6556  Numeric B = 0.500e0 * P * (1.00e0-P);
6557  Numeric B1 = B * (1.00e0-P);
6558  Numeric B2 = B * P;
6559 
6560  Numeric xint = -A[J-1] * B1 +
6561  A[J] * (1.00e0-C+B2) +
6562  A[J+1] * (C+B1) -
6563  A[J+2] * B2;
6564 
6565  /*
6566  cout << (J-1) << " <-> " << (J+2)
6567  << ", V=" << VI << ", VJ=" << VJ << "\n";
6568  cout << "xint=" << xint << " " << A[J-1] << " " << A[J] << " " << A[J+1] << " " << A[J+2] << "\n";
6569  */
6570 
6571  return xint;
6572 }
6573 
6575  const Numeric /* V2A */,
6576  const Numeric DVA,
6577  const Numeric A[],
6578  const Numeric VI)
6579 {
6580 
6581 // ----------------------------------------------------------------------
6582  // THIS SUBROUTINE INTERPOLATES THE A ARRAY STORED
6583  // FROM V1A TO V2A IN INCREMENTS OF DVA INTO XINT
6584 // ----------------------------------------------------------------------
6585 
6586  const Numeric ONEPL = 1.001; // original value given in F77 code
6587  // FIXME const Numeric ONEMI = 0.999; // original value given in F77 code
6588 
6589  //const Numeric ONEPL = 0.001; // modified value for C/C++ code
6590 
6591  Numeric RECDVA = 1.00e0/DVA;
6592 
6593  int J = (int) ((VI-V1A)*RECDVA + ONEPL) ;
6594  Numeric VJ = V1A + DVA * (Numeric)(J-1);
6595  Numeric P = RECDVA * (VI-VJ);
6596  Numeric C = (3.00e0-2.00e0*P) * P * P;
6597  Numeric B = 0.500e0 * P * (1.00e0-P);
6598  Numeric B1 = B * (1.00e0-P);
6599  Numeric B2 = B * P;
6600 
6601  Numeric xint = -A[J-1] * B1 +
6602  A[J] * (1.00e0-C+B2) +
6603  A[J+1] * (C+B1) -
6604  A[J+2] * B2;
6605 
6606  /*
6607  cout << (J-1) << " <-> " << (J+2)
6608  << ", V=" << VI << ", VJ=" << VJ << "\n";
6609  cout << "xint=" << xint << " " << A[J-1] << " " << A[J] << " " << A[J+1] << " " << A[J+2] << "\n";
6610  */
6611 
6612  return xint;
6613 }
6614 
6615 // =================================================================================
6616 
6618  const Numeric XKT)
6619 {
6620 // ---------------------------------------------------------------------- B18060
6621 // LAST MODIFICATION: 12 AUGUST 1991 B17940
6622 // B17950
6623 // IMPLEMENTATION: R.D. WORSHAM B17960
6624 // B17970
6625 // ALGORITHM REVISIONS: S.A. CLOUGH B17980
6626 // R.D. WORSHAM B17990
6627 // J.L. MONCET B18000
6628 // B18010
6629 // B18020
6630 // ATMOSPHERIC AND ENVIRONMENTAL RESEARCH INC. B18030
6631 // 840 MEMORIAL DRIVE, CAMBRIDGE, MA 02139 B18040
6632 // B18050
6633 // B18070
6634 // WORK SUPPORTED BY: THE ARM PROGRAM B18080
6635 // OFFICE OF ENERGY RESEARCH B18090
6636 // DEPARTMENT OF ENERGY B18100
6637 // B18110
6638 // B18120
6639 // SOURCE OF ORIGINAL ROUTINE: AFGL LINE-BY-LINE MODEL B18130
6640 // B18140
6641 // FASCOD3 B18150
6642 // B18160
6643 // ---------------------------------------------------------------------- B18060
6644 // B18170
6645 // IN THE SMALL XVIOKT REGION 0.5 IS REQUIRED
6646 
6647  Numeric XVI = VI;
6648  Numeric RADFN = 0.00e0;
6649 
6650  if (XKT > 0.0)
6651  {
6652  Numeric XVIOKT = XVI/XKT;
6653 
6654  if (XVIOKT <= 0.01e0)
6655  {
6656  RADFN = 0.500e0 * XVIOKT * XVI;
6657  }
6658  else if (XVIOKT <= 10.0e0)
6659  {
6660  Numeric EXPVKT = exp(-XVIOKT);
6661  RADFN = XVI * (1.00e0-EXPVKT) / (1.00e0+EXPVKT);
6662  }
6663  else
6664  {
6665  RADFN = XVI;
6666  }
6667  }
6668  else
6669  {
6670  RADFN = XVI;
6671  }
6672 
6673  return RADFN;
6674 }
6675 
6676 // =================================================================================
6677 
6679 
6704  const Numeric Cin,
6705  const String& model,
6706  ConstVectorView f_grid,
6707  ConstVectorView abs_p,
6708  ConstVectorView abs_t,
6709  ConstVectorView vmr,
6710  const Verbosity& verbosity)
6711 {
6712  CREATE_OUT3;
6713 
6714  // check the model name about consistency
6715  if ((model != "user") && (model != "CKD222"))
6716  {
6717  ostringstream os;
6718  os << "!!ERROR!!\n"
6719  << "CKDv2.2.2 H2O self continuum:\n"
6720  << "INPUT model name is: " << model << ".\n"
6721  << "VALID model names are user and CKD222\n";
6722  throw runtime_error(os.str());
6723  }
6724 
6725 
6726  // scaling factor of the self H2O cont. absorption
6727  Numeric ScalingFac = 1.0000e0;
6728  if ( model == "user" )
6729  {
6730  ScalingFac = Cin; // input scaling factor of calculated absorption
6731  }
6732 
6733 
6734  const Index n_p = abs_p.nelem(); // Number of pressure levels
6735  const Index n_f = f_grid.nelem(); // Number of frequencies
6736 
6737 
6738  // Check that dimensions of abs_p, abs_t, and vmr agree:
6739  assert ( n_p==abs_t.nelem() );
6740  assert ( n_p==vmr.nelem() );
6741 
6742  // Check that dimensions of pxsec are consistent with n_f
6743  // and n_p. It should be [n_f,n_p]:
6744  assert ( n_f==pxsec.nrows() );
6745  assert ( n_p==pxsec.ncols() );
6746 
6747 
6748  // ************************** CKD stuff ************************************
6749 
6750  const Numeric xLosmt = 2.686763e19; // [molecules/cm^3]
6751  // FIXME const Numeric T1 = 273.0e0;
6752  const Numeric TO = 296.0e0;
6753  const Numeric PO = 1013.0e0;
6754 
6755  // CKD2.2.2 specific self continuum correction function parameters
6756  const Numeric ALPHA2 = 200.000 * 200.000;
6757  const Numeric ALPHS2 = 120.000 * 120.000;
6758  const Numeric BETAS = 5.000e-06;
6759  const Numeric V0S = 1310.000;
6760  const Numeric FACTRS = 0.150;
6761 
6762  // These are self-continuum modification factors from 700-1200 cm-1
6763  const Numeric XFAC[51] = {
6764  1.00000,1.01792,1.03767,1.05749,1.07730,1.09708,
6765  1.10489,1.11268,1.12047,1.12822,1.13597,1.14367,
6766  1.15135,1.15904,1.16669,1.17431,1.18786,1.20134,
6767  1.21479,1.22821,1.24158,1.26580,1.28991,1.28295,
6768  1.27600,1.26896,1.25550,1.24213,1.22879,1.21560,
6769  1.20230,1.18162,1.16112,1.14063,1.12016,1.10195,
6770  1.09207,1.08622,1.08105,1.07765,1.07398,1.06620,
6771  1.05791,1.04905,1.03976,1.02981,1.00985,1.00000,
6772  1.00000,1.00000,1.00000};
6773 
6774  // wavenumber range where CKD H2O self continuum is valid
6775  const Numeric VABS_min = SL260_ckd_0_v1; // [cm^-1]
6776  const Numeric VABS_max = SL260_ckd_0_v2; // [cm^-1]
6777 
6778 
6779  // It is assumed here that f_grid is monotonically increasing with index!
6780  // In future change this return into a change of the loop over
6781  // the frequency f_grid. n_f_new < n_f
6782  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
6783  Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
6784  if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
6785  (V2ABS < VABS_min) || (V2ABS > VABS_max) )
6786  {
6787  out3 << "WARNING:\n"
6788  << " CKD2.2.2 H2O self continuum:\n"
6789  << " input frequency vector exceeds range of model validity\n"
6790  << " " << SL296_ckd_0_v1 << "<->" << SL296_ckd_0_v2 << "cm^-1\n";
6791  }
6792 
6793 
6794  // ------------------- subroutine SL296/SL260 ----------------------------
6795 
6797  {
6798  ostringstream os;
6799  os << "!!ERROR!!\n"
6800  << "CKD2.2.2 H2O self continuum:\n"
6801  << "parameter V1 not the same for different ref. temperatures.\n";
6802  throw runtime_error(os.str());
6803  }
6805  {
6806  ostringstream os;
6807  os << "!!ERROR!!\n"
6808  << "CKD2.2.2 H2O self continuum:\n"
6809  << "parameter V2 not the same for different ref. temperatures.\n";
6810  throw runtime_error(os.str());
6811  }
6813  {
6814  ostringstream os;
6815  os << "!!ERROR!!\n"
6816  << "CKD2.2.2 H2O self continuum:\n"
6817  << "parameter DV not the same for different ref. temperatures.\n";
6818  throw runtime_error(os.str());
6819  }
6821  {
6822  ostringstream os;
6823  os << "!!ERROR!!\n"
6824  << "CKD2.2.2 H2O self continuum:\n"
6825  << "parameter NPT not the same for different ref. temperatures.\n";
6826  throw runtime_error(os.str());
6827  }
6828 
6829  // retrieve the appropriate array sequence of the self continuum
6830  // arrays of the CKD model.
6831  Numeric DVC = SL296_ckd_0_dv;
6832  Numeric V1C = V1ABS - DVC;
6833  Numeric V2C = V2ABS + DVC;
6834 
6835  int I1 = (int) ((V1C-SL296_ckd_0_v1) / SL296_ckd_0_dv);
6836  if (V1C < SL296_ckd_0_v1) I1 = -1;
6837  V1C = SL296_ckd_0_v1 + (SL296_ckd_0_dv * (Numeric)I1);
6838 
6839  int I2 = (int) ((V2C-SL296_ckd_0_v1) / SL296_ckd_0_dv);
6840 
6841  int NPTC = I2-I1+3;
6842  if (NPTC > SL296_ckd_0_npt) NPTC = SL296_ckd_0_npt+1;
6843 
6844  V2C = V1C + SL296_ckd_0_dv * (Numeric)(NPTC-1);
6845 
6846  if (NPTC < 1)
6847  {
6848  out3 << "WARNING:\n"
6849  << " CKD2.2.2 H2O self continuum:\n"
6850  << " no elements of internal continuum coefficients could be found for the\n"
6851  << " input frequency range.\n"
6852  << " Leave the function without calculating the absorption.";
6853  return;
6854  }
6855 
6856  Numeric SH2OT0[NPTC+addF77fields]; // [cm^3/molecules]
6857  Numeric SH2OT1[NPTC+addF77fields]; // [cm^3/molecules]
6858 
6859  for (Index J = 1 ; J <= NPTC ; ++J)
6860  {
6861  Index I = I1+J;
6862  if ( (I < 1) || (I > SL296_ckd_0_npt) )
6863  {
6864  SH2OT0[J] = 0.0e0; // at T=296 K
6865  SH2OT1[J] = 0.0e0; // at T=260 K
6866  }
6867  else
6868  {
6869  SH2OT0[J] = SL296_ckd_0[I]; // at T=296 K
6870  SH2OT1[J] = SL260_ckd_0[I]; // at T=260 K
6871  }
6872  }
6873 
6874  // ------------------- subroutine SL296/SL260 ----------------------------
6875 
6876  Numeric SFAC = 1.00e0;
6877  Numeric VS2 = 0.00e0;
6878  // FIXME Numeric VS4 = 0.00e0;
6879 
6880  // Loop pressure/temperature:
6881  for ( Index i = 0 ; i < n_p ; ++i )
6882  {
6883 
6884  // atmospheric state parameters
6885  Numeric Tave = abs_t[i]; // [K]
6886  Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
6887  Numeric Patm = Pave/PO; // [1]
6888  Numeric vmrh2o = vmr[i]; // [1]
6889  // FIXME Numeric Ph2o = Patm * vmrh2o; // [1]
6890  // second vmr in abs_coefCalc multiplied
6891  Numeric Rh2o = Patm * (TO/Tave); // [1]
6892  Numeric Tfac = (Tave-TO)/(260.0-TO); // [1]
6893  Numeric WTOT = xLosmt * (Pave/1.013000e3) * (2.7300e2/Tave); // [molecules/cm^2]
6894  Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
6895  Numeric XKT = Tave / 1.4387752e0; // = (T*k_B)/(h*c)
6896 
6897  // Molecular cross section calculated by CKD.
6898  // The cross sectionis calculated on the predefined
6899  // CKD wavenumber grid.
6900  Numeric k[NPTC+addF77fields]; // [1/cm]
6901  k[0] = 0.00e0; // not used array field
6902  for (Index J = 1 ; J <= NPTC ; ++J)
6903  {
6904  Numeric VJ = V1C + (DVC * (Numeric)(J-1));
6905  Numeric SH2O = 0.0e0;
6906  if (SH2OT0[J] > 0.0e0)
6907  {
6908  SH2O = SH2OT0[J] * pow( (SH2OT1[J]/SH2OT0[J]), Tfac );
6909  SFAC = 1.00e0;
6910 
6911  if ( (VJ >= 700.0e0) && (VJ <= 1200.0e0) )
6912  {
6913  int JFAC = (int)((VJ - 700.0e0)/10.0e0 + 0.00001e0);
6914  if ( (JFAC >= 0) && (JFAC <= 50) )
6915  SFAC = XFAC[JFAC];
6916  }
6917 
6918  // ---------------------------------------------------------
6919  // Correction to self continuum (1 SEPT 85); factor of
6920  // 0.78 at 1000 and .......
6921 
6922  VS2 = (VJ-V0S) * (VJ-V0S);
6923 
6924  SFAC = SFAC *
6925  ( 1.000e0 + 0.3000e0 * (1.000e4 / ((VJ*VJ) + 1.000e4)) ) *
6926  ( 1.000e0 - 0.2333e0 * (ALPHA2 / ((VJ-1050.000e0)*(VJ-1050.000e0) + ALPHA2)) ) *
6927  ( 1.000e0 - FACTRS * (ALPHS2 / (VS2+(BETAS*VS2*VS2)+ALPHS2)) );
6928 
6929  SH2O = SFAC * SH2O;
6930  }
6931 
6932  // CKD cross section with radiative field [1/cm]
6933  // the VMRH2O will be multiplied in abs_coefCalc, hence Rh2o does not contain
6934  // VMRH2O as multiplicative term
6935  k[J] = W1 * Rh2o * (SH2O*1.000e-20) * RADFN_FUN(VJ,XKT); // [1]
6936 
6937  }
6938 
6939 
6940  // Loop input frequency array. The previously calculated cross section
6941  // has therefore to be interpolated on the input frequencies.
6942  for ( Index s = 0 ; s < n_f ; ++s )
6943  {
6944  // calculate the associated wave number (= 1/wavelength)
6945  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
6946  if ( (V >= 0.000e0) && (V < SL296_ckd_0_v2) )
6947  {
6948  // arts cross section [1/m]
6949  // interpolate the k vector on the f_grid grid
6950  // The factor 100 comes from the conversion from 1/cm to 1/m for
6951  // the absorption coefficient
6952  pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
6953  }
6954  }
6955  }
6956 
6957 }
6958 
6959 
6960 
6961 // =================================================================================
6962 
6964 
6989  const Numeric Cin,
6990  const String& model,
6991  ConstVectorView f_grid,
6992  ConstVectorView abs_p,
6993  ConstVectorView abs_t,
6994  ConstVectorView vmr,
6995  const Verbosity& verbosity)
6996 {
6997  CREATE_OUT3;
6998 
6999  // check the model name about consistency
7000  if ((model != "user") && (model != "CKD222"))
7001  {
7002  ostringstream os;
7003  os << "!!ERROR!!\n"
7004  << "CKDv2.2.2 H2O foreign continuum:\n"
7005  << "INPUT model name is: " << model << ".\n"
7006  << "VALID model names are user and CKD222\n";
7007  throw runtime_error(os.str());
7008  }
7009 
7010 
7011  // scaling factor of the foreign H2O cont. absorption
7012  Numeric ScalingFac = 1.0000e0;
7013  if ( model == "user" )
7014  {
7015  ScalingFac = Cin; // input scaling factor of calculated absorption
7016  }
7017 
7018 
7019  const Index n_p = abs_p.nelem(); // Number of pressure levels
7020  const Index n_f = f_grid.nelem(); // Number of frequencies
7021 
7022 
7023  // Check that dimensions of abs_p, abs_t, and vmr agree:
7024  assert ( n_p==abs_t.nelem() );
7025  assert ( n_p==vmr.nelem() );
7026 
7027  // Check that dimensions of pxsec are consistent with n_f
7028  // and n_p. It should be [n_f,n_p]:
7029  assert ( n_f==pxsec.nrows() );
7030  assert ( n_p==pxsec.ncols() );
7031 
7032 
7033  // ************************** CKD stuff ************************************
7034 
7035  const Numeric xLosmt = 2.686763e19; // [molecules/cm^3]
7036  const Numeric T1 = 273.000e0;
7037  const Numeric TO = 296.000e0;
7038  const Numeric PO = 1013.000e0;
7039 
7040  // CKD2.2.2 foreign H2O continuum correction function parameters
7041  const Numeric HWSQF = 330.000e0 * 330.000e0;
7042  const Numeric BETAF = 8.000e-11;
7043  const Numeric V0F = 1130.000e0;
7044  const Numeric FACTRF = 0.970e0;
7045 
7046  const Numeric V0F2 = 1900.000e0;
7047  const Numeric HWSQF2 = 150.000e0 * 150.000e0;
7048  const Numeric BETA2 = 3.000e-6;
7049 
7050  // wavenumber range where CKD H2O foreign continuum is valid
7051  const Numeric VABS_min = FH2O_ckd_0_v1; // [cm^-1]
7052  const Numeric VABS_max = FH2O_ckd_0_v2; // [cm^-1]
7053 
7054  // It is assumed here that f_grid is monotonically increasing with index!
7055  // In future change this return into a change of the loop over
7056  // the frequency f_grid. n_f_new < n_f
7057  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
7058  Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
7059  if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
7060  (V2ABS < VABS_min) || (V2ABS > VABS_max) )
7061  {
7062  out3 << "WARNING:\n"
7063  << " CKD2.2.2 H2O foreign continuum:\n"
7064  << " input frequency vector exceeds range of model validity\n"
7065  << " " << FH2O_ckd_0_v1 << "<->" << FH2O_ckd_0_v2 << "cm^-1\n";
7066  }
7067 
7068 
7069  // ---------------------- subroutine FRN296 ------------------------------
7070 
7071  // retrieve the appropriate array sequence of the foreign continuum
7072  // arrays of the CKD model.
7073  Numeric DVC = FH2O_ckd_0_dv;
7074  Numeric V1C = V1ABS - DVC;
7075  Numeric V2C = V2ABS + DVC;
7076 
7077  int I1 = (int) ((V1C-FH2O_ckd_0_v1) / FH2O_ckd_0_dv);
7078  if (V1C < FH2O_ckd_0_v1) I1 = -1;
7079  V1C = FH2O_ckd_0_v1 + (FH2O_ckd_0_dv * (Numeric)I1);
7080 
7081  int I2 = (int) ((V2C-FH2O_ckd_0_v1) / FH2O_ckd_0_dv);
7082 
7083  int NPTC = I2-I1+3;
7084  if (NPTC > FH2O_ckd_0_npt) NPTC = FH2O_ckd_0_npt+1;
7085 
7086  V2C = V1C + FH2O_ckd_0_dv * (Numeric)(NPTC-1);
7087 
7088  if (NPTC < 1)
7089  {
7090  out3 << "WARNING:\n"
7091  << " CKD2.2.2 H2O foreign continuum:\n"
7092  << " no elements of internal continuum coefficients could be found for the\n"
7093  << " input frequency range.\n"
7094  << " Leave the function without calculating the absorption.";
7095  return;
7096  }
7097 
7098  Numeric FH2OT0[NPTC+addF77fields]; // [cm^3/molecules]
7099 
7100  for (Index J = 1 ; J <= NPTC ; ++J)
7101  {
7102  Index I = I1+J;
7103  if ( (I < 1) || (I > FH2O_ckd_0_npt) )
7104  {
7105  FH2OT0[J] = 0.0e0;
7106  }
7107  else
7108  {
7109  FH2OT0[J] = FH2O_ckd_0[I];
7110  }
7111  }
7112 
7113  // ---------------------- subroutine FRN296 ------------------------------
7114 
7115  Numeric VF2 = 0.000e0;
7116  Numeric VF4 = 0.000e0;
7117  Numeric VF6 = 0.000e0;
7118  Numeric FSCAL = 0.000e0;
7119  Numeric FH2O = 0.000e0;
7120 
7121  // Loop pressure/temperature:
7122  for ( Index i = 0 ; i < n_p ; ++i )
7123  {
7124 
7125  // atmospheric state parameters
7126  Numeric Tave = abs_t[i]; // [K]
7127  Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
7128  Numeric vmrh2o = vmr[i]; // [1]
7129  // FIXME Numeric ph2o = vmrh2o * Pave; // [hPa]
7130  Numeric PFRGN = (Pave/PO) * (1.00000e0 - vmrh2o); // dry air pressure [hPa]
7131  Numeric RFRGN = PFRGN * (TO/Tave); // [hPa]
7132  Numeric WTOT = xLosmt * (Pave/PO) * (T1/Tave); // [molecules/cm^2]
7133  // FIXME Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
7134  Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
7135 
7136  // Molecular cross section calculated by CKD.
7137  // The cross sectionis calculated on the predefined
7138  // CKD wavenumber grid.
7139  Numeric k[NPTC+addF77fields]; // [1/cm]
7140  k[0] = 0.00e0; // not used array field
7141  for (Index J = 1 ; J <= NPTC ; ++J)
7142  {
7143  Numeric VJ = V1C + (DVC * (Numeric)(J-1));
7144 
7145  // CORRECTION TO FOREIGN CONTINUUM
7146  VF2 = (VJ-V0F) * (VJ-V0F);
7147  VF6 = VF2 * VF2 * VF2;
7148  FSCAL = (1.000e0 - FACTRF*(HWSQF/(VF2+(BETAF*VF6)+HWSQF)));
7149 
7150  VF2 = (VJ-V0F2) * (VJ-V0F2);
7151  VF4 = VF2 * VF2;
7152  FSCAL = FSCAL * (1.000e0 - 0.600e0*(HWSQF2/(VF2 + BETA2*VF4 + HWSQF2)));
7153 
7154  FH2O = FH2OT0[J] * FSCAL;
7155 
7156  // CKD cross section with radiative field [1/cm]
7157  // The VMRH2O will be multiplied in abs_coefCalc, hence WTOT and not W1
7158  // as multiplicative term
7159  k[J] = WTOT * RFRGN * (FH2O*1.000e-20) * RADFN_FUN(VJ,XKT);
7160 
7161  }
7162 
7163 
7164  // Loop input frequency array. The previously calculated cross section
7165  // has therefore to be interpolated on the input frequencies.
7166  for ( Index s = 0 ; s < n_f ; ++s )
7167  {
7168  // calculate the associated wave number (= 1/wavelength)
7169  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
7170  if ( (V > 0.000e0) && (V < VABS_max) )
7171  {
7172  // arts CKD2.2.2 foreign H2O continuum cross section [1/m]
7173  // interpolate the k vector on the f_grid grid
7174  // The factor 100 comes from the conversion from (1/cm) to (1/m)
7175  // of the abs. coeff.
7176  pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
7177  }
7178  }
7179  }
7180 
7181 }
7182 
7183 
7184 // =================================================================================
7185 
7187 
7212  const Numeric Cin,
7213  const String& model,
7214  ConstVectorView f_grid,
7215  ConstVectorView abs_p,
7216  ConstVectorView abs_t,
7217  ConstVectorView vmr,
7218  const Verbosity& verbosity)
7219 {
7220  CREATE_OUT3;
7221 
7222  // check the model name about consistency
7223  if ((model != "user") && (model != "CKD242"))
7224  {
7225  ostringstream os;
7226  os << "!!ERROR!!\n"
7227  << "CKDv2.4.2 H2O self continuum:\n"
7228  << "INPUT model name is: " << model << ".\n"
7229  << "VALID model names are user and CKD242\n";
7230  throw runtime_error(os.str());
7231  }
7232 
7233 
7234  // scaling factor of the self H2O cont. absorption
7235  Numeric ScalingFac = 1.0000e0;
7236  if ( model == "user" )
7237  {
7238  ScalingFac = Cin; // input scaling factor of calculated absorption
7239  }
7240 
7241 
7242  const Index n_p = abs_p.nelem(); // Number of pressure levels
7243  const Index n_f = f_grid.nelem(); // Number of frequencies
7244 
7245 
7246  // Check that dimensions of abs_p, abs_t, and vmr agree:
7247  assert ( n_p==abs_t.nelem() );
7248  assert ( n_p==vmr.nelem() );
7249 
7250  // Check that dimensions of pxsec are consistent with n_f
7251  // and n_p. It should be [n_f,n_p]:
7252  assert ( n_f==pxsec.nrows() );
7253  assert ( n_p==pxsec.ncols() );
7254 
7255 
7256  // ************************** CKD stuff ************************************
7257 
7258  const Numeric xLosmt = 2.686763e19; // [molecules/cm^3]
7259  // FIXME const Numeric T1 = 273.0e0;
7260  const Numeric TO = 296.0e0;
7261  const Numeric PO = 1013.0e0;
7262 
7263  // CKD2.4.2 specific correction functions
7264  const Numeric V0S1 = 0.000e+00;
7265  const Numeric HWSQ1 = (1.000e+02 * 1.000e+02);
7266  const Numeric BETAS1 = 1.000e-04;
7267  const Numeric FACTRS1 = 0.688e+00;
7268 
7269  const Numeric V0S2 = 1.050e+03;
7270  const Numeric HWSQ2 = (2.000e+02 * 2.000e+02);
7271  const Numeric FACTRS2 = -0.2333e+00;
7272 
7273  const Numeric V0S3 = 1.310e+03;
7274  const Numeric HWSQ3 = (1.200e+02 * 1.200e+02);
7275  const Numeric BETAS3 = 5.000e-06;
7276  const Numeric FACTRS3 = -0.150e+00;
7277 
7278  const Numeric XFAC[51] = {
7279  1.00000,1.01792,1.03767,1.05749,1.07730,1.09708,
7280  1.10489,1.11268,1.12047,1.12822,1.13597,1.14367,
7281  1.15135,1.15904,1.16669,1.17431,1.18786,1.20134,
7282  1.21479,1.22821,1.24158,1.26580,1.28991,1.28295,
7283  1.27600,1.26896,1.25550,1.24213,1.22879,1.21560,
7284  1.20230,1.18162,1.16112,1.14063,1.12016,1.10195,
7285  1.09207,1.08622,1.08105,1.07765,1.07398,1.06620,
7286  1.05791,1.04905,1.03976,1.02981,1.00985,1.00000,
7287  1.00000,1.00000,1.00000};
7288 
7289  // wavenumber range where CKD H2O self continuum is valid
7290  const Numeric VABS_min = SL260_ckd_0_v1; // [cm^-1]
7291  const Numeric VABS_max = SL260_ckd_0_v2; // [cm^-1]
7292 
7293 
7294  // It is assumed here that f_grid is monotonically increasing with index!
7295  // In future change this return into a change of the loop over
7296  // the frequency f_grid. n_f_new < n_f
7297  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
7298  Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
7299  if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
7300  (V2ABS < VABS_min) || (V2ABS > VABS_max) )
7301  {
7302  out3 << "WARNING:\n"
7303  << " CKD2.4.2 H2O self continuum:\n"
7304  << " input frequency vector exceeds range of model validity\n"
7305  << " " << SL296_ckd_0_v1 << "<->" << SL296_ckd_0_v2 << "cm^-1\n";
7306  }
7307 
7308 
7309  // ------------------- subroutine SL296/SL260 ----------------------------
7310 
7312  {
7313  ostringstream os;
7314  os << "!!ERROR!!\n"
7315  << "CKD2.4.2 H2O self continuum:\n"
7316  << "parameter V1 not the same for different ref. temperatures.\n";
7317  throw runtime_error(os.str());
7318  }
7320  {
7321  ostringstream os;
7322  os << "!!ERROR!!\n"
7323  << "CKD2.4.2 H2O self continuum:\n"
7324  << "parameter V2 not the same for different ref. temperatures.\n";
7325  throw runtime_error(os.str());
7326  }
7328  {
7329  ostringstream os;
7330  os << "!!ERROR!!\n"
7331  << "CKD2.4.2 H2O self continuum:\n"
7332  << "parameter DV not the same for different ref. temperatures.\n";
7333  throw runtime_error(os.str());
7334  }
7336  {
7337  ostringstream os;
7338  os << "!!ERROR!!\n"
7339  << "CKD2.4.2 H2O self continuum:\n"
7340  << "parameter NPT not the same for different ref. temperatures.\n";
7341  throw runtime_error(os.str());
7342  }
7343 
7344  // retrieve the appropriate array sequence of the self continuum
7345  // arrays of the CKD model.
7346  Numeric DVC = SL296_ckd_0_dv;
7347  Numeric V1C = V1ABS - DVC;
7348  Numeric V2C = V2ABS + DVC;
7349 
7350  int I1 = (int) ((V1C-SL296_ckd_0_v1) / SL296_ckd_0_dv);
7351  if (V1C < SL296_ckd_0_v1) I1 = -1;
7352  V1C = SL296_ckd_0_v1 + (SL296_ckd_0_dv * (Numeric)I1);
7353 
7354  int I2 = (int) ((V2C-SL296_ckd_0_v1) / SL296_ckd_0_dv);
7355 
7356  int NPTC = I2-I1+3;
7357  if (NPTC > SL296_ckd_0_npt) NPTC = SL296_ckd_0_npt+1;
7358 
7359  V2C = V1C + SL296_ckd_0_dv * (Numeric)(NPTC-1);
7360 
7361  if (NPTC < 1)
7362  {
7363  out3 << "WARNING:\n"
7364  << " CKDv2.4.2 H2O self continuum:\n"
7365  << " no elements of internal continuum coefficients could be found for the\n"
7366  << " input frequency range.\n"
7367  << " Leave the function without calculating the absorption.";
7368  return;
7369  }
7370 
7371  Numeric SH2OT0[NPTC+addF77fields]; // [cm^3/molecules]
7372  Numeric SH2OT1[NPTC+addF77fields]; // [cm^3/molecules]
7373 
7374  for (Index J = 1 ; J <= NPTC ; ++J)
7375  {
7376  Index I = I1+J;
7377  if ( (I < 1) || (I > SL296_ckd_0_npt) )
7378  {
7379  SH2OT0[J] = 0.0e0; // at T=296 K
7380  SH2OT1[J] = 0.0e0; // at T=260 K
7381  }
7382  else
7383  {
7384  SH2OT0[J] = SL296_ckd_0[I]; // at T=296 K
7385  SH2OT1[J] = SL260_ckd_0[I]; // at T=260 K
7386  }
7387  }
7388 
7389  // ------------------- subroutine SL296/SL260 ----------------------------
7390 
7391  Numeric SFAC = 1.00e0;
7392  Numeric VS2 = 0.00e0;
7393  Numeric VS4 = 0.00e0;
7394 
7395  // Loop pressure/temperature:
7396  for ( Index i = 0 ; i < n_p ; ++i )
7397  {
7398 
7399  // atmospheric state parameters
7400  Numeric Tave = abs_t[i]; // [K]
7401  Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
7402  Numeric Patm = Pave/PO; // [1]
7403  Numeric vmrh2o = vmr[i]; // [1]
7404  // FIXME Numeric Ph2o = Patm * vmrh2o; // [1]
7405  // second vmr in abs_coefCalc multiplied
7406  Numeric Rh2o = Patm * (TO/Tave); // [1]
7407  Numeric Tfac = (Tave-TO)/(260.0-TO); // [1]
7408  Numeric WTOT = xLosmt * (Pave/1.013000e3) * (2.7300e2/Tave); // [molecules/cm^2]
7409  Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
7410  Numeric XKT = Tave / 1.4387752e0; // = (T*k_B)/(h*c)
7411 
7412  // Molecular cross section calculated by CKD.
7413  // The cross sectionis calculated on the predefined
7414  // CKD wavenumber grid.
7415  Numeric k[NPTC+addF77fields]; // [1/cm]
7416  k[0] = 0.00e0; // not used array field
7417  for (Index J = 1 ; J <= NPTC ; ++J)
7418  {
7419  Numeric VJ = V1C + (DVC * (Numeric)(J-1));
7420  Numeric SH2O = 0.0e0;
7421  if (SH2OT0[J] > 0.0e0)
7422  {
7423  SH2O = SH2OT0[J] * pow( (SH2OT1[J]/SH2OT0[J]), Tfac );
7424  SFAC = 1.00e0;
7425 
7426  if ( (VJ >= 700.0e0) && (VJ <= 1200.0e0) )
7427  {
7428  int JFAC = (int)((VJ - 700.0e0)/10.0e0 + 0.00001e0);
7429  if ( (JFAC >= 0) && (JFAC <= 50) )
7430  SFAC = XFAC[JFAC];
7431  }
7432 
7433  // ---------------------------------------------------------
7434  // Correction to self continuum (1 SEPT 85); factor of
7435  // 0.78 at 1000 and .......
7436 
7437  VS2 = (VJ-V0S1) * (VJ-V0S1);
7438  VS4 = VS2*VS2;
7439  SFAC = SFAC *
7440  (1.000e0 + FACTRS1*(HWSQ1/((VJ*VJ)+(BETAS1*VS4)+HWSQ1)));
7441 
7442  VS2 = (VJ-V0S2) * (VJ-V0S2);
7443  SFAC = SFAC *
7444  (1.000e0 + FACTRS2*(HWSQ2/(VS2+HWSQ2)));
7445 
7446  VS2 = (VJ-V0S3) * (VJ-V0S3);
7447  VS4 = VS2*VS2;
7448  SFAC = SFAC *
7449  (1.000e0 + FACTRS3*(HWSQ3/(VS2+(BETAS3*VS4)+HWSQ3)));
7450 
7451  SH2O = SFAC * SH2O;
7452  }
7453 
7454  // CKD cross section with radiative field [1/cm]
7455  // The VMRH2O will be multiplied in abs_coefCalc, hence Rh2o does not contain
7456  // VMRH2O as multiplicative term
7457  k[J] = W1 * Rh2o * (SH2O*1.000e-20) * RADFN_FUN(VJ,XKT);
7458 
7459  }
7460 
7461 
7462  // Loop input frequency array. The previously calculated cross section
7463  // has therefore to be interpolated on the input frequencies.
7464  for ( Index s = 0 ; s < n_f ; ++s )
7465  {
7466  // calculate the associated wave number (= 1/wavelength)
7467  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
7468  if ( (V >= 0.000e0) && (V < SL296_ckd_0_v2) )
7469  {
7470  // arts cross section [1/m]
7471  // interpolate the k vector on the f_grid grid
7472  // The factor 100 comes from the conversion from 1/cm to 1/m for
7473  // the absorption coefficient
7474  pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
7475  }
7476  }
7477  }
7478 
7479 }
7480 
7481 
7482 // =================================================================================
7483 
7485 
7510  const Numeric Cin,
7511  const String& model,
7512  ConstVectorView f_grid,
7513  ConstVectorView abs_p,
7514  ConstVectorView abs_t,
7515  ConstVectorView vmr,
7516  const Verbosity& verbosity)
7517 {
7518  CREATE_OUT3;
7519 
7520  // check the model name about consistency
7521  if ((model != "user") && (model != "CKD242"))
7522  {
7523  ostringstream os;
7524  os << "!!ERROR!!\n"
7525  << "CKDv2.4.2 H2O foreign continuum:\n"
7526  << "INPUT model name is: " << model << ".\n"
7527  << "VALID model names are user and CKD242\n";
7528  throw runtime_error(os.str());
7529  }
7530 
7531 
7532  // scaling factor of the foreign H2O cont. absorption
7533  Numeric ScalingFac = 1.0000e0;
7534  if ( model == "user" )
7535  {
7536  ScalingFac = Cin; // input scaling factor of calculated absorption
7537  }
7538 
7539 
7540  const Index n_p = abs_p.nelem(); // Number of pressure levels
7541  const Index n_f = f_grid.nelem(); // Number of frequencies
7542 
7543  // Check that dimensions of abs_p, abs_t, and vmr agree:
7544  assert ( n_p==abs_t.nelem() );
7545  assert ( n_p==vmr.nelem() );
7546 
7547  // Check that dimensions of pxsec are consistent with n_f
7548  // and n_p. It should be [n_f,n_p]:
7549  assert ( n_f==pxsec.nrows() );
7550  assert ( n_p==pxsec.ncols() );
7551 
7552 
7553  // ************************** CKD stuff ************************************
7554 
7555  const Numeric xLosmt = 2.686763e19; // [molecules/cm^3]
7556  const Numeric T1 = 273.0e0;
7557  const Numeric TO = 296.0e0;
7558  const Numeric PO = 1013.0e0;
7559 
7560  // CKD2.4.2 foreign H2O continuum correction function parameters
7561  const Numeric V0F1 = 350.000e0;
7562  const Numeric HWSQF1 = 200.000e0 * 200.000e0;
7563  const Numeric BETAF1 = 5.000e-9 ;
7564  const Numeric FACTRF1 = -0.700e0;
7565 
7566  const Numeric V0F1a = 630.000e0;
7567  const Numeric HWSQF1a = 65.000e0*65.000e0;
7568  const Numeric BETAF1a = 2.000e-08 ;
7569  const Numeric FACTRF1a = 0.750e0;
7570 
7571  const Numeric V0F2 = 1130.000e0;
7572  const Numeric HWSQF2 = 330.000e0 * 330.000e0;
7573  const Numeric BETAF2 = 8.000e-11;
7574  const Numeric FACTRF2 = -0.970e0;
7575 
7576  const Numeric V0F3 = 1975.000e0;
7577  const Numeric HWSQF3 = 250.000e0 * 250.000e0;
7578  const Numeric BETAF3 = 5.000e-06;
7579  const Numeric FACTRF3 = -0.650e0;
7580 
7581  // wavenumber range where CKD H2O foreign continuum is valid
7582  const Numeric VABS_min = FH2O_ckd_0_v1; // [cm^-1]
7583  const Numeric VABS_max = FH2O_ckd_0_v2; // [cm^-1]
7584 
7585 
7586  // It is assumed here that f_grid is monotonically increasing with index!
7587  // In future change this return into a change of the loop over
7588  // the frequency f_grid. n_f_new < n_f
7589  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
7590  Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
7591  if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
7592  (V2ABS < VABS_min) || (V2ABS > VABS_max) )
7593  {
7594  out3 << "WARNING:\n"
7595  << " CKDv2.4.2 H2O foreign continuum:\n"
7596  << " input frequency vector exceeds range of model validity\n"
7597  << " " << FH2O_ckd_0_v1 << "<->" << FH2O_ckd_0_v2 << "cm^-1\n";
7598  }
7599 
7600 
7601  // ---------------------- subroutine FRN296 ------------------------------
7602 
7603  // retrieve the appropriate array sequence of the foreign continuum
7604  // arrays of the CKD model.
7605  Numeric DVC = FH2O_ckd_0_dv;
7606  Numeric V1C = V1ABS - DVC;
7607  Numeric V2C = V2ABS + DVC;
7608 
7609  int I1 = (int) ((V1C-FH2O_ckd_0_v1) / FH2O_ckd_0_dv);
7610  if (V1C < FH2O_ckd_0_v1) I1 = -1;
7611  V1C = FH2O_ckd_0_v1 + (FH2O_ckd_0_dv * (Numeric)I1);
7612 
7613  int I2 = (int) ((V2C-FH2O_ckd_0_v1) / FH2O_ckd_0_dv);
7614 
7615  int NPTC = I2-I1+3;
7616  if (NPTC > FH2O_ckd_0_npt) NPTC = FH2O_ckd_0_npt+1;
7617 
7618  V2C = V1C + FH2O_ckd_0_dv * (Numeric)(NPTC-1);
7619 
7620  if (NPTC < 1)
7621  {
7622  out3 << "WARNING:\n"
7623  << " CKDv2.4.2 H2O foreign continuum:\n"
7624  << " no elements of internal continuum coefficients could be found for the\n"
7625  << " input frequency range.\n"
7626  << " Leave the function without calculating the absorption.";
7627  return;
7628  }
7629 
7630  Numeric FH2OT0[NPTC+addF77fields]; // [cm^3/molecules]
7631 
7632  for (Index J = 1 ; J <= NPTC ; ++J)
7633  {
7634  Index I = I1+J;
7635  if ( (I < 1) || (I > FH2O_ckd_0_npt) )
7636  {
7637  FH2OT0[J] = 0.0e0;
7638  }
7639  else
7640  {
7641  FH2OT0[J] = FH2O_ckd_0[I];
7642  }
7643  }
7644 
7645  // ---------------------- subroutine FRN296 ------------------------------
7646 
7647  Numeric VF2 = 0.000e0;
7648  Numeric VF4 = 0.000e0;
7649  Numeric VF6 = 0.000e0;
7650  Numeric FSCAL = 0.000e0;
7651  Numeric FH2O = 0.000e0;
7652 
7653  // Loop pressure/temperature:
7654  for ( Index i = 0 ; i < n_p ; ++i )
7655  {
7656 
7657  // atmospheric state parameters
7658  Numeric Tave = abs_t[i]; // [K]
7659  Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
7660  Numeric vmrh2o = vmr[i]; // [1]
7661  // FIXME Numeric ph2o = vmrh2o * Pave; // [hPa]
7662  Numeric PFRGN = (Pave/PO) * (1.00000e0 - vmrh2o); // dry air pressure [hPa]
7663  Numeric RFRGN = PFRGN * (TO/Tave); // [hPa]
7664  Numeric WTOT = xLosmt * (Pave/PO) * (T1/Tave); // [molecules/cm^2]
7665  // FIXME Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
7666  Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
7667 
7668  // Molecular cross section calculated by CKD.
7669  // The cross sectionis calculated on the predefined
7670  // CKD wavenumber grid.
7671  Numeric k[NPTC+addF77fields]; // [1/cm]
7672  k[0] = 0.00e0; // not used array field
7673  for (Index J = 1 ; J <= NPTC ; ++J)
7674  {
7675  Numeric VJ = V1C + (DVC * (Numeric)(J-1));
7676 
7677  // CORRECTION TO FOREIGN CONTINUUM
7678  VF2 = (VJ-V0F1) * (VJ-V0F1);
7679  VF6 = VF2 * VF2 * VF2;
7680  FSCAL = (1.000e0 + FACTRF1*(HWSQF1/(VF2+(BETAF1*VF6)+HWSQF1)));
7681 
7682  VF2 = (VJ-V0F1a) * (VJ-V0F1a);
7683  VF6 = VF2 * VF2 * VF2;
7684  FSCAL = FSCAL *
7685  (1.000e0 + FACTRF1a*(HWSQF1a/(VF2+(BETAF1a*VF6)+HWSQF1a)));
7686 
7687  VF2 = (VJ-V0F2) * (VJ-V0F2);
7688  VF6 = VF2 * VF2 * VF2;
7689  FSCAL = FSCAL *
7690  (1.000e0 + FACTRF2*(HWSQF2/(VF2+(BETAF2*VF6)+HWSQF2)));
7691 
7692  VF2 = (VJ-V0F3) * (VJ-V0F3);
7693  VF4 = VF2 * VF2;
7694  FSCAL = FSCAL *
7695  (1.000e0 + FACTRF3*(HWSQF3/(VF2+BETAF3*VF4+HWSQF3)));
7696 
7697  FH2O = FH2OT0[J] * FSCAL;
7698 
7699  // CKD cross section without radiative field
7700  // The VMRH2O will be multiplied in abs_coefCalc, hence WTOT and not W1
7701  // as multiplicative term
7702  k[J] = WTOT * RFRGN * (FH2O*1.000e-20) * RADFN_FUN(VJ,XKT);
7703 
7704  }
7705 
7706 
7707  // Loop input frequency array. The previously calculated cross section
7708  // has therefore to be interpolated on the input frequencies.
7709  for ( Index s = 0 ; s < n_f ; ++s )
7710  {
7711  // calculate the associated wave number (= 1/wavelength)
7712  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
7713  if ( (V >= 0.000e0) && (V < VABS_max) )
7714  {
7715  // arts CKD2.4.2 foreign H2O continuum cross section [1/m]
7716  // interpolate the k vector on the f_grid grid
7717  pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
7718  }
7719  }
7720  }
7721 
7722 }
7723 
7724 // =================================================================================
7725 
7727 
7752  const Numeric Cin,
7753  const String& model,
7754  ConstVectorView f_grid,
7755  ConstVectorView abs_p,
7756  ConstVectorView abs_t,
7757  ConstVectorView vmr,
7758  const Verbosity& verbosity)
7759 {
7760  CREATE_OUT3;
7761 
7762  // check the model name about consistency
7763  if ((model != "user") && (model != "CKDMT100"))
7764  {
7765  ostringstream os;
7766  os << "!!ERROR!!\n"
7767  << "CKD_MT1.00 H2O self continuum:\n"
7768  << "INPUT model name is: " << model << ".\n"
7769  << "VALID model names are user and CKDMT100\n";
7770  throw runtime_error(os.str());
7771  }
7772 
7773 
7774  // scaling factor of the self H2O cont. absorption
7775  Numeric ScalingFac = 1.0000e0;
7776  if ( model == "user" )
7777  {
7778  ScalingFac = Cin; // input scaling factor of calculated absorption
7779  }
7780 
7781 
7782  const Index n_p = abs_p.nelem(); // Number of pressure levels
7783  const Index n_f = f_grid.nelem(); // Number of frequencies
7784 
7785 
7786  // Check that dimensions of abs_p, abs_t, and vmr agree:
7787  assert ( n_p==abs_t.nelem() );
7788  assert ( n_p==vmr.nelem() );
7789 
7790  // Check that dimensions of pxsec are consistent with n_f
7791  // and n_p. It should be [n_f,n_p]:
7792  assert ( n_f==pxsec.nrows() );
7793  assert ( n_p==pxsec.ncols() );
7794 
7795 
7796  // ************************** CKD stuff ************************************
7797 
7798  const Numeric xLosmt = 2.68675e19; // [molecules/cm^3]
7799  // FIXME const Numeric T1 = 273.000e0; // [K]
7800  const Numeric TO = 296.000e0; // [K]
7801  const Numeric PO = 1013.000e0; // [hPa]
7802 
7803  const Numeric XFACREV[15] =
7804  {1.003, 1.009, 1.015, 1.023, 1.029,1.033,
7805  1.037, 1.039, 1.040, 1.046, 1.036,1.027,
7806  1.01, 1.002, 1.00};
7807 
7808  // wavenumber range where CKD H2O self continuum is valid
7809  const Numeric VABS_min = -2.000e1; // [cm^-1]
7810  const Numeric VABS_max = 2.000e4; // [cm^-1]
7811 
7812 
7813  // It is assumed here that f_grid is monotonically increasing with index!
7814  // In future change this return into a change of the loop over
7815  // the frequency f_grid. n_f_new < n_f
7816  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
7817  Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
7818  if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
7819  (V2ABS < VABS_min) || (V2ABS > VABS_max) )
7820  {
7821  out3 << "WARNING:\n"
7822  << " CKD_MT 1.00 H2O self continuum:\n"
7823  << " input frequency vector exceeds range of model validity\n"
7824  << " " << SL296_ckd_mt_100_v1 << "<->" << SL296_ckd_mt_100_v2 << "cm^-1\n";
7825  }
7826 
7827 
7828  // ------------------- subroutine SL296/SL260 ----------------------------
7829 
7831  {
7832  ostringstream os;
7833  os << "!!ERROR!!\n"
7834  << "CKD_MT 1.00 H2O self continuum:\n"
7835  << "parameter V1 not the same for different ref. temperatures.\n";
7836  throw runtime_error(os.str());
7837  }
7839  {
7840  ostringstream os;
7841  os << "!!ERROR!!\n"
7842  << "CKD_MT 1.00 H2O self continuum:\n"
7843  << "parameter V2 not the same for different ref. temperatures.\n";
7844  throw runtime_error(os.str());
7845  }
7847  {
7848  ostringstream os;
7849  os << "!!ERROR!!\n"
7850  << "CKD_MT 1.00 H2O self continuum:\n"
7851  << "parameter DV not the same for different ref. temperatures.\n";
7852  throw runtime_error(os.str());
7853  }
7855  {
7856  ostringstream os;
7857  os << "!!ERROR!!\n"
7858  << "CKD_MT 1.00 H2O self continuum:\n"
7859  << "parameter NPT not the same for different ref. temperatures.\n";
7860  throw runtime_error(os.str());
7861  }
7862 
7863  // retrieve the appropriate array sequence of the self continuum
7864  // arrays of the CKD model.
7866  Numeric V1C = V1ABS - DVC;
7867  Numeric V2C = V2ABS + DVC;
7868 
7869  int I1 = (int) ((V1C-SL296_ckd_mt_100_v1) / SL296_ckd_mt_100_dv);
7870  if (V1C < SL296_ckd_mt_100_v1) I1 = -1;
7872 
7873  int I2 = (int) ((V2C-SL296_ckd_mt_100_v1) / SL296_ckd_mt_100_dv);
7874 
7875  int NPTC = I2-I1+3;
7876  if (NPTC > SL296_ckd_mt_100_npt) NPTC = SL296_ckd_mt_100_npt+1;
7877 
7878  V2C = V1C + SL296_ckd_mt_100_dv * (Numeric)(NPTC-1);
7879 
7880  if (NPTC < 1)
7881  {
7882  out3 << "WARNING:\n"
7883  << " CKD_MT 1.00 H2O self continuum:\n"
7884  << " no elements of internal continuum coefficients could be found for the\n"
7885  << " input frequency range.\n"
7886  << " Leave the function without calculating the absorption.";
7887  return;
7888  }
7889 
7890  Vector SH2OT0(NPTC+addF77fields, 0.); // [cm^3/molecules]
7891  Vector SH2OT1(NPTC+addF77fields, 0.); // [cm^3/molecules]
7892 
7893  for (Index J = 1 ; J <= NPTC ; ++J)
7894  {
7895  Index I = I1+J;
7896  if ( (I > 0) && (I <= SL296_ckd_mt_100_npt) )
7897  {
7898  SH2OT0[J] = SL296_ckd_mt_100[I]; // at T=296 K
7899  SH2OT1[J] = SL260_ckd_mt_100[I]; // at T=260 K
7900  }
7901  }
7902 
7903  // ------------------- subroutine SL296/SL260 ----------------------------
7904 
7905  Numeric SFAC = 1.00e0;
7906 
7907  // Loop pressure/temperature:
7908  for ( Index i = 0 ; i < n_p ; ++i )
7909  {
7910 
7911  // atmospheric state parameters
7912  Numeric Tave = abs_t[i]; // [K]
7913  Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
7914  Numeric Patm = Pave/PO; // [1]
7915  Numeric vmrh2o = vmr[i]; // [1]
7916  // FIXME Numeric Ph2o = Patm * vmrh2o; // [1]
7917  // second vmr in abs_coefCalc multiplied
7918  Numeric Rh2o = Patm * (TO/Tave); // [1]
7919  Numeric Tfac = (Tave-TO)/(260.0-TO); // [1]
7920  Numeric WTOT = xLosmt * (Pave/1.013000e3) * (2.7300e2/Tave); // [molecules/cm^2]
7921  Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
7922  Numeric XKT = Tave / 1.4387752e0; // = (T*k_B)/(h*c)
7923 
7924  // Molecular cross section calculated by CKD.
7925  // The cross sectionis calculated on the predefined
7926  // CKD wavenumber grid.
7927  Vector k(NPTC+addF77fields, 0.); // [1/cm]
7928  for (Index J = 1 ; J <= NPTC ; ++J)
7929  {
7930  Numeric VJ = V1C + (DVC * (Numeric)(J-1));
7931  Numeric SH2O = 0.0e0;
7932  if (SH2OT0[J] > 0.0e0)
7933  {
7934  SH2O = SH2OT0[J] * pow( (SH2OT1[J]/SH2OT0[J]), Tfac );
7935  SFAC = 1.00e0;
7936 
7937  if ( (VJ >= 820.0e0) && (VJ <= 960.0e0) )
7938  {
7939  int JFAC = (int)((VJ - 820.0e0)/10.0e0 + 0.00001e0);
7940  if ( (JFAC >= 0) && (JFAC <=14) )
7941  SFAC = XFACREV[JFAC];
7942  }
7943 
7944  SH2O = SFAC * SH2O;
7945  }
7946 
7947  // CKD cross section with radiative field [1/cm]
7948  // The VMRH2O will be multiplied in abs_coefCalc, hence Rh2o does not contain
7949  // VMRH2O as multiplicative term
7950  k[J] = W1 * Rh2o * (SH2O*1.000e-20) * RADFN_FUN(VJ,XKT);
7951 
7952  }
7953 
7954 
7955  // Loop input frequency array. The previously calculated cross section
7956  // has therefore to be interpolated on the input frequencies.
7957  for ( Index s = 0 ; s < n_f ; ++s )
7958  {
7959  // calculate the associated wave number (= 1/wavelength)
7960  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
7961  if ( (V > 0.000e0) && (V < SL296_ckd_mt_100_v2) )
7962  {
7963  // arts cross section [1/m]
7964  // interpolate the k vector on the f_grid grid
7965  // The factor 100 comes from the conversion from 1/cm to 1/m for
7966  // the absorption coefficient
7967  pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
7968  }
7969  }
7970  }
7971 
7972 }
7973 
7974 // =================================================================================
7975 
7977 
8002  const Numeric Cin,
8003  const String& model,
8004  ConstVectorView f_grid,
8005  ConstVectorView abs_p,
8006  ConstVectorView abs_t,
8007  ConstVectorView vmr,
8008  const Verbosity& verbosity)
8009 {
8010  CREATE_OUT3;
8011 
8012  // check the model name about consistency
8013  if ((model != "user") && (model != "CKDMT100"))
8014  {
8015  ostringstream os;
8016  os << "!!ERROR!!\n"
8017  << "CKD_MT1.00 H2O foreign continuum:\n"
8018  << "INPUT model name is: " << model << ".\n"
8019  << "VALID model names are user and CKDMT100\n";
8020  throw runtime_error(os.str());
8021  }
8022 
8023 
8024  // scaling factor of the foreign H2O cont. absorption
8025  Numeric ScalingFac = 1.0000e0;
8026  if ( model == "user" )
8027  {
8028  ScalingFac = Cin; // input scaling factor of calculated absorption
8029  }
8030 
8031 
8032  const Index n_p = abs_p.nelem(); // Number of pressure levels
8033  const Index n_f = f_grid.nelem(); // Number of frequencies
8034 
8035 
8036  // Check that dimensions of abs_p, abs_t, and vmr agree:
8037  assert ( n_p==abs_t.nelem() );
8038  assert ( n_p==vmr.nelem() );
8039 
8040  // Check that dimensions of pxsec are consistent with n_f
8041  // and n_p. It should be [n_f,n_p]:
8042  assert ( n_f==pxsec.nrows() );
8043  assert ( n_p==pxsec.ncols() );
8044 
8045 
8046  // ************************** CKD stuff ************************************
8047 
8048  const Numeric xLosmt = 2.68675e19; // [molecules/cm^3]
8049  const Numeric T1 = 273.000e0;
8050  const Numeric TO = 296.000e0;
8051  const Numeric PO = 1013.000e0;
8052 
8053  // wavenumber range where CKD H2O self continuum is valid
8054  const Numeric VABS_min = -2.000e1; // [cm^-1]
8055  const Numeric VABS_max = 2.000e4; // [cm^-1]
8056 
8057 
8058  // It is assumed here that f_grid is monotonically increasing with index!
8059  // In future change this return into a change of the loop over
8060  // the frequency f_grid. n_f_new < n_f
8061  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8062  Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8063  if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
8064  (V2ABS < VABS_min) || (V2ABS > VABS_max) )
8065  {
8066  out3 << "WARNING:\n"
8067  << " CKD_MT 1.00 H2O foreign continuum:\n"
8068  << " input frequency vector exceeds range of model validity\n"
8069  << " " << FH2O_ckd_mt_100_v1 << "<->" << FH2O_ckd_mt_100_v2 << "cm^-1\n";
8070  }
8071 
8072 
8073  // ---------------------- subroutine FRN296 ------------------------------
8074 
8075  // retrieve the appropriate array sequence of the foreign continuum
8076  // arrays of the CKD model.
8078  Numeric V1C = V1ABS - DVC;
8079  Numeric V2C = V2ABS + DVC;
8080 
8081  int I1 = (int) ((V1C-FH2O_ckd_mt_100_v1) / FH2O_ckd_mt_100_dv);
8082  if (V1C < FH2O_ckd_mt_100_v1) I1 = -1;
8084 
8085  int I2 = (int) ((V2C-FH2O_ckd_mt_100_v1) / FH2O_ckd_mt_100_dv);
8086 
8087  int NPTC = I2-I1+3;
8088  if (NPTC > FH2O_ckd_mt_100_npt) NPTC = FH2O_ckd_mt_100_npt+1;
8089 
8090  V2C = V1C + FH2O_ckd_mt_100_dv * (Numeric)(NPTC-1);
8091 
8092  if (NPTC < 1)
8093  {
8094  out3 << "WARNING:\n"
8095  << " CKD_MT 1.00 H2O foreign continuum:\n"
8096  << " no elements of internal continuum coefficients could be found for the\n"
8097  << " input frequency range.\n"
8098  << " Leave the function without calculating the absorption.";
8099  return;
8100  }
8101 
8102  Vector FH2OT0(NPTC+addF77fields, 0.); // [cm^3/molecules]
8103 
8104  for (Index J = 1 ; J <= NPTC ; ++J)
8105  {
8106  Index I = I1+J;
8107  if ( (I > 0) && (I <= FH2O_ckd_mt_100_npt) )
8108  {
8109  FH2OT0[J] = FH2O_ckd_mt_100[I];
8110  }
8111  }
8112 
8113  // ---------------------- subroutine FRN296 ------------------------------
8114 
8115 
8116 
8117 
8118  // Loop pressure/temperature:
8119  for ( Index i = 0 ; i < n_p ; ++i )
8120  {
8121  // atmospheric state parameters
8122  Numeric Tave = abs_t[i]; // [K]
8123  Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
8124  Numeric vmrh2o = vmr[i]; // [1]
8125  // FIXME Numeric ph2o = vmrh2o * Pave; // [hPa]
8126  Numeric PFRGN = (Pave/PO) * (1.00000e0 - vmrh2o); // dry air pressure [hPa]
8127  Numeric RFRGN = PFRGN * (TO/Tave); // [hPa]
8128  Numeric WTOT = xLosmt * (Pave/PO) * (T1/Tave); // [molecules/cm^2]
8129  // FIXME Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
8130  Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
8131 
8132  // Molecular cross section calculated by CKD.
8133  // The cross sectionis calculated on the predefined
8134  // CKD wavenumber grid.
8135  Vector k(NPTC+addF77fields, 0.); // [1/cm]
8136  for (Index J = 1 ; J <= NPTC ; ++J)
8137  {
8138  Numeric VJ = V1C + (DVC * (Numeric)(J-1));
8139  Numeric FH2O = FH2OT0[J];
8140 
8141  // CKD cross section with radiative field [1/cm]
8142  // The VMRH2O will be multiplied in abs_coefCalc, hence WTOT and not W1
8143  // as multiplicative term
8144  k[J] = WTOT * RFRGN * (FH2O*1.000e-20) * RADFN_FUN(VJ,XKT);
8145 
8146  }
8147 
8148  // Loop input frequency array. The previously calculated cross section
8149  // has therefore to be interpolated on the input frequencies.
8150  for ( Index s = 0 ; s < n_f ; ++s )
8151  {
8152  // calculate the associated wave number (= 1/wavelength)
8153  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8154  if ( (V >= 0.000e0) && (V < VABS_max) )
8155  {
8156  // arts CKD_MT.100 cross section [1/m]
8157  // interpolate the k vector on the f_grid grid
8158  // The factor 100 comes from the conversion from (1/cm) to (1/m)
8159  // of the abs. coeff.
8160  pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
8161  }
8162  }
8163  }
8164 
8165 }
8166 
8167 //
8168 // =================================================================================
8169 
8171 
8205  const Numeric Cin,
8206  const String& model,
8207  ConstVectorView f_grid,
8208  ConstVectorView abs_p,
8209  ConstVectorView abs_t,
8210  ConstVectorView vmr,
8211  const Verbosity& verbosity)
8212 {
8213  CREATE_OUT3;
8214 
8215  // check the model name about consistency
8216  if ((model != "user") && (model != "CKDMT250"))
8217  {
8218  ostringstream os;
8219  os << "!!ERROR!!\n"
8220  << "CKD_MT2.50 H2O self continuum:\n"
8221  << "INPUT model name is: " << model << ".\n"
8222  << "VALID model names are user and CKDMT250\n";
8223  throw runtime_error(os.str());
8224  }
8225 
8226 
8227  // scaling factor of the self H2O cont. absorption
8228  Numeric ScalingFac = 1.0000e0;
8229  if ( model == "user" )
8230  {
8231  ScalingFac = Cin; // input scaling factor of calculated absorption
8232  }
8233 
8234 
8235  const Index n_p = abs_p.nelem(); // Number of pressure levels
8236  const Index n_f = f_grid.nelem(); // Number of frequencies
8237 
8238 
8239  // Check that dimensions of abs_p, abs_t, and vmr agree:
8240  assert ( n_p==abs_t.nelem() );
8241  assert ( n_p==vmr.nelem() );
8242 
8243  // Check that dimensions of pxsec are consistent with n_f
8244  // and n_p. It should be [n_f,n_p]:
8245  assert ( n_f==pxsec.nrows() );
8246  assert ( n_p==pxsec.ncols() );
8247 
8248 
8249  // ************************** CKD stuff ************************************
8250 
8251  const Numeric xLosmt = 2.68675e19; // [molecules/cm^3]
8252  // FIXME const Numeric T1 = 273.000e0; // [K]
8253  const Numeric TO = 296.000e0; // [K]
8254  const Numeric PO = 1013.000e0; // [hPa]
8255 
8256  const Numeric XFACREV[15] =
8257  {1.003, 1.009, 1.015, 1.023, 1.029,1.033,
8258  1.037, 1.039, 1.040, 1.046, 1.036,1.027,
8259  1.01, 1.002, 1.00};
8260 
8261  const Numeric XFACREV1[120] =
8262  {1.000, 1.040, 1.080, 1.120, 1.160,
8263  1.200, 1.240, 1.280, 1.318, 1.357,
8264  1.404, 1.453, 1.499, 1.553, 1.608,
8265  1.674, 1.746, 1.818, 1.899, 1.984,
8266  2.078, 2.174, 2.276, 2.385, 2.502,
8267  2.624, 2.747, 2.883, 3.018, 3.170,
8268  3.321, 3.473, 3.635, 3.803, 3.974,
8269  4.144, 4.327, 4.500, 4.703, 4.887,
8270  5.102, 5.286, 5.498, 5.701, 5.935,
8271  6.155, 6.405, 6.633, 6.892, 7.115,
8272  7.397, 7.650, 7.917, 8.177, 8.437,
8273  8.704, 8.953, 9.192, 9.428, 9.644,
8274  9.821, 9.954, 10.11, 10.17, 10.21,
8275  10.26, 10.29, 10.28, 10.26, 10.20,
8276  10.15, 10.16, 10.25, 10.02, 9.965,
8277  10.01, 9.934, 9.847, 9.744, 9.566,
8278  9.436, 9.181, 8.872, 8.547, 8.155,
8279  7.730, 7.261, 6.777, 6.271, 5.807,
8280  5.313, 4.845, 4.444, 4.074, 3.677,
8281  3.362, 3.087, 2.826, 2.615, 2.385,
8282  2.238, 2.148, 1.979, 1.939, 1.773,
8283  1.696, 1.642, 1.569, 1.510, 1.474,
8284  1.425, 1.375, 1.322, 1.272, 1.230,
8285  1.180, 1.130, 1.080, 1.040, 1.000};
8286 
8287  // wavenumber range where CKD H2O self continuum is valid
8288  const Numeric VABS_min = -2.000e1; // [cm^-1]
8289  const Numeric VABS_max = 2.000e4; // [cm^-1]
8290 
8291 
8292  // It is assumed here that f_grid is monotonically increasing with index!
8293  // In future change this return into a change of the loop over
8294  // the frequency f_grid. n_f_new < n_f
8295  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8296  Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8297  if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
8298  (V2ABS < VABS_min) || (V2ABS > VABS_max) )
8299  {
8300  out3 << "WARNING:\n"
8301  << " CKD_MT 1.00 H2O self continuum:\n"
8302  << " input frequency vector exceeds range of model validity\n"
8303  << " " << SL296_ckd_mt_100_v1 << "<->" << SL296_ckd_mt_100_v2 << "cm^-1\n";
8304  }
8305 
8306 
8307  // ------------------- subroutine SL296/SL260 ----------------------------
8308 
8310  {
8311  ostringstream os;
8312  os << "!!ERROR!!\n"
8313  << "CKD_MT 1.00 H2O self continuum:\n"
8314  << "parameter V1 not the same for different ref. temperatures.\n";
8315  throw runtime_error(os.str());
8316  }
8318  {
8319  ostringstream os;
8320  os << "!!ERROR!!\n"
8321  << "CKD_MT 1.00 H2O self continuum:\n"
8322  << "parameter V2 not the same for different ref. temperatures.\n";
8323  throw runtime_error(os.str());
8324  }
8326  {
8327  ostringstream os;
8328  os << "!!ERROR!!\n"
8329  << "CKD_MT 1.00 H2O self continuum:\n"
8330  << "parameter DV not the same for different ref. temperatures.\n";
8331  throw runtime_error(os.str());
8332  }
8334  {
8335  ostringstream os;
8336  os << "!!ERROR!!\n"
8337  << "CKD_MT 1.00 H2O self continuum:\n"
8338  << "parameter NPT not the same for different ref. temperatures.\n";
8339  throw runtime_error(os.str());
8340  }
8341 
8342  // retrieve the appropriate array sequence of the self continuum
8343  // arrays of the CKD model.
8345  Numeric V1C = V1ABS - DVC;
8346  Numeric V2C = V2ABS + DVC;
8347 
8348  int I1 = (int) ((V1C-SL296_ckd_mt_100_v1) / SL296_ckd_mt_100_dv);
8349  if (V1C < SL296_ckd_mt_100_v1) I1 = -1;
8351 
8352  int I2 = (int) ((V2C-SL296_ckd_mt_100_v1) / SL296_ckd_mt_100_dv);
8353 
8354  int NPTC = I2-I1+3;
8355  if (NPTC > SL296_ckd_mt_100_npt) NPTC = SL296_ckd_mt_100_npt+1;
8356 
8357  V2C = V1C + SL296_ckd_mt_100_dv * (Numeric)(NPTC-1);
8358 
8359  if (NPTC < 1)
8360  {
8361  out3 << "WARNING:\n"
8362  << " CKD_MT 1.00 H2O self continuum:\n"
8363  << " no elements of internal continuum coefficients could be found for the\n"
8364  << " input frequency range.\n"
8365  << " Leave the function without calculating the absorption.";
8366  return;
8367  }
8368 
8369  Vector SH2OT0(NPTC+addF77fields, 0.); // [cm^3/molecules]
8370  Vector SH2OT1(NPTC+addF77fields, 0.); // [cm^3/molecules]
8371 
8372  for (Index J = 1 ; J <= NPTC ; ++J)
8373  {
8374  Index I = I1+J;
8375  if ( (I > 0) && (I <= SL296_ckd_mt_100_npt) )
8376  {
8377  SH2OT0[J] = SL296_ckd_mt_100[I]; // at T=296 K
8378  SH2OT1[J] = SL260_ckd_mt_100[I]; // at T=260 K
8379  }
8380  }
8381 
8382  // ------------------- subroutine SL296/SL260 ----------------------------
8383 
8384  Numeric SFAC = 1.00e0;
8385 
8386  // Loop pressure/temperature:
8387  for ( Index i = 0 ; i < n_p ; ++i )
8388  {
8389 
8390  // atmospheric state parameters
8391  Numeric Tave = abs_t[i]; // [K]
8392  Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
8393  Numeric Patm = Pave/PO; // [1]
8394  Numeric vmrh2o = vmr[i]; // [1]
8395  // FIXME Numeric Ph2o = Patm * vmrh2o; // [1]
8396  // second vmr in abs_coefCalc multiplied
8397  Numeric Rh2o = Patm * (TO/Tave); // [1]
8398  Numeric Tfac = (Tave-TO)/(260.0-TO); // [1]
8399  Numeric WTOT = xLosmt * (Pave/1.013000e3) * (2.7300e2/Tave); // [molecules/cm^2]
8400  Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
8401  Numeric XKT = Tave / 1.4387752e0; // = (T*k_B)/(h*c)
8402 
8403  // Molecular cross section calculated by CKD.
8404  // The cross sectionis calculated on the predefined
8405  // CKD wavenumber grid.
8406  Vector k(NPTC+addF77fields, 0.); // [1/cm]
8407  for (Index J = 1 ; J <= NPTC ; ++J)
8408  {
8409  Numeric VJ = V1C + (DVC * (Numeric)(J-1));
8410  Numeric SH2O = 0.0e0;
8411  if (SH2OT0[J] > 0.0e0)
8412  {
8413  SH2O = SH2OT0[J] * pow( (SH2OT1[J]/SH2OT0[J]), Tfac );
8414  SFAC = 1.00e0;
8415 
8416  if ( (VJ >= 820.0e0) && (VJ <= 960.0e0) )
8417  {
8418  int JFAC = (int)((VJ - 820.0e0)/10.0e0 + 0.00001e0);
8419  if ( (JFAC >= 0) && (JFAC <=14) )
8420  SFAC = XFACREV[JFAC];
8421  }
8422 
8423  // CKD MT 2.5 correction to the self continuum (IASI data, fit to near-IR results of Bicknell et al., 2006 and Fulghum and Tilleman, 1991
8424 
8425  if ( (VJ >= 2000.0e0) && (VJ <= 3190.0e0) )
8426  {
8427  int JFAC = (int)((VJ - 1990.0e0)/10.0e0 + 0.00001e0);
8428  if ( (JFAC >= 1) && (JFAC <=120) )
8429  SFAC = XFACREV1[JFAC];
8430  }
8431  SFAC = SFAC * ( 1.000e0 + ( 0.25e0/( 1.000e0 + pow( (VJ/350.0), 6.0)))); // CKD MT 2.4 (microwave and IR ARM data 0-600 cm-1)
8432 
8433  SH2O = SFAC * SH2O;
8434  }
8435 
8436 
8437  // CKD cross section with radiative field [1/cm]
8438  // The VMRH2O will be multiplied in abs_coefCalc, hence Rh2o does not contain
8439  // VMRH2O as multiplicative term
8440  k[J] = W1 * Rh2o * (SH2O*1.000e-20) * RADFN_FUN(VJ,XKT);
8441 
8442  }
8443 
8444 
8445  // Loop input frequency array. The previously calculated cross section
8446  // has therefore to be interpolated on the input frequencies.
8447  for ( Index s = 0 ; s < n_f ; ++s )
8448  {
8449  // calculate the associated wave number (= 1/wavelength)
8450  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8451  if ( (V > 0.000e0) && (V < SL296_ckd_mt_100_v2) )
8452  {
8453  // arts cross section [1/m]
8454  // interpolate the k vector on the f_grid grid
8455  // The factor 100 comes from the conversion from 1/cm to 1/m for
8456  // the absorption coefficient
8457  pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
8458  }
8459  }
8460  }
8461 
8462 }
8463 
8464 // =================================================================================
8465 
8467 
8492  const Numeric Cin,
8493  const String& model,
8494  ConstVectorView f_grid,
8495  ConstVectorView abs_p,
8496  ConstVectorView abs_t,
8497  ConstVectorView vmr,
8498  const Verbosity& verbosity)
8499 {
8500  CREATE_OUT3;
8501 
8502  // check the model name about consistency
8503  if ((model != "user") && (model != "CKDMT250"))
8504  {
8505  ostringstream os;
8506  os << "!!ERROR!!\n"
8507  << "CKD_MT2.50 H2O foreign continuum:\n"
8508  << "INPUT model name is: " << model << ".\n"
8509  << "VALID model names are user and CKDMT250\n";
8510  throw runtime_error(os.str());
8511  }
8512 
8513 
8514  // scaling factor of the foreign H2O cont. absorption
8515  Numeric ScalingFac = 1.0000e0;
8516  if ( model == "user" )
8517  {
8518  ScalingFac = Cin; // input scaling factor of calculated absorption
8519  }
8520 
8521 
8522  const Index n_p = abs_p.nelem(); // Number of pressure levels
8523  const Index n_f = f_grid.nelem(); // Number of frequencies
8524 
8525 
8526  // Check that dimensions of abs_p, abs_t, and vmr agree:
8527  assert ( n_p==abs_t.nelem() );
8528  assert ( n_p==vmr.nelem() );
8529 
8530  // Check that dimensions of pxsec are consistent with n_f
8531  // and n_p. It should be [n_f,n_p]:
8532  assert ( n_f==pxsec.nrows() );
8533  assert ( n_p==pxsec.ncols() );
8534 
8535 
8536  // ************************** CKD stuff ************************************
8537 
8538  const Numeric xLosmt = 2.68675e19; // [molecules/cm^3]
8539  const Numeric T1 = 273.000e0;
8540  const Numeric TO = 296.000e0;
8541  const Numeric PO = 1013.000e0;
8542 
8543  // wavenumber range where CKD H2O self continuum is valid
8544  const Numeric VABS_min = -2.000e1; // [cm^-1]
8545  const Numeric VABS_max = 2.000e4; // [cm^-1]
8546 
8547 
8548  // It is assumed here that f_grid is monotonically increasing with index!
8549  // In future change this return into a change of the loop over
8550  // the frequency f_grid. n_f_new < n_f
8551  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8552  Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8553  if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
8554  (V2ABS < VABS_min) || (V2ABS > VABS_max) )
8555  {
8556  out3 << "WARNING:\n"
8557  << " CKD_MT 2.50 H2O foreign continuum:\n"
8558  << " input frequency vector exceeds range of model validity\n"
8559  << " " << FH2O_ckd_mt_100_v1 << "<->" << FH2O_ckd_mt_100_v2 << "cm^-1\n";
8560  }
8561 
8562 
8563  // ---------------------- subroutine FRN296 ------------------------------
8564 
8565  // retrieve the appropriate array sequence of the foreign continuum
8566  // arrays of the CKD model.
8568  Numeric V1C = V1ABS - DVC;
8569  Numeric V2C = V2ABS + DVC;
8570 
8571  int I1 = (int) ((V1C-FH2O_ckd_mt_100_v1) / FH2O_ckd_mt_100_dv);
8572  if (V1C < FH2O_ckd_mt_100_v1) I1 = -1;
8574 
8575  int I2 = (int) ((V2C-FH2O_ckd_mt_100_v1) / FH2O_ckd_mt_100_dv);
8576 
8577  int NPTC = I2-I1+3;
8578  if (NPTC > FH2O_ckd_mt_100_npt) NPTC = FH2O_ckd_mt_100_npt+1;
8579 
8580  V2C = V1C + FH2O_ckd_mt_100_dv * (Numeric)(NPTC-1);
8581 
8582  if (NPTC < 1)
8583  {
8584  out3 << "WARNING:\n"
8585  << " CKD_MT 2.50 H2O foreign continuum:\n"
8586  << " no elements of internal continuum coefficients could be found for the\n"
8587  << " input frequency range.\n"
8588  << " Leave the function without calculating the absorption.";
8589  return;
8590  }
8591 
8592  Vector FH2OT0(NPTC+addF77fields, 0.); // [cm^3/molecules]
8593 
8594  for (Index J = 1 ; J <= NPTC ; ++J)
8595  {
8596  Index I = I1+J;
8597  if ( (I > 0) && (I <= FH2O_ckd_mt_100_npt) )
8598  {
8599  FH2OT0[J] = FH2O_ckd_mt_100[I];
8600  }
8601  }
8602 
8603  // ---------------------- subroutine FRN296 ------------------------------
8604 
8605 
8606 
8607 
8608  // Loop pressure/temperature:
8609  for ( Index i = 0 ; i < n_p ; ++i )
8610  {
8611  // atmospheric state parameters
8612  Numeric Tave = abs_t[i]; // [K]
8613  Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
8614  Numeric vmrh2o = vmr[i]; // [1]
8615  // FIXME Numeric ph2o = vmrh2o * Pave; // [hPa]
8616  Numeric PFRGN = (Pave/PO) * (1.00000e0 - vmrh2o); // dry air pressure [hPa]
8617  Numeric RFRGN = PFRGN * (TO/Tave); // [hPa]
8618  Numeric WTOT = xLosmt * (Pave/PO) * (T1/Tave); // [molecules/cm^2]
8619  // FIXME Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
8620  Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
8621 
8622  // Molecular cross section calculated by CKD.
8623  // The cross sectionis calculated on the predefined
8624  // CKD wavenumber grid.
8625  Vector k(NPTC+addF77fields, 0.); // [1/cm]
8626  for (Index J = 1 ; J <= NPTC ; ++J)
8627  {
8628  Numeric VJ = V1C + (DVC * (Numeric)(J-1));
8629  Numeric VDELSQ1 = pow( (VJ - 255.67e0), 2e0 );
8630  Numeric VDELmSQ1 = pow( (VJ + 255.67e0), 2e0 );
8631  Numeric VF1 = pow( ((VJ-255.67e0)/57.83e0), 8e0);
8632  Numeric VmF1 = pow( ((VJ+255.67e0)/57.83e0), 8e0);
8633  Numeric VF2 = pow( ((VJ)/57.83e0), 8e0);
8634 
8635  Numeric FSCAL = 1.000e0 + (0.06e0 + (-0.42e0)*( (57600e0/(VDELSQ1+57600e0+VF1)) + (57600e0/(VDELmSQ1+57600e0+VmF1)) ) )/(1.000e0 + 0.3e0 * VF2);
8636 
8637  Numeric FH2O = FH2OT0[J] * FSCAL; //CKD MT 2.4
8638 
8639 
8640 
8641  // CKD cross section with radiative field [1/cm]
8642  // The VMRH2O will be multiplied in abs_coefCalc, hence WTOT and not W1
8643  // as multiplicative term
8644  k[J] = WTOT * RFRGN * (FH2O*1.000e-20) * RADFN_FUN(VJ,XKT);
8645 
8646  }
8647 
8648  // Loop input frequency array. The previously calculated cross section
8649  // has therefore to be interpolated on the input frequencies.
8650  for ( Index s = 0 ; s < n_f ; ++s )
8651  {
8652  // calculate the associated wave number (= 1/wavelength)
8653  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8654  if ( (V >= 0.000e0) && (V < VABS_max) )
8655  {
8656  // arts CKD_MT.100 cross section [1/m]
8657  // interpolate the k vector on the f_grid grid
8658  // The factor 100 comes from the conversion from (1/cm) to (1/m)
8659  // of the abs. coeff.
8660  pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
8661  }
8662  }
8663  }
8664 
8665 }
8666 
8667 //
8668 
8669 // =================================================================================
8670 
8672 
8697  const Numeric Cin,
8698  const String& model,
8699  ConstVectorView f_grid,
8700  ConstVectorView abs_p,
8701  ConstVectorView abs_t _U_,
8702  ConstVectorView vmr _U_,
8703  const Verbosity& verbosity)
8704 {
8705  CREATE_OUT3;
8706 
8707  // check the model name about consistency
8708  if ((model != "user") && (model != "CKD241"))
8709  {
8710  ostringstream os;
8711  os << "!!ERROR!!\n"
8712  << "CKDv2.4.1 CO2 continuum:\n"
8713  << "INPUT model name is: " << model << ".\n"
8714  << "VALID model names are user and CKD241\n";
8715  throw runtime_error(os.str());
8716  }
8717 
8718 
8719  // scaling factor of the CO2 absorption
8720  Numeric ScalingFac = 0.0000e0;
8721  if ( model == "user" )
8722  {
8723  ScalingFac = Cin; // input scaling factor of calculated absorption
8724  }
8725  else
8726  {
8727  ScalingFac = 1.0000e0;
8728  }
8729 
8730  const Index n_p = abs_p.nelem(); // Number of pressure levels
8731  const Index n_f = f_grid.nelem(); // Number of frequencies
8732 
8733 
8734  // Check that dimensions of abs_p, abs_t, and vmr agree:
8735  assert ( n_p==abs_t.nelem() );
8736  assert ( n_p==vmr.nelem() );
8737 
8738  // Check that dimensions of pxsec are consistent with n_f
8739  // and n_p. It should be [n_f,n_p]:
8740  assert ( n_f==pxsec.nrows() );
8741  assert ( n_p==pxsec.ncols() );
8742 
8743 
8744  // ************************** CKD stuff ************************************
8745 
8746  const Numeric xLosmt = 2.686763e19; // [molecules/cm^3]
8747  const Numeric T1 = 273.0e0;
8748  const Numeric TO = 296.0e0;
8749  const Numeric PO = 1013.0e0;
8750 
8751  // wavenumber range where CKD CO2 continuum is valid
8752  const Numeric VABS_min = -2.000e1; // [cm^-1]
8753  const Numeric VABS_max = 1.000e4; // [cm^-1]
8754 
8755 
8756  // It is assumed here that f_grid is monotonically increasing with index!
8757  // In future change this return into a change of the loop over
8758  // the frequency f_grid. n_f_new < n_f
8759  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8760  Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8761  if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
8762  (V2ABS < VABS_min) || (V2ABS > VABS_max) )
8763  {
8764  out3 << "WARNING:\n"
8765  << " CKDv2.4.1 CO2 continuum:\n"
8766  << " input frequency vector exceeds range of model validity\n"
8767  << " " << FCO2_ckd_mt_100_v1 << "<->" << FCO2_ckd_mt_100_v2 << "cm^-1\n";
8768  }
8769 
8770 
8771  // ---------------------- subroutine FRNCO2 ------------------------------
8772 
8773  // retrieve the appropriate array sequence of the CO2 continuum
8774  // arrays of the CKD model.
8776  Numeric V1C = V1ABS - DVC;
8777  Numeric V2C = V2ABS + DVC;
8778 
8779  int I1 = (int) ((V1C-FCO2_ckd_mt_100_v1) / FCO2_ckd_mt_100_dv);
8780  if (V1C < FCO2_ckd_mt_100_v1) I1 = -1;
8782 
8783  int I2 = (int) ((V2C-FCO2_ckd_mt_100_v1) / FCO2_ckd_mt_100_dv);
8784 
8785  int NPTC = I2-I1+3;
8786  if (NPTC > FCO2_ckd_mt_100_npt) NPTC = FCO2_ckd_mt_100_npt+1;
8787 
8788  V2C = V1C + FCO2_ckd_mt_100_dv * (Numeric)(NPTC-1);
8789 
8790  if (NPTC < 1)
8791  {
8792  out3 << "WARNING:\n"
8793  << " CKDv2.4.1 CO2 continuum:\n"
8794  << " no elements of internal continuum coefficients could be found for the\n"
8795  << " input frequency range.\n"
8796  << " Leave the function without calculating the absorption.";
8797  return;
8798  }
8799 
8800  Numeric FCO2T0[NPTC+addF77fields]; // [cm^3/molecules]
8801 
8802  for (Index J = 1 ; J <= NPTC ; ++J)
8803  {
8804  Index I = I1+J;
8805  if ( (I < 1) || (I > FCO2_ckd_mt_100_npt) )
8806  {
8807  FCO2T0[J] = 0.0e0;
8808  }
8809  else
8810  {
8811  FCO2T0[J] = FCO2_ckd_mt_100[I];
8812  }
8813  }
8814 
8815  // ---------------------- subroutine FRNCO2 ------------------------------
8816 
8817 
8818 
8819 
8820  // Loop pressure/temperature:
8821  for ( Index i = 0 ; i < n_p ; ++i )
8822  {
8823  Numeric Tave = abs_t[i]; // [K]
8824  Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
8825  // FIXME Numeric vmrco2 = vmr[i]; // [1]
8826  Numeric Rhoave = (Pave/PO) * (TO/Tave); // [hPa]
8827  Numeric WTOT = xLosmt * (Pave/PO) * (T1/Tave); // [molecules/cm^2]
8828  Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
8829 
8830 
8831  // Molecular cross section calculated by CKD.
8832  // The cross sectionis calculated on the predefined
8833  // CKD wavenumber grid.
8834  Numeric k[NPTC+addF77fields]; // [1/cm]
8835  k[0] = 0.00e0; // not used array field
8836  for (Index J = 1 ; J <= NPTC ; ++J)
8837  {
8838  Numeric VJ = V1C + (DVC * (Numeric)(J-1));
8839  Numeric FCO2 = FCO2T0[J];
8840 
8841  // CKD cross section times number density with radiative field [1]
8842  // the VMRCO2 will be multiplied in abs_coefCalc
8843  k[J] = ((WTOT * Rhoave) * (FCO2*1.000e-20) * RADFN_FUN(VJ,XKT));
8844 
8845  }
8846 
8847 
8848  // Loop input frequency array. The previously calculated cross section
8849  // has therefore to be interpolated on the input frequencies.
8850  for ( Index s = 0 ; s < n_f ; ++s )
8851  {
8852  // calculate the associated wave number (= 1/wavelength)
8853  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8854  if ( (V > 0.000e0) && (V < FCO2_ckd_mt_100_v2) )
8855  {
8856  // arts cross section [1/m]
8857  // interpolate the k vector on the f_grid grid
8858  pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
8859  }
8860  }
8861  }
8862 
8863 }
8864 
8865 // =================================================================================
8866 
8867 
8869 
8894  const Numeric Cin,
8895  const String& model,
8896  ConstVectorView f_grid,
8897  ConstVectorView abs_p,
8898  ConstVectorView abs_t,
8899  ConstVectorView vmr _U_,
8900  const Verbosity& verbosity)
8901 {
8902  CREATE_OUT3;
8903 
8904  // check the model name about consistency
8905  if ((model != "user") && (model != "CKDMT100"))
8906  {
8907  ostringstream os;
8908  os << "!!ERROR!!\n"
8909  << "CKD_MT.1.00 CO2 continuum:\n"
8910  << "INPUT model name is: " << model << ".\n"
8911  << "VALID model names are user and CKDMT100\n";
8912  throw runtime_error(os.str());
8913  }
8914 
8915 
8916  // scaling factor of the CO2 absorption
8917  Numeric ScalingFac = 0.0000e0;
8918  if ( model == "user" )
8919  {
8920  ScalingFac = Cin; // input scaling factor of calculated absorption
8921  }
8922  else
8923  {
8924  ScalingFac = 1.0000e0;
8925  }
8926 
8927  const Index n_p = abs_p.nelem(); // Number of pressure levels
8928  const Index n_f = f_grid.nelem(); // Number of frequencies
8929 
8930 
8931  // Check that dimensions of abs_p, abs_t, and vmr agree:
8932  assert ( n_p==abs_t.nelem() );
8933  assert ( n_p==vmr.nelem() );
8934 
8935  // Check that dimensions of pxsec are consistent with n_f
8936  // and n_p. It should be [n_f,n_p]:
8937  assert ( n_f==pxsec.nrows() );
8938  assert ( n_p==pxsec.ncols() );
8939 
8940 
8941  // ************************** CKD stuff ************************************
8942 
8943  const Numeric xLosmt = 2.686763e19; // [molecules/cm^3]
8944  const Numeric T1 = 273.0e0;
8945  const Numeric TO = 296.0e0;
8946  const Numeric PO = 1013.0e0;
8947 
8948  // wavenumber range where CKD CO2 continuum is valid
8949  const Numeric VABS_min = FCO2_ckd_mt_100_v1; // [cm^-1]
8950  const Numeric VABS_max = FCO2_ckd_mt_100_v2; // [cm^-1]
8951 
8952 
8953  // It is assumed here that f_grid is monotonically increasing with index!
8954  // In future change this return into a change of the loop over
8955  // the frequency f_grid. n_f_new < n_f
8956  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8957  Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8958  if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
8959  (V2ABS < VABS_min) || (V2ABS > VABS_max) )
8960  {
8961  out3 << "WARNING:\n"
8962  << " CKD_MT 1.00 CO2 continuum:\n"
8963  << " input frequency vector exceeds range of model validity\n"
8964  << " " << FCO2_ckd_mt_100_v1 << "<->" << FCO2_ckd_mt_100_v2 << "cm^-1\n";
8965  }
8966 
8967 
8968  // ---------------------- subroutine FRNCO2 ------------------------------
8969 
8970  // retrieve the appropriate array sequence of the CO2 continuum
8971  // arrays of the CKD model.
8973  Numeric V1C = V1ABS - DVC;
8974  Numeric V2C = V2ABS + DVC;
8975 
8976  int I1 = (int) ((V1C-FCO2_ckd_mt_100_v1) / FCO2_ckd_mt_100_dv);
8977  if (V1C < FCO2_ckd_mt_100_v1) I1 = -1;
8979 
8980  int I2 = (int) ((V2C-FCO2_ckd_mt_100_v1) / FCO2_ckd_mt_100_dv);
8981 
8982  int NPTC = I2-I1+3;
8983  if (NPTC > FCO2_ckd_mt_100_npt) NPTC = FCO2_ckd_mt_100_npt+1;
8984 
8985  V2C = V1C + FCO2_ckd_mt_100_dv * (Numeric)(NPTC-1);
8986 
8987  if (NPTC < 1)
8988  {
8989  out3 << "WARNING:\n"
8990  << " CKD_MT 1.00 CO2 continuum:\n"
8991  << " no elements of internal continuum coefficients could be found for the\n"
8992  << " input frequency range.\n"
8993  << " Leave the function without calculating the absorption.";
8994  return;
8995  }
8996 
8997  Vector FCO2T0(NPTC+addF77fields, 0.); // [cm^3/molecules]
8998 
8999  for (Index J = 1 ; J <= NPTC ; ++J)
9000  {
9001  Index I = I1+J;
9002  if ( (I > 0) && (I <= FCO2_ckd_mt_100_npt) )
9003  {
9004  FCO2T0[J] = FCO2_ckd_mt_100[I];
9005  }
9006  }
9007 
9008  // ---------------------- subroutine FRNCO2 ------------------------------
9009 
9010 
9011 
9012 
9013  // Loop pressure/temperature:
9014  for ( Index i = 0 ; i < n_p ; ++i )
9015  {
9016  Numeric Tave = abs_t[i]; // [K]
9017  Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
9018  // FIXME Numeric vmrco2 = vmr[i]; // [1]
9019  Numeric Rhoave = (Pave/PO) * (TO/Tave); // [hPa]
9020  Numeric WTOT = xLosmt * (Pave/PO) * (T1/Tave); // [molecules/cm^2]
9021  Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
9022 
9023 
9024  // Molecular cross section calculated by CKD.
9025  // The cross sectionis calculated on the predefined
9026  // CKD wavenumber grid.
9027  Vector k(NPTC+addF77fields, 0.); // [1/cm]
9028  for (Index J = 1 ; J <= NPTC ; ++J)
9029  {
9030  Numeric VJ = V1C + (DVC * (Numeric)(J-1));
9031  Numeric FCO2 = FCO2T0[J];
9032 
9033  // continuum has been increased in the nu2 band by a factor of 7
9034  if ( (VJ > 500.0e0) && (VJ < 900.0e0) )
9035  {
9036  FCO2 = 7.000e0 * FCO2;
9037  }
9038 
9039  // CKD cross section times number density with radiative field [1]
9040  // the VMRCO2 will be multiplied in abs_coefCalc
9041  k[J] = ((WTOT * Rhoave) * (FCO2*1.000e-20) * RADFN_FUN(VJ,XKT));
9042 
9043  }
9044 
9045 
9046  // Loop input frequency array. The previously calculated cross section
9047  // has therefore to be interpolated on the input frequencies.
9048  for ( Index s = 0 ; s < n_f ; ++s )
9049  {
9050  // calculate the associated wave number (= 1/wavelength)
9051  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9052  if ( (V > 0.000e0) && (V < FCO2_ckd_mt_100_v2) )
9053  {
9054  // arts cross section [1/m]
9055  // interpolate the k vector on the f_grid grid
9056  pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
9057  }
9058  }
9059  }
9060 
9061 }
9062 // =================================================================================
9063 
9064 
9066 
9091  const Numeric Cin,
9092  const String& model,
9093  ConstVectorView f_grid,
9094  ConstVectorView abs_p,
9095  ConstVectorView abs_t,
9096  ConstVectorView vmr _U_,
9097  const Verbosity& verbosity)
9098 {
9099  CREATE_OUT3;
9100 
9101  // check the model name about consistency
9102  if ((model != "user") && (model != "CKDMT250"))
9103  {
9104  ostringstream os;
9105  os << "!!ERROR!!\n"
9106  << "CKD_MT.2.50 CO2 continuum:\n"
9107  << "INPUT model name is: " << model << ".\n"
9108  << "VALID model names are user and CKDMT250\n";
9109  throw runtime_error(os.str());
9110  }
9111 
9112 
9113  // scaling factor of the CO2 absorption
9114  Numeric ScalingFac = 0.0000e0;
9115  if ( model == "user" )
9116  {
9117  ScalingFac = Cin; // input scaling factor of calculated absorption
9118  }
9119  else
9120  {
9121  ScalingFac = 1.0000e0;
9122  }
9123 
9124  const Index n_p = abs_p.nelem(); // Number of pressure levels
9125  const Index n_f = f_grid.nelem(); // Number of frequencies
9126 
9127 
9128  // Check that dimensions of abs_p, abs_t, and vmr agree:
9129  assert ( n_p==abs_t.nelem() );
9130  assert ( n_p==vmr.nelem() );
9131 
9132  // Check that dimensions of pxsec are consistent with n_f
9133  // and n_p. It should be [n_f,n_p]:
9134  assert ( n_f==pxsec.nrows() );
9135  assert ( n_p==pxsec.ncols() );
9136 
9137 
9138  // ************************** CKD stuff ************************************
9139 
9140  const Numeric xLosmt = 2.686763e19; // [molecules/cm^3]
9141  const Numeric T1 = 273.0e0;
9142  const Numeric TO = 296.0e0;
9143  const Numeric PO = 1013.0e0;
9144 // Temparature dependence coefficients for wavenumbers between 2386
9145 // and 2434. Computed based on (line-coupled) continuum coefficients
9146 // at 250K and 296K, set to unity at T_eff (determined by invariance
9147 // of calculations in this region for IASI low PWV cases).
9148  const Numeric tdep_bandhead[25] = {
9149  1.44e-01,3.61e-01,5.71e-01,7.63e-01,8.95e-01,
9150  9.33e-01,8.75e-01,7.30e-01,5.47e-01,3.79e-01,
9151  2.55e-01,1.78e-01,1.34e-01,1.07e-01,9.06e-02,
9152  7.83e-02,6.83e-02,6.00e-02,5.30e-02,4.72e-02,
9153  4.24e-02,3.83e-02,3.50e-02,3.23e-02,3.01e-02};
9154 // Correction factors for CO2 from 2000-3000 cm-1 (mt_ckd_2.5)
9155 // (stored every 2 cm-1 - same as CO2 continuum).
9156  const Numeric XfacCO2[500] = {
9157  1.0000,0.9998,0.9997,0.9996,0.9995,0.9994,0.9992,0.9991,
9158  0.9991,0.9990,0.9990,0.9989,0.9988,0.9988,0.9987,0.9986,
9159  0.9985,0.9984,0.9983,0.9982,0.9981,0.9980,0.9979,0.9978,
9160  0.9976,
9161  0.9975,0.9973,0.9972,0.9970,0.9969,0.9967,0.9965,0.9963,
9162  0.9961,0.9958,0.9956,0.9954,0.9951,0.9948,0.9946,0.9943,
9163  0.9940,0.9936,0.9933,0.9929,0.9926,0.9922,0.9918,0.9913,
9164  0.9909,
9165  0.9904,0.9899,0.9894,0.9889,0.9884,0.9878,0.9872,0.9866,
9166  0.9859,0.9853,0.9846,0.9838,0.9831,0.9823,0.9815,0.9806,
9167  0.9798,0.9789,0.9779,0.9770,0.9759,0.9749,0.9738,0.9727,
9168  0.9716,
9169  0.9704,0.9691,0.9679,0.9666,0.9652,0.9638,0.9624,0.9609,
9170  0.9594,0.9578,0.9562,0.9546,0.9529,0.9511,0.9493,0.9475,
9171  0.9456,0.9436,0.9417,0.9396,0.9375,0.9354,0.9332,0.9310,
9172  0.9287,
9173  0.9264,0.9240,0.9216,0.9191,0.9166,0.9140,0.9114,0.9087,
9174  0.9060,0.9032,0.9004,0.8976,0.8947,0.8917,0.8887,0.8857,
9175  0.8827,0.8796,0.8764,0.8732,0.8700,0.8668,0.8635,0.8602,
9176  0.8568,
9177  0.8534,0.8500,0.8466,0.8432,0.8397,0.8362,0.8327,0.8292,
9178  0.8257,0.8221,0.8186,0.8151,0.8115,0.8080,0.8044,0.8009,
9179  0.7973,0.7938,0.7903,0.7868,0.7833,0.7799,0.7764,0.7730,
9180  0.7697,
9181  0.7663,0.7630,0.7597,0.7565,0.7533,0.7502,0.7471,0.7441,
9182  0.7411,0.7382,0.7354,0.7326,0.7298,0.7272,0.7246,0.7221,
9183  0.7197,0.7173,0.7150,0.7129,0.7108,0.7088,0.7068,0.7050,
9184  0.7033,
9185  0.7016,0.7001,0.6986,0.6973,0.6961,0.6949,0.6939,0.6930,
9186  0.6921,0.6914,0.6908,0.6903,0.6899,0.6897,0.6895,0.6895,
9187  0.6895,0.6895,0.6895,0.6895,0.6908,0.7014,0.7121,0.7227,
9188  0.7552,
9189  0.8071,0.8400,0.9012,0.9542,1.0044,1.0330,1.0554,1.0766,
9190  1.0967,1.1160,1.1346,1.1525,1.1700,1.1869,1.2035,1.2196,
9191  1.2354,1.2509,1.2662,1.2811,1.2958,1.3103,1.3245,1.3386,
9192  1.3525,
9193  1.3661,1.3796,1.3930,1.4062,1.4193,1.4322,1.4449,1.4576,
9194  1.4701,1.4825,1.4949,1.5070,1.5191,1.5311,1.5430,1.5548,
9195  1.5550,1.5550,1.5550,1.5550,1.5550,1.5550,1.5550,1.5550,
9196  1.5550,
9197  1.5550,1.5550,1.5550,1.5550,1.5550,1.5550,1.5550,1.5550,
9198  1.5550,1.5550,1.5550,1.5549,1.5547,1.5543,1.5539,1.5532,
9199  1.5525,1.5516,1.5506,1.5494,1.5481,1.5467,1.5452,1.5435,
9200  1.5417,
9201  1.5397,1.5377,1.5355,1.5332,1.5308,1.5282,1.5255,1.5228,
9202  1.5199,1.5169,1.5137,1.5105,1.5072,1.5037,1.5002,1.4966,
9203  1.4929,1.4890,1.4851,1.4811,1.4771,1.4729,1.4686,1.4643,
9204  1.4599,
9205  1.4555,1.4509,1.4463,1.4417,1.4370,1.4322,1.4274,1.4225,
9206  1.4176,1.4126,1.4076,1.4025,1.3974,1.3923,1.3872,1.3820,
9207  1.3768,1.3716,1.3663,1.3611,1.3558,1.3505,1.3452,1.3400,
9208  1.3347,
9209  1.3294,1.3241,1.3188,1.3135,1.3083,1.3030,1.2978,1.2926,
9210  1.2874,1.2822,1.2771,1.2720,1.2669,1.2618,1.2568,1.2518,
9211  1.2468,1.2419,1.2370,1.2322,1.2274,1.2227,1.2180,1.2133,
9212  1.2087,
9213  1.2041,1.1996,1.1952,1.1907,1.1864,1.1821,1.1778,1.1737,
9214  1.1695,1.1654,1.1614,1.1575,1.1536,1.1497,1.1460,1.1422,
9215  1.1386,1.1350,1.1314,1.1280,1.1246,1.1212,1.1179,1.1147,
9216  1.1115,
9217  1.1084,1.1053,1.1024,1.0994,1.0966,1.0938,1.0910,1.0883,
9218  1.0857,1.0831,1.0806,1.0781,1.0757,1.0734,1.0711,1.0688,
9219  1.0667,1.0645,1.0624,1.0604,1.0584,1.0565,1.0546,1.0528,
9220  1.0510,
9221  1.0493,1.0476,1.0460,1.0444,1.0429,1.0414,1.0399,1.0385,
9222  1.0371,1.0358,1.0345,1.0332,1.0320,1.0308,1.0296,1.0285,
9223  1.0275,1.0264,1.0254,1.0244,1.0235,1.0226,1.0217,1.0208,
9224  1.0200,
9225  1.0192,1.0184,1.0177,1.0170,1.0163,1.0156,1.0150,1.0143,
9226  1.0137,1.0132,1.0126,1.0121,1.0116,1.0111,1.0106,1.0101,
9227  1.0097,1.0092,1.0088,1.0084,1.0081,1.0077,1.0074,1.0070,
9228  1.0067,
9229  1.0064,1.0061,1.0058,1.0055,1.0053,1.0050,1.0048,1.0046,
9230  1.0043,1.0041,1.0039,1.0037,1.0036,1.0034,1.0032,1.0030,
9231  1.0029,1.0027,1.0026,1.0025,1.0023,1.0022,1.0021,1.0020,
9232  1.0019,
9233  1.0018,1.0017,1.0016,1.0015,1.0014,1.0014,1.0013,1.0012,
9234  1.0011,1.0011,1.0010,1.0010,1.0009,1.0009,1.0008,1.0007,
9235  1.0006,1.0005,1.0004,1.0003,1.0002,1.0001,1.0000,1.0000,
9236  1.0000};
9237 
9238  // wavenumber range where CKD CO2 continuum is valid
9239  const Numeric VABS_min = FCO2_ckd_mt_250_v1; // [cm^-1]
9240  const Numeric VABS_max = FCO2_ckd_mt_250_v2; // [cm^-1]
9241 
9242 
9243  // It is assumed here that f_grid is monotonically increasing with index!
9244  // In future change this return into a change of the loop over
9245  // the frequency f_grid. n_f_new < n_f
9246  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9247  Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9248  if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
9249  (V2ABS < VABS_min) || (V2ABS > VABS_max) )
9250  {
9251  out3 << "WARNING:\n"
9252  << " CKD_MT 2.50 CO2 continuum:\n"
9253  << " input frequency vector exceeds range of model validity\n"
9254  << " " << FCO2_ckd_mt_250_v1 << "<->" << FCO2_ckd_mt_250_v2 << "cm^-1\n";
9255  }
9256 
9257 
9258  // ---------------------- subroutine FRNCO2 ------------------------------
9259 
9260  // retrieve the appropriate array sequence of the CO2 continuum
9261  // arrays of the CKD model.
9263  Numeric V1C = V1ABS - DVC;
9264  Numeric V2C = V2ABS + DVC;
9265 
9266  int I1 = (int) ((V1C-FCO2_ckd_mt_250_v1) / FCO2_ckd_mt_250_dv);
9267  if (V1C < FCO2_ckd_mt_250_v1) I1 = -1;
9269 
9270  int I2 = (int) ((V2C-FCO2_ckd_mt_250_v1) / FCO2_ckd_mt_250_dv);
9271 
9272  int NPTC = I2-I1+3;
9273  if (NPTC > FCO2_ckd_mt_250_npt) NPTC = FCO2_ckd_mt_250_npt+1;
9274 
9275  V2C = V1C + FCO2_ckd_mt_250_dv * (Numeric)(NPTC-1);
9276 
9277  if (NPTC < 1)
9278  {
9279  out3 << "WARNING:\n"
9280  << " CKD_MT 2.50 CO2 continuum:\n"
9281  << " no elements of internal continuum coefficients could be found for the\n"
9282  << " input frequency range.\n"
9283  << " Leave the function without calculating the absorption.";
9284  return;
9285  }
9286 
9287  Vector FCO2T0(NPTC+addF77fields, 0.); // [cm^3/molecules]
9288 
9289  for (Index J = 1 ; J <= NPTC ; ++J)
9290  {
9291  Index I = I1+J;
9292  if ( (I > 0) && (I <= FCO2_ckd_mt_250_npt) )
9293  {
9294  FCO2T0[J] = FCO2_ckd_mt_250[I];
9295  }
9296  }
9297 
9298  // ---------------------- subroutine FRNCO2 ------------------------------
9299 
9300 
9301 
9302 
9303  // Loop pressure/temperature:
9304  for ( Index i = 0 ; i < n_p ; ++i )
9305  {
9306  Numeric Tave = abs_t[i]; // [K]
9307  Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
9308  // FIXME Numeric vmrco2 = vmr[i]; // [1]
9309  Numeric Rhoave = (Pave/PO) * (TO/Tave); // [hPa]
9310  Numeric WTOT = xLosmt * (Pave/PO) * (T1/Tave); // [molecules/cm^2]
9311  Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
9312 
9313 
9314  // Molecular cross section calculated by CKD.
9315  // The cross sectionis calculated on the predefined
9316  // CKD wavenumber grid.
9317  Vector k(NPTC+addF77fields, 0.); // [1/cm]
9318  for (Index J = 1 ; J <= NPTC ; ++J)
9319  {
9320  Numeric VJ = V1C + (DVC * (Numeric)(J-1));
9321  Numeric FCO2 = FCO2T0[J];
9322  const Index I1J = I1 + J-1;
9323 
9324 // CKD MT 2.0 This continuum differs from mt_ck_1.3 in that an entirely
9325 // new co2 continuum has been developed based on the line coupling parameters from
9326 // Hartmann's group as distributed with hitran. This continuum must be used with lblrtm_v11
9327 // and spectral line parameters including Hartmann's line parameters for co2.
9328 // Based on recent validation studies, a scaling of the continuum for v3 is required to achieve an acceptable result
9329 // at 2385 cm-1, the 'bandhead' of v3. Clough et al., presentation at EGU 2007
9330 
9331 
9332  if ( (I1J >= 1196.0e0) && (I1J <= 1220.0e0) )
9333  {
9334  FCO2 = pow( (Tave/246.0e0), tdep_bandhead[I1J-1196] ) * FCO2;
9335  }
9336 // CKD MT 2.5 Adjustment to the original scaling made (temperature dependece added)
9337  if ( (VJ > 2000.0e0) && (VJ < 2998.0e0) )
9338  {
9339  int JFAC = int( (VJ - 1998.00e0)/2.00e0 + 0.00001e0) ;
9340  FCO2 = XfacCO2[JFAC] * FCO2;
9341  }
9342 
9343 
9344  // CKD cross section times number density with radiative field [1]
9345  // the VMRCO2 will be multiplied in abs_coefCalc
9346  k[J] = ((WTOT * Rhoave) * (FCO2*1.000e-20) * RADFN_FUN(VJ,XKT));
9347 
9348  }
9349 
9350 
9351  // Loop input frequency array. The previously calculated cross section
9352  // has therefore to be interpolated on the input frequencies.
9353  for ( Index s = 0 ; s < n_f ; ++s )
9354  {
9355  // calculate the associated wave number (= 1/wavelength)
9356  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9357  if ( (V > 0.000e0) && (V < FCO2_ckd_mt_250_v2) )
9358  {
9359  // arts cross section [1/m]
9360  // interpolate the k vector on the f_grid grid
9361  pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
9362  }
9363  }
9364  }
9365 
9366 }
9367 
9368 // =================================================================================
9370 
9406  const Numeric Cin,
9407  const String& model,
9408  ConstVectorView f_grid,
9409  ConstVectorView abs_p,
9410  ConstVectorView abs_t,
9411  ConstVectorView vmr,
9412  const Verbosity& verbosity)
9413 {
9414  CREATE_OUT3;
9415 
9416  // check the model name about consistency
9417  if ((model != "user") && (model != "CKDMT100"))
9418  {
9419  ostringstream os;
9420  os << "!!ERROR!!\n"
9421  << "CKD_MT1.00 N2 CIA rotational band:\n"
9422  << "INPUT model name is: " << model << ".\n"
9423  << "VALID model names are user and CKDMT100\n";
9424  throw runtime_error(os.str());
9425  }
9426 
9427 
9428  // scaling factor of the N2-N2 CIA rot. band absorption
9429  Numeric ScalingFac = 0.0000e0;
9430  if ( model == "user" )
9431  {
9432  ScalingFac = Cin; // input scaling factor of calculated absorption
9433  }
9434  else
9435  {
9436  ScalingFac = 1.0000e0;
9437  }
9438 
9439  const Index n_p = abs_p.nelem(); // Number of pressure levels
9440  const Index n_f = f_grid.nelem(); // Number of frequencies
9441 
9442 
9443  // Check that dimensions of abs_p, abs_t, and vmr agree:
9444  assert ( n_p==abs_t.nelem() );
9445  assert ( n_p==vmr.nelem() );
9446 
9447  // Check that dimensions of pxsec are consistent with n_f
9448  // and n_p. It should be [n_f,n_p]:
9449  assert ( n_f==pxsec.nrows() );
9450  assert ( n_p==pxsec.ncols() );
9451 
9452 
9453  // ************************** CKD stuff ************************************
9454 
9455  // FIXME const Numeric xLosmt = 2.686763e19; // Loschmidt Number [molecules/cm^3]
9456  const Numeric T1 = 273.0e0;
9457  const Numeric TO = 296.0e0;
9458  const Numeric PO = 1013.0e0;
9459 
9460 
9461  // wavenumber range where CKD H2O self continuum is valid
9462  const Numeric VABS_min = -1.000e1; // [cm^-1]
9463  const Numeric VABS_max = 3.500e2; // [cm^-1]
9464 
9465 
9466  // It is assumed here that f_grid is monotonically increasing with index!
9467  // In future change this return into a change of the loop over
9468  // the frequency f_grid. n_f_new < n_f
9469  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9470  Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9471  if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
9472  (V2ABS < VABS_min) || (V2ABS > VABS_max) )
9473  {
9474  out3 << "WARNING:\n"
9475  << " CKD_MT 1.00 N2-N2 CIA rotational band:\n"
9476  << " input frequency vector exceeds range of model validity\n"
9477  << " " << N2N2_CT296_ckd_mt_100_v1 << "<->" << N2N2_CT220_ckd_mt_100_v2 << "cm^-1\n";
9478  }
9479 
9480 
9481  // ------------------- subroutine N2R296/N2R220 ----------------------------
9482 
9484  {
9485  ostringstream os;
9486  os << "!!ERROR!!\n"
9487  << "CKD_MT 1.00 N2-N2 CIA rotational band:\n"
9488  << "parameter V1 not the same for different ref. temperatures.\n";
9489  throw runtime_error(os.str());
9490  }
9492  {
9493  ostringstream os;
9494  os << "!!ERROR!!\n"
9495  << "CKD_MT 1.00 N2-N2 CIA rotational band:\n"
9496  << "parameter V2 not the same for different ref. temperatures.\n";
9497  throw runtime_error(os.str());
9498  }
9500  {
9501  ostringstream os;
9502  os << "!!ERROR!!\n"
9503  << "CKD_MT 1.00 N2-N2 CIA rotational band:\n"
9504  << "parameter DV not the same for different ref. temperatures.\n";
9505  throw runtime_error(os.str());
9506  }
9508  {
9509  ostringstream os;
9510  os << "!!ERROR!!\n"
9511  << "CKD_MT 1.00 N2-N2 CIA rotational band:\n"
9512  << "parameter NPT not the same for different ref. temperatures.\n";
9513  throw runtime_error(os.str());
9514  }
9515 
9516  // retrieve the appropriate array sequence of the self continuum
9517  // arrays of the CKD model.
9519  Numeric V1C = V1ABS - DVC;
9520  Numeric V2C = V2ABS + DVC;
9521 
9522  int I1 = (int) ((V1C-N2N2_CT296_ckd_mt_100_v1) / N2N2_CT296_ckd_mt_100_dv);
9523  if (V1C < N2N2_CT296_ckd_mt_100_v1) I1 = -1;
9525 
9526  int I2 = (int) ((V2C-N2N2_CT296_ckd_mt_100_v1) / N2N2_CT296_ckd_mt_100_dv);
9527 
9528  int NPTC = I2-I1+3;
9530 
9531  V2C = V1C + N2N2_CT296_ckd_mt_100_dv * (Numeric)(NPTC-1);
9532 
9533  if (NPTC < 1)
9534  {
9535  out3 << "WARNING:\n"
9536  << " CKD_MT 1.00 N2-N2 CIA rotational band:\n"
9537  << " no elements of internal continuum coefficients could be found for the\n"
9538  << " input frequency range.\n"
9539  << " Leave the function without calculating the absorption.\n";
9540  return;
9541  }
9542 
9543  Vector C0(NPTC+addF77fields, 0.); // [cm^3/molecules]
9544  Vector C1(NPTC+addF77fields, 0.); // [cm^3/molecules]
9545 
9546  for (Index J = 1 ; J <= NPTC ; ++J)
9547  {
9548  Index I = I1+J;
9549  if ( (I > 0) && (I <= N2N2_CT296_ckd_mt_100_npt) )
9550  {
9551  C0[J] = N2N2_CT296_ckd_mt_100[I]; // at T=296 K
9552  C1[J] = N2N2_CT220_ckd_mt_100[I]; // at T=260 K
9553  }
9554  }
9555 
9556  // ------------------- subroutine N2R296/N2R220 ----------------------------
9557 
9558 
9559 
9560 
9561  // Loop pressure/temperature:
9562  for ( Index i = 0 ; i < n_p ; ++i )
9563  {
9564  Numeric Tave = abs_t[i]; // [K]
9565  Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
9566  Numeric vmrn2 = vmr[i]; // [1]
9567  Numeric facfac = vmrn2 * (Pave/PO) * (Pave/PO) *
9568  (T1/Tave) * (T1/Tave);
9569 
9570  Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
9571  Numeric Tfac = (Tave - TO) / (220.0e0 - TO);
9572 
9573  // Molecular cross section calculated by CKD.
9574  // The cross sectionis calculated on the predefined
9575  // CKD wavenumber grid.
9576  Vector k(NPTC+addF77fields, 0.); // [1/cm]
9577  for (Index J = 1 ; J <= NPTC ; ++J)
9578  {
9579  Numeric VJ = V1C + (DVC * (Numeric)(J-1));
9580  Numeric SN2 = 0.000e0;
9581  if ( (C0[J] > 0.000e0) && (C1[J] > 0.000e0) )
9582  {
9583  SN2 = facfac* C0[J] * pow( (C1[J]/C0[J]), Tfac );
9584  }
9585 
9586  // CKD cross section with radiative field
9587  k[J] = SN2 * RADFN_FUN(VJ,XKT); // [1]
9588  }
9589 
9590 
9591  // Loop input frequency array. The previously calculated cross section
9592  // has therefore to be interpolated on the input frequencies.
9593  for ( Index s = 0 ; s < n_f ; ++s )
9594  {
9595  // calculate the associated wave number (= 1/wavelength)
9596  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9597  if ( (V > 0.000e0) && (V < N2N2_CT220_ckd_mt_100_v2) )
9598  {
9599  // arts cross section [1/m]
9600  // interpolate the k vector on the f_grid grid
9601  pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
9602  }
9603  }
9604  }
9605 
9606 }
9607 
9608 // =================================================================================
9609 
9611 
9652  const Numeric Cin,
9653  const String& model,
9654  ConstVectorView f_grid,
9655  ConstVectorView abs_p,
9656  ConstVectorView abs_t,
9657  ConstVectorView vmr,
9658  const Verbosity& verbosity)
9659 {
9660  CREATE_OUT3;
9661 
9662  // check the model name about consistency
9663  if ((model != "user") && (model != "CKDMT100"))
9664  {
9665  ostringstream os;
9666  os << "!!ERROR!!\n"
9667  << "CKD_MT1.00 N2 CIA fundamental band:\n"
9668  << "INPUT model name is: " << model << ".\n"
9669  << "VALID model names are user and CKDMT100\n";
9670  throw runtime_error(os.str());
9671  }
9672 
9673 
9674  // scaling factor of the N2-N2 CIA fundamental band absorption
9675  Numeric ScalingFac = 1.0000e0;
9676  if ( model == "user" )
9677  {
9678  ScalingFac = Cin; // input scaling factor of calculated absorption
9679  }
9680 
9681 
9682  const Index n_p = abs_p.nelem(); // Number of pressure levels
9683  const Index n_f = f_grid.nelem(); // Number of frequencies
9684 
9685 
9686  // Check that dimensions of abs_p, abs_t, and vmr agree:
9687  assert ( n_p==abs_t.nelem() );
9688  assert ( n_p==vmr.nelem() );
9689 
9690  // Check that dimensions of pxsec are consistent with n_f
9691  // and n_p. It should be [n_f,n_p]:
9692  assert ( n_f==pxsec.nrows() );
9693  assert ( n_p==pxsec.ncols() );
9694 
9695 
9696  // ************************** CKD stuff ************************************
9697 
9698  const Numeric xLosmt = 2.686763e19; // Loschmidt Number [molecules/cm^3]
9699  const Numeric T1 = 273.0e0;
9700  const Numeric TO = 296.0e0;
9701  const Numeric PO = 1013.0e0;
9702  const Numeric a1 = 0.8387e0;
9703  const Numeric a2 = 0.0754e0;
9704 
9705 
9706  // It is assumed here that f_grid is monotonically increasing with index!
9707  // In future change this return into a change of the loop over
9708  // the frequency f_grid. n_f_new < n_f
9709  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9710  Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9711  if ( (V1ABS < N2N2_N2F_ckd_mt_100_v1) || (V1ABS > N2N2_N2F_ckd_mt_100_v2) ||
9712  (V2ABS < N2N2_N2F_ckd_mt_100_v1) || (V2ABS > N2N2_N2F_ckd_mt_100_v2) )
9713  {
9714  out3 << "WARNING:\n"
9715  << " CKD_MT 1.00 N2-N2 CIA fundamental band:\n"
9716  << " input frequency vector exceeds range of model validity\n"
9717  << " " << N2N2_N2F_ckd_mt_100_v1 << "<->" << N2N2_N2F_ckd_mt_100_v2 << "cm^-1\n";
9718  }
9719 
9720 
9721  // ------------------- subroutine N2_VER_1 ----------------------------
9722 
9723  // retrieve the appropriate array sequence of the self continuum
9724  // arrays of the CKD model.
9726  Numeric V1C = V1ABS - DVC;
9727  Numeric V2C = V2ABS + DVC;
9728 
9729  int I1 = (int) ((V1C-N2N2_N2F_ckd_mt_100_v1) / N2N2_N2F_ckd_mt_100_dv);
9730  if (V1C < N2N2_N2F_ckd_mt_100_v1) I1 = -1;
9732 
9733  int I2 = (int) ((V2C-N2N2_N2F_ckd_mt_100_v1) / N2N2_N2F_ckd_mt_100_dv);
9734 
9735  int NPTC = I2-I1+3;
9736  if (NPTC > N2N2_N2F_ckd_mt_100_npt) NPTC = N2N2_N2F_ckd_mt_100_npt+1;
9737 
9738  V2C = V1C + N2N2_N2F_ckd_mt_100_dv * (Numeric)(NPTC-1);
9739 
9740  if (NPTC < 1)
9741  {
9742  out3 << "WARNING:\n"
9743  << " CKD_MT 1.00 N2-N2 CIA fundamental band:\n"
9744  << " no elements of internal continuum coefficients could be found for the\n"
9745  << " input frequency range.\n";
9746  return;
9747  }
9748 
9749  Vector xn2(NPTC+addF77fields, 0.);
9750  Vector xn2t(NPTC+addF77fields, 0.);
9751 
9752  for (Index J = 1 ; J <= NPTC ; ++J)
9753  {
9754  Index I = I1+J;
9755  if ( (I > 0) && (I <= N2N2_N2F_ckd_mt_100_npt) )
9756  {
9757  xn2[J] = N2N2_N2F_ckd_mt_100[I];
9758  xn2t[J] = N2N2_N2Ft_ckd_mt_100[I];
9759  }
9760  }
9761 
9762  // ------------------- subroutine N2_VER_1 ----------------------------
9763 
9764 
9765 
9766 
9767  // Loop pressure/temperature:
9768  for ( Index i = 0 ; i < n_p ; ++i )
9769  {
9770  Numeric Tave = abs_t[i]; // [K]
9771  Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
9772  Numeric vmrn2 = vmr[i]; // [1]
9773  Numeric WTOT = xLosmt * (Pave/PO) * (T1/Tave); // [molecules/cm^2]
9774  Numeric tau_fac= WTOT * (Pave/PO) * (T1/Tave);
9775 
9776  Numeric XKT = Tave / 1.4387752e0; // = (T*k_B) / (h*c)
9777 
9778  // FIXME Numeric Tfac = (Tave - TO) / (220.0e0 - TO); // [1]
9779  Numeric xktfac = (1.000e0/TO) - (1.000e0/Tave); // [1/K]
9780  Numeric factor = 0.000e0;
9781  if (vmrn2 > VMRCalcLimit)
9782  {
9783  factor = (1.000e0 / xLosmt) * (1.000e0/vmrn2) * (a1 - a2*(Tave/TO));
9784  }
9785 
9786  // Molecular cross section calculated by CKD.
9787  // The cross sectionis calculated on the predefined
9788  // CKD wavenumber grid.
9789  Vector k(NPTC+addF77fields+1, 0.); // [1/cm]
9790  for (Index J = 1 ; J <= NPTC ; ++J)
9791  {
9792  Numeric VJ = V1C + (DVC * (Numeric)(J-1));
9793  Numeric SN2 = 0.000e0;
9794  if (xn2[J] > 0.000e0)
9795  {
9796  Numeric C0 = factor * xn2[J] * exp(xn2t[J]*xktfac) / VJ;
9797  SN2 = tau_fac * C0;
9798  }
9799 
9800  // CKD cross section with radiative field
9801  k[J] = SN2 * RADFN_FUN(VJ,XKT); // [1/cm]
9802  }
9803 
9804 
9805  // Loop input frequency array. The previously calculated cross section
9806  // has therefore to be interpolated on the input frequencies.
9807  for ( Index s = 0 ; s < n_f ; ++s )
9808  {
9809  // calculate the associated wave number (= 1/wavelength)
9810  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9811  if ( (V > N2N2_N2F_ckd_mt_100_v1) && (V < N2N2_N2F_ckd_mt_100_v2) )
9812  {
9813  // arts cross section [1/m]
9814  // interpolate the k vector on the f_grid grid
9815  pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
9816  }
9817  }
9818  }
9819 
9820 }
9821 // =================================================================================
9823 
9867  const Numeric Cin,
9868  const String& model,
9869  ConstVectorView f_grid,
9870  ConstVectorView abs_p,
9871  ConstVectorView abs_t,
9872  ConstVectorView vmr,
9873  ConstVectorView abs_h2o,
9874  ConstVectorView abs_o2,
9875  const Verbosity& verbosity)
9876 {
9877  CREATE_OUT3;
9878 
9879  // check the model name about consistency
9880  if ((model != "user") && (model != "CKDMT250"))
9881  {
9882  ostringstream os;
9883  os << "!!ERROR!!\n"
9884  << "CKD_MT2.50 N2 CIA rotational band:\n"
9885  << "INPUT model name is: " << model << ".\n"
9886  << "VALID model names are user and CKDMT250\n";
9887  throw runtime_error(os.str());
9888  }
9889 
9890 
9891  // scaling factor of the N2-N2 CIA rot. band absorption
9892  Numeric ScalingFac = 0.0000e0;
9893  if ( model == "user" )
9894  {
9895  ScalingFac = Cin; // input scaling factor of calculated absorption
9896  }
9897  else
9898  {
9899  ScalingFac = 1.0000e0;
9900  }
9901 
9902  const Index n_p = abs_p.nelem(); // Number of pressure levels
9903  const Index n_f = f_grid.nelem(); // Number of frequencies
9904 
9905 
9906  // Check that dimensions of abs_p, abs_t, and vmr agree:
9907  assert ( n_p==abs_t.nelem() );
9908  assert ( n_p==vmr.nelem() );
9909 
9910  // Check that dimensions of pxsec are consistent with n_f
9911  // and n_p. It should be [n_f,n_p]:
9912  assert ( n_f==pxsec.nrows() );
9913  assert ( n_p==pxsec.ncols() );
9914 
9915 
9916  // ************************** CKD stuff ************************************
9917 
9918  // FIXME const Numeric xLosmt = 2.686763e19; // Loschmidt Number [molecules/cm^3]
9919  const Numeric T1 = 273.0e0;
9920  const Numeric TO = 296.0e0;
9921  const Numeric PO = 1013.0e0;
9922 
9923 
9924  // wavenumber range where CKD H2O self continuum is valid
9925  const Numeric VABS_min = -1.000e1; // [cm^-1]
9926  const Numeric VABS_max = 3.500e2; // [cm^-1]
9927 
9928 
9929  // It is assumed here that f_grid is monotonically increasing with index!
9930  // In future change this return into a change of the loop over
9931  // the frequency f_grid. n_f_new < n_f
9932  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9933  Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9934  if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
9935  (V2ABS < VABS_min) || (V2ABS > VABS_max) )
9936  {
9937  out3 << "WARNING:\n"
9938  << " CKD_MT 2.50 N2-N2 CIA rotational band:\n"
9939  << " input frequency vector exceeds range of model validity\n"
9940  << " " << N2N2_CT296_ckd_mt_100_v1 << "<->" << N2N2_CT220_ckd_mt_100_v2 << "cm^-1\n";
9941  }
9942 
9943 
9944  // ------------------- subroutine N2R296/N2R220 ----------------------------
9945 
9947  {
9948  ostringstream os;
9949  os << "!!ERROR!!\n"
9950  << "CKD_MT 2.50 N2-N2 CIA rotational band:\n"
9951  << "parameter V1 not the same for different ref. temperatures.\n";
9952  throw runtime_error(os.str());
9953  }
9955  {
9956  ostringstream os;
9957  os << "!!ERROR!!\n"
9958  << "CKD_MT 2.50 N2-N2 CIA rotational band:\n"
9959  << "parameter V2 not the same for different ref. temperatures.\n";
9960  throw runtime_error(os.str());
9961  }
9963  {
9964  ostringstream os;
9965  os << "!!ERROR!!\n"
9966  << "CKD_MT 2.50 N2-N2 CIA rotational band:\n"
9967  << "parameter DV not the same for different ref. temperatures.\n";
9968  throw runtime_error(os.str());
9969  }
9971  {
9972  ostringstream os;
9973  os << "!!ERROR!!\n"
9974  << "CKD_MT 2.50 N2-N2 CIA rotational band:\n"
9975  << "parameter NPT not the same for different ref. temperatures.\n";
9976  throw runtime_error(os.str());
9977  }
9978 
9979  // retrieve the appropriate array sequence of the self continuum
9980  // arrays of the CKD model.
9982  Numeric V1C = V1ABS - DVC;
9983  Numeric V2C = V2ABS + DVC;
9984 
9985  int I1 = (int) ((V1C-N2N2_CT296_ckd_mt_100_v1) / N2N2_CT296_ckd_mt_100_dv);
9986  if (V1C < N2N2_CT296_ckd_mt_100_v1) I1 = -1;
9988 
9989  int I2 = (int) ((V2C-N2N2_CT296_ckd_mt_100_v1) / N2N2_CT296_ckd_mt_100_dv);
9990 
9991  int NPTC = I2-I1+3;
9993 
9994  V2C = V1C + N2N2_CT296_ckd_mt_100_dv * (Numeric)(NPTC-1);
9995 
9996  if (NPTC < 1)
9997  {
9998  out3 << "WARNING:\n"
9999  << " CKD_MT 2.50 N2-N2 CIA rotational band:\n"
10000  << " no elements of internal continuum coefficients could be found for the\n"
10001  << " input frequency range.\n"
10002  << " Leave the function without calculating the absorption.\n";
10003  return;
10004  }
10005 
10006  Vector C0(NPTC+addF77fields, 0.); // [cm^3/molecules]
10007  Vector C1(NPTC+addF77fields, 0.); // [cm^3/molecules]
10008  Vector sf_T0(NPTC+addF77fields, 0.);
10009  Vector sf_T1(NPTC+addF77fields, 0.);
10010  for (Index J = 1 ; J <= NPTC ; ++J)
10011  {
10012  Index I = I1+J;
10013  if ( (I > 0) && (I <= N2N2_CT296_ckd_mt_100_npt) )
10014  {
10015  C0[J] = N2N2_CT296_ckd_mt_100[I]; // at T=296 K
10016  sf_T0[J] = N2N2_sf_296_ckd_mt_100[I];
10017  C1[J] = N2N2_CT220_ckd_mt_100[I]; // at T=260 K
10018  sf_T1[J] = N2N2_sf_220_ckd_mt_100[I];
10019  }
10020  }
10021 
10022  // ------------------- subroutine N2R296/N2R220 ----------------------------
10023 
10024 
10025 
10026 
10027  // Loop pressure/temperature:
10028  for ( Index i = 0 ; i < n_p ; ++i )
10029  {
10030  Numeric Tave = abs_t[i]; // [K]
10031  Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
10032  Numeric vmrn2 = vmr[i]; // [1]
10033  Numeric vmro2 = abs_o2[i];
10034  Numeric vmrh2o = abs_h2o[i];
10035  Numeric facfac = vmrn2 * (Pave/PO) * (Pave/PO) *
10036  (T1/Tave) * (T1/Tave);
10037 
10038  Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
10039  Numeric Tfac = (Tave - TO) / (220.0e0 - TO);
10040 
10041  // Molecular cross section calculated by CKD.
10042  // The cross sectionis calculated on the predefined
10043  // CKD wavenumber grid.
10044  Vector k(NPTC+addF77fields, 0.); // [1/cm]
10045  Numeric C = 0.000e0;
10046  Numeric sf = 0.000e0;
10047  for (Index J = 1 ; J <= NPTC ; ++J)
10048  {
10049  Numeric VJ = V1C + (DVC * (Numeric)(J-1));
10050  Numeric SN2 = 0.000e0;
10051  if ( (C0[J] > 0.000e0) && (C1[J] > 0.000e0) )
10052  {
10053  C = C0[J] * pow( (C1[J]/C0[J]), Tfac );
10054  sf = ((sf_T0[J] * pow( (sf_T1[J]/sf_T0[J]), Tfac ))-1.000e0)*(0.79/0.21);
10055  SN2 = facfac * C * (vmrn2 + sf * vmro2 + vmrh2o);
10056  }
10057 // sf is ~ the ratio of alpha(n2-o2)/alpha(n2-n2)
10058 // Eq's 7 and 8 in the Boissoles paper.
10059 // if ( (C0[J] > 0.000e0) && (C1[J] > 0.000e0) )
10060 // {
10061 // SN2 = facfac* C0[J] * pow( (C1[J]/C0[J]), Tfac );
10062 // }
10063 
10064  // CKD cross section with radiative field
10065  k[J] = SN2 * RADFN_FUN(VJ,XKT); // [1]
10066  }
10067 
10068 
10069  // Loop input frequency array. The previously calculated cross section
10070  // has therefore to be interpolated on the input frequencies.
10071  for ( Index s = 0 ; s < n_f ; ++s )
10072  {
10073  // calculate the associated wave number (= 1/wavelength)
10074  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10075  if ( (V > 0.000e0) && (V < N2N2_CT220_ckd_mt_100_v2) )
10076  {
10077  // arts cross section [1/m]
10078  // interpolate the k vector on the f_grid grid
10079  pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
10080  }
10081  }
10082  }
10083 
10084 }
10085 
10086 // =================================================================================
10087 
10089 
10130  const Numeric Cin,
10131  const String& model,
10132  ConstVectorView f_grid,
10133  ConstVectorView abs_p,
10134  ConstVectorView abs_t,
10135  ConstVectorView vmr,
10136  ConstVectorView abs_h2o,
10137  ConstVectorView abs_o2,
10138  const Verbosity& verbosity)
10139 {
10140  CREATE_OUT3;
10141 
10142  // check the model name about consistency
10143  if ((model != "user") && (model != "CKDMT250"))
10144  {
10145  ostringstream os;
10146  os << "!!ERROR!!\n"
10147  << "CKD_MT2.50 N2 CIA fundamental band:\n"
10148  << "INPUT model name is: " << model << ".\n"
10149  << "VALID model names are user and CKDMT250\n";
10150  throw runtime_error(os.str());
10151  }
10152 
10153 
10154  // scaling factor of the N2-N2 CIA fundamental band absorption
10155  Numeric ScalingFac = 1.0000e0;
10156  if ( model == "user" )
10157  {
10158  ScalingFac = Cin; // input scaling factor of calculated absorption
10159  }
10160 
10161 
10162  const Index n_p = abs_p.nelem(); // Number of pressure levels
10163  const Index n_f = f_grid.nelem(); // Number of frequencies
10164 
10165 
10166  // Check that dimensions of abs_p, abs_t, and vmr agree:
10167  assert ( n_p==abs_t.nelem() );
10168  assert ( n_p==vmr.nelem() );
10169 
10170  // Check that dimensions of pxsec are consistent with n_f
10171  // and n_p. It should be [n_f,n_p]:
10172  assert ( n_f==pxsec.nrows() );
10173  assert ( n_p==pxsec.ncols() );
10174 
10175 
10176  // ************************** CKD stuff ************************************
10177 
10178  const Numeric xLosmt = 2.686763e19; // Loschmidt Number [molecules/cm^3]
10179  const Numeric T1 = 273.0e0;
10180  // const Numeric TO = 296.0e0;
10181  const Numeric PO = 1013.0e0;
10182 
10183  // It is assumed here that f_grid is monotonically increasing with index!
10184  // In future change this return into a change of the loop over
10185  // the frequency f_grid. n_f_new < n_f
10186  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10187  Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10188  if ( (V1ABS < N2N2_N2F_ckd_mt_250_v1) || (V1ABS > N2N2_N2F_ckd_mt_250_v2) ||
10189  (V2ABS < N2N2_N2F_ckd_mt_250_v1) || (V2ABS > N2N2_N2F_ckd_mt_250_v2) )
10190  {
10191  out3 << "WARNING:\n"
10192  << " CKD_MT 2.50 N2-N2 CIA fundamental band:\n"
10193  << " input frequency vector exceeds range of model validity\n"
10194  << " " << N2N2_N2F_ckd_mt_250_v1 << "<->" << N2N2_N2F_ckd_mt_250_v2 << "cm^-1\n";
10195  }
10196 
10197 
10198  // ------------------- subroutine N2_VER_1 ----------------------------
10199 
10200  // retrieve the appropriate array sequence of the self continuum
10201  // arrays of the CKD model.
10203  Numeric V1C = V1ABS - DVC;
10204  Numeric V2C = V2ABS + DVC;
10205 
10206  int I1 = (int) ((V1C-N2N2_N2F_ckd_mt_250_v1) / N2N2_N2F_ckd_mt_250_dv);
10207  if (V1C < N2N2_N2F_ckd_mt_250_v1) I1 = -1;
10209 
10210  int I2 = (int) ((V2C-N2N2_N2F_ckd_mt_250_v1) / N2N2_N2F_ckd_mt_250_dv);
10211 
10212  int NPTC = I2-I1+3;
10213  if (NPTC > N2N2_N2F_ckd_mt_250_npt) NPTC = N2N2_N2F_ckd_mt_250_npt+1;
10214 
10215  V2C = V1C + N2N2_N2F_ckd_mt_250_dv * (Numeric)(NPTC-1);
10216 
10217  if (NPTC < 1)
10218  {
10219  out3 << "WARNING:\n"
10220  << " CKD_MT 2.50 N2-N2 CIA fundamental band:\n"
10221  << " no elements of internal continuum coefficients could be found for the\n"
10222  << " input frequency range.\n";
10223  return;
10224  }
10225 
10226  Vector xn2(NPTC+addF77fields, 0.);
10227  Vector xn2t(NPTC+addF77fields, 0.);
10228 
10229  for (Index J = 1 ; J <= NPTC ; ++J)
10230  {
10231  Index I = I1+J;
10232  if ( (I > 0) && (I <= N2N2_N2F_ckd_mt_250_npt) )
10233  {
10234  xn2[J] = N2N2_N2F_ckd_mt_250[I];
10235  xn2t[J] = N2N2_N2Ft_ckd_mt_250[I];
10236  }
10237  }
10238 
10239  // ------------------- subroutine N2_VER_1 ----------------------------
10240 
10241 
10242 
10243 
10244  // Loop pressure/temperature:
10245  for ( Index i = 0 ; i < n_p ; ++i )
10246  {
10247  Numeric Tave = abs_t[i]; // [K]
10248  Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
10249  Numeric vmrn2 = vmr[i]; // [1]
10250  Numeric vmro2 = abs_o2[i]; // [1]
10251  Numeric vmrh2o = abs_h2o[i]; // [1]
10252  Numeric WTOT = xLosmt * (Pave/PO) * (T1/Tave); // [molecules/cm^2]
10253  Numeric tau_fac= WTOT * (Pave/PO) * (T1/Tave);
10254  Numeric a_o2 = 1.294 - 0.4545*Tave/296.00e0;
10255  Numeric a_h2o = 1.00e0;
10256  Numeric XKT = Tave / 1.4387752e0; // = (T*k_B) / (h*c)
10257 
10258  // FIXME Numeric Tfac = (Tave - TO) / (220.0e0 - TO); // [1]
10259  Numeric xktfac = ((1.000e0/Tave)-(1.000e0/272))/((1.000e0/228)-(1.000e0/272)); // [1/K]
10260  Numeric xt_lin = (Tave-272)/(228-272); // [K]
10261  Numeric factor = 0.000e0;
10262  if (vmrn2 > VMRCalcLimit)
10263  {
10264  factor = (1.000e0 / xLosmt) * (vmrn2+a_o2*vmro2+a_h2o*vmrh2o);
10265  }
10266 
10267  // Molecular cross section calculated by CKD.
10268  // The cross sectionis calculated on the predefined
10269  // CKD wavenumber grid.
10270  Vector k(NPTC+addF77fields+1, 0.); // [1/cm]
10271  Vector C0(NPTC+addF77fields+1, 0.);
10272  for (Index J = 1 ; J <= NPTC ; ++J)
10273  {
10274  Numeric VJ = V1C + (DVC * (Numeric)(J-1));
10275  Numeric SN2 = 0.000e0;
10276  if ( (xn2[J] > 0.000e0) && (xn2t[J] > 0.000e0))
10277  {
10278  C0[J] = factor * xn2[J] * pow((xn2t[J]/xn2[J]), xktfac) / VJ;
10279  SN2 = tau_fac * C0[J];
10280  }
10281  else
10282  {
10283  C0[J] = factor * (xn2[J] + (xn2t[J]-xn2[J])*xt_lin) / VJ;
10284  SN2 = tau_fac * C0[J];
10285  }
10286  // CKD cross section with radiative field
10287  k[J] = SN2 * RADFN_FUN(VJ,XKT); // [1/cm]
10288  }
10289 
10290 
10291  // Loop input frequency array. The previously calculated cross section
10292  // has therefore to be interpolated on the input frequencies.
10293  for ( Index s = 0 ; s < n_f ; ++s )
10294  {
10295  // calculate the associated wave number (= 1/wavelength)
10296  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10297  if ( (V > N2N2_N2F_ckd_mt_250_v1) && (V < N2N2_N2F_ckd_mt_250_v2) )
10298  {
10299  // arts cross section [1/m]
10300  // interpolate the k vector on the f_grid grid
10301  pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
10302  }
10303  }
10304  }
10305 
10306 }
10307 // =================================================================================
10308 
10310 
10348  const Numeric Cin,
10349  const String& model,
10350  ConstVectorView f_grid,
10351  ConstVectorView abs_p,
10352  ConstVectorView abs_t,
10353  ConstVectorView vmr _U_,
10354  const Verbosity& verbosity)
10355 {
10356  CREATE_OUT3;
10357 
10358  // check the model name about consistency
10359  if ((model != "user") && (model != "CKDMT100"))
10360  {
10361  ostringstream os;
10362  os << "!!ERROR!!\n"
10363  << "CKD_MT1.00 O2 CIA fundamental band:\n"
10364  << "INPUT model name is: " << model << ".\n"
10365  << "VALID model names are user and CKDMT100\n";
10366  throw runtime_error(os.str());
10367  }
10368 
10369 
10370  // scaling factor of the O2-O2 CIA fundamental band absorption
10371  Numeric ScalingFac = 1.0000e0;
10372  if ( model == "user" )
10373  {
10374  ScalingFac = Cin; // input scaling factor of calculated absorption
10375  }
10376 
10377 
10378  const Index n_p = abs_p.nelem(); // Number of pressure levels
10379  const Index n_f = f_grid.nelem(); // Number of frequencies
10380 
10381 
10382  // Check that dimensions of abs_p, abs_t, and vmr agree:
10383  assert ( n_p==abs_t.nelem() );
10384  assert ( n_p==vmr.nelem() );
10385 
10386  // Check that dimensions of pxsec are consistent with n_f
10387  // and n_p. It should be [n_f,n_p]:
10388  assert ( n_f==pxsec.nrows() );
10389  assert ( n_p==pxsec.ncols() );
10390 
10391 
10392  // ************************** CKD stuff ************************************
10393 
10394  const Numeric xLosmt = 2.686763e19; // Loschmidt Number [molecules/cm^3]
10395  const Numeric T1 = 273.0e0;
10396  const Numeric TO = 296.0e0;
10397  const Numeric PO = 1013.0e0;
10398 
10399 
10400  // It is assumed here that f_grid is monotonically increasing with index!
10401  // In future change this return into a change of the loop over
10402  // the frequency f_grid. n_f_new < n_f
10403  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10404  Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10405  if ( (V1ABS < O2O2_O2F_ckd_mt_100_v1) || (V1ABS > O2O2_O2F_ckd_mt_100_v2) ||
10406  (V2ABS < O2O2_O2F_ckd_mt_100_v1) || (V2ABS > O2O2_O2F_ckd_mt_100_v2) )
10407  {
10408  out3 << "WARNING:\n"
10409  << " CKD_MT 1.00 O2-O2 CIA fundamental band:\n"
10410  << " input frequency vector exceeds range of model validity\n"
10411  << " " << O2O2_O2F_ckd_mt_100_v1 << "<->" << O2O2_O2F_ckd_mt_100_v2 << "cm^-1\n";
10412  }
10413 
10414 
10415  // ------------------- subroutine O2_VER_1 ----------------------------
10416 
10417  // retrieve the appropriate array sequence of the CKD model array.
10419  Numeric V1C = V1ABS - DVC;
10420  Numeric V2C = V2ABS + DVC;
10421 
10422  int I1 = (int) ((V1C-O2O2_O2F_ckd_mt_100_v1) / O2O2_O2F_ckd_mt_100_dv);
10423  if (V1C < O2O2_O2F_ckd_mt_100_v1) I1 = -1;
10425 
10426  int I2 = (int) ((V2C-O2O2_O2F_ckd_mt_100_v1) / O2O2_O2F_ckd_mt_100_dv);
10427 
10428  int NPTC = I2-I1+3;
10429  if (NPTC > O2O2_O2F_ckd_mt_100_npt) NPTC = O2O2_O2F_ckd_mt_100_npt+1;
10430 
10431  V2C = V1C + O2O2_O2F_ckd_mt_100_dv * (Numeric)(NPTC-1);
10432 
10433  if (NPTC < 1)
10434  {
10435  out3 << "WARNING:\n"
10436  << " CKD_MT 1.00 O2 CIA fundamental band:\n"
10437  << " no elements of internal continuum coefficients could be found for the\n"
10438  << " input frequency range.\n"
10439  << " Leave the function without calculating the absorption.\n";
10440  return;
10441  }
10442 
10443  Vector xo2(NPTC+addF77fields, 0.);
10444  Vector xo2t(NPTC+addF77fields, 0.);
10445 
10446  for (Index J = 1 ; J <= NPTC ; ++J)
10447  {
10448  Index I = I1+J;
10449  if ( (I > 0) && (I <= O2O2_O2F_ckd_mt_100_npt) )
10450  {
10451  xo2[J] = O2O2_O2Fo_ckd_mt_100[I];
10452  xo2t[J] = O2O2_O2Ft_ckd_mt_100[I];
10453  }
10454  }
10455 
10456  // ------------------- subroutine O2_VER_1 ----------------------------
10457 
10458 
10459 
10460 
10461  // Loop pressure/temperature:
10462  for ( Index i = 0 ; i < n_p ; ++i )
10463  {
10464  Numeric Tave = abs_t[i]; // [K]
10465  Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
10466  // FIXME Numeric vmro2 = vmr[i]; // [1]
10467  Numeric WTOT = xLosmt * (Pave/PO) * (T1/Tave); // [molecules/cm^2]
10468  Numeric tau_fac= WTOT * (Pave/PO) * (T1/Tave);
10469 
10470  Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
10471 
10472  Numeric xktfac = (1.000e0/TO) - (1.000e0/Tave); // [1/K]
10473  Numeric factor = (1.000e0 / xLosmt);
10474 
10475  // Molecular cross section calculated by CKD.
10476  // The cross sectionis calculated on the predefined
10477  // CKD wavenumber grid.
10478  Vector k(NPTC+addF77fields+1, 0.); // [1/cm]
10479  for (Index J = 1 ; J <= NPTC ; ++J)
10480  {
10481  Numeric VJ = V1C + (DVC * (Numeric)(J-1));
10482  Numeric SO2 = 0.0e0;
10483  if (xo2[J] > 0.0e0)
10484  {
10485  Numeric C0 = factor * xo2[J] * exp(xo2t[J]*xktfac) / VJ;
10486  SO2 = tau_fac * C0;
10487  }
10488 
10489  // CKD cross section without radiative field
10490  k[J] = SO2 * RADFN_FUN(VJ,XKT); // [1]
10491  }
10492 
10493 
10494  // Loop input frequency array. The previously calculated cross section
10495  // has therefore to be interpolated on the input frequencies.
10496  for ( Index s = 0 ; s < n_f ; ++s )
10497  {
10498  // calculate the associated wave number (= 1/wavelength)
10499  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10500  if ( (V > O2O2_O2F_ckd_mt_100_v1) && (V < O2O2_O2F_ckd_mt_100_v2) )
10501  {
10502  // arts cross section [1/m]
10503  // interpolate the k vector on the f_grid grid
10504  pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
10505  }
10506  }
10507  }
10508 
10509 }
10510 
10511 // =================================================================================
10512 
10514 
10568  const Numeric Cin,
10569  const String& model,
10570  ConstVectorView f_grid,
10571  ConstVectorView abs_p,
10572  ConstVectorView abs_t,
10573  ConstVectorView vmr,
10574  ConstVectorView abs_n2,
10575  const Verbosity& verbosity)
10576 {
10577  CREATE_OUT3;
10578 
10579  // check the model name about consistency
10580  if ((model != "user") && (model != "CKDMT100"))
10581  {
10582  ostringstream os;
10583  os << "!!ERROR!!\n"
10584  << "CKD_MT1.00 O2 band at 1.27 micrometer:\n"
10585  << "INPUT model name is: " << model << ".\n"
10586  << "VALID model names are user and CKDMT100\n";
10587  throw runtime_error(os.str());
10588  }
10589 
10590 
10591  // scaling factor of the O2 v0<-v0 band absorption
10592  Numeric ScalingFac = 1.0000e0;
10593  if ( model == "user" )
10594  {
10595  ScalingFac = Cin; // input scaling factor of calculated absorption
10596  };
10597 
10598  const Index n_p = abs_p.nelem(); // Number of pressure levels
10599  const Index n_f = f_grid.nelem(); // Number of frequencies
10600 
10601 
10602  // Check that dimensions of abs_p, abs_t, and vmr agree:
10603  assert ( n_p==abs_t.nelem() );
10604  assert ( n_p==vmr.nelem() );
10605 
10606  // Check that dimensions of pxsec are consistent with n_f
10607  // and n_p. It should be [n_f,n_p]:
10608  assert ( n_f==pxsec.nrows() );
10609  assert ( n_p==pxsec.ncols() );
10610 
10611 
10612  // ************************** CKD stuff ************************************
10613 
10614  // FIXME const Numeric xLosmt = 2.686763e19; // Loschmidt Number [molecules/cm^3]
10615  const Numeric T1 = 273.0e0;
10616  // FIXME const Numeric TO = 296.0e0;
10617  const Numeric PO = 1013.0e0;
10618 
10619  // It is assumed here that f_grid is monotonically increasing with index!
10620  // In future change this return into a change of the loop over
10621  // the frequency f_grid. n_f_new < n_f
10622  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10623  Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10624  if ( (V1ABS < O2_00_ckd_mt_100_v1) || (V1ABS > O2_00_ckd_mt_100_v2) ||
10625  (V2ABS < O2_00_ckd_mt_100_v1) || (V2ABS > O2_00_ckd_mt_100_v2) )
10626  {
10627  out3 << "WARNING:\n"
10628  << " CKD_MT 1.00 O2 v0<-v0 band:\n"
10629  << " input frequency vector exceeds range of model validity\n"
10630  << " " << O2_00_ckd_mt_100_v1 << "<->" << O2_00_ckd_mt_100_v2 << "cm^-1\n";
10631  }
10632 
10633 
10634  // ------------------- subroutine O2INF1 ----------------------------
10635 
10636  // retrieve the appropriate array sequence of the CKD model array.
10638  Numeric V1C = V1ABS - DVC;
10639  Numeric V2C = V2ABS + DVC;
10640 
10641  int I1 = (int) ((V1C-O2_00_ckd_mt_100_v1) / O2_00_ckd_mt_100_dv);
10642  if (V1C < O2_00_ckd_mt_100_v1) I1 = I1-1;
10644 
10645  int I2 = (int) ((V2C-O2_00_ckd_mt_100_v1) / O2_00_ckd_mt_100_dv);
10646 
10647  int NPTC = I2-I1+3;
10648 
10649  V2C = V1C + O2_00_ckd_mt_100_dv * (Numeric)(NPTC-1);
10650 
10651  if (NPTC < 1)
10652  {
10653  out3 << "WARNING:\n"
10654  << " CKD_MT 1.00 O2 v0<-v0 band:\n"
10655  << " no elements of internal continuum coefficients could be found for the\n"
10656  << " input frequency range.\n"
10657  << " Leave the function without calculating the absorption.\n";
10658  return;
10659  }
10660 
10661  Numeric CO[(int)(NPTC+addF77fields)];
10662 
10663 
10664  for (Index J = 1 ; J <= NPTC ; ++J)
10665  {
10666  CO[J] = 0.000e0;
10667  Index I = I1+J;
10668  if ( (I > 0) && (I <= O2_00_ckd_mt_100_npt) )
10669  {
10670  Numeric VJ = V1C + (DVC * (Numeric)(J-1));
10671  CO[J] = O2_00_ckd_mt_100[I] / VJ;
10672  }
10673  }
10674 
10675  // ------------------- subroutine O2INF1 ----------------------------
10676 
10677 
10678 
10679 
10680  // Loop pressure/temperature:
10681  for ( Index i = 0 ; i < n_p ; ++i )
10682  {
10683  Numeric Tave = abs_t[i]; // [K]
10684  Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
10685  Numeric vmro2 = vmr[i]; // [1]
10686  Numeric vmrn2 = abs_n2[i]; // [1]
10687  Numeric ADJWO2 = (vmro2 + 0.300e0*vmrn2) / 0.446e0 *
10688  (Pave/PO) * (Pave/PO) * (T1/Tave) * (T1/Tave);
10689  Numeric XKT = Tave / 1.4387752e0; // = (T*k_B) / (h*c)
10690 
10691  // Molecular cross section calculated by CKD.
10692  // The cross sectionis calculated on the predefined
10693  // CKD wavenumber grid. The abs. coeff. is then the
10694  // cross section times the number density.
10695  Numeric k[NPTC+addF77fields]; // [1/cm]
10696  k[0] = 0.00e0; // not used array field
10697  for (Index J = 1 ; J <= NPTC ; ++J)
10698  {
10699  Numeric VJ = V1C + (DVC * (Numeric)(J-1));
10700  Numeric SO2 = 0.0e0;
10701  if (CO[J] > 0.0e0)
10702  {
10703  SO2 = ADJWO2 * CO[J];
10704  }
10705 
10706  // CKD (cross section * number density) with radiative field
10707  k[J] = SO2 * RADFN_FUN(VJ,XKT); // [1/cm]
10708  }
10709 
10710 
10711  // Loop input frequency array. The previously calculated cross section
10712  // has therefore to be interpolated on the input frequencies.
10713  for ( Index s = 0 ; s < n_f ; ++s )
10714  {
10715  // calculate the associated wave number (= 1/wavelength)
10716  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10717  if ( (V > O2_00_ckd_mt_100_v1) && (V < O2_00_ckd_mt_100_v2) )
10718  {
10719  // arts cross section [1/m]
10720  // interpolate the k vector on the f_grid grid
10721  pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
10722  }
10723  }
10724  }
10725 
10726 }
10727 
10728 // =================================================================================
10729 
10731 
10774  const Numeric Cin,
10775  const String& model,
10776  ConstVectorView f_grid,
10777  ConstVectorView abs_p,
10778  ConstVectorView abs_t,
10779  ConstVectorView vmr,
10780  const Verbosity& verbosity)
10781 {
10782  CREATE_OUT3;
10783 
10784  // check the model name about consistency
10785  if ((model != "user") && (model != "CKDMT100"))
10786  {
10787  ostringstream os;
10788  os << "!!ERROR!!\n"
10789  << "CKD_MT1.00 O2 band at 1.06 micrometer:\n"
10790  << "INPUT model name is: " << model << ".\n"
10791  << "VALID model names are user and CKDMT100\n";
10792  throw runtime_error(os.str());
10793  }
10794 
10795 
10796  // scaling factor of the O2 v1<-v0 band absorption
10797  Numeric ScalingFac = 1.0000e0;
10798  if ( model == "user" )
10799  {
10800  ScalingFac = Cin; // input scaling factor of calculated absorption
10801  };
10802 
10803  const Index n_p = abs_p.nelem(); // Number of pressure levels
10804  const Index n_f = f_grid.nelem(); // Number of frequencies
10805 
10806 
10807  // Check that dimensions of abs_p, abs_t, and vmr agree:
10808  assert ( n_p==abs_t.nelem() );
10809  assert ( n_p==vmr.nelem() );
10810 
10811  // Check that dimensions of pxsec are consistent with n_f
10812  // and n_p. It should be [n_f,n_p]:
10813  assert ( n_f==pxsec.nrows() );
10814  assert ( n_p==pxsec.ncols() );
10815 
10816 
10817  // ************************** CKD stuff ************************************
10818 
10819  const Numeric xLosmt = 2.686763e19; // Loschmidt Number [molecules/cm^3]
10820  const Numeric T1 = 273.0e0;
10821  const Numeric TO = 296.0e0;
10822  const Numeric PO = 1013.0e0;
10823  // FIXME const Numeric vmr_argon = 9.000e-3; // VMR of argon is assumed to be const.
10824 
10825 
10826  // CKD_MT 1.00 implementation of oxygen v1<-v0 band model of
10827  // Mlawer, Clough, Brown, Stephen, Landry, Goldman, Murcray,
10828  // "Observed Atmospheric Collision Induced Absorption in Near Infrared Oxygen Bands",
10829  // Journal of Geophysical Research, vol 103, no. D4, pp. 3859-3863, 1998.
10830  const Numeric V1S = O2_10_ckd_mt_100_v1;
10831  const Numeric V2S = O2_10_ckd_mt_100_v2;
10832  const Numeric DVS = O2_10_ckd_mt_100_dv;
10833  const Numeric V1_osc = 9375.000e0;
10834  const Numeric HW1 = 58.960e0;
10835  const Numeric V2_osc = 9439.000e0;
10836  const Numeric HW2 = 45.040e0;
10837  const Numeric S1 = 1.166e-4;
10838  const Numeric S2 = 3.086e-5;
10839 
10840 
10841  // It is assumed here that f_grid is monotonically increasing with index!
10842  // In future change this return into a change of the loop over
10843  // the frequency f_grid. n_f_new < n_f
10844  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10845  Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10846  if ( (V1ABS < O2_10_ckd_mt_100_v1) || (V1ABS > O2_10_ckd_mt_100_v2) ||
10847  (V2ABS < O2_10_ckd_mt_100_v1) || (V2ABS > O2_10_ckd_mt_100_v2) )
10848  {
10849  out3 << "WARNING:\n"
10850  << " CKD_MT 1.00 O2 v1<-v0 band:\n"
10851  << " input frequency vector exceeds range of model validity\n"
10852  << " " << O2_10_ckd_mt_100_v1 << "<->" << O2_10_ckd_mt_100_v2 << "cm^-1\n";
10853  }
10854 
10855 
10856  // ------------------- subroutine O2INF2 ----------------------------
10857 
10858  // retrieve the appropriate array sequence of the CKD model array.
10859  Numeric DVC = DVS;
10860  Numeric V1C = V1ABS - DVC;
10861  Numeric V2C = V2ABS + DVC;
10862 
10863  int NPTC = (int)( ((V2C-V1C)/DVC) + 3 );
10864 
10865  V2C = V1C + ( DVC * (Numeric)(NPTC-1) );
10866 
10867  if (NPTC < 1)
10868  {
10869  out3 << "WARNING:\n"
10870  << " CKD_MT 1.00 O2 v1<-v0 band:\n"
10871  << " no elements of internal continuum coefficients could be found for the\n"
10872  << " input frequency range.\n"
10873  << " Leave the function without calculating the absorption.\n";
10874  return;
10875  }
10876 
10877  Numeric C[NPTC+addF77fields];
10878  C[0] = 0.000e0; // not used field of array
10879 
10880  for (Index J = 1 ; J <= NPTC ; ++J)
10881  {
10882  C[J] = 0.000e0;
10883  Numeric VJ = V1C + (DVC * (Numeric)(J-1));
10884 
10885  if ( (VJ > V1S) && (VJ < V2S) )
10886  {
10887  Numeric DV1 = VJ - V1_osc;
10888  Numeric DV2 = VJ - V2_osc;
10889 
10890  Numeric DAMP1 = 1.00e0;
10891  Numeric DAMP2 = 1.00e0;
10892 
10893  if ( DV1 < 0.00e0 )
10894  {
10895  DAMP1 = exp(DV1 / 176.100e0);
10896  }
10897 
10898  if ( DV2 < 0.00e0 )
10899  {
10900  DAMP2 = exp(DV2 / 176.100e0);
10901  }
10902 
10903  Numeric O2INF = 0.31831e0 *
10904  ( ((S1 * DAMP1 / HW1)/(1.000e0 + pow((DV1/HW1),(Numeric)2.0e0) )) +
10905  ((S2 * DAMP2 / HW2)/(1.000e0 + pow((DV2/HW2),(Numeric)2.0e0) )) ) * 1.054e0;
10906  C[J] = O2INF / VJ;
10907  }
10908  }
10909 
10910 
10911  // ------------------- subroutine O2INF2 ----------------------------
10912 
10913 
10914  // Loop pressure/temperature:
10915  for ( Index i = 0 ; i < n_p ; ++i )
10916  {
10917  Numeric Tave = abs_t[i]; // [K]
10918  Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
10919  Numeric vmro2 = vmr[i]; // [1]
10920  Numeric WTOT = 1.000e-20 * xLosmt * (Pave/PO) * (T1/Tave); // [molecules/cm^2]
10921  Numeric ADJWO2 = (vmro2 / 0.209e0) * WTOT * (Pave/PO) * (TO/Tave);
10922  Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
10923 
10924  // Molecular cross section calculated by CKD.
10925  // The cross sectionis calculated on the predefined
10926  // CKD wavenumber grid.
10927  Numeric k[NPTC+addF77fields]; // [1/cm]
10928  k[0] = 0.00e0; // not used array field
10929  for (Index J = 1 ; J <= NPTC ; ++J)
10930  {
10931  Numeric VJ = V1C + (DVC * (Numeric)(J-1));
10932  Numeric SO2 = 0.0e0;
10933  if (C[J] > 0.0e0)
10934  {
10935  SO2 = ADJWO2 * C[J];
10936  }
10937 
10938  // CKD cross section without radiative field
10939  k[J] = SO2 * RADFN_FUN(VJ,XKT); // [1]
10940  }
10941 
10942 
10943  // Loop input frequency array. The previously calculated cross section
10944  // has therefore to be interpolated on the input frequencies.
10945  for ( Index s = 0 ; s < n_f ; ++s )
10946  {
10947  // calculate the associated wave number (= 1/wavelength)
10948  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10949  if ( (V > V1S) && (V < V2S) )
10950  {
10951  // arts cross section [1/m]
10952  // interpolate the k vector on the f_grid grid
10953  pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
10954  }
10955  }
10956  }
10957 
10958 }
10959 // =================================================================================
10960 
10962 
11002  const Numeric Cin,
11003  const String& model,
11004  ConstVectorView f_grid,
11005  ConstVectorView abs_p,
11006  ConstVectorView abs_t,
11007  ConstVectorView vmr,
11008  const Verbosity& verbosity)
11009 {
11010  CREATE_OUT3;
11011 
11012  // check the model name about consistency
11013  if ((model != "user") && (model != "CKDMT250"))
11014  {
11015  ostringstream os;
11016  os << "!!ERROR!!\n"
11017  << "CKD_MT2.50 O2 band at 1.06 micrometer:\n"
11018  << "INPUT model name is: " << model << ".\n"
11019  << "VALID model names are user and CKDMT250\n";
11020  throw runtime_error(os.str());
11021  }
11022 
11023 
11024  // scaling factor of the O2 v1<-v0 band absorption
11025  Numeric ScalingFac = 1.0000e0;
11026  if ( model == "user" )
11027  {
11028  ScalingFac = Cin; // input scaling factor of calculated absorption
11029  };
11030 
11031  const Index n_p = abs_p.nelem(); // Number of pressure levels
11032  const Index n_f = f_grid.nelem(); // Number of frequencies
11033 
11034 
11035  // Check that dimensions of abs_p, abs_t, and vmr agree:
11036  assert ( n_p==abs_t.nelem() );
11037  assert ( n_p==vmr.nelem() );
11038 
11039  // Check that dimensions of pxsec are consistent with n_f
11040  // and n_p. It should be [n_f,n_p]:
11041  assert ( n_f==pxsec.nrows() );
11042  assert ( n_p==pxsec.ncols() );
11043 
11044 
11045  // ************************** CKD stuff ************************************
11046 
11047  const Numeric xLosmt = 2.686763e19; // Loschmidt Number [molecules/cm^3]
11048  const Numeric T1 = 273.0e0;
11049  // const Numeric TO = 296.0e0;
11050  const Numeric PO = 1013.0e0;
11051  // FIXME const Numeric vmr_argon = 9.000e-3; // VMR of argon is assumed to be const.
11052 
11053 
11054  // "Observed Atmospheric Collision Induced Absorption in Near Infrared Oxygen Bands",
11055  // Journal of Geophysical Research, vol 103, no. D4, pp. 3859-3863, 1998.
11056  const Numeric V1S = O2_vis_ckd_mt_250_v1;
11057  const Numeric V2S = O2_vis_ckd_mt_250_v2;
11058  const Numeric DVS = O2_vis_ckd_mt_250_dv;
11059 
11060  // It is assumed here that f_grid is monotonically increasing with index!
11061  // In future change this return into a change of the loop over
11062  // the frequency f_grid. n_f_new < n_f
11063  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11064  Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11065  if ( (V1ABS < O2_vis_ckd_mt_250_v1) || (V1ABS > O2_vis_ckd_mt_250_v2) ||
11066  (V2ABS < O2_vis_ckd_mt_250_v1) || (V2ABS > O2_vis_ckd_mt_250_v2) )
11067  {
11068  out3 << "WARNING:\n"
11069  << " CKD_MT 2.50 O2 vis band:\n"
11070  << " input frequency vector exceeds range of model validity\n"
11071  << " " << O2_vis_ckd_mt_250_v1 << "<->" << O2_vis_ckd_mt_250_v2 << "cm^-1\n";
11072  }
11073 
11074 
11075  // ------------------- subroutine O2INF2 ----------------------------
11076 
11077  // retrieve the appropriate array sequence of the CKD model array.
11078  Numeric DVC = DVS;
11079  Numeric V1C = V1ABS - DVC;
11080  Numeric V2C = V2ABS + DVC;
11081 
11082  int I1 = (int) ((V1C-O2_vis_ckd_mt_250_v1) / O2_vis_ckd_mt_250_dv);
11083  if (V1C < O2_vis_ckd_mt_250_v1) I1 = I1-1;
11085 
11086  int I2 = (int) ((V2C-O2_vis_ckd_mt_250_v1) / O2_vis_ckd_mt_250_dv);
11087 
11088  int NPTC = I2-I1+3;
11089 
11090  V2C = V1C + O2_vis_ckd_mt_250_dv * (Numeric)(NPTC-1);
11091 
11092  if (NPTC < 1)
11093  {
11094  out3 << "WARNING:\n"
11095  << " CKD_MT 2.50 O2 vis band:\n"
11096  << " no elements of internal continuum coefficients could be found for the\n"
11097  << " input frequency range.\n"
11098  << " Leave the function without calculating the absorption.\n";
11099  return;
11100  }
11101 
11102  Numeric CO[(int)(NPTC+addF77fields)];
11103 
11104 
11105  for (Index J = 1 ; J <= NPTC ; ++J)
11106  {
11107  CO[J] = 0.000e0;
11108  Index I = I1+J;
11109  if ( (I > 0) && (I <= O2_vis_ckd_mt_250_npt) )
11110  {
11111  Numeric VJ = V1C + (DVC * (Numeric)(J-1));
11112  CO[J] = O2_vis_ckd_mt_250[I] / VJ;
11113  }
11114  }
11115 
11116 
11117  // ------------------- subroutine O2_vis ----------------------------
11118 
11119 
11120  // Loop pressure/temperature:
11121  for ( Index i = 0 ; i < n_p ; ++i )
11122  {
11123  Numeric Tave = abs_t[i]; // [K]
11124  Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
11125  // Numeric vmro2 = vmr[i]; // [1]
11126  Numeric WTOT = 1.000e-20 * xLosmt * (Pave/PO) * (T1/Tave); // [molecules/cm^2]
11127  Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
11128  Numeric tau_fac= WTOT * (Pave/PO) * (T1/Tave);
11129 
11130 // these are the conditions reported in the paper by Greenblatt et al. for
11131 // the spectrum of Fig. 1.
11132 
11133 // conditions: 55 atm.; 296 K; 89.5 cm path
11134 
11135  Numeric factor = 1.000e0/(xLosmt*1.e-20*pow( (55.e0*273.0e0/296.0e0), 2)*89.5);
11136 
11137  // Molecular cross section calculated by CKD.
11138  // The cross sectionis calculated on the predefined
11139  // CKD wavenumber grid.
11140  Numeric k[NPTC+addF77fields]; // [1/cm]
11141  k[0] = 0.00e0; // not used array field
11142  for (Index J = 1 ; J <= NPTC ; ++J)
11143  {
11144  Numeric VJ = V1C + (DVC * (Numeric)(J-1));
11145  Numeric SO2 = 0.0e0;
11146 
11147  SO2 = CO[J] * factor * tau_fac;
11148 
11149  // CKD cross section without radiative field
11150  k[J] = SO2 * RADFN_FUN(VJ,XKT); // [1]
11151  }
11152 
11153 
11154  // Loop input frequency array. The previously calculated cross section
11155  // has therefore to be interpolated on the input frequencies.
11156  for ( Index s = 0 ; s < n_f ; ++s )
11157  {
11158  // calculate the associated wave number (= 1/wavelength)
11159  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11160  if ( (V > V1S) && (V < V2S) )
11161  {
11162  // arts cross section [1/m]
11163  // interpolate the k vector on the f_grid grid
11164  pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
11165  }
11166  }
11167  }
11168 
11169 }
11170 
11171 // #################################################################################
11172 
11174 
11206 void CKD24_H20 (MatrixView pxsec,
11207  int isf,
11208  const Numeric Cin,
11209  const String& model,
11210  ConstVectorView f_grid,
11211  ConstVectorView abs_p,
11212  ConstVectorView abs_t,
11213  ConstVectorView vmr,
11214  ConstVectorView abs_n2,
11215  const Verbosity& verbosity)
11216 {
11217  CREATE_OUT3;
11218 
11219  //
11220  //
11221  // external function to call (original F77 code translated with f2c)
11222  /* INPUT PARAMETERS: */
11223  /* P [hPa] TOTAL PRESSURE */
11224  /* T [K] TEMPERATURE */
11225  /* VMRH2O [1] H2O VOLUME MIXING RATIO */
11226  /* VMRN2 [1] N2 VOLUME MIXING RATIO */
11227  /* VMRO2 [1] O2 VOLUME MIXING RATIO */
11228  /* FREQ [Hz] FREQUENCY OF CALCULATION */
11229  extern double artsckd_(double p, double t,
11230  double vmrh2o, double vmrn2, double vmro2,
11231  double freq, int ivc);
11232  //
11233  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
11234  Numeric XFAC = 1.0000; // scaling factor
11235  // ---------------------------------------------------------------------------------------
11236 
11237 
11238  // check the model name about consistency
11239  if ((model != "user") && (model != "CKD24"))
11240  {
11241  ostringstream os;
11242  os << "!!ERROR!!\n"
11243  << "CKDv2.4.2 H2O self/foreign continuum:\n"
11244  << "INPUT model name is: " << model << ".\n"
11245  << "VALID model names are user and CKD24\n";
11246  throw runtime_error(os.str());
11247  }
11248 
11249 
11250  // select the parameter set (!!model dominates values!!):
11251  if ( model == "CKD24" )
11252  {
11253  XFAC = 1.0000;
11254  }
11255  else if ( model == "user" )
11256  {
11257  XFAC = Cin;
11258  }
11259  else
11260  {
11261  if (isf == 0) {
11262  ostringstream os;
11263  os << "H2O-SelfContCKD24: ERROR! Wrong model values given.\n"
11264  << "allowed models are: 'CKD24', 'user'" << '\n';
11265  throw runtime_error(os.str());
11266  }
11267  if (isf == 1) {
11268  ostringstream os;
11269  os << "H2O-ForeignContCKD: ERROR! Wrong model values given.\n"
11270  << "allowed models are: 'CKD24', 'user'" << '\n';
11271  throw runtime_error(os.str());
11272  }
11273  }
11274 
11275  if (isf == 0) {
11276  out3 << "H2O-SelfContCKD24: (model=" << model << ") parameter values in use:\n"
11277  << " XFAC = " << XFAC << "\n";
11278  }
11279  if (isf == 1) {
11280  out3 << "H2O-ForeignContCKD: (model=" << model << ") parameter values in use:\n"
11281  << " XFAC = " << XFAC << "\n";
11282  }
11283 
11284 
11285  const Index n_p = abs_p.nelem(); // Number of pressure levels
11286  const Index n_f = f_grid.nelem(); // Number of frequencies
11287 
11288 
11289  // Check that dimensions of abs_p, abs_t, and vmr agree:
11290  assert ( n_p==abs_t.nelem() );
11291  assert ( n_p==vmr.nelem() );
11292 
11293  // Check that dimensions of pxsec are consistent with n_f
11294  // and n_p. It should be [n_f,n_p]:
11295  assert ( n_f==pxsec.nrows() );
11296  assert ( n_p==pxsec.ncols() );
11297 
11298  // ivc = 1 : N2-N2 CKD version of Borysow-Fromhold model
11299  // ivc = 21 : H2O CKD2.4 self cont part
11300  // ivc = 22 : H2O CKD2.4 foreign cont part
11301  // ivc = 31 : MPMf87/s93 self cont part
11302  // ivc = 32 : MPMf87/s93 foreign cont part
11303  int ivc = 55;
11304  if (isf == 0) {
11305  ivc = 21; // CKD2.4 self continuum
11306  // ivc = 31; // MPMf87/s93 self continuum
11307  }
11308  if (isf == 1) {
11309  ivc = 22; // CKD2.4 foreign continuum
11310  //ivc = 32; // MPMf87/s93 foreign continuum
11311  }
11312  if ((ivc != 1) && (ivc != 21) && (ivc != 22) && (ivc != 31) && (ivc != 32)) {
11313  ostringstream os;
11314  os << "!!ERROR: CKD24 H2O model: wrong input parameter isf (=0,1) given!\n"
11315  << "retrun without calculation!" << "\n"
11316  << "actual value of isf is " << isf << "\n";
11317  throw runtime_error(os.str());
11318  return;
11319  }
11320  // ivc = 1;
11321 
11322  // Loop pressure/temperature:
11323  for ( Index i=0; i<n_p; ++i )
11324  {
11325  double T = (double) abs_t[i]; // [K]
11326  double p = (double) (abs_p[i]*1.000e-2); // [hPa]
11327  double vmrh2o = (double) vmr[i]; // [1]
11328  double vmrn2 = (double) abs_n2[i]; // [1]
11329  double vmro2 = 0.0e0; // [1]
11330 
11331  //cout << "------------------------------------------------\n";
11332  //cout << "CKD2.4 H2O: ivc =" << ivc << "\n";
11333  //cout << "CKD2.4 H2O: T =" << T << " K\n";
11334  //cout << "CKD2.4 H2O: p =" << p << " hPa\n";
11335  //cout << "CKD2.4 H2O: vmrh2o=" << vmrh2o << "\n";
11336  //cout << "CKD2.4 H2O: vmrn2 =" << vmrn2 << "\n";
11337  //cout << "CKD2.4 H2O: vmro2 =" << vmro2 << "\n";
11338  // Loop frequency:
11339  for ( Index s=0; s<n_f; ++s )
11340  {
11341  // the second vmr of N2 will be multiplied at the stage of
11342  // absorption calculation: abs = vmr * pxsec.
11343  double f = (double) f_grid[s]; // [Hz]
11344  if (ivc == 1) { // ---------- N2 -----------------
11345  if (abs_n2[i] > 0.0e0) {
11346  //cout << "CKD2.4 N2: f =" << f << " Hz\n";
11347  double cont = artsckd_(p, T, vmrh2o, vmrn2, vmro2, f, ivc);
11348  pxsec(s,i) += (Numeric) (cont / vmr[i]);
11349  //cout << "CKD2.4 N2: abs =" << cont << " 1/m\n";
11350  }
11351  } else { // ---------------- H2O -----------------
11352  if (vmr[i] > 0.0e0) {
11353  //cout << "CKD2.4 H2O: f =" << f << " Hz\n";
11354  double cont = artsckd_(p, T, vmrh2o, vmrn2, vmro2, f, ivc);
11355  pxsec(s,i) += (Numeric) (cont / vmr[i]);
11356  //cout << "CKD2.4 H2O: abs =" << cont << " 1/m\n";
11357  }
11358  }
11359  }
11360  }
11361  return;
11362 }
11363 //
11364 // #################################################################################
11366 
11391  const Numeric Cin,
11392  const String& model,
11393  ConstVectorView f_grid,
11394  ConstVectorView abs_p,
11395  ConstVectorView abs_t,
11396  ConstVectorView vmr,
11397  const Verbosity& verbosity)
11398 {
11399  CREATE_OUT3;
11400 
11401  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
11402  // standard values for the Pardo et al. model (IEEE, Trans. Ant. Prop.,
11403  // Vol 49, No 12, pp. 1683-1694, 2001)
11404  const Numeric C_ATM = 0.0315; // [1/m]
11405  // ---------------------------------------------------------------------------------------
11406 
11407  // select the parameter set (!!model dominates parameters!!):
11408  Numeric C;
11409  if ( model == "ATM" )
11410  {
11411  C = C_ATM;
11412  }
11413  else if ( model == "user" )
11414  {
11415  C = Cin;
11416  }
11417  else
11418  {
11419  ostringstream os;
11420  os << "H2O-ForeignContATM01: ERROR! Wrong model values given.\n"
11421  << "allowed models are: 'ATM', 'user'" << '\n';
11422  throw runtime_error(os.str());
11423  }
11424  out3 << "H2O-ForeignContATM01: (model=" << model << ") parameter values in use:\n"
11425  << " C_f = " << C << "\n";
11426 
11427  const Index n_p = abs_p.nelem(); // Number of pressure levels
11428  const Index n_f = f_grid.nelem(); // Number of frequencies
11429 
11430  // Check that dimensions of abs_p, abs_t, and vmr agree:
11431  assert ( n_p==abs_t.nelem() );
11432  assert ( n_p==vmr.nelem() );
11433 
11434  // Check that dimensions of pxsec are consistent with n_f
11435  // and n_p. It should be [n_f,n_p]:
11436  assert ( n_f==pxsec.nrows() );
11437  assert ( n_p==pxsec.ncols() );
11438 
11439  // Loop over pressure/temperature grid:
11440  for ( Index i=0; i<n_p; ++i )
11441  {
11442  // since this is an effective "dry air" continuum, it is not really
11443  // it is not specifically attributed to N2, so we need the total
11444  // dry air part in total which is equal to the total minus the
11445  // water vapor pressure:
11446  Numeric pd = abs_p[i] * ( 1.00000e0 - vmr[i] ); // [Pa]
11447  // since the H2O VMR will be multiplied in abs_coefCalc, we omit it here
11448  Numeric pwdummy = abs_p[i] ; // [Pa]
11449  // Loop over frequency grid:
11450  for ( Index s=0; s<n_f; ++s )
11451  {
11452  // Becaue this is an effective "dry air" continuum, it is not really
11453  // specific N2 but mainly caused by N2. Therefore the N2 vmr must be
11454  // canceled out here which is later in abs_coefCalc multiplied
11455  // (calculation: abs = vmr * pxsec):
11456  pxsec(s,i) += C * // strength [1/(m*Hz²Pa²)]
11457  pow( (f_grid[s]/(Numeric)2.25e11), (Numeric)2. ) * // quadratic f dependence [1]
11458  pow( ((Numeric)300.0/abs_t[i]), (Numeric)3. ) * // free T dependence [1]
11459  (pd/1.01300e5) * // p_dry dependence [1]
11460  (pwdummy/1.01300e5); // p_H2O dependence [1]
11461  }
11462  }
11463 }
11464 //
11465 // #################################################################################
11466 //
11468 
11507  const Numeric fcenter,
11508  const Numeric b1,
11509  const Numeric b2,
11510  const Numeric b3,
11511  const Numeric b4,
11512  const Numeric b5,
11513  const Numeric b6,
11514  const String& model,
11515  ConstVectorView f_grid,
11516  ConstVectorView abs_p,
11517  ConstVectorView abs_t,
11518  ConstVectorView vmr,
11519  const Verbosity& verbosity)
11520 {
11521  CREATE_OUT3;
11522 
11523  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
11524  // standard values for the MPM93 H2O continuum model
11525  // (AGARD 52nd Specialists Meeting of the Electromagnetic Wave
11526  // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21):
11527  const Numeric MPM93fo_orig = 1780.000e9; // [Hz]
11528  const Numeric MPM93b1_orig = 22300.000; // [Hz/Pa]
11529  const Numeric MPM93b2_orig = 0.952; // [1]
11530  const Numeric MPM93b3_orig = 17.600e4; // [Hz/Pa]
11531  const Numeric MPM93b4_orig = 30.500; // [1]
11532  const Numeric MPM93b5_orig = 2.000; // [1]
11533  const Numeric MPM93b6_orig = 5.000; // [1]
11534  // ---------------------------------------------------------------------------------------
11535 
11536 
11537  // select the parameter set (!!model goes for values!!):
11538  Numeric MPM93fopcl, MPM93b1pcl, MPM93b2pcl,
11539  MPM93b3pcl, MPM93b4pcl, MPM93b5pcl,
11540  MPM93b6pcl;
11541  if ( model == "MPM93" )
11542  {
11543  MPM93fopcl = MPM93fo_orig;
11544  MPM93b1pcl = MPM93b1_orig;
11545  MPM93b2pcl = MPM93b2_orig;
11546  MPM93b3pcl = MPM93b3_orig;
11547  MPM93b4pcl = MPM93b4_orig;
11548  MPM93b5pcl = MPM93b5_orig;
11549  MPM93b6pcl = MPM93b6_orig;
11550  }
11551  else if ( model == "user" )
11552  {
11553  MPM93fopcl = fcenter;
11554  MPM93b1pcl = b1;
11555  MPM93b2pcl = b2;
11556  MPM93b3pcl = b3;
11557  MPM93b4pcl = b4;
11558  MPM93b5pcl = b5;
11559  MPM93b6pcl = b6;
11560  }
11561  else
11562  {
11563  ostringstream os;
11564  os << "H2O-ContMPM93: ERROR! Wrong model values given.\n"
11565  << "allowed models are: 'MPM93', 'user'" << '\n';
11566  throw runtime_error(os.str());
11567  }
11568  out3 << "H2O-ContMPM93: (model=" << model << ") parameter values in use:\n"
11569  << " fo = " << MPM93fopcl << "\n"
11570  << " b1 = " << MPM93b1pcl << "\n"
11571  << " b2 = " << MPM93b2pcl << "\n"
11572  << " b3 = " << MPM93b3pcl << "\n"
11573  << " b4 = " << MPM93b4pcl << "\n"
11574  << " b5 = " << MPM93b5pcl << "\n"
11575  << " b6 = " << MPM93b6pcl << "\n";
11576 
11577  const Index n_p = abs_p.nelem(); // Number of pressure levels
11578  const Index n_f = f_grid.nelem(); // Number of frequencies
11579 
11580  // Check that dimensions of abs_p, abs_t, and vmr agree:
11581  assert ( n_p==abs_t.nelem() );
11582  assert ( n_p==vmr.nelem() );
11583 
11584  // Check that dimensions of pxsec are consistent with n_f
11585  // and n_p. It should be [n_f,n_p]:
11586  assert ( n_f==pxsec.nrows() );
11587  assert ( n_p==pxsec.ncols() );
11588 
11589 
11590  // Loop pressure/temperature:
11591  for ( Index i=0; i<n_p; ++i )
11592  {
11593  Numeric th = 300.0 / abs_t[i];
11594  // the vmr of H2O will be multiplied at the stage of absorption calculation:
11595  // abs / vmr * pxsec.
11596  Numeric strength = MPM93b1pcl * abs_p[i] * pow( th, (Numeric)3.5 )
11597  * exp(MPM93b2pcl * (1 - th));
11598  Numeric gam = MPM93b3pcl * 0.001 *
11599  ( MPM93b4pcl * abs_p[i] * vmr[i] * pow( th, MPM93b6pcl ) +
11600  abs_p[i]*(1.000-vmr[i]) * pow( th, MPM93b5pcl ) );
11601  // Loop frequency:
11602  for ( Index s=0; s<n_f; ++s )
11603  {
11604  // pxsec = abs/vmr [1/m] but MPM89 is in [dB/km] --> conversion necessary
11605  pxsec(s,i) += dB_km_to_1_m * 0.1820 *
11606  f_grid[s] * strength *
11607  MPMLineShapeFunction(gam, MPM93fopcl, f_grid[s]);
11608  }
11609  }
11610  return;
11611 }
11612 //
11613 // #################################################################################
11614 // ################################# OXYGEN MODELS #################################
11615 // #################################################################################
11617 
11646  const Numeric CCin, // continuum scale factor
11647  const Numeric CLin, // line strength scale factor
11648  const Numeric CWin, // line broadening scale factor
11649  const Numeric COin, // line coupling scale factor
11650  const String& model,
11651  ConstVectorView f_grid,
11652  ConstVectorView abs_p,
11653  ConstVectorView abs_t,
11654  ConstVectorView abs_h2o,
11655  ConstVectorView vmr,
11656  const Verbosity& verbosity)
11657 {
11658  CREATE_OUT3;
11659 
11660  //
11661  // Coefficients are from Liebe et al., AGARD CP-May93, Paper 3/1-10
11662  // 0 1 2 3 4 5 6
11663  // f0 a1 a2 a3 a4 a5 a6
11664  // [GHz] [kHz/hPa] [1] [MHz/hPa] [1] [1/kPa] [1]
11665  const Numeric mpm85[48][7] = {
11666  { 49.452379 , 0.12 , 11.830 , 8.40 , 0.0 , 5.600 , 1.700 },
11667  { 49.962257 , 0.34 , 10.720 , 8.50 , 0.0 , 5.600 , 1.700 },
11668  { 50.474238 , 0.94 , 9.690 , 8.60 , 0.0 , 5.600 , 1.700 },
11669  { 50.987748 , 2.46 , 8.690 , 8.70 , 0.0 , 5.500 , 1.700 },
11670  { 51.503350 , 6.08 , 7.740 , 8.90 , 0.0 , 5.600 , 1.800 },
11671  { 52.021409 , 14.14 , 6.840 , 9.20 , 0.0 , 5.500 , 1.800 },
11672  { 52.542393 , 31.02 , 6.000 , 9.40 , 0.0 , 5.700 , 1.800 },
11673  { 53.066906 , 64.10 , 5.220 , 9.70 , 0.0 , 5.300 , 1.900 },
11674  { 53.595748 , 124.70 , 4.480 , 10.00 , 0.0 , 5.400 , 1.800 },
11675  { 54.129999 , 228.00 , 3.810 , 10.20 , 0.0 , 4.800 , 2.000 },
11676  { 54.671157 , 391.80 , 3.190 , 10.50 , 0.0 , 4.800 , 1.900 },
11677  { 55.221365 , 631.60 , 2.620 , 10.79 , 0.0 , 4.170 , 2.100 },
11678  { 55.783800 , 953.50 , 2.115 , 11.10 , 0.0 , 3.750 , 2.100 },
11679  { 56.264777 , 548.90 , 0.010 , 16.46 , 0.0 , 7.740 , 0.900 },
11680  { 56.363387 , 1344.00 , 1.655 , 11.44 , 0.0 , 2.970 , 2.300 },
11681  { 56.968180 , 1763.00 , 1.255 , 11.81 , 0.0 , 2.120 , 2.500 },
11682  { 57.612481 , 2141.00 , 0.910 , 12.21 , 0.0 , 0.940 , 3.700 },
11683  { 58.323874 , 2386.00 , 0.621 , 12.66 , 0.0 , -0.550 , -3.100 },
11684  { 58.446589 , 1457.00 , 0.079 , 14.49 , 0.0 , 5.970 , 0.800 },
11685  { 59.164204 , 2404.00 , 0.386 , 13.19 , 0.0 , -2.440 , 0.100 },
11686  { 59.590982 , 2112.00 , 0.207 , 13.60 , 0.0 , 3.440 , 0.500 },
11687  { 60.306057 , 2124.00 , 0.207 , 13.82 , 0.0 , -4.130 , 0.700 },
11688  { 60.434775 , 2461.00 , 0.386 , 12.97 , 0.0 , 1.320 , -1.000 },
11689  { 61.150558 , 2504.00 , 0.621 , 12.48 , 0.0 , -0.360 , 5.800 },
11690  { 61.800152 , 2298.00 , 0.910 , 12.07 , 0.0 , -1.590 , 2.900 },
11691  { 62.411212 , 1933.00 , 1.255 , 11.71 , 0.0 , -2.660 , 2.300 },
11692  { 62.486253 , 1517.00 , 0.078 , 14.68 , 0.0 , -4.770 , 0.900 },
11693  { 62.997974 , 1503.00 , 1.660 , 11.39 , 0.0 , -3.340 , 2.200 },
11694  { 63.568515 , 1087.00 , 2.110 , 11.08 , 0.0 , -4.170 , 2.000 },
11695  { 64.127764 , 733.50 , 2.620 , 10.78 , 0.0 , -4.480 , 2.000 },
11696  { 64.678900 , 463.50 , 3.190 , 10.50 , 0.0 , -5.100 , 1.800 },
11697  { 65.224067 , 274.80 , 3.810 , 10.20 , 0.0 , -5.100 , 1.900 },
11698  { 65.764769 , 153.00 , 4.480 , 10.00 , 0.0 , -5.700 , 1.800 },
11699  { 66.302088 , 80.09 , 5.220 , 9.70 , 0.0 , -5.500 , 1.800 },
11700  { 66.836827 , 39.46 , 6.000 , 9.40 , 0.0 , -5.900 , 1.700 },
11701  { 67.369595 , 18.32 , 6.840 , 9.20 , 0.0 , -5.600 , 1.800 },
11702  { 67.900862 , 8.01 , 7.740 , 8.90 , 0.0 , -5.800 , 1.700 },
11703  { 68.431001 , 3.30 , 8.690 , 8.70 , 0.0 , -5.700 , 1.700 },
11704  { 68.960306 , 1.28 , 9.690 , 8.60 , 0.0 , -5.600 , 1.700 },
11705  { 69.489021 , 0.47 , 10.720 , 8.50 , 0.0 , -5.600 , 1.700 },
11706  { 70.017342 , 0.16 , 11.830 , 8.40 , 0.0 , -5.600 , 1.700 },
11707  { 118.750341 , 945.00 , 0.000 , 15.92 , 0.0 , -0.440 , 0.900 },
11708  { 368.498350 , 67.90 , 0.020 , 19.20 , 0.6 , 0.000 , 0.000 },
11709  { 424.763120 , 638.00 , 0.011 , 19.16 , 0.6 , 0.000 , 0.000 },
11710  { 487.249370 , 235.00 , 0.011 , 19.20 , 0.6 , 0.000 , 0.000 },
11711  { 715.393150 , 99.60 , 0.089 , 18.10 , 0.6 , 0.000 , 0.000 },
11712  { 773.838730 , 671.00 , 0.079 , 18.10 , 0.6 , 0.000 , 0.000 },
11713  { 834.145330 , 180.00 , 0.079 , 18.10 , 0.6 , 0.000 , 0.000 },
11714 };
11715 
11716  // number of lines of Liebe O2-line catalog (0-47 lines)
11717  const Index i_first = 0;
11718  const Index i_last = 47; // all the spec. lines up to 1THz
11719  // const Index i_last = 40; // only the 60GHz complex + 118GHz line
11720 
11721 
11722  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
11723  // standard values for the MPM85 model (Liebe, Radio Science, 20, 1069-1089, 1985):
11724  const Numeric CC_MPM85 = 1.00000;
11725  const Numeric CL_MPM85 = 1.00000;
11726  const Numeric CW_MPM85 = 1.00000;
11727  const Numeric CO_MPM85 = 1.00000;
11728  int AppCutoff = 0;
11729  // ---------------------------------------------------------------------------------------
11730 
11731 
11732  // select the parameter set (!!model dominates values!!):
11733  Numeric CC, CL, CW, CO;
11734  if ( model == "MPM85" )
11735  {
11736  CC = CC_MPM85;
11737  CL = CL_MPM85;
11738  CW = CW_MPM85;
11739  CO = CO_MPM85;
11740  }
11741  else if ( model == "MPM85Lines" )
11742  {
11743  CC = 0.000;
11744  CL = CL_MPM85;
11745  CW = CW_MPM85;
11746  CO = CO_MPM85;
11747  }
11748  else if ( model == "MPM85Continuum" )
11749  {
11750  CC = CC_MPM85;
11751  CL = 0.000;
11752  CW = 0.000;
11753  CO = 0.000;
11754  }
11755  else if ( model == "MPM85NoCoupling" )
11756  {
11757  CC = CC_MPM85;
11758  CL = CL_MPM85;
11759  CW = CW_MPM85;
11760  CO = 0.000;
11761  }
11762  else if ( model == "MPM85NoCutoff" )
11763  {
11764  CC = CC_MPM85;
11765  CL = CL_MPM85;
11766  CW = CW_MPM85;
11767  CO = CO_MPM85;
11768  AppCutoff = 1;
11769  }
11770  else if ( model == "user" )
11771  {
11772  CC = CCin;
11773  CL = CLin;
11774  CW = CWin;
11775  CO = COin;
11776  }
11777  else
11778  {
11779  ostringstream os;
11780  os << "O2-MPM85: ERROR! Wrong model values given.\n"
11781  << "Valid models are: 'MPM85' 'MPM85Lines' 'MPM85Continuum' 'MPM85NoCoupling' 'MPM85NoCutoff'"
11782  << "and 'user'" << '\n';
11783  throw runtime_error(os.str());
11784  }
11785  out3 << "O2-MPM85: (model=" << model << ") parameter values in use:\n"
11786  << " CC = " << CC << "\n"
11787  << " CL = " << CL << "\n"
11788  << " CW = " << CW << "\n"
11789  << " CO = " << CO << "\n";
11790 
11791 
11792  // O2 continuum parameters of MPM92:
11793  const Numeric S0 = 6.140e-4; // line strength [ppm]
11794  const Numeric G0 = 5.600e-3; // line width [GHz/kPa]
11795  const Numeric X0 = 0.800; // temperature dependence of line width [1]
11796 
11797  const Index n_p = abs_p.nelem(); // Number of pressure levels
11798  const Index n_f = f_grid.nelem(); // Number of frequencies
11799 
11800  // const = VMR * ISORATIO = 0.20946 * 0.99519
11801  // this constant is already incorporated into the line strength, so we
11802  // have top devide the line strength by this value since arts multiplies pxsec
11803  // by these variables later in abs_coefCalc.
11804  const Numeric VMRISO = 0.2085;
11805 
11806  // Check that dimensions of abs_p, abs_t, and vmr agree:
11807  assert ( n_p==abs_t.nelem() );
11808  assert ( n_p==vmr.nelem() );
11809 
11810  // Check that dimensions of pxsec are consistent with n_f
11811  // and n_p. It should be [n_f,n_p]:
11812  assert ( n_f==pxsec.nrows() );
11813  assert ( n_p==pxsec.ncols() );
11814 
11815  // Loop pressure/temperature (pressure in hPa therefore the factor 0.01)
11816  for ( Index i=0; i<n_p; ++i )
11817  {
11818  // check if O2-VMR is exactly zero (caused by zeropadding), then return 0.
11819  if (vmr[i] == 0.)
11820  {
11821  pxsec(joker, i) = 0.;
11822  continue;
11823  }
11824 
11825  // check if O2-VMR will cause an underflow due to division by zero:
11826  if (vmr[i] < VMRCalcLimit)
11827  {
11828  ostringstream os;
11829  os << "ERROR: MPM87 O2 full absorption model has detected a O2 volume mixing ratio of "
11830  << vmr[i] << " which is below the threshold of " << VMRCalcLimit << ".\n"
11831  << "Therefore no calculation is performed.\n";
11832  throw runtime_error(os.str());
11833  return;
11834  }
11835 
11836  // relative inverse temperature [1]
11837  Numeric theta = (300.0 / abs_t[i]);
11838  // H2O partial pressure [kPa]
11839  Numeric pwv = Pa_to_kPa * abs_p[i] * abs_h2o[i];
11840  // dry air partial pressure [kPa]
11841  Numeric pda = (Pa_to_kPa * abs_p[i]) - pwv;
11842  // here the total pressure is devided by the O2 vmr for the
11843  // P_dry calculation because we calculate pxsec and not abs: abs = vmr * pxsec
11844  Numeric pda_dummy = pda;
11845  // O2 continuum strength [ppm]
11846  Numeric strength_cont = S0 * pda_dummy * pow( theta, (Numeric)2. );
11847  // O2 continuum pseudo line broadening [GHz]
11848  Numeric gam_cont = G0 * ( pda + 1.10*pwv ) * pow( theta, X0 ); // GHz
11849 
11850  // Loop over input frequency
11851  for ( Index s=0; s<n_f; ++s )
11852  {
11853  // input frequency in [GHz]
11854  Numeric ff = f_grid[s] * Hz_to_GHz;
11855  // O2 continuum absorption [1/m]
11856  // cross section: pxsec = absorption / var
11857  // the vmr of O2 will be multiplied at the stage of absorption calculation:
11858  // here the rolloff parameter FAC is implemented!
11859  // Numeric FAC = 1.000 / ( pow( ff, 2) + pow( 60.000, 2) );
11860  // if we let the non-proofen rollofff away as in further version:
11861  Numeric FAC = 1.000 ;
11862  Numeric Nppc = CC * strength_cont * FAC * ff * gam_cont /
11863  ( pow( ff, (Numeric)2.)
11864  + pow( gam_cont, (Numeric)2.) );
11865 
11866  // Loop over MPM85 O2 spectral lines:
11867  Numeric Nppl = 0.0;
11868  for ( Index l = i_first; l <= i_last; ++l )
11869  {
11870  // line strength [ppm] S=A(1,I)*P*V**3*EXP(A(2,I)*(1.-V))*1.E-6
11871  Numeric strength = CL * mpm85[l][1] * 1.000e-6 * pda_dummy *
11872  pow(theta, (Numeric)3.) * exp(mpm85[l][2]*(1.000-theta)) /
11873  mpm85[l][0];
11874  // line broadening parameter [GHz]
11875  Numeric gam = CW * ( mpm85[l][3] * 1.000e-3 *
11876  ( ( pda * pow(theta, ((Numeric)0.80-mpm85[l][4]))) +
11877  (1.10 * pwv * theta) ) );
11878  // line mixing parameter [1]
11879  Numeric delta = CO * mpm85[l][5] * 1.000e-3 *
11880  pda * pow(theta, mpm85[l][6]);
11881  // absorption [dB/km] like in the original MPM92
11882  Nppl += strength * MPMLineShapeO2Function(gam, mpm85[l][0], ff, delta);
11883  }
11884  // in MPM85 there is a cutoff for O2 line absorption if abs_l < 0
11885  // absorption cannot be less than 0 according to MPM87 philosophy.
11886  // since this cutoff is only 'detectable' in the source code and not in the
11887  // publications we assume this cutoff also for MPM85 since it is also
11888  // implemented in MPM87.
11889  if (AppCutoff == 0)
11890  {
11891  if (Nppl < 0.000) Nppl = 0.0000;
11892  }
11893  //
11894  // O2 line absorption [1/m]
11895  // cross section: pxsec = absorption / var
11896  // the vmr of O2 will be multiplied at the stage of absorption calculation:
11897  pxsec(s,i) += dB_km_to_1_m * 0.1820 * ff * (Nppl+Nppc) / VMRISO;
11898  }
11899  }
11900  return;
11901 }
11902 //
11903 // #################################################################################
11905 
11938  const Numeric CCin, // continuum scale factor
11939  const Numeric CLin, // line strength scale factor
11940  const Numeric CWin, // line broadening scale factor
11941  const Numeric COin, // line coupling scale factor
11942  const String& model,
11943  ConstVectorView f_grid,
11944  ConstVectorView abs_p,
11945  ConstVectorView abs_t,
11946  ConstVectorView abs_h2o,
11947  ConstVectorView vmr,
11948  const Verbosity& verbosity)
11949 {
11950  CREATE_OUT3;
11951 
11952  //
11953  // Coefficients are from Liebe et al., AGARD CP-May93, Paper 3/1-10
11954  // 0 1 2 3 4 5 6
11955  // f0 a1 a2 a3 a4 a5 a6
11956  // [GHz] [kHz/hPa] [1] [MHz/hPa] [1] [1/kPa]
11957  const Numeric mpm87[48][7] = {
11958  { 49.452379 , 0.12 , 11.830 , 8.40 , 0.0 , 6.600 , 1.700}, // 0
11959  { 49.962257 , 0.34 , 10.720 , 8.50 , 0.0 , 6.600 , 1.700}, // 1
11960  { 50.474238 , 0.94 , 9.690 , 8.60 , 0.0 , 6.600 , 1.700}, // 2
11961  { 50.987748 , 2.46 , 8.690 , 8.70 , 0.0 , 6.500 , 1.700}, // 3
11962  { 51.503350 , 6.08 , 7.740 , 8.90 , 0.0 , 6.627 , 1.800}, // 4
11963  { 52.021409 , 14.14 , 6.840 , 9.20 , 0.0 , 6.347 , 1.800}, // 5
11964  { 52.542393 , 31.02 , 6.000 , 9.40 , 0.0 , 6.046 , 1.800}, // 6
11965  { 53.066906 , 64.10 , 5.220 , 9.70 , 0.0 , 5.719 , 1.900}, // 7
11966  { 53.595748 , 124.70 , 4.480 , 10.00 , 0.0 , 5.400 , 1.800}, // 8
11967  { 54.129999 , 228.00 , 3.810 , 10.20 , 0.0 , 5.157 , 2.000}, // 9
11968  { 54.671157 , 391.80 , 3.190 , 10.50 , 0.0 , 4.783 , 1.900}, // 10
11969  { 55.221365 , 631.60 , 2.620 , 10.79 , 0.0 , 4.339 , 2.100}, // 11
11970  { 55.783800 , 953.50 , 2.115 , 11.10 , 0.0 , 4.011 , 2.100}, // 12
11971  { 56.264777 , 548.90 , 0.010 , 16.46 , 0.0 , 2.772 , 0.900}, // 13
11972  { 56.363387 , 1344.00 , 1.655 , 11.44 , 0.0 , 3.922 , 2.300}, // 14
11973  { 56.968180 , 1763.00 , 1.255 , 11.81 , 0.0 , 3.398 , 2.500}, // 15
11974  { 57.612481 , 2141.00 , 0.910 , 12.21 , 0.0 , 1.145 , 3.200}, // 16
11975  { 58.323874 , 2386.00 , 0.621 , 12.66 , 0.0 , -0.317 , -2.500}, // 17
11976  { 58.446589 , 1457.00 , 0.079 , 14.49 , 0.0 , 6.270 , 0.800}, // 18
11977  { 59.164204 , 2404.00 , 0.386 , 13.19 , 0.0 , -4.119 , 0.100}, // 19
11978  { 59.590982 , 2112.00 , 0.207 , 13.60 , 0.0 , 6.766 , 0.500}, // 20
11979  { 60.306057 , 2124.00 , 0.207 , 13.82 , 0.0 , -6.183 , 0.700}, // 21
11980  { 60.434775 , 2461.00 , 0.386 , 12.97 , 0.0 , 3.290 , -0.400}, // 22
11981  { 61.150558 , 2504.00 , 0.621 , 12.48 , 0.0 , -1.591 , 3.500}, // 23
11982  { 61.800152 , 2298.00 , 0.910 , 12.07 , 0.0 , -2.068 , 2.900}, // 24
11983  { 62.411212 , 1933.00 , 1.255 , 11.71 , 0.0 , -4.158 , 2.300}, // 25
11984  { 62.486253 , 1517.00 , 0.078 , 14.68 , 0.0 , -4.068 , 0.900}, // 26
11985  { 62.997974 , 1503.00 , 1.660 , 11.39 , 0.0 , -4.482 , 2.200}, // 27
11986  { 63.568515 , 1087.00 , 2.110 , 11.08 , 0.0 , -4.442 , 2.000}, // 28
11987  { 64.127764 , 733.50 , 2.620 , 10.78 , 0.0 , -4.687 , 2.000}, // 29
11988  { 64.678900 , 463.50 , 3.190 , 10.50 , 0.0 , -5.074 , 1.800}, // 30
11989  { 65.224067 , 274.80 , 3.810 , 10.20 , 0.0 , -5.403 , 1.900}, // 31
11990  { 65.764769 , 153.00 , 4.480 , 10.00 , 0.0 , -5.610 , 1.800}, // 32
11991  { 66.302088 , 80.09 , 5.220 , 9.70 , 0.0 , -5.896 , 1.800}, // 33
11992  { 66.836827 , 39.46 , 6.000 , 9.40 , 0.0 , -6.194 , 1.700}, // 34
11993  { 67.369595 , 18.32 , 6.840 , 9.20 , 0.0 , -6.468 , 1.800}, // 35
11994  { 67.900862 , 8.01 , 7.740 , 8.90 , 0.0 , -6.718 , 1.700}, // 36
11995  { 68.431001 , 3.30 , 8.690 , 8.70 , 0.0 , -6.700 , 1.700}, // 37
11996  { 68.960306 , 1.28 , 9.690 , 8.60 , 0.0 , -6.600 , 1.700}, // 38
11997  { 69.489021 , 0.47 , 10.720 , 8.50 , 0.0 , -6.600 , 1.700}, // 39
11998  { 70.017342 , 0.16 , 11.830 , 8.40 , 0.0 , -6.600 , 1.700}, // 40
11999  { 118.750341 , 945.00 , 0.000 , 16.30 , 0.0 , -0.134 , 0.800}, // 41
12000  { 368.498350 , 67.90 , 0.020 , 19.20 , 0.6 , 0.000 , 0.000}, // 42
12001  { 424.763120 , 638.00 , 0.011 , 19.16 , 0.6 , 0.000 , 0.000}, // 43
12002  { 487.249370 , 235.00 , 0.011 , 19.20 , 0.6 , 0.000 , 0.000}, // 44
12003  { 715.393150 , 99.60 , 0.089 , 18.10 , 0.6 , 0.000 , 0.000}, // 45
12004  { 773.838730 , 671.00 , 0.079 , 18.10 , 0.6 , 0.000 , 0.000}, // 46
12005  { 834.145330 , 180.00 , 0.079 , 18.10 , 0.6 , 0.000 , 0.000} // 47
12006  };
12007 
12008  // number of lines of Liebe O2-line catalog (0-47 lines)
12009  const Index i_first = 0;
12010  const Index i_last = 47; // all the spec. lines up to 1THz
12011  // const Index i_last = 40; // only the 60GHz complex + 118GHz line
12012 
12013 
12014  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
12015  // standard values for the MPM87 model (NITA Report 87-224):
12016  const Numeric CC_MPM87 = 1.00000;
12017  const Numeric CL_MPM87 = 1.00000;
12018  const Numeric CW_MPM87 = 1.00000;
12019  const Numeric CO_MPM87 = 1.00000;
12020  int AppCutoff = 0;
12021  // ---------------------------------------------------------------------------------------
12022 
12023 
12024  // select the parameter set (!!model dominates values!!):
12025  Numeric CC, CL, CW, CO;
12026  if ( model == "MPM87" )
12027  {
12028  CC = CC_MPM87;
12029  CL = CL_MPM87;
12030  CW = CW_MPM87;
12031  CO = CO_MPM87;
12032  }
12033  else if ( model == "MPM87Lines" )
12034  {
12035  CC = 0.000;
12036  CL = CL_MPM87;
12037  CW = CW_MPM87;
12038  CO = CO_MPM87;
12039  }
12040  else if ( model == "MPM87Continuum" )
12041  {
12042  CC = CC_MPM87;
12043  CL = 0.000;
12044  CW = 0.000;
12045  CO = 0.000;
12046  }
12047  else if ( model == "MPM87NoCoupling" )
12048  {
12049  CC = CC_MPM87;
12050  CL = CL_MPM87;
12051  CW = CW_MPM87;
12052  CO = 0.000;
12053  }
12054  else if ( model == "MPM87NoCutoff" )
12055  {
12056  // !!ATTENTION!!
12057  // In the window regions the total absorption can get negative values.
12058  // So be carefull with this selection!
12059  CC = CC_MPM87;
12060  CL = CL_MPM87;
12061  CW = CW_MPM87;
12062  CO = CO_MPM87;
12063  AppCutoff = 1;
12064  }
12065  else if ( model == "user" )
12066  {
12067  CC = CCin;
12068  CL = CLin;
12069  CW = CWin;
12070  CO = COin;
12071  }
12072  else
12073  {
12074  ostringstream os;
12075  os << "O2-MPM87: ERROR! Wrong model values given.\n"
12076  << "Valid models are: 'MPM87' 'MPM87Lines' 'MPM87Continuum' 'MPM87NoCoupling' 'MPM87NoCutoff'"
12077  << "and 'user'" << '\n';
12078  throw runtime_error(os.str());
12079  }
12080  out3 << "O2-MPM87: (model=" << model << ") parameter values in use:\n"
12081  << " CC = " << CC << "\n"
12082  << " CL = " << CL << "\n"
12083  << " CW = " << CW << "\n"
12084  << " CO = " << CO << "\n";
12085 
12086 
12087  // O2 continuum parameters of MPM92:
12088  const Numeric S0 = 6.140e-4; // line strength [ppm]
12089  const Numeric G0 = 4.800e-3; // line width [GHz/kPa] !! 14% lower than in all the other versions !!
12090  const Numeric X0 = 0.800; // temperature dependence of line width [1]
12091 
12092  const Index n_p = abs_p.nelem(); // Number of pressure levels
12093  const Index n_f = f_grid.nelem(); // Number of frequencies
12094 
12095  // const = VMR * ISORATIO = 0.20946 * 0.99519
12096  // this constant is already incorporated into the line strength, so we
12097  // have top devide the line strength by this value since arts multiplies pxsec
12098  // by these variables later in abs_coefCalc.
12099  const Numeric VMRISO = 0.2085;
12100 
12101  // Check that dimensions of abs_p, abs_t, and vmr agree:
12102  assert ( n_p==abs_t.nelem() );
12103  assert ( n_p==vmr.nelem() );
12104 
12105  // Check that dimensions of pxsec are consistent with n_f
12106  // and n_p. It should be [n_f,n_p]:
12107  assert ( n_f==pxsec.nrows() );
12108  assert ( n_p==pxsec.ncols() );
12109 
12110  // Loop pressure/temperature (pressure in hPa therefore the factor 0.01)
12111  for ( Index i=0; i<n_p; ++i )
12112  {
12113  // check if O2-VMR is exactly zero (caused by zeropadding), then return 0.
12114  if (vmr[i] == 0.)
12115  {
12116  pxsec(joker, i) = 0.;
12117  continue;
12118  }
12119 
12120  // check if O2-VMR will cause an underflow due to division by zero:
12121  if (vmr[i] < VMRCalcLimit)
12122  {
12123  ostringstream os;
12124  os << "ERROR: MPM87 O2 full absorption model has detected a O2 volume mixing ratio of "
12125  << vmr[i] << " which is below the threshold of " << VMRCalcLimit << ".\n"
12126  << "Therefore no calculation is performed.\n";
12127  throw runtime_error(os.str());
12128  return;
12129  }
12130 
12131  // relative inverse temperature [1]
12132  Numeric theta = (300.0 / abs_t[i]);
12133  // H2O partial pressure [kPa]
12134  Numeric pwv = Pa_to_kPa * abs_p[i] * abs_h2o[i];
12135  // dry air partial pressure [kPa]
12136  Numeric pda = (Pa_to_kPa * abs_p[i]) - pwv;
12137  // here the total pressure is devided by the O2 vmr for the
12138  // P_dry calculation because we calculate pxsec and not abs: abs = vmr * pxsec
12139  Numeric pda_dummy = pda;
12140  // O2 continuum strength [ppm]
12141  Numeric strength_cont = S0 * pda_dummy * pow( theta, (Numeric)2. );
12142  // O2 continuum pseudo line broadening [GHz]
12143  Numeric gam_cont = G0 * ( pda + 1.10*pwv ) * pow( theta, X0 ); // GHz
12144 
12145  // Loop over input frequency
12146  for ( Index s=0; s<n_f; ++s )
12147  {
12148  // input frequency in [GHz]
12149  Numeric ff = f_grid[s] * Hz_to_GHz;
12150  // O2 continuum absorption [1/m]
12151  // cross section: pxsec = absorption / var
12152  // the vmr of O2 will be multiplied at the stage of absorption calculation:
12153  Numeric Nppc = CC * strength_cont * ff * gam_cont /
12154  ( pow( ff, (Numeric)2.) + pow( gam_cont, (Numeric)2.) );
12155 
12156  // Loop over MPM87 O2 spectral lines:
12157  Numeric Nppl = 0.0;
12158  for ( Index l = i_first; l <= i_last; ++l )
12159  {
12160  // line strength [ppm] S=A(1,I)*P*V**3*EXP(A(2,I)*(1.-V))*1.E-6
12161  Numeric strength = CL * mpm87[l][1] * 1.000e-6 * pda_dummy *
12162  pow(theta, (Numeric)3.) * exp(mpm87[l][2]*(1.000-theta)) /
12163  mpm87[l][0];
12164  // line broadening parameter [GHz]
12165  Numeric gam = CW * ( mpm87[l][3] * 1.000e-3 *
12166  ( ( pda * pow(theta, ((Numeric)0.80-mpm87[l][4]))) +
12167  (1.10 * pwv * theta) ) );
12168  // line mixing parameter [1]
12169  Numeric delta = CO * mpm87[l][5] * 1.000e-3 *
12170  pda * pow(theta, mpm87[l][6]);
12171  // absorption [dB/km] like in the original MPM92
12172  Nppl += strength * MPMLineShapeO2Function(gam, mpm87[l][0], ff, delta);
12173  }
12174  // in MPM87 there is a cutoff for O2 line absorption if abs_l < 0
12175  // absorption cannot be less than 0 according to MPM87 source code.
12176  if (AppCutoff == 0)
12177  {
12178  if (Nppl < 0.000) Nppl = 0.0000;
12179  }
12180  //
12181  // O2 line absorption [1/m]
12182  // cross section: pxsec = absorption / var
12183  // the vmr of O2 will be multiplied at the stage of absorption calculation:
12184  pxsec(s,i) += dB_km_to_1_m * 0.1820 * ff * (Nppl+Nppc) / VMRISO;
12185  }
12186  }
12187  return;
12188 }
12189 //
12190 // #################################################################################
12192 
12222  const Numeric CCin, // continuum scale factor
12223  const Numeric CLin, // line strength scale factor
12224  const Numeric CWin, // line broadening scale factor
12225  const Numeric COin, // line coupling scale factor
12226  const String& model,
12227  ConstVectorView f_grid,
12228  ConstVectorView abs_p,
12229  ConstVectorView abs_t,
12230  ConstVectorView abs_h2o,
12231  ConstVectorView vmr,
12232  const Verbosity& verbosity)
12233 {
12234  CREATE_OUT3;
12235 
12236  //
12237  // Coefficients are from Liebe et al., AGARD CP-May93, Paper 3/1-10
12238  // 0 1 2 3 4 5 6
12239  // f0 a1 a2 a3 a4 a5 a6
12240  // [GHz] [kHz/hPa] [1] [MHz/hPa] [1] [1/kPa]
12241  const Numeric mpm89[44][7] = {
12242  { 50.474238, 0.94 , 9.694 , 8.60 , 0.0 , 1.600 , 5.520 }, // 0
12243  { 50.987749, 2.46 , 8.694 , 8.70 , 0.0 , 1.400 , 5.520 }, // 1
12244  { 51.503350, 6.08 , 7.744 , 8.90 , 0.0 , 1.165 , 5.520 }, // 2
12245  { 52.021410, 14.14 , 6.844 , 9.20 , 0.0 , 0.883 , 5.520 }, // 3
12246  { 52.542394, 31.02 , 6.004 , 9.40 , 0.0 , 0.579 , 5.520 }, // 4
12247  { 53.066907, 64.10 , 5.224 , 9.70 , 0.0 , 0.252 , 5.520 }, // 5
12248  { 53.595749, 124.70 , 4.484 , 10.00 , 0.0 , -0.066 , 5.520 }, // 6
12249  { 54.130000, 228.00 , 3.814 , 10.20 , 0.0 , -0.314 , 5.520 }, // 7
12250  { 54.671159, 391.80 , 3.194 , 10.50 , 0.0 , -0.706 , 5.520 }, // 8
12251  { 55.221367, 631.60 , 2.624 , 10.79 , 0.0 , -1.151 , 5.514 }, // 9
12252  { 55.783802, 953.50 , 2.119 , 11.10 , 0.0 , -0.920 , 5.025 }, // 10
12253  { 56.264775, 548.90 , 0.015 , 16.46 , 0.0 , 2.881 , -0.069 }, // 11
12254  { 56.363389, 1344.00 , 1.660 , 11.44 , 0.0 , -0.596 , 4.750 }, // 12
12255  { 56.968206, 1763.00 , 1.260 , 11.81 , 0.0 , -0.556 , 4.104 }, // 13
12256  { 57.612484, 2141.00 , 0.915 , 12.21 , 0.0 , -2.414 , 3.536 }, // 14
12257  { 58.323877, 2386.00 , 0.626 , 12.66 , 0.0 , -2.635 , 2.686 }, // 15
12258  { 58.446590, 1457.00 , 0.084 , 14.49 , 0.0 , 6.848 , -0.647 }, // 16
12259  { 59.164207, 2404.00 , 0.391 , 13.19 , 0.0 , -6.032 , 1.858 }, // 17
12260  { 59.590983, 2112.00 , 0.212 , 13.60 , 0.0 , 8.266 , -1.413 }, // 18
12261  { 60.306061, 2124.00 , 0.212 , 13.82 , 0.0 , -7.170 , 0.916 }, // 19
12262  { 60.434776, 2461.00 , 0.391 , 12.97 , 0.0 , 5.664 , -2.323 }, // 20
12263  { 61.150560, 2504.00 , 0.626 , 12.48 , 0.0 , 1.731 , -3.039 }, // 21
12264  { 61.800154, 2298.00 , 0.915 , 12.07 , 0.0 , 1.738 , -3.797 }, // 22
12265  { 62.411215, 1933.00 , 1.260 , 11.71 , 0.0 , -0.048 , -4.277 }, // 23
12266  { 62.486260, 1517.00 , 0.083 , 14.68 , 0.0 , -4.290 , 0.238 }, // 24
12267  { 62.997977, 1503.00 , 1.665 , 11.39 , 0.0 , 0.134 , -4.860 }, // 25
12268  { 63.568518, 1087.00 , 2.115 , 11.08 , 0.0 , 0.541 , -5.079 }, // 26
12269  { 64.127767, 733.50 , 2.620 , 10.78 , 0.0 , 0.814 , -5.525 }, // 27
12270  { 64.678903, 463.50 , 3.195 , 10.50 , 0.0 , 0.415 , -5.520 }, // 28
12271  { 65.224071, 274.80 , 3.815 , 10.20 , 0.0 , 0.069 , -5.520 }, // 29
12272  { 65.764772, 153.00 , 4.485 , 10.00 , 0.0 , -0.143 , -5.520 }, // 30
12273  { 66.302091, 80.09 , 5.225 , 9.70 , 0.0 , -0.428 , -5.520 }, // 31
12274  { 66.836830, 39.46 , 6.005 , 9.40 , 0.0 , -0.726 , -5.520 }, // 32
12275  { 67.369598, 18.32 , 6.845 , 9.20 , 0.0 , -1.002 , -5.520 }, // 33
12276  { 67.900867, 8.01 , 7.745 , 8.90 , 0.0 , -1.255 , -5.520 }, // 34
12277  { 68.431005, 3.30 , 8.695 , 8.70 , 0.0 , -1.500 , -5.520 }, // 35
12278  { 68.960311, 1.28 , 9.695 , 8.60 , 0.0 , -1.700 , -5.520 }, // 36
12279  { 118.750343, 945.00 , 0.009 , 16.30 , 0.0 , -0.247 , 0.003 }, // 37
12280  { 368.498350, 67.90 , 0.049 , 19.20 , 0.6 , 0.000 , 0.000 }, // 38
12281  { 424.763124, 638.00 , 0.044 , 19.16 , 0.6 , 0.000 , 0.000 }, // 39
12282  { 487.249370, 235.00 , 0.049 , 19.20 , 0.6 , 0.000 , 0.000 }, // 40
12283  { 715.393150, 99.60 , 0.145 , 18.10 , 0.6 , 0.000 , 0.000 }, // 41
12284  { 773.839675, 671.00 , 0.130 , 18.10 , 0.6 , 0.000 , 0.000 }, // 42
12285  { 834.145330, 180.00 , 0.147 , 18.10 , 0.6 , 0.000 , 0.000 } // 43
12286  };
12287 
12288  // number of lines of Liebe O2-line catalog (0-43 lines)
12289  const Index i_first = 0;
12290  const Index i_last = 43; // all the spec. lines up to 1THz
12291  // const Index i_last = 37; // only the 60GHz complex + 118GHz line
12292 
12293 
12294  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
12295  // standard values for the MPM89 model (IJIMW, Vol 10, pp. 631-650, 1989):
12296  const Numeric CC_MPM89 = 1.00000;
12297  const Numeric CL_MPM89 = 1.00000;
12298  const Numeric CW_MPM89 = 1.00000;
12299  const Numeric CO_MPM89 = 1.00000;
12300  int AppCutoff = 0;
12301  // ---------------------------------------------------------------------------------------
12302 
12303 
12304  // select the parameter set (!!model dominates values!!):
12305  Numeric CC, CL, CW, CO;
12306  if ( model == "MPM89" )
12307  {
12308  CC = CC_MPM89;
12309  CL = CL_MPM89;
12310  CW = CW_MPM89;
12311  CO = CO_MPM89;
12312  }
12313  else if ( model == "MPM89Lines" )
12314  {
12315  CC = 0.000;
12316  CL = CL_MPM89;
12317  CW = CW_MPM89;
12318  CO = CO_MPM89;
12319  }
12320  else if ( model == "MPM89Continuum" )
12321  {
12322  CC = CC_MPM89;
12323  CL = 0.000;
12324  CW = 0.000;
12325  CO = 0.000;
12326  }
12327  else if ( model == "MPM89NoCoupling" )
12328  {
12329  CC = CC_MPM89;
12330  CL = CL_MPM89;
12331  CW = CW_MPM89;
12332  CO = 0.000;
12333  }
12334  else if ( model == "MPM89NoCutoff" )
12335  {
12336  CC = CC_MPM89;
12337  CL = CL_MPM89;
12338  CW = CW_MPM89;
12339  CO = CO_MPM89;
12340  AppCutoff = 1;
12341  }
12342  else if ( model == "user" )
12343  {
12344  CC = CCin;
12345  CL = CLin;
12346  CW = CWin;
12347  CO = COin;
12348  }
12349  else
12350  {
12351  ostringstream os;
12352  os << "O2-MPM89: ERROR! Wrong model values given.\n"
12353  << "Valid models are: 'MPM89' 'MPM89Lines' 'MPM89Continuum' 'MPM89NoCoupling' 'MPM89NoCutoff'"
12354  << "and 'user'" << '\n';
12355  throw runtime_error(os.str());
12356  }
12357  out3 << "O2-MPM89: (model=" << model << ") parameter values in use:\n"
12358  << " CC = " << CC << "\n"
12359  << " CL = " << CL << "\n"
12360  << " CW = " << CW << "\n"
12361  << " CO = " << CO << "\n";
12362 
12363 
12364  // O2 continuum parameters of MPM92:
12365  const Numeric S0 = 6.140e-4; // line strength [ppm]
12366  const Numeric G0 = 5.60e-3; // line width [GHz/kPa]
12367  const Numeric X0 = 0.800; // temperature dependence of line width [1]
12368 
12369  const Index n_p = abs_p.nelem(); // Number of pressure levels
12370  const Index n_f = f_grid.nelem(); // Number of frequencies
12371 
12372  // const = VMR * ISORATIO = 0.20946 * 0.99519
12373  // this constant is already incorporated into the line strength, so we
12374  // have top devide the line strength by this value since arts multiplies pxsec
12375  // by these variables later in abs_coefCalc.
12376  const Numeric VMRISO = 0.2085;
12377 
12378  // Check that dimensions of abs_p, abs_t, and vmr agree:
12379  assert ( n_p==abs_t.nelem() );
12380  assert ( n_p==vmr.nelem() );
12381 
12382  // Check that dimensions of pxsec are consistent with n_f
12383  // and n_p. It should be [n_f,n_p]:
12384  assert ( n_f==pxsec.nrows() );
12385  assert ( n_p==pxsec.ncols() );
12386 
12387  // Loop pressure/temperature (pressure in hPa therefore the factor 0.01)
12388  for ( Index i=0; i<n_p; ++i )
12389  {
12390  // check if O2-VMR is exactly zero (caused by zeropadding), then return 0.
12391  if (vmr[i] == 0.)
12392  {
12393  pxsec(joker, i) = 0.;
12394  continue;
12395  }
12396 
12397  // check if O2-VMR will cause an underflow due to division by zero:
12398  if (vmr[i] < VMRCalcLimit)
12399  {
12400  ostringstream os;
12401  os << "ERROR: MPM89 O2 full absorption model has detected a O2 volume mixing ratio of "
12402  << vmr[i] << " which is below the threshold of " << VMRCalcLimit << ".\n"
12403  << "Therefore no calculation is performed.\n";
12404  throw runtime_error(os.str());
12405  return;
12406  }
12407 
12408  // relative inverse temperature [1]
12409  Numeric theta = (300.0 / abs_t[i]);
12410  // H2O partial pressure [kPa]
12411  Numeric pwv = Pa_to_kPa * abs_p[i] * abs_h2o[i];
12412  // dry air partial pressure [kPa]
12413  Numeric pda = (Pa_to_kPa * abs_p[i]) - pwv;
12414  // here the total pressure is devided by the O2 vmr for the
12415  // P_dry calculation because we calculate pxsec and not abs: abs = vmr * pxsec
12416  Numeric pda_dummy = pda;
12417  // O2 continuum strength [ppm]
12418  Numeric strength_cont = S0 * pda_dummy * pow( theta, (Numeric)2. );
12419  // O2 continuum pseudo line broadening [GHz]
12420  Numeric gam_cont = G0 * (pwv+pda) * pow( theta, X0 ); // GHz
12421 
12422  // Loop over input frequency
12423  for ( Index s=0; s<n_f; ++s )
12424  {
12425  // input frequency in [GHz]
12426  Numeric ff = f_grid[s] * Hz_to_GHz;
12427  // O2 continuum absorption [1/m]
12428  // cross section: pxsec = absorption / var
12429  // the vmr of O2 will be multiplied at the stage of absorption calculation:
12430  Numeric Nppc = CC * strength_cont * ff * gam_cont /
12431  ( pow( ff, (Numeric)2.) + pow( gam_cont, (Numeric)2.) );
12432 
12433  // Loop over MPM89 O2 spectral lines:
12434  Numeric Nppl = 0.0;
12435  for ( Index l = i_first; l <= i_last; ++l )
12436  {
12437  // line strength [ppm] S=A(1,I)*P*V**3*EXP(A(2,I)*(1.-V))*1.E-6
12438  Numeric strength = CL * mpm89[l][1] * 1.000e-6 * pda_dummy *
12439  pow(theta, (Numeric)3.) * exp(mpm89[l][2]*(1.000-theta)) /
12440  mpm89[l][0];
12441  // line broadening parameter [GHz]
12442  Numeric gam = CW * ( mpm89[l][3] * 1.000e-3 *
12443  ( ( pda * pow(theta, ((Numeric)0.80-mpm89[l][4]))) +
12444  (1.10 * pwv * theta) ) );
12445  // line mixing parameter [1]
12446  Numeric delta = CO * ( (mpm89[l][5] + mpm89[l][6] * theta) * 1.000e-3 *
12447  pda * pow(theta, (Numeric)0.8) );
12448  // absorption [dB/km] like in the original MPM92
12449  Nppl += strength * MPMLineShapeO2Function(gam, mpm89[l][0], ff, delta);
12450  }
12451  // in MPM89 we adopt the cutoff for O2 line absorption if abs_l < 0
12452  // absorption cannot be less than 0 according to MPM87 source code.
12453  if (AppCutoff == 0)
12454  {
12455  if (Nppl < 0.000) Nppl = 0.0000;
12456  }
12457  //
12458  // O2 line absorption [1/m]
12459  // cross section: pxsec = absorption / var
12460  // the vmr of O2 will be multiplied at the stage of absorption calculation:
12461  pxsec(s,i) += dB_km_to_1_m * 0.1820 * ff * (Nppl+Nppc) / VMRISO;
12462  }
12463  }
12464  return;
12465 }
12466 //
12467 // #################################################################################
12468 //
12470 
12501  const Numeric CCin, // continuum scale factor
12502  const Numeric CLin, // line strength scale factor
12503  const Numeric CWin, // line broadening scale factor
12504  const Numeric COin, // line coupling scale factor
12505  const String& model,
12506  ConstVectorView f_grid,
12507  ConstVectorView abs_p,
12508  ConstVectorView abs_t,
12509  ConstVectorView abs_h2o,
12510  ConstVectorView vmr,
12511  const Verbosity& verbosity)
12512 {
12513  CREATE_OUT3;
12514 
12515  //
12516  // Coefficients are from Liebe et al., AGARD CP-May93, Paper 3/1-10
12517  // 0 1 2 3 4 5 6
12518  // f0 a1 a2 a3 a4 a5 a6
12519  // [GHz] [kHz/hPa] [1] [MHz/hPa] [1] [10³/hPa]
12520  const Numeric mpm92[44][7] = {
12521  { 50.474238, 0.094, 9.694, 0.850, 0.0, 0.210, 0.685}, // 0
12522  { 50.987749, 0.246, 8.694, 0.870, 0.0, 0.190, 0.680}, // 1
12523  { 51.503350, 0.608, 7.744, 0.890, 0.0, 0.171, 0.673}, // 2
12524  { 52.021410, 1.414, 6.844, 0.920, 0.0, 0.144, 0.664}, // 3
12525  { 52.542394, 3.102, 6.004, 0.940, 0.0, 0.118, 0.653}, // 4
12526  { 53.066907, 6.410, 5.224, 0.970, 0.0, 0.114, 0.621}, // 5
12527  { 53.595749, 12.470, 4.484, 1.000, 0.0, 0.200, 0.508}, // 6
12528  { 54.130000, 22.800, 3.814, 1.020, 0.0, 0.291, 0.375}, // 7
12529  { 54.671159, 39.180, 3.194, 1.050, 0.0, 0.325, 0.265}, // 8
12530  { 55.221367, 63.160, 2.624, 1.080, 0.0, 0.224, 0.295}, // 9
12531  { 55.783802, 95.350, 2.119, 1.110, 0.0, -0.144, 0.613}, // 0
12532  { 56.264775, 54.890, 0.015, 1.646, 0.0, 0.339, -0.098}, // 11
12533  { 56.363389, 134.400, 1.660, 1.144, 0.0, -0.258, 0.655}, // 12
12534  { 56.968206, 176.300, 1.260, 1.181, 0.0, -0.362, 0.645}, // 13
12535  { 57.612484, 214.100, 0.915, 1.221, 0.0, -0.533, 0.606}, // 14
12536  { 58.323877, 238.600, 0.626, 1.266, 0.0, -0.178, 0.044}, // 15
12537  { 58.446590, 145.700, 0.084, 1.449, 0.0, 0.650, -0.127}, // 16
12538  { 59.164207, 240.400, 0.391, 1.319, 0.0, -0.628, 0.231}, // 17
12539  { 59.590983, 211.200, 0.212, 1.360, 0.0, 0.665, -0.078}, // 18
12540  { 60.306061, 212.400, 0.212, 1.382, 0.0, -0.613, 0.070}, // 19
12541  { 60.434776, 246.100, 0.391, 1.297, 0.0, 0.606, -0.282}, // 20
12542  { 61.150560, 250.400, 0.626, 1.248, 0.0, 0.090, -0.058}, // 21
12543  { 61.800154, 229.800, 0.915, 1.207, 0.0, 0.496, -0.662}, // 22
12544  { 62.411215, 193.300, 1.260, 1.171, 0.0, 0.313, -0.676}, // 23
12545  { 62.486260, 151.700, 0.083, 1.468, 0.0, -0.433, 0.084}, // 24
12546  { 62.997977, 150.300, 1.665, 1.139, 0.0, 0.208, -0.668}, // 25
12547  { 63.568518, 108.700, 2.115, 1.110, 0.0, 0.094, -0.614}, // 26
12548  { 64.127767, 73.350, 2.620, 1.080, 0.0, -0.270, -0.289}, // 27
12549  { 64.678903, 46.350, 3.195, 1.050, 0.0, -0.366, -0.259}, // 28
12550  { 65.224071, 27.480, 3.815, 1.020, 0.0, -0.326, -0.368}, // 29
12551  { 65.764772, 15.300, 4.485, 1.000, 0.0, -0.232, -0.500}, // 30
12552  { 66.302091, 8.009, 5.225, 0.970, 0.0, -0.146, -0.609}, // 31
12553  { 66.836830, 3.946, 6.005, 0.940, 0.0, -0.147, -0.639}, // 32
12554  { 67.369598, 1.832, 6.845, 0.920, 0.0, -0.174, -0.647}, // 33
12555  { 67.900867, 0.801, 7.745, 0.890, 0.0, -0.198, -0.655}, // 34
12556  { 68.431005, 0.330, 8.695, 0.870, 0.0, -0.210, -0.660}, // 35
12557  { 68.960311, 0.128, 9.695, 0.850, 0.0, -0.220, -0.665}, // 36
12558  { 118.750343, 94.500, 0.009, 1.630, 0.0, -0.031, 0.008}, // 37
12559  { 368.498350, 6.790, 0.049, 1.920, 0.6, 0.000, 0.000}, // 38
12560  { 424.763124, 63.800, 0.044, 1.926, 0.6, 0.000, 0.000}, // 39
12561  { 487.249370, 23.500, 0.049, 1.920, 0.6, 0.000, 0.000}, // 40
12562  { 715.393150, 9.960, 0.145, 1.810, 0.6, 0.000, 0.000}, // 41
12563  { 773.839675, 67.100, 0.130, 1.810, 0.6, 0.000, 0.000}, // 42
12564  { 834.145330, 18.000, 0.147, 1.810, 0.6, 0.000, 0.000}}; // 43
12565 
12566  // number of lines of Liebe O2-line catalog (0-43 lines)
12567  const Index i_first = 0;
12568  const Index i_last = 43; // all the spec. lines up to 1THz
12569  // const Index i_last = 37; // only the 60GHz complex + 118GHz line
12570 
12571 
12572  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
12573  // standard values for the MPM92 model (JQSRT, Vol 48, pp. 629-643, 1992):
12574  const Numeric CC_MPM92 = 1.00000;
12575  const Numeric CL_MPM92 = 1.00000;
12576  const Numeric CW_MPM92 = 1.00000;
12577  const Numeric CO_MPM92 = 1.00000;
12578  int AppCutoff = 0;
12579  // ---------------------------------------------------------------------------------------
12580 
12581 
12582  // select the parameter set (!!model dominates values!!):
12583  Numeric CC, CL, CW, CO;
12584  if ( model == "MPM92" )
12585  {
12586  CC = CC_MPM92;
12587  CL = CL_MPM92;
12588  CW = CW_MPM92;
12589  CO = CO_MPM92;
12590  }
12591  else if ( model == "MPM92Lines" )
12592  {
12593  CC = 0.000;
12594  CL = CL_MPM92;
12595  CW = CW_MPM92;
12596  CO = CO_MPM92;
12597  }
12598  else if ( model == "MPM92Continuum" )
12599  {
12600  CC = CC_MPM92;
12601  CL = 0.000;
12602  CW = 0.000;
12603  CO = 0.000;
12604  }
12605  else if ( model == "MPM92NoCoupling" )
12606  {
12607  CC = CC_MPM92;
12608  CL = CL_MPM92;
12609  CW = CW_MPM92;
12610  CO = 0.000;
12611  }
12612  else if ( model == "MPM92NoCutoff" )
12613  {
12614  CC = CC_MPM92;
12615  CL = CL_MPM92;
12616  CW = CW_MPM92;
12617  CO = CO_MPM92;
12618  AppCutoff = 1;
12619  }
12620  else if ( model == "user" )
12621  {
12622  CC = CCin;
12623  CL = CLin;
12624  CW = CWin;
12625  CO = COin;
12626  }
12627  else
12628  {
12629  ostringstream os;
12630  os << "O2-MPM92: ERROR! Wrong model values given.\n"
12631  << "Valid models are: 'MPM92' 'MPM92Lines' 'MPM92Continuum' 'MPM92NoCoupling' 'MPM92NoCutoff'"
12632  << "and 'user'" << '\n';
12633  throw runtime_error(os.str());
12634  }
12635  out3 << "O2-MPM92: (model=" << model << ") parameter values in use:\n"
12636  << " CC = " << CC << "\n"
12637  << " CL = " << CL << "\n"
12638  << " CW = " << CW << "\n"
12639  << " CO = " << CO << "\n";
12640 
12641 
12642  // const = VMR * ISORATIO = 0.20946 * 0.99519
12643  // this constant is already incorporated into the line strength, so we
12644  // have top devide the line strength by this value since arts multiplies pxsec
12645  // by these variables later in abs_coefCalc.
12646  const Numeric VMRISO = 0.2085;
12647 
12648  // O2 continuum parameters of MPM92:
12649  const Numeric S0 = 6.140e-5; // line strength [ppm]
12650  const Numeric G0 = 0.560e-3; // line width [GHz/hPa]
12651  const Numeric X0 = 0.800; // temperature dependence of line width [1]
12652 
12653  const Index n_p = abs_p.nelem(); // Number of pressure levels
12654  const Index n_f = f_grid.nelem(); // Number of frequencies
12655 
12656  // Check that dimensions of abs_p, abs_t, and vmr agree:
12657  assert ( n_p==abs_t.nelem() );
12658  assert ( n_p==vmr.nelem() );
12659 
12660  // Check that dimensions of pxsec are consistent with n_f
12661  // and n_p. It should be [n_f,n_p]:
12662  assert ( n_f==pxsec.nrows() );
12663  assert ( n_p==pxsec.ncols() );
12664 
12665  // Loop pressure/temperature (pressure in hPa therefore the factor 0.01)
12666  for ( Index i=0; i<n_p; ++i )
12667  {
12668  // check if O2-VMR is exactly zero (caused by zeropadding), then return 0.
12669  if (vmr[i] == 0.)
12670  {
12671  pxsec(joker, i) = 0.;
12672  continue;
12673  }
12674 
12675  // check if O2-VMR will cause an underflow due to division by zero:
12676  if (vmr[i] < VMRCalcLimit)
12677  {
12678  ostringstream os;
12679  os << "ERROR: MPM92 O2 full absorption model has detected a O2 volume mixing ratio of "
12680  << vmr[i] << " which is below the threshold of " << VMRCalcLimit << ".\n"
12681  << "Therefore no calculation is performed.\n";
12682  throw runtime_error(os.str());
12683  return;
12684  }
12685 
12686  // relative inverse temperature [1]
12687  Numeric theta = (300.0 / abs_t[i]);
12688  // H2O partial pressure [hPa]
12689  Numeric pwv = Pa_to_hPa * abs_p[i] * abs_h2o[i];
12690  // dry air partial pressure [hPa]
12691  Numeric pda = (Pa_to_hPa * abs_p[i]) - pwv;
12692  // here the total pressure is devided by the O2 vmr for the
12693  // P_dry calculation because we calculate pxsec and not abs: abs = vmr * pxsec
12694  Numeric pda_dummy = pda;
12695  // O2 continuum strength [ppm]
12696  Numeric strength_cont = S0 * pda_dummy * pow( theta, (Numeric)2. );
12697  // O2 continuum pseudo line broadening [GHz]
12698  Numeric gam_cont = G0 * (pwv+pda) * pow( theta, X0 ); // GHz
12699 
12700  // Loop over input frequency
12701  for ( Index s=0; s<n_f; ++s )
12702  {
12703  // input frequency in [GHz]
12704  Numeric ff = f_grid[s] * Hz_to_GHz;
12705  // O2 continuum absorption [1/m]
12706  // cross section: pxsec = absorption / var
12707  // the vmr of O2 will be multiplied at the stage of absorption calculation:
12708  Numeric Nppc = CC * strength_cont * ff * gam_cont /
12709  ( pow( ff, (Numeric)2.) + pow( gam_cont, (Numeric)2.) );
12710 
12711  // Loop over MPM92 O2 spectral lines:
12712  Numeric Nppl = 0.0;
12713  for ( Index l = i_first; l <= i_last; ++l )
12714  {
12715  // line strength [ppm] S=A(1,I)*P*V**3*EXP(A(2,I)*(1.-V))*1.E-6
12716  Numeric strength = CL * 1.000e-6 * pda_dummy * mpm92[l][1] / mpm92[l][0] *
12717  pow(theta, (Numeric)3.) * exp(mpm92[l][2]*(1.0-theta));
12718  // line broadening parameter [GHz]
12719  Numeric gam = CW * ( mpm92[l][3] * 0.001 *
12720  ( ( pda * pow(theta, ((Numeric)0.8-mpm92[l][4]))) +
12721  (1.10 * pwv * theta) ) );
12722  // line mixing parameter [1]
12723  // if (l < 11) CD = 1.1000;
12724  Numeric delta = CO * ( (mpm92[l][5] + mpm92[l][6] * theta) *
12725  (pda+pwv) * 0.001 * pow(theta, (Numeric)0.8) );
12726  // absorption [dB/km] like in the original MPM92
12727  Nppl += strength * MPMLineShapeO2Function(gam, mpm92[l][0], ff, delta);
12728  }
12729  // in MPM92 we adopt the cutoff for O2 line absorption if abs_l < 0
12730  // absorption cannot be less than 0 according to MPM87 and MPM93 source code.
12731  if (AppCutoff == 0)
12732  {
12733  if (Nppl < 0.000) Nppl = 0.0000;
12734  }
12735  //
12736  // O2 line absorption [1/m]
12737  // cross section: pxsec = absorption / var
12738  // the vmr of O2 will be multiplied at the stage of absorption calculation:
12739  pxsec(s,i) += dB_km_to_1_m * 0.1820 * ff * (Nppl+Nppc) / VMRISO;
12740  }
12741  }
12742  return;
12743 }
12744 //
12745 // #################################################################################
12747 
12788  const Numeric CCin, // continuum scale factor
12789  const Numeric CLin, // line strength scale factor
12790  const Numeric CWin, // line broadening scale factor
12791  const Numeric COin, // line coupling scale factor
12792  const String& model,
12793  ConstVectorView f_grid,
12794  ConstVectorView abs_p,
12795  ConstVectorView abs_t,
12796  ConstVectorView abs_h2o, // VMR 0f H2O
12797  ConstVectorView vmr, // VMR of O2
12798  const Verbosity& verbosity)
12799 {
12800  CREATE_OUT3;
12801 
12802  //
12803  // Coefficients are from Liebe et al., AGARD CP-May93, Paper 3/1-10
12804  // 0 1 2 3 4 5 6
12805  // f0 a1 a2 a3 a4 a5 a6
12806  // [GHz] [kHz/hPa] [1] [MHz/hPa] [1] [10³/hPa]
12807  const Numeric tre05[44][7] = {
12808  { 50.474214, 0.975/10, 9.651, 0.669, 0.0, 0.2566, 0.685}, // 37-
12809  { 50.987745, 2.529/10, 8.653, 0.717, 0.0, 0.2246, 0.680}, // 35-
12810  { 51.503360, 6.193/10, 7.709, 0.764, 0.0, 0.1947, 0.6729}, // 33-
12811  { 52.021429, 14.32/10, 6.819, 0.811, 0.0, 0.1667, 0.6640}, // 31-
12812  { 52.542418, 31.24/10, 5.983, 0.858, 0.0, 0.1388, 0.6526}, // 29-
12813  { 53.066934, 64.29/10, 5.201, 0.906, 0.0, 0.1349, 0.6206}, // 27-
12814  { 53.595775, 124.6/10, 4.474, 0.955, 0.0, 0.2227, 0.5085}, // 25-
12815  { 54.130025, 227.3/10, 3.800, 0.996, 0.0, 0.3170, 0.3750}, // 23-
12816  { 54.671180, 389.7/10, 3.182, 1.037, 0.0, 0.3558, 0.2654}, // 21-
12817  { 55.221384, 627.1/10, 2.618, 1.089, 0.0, 0.2560, 0.2952}, // 19-
12818  { 55.783815, 945.3/10, 2.109, 1.134, 0.0, -0.1172, 0.6135}, // 17-
12819  { 56.264774, 543.4/10, 0.014, 1.703, 0.0, 0.3525, -0.0978}, // 1+
12820  { 56.363399, 1331.8/10, 1.654, 1.189, 0.0, -0.2378, 0.6547}, // 15-
12821  { 56.968211, 1746.6/10, 1.255, 1.223, 0.0, -0.3545, 0.6451}, // 13-
12822  { 57.612486, 2120.1/10, 0.910, 1.262, 0.0, -0.5416, 0.6056}, // 11-
12823  { 58.323877, 2363.7/10, 0.621, 1.295, 0.0, -0.1932, 0.0436}, // 9-
12824  { 58.446588, 1442.1/10, 0.083, 1.491, 0.0, 0.6768, -0.1273}, // 3+
12825  { 59.164204, 2379.9/10, 0.387, 1.353, 0.0, -0.6561, 0.2309}, // 7-
12826  { 59.590983, 2090.7/10, 0.207, 1.408, 0.0, 0.6957, -0.0776}, // 5+
12827  { 60.306056, 2103.4/10, 0.207, 1.415, 0.0, -0.6395, 0.0699}, // 5-
12828  { 60.434778, 2438.0/10, 0.386, 1.339, 0.0, 0.6342, -0.2825}, // 7+
12829  { 61.150562, 2479.5/10, 0.621, 1.292, 0.0, 0.1014, -0.0584}, // 9+
12830  { 61.800158, 2275.9/10, 0.910, 1.263, 0.0, 0.5014, -0.6619}, // 11+
12831  { 62.411220, 1915.4/10, 1.255, 1.217, 0.0, 0.3029, -0.6759}, // 13+
12832  { 62.486253, 1503.0/10, 0.083, 1.513, 0.0, -0.4499, 0.0844}, // 3-
12833  { 62.997984, 1490.2/10, 1.654, 1.174, 0.0, 0.1856, -0.6675}, // 15+
12834  { 63.568526, 1078.0/10, 2.108, 1.134, 0.0, 0.0658, -0.6139}, // 17+
12835  { 64.127775, 728.7/10, 2.617, 1.088, 0.0, -0.3036, -0.2895}, // 19+
12836  { 64.678910, 461.3/10, 3.181, 1.038, 0.0, -0.3968, -0.2590}, // 21+
12837  { 65.224078, 274.0/10, 3.800, 0.996, 0.0, -0.3528, -0.3680}, // 23+
12838  { 65.764779, 153.0/10, 4.473, 0.955, 0.0, -0.2548, -0.5002}, // 25+
12839  { 66.302096, 80.40/10, 5.200, 0.906, 0.0, -0.1660, -0.6091}, // 27+
12840  { 66.836834, 39.80/10, 5.982, 0.858, 0.0, -0.1680, -0.6393}, // 29+
12841  { 67.369601, 18.56/10, 6.818, 0.811, 0.0, -0.1956, -0.6475}, // 31+
12842  { 67.900868, 8.172/10, 7.708, 0.764, 0.0, -0.2216, -0.6545}, // 33+
12843  { 68.431006, 3.397/10, 8.652, 0.717, 0.0, -0.2492, -0.660}, // 35+
12844  { 68.960312, 1.334/10, 9.650, 0.669, 0.0, -0.2773, -0.665}, // 37+
12845  { 118.750334, 940.3/10, 0.010, 1.664, 0.0, -0.0439, 0.0079}, // 1-
12846  { 368.498246, 67.4/10, 0.048, 1.64, 0.6, 0.0, 0.0}, // QN1
12847  { 424.763020, 637.7/10, 0.044, 1.64, 0.6, 0.0, 0.0}, // QN2
12848  { 487.249273, 237.4/10, 0.049, 1.60, 0.6, 0.0, 0.0}, // QN3
12849  { 715.392902, 98.1/10, 0.145, 1.60, 0.6, 0.0, 0.0}, // QN4
12850  { 773.839490, 572.3/10, 0.141, 1.62, 0.6, 0.0, 0.0}, // QN5
12851  { 834.145546, 183.1/10, 0.145, 1.47, 0.6, 0.0, 0.0}};// QN6
12852  // number of lines of Liebe O2-line catalog (0-43 lines)
12853  const Index i_first = 0;
12854  const Index i_last = 43; // all the spec. lines up to 1THz
12855  // const Index i_last = 37; // only the 60GHz complex + 118GHz line
12856 
12857 
12858  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
12859  // standard values for the MPM87 model (Radio Science, 20(5), 1985, 1069):
12860  const Numeric CC_TRE05 = 1.00000;
12861  const Numeric CL_TRE05 = 1.00000;
12862  const Numeric CW_TRE05 = 1.00000;
12863  const Numeric CO_TRE05 = 1.00000;
12864  int AppCutoff = 0;
12865  // ---------------------------------------------------------------------------------------
12866 
12867 
12868  // select the parameter set (!!model dominates values!!):
12869  Numeric CC, CL, CW, CO;
12870  if ( model == "TRE05" )
12871  {
12872  CC = CC_TRE05;
12873  CL = CL_TRE05;
12874  CW = CW_TRE05;
12875  CO = CO_TRE05;
12876  }
12877  else if ( model == "TRE05Lines" )
12878  {
12879  CC = 0.000;
12880  CL = CL_TRE05;
12881  CW = CW_TRE05;
12882  CO = CO_TRE05;
12883  }
12884  else if ( model == "TRE05Continuum" )
12885  {
12886  CC = CC_TRE05;
12887  CL = 0.000;
12888  CW = 0.000;
12889  CO = 0.000;
12890  }
12891  else if ( model == "TRE05NoCoupling" )
12892  {
12893  CC = CC_TRE05;
12894  CL = CL_TRE05;
12895  CW = CW_TRE05;
12896  CO = 0.000;
12897  }
12898  else if ( model == "TRE05NoCutoff" )
12899  {
12900  // !!ATTENTION!!
12901  // In the window regions the total absorption can get negative values.
12902  // So be carefull with this selection!
12903  CC = CC_TRE05;
12904  CL = CL_TRE05;
12905  CW = CW_TRE05;
12906  CO = CO_TRE05;
12907  AppCutoff = 1;
12908  }
12909  else if ( model == "user" )
12910  {
12911  CC = CCin;
12912  CL = CLin;
12913  CW = CWin;
12914  CO = COin;
12915  }
12916  else
12917  {
12918  ostringstream os;
12919  os << "O2-TRE05: ERROR! Wrong model values given.\n"
12920  << "Valid models are: 'TRE05' 'TRE05Lines' 'TRE05Continuum' 'TRE05NoCoupling' 'TRE05NoCutoff'"
12921  << "and 'user'" << '\n';
12922  throw runtime_error(os.str());
12923  }
12924  out3 << "O2-TRE05: (model=" << model << ") parameter values in use:\n"
12925  << " CC = " << CC << "\n"
12926  << " CL = " << CL << "\n"
12927  << " CW = " << CW << "\n"
12928  << " CO = " << CO << "\n";
12929 
12930 
12931  // const = VMR * ISORATIO = 0.20946 * 0.99519
12932  // this constant is already incorporated into the line strength, so we
12933  // have top devide the line strength by this value since arts multiplies pxsec
12934  // by these variables later in abs_coefCalc.
12935  const Numeric VMRISO = 0.2085;
12936 
12937  // O2 continuum parameters of TRE05:
12938  const Numeric S0 = 6.140e-5; // line strength [ppm]
12939  const Numeric G0 = 0.560e-3; // line width [GHz/hPa]
12940  const Numeric X0 = 0.800; // temperature dependence of line width [1]
12941 
12942  const Index n_p = abs_p.nelem(); // Number of pressure levels
12943  const Index n_f = f_grid.nelem(); // Number of frequencies
12944 
12945  // Check that dimensions of abs_p, abs_t, and vmr agree:
12946  assert ( n_p==abs_t.nelem() );
12947  assert ( n_p==vmr.nelem() );
12948 
12949  // Check that dimensions of pxsec are consistent with n_f
12950  // and n_p. It should be [n_f,n_p]:
12951  assert ( n_f==pxsec.nrows() );
12952  assert ( n_p==pxsec.ncols() );
12953 
12954  // Loop pressure/temperature (pressure in hPa therefore the factor 0.01)
12955  for ( Index i=0; i<n_p; ++i )
12956  {
12957  // check if O2-VMR is exactly zero (caused by zeropadding), then return 0.
12958  if (vmr[i] == 0.)
12959  {
12960  pxsec(joker, i) = 0.;
12961  continue;
12962  }
12963 
12964  // check if O2-VMR will cause an underflow due to division by zero:
12965  if (vmr[i] < VMRCalcLimit)
12966  {
12967  ostringstream os;
12968  os << "ERROR: TRE05 O2 full absorption model has detected a O2 volume mixing ratio of "
12969  << vmr[i] << " which is below the threshold of " << VMRCalcLimit << ".\n"
12970  << "Therefore no calculation is performed.\n";
12971  throw runtime_error(os.str());
12972  return;
12973  }
12974 
12975  // relative inverse temperature [1]
12976  Numeric theta = (300.0 / abs_t[i]);
12977  // H2O partial pressure [hPa]
12978  Numeric pwv = Pa_to_hPa * abs_p[i] * abs_h2o[i];
12979  // dry air partial pressure [hPa]
12980  Numeric pda = (Pa_to_hPa * abs_p[i]) - pwv;
12981  // here the total pressure is devided by the O2 vmr for the
12982  // P_dry calculation because we calculate pxsec and not abs: abs = vmr * pxsec
12983  // old version without VMRISO: Numeric pda_dummy = pda / vmr[i];
12984  Numeric pda_dummy = pda;
12985  // O2 continuum strength [ppm]
12986  Numeric strength_cont = S0 * pda_dummy * pow( theta, (Numeric)2. );
12987  // O2 continuum pseudo line broadening [GHz]
12988  Numeric gam_cont = G0 * (pwv+pda) * pow( theta, X0 ); // GHz
12989 
12990  // Loop over input frequency
12991  for ( Index s=0; s<n_f; ++s )
12992  {
12993  // input frequency in [GHz]
12994  Numeric ff = f_grid[s] * Hz_to_GHz;
12995  // O2 continuum absorption [1/m]
12996  // cross section: pxsec = absorption / var
12997  // the vmr of O2 will be multiplied at the stage of absorption calculation:
12998  Numeric Nppc = CC * strength_cont * ff * gam_cont /
12999  ( pow( ff, (Numeric)2.)
13000  + pow( gam_cont, (Numeric)2.) );
13001 
13002  // Loop over TRE05 O2 spectral lines:
13003  Numeric Nppl = 0.0;
13004  for ( Index l = i_first; l <= i_last; ++l )
13005  {
13006  // line strength [ppm] S=A(1,I)*P*V**3*EXP(A(2,I)*(1.-V))*1.E-6
13007  Numeric strength = CL * 1.000e-6 * pda_dummy *
13008  tre05[l][1] / tre05[l][0] *
13009  pow(theta, (Numeric)3.) * exp(tre05[l][2]*(1.0-theta));
13010  // line broadening parameter [GHz]
13011  Numeric gam = CW * ( tre05[l][3] * 0.001 *
13012  ( ( pda * pow(theta, ((Numeric)0.8-tre05[l][4]))) +
13013  (1.10 * pwv * theta) ) );
13014  // line mixing parameter [1]
13015  // if (l < 11) CD = 1.1000;
13016  Numeric delta = CO * ( (tre05[l][5] + tre05[l][6] * theta) *
13017  (pda+pwv) * pow(theta, (Numeric)0.8)
13018  * (Numeric)0.001 );
13019  // absorption [dB/km] like in the original TRE05
13020  Nppl += strength * MPMLineShapeO2Function(gam, tre05[l][0], ff, delta);
13021  }
13022  // in TRE05 there is a cutoff for O2 line absorption if abs_l < 0
13023  // absorption cannot be less than 0 according to TRE05 philosophy.
13024  if (AppCutoff == 0)
13025  {
13026  if (Nppl < 0.000) Nppl = 0.0000;// <---!!IMPORTANT FEATURE!!
13027  }
13028  //
13029  // O2 line absorption [1/m]
13030  // cross section: pxsec = absorption / var
13031  // the vmr of O2 will be multiplied at the stage of absorption calculation:
13032  pxsec(s,i) += dB_km_to_1_m * 0.1820 * ff * (Nppl+Nppc) / VMRISO;
13033  }
13034  }
13035  return;
13036  }
13037 //
13038 // #################################################################################
13040 
13072  const Numeric CCin, // continuum scale factor
13073  const Numeric CLin, // line strength scale factor
13074  const Numeric CWin, // line broadening scale factor
13075  const Numeric COin, // line coupling scale factor
13076  const String& model,
13077  ConstVectorView f_grid,
13078  ConstVectorView abs_p,
13079  ConstVectorView abs_t,
13080  ConstVectorView abs_h2o, // VMR 0f H2O
13081  ConstVectorView vmr, // VMR of O2
13082  const Verbosity& verbosity)
13083 {
13084  CREATE_OUT3;
13085 
13086  //
13087  // Coefficients are from Liebe et al., AGARD CP-May93, Paper 3/1-10
13088  // 0 1 2 3 4 5 6
13089  // f0 a1 a2 a3 a4 a5 a6
13090  // [GHz] [kHz/hPa] [1] [MHz/hPa] [1] [10³/hPa]
13091  const Numeric mpm93[44][7] = {
13092  { 50.474238, 0.094, 9.694, 0.890, 0.0, 0.240, 0.790}, // 0
13093  { 50.987749, 0.246, 8.694, 0.910, 0.0, 0.220, 0.780}, // 1
13094  { 51.503350, 0.608, 7.744, 0.940, 0.0, 0.197, 0.774}, // 2
13095  { 52.021410, 1.414, 6.844, 0.970, 0.0, 0.166, 0.764}, // 3
13096  { 52.542394, 3.102, 6.004, 0.990, 0.0, 0.136, 0.751}, // 4
13097  { 53.066907, 6.410, 5.224, 1.020, 0.0, 0.131, 0.714}, // 5
13098  { 53.595749, 12.470, 4.484, 1.050, 0.0, 0.230, 0.584}, // 6
13099  { 54.130000, 22.800, 3.814, 1.070, 0.0, 0.335, 0.431}, // 7
13100  { 54.671159, 39.180, 3.194, 1.100, 0.0, 0.374, 0.305}, // 8
13101  { 55.221367, 63.160, 2.624, 1.130, 0.0, 0.258, 0.339}, // 9
13102  { 55.783802, 95.350, 2.119, 1.170, 0.0, -0.166, 0.705}, // 10
13103  { 56.264775, 54.890, 0.015, 1.730, 0.0, 0.390, -0.113}, // 11
13104  { 56.363389, 134.400, 1.660, 1.200, 0.0, -0.297, 0.753}, // 12
13105  { 56.968206, 176.300, 1.260, 1.240, 0.0, -0.416, 0.742}, // 13
13106  { 57.612484, 214.100, 0.915, 1.280, 0.0, -0.613, 0.697}, // 14
13107  { 58.323877, 238.600, 0.626, 1.330, 0.0, -0.205, 0.051}, // 15
13108  { 58.446590, 145.700, 0.084, 1.520, 0.0, 0.748, -0.146}, // 16
13109  { 59.164207, 240.400, 0.391, 1.390, 0.0, -0.722, 0.266}, // 17
13110  { 59.590983, 211.200, 0.212, 1.430, 0.0, 0.765, -0.090}, // 18
13111  { 60.306061, 212.400, 0.212, 1.450, 0.0, -0.705, 0.081}, // 19
13112  { 60.434776, 246.100, 0.391, 1.360, 0.0, 0.697, -0.324}, // 20
13113  { 61.150560, 250.400, 0.626, 1.310, 0.0, 0.104, -0.067}, // 21
13114  { 61.800154, 229.800, 0.915, 1.270, 0.0, 0.570, -0.761}, // 22
13115  { 62.411215, 193.300, 1.260, 1.230, 0.0, 0.360, -0.777}, // 23
13116  { 62.486260, 151.700, 0.083, 1.540, 0.0, -0.498, 0.097}, // 24
13117  { 62.997977, 150.300, 1.665, 1.200, 0.0, 0.239, -0.768}, // 25
13118  { 63.568518, 108.700, 2.115, 1.170, 0.0, 0.108, -0.706}, // 26
13119  { 64.127767, 73.350, 2.620, 1.130, 0.0, -0.311, -0.332}, // 27
13120  { 64.678903, 46.350, 3.195, 1.100, 0.0, -0.421, -0.298}, // 28
13121  { 65.224071, 27.480, 3.815, 1.070, 0.0, -0.375, -0.423}, // 29
13122  { 65.764772, 15.300, 4.485, 1.050, 0.0, -0.267, -0.575}, // 30
13123  { 66.302091, 8.009, 5.225, 1.020, 0.0, -0.168, -0.700}, // 31
13124  { 66.836830, 3.946, 6.005, 0.990, 0.0, -0.169, -0.735}, // 32
13125  { 67.369598, 1.832, 6.845, 0.970, 0.0, -0.200, -0.744}, // 33
13126  { 67.900867, 0.801, 7.745, 0.940, 0.0, -0.228, -0.753}, // 34
13127  { 68.431005, 0.330, 8.695, 0.920, 0.0, -0.240, -0.760}, // 35
13128  { 68.960311, 0.128, 9.695, 0.900, 0.0, -0.250, -0.765}, // 36
13129  { 118.750343, 94.500, 0.009, 1.630, 0.0, -0.036, 0.009}, // 37
13130  { 368.498350, 6.790, 0.049, 1.920, 0.6, 0.000, 0.000}, // 38
13131  { 424.763124, 63.800, 0.044, 1.930, 0.6, 0.000, 0.000}, // 39
13132  { 487.249370, 23.500, 0.049, 1.920, 0.6, 0.000, 0.000}, // 40
13133  { 715.393150, 9.960, 0.145, 1.810, 0.6, 0.000, 0.000}, // 41
13134  { 773.839675, 67.100, 0.130, 1.820, 0.6, 0.000, 0.000}, // 42
13135  { 834.145330, 18.000, 0.147, 1.810 , 0.6, 0.000, 0.000}}; // 43
13136  // number of lines of Liebe O2-line catalog (0-43 lines)
13137  const Index i_first = 0;
13138  const Index i_last = 43; // all the spec. lines up to 1THz
13139  // const Index i_last = 37; // only the 60GHz complex + 118GHz line
13140 
13141 
13142  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
13143  // standard values for the MPM87 model (Radio Science, 20(5), 1985, 1069):
13144  const Numeric CC_MPM93 = 1.00000;
13145  const Numeric CL_MPM93 = 1.00000;
13146  const Numeric CW_MPM93 = 1.00000;
13147  const Numeric CO_MPM93 = 1.00000;
13148  int AppCutoff = 0;
13149  // ---------------------------------------------------------------------------------------
13150 
13151 
13152  // select the parameter set (!!model dominates values!!):
13153  Numeric CC, CL, CW, CO;
13154  if ( model == "MPM93" )
13155  {
13156  CC = CC_MPM93;
13157  CL = CL_MPM93;
13158  CW = CW_MPM93;
13159  CO = CO_MPM93;
13160  }
13161  else if ( model == "MPM93Lines" )
13162  {
13163  CC = 0.000;
13164  CL = CL_MPM93;
13165  CW = CW_MPM93;
13166  CO = CO_MPM93;
13167  }
13168  else if ( model == "MPM93Continuum" )
13169  {
13170  CC = CC_MPM93;
13171  CL = 0.000;
13172  CW = 0.000;
13173  CO = 0.000;
13174  }
13175  else if ( model == "MPM93NoCoupling" )
13176  {
13177  CC = CC_MPM93;
13178  CL = CL_MPM93;
13179  CW = CW_MPM93;
13180  CO = 0.000;
13181  }
13182  else if ( model == "MPM93NoCutoff" )
13183  {
13184  // !!ATTENTION!!
13185  // In the window regions the total absorption can get negative values.
13186  // So be carefull with this selection!
13187  CC = CC_MPM93;
13188  CL = CL_MPM93;
13189  CW = CW_MPM93;
13190  CO = CO_MPM93;
13191  AppCutoff = 1;
13192  }
13193  else if ( model == "user" )
13194  {
13195  CC = CCin;
13196  CL = CLin;
13197  CW = CWin;
13198  CO = COin;
13199  }
13200  else
13201  {
13202  ostringstream os;
13203  os << "O2-MPM93: ERROR! Wrong model values given.\n"
13204  << "Valid models are: 'MPM93' 'MPM93Lines' 'MPM93Continuum' 'MPM93NoCoupling' 'MPM93NoCutoff'"
13205  << "and 'user'" << '\n';
13206  throw runtime_error(os.str());
13207  }
13208  out3 << "O2-MPM93: (model=" << model << ") parameter values in use:\n"
13209  << " CC = " << CC << "\n"
13210  << " CL = " << CL << "\n"
13211  << " CW = " << CW << "\n"
13212  << " CO = " << CO << "\n";
13213 
13214 
13215  // const = VMR * ISORATIO = 0.20946 * 0.99519
13216  // this constant is already incorporated into the line strength, so we
13217  // have top devide the line strength by this value since arts multiplies pxsec
13218  // by these variables later in abs_coefCalc.
13219  const Numeric VMRISO = 0.2085;
13220 
13221  // O2 continuum parameters of MPM93:
13222  const Numeric S0 = 6.140e-5; // line strength [ppm]
13223  const Numeric G0 = 0.560e-3; // line width [GHz/hPa]
13224  const Numeric X0 = 0.800; // temperature dependence of line width [1]
13225 
13226  const Index n_p = abs_p.nelem(); // Number of pressure levels
13227  const Index n_f = f_grid.nelem(); // Number of frequencies
13228 
13229  // Check that dimensions of abs_p, abs_t, and vmr agree:
13230  assert ( n_p==abs_t.nelem() );
13231  assert ( n_p==vmr.nelem() );
13232 
13233  // Check that dimensions of pxsec are consistent with n_f
13234  // and n_p. It should be [n_f,n_p]:
13235  assert ( n_f==pxsec.nrows() );
13236  assert ( n_p==pxsec.ncols() );
13237 
13238  // Loop pressure/temperature (pressure in hPa therefore the factor 0.01)
13239  for ( Index i=0; i<n_p; ++i )
13240  {
13241  // check if O2-VMR is exactly zero (caused by zeropadding), then return 0.
13242  if (vmr[i] == 0.)
13243  {
13244  pxsec(joker, i) = 0.;
13245  continue;
13246  }
13247 
13248  // check if O2-VMR will cause an underflow due to division by zero:
13249  if (vmr[i] < VMRCalcLimit)
13250  {
13251  ostringstream os;
13252  os << "ERROR: MPM93 O2 full absorption model has detected a O2 volume mixing ratio of "
13253  << vmr[i] << " which is below the threshold of " << VMRCalcLimit << ".\n"
13254  << "Therefore no calculation is performed.\n";
13255  throw runtime_error(os.str());
13256  return;
13257  }
13258 
13259  // relative inverse temperature [1]
13260  Numeric theta = (300.0 / abs_t[i]);
13261  // H2O partial pressure [hPa]
13262  Numeric pwv = Pa_to_hPa * abs_p[i] * abs_h2o[i];
13263  // dry air partial pressure [hPa]
13264  Numeric pda = (Pa_to_hPa * abs_p[i]) - pwv;
13265  // here the total pressure is devided by the O2 vmr for the
13266  // P_dry calculation because we calculate pxsec and not abs: abs = vmr * pxsec
13267  // old version without VMRISO: Numeric pda_dummy = pda / vmr[i];
13268  Numeric pda_dummy = pda;
13269  // O2 continuum strength [ppm]
13270  Numeric strength_cont = S0 * pda_dummy * pow( theta, (Numeric)2. );
13271  // O2 continuum pseudo line broadening [GHz]
13272  Numeric gam_cont = G0 * (pwv+pda) * pow( theta, X0 ); // GHz
13273 
13274  // Loop over input frequency
13275  for ( Index s=0; s<n_f; ++s )
13276  {
13277  // input frequency in [GHz]
13278  Numeric ff = f_grid[s] * Hz_to_GHz;
13279  // O2 continuum absorption [1/m]
13280  // cross section: pxsec = absorption / var
13281  // the vmr of O2 will be multiplied at the stage of absorption calculation:
13282  Numeric Nppc = CC * strength_cont * ff * gam_cont /
13283  ( pow( ff, (Numeric)2.)
13284  + pow( gam_cont, (Numeric)2.) );
13285 
13286  // Loop over MPM93 O2 spectral lines:
13287  Numeric Nppl = 0.0;
13288  for ( Index l = i_first; l <= i_last; ++l )
13289  {
13290  // line strength [ppm] S=A(1,I)*P*V**3*EXP(A(2,I)*(1.-V))*1.E-6
13291  Numeric strength = CL * 1.000e-6 * pda_dummy *
13292  mpm93[l][1] / mpm93[l][0] *
13293  pow(theta, (Numeric)3.) * exp(mpm93[l][2]*(1.0-theta));
13294  // line broadening parameter [GHz]
13295  Numeric gam = CW * ( mpm93[l][3] * 0.001 *
13296  ( ( pda * pow(theta, ((Numeric)0.8-mpm93[l][4]))) +
13297  (1.10 * pwv * theta) ) );
13298  // line mixing parameter [1]
13299  // if (l < 11) CD = 1.1000;
13300  Numeric delta = CO * ( (mpm93[l][5] + mpm93[l][6] * theta) *
13301  (pda+pwv) * pow(theta, (Numeric)0.8)
13302  * (Numeric)0.001 );
13303  // absorption [dB/km] like in the original MPM93
13304  Nppl += strength * MPMLineShapeO2Function(gam, mpm93[l][0], ff, delta);
13305  }
13306  // in MPM93 there is a cutoff for O2 line absorption if abs_l < 0
13307  // absorption cannot be less than 0 according to MPM93 philosophy.
13308  if (AppCutoff == 0)
13309  {
13310  if (Nppl < 0.000) Nppl = 0.0000;// <---!!IMPORTANT FEATURE!!
13311  }
13312  //
13313  // O2 line absorption [1/m]
13314  // cross section: pxsec = absorption / var
13315  // the vmr of O2 will be multiplied at the stage of absorption calculation:
13316  pxsec(s,i) += dB_km_to_1_m * 0.1820 * ff * (Nppl+Nppc) / VMRISO;
13317  }
13318  }
13319  return;
13320 }
13321 //
13322 // #################################################################################
13323 //
13325 
13377  const Numeric CCin, // model parameter
13378  const Numeric CLin, // model parameter
13379  const Numeric CWin, // model parameter
13380  const Numeric COin, // model parameter
13381  const String& model, // model selection string
13382  const String& version, // PWR98, PWR93 or PWR88
13383  ConstVectorView f_grid,
13384  ConstVectorView abs_p,
13385  ConstVectorView abs_t,
13386  ConstVectorView vmrh2o,
13387  ConstVectorView vmr,
13388  const Verbosity& verbosity)
13389 {
13390  CREATE_OUT3;
13391 
13392  const Index n_lines = 40; // all O2 lines in this model (range: 50-850 GHz)
13393  //
13394  // lines are arranged 1-,1+,3-,3+,etc. in spin-rotation spectrum
13395  // line center frequency in [GHz]
13396  const Numeric F93[n_lines] = { 118.7503, 56.2648, 62.4863, 58.4466, // 00-03
13397  60.3061, 59.5910, 59.1642, 60.4348, // 04-07
13398  58.3239, 61.1506, 57.6125, 61.8002, // 08-11
13399  56.9682, 62.4112, 56.3634, 62.9980, // 12-15
13400  55.7838, 63.5685, 55.2214, 64.1278, // 16-19
13401  54.6712, 64.6789, 54.1300, 65.2241, // 20-23
13402  53.5957, 65.7648, 53.0669, 66.3021, // 24-27
13403  52.5424, 66.8368, 52.0214, 67.3696, // 28-31
13404  51.5034, 67.9009, 368.4984, 424.7631, // 32-35
13405  487.2494, 715.3932, 773.8397, 834.1453}; // 36-39
13406 
13407  // intensities in the submm range are updated according to HITRAN96
13408  const Numeric F98[n_lines] = { 118.7503, 56.2648, 62.4863, 58.4466, 60.3061, 59.5910,
13409  59.1642, 60.4348, 58.3239, 61.1506, 57.6125, 61.8002,
13410  56.9682, 62.4112, 56.3634, 62.9980, 55.7838, 63.5685,
13411  55.2214, 64.1278, 54.6712, 64.6789, 54.1300, 65.2241,
13412  53.5957, 65.7648, 53.0669, 66.3021, 52.5424, 66.8368,
13413  52.0214, 67.3696, 51.5034, 67.9009, 368.4984, 424.7632,
13414  487.2494, 715.3931, 773.8397, 834.1458};
13415 
13416 
13417  // line strength at T=300K in [cm² * Hz]
13418  const Numeric S93[n_lines] = { 0.2936E-14, 0.8079E-15, 0.2480E-14, 0.2228E-14,
13419  0.3351E-14, 0.3292E-14, 0.3721E-14, 0.3891E-14,
13420  0.3640E-14, 0.4005E-14, 0.3227E-14, 0.3715E-14,
13421  0.2627E-14, 0.3156E-14, 0.1982E-14, 0.2477E-14,
13422  0.1391E-14, 0.1808E-14, 0.9124E-15, 0.1230E-14,
13423  0.5603E-15, 0.7842E-15, 0.3228E-15, 0.4689E-15,
13424  0.1748E-15, 0.2632E-15, 0.8898E-16, 0.1389E-15,
13425  0.4264E-16, 0.6899E-16, 0.1924E-16, 0.3229E-16,
13426  0.8191E-17, 0.1423E-16, 0.6460E-15, 0.7047E-14,
13427  0.3011E-14, 0.1826E-14, 0.1152E-13, 0.3971E-14};
13428 
13429  // intensities in the submm range are updated according to HITRAN96
13430  const Numeric S98[n_lines] = { 0.2936E-14, 0.8079E-15, 0.2480E-14, 0.2228E-14,
13431  0.3351E-14, 0.3292E-14, 0.3721E-14, 0.3891E-14,
13432  0.3640E-14, 0.4005E-14, 0.3227E-14, 0.3715E-14,
13433  0.2627E-14, 0.3156E-14, 0.1982E-14, 0.2477E-14,
13434  0.1391E-14, 0.1808E-14, 0.9124E-15, 0.1230E-14,
13435  0.5603E-15, 0.7842E-15, 0.3228E-15, 0.4689E-15,
13436  0.1748E-15, 0.2632E-15, 0.8898E-16, 0.1389E-15,
13437  0.4264E-16, 0.6899E-16, 0.1924E-16, 0.3229E-16,
13438  0.8191E-17, 0.1423E-16, 0.6494E-15, 0.7083E-14,
13439  0.3025E-14, 0.1835E-14, 0.1158E-13, 0.3993E-14};
13440 
13441  // temperature exponent of the line strength in [1]
13442  const Numeric BE[n_lines] = { 0.009, 0.015, 0.083, 0.084,
13443  0.212, 0.212, 0.391, 0.391,
13444  0.626, 0.626, 0.915, 0.915,
13445  1.260, 1.260, 1.660, 1.665,
13446  2.119, 2.115, 2.624, 2.625,
13447  3.194, 3.194, 3.814, 3.814,
13448  4.484, 4.484, 5.224, 5.224,
13449  6.004, 6.004, 6.844, 6.844,
13450  7.744, 7.744, 0.048, 0.044,
13451  0.049, 0.145, 0.141, 0.145};
13452 
13453  // widths in MHz/mbar for the O2 continuum
13454  const Numeric WB300 = 0.56; // [MHz/mbar]=[MHz/hPa]
13455  const Numeric X = 0.80; // [1]
13456 
13457  // line width parameter [GHz/bar]
13458  const Numeric W300[n_lines] = { 1.630, 1.646, 1.468, 1.449,
13459  1.382, 1.360, 1.319, 1.297,
13460  1.266, 1.248, 1.221, 1.207,
13461  1.181, 1.171, 1.144, 1.139,
13462  1.110, 1.108, 1.079, 1.078,
13463  1.050, 1.050, 1.020, 1.020,
13464  1.000, 1.000, 0.970, 0.970,
13465  0.940, 0.940, 0.920, 0.920,
13466  0.890, 0.890, 1.920, 1.920,
13467  1.920, 1.810, 1.810, 1.810};
13468 
13469  // y parameter for the calculation of Y [1/bar]
13470  const Numeric Y93[n_lines] = { -0.0233, 0.2408, -0.3486, 0.5227,
13471  -0.5430, 0.5877, -0.3970, 0.3237,
13472  -0.1348, 0.0311, 0.0725, -0.1663,
13473  0.2832, -0.3629, 0.3970, -0.4599,
13474  0.4695, -0.5199, 0.5187, -0.5597,
13475  0.5903, -0.6246, 0.6656, -0.6942,
13476  0.7086, -0.7325, 0.7348, -0.7546,
13477  0.7702, -0.7864, 0.8083, -0.8210,
13478  0.8439, -0.8529, 0.0000, 0.0000,
13479  0.0000, 0.0000, 0.0000, 0.0000};
13480 
13481  // y parameter for the calculation of Y [1/bar].
13482  // These values are from P. W. Rosenkranz, Interference coefficients for the
13483  // overlapping oxygen lines in air, JQSRT, 1988, Volume 39, 287-297.
13484  const Numeric Y88[n_lines] = { -0.0244, 0.2772, -0.4068, 0.6270,
13485  -0.6183, 0.6766, -0.4119, 0.3290,
13486  0.0317, -0.1591, 0.1145, -0.2068,
13487  0.3398, -0.4158, 0.3922, -0.4482,
13488  0.4011, -0.4442, 0.4339, -0.4687,
13489  0.4783, -0.5074, 0.5157, -0.5403,
13490  0.5400, -0.5610, 0.5719, -0.5896,
13491  0.6046, -0.6194, 0.6347, -0.6468,
13492  0.6627, -0.6718, 0.0000, 0.0000,
13493  0.0000, 0.0000, 0.0000, 0.0000};
13494 
13495  // v parameter for the calculation of Y [1/bar]
13496  const Numeric V[n_lines] ={ 0.0079, -0.0978, 0.0844, -0.1273,
13497  0.0699, -0.0776, 0.2309, -0.2825,
13498  0.0436, -0.0584, 0.6056, -0.6619,
13499  0.6451, -0.6759, 0.6547, -0.6675,
13500  0.6135, -0.6139, 0.2952, -0.2895,
13501  0.2654, -0.2590, 0.3750, -0.3680,
13502  0.5085, -0.5002, 0.6206, -0.6091,
13503  0.6526, -0.6393, 0.6640, -0.6475,
13504  0.6729, -0.6545, 0.0000, 0.0000,
13505  0.0000, 0.0000, 0.0000, 0.0000};
13506  // range of lines to take into account for the line absorption part
13507  const Index first_line = 0; // first line for calculation
13508  const Index last_line = 39; // last line for calculation
13509 
13510  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
13511  // standard values for the Rosenkranz model
13512  // (P. W. Rosenkranz, Chapter 2, pp 74, in M. A. Janssen,
13513  // "Atmospheric Remote Sensing by Microwave Radiometry", John Wiley & Sons, Inc., 1993):
13514  const Numeric CC_PWR93 = 1.00000;
13515  const Numeric CL_PWR93 = 1.00000;
13516  const Numeric CW_PWR93 = 1.00000;
13517  const Numeric CO_PWR93 = 1.00000;
13518  // ---------------------------------------------------------------------------------------
13519 
13520 
13521  // select the parameter set (!!model dominates values!!):
13522  Numeric CC, CL, CW, CO, Y300[n_lines], S300[n_lines], F[n_lines];
13523  // FIXME int oldnewflag = 0;
13524 
13525  if ( model == "Rosenkranz" )
13526  {
13527  CC = CC_PWR93;
13528  CL = CL_PWR93;
13529  CW = CW_PWR93;
13530  CO = CO_PWR93;
13531  }
13532  else if ( model == "RosenkranzLines" )
13533  {
13534  CC = 0.000;
13535  CL = CL_PWR93;
13536  CW = CW_PWR93;
13537  CO = CO_PWR93;
13538  }
13539  else if ( model == "RosenkranzContinuum" )
13540  {
13541  CC = CC_PWR93;
13542  CL = 0.000;
13543  CW = 0.000;
13544  CO = 0.000;
13545  }
13546  else if ( model == "RosenkranzNoCoupling" )
13547  {
13548  CC = CC_PWR93;
13549  CL = CL_PWR93;
13550  CW = CW_PWR93;
13551  CO = 0.000;
13552  }
13553  else if ( model == "user" )
13554  {
13555  CC = CCin;
13556  CL = CLin;
13557  CW = CWin;
13558  CO = COin;
13559  }
13560  else
13561  {
13562  ostringstream os;
13563  os << "O2-PWR93: ERROR! Wrong model values given.\n"
13564  << "Valid models are: 'Rosenkranz', 'RosenkranzLines', RosenkranzContinuum, "
13565  << "'RosenkranzNoCoupling', and 'user'" << '\n';
13566  throw runtime_error(os.str());
13567  }
13568  out3 << "O2-PWR93: (model=" << model << ") parameter values in use:\n"
13569  << " CC = " << CC << "\n"
13570  << " CL = " << CL << "\n"
13571  << " CW = " << CW << "\n"
13572  << " CO = " << CO << "\n";
13573 
13574 
13575  // select version dependent parameters
13576  if ( version == "PWR88" ) {
13577  for ( Index i=0; i<n_lines; ++i )
13578  {
13579  F[i] = F93[i];
13580  S300[i] = S93[i];
13581  Y300[i] = Y88[i];
13582  };
13583  }
13584  else if ( version == "PWR93" ) {
13585  for ( Index i=0; i<n_lines; ++i )
13586  {
13587  F[i] = F93[i];
13588  S300[i] = S93[i];
13589  Y300[i] = Y93[i];
13590  };
13591  }
13592  else if ( version == "PWR98" ) {
13593  for ( Index i=0; i<n_lines; ++i )
13594  {
13595  F[i] = F98[i];
13596  S300[i] = S98[i];
13597  Y300[i] = Y93[i];
13598  };
13599  }
13600  else
13601  {
13602  ostringstream os;
13603  os << "O2-PWR93/PWR88: ERROR! Wrong version is selected.\n"
13604  << "Valid versions are:\n"
13605  << " 'PWR98' updates of F and S to HISTRAN96 and M.J.Schwartz, MIT, 1997\n"
13606  << " suggestions implemented.\n"
13607  << " 'PWR93' for the oxygen absorption model described in \n"
13608  << " P. W. Rosenkranz, Chapter 2, in M. A. Janssen,\n"
13609  << " Atmospheric Remote Sensing by Microwave Radiometry,\n"
13610  << " John Wiley & Sons, Inc., 1993.\n"
13611  << " 'PWR88' for the oxygen absorption model described in \n"
13612  << " P. W. Rosenkranz, Interference coefficients for the \n"
13613  << " overlapping oxygen lines in air, \n"
13614  << " JQSRT, 1988, Volume 39, 287-297.\n";
13615  throw runtime_error(os.str());
13616  }
13617 
13618 
13619  const Index n_p = abs_p.nelem(); // Number of pressure levels
13620  const Index n_f = f_grid.nelem(); // Number of frequencies
13621 
13622  // Check that dimensions of abs_p, abs_t, and vmr agree:
13623  assert ( n_p==abs_t.nelem() );
13624  assert ( n_p==vmr.nelem() );
13625 
13626  // Check that dimensions of pxsec are consistent with n_f
13627  // and n_p. It should be [n_f,n_p]:
13628  assert ( n_f==pxsec.nrows() );
13629  assert ( n_p==pxsec.ncols() );
13630 
13631  String fail_msg;
13632  bool failed = false;
13633 
13634  // Loop pressure/temperature:
13635 #pragma omp parallel for \
13636  if (!arts_omp_in_parallel() \
13637  && n_p >= arts_omp_get_max_threads())
13638  for ( Index i=0; i<n_p; ++i )
13639  {
13640  // check if O2-VMR is exactly zero (caused by zeropadding), then return 0.
13641  if (vmr[i] == 0.)
13642  {
13643  pxsec(joker, i) = 0.;
13644  continue;
13645  }
13646 
13647  // check if O2-VMR will cause an underflow due to division by zero:
13648  if (vmr[i] < VMRCalcLimit)
13649  {
13650  ostringstream os;
13651  os << "ERROR: PWR93 O2 full absorption model has detected a O2 volume mixing ratio of "
13652  << vmr[i] << " which is below the threshold of " << VMRCalcLimit << ".\n"
13653  << "Therefore no calculation is performed.\n";
13654 #pragma omp critical (PWR93O2AbsModel_error)
13655  {
13656  fail_msg = os.str();
13657  failed = true;
13658  }
13659  continue;
13660  }
13661  // relative inverse temperature [1]
13662  Numeric TH = 3.0000e2 / abs_t[i];
13663  Numeric TH1 = (TH-1.000e0);
13664  Numeric B = pow(TH, X);
13665  // partial pressure of H2O and dry air [hPa]
13666  Numeric PRESWV = Pa_to_hPa * (abs_p[i] * vmrh2o[i]);
13667  Numeric PRESDA = Pa_to_hPa * (abs_p[i] * (1.000e0 - vmrh2o[i]));
13668  Numeric DEN = 0.001*(PRESDA*B + 1.1*PRESWV*TH); // [hPa]
13669  Numeric DENS = 0.001*(PRESDA + 1.1*PRESWV)*TH; // [hPa]
13670  Numeric DFNR = WB300*DEN; // [GHz]
13671 
13672  // continuum absorption [1/m/GHz]
13673  Numeric CCONT = CC * 1.23e-10 * pow( TH, (Numeric)2. ) * abs_p[i];
13674 
13675  // Loop over input frequency
13676  for ( Index s=0; s<n_f; ++s )
13677  {
13678  // initial O2 line absorption at position ff
13679  // Numeric O2ABS = 0.000e0;cd safff
13680 
13681  // input frequency in [GHz]
13682  Numeric ff = Hz_to_GHz * f_grid[s];
13683 
13684  // continuum absorption [Neper/km]
13685  Numeric CONT = CCONT * (ff * ff * DFNR / (ff*ff + DFNR*DFNR));
13686 
13687  // Loop over Rosnekranz '93 spectral line frequency:
13688  Numeric SUM = 0.000e0;
13689  for ( Index l=first_line; l<=last_line; ++l )
13690  {
13691  Numeric DF = CW * W300[l] * DEN; // [hPa]
13692  // 118 line update according to M. J. Schwartz, MIT, 1997
13693  if ( (version == "PWR98") && (fabs((F[l]-118.75)) < 0.10) )
13694  {
13695  DF = CW * W300[l] * DENS; // [hPa]
13696  }
13697  Numeric Y = CO * 0.001 * 0.01 * abs_p[i] * B * ( Y300[l] + V[l]*TH1 );
13698  Numeric STR = CL * S300[l] * exp(-BE[l] * TH1);
13699  Numeric SF1 = ( DF + (ff-F[l])*Y ) / ( (ff-F[l])*(ff-F[l]) + DF*DF );
13700  Numeric SF2 = ( DF - (ff+F[l])*Y ) / ( (ff+F[l])*(ff+F[l]) + DF*DF );
13701  SUM += STR * (SF1+SF2) * (ff/F[l]) * (ff/F[l]);
13702  }
13703  // O2 absorption [Neper/km]
13704  // Rosenkranz uses the factor 0.5034e12 in the calculation of the abs coeff.
13705  // This factor is the product of several terms:
13706  // 0.5034e12 = ISORATIO * VMR * (Hz/GHz) * (k_B*300K)^-1
13707  // = 0.995262 * 0.20946 * 10^-9 * 2.414322e21(hPa*cm^2*km)^-1
13708  // |---- 0.2085 ----| |---- 2.414322e12(hPa*cm^2*km)^-1 ---|
13709  // |---- 0.2085 ----| |---- 2.414322e10( Pa*cm^2*km)^-1 ---|
13710  // O2ABS = 2.4143e12 * SUM * PRESDA * pow(TH, 3.0) / PI;
13711  // O2ABS = CONT + (2.414322e10 * SUM * abs_p[i] * pow(TH, 3.0) / PI);
13712  // unit conversion x Nepers/km = y 1/m ---> y = x * 1.000e-3
13713  // therefore 2.414322e10 --> 2.414322e7
13714  // pxsec [1/m]
13715  pxsec(s,i) += CONT + (2.414322e7 * SUM * abs_p[i] * pow(TH, (Numeric)3.) / PI);
13716  }
13717  }
13718 
13719  if (failed) throw runtime_error(fail_msg);
13720 
13721  return;
13722 }
13723 //
13724 // #################################################################################
13725 //
13727 
13764  const Numeric S0in, // model parameter
13765  const Numeric G0in, // model parameter
13766  const Numeric XS0in, // model parameter
13767  const Numeric XG0in, // model parameter
13768  const String& model,
13769  ConstVectorView f_grid,
13770  ConstVectorView abs_p,
13771  ConstVectorView abs_t,
13772  ConstVectorView abs_h2o,
13773  ConstVectorView vmr,
13774  const Verbosity& verbosity)
13775 {
13776  CREATE_OUT3;
13777 
13778  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
13779  // standard values for the MPM93 model (J. Liebe and G. A. Hufford and M. G. Cotton,
13780  // "Propagation modeling of moist air and suspended water/ice
13781  // particles at frequencies below 1000 GHz",
13782  // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
13783  // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21):
13784  // const Numeric S0_MPM93 = 6.140e-13/0.20946; // line strength/VMR-O2 [1/Pa]
13785  const Numeric S0_MPM93 = 6.140e-13; // line strength [1/Pa]
13786  const Numeric G0_MPM93 = 0.560e4; // line width [Hz/Pa]
13787  const Numeric XS0_MPM93 = 2.000; // temperature dependence of line strength
13788  const Numeric XG0_MPM93 = 0.800; // temperature dependence of line width
13789  // ---------------------------------------------------------------------------------------
13790 
13791 
13792  // select the parameter set (!!model dominates parameters!!):
13793  Numeric S0, G0, XS0, XG0;
13794  if ( model == "MPM93" )
13795  {
13796  S0 = S0_MPM93;
13797  G0 = G0_MPM93;
13798  XS0 = XS0_MPM93;
13799  XG0 = XG0_MPM93;
13800  }
13801  else if ( model == "user" )
13802  {
13803  S0 = S0in;
13804  G0 = G0in;
13805  XS0 = XS0in;
13806  XG0 = XG0in;
13807  }
13808  else
13809  {
13810  ostringstream os;
13811  os << "O2-SelfContMPM93: ERROR! Wrong model values given.\n"
13812  << "Valid models are: 'MPM93' and 'user'" << '\n';
13813  throw runtime_error(os.str());
13814  }
13815  out3 << "O2-SelfContMPM93: (model=" << model << ") parameter values in use:\n"
13816  << " S0 = " << S0 << "\n"
13817  << " G0 = " << G0 << "\n"
13818  << " XS0 = " << XS0 << "\n"
13819  << " XG0 = " << XG0 << "\n";
13820 
13821 
13822  const Index n_p = abs_p.nelem(); // Number of pressure levels
13823  const Index n_f = f_grid.nelem(); // Number of frequencies
13824 
13825  // Check that dimensions of abs_p, abs_t, and vmr agree:
13826  assert ( n_p==abs_t.nelem() );
13827  assert ( n_p==vmr.nelem() );
13828 
13829  // Check that dimensions of pxsec are consistent with n_f
13830  // and n_p. It should be [n_f,n_p]:
13831  assert ( n_f==pxsec.nrows() );
13832  assert ( n_p==pxsec.ncols() );
13833 
13834  // const = VMR * ISORATIO = 0.20946 * 0.99519
13835  // this constant is already incorporated into the line strength, so we
13836  // have top devide the line strength by this value since arts multiplies pxsec
13837  // by these variables later in abs_coefCalc.
13838  const Numeric VMRISO = 0.2085;
13839 
13840 
13841  // Loop pressure/temperature:
13842  for ( Index i=0; i<n_p; ++i )
13843  {
13844  // check if O2-VMR is exactly zero (caused by zeropadding), then return 0.
13845  if (vmr[i] == 0.)
13846  {
13847  pxsec(joker, i) = 0.;
13848  continue;
13849  }
13850 
13851  if (vmr[i] < VMRCalcLimit) // make sure that division by zero is excluded
13852  {
13853  ostringstream os;
13854  os << "ERROR: MPM93 O2 continuum absorption model has detected a O2 volume mixing ratio of "
13855  << vmr[i] << " which is below the threshold of " << VMRCalcLimit << ".\n"
13856  << "Therefore no calculation is performed.\n";
13857  throw runtime_error(os.str());
13858  return;
13859  }
13860  Numeric th = 300.0 / abs_t[i]; // Theta
13861  // continuum strength
13862  Numeric strength = S0 * abs_p[i] * (1.0000 - abs_h2o[i]) * pow( th, XS0 );
13863  // G0 from the input has to be converted to unit GHz/hPa --> * 1.0e-7
13864  Numeric gamma = G0 * abs_p[i] * pow( th, XG0 ); // Hz
13865 
13866  // Loop frequency:
13867  for ( Index s=0; s<n_f; ++s )
13868  {
13869  // the vmr of O2 will be multiplied at the stage of absorption calculation:
13870  // abs / vmr * pxsec.
13871  pxsec(s,i) += (4.0 * PI / SPEED_OF_LIGHT) * // unit factor [1/(m*Hz)]
13872  (strength / VMRISO) * // strength [1]
13873  ( pow( f_grid[s], (Numeric)2.) * gamma / // line shape [Hz]
13874  ( pow( f_grid[s], (Numeric)2.) + pow( gamma, (Numeric)2.) ) );
13875  }
13876  }
13877  return;
13878 }
13879 //
13880 // #################################################################################
13881 //
13883 
13919  const Numeric S0in, // model parameter
13920  const Numeric G0in, // model parameter
13921  const Numeric XS0in, // model parameter
13922  const Numeric XG0in, // model parameter
13923  const String& model,
13924  ConstVectorView f_grid,
13925  ConstVectorView abs_p, // total pressure [Pa]
13926  ConstVectorView abs_t,
13927  ConstVectorView abs_h2o, // H2O VMR
13928  ConstVectorView vmr _U_, // O2 VMR
13929  const Verbosity& verbosity)
13930 {
13931  CREATE_OUT3;
13932 
13933  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
13934  // P. W. Rosenkranz, Chapter 2, in M. A. Janssen,
13935  // Atmospheric Remote Sensing by Microwave Radiometry, John Wiley & Sons, Inc., 1993
13936  // ftp://mesa.mit.edu/phil/lbl_rt
13937  const Numeric S0_PWR93 = 1.11e-14; // [K²/(Hz*Pa*m)] line strength
13938  const Numeric G0_PWR93 = 5600.000; // line width [Hz/Pa]
13939  const Numeric XS0_PWR93 = 2.000; // temperature dependence of line strength
13940  const Numeric XG0_PWR93 = 0.800; // temperature dependence of line width
13941  // ---------------------------------------------------------------------------------------
13942 
13943  // select the parameter set (!!model dominates values!!):
13944  Numeric S0, G0, XS0, XG0;
13945  if ( model == "Rosenkranz" )
13946  {
13947  S0 = S0_PWR93;
13948  G0 = G0_PWR93;
13949  XS0 = XS0_PWR93;
13950  XG0 = XG0_PWR93;
13951  }
13952  else if ( model == "user" )
13953  {
13954  S0 = S0in;
13955  G0 = G0in;
13956  XS0 = XS0in;
13957  XG0 = XG0in;
13958  }
13959  else
13960  {
13961  ostringstream os;
13962  os << "O2-SelfContPWR93: ERROR! Wrong model values given.\n"
13963  << "Valid models are: 'Rosenkranz' and 'user'" << '\n';
13964  throw runtime_error(os.str());
13965  }
13966  out3 << "O2-SelfContPWR93: (model=" << model << ") parameter values in use:\n"
13967  << " S0 = " << S0 << "\n"
13968  << " G0 = " << G0 << "\n"
13969  << " XS0 = " << XS0 << "\n"
13970  << " XG0 = " << XG0 << "\n";
13971 
13972 
13973  const Index n_p = abs_p.nelem(); // Number of pressure levels
13974  const Index n_f = f_grid.nelem(); // Number of frequencies
13975 
13976  // Check that dimensions of abs_p, abs_t, and vmr agree:
13977  assert ( n_p==abs_t.nelem() );
13978  assert ( n_p==vmr.nelem() );
13979 
13980  // Check that dimensions of pxsec are consistent with n_f
13981  // and n_p. It should be [n_f,n_p]:
13982  assert ( n_f==pxsec.nrows() );
13983  assert ( n_p==pxsec.ncols() );
13984 
13985  // loop over all pressure levels:
13986  for ( Index i=0; i<n_p; ++i )
13987  {
13988  Numeric TH = 300.00 / abs_t[i]; // relative temperature [1]
13989 
13990  Numeric ph2o = abs_p[i] * abs_h2o[i]; // water vapor partial pressure [Pa]
13991  Numeric pdry = abs_p[i] - ph2o; // dry air partial pressure [Pa]
13992 
13993 
13994  // pseudo broadening term [Hz]
13995  Numeric gamma = G0 * (pdry * pow( TH, XG0 ) + 1.100 * ph2o * TH);
13996 
13997  // Loop over frequency grid:
13998  for ( Index s=0; s<n_f; ++s )
13999  {
14000  // division by vmr of O2 is necessary because of the absorption calculation
14001  // abs = vmr * pxsec.
14002  pxsec(s,i) += S0 * abs_p[i] / pow( abs_t[i], XS0 ) *
14003  ( pow( f_grid[s], (Numeric)2. )
14004  * gamma / ( pow( f_grid[s], 2 )
14005  + pow( gamma, (Numeric)2. ) ) ) ;
14006  }
14007  }
14008 }
14009 //
14010 //
14011 // #################################################################################
14013 
14050 void Standard_O2_continuum (MatrixView pxsec, // cross section
14051  const Numeric Cin, // model parameter
14052  const Numeric G0in, // model parameter
14053  const Numeric G0Ain, // model parameter
14054  const Numeric G0Bin, // model parameter
14055  const Numeric XG0din, // model parameter
14056  const Numeric XG0win, // model parameter
14057  const String& model, // model parameter
14058  ConstVectorView f_grid, // frequency grid
14059  ConstVectorView abs_p, // P_tot grid
14060  ConstVectorView abs_t, // T grid
14061  ConstVectorView abs_h2o, // VMR H2O profile
14062  ConstVectorView vmr _U_, // VMR O2 profile
14063  const Verbosity& verbosity)
14064 {
14065  CREATE_OUT3;
14066 
14067  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
14068  // P. W. Rosenkranz, Chapter 2, in M. A. Janssen,
14069  // Atmospheric Remote Sensing by Microwave Radiometry, John Wiley & Sons, Inc., 1993
14070  // ftp://mesa.mit.edu/phil/lbl_rt
14071  const Numeric C_PWR93 = (1.108e-14/pow((Numeric)3.0e2,(Numeric)2.)); // [1/(Hz*Pa*m)] line strength
14072  const Numeric G0_PWR93 = 5600.000; // line width [Hz/Pa]
14073  const Numeric G0A_PWR93 = 1.000; // line width [1]
14074  const Numeric G0B_PWR93 = 1.100; // line width [1]
14075  const Numeric XG0d_PWR93 = 0.800; // temperature dependence of line width [1]
14076  const Numeric XG0w_PWR93 = 1.000; // temperature dependence of line width [1]
14077  //
14078  // standard values for the MPM93 model (J. Liebe and G. A. Hufford and M. G. Cotton,
14079  // "Propagation modeling of moist air and suspended water/ice
14080  // particles at frequencies below 1000 GHz",
14081  // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
14082  // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21):
14083  // const Numeric C_MPM93 = 1.23e-19; // line strength/VMR [1/m*1/Hz*1/Pa]
14084  const Numeric C_MPM93 = 6.14e-13*(4.0*PI/SPEED_OF_LIGHT)/0.2085; // line strength [1/m*1/Hz*1/Pa]
14085  // 0.2085 = VMR * ISORATIO = 0.20946 * 0.99519
14086  const Numeric G0_MPM93 = 5600.000; // line width [Hz/Pa]
14087  const Numeric G0A_MPM93 = 1.000; // line width [1]
14088  const Numeric G0B_MPM93 = 1.000; // line width [1]
14089  const Numeric XG0d_MPM93 = 0.800; // temperature dependence of line strength [1]
14090  const Numeric XG0w_MPM93 = 0.800; // temperature dependence of line width [1]
14091  // ---------------------------------------------------------------------------------------
14092 
14093  // select the parameter set (!!model dominates values!!):
14094  Numeric C, G0, G0A, G0B, XG0d, XG0w;
14095  if ( model == "Rosenkranz" )
14096  {
14097  C = C_PWR93;
14098  G0 = G0_PWR93;
14099  G0A = G0A_PWR93;
14100  G0B = G0B_PWR93;
14101  XG0d = XG0d_PWR93;
14102  XG0w = XG0w_PWR93;
14103  }
14104  else if ( model == "MPM93" )
14105  {
14106  C = C_MPM93;
14107  G0 = G0_MPM93;
14108  G0A = G0A_MPM93;
14109  G0B = G0B_MPM93;
14110  XG0d = XG0d_MPM93;
14111  XG0w = XG0w_MPM93;
14112  }
14113  else if ( model == "user" )
14114  {
14115  C = Cin;
14116  G0 = G0in;
14117  G0A = G0Ain;
14118  G0B = G0Bin;
14119  XG0d = XG0din;
14120  XG0w = XG0win;
14121  }
14122  else
14123  {
14124  ostringstream os;
14125  os << "O2-GenerealCont: ERROR! Wrong model values given.\n"
14126  << "Valid models are: 'Rosenkranz', 'MPM93' and 'user'" << '\n';
14127  throw runtime_error(os.str());
14128  }
14129  out3 << "O2-GeneralCont: (model=" << model << ") parameter values in use:\n"
14130  << " C = " << C << "\n"
14131  << " G0 = " << G0 << "\n"
14132  << " G0A = " << G0A << "\n"
14133  << " G0B = " << G0B << "\n"
14134  << " XG0d = " << XG0d << "\n"
14135  << " XG0w = " << XG0w << "\n";
14136 
14137 
14138  const Index n_p = abs_p.nelem(); // Number of pressure levels
14139  const Index n_f = f_grid.nelem(); // Number of frequencies
14140 
14141  // Check that dimensions of abs_p, abs_t, and vmr agree:
14142  assert ( n_p==abs_t.nelem() );
14143  assert ( n_p==vmr.nelem() );
14144 
14145  // Check that dimensions of pxsec are consistent with n_f
14146  // and n_p. It should be [n_f,n_p]:
14147  assert ( n_f==pxsec.nrows() );
14148  assert ( n_p==pxsec.ncols() );
14149 
14150  // const = VMR * ISORATIO = 0.20946 * 0.99519
14151  // this constant is already incorporated into the line strength, so we
14152  // have top devide the line strength by this value since arts multiplies pxsec
14153  // by these variables later in abs_coefCalc.
14154  // FIXME const Numeric VMRISO = 0.2085;
14155 
14156  // loop over all pressure levels:
14157  for ( Index i=0; i<n_p; ++i )
14158  {
14159  Numeric TH = 3.0e2 / abs_t[i]; // relative temperature [1]
14160 
14161  Numeric ph2o = abs_p[i] * abs_h2o[i]; // water vapor partial pressure [Pa]
14162  Numeric pdry = abs_p[i] - ph2o; // dry air partial pressure [Pa]
14163 
14164 
14165  // pseudo broadening term [Hz]
14166  Numeric gamma = G0 * (G0A * pdry * pow( TH, XG0d ) + G0B * ph2o * pow( TH, XG0w ));
14167 
14168  // Loop over frequency grid:
14169  for ( Index s=0; s<n_f; ++s )
14170  {
14171  // division by vmr of O2 is necessary because of the absorption calculation
14172  // abs = vmr * pxsec.
14173  pxsec(s,i) += C * abs_p[i] * pow( TH, (Numeric)2. ) *
14174  ( gamma * pow( f_grid[s], (Numeric)2. ) /
14175  ( pow( f_grid[s], 2 ) + pow( gamma, (Numeric)2. ) ) );
14176  }
14177  }
14178 }
14179 //
14180 // #################################################################################
14181 // ################################ NITROGEN MODELS ################################
14182 // #################################################################################
14183 //
14185 
14216  const Numeric Cin,
14217  const String& model,
14218  ConstVectorView f_grid,
14219  ConstVectorView abs_p,
14220  ConstVectorView abs_t,
14221  ConstVectorView vmr,
14222  const Verbosity& verbosity)
14223 {
14224  CREATE_OUT3;
14225 
14226  //
14227  //
14228  // external function to call (original F77 code translated with f2c)
14229  extern Numeric n2n2tks_(double t, double f);
14230  //
14231  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
14232  // standard values for the MPM93 H2O continuum model
14233  // (AGARD 52nd Specialists Meeting of the Electromagnetic Wave
14234  // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21):
14235  Numeric XFAC = 1.0000; // scaling factor
14236  // ---------------------------------------------------------------------------------------
14237 
14238  // select the parameter set (!!model dominates values!!):
14239  if ( model == "BF86" )
14240  {
14241  XFAC = 1.0000;
14242  }
14243  else if ( model == "user" )
14244  {
14245  XFAC = Cin;
14246  }
14247  else
14248  {
14249  ostringstream os;
14250  os << "N2-SelfContBorysow: ERROR! Wrong model values given.\n"
14251  << "allowed models are: 'BF86', 'user'" << '\n';
14252  throw runtime_error(os.str());
14253  }
14254 
14255  out3 << "N2-SelfContBorysow: (model=" << model << ") parameter values in use:\n"
14256  << " XFAC = " << XFAC << "\n";
14257 
14258  const Index n_p = abs_p.nelem(); // Number of pressure levels
14259  const Index n_f = f_grid.nelem(); // Number of frequencies
14260 
14261 
14262  const Numeric AMAG2DEN = 44.53807; // inverse of N2 mol volume at std p/T
14263  const Numeric RIDGAS = 8.314510; // ideal gas constant
14264 
14265  // Check that dimensions of abs_p, abs_t, and vmr agree:
14266  assert ( n_p==abs_t.nelem() );
14267  assert ( n_p==vmr.nelem() );
14268 
14269  // Check that dimensions of pxsec are consistent with n_f
14270  // and n_p. It should be [n_f,n_p]:
14271  assert ( n_f==pxsec.nrows() );
14272  assert ( n_p==pxsec.ncols() );
14273 
14274  // Loop pressure/temperature:
14275  for ( Index i=0; i<n_p; ++i )
14276  {
14277  //cout << "------------------------------------------------\n";
14278  double T = (double) abs_t[i];
14279  //cout << "N2-N2 BF86: T =" << T << " K\n";
14280  //cout << "N2-N2 BF86: p =" << abs_p[i] << " Pa\n";
14281  //cout << "N2-N2 BF86: VMR =" << vmr[i] << "\n";
14282  Numeric XAMA = (abs_p[i]) / ( AMAG2DEN * RIDGAS * abs_t[i] );
14283  Numeric XAMA2 = pow(XAMA,(Numeric)2.);
14284  //cout << "N2-N2 BF86: XAMA =" << XAMA << "\n";
14285 
14286  // Loop frequency:
14287  for ( Index s=0; s<n_f; ++s )
14288  {
14289  // the second vmr of N2 will be multiplied at the stage of
14290  // absorption calculation: abs = vmr * pxsec.
14291  double f = (double) f_grid[s];
14292  //cout << "N2-N2 BF86: f =" << f << " Hz\n";
14293  double cont = n2n2tks_(T, f);
14294  pxsec(s,i) += (Numeric) (cont * 1.000e2 * vmr[i] * XAMA2);
14295  //cout << "N2-N2 BF86: cont =" << cont << " cm-1 * amagat-2\n";
14296  //cout << "N2-N2 BF86: abs =" << (vmr[i] * pxsec(s,i)) << " m-1\n";
14297  }
14298  }
14299  return;
14300 }
14301 //
14302 // #################################################################################
14303 //
14305 
14342  const Numeric Cin,
14343  const Numeric Gin,
14344  const Numeric xTin,
14345  const Numeric xfin,
14346  const String& model,
14347  ConstVectorView f_grid,
14348  ConstVectorView abs_p,
14349  ConstVectorView abs_t,
14350  ConstVectorView abs_h2o,
14351  ConstVectorView vmr,
14352  const Verbosity& verbosity)
14353 {
14354  CREATE_OUT3;
14355 
14356  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
14357  // standard values for the MPM93 H2O continuum model
14358  // (AGARD 52nd Specialists Meeting of the Electromagnetic Wave
14359  // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21):
14360  const Numeric xT_MPM93 = 3.500; // temperature exponent [1]
14361  const Numeric xf_MPM93 = 1.500; // frequency exponent [1]
14362  const Numeric gxf_MPM93 = 9.000*xf_MPM93; // needed for the unit conversion of G_MPM93
14363  const Numeric S_MPM93 = 2.296e-31; // line strength [1/Pa² * 1/Hz]
14364  const Numeric G_MPM93 = 1.930e-5*pow((Numeric)10.000, -gxf_MPM93); // frequency factor [1/Hz^xf]
14365  // ---------------------------------------------------------------------------------------
14366 
14367  // select the parameter set (!!model dominates values!!):
14368  Numeric S0, G0, xf, xT;
14369  //Numeric gxf;
14370  if ( model == "MPM93" )
14371  {
14372  S0 = S_MPM93;
14373  G0 = G_MPM93;
14374  xT = xT_MPM93;
14375  xf = xf_MPM93;
14376  //gxf = gxf_MPM93;
14377  }
14378  else if ( model == "MPM93Scale" )
14379  {
14380  S0 = Cin * S_MPM93;
14381  G0 = G_MPM93;
14382  xT = xT_MPM93;
14383  xf = xf_MPM93;
14384  //gxf = gxf_MPM93;
14385  }
14386  else if ( model == "user" )
14387  {
14388  S0 = Cin;
14389  G0 = Gin;
14390  xT = xTin;
14391  xf = xfin;
14392  //gxf = 9.000*xf;
14393  }
14394  else
14395  {
14396  ostringstream os;
14397  os << "N2-SelfContMPM93 : ERROR! Wrong model values given.\n"
14398  << "allowed models are: 'MPM93', 'MPM93Scale' or 'user'" << '\n';
14399  throw runtime_error(os.str());
14400  }
14401 
14402  out3 << "N2-SelfContMPM93: (model=" << model << ") parameter values in use:\n"
14403  << " S0 = " << S0 << "\n"
14404  << " G0 = " << G0 << "\n"
14405  << " xT = " << xT << "\n"
14406  << " xf = " << xf << "\n";
14407 
14408  // unit conversion internally:
14409  //const Numeric S0unitconv = 1.000e+13; // x [1/(hPa²*GHz)] => y [1/(pa²*Hz)]
14410  //const Numeric G0unitconv = pow(10.000, gxf);
14411 
14412  const Index n_p = abs_p.nelem(); // Number of pressure levels
14413  const Index n_f = f_grid.nelem(); // Number of frequencies
14414 
14415  // Check that dimensions of abs_p, abs_t, and vmr agree:
14416  assert ( n_p==abs_t.nelem() );
14417  assert ( n_p==vmr.nelem() );
14418 
14419  // Check that dimensions of pxsec are consistent with n_f
14420  // and n_p. It should be [n_f,n_p]:
14421  assert ( n_f==pxsec.nrows() );
14422  assert ( n_p==pxsec.ncols() );
14423 
14424  Numeric fac = 4.0 * PI / SPEED_OF_LIGHT; // = 4 * pi / c
14425  // Loop pressure/temperature:
14426  for ( Index i=0; i<n_p; ++i )
14427  {
14428  Numeric th = 300.0 / abs_t[i];
14429  Numeric strength = S0 *
14430  pow( (abs_p[i] * ((Numeric)1.0000 - abs_h2o[i])),
14431  (Numeric)2. )
14432  * pow( th, xT );
14433 
14434  // Loop frequency:
14435  for ( Index s=0; s<n_f; ++s )
14436  {
14437  // FIXME Numeric f = f_grid[s] * Hz_to_GHz; // frequency in GHz
14438  // the vmr of N2 will be multiplied at the stage of absorption calculation:
14439  // abs / vmr * pxsec.
14440  pxsec(s,i) += fac * strength * // strength
14441  pow(f_grid[s], (Numeric)2.) / // frequency dependence
14442  ( 1.000 + G0 * pow( f_grid[s], xf) ) *
14443  vmr[i]; // N2 vmr
14444  }
14445  }
14446  return;
14447 }
14448 //
14449 // #################################################################################
14451 
14477  const Numeric Cin,
14478  const String& model,
14479  ConstVectorView f_grid,
14480  ConstVectorView abs_p,
14481  ConstVectorView abs_t,
14482  ConstVectorView vmr,
14483  ConstVectorView h2ovmr,
14484  const Verbosity& verbosity)
14485 {
14486  CREATE_OUT3;
14487 
14488  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
14489  // standard values for the Pardo et al. model (IEEE, Trans. Ant. Prop.,
14490  // Vol 49, No 12, pp. 1683-1694, 2001)
14491  const Numeric C_ATM = 2.612e-6; // [1/m]
14492  // ---------------------------------------------------------------------------------------
14493 
14494  // select the parameter set (!!model dominates parameters!!):
14495  Numeric C;
14496  if ( model == "ATM" )
14497  {
14498  C = C_ATM;
14499  }
14500  else if ( model == "user" )
14501  {
14502  C = Cin;
14503  }
14504  else
14505  {
14506  ostringstream os;
14507  os << "N2-DryContATM01: ERROR! Wrong model values given.\n"
14508  << "allowed models are: 'ATM', 'user'" << '\n';
14509  throw runtime_error(os.str());
14510  }
14511  out3 << "N2-DryContATM01: (model=" << model << ") parameter values in use:\n"
14512  << " C_s = " << C << "\n";
14513 
14514  const Index n_p = abs_p.nelem(); // Number of pressure levels
14515  const Index n_f = f_grid.nelem(); // Number of frequencies
14516 
14517  // Check that dimensions of abs_p, abs_t, and vmr agree:
14518  assert ( n_p==abs_t.nelem() );
14519  assert ( n_p==vmr.nelem() );
14520 
14521  // Check that dimensions of pxsec are consistent with n_f
14522  // and n_p. It should be [n_f,n_p]:
14523  assert ( n_f==pxsec.nrows() );
14524  assert ( n_p==pxsec.ncols() );
14525 
14526  // Loop over pressure/temperature grid:
14527  for ( Index i=0; i<n_p; ++i )
14528  {
14529  // since this is an effective "dry air" continuum, it is not really
14530  // it is not specifically attributed to N2, so we need the total
14531  // dry air part in total which is equal to the total minus the
14532  // water vapor pressure:
14533  Numeric pd = abs_p[i] * ( 1.00000e0 - h2ovmr[i] ); // [Pa]
14534  // Loop over frequency grid:
14535  if (vmr[i] > VMRCalcLimit )
14536  {
14537  for ( Index s=0; s<n_f; ++s )
14538  {
14539  // Becaue this is an effective "dry air" continuum, it is not really
14540  // specific N2 but mainly caused by N2. Therefore the N2 vmr must be
14541  // canceled out here which is later in abs_coefCalc multiplied
14542  // (calculation: abs = vmr * pxsec):
14543  pxsec(s,i) += C * // strength [1/(m*Hz²Pa²)]
14544  pow( (f_grid[s]/(Numeric)2.25e11), (Numeric)2. ) * // quadratic f dependence [Hz²]
14545  pow( ((Numeric)300.0/abs_t[i]), (Numeric)3.5 ) * // free T dependence [1]
14546  pow( (pd/(Numeric)1.01300e5), (Numeric)2. ) / // quadratic p dependence [Pa²]
14547  vmr[i]; // cancel the vmr dependency
14548  }
14549  }
14550  }
14551 }
14552 //
14553 // #################################################################################
14555 
14582  const Numeric Cin,
14583  const Numeric xin,
14584  const String& model,
14585  ConstVectorView f_grid,
14586  ConstVectorView abs_p,
14587  ConstVectorView abs_t,
14588  ConstVectorView vmr,
14589  const Verbosity& verbosity)
14590 {
14591  CREATE_OUT3;
14592 
14593  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
14594  // standard values for the Rosenkranz model (Chapter 2, pp 74, in M. A. Janssen,
14595  // "Atmospheric Remote Sensing by Microwave Radiometry", John Wiley & Sons, Inc., 1993
14596  const Numeric C_PWR = 1.05e-38; // [1/(Pa²*Hz²*m)]
14597  const Numeric x_PWR = 3.55; // [1]
14598  // ---------------------------------------------------------------------------------------
14599 
14600  // select the parameter set (!!model dominates parameters!!):
14601  Numeric C, x;
14602  if ( model == "Rosenkranz" )
14603  {
14604  C = C_PWR;
14605  x = x_PWR;
14606  }
14607  else if ( model == "user" )
14608  {
14609  C = Cin;
14610  x = xin;
14611  }
14612  else
14613  {
14614  ostringstream os;
14615  os << "N2-SelfContPWR93: ERROR! Wrong model values given.\n"
14616  << "allowed models are: 'Rosenkranz', 'user'" << '\n';
14617  throw runtime_error(os.str());
14618  }
14619  out3 << "N2-SelfContPWR93: (model=" << model << ") parameter values in use:\n"
14620  << " C_s = " << C << "\n"
14621  << " x_s = " << x << "\n";
14622 
14623  const Index n_p = abs_p.nelem(); // Number of pressure levels
14624  const Index n_f = f_grid.nelem(); // Number of frequencies
14625 
14626  // Check that dimensions of abs_p, abs_t, and vmr agree:
14627  assert ( n_p==abs_t.nelem() );
14628  assert ( n_p==vmr.nelem() );
14629 
14630  // Check that dimensions of pxsec are consistent with n_f
14631  // and n_p. It should be [n_f,n_p]:
14632  assert ( n_f==pxsec.nrows() );
14633  assert ( n_p==pxsec.ncols() );
14634 
14635  // Loop over pressure/temperature grid:
14636  for ( Index i=0; i<n_p; ++i )
14637  {
14638  // Loop over frequency grid:
14639  for ( Index s=0; s<n_f; ++s )
14640  {
14641  // The second vmr of N2 will be multiplied at the stage of absorption
14642  // calculation: abs = vmr * pxsec.
14643  pxsec(s,i) += C * // strength [1/(m*Hz²Pa²)]
14644  pow( f_grid[s], (Numeric)2. ) * // quadratic f dependence [Hz²]
14645  pow( (Numeric)300.0/abs_t[i], x ) * // free T dependence [1]
14646  pow( abs_p[i], (Numeric)2. ) * // quadratic p dependence [Pa²]
14647  vmr[i]; // second N2-VMR at the stage
14648  // of absorption calculation
14649  }
14650  }
14651 }
14652 //
14653 // #################################################################################
14654 //
14656 
14688  const Numeric Cin,
14689  const Numeric xfin,
14690  const Numeric xtin,
14691  const Numeric xpin,
14692  const String& model,
14693  ConstVectorView f_grid,
14694  ConstVectorView abs_p,
14695  ConstVectorView abs_t,
14696  ConstVectorView vmr,
14697  const Verbosity& verbosity)
14698 {
14699  CREATE_OUT3;
14700 
14701  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
14702  // standard values for the Rosenkranz model, Chapter 2, pp 74, in M. A. Janssen,
14703  // "Atmospheric Remote Sensing by Microwave Radiometry", John Wiley & Sons, Inc., 1993
14704  const Numeric C_GM = 1.05e-38; // [1/(Pa²*Hz²*m)]
14705  const Numeric xf_GM = 2.00; // [1]
14706  const Numeric xt_GM = 3.55; // [1]
14707  const Numeric xp_GM = 2.00; // [1]
14708  // ---------------------------------------------------------------------------------------
14709 
14710  // select the parameter set (!!model dominates over values!!):
14711  Numeric C, xt, xf, xp;
14712  if ( model == "Rosenkranz" )
14713  {
14714  C = C_GM;
14715  xt = xt_GM;
14716  xf = xf_GM;
14717  xp = xp_GM;
14718  }
14719  else if ( model == "user" )
14720  {
14721  C = Cin;
14722  xt = xtin;
14723  xf = xfin;
14724  xp = xpin;
14725  }
14726  else
14727  {
14728  ostringstream os;
14729  os << "N2-SelfContStandardType: ERROR! Wrong model values given.\n"
14730  << "allowed models are: 'Rosenkranz', 'user'" << '\n';
14731  throw runtime_error(os.str());
14732  }
14733  out3 << "N2-SelfContStandardType: (model=" << model << ") parameter values in use:\n"
14734  << " C = " << C << "\n"
14735  << " xt = " << xt << "\n"
14736  << " xf = " << xf << "\n"
14737  << " xp = " << xp << "\n";
14738 
14739 
14740  const Index n_p = abs_p.nelem(); // Number of pressure levels
14741  const Index n_f = f_grid.nelem(); // Number of frequencies
14742 
14743  // Check that dimensions of abs_p, abs_t, and vmr agree:
14744  assert ( n_p==abs_t.nelem() );
14745  assert ( n_p==vmr.nelem() );
14746 
14747  // Check that dimensions of pxsec are consistent with n_f
14748  // and n_p. It should be [n_f,n_p]:
14749  assert ( n_f==pxsec.nrows() );
14750  assert ( n_p==pxsec.ncols() );
14751 
14752  // Loop over pressure/temperature grid:
14753  for ( Index i=0; i<n_p; ++i )
14754  {
14755  //cout << "vmr[" << i << "]= " << vmr[i] << "\n";
14756  // Loop over frequency grid:
14757  for ( Index s=0; s<n_f; ++s )
14758  {
14759  // The second N2-VMR will be multiplied at the stage of absorption
14760  // calculation: abs = vmr * pxsec.
14761  pxsec(s,i) += C * // strength [1/(m*Hz²Pa²)]
14762  pow( ((Numeric)300.00/abs_t[i]), xt ) * // T dependence [1]
14763  pow( f_grid[s], xf ) * // f dependence [Hz^xt]
14764  pow( abs_p[i], xp ) * // p dependence [Pa^xp]
14765  pow( vmr[i], (xp-(Numeric)1.) ); // last N2-VMR at the stage
14766  // of absorption calculation
14767  }
14768  }
14769 }
14770 
14771 
14772 
14773 
14774 
14775 // ############################################################################
14776 // ############################## CARBON DIOXIDE MODELS #######################
14777 // ############################################################################
14778 
14779 // ############################################################################
14781 
14808  const Numeric Cin,
14809  const Numeric xin,
14810  const String& model,
14811  ConstVectorView f_grid,
14812  ConstVectorView abs_p,
14813  ConstVectorView abs_t,
14814  ConstVectorView vmr,
14815  const Verbosity& verbosity)
14816 {
14817  CREATE_OUT3;
14818 
14819  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
14820  // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen,
14821  // "Atmospheric Remote Sensing by Microwave Radiometry", John Wiley & Sons, Inc., 1993
14822  const Numeric C_PWR = 7.43e-37; // [ 1/(Pa²*Hz²*m) ]
14823  const Numeric x_PWR = 5.08; // [ 1 ]
14824  // ---------------------------------------------------------------------------------------
14825 
14826  // select the parameter set (!!model dominates values!!):
14827  Numeric C, x;
14828  if ( model == "Rosenkranz" )
14829  {
14830  C = C_PWR;
14831  x = x_PWR;
14832  }
14833  else if ( model == "user" )
14834  {
14835  C = Cin;
14836  x = xin;
14837  }
14838  else
14839  {
14840  ostringstream os;
14841  os << "CO2-SelfContPWR93 : ERROR! Wrong model values given.\n"
14842  << "allowed models are: 'Rosenkranz', 'user'" << "\n";
14843  throw runtime_error(os.str());
14844  }
14845 
14846  out3 << "CO2-SelfContPWR93: (model=" << model << ") parameter values in use:\n"
14847  << " C = " << C << "\n"
14848  << " x = " << x << "\n";
14849 
14850  const Index n_p = abs_p.nelem(); // Number of pressure levels
14851  const Index n_f = f_grid.nelem(); // Number of frequencies
14852 
14853  // Check that dimensions of abs_p, abs_t, and vmr agree:
14854  assert ( n_p==abs_t.nelem() );
14855  assert ( n_p==vmr.nelem() );
14856 
14857  // Check that dimensions of pxsec are consistent with n_f
14858  // and n_p. It should be [n_f,n_p]:
14859  assert ( n_f==pxsec.nrows() );
14860  assert ( n_p==pxsec.ncols() );
14861 
14862  // Loop over pressure/temperature grid:
14863  for ( Index i=0; i<n_p; ++i )
14864  {
14865  // Dummy scalar holds everything except the quadratic frequency dependence.
14866  // The second vmr of CO2 will be multiplied at the stage of absorption
14867  // calculation: abs = vmr * pxsec.
14868  Numeric dummy =
14869  C * pow( (Numeric)300./abs_t[i], x ) * pow( abs_p[i], (Numeric)2. ) * vmr[i];
14870 
14871  // Loop over frequency grid:
14872  for ( Index s=0; s<n_f; ++s )
14873  {
14874  pxsec(s,i) += dummy * pow( f_grid[s], (Numeric)2. );
14875  }
14876  }
14877 }
14878 
14879 // ############################################################################
14881 
14909  const Numeric Cin,
14910  const Numeric xin,
14911  const String& model,
14912  ConstVectorView f_grid,
14913  ConstVectorView abs_p,
14914  ConstVectorView abs_t,
14915  ConstVectorView abs_n2,
14916  ConstVectorView vmr _U_,
14917  const Verbosity& verbosity)
14918 {
14919  CREATE_OUT3;
14920 
14921  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
14922  // "Atmospheric Remote Sensing by Microwave Radiometry", John Wiley & Sons, Inc., 1993
14923  const Numeric C_PWR = 2.71e-37; // default: 2.71*10^-37 1/(Pa²*Hz²*m)
14924  const Numeric x_PWR = 4.7; // default: 4.7
14925  // ---------------------------------------------------------------------------------------
14926 
14927  // select the parameter set (!!model dominates values!!):
14928  Numeric C, x;
14929  if ( model == "Rosenkranz" )
14930  {
14931  C = C_PWR;
14932  x = x_PWR;
14933  }
14934  else if ( model == "user" )
14935  {
14936  C = Cin;
14937  x = xin;
14938  }
14939  else
14940  {
14941  ostringstream os;
14942  os << "CO2-ForeignContPWR93: ERROR! Wrong model values given.\n"
14943  << "allowed models are: 'Rosenkranz', 'user'" << "\n";
14944  throw runtime_error(os.str());
14945  }
14946 
14947  out3 << "CO2-ForeignContPWR93: (model=" << model << ") parameter values in use:\n"
14948  << " C = " << C << "\n"
14949  << " x = " << x << "\n";
14950 
14951  const Index n_p = abs_p.nelem(); // Number of pressure levels
14952  const Index n_f = f_grid.nelem(); // Number of frequencies
14953 
14954  // Check that dimensions of abs_p, abs_t, and vmr agree:
14955  assert ( n_p==abs_t.nelem() );
14956  assert ( n_p==vmr.nelem() );
14957 
14958  // Check that dimensions of pxsec are consistent with n_f
14959  // and n_p. It should be [n_f,n_p]:
14960  assert ( n_f==pxsec.nrows() );
14961  assert ( n_p==pxsec.ncols() );
14962 
14963  // Loop pressure/temperature:
14964  for ( Index i=0; i<n_p; ++i )
14965  {
14966  // Dummy scalar holds everything except the quadratic frequency dependence.
14967  // The vmr of CO2 will be multiplied at the stage of absorption
14968  // calculation: abs = vmr * pxsec.
14969  Numeric dummy = C * pow( (Numeric)300./abs_t[i], x ) * abs_p[i] * abs_p[i] * abs_n2[i];
14970 
14971  // Loop frequency:
14972  for ( Index s=0; s<n_f; ++s )
14973  {
14974  pxsec(s,i) += dummy * pow( f_grid[s], (Numeric)2. );
14975  }
14976  }
14977 }
14978 
14979 // ############################################################################
14981 
15007  const Numeric Cin,
15008  const Numeric xin,
15009  const String& model,
15010  ConstVectorView f_grid,
15011  ConstVectorView abs_p,
15012  ConstVectorView abs_t,
15013  ConstVectorView vmr,
15014  const Verbosity& verbosity)
15015 {
15016  CREATE_OUT3;
15017 
15018  // --------- STANDARD MODEL PARAMETERS --------------------------------------
15019  // Values (after conversion for C) from abstract of Ho66:
15020  const Numeric C_Ho66 = 1.70e-36; // [ 1/(Pa²*Hz²*m) ]
15021  const Numeric x_Ho66 = 5; // [ 1 ]
15022  // --------------------------------------------------------------------------
15023 
15024  // select the parameter set (!!model dominates values!!):
15025  Numeric C, x;
15026  if ( model == "Ho66" )
15027  {
15028  C = C_Ho66;
15029  x = x_Ho66;
15030  }
15031  else if ( model == "user" )
15032  {
15033  C = Cin;
15034  x = xin;
15035  }
15036  else
15037  {
15038  ostringstream os;
15039  os << "CO2-SelfContHo66 : ERROR! Wrong model values given.\n"
15040  << "allowed models are: 'Ho66', 'user'" << "\n";
15041  throw runtime_error(os.str());
15042  }
15043 
15044  out3 << "CO2-SelfContHo66: (model=" << model
15045  << ") parameter values in use:\n" << " C = " << C << "\n"
15046  << " x = " << x << "\n";
15047 
15048  const Index n_p = abs_p.nelem(); // Number of pressure levels
15049  const Index n_f = f_grid.nelem(); // Number of frequencies
15050 
15051  // Check that dimensions of abs_p, abs_t, and vmr agree:
15052  assert ( n_p==abs_t.nelem() );
15053  assert ( n_p==vmr.nelem() );
15054 
15055  // Check that dimensions of pxsec are consistent with n_f
15056  // and n_p. It should be [n_f,n_p]:
15057  assert ( n_f==pxsec.nrows() );
15058  assert ( n_p==pxsec.ncols() );
15059 
15060  // Loop over pressure/temperature grid:
15061  for ( Index i=0; i<n_p; ++i )
15062  {
15063  // Dummy scalar holds everything except the quadratic frequency
15064  // dependence. The second vmr of CO2 will be multiplied at the stage of
15065  // absorption calculation: abs = vmr * pxsec.
15066 
15067  Numeric dummy = C * pow( (Numeric)273./abs_t[i], x ) *
15068  pow( abs_p[i], (Numeric)2. ) * vmr[i];
15069 
15070  // Loop over frequency grid:
15071  for ( Index s=0; s<n_f; ++s )
15072  { pxsec(s,i) += dummy * pow( f_grid[s], (Numeric)2. ); }
15073  }
15074 }
15075 
15076 // ############################################################################
15078 
15105  const Numeric Cin,
15106  const Numeric xin,
15107  const String& model,
15108  ConstVectorView f_grid,
15109  ConstVectorView abs_p,
15110  ConstVectorView abs_t,
15111  ConstVectorView abs_n2,
15112  ConstVectorView vmr _U_,
15113  const Verbosity& verbosity)
15114 {
15115  CREATE_OUT3;
15116 
15117  // --------- STANDARD MODEL PARAMETERS --------------------------------------
15118  // Values (after conversion for C) from abstract of Ho66:
15119  const Numeric C_Ho66 = 4.23e-37; // [ 1/(Pa²*Hz²*m) ]
15120  const Numeric x_Ho66 = 5; // [ 1 ]
15121  // --------------------------------------------------------------------------
15122 
15123  // select the parameter set (!!model dominates values!!):
15124  Numeric C, x;
15125  if ( model == "Ho66" )
15126  {
15127  C = C_Ho66;
15128  x = x_Ho66;
15129  }
15130  else if ( model == "user" )
15131  {
15132  C = Cin;
15133  x = xin;
15134  }
15135  else
15136  {
15137  ostringstream os;
15138  os << "CO2-ForeignContHo66: ERROR! Wrong model values given.\n"
15139  << "allowed models are: 'Ho66', 'user'" << "\n";
15140  throw runtime_error(os.str());
15141  }
15142 
15143  out3 << "CO2-ForeignContHo66: (model=" << model
15144  << ") parameter values in use:\n" << " C = " << C << "\n"
15145  << " x = " << x << "\n";
15146 
15147  const Index n_p = abs_p.nelem(); // Number of pressure levels
15148  const Index n_f = f_grid.nelem(); // Number of frequencies
15149 
15150  // Check that dimensions of abs_p, abs_t, and vmr agree:
15151  assert ( n_p==abs_t.nelem() );
15152  assert ( n_p==vmr.nelem() );
15153 
15154  // Check that dimensions of pxsec are consistent with n_f
15155  // and n_p. It should be [n_f,n_p]:
15156  assert ( n_f==pxsec.nrows() );
15157  assert ( n_p==pxsec.ncols() );
15158 
15159  // Loop pressure/temperature:
15160  for ( Index i=0; i<n_p; ++i )
15161  {
15162  // Dummy scalar holds everything except the quadratic frequency
15163  // dependence The vmr of CO2 will be multiplied at the stage of
15164  // absorption calculation: abs = vmr * pxsec.
15165  Numeric dummy = C * pow( (Numeric)273./abs_t[i], x ) *
15166  abs_p[i] * abs_p[i] * abs_n2[i];
15167 
15168  // Loop frequency:
15169  for ( Index s=0; s<n_f; ++s )
15170  { pxsec(s,i) += dummy * pow( f_grid[s], (Numeric)2. ); }
15171  }
15172 }
15173 
15174 
15175 
15176 
15177 
15178 
15179 // ############################################################################
15180 // ################################### CLOUD AND RAIN MODELS ##################
15181 // ############################################################################
15183 
15215  const Numeric CCin, // input parameter
15216  const Numeric CGin, // input parameter
15217  const Numeric CEin, // input parameter
15218  const String& model, // model
15219  ConstVectorView f_grid, // frequency vector
15220  ConstVectorView abs_p, // pressure vector
15221  ConstVectorView abs_t, // temperature vector
15222  ConstVectorView vmr, // suspended water droplet density vector
15223  const Verbosity& verbosity)
15224 {
15225  CREATE_OUT3;
15226 
15227  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
15228  // standard values for the MPM93 model (J. Liebe and G. A. Hufford and M. G. Cotton,
15229  // "Propagation modeling of moist air and suspended water/ice
15230  // particles at frequencies below 1000 GHz",
15231  // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
15232  // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21)
15233  const Numeric CC_MPM93 = 1.00000;
15234  const Numeric CG_MPM93 = 1.00000;
15235  const Numeric CE_MPM93 = 1.00000;
15236  // ---------------------------------------------------------------------------------------
15237 
15238 
15239  // select the parameter set (!!model dominates values!!):
15240  Numeric CC, CG, CE;
15241  if ( model == "MPM93" )
15242  {
15243  CC = CC_MPM93;
15244  CG = CG_MPM93;
15245  CE = CE_MPM93;
15246  }
15247  else if ( model == "user" )
15248  {
15249  CC = CCin;
15250  CG = CGin;
15251  CE = CEin;
15252  }
15253  else
15254  {
15255  ostringstream os;
15256  os << "liquidcloud-MPM93: ERROR! Wrong model values given.\n"
15257  << "Valid models are: 'MPM93' and 'user'" << '\n';
15258  throw runtime_error(os.str());
15259  }
15260  out3 << "liquidcloud-MPM93: (model=" << model << ") parameter values in use:\n"
15261  << " CC = " << CC << "\n"
15262  << " CG = " << CG << "\n"
15263  << " CE = " << CE << "\n";
15264 
15265 
15266  const Numeric m = 1.00e3; // specific weight of the droplet, fixed value: 1.00e3 kg/m3
15267  const Numeric low_lim_den = 0.000; // lower limit of suspended droplet particle density vector [kg/m3]
15268  const Numeric high_lim_den = 10.00e-3; // upper limit of suspended droplet particle density vector [kg/m3]
15269 
15270  const Index n_p = abs_p.nelem(); // Number of pressure levels
15271  const Index n_f = f_grid.nelem(); // Number of frequencies
15272 
15273  // Check that dimensions of abs_p, abs_t, and vmr agree:
15274  assert ( n_p==abs_t.nelem() );
15275  assert ( n_p==vmr.nelem() );
15276 
15277  // Check that dimensions of pxsec are consistent with n_f
15278  // and n_p. It should be [n_f,n_p]:
15279  assert ( n_f==pxsec.nrows() );
15280  assert ( n_p==pxsec.ncols() );
15281 
15282  // Loop pressure/temperature:
15283  for ( Index i=0; i<n_p; ++i )
15284  {
15285  // water vapor saturation pressure over liquid water [Pa]
15286  // Numeric es = WVSatPressureLiquidWater(abs_t[i]);
15287  // water vapor partial pressure [Pa]
15288  // Numeric e = abs_p[i] * vmr[i];
15289  // relative humidity [1]
15290  // Numeric RH = e / es;
15291 
15292  // Check limits of suspended water droplet density ("vmr") [kg/m³]
15293  if ( (vmr[i] >= low_lim_den) && (vmr[i] <= high_lim_den) )
15294  {
15295  // relative inverse temperature [1]
15296  Numeric theta = 300.000 / abs_t[i];
15297  // relaxation frequencies [GHz]
15298  Numeric gamma1 = CG * 20.20 - 146.40*(theta-1.000) + 316.00*(theta-1.000)*(theta-1.000);
15299  // Numeric gamma1 = 20.1 * exp( 7.88 * theta ); // see Liebe et al. IJIMW, 1992, p667, Eq. (2b)
15300  Numeric gamma2 = 39.80 * gamma1;
15301  // static and high-frequency permittivities
15302  Numeric epsilon0 = CE * 103.30 * (theta-1.000) + 77.66;
15303  Numeric epsilon1 = 0.0671 * epsilon0;
15304  Numeric epsilon2 = 3.52;
15305 
15306  // Loop frequency:
15307  for ( Index s=0; s<n_f; ++s )
15308  {
15309  // real part of the complex permittivity of water (double-debye model)
15310  Numeric Reepsilon = epsilon0 -
15311  pow((f_grid[s]*Hz_to_GHz),(Numeric)2.) *
15312  ( ((epsilon0-epsilon1)/
15313  (pow((f_grid[s]*Hz_to_GHz),(Numeric)2.)
15314  + pow(gamma1,(Numeric)2.))) +
15315  ((epsilon1-epsilon2)/
15316  (pow((f_grid[s]*Hz_to_GHz),(Numeric)2.)
15317  + pow(gamma2,(Numeric)2.))) );
15318  // imaginary part of the complex permittivity of water (double-debye model)
15319  Numeric Imepsilon = (f_grid[s]*Hz_to_GHz) *
15320  ( (gamma1*(epsilon0-epsilon1)/
15321  (pow((f_grid[s]*Hz_to_GHz),(Numeric)2.)
15322  + pow(gamma1,(Numeric)2.))) +
15323  (gamma2*(epsilon1-epsilon2)/
15324  (pow((f_grid[s]*Hz_to_GHz),(Numeric)2.)
15325  + pow(gamma2,(Numeric)2.))) );
15326  // the imaginary part of the complex refractivity of suspended liquid water particle [ppm]
15327  // In MPM93 w is in g/m³ and m is in g/cm³. Because of the units used in arts,
15328  // a factor of 1.000e6 must be multiplied with the ratio (w/m):
15329  // MPM93: (w/m)_MPM93 in (g/m³)/(g/cm³)
15330  // arts: (w/m)_arts in (kg/m³)/(kg/m³)
15331  // =====> (w/m)_MPM93 = 1.0e6 * (w/m)_arts
15332  // the factor of 1.0e6 is included below in pxsec calculation.
15333  Numeric ImNw = 1.500 / m *
15334  ( 3.000 * Imepsilon
15335  / ( pow((Reepsilon+(Numeric)2.000),(Numeric)2.)
15336  + pow(Imepsilon,(Numeric)2.) ) );
15337  // liquid water particle absorption cross section [1/m]
15338  // The vmr of H2O will be multiplied at the stage of absorption
15339  // calculation: abs = vmr * pxsec.
15340  // pxsec = abs/vmr [1/m] but MPM93 is in [dB/km] --> conversion necessary
15341  pxsec(s,i) += CC * 1.000e6 * dB_km_to_1_m * 0.1820 * (f_grid[s]*Hz_to_GHz) * ImNw;
15342  }
15343  } else
15344  {
15345  if ( (vmr[i] < low_lim_den) || (vmr[i] > high_lim_den) )
15346  {
15347  ostringstream os;
15348  os << "ERROR in MPM93WaterDropletAbs:\n"
15349  << " suspended water droplet density (valid range 0.00-10.00e-3 kg/m3):" << vmr[i] << "\n"
15350  << " ==> no calculation performed!\n";
15351  throw runtime_error(os.str());
15352  }
15353  }
15354  }
15355 
15356 }
15357 //
15358 // #################################################################################
15360 
15392  const Numeric CCin, // input parameter
15393  const Numeric CAin, // input parameter
15394  const Numeric CBin, // input parameter
15395  const String& model, // model
15396  ConstVectorView f_grid, // frequency vector
15397  ConstVectorView abs_p, // pressure vector
15398  ConstVectorView abs_t, // temperature vector
15399  ConstVectorView vmr, // suspended ice particle density vector,
15400  // valid range: 0-10.0e-3 kg/m³
15401  const Verbosity& verbosity)
15402 {
15403  CREATE_OUT3;
15404 
15405  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
15406  // standard values for the MPM93 model (J. Liebe and G. A. Hufford and M. G. Cotton,
15407  // "Propagation modeling of moist air and suspended water/ice
15408  // particles at frequencies below 1000 GHz",
15409  // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
15410  // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21)
15411  const Numeric CC_MPM93 = 1.00000;
15412  const Numeric CA_MPM93 = 1.00000;
15413  const Numeric CB_MPM93 = 1.00000;
15414  // ---------------------------------------------------------------------------------------
15415 
15416 
15417  // select the parameter set (!!model dominates values!!):
15418  Numeric CC, CA, CB;
15419  if ( model == "MPM93" )
15420  {
15421  CC = CC_MPM93;
15422  CA = CA_MPM93;
15423  CB = CB_MPM93;
15424  }
15425  else if ( model == "user" )
15426  {
15427  CC = CCin;
15428  CA = CAin;
15429  CB = CBin;
15430  }
15431  else
15432  {
15433  ostringstream os;
15434  os << "icecloud-MPM93: ERROR! Wrong model values given.\n"
15435  << "Valid models are: 'MPM93' and 'user'" << '\n';
15436  throw runtime_error(os.str());
15437  }
15438  out3 << "icecloud-MPM93: (model=" << model << ") parameter values in use:\n"
15439  << " CC = " << CC << "\n"
15440  << " CA = " << CA << "\n"
15441  << " CB = " << CB << "\n";
15442 
15443 
15444  const Numeric m = 0.916e3; // specific weight of ice particles, fixed value: 0.916e3 kg/m³
15445  const Numeric low_lim_den = 0.000; // lower limit of suspended ice particle density vector [kg/m³]
15446  const Numeric high_lim_den = 10.00e-3; // lower limit of suspended ice particle density vector [kg/m³]
15447 
15448  const Index n_p = abs_p.nelem(); // Number of pressure levels
15449  const Index n_f = f_grid.nelem(); // Number of frequencies
15450 
15451  // Check that dimensions of abs_p, abs_t, and vmr agree:
15452  assert ( n_p==abs_t.nelem() );
15453  assert ( n_p==vmr.nelem() );
15454 
15455  // Check that dimensions of pxsec are consistent with n_f
15456  // and n_p. It should be [n_f,n_p]:
15457  assert ( n_f==pxsec.nrows() );
15458  assert ( n_p==pxsec.ncols() );
15459 
15460 
15461 
15462  // Loop pressure/temperature:
15463  for ( Index i=0; i<n_p; ++i )
15464  {
15465  // water vapor saturation pressure over ice [Pa]
15466  // Numeric es = WVSatPressureIce(abs_t[i]);
15467  // water vapor partial pressure [Pa]
15468  // Numeric e = abs_p[i] * vmr[i];
15469  // relative humidity [1]
15470  // Numeric RH = e / es;
15471 
15472  // Check limits of suspended water ice crystal density ("vmr") [kg/m³]
15473  if ( (vmr[i] >= low_lim_den) && (vmr[i] <= high_lim_den) )
15474  {
15475  // relative inverse temperature [1]
15476  Numeric theta = 300.000 / abs_t[i];
15477  // inverse frequency T-dependency function [Hz]
15478  Numeric ai = CA * (62.000 * theta - 11.600) * exp(-22.100 * (theta-1.000)) * 1.000e-4;
15479  // linear frequency T-dependency function [1/Hz]
15480  Numeric bi = CB * 0.542e-6 *
15481  ( -24.17 + (116.79/theta)
15482  + pow((theta/(theta-(Numeric)0.9927)),(Numeric)2.) );
15483 
15484  // Loop frequency:
15485  for ( Index s=0; s<n_f; ++s )
15486  {
15487  // real part of the complex permittivity of ice
15488  Numeric Reepsilon = 3.15;
15489  // imaginary part of the complex permittivity of water
15490  Numeric Imepsilon = ( ( ai/(f_grid[s]*Hz_to_GHz) ) +
15491  ( bi*(f_grid[s]*Hz_to_GHz) ) );
15492  // the imaginary part of the complex refractivity of suspended ice particles.
15493  // In MPM93 w is in g/m³ and m is in g/cm³. Because of the units used in arts,
15494  // a factor of 1.000e6 must be multiplied with the ratio (w/m):
15495  // MPM93: (w/m)_MPM93 in (g/m³)/(g/cm³)
15496  // arts: (w/m)_arts in (kg/m³)/(kg/m³)
15497  // =====> (w/m)_MPM93 = 1.0e6 * (w/m)_arts
15498  // the factor of 1.0e6 is included below in pxsec calculation.
15499  Numeric ImNw = 1.500 / m *
15500  ( 3.000 * Imepsilon
15501  / ( pow((Reepsilon+(Numeric)2.000),(Numeric)2.)
15502  + pow(Imepsilon,(Numeric)2.) ) );
15503  // ice particle absorption cross section [1/m]
15504  // The vmr of H2O will be multiplied at the stage of absorption
15505  // calculation: abs = vmr * pxsec.
15506  // pxsec = abs/vmr [1/m] but MPM93 is in [dB/km] --> conversion necessary
15507  pxsec(s,i) += CC * 1.000e6 * dB_km_to_1_m * 0.1820 * (f_grid[s]*Hz_to_GHz) * ImNw;
15508  }
15509  } else
15510  {
15511  if ( (vmr[i] < low_lim_den) || (vmr[i] > high_lim_den) )
15512  {
15513  ostringstream os;
15514  os << "ERROR in MPM93IceCrystalAbs:\n"
15515  << " suspended ice particle density (valid range: 0-10.0e-3 kg/m3):" << vmr[i] << "\n"
15516  << " ==> no calculation performed!\n";
15517  throw runtime_error(os.str());
15518  }
15519  }
15520  }
15521  return;
15522 }
15523 //
15524 // #################################################################################
15526 
15555  const Numeric CEin, // input parameter
15556  const Numeric CAin, // input parameter
15557  const Numeric CBin, // input parameter
15558  const String& model, // model
15559  ConstVectorView f_grid, // frequency vector
15560  ConstVectorView abs_p, // pressure vector
15561  ConstVectorView abs_t _U_, // temperature vector
15562  ConstVectorView vmr, // rain rate profile [mm/h]
15563  const Verbosity& verbosity)
15564 {
15565  CREATE_OUT3;
15566 
15567  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
15568  // standard values for the MPM93 model based on Olsen, R.L.,
15569  // D.V. Rogers, and D. B. Hodge, "The aR^b relation in the
15570  // calculation of rain attenuation", IEEE Trans. Antennas Propagat.,
15571  // vol. AP-26, pp. 318-329, 1978,
15572  const Numeric CE_MPM93 = 1.00000;
15573  const Numeric CA_MPM93 = 1.00000;
15574  const Numeric CB_MPM93 = 1.00000;
15575  // ---------------------------------------------------------------------------------------
15576 
15577 
15578  // select the parameter set (!!model dominates values!!):
15579  Numeric CE, CA, CB;
15580  if ( model == "MPM93" )
15581  {
15582  CE = CE_MPM93;
15583  CA = CA_MPM93;
15584  CB = CB_MPM93;
15585  }
15586  else if ( model == "user" )
15587  {
15588  CE = CEin;
15589  CA = CAin;
15590  CB = CBin;
15591  }
15592  else
15593  {
15594  ostringstream os;
15595  os << "rain-MPM93: ERROR! Wrong model values given.\n"
15596  << "Valid models are: 'MPM93' and 'user'" << '\n';
15597  throw runtime_error(os.str());
15598  }
15599  out3 << "rain-MPM93: (model=" << model << ") parameter values in use:\n"
15600  << " CE = " << CE << "\n"
15601  << " CA = " << CA << "\n"
15602  << " CB = " << CB << "\n";
15603 
15604 
15605  const Numeric low_lim_rr = 0.000; // lower limit of allowed rain rate [mm/h]
15606  const Numeric high_lim_rr = 150.000; // upper limit of allowed rain rate [mm/h]
15607 
15608  const Index n_p = abs_p.nelem(); // Number of pressure levels
15609  const Index n_f = f_grid.nelem(); // Number of frequencies
15610 
15611  // Check that dimensions of abs_p, abs_t, and vmr agree:
15612  assert ( n_p==abs_t.nelem() );
15613  assert ( n_p==vmr.nelem() );
15614 
15615  // Check that dimensions of pxsec are consistent with n_f
15616  // and n_p. It should be [n_f,n_p]:
15617  assert ( n_f==pxsec.nrows() );
15618  assert ( n_p==pxsec.ncols() );
15619 
15620  // Loop pressure/temperature:
15621  for ( Index i=0; i<n_p; ++i )
15622  {
15623  // Extinction by rain is parameterized as:
15624  // ext_rain = a_rain * rr ^ b_rain
15625  // a_rain and b_rain each depend on frequency by power laws:
15626  // a_rain = Ga * freq ^ Ea
15627  // b_rain = Gb * freq ^ Eb
15628  Numeric Ga = 0.;
15629  Numeric Ea = 0.;
15630  Numeric Gb = 0.;
15631  Numeric Eb = 0.;
15632  // FIXME Numeric a_rain;
15633  // FIXME Numeric b_rain;
15634  // FIXME Numeric ext_rain;
15635 
15636  // Check limits of rain rate ("vmr") [mm/h]
15637  if ( vmr[i]==0. )
15638  pxsec(joker,i) += 0.;
15639 
15640  else if ( (vmr[i] >= low_lim_rr) && (vmr[i] < high_lim_rr) )
15641  {
15642  // Loop frequency:
15643  for ( Index s=0; s<n_f; ++s )
15644  {
15645  // for rain rate < 25 mm/h, take parameters from Olsen et al.'s
15646  // own power law fit to their Laws-Parsons-Low data;
15647  // for rain rate > 25 mm/h, take C. Melsheimer's power law fit
15648  // to Olsen et al.'s Laws-Parson-High data
15649  if ( vmr[i] <= 25 )
15650  {
15651  // power law coeff. Ga and exponent Ea for a, piecewise:
15652  if ( f_grid[s] <= 2.9e9 )
15653  {
15654  Ga = 6.39e-5;
15655  Ea = 2.03;
15656  }
15657  else if ( f_grid[s] <= 54.0e9 )
15658  {
15659  Ga = 4.21e-5;
15660  Ea = 2.42;
15661  }
15662  else if ( f_grid[s] <= 180e9 )
15663  {
15664  Ga = 4.09e-2;
15665  Ea = 0.699;
15666  }
15667  else if ( f_grid[s] <= 1000e9 )
15668  {
15669  Ga = 3.38;
15670  Ea = -0.151;
15671  }
15672  else
15673  {
15674  ostringstream os;
15675  os << "ERROR in MPM93RainExt:\n"
15676  << " frequency (valid range 0-1000 GHz):" << f_grid[s]*Hz_to_GHz << "\n"
15677  << " ==> no calculation performed!\n";
15678  throw runtime_error(os.str());
15679  }
15680  // power law coeff. Gb and exponent Eb for b, piecewise:
15681  if ( f_grid[s] <= 8.5e9 )
15682  {
15683  Gb = 0.851;
15684  Eb = 0.158;
15685  }
15686  else if ( f_grid[s] <= 25.0e9 )
15687  {
15688  Gb = 1.41;
15689  Eb = -0.0779;
15690  }
15691  else if ( f_grid[s] <= 164.0e9 )
15692  {
15693  Gb = 2.63;
15694  Eb = -0.272;
15695  }
15696  else if ( f_grid[s] <= 1000e9 )
15697  {
15698  Gb = 0.616;
15699  Eb = 0.0126;
15700  }
15701  else
15702  {
15703  ostringstream os;
15704  os << "ERROR in MPM93RainExt:\n"
15705  << " frequency (valid range 0-1000 GHz):" << f_grid[s]*Hz_to_GHz << "\n"
15706  << " ==> no calculation performed!\n";
15707  throw runtime_error(os.str());
15708  }
15709 
15710  }
15711  else if (vmr[i] > 25)
15712  {
15713  // power law coeff. Ga and exponent Ea for a, piecewise:
15714  if ( f_grid[s] <= 4.9e9 )
15715  {
15716  Ga = 5.30e-5;
15717  Ea = 1.87;
15718  }
15719  else if ( f_grid[s] <= 10.7e9 )
15720  {
15721  Ga = 5.03e-6;
15722  Ea = 3.35;
15723  }
15724  else if ( f_grid[s] <= 40.1e9 )
15725  {
15726  Ga = 2.53e-5;
15727  Ea = 2.67;
15728  }
15729  else if ( f_grid[s] <= 59.1e9 )
15730  {
15731  Ga = 3.58e-3;
15732  Ea = 1.33;
15733  }
15734  else if ( f_grid[s] <= 100e9 )
15735  {
15736  Ga = 0.143;
15737  Ea = 0.422;
15738  }
15739  else
15740  {
15741  ostringstream os;
15742  os << "ERROR in MPM93RainExt:\n"
15743  << " frequency (valid range for rain rate > 25mm/h: 0-100 GHz):" << f_grid[s]*Hz_to_GHz << "\n"
15744  << " ==> no calculation performed!\n";
15745  throw runtime_error(os.str());
15746  }
15747  // power law coeff. Gb and exponent Eb for b, piecewise:
15748  if ( f_grid[s] <= 6.2e9 )
15749  {
15750  Gb = 0.911;
15751  Eb = 0.190;
15752  }
15753  else if ( f_grid[s] <= 23.8e9 )
15754  {
15755  Gb = 1.71;
15756  Eb = -0.156;
15757  }
15758  else if ( f_grid[s] <= 48.4e9 )
15759  {
15760  Gb = 3.08;
15761  Eb = -0.342;
15762  }
15763  else if ( f_grid[s] <= 68.2e9 )
15764  {
15765  Gb = 1.28;
15766  Eb = -0.116;
15767  }
15768  else if ( f_grid[s] <= 100e9 )
15769  {
15770  Gb = 0.932;
15771  Eb = -0.0408;
15772  }
15773  else
15774  {
15775  ostringstream os;
15776  os << "ERROR in MPM93RainExt:\n"
15777  << " frequency (valid range for rain rate > 25mm/h: 0-100 GHz):" << f_grid[s]*Hz_to_GHz << "\n"
15778  << " ==> no calculation performed!\n";
15779  throw runtime_error(os.str());
15780  }
15781  }
15782  //Factor a_rain
15783  Numeric a_rain = Ga * pow((f_grid[s]*Hz_to_GHz),Ea);
15784  //Factor b_rain
15785  Numeric b_rain = Gb * pow((f_grid[s]*Hz_to_GHz),Eb);
15786  // Extinction coefficient [dB/km], with scaling
15787  // parameters CA and CB
15788  Numeric ext_rain = CA * a_rain * pow(vmr[i],(CB*b_rain));
15789  // rain extinction cross section [1/m]
15790  // The vmr will be multiplied at the stage of extinction
15791  // calculation: ext = vmr * pxsec.
15792  // pxsec = ext/vmr [1/m] but MPM93 is in [dB/km] --> conversion necessary
15793  pxsec(s,i) += CE * dB_km_to_1_m * ext_rain / vmr[i];
15794  }
15795  } else
15796  {
15797  if ( (vmr[i] < low_lim_rr) || (vmr[i] > high_lim_rr) )
15798  {
15799  ostringstream os;
15800  os << "ERROR in MPM93RainExt:\n"
15801  << " rain rate (valid range 0.00-150.00 mm/h):" << vmr[i] << "\n"
15802  << " ==> no calculation performed!\n";
15803  throw runtime_error(os.str());
15804  }
15805  }
15806  }
15807 
15808 }
15809 //
15810 // #################################################################################
15811 // ################################# HELP FUNCTIONS ################################
15812 // #################################################################################
15813 //
15835  const Numeric fl,
15836  const Numeric f)
15837 {
15838  /*
15839  this routine calculates the line shape function of Van Vleck and Weisskopf
15840  with the factor (f/f_o)¹. for the MPM pseudo continuum line.
15841 
15842  creation TKS, 4.11.00
15843 
15844  input: gamma [Hz] line width of line L
15845  fl [Hz] central frequency of line L
15846  f [Hz] frequency position of calculation
15847 
15848  output: value [1/Hz] line shape function value at f for the line parameters
15849  of line L
15850 
15851  */
15852 
15853  double f_minus, f_plus ; /* internal variables */
15854  double value; /* return value */
15855 
15856  // line at fl
15857  f_minus = 1.000 / ((f-fl)*(f-fl) + gamma*gamma);
15858 
15859  // mirror line at -fl
15860  f_plus = 1.000 / ((f+fl)*(f+fl) + gamma*gamma);
15861 
15862  // VVW line shape function value
15863  value = fabs(f/fl) * gamma * (f_minus + f_plus);
15864 
15865  return value;
15866 }
15867 //
15868 // #################################################################################
15869 //
15892  const Numeric fl,
15893  const Numeric f,
15894  const Numeric delta)
15895 {
15896  /*
15897  this routine calculates the line shape function of Van Vleck and Weisskopf
15898  for O2 with line mixing.
15899 
15900  creation TKS, 14.07.01
15901 
15902  input: gamma [GHz] line width of line L
15903  fl [GHz] central frequency of line L
15904  f [GHz] frequency position of calculation
15905  delta [1] line mixing parameter
15906 
15907  output: value [1] line shape function value at f for the line parameters
15908  of line L
15909 
15910  */
15911 
15912  double f_minus, f_plus ; /* internal variables */
15913  double value; /* return value */
15914 
15915  // line at fl
15916  f_minus = (gamma - delta * (fl-f)) / ((fl-f)*(fl-f) + gamma*gamma);
15917 
15918  // mirror line at -fl
15919  f_plus = (gamma - delta * (fl+f)) / ((fl+f)*(fl+f) + gamma*gamma);
15920 
15921  // VVW line shape function value
15922  value = f * (f_minus + f_plus);
15923 
15924  return value;
15925 }
15926 //
15927 // #################################################################################
15928 //
15952 {
15953 
15954  // check of temperature range
15955  if (t < 0.000)
15956  {
15957  ostringstream os;
15958  os << "In WVSatPressureLiquidWater:\n"
15959  << "temperature negative: T=" << t <<"K \n";
15960  throw runtime_error(os.str());
15961  }
15962 
15963  // COMPUTES SATURATION H2O VAPOR PRESSURE (OVER LIQUID)
15964  // USING LIEBE'S APPROXIMATION (CORRECTED)
15965  // input : T in Kelvin
15966  // output : es in Pa
15967  // PWR 4/8/92
15968  /*
15969  Numeric TH = 300.0 / t;
15970  Numeric es_PWR98 = 100.00 * 35.3 * exp(22.64*(1.-TH)) * pow(TH,5.0);
15971  */
15972 
15973  // MPM93 calculation
15974  Numeric theta = 373.16 / t;
15975  Numeric exponent = ( -7.90298 * (theta-1.000) +
15976  5.02808 * log10(theta) -
15977  1.3816e-7 * ( pow( (Numeric)10.00,
15978  ((Numeric)11.344*
15979  ((Numeric)1.00-((Numeric)1.00
15980  /theta))) )
15981  - (Numeric)1.000 ) +
15982  8.1328e-3 * ( pow( (Numeric)10.00,
15983  ((Numeric)-3.49149
15984  *(theta-(Numeric)1.00)))
15985  - 1.000) +
15986  log10(1013.246) );
15987  Numeric es_MPM93 = 100.000 * pow((Numeric)10.00,exponent);
15988 
15989  return es_MPM93; // [Pa]
15990 }
15991 //
15992 // #################################################################################
15993 //
16017 {
16018 
16019  // check of temperature range
16020  if (t < 0.000)
16021  {
16022  ostringstream os;
16023  os << "In WVSatPressureIce:\n"
16024  << "temperature negative: T=" << t <<"K \n";
16025  throw runtime_error(os.str());
16026  }
16027 
16028  // MPM93 calculation
16029  Numeric theta = 273.16 / t;
16030  Numeric exponent = (-9.09718 * (theta-1.000) -
16031  3.56654 * log10(theta) +
16032  0.876793 * (1.000-(1.000/theta)) +
16033  log10(6.1071) );
16034 
16035  Numeric es_MPM93 = 100.000 * pow((Numeric)10.00,exponent);
16036 
16037  return es_MPM93;
16038 }
16039 
16040 
16041 
16042 //
16043 // ############################################################################
16044 // #################### CONTROL OF ADDITIONAL ABSORPTION MODEL ################
16045 // ############################################################################
16046 //
16047 //
16086  const String& name,
16088  const String& model,
16089  ConstVectorView f_grid,
16090  ConstVectorView abs_p,
16091  ConstVectorView abs_t,
16092  ConstVectorView abs_n2,
16093  ConstVectorView abs_h2o,
16094  ConstVectorView abs_o2,
16095  ConstVectorView vmr,
16096  const Verbosity& verbosity)
16097 {
16098  CREATE_OUT3;
16099 
16100  /* In the following all the possible tags are listed here and
16101  after a first consistency check about the input parameters the
16102  appropriate internal function is called,
16103 
16104  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
16105  ATTENTION PLEASE UPDATE THIS COMMENT IF ANY CHANGES ARE MADE CONCERNING
16106  THE ASSOCIATED MODELS TO EACH TAG
16107  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
16108 
16109  ----------------------------------------------------------------------------------------------------
16110  TAG VALID MODELS
16111  ----------------------------------------------------------------------------------------------------
16112  *CONTAGMODINFO* H2O-SelfContStandardType: Rosenkranz, user
16113  *CONTAGMODINFO* H2O-ForeignContStandardType: Rosenkranz, user
16114  *CONTAGMODINFO* H2O-ForeignContMaTippingType: MaTipping, user
16115  *CONTAGMODINFO* H2O-ContMPM93: MPM93, user
16116  *CONTAGMODINFO* H2O-MPM87: MPM87, MPM87Lines, MPM87Continuum, user
16117  *CONTAGMODINFO* H2O-MPM89: MPM89, MPM89Lines, MPM89Continuum, user
16118  *CONTAGMODINFO* H2O-MPM93: MPM93, MPM93Lines, MPM93Continuum, user
16119  *CONTAGMODINFO* H2O-PWR98: Rosenkranz, RosenkranzLines, RosenkranzContinuum, user
16120  *CONTAGMODINFO* H2O-CP98: CruzPol, CruzPolLine, CruzPolContinuum, user
16121  *CONTAGMODINFO* H2O-CKD24: CKD24, user
16122  *CONTAGMODINFO* O2-MPM85: MPM85, MPM85Lines, MPM85Continuum, MPM85NoCoupling, MPM85NoCutoff, user
16123  *CONTAGMODINFO* O2-MPM87: MPM87, MPM87Lines, MPM87Continuum, MPM87NoCoupling, MPM87NoCutoff, user
16124  *CONTAGMODINFO* O2-MPM89: MPM89, MPM89Lines, MPM89Continuum, MPM89NoCoupling, MPM89NoCutoff, user
16125  *CONTAGMODINFO* O2-MPM92: MPM92, MPM92Lines, MPM92Continuum, MPM92NoCoupling, MPM92NoCutoff, user
16126  *CONTAGMODINFO* O2-MPM93: MPM93, MPM93Lines, MPM93Continuum, MPM93NoCoupling, MPM92NoCutoff, user
16127  *CONTAGMODINFO* O2-PWR93: Rosenkranz, RosenkranzLines, RosenkranzContinuum, user
16128  *CONTAGMODINFO* O2-PWR88: Rosenkranz, RosenkranzLines, RosenkranzContinuum, user
16129  *CONTAGMODINFO* O2-SelfContMPM93: MPM93, user
16130  *CONTAGMODINFO* O2-SelfContPWR93: Rosenkranz, user
16131  *CONTAGMODINFO* O2-GenerealCont: Rosenkranz, MPM93, user
16132  *CONTAGMODINFO* N2-BFCIA86: BF86, user
16133  *CONTAGMODINFO* N2-SelfContMPM93: MPM93, user, MPM93Scale
16134  *CONTAGMODINFO* N2-SelfContPWR93: Rosenkranz, user
16135  *CONTAGMODINFO* N2-SelfContStandardType: Rosenkranz, user
16136  *CONTAGMODINFO* CO2-SelfContPWR93: Rosenkranz, user
16137  *CONTAGMODINFO* CO2-ForeignContPWR93: Rosenkranz, user
16138  *CONTAGMODINFO* liquidcloud-MPM93: MPM93, user
16139  *CONTAGMODINFO* icecloud-MPM93: MPM93, user
16140  *CONTAGMODINFO* rain-MPM93: MPM93, user
16141  ----------------------------------------------------------------------------------------------------
16142  */
16143 
16144  // Set up a lokal variable pxsec for the pseudo cross sections, that
16145  // are used by the internal contiuum functions. It is important that
16146  // we also inititialize this to zero here, since the continuum
16147  // routines just add to this.
16148  // The dimensions of this are [n_frequencies,n_pressures].
16149  Matrix pxsec(xsec.nrows(),xsec.ncols(),0.0);
16150 
16151  // ============= H2O continuum ========================================================
16152  if ( "H2O-SelfContStandardType"==name )
16153  {
16154  //
16155  // specific continuum parameters and units:
16156  // OUTPUT
16157  // pxsec : [1/m],
16158  // INPUT
16159  // parameters[0] : continuum coefficient (C_s) [1/m / (Hz²*Pa²)]
16160  // parameters[1] : temperature exponent (x_s) [1]
16161  // f_grid : [Hz]
16162  // abs_p : [Pa]
16163  // abs_t : [K]
16164  // vmr : [1]
16165  //
16166  const int Nparam = 2;
16167  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
16168  {
16169  out3 << "Continuum model " << name << " is running with \n"
16170  << "user defined parameters according to model " << model << ".\n";
16172  parameters[0],
16173  parameters[1],
16174  model,
16175  f_grid,
16176  abs_p,
16177  abs_t,
16178  vmr,
16179  verbosity );
16180  }
16181  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
16182  {
16183  ostringstream os;
16184  os << "Continuum model " << name << " requires " << Nparam << " input\n"
16185  << "parameters for the model " << model << ",\n"
16186  << "but you specified " << parameters.nelem() << " parameters.\n";
16187  throw runtime_error(os.str());
16188  }
16189  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
16190  {
16191  out3 << "Continuum model " << name << " running with \n"
16192  << "the parameters for model " << model << ".\n";
16194  0.00,
16195  0.00,
16196  model,
16197  f_grid,
16198  abs_p,
16199  abs_t,
16200  vmr,
16201  verbosity );
16202  }
16203  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
16204  {
16205  ostringstream os;
16206  os << "ERROR: Continuum model " << name << " requires NO input\n"
16207  << "parameters for the model " << model << ",\n"
16208  << "but you specified " << parameters.nelem() << " parameters.\n"
16209  << "This ambiguity can not be solved by arts.\n"
16210  << "Please see the arts user guide chapter 3.\n";
16211  throw runtime_error(os.str());
16212  }
16213  }
16214  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16215  else if ( "H2O-ForeignContStandardType"==name )
16216  {
16217  //
16218  // specific continuum parameters units:
16219  // a) output
16220  // pxsec : [1/m],
16221  // b) input
16222  // parameters[0] : [1/m / (Hz²*Pa²)]
16223  // parameters[1] : [1]
16224  // f_grid : [Hz]
16225  // abs_p : [Pa]
16226  // abs_t : [K]
16227  // vmr : [1]
16228  //
16229  const int Nparam = 2;
16230  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
16231  {
16232  out3 << "Continuum model " << name << " is running with \n"
16233  << "user defined parameters according to model " << model << ".\n";
16235  parameters[0],
16236  parameters[1],
16237  model,
16238  f_grid,
16239  abs_p,
16240  abs_t,
16241  vmr,
16242  verbosity );
16243  }
16244  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
16245  {
16246  ostringstream os;
16247  os << "Continuum model " << name << " requires " << Nparam << " input\n"
16248  << "parameters for the model " << model << ",\n"
16249  << "but you specified " << parameters.nelem() << " parameters.\n";
16250  throw runtime_error(os.str());
16251  }
16252  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
16253  {
16254  out3 << "Continuum model " << name << " running with \n"
16255  << "the parameters for model " << model << ".\n";
16257  0.00,
16258  0.00,
16259  model,
16260  f_grid,
16261  abs_p,
16262  abs_t,
16263  vmr,
16264  verbosity );
16265  }
16266  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
16267  {
16268  ostringstream os;
16269  os << "ERROR: Continuum model " << name << " requires NO input\n"
16270  << "parameters for the model " << model << ",\n"
16271  << "but you specified " << parameters.nelem() << " parameters.\n"
16272  << "This ambiguity can not be solved by arts.\n"
16273  << "Please see the arts user guide chapter 3.\n";
16274  throw runtime_error(os.str());
16275  }
16276  }
16277  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16278  else if ( "H2O-ForeignContMaTippingType"==name )
16279  {
16280  //
16281  // specific continuum parameters units:
16282  // a) output
16283  // pxsec : [1/m],
16284  // b) input
16285  // parameters[0] : [1/m / (Hz²*Pa²)]
16286  // parameters[1] : [1]
16287  // f_grid : [Hz]
16288  // abs_p : [Pa]
16289  // abs_t : [K]
16290  // vmr : [1]
16291  //
16292  const int Nparam = 2;
16293  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
16294  {
16295  out3 << "Continuum model " << name << " is running with \n"
16296  << "user defined parameters according to model " << model << ".\n";
16298  parameters[0],
16299  parameters[1],
16300  model,
16301  f_grid,
16302  abs_p,
16303  abs_t,
16304  vmr,
16305  verbosity );
16306  }
16307  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
16308  {
16309  ostringstream os;
16310  os << "Continuum model " << name << " requires " << Nparam << " input\n"
16311  << "parameters for the model " << model << ",\n"
16312  << "but you specified " << parameters.nelem() << " parameters.\n";
16313  throw runtime_error(os.str());
16314  }
16315  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
16316  {
16317  out3 << "Continuum model " << name << " running with \n"
16318  << "the parameters for model " << model << ".\n";
16320  0.00,
16321  0.00,
16322  model,
16323  f_grid,
16324  abs_p,
16325  abs_t,
16326  vmr,
16327  verbosity );
16328  }
16329  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
16330  {
16331  ostringstream os;
16332  os << "ERROR: Continuum model " << name << " requires NO input\n"
16333  << "parameters for the model " << model << ",\n"
16334  << "but you specified " << parameters.nelem() << " parameters.\n"
16335  << "This ambiguity can not be solved by arts.\n"
16336  << "Please see the arts user guide chapter 3.\n";
16337  throw runtime_error(os.str());
16338  }
16339  }
16340  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16341  else if ( "H2O-ContMPM93"==name )
16342  {
16343  // self and foreign continuum term are simultaneously calculated
16344  // since the parameterization can not be divided up in these two
16345  // terms because they are not additive terms.
16346  //
16347  // specific continuum parameters and units:
16348  // OUTPUT
16349  // pxsec : [1/m],
16350  // INPUT
16351  // parameters[0] : pseudo continuum line frequency [Hz]
16352  // parameters[1] : pseudo continuum line strength parameter [Hz/Pa]
16353  // parameters[2] : pseudo continuum line strength temperature parameter [1]
16354  // parameters[3] : pseudo continuum line broadening parameter [Hz/Pa]
16355  // parameters[4] : pseudo continuum line broadening parameter [1]
16356  // parameters[5] : pseudo continuum line broadening parameter [1]
16357  // parameters[6] : pseudo continuum line broadening parameter [1]
16358  // f_grid : [Hz]
16359  // abs_p : [Pa]
16360  // abs_t : [K]
16361  // vmr : [1]
16362  //
16363  const int Nparam = 7;
16364  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
16365  {
16366  out3 << "Continuum model " << name << " is running with \n"
16367  << "user defined parameters according to model " << model << ".\n";
16368  MPM93_H2O_continuum( pxsec,
16369  parameters[0],
16370  parameters[1],
16371  parameters[2],
16372  parameters[3],
16373  parameters[4],
16374  parameters[5],
16375  parameters[6],
16376  model,
16377  f_grid,
16378  abs_p,
16379  abs_t,
16380  vmr,
16381  verbosity );
16382  }
16383  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
16384  {
16385  ostringstream os;
16386  os << "Continuum model " << name << " requires " << Nparam << " input\n"
16387  << "parameters for the model " << model << ",\n"
16388  << "but you specified " << parameters.nelem() << " parameters.\n";
16389  throw runtime_error(os.str());
16390  }
16391  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
16392  {
16393  out3 << "Continuum model " << name << " running with \n"
16394  << "the parameters for model " << model << ".\n";
16395  MPM93_H2O_continuum( pxsec,
16396  0.00,
16397  0.00,
16398  0.00,
16399  0.00,
16400  0.00,
16401  0.00,
16402  0.00,
16403  model,
16404  f_grid,
16405  abs_p,
16406  abs_t,
16407  vmr,
16408  verbosity );
16409  }
16410  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
16411  {
16412  ostringstream os;
16413  os << "ERROR: Continuum model " << name << " requires NO input\n"
16414  << "parameters for the model " << model << ",\n"
16415  << "but you specified " << parameters.nelem() << " parameters. " << "\n"
16416  << "This ambiguity can not be solved by arts.\n"
16417  << "Please see the arts user guide chapter 3.\n";
16418  throw runtime_error(os.str());
16419  }
16420  }
16421  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16422  else if ( "H2O-ForeignContATM01"==name )
16423  {
16424  // Foreign wet continuum term.
16425  //
16426  // Pardo et al., IEEE, Trans. Ant. Prop.,
16427  // Vol 49, No 12, pp. 1683-1694, 2001.
16428  //
16429  // specific continuum parameters and units:
16430  // OUTPUT
16431  // pxsec : [1/m],
16432  // INPUT
16433  // parameters[0] : pseudo continuum line frequency [Hz]
16434  // f_grid : [Hz]
16435  // abs_p : [Pa]
16436  // abs_t : [K]
16437  // vmr : [1]
16438  //
16439  const int Nparam = 1;
16440  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
16441  {
16442  out3 << "Continuum model " << name << " is running with \n"
16443  << "user defined parameters according to model " << model << ".\n";
16445  parameters[0],
16446  model,
16447  f_grid,
16448  abs_p,
16449  abs_t,
16450  vmr,
16451  verbosity );
16452  }
16453  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
16454  {
16455  ostringstream os;
16456  os << "Continuum model " << name << " requires " << Nparam << " input\n"
16457  << "parameters for the model " << model << ",\n"
16458  << "but you specified " << parameters.nelem() << " parameters.\n";
16459  throw runtime_error(os.str());
16460  }
16461  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
16462  {
16463  out3 << "Continuum model " << name << " running with \n"
16464  << "the parameters for model " << model << ".\n";
16466  0.000,
16467  model,
16468  f_grid,
16469  abs_p,
16470  abs_t,
16471  vmr,
16472  verbosity );
16473  }
16474  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
16475  {
16476  ostringstream os;
16477  os << "ERROR: Continuum model " << name << " requires NO input\n"
16478  << "parameters for the model " << model << ",\n"
16479  << "but you specified " << parameters.nelem() << " parameters. " << "\n"
16480  << "This ambiguity can not be solved by arts.\n"
16481  << "Please see the arts user guide chapter 3.\n";
16482  throw runtime_error(os.str());
16483  }
16484  }
16485  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16486  else if ( "H2O-SelfContCKD222"==name )
16487  {
16488  // OUTPUT:
16489  // pxsec cross section (absorption/volume mixing ratio) of
16490  // H2O self continuum according to CKD2.2.2 [1/m]
16491  // INPUT:
16492  // parameters[0] strength scaling factor [1]
16493  // model allows user defined input parameter set
16494  // (Cin) or choice of
16495  // pre-defined parameters of specific models (see note below).
16496  // f_grid predefined frequency grid [Hz]
16497  // abs_p predefined pressure grid [Pa]
16498  // abs_t predefined temperature grid [K]
16499  // vmr H2O volume mixing ratio profile [1]
16500  //
16501  // WWW resource: ftp.aer.com/aer_contnm_ckd
16502  const int Nparam = 1;
16503  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
16504  {
16505  out3 << "Continuum model " << name << " is running with \n"
16506  << "user defined parameters according to model " << model << ".\n";
16507  CKD_222_self_h2o( pxsec,
16508  parameters[0],
16509  model,
16510  f_grid,
16511  abs_p,
16512  abs_t,
16513  vmr,
16514  verbosity );
16515  }
16516  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
16517  {
16518  ostringstream os;
16519  os << "Continuum model " << name << " requires " << Nparam << " input\n"
16520  << "parameters for the model " << model << ",\n"
16521  << "but you specified " << parameters.nelem() << " parameters.\n";
16522  throw runtime_error(os.str());
16523  }
16524  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
16525  {
16526  out3 << "Continuum model " << name << " running with \n"
16527  << "the parameters for model " << model << ".\n";
16528  CKD_222_self_h2o( pxsec,
16529  0.000,
16530  model,
16531  f_grid,
16532  abs_p,
16533  abs_t,
16534  vmr,
16535  verbosity );
16536  }
16537  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
16538  {
16539  ostringstream os;
16540  os << "ERROR: continuum model " << name << " requires NO input\n"
16541  << "parameters for the model " << model << ",\n"
16542  << "but you specified " << parameters.nelem() << " parameters.\n"
16543  << "This ambiguity can not be solved by arts.\n"
16544  << "Please see the arts user guide chapter 3.\n";
16545  throw runtime_error(os.str());
16546  }
16547  }
16548  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16549  else if ( "H2O-ForeignContCKD222"==name )
16550  {
16551  // OUTPUT:
16552  // pxsec cross section (absorption/volume mixing ratio) of
16553  // H2O foreign continuum according to CKD2.2.2 [1/m]
16554  // INPUT:
16555  // parameters[0] strength scaling factor [1]
16556  // model allows user defined input parameter set
16557  // (Cin) or choice of
16558  // pre-defined parameters of specific models (see note below).
16559  // f_grid predefined frequency grid [Hz]
16560  // abs_p predefined pressure grid [Pa]
16561  // abs_t predefined temperature grid [K]
16562  // vmr H2O volume mixing ratio profile [1]
16563  //
16564  // WWW resource: ftp.aer.com/aer_contnm_ckd
16565  const int Nparam = 1;
16566  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
16567  {
16568  out3 << "Continuum model " << name << " is running with \n"
16569  << "user defined parameters according to model " << model << ".\n";
16570  CKD_222_foreign_h2o( pxsec,
16571  parameters[0],
16572  model,
16573  f_grid,
16574  abs_p,
16575  abs_t,
16576  vmr,
16577  verbosity );
16578  }
16579  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
16580  {
16581  ostringstream os;
16582  os << "Continuum model " << name << " requires " << Nparam << " input\n"
16583  << "parameters for the model " << model << ",\n"
16584  << "but you specified " << parameters.nelem() << " parameters.\n";
16585  throw runtime_error(os.str());
16586  }
16587  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
16588  {
16589  out3 << "Continuum model " << name << " running with \n"
16590  << "the parameters for model " << model << ".\n";
16591  CKD_222_foreign_h2o( pxsec,
16592  0.000,
16593  model,
16594  f_grid,
16595  abs_p,
16596  abs_t,
16597  vmr,
16598  verbosity );
16599  }
16600  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
16601  {
16602  ostringstream os;
16603  os << "ERROR: continuum model " << name << " requires NO input\n"
16604  << "parameters for the model " << model << ",\n"
16605  << "but you specified " << parameters.nelem() << " parameters.\n"
16606  << "This ambiguity can not be solved by arts.\n"
16607  << "Please see the arts user guide chapter 3.\n";
16608  throw runtime_error(os.str());
16609  }
16610  }
16611  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16612  else if ( "H2O-SelfContCKD242"==name )
16613  {
16614  // OUTPUT:
16615  // pxsec cross section (absorption/volume mixing ratio) of
16616  // H2O self continuum according to CKD2.4.2 [1/m]
16617  // INPUT:
16618  // parameters[0] strength scaling factor [1]
16619  // model allows user defined input parameter set
16620  // (Cin) or choice of
16621  // pre-defined parameters of specific models (see note below).
16622  // f_grid predefined frequency grid [Hz]
16623  // abs_p predefined pressure grid [Pa]
16624  // abs_t predefined temperature grid [K]
16625  // vmr H2O volume mixing ratio profile [1]
16626  //
16627  // WWW resource: ftp.aer.com/aer_contnm_ckd
16628  const int Nparam = 1;
16629  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
16630  {
16631  out3 << "Continuum model " << name << " is running with \n"
16632  << "user defined parameters according to model " << model << ".\n";
16633  CKD_242_self_h2o( pxsec,
16634  parameters[0],
16635  model,
16636  f_grid,
16637  abs_p,
16638  abs_t,
16639  vmr,
16640  verbosity );
16641  }
16642  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
16643  {
16644  ostringstream os;
16645  os << "Continuum model " << name << " requires " << Nparam << " input\n"
16646  << "parameters for the model " << model << ",\n"
16647  << "but you specified " << parameters.nelem() << " parameters.\n";
16648  throw runtime_error(os.str());
16649  }
16650  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
16651  {
16652  out3 << "Continuum model " << name << " running with \n"
16653  << "the parameters for model " << model << ".\n";
16654  CKD_242_self_h2o( pxsec,
16655  0.000,
16656  model,
16657  f_grid,
16658  abs_p,
16659  abs_t,
16660  vmr,
16661  verbosity );
16662  }
16663  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
16664  {
16665  ostringstream os;
16666  os << "ERROR: continuum model " << name << " requires NO input\n"
16667  << "parameters for the model " << model << ",\n"
16668  << "but you specified " << parameters.nelem() << " parameters.\n"
16669  << "This ambiguity can not be solved by arts.\n"
16670  << "Please see the arts user guide chapter 3.\n";
16671  throw runtime_error(os.str());
16672  }
16673  }
16674  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16675  else if ( "H2O-ForeignContCKD242"==name )
16676  {
16677  // OUTPUT:
16678  // pxsec cross section (absorption/volume mixing ratio) of
16679  // H2O foreign continuum according to CKD2.4.2 [1/m]
16680  // INPUT:
16681  // parameters[0] strength scaling factor [1]
16682  // model allows user defined input parameter set
16683  // (Cin) or choice of
16684  // pre-defined parameters of specific models (see note below).
16685  // f_grid predefined frequency grid [Hz]
16686  // abs_p predefined pressure grid [Pa]
16687  // abs_t predefined temperature grid [K]
16688  // vmr H2O volume mixing ratio profile [1]
16689  //
16690  // WWW resource: ftp.aer.com/aer_contnm_ckd
16691  const int Nparam = 1;
16692  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
16693  {
16694  out3 << "Continuum model " << name << " is running with \n"
16695  << "user defined parameters according to model " << model << ".\n";
16696  CKD_242_foreign_h2o( pxsec,
16697  parameters[0],
16698  model,
16699  f_grid,
16700  abs_p,
16701  abs_t,
16702  vmr,
16703  verbosity );
16704  }
16705  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
16706  {
16707  ostringstream os;
16708  os << "Continuum model " << name << " requires " << Nparam << " input\n"
16709  << "parameters for the model " << model << ",\n"
16710  << "but you specified " << parameters.nelem() << " parameters.\n";
16711  throw runtime_error(os.str());
16712  }
16713  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
16714  {
16715  out3 << "Continuum model " << name << " running with \n"
16716  << "the parameters for model " << model << ".\n";
16717  CKD_242_foreign_h2o( pxsec,
16718  0.000,
16719  model,
16720  f_grid,
16721  abs_p,
16722  abs_t,
16723  vmr,
16724  verbosity );
16725  }
16726  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
16727  {
16728  ostringstream os;
16729  os << "ERROR: continuum model " << name << " requires NO input\n"
16730  << "parameters for the model " << model << ",\n"
16731  << "but you specified " << parameters.nelem() << " parameters.\n"
16732  << "This ambiguity can not be solved by arts.\n"
16733  << "Please see the arts user guide chapter 3.\n";
16734  throw runtime_error(os.str());
16735  }
16736  }
16737  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16738  else if ( "H2O-SelfContCKDMT100"==name )
16739  {
16740  // OUTPUT:
16741  // pxsec cross section (absorption/volume mixing ratio) of
16742  // H2O self continuum according to CKD MT 1.00 [1/m]
16743  // INPUT:
16744  // parameters[0] strength scaling factor [1]
16745  // model allows user defined input parameter set
16746  // (Cin) or choice of
16747  // pre-defined parameters of specific models (see note below).
16748  // f_grid predefined frequency grid [Hz]
16749  // abs_p predefined pressure grid [Pa]
16750  // abs_t predefined temperature grid [K]
16751  // vmr H2O volume mixing ratio profile [1]
16752  //
16753  // WWW resource: ftp.aer.com/aer_contnm_ckd
16754  const int Nparam = 1;
16755  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
16756  {
16757  out3 << "Continuum model " << name << " is running with \n"
16758  << "user defined parameters according to model " << model << ".\n";
16759  CKD_mt_100_self_h2o( pxsec,
16760  parameters[0],
16761  model,
16762  f_grid,
16763  abs_p,
16764  abs_t,
16765  vmr,
16766  verbosity );
16767  }
16768  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
16769  {
16770  ostringstream os;
16771  os << "Continuum model " << name << " requires " << Nparam << " input\n"
16772  << "parameters for the model " << model << ",\n"
16773  << "but you specified " << parameters.nelem() << " parameters.\n";
16774  throw runtime_error(os.str());
16775  }
16776  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
16777  {
16778  out3 << "Continuum model " << name << " running with \n"
16779  << "the parameters for model " << model << ".\n";
16780  CKD_mt_100_self_h2o( pxsec,
16781  0.000,
16782  model,
16783  f_grid,
16784  abs_p,
16785  abs_t,
16786  vmr,
16787  verbosity );
16788  }
16789  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
16790  {
16791  ostringstream os;
16792  os << "ERROR: continuum model " << name << " requires NO input\n"
16793  << "parameters for the model " << model << ",\n"
16794  << "but you specified " << parameters.nelem() << " parameters.\n"
16795  << "This ambiguity can not be solved by arts.\n"
16796  << "Please see the arts user guide chapter 3.\n";
16797  throw runtime_error(os.str());
16798  }
16799  }
16800  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16801  else if ( "H2O-ForeignContCKDMT100"==name )
16802  {
16803  // OUTPUT:
16804  // pxsec cross section (absorption/volume mixing ratio) of
16805  // H2O foreign continuum according to CKD MT 1.00 [1/m]
16806  // INPUT:
16807  // parameters[0] strength scaling factor [1]
16808  // model allows user defined input parameter set
16809  // (Cin) or choice of
16810  // pre-defined parameters of specific models (see note below).
16811  // f_grid predefined frequency grid [Hz]
16812  // abs_p predefined pressure grid [Pa]
16813  // abs_t predefined temperature grid [K]
16814  // vmr H2O volume mixing ratio profile [1]
16815  //
16816  // WWW resource: ftp.aer.com/aer_contnm_ckd
16817  const int Nparam = 1;
16818  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
16819  {
16820  out3 << "Continuum model " << name << " is running with \n"
16821  << "user defined parameters according to model " << model << ".\n";
16822  CKD_mt_100_foreign_h2o( pxsec,
16823  parameters[0],
16824  model,
16825  f_grid,
16826  abs_p,
16827  abs_t,
16828  vmr,
16829  verbosity );
16830  }
16831  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
16832  {
16833  ostringstream os;
16834  os << "Continuum model " << name << " requires " << Nparam << " input\n"
16835  << "parameters for the model " << model << ",\n"
16836  << "but you specified " << parameters.nelem() << " parameters.\n";
16837  throw runtime_error(os.str());
16838  }
16839  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
16840  {
16841  out3 << "Continuum model " << name << " running with \n"
16842  << "the parameters for model " << model << ".\n";
16843  CKD_mt_100_foreign_h2o( pxsec,
16844  0.000,
16845  model,
16846  f_grid,
16847  abs_p,
16848  abs_t,
16849  vmr,
16850  verbosity );
16851  }
16852  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
16853  {
16854  ostringstream os;
16855  os << "ERROR: continuum model " << name << " requires NO input\n"
16856  << "parameters for the model " << model << ",\n"
16857  << "but you specified " << parameters.nelem() << " parameters.\n"
16858  << "This ambiguity can not be solved by arts.\n"
16859  << "Please see the arts user guide chapter 3.\n";
16860  throw runtime_error(os.str());
16861  }
16862  }
16863  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16864  else if ( "H2O-SelfContCKDMT250"==name )
16865  {
16866  // OUTPUT:
16867  // pxsec cross section (absorption/volume mixing ratio) of
16868  // H2O self continuum according to CKD MT 2.50 [1/m]
16869  // INPUT:
16870  // parameters[0] strength scaling factor [1]
16871  // model allows user defined input parameter set
16872  // (Cin) or choice of
16873  // pre-defined parameters of specific models (see note below).
16874  // f_grid predefined frequency grid [Hz]
16875  // abs_p predefined pressure grid [Pa]
16876  // abs_t predefined temperature grid [K]
16877  // vmr H2O volume mixing ratio profile [1]
16878  //
16879  // WWW resource: ftp.aer.com/aer_contnm_ckd
16880  const int Nparam = 1;
16881  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
16882  {
16883  out3 << "Continuum model " << name << " is running with \n"
16884  << "user defined parameters according to model " << model << ".\n";
16885  CKD_mt_250_self_h2o( pxsec,
16886  parameters[0],
16887  model,
16888  f_grid,
16889  abs_p,
16890  abs_t,
16891  vmr,
16892  verbosity );
16893  }
16894  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
16895  {
16896  ostringstream os;
16897  os << "Continuum model " << name << " requires " << Nparam << " input\n"
16898  << "parameters for the model " << model << ",\n"
16899  << "but you specified " << parameters.nelem() << " parameters.\n";
16900  throw runtime_error(os.str());
16901  }
16902  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
16903  {
16904  out3 << "Continuum model " << name << " running with \n"
16905  << "the parameters for model " << model << ".\n";
16906  CKD_mt_250_self_h2o( pxsec,
16907  0.000,
16908  model,
16909  f_grid,
16910  abs_p,
16911  abs_t,
16912  vmr,
16913  verbosity );
16914  }
16915  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
16916  {
16917  ostringstream os;
16918  os << "ERROR: continuum model " << name << " requires NO input\n"
16919  << "parameters for the model " << model << ",\n"
16920  << "but you specified " << parameters.nelem() << " parameters.\n"
16921  << "This ambiguity can not be solved by arts.\n"
16922  << "Please see the arts user guide chapter 3.\n";
16923  throw runtime_error(os.str());
16924  }
16925  }
16926  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16927  else if ( "H2O-ForeignContCKDMT250"==name )
16928  {
16929  // OUTPUT:
16930  // pxsec cross section (absorption/volume mixing ratio) of
16931  // H2O foreign continuum according to CKD MT 2.50 [1/m]
16932  // INPUT:
16933  // parameters[0] strength scaling factor [1]
16934  // model allows user defined input parameter set
16935  // (Cin) or choice of
16936  // pre-defined parameters of specific models (see note below).
16937  // f_grid predefined frequency grid [Hz]
16938  // abs_p predefined pressure grid [Pa]
16939  // abs_t predefined temperature grid [K]
16940  // vmr H2O volume mixing ratio profile [1]
16941  //
16942  // WWW resource: ftp.aer.com/aer_contnm_ckd
16943  const int Nparam = 1;
16944  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
16945  {
16946  out3 << "Continuum model " << name << " is running with \n"
16947  << "user defined parameters according to model " << model << ".\n";
16948  CKD_mt_250_foreign_h2o( pxsec,
16949  parameters[0],
16950  model,
16951  f_grid,
16952  abs_p,
16953  abs_t,
16954  vmr,
16955  verbosity );
16956  }
16957  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
16958  {
16959  ostringstream os;
16960  os << "Continuum model " << name << " requires " << Nparam << " input\n"
16961  << "parameters for the model " << model << ",\n"
16962  << "but you specified " << parameters.nelem() << " parameters.\n";
16963  throw runtime_error(os.str());
16964  }
16965  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
16966  {
16967  out3 << "Continuum model " << name << " running with \n"
16968  << "the parameters for model " << model << ".\n";
16969  CKD_mt_250_foreign_h2o( pxsec,
16970  0.000,
16971  model,
16972  f_grid,
16973  abs_p,
16974  abs_t,
16975  vmr,
16976  verbosity );
16977  }
16978  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
16979  {
16980  ostringstream os;
16981  os << "ERROR: continuum model " << name << " requires NO input\n"
16982  << "parameters for the model " << model << ",\n"
16983  << "but you specified " << parameters.nelem() << " parameters.\n"
16984  << "This ambiguity can not be solved by arts.\n"
16985  << "Please see the arts user guide chapter 3.\n";
16986  throw runtime_error(os.str());
16987  }
16988  }
16989 
16990  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16991  else if ( "H2O-SelfContCKD24"==name )
16992  {
16993  // OUTPUT:
16994  // pxsec cross section (absorption/volume mixing ratio) of
16995  // H2O continuum according to CKD2.4 [1/m]
16996  // INPUT:
16997  // parameters[0] strength scaling factor [1]
16998  // model allows user defined input parameter set
16999  // (Cin) or choice of
17000  // pre-defined parameters of specific models (see note below).
17001  // f_grid predefined frequency grid [Hz]
17002  // abs_p predefined pressure grid [Pa]
17003  // abs_t predefined temperature grid [K]
17004  // abs_n2 N2 volume mixing ratio profile [1]
17005  // vmr H2O volume mixing ratio profile [1]
17006  //
17007  // WWW resource: ftp.aer.com/aer_contnm_ckd
17008 
17009  // abs_n2 needed here. check, whether this is valid.
17010  if( abs_n2.sum() < -1. )
17011  {
17012  ostringstream os;
17013  os << "Continuum/full model tag " << name
17014  << " requires N2-vmr, but no tag group contains N2!";
17015  throw runtime_error(os.str());
17016  }
17017 
17018  const int Nparam = 1;
17019  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
17020  {
17021  out3 << "Continuum model " << name << " is running with \n"
17022  << "user defined parameters according to model " << model << ".\n";
17023  CKD24_H20( pxsec,
17024  0,
17025  parameters[0],
17026  model,
17027  f_grid,
17028  abs_p,
17029  abs_t,
17030  vmr,
17031  abs_n2,
17032  verbosity );
17033  }
17034  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
17035  {
17036  ostringstream os;
17037  os << "Continuum model " << name << " requires " << Nparam << " input\n"
17038  << "parameters for the model " << model << ",\n"
17039  << "but you specified " << parameters.nelem() << " parameters.\n";
17040  throw runtime_error(os.str());
17041  }
17042  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
17043  {
17044  out3 << "Continuum model " << name << " running with \n"
17045  << "the parameters for model " << model << ".\n";
17046  CKD24_H20( pxsec,
17047  0,
17048  0.000,
17049  model,
17050  f_grid,
17051  abs_p,
17052  abs_t,
17053  vmr,
17054  abs_n2,
17055  verbosity );
17056  }
17057  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
17058  {
17059  ostringstream os;
17060  os << "ERROR: continuum model " << name << " requires NO input\n"
17061  << "parameters for the model " << model << ",\n"
17062  << "but you specified " << parameters.nelem() << " parameters.\n"
17063  << "This ambiguity can not be solved by arts.\n"
17064  << "Please see the arts user guide chapter 3.\n";
17065  throw runtime_error(os.str());
17066  }
17067  }
17068  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17069  else if ( "H2O-ForeignContCKD24"==name )
17070  {
17071  // OUTPUT:
17072  // pxsec cross section (absorption/volume mixing ratio) of
17073  // H2O continuum according to CKD2.4 [1/m]
17074  // INPUT:
17075  // Cin strength scaling factor [1]
17076  // model allows user defined input parameter set
17077  // (Cin) or choice of
17078  // pre-defined parameters of specific models (see note below).
17079  // f_grid predefined frequency grid [Hz]
17080  // abs_p predefined pressure grid [Pa]
17081  // abs_t predefined temperature grid [K]
17082  // vmr H2O volume mixing ratio profile [1]
17083  // abs_n2 N2 volume mixing ratio profile [1]
17084  //
17085  // WWW resource: ftp.aer.com/aer_contnm_ckd
17086 
17087  if( abs_n2.sum() < -1. )
17088  {
17089  ostringstream os;
17090  os << "Continuum/full model tag " << name
17091  << " requires N2-vmr, but no tag group contains N2!";
17092  throw runtime_error(os.str());
17093  }
17094 
17095  const int Nparam = 1;
17096  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
17097  {
17098  out3 << "Continuum model " << name << " is running with \n"
17099  << "user defined parameters according to model " << model << ".\n";
17100  CKD24_H20( pxsec,
17101  1,
17102  parameters[0],
17103  model,
17104  f_grid,
17105  abs_p,
17106  abs_t,
17107  vmr,
17108  abs_n2,
17109  verbosity );
17110  }
17111  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
17112  {
17113  ostringstream os;
17114  os << "Continuum model " << name << " requires " << Nparam << " input\n"
17115  << "parameters for the model " << model << ",\n"
17116  << "but you specified " << parameters.nelem() << " parameters.\n";
17117  throw runtime_error(os.str());
17118  }
17119  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
17120  {
17121  out3 << "Continuum model " << name << " running with \n"
17122  << "the parameters for model " << model << ".\n";
17123  CKD24_H20( pxsec,
17124  1,
17125  0,
17126  model,
17127  f_grid,
17128  abs_p,
17129  abs_t,
17130  vmr,
17131  abs_n2,
17132  verbosity );
17133  }
17134  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
17135  {
17136  ostringstream os;
17137  os << "ERROR: continuum model " << name << " requires NO input\n"
17138  << "parameters for the model " << model << ",\n"
17139  << "but you specified " << parameters.nelem() << " parameters.\n"
17140  << "This ambiguity can not be solved by arts.\n"
17141  << "Please see the arts user guide chapter 3.\n";
17142  throw runtime_error(os.str());
17143  }
17144  }
17145  // ============= H2O full models ======================================================
17146  else if ( "H2O-CP98"==name )
17147  {
17148  //
17149  // specific continuum parameters and units:
17150  // OUTPUT
17151  // pxsec : [1/m],
17152  // INPUT
17153  // parameters[0] : continuum scale factor (CC) [1]
17154  // parameters[1] : line strength scale factor (CL) [1]
17155  // parameters[2] : line broadening scale factor (CW) [1]
17156  // f_grid : [Hz]
17157  // abs_p : [Pa]
17158  // abs_t : [K]
17159  // vmr : [1]
17160  //
17161  const int Nparam = 3;
17162  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
17163  {
17164  out3 << "Full model " << name << " is running with \n"
17165  << "user defined parameters according to model " << model << ".\n";
17166  CP98H2OAbsModel( pxsec,
17167  parameters[0],
17168  parameters[1],
17169  parameters[2],
17170  model,
17171  f_grid,
17172  abs_p,
17173  abs_t,
17174  vmr,
17175  verbosity );
17176  }
17177  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
17178  {
17179  ostringstream os;
17180  os << "Full model " << name << " requires " << Nparam << " input\n"
17181  << "parameters for the model " << model << ",\n"
17182  << "but you specified " << parameters.nelem() << " parameters.\n";
17183  throw runtime_error(os.str());
17184  }
17185  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
17186  {
17187  out3 << "Full model " << name << " running with \n"
17188  << "the parameters for model " << model << ".\n";
17189  CP98H2OAbsModel( pxsec,
17190  0.00,
17191  0.00,
17192  0.00,
17193  model,
17194  f_grid,
17195  abs_p,
17196  abs_t,
17197  vmr,
17198  verbosity );
17199  }
17200  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
17201  {
17202  ostringstream os;
17203  os << "ERROR: Full model " << name << " requires NO input\n"
17204  << "parameters for the model " << model << ",\n"
17205  << "but you specified " << parameters.nelem() << " parameters.\n"
17206  << "This ambiguity can not be solved by arts.\n"
17207  << "Please see the arts user guide chapter 3.\n";
17208  throw runtime_error(os.str());
17209  }
17210  }
17211  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17212  else if ( "H2O-MPM87"==name )
17213  {
17214  //
17215  // specific continuum parameters and units:
17216  // a) output
17217  // pxsec : [1/m],
17218  // b) input
17219  // parameters[0] : continuum scale factor (CC) [1]
17220  // parameters[1] : line strength scale factor (CL) [1]
17221  // parameters[2] : line broadening scale factor (CW) [1]
17222  // f_grid : [Hz]
17223  // abs_p : [Pa]
17224  // abs_t : [K]
17225  // vmr : [1]
17226  //
17227  const int Nparam = 3;
17228  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
17229  {
17230  out3 << "Full model " << name << " is running with \n"
17231  << "user defined parameters according to model " << model << ".\n";
17232  MPM87H2OAbsModel( pxsec,
17233  parameters[0],
17234  parameters[1],
17235  parameters[2],
17236  model,
17237  f_grid,
17238  abs_p,
17239  abs_t,
17240  vmr,
17241  verbosity );
17242  }
17243  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
17244  {
17245  ostringstream os;
17246  os << "Full model " << name << " requires " << Nparam << " input\n"
17247  << "parameters for the model " << model << ",\n"
17248  << "but you specified " << parameters.nelem() << " parameters.\n";
17249  throw runtime_error(os.str());
17250  }
17251  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
17252  {
17253  out3 << "Full model " << name << " running with \n"
17254  << "the parameters for model " << model << ".\n";
17255  MPM87H2OAbsModel( pxsec,
17256  0.00,
17257  0.00,
17258  0.00,
17259  model,
17260  f_grid,
17261  abs_p,
17262  abs_t,
17263  vmr,
17264  verbosity );
17265  }
17266  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
17267  {
17268  ostringstream os;
17269  os << "ERROR: Full model " << name << " requires NO input\n"
17270  << "parameters for the model " << model << ",\n"
17271  << "but you specified " << parameters.nelem() << " parameters.\n"
17272  << "This ambiguity can not be solved by arts.\n"
17273  << "Please see the arts user guide chapter 3.\n";
17274  throw runtime_error(os.str());
17275  }
17276  }
17277  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17278  else if ( "H2O-MPM89"==name )
17279  {
17280  //
17281  // specific continuum parameters and units:
17282  // a) output
17283  // pxsec : [1/m],
17284  // b) input
17285  // parameters[0] : continuum scale factor (CC) [1]
17286  // parameters[1] : line strength scale factor (CL) [1]
17287  // parameters[2] : line broadening scale factor (CW [1]
17288  // f_grid : [Hz]
17289  // abs_p : [Pa]
17290  // abs_t : [K]
17291  // vmr : [1]
17292  //
17293  const int Nparam = 3;
17294  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
17295  {
17296  out3 << "Full model " << name << " is running with \n"
17297  << "user defined parameters according to model " << model << ".\n";
17298  MPM89H2OAbsModel( pxsec,
17299  parameters[0],
17300  parameters[1],
17301  parameters[2],
17302  model,
17303  f_grid,
17304  abs_p,
17305  abs_t,
17306  vmr,
17307  verbosity );
17308  }
17309  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
17310  {
17311  ostringstream os;
17312  os << "Full model " << name << " requires " << Nparam << " input\n"
17313  << "parameters for the model " << model << ",\n"
17314  << "but you specified " << parameters.nelem() << " parameters.\n";
17315  throw runtime_error(os.str());
17316  }
17317  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
17318  {
17319  out3 << "Full model " << name << " running with \n"
17320  << "the parameters for model " << model << ".\n";
17321  MPM89H2OAbsModel( pxsec,
17322  0.00,
17323  0.00,
17324  0.00,
17325  model,
17326  f_grid,
17327  abs_p,
17328  abs_t,
17329  vmr,
17330  verbosity );
17331  }
17332  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
17333  {
17334  ostringstream os;
17335  os << "ERROR: Full model " << name << " requires NO input\n"
17336  << "parameters for the model " << model << ",\n"
17337  << "but you specified " << parameters.nelem() << " parameters.\n"
17338  << "This ambiguity can not be solved by arts.\n"
17339  << "Please see the arts user guide chapter 3.\n";
17340  throw runtime_error(os.str());
17341  }
17342  }
17343  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17344  else if ( "H2O-MPM93"==name )
17345  {
17346  //
17347  // specific continuum parameters and units:
17348  // OUTPUT
17349  // pxsec : [1/m],
17350  // INPUT
17351  // parameters[0] : continuum scale factor (CC) [1]
17352  // parameters[1] : line strength scale factor (CL) [1]
17353  // parameters[2] : line broadening scale factor (CW) [1]
17354  // f_grid : [Hz]
17355  // abs_p : [Pa]
17356  // abs_t : [K]
17357  // vmr : [1]
17358  //
17359  const int Nparam = 3;
17360  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
17361  {
17362  out3 << "Full model " << name << " is running with \n"
17363  << "user defined parameters according to model " << model << ".\n";
17364  MPM93H2OAbsModel( pxsec,
17365  parameters[0],
17366  parameters[1],
17367  parameters[2],
17368  model,
17369  f_grid,
17370  abs_p,
17371  abs_t,
17372  vmr,
17373  verbosity );
17374  }
17375  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
17376  {
17377  ostringstream os;
17378  os << "Full model " << name << " requires " << Nparam << " input\n"
17379  << "parameters for the model " << model << ",\n"
17380  << "but you specified " << parameters.nelem() << " parameters.\n";
17381  throw runtime_error(os.str());
17382  }
17383  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
17384  {
17385  out3 << "Full model " << name << " running with \n"
17386  << "the parameters for model " << model << ".\n";
17387  MPM93H2OAbsModel( pxsec,
17388  0.00,
17389  0.00,
17390  0.00,
17391  model,
17392  f_grid,
17393  abs_p,
17394  abs_t,
17395  vmr,
17396  verbosity );
17397  }
17398  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
17399  {
17400  ostringstream os;
17401  os << "ERROR: Full model " << name << " requires NO input\n"
17402  << "parameters for the model " << model << ",\n"
17403  << "but you specified " << parameters.nelem() << " parameters.\n"
17404  << "This ambiguity can not be solved by arts.\n"
17405  << "Please see the arts user guide chapter 3.\n";
17406  throw runtime_error(os.str());
17407  }
17408  }
17409  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17410  else if ( "H2O-PWR98"==name )
17411  {
17412  // specific continuum parameters and units:
17413  // OUTPUT
17414  // pxsec : [1/m],
17415  // INPUT
17416  // parameters[0] : continuum scale factor (CC) [1]
17417  // parameters[1] : line strength scale factor (CL) [1]
17418  // parameters[2] : line broadening scale factor (CW) [1]
17419  // f_grid : [Hz]
17420  // abs_p : [Pa]
17421  // abs_t : [K]
17422  // vmr : [1]
17423  //
17424  const int Nparam = 3;
17425  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
17426  {
17427  out3 << "Full model " << name << " is running with \n"
17428  << "user defined parameters according to model " << model << ".\n";
17429  PWR98H2OAbsModel( pxsec,
17430  parameters[0],
17431  parameters[1],
17432  parameters[2],
17433  model,
17434  f_grid,
17435  abs_p,
17436  abs_t,
17437  vmr,
17438  verbosity );
17439  }
17440  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
17441  {
17442  ostringstream os;
17443  os << "Full model " << name << " requires " << Nparam << " input\n"
17444  << "parameters for the model " << model << ",\n"
17445  << "but you specified " << parameters.nelem() << " parameters.\n";
17446  throw runtime_error(os.str());
17447  }
17448  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
17449  {
17450  out3 << "Full model " << name << " running with \n"
17451  << "the parameters for model " << model << ".\n";
17452  PWR98H2OAbsModel( pxsec,
17453  0.00,
17454  0.00,
17455  0.00,
17456  model,
17457  f_grid,
17458  abs_p,
17459  abs_t,
17460  vmr,
17461  verbosity );
17462  }
17463  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
17464  {
17465  ostringstream os;
17466  os << "ERROR: Full model " << name << " requires NO input\n"
17467  << "parameters for the model " << model << ",\n"
17468  << "but you specified " << parameters.nelem() << " parameters.\n"
17469  << "This ambiguity can not be solved by arts.\n"
17470  << "Please see the arts user guide chapter 3.\n";
17471  throw runtime_error(os.str());
17472  }
17473  }
17474  // ============= O2 continuum =========================================================
17475  else if ( "O2-CIAfunCKDMT100"==name )
17476  {
17477  // Model reference:
17478  // F. Thibault, V. Menoux, R. Le Doucen, L. Rosenman,
17479  // J.-M. Hartmann, Ch. Boulet,
17480  // "Infrared collision-induced absorption by O2 near 6.4 microns for
17481  // atmospheric applications: measurements and emprirical modeling",
17482  // Appl. Optics, 35, 5911-5917, (1996).
17483  //
17484  // specific continuum parameters and units:
17485  // OUTPUT
17486  // pxsec : [1/m],
17487  // INPUT
17488  // parameters[0] : continuum scaling
17489  // model : model option ("CKD" or "user")
17490  // f_grid : [Hz]
17491  // abs_p : [Pa]
17492  // abs_t : [K]
17493  // vmr : [1]
17494  //
17495  const int Nparam = 1;
17496  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
17497  {
17498  out3 << "Continuum model " << name << " is running with \n"
17499  << "user defined parameters according to model " << model << ".\n";
17500  CKD_mt_CIAfun_o2( pxsec,
17501  parameters[0],
17502  model,
17503  f_grid,
17504  abs_p,
17505  abs_t,
17506  vmr,
17507  verbosity );
17508  }
17509  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
17510  {
17511  ostringstream os;
17512  os << "Continuum model " << name << " requires " << Nparam << " input\n"
17513  << "parameters for the model " << model << ",\n"
17514  << "but you specified " << parameters.nelem() << " parameters.\n";
17515  throw runtime_error(os.str());
17516  }
17517  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
17518  {
17519  out3 << "Continuum model " << name << " running with \n"
17520  << "the parameters for model " << model << ".\n";
17521  CKD_mt_CIAfun_o2( pxsec,
17522  0.00e0,
17523  model,
17524  f_grid,
17525  abs_p,
17526  abs_t,
17527  vmr,
17528  verbosity );
17529  }
17530  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
17531  {
17532  ostringstream os;
17533  os << "ERROR: Continuum model " << name << " requires NO input\n"
17534  << "parameters for the model " << model << ",\n"
17535  << "but you specified " << parameters.nelem() << " parameters.\n"
17536  << "This ambiguity can not be solved by arts.\n"
17537  << "Please see the arts user guide chapter 3.\n";
17538  throw runtime_error(os.str());
17539  }
17540  }
17541  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17542  else if ( "O2-v0v0CKDMT100"==name )
17543  {
17544  // Model reference:
17545  // B. Mate, C. Lugez, G.T. Fraser, W.J. Lafferty,
17546  // "Absolute Intensities for the O2 1.27 micron
17547  // continuum absorption",
17548  // J. Geophys. Res., 104, 30,585-30,590, 1999.
17549  //
17550  // specific continuum parameters and units:
17551  // OUTPUT
17552  // pxsec : [1/m],
17553  // INPUT
17554  // parameters[0] : continuum scaling
17555  // model : model option ("CKD" or "user")
17556  // f_grid : [Hz]
17557  // abs_p : [Pa]
17558  // abs_t : [K]
17559  // vmr : [1]
17560  // abs_n2 : [1]
17561  //
17562 
17563  if( abs_n2.sum() < -1. )
17564  {
17565  ostringstream os;
17566  os << "Continuum/full model tag " << name
17567  << " requires N2-vmr, but no tag group contains N2!";
17568  throw runtime_error(os.str());
17569  }
17570 
17571  const int Nparam = 1;
17572  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
17573  {
17574  out3 << "Continuum model " << name << " is running with \n"
17575  << "user defined parameters according to model " << model << ".\n";
17576  CKD_mt_v0v0_o2( pxsec,
17577  parameters[0],
17578  model,
17579  f_grid,
17580  abs_p,
17581  abs_t,
17582  vmr,
17583  abs_n2,
17584  verbosity );
17585  }
17586  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
17587  {
17588  ostringstream os;
17589  os << "Continuum model " << name << " requires " << Nparam << " input\n"
17590  << "parameters for the model " << model << ",\n"
17591  << "but you specified " << parameters.nelem() << " parameters.\n";
17592  throw runtime_error(os.str());
17593  }
17594  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
17595  {
17596  out3 << "Continuum model " << name << " running with \n"
17597  << "the parameters for model " << model << ".\n";
17598  CKD_mt_v0v0_o2( pxsec,
17599  0.0e0,
17600  model,
17601  f_grid,
17602  abs_p,
17603  abs_t,
17604  vmr,
17605  abs_n2,
17606  verbosity );
17607  }
17608  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
17609  {
17610  ostringstream os;
17611  os << "ERROR: Continuum model " << name << " requires NO input\n"
17612  << "parameters for the model " << model << ",\n"
17613  << "but you specified " << parameters.nelem() << " parameters.\n"
17614  << "This ambiguity can not be solved by arts.\n"
17615  << "Please see the arts user guide chapter 3.\n";
17616  throw runtime_error(os.str());
17617  }
17618  }
17619  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17620  else if ( "O2-v1v0CKDMT100"==name )
17621  {
17622  // Model reference:
17623  // Mlawer, Clough, Brown, Stephen, Landry, Goldman, Murcray,
17624  // "Observed Atmospheric Collision Induced Absorption in Near Infrared Oxygen Bands",
17625  // Journal of Geophysical Research, vol 103, no. D4, pp. 3859-3863, 1998.
17626  //
17627  // specific continuum parameters and units:
17628  // OUTPUT
17629  // pxsec : [1/m],
17630  // INPUT
17631  // parameters[0] : continuum scaling
17632  // model : model option ("CKD" or "user")
17633  // f_grid : [Hz]
17634  // abs_p : [Pa]
17635  // abs_t : [K]
17636  // vmr : [1]
17637  //
17638  const int Nparam = 1;
17639  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
17640  {
17641  out3 << "Continuum model " << name << " is running with \n"
17642  << "user defined parameters according to model " << model << ".\n";
17643  CKD_mt_v1v0_o2( pxsec,
17644  parameters[0],
17645  model,
17646  f_grid,
17647  abs_p,
17648  abs_t,
17649  vmr,
17650  verbosity );
17651  }
17652  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
17653  {
17654  ostringstream os;
17655  os << "Continuum model " << name << " requires " << Nparam << " input\n"
17656  << "parameters for the model " << model << ",\n"
17657  << "but you specified " << parameters.nelem() << " parameters.\n";
17658  throw runtime_error(os.str());
17659  }
17660  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
17661  {
17662  out3 << "Continuum model " << name << " running with \n"
17663  << "the parameters for model " << model << ".\n";
17664  CKD_mt_v1v0_o2( pxsec,
17665  0.0e0,
17666  model,
17667  f_grid,
17668  abs_p,
17669  abs_t,
17670  vmr,
17671  verbosity );
17672  }
17673  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
17674  {
17675  ostringstream os;
17676  os << "ERROR: Continuum model " << name << " requires NO input\n"
17677  << "parameters for the model " << model << ",\n"
17678  << "but you specified " << parameters.nelem() << " parameters.\n"
17679  << "This ambiguity can not be solved by arts.\n"
17680  << "Please see the ARTS User Guide.\n";
17681  throw runtime_error(os.str());
17682  }
17683  }
17684 
17685  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17686  else if ( "O2-visCKDMT250"==name )
17687  {
17688  // Model reference:
17689  // O2 continuum formulated by Greenblatt et al. over the spectral region
17690  // 8797-29870 cm-1: "Absorption Coefficients of Oxygen Between
17691  // 330 and 1140 nm, G.D. Green blatt, J.J. Orlando, J.B. Burkholder,
17692  // and A.R. Ravishabkara, J. Geophys. Res., 95, 18577-18582, 1990.
17693  //
17694  // specific continuum parameters and units:
17695  // OUTPUT
17696  // pxsec : [1/m],
17697  // INPUT
17698  // parameters[0] : continuum scaling
17699  // model : model option ("CKD" or "user")
17700  // f_grid : [Hz]
17701  // abs_p : [Pa]
17702  // abs_t : [K]
17703  // vmr : [1]
17704  //
17705  const int Nparam = 1;
17706  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
17707  {
17708  out3 << "Continuum model " << name << " is running with \n"
17709  << "user defined parameters according to model " << model << ".\n";
17710  CKD_mt_250_o2_vis( pxsec,
17711  parameters[0],
17712  model,
17713  f_grid,
17714  abs_p,
17715  abs_t,
17716  vmr,
17717  verbosity );
17718  }
17719  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
17720  {
17721  ostringstream os;
17722  os << "Continuum model " << name << " requires " << Nparam << " input\n"
17723  << "parameters for the model " << model << ",\n"
17724  << "but you specified " << parameters.nelem() << " parameters.\n";
17725  throw runtime_error(os.str());
17726  }
17727  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
17728  {
17729  out3 << "Continuum model " << name << " running with \n"
17730  << "the parameters for model " << model << ".\n";
17731  CKD_mt_250_o2_vis( pxsec,
17732  0.0e0,
17733  model,
17734  f_grid,
17735  abs_p,
17736  abs_t,
17737  vmr,
17738  verbosity );
17739  }
17740  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
17741  {
17742  ostringstream os;
17743  os << "ERROR: Continuum model " << name << " requires NO input\n"
17744  << "parameters for the model " << model << ",\n"
17745  << "but you specified " << parameters.nelem() << " parameters.\n"
17746  << "This ambiguity can not be solved by arts.\n"
17747  << "Please see the arts user guide chapter 3.\n";
17748  throw runtime_error(os.str());
17749  }
17750  }
17751 
17752  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17753 
17754  else if ( "O2-SelfContStandardType"==name )
17755  {
17756  // MPM93, Rosenkranz 1993 O2 continuum:
17757  // see publication side of National Telecommunications and Information Administration
17758  // http://www.its.bldrdoc.gov/pub/all_pubs/all_pubs.html
17759  // and ftp side for downloading the MPM93 original source code:
17760  // ftp://ftp.its.bldrdoc.gov/pub/mpm93/
17761  //
17762  // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen,
17763  // "Atmospheric Remote Sensing by Microwave Radiometry",
17764  // John Wiley & Sons, Inc., 1993, ISBN 0-471-62891-3
17765  // (see also JQSRT, Vol.48, No.5/6 pp.629-643, 1992)
17766  //
17767  // specific continuum parameters and units:
17768  // OUTPUT
17769  // pxsec : [1/m],
17770  // INPUT
17771  // parameters[0] : continuum coefficient (C) [1/m*1/Hz*1/Pa]
17772  // parameters[1] : frequency coefficient (G0) [Hz/Pa]
17773  // parameters[3] : line width parameter (G0A) [1]
17774  // parameters[3] : line width parameter (G0B) [1]
17775  // parameters[2] : temperature exponent (XG0d) [1]
17776  // parameters[2] : temperature exponent (x_s) [1]
17777  // parameters[5] : continuum coefficient (XG0w) [1]
17778  // model : model option ("MPM93", "Rosenkranz", or "user")
17779  // f_grid : [Hz]
17780  // abs_p : [Pa]
17781  // abs_t : [K]
17782  // abs_h2o : [1]
17783  // vmr : [1]
17784  //
17785 
17786  if( abs_h2o.sum() < -1. )
17787  {
17788  ostringstream os;
17789  os << "Continuum/full model tag " << name
17790  << " requires H2O-vmr, but no tag group contains H2O!";
17791  throw runtime_error(os.str());
17792  }
17793 
17794  const int Nparam = 6;
17795  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
17796  {
17797  out3 << "Continuum model " << name << " is running with \n"
17798  << "user defined parameters according to model " << model << ".\n";
17799  Standard_O2_continuum( pxsec,
17800  parameters[0],
17801  parameters[1],
17802  parameters[2],
17803  parameters[3],
17804  parameters[4],
17805  parameters[5],
17806  model,
17807  f_grid,
17808  abs_p,
17809  abs_t,
17810  abs_h2o,
17811  vmr,
17812  verbosity );
17813  }
17814  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
17815  {
17816  ostringstream os;
17817  os << "Continuum model " << name << " requires " << Nparam << " input\n"
17818  << "parameters for the model " << model << ",\n"
17819  << "but you specified " << parameters.nelem() << " parameters.\n";
17820  throw runtime_error(os.str());
17821  }
17822  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
17823  {
17824  out3 << "Continuum model " << name << " running with \n"
17825  << "the parameters for model " << model << ".\n";
17826  Standard_O2_continuum( pxsec,
17827  0.00,
17828  0.00,
17829  0.00,
17830  0.00,
17831  0.00,
17832  0.00,
17833  model,
17834  f_grid,
17835  abs_p,
17836  abs_t,
17837  abs_h2o,
17838  vmr,
17839  verbosity );
17840  }
17841  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
17842  {
17843  ostringstream os;
17844  os << "ERROR: Continuum model " << name << " requires NO input\n"
17845  << "parameters for the model " << model << ",\n"
17846  << "but you specified " << parameters.nelem() << " parameters.\n"
17847  << "This ambiguity can not be solved by arts.\n"
17848  << "Please see the arts user guide chapter 3.\n";
17849  throw runtime_error(os.str());
17850  }
17851  }
17852  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17853  else if ( "O2-SelfContMPM93"==name )
17854  {
17855  // MPM93 O2 continuum:
17856  // see publication side of National Telecommunications and Information Administration
17857  // http://www.its.bldrdoc.gov/pub/all_pubs/all_pubs.html
17858  // and ftp side for downloading the MPM93 original source code:
17859  // ftp://ftp.its.bldrdoc.gov/pub/mpm93/
17860 
17861  //
17862  // specific continuum parameters and units:
17863  // OUTPUT
17864  // pxsec : [1/m],
17865  // INPUT
17866  // parameters[0] : continuum coefficient (C) [1/m / (Hz²*Pa²)]
17867  // parameters[1] : temperature exponent (x_s) [1]
17868  // f_grid : [Hz]
17869  // abs_p : [Pa]
17870  // abs_t : [K]
17871  // abs_h2o : [1]
17872  // vmr : [1]
17873  //
17874 
17875  if( abs_h2o.sum() < -1. )
17876  {
17877  ostringstream os;
17878  os << "Continuum/full model tag " << name
17879  << " requires H2O-vmr, but no tag group contains H2O!";
17880  throw runtime_error(os.str());
17881  }
17882 
17883  const int Nparam = 4;
17884  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
17885  {
17886  out3 << "Continuum model " << name << " is running with \n"
17887  << "user defined parameters according to model " << model << ".\n";
17888  MPM93_O2_continuum( pxsec,
17889  parameters[0],
17890  parameters[1],
17891  parameters[2],
17892  parameters[3],
17893  model,
17894  f_grid,
17895  abs_p,
17896  abs_t,
17897  abs_h2o,
17898  vmr,
17899  verbosity );
17900  }
17901  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
17902  {
17903  ostringstream os;
17904  os << "Continuum model " << name << " requires " << Nparam << " input\n"
17905  << "parameters for the model " << model << ",\n"
17906  << "but you specified " << parameters.nelem() << " parameters.\n";
17907  throw runtime_error(os.str());
17908  }
17909  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
17910  {
17911  out3 << "Continuum model " << name << " running with \n"
17912  << "the parameters for model " << model << ".\n";
17913  MPM93_O2_continuum( pxsec,
17914  0.00,
17915  0.00,
17916  0.00,
17917  0.00,
17918  model,
17919  f_grid,
17920  abs_p,
17921  abs_t,
17922  abs_h2o,
17923  vmr,
17924  verbosity );
17925  }
17926  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
17927  {
17928  ostringstream os;
17929  os << "ERROR: Continuum model " << name << " requires NO input\n"
17930  << "parameters for the model " << model << ",\n"
17931  << "but you specified " << parameters.nelem() << " parameters.\n"
17932  << "This ambiguity can not be solved by arts.\n"
17933  << "Please see the arts user guide chapter 3.\n";
17934  throw runtime_error(os.str());
17935  }
17936  }
17937  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17938  else if ( "O2-SelfContPWR93"==name )
17939  {
17940  // data information about this continuum:
17941  // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen,
17942  // "Atmospheric Remote Sensing by Microwave Radiometry",
17943  // John Wiley & Sons, Inc., 1993, ISBN 0-471-62891-3
17944  // (see also JQSRT, Vol.48, No.5/6 pp.629-643, 1992)
17945  //
17946  // specific continuum parameters and units:
17947  // OUTPUT
17948  // pxsec : [1/m],
17949  // INPUT
17950  // parameters[0] : continuum coefficient (C) [K²/(Hz*Pa*m)]
17951  // parameters[1] : temperature exponent (x) [1]
17952  // f_grid : [Hz]
17953  // abs_p : [Pa]
17954  // abs_t : [K]
17955  // vmr : [1]
17956  //
17957 
17958  if( abs_h2o.sum() < -1. )
17959  {
17960  ostringstream os;
17961  os << "Continuum/full model tag " << name
17962  << " requires H2O-vmr, but no tag group contains H2O!";
17963  throw runtime_error(os.str());
17964  }
17965 
17966  const int Nparam = 4;
17967  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
17968  {
17969  out3 << "Continuum model " << name << " is running with \n"
17970  << "user defined parameters according to model " << model << ".\n";
17971  Rosenkranz_O2_continuum( pxsec,
17972  parameters[0],
17973  parameters[1],
17974  parameters[2],
17975  parameters[3],
17976  model,
17977  f_grid,
17978  abs_p,
17979  abs_t,
17980  abs_h2o,
17981  vmr,
17982  verbosity );
17983  }
17984  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
17985  {
17986  ostringstream os;
17987  os << "Continuum model " << name << " requires " << Nparam << " input\n"
17988  << "parameters for the model " << model << ",\n"
17989  << "but you specified " << parameters.nelem() << " parameters.\n";
17990  throw runtime_error(os.str());
17991  }
17992  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
17993  {
17994  out3 << "Continuum model " << name << " running with \n"
17995  << "the parameters for model " << model << ".\n";
17996  Rosenkranz_O2_continuum( pxsec,
17997  0.00,
17998  0.00,
17999  0.00,
18000  0.00,
18001  model,
18002  f_grid,
18003  abs_p,
18004  abs_t,
18005  abs_h2o,
18006  vmr,
18007  verbosity );
18008  }
18009  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18010  {
18011  ostringstream os;
18012  os << "ERROR: Continuum model " << name << " requires NO input\n"
18013  << "parameters for the model " << model << ",\n"
18014  << "but you specified " << parameters.nelem() << " parameters.\n"
18015  << "This ambiguity can not be solved by arts.\n"
18016  << "Please see the arts user guide chapter 3.\n";
18017  throw runtime_error(os.str());
18018  }
18019  }
18020  // ============= O2 full model ========================================================
18021  else if ( "O2-PWR88"==name )
18022  {
18023  // REFERENCE FOR EQUATIONS AND COEFFICIENTS:
18024  // P.W. ROSENKRANZ, CHAP. 2 AND APPENDIX, IN ATMOSPHERIC REMOTE SENSING
18025  // BY MICROWAVE RADIOMETRY (M.A. JANSSEN, ED. 1993)
18026  // AND
18027  // H.J. LIEBE ET AL, JQSRT V.48, PP.629-643 (1992)
18028  // (EXCEPT: SUBMILLIMETER LINE INTENSITIES FROM HITRAN92)
18029  // AND
18030  // P. W. ROSENKRANZ, INTERFERENCE COEFFICIENTS FOR THE
18031  // OVERLAPPING OXYGEN LINES IN AIR, JQSRT, 1988, VOLUME 39, 287-297.
18032  //
18033  // the only difference to the 1993 version is the line mixing
18034  // parameter Y, which is taken from the above reference JQSRT, 1988.
18035  //
18036  // specific continuum parameters and units:
18037  // OUTPUT
18038  // pxsec : [1/m],
18039  // INPUT
18040  // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
18041  // parameters[1] : line strength scale factor, default CL = 1.000 [1]
18042  // parameters[1] : line broadening scale factor, default CW = 1.000 [1]
18043  // parameters[1] : line coupling scale factor, default CO = 1.000 [1]
18044  // f_grid : [Hz]
18045  // abs_p : [Pa]
18046  // abs_t : [K]
18047  // abs_h2o, : [1]
18048  // vmr : [1]
18049  //
18050 
18051  if( abs_h2o.sum() < -1. )
18052  {
18053  ostringstream os;
18054  os << "Continuum/full model tag " << name
18055  << " requires H2O-vmr, but no tag group contains H2O!";
18056  throw runtime_error(os.str());
18057  }
18058 
18059  const int Nparam = 4;
18060  const char *version="PWR88";
18061  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
18062  {
18063  out3 << "Full model " << name << " is running with \n"
18064  << "user defined parameters according to model " << model << ".\n";
18065  PWR93O2AbsModel( pxsec,
18066  parameters[0], // continuum term scale factor
18067  parameters[1], // line strength scale factor
18068  parameters[2], // line broadening scale factor
18069  parameters[3], // line coupling scale factor
18070  model,
18071  version,
18072  f_grid,
18073  abs_p,
18074  abs_t,
18075  abs_h2o,
18076  vmr,
18077  verbosity );
18078  }
18079  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
18080  {
18081  ostringstream os;
18082  os << "Full model " << name << " requires " << Nparam << " input\n"
18083  << "parameters for the model " << model << ",\n"
18084  << "but you specified " << parameters.nelem() << " parameters.\n";
18085  throw runtime_error(os.str());
18086  }
18087  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
18088  {
18089  out3 << "Full model " << name << " running with \n"
18090  << "the parameters for model " << model << ".\n";
18091  PWR93O2AbsModel( pxsec,
18092  0.00,
18093  0.00,
18094  0.00,
18095  0.00,
18096  model,
18097  version,
18098  f_grid,
18099  abs_p,
18100  abs_t,
18101  abs_h2o,
18102  vmr,
18103  verbosity );
18104  }
18105  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18106  {
18107  ostringstream os;
18108  os << "ERROR: Full model " << name << " requires NO input\n"
18109  << "parameters for the model " << model << ",\n"
18110  << "but you specified " << parameters.nelem() << " parameters.\n"
18111  << "This ambiguity can not be solved by arts.\n"
18112  << "Please see the arts user guide chapter 3.\n";
18113  throw runtime_error(os.str());
18114  }
18115  }
18116  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18117  else if ( "O2-PWR93"==name )
18118  {
18119  // REFERENCE FOR EQUATIONS AND COEFFICIENTS:
18120  // P.W. ROSENKRANZ, CHAP. 2 AND APPENDIX, IN ATMOSPHERIC REMOTE SENSING
18121  // BY MICROWAVE RADIOMETRY (M.A. JANSSEN, ED. 1993)
18122  // AND H.J. LIEBE ET AL, JQSRT V.48, PP.629-643 (1992)
18123  // (EXCEPT: SUBMILLIMETER LINE INTENSITIES FROM HITRAN92)
18124  //
18125  // specific continuum parameters and units:
18126  // OUTPUT
18127  // pxsec : [1/m],
18128  // INPUT
18129  // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
18130  // parameters[1] : line strength scale factor, default CL = 1.000 [1]
18131  // parameters[1] : line broadening scale factor, default CW = 1.000 [1]
18132  // parameters[1] : line coupling scale factor, default CO = 1.000 [1]
18133  // f_grid : [Hz]
18134  // abs_p : [Pa]
18135  // abs_t : [K]
18136  // abs_h2o, : [1]
18137  // vmr : [1]
18138  //
18139 
18140  if( abs_h2o.sum() < -1. )
18141  {
18142  ostringstream os;
18143  os << "Continuum/full model tag " << name
18144  << " requires H2O-vmr, but no tag group contains H2O!";
18145  throw runtime_error(os.str());
18146  }
18147 
18148  const int Nparam = 4;
18149  const char *version="PWR93";
18150  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
18151  {
18152  out3 << "Full model " << name << " is running with \n"
18153  << "user defined parameters according to model " << model << ".\n";
18154  PWR93O2AbsModel( pxsec,
18155  parameters[0], // continuum term scale factor
18156  parameters[1], // line strength scale factor
18157  parameters[2], // line broadening scale factor
18158  parameters[3], // line coupling scale factor
18159  model,
18160  version,
18161  f_grid,
18162  abs_p,
18163  abs_t,
18164  abs_h2o,
18165  vmr,
18166  verbosity );
18167  }
18168  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
18169  {
18170  ostringstream os;
18171  os << "Full model " << name << " requires " << Nparam << " input\n"
18172  << "parameters for the model " << model << ",\n"
18173  << "but you specified " << parameters.nelem() << " parameters.\n";
18174  throw runtime_error(os.str());
18175  }
18176  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
18177  {
18178  out3 << "Full model " << name << " running with \n"
18179  << "the parameters for model " << model << ".\n";
18180  PWR93O2AbsModel( pxsec,
18181  0.00,
18182  0.00,
18183  0.00,
18184  0.00,
18185  model,
18186  version,
18187  f_grid,
18188  abs_p,
18189  abs_t,
18190  abs_h2o,
18191  vmr,
18192  verbosity );
18193  }
18194  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18195  {
18196  ostringstream os;
18197  os << "ERROR: Full model " << name << " requires NO input\n"
18198  << "parameters for the model " << model << ",\n"
18199  << "but you specified " << parameters.nelem() << " parameters.\n"
18200  << "This ambiguity can not be solved by arts.\n"
18201  << "Please see the arts user guide chapter 3.\n";
18202  throw runtime_error(os.str());
18203  }
18204  }
18205  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18206  else if ( "O2-PWR98"==name )
18207  {
18208  // REFERENCES FOR EQUATIONS AND COEFFICIENTS:
18209  // P.W. Rosenkranz, CHAP. 2 and appendix, in ATMOSPHERIC REMOTE SENSING
18210  // BY MICROWAVE RADIOMETRY (M.A. Janssen, ed., 1993).
18211  // H.J. Liebe et al, JQSRT V.48, PP.629-643 (1992).
18212  // M.J. Schwartz, Ph.D. thesis, M.I.T. (1997).
18213  // SUBMILLIMETER LINE INTENSITIES FROM HITRAN96.
18214  // This version differs from Liebe's MPM92 in two significant respects:
18215  // 1. It uses the modification of the 1- line width temperature dependence
18216  // recommended by Schwartz: (1/T).
18217  // 2. It uses the same temperature dependence (X) for submillimeter
18218  // line widths as in the 60 GHz band: (1/T)**0.8
18219  //
18220  // specific continuum parameters and units:
18221  // OUTPUT
18222  // pxsec : [1/m],
18223  // INPUT
18224  // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
18225  // parameters[1] : line strength scale factor, default CL = 1.000 [1]
18226  // parameters[1] : line broadening scale factor, default CW = 1.000 [1]
18227  // parameters[1] : line coupling scale factor, default CO = 1.000 [1]
18228  // f_grid : [Hz]
18229  // abs_p : [Pa]
18230  // abs_t : [K]
18231  // abs_h2o, : [1]
18232  // vmr : [1]
18233  //
18234 
18235  // abs_h2o needed here. check, whether this is valid.
18236  if( abs_h2o.sum() < -1. )
18237  {
18238  ostringstream os;
18239  os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!";
18240  throw runtime_error(os.str());
18241  }
18242 
18243  const int Nparam = 4;
18244  const char *version="PWR98";
18245  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
18246  {
18247  out3 << "Full model " << name << " is running with \n"
18248  << "user defined parameters according to model " << model << ".\n";
18249  PWR93O2AbsModel( pxsec,
18250  parameters[0], // continuum term scale factor
18251  parameters[1], // line strength scale factor
18252  parameters[2], // line broadening scale factor
18253  parameters[3], // line coupling scale factor
18254  model,
18255  version,
18256  f_grid,
18257  abs_p,
18258  abs_t,
18259  abs_h2o,
18260  vmr,
18261  verbosity );
18262  }
18263  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
18264  {
18265  ostringstream os;
18266  os << "Full model " << name << " requires " << Nparam << " input\n"
18267  << "parameters for the model " << model << ",\n"
18268  << "but you specified " << parameters.nelem() << " parameters.\n";
18269  throw runtime_error(os.str());
18270  }
18271  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
18272  {
18273  out3 << "Full model " << name << " running with \n"
18274  << "the parameters for model " << model << ".\n";
18275  PWR93O2AbsModel( pxsec,
18276  0.00,
18277  0.00,
18278  0.00,
18279  0.00,
18280  model,
18281  version,
18282  f_grid,
18283  abs_p,
18284  abs_t,
18285  abs_h2o,
18286  vmr,
18287  verbosity );
18288  }
18289  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18290  {
18291  ostringstream os;
18292  os << "ERROR: Full model " << name << " requires NO input\n"
18293  << "parameters for the model " << model << ",\n"
18294  << "but you specified " << parameters.nelem() << " parameters.\n"
18295  << "This ambiguity can not be solved by arts.\n"
18296  << "Please see the arts user guide chapter 3.\n";
18297  throw runtime_error(os.str());
18298  }
18299  }
18300  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18301  else if ( "O2-MPM93"==name )
18302  {
18303  // H. J. Liebe and G. A. Hufford and M. G. Cotton,
18304  // "Propagation modeling of moist air and suspended water/ice
18305  // particles at frequencies below 1000 GHz",
18306  // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
18307  // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21
18308  //
18309  // specific continuum parameters and units:
18310  // OUTPUT
18311  // pxsec : [1/m],
18312  // INPUT
18313  // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
18314  // parameters[1] : line strength scale factor, default CL = 1.000 [1]
18315  // parameters[2] : line broadening scale factor, default CW = 1.000 [1]
18316  // parameters[3] : line coupling scale factor, default CO = 1.000 [1]
18317  // f_grid : [Hz]
18318  // abs_p : [Pa]
18319  // abs_t : [K]
18320  // abs_h2o, : [1]
18321  // vmr : [1]
18322  //
18323 
18324  if( abs_h2o.sum() < -1. )
18325  {
18326  ostringstream os;
18327  os << "Continuum/full model tag " << name
18328  << " requires H2O-vmr, but no tag group contains H2O!";
18329  throw runtime_error(os.str());
18330  }
18331 
18332  const int Nparam = 4;
18333  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
18334  {
18335  out3 << "Full model " << name << " is running with \n"
18336  << "user defined parameters according to model " << model << ".\n";
18337  MPM93O2AbsModel( pxsec,
18338  parameters[0], // continuum term scale factor
18339  parameters[1], // line strength scale factor
18340  parameters[2], // line broadening scale factor
18341  parameters[3], // line coupling scale factor
18342  model,
18343  f_grid,
18344  abs_p,
18345  abs_t,
18346  abs_h2o,
18347  vmr,
18348  verbosity );
18349  }
18350  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
18351  {
18352  ostringstream os;
18353  os << "Full model " << name << " requires " << Nparam << " input\n"
18354  << "parameters for the model " << model << ",\n"
18355  << "but you specified " << parameters.nelem() << " parameters.\n";
18356  throw runtime_error(os.str());
18357  }
18358  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
18359  {
18360  out3 << "Full model " << name << " running with \n"
18361  << "the parameters for model " << model << ".\n";
18362  MPM93O2AbsModel( pxsec,
18363  0.00,
18364  0.00,
18365  0.00,
18366  0.00,
18367  model,
18368  f_grid,
18369  abs_p,
18370  abs_t,
18371  abs_h2o,
18372  vmr,
18373  verbosity );
18374  }
18375  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18376  {
18377  ostringstream os;
18378  os << "ERROR: Full model " << name << " requires NO input\n"
18379  << "parameters for the model " << model << ",\n"
18380  << "but you specified " << parameters.nelem() << " parameters.\n"
18381  << "This ambiguity can not be solved by arts.\n"
18382  << "Please see the arts user guide chapter 3.\n";
18383  throw runtime_error(os.str());
18384  }
18385  }
18386  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18387  else if ( "O2-TRE05"==name )
18388  {
18389  // H. J. Liebe and G. A. Hufford and M. G. Cotton,
18390  // "Propagation modeling of moist air and suspended water/ice
18391  // particles at frequencies below 1000 GHz",
18392  // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
18393  // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21
18394  //
18395  // specific continuum parameters and units:
18396  // OUTPUT
18397  // pxsec : [1/m],
18398  // INPUT
18399  // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
18400  // parameters[1] : line strength scale factor, default CL = 1.000 [1]
18401  // parameters[2] : line broadening scale factor, default CW = 1.000 [1]
18402  // parameters[3] : line coupling scale factor, default CO = 1.000 [1]
18403  // f_grid : [Hz]
18404  // abs_p : [Pa]
18405  // abs_t : [K]
18406  // abs_h2o, : [1]
18407  // vmr : [1]
18408  //
18409 
18410  if( abs_h2o.sum() < -1. )
18411  {
18412  ostringstream os;
18413  os << "Continuum/full model tag " << name
18414  << " requires H2O-vmr, but no tag group contains H2O!";
18415  throw runtime_error(os.str());
18416  }
18417 
18418  const int Nparam = 4;
18419  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
18420  {
18421  out3 << "Full model " << name << " is running with \n"
18422  << "user defined parameters according to model " << model << ".\n";
18423  TRE05O2AbsModel( pxsec,
18424  parameters[0], // continuum term scale factor
18425  parameters[1], // line strength scale factor
18426  parameters[2], // line broadening scale factor
18427  parameters[3], // line coupling scale factor
18428  model,
18429  f_grid,
18430  abs_p,
18431  abs_t,
18432  abs_h2o,
18433  vmr,
18434  verbosity );
18435  }
18436  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
18437  {
18438  ostringstream os;
18439  os << "Full model " << name << " requires " << Nparam << " input\n"
18440  << "parameters for the model " << model << ",\n"
18441  << "but you specified " << parameters.nelem() << " parameters.\n";
18442  throw runtime_error(os.str());
18443  }
18444  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
18445  {
18446  out3 << "Full model " << name << " running with \n"
18447  << "the parameters for model " << model << ".\n";
18448  TRE05O2AbsModel( pxsec,
18449  0.00,
18450  0.00,
18451  0.00,
18452  0.00,
18453  model,
18454  f_grid,
18455  abs_p,
18456  abs_t,
18457  abs_h2o,
18458  vmr,
18459  verbosity );
18460  }
18461  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18462  {
18463  ostringstream os;
18464  os << "ERROR: Full model " << name << " requires NO input\n"
18465  << "parameters for the model " << model << ",\n"
18466  << "but you specified " << parameters.nelem() << " parameters.\n"
18467  << "This ambiguity can not be solved by arts.\n"
18468  << "Please see the arts user guide chapter 3.\n";
18469  throw runtime_error(os.str());
18470  }
18471  }
18472  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18473  else if ( "O2-MPM92"==name )
18474  {
18475  // H. J. Liebe, P. W. Rosenkranz and G. A. Hufford,
18476  // Atmospheric 60-GHz Oxygen Spectrum: New Laboratory
18477  // Measurements and Line Parameters
18478  // JQSRT, Vol 48, pp. 629-643, 1992
18479  //
18480  // specific continuum parameters and units:
18481  // OUTPUT
18482  // pxsec : [1/m],
18483  // INPUT
18484  // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
18485  // parameters[1] : line strength scale factor, default CL = 1.000 [1]
18486  // parameters[2] : line broadening scale factor, default CW = 1.000 [1]
18487  // parameters[3] : line coupling scale factor, default CO = 1.000 [1]
18488  // f_grid : [Hz]
18489  // abs_p : [Pa]
18490  // abs_t : [K]
18491  // abs_h2o, : [1]
18492  // vmr : [1]
18493  //
18494 
18495  if( abs_h2o.sum() < -1. )
18496  {
18497  ostringstream os;
18498  os << "Continuum/full model tag " << name
18499  << " requires H2O-vmr, but no tag group contains H2O!";
18500  throw runtime_error(os.str());
18501  }
18502 
18503  const int Nparam = 4;
18504  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
18505  {
18506  out3 << "Full model " << name << " is running with \n"
18507  << "user defined parameters according to model " << model << ".\n";
18508  MPM92O2AbsModel( pxsec,
18509  parameters[0], // continuum term scale factor
18510  parameters[1], // line strength scale factor
18511  parameters[2], // line broadening scale factor
18512  parameters[3], // line coupling scale factor
18513  model,
18514  f_grid,
18515  abs_p,
18516  abs_t,
18517  abs_h2o,
18518  vmr,
18519  verbosity );
18520  }
18521  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
18522  {
18523  ostringstream os;
18524  os << "Full model " << name << " requires " << Nparam << " input\n"
18525  << "parameters for the model " << model << ",\n"
18526  << "but you specified " << parameters.nelem() << " parameters.\n";
18527  throw runtime_error(os.str());
18528  }
18529  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
18530  {
18531  out3 << "Full model " << name << " running with \n"
18532  << "the parameters for model " << model << ".\n";
18533  MPM92O2AbsModel( pxsec,
18534  0.00,
18535  0.00,
18536  0.00,
18537  0.00,
18538  model,
18539  f_grid,
18540  abs_p,
18541  abs_t,
18542  abs_h2o,
18543  vmr,
18544  verbosity );
18545  }
18546  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18547  {
18548  ostringstream os;
18549  os << "ERROR: Full model " << name << " requires NO input\n"
18550  << "parameters for the model " << model << ",\n"
18551  << "but you specified " << parameters.nelem() << " parameters.\n"
18552  << "This ambiguity can not be solved by arts.\n"
18553  << "Please see the arts user guide chapter 3.\n";
18554  throw runtime_error(os.str());
18555  }
18556  }
18557  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18558  else if ( "O2-MPM89"==name )
18559  {
18560  // H. J. Liebe,
18561  // MPM - an atmospheric millimeter-wave propagation model,
18562  // Int. J. Infrared and Mill. Waves, Vol 10, pp. 631-650, 1989.
18563  //
18564  // specific continuum parameters and units:
18565  // OUTPUT
18566  // pxsec : [1/m],
18567  // INPUT
18568  // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
18569  // parameters[1] : line strength scale factor, default CL = 1.000 [1]
18570  // parameters[2] : line broadening scale factor, default CW = 1.000 [1]
18571  // parameters[3] : line coupling scale factor, default CO = 1.000 [1]
18572  // f_grid : [Hz]
18573  // abs_p : [Pa]
18574  // abs_t : [K]
18575  // abs_h2o, : [1]
18576  // vmr : [1]
18577  //
18578 
18579  if( abs_h2o.sum() < -1. )
18580  {
18581  ostringstream os;
18582  os << "Continuum/full model tag " << name
18583  << " requires H2O-vmr, but no tag group contains H2O!";
18584  throw runtime_error(os.str());
18585  }
18586 
18587  const int Nparam = 4;
18588  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
18589  {
18590  out3 << "Full model " << name << " is running with \n"
18591  << "user defined parameters according to model " << model << ".\n";
18592  MPM89O2AbsModel( pxsec,
18593  parameters[0], // continuum term scale factor
18594  parameters[1], // line strength scale factor
18595  parameters[2], // line broadening scale factor
18596  parameters[3], // line coupling scale factor
18597  model,
18598  f_grid,
18599  abs_p,
18600  abs_t,
18601  abs_h2o,
18602  vmr,
18603  verbosity );
18604  }
18605  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
18606  {
18607  ostringstream os;
18608  os << "Full model " << name << " requires " << Nparam << " input\n"
18609  << "parameters for the model " << model << ",\n"
18610  << "but you specified " << parameters.nelem() << " parameters.\n";
18611  throw runtime_error(os.str());
18612  }
18613  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
18614  {
18615  out3 << "Full model " << name << " running with \n"
18616  << "the parameters for model " << model << ".\n";
18617  MPM89O2AbsModel( pxsec,
18618  0.00,
18619  0.00,
18620  0.00,
18621  0.00,
18622  model,
18623  f_grid,
18624  abs_p,
18625  abs_t,
18626  abs_h2o,
18627  vmr,
18628  verbosity );
18629  }
18630  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18631  {
18632  ostringstream os;
18633  os << "ERROR: Full model " << name << " requires NO input\n"
18634  << "parameters for the model " << model << ",\n"
18635  << "but you specified " << parameters.nelem() << " parameters.\n"
18636  << "This ambiguity can not be solved by arts.\n"
18637  << "Please see the arts user guide chapter 3.\n";
18638  throw runtime_error(os.str());
18639  }
18640  }
18641  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18642  else if ( "O2-MPM87"==name )
18643  {
18644  // H. J. Liebe and D. H. Layton,
18645  // Millimeter-wave properties of the atmosphere:
18646  // Laboratory studies and propagation modelling,
18647  // NITA Report 87-224,
18648  // U.S. Dept. of Commerce, National Telecommunications and Information
18649  // Administration, Institute for Communication Sciences, rep. 87-224,
18650  // 325 Broadway, Boulder, CO 80303-3328
18651  //
18652  // specific continuum parameters and units:
18653  // OUTPUT
18654  // pxsec : [1/m],
18655  // INPUT
18656  // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
18657  // parameters[1] : line strength scale factor, default CL = 1.000 [1]
18658  // parameters[2] : line broadening scale factor, default CW = 1.000 [1]
18659  // parameters[3] : line coupling scale factor, default CO = 1.000 [1]
18660  // f_grid : [Hz]
18661  // abs_p : [Pa]
18662  // abs_t : [K]
18663  // abs_h2o, : [1]
18664  // vmr : [1]
18665  //
18666 
18667  if( abs_h2o.sum() < -1. )
18668  {
18669  ostringstream os;
18670  os << "Continuum/full model tag " << name
18671  << " requires H2O-vmr, but no tag group contains H2O!";
18672  throw runtime_error(os.str());
18673  }
18674 
18675  const int Nparam = 4;
18676  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
18677  {
18678  out3 << "Full model " << name << " is running with \n"
18679  << "user defined parameters according to model " << model << ".\n";
18680  MPM87O2AbsModel( pxsec,
18681  parameters[0], // continuum term scale factor
18682  parameters[1], // line strength scale factor
18683  parameters[2], // line broadening scale factor
18684  parameters[3], // line coupling scale factor
18685  model,
18686  f_grid,
18687  abs_p,
18688  abs_t,
18689  abs_h2o,
18690  vmr,
18691  verbosity );
18692  }
18693  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
18694  {
18695  ostringstream os;
18696  os << "Full model " << name << " requires " << Nparam << " input\n"
18697  << "parameters for the model " << model << ",\n"
18698  << "but you specified " << parameters.nelem() << " parameters.\n";
18699  throw runtime_error(os.str());
18700  }
18701  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
18702  {
18703  out3 << "Full model " << name << " running with \n"
18704  << "the parameters for model " << model << ".\n";
18705  MPM87O2AbsModel( pxsec,
18706  0.00,
18707  0.00,
18708  0.00,
18709  0.00,
18710  model,
18711  f_grid,
18712  abs_p,
18713  abs_t,
18714  abs_h2o,
18715  vmr,
18716  verbosity );
18717  }
18718  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18719  {
18720  ostringstream os;
18721  os << "ERROR: Full model " << name << " requires NO input\n"
18722  << "parameters for the model " << model << ",\n"
18723  << "but you specified " << parameters.nelem() << " parameters.\n"
18724  << "This ambiguity can not be solved by arts.\n"
18725  << "Please see the arts user guide chapter 3.\n";
18726  throw runtime_error(os.str());
18727  }
18728  }
18729  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18730  else if ( "O2-MPM85"==name )
18731  {
18732  // H. J. Liebe and D. H. Layton,
18733  // An updated model for millimeter wave propagation in moist air
18734  // Radio Science, vol. 20, pp. 1069-1089, 1985
18735  //
18736  // specific continuum parameters and units:
18737  // OUTPUT
18738  // pxsec : [1/m],
18739  // INPUT
18740  // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
18741  // parameters[1] : line strength scale factor, default CL = 1.000 [1]
18742  // parameters[2] : line broadening scale factor, default CW = 1.000 [1]
18743  // parameters[3] : line coupling scale factor, default CO = 1.000 [1]
18744  // f_grid : [Hz]
18745  // abs_p : [Pa]
18746  // abs_t : [K]
18747  // abs_h2o, : [1]
18748  // vmr : [1]
18749  //
18750 
18751  if( abs_h2o.sum() < -1. )
18752  {
18753  ostringstream os;
18754  os << "Continuum/full model tag " << name
18755  << " requires H2O-vmr, but no tag group contains H2O!";
18756  throw runtime_error(os.str());
18757  }
18758 
18759  const int Nparam = 4;
18760  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
18761  {
18762  out3 << "Full model " << name << " is running with \n"
18763  << "user defined parameters according to model " << model << ".\n";
18764  MPM85O2AbsModel( pxsec,
18765  parameters[0], // continuum term scale factor
18766  parameters[1], // line strength scale factor
18767  parameters[2], // line broadening scale factor
18768  parameters[3], // line coupling scale factor
18769  model,
18770  f_grid,
18771  abs_p,
18772  abs_t,
18773  abs_h2o,
18774  vmr,
18775  verbosity );
18776  }
18777  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
18778  {
18779  ostringstream os;
18780  os << "Full model " << name << " requires " << Nparam << " input\n"
18781  << "parameters for the model " << model << ",\n"
18782  << "but you specified " << parameters.nelem() << " parameters.\n";
18783  throw runtime_error(os.str());
18784  }
18785  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
18786  {
18787  out3 << "Full model " << name << " running with \n"
18788  << "the parameters for model " << model << ".\n";
18789  MPM85O2AbsModel( pxsec,
18790  0.00,
18791  0.00,
18792  0.00,
18793  0.00,
18794  model,
18795  f_grid,
18796  abs_p,
18797  abs_t,
18798  abs_h2o,
18799  vmr,
18800  verbosity );
18801  }
18802  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18803  {
18804  ostringstream os;
18805  os << "ERROR: Full model " << name << " requires NO input\n"
18806  << "parameters for the model " << model << ",\n"
18807  << "but you specified " << parameters.nelem() << " parameters.\n"
18808  << "This ambiguity can not be solved by arts.\n"
18809  << "Please see the arts user guide chapter 3.\n";
18810  throw runtime_error(os.str());
18811  }
18812  }
18813  // ============= N2 continuum =========================================================
18814  else if ( "N2-SelfContMPM93"==name )
18815  {
18816  // MPM93 N2 continuum:
18817  // see publication side of National Telecommunications and Information Administration
18818  // http://www.its.bldrdoc.gov/pub/all_pubs/all_pubs.html
18819  // and ftp side for downloading the MPM93 original source code:
18820  // ftp://ftp.its.bldrdoc.gov/pub/mpm93/
18821  //
18822  // specific continuum parameters and units:
18823  // OUTPUT
18824  // pxsec : [1/m],
18825  // INPUT
18826  // parameters[0] : strength parameter [1/m * 1/(Hz²*Pa²)]
18827  // parameters[1] : broadening parameter [1]
18828  // parameters[2] : temperature exponent [1]
18829  // parameters[3] : frequency exponent [1]
18830  // f_grid : [Hz]
18831  // abs_p : [Pa]
18832  // abs_t : [K]
18833  // abs_h2o : [1]
18834  // vmr : [1]
18835  //
18836 
18837  if( abs_h2o.sum() < -1. )
18838  {
18839  ostringstream os;
18840  os << "Continuum/full model tag " << name
18841  << " requires H2O-vmr, but no tag group contains H2O!";
18842  throw runtime_error(os.str());
18843  }
18844 
18845  const int Nparam = 4;
18846  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
18847  {
18848  out3 << "Continuum model " << name << " is running with \n"
18849  << "user defined parameters according to model " << model << ".\n";
18850  MPM93_N2_continuum( pxsec,
18851  parameters[0],
18852  parameters[1],
18853  parameters[2],
18854  parameters[3],
18855  model,
18856  f_grid,
18857  abs_p,
18858  abs_t,
18859  abs_h2o,
18860  vmr,
18861  verbosity );
18862  }
18863  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
18864  {
18865  ostringstream os;
18866  os << "Continuum model " << name << " requires " << Nparam << " input\n"
18867  << "parameters for the model " << model << ",\n"
18868  << "but you specified " << parameters.nelem() << " parameters.\n";
18869  throw runtime_error(os.str());
18870  }
18871  else if ( (model == "MPM93Scale") && (parameters.nelem() == 1) ) // --------------------
18872  {
18873  out3 << "Continuum model " << name << " running with \n"
18874  << "the parameters for model " << model << ".\n";
18875  MPM93_N2_continuum( pxsec,
18876  parameters[0],
18877  0.00,
18878  0.00,
18879  0.00,
18880  model,
18881  f_grid,
18882  abs_p,
18883  abs_t,
18884  abs_h2o,
18885  vmr,
18886  verbosity );
18887  }
18888  else if ( (model == "MPM93Scale") && (parameters.nelem() != 1) ) // --------------------
18889  {
18890  ostringstream os;
18891  os << "Continuum model " << name << " requires 1 scaling input\n"
18892  << "parameters for the model " << model << ",\n"
18893  << "but you specified " << parameters.nelem() << " parameters.\n";
18894  throw runtime_error(os.str());
18895  }
18896  else if ( (model != "user") && (model != "MPM93Scale") && (parameters.nelem() == 0) ) // --
18897  {
18898  out3 << "Continuum model " << name << " running with \n"
18899  << "the parameters for model " << model << ".\n";
18900  MPM93_N2_continuum( pxsec,
18901  0.00,
18902  0.00,
18903  0.00,
18904  0.00,
18905  model,
18906  f_grid,
18907  abs_p,
18908  abs_t,
18909  abs_h2o,
18910  vmr,
18911  verbosity );
18912  }
18913  /* --------------------------------------------------------------------------
18914  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18915  {
18916  ostringstream os;
18917  os << "ERROR: Continuum model " << name << " requires NO input\n"
18918  << "parameters for the model " << model << ",\n"
18919  << "but you specified " << parameters.nelem() << " parameters.\n"
18920  << "This ambiguity can not be solved by arts.\n"
18921  << "Please see the arts user guide chapter 3.\n";
18922  throw runtime_error(os.str());
18923  }
18924  ----------------------------------------------------------------------*/
18925  }
18926  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18927  else if ( "N2-DryContATM01"==name )
18928  {
18929  // data information about this continuum:
18930  // Pardo et al. model model (IEEE, Trans. Ant. Prop.,
18931  // Vol 49, No 12, pp. 1683-1694, 2001)
18932  //
18933  // specific continuum parameters and units:
18934  // a) output
18935  // pxsec : [1/m],
18936  // b) input
18937  // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
18938  // f_grid : [Hz]
18939  // abs_p : [Pa]
18940  // abs_t : [K]
18941  // vmr : [1] N2 vmr
18942  // abs_h2o : [1] H2O vmr
18943  //
18944 
18945  if( abs_h2o.sum() < -1. )
18946  {
18947  ostringstream os;
18948  os << "Continuum/full model tag " << name
18949  << " requires H2O-vmr, but no tag group contains H2O!";
18950  throw runtime_error(os.str());
18951  }
18952 
18953  const int Nparam = 1;
18954  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
18955  {
18956  out3 << "Continuum model " << name << " is running with \n"
18957  << "user defined parameters according to model " << model << ".\n";
18959  parameters[0], // coefficient
18960  model,
18961  f_grid,
18962  abs_p,
18963  abs_t,
18964  vmr,
18965  abs_h2o,
18966  verbosity );
18967  }
18968  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
18969  {
18970  ostringstream os;
18971  os << "Continuum model " << name << " requires " << Nparam << " input\n"
18972  << "parameters for the model " << model << ",\n"
18973  << "but you specified " << parameters.nelem() << " parameters.\n";
18974  throw runtime_error(os.str());
18975  }
18976  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
18977  {
18978  out3 << "Continuum model " << name << " running with \n"
18979  << "the parameters for model " << model << ".\n";
18981  0.000, // coefficient
18982  model,
18983  f_grid,
18984  abs_p,
18985  abs_t,
18986  vmr,
18987  abs_h2o,
18988  verbosity );
18989  }
18990  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18991  {
18992  ostringstream os;
18993  os << "ERROR: Continuum model " << name << " requires NO input\n"
18994  << "parameters for the model " << model << ",\n"
18995  << "but you specified " << parameters.nelem() << " parameters.\n"
18996  << "This ambiguity can not be solved by arts.\n"
18997  << "Please see the arts user guide chapter 3.\n";
18998  throw runtime_error(os.str());
18999  }
19000  }
19001  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19002  else if ( "N2-SelfContPWR93"==name )
19003  {
19004  // data information about this continuum:
19005  // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen,
19006  // "Atmospheric Remote Sensing by Microwave Radiometry",
19007  // John Wiley & Sons, Inc., 1993, ISBN 0-471-62891-3
19008  //
19009  // specific continuum parameters and units:
19010  // a) output
19011  // pxsec : [1/m],
19012  // b) input
19013  // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
19014  // parameters[1] : continuum temperature exponent [1]
19015  // f_grid : [Hz]
19016  // abs_p : [Pa]
19017  // abs_t : [K]
19018  // vmr : [1]
19019  //
19020  const int Nparam = 2;
19021  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19022  {
19023  out3 << "Continuum model " << name << " is running with \n"
19024  << "user defined parameters according to model " << model << ".\n";
19026  parameters[0], // coefficient
19027  parameters[1], // temp. exponent
19028  model,
19029  f_grid,
19030  abs_p,
19031  abs_t,
19032  vmr,
19033  verbosity );
19034  }
19035  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19036  {
19037  ostringstream os;
19038  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19039  << "parameters for the model " << model << ",\n"
19040  << "but you specified " << parameters.nelem() << " parameters.\n";
19041  throw runtime_error(os.str());
19042  }
19043  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19044  {
19045  out3 << "Continuum model " << name << " running with \n"
19046  << "the parameters for model " << model << ".\n";
19048  0.00,
19049  0.00,
19050  model,
19051  f_grid,
19052  abs_p,
19053  abs_t,
19054  vmr,
19055  verbosity );
19056  }
19057  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19058  {
19059  ostringstream os;
19060  os << "ERROR: Continuum model " << name << " requires NO input\n"
19061  << "parameters for the model " << model << ",\n"
19062  << "but you specified " << parameters.nelem() << " parameters.\n"
19063  << "This ambiguity can not be solved by arts.\n"
19064  << "Please see the arts user guide chapter 3.\n";
19065  throw runtime_error(os.str());
19066  }
19067  }
19068  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19069  else if ( "N2-SelfContStandardType"==name )
19070  {
19071  // data information about this continuum:
19072  // A completely general expression for the N2 continuum
19073  //
19074  // specific continuum parameters and units:
19075  // OUTPUT
19076  // pxsec : [1/m],
19077  // INPUT
19078  // parameters[0] : continuum coefficient (C) [1/m * 1/(Hz*Pa)²]
19079  // parameters[1] : frequency exponent (xf) [1]
19080  // parameters[2] : temperature exponent (xt) [1]
19081  // parameters[3] : pressure exponent (xp) [1]
19082  // f_grid : [Hz]
19083  // abs_p : [Pa]
19084  // abs_t : [K]
19085  // vmr : [1]
19086  const int Nparam = 4;
19087  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19088  {
19089  out3 << "Continuum model " << name << " is running with \n"
19090  << "user defined parameters according to model " << model << ".\n";
19092  parameters[0],
19093  parameters[1],
19094  parameters[2],
19095  parameters[3],
19096  model,
19097  f_grid,
19098  abs_p,
19099  abs_t,
19100  vmr,
19101  verbosity );
19102  }
19103  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19104  {
19105  ostringstream os;
19106  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19107  << "parameters for the model " << model << ",\n"
19108  << "but you specified " << parameters.nelem() << " parameters.\n";
19109  throw runtime_error(os.str());
19110  }
19111  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19112  {
19113  out3 << "Continuum model " << name << " running with \n"
19114  << "the parameters for model " << model << ".\n";
19116  0.000,
19117  0.000,
19118  0.000,
19119  0.000,
19120  model,
19121  f_grid,
19122  abs_p,
19123  abs_t,
19124  vmr,
19125  verbosity );
19126  }
19127  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19128  {
19129  ostringstream os;
19130  os << "ERROR: Continuum model " << name << " requires NO input\n"
19131  << "parameters for the model " << model << ",\n"
19132  << "but you specified " << parameters.nelem() << " parameters.\n"
19133  << "This ambiguity can not be solved by arts.\n"
19134  << "Please see the arts user guide chapter 3.\n";
19135  throw runtime_error(os.str());
19136  }
19137  }
19138  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19139  else if ( "N2-SelfContBorysow"==name )
19140  {
19141  // data information about this continuum:
19142  // A. Borysow and L. Frommhold, The Astrophysical Journal,
19143  // Vol. 311, pp.1043-1057, 1986
19144  const int Nparam = 1;
19145  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19146  {
19147  out3 << "Continuum model " << name << " is running with \n"
19148  << "user defined parameters according to model " << model << ".\n";
19149  BF86_CIA_N2( pxsec,
19150  parameters[0], // scaling factor
19151  model,
19152  f_grid,
19153  abs_p,
19154  abs_t,
19155  vmr,
19156  verbosity );
19157  }
19158  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19159  {
19160  ostringstream os;
19161  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19162  << "parameters for the model " << model << ",\n"
19163  << "but you specified " << parameters.nelem() << " parameters.\n";
19164  throw runtime_error(os.str());
19165  }
19166  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19167  {
19168  out3 << "Continuum model " << name << " running with \n"
19169  << "the parameters for model " << model << ".\n";
19170  BF86_CIA_N2( pxsec,
19171  0.0,
19172  model,
19173  f_grid,
19174  abs_p,
19175  abs_t,
19176  vmr,
19177  verbosity );
19178  }
19179  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19180  {
19181  ostringstream os;
19182  os << "ERROR: Continuum model " << name << " requires NO input\n"
19183  << "parameters for the model " << model << ",\n"
19184  << "but you specified " << parameters.nelem() << " parameters. " << "\n"
19185  << "This ambiguity can not be solved by arts.\n"
19186  << "Please see the arts user guide chapter 3.\n";
19187  throw runtime_error(os.str());
19188  }
19189  }
19190  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19191  else if ( "N2-CIArotCKDMT100"==name )
19192  {
19193  // data information about this continuum:
19194  // A. Borysow and L. Frommhold, The Astrophysical Journal,
19195  // Vol. 311, pp.1043-1057, 1986
19196  const int Nparam = 1;
19197  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19198  {
19199  out3 << "Continuum model " << name << " is running with \n"
19200  << "user defined parameters according to model " << model << ".\n";
19201  CKD_mt_CIArot_n2( pxsec,
19202  parameters[0], // scaling factor
19203  model,
19204  f_grid,
19205  abs_p,
19206  abs_t,
19207  vmr,
19208  verbosity );
19209  }
19210  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19211  {
19212  ostringstream os;
19213  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19214  << "parameters for the model " << model << ",\n"
19215  << "but you specified " << parameters.nelem() << " parameters.\n";
19216  throw runtime_error(os.str());
19217  }
19218  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19219  {
19220  out3 << "Continuum model " << name << " running with \n"
19221  << "the parameters for model " << model << ".\n";
19222  CKD_mt_CIArot_n2( pxsec,
19223  0.0,
19224  model,
19225  f_grid,
19226  abs_p,
19227  abs_t,
19228  vmr,
19229  verbosity );
19230  }
19231  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19232  {
19233  ostringstream os;
19234  os << "ERROR: Continuum model " << name << " requires NO input\n"
19235  << "parameters for the model " << model << ",\n"
19236  << "but you specified " << parameters.nelem() << " parameters. " << "\n"
19237  << "This ambiguity can not be solved by arts.\n"
19238  << "Please see the arts user guide chapter 3.\n";
19239  throw runtime_error(os.str());
19240  }
19241  }
19242  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19243  else if ( "N2-CIAfunCKDMT100"==name )
19244  {
19245  // data information about this continuum:
19246  // Lafferty, W.J., A.M. Solodov,A. Weber, W.B. Olson and J._M. Hartmann,
19247  // Infrared collision-induced absorption by
19248  // N2 near 4.3 microns for atmospheric applications:
19249  // Measurements and emprirical modeling,
19250  // Appl. Optics, 35, 5911-5917, (1996)
19251 
19252  const int Nparam = 1;
19253  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19254  {
19255  out3 << "Continuum model " << name << " is running with \n"
19256  << "user defined parameters according to model " << model << ".\n";
19257  CKD_mt_CIAfun_n2( pxsec,
19258  parameters[0], // scaling factor
19259  model,
19260  f_grid,
19261  abs_p,
19262  abs_t,
19263  vmr,
19264  verbosity );
19265  }
19266  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19267  {
19268  ostringstream os;
19269  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19270  << "parameters for the model " << model << ",\n"
19271  << "but you specified " << parameters.nelem() << " parameters.\n";
19272  throw runtime_error(os.str());
19273  }
19274  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19275  {
19276  out3 << "Continuum model " << name << " running with \n"
19277  << "the parameters for model " << model << ".\n";
19278  CKD_mt_CIAfun_n2( pxsec,
19279  0.0,
19280  model,
19281  f_grid,
19282  abs_p,
19283  abs_t,
19284  vmr,
19285  verbosity );
19286  }
19287  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19288  {
19289  ostringstream os;
19290  os << "ERROR: Continuum model " << name << " requires NO input\n"
19291  << "parameters for the model " << model << ",\n"
19292  << "but you specified " << parameters.nelem() << " parameters. " << "\n"
19293  << "This ambiguity can not be solved by arts.\n"
19294  << "Please see the arts user guide chapter 3.\n";
19295  throw runtime_error(os.str());
19296  }
19297  }
19298  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19299  else if ( "N2-CIArotCKDMT250"==name )
19300  {
19301  // data information about this continuum:
19302  // A. Borysow and L. Frommhold, The Astrophysical Journal,
19303  // Vol. 311, pp.1043-1057, 1986
19304 
19305  if( abs_o2.sum() < -1. )
19306  {
19307  ostringstream os;
19308  os << "Continuum/full model tag " << name
19309  << " requires O2-vmr, but no tag group contains O2!";
19310  throw runtime_error(os.str());
19311  }
19312 
19313  if( abs_h2o.sum() < -1. )
19314  {
19315  ostringstream os;
19316  os << "Continuum/full model tag " << name
19317  << " requires H2O-vmr, but no tag group contains H2O!";
19318  throw runtime_error(os.str());
19319  }
19320 
19321  const int Nparam = 1;
19322  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19323  {
19324  out3 << "Continuum model " << name << " is running with \n"
19325  << "user defined parameters according to model " << model << ".\n";
19326  CKD_mt_250_CIArot_n2( pxsec,
19327  parameters[0], // scaling factor
19328  model,
19329  f_grid,
19330  abs_p,
19331  abs_t,
19332  vmr,
19333  abs_h2o,
19334  abs_o2,
19335  verbosity );
19336  }
19337  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19338  {
19339  ostringstream os;
19340  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19341  << "parameters for the model " << model << ",\n"
19342  << "but you specified " << parameters.nelem() << " parameters.\n";
19343  throw runtime_error(os.str());
19344  }
19345  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19346  {
19347  out3 << "Continuum model " << name << " running with \n"
19348  << "the parameters for model " << model << ".\n";
19349  CKD_mt_250_CIArot_n2( pxsec,
19350  0.0,
19351  model,
19352  f_grid,
19353  abs_p,
19354  abs_t,
19355  vmr,
19356  abs_h2o,
19357  abs_o2,
19358  verbosity );
19359  }
19360  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19361  {
19362  ostringstream os;
19363  os << "ERROR: Continuum model " << name << " requires NO input\n"
19364  << "parameters for the model " << model << ",\n"
19365  << "but you specified " << parameters.nelem() << " parameters. " << "\n"
19366  << "This ambiguity can not be solved by arts.\n"
19367  << "Please see the arts user guide chapter 3.\n";
19368  throw runtime_error(os.str());
19369  }
19370  }
19371  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19372  else if ( "N2-CIAfunCKDMT250"==name )
19373  {
19374  // data information about this continuum:
19375  // Lafferty, W.J., A.M. Solodov,A. Weber, W.B. Olson and J._M. Hartmann,
19376  // Infrared collision-induced absorption by
19377  // N2 near 4.3 microns for atmospheric applications:
19378  // Measurements and emprirical modeling,
19379  // Appl. Optics, 35, 5911-5917, (1996)
19380 
19381  if( abs_o2.sum() < -1. )
19382  {
19383  ostringstream os;
19384  os << "Continuum/full model tag " << name
19385  << " requires O2-vmr, but no tag group contains O2!";
19386  throw runtime_error(os.str());
19387  }
19388 
19389  if( abs_h2o.sum() < -1. )
19390  {
19391  ostringstream os;
19392  os << "Continuum/full model tag " << name
19393  << " requires H2O-vmr, but no tag group contains H2O!";
19394  throw runtime_error(os.str());
19395  }
19396 
19397  const int Nparam = 1;
19398  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19399  {
19400  out3 << "Continuum model " << name << " is running with \n"
19401  << "user defined parameters according to model " << model << ".\n";
19402  CKD_mt_250_CIAfun_n2( pxsec,
19403  parameters[0], // scaling factor
19404  model,
19405  f_grid,
19406  abs_p,
19407  abs_t,
19408  vmr,
19409  abs_h2o,
19410  abs_o2,
19411  verbosity );
19412  }
19413  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19414  {
19415  ostringstream os;
19416  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19417  << "parameters for the model " << model << ",\n"
19418  << "but you specified " << parameters.nelem() << " parameters.\n";
19419  throw runtime_error(os.str());
19420  }
19421  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19422  {
19423  out3 << "Continuum model " << name << " running with \n"
19424  << "the parameters for model " << model << ".\n";
19425  CKD_mt_250_CIAfun_n2( pxsec,
19426  0.0,
19427  model,
19428  f_grid,
19429  abs_p,
19430  abs_t,
19431  vmr,
19432  abs_h2o,
19433  abs_o2,
19434  verbosity );
19435  }
19436  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19437  {
19438  ostringstream os;
19439  os << "ERROR: Continuum model " << name << " requires NO input\n"
19440  << "parameters for the model " << model << ",\n"
19441  << "but you specified " << parameters.nelem() << " parameters. " << "\n"
19442  << "This ambiguity can not be solved by arts.\n"
19443  << "Please see the arts user guide chapter 3.\n";
19444  throw runtime_error(os.str());
19445  }
19446  }
19447 
19448  // ============= CO2 continuum ========================================================
19449  else if ( "CO2-CKD241"==name )
19450  {
19451  // data information about this continuum:
19452  // CKDv2.4.1 model at http://www.rtweb.aer.com/continuum_frame.html
19453  // This continuum accounts for the far wings of the many COS lines/bands since
19454  // the line is used with a cutoff in the line shape with +/- 25 cm^-1.
19455  //
19456  // specific continuum parameters and units:
19457  // OUTPUT
19458  // pxsec : [1/m],
19459  // INPUT
19460  // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
19461  // parameters[1] : continuum temperature exponent [1]
19462  // f_grid : [Hz]
19463  // abs_p : [Pa]
19464  // abs_t : [K]
19465  // vmr : [1]
19466  //
19467  const int Nparam = 1;
19468  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19469  {
19470  out3 << "Continuum model " << name << " is running with \n"
19471  << "user defined parameters according to model " << model << ".\n";
19472  CKD_241_co2( pxsec,
19473  parameters[0], // abs. scaling
19474  model,
19475  f_grid,
19476  abs_p,
19477  abs_t,
19478  vmr,
19479  verbosity );
19480  }
19481  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19482  {
19483  ostringstream os;
19484  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19485  << "parameters for the model " << model << ",\n"
19486  << "but you specified " << parameters.nelem() << " parameters.\n";
19487  throw runtime_error(os.str());
19488  }
19489  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19490  {
19491  out3 << "Continuum model " << name << " running with \n"
19492  << "the parameters for model " << model << ".\n";
19493  CKD_241_co2( pxsec,
19494  0.00,
19495  model,
19496  f_grid,
19497  abs_p,
19498  abs_t,
19499  vmr,
19500  verbosity );
19501  }
19502  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19503  {
19504  ostringstream os;
19505  os << "ERROR: Continuum model " << name << " requires NO input\n"
19506  << "parameters for the model " << model << ",\n"
19507  << "but you specified " << parameters.nelem() << " parameters. " << "\n"
19508  << "This ambiguity can not be solved by arts.\n"
19509  << "Please see the arts user guide chapter 3.\n";
19510  throw runtime_error(os.str());
19511  }
19512  }
19513  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19514  else if ( "CO2-CKDMT100"==name )
19515  {
19516  // data information about this continuum:
19517  // CKD model at http://www.rtweb.aer.com/continuum_frame.html
19518  // This continuum accounts for the far wings of the many COS lines/bands since
19519  // the line is used with a cutoff in the line shape with +/- 25 cm^-1.
19520  //
19521  // specific continuum parameters and units:
19522  // OUTPUT
19523  // pxsec : [1/m],
19524  // INPUT
19525  // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
19526  // parameters[1] : continuum temperature exponent [1]
19527  // f_grid : [Hz]
19528  // abs_p : [Pa]
19529  // abs_t : [K]
19530  // vmr : [1]
19531  //
19532  const int Nparam = 1;
19533  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19534  {
19535  out3 << "Continuum model " << name << " is running with \n"
19536  << "user defined parameters according to model " << model << ".\n";
19537  CKD_mt_co2( pxsec,
19538  parameters[0], // abs. scaling
19539  model,
19540  f_grid,
19541  abs_p,
19542  abs_t,
19543  vmr,
19544  verbosity );
19545  }
19546  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19547  {
19548  ostringstream os;
19549  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19550  << "parameters for the model " << model << ",\n"
19551  << "but you specified " << parameters.nelem() << " parameters.\n";
19552  throw runtime_error(os.str());
19553  }
19554  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19555  {
19556  out3 << "Continuum model " << name << " running with \n"
19557  << "the parameters for model " << model << ".\n";
19558  CKD_mt_co2( pxsec,
19559  0.00,
19560  model,
19561  f_grid,
19562  abs_p,
19563  abs_t,
19564  vmr,
19565  verbosity );
19566  }
19567  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19568  {
19569  ostringstream os;
19570  os << "ERROR: Continuum model " << name << " requires NO input\n"
19571  << "parameters for the model " << model << ",\n"
19572  << "but you specified " << parameters.nelem() << " parameters. " << "\n"
19573  << "This ambiguity can not be solved by arts.\n"
19574  << "Please see the arts user guide chapter 3.\n";
19575  throw runtime_error(os.str());
19576  }
19577  }
19578  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19579  else if ( "CO2-CKDMT250"==name )
19580  {
19581  // data information about this continuum:
19582  // CKD model at http://www.rtweb.aer.com/continuum_frame.html
19583  // This continuum accounts for the far wings of the many COS lines/bands since
19584  // the line is used with a cutoff in the line shape with +/- 25 cm^-1.
19585  //
19586  // specific continuum parameters and units:
19587  // OUTPUT
19588  // pxsec : [1/m],
19589  // INPUT
19590  // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
19591  // parameters[1] : continuum temperature exponent [1]
19592  // f_grid : [Hz]
19593  // abs_p : [Pa]
19594  // abs_t : [K]
19595  // vmr : [1]
19596  //
19597  const int Nparam = 1;
19598  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19599  {
19600  out3 << "Continuum model " << name << " is running with \n"
19601  << "user defined parameters according to model " << model << ".\n";
19602  CKD_mt_250_co2( pxsec,
19603  parameters[0], // abs. scaling
19604  model,
19605  f_grid,
19606  abs_p,
19607  abs_t,
19608  vmr,
19609  verbosity );
19610  }
19611  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19612  {
19613  ostringstream os;
19614  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19615  << "parameters for the model " << model << ",\n"
19616  << "but you specified " << parameters.nelem() << " parameters.\n";
19617  throw runtime_error(os.str());
19618  }
19619  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19620  {
19621  out3 << "Continuum model " << name << " running with \n"
19622  << "the parameters for model " << model << ".\n";
19623  CKD_mt_250_co2( pxsec,
19624  0.00,
19625  model,
19626  f_grid,
19627  abs_p,
19628  abs_t,
19629  vmr,
19630  verbosity );
19631  }
19632  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19633  {
19634  ostringstream os;
19635  os << "ERROR: Continuum model " << name << " requires NO input\n"
19636  << "parameters for the model " << model << ",\n"
19637  << "but you specified " << parameters.nelem() << " parameters. " << "\n"
19638  << "This ambiguity can not be solved by arts.\n"
19639  << "Please see the arts user guide chapter 3.\n";
19640  throw runtime_error(os.str());
19641  }
19642  }
19643 
19644  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19645  else if ( "CO2-SelfContPWR93"==name )
19646  {
19647  // data information about this continuum:
19648  // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen,
19649  // "Atmospheric Remote Sensing by Microwave Radiometry",
19650  // John Wiley & Sons, Inc., 1993, ISBN 0-471-62891-3
19651  //
19652  // specific continuum parameters and units:
19653  // OUTPUT
19654  // pxsec : [1/m],
19655  // INPUT
19656  // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
19657  // parameters[1] : continuum temperature exponent [1]
19658  // f_grid : [Hz]
19659  // abs_p : [Pa]
19660  // abs_t : [K]
19661  // vmr : [1]
19662  //
19663  const int Nparam = 2;
19664  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19665  {
19666  out3 << "Continuum model " << name << " is running with \n"
19667  << "user defined parameters according to model " << model << ".\n";
19669  parameters[0], // coefficient
19670  parameters[1], // temp. exponent
19671  model,
19672  f_grid,
19673  abs_p,
19674  abs_t,
19675  vmr,
19676  verbosity );
19677  }
19678  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19679  {
19680  ostringstream os;
19681  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19682  << "parameters for the model " << model << ",\n"
19683  << "but you specified " << parameters.nelem() << " parameters.\n";
19684  throw runtime_error(os.str());
19685  }
19686  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19687  {
19688  out3 << "Continuum model " << name << " running with \n"
19689  << "the parameters for model " << model << ".\n";
19691  0.00,
19692  0.00,
19693  model,
19694  f_grid,
19695  abs_p,
19696  abs_t,
19697  vmr,
19698  verbosity );
19699  }
19700  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19701  {
19702  ostringstream os;
19703  os << "ERROR: Continuum model " << name << " requires NO input\n"
19704  << "parameters for the model " << model << ",\n"
19705  << "but you specified " << parameters.nelem() << " parameters. " << "\n"
19706  << "This ambiguity can not be solved by arts.\n"
19707  << "Please see the arts user guide chapter 3.\n";
19708  throw runtime_error(os.str());
19709  }
19710  }
19711  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19712  else if ( "CO2-ForeignContPWR93"==name )
19713  {
19714  // data information about this continuum:
19715  // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen,
19716  // "Atmospheric Remote Sensing by Microwave Radiometry",
19717  // John Wiley & Sons, Inc., 1993, ISBN 0-471-62891-3
19718  //
19719  // specific continuum parameters and units:
19720  // OUTPUT
19721  // pxsec : [1/m],
19722  // INPUT
19723  // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
19724  // parameters[1] : continuum temperature exponent [1]
19725  // f_grid : [Hz]
19726  // abs_p : [Pa]
19727  // abs_t : [K]
19728  // abs_n2 : [1]
19729  // vmr : [1]
19730  //
19731 
19732  if( abs_n2.sum() < -1. )
19733  {
19734  ostringstream os;
19735  os << "Continuum/full model tag " << name
19736  << " requires N2-vmr, but no tag group contains N2!";
19737  throw runtime_error(os.str());
19738  }
19739 
19740  const int Nparam = 2;
19741  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19742  {
19743  out3 << "Continuum model " << name << " is running with \n"
19744  << "user defined parameters according to model " << model << ".\n";
19746  parameters[0],
19747  parameters[1],
19748  model,
19749  f_grid,
19750  abs_p,
19751  abs_t,
19752  abs_n2,
19753  vmr,
19754  verbosity );
19755  }
19756  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19757  {
19758  ostringstream os;
19759  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19760  << "parameters for the model " << model << ",\n"
19761  << "but you specified " << parameters.nelem() << " parameters.\n";
19762  throw runtime_error(os.str());
19763  }
19764  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19765  {
19766  out3 << "Continuum model " << name << " running with \n"
19767  << "the parameters for model " << model << ".\n";
19769  0.00,
19770  0.00,
19771  model,
19772  f_grid,
19773  abs_p,
19774  abs_t,
19775  abs_n2,
19776  vmr,
19777  verbosity );
19778  }
19779  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19780  {
19781  ostringstream os;
19782  os << "ERROR: Continuum model " << name << " requires NO input\n"
19783  << "parameters for the model " << model << ",\n"
19784  << "but you specified " << parameters.nelem() << " parameters. " << "\n"
19785  << "This ambiguity can not be solved by arts.\n"
19786  << "Please see the arts user guide chapter 3.\n";
19787  throw runtime_error(os.str());
19788  }
19789  }
19790  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19791  else if ( "CO2-SelfContHo66"==name )
19792  {
19793  // data information about this continuum:
19794  // Reference: Ho, Kaufman and Thaddeus, "Laboratory measurements of
19795  // microwave absorption in models of the atmosphere of Venus", JGR, 1966.
19796  //
19797  // specific continuum parameters and units:
19798  // OUTPUT
19799  // pxsec : [1/m],
19800  // INPUT
19801  // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
19802  // parameters[1] : continuum temperature exponent [1]
19803  // f_grid : [Hz]
19804  // abs_p : [Pa]
19805  // abs_t : [K]
19806  // vmr : [1]
19807  //
19808  const int Nparam = 2;
19809  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19810  {
19811  out3 << "Continuum model " << name << " is running with \n"
19812  << "user defined parameters according to model " << model << ".\n";
19813  Ho66_CO2_self_continuum( pxsec,
19814  parameters[0], // coefficient
19815  parameters[1], // temp. exponent
19816  model,
19817  f_grid,
19818  abs_p,
19819  abs_t,
19820  vmr,
19821  verbosity );
19822  }
19823  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19824  {
19825  ostringstream os;
19826  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19827  << "parameters for the model " << model << ",\n"
19828  << "but you specified " << parameters.nelem() << " parameters.\n";
19829  throw runtime_error(os.str());
19830  }
19831  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19832  {
19833  out3 << "Continuum model " << name << " running with \n"
19834  << "the parameters for model " << model << ".\n";
19835  Ho66_CO2_self_continuum( pxsec,
19836  0.00,
19837  0.00,
19838  model,
19839  f_grid,
19840  abs_p,
19841  abs_t,
19842  vmr,
19843  verbosity );
19844  }
19845  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19846  {
19847  ostringstream os;
19848  os << "ERROR: Continuum model " << name << " requires NO input\n"
19849  << "parameters for the model " << model << ",\n"
19850  << "but you specified " << parameters.nelem() << " parameters. " << "\n"
19851  << "This ambiguity can not be solved by arts.\n"
19852  << "Please see the arts user guide chapter 3.\n";
19853  throw runtime_error(os.str());
19854  }
19855  }
19856  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19857  else if ( "CO2-ForeignContHo66"==name )
19858  {
19859  // data information about this continuum:
19860  // Reference: Ho, Kaufman and Thaddeus, "Laboratory measurements of
19861  // microwave absorption in models of the atmosphere of Venus", JGR, 1966.
19862  //
19863  // specific continuum parameters and units:
19864  // OUTPUT
19865  // pxsec : [1/m],
19866  // INPUT
19867  // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
19868  // parameters[1] : continuum temperature exponent [1]
19869  // f_grid : [Hz]
19870  // abs_p : [Pa]
19871  // abs_t : [K]
19872  // abs_n2 : [1]
19873  // vmr : [1]
19874  //
19875 
19876  if( abs_n2.sum() < -1. )
19877  {
19878  ostringstream os;
19879  os << "Continuum/full model tag " << name
19880  << " requires N2-vmr, but no tag group contains N2!";
19881  throw runtime_error(os.str());
19882  }
19883 
19884  const int Nparam = 2;
19885  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19886  {
19887  out3 << "Continuum model " << name << " is running with \n"
19888  << "user defined parameters according to model " << model << ".\n";
19890  parameters[0],
19891  parameters[1],
19892  model,
19893  f_grid,
19894  abs_p,
19895  abs_t,
19896  abs_n2,
19897  vmr,
19898  verbosity );
19899  }
19900  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19901  {
19902  ostringstream os;
19903  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19904  << "parameters for the model " << model << ",\n"
19905  << "but you specified " << parameters.nelem() << " parameters.\n";
19906  throw runtime_error(os.str());
19907  }
19908  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19909  {
19910  out3 << "Continuum model " << name << " running with \n"
19911  << "the parameters for model " << model << ".\n";
19913  0.00,
19914  0.00,
19915  model,
19916  f_grid,
19917  abs_p,
19918  abs_t,
19919  abs_n2,
19920  vmr,
19921  verbosity );
19922  }
19923  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19924  {
19925  ostringstream os;
19926  os << "ERROR: Continuum model " << name << " requires NO input\n"
19927  << "parameters for the model " << model << ",\n"
19928  << "but you specified " << parameters.nelem() << " parameters. " << "\n"
19929  << "This ambiguity can not be solved by arts.\n"
19930  << "Please see the arts user guide chapter 3.\n";
19931  throw runtime_error(os.str());
19932  }
19933  }
19934  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19935  // ============= cloud and fog absorption from MPM93 ==================================
19936  else if ( "liquidcloud-MPM93"==name )
19937  {
19938  // Suspended water droplet absorption parameterization from MPM93 model
19939  // H. J. Liebe and G. A. Hufford and M. G. Cotton,
19940  // "Propagation modeling of moist air and suspended water/ice
19941  // particles at frequencies below 1000 GHz",
19942  // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
19943  // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21
19944  //
19945  // specific continuum parameters and units:
19946  // OUTPUT
19947  // pxsec : [1/m],
19948  // INPUT
19949  // parameters[0] : [1]
19950  // parameters[1] : [1]
19951  // parameters[2] : [1]
19952  // model : [1]
19953  // f_grid : [Hz]
19954  // abs_p : [Pa]
19955  // abs_t : [K]
19956  // vmr : [1]
19957  //
19958  // liquid water droplet parameters:
19959  // suspended water droplet density range: 0-10 g/m³
19960  // specific droplet weight value: 1 g/cm³
19961  //
19962  // valid atmospheric condition:
19963  // temperature : 233 to 323 K
19964  // relative humidity: 1 to 100 %
19965  //
19966  const int Nparam = 3;
19967  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19968  {
19969  out3 << "MPM93 liquid water cloud absorption model " << name << " is running with \n"
19970  << "user defined parameters according to model " << model << ".\n";
19971  MPM93WaterDropletAbs(pxsec,
19972  parameters[0], // scaling factror
19973  parameters[1], // scaling factror
19974  parameters[2], // scaling factror
19975  model, // model option
19976  f_grid,
19977  abs_p,
19978  abs_t,
19979  vmr,
19980  verbosity);
19981  }
19982  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19983  {
19984  ostringstream os;
19985  os << "MPM93 liquid water cloud absorption model " << name << " requires\n"
19986  << Nparam << " input parameter for the model " << model << ",\n"
19987  << "but you specified " << parameters.nelem() << " parameters.\n";
19988  throw runtime_error(os.str());
19989  }
19990  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19991  {
19992  out3 << "MPM93 liquid water cloud absorption model " << name << " running with \n"
19993  << "the parameter for model " << model << ".\n";
19994  MPM93WaterDropletAbs(pxsec,
19995  0.000, // scaling factror
19996  0.000, // scaling factror
19997  0.000, // scaling factror
19998  model, // model option
19999  f_grid,
20000  abs_p,
20001  abs_t,
20002  vmr,
20003  verbosity);
20004  }
20005  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
20006  {
20007  ostringstream os;
20008  os << "ERROR: MPM93 liquid water cloud absorption model " << name << " requires NO input\n"
20009  << "parameters for the model " << model << ",\n"
20010  << "but you specified " << parameters.nelem() << " parameters.\n"
20011  << "This ambiguity can not be solved by arts.\n"
20012  << "Please see the arts user guide chapter 4.\n";
20013  throw runtime_error(os.str());
20014  }
20015  }
20016  // ============= ice particle absorption from MPM93 ===================================
20017  else if ( "icecloud-MPM93"==name )
20018  {
20019  // Ice particle absorption parameterization from MPM93 model
20020  // H. J. Liebe and G. A. Hufford and M. G. Cotton,
20021  // "Propagation modeling of moist air and suspended water/ice
20022  // particles at frequencies below 1000 GHz",
20023  // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
20024  // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21
20025  //
20026  // specific continuum parameters and units:
20027  // OUTPUT
20028  // pxsec : [1/m],
20029  // INPUT
20030  // parameters[0] : [1]
20031  // parameters[1] : [1]
20032  // parameters[2] : [1]
20033  // model : [1]
20034  // f_grid : [Hz]
20035  // abs_p : [Pa]
20036  // abs_t : [K]
20037  // vmr : [1]
20038  //
20039  // ice crystal parameters:
20040  // suspended water droplet density range: 0-10 g/m³
20041  // specific droplet weight value: 1 g/cm³
20042  //
20043  // valid atmospheric condition:
20044  // temperature : 233 to 323 K
20045  // relative humidity: 1 to 100 %
20046  //
20047  const int Nparam = 3;
20048  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
20049  {
20050  out3 << "MPM93 ice water cloud absorption model " << name << " is running with \n"
20051  << "user defined parameters according to model " << model << ".\n";
20052  MPM93IceCrystalAbs(pxsec,
20053  parameters[0], // scaling factror
20054  parameters[1], // scaling factror
20055  parameters[2], // scaling factror
20056  model, // model option
20057  f_grid,
20058  abs_p,
20059  abs_t,
20060  vmr,
20061  verbosity);
20062  }
20063  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
20064  {
20065  ostringstream os;
20066  os << "MPM93 ice water cloud absorption model " << name << " requires \n"
20067  << Nparam << " input parameter for the model " << model << ",\n"
20068  << "but you specified " << parameters.nelem() << " parameters.\n";
20069  throw runtime_error(os.str());
20070  }
20071  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
20072  {
20073  out3 << "MPM93 ice water cloud absorption model " << name << " running with \n"
20074  << "the parameter for model " << model << ".\n";
20075  MPM93IceCrystalAbs(pxsec,
20076  0.000, // scaling factror
20077  0.000, // scaling factror
20078  0.000, // scaling factror
20079  model, // model option
20080  f_grid,
20081  abs_p,
20082  abs_t,
20083  vmr,
20084  verbosity);
20085  }
20086  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
20087  {
20088  ostringstream os;
20089  os << "ERROR: MPM93 ice water cloud absorption model " << name << " requires NO input\n"
20090  << "parameters for the model " << model << ",\n"
20091  << "but you specified " << parameters.nelem() << " parameters.\n"
20092  << "This ambiguity can not be solved by arts.\n"
20093  << "Please see the arts user guide chapter 4.\n";
20094  throw runtime_error(os.str());
20095  }
20096  }
20097  // ============= rain extinction from MPM93 ===========================================
20098  else if ( "rain-MPM93"==name )
20099  {
20100  // Rain extinction parameterization from MPM93 model, described in
20101  // H. J. Liebe,
20102  // "MPM - An Atmospheric Millimeter-Wave Propagation Model",
20103  // Int. J. Infrared and Millimeter Waves, vol. 10(6),
20104  // pp. 631-650, 1989
20105  // and based on
20106  // Olsen, R.L., D.V. Rogers, and D. B. Hodge, "The aR^b relation in the
20107  // calculation of rain attenuation", IEEE Trans. Antennas Propagat.,
20108  // vol. AP-26, pp. 318-329, 1978.
20109  //
20110  // specific continuum parameters and units:
20111  // OUTPUT
20112  // pxsec : [1/m],
20113  // INPUT
20114  // parameters[0] : [1]
20115  // parameters[1] : [1]
20116  // parameters[2] : [1]
20117  // model : [1]
20118  // f_grid : [Hz]
20119  // abs_p : [Pa]
20120  // abs_t : [K]
20121  // vmr : [mm/h]
20122  //
20123  // rain parameters:
20124  // rain rate range: 0-150 mm/h
20125  //
20126  // valid atmospheric condition:
20127  // temperature : (preferably above 273 K...)
20128  //
20129  const int Nparam = 3;
20130  if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
20131  {
20132  out3 << "MPM93 rain extinction model " << name << " is running with \n"
20133  << "user defined parameters according to model " << model << ".\n";
20134  MPM93RainExt(pxsec,
20135  parameters[0], // scaling factror
20136  parameters[1], // scaling factror
20137  parameters[2], // scaling factror
20138  model, // model option
20139  f_grid,
20140  abs_p,
20141  abs_t,
20142  vmr,
20143  verbosity);
20144  }
20145  else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
20146  {
20147  ostringstream os;
20148  os << "MPM93 rain extinction model " << name << " requires \n"
20149  << Nparam << " input parameter for the model " << model << ",\n"
20150  << "but you specified " << parameters.nelem() << " parameters.\n";
20151  throw runtime_error(os.str());
20152  }
20153  else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
20154  {
20155  out3 << "MPM93 rain extinction model " << name << " running with \n"
20156  << "the parameter for model " << model << ".\n";
20157  MPM93RainExt(pxsec,
20158  0.000, // scaling factror
20159  0.000, // scaling factror
20160  0.000, // scaling factror
20161  model, // model option
20162  f_grid,
20163  abs_p,
20164  abs_t,
20165  vmr,
20166  verbosity);
20167  }
20168  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
20169  {
20170  ostringstream os;
20171  os << "ERROR: MPM93 rain extinction model " << name << " requires NO input\n"
20172  << "parameters for the model " << model << ",\n"
20173  << "but you specified " << parameters.nelem() << " parameters.\n"
20174  << "This ambiguity can not be solved by arts.\n"
20175  << "Please see the arts user guide chapter 4.\n";
20176  throw runtime_error(os.str());
20177  }
20178  }
20179  else // -----------------------------------------------------------------------
20180  {
20181  // none of the continuum or full model tags were selected -> error message.
20182  ostringstream os;
20183  os << "ERROR: Continuum/ full model tag `" << name << "' not yet implemented in arts!";
20184  throw runtime_error(os.str());
20185  }
20186 
20187  // We have to divide the result from the internal continuum model by
20188  // the number density n to convert it from pseudo cross section to a
20189  // true cross section.
20190 
20191  // Boltzmann constant
20192  extern const Numeric BOLTZMAN_CONST;
20193 
20194  // Loop all pressures:
20195  for ( Index i=0; i<abs_p.nelem(); ++i )
20196  {
20197  const Numeric p_i = abs_p[i];
20198  const Numeric t_i = abs_t[i];
20199 
20200  // Calculate total number density from pressure and temperature.
20201  // n = n0*T0/p0 * p/T or n = p/kB/t, ideal gas law
20202  const Numeric n = p_i / BOLTZMAN_CONST / t_i;
20203 
20204  // We add to the output variable xsec here, previous content is
20205  // not overwritten!
20206  pxsec(joker,i) /= n;
20207  xsec(joker,i) += pxsec(joker,i);
20208  }
20209 }
20210 
20211 // #################################################################################
20212 
20237 {
20238  // The species lookup data:
20240 
20241  // For the list of valid continuum models:
20242  ArrayOfString valid_models;
20243 
20244  bool found = false;
20245 
20246  // Loop all species:
20248  i<species_data.end();
20249  ++i )
20250  {
20251  String specnam = i->Name();
20252 
20253  // Loop all isotopologues:
20254  for ( Array<IsotopologueRecord>::const_iterator j=i->Isotopologue().begin();
20255  j<i->Isotopologue().end();
20256  ++j )
20257  {
20258  String isonam = j->Name();
20259 
20260  // The specified name consists of a species part and an
20261  // isotopologue part, e.g., H2O-ContStandardSelf. We need to
20262  // construct a similar String from the species lookup data
20263  // by concatenating species name and isotopologue name.
20264 
20265  String fullnam = specnam + "-" + isonam;
20266  // cout << fullnam << "\n";
20267 
20268  // See if this is a continuum tag, so that we can add it to
20269  // the list:
20270  if (j->isContinuum())
20271  {
20272  valid_models.push_back(fullnam);
20273  }
20274 
20275  if ( name == fullnam )
20276  {
20277  found = true;
20278  }
20279  }
20280  }
20281 
20282  // ----------------------------------------------------------------------
20283  // Have we found it?
20284  if (!found)
20285  {
20286  ostringstream os;
20287  os << "The String `" << name << "' matches none of the known\n"
20288  << "continuum models. Known continuum models are:";
20289  for ( ArrayOfString::const_iterator i=valid_models.begin();
20290  i<valid_models.end();
20291  ++i )
20292  {
20293  os << "\n" << *i;
20294  }
20295  throw runtime_error(os.str());
20296  }
20297 }
20298 //
20299 //
20300 // #################################################################################
20301 // ############################# f2c code implementation ###########################
20302 // #################################################################################
20303 //
20304 //
20305 // ------------------- begin of f2c.h file --------------------------------
20306 //
20307 /* f2c.h -- Standard Fortran to C header file */
20308 #ifndef F2C_INCLUDE
20309 #define F2C_INCLUDE
20310 
20311 typedef long int integer;
20312 typedef unsigned long int uinteger;
20313 typedef char *address;
20314 typedef short int shortint;
20315 typedef float real;
20316 typedef double doublereal;
20317 typedef struct { real r, i; } complex;
20318 typedef struct { doublereal r, i; } doublecomplex;
20319 typedef long int logical;
20320 typedef short int shortlogical;
20321 typedef char logical1;
20322 typedef char integer1;
20323 #ifdef INTEGER_STAR_8 /* Adjust for integer*8. */
20324 typedef long long longint; /* system-dependent */
20325 typedef unsigned long long ulongint; /* system-dependent */
20326 #define qbit_clear(a,b) ((a) & ~((ulongint)1 << (b)))
20327 #define qbit_set(a,b) ((a) | ((ulongint)1 << (b)))
20328 #endif
20329 
20330 #define TRUE_ (1)
20331 #define FALSE_ (0)
20332 
20333 /* Extern is for use with -E */
20334 #ifndef Extern
20335 #define Extern extern
20336 #endif
20337 
20338 /* I/O stuff */
20339 
20340 #ifdef f2c_i2
20341 /* for -i2 */
20342 typedef short flag;
20343 typedef short ftnlen;
20344 typedef short ftnint;
20345 #else
20346 typedef long int flag;
20347 typedef long int ftnlen;
20348 typedef long int ftnint;
20349 #endif
20350 
20351 /*external read, write*/
20352 typedef struct
20356  char *cifmt;
20358 } cilist;
20359 
20360 /*internal read, write*/
20361 typedef struct
20363  char *iciunit;
20365  char *icifmt;
20368 } icilist;
20369 
20370 /*open*/
20371 typedef struct
20374  char *ofnm;
20376  char *osta;
20377  char *oacc;
20378  char *ofm;
20380  char *oblnk;
20381 } olist;
20382 
20383 /*close*/
20384 typedef struct
20387  char *csta;
20388 } cllist;
20389 
20390 /*rewind, backspace, endfile*/
20391 typedef struct
20394 } alist;
20395 
20396 /* inquire */
20397 typedef struct
20400  char *infile;
20402  ftnint *inex; /*parameters in standard's order*/
20406  char *inname;
20408  char *inacc;
20410  char *inseq;
20412  char *indir;
20414  char *infmt;
20416  char *inform;
20418  char *inunf;
20422  char *inblank;
20424 } inlist;
20425 
20426 #define VOID void
20427 
20428 union Multitype { /* for multiple entry points */
20432  /* longint j; */
20437  };
20438 
20439 typedef union Multitype Multitype;
20440 
20441 /*typedef long int Long;*/ /* No longer used; formerly in Namelist */
20442 
20443 struct Vardesc { /* for Namelist */
20444  char *name;
20445  char *addr;
20447  int type;
20448  };
20449 typedef struct Vardesc Vardesc;
20450 
20451 struct Namelist {
20452  char *name;
20454  int nvars;
20455  };
20456 typedef struct Namelist Namelist;
20457 
20458 #define abs(x) ((x) >= 0 ? (x) : -(x))
20459 #define dabs(x) (doublereal)abs(x)
20460 #define min(a,b) ((a) <= (b) ? (a) : (b))
20461 #define max(a,b) ((a) >= (b) ? (a) : (b))
20462 #define dmin(a,b) (doublereal)min(a,b)
20463 #define dmax(a,b) (doublereal)max(a,b)
20464 #define bit_test(a,b) ((a) >> (b) & 1)
20465 #define bit_clear(a,b) ((a) & ~((uinteger)1 << (b)))
20466 #define bit_set(a,b) ((a) | ((uinteger)1 << (b)))
20467 
20468 /* procedure parameter types for -A and -C++ */
20469 
20470 #define F2C_proc_par_types 1
20471 #ifdef __cplusplus
20472 typedef int /* Unknown procedure type */ (*U_fp)(...);
20473 typedef shortint (*J_fp)(...);
20474 typedef integer (*I_fp)(...);
20475 typedef real (*R_fp)(...);
20476 typedef doublereal (*D_fp)(...), (*E_fp)(...);
20477 typedef /* Complex */ VOID (*C_fp)(...);
20478 typedef /* Double Complex */ VOID (*Z_fp)(...);
20479 typedef logical (*L_fp)(...);
20480 typedef shortlogical (*K_fp)(...);
20481 typedef /* Character */ VOID (*H_fp)(...);
20482 typedef /* Subroutine */ int (*S_fp)(...);
20483 #else
20484 typedef int /* Unknown procedure type */ (*U_fp)();
20485 typedef shortint (*J_fp)();
20486 typedef integer (*I_fp)();
20487 typedef real (*R_fp)();
20488 typedef doublereal (*D_fp)(), (*E_fp)();
20489 typedef /* Complex */ VOID (*C_fp)();
20490 typedef /* Double Complex */ VOID (*Z_fp)();
20491 typedef logical (*L_fp)();
20492 typedef shortlogical (*K_fp)();
20493 typedef /* Character */ VOID (*H_fp)();
20494 typedef /* Subroutine */ int (*S_fp)();
20495 #endif
20496 /* E_fp is for real functions when -R is not specified */
20497 typedef VOID C_f; /* complex function */
20498 typedef VOID H_f; /* character function */
20499 typedef VOID Z_f; /* double complex function */
20500 typedef doublereal E_f; /* real function with -R not specified */
20501 
20502 /* undef any lower-case symbols that your C compiler predefines, e.g.: */
20503 
20504 #ifndef Skip_f2c_Undefs
20505 #undef cray
20506 #undef gcos
20507 #undef mc68010
20508 #undef mc68020
20509 #undef mips
20510 #undef pdp11
20511 #undef sgi
20512 #undef sparc
20513 #undef sun
20514 #undef sun2
20515 #undef sun3
20516 #undef sun4
20517 #undef u370
20518 #undef u3b
20519 #undef u3b2
20520 #undef u3b5
20521 #undef unix
20522 #undef vax
20523 #endif
20524 #endif
20525 
20526 // ------------------- end of f2c.h file --------------------------------
20527 
20528 
20529 // ------------------ begin of Borysow N2N2 F77 code --------------------
20530 
20531 
20532 /* n2n2tks.f -- translated by f2c (version 20010821).
20533  You must link the resulting object file with the libraries:
20534  -lf2c -lm (in that order)
20535 */
20536 
20537 /* Common Block Declarations */
20538 
20539 struct s_blockin_ {
20540  double temp, fnumin, fnumax, dnu;
20541 } blockin_;
20542 
20543 #define blockin_1 blockin_
20544 
20545 struct s_app3a_ {
20546  double slit, dx, wnrmax3;
20547 } app3a_;
20548 
20549 #define app3a_1 app3a_
20550 
20551 struct s_app3b_ {
20552  int nsri, ns, nsriup;
20553 } app3b_;
20554 
20555 #define app3b_1 app3b_
20556 
20557 struct s_rsilo_ {
20558  double rsilo[201];
20559 } rsilo_;
20560 
20561 #define rsilo_1 rsilo_
20562 
20563 struct s_bou43_ {
20564  int initb;
20565 } bou43_;
20566 
20567 #define bou43_1 bou43_
20568 
20569 union u_bba_ {
20570  struct s_m_1 {
20571  double omeg[201], rsi[201], rsigg[201], alfa;
20572  } m_1;
20573  struct s_m_2 {
20574  double omeg[201], rsi[201], rsigg[201], beta;
20575  } m_2;
20576 } bba_;
20577 
20578 #define bba_1 (bba_.m_1)
20579 #define bba_2 (bba_.m_2)
20580 
20581 struct s_bbc_ {
20582  int nsol;
20583 } bbc_;
20584 
20585 #define bbc_1 bbc_
20586 
20587 struct s_bf_ {
20588  double g0bf, delbf, om0;
20589 } bf_;
20590 
20591 #define bf_1 bf_
20592 
20593 struct like_1_ {
20594  int like;
20595  char lgas[5];
20596 };
20597 
20598 #define like_1 (*(struct like_1_ *) &like_)
20599 
20600 struct s_k1k0_ {
20601  int ik1k0;
20602 } k1k0_;
20603 
20604 #define k1k0_1 k1k0_
20605 
20606 struct s_bbb_ {
20607  int ibound;
20608 } bbb_;
20609 
20610 #define bbb_1 bbb_
20611 
20612 struct energ_1_ {
20613  double eb[246] /* was [41][6] */;
20614  int niv[6];
20615 };
20616 
20617 #define energ_1 (*(struct energ_1_ *) &energ_)
20618 
20619 struct s_dimer_ {
20620  int nlines;
20621 } dimer_;
20622 
20623 #define dimer_1 dimer_
20624 
20625 struct n2part_1_ {
20626  double q1, wn2[2], b01, d01;
20627  int jrange2;
20628 };
20629 struct n2part_2_ {
20630  double q, wn2[2], b0, d0;
20631  int jrange1;
20632 };
20633 
20634 #define n2part_1 (*(struct n2part_1_ *) &n2part_)
20635 #define n2part_2 (*(struct n2part_2_ *) &n2part_)
20636 
20637 union u_bl3_ {
20638  struct s_m_1 {
20639  double rsi[401];
20640  } m_1;
20641  struct s_m_2 {
20642  double rsibb[401];
20643  } m_2;
20644 } bl3_;
20645 
20646 #define bl3_1 (bl3_.m_1)
20647 #define bl3_2 (bl3_.m_2)
20648 
20649 union u_bbbb_ {
20650  struct s_m_1 {
20651  int idelv, iv, ivp, idell, il, ilp;
20652  } m_1;
20653  struct s_m_2 {
20655  } m_2;
20656 } bbbb_;
20657 
20658 #define bbbb_1 (bbbb_.m_1)
20659 #define bbbb_2 (bbbb_.m_2)
20660 
20661 /* Initialized data */
20662 
20663 struct s_energe_ {
20664  double e_1[246];
20665  int e_2[6];
20666  } energ_ = { {-54.99996, -54.86228, -54.58697, -54.17413, -53.62391,
20667  -52.93648, -52.11211, -51.15108, -50.05374, -48.82049, -47.45179,
20668  -45.94815, -44.31014, -42.53841, -40.63365, -38.59665, -36.42824,
20669  -34.12937, -31.70105, -29.14439, -26.46061, -23.65103, -20.71709,
20670  -17.66041, -14.48271, -11.18593, -7.77221, -4.24393, -.60374,
20671  3.14531, 6.99978, 10.95566, 15.00818, 19.15136, 23.37787,
20672  27.67681, 32.03237, 36.42278, 40.83668, 45.29436, 49.79246,
20673  -31.89437, -31.77215, -31.52779, -31.16143, -30.67334, -30.06382,
20674  -29.33328, -28.48222, -27.51123, -26.42099, -25.21229, -23.88603,
20675  -22.44322, -20.88502, -19.21272, -17.42777, -15.53182, -13.52669,
20676  -11.41446, -9.1975, -6.87848, -4.46049, -1.94714, .65736, 3.34788,
20677  6.11816, 8.95978, 11.8613, 14.80383, 17.75924, 20.71774,
20678  23.71589, 0., 0., 0., 0., 0., 0., 0., 0., 0., -16.05019, -15.9464,
20679  -15.73896, -15.42815, -15.0144, -14.4983, -13.88057, -13.16213,
20680  -12.34407, -11.42771, -10.41455, -9.30639, -8.10531, -6.81376,
20681  -5.43459, -3.97121, -2.42768, -.80899, .87859, 2.62689, 4.42334,
20682  6.24733, 8.06983, 9.90464, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
20683  0., 0., 0., 0., 0., 0., 0., -6.49343, -6.41131, -6.24732,
20684  -6.00202, -5.67623, -5.27111, -4.78813, -4.22919, -3.59665,
20685  -2.89345, -2.12325, -1.29074, -.40202, .5345, 1.50455, 2.48212,
20686  3.46665, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
20687  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -1.76583, -1.70887,
20688  -1.59552, -1.427, -1.20523, -.93302, -.61434, -.25504, .13641, 0.,
20689  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
20690  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
20691  -.17133, -.14341, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
20692  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
20693  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}, {41, 32, 24, 17, 9, 2} }
20694  ;
20695 
20696 struct s_n2part_ {
20697  double fill_1[1];
20698  double e_2[4];
20699  int fill_3[1];
20700  } n2part_ = { {0}, {2., 1., 1.98957, 5.8e-6}, {0} };
20701 
20702 struct s_like_ {
20703  int fill_1[1];
20704  char e_2[5];
20705  } like_ = { {0}, "N2N2" };
20706 
20707 
20708 /* Table of constant values */
20709 
20710 // FIXME static integer c__9 = 9;
20711 // FIXME static integer c__1 = 1;
20712 // FIXME static integer c__5 = 5;
20713 static int cs__1 = 1;
20714 static int cs__0 = 0;
20715 static double c_b24 = 2.9723;
20716 static double c_b25 = -.99569;
20717 static double c_b26 = .09464;
20718 static double c_b27 = 1.2962e-12;
20719 static double c_b28 = -.13048;
20720 static double c_b29 = -.03128;
20721 static double c_b30 = 3.7969e-14;
20722 static double c_b31 = 1.03681;
20723 static double c_b32 = -.14336;
20724 static int cs__2 = 2;
20725 static int cs__3 = 3;
20726 static double c_b43 = .180926;
20727 static double c_b44 = -1.69153;
20728 static double c_b45 = .18605;
20729 static double c_b46 = .3;
20730 static double c_b47 = 0.;
20731 static double c_b49 = 6.6017e-16;
20732 static double c_b50 = 2.59982;
20733 static double c_b51 = -.31831;
20734 static double c_b52 = 1.2481e-12;
20735 static double c_b53 = -.57028;
20736 static double c_b54 = .05983;
20737 static double c_b55 = 5.2681e-13;
20738 static double c_b56 = -.24719;
20739 static double c_b57 = .00519;
20740 static double c_b58 = 2.7518e15;
20741 static double c_b59 = -25.38969;
20742 static double c_b60 = 2.46542;
20743 static int cs__4 = 4;
20744 static int cs__5 = 5;
20745 // FIXME static integer c__2 = 2;
20746 static double c_b78 = .0825299;
20747 static double c_b79 = -1.25562;
20748 static double c_b80 = .12981;
20749 static double c_b84 = 3.6611e-15;
20750 static double c_b85 = 1.47688;
20751 static double c_b86 = -.16537;
20752 static double c_b87 = 6.1264e-10;
20753 static double c_b88 = -2.25011;
20754 static double c_b89 = .15289;
20755 static double c_b90 = 7.982e-10;
20756 static double c_b91 = -2.76152;
20757 static double c_b92 = .21847;
20758 static double c_b93 = 5.2868e-22;
20759 static double c_b94 = 7.66253;
20760 static double c_b95 = -.77527;
20761 static double c_b112 = 119.261;
20762 static double c_b113 = -3.78587;
20763 static double c_b114 = .34024;
20764 static double c_b115 = 9.3777e-12;
20765 static double c_b116 = -.66548;
20766 static double c_b117 = .0033;
20767 static double c_b118 = 3.0395e-13;
20768 static double c_b119 = .24728;
20769 static double c_b120 = -.06607;
20770 static double c_b183 = 1e-6;
20771 static double c_b186 = 1.5;
20772 
20773 #define temp (blockin_1.temp)
20774 #define fnumin (blockin_1.fnumin)
20775 #define fnumax (blockin_1.fnumax)
20776 #define dnu (blockin_1.dnu)
20777 #define slit (app3a_1.slit)
20778 #define dx (app3a_1.dx)
20779 #define rsilo (rsilo_1.rsilo)
20780 #define omeg (bba_1.omeg)
20781 #define rsi (bba_1.rsi)
20782 #define rsigg (bba_1.rsigg)
20783 #define nsol (bbc_1.nsol)
20784 #define like (like_1.like)
20785 #define ik1k0 (k1k0_1.ik1k0)
20786 #define ibound (bbb_1.ibound)
20787 
20788 /* TKS ****** SUBROUTINE N2N2TKS(T, F) ***************************************/
20789 Numeric n2n2tks_(double t, double f)
20790 {
20791  /* System generated locals */
20792  int s__1;
20793  double ret_val;
20794 
20795  /* Local variables */
20796  //double hexa[10], quad[10];
20797  double freq[10], e;
20798  int i__;
20799  double s, x, t1, t2, t3, t4;
20800  int ij, nf, jj;
20801  double rslow1, si;
20802  int nr;
20803  double ss[1], tt[2];
20804  extern /* Subroutine */ int bound32_(double *, double *, int
20805  *), bound54_(double *, double *, int *);
20806  //double tksabs[5];
20807  extern /* Subroutine */ int spline_(int *, int *, int *,
20808  double *, double *, double *, double *,
20809  double *, double *, int *, double *);
20810  double abscoef[10];
20811  //double dtrans[10];
20812  extern /* Subroutine */ int addspec_(double *, double *,
20813  double *, double *, double *, double *,
20814  double *, int *, double *, double *, int *,
20815  int *, int *, int *, int *, int *);
20816  double eps, alfatot[10];
20817  extern /* Subroutine */ int partsum_(double *);
20818 
20819 /* ========================================= */
20820 /* Copyright (C) Aleksandra Borysow, 1987) */
20821 /* ==================================================================== */
20822 /* PROGRAM PREPARED BY ALEKSANDRA BORYSOW (APRIL'1987) */
20823 /* (UNIVERSITY OF TEXAS AT AUSTIN, PHYSICS DEPARTMENT) */
20824 /* ORIGINAL VERSION: WRITTEN ON CYBER */
20825 
20826 /* PROGRAM GENERATES N2-N2 COLLISION-INDUCED SPECTRA AT */
20827 /* TEMPERATURES BETWEEN 50 TO 300 K. */
20828 /* CIA SPECTRA MODELED AFTER PAPER (*) */
20829 /* ALEKSANDRA BORYSOW AND LOTHAR FROMMHOLD, */
20830 /* ASTROPHYSICAL JOURNAL, VOL. 311, PAGES 1043-1057, (1986) */
20831 
20832 /* REVISED BY GLENN ORTON (1989) - TO WORK ON SUN WORKSTATIONS */
20833 /* AND ON THE VAX MACHINES (FORTRAN-77) */
20834 /* PASSES STANDARD TEST ON SUN, AT 200K (JULY 1992) */
20835 /* ==================================================================== */
20836 
20837 /* ALSO IN REVISION: DOUBLE PRECISION FOR ALL F.P. VARIABLES */
20838 
20839 /* ==================================================================== */
20840 
20841 /* HISTORY: */
20842 
20843 /* 2001-02-28 THOMAS KUHN: */
20844 /* CHANGE OF LINES */
20845 /* RSILO(I)=DLOG(RSI(I)*1.E80) */
20846 /* TO */
20847 /* RSILO(I)=(DLOG(RSI(I))+80.0D0*DLOG(10.0D0)) */
20848 /* BECAUSE OF OVERFLOW PROBLEMS. */
20849 /* COSMETICS FOR THE CODE TO BE FASTER READABLE. */
20850 /* CHANGE OF OUTPUT FILE NAME. */
20851 /* CHANGE OF OUTPUT FILE CONTENT */
20852 
20853 /* ==================================================================== */
20854 
20855 /* TKS* IMPLICIT REAL*8 (A-H,O-Z) */
20856 
20857 /* TKS INPUT/OUTPUT VARIABLES */
20858 /* REAL T, F */
20859 
20860  //ret_val = 0.;
20861 
20862 /* TEMP = TEMPERATURE IN KELVIN, SHOULD BE BETWEEN 50. AND 300. */
20863 /* FNUMIN = LOWEST FREQUENCY IN CM-1, FOR LISTING OF ALPHA(FNU) */
20864 /* FNUMAX = HIGHEST FREQUENCY IN CM-1, FOR LISTING OF ALPHA(FNU) */
20865 /* LINE SHAPE MODELLING WILL BE MOST ACCURATE WITHIN RANGE OF */
20866 /* R-T SPECTRAL INTENSITIES AS 1:100. */
20867 /* DNU = FREQUENCY INCREMENT IN CM-1. DNU SHOULD BE CHOSEN SO */
20868 /* THAT NOT MORE THAN 10 STEPS ARE NEEDED TO GO FROM */
20869 /* FNUMIN TO FNUMAX (ELSE ARRAY DIMENSIONS OF FREQ,ABSCOEF */
20870 /* MUST BE ADJUSTED IN ADDEM). */
20871 
20872 
20873 /* USER: */
20874 /* ----- */
20875 /* EDIT ONLY HERE: TEMP (K), MIN. FREQ. (CM^-1)= FNUMIN, */
20876 /* MAX. FREQ. = FNUMAX, STEP = DNU, SLITWIDTH (CM^-1)=SLIT */
20877 /* (SLIT=4.3 IS EQUIVALENT TO THAT OF VOYAGER SPECTRA, ONLY BOUND BOUND */
20878 /* SPECTRA ARE CONVOLUTED WITH THIS SLITWIDTH, THE FREE FREE SPECTRA */
20879 /* ARE FAR TOO BROAD FOR THE SLITWIDTH FUNCTION TO MATTER, */
20880 /* LEAVE LIKE = 1 (FOR LIKE PAIRS, AS N2-N2) */
20881 /* THE PROGRAM WILL ASSUME EQUILIBRIUM N2, */
20882 /* ALLOWED TEMPERATURE RANGE: 50-300K (DO NOT EXTEND IT BEYOND THESE LIMITS!) */
20883 /* IF QUESTIONS: CONTACT ABORYSOW@NBI.DK */
20884 /* TKS* NF=INT((FNUMAX-FNUMIN)/DNU+0.5)+1 */
20885 /* TKS* IF (NF.GT.10) NF=10 */
20886 /* TKS* FNUMAX=FNUMIN+FLOAT(NF-1)*DNU */
20887 
20888 /* TKS INPUT TEMPERATURE (K) CHECK OF RANGE */
20889  if (t < 50. || t > 300.) {
20890  ostringstream os;
20891  os << "out of T range ( 50<T<300)! return without calc.!" <<"\n";
20892  throw runtime_error(os.str());
20893  goto L999;
20894  }
20895  temp = t;
20896 
20897 /* *********************** INPUT DATA FROM USER *********************** */
20898 /* FNUMIN = MINIMUM FREQENCY [CM^-1] */
20899  fnumin = f / 29979245800.;
20900 /* FNUMAX = MAXIMUM FREQENCY [CM^-1] */
20901  fnumax = fnumin;
20902 /* ONLY ONE FREQUENCY PER CALL */
20903  nf = 1;
20904 /* DEFAULT VALUE OF FREQUENCY STEP [CM^-1] */
20905  dnu = 10.;
20906 /* DEFAULT VALUE */
20907  like = 1;
20908 /* SLIT = SLITWIDTH [CM^-1] */
20909 /* SLIT=4.3 IS EQUIVALENT TO THAT OF VOYAGER SPECTRA, ONLY BOUND BOUND */
20910 /* SPECTRA ARE CONVOLUTED WITH THIS SLITWIDTH, THE FREE FREE SPECTRA */
20911 /* ARE FAR TOO BROAD FOR THE SLITWIDTH FUNCTION TO MATTER. */
20912  slit = 4.3;
20913 /* ******************************************************************** */
20914 
20915 /* TKS* WRITE (6,14) LGAS,TEMP,FNUMIN,FNUMAX,DNU,NF-1 */
20916 /* TKS*14 FORMAT(' ABSORPTION SPECTRA OF ',A5,' AT',F8.1,' K'/ */
20917 /* TKS* $ 1X,43(1H=),/ */
20918 /* TKS* 1' MIN.FREQ.=',F8.1,' CM-1',10X,'MAX.FREQ.=',F8.1,' CM-1',10X, */
20919 /* TKS* 2'FREQ.INCREMENT=',F8.2,' CM-1',5X,'IN',I5,' STEPS'//) */
20920 
20921 
20922  partsum_(&temp);
20923 
20924 
20925 /* THE N2-N2 SPECTRA FOR 50-300K */
20926 /* ================================ */
20927 
20928  x = log(temp);
20929  s__1 = nf;
20930  for (i__ = 1; i__ <= s__1; ++i__) {
20931 /* FREQ(I)=FNUMIN+FLOAT(I-1)*DNU */
20932  freq[i__ - 1] = fnumin;
20933  alfatot[i__ - 1] = 0.;
20934 /* L10: */
20935  abscoef[i__ - 1] = 0.;
20936  }
20937 
20938 
20939 /* ==================================================================== */
20940 
20941 
20942  jj = 1;
20943 L442:
20944 /* L1023: */
20945  ++jj;
20946  if (jj == 42) {
20947  goto L444;
20948  }
20949  goto L442;
20950 /* EB(JJ,IV) JJ-ROTATIONAL LEVEL "L", IV- VIBRATIONAL LEVEL "V"; */
20951 L444:
20952 
20953 
20954 
20955 /* ==================================================================== */
20956 
20957 /* QUADRUPOLAR INDUCTION: (50-300K) LAMBDA1,LAMBDA2,LAMBDA,L=2023&0223 */
20958 /* ------------------------------------------------------------------- */
20959 
20960  eps = 1e-5;
20961  tt[0] = 10.;
20962  bound32_(&temp, rsi, &nsol);
20963  ij = 0;
20964  rslow1 = 0.;
20965  s__1 = nsol;
20966  for (i__ = 1; i__ <= s__1; ++i__) {
20967  ++ij;
20968 /* MOD CAN BE ONLY 0 OR 1 OR 2 */
20969  if (ij % 3 == 0) {
20970  rslow1 = 1.5e-60;
20971  }
20972  if (ij % 3 == 1) {
20973  rslow1 = 1.7e-60;
20974  }
20975  if (ij % 3 == 2) {
20976  rslow1 = 1.6e-60;
20977  }
20978  if (rsi[i__ - 1] < 1e-60) {
20979  rsi[i__ - 1] = rslow1;
20980  }
20981 /* TKS* RSILO(I)=DLOG(RSI(I)*1.D80) */
20982  rsilo[i__ - 1] = log(rsi[i__ - 1]) + log(10.) * 80.;
20983  omeg[i__ - 1] = (double) (i__ - 1) * dx;
20984 /* L88: */
20985  }
20986 
20987 /* L9991: */
20988 
20989  spline_(&nsol, &cs__1, &cs__0, &eps, omeg, rsilo, tt, ss, &si, &nr, rsigg)
20990  ;
20991 
20992  ik1k0 = 1;
20993  ibound = 1;
20994 /* B-C LINESHAPE HERE */
20995 /* THESE VALUES (S,T1,T2) REPLACE VALUES GIVEN IN PAPER (*): */
20996 /* PUBLISHED IN AN ERRATUM, ASTROPHYSICAL JOURNAL, VOL.320, P.437 */
20997 /* (1987) */
20998  s = c_b24 * exp((c_b26 * x + c_b25) * x);
20999  t1 = c_b27 * exp((c_b29 * x + c_b28) * x);
21000  t2 = c_b30 * exp((c_b32 * x + c_b31) * x);
21001  e = 0.;
21002  t3 = 0.;
21003  t4 = 0.;
21004 
21005  addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &
21006  like, &cs__2, &cs__0, &cs__2, &cs__3);
21007  s__1 = nf;
21008  for (i__ = 1; i__ <= s__1; ++i__) {
21009  //quad[i__ - 1] = abscoef[i__ - 1];
21010 /* L20: */
21011  alfatot[i__ - 1] = abscoef[i__ - 1] + alfatot[i__ - 1];
21012  }
21013 
21014 
21015 
21016 /* ==================================================================== */
21017 
21018 /* HEXADECAPOLE COMPONENTS: LAMBDA1,LAMBDA2,LAMBDA,L=4045&0445 */
21019 /* ----------------------------------------------------------- */
21020 
21021  bound54_(&temp, rsi, &nsol);
21022  ij = 0;
21023  s__1 = nsol;
21024  for (i__ = 1; i__ <= s__1; ++i__) {
21025  ++ij;
21026 /* MOD CAN BE ONLY 0 OR 1 OR 2 */
21027  if (ij % 3 == 0) {
21028  rslow1 = 1.5e-60;
21029  }
21030  if (ij % 3 == 1) {
21031  rslow1 = 1.7e-60;
21032  }
21033  if (ij % 3 == 2) {
21034  rslow1 = 1.6e-60;
21035  }
21036  if (rsi[i__ - 1] < 1e-60) {
21037  rsi[i__ - 1] = rslow1;
21038  }
21039 /* TKS RSILO(I)=DLOG(RSI(I)*1.E80) */
21040  rsilo[i__ - 1] = log(rsi[i__ - 1]) + log(10.) * 80.;
21041 /* L111: */
21042  omeg[i__ - 1] = (double) (i__ - 1) * dx;
21043  }
21044  spline_(&nsol, &cs__1, &cs__0, &eps, omeg, rsilo, tt, ss, &si, &nr, rsigg)
21045  ;
21046 
21047 /* --------------------------- */
21048 /* TEMPERATURES 50-140K */
21049 /* --------------------------- */
21050 
21051  if (temp >= 140.) {
21052  goto L333;
21053  }
21054 
21055  s = c_b43 * exp((c_b45 * x + c_b44) * x);
21056  e = c_b46 * exp((c_b47 * x + c_b47) * x);
21057  t1 = c_b49 * exp((c_b51 * x + c_b50) * x);
21058  t2 = c_b52 * exp((c_b54 * x + c_b53) * x);
21059  t3 = c_b55 * exp((c_b57 * x + c_b56) * x);
21060  t4 = c_b58 * exp((c_b60 * x + c_b59) * x);
21061 
21062  ik1k0 = 0;
21063  ibound = 1;
21064  addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &
21065  like, &cs__4, &cs__0, &cs__4, &cs__5);
21066  s__1 = nf;
21067  for (i__ = 1; i__ <= s__1; ++i__) {
21068  //hexa[i__ - 1] = abscoef[i__ - 1];
21069  /*
21070  s_wsle(&io___25);
21071  do_lio(&c__9, &c__1, " T=50-140K: HEXA(", (ftnlen)17);
21072  do_lio(&c__2, &c__1, (char *)&i__, (ftnlen)sizeof(int));
21073  do_lio(&c__9, &c__1, ") =", (ftnlen)3);
21074  do_lio(&c__5, &c__1, (char *)&abscoef[i__ - 1], (ftnlen)sizeof(
21075  double));
21076  e_wsle();
21077  */
21078 /* L50: */
21079  alfatot[i__ - 1] += abscoef[i__ - 1];
21080  }
21081  goto L334;
21082 
21083 /* --------------------------- */
21084 /* TEMPERATURES 140-300K */
21085 /* --------------------------- */
21086 
21087 L333:
21088  ik1k0 = 0;
21089  ibound = 1;
21090  s = c_b78 * exp((c_b80 * x + c_b79) * x);
21091  e = c_b46 * exp((c_b47 * x + c_b47) * x);
21092  t1 = c_b84 * exp((c_b86 * x + c_b85) * x);
21093  t2 = c_b87 * exp((c_b89 * x + c_b88) * x);
21094  t3 = c_b90 * exp((c_b92 * x + c_b91) * x);
21095  t4 = c_b93 * exp((c_b95 * x + c_b94) * x);
21096 
21097  addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &
21098  like, &cs__4, &cs__0, &cs__4, &cs__5);
21099  s__1 = nf;
21100  for (i__ = 1; i__ <= s__1; ++i__) {
21101  //hexa[i__ - 1] = abscoef[i__ - 1];
21102  /*
21103  s_wsle(&io___26);
21104  do_lio(&c__9, &c__1, " T=140-300K: HEXA(", (ftnlen)18);
21105  do_lio(&c__2, &c__1, (char *)&i__, (ftnlen)sizeof(int));
21106  do_lio(&c__9, &c__1, ") =", (ftnlen)3);
21107  do_lio(&c__5, &c__1, (char *)&abscoef[i__ - 1], (ftnlen)sizeof(
21108  double));
21109  e_wsle();
21110  */
21111 /* L550: */
21112  alfatot[i__ - 1] += abscoef[i__ - 1];
21113  }
21114 
21115 /* ==================================================================== */
21116 
21117 /* DOUBLE TRANSITIONS: LAMBDA1,LAMBDA2,LAMBDA,L=2,2,3,3 */
21118 /* ---------------------------------------------------- */
21119 
21120 /* --------------------------- */
21121 /* TEMPERATURES 50-300K */
21122 /* --------------------------- */
21123 
21124 L334:
21125  ik1k0 = 1;
21126  ibound = 0;
21127 /* X S=Y(X,1.19261D-58, -3.78587,0.34024) */
21128  s = c_b112 * exp((c_b114 * x + c_b113) * x);
21129  t1 = c_b115 * exp((c_b117 * x + c_b116) * x);
21130  t2 = c_b118 * exp((c_b120 * x + c_b119) * x);
21131  t3 = 0.;
21132  t4 = 0.;
21133  addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &
21134  like, &cs__2, &cs__2, &cs__3, &cs__3);
21135  s__1 = nf;
21136  for (i__ = 1; i__ <= s__1; ++i__) {
21137  //dtrans[i__ - 1] = abscoef[i__ - 1];
21138 /* L650: */
21139  alfatot[i__ - 1] += abscoef[i__ - 1];
21140  }
21141 
21142 /* ==================================================================== */
21143 
21144 /* ANISOTROPIC OVERLAP NEGLECTED (LAMBDA1,LAMBDA2,LAMBDA,L=0212) */
21145 /* SINCE THIS TERM IS EXTREMELY SMALL */
21146 
21147 /* ==================================================================== */
21148 
21149 /* TKS* PRINT 154, FREQ(1),FREQ(NF),FREQ(2)-FREQ(1),TEMP */
21150 /* TKS* PRINT 156, (ALFATOT(I),I=1,NF) */
21151 /* TKS*154 FORMAT(///' ABSORPTION COEFFICIENT ALPHA(FNU), FROM ',F5.1, */
21152 /* TKS* $' CM-1 TO',F7.1,' CM-1, AT',F6.2,' CM-1 INCREMENTS, AT T=', */
21153 /* TKS* $F7.2,' K, IN UNITS OF CM-1 AMAGAT-2'/) */
21154 /* TKS*156 FORMAT(' ',10D13.5) */
21155 /* TKS* OPEN(UNIT=10, FILE='OUT', STATUS='UNKNOWN') */
21156 /* TKS* WRITE(10, 2929) (FREQ(I), ALFATOT(I), I=1, NF) */
21157 /* TKS*C WRITE(10, 2929) (FREQ(I), QUAD(I), HEXA(I) ALFATOT(I), I=1, NF) */
21158 /* TKS*2929 FORMAT(F10.3, E12.4) */
21159 
21160 /* TKS* STOP */
21161 
21162 
21163 
21164 /* TKS FILL OUTPUT VARIABLE */
21165 // tksabs[0] = quad[0];
21166 // tksabs[1] = hexa[0];
21167 // tksabs[2] = dtrans[0];
21168 // tksabs[3] = alfatot[0];
21169  ret_val = alfatot[0];
21170 /* TKS print*,'QUAD(1),HEXA(1),DTRANS(1)=',QUAD(1),HEXA(1),DTRANS(1) */
21171 L999:
21172  return ret_val;
21173 } /* n2n2tks_ */
21174 
21175 #undef temp
21176 #undef fnumin
21177 #undef fnumax
21178 #undef dnu
21179 #undef slit
21180 #undef dx
21181 #undef rsilo
21182 #undef omeg
21183 #undef rsi
21184 #undef rsigg
21185 #undef nsol
21186 #undef like
21187 #undef ik1k0
21188 #undef ibound
21189 
21190 #define wnrmax3 (app3a_1.wnrmax3)
21191 #define rsilo (rsilo_1.rsilo)
21192 #define omeg (bba_2.omeg)
21193 #define rsigg (bba_2.rsigg)
21194 #define beta (bba_2.beta)
21195 #define nsol (bbc_1.nsol)
21196 #define ibound (bbb_1.ibound)
21197 #define q1 (n2part_1.q1)
21198 #define wn2 (n2part_1.wn2)
21199 #define b01 (n2part_1.b01)
21200 #define d01 (n2part_1.d01)
21201 #define jrange2 (n2part_1.jrange2)
21202 
21203 
21204 
21205 /* ########################################################################## */
21206 
21207 
21208 /* Subroutine */ int addspec_(double *g0, double *ep, double *
21209  tau1, double *tau2, double *tau5, double *tau6,
21210  double *temp, int *nf, double *freq, double *abscoef,
21211  int * /* mp */, int *like, int *lambda1, int *lambda2,
21212  int *lambda, int * /* lvalue */)
21213 {
21214  /* Initialized data */
21215 
21216  static double closchm = 2.68675484e19;
21217  static double boltzwn = .6950304;
21218  static double hbar = 1.054588757e-27;
21219  static double pi = 3.1415926535898;
21220  static double clight = 2.997925e10;
21221 
21222  /* Format strings */
21223  /*
21224  static char fmt_20[] = "(/\002 LAMBDA1,LAMBDA2, LAMBDA,LVALUE=\002,2i3,2"
21225  "x,2i3,\002 COMPONENT.\002/15x,\002LINE SHAPE PARAMETERS:\002,6d1"
21226  "2.3,5x,\002G(0)=\002,d12.3/)";
21227  */
21228 
21229  /* System generated locals */
21230  int s__1, s__2, s__3, s__4, s__5, s__6;
21231  double d__1, d__2;
21232 
21233  /* Builtin functions */
21234  /*
21235  integer s_wsfe(cilist *), do_fio(integer *, char *, ftnlen), e_wsfe(void),
21236  s_wsle(cilist *), do_lio(integer *, integer *, char *, ftnlen),
21237  e_wsle(void);
21238  */
21239 
21240  /* Local variables */
21241  int list, jsum = 0;
21242  extern double bgama_(double *, double *, double *,
21243  double *, double *, double *, double *);
21244  int i__, j;
21245  double calib, p;
21246  int i1, j1, i2, j2;
21247  double p1, p2, omega1, omega2;
21248  int ip, jp, iq;
21249  double twopic;
21250  int jplusl, ip1, jp1, ip2, jp2;
21251  double fac, cgs, xbg, wkf, frq, wki;
21252  extern double specfct_(double *, double *, double *,
21253  double *, int *, double *), clebsqr_(int *,
21254  int *, int *);
21255  double cg1s, cg2s;
21256 
21257  /* Fortran I/O blocks */
21258  /*
21259  static cilist io___38 = { 0, 6, 0, fmt_20, 0 };
21260  static cilist io___40 = { 0, 6, 0, 0, 0 };
21261  */
21262 
21263 
21264 /* THIS PROGRAM GENERATES LISTING OF R-T CIA ALFA(OMEGA) */
21265 /* IF EITHER LAMBDA1 OR LAMBDA2 EQUAL TO ZERO - SINGLE TRANSITIONS; */
21266 /* DOUBLE TRANSITIONS ARE ASSUMED OTHERWISE. */
21267 /* LIKE=1 FOR LIKE SYSTEMS (AS H2-H2), SET LIKE=0 ELSE. */
21268 
21269 /* COMMON/BB/OMEG(201),RSI(201),RSIGG(201),NSOL,BETA */
21270 /* COMMON/APP3/SLIT,DX,NSRI,WNRMAX3,NS,NSRIUP */
21271 /* DIMENSION ABSCOEF(NF),FREQ(NF) */
21272  /* Parameter adjustments */
21273  --abscoef;
21274  --freq;
21275 
21276  /* Function Body */
21277 
21278  twopic = 2. * pi * clight;
21279  if (*like != 1) {
21280  *like = 0;
21281  }
21282 /* TAKE CARE OF FACTOR OF 1.E-60 HERE. */
21283 /* Computing 2nd power */
21284  d__1 = pi;
21285 /* Computing 2nd power */
21286  d__2 = closchm * 1e-30;
21287  calib = twopic * (d__1 * d__1 * 4. / (hbar * 3. * clight)) * (d__2 * d__2)
21288  ;
21289  calib /= (double) (*like + 1);
21290  beta = 1. / (boltzwn * *temp);
21291  list = *nf;
21292  s__1 = list;
21293  for (i__ = 1; i__ <= s__1; ++i__) {
21294 /* L88: */
21295  abscoef[i__] = 0.;
21296  }
21297 
21298 /* ROTATIONAL SPECTRUM FOR THE DETAILED LISTING ******************* */
21299  /*
21300  s_wsfe(&io___38);
21301  do_fio(&c__1, (char *)&(*lambda1), (ftnlen)sizeof(int));
21302  do_fio(&c__1, (char *)&(*lambda2), (ftnlen)sizeof(int));
21303  do_fio(&c__1, (char *)&(*lambda), (ftnlen)sizeof(int));
21304  do_fio(&c__1, (char *)&(*lvalue), (ftnlen)sizeof(int));
21305  do_fio(&c__1, (char *)&(*g0), (ftnlen)sizeof(double));
21306  do_fio(&c__1, (char *)&(*ep), (ftnlen)sizeof(double));
21307  do_fio(&c__1, (char *)&(*tau1), (ftnlen)sizeof(double));
21308  do_fio(&c__1, (char *)&(*tau2), (ftnlen)sizeof(double));
21309  do_fio(&c__1, (char *)&(*tau5), (ftnlen)sizeof(double));
21310  do_fio(&c__1, (char *)&(*tau6), (ftnlen)sizeof(double));
21311  d__1 = *g0 * bgama_(&c_b47, tau1, tau2, ep, tau5, tau6, temp);
21312  do_fio(&c__1, (char *)&d__1, (ftnlen)sizeof(double));
21313  e_wsfe();
21314  */
21315  if (*lambda1 == 0 || *lambda2 == 0) {
21316  goto L152;
21317  }
21318  jplusl = jrange2 + max(*lambda1,*lambda2);
21319 
21320  /*
21321  s_wsle(&io___40);
21322  do_lio(&c__9, &c__1, "LAMBDA1,LAMBDA2,ABSCOEF(1)=", (ftnlen)27);
21323  do_lio(&c__2, &c__1, (char *)&(*lambda1), (ftnlen)sizeof(int));
21324  do_lio(&c__2, &c__1, (char *)&(*lambda2), (ftnlen)sizeof(int));
21325  do_lio(&c__5, &c__1, (char *)&abscoef[1], (ftnlen)sizeof(double));
21326  e_wsle();
21327  */
21328  jsum = 0;
21329  s__1 = jrange2;
21330  for (i1 = 1; i1 <= s__1; ++i1) {
21331  j1 = i1 - 1;
21332  s__2 = jplusl;
21333  for (ip1 = 1; ip1 <= s__2; ++ip1) {
21334  jp1 = ip1 - 1;
21335  cg1s = clebsqr_(&j1, lambda1, &jp1);
21336  if (cg1s <= 0.) {
21337  goto L150;
21338  } else {
21339  goto L130;
21340  }
21341 L130:
21342  s__3 = j1 * (j1 + 1);
21343  p1 = (double) (2 * j1 + 1) * wn2[1 + j1 % 2 - 1] * exp(
21344  -1.4387859 / *temp * ((b01 - (double) s__3 * d01) * (
21345  double) s__3)) / q1;
21346  ++jsum;
21347  s__3 = jp1 * ip1;
21348  s__4 = j1 * i1;
21349  omega1 = (b01 - (double) s__3 * d01) * (double) s__3 - (
21350  b01 - (double) s__4 * d01) * (double) s__4;
21351  s__3 = jrange2;
21352  for (i2 = 1; i2 <= s__3; ++i2) {
21353  j2 = i2 - 1;
21354  s__4 = jplusl;
21355  for (ip2 = 1; ip2 <= s__4; ++ip2) {
21356  jp2 = ip2 - 1;
21357  cg2s = clebsqr_(&j2, lambda2, &jp2);
21358  if (cg2s <= 0.) {
21359  goto L148;
21360  } else {
21361  goto L132;
21362  }
21363 L132:
21364  s__5 = j2 * (j2 + 1);
21365  p2 = (double) (2 * j2 + 1) * wn2[1 + j2 % 2 - 1] *
21366  exp(-1.4387859 / *temp * ((b01 - (double)
21367  s__5 * d01) * (double) s__5)) / q1;
21368  s__5 = jp2 * ip2;
21369  s__6 = j2 * i2;
21370  omega2 = (b01 - (double) s__5 * d01) * (double)
21371  s__5 - (b01 - (double) s__6 * d01) * (
21372  double) s__6;
21373  fac = calib * p1 * p2 * cg1s * cg2s;
21374  s__5 = list;
21375  for (i__ = 1; i__ <= s__5; ++i__) {
21376  frq = freq[i__] - omega1 - omega2;
21377  wki = freq[i__] * (1. - exp(-beta * freq[i__]));
21378  wkf = wki * fac;
21379  xbg = *g0 * bgama_(&frq, tau1, tau2, ep, tau5, tau6,
21380  temp);
21381  if (ibound == 0) {
21382  goto L555;
21383  }
21384  if (abs(frq) <= wnrmax3) {
21385  xbg += specfct_(&frq, omeg, rsilo, rsigg, &nsol, &
21386  beta);
21387  }
21388 L555:
21389  abscoef[i__] += xbg * wkf;
21390 /* L146: */
21391  }
21392 L148:
21393  ;
21394  }
21395  }
21396 L150:
21397  ;
21398  }
21399  }
21400  goto L2222;
21401 /* SINGLE TRANSITIONS AT NITROGEN'S ROTATIONAL FREQUENCIES */
21402 /* ======================================================= */
21403 L152:
21404  jplusl = jrange2 + *lambda;
21405  s__2 = jrange2;
21406  for (i__ = 1; i__ <= s__2; ++i__) {
21407  j = i__ - 1;
21408  s__1 = jplusl;
21409  for (ip = 1; ip <= s__1; ++ip) {
21410  jp = ip - 1;
21411  cgs = clebsqr_(&j, lambda, &jp);
21412  if (cgs <= 0.) {
21413  goto L200;
21414  } else {
21415  goto L210;
21416  }
21417 L210:
21418  s__4 = j * (j + 1);
21419  p = (double) (2 * j + 1) * wn2[1 + j % 2 - 1] * exp(
21420  -1.4387859 / *temp * ((b01 - (double) s__4 * d01) * (
21421  double) s__4)) / q1;
21422  ++jsum;
21423  s__4 = jp * ip;
21424  s__3 = j * i__;
21425  omega1 = (b01 - (double) s__4 * d01) * (double) s__4 - (
21426  b01 - (double) s__3 * d01) * (double) s__3;
21427  fac = calib * p * cgs;
21428  s__4 = list;
21429  for (iq = 1; iq <= s__4; ++iq) {
21430  frq = freq[iq] - omega1;
21431 /* XWKI=FREQ(IQ)*(1.-EXP(-BETA*FREQ(IQ))) */
21432  wki = freq[iq] * (1. - exp(-beta * freq[iq]));
21433  wkf = wki * fac;
21434  xbg = *g0 * bgama_(&frq, tau1, tau2, ep, tau5, tau6, temp);
21435  if (ibound == 0) {
21436  goto L444;
21437  }
21438  if (abs(frq) <= wnrmax3) {
21439  xbg += specfct_(&frq, omeg, rsilo, rsigg, &nsol, &beta);
21440  }
21441 L444:
21442  abscoef[iq] += xbg * wkf;
21443 /* L199: */
21444  }
21445 L200:
21446  ;
21447  }
21448  }
21449 
21450 L2222:
21451 /* TKS 2222 PRINT 44,(ABSCOEF(I),I=1,LIST) */
21452 /* L44: */
21453  return 0;
21454 } /* addspec_ */
21455 
21456 #undef wnrmax3
21457 #undef rsilo
21458 #undef omeg
21459 #undef rsigg
21460 #undef beta
21461 #undef nsol
21462 #undef ibound
21463 #undef q1
21464 #undef wn2
21465 #undef b01
21466 #undef d01
21467 #undef jrange2
21468 
21469 #define q (n2part_2.q)
21470 #define wn2 (n2part_2.wn2)
21471 #define b0 (n2part_2.b0)
21472 #define d0 (n2part_2.d0)
21473 #define jrange1 (n2part_2.jrange1)
21474 
21475 /* Subroutine */ int partsum_(double *temp)
21476 {
21477  /* System generated locals */
21478  int s__1;
21479 
21480  /* Local variables */
21481  int j;
21482  double dq;
21483 
21484 /* N2 ROTATIONAL PARTITION SUM Q = Q(T). */
21485 
21486 
21487 
21488 /* Q,B0,D0,WN2 - PARTITION FCT., ROT.CONSTANTS, WEIGHTS FOR N2 */
21489  q = 0.;
21490  j = 0;
21491 L50:
21492  s__1 = j * (j + 1);
21493  dq = (double) (2 * j + 1) * wn2[1 + j % 2 - 1] * exp(-1.4387859 * ((
21494  b0 - (double) s__1 * d0) * (double) s__1) / *temp);
21495  q += dq;
21496  ++j;
21497  if (dq > q / 900.) {
21498  goto L50;
21499  }
21500  jrange1 = j;
21501 /* TKS PRINT 30, Q, JRANGE1 */
21502 
21503 /* L30: */
21504  return 0;
21505 } /* partsum_ */
21506 
21507 #undef q
21508 #undef wn2
21509 #undef b0
21510 #undef d0
21511 #undef jrange1
21512 
21513 #define slit (app3a_1.slit)
21514 #define dx (app3a_1.dx)
21515 #define wnrmax3 (app3a_1.wnrmax3)
21516 #define nsri (app3b_1.nsri)
21517 #define ns (app3b_1.ns)
21518 #define nsriup (app3b_1.nsriup)
21519 #define rsi (bl3_1.rsi)
21520 
21521 /* Subroutine */ int profile_(double *x, double *y)
21522 {
21523  /* System generated locals */
21524  int s__1;
21525 
21526  /* Local variables */
21527  int i__;
21528  double slope;
21529  int n1;
21530  double x0;
21531  int nc;
21532  double dr;
21533  int no;
21534  double xi;
21535  int nu;
21536 
21537 /* A TRIANGULAR SLIT FUNCTION IS USED. */
21538 
21539 
21540 /* COMMON/APP3/SLIT,DX,NSRI,WNRMAX3,NS,NSRIUP */
21541 
21542  if (*y < 0.) {
21543  goto L105;
21544  } else if (*y == 0) {
21545  goto L106;
21546  } else {
21547  goto L1;
21548  }
21549 L1:
21550  x0 = nsri + 1. + *x / dx;
21551  nc = (int) x0;
21552  n1 = nc + 1;
21553  slope = *y / slit;
21554  nu = (int) (x0 - ns);
21555  if (nu < 1) {
21556  nu = 1;
21557  }
21558  if (nu > nsriup) {
21559  return 0;
21560  }
21561  no = (int) (x0 + ns);
21562  if (no > nsriup) {
21563  no = nsriup;
21564  }
21565  if (no < 1) {
21566  return 0;
21567  }
21568  if (nc > nsriup) {
21569  nc = nsriup;
21570  }
21571  if (nc <= 1) {
21572  goto L101;
21573  }
21574  s__1 = nc;
21575  for (i__ = nu; i__ <= s__1; ++i__) {
21576  xi = (i__ - 1.) * dx - wnrmax3;
21577  dr = slope * (xi - (*x - slit));
21578  if (dr <= 0.) {
21579  goto L100;
21580  }
21581  rsi[i__ - 1] += dr;
21582 L100:
21583  ;
21584  }
21585 L101:
21586 
21587  if (nc >= nsriup) {
21588  return 0;
21589  }
21590  if (n1 < 1) {
21591  n1 = 1;
21592  }
21593  s__1 = no;
21594  for (i__ = n1; i__ <= s__1; ++i__) {
21595  xi = (i__ - 1.) * dx - wnrmax3;
21596  dr = *y - slope * (xi - *x);
21597  if (dr <= 0.) {
21598  goto L102;
21599  }
21600  rsi[i__ - 1] += dr;
21601 L102:
21602  ;
21603  }
21604  return 0;
21605 L105:
21606 /* TKS 105 PRINT 10,SLIT */
21607 /* TKS 10 FORMAT(/' A TRIANGULAR SLIT FUNCTION OF',F6.3,' CM-1 HALFWIDTH IS */
21608 /* TKS ' USED'/) */
21609 L106:
21610  return 0;
21611 } /* profile_ */
21612 
21613 #undef slit
21614 #undef dx
21615 #undef wnrmax3
21616 #undef nsri
21617 #undef ns
21618 #undef nsriup
21619 #undef rsi
21620 
21621 
21622 /* X FUNCTION SPECFCT(FREQ,OMEGA,PHI,PHI2,N,RTEMP) */
21623 
21624 double specfct_(double *freq, double *omega, double *phi,
21625  double *phi2, int *n, double *rtemp)
21626 {
21627  /* System generated locals */
21628  double ret_val;
21629 
21630  /* Local variables */
21631  double tfac, f, gp, si;
21632  int nr;
21633  extern /* Subroutine */ int ixpolat_(int *, int *, int *,
21634  double *, double *, double *, double *,
21635  double *, double *, int *, double *);
21636 
21637 
21638 /* THIS INTERPOLATES THE SPECTRAL FUNCTION PHI(FREQ) DEFINED AT */
21639 /* OMEGA(N) AS PHI(N). PHI2 IS THE SECOND DERIVATIVE AT OMEGA */
21640 /* WHICH MUST BE OBTAINED FIRST (USE SPLINE FOR THAT PURPOSE). */
21641 /* RTEMP IS THE RECIPROCAL TEMPERATURE IN CM-1 UNITS. */
21642 /* NOTE THAT WE INTERPOLATE 1.E80 TIMES THE LOGARITHM OF PHI(OMEGA) */
21643 /* NOTE THAT IN GSO'S REVISION, THIS FACTOR IS REMOVED. */
21644 /* (REVISION MODIFIED) */
21645 
21646 
21647 
21648 /* PRINT*,'FREQ =',FREQ */
21649 /* PRINT*,'OMEGA=',OMEGA */
21650 /* PRINT*,'RTEMP=',RTEMP */
21651 /* PRINT*,'PHI =',PHI */
21652 /* PRINT*,'PHI2 =',PHI2 */
21653  /* Parameter adjustments */
21654  --phi2;
21655  --phi;
21656  --omega;
21657 
21658  /* Function Body */
21659  tfac = 0.;
21660  f = *freq;
21661  if (f >= 0.) {
21662  goto L20;
21663  } else {
21664  goto L10;
21665  }
21666 L10:
21667  f = abs(f);
21668  tfac = -(*rtemp) * f;
21669 L20:
21670  if (f <= omega[*n]) {
21671  goto L30;
21672  }
21673  ret_val = exp(-(phi[*n - 1] - phi[*n]) * (f - omega[*n]) / (omega[*n] -
21674  omega[*n - 1]) + phi[*n] + tfac) * 1e-80;
21675 /* print*,' (A) SPECFCT=',SPECFCT */
21676 /* X SPECFCT=DEXP(-(PHI(N-1)-PHI(N))*(F-OMEGA(N))/ */
21677 /* X $(OMEGA(N)-OMEGA(N-1))+PHI(N)+TFAC) */
21678  return ret_val;
21679 /* 30 PRINT*,'SI,NR,PHI2=', */
21680 /* & SI,NR,PHI2 */
21681 /* CALL IXPOLAT(N,1,0,1.D-6,OMEGA,PHI,F,GP,SI,NR,PHI2) */
21682 L30:
21683  ixpolat_(n, &cs__1, &cs__0, &c_b183, &omega[1], &phi[1], &f, &gp, &si, &
21684  nr, &phi2[1]);
21685  ret_val = exp(tfac + gp) * 1e-80;
21686 /* X SPECFCT=DEXP(TFAC+GP) */
21687 /* print*,' (B) GP,SPECFCT=',GP,SPECFCT */
21688 
21689  return ret_val;
21690 } /* specfct_ */
21691 #define slit (app3a_1.slit)
21692 #define dx (app3a_1.dx)
21693 #define wnrmax3 (app3a_1.wnrmax3)
21694 #define nsri (app3b_1.nsri)
21695 #define ns (app3b_1.ns)
21696 #define nsriup (app3b_1.nsriup)
21697 #define eb (energ_1.eb)
21698 #define niv (energ_1.niv)
21699 #define nlines (dimer_1.nlines)
21700 #define rsibb (bl3_2.rsibb)
21701 #define ldelvi (bbbb_2.ldelvi)
21702 #define ivi (bbbb_2.ivi)
21703 #define ivip (bbbb_2.ivip)
21704 #define ldelel (bbbb_2.ldelel)
21705 #define ll (bbbb_2.ll)
21706 #define llp (bbbb_2.llp)
21707 
21708 /* Subroutine */ int bound32_(double *temp, double *rsi, int *
21709  nsol)
21710 {
21711  /* Initialized data */
21712 
21713  static int ldelvis[63] = { 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,
21714  1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,
21715  3,4,4,4,4,4,4,4,4 };
21716  static int ivis[63] = { 0,0,1,1,2,2,3,3,4,4,0,0,0,0,1,1,1,1,2,2,2,2,
21717  3,3,3,3,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,0,1,2,0,1,2,0,1,0,1,0,1,2,
21718  0,1,0,1,0,1,0,1 };
21719  static int ivips[63] = { 0,0,1,1,2,2,3,3,4,4,1,1,1,1,2,2,2,2,3,3,3,3,
21720  4,4,4,4,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,3,4,5,3,4,5,3,4,3,4,3,4,5,
21721  4,5,4,5,4,5,4,5 };
21722  static int ldelels[63] = { 1,3,1,3,1,3,1,3,1,3,-3,-1,1,3,-3,-1,1,3,
21723  -3,-1,1,3,3,1,-1,-3,-3,-1,1,3,-3,-1,1,3,-3,-1,1,3,-1,-3,1,3,1,1,1,
21724  -1,-1,-1,-3,-3,3,3,-3,-3,-3,-3,-3,3,3,1,1,-1,-1 };
21725  static double as[63] = { 4.4844e-40,4.4356e-40,2.9345e-40,2.885e-40,
21726  1.6441e-40,1.5899e-40,7.2882e-41,6.7748e-41,1.0378e-41,1.3041e-42,
21727  1.5006e-41,1.537e-41,1.6139e-41,1.7143e-41,1.9985e-41,2.0169e-41,
21728  2.0994e-41,2.2094e-41,1.636e-41,1.6281e-41,1.6714e-41,1.7326e-41,
21729  8.0425e-42,8.0862e-42,8.0093e-42,8.1366e-42,2.4471e-42,2.5406e-42,
21730  2.6629e-42,2.8064e-42,4.6227e-42,4.715e-42,4.8513e-42,5.0133e-42,
21731  3.9968e-42,3.984e-42,3.981e-42,3.9687e-42,1.1806e-42,1.3458e-42,
21732  3.8746e-42,3.9219e-42,7.3334e-43,1.339e-42,1.3041e-42,7.1401e-43,
21733  1.3461e-42,6.5776e-43,6.9847e-43,1.3517e-42,7.5545e-43,1.3268e-42,
21734  6.9847e-43,1.3517e-42,7.464e-43,2.1322e-43,2.6037e-43,2.0823e-43,
21735  2.0632e-43,2.1067e-43,2.0531e-43,2.1218e-43,2.3006e-43 };
21736  static double bs[63] = { 4.3e-4,4.6e-4,8.3e-4,8.9e-4,.0017,.00186,
21737  .0041,.00457,0.,0.,9.99e-4,5.23e-4,1.49e-4,-1.68e-4,.001837,
21738  .001153,6.6e-4,2.54e-4,.003603,.002677,.002101,.001738,.00595,
21739  .006843,0.,.007035,.001025,6.42e-4,2.54e-4,-1.64e-4,.002342,
21740  .001975,.00164,.001328,.004943,.004999,.005461,.006839,0.,.010993,
21741  0.,0.,.001367,.005262,0.,.001601,.00451,0.,.001828,.004175,.04816,
21742  .007033,.001828,.004175,.009338,.003733,.008508,.006979,0.,
21743  .005035,0.,.004169,0. };
21744  static double twopic = 1.88365183e11;
21745  static double pi = 3.141592654;
21746 
21747  /* System generated locals */
21748  int s__1;
21749  double d__1;
21750 
21751  /* Local variables */
21752  double alfa;
21753  int nnii;
21754  //int nsol2;
21755  double a, b;
21756  int i__, l, n;
21757  double stoke, stoki, am, pf;
21758  int lp;
21759  double rm;
21760  int nr, iv;
21761  double stokip;
21762  int ivp;
21763  extern double clebsqr_(int *, int *, int *);
21764  extern /* Subroutine */ int profile_(double *, double *);
21765 
21766 
21767 #define eb_ref(a_1,a_2) eb[(a_2)*41 + a_1 - 42]
21768 
21769 
21770 
21771 /* COMMON/APP3/SLIT,DX,NSRI,WNRMAX3,NS,NSRIUP */
21772 
21773 
21774 /* STORED VALUES */
21775  /* Parameter adjustments */
21776  --rsi;
21777 
21778  /* Function Body */
21779 
21780 
21781 /* EB(I,K) - BOUND ENERGIES */
21782 /* AM = (MTX.EL. (L,BETA,L') )**2 */
21783 /* M(L,L',V,V') OF PAPER (*) ARE TO BE CORRECTED: */
21784 /* M(L,L',V,V') = AM * (2L+1) * C(L,3,L')**2 */
21785 /* NSRI - HOW MANY POINTS FOR B-B SPECTRAL FUNCTION TO BE GIVEN */
21786 /* WNRMAX3 - THE FREQUENCY RANGE OF B-B CONTRIBUTION */
21787 /* SLIT- THE HALFWIDTH OF THE SPECTRAL PROFILE CONVOLUTED WITH */
21788 /* B-B SPECTRUM, IN [CM-1]. */
21789 /* A,B, COEFFICIENTS , EQ. 7, A.BORYSOW, L.FROMMHOLD, */
21790 /* AP. J. VOL.311, 1043-1057, (1986) */
21791 
21792  nsri = 190;
21793  wnrmax3 = 45.;
21794  nsriup = (nsri << 1) + 1;
21795  dx = wnrmax3 / (double) nsri;
21796  ns = (int) (slit / dx);
21797 
21798  for (i__ = 1; i__ <= 401; ++i__) {
21799 /* L300: */
21800  rsibb[i__ - 1] = 0.;
21801  }
21802 
21803  alfa = 1. / (*temp * .69519);
21804  rm = 2.32498211e-23;
21805 /* RM - REDUCED MASS FOR N2-N2 */
21806 
21807  d__1 = rm * 1.380662e-16 * *temp * 2. * pi / 4.3906208382975998e-53;
21808  pf = pow(d__1, c_b186);
21809 /* SCALE DOWN BY 1.D60 */
21810  pf *= 1e-60;
21811 
21812  nr = 0;
21813 L555:
21814  ++nr;
21815  ldelvi = ldelvis[nr - 1];
21816  ivi = ivis[nr - 1];
21817  ivip = ivips[nr - 1];
21818  ldelel = ldelels[nr - 1];
21819  a = as[nr - 1];
21820  b = bs[nr - 1];
21821 /* WRITE (6,334) LDELVI,IVI,IVIP, LDELEL,A,B */
21822 /* L334: */
21823 
21824 /* LDELVI=DELTA(V)=V'-V */
21825 /* IVI = V; IVIP = V' */
21826 /* LDELEL = DELTA(L) = L'-L */
21827 
21828  iv = ivi + 1;
21829  ivp = ivip + 1;
21830 /* THESE ARE ENERGY COLUMNS (V, V') */
21831 
21832  nnii = niv[iv - 1];
21833 
21834  s__1 = nnii;
21835  for (l = 1; l <= s__1; ++l) {
21836 /* LOOP OVER INITIAL L-VALUES... */
21837 
21838  am = a * exp(-b * (double) ((l - 1) * l));
21839 /* L - NUMBER OF ROW, (L-1) - ROTATIONAL LEVEL */
21840  lp = l + ldelel;
21841  ll = l - 1;
21842  llp = lp - 1;
21843 /* LL,LLP ARE INITIAL L AND FINAL L' ANGULAR MOMENTUM QUANTUM NUMBERS */
21844 
21845  if (lp > niv[ivp - 1] || lp < 1) {
21846  goto L20;
21847  }
21848  if (eb_ref(lp, ivp) == 0.) {
21849  goto L20;
21850  }
21851  if (eb_ref(l, iv) == 0.) {
21852  goto L20;
21853  }
21854  stoke = eb_ref(lp, ivp) - eb_ref(l, iv);
21855 
21856  stoki = am * exp(-alfa * eb_ref(l, iv)) / pf * (double) ((ll << 1)
21857  + 1) * clebsqr_(&ll, &cs__3, &llp);
21858 
21859  profile_(&stoke, &stoki);
21860  if (stoki > 0.) {
21861  ++nlines;
21862  }
21863 
21864  stokip = am * exp(-alfa * eb_ref(lp, ivp)) / pf * (double) ((llp
21865  << 1) + 1) * clebsqr_(&llp, &cs__3, &ll);
21866 
21867  d__1 = -stoke;
21868  profile_(&d__1, &stokip);
21869  if (stokip > 0.) {
21870  ++nlines;
21871  }
21872 
21873 L20:
21874  ;
21875  }
21876  if (nr == 63) {
21877  goto L56;
21878  }
21879  goto L555;
21880 L56:
21881 
21882 /* 32 ENTRIES FOR (3220)+(3202) IN TABLE 6, 63 IN ALL: */
21883 /* DATA EXPANDED AND INCLUDE NOW ALL POSSIBLE B-B TRANSITIONS */
21884 
21885  s__1 = nsriup;
21886  for (n = 1; n <= s__1; ++n) {
21887 /* L90: */
21888  rsibb[n - 1] = rsibb[n - 1] / twopic / slit;
21889  }
21890 
21891  *nsol = nsri + 1;
21892  //nsol2 = *nsol + 1;
21893 /* RSI - CONTRIBUTION FOR POSITIVE FREQUENCY SHIFTS */
21894 
21895  s__1 = *nsol;
21896  for (i__ = 1; i__ <= s__1; ++i__) {
21897 /* L22: */
21898  rsi[i__] = rsibb[*nsol - 1 + i__ - 1];
21899  }
21900 
21901 /* PRINT 999, (RSI(I),I=1,NSOL) */
21902 /* L999: */
21903 
21904  return 0;
21905 } /* bound32_ */
21906 
21907 #undef slit
21908 #undef dx
21909 #undef wnrmax3
21910 #undef nsri
21911 #undef ns
21912 #undef nsriup
21913 #undef eb
21914 #undef niv
21915 #undef nlines
21916 #undef rsibb
21917 #undef ldelvi
21918 #undef ivi
21919 #undef ivip
21920 #undef ldelel
21921 #undef ll
21922 #undef llp
21923 
21924 
21925 #undef eb_ref
21926 
21927 #define slit (app3a_1.slit)
21928 #define dx (app3a_1.dx)
21929 #define wnrmax3 (app3a_1.wnrmax3)
21930 #define nsri (app3b_1.nsri)
21931 #define ns (app3b_1.ns)
21932 #define nsriup (app3b_1.nsriup)
21933 #define eb (energ_1.eb)
21934 #define niv (energ_1.niv)
21935 #define nlines (dimer_1.nlines)
21936 #define rsibb (bl3_2.rsibb)
21937 
21938 /* Subroutine */ int bound54_(double *temp, double *rsi, int *
21939  nsol)
21940 {
21941  /* Initialized data */
21942 
21943 // static int ldelvis[54] = { 0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,
21944 // 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
21945 // };
21946  static int ivis[54] = { 0,0,0,1,1,1,2,2,2,3,3,3,0,0,0,0,0,0,1,1,1,1,
21947  1,1,2,2,2,2,2,2,3,3,3,3,3,3,0,0,0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,2 };
21948  static int ivips[54] = { 0,0,0,1,1,1,2,2,2,3,3,3,1,1,1,1,1,1,2,2,2,2,
21949  2,2,3,3,3,3,3,3,4,4,4,4,4,4,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4 };
21950  static int ldelels[54] = { 1,3,5,1,3,5,1,3,5,1,3,5,-5,-3,-1,1,3,5,-5,
21951  -3,-1,1,3,5,-5,-3,-1,1,3,5,-5,-3,-1,1,3,5,-5,-3,-1,1,3,5,-5,-3,-1,
21952  1,3,5,-5,-3,-1,1,3,5 };
21953  static double as[54] = { 7.9332e-42,7.8207e-42,7.7235e-42,4.5815e-42,
21954  4.4834e-42,4.4059e-42,2.173e-42,2.0824e-42,2.025e-42,7.7222e-43,
21955  7.0351e-43,6.6815e-43,4.9611e-43,5.2232e-43,5.2979e-43,5.4652e-43,
21956  5.6827e-43,5.9277e-43,5.733e-43,6.062e-43,6.0862e-43,6.2104e-43,
21957  6.3809e-43,6.5698e-43,3.9501e-43,4.1599e-43,4.1033e-43,4.1097e-43,
21958  4.1339e-43,4.153e-43,1.5858e-43,1.5976e-43,1.5478e-43,1.5066e-43,
21959  1.4554e-43,1.3848e-43,9.9241e-44,1.0109e-43,1.0396e-43,1.0758e-43,
21960  1.1176e-43,1.1636e-43,1.646e-43,1.647e-43,1.6617e-43,1.6837e-43,
21961  1.7085e-43,1.7327e-43,1.1797e-43,1.1593e-43,1.1405e-43,1.1174e-43,
21962  1.0853e-43,1.0401e-43 };
21963  static double bs[54] = { 6.12e-4,6.35e-4,6.77e-4,.001137,.001201,
21964  .001341,.00229,.002449,.00287,.005426,.005876,.00745,.001,8.83e-4,
21965  6.09e-4,3.92e-4,2.07e-4,3.7e-5,.001625,.001624,.001305,.001084,
21966  9.27e-4,8.21e-4,.002978,.003273,.002994,.002954,.003153,.003668,
21967  .005799,.006423,.006733,.00796,.010937,.019179,.001229,9.93e-4,
21968  7.67e-4,5.43e-4,3.09e-4,5.1e-5,.002456,.0023,.00221,.002193,
21969  .002273,.002506,.004556,.004825,.005454,.006725,.009431,.016672 };
21970  static double twopic = 1.88365183e11;
21971  static double pi = 3.141592654;
21972 
21973  /* System generated locals */
21974  int s__1;
21975  double d__1;
21976 
21977  /* Local variables */
21978  double alfa;
21979  int nnii, ivip;
21980  //int nsol2;
21981  double a, b;
21982  int i__, l, n;
21983  double stoke, stoki, am, pf;
21984  int ll, lp;
21985  double rm;
21986  int nr, ldelel, iv;
21987  //int ldelvi;
21988  double stokip;
21989  int ivi, llp, ivp;
21990  extern double clebsqr_(int *, int *, int *);
21991  extern /* Subroutine */ int profile_(double *, double *);
21992 
21993 
21994 #define eb_ref(a_1,a_2) eb[(a_2)*41 + a_1 - 42]
21995 
21996 
21997 
21998 /* COMMON/APP3/SLIT,DX,NSRI,WNRMAX3,NS,NSRIUP */
21999 /* STORED VALUES */
22000 
22001 /* TKS THIS DATA STRUCTURE HAS 55 ENTRIES AND NOT 54!! */
22002 /* TKS DATA LDELVIS /0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1, */
22003 /* TKS & 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2, */
22004 /* TKS & 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2/ */
22005 /* TKS WE HAVE SSKIPPED THE LAST "2" IN THIS DATA STATEMENT */
22006  /* Parameter adjustments */
22007  --rsi;
22008 
22009  /* Function Body */
22010 
22011 
22012 
22013 
22014 
22015 
22016 
22017 
22018  nsri = 190;
22019  wnrmax3 = 47.;
22020  nsriup = (nsri << 1) + 1;
22021  dx = wnrmax3 / (double) nsri;
22022  ns = (int) (slit / dx);
22023 
22024  for (i__ = 1; i__ <= 401; ++i__) {
22025 /* L300: */
22026  rsibb[i__ - 1] = 0.;
22027  }
22028  alfa = 1. / (*temp * .69519);
22029  rm = 2.32498211e-23;
22030 /* RM - REDUCED MASS FOR N2-N2 */
22031 
22032  d__1 = rm * 1.380662e-16 * *temp * 2. * pi / 4.3906208382975998e-53;
22033  pf = pow(d__1, c_b186);
22034 /* SCALE DOWNWARD BY 1.D60 */
22035  pf *= 1e-60;
22036 
22037  nr = 0;
22038 L555:
22039  ++nr;
22040  //ldelvi = ldelvis[nr - 1];
22041  ivi = ivis[nr - 1];
22042  ivip = ivips[nr - 1];
22043  ldelel = ldelels[nr - 1];
22044  a = as[nr - 1];
22045  b = bs[nr - 1];
22046 /* WRITE (6,334) LDELVI,IVI,IVIP, LDELEL,A,B */
22047 /* L334: */
22048 /* LDELVI=DELTA(V)=V'-V */
22049 /* IVI = V */
22050 /* LDELEL = DELTA(L) = L'-L */
22051 
22052  iv = ivi + 1;
22053  ivp = ivip + 1;
22054  nnii = niv[iv - 1];
22055  s__1 = nnii;
22056  for (l = 1; l <= s__1; ++l) {
22057  am = a * exp(-b * (double) (l * (l + 1)));
22058  lp = l + ldelel;
22059  ll = l - 1;
22060  llp = lp - 1;
22061  if (lp > niv[ivp - 1] || lp < 1) {
22062  goto L20;
22063  }
22064  if (eb_ref(lp, ivp) == 0.) {
22065  goto L20;
22066  }
22067  if (eb_ref(l, iv) == 0.) {
22068  goto L20;
22069  }
22070 
22071  stoke = eb_ref(lp, ivp) - eb_ref(l, iv);
22072  stoki = am * exp(-alfa * eb_ref(l, iv)) / pf * (double) ((ll << 1)
22073  + 1) * clebsqr_(&ll, &cs__5, &llp);
22074  profile_(&stoke, &stoki);
22075  if (stoki > 0.) {
22076  ++nlines;
22077  }
22078  stokip = am * exp(-alfa * eb_ref(lp, ivp)) / pf * (double) ((llp
22079  << 1) + 1) * clebsqr_(&llp, &cs__5, &ll);
22080  d__1 = -stoke;
22081  profile_(&d__1, &stokip);
22082  if (stokip > 0.) {
22083  ++nlines;
22084  }
22085 L20:
22086  ;
22087  }
22088  if (nr == 54) {
22089  goto L56;
22090  }
22091 
22092  goto L555;
22093 L56:
22094 /* 54 ENTRIES FOR (5440)=(5404) IN TABLE 6 */
22095 
22096  s__1 = nsriup;
22097  for (n = 1; n <= s__1; ++n) {
22098 /* L90: */
22099  rsibb[n - 1] = rsibb[n - 1] / twopic / slit;
22100  }
22101 
22102  *nsol = nsri + 1;
22103  //nsol2 = *nsol + 1;
22104 
22105  s__1 = *nsol;
22106  for (i__ = 1; i__ <= s__1; ++i__) {
22107 /* L22: */
22108  rsi[i__] = rsibb[*nsol - 1 + i__ - 1];
22109  }
22110 
22111 /* PRINT 999, (RSI(I),I=1,NSOL) */
22112 /* L999: */
22113 
22114  return 0;
22115 } /* bound54_ */
22116 
22117 #undef slit
22118 #undef dx
22119 #undef wnrmax3
22120 #undef nsri
22121 #undef ns
22122 #undef nsriup
22123 #undef eb
22124 #undef niv
22125 #undef nlines
22126 #undef rsibb
22127 
22128 
22129 #undef eb_ref
22130 
22131 
22132 double clebsqr_0_(int n__, int *l, int *lambda, int *lp)
22133 {
22134  /* System generated locals */
22135  int s__1, s__2;
22136  double ret_val, d__1;
22137 
22138  /* Local variables */
22139  extern double fctl_(int *);
22140  double f;
22141  int i__;
22142  double p;
22143  int i0, i1;
22144  double fc;
22145 
22146 /* SQUARE OF CLEBSCH-GORDAN COEFFICIENT (L,LAMBDA,0,0;LP,0) */
22147 /* FOR INTEGER ARGUMENTS ONLY */
22148 /* NOTE THAT LAMBDA SHOULD BE SMALL, MAYBE @10 OR SO. */
22149 
22150 
22151  switch(n__) {
22152  case 1: goto L_threej2;
22153  }
22154 
22155  fc = (double) ((*lp << 1) + 1);
22156  goto L2;
22157 
22158 
22159 L_threej2:
22160 /* THIS ENTRY RETURNS THE SQUARED 3-J SYMBOL L LAMBDA LP */
22161 /* 0 0 0 */
22162 /* INSTEAD OF THE CLEBSCH-GORDAN COEFFICIENT */
22163 /* (LIMITATION TO INTEGER ARGUMENTS ONLY) */
22164 
22165 /* NOTE THAT THE THREE-J SYMBOLS ARE COMPLETELY SYMMETRIC IN THE */
22166 /* ARGUMENTS. IT WOULD BE ADVANTAGEOUS TO REORDER THE INPUT ARGUMENT */
22167 /* LIST SO THAT LAMBDA BECOMES THE SMALLEST OF THE 3 ARGUMENTS. */
22168  fc = 1.;
22169 L2:
22170  ret_val = 0.;
22171  if (*l + *lambda < *lp || *lambda + *lp < *l || *l + *lp < *lambda) {
22172  return ret_val;
22173  }
22174  if ((*l + *lp + *lambda) % 2 != 0) {
22175  return ret_val;
22176  }
22177  if (*l < 0 || *lp < 0 || *lambda < 0) {
22178  return ret_val;
22179  }
22180  f = 1. / (double) (*l + *lp + 1 - *lambda);
22181  if (*lambda == 0) {
22182  goto L22;
22183  }
22184  i1 = (*l + *lp + *lambda) / 2;
22185  i0 = (*l + *lp - *lambda) / 2 + 1;
22186  s__1 = i1;
22187  for (i__ = i0; i__ <= s__1; ++i__) {
22188 /* L20: */
22189  f = f * (double) i__ / (double) (((i__ << 1) + 1) << 1);
22190  }
22191 L22:
22192  s__1 = *lambda + *l - *lp;
22193  s__2 = *lambda + *lp - *l;
22194  p = fc * f * fctl_(&s__1) * fctl_(&s__2);
22195  s__1 = (*lambda + *l - *lp) / 2;
22196  s__2 = (*lambda + *lp - *l) / 2;
22197 /* Computing 2nd power */
22198  d__1 = fctl_(&s__1) * fctl_(&s__2);
22199  ret_val = p / (d__1 * d__1);
22200  return ret_val;
22201 } /* clebsqr_ */
22202 
22203 double clebsqr_(int *l, int *lambda, int *lp)
22204 {
22205  return clebsqr_0_(0, l, lambda, lp);
22206  }
22207 
22208 double fctl_(int *n)
22209 {
22210  /* System generated locals */
22211  int s__1;
22212  double ret_val, d__1;
22213 
22214  /* Local variables */
22215  int i__, j;
22216  double z__;
22217 
22218 
22219 
22220  ret_val = 1.;
22221  if (*n <= 1) {
22222  return ret_val;
22223  }
22224  if (*n > 15) {
22225  goto L20;
22226  }
22227  j = 1;
22228  s__1 = *n;
22229  for (i__ = 2; i__ <= s__1; ++i__) {
22230 /* L10: */
22231  j *= i__;
22232  }
22233  ret_val = (double) j;
22234  return ret_val;
22235 L20:
22236  z__ = (double) (*n + 1);
22237  d__1 = z__ - .5;
22238  ret_val = exp(-z__) * pow(z__, d__1) * ((((-2.294720936e-4 / z__ -
22239  .00268132716) / z__ + .003472222222) / z__ + .08333333333) / z__
22240  + 1.) * 2.506628274631;
22241  return ret_val;
22242 } /* fctl_ */
22243 #define ik1k0 (k1k0_1.ik1k0)
22244 
22245 double bgama_(double *fnu, double *t1, double *t2, double
22246  *eps, double *t3, double *t4, double *temp)
22247 {
22248  /* Initialized data */
22249 
22250  static double pi = 3.1415926535898;
22251  static double clight = 29979245800.;
22252  static double hbar = 1.0545887e-27;
22253  static double boltz = 1.380662e-16;
22254 
22255  /* System generated locals */
22256  double ret_val, d__1, d__2, d__3, d__4;
22257 
22258  /* Local variables */
22259  double omega, z__, k0, t0, bgambc, zp, xk1;
22260 
22261 /* SPECTRAL FUNCTION "EBC", FOR REFERENCE: */
22262 /* SEE "PHENOMENA INDUCED BY INTERMOLECULAR INTERACTIONS", */
22263 /* ED. G. BIRNBAUM; J. BORYSOW AND L. FROMMHOLD, P.67, (1985) */
22264 /* ============================================ */
22265 
22266 
22267 /* IF IK1K0=1 ONLY B-C; EBC OTHERWISE */
22268 
22269  omega = 2. * pi * clight * *fnu;
22270  t0 = hbar / (boltz * 2. * *temp);
22271 /* Computing 2nd power */
22272  d__1 = omega * *t1;
22273  z__ = sqrt((d__1 * d__1 + 1.) * (*t2 * *t2 + t0 * t0)) / *t1;
22274  if (z__ - 2. <= 0.) {
22275  goto L10;
22276  } else {
22277  goto L12;
22278  }
22279 L10:
22280 /* Computing 2nd power */
22281  d__2 = z__ / 3.75;
22282  d__1 = d__2 * d__2;
22283 /* Computing 2nd power */
22284  d__4 = z__ / 2.;
22285  d__3 = d__4 * d__4;
22286  xk1 = z__ * z__ * log(z__ / 2.) * ((((((3.2411e-4 * d__1 + .00301532) *
22287  d__1 + .02658733) * d__1 + .15084934) * d__1 + .51498869) * d__1
22288  + .87890594) * d__1 + .5) + ((((((-4.686e-5 * d__3 - .00110404) *
22289  d__3 - .01919402) * d__3 - .18156897) * d__3 - .67278579) * d__3
22290  + .15443144) * d__3 + 1.);
22291  goto L20;
22292 L12:
22293  d__1 = 2. / z__;
22294  xk1 = sqrt(z__) * exp(-z__) * ((((((-6.8245e-4 * d__1 + .00325614) * d__1
22295  - .00780353) * d__1 + .01504268) * d__1 - .0365562) * d__1 +
22296  .23498619) * d__1 + 1.25331414);
22297 L20:
22298 /* Computing 2nd power */
22299  d__1 = *t1 * omega;
22300  bgambc = *t1 / pi * exp(*t2 / *t1 + t0 * omega) * xk1 / (d__1 * d__1 + 1.)
22301  ;
22302  if (ik1k0 == 1) {
22303  goto L55;
22304  }
22305 /* Computing 2nd power */
22306  d__1 = omega * *t4;
22307  zp = sqrt((d__1 * d__1 + 1.) * (*t3 * *t3 + t0 * t0)) / *t4;
22308  if (zp - 2. <= 0.) {
22309  goto L22;
22310  } else {
22311  goto L24;
22312  }
22313 L22:
22314 /* Computing 2nd power */
22315  d__2 = zp / 3.75;
22316  d__1 = d__2 * d__2;
22317 /* Computing 2nd power */
22318  d__4 = zp / 2.;
22319  d__3 = d__4 * d__4;
22320  k0 = -log(zp / 2.) * ((((((.0045813 * d__1 + .0360768) * d__1 + .2659732)
22321  * d__1 + 1.2067492) * d__1 + 3.0899424) * d__1 + 3.5156229) *
22322  d__1 + 1.) + ((((((7.4e-6 * d__3 + 1.075e-4) * d__3 + .00262698) *
22323  d__3 + .0348859) * d__3 + .23069756) * d__3 + .4227842) * d__3 -
22324  .57721566);
22325  goto L30;
22326 L24:
22327  d__1 = 2. / zp;
22328  k0 = exp(-zp) * ((((((5.3208e-4 * d__1 - .0025154) * d__1 + .00587872) *
22329  d__1 - .01062446) * d__1 + .02189568) * d__1 - .07832358) * d__1
22330  + 1.25331414) / sqrt(zp);
22331 L30:
22332  ret_val = (bgambc + *eps * (*t3 / pi) * exp(*t3 / *t4 + t0 * omega) * k0)
22333  / (*eps + 1.);
22334  goto L66;
22335 L55:
22336  ret_val = bgambc;
22337 L66:
22338  return ret_val;
22339 } /* bgama_ */
22340 
22341 #undef ik1k0
22342 
22343 
22344 /* Subroutine */ int spline_0_(int n__, int *l, int *m, int *k,
22345  double *eps, double *x, double *y, double *t,
22346  double *ss, double *si, int *nr, double *s2)
22347 {
22348  /* System generated locals */
22349  int s__1, s__2;
22350  double d__1, d__2;
22351 
22352  /* Local variables */
22353  double epsi, prod, h__;
22354  int i__, j, n;
22355  double w, omega;
22356  int n1;
22357  double s3;
22358  int ic;
22359  double sm, delsqs, ht1, ht2, ss2, yp1, eta, ypn;
22360 
22361 
22362 
22363 /* SPLINE INTERPOLATION AND QUADRATURE, THIRD ORDER AFTER GREVILLE. */
22364 /* INPUT ARGUMENTS L...Y, OUTPUT SS...NR. */
22365 /* L DATA POINTS X(1), Y(1) ... X(L),Y(L) */
22366 /* EPS=ERROR CRITERION, TYPICALLY EPS=1.D-5 FOR 5 DECI. PLACES ACCURA */
22367 /* M ARGUMENTS T(1)..T(M) FOR WHICH FUNCTION VALUES SS(1)..SS(M), FOR */
22368 /* K=0; OR FIRST OR SECOND DERIVATIVE FOR K=1 OR -1, RESPECTIVELY. */
22369 /* NOTE THAT M HAS TO BE AT LEAST EQUAL TO 1. */
22370 /* SI=INTEGRAL (OVER WHOLE INTERVAL) FOR K=2 ONLY. */
22371 /* FOR 'NATURAL' SPLINE FUNCTIONS, S2(1)=S2(L)=0. MUST BE INPUT*NOTE* */
22372 /* N0 INDICATES THE NUMBER OF OUT-OF-RANGE CALLS. X(1)<T(I)<X(L) */
22373 /* EXTRAPOLATE WITH CAUTION. (ASSUMPTION D2Y/DX2 = 0.) */
22374 /* S2(I) IS THE 2ND DERIVATIVE AT X=X(I) AND IS COMPUTED INTERNALLY. */
22375 /* DIMENSION X(L),Y(L),T(M),SS(M),S2(L) */
22376 
22377  /* Parameter adjustments */
22378  --x;
22379  --y;
22380  --t;
22381  --ss;
22382  --s2;
22383 
22384  /* Function Body */
22385  switch(n__) {
22386  case 1: goto L_ixpolat;
22387  }
22388 
22389  n = *l;
22390  n1 = n - 1;
22391  *nr = 0;
22392 /* L4: */
22393  s__1 = n1;
22394  for (i__ = 2; i__ <= s__1; ++i__) {
22395 /* L52: */
22396  s__2 = i__ - 1;
22397  s2[i__] = 3. * ((y[i__ + 1] - y[i__]) / (x[i__ + 1] - x[i__]) - (y[
22398  s__2 + 1] - y[s__2]) / (x[s__2 + 1] - x[s__2])) / (x[i__ + 1]
22399  - x[i__ - 1]) / 1.5;
22400  }
22401  omega = 1.0717968;
22402  ic = 0;
22403 /* 'NATURAL' SPLINE FUNCTIONS OF THIRD ORDER. */
22404  s2[1] = 0.;
22405  s2[n] = 0.;
22406 L5:
22407  eta = 0.;
22408  ++ic;
22409  sm = abs(s2[1]);
22410  s__2 = n;
22411  for (i__ = 2; i__ <= s__2; ++i__) {
22412  if ((d__1 = s2[i__], abs(d__1)) > sm) {
22413  sm = (d__2 = s2[i__], abs(d__2));
22414  }
22415 /* L25: */
22416  }
22417  epsi = *eps * sm;
22418 /* L6: */
22419  s__2 = n1;
22420  for (i__ = 2; i__ <= s__2; ++i__) {
22421 /* L7: */
22422  s__1 = i__ - 1;
22423  w = (3. * ((y[i__ + 1] - y[i__]) / (x[i__ + 1] - x[i__]) - (y[s__1 +
22424  1] - y[s__1]) / (x[s__1 + 1] - x[s__1])) / (x[i__ + 1] - x[
22425  i__ - 1]) - (x[i__] - x[i__ - 1]) * .5 / (x[i__ + 1] - x[i__
22426  - 1]) * s2[i__ - 1] - (.5 - (x[i__] - x[i__ - 1]) * .5 / (x[
22427  i__ + 1] - x[i__ - 1])) * s2[i__ + 1] - s2[i__]) * omega;
22428 /* L8: */
22429  if (abs(w) - eta <= 0.) {
22430  goto L10;
22431  } else {
22432  goto L9;
22433  }
22434 L9:
22435  eta = abs(w);
22436 L10:
22437  s2[i__] += w;
22438  }
22439 /* L13: */
22440  if (eta - epsi >= 0.) {
22441  goto L5;
22442  } else {
22443  goto L14;
22444  }
22445 /* ENTRY IXPOLAT */
22446 
22447 L_ixpolat:
22448 /* THIS ENTRY USEFUL WHEN ITERATION PREVIOUSLY COMPLETED */
22449 
22450  n = *l;
22451  n1 = n - 1;
22452  *nr = 0;
22453  ic = -1;
22454 L14:
22455  if (*k - 2 != 0) {
22456  goto L15;
22457  } else {
22458  goto L20;
22459  }
22460 L15:
22461  s__2 = *m;
22462  for (j = 1; j <= s__2; ++j) {
22463 /* L16: */
22464  i__ = 1;
22465 /* L54: */
22466  if ((d__1 = t[j] - x[1]) < 0.) {
22467  goto L58;
22468  } else if (d__1 == 0) {
22469  goto L17;
22470  } else {
22471  goto L55;
22472  }
22473 L55:
22474  if ((d__1 = t[j] - x[n]) < 0.) {
22475  goto L57;
22476  } else if (d__1 == 0) {
22477  goto L59;
22478  } else {
22479  goto L158;
22480  }
22481 L56:
22482  if ((d__1 = t[j] - x[i__]) < 0.) {
22483  goto L60;
22484  } else if (d__1 == 0) {
22485  goto L17;
22486  } else {
22487  goto L57;
22488  }
22489 L57:
22490  ++i__;
22491  goto L56;
22492 
22493 L58:
22494  ++(*nr);
22495  ht1 = t[j] - x[1];
22496  //ht2 = t[j] - x[2];
22497  yp1 = (y[cs__1 + 1] - y[cs__1]) / (x[cs__1 + 1] - x[cs__1]) + (x[1] -
22498  x[2]) * (s2[1] * 2. + s2[2]) / 6.;
22499  if (*k < 0) {
22500  goto L72;
22501  } else if (*k == 0) {
22502  goto L70;
22503  } else {
22504  goto L71;
22505  }
22506 L71:
22507  ss[j] = yp1 + ht1 * s2[1];
22508  goto L61;
22509 L70:
22510  ss[j] = y[1] + yp1 * ht1 + s2[1] * ht1 * ht1 / 2.;
22511  goto L61;
22512 L72:
22513  ss[j] = s2[i__];
22514  goto L61;
22515 L158:
22516  ht2 = t[j] - x[n];
22517  //ht1 = t[j] - x[n1];
22518  ++(*nr);
22519  ypn = (y[n1 + 1] - y[n1]) / (x[n1 + 1] - x[n1]) + (x[n] - x[n1]) * (
22520  s2[n1] + s2[n] * 2.) / 6.;
22521  if (*k < 0) {
22522  goto L82;
22523  } else if (*k == 0) {
22524  goto L80;
22525  } else {
22526  goto L81;
22527  }
22528 L81:
22529  ss[j] = ypn + ht2 * s2[n];
22530  goto L61;
22531 L80:
22532  ss[j] = y[n] + ypn * ht2 + s2[n] * ht2 * ht2 / 2.;
22533  goto L61;
22534 L82:
22535  ss[j] = s2[n];
22536  goto L61;
22537 
22538 L59:
22539  i__ = n;
22540 L60:
22541  --i__;
22542 L17:
22543  ht1 = t[j] - x[i__];
22544  ht2 = t[j] - x[i__ + 1];
22545  prod = ht1 * ht2;
22546  s3 = (s2[i__ + 1] - s2[i__]) / (x[i__ + 1] - x[i__]);
22547  ss2 = s2[i__] + ht1 * s3;
22548  delsqs = (s2[i__] + s2[i__ + 1] + ss2) / 6.;
22549 
22550  if (*k < 0) {
22551  goto L43;
22552  } else if (*k == 0) {
22553  goto L41;
22554  } else {
22555  goto L42;
22556  }
22557 L41:
22558  ss[j] = y[i__] + ht1 * ((y[i__ + 1] - y[i__]) / (x[i__ + 1] - x[i__]))
22559  + prod * delsqs;
22560  goto L61;
22561 L42:
22562  ss[j] = (y[i__ + 1] - y[i__]) / (x[i__ + 1] - x[i__]) + (ht1 + ht2) *
22563  delsqs + prod * s3 / 6.;
22564  goto L61;
22565 L43:
22566  ss[j] = ss2;
22567 L61:
22568  ;
22569  }
22570 L20:
22571  *si = 0.;
22572 
22573  s__2 = n1;
22574  for (i__ = 1; i__ <= s__2; ++i__) {
22575  h__ = x[i__ + 1] - x[i__];
22576 /* L62: */
22577 /* Computing 3rd power */
22578  d__1 = h__;
22579  *si = *si + h__ * .5 * (y[i__] + y[i__ + 1]) - d__1 * (d__1 * d__1) *
22580  (s2[i__] + s2[i__ + 1]) / 24.;
22581  }
22582 
22583  if (*k == 2) {
22584  *nr = ic;
22585  }
22586 
22587  return 0;
22588 } /* spline_ */
22589 
22590 /* Subroutine */ int spline_(int *l, int *m, int *k,
22591  double *eps, double *x, double *y, double *t,
22592  double *ss, double *si, int *nr, double *s2)
22593 {
22594  return spline_0_(0, l, m, k, eps, x, y, t, ss, si, nr, s2);
22595  }
22596 
22597 /* Subroutine */ int ixpolat_(int *l, int *m, int *k,
22598  double *eps, double *x, double *y, double *t,
22599  double *ss, double *si, int *nr, double *s2)
22600 {
22601  return spline_0_(1, l, m, k, eps, x, y, t, ss, si, nr, s2);
22602  }
22603 
22604 
22605 // ---------------------- end of Borysow N2N2 F77 code -------------------------
22606 
22607 
22608 // ---------------------- begin of monortm CKD F77 code -------------------------
22609 
22610 
22611 /* Common Block Declarations */
22612 
22613 struct fh2oa_1_ {
22614  double fh2o[2003];
22615 };
22616 
22617 #define fh2oa_1 (*(struct fh2oa_1_ *) &fh2oa_)
22618 
22619 struct fh2ob_1_ {
22620  double v1, v2, dv;
22621  int nptfh2o;
22622 };
22623 struct fh2ob_2_ {
22624  double v1, v2, dv;
22625  int npts;
22626 };
22627 
22628 #define fh2ob_1 (*(struct fh2ob_1_ *) &fh2ob_)
22629 #define fh2ob_2 (*(struct fh2ob_2_ *) &fh2ob_)
22630 
22631 struct sh2oa_1_ {
22632  double swv296[2003];
22633 };
22634 
22635 #define sh2oa_1 (*(struct sh2oa_1_ *) &sh2oa_)
22636 
22637 struct sh2ob_1_ {
22638  double v1, v2, dv;
22640 };
22641 struct sh2ob_2_ {
22642  double v1, v2, dv;
22643  int npts;
22644 };
22645 
22646 #define sh2ob_1 (*(struct sh2ob_1_ *) &sh2ob_)
22647 #define sh2ob_2 (*(struct sh2ob_2_ *) &sh2ob_)
22648 
22649 struct s260a_1_ {
22650  double swv260[2003];
22651 };
22652 
22653 #define s260a_1 (*(struct s260a_1_ *) &s260a_)
22654 
22655 struct s260b_1_ {
22656  double v1___, v2___, dv___;
22658 };
22659 struct s260b_2_ {
22660  double v1, v2, dv;
22661  int npts;
22662 };
22663 
22664 #define s260b_1 (*(struct s260b_1_ *) &s260b_)
22665 #define s260b_2 (*(struct s260b_2_ *) &s260b_)
22666 
22667 struct consts_1_ {
22668  double pi, planck, boltz, clight, avogad, alosmt, gascon, radcn1,
22669  radcn2;
22670 };
22671 
22672 #define consts_1 (*(struct consts_1_ *) &consts_)
22673 
22674 /* Initialized data */
22675 
22676 struct s_fh2oa_ {
22677  double e_1[2003];
22678  } fh2oa_ = { {.012859, .011715, .011038, .011715, .012859, .015326,
22679  .016999, .018321, .019402, .01957, .019432, .017572, .01676,
22680  .01548, .013984, .012266, .010467, .0094526, .0080485, .0069484,
22681  .0061416, .0050941, .0044836, .0038133, .0034608, .0031487,
22682  .0024555, .0020977, .0017266, .001492, .0012709, 9.8081e-4,
22683  8.5063e-4, 6.8822e-4, 5.3809e-4, 4.4679e-4, 3.3774e-4, 2.7979e-4,
22684  2.1047e-4, 1.6511e-4, 1.2993e-4, 9.3033e-5, 7.436e-5, 5.6428e-5,
22685  4.5442e-5, 3.4575e-5, 2.7903e-5, 2.1374e-5, 1.6075e-5, 1.3022e-5,
22686  1.0962e-5, 8.5959e-6, 6.9125e-6, 5.3808e-6, 4.3586e-6, 3.6394e-6,
22687  2.9552e-6, 2.3547e-6, 1.8463e-6, 1.6036e-6, 1.3483e-6, 1.1968e-6,
22688  1.0333e-6, 8.4484e-7, 6.7195e-7, 5.0947e-7, 4.2343e-7, 3.4453e-7,
22689  2.783e-7, 2.3063e-7, 1.9951e-7, 1.7087e-7, 1.4393e-7, 1.2575e-7,
22690  1.075e-7, 8.2325e-8, 5.7524e-8, 4.4482e-8, 3.8106e-8, 3.4315e-8,
22691  2.9422e-8, 2.5069e-8, 2.2402e-8, 1.9349e-8, 1.6152e-8, 1.2208e-8,
22692  8.966e-9, 7.1322e-9, 6.1028e-9, 5.2938e-9, 4.535e-9, 3.4977e-9,
22693  2.9511e-9, 2.4734e-9, 2.0508e-9, 1.8507e-9, 1.6373e-9, 1.5171e-9,
22694  1.3071e-9, 1.2462e-9, 1.2148e-9, 1.259e-9, 1.3153e-9, 1.3301e-9,
22695  1.4483e-9, 1.6944e-9, 2.0559e-9, 2.2954e-9, 2.6221e-9, 3.2606e-9,
22696  4.2392e-9, 5.2171e-9, 6.2553e-9, 8.2548e-9, 9.5842e-9, 1.128e-8,
22697  1.3628e-8, 1.7635e-8, 2.1576e-8, 2.4835e-8, 3.0014e-8, 3.8485e-8,
22698  4.744e-8, 5.5202e-8, 7.0897e-8, 9.6578e-8, 1.3976e-7, 1.8391e-7,
22699  2.3207e-7, 2.996e-7, 4.0408e-7, 5.926e-7, 7.8487e-7, 1.0947e-6,
22700  1.4676e-6, 1.9325e-6, 2.6587e-6, 3.4534e-6, 4.4376e-6, 5.8061e-6,
22701  7.0141e-6, 8.4937e-6, 1.0186e-5, 1.2034e-5, 1.3837e-5, 1.6595e-5,
22702  1.9259e-5, 2.162e-5, 2.3681e-5, 2.7064e-5, 3.251e-5, 3.546e-5,
22703  3.9109e-5, 4.2891e-5, 4.7757e-5, 5.0981e-5, 5.0527e-5, 4.8618e-5,
22704  4.4001e-5, 3.7982e-5, 3.2667e-5, 2.7794e-5, 2.491e-5, 2.4375e-5,
22705  2.7316e-5, 3.2579e-5, 3.5499e-5, 3.801e-5, 4.1353e-5, 4.3323e-5,
22706  4.3004e-5, 3.979e-5, 3.7718e-5, 3.636e-5, 3.2386e-5, 2.7409e-5,
22707  2.3626e-5, 2.0631e-5, 1.8371e-5, 1.5445e-5, 1.2989e-5, 1.1098e-5,
22708  9.6552e-6, 8.0649e-6, 7.2365e-6, 5.9137e-6, 5.2759e-6, 4.886e-6,
22709  4.1321e-6, 3.5918e-6, 2.764e-6, 2.4892e-6, 2.1018e-6, 1.7848e-6,
22710  1.5855e-6, 1.3569e-6, 1.1986e-6, 9.4693e-7, 7.4097e-7, 6.3443e-7,
22711  4.8131e-7, 4.0942e-7, 3.3316e-7, 2.8488e-7, 2.3461e-7, 1.7397e-7,
22712  1.4684e-7, 1.0953e-7, 8.5396e-8, 6.9261e-8, 5.4001e-8, 4.543e-8,
22713  3.2791e-8, 2.5995e-8, 2.0225e-8, 1.571e-8, 1.3027e-8, 1.0229e-8,
22714  8.5277e-9, 6.5249e-9, 5.0117e-9, 3.9906e-9, 3.2332e-9, 2.7847e-9,
22715  2.457e-9, 2.3359e-9, 2.0599e-9, 1.8436e-9, 1.6559e-9, 1.491e-9,
22716  1.2794e-9, 9.8229e-10, 8.0054e-10, 6.0769e-10, 4.5646e-10,
22717  3.3111e-10, 2.4428e-10, 1.8007e-10, 1.3291e-10, 9.7974e-11,
22718  7.8271e-11, 6.3833e-11, 5.4425e-11, 4.6471e-11, 4.0209e-11,
22719  3.5227e-11, 3.1212e-11, 2.884e-11, 2.7762e-11, 2.7935e-11,
22720  3.2012e-11, 3.9525e-11, 5.0303e-11, 6.8027e-11, 9.3954e-11,
22721  1.2986e-10, 1.8478e-10, 2.5331e-10, 3.4827e-10, 4.6968e-10,
22722  6.238e-10, 7.9106e-10, 1.0026e-9, 1.2102e-9, 1.4146e-9, 1.6154e-9,
22723  1.751e-9, 1.8575e-9, 1.8742e-9, 1.87e-9, 1.8582e-9, 1.9657e-9,
22724  2.1204e-9, 2.0381e-9, 2.0122e-9, 2.0436e-9, 2.1213e-9, 2.0742e-9,
22725  1.987e-9, 2.0465e-9, 2.1556e-9, 2.2222e-9, 2.1977e-9, 2.1047e-9,
22726  1.9334e-9, 1.7357e-9, 1.5754e-9, 1.4398e-9, 1.4018e-9, 1.5459e-9,
22727  1.7576e-9, 2.1645e-9, 2.948e-9, 4.4439e-9, 5.8341e-9, 8.0757e-9,
22728  1.1658e-8, 1.6793e-8, 2.2694e-8, 2.9468e-8, 3.9278e-8, 5.2145e-8,
22729  6.4378e-8, 7.7947e-8, 8.5321e-8, 9.7848e-8, 1.0999e-7, 1.1489e-7,
22730  1.2082e-7, 1.2822e-7, 1.4053e-7, 1.5238e-7, 1.5454e-7, 1.5018e-7,
22731  1.4048e-7, 1.2359e-7, 1.0858e-7, 9.3486e-8, 8.1638e-8, 7.769e-8,
22732  8.4625e-8, 1.0114e-7, 1.143e-7, 1.2263e-7, 1.3084e-7, 1.338e-7,
22733  1.3573e-7, 1.3441e-7, 1.2962e-7, 1.2638e-7, 1.1934e-7, 1.1371e-7,
22734  1.0871e-7, 9.8843e-8, 9.1877e-8, 9.105e-8, 9.3213e-8, 9.2929e-8,
22735  1.0155e-7, 1.1263e-7, 1.237e-7, 1.3636e-7, 1.54e-7, 1.7656e-7,
22736  2.1329e-7, 2.3045e-7, 2.5811e-7, 2.9261e-7, 3.4259e-7, 4.077e-7,
22737  4.8771e-7, 5.8081e-7, 7.2895e-7, 8.7482e-7, 1.0795e-6, 1.3384e-6,
22738  1.7208e-6, 2.0677e-6, 2.5294e-6, 3.1123e-6, 3.79e-6, 4.7752e-6,
22739  5.6891e-6, 6.6261e-6, 7.6246e-6, 8.773e-6, 9.6672e-6, 1.098e-5,
22740  1.1287e-5, 1.167e-5, 1.1635e-5, 1.1768e-5, 1.2039e-5, 1.2253e-5,
22741  1.3294e-5, 1.4005e-5, 1.3854e-5, 1.342e-5, 1.3003e-5, 1.2645e-5,
22742  1.1715e-5, 1.1258e-5, 1.1516e-5, 1.2494e-5, 1.3655e-5, 1.4931e-5,
22743  1.4649e-5, 1.3857e-5, 1.312e-5, 1.1791e-5, 1.0637e-5, 8.276e-6,
22744  6.5821e-6, 5.1959e-6, 4.0158e-6, 3.0131e-6, 2.0462e-6, 1.4853e-6,
22745  1.0365e-6, 7.3938e-7, 4.9752e-7, 3.4148e-7, 2.4992e-7, 1.8363e-7,
22746  1.4591e-7, 1.138e-7, 9.0588e-8, 7.3697e-8, 6.0252e-8, 5.1868e-8,
22747  4.266e-8, 3.6163e-8, 3.2512e-8, 2.9258e-8, 2.4238e-8, 2.1209e-8,
22748  1.6362e-8, 1.3871e-8, 1.2355e-8, 9.694e-9, 7.7735e-9, 6.2278e-9,
22749  5.2282e-9, 4.3799e-9, 3.5545e-9, 2.7527e-9, 2.095e-9, 1.6344e-9,
22750  1.2689e-9, 1.0403e-9, 8.488e-10, 6.3461e-10, 4.7657e-10,
22751  3.522e-10, 2.7879e-10, 2.3021e-10, 1.6167e-10, 1.1732e-10,
22752  8.9206e-11, 7.0596e-11, 5.831e-11, 4.4084e-11, 3.1534e-11,
22753  2.5068e-11, 2.2088e-11, 2.2579e-11, 2.2637e-11, 2.5705e-11,
22754  3.2415e-11, 4.6116e-11, 6.5346e-11, 9.4842e-11, 1.2809e-10,
22755  1.8211e-10, 2.4052e-10, 3.027e-10, 3.5531e-10, 4.2402e-10,
22756  4.673e-10, 4.7942e-10, 4.6813e-10, 4.5997e-10, 4.5788e-10,
22757  4.0311e-10, 3.7367e-10, 3.3149e-10, 2.9281e-10, 2.5231e-10,
22758  2.1152e-10, 1.9799e-10, 1.8636e-10, 1.9085e-10, 2.0786e-10,
22759  2.2464e-10, 2.3785e-10, 2.5684e-10, 2.7499e-10, 2.6962e-10,
22760  2.6378e-10, 2.6297e-10, 2.6903e-10, 2.7035e-10, 2.5394e-10,
22761  2.5655e-10, 2.7184e-10, 2.9013e-10, 3.0585e-10, 3.0791e-10,
22762  3.1667e-10, 3.4343e-10, 3.7365e-10, 4.0269e-10, 4.726e-10,
22763  5.6584e-10, 6.9791e-10, 8.6569e-10, 1.0393e-9, 1.2067e-9,
22764  1.5047e-9, 1.8583e-9, 2.2357e-9, 2.6498e-9, 3.2483e-9, 3.9927e-9,
22765  4.6618e-9, 5.5555e-9, 6.6609e-9, 8.2139e-9, 1.0285e-8, 1.3919e-8,
22766  1.8786e-8, 2.515e-8, 3.313e-8, 4.5442e-8, 6.337e-8, 9.0628e-8,
22767  1.2118e-7, 1.5927e-7, 2.1358e-7, 2.7825e-7, 3.7671e-7, 4.4894e-7,
22768  5.4442e-7, 6.224e-7, 7.3004e-7, 8.3384e-7, 8.7933e-7, 8.808e-7,
22769  8.6939e-7, 8.6541e-7, 8.2055e-7, 7.7278e-7, 7.5989e-7, 8.6909e-7,
22770  9.7945e-7, 1.0394e-6, 1.0646e-6, 1.1509e-6, 1.2017e-6, 1.1915e-6,
22771  1.1259e-6, 1.1549e-6, 1.1938e-6, 1.2356e-6, 1.2404e-6, 1.1716e-6,
22772  1.1149e-6, 1.0073e-6, 8.9845e-7, 7.6639e-7, 6.1517e-7, 5.0887e-7,
22773  4.1269e-7, 3.2474e-7, 2.5698e-7, 1.8893e-7, 1.4009e-7, 1.034e-7,
22774  7.7724e-8, 5.7302e-8, 4.2178e-8, 2.9603e-8, 2.1945e-8, 1.6301e-8,
22775  1.2806e-8, 1.0048e-8, 7.897e-9, 6.1133e-9, 4.9054e-9, 4.1985e-9,
22776  3.6944e-9, 3.2586e-9, 2.7362e-9, 2.3647e-9, 2.1249e-9, 1.8172e-9,
22777  1.6224e-9, 1.5158e-9, 1.2361e-9, 1.0682e-9, 9.2312e-10, 7.922e-10,
22778  6.8174e-10, 5.6147e-10, 4.8268e-10, 4.1534e-10, 3.3106e-10,
22779  2.8275e-10, 2.4584e-10, 2.0742e-10, 1.784e-10, 1.4664e-10,
22780  1.239e-10, 1.0497e-10, 8.5038e-11, 6.7008e-11, 5.6355e-11,
22781  4.3323e-11, 3.6914e-11, 3.2262e-11, 3.0749e-11, 3.0318e-11,
22782  2.9447e-11, 2.9918e-11, 3.0668e-11, 3.1315e-11, 3.0329e-11,
22783  2.8259e-11, 2.6065e-11, 2.3578e-11, 2.0469e-11, 1.6908e-11,
22784  1.4912e-11, 1.1867e-11, 9.973e-12, 8.1014e-12, 6.7528e-12,
22785  6.3133e-12, 5.8599e-12, 6.0145e-12, 6.5105e-12, 7.0537e-12,
22786  7.4973e-12, 7.8519e-12, 8.5039e-12, 9.1995e-12, 1.0694e-11,
22787  1.1659e-11, 1.2685e-11, 1.3087e-11, 1.3222e-11, 1.2634e-11,
22788  1.1077e-11, 9.6259e-12, 8.3202e-12, 7.4857e-12, 6.8069e-12,
22789  6.7496e-12, 7.3116e-12, 8.0171e-12, 8.6394e-12, 9.2659e-12,
22790  1.0048e-11, 1.0941e-11, 1.2226e-11, 1.3058e-11, 1.5193e-11,
22791  1.8923e-11, 2.3334e-11, 2.8787e-11, 3.6693e-11, 4.8295e-11,
22792  6.426e-11, 8.8269e-11, 1.1865e-10, 1.5961e-10, 2.0605e-10,
22793  2.7349e-10, 3.7193e-10, 4.8216e-10, 6.1966e-10, 7.715e-10,
22794  1.0195e-9, 1.2859e-9, 1.6535e-9, 2.0316e-9, 2.3913e-9, 3.0114e-9,
22795  3.7495e-9, 4.6504e-9, 5.9145e-9, 7.684e-9, 1.0304e-8, 1.301e-8,
22796  1.6441e-8, 2.1475e-8, 2.5892e-8, 2.9788e-8, 3.382e-8, 4.0007e-8,
22797  4.4888e-8, 4.5765e-8, 4.6131e-8, 4.6239e-8, 4.4849e-8, 4.0729e-8,
22798  3.6856e-8, 3.6164e-8, 3.7606e-8, 4.1457e-8, 4.375e-8, 5.115e-8,
22799  5.6054e-8, 6.1586e-8, 6.4521e-8, 6.6494e-8, 6.9024e-8, 6.8893e-8,
22800  7.0901e-8, 6.976e-8, 7.1485e-8, 7.074e-8, 7.3764e-8, 7.6618e-8,
22801  8.4182e-8, 9.3838e-8, 1.0761e-7, 1.2851e-7, 1.4748e-7, 1.8407e-7,
22802  2.2109e-7, 2.6392e-7, 2.9887e-7, 3.4493e-7, 4.0336e-7, 4.3551e-7,
22803  4.9231e-7, 5.0728e-7, 5.3781e-7, 5.3285e-7, 5.4496e-7, 5.5707e-7,
22804  5.6944e-7, 6.1123e-7, 6.4317e-7, 6.4581e-7, 6.1999e-7, 6.0191e-7,
22805  5.7762e-7, 5.7241e-7, 5.7013e-7, 6.016e-7, 6.6905e-7, 7.4095e-7,
22806  8.2121e-7, 8.0947e-7, 7.6145e-7, 7.2193e-7, 6.3722e-7, 5.4316e-7,
22807  4.2186e-7, 3.2528e-7, 2.5207e-7, 1.8213e-7, 1.2658e-7, 8.6746e-8,
22808  6.0216e-8, 4.1122e-8, 2.8899e-8, 2.174e-8, 1.799e-8, 1.5593e-8,
22809  1.397e-8, 1.2238e-8, 1.0539e-8, 9.2386e-9, 7.8481e-9, 6.8704e-9,
22810  5.7615e-9, 5.0434e-9, 4.6886e-9, 4.377e-9, 3.9768e-9, 3.5202e-9,
22811  3.1854e-9, 2.9009e-9, 2.5763e-9, 2.2135e-9, 1.9455e-9, 1.6248e-9,
22812  1.3368e-9, 1.0842e-9, 8.4254e-10, 6.7414e-10, 5.4667e-10,
22813  4.5005e-10, 3.4932e-10, 2.6745e-10, 2.2053e-10, 1.8162e-10,
22814  1.4935e-10, 1.1618e-10, 9.1888e-11, 8.0672e-11, 6.8746e-11,
22815  6.2668e-11, 5.5715e-11, 4.5074e-11, 3.7669e-11, 3.2082e-11,
22816  2.8085e-11, 2.4838e-11, 1.9791e-11, 1.6964e-11, 1.3887e-11,
22817  1.1179e-11, 9.7499e-12, 7.8255e-12, 6.3698e-12, 5.3265e-12,
22818  4.6588e-12, 4.4498e-12, 3.9984e-12, 3.7513e-12, 3.7176e-12,
22819  3.9148e-12, 4.2702e-12, 5.009e-12, 6.5801e-12, 8.7787e-12,
22820  1.2718e-11, 1.8375e-11, 2.5304e-11, 3.5403e-11, 4.8842e-11,
22821  6.484e-11, 8.0911e-11, 1.0136e-10, 1.2311e-10, 1.4203e-10,
22822  1.5869e-10, 1.8093e-10, 2.137e-10, 2.5228e-10, 2.8816e-10,
22823  3.4556e-10, 3.986e-10, 4.435e-10, 4.776e-10, 5.2357e-10,
22824  6.0827e-10, 6.3635e-10, 6.5886e-10, 6.8753e-10, 7.2349e-10,
22825  7.2789e-10, 6.8232e-10, 6.6081e-10, 6.4232e-10, 6.3485e-10,
22826  6.4311e-10, 7.2235e-10, 7.7263e-10, 8.1668e-10, 9.0324e-10,
22827  9.7643e-10, 1.0535e-9, 1.0195e-9, 1.0194e-9, 1.0156e-9,
22828  9.6792e-10, 9.2725e-10, 8.7347e-10, 8.4484e-10, 8.2647e-10,
22829  8.4363e-10, 9.1261e-10, 1.0051e-9, 1.1511e-9, 1.4037e-9,
22830  1.8066e-9, 2.4483e-9, 3.2739e-9, 4.3194e-9, 5.6902e-9, 7.7924e-9,
22831  9.7376e-9, 1.2055e-8, 1.4303e-8, 1.6956e-8, 1.9542e-8, 2.2233e-8,
22832  2.5186e-8, 2.7777e-8, 2.8943e-8, 2.8873e-8, 2.9417e-8, 2.7954e-8,
22833  2.7524e-8, 2.704e-8, 3.1254e-8, 3.6843e-8, 3.7797e-8, 3.8713e-8,
22834  4.0135e-8, 4.2824e-8, 4.3004e-8, 4.0279e-8, 4.2781e-8, 4.522e-8,
22835  4.8948e-8, 5.0172e-8, 4.8499e-8, 4.7182e-8, 4.2204e-8, 3.7701e-8,
22836  3.0972e-8, 2.4654e-8, 1.9543e-8, 1.4609e-8, 1.1171e-8, 8.3367e-9,
22837  6.3791e-9, 5.079e-9, 4.0655e-9, 3.3658e-9, 2.7882e-9, 2.4749e-9,
22838  2.2287e-9, 2.0217e-9, 1.8191e-9, 1.5897e-9, 1.4191e-9, 1.2448e-9,
22839  1.0884e-9, 9.3585e-10, 7.9429e-10, 7.3214e-10, 6.5008e-10,
22840  5.7549e-10, 5.43e-10, 4.7251e-10, 4.3451e-10, 3.8446e-10,
22841  3.5589e-10, 3.4432e-10, 2.8209e-10, 2.462e-10, 2.1278e-10,
22842  1.8406e-10, 1.6314e-10, 1.3261e-10, 1.1696e-10, 9.6865e-11,
22843  7.6814e-11, 6.6411e-11, 5.0903e-11, 4.0827e-11, 3.0476e-11,
22844  2.323e-11, 1.7707e-11, 1.3548e-11, 1.0719e-11, 9.3026e-12,
22845  8.7967e-12, 8.3136e-12, 7.3918e-12, 6.5293e-12, 5.9243e-12,
22846  5.3595e-12, 3.5266e-12, 2.2571e-12, 1.615e-12, 1.1413e-12,
22847  8.4998e-13, 7.0803e-13, 5.1747e-13, 4.0694e-13, 3.6528e-13,
22848  3.367e-13, 3.1341e-13, 2.939e-13, 2.868e-13, 3.1283e-13,
22849  3.7294e-13, 5.0194e-13, 6.7919e-13, 1.0455e-12, 1.523e-12,
22850  2.3932e-12, 3.4231e-12, 5.0515e-12, 7.3193e-12, 9.9406e-12,
22851  1.2193e-11, 1.4742e-11, 1.9269e-11, 2.1816e-11, 2.275e-11,
22852  2.2902e-11, 2.3888e-11, 2.4902e-11, 2.216e-11, 2.0381e-11,
22853  1.9903e-11, 2.0086e-11, 1.9304e-11, 2.0023e-11, 2.2244e-11,
22854  2.545e-11, 3.1228e-11, 3.456e-11, 3.6923e-11, 3.7486e-11,
22855  3.8124e-11, 3.8317e-11, 3.4737e-11, 3.3037e-11, 3.1724e-11,
22856  2.984e-11, 2.8301e-11, 2.5857e-11, 2.3708e-11, 1.9452e-11,
22857  1.6232e-11, 1.5174e-11, 1.4206e-11, 1.4408e-11, 1.5483e-11,
22858  1.8642e-11, 2.3664e-11, 3.0181e-11, 4.016e-11, 5.2287e-11,
22859  7.2754e-11, 1.0511e-10, 1.4531e-10, 2.0998e-10, 2.6883e-10,
22860  3.3082e-10, 4.2638e-10, 5.3132e-10, 6.3617e-10, 7.1413e-10,
22861  8.5953e-10, 9.9715e-10, 1.0796e-9, 1.0978e-9, 1.1052e-9,
22862  1.1095e-9, 1.0641e-9, 9.7881e-10, 9.659e-10, 1.0332e-9, 1.1974e-9,
22863  1.3612e-9, 1.5829e-9, 1.8655e-9, 2.1465e-9, 2.4779e-9, 2.737e-9,
22864  2.9915e-9, 3.3037e-9, 3.6347e-9, 3.9587e-9, 4.4701e-9, 5.0122e-9,
22865  5.8044e-9, 6.1916e-9, 6.9613e-9, 7.7863e-9, 8.282e-9, 9.4359e-9,
22866  9.7387e-9, 1.0656e-8, 1.0746e-8, 1.121e-8, 1.1905e-8, 1.2194e-8,
22867  1.3145e-8, 1.3738e-8, 1.3634e-8, 1.3011e-8, 1.2511e-8, 1.1805e-8,
22868  1.2159e-8, 1.239e-8, 1.3625e-8, 1.5678e-8, 1.7886e-8, 1.9933e-8,
22869  1.9865e-8, 1.9e-8, 1.7812e-8, 1.5521e-8, 1.2593e-8, 9.5635e-9,
22870  7.2987e-9, 5.2489e-9, 3.5673e-9, 2.4206e-9, 1.6977e-9, 1.2456e-9,
22871  9.3744e-10, 7.8379e-10, 6.996e-10, 6.6451e-10, 6.8521e-10,
22872  7.4234e-10, 8.6658e-10, 9.4972e-10, 1.0791e-9, 1.2359e-9,
22873  1.3363e-9, 1.5025e-9, 1.5368e-9, 1.6152e-9, 1.6184e-9, 1.6557e-9,
22874  1.7035e-9, 1.6916e-9, 1.7237e-9, 1.7175e-9, 1.6475e-9, 1.5335e-9,
22875  1.4272e-9, 1.3282e-9, 1.3459e-9, 1.4028e-9, 1.5192e-9, 1.7068e-9,
22876  1.9085e-9, 2.1318e-9, 2.102e-9, 1.9942e-9, 1.8654e-9, 1.6391e-9,
22877  1.3552e-9, 1.0186e-9, 7.854e-10, 5.7022e-10, 3.9247e-10,
22878  2.5441e-10, 1.6699e-10, 1.1132e-10, 6.8989e-11, 4.5255e-11,
22879  3.1106e-11, 2.3161e-11, 1.7618e-11, 1.438e-11, 1.1601e-11,
22880  9.7148e-12, 8.4519e-12, 6.5392e-12, 5.4113e-12, 4.7624e-12,
22881  4.0617e-12, 3.6173e-12, 2.8608e-12, 2.2724e-12, 1.7436e-12,
22882  1.3424e-12, 1.0358e-12, 7.3064e-13, 5.45e-13, 4.0551e-13,
22883  2.8642e-13, 2.1831e-13, 1.686e-13, 1.2086e-13, 1.015e-13,
22884  9.355e-14, 8.4105e-14, 7.3051e-14, 6.9796e-14, 7.9949e-14,
22885  1.0742e-13, 1.5639e-13, 2.1308e-13, 3.1226e-13, 4.6853e-13,
22886  6.6917e-13, 1.0088e-12, 1.4824e-12, 2.2763e-12, 3.3917e-12,
22887  4.4585e-12, 6.3187e-12, 8.4189e-12, 1.1302e-11, 1.3431e-11,
22888  1.5679e-11, 1.9044e-11, 2.2463e-11, 2.3605e-11, 2.3619e-11,
22889  2.3505e-11, 2.3805e-11, 2.2549e-11, 1.9304e-11, 1.8382e-11,
22890  1.7795e-11, 1.8439e-11, 1.9146e-11, 2.1966e-11, 2.6109e-11,
22891  3.1883e-11, 3.7872e-11, 4.3966e-11, 4.8789e-11, 5.3264e-11,
22892  5.9705e-11, 6.3744e-11, 7.0163e-11, 7.9114e-11, 8.8287e-11,
22893  9.9726e-11, 1.1498e-10, 1.37e-10, 1.6145e-10, 1.9913e-10,
22894  2.2778e-10, 2.6216e-10, 2.977e-10, 3.3405e-10, 3.7821e-10,
22895  3.9552e-10, 4.1322e-10, 4.0293e-10, 4.0259e-10, 3.8853e-10,
22896  3.7842e-10, 3.8551e-10, 4.4618e-10, 5.0527e-10, 5.0695e-10,
22897  5.1216e-10, 5.193e-10, 5.5794e-10, 5.332e-10, 5.2008e-10,
22898  5.6888e-10, 6.1883e-10, 6.9006e-10, 6.9505e-10, 6.6768e-10,
22899  6.329e-10, 5.6753e-10, 5.0327e-10, 3.983e-10, 3.1147e-10,
22900  2.4416e-10, 1.886e-10, 1.3908e-10, 9.9156e-11, 7.3779e-11,
22901  5.6048e-11, 4.2457e-11, 3.4505e-11, 2.9881e-11, 2.7865e-11,
22902  2.8471e-11, 3.1065e-11, 3.4204e-11, 3.914e-11, 4.3606e-11,
22903  4.9075e-11, 5.3069e-11, 5.5236e-11, 5.5309e-11, 5.3832e-11,
22904  5.3183e-11, 5.1783e-11, 5.2042e-11, 5.4422e-11, 5.5656e-11,
22905  5.4409e-11, 5.2659e-11, 5.1696e-11, 5.1726e-11, 4.9003e-11,
22906  4.905e-11, 5.17e-11, 5.6818e-11, 6.3129e-11, 6.6542e-11,
22907  6.4367e-11, 5.9908e-11, 5.447e-11, 4.7903e-11, 3.9669e-11,
22908  2.9651e-11, 2.2286e-11, 1.6742e-11, 1.1827e-11, 7.7739e-12,
22909  4.8805e-12, 3.1747e-12, 2.0057e-12, 1.255e-12, 8.7434e-13,
22910  6.2755e-13, 4.9752e-13, 4.0047e-13, 3.5602e-13, 3.093e-13,
22911  2.4903e-13, 1.9316e-13, 1.4995e-13, 1.2059e-13, 8.7242e-14,
22912  6.4511e-14, 5.33e-14, 4.3741e-14, 3.4916e-14, 2.656e-14,
22913  1.6923e-14, 1.1816e-14, 6.7071e-15, 3.6474e-15, 2.0686e-15,
22914  1.1925e-15, 6.8948e-16, 3.9661e-16, 2.2576e-16, 1.2669e-16,
22915  6.9908e-17, 3.7896e-17, 2.028e-17, 1.1016e-17, 6.7816e-18,
22916  6.0958e-18, 8.9913e-18, 1.7201e-17, 3.4964e-17, 7.0722e-17,
22917  1.402e-16, 2.7167e-16, 5.1478e-16, 9.55e-16, 1.7376e-15,
22918  3.1074e-15, 5.4789e-15, 9.564e-15, 1.6635e-14, 2.9145e-14,
22919  5.2179e-14, 8.8554e-14, 1.4764e-13, 2.3331e-13, 3.5996e-13,
22920  5.2132e-13, 6.3519e-13, 7.3174e-13, 8.3752e-13, 9.8916e-13,
22921  1.1515e-12, 1.4034e-12, 1.6594e-12, 2.1021e-12, 2.7416e-12,
22922  3.4135e-12, 4.5517e-12, 5.5832e-12, 7.2303e-12, 9.9484e-12,
22923  1.2724e-11, 1.6478e-11, 2.0588e-11, 2.5543e-11, 3.3625e-11,
22924  4.1788e-11, 5.0081e-11, 6.0144e-11, 6.9599e-11, 8.4408e-11,
22925  9.7143e-11, 1.0805e-10, 1.1713e-10, 1.2711e-10, 1.3727e-10,
22926  1.4539e-10, 1.6049e-10, 1.768e-10, 2.0557e-10, 2.4967e-10,
22927  3.0096e-10, 3.5816e-10, 4.0851e-10, 4.6111e-10, 5.2197e-10,
22928  5.5043e-10, 6.0324e-10, 6.4983e-10, 6.7498e-10, 7.0545e-10,
22929  7.068e-10, 7.5218e-10, 7.5723e-10, 7.784e-10, 8.0081e-10,
22930  8.0223e-10, 7.7271e-10, 7.1676e-10, 6.7819e-10, 6.4753e-10,
22931  6.5844e-10, 7.0163e-10, 7.7503e-10, 8.8152e-10, 9.9022e-10,
22932  1.0229e-9, 9.9296e-10, 8.9911e-10, 7.7813e-10, 6.3785e-10,
22933  4.7491e-10, 3.528e-10, 2.4349e-10, 1.6502e-10, 1.1622e-10,
22934  8.6715e-11, 6.736e-11, 5.391e-11, 4.5554e-11, 4.13e-11,
22935  3.9728e-11, 3.9e-11, 3.9803e-11, 4.1514e-11, 4.3374e-11,
22936  4.6831e-11, 4.8921e-11, 5.1995e-11, 5.7242e-11, 6.2759e-11,
22937  7.0801e-11, 7.4555e-11, 7.9754e-11, 8.7616e-11, 9.1171e-11,
22938  1.0349e-10, 1.1047e-10, 1.2024e-10, 1.299e-10, 1.3725e-10,
22939  1.5005e-10, 1.5268e-10, 1.5535e-10, 1.5623e-10, 1.5009e-10,
22940  1.4034e-10, 1.3002e-10, 1.2225e-10, 1.1989e-10, 1.2411e-10,
22941  1.3612e-10, 1.5225e-10, 1.7202e-10, 1.9471e-10, 1.9931e-10,
22942  1.9079e-10, 1.7478e-10, 1.5259e-10, 1.2625e-10, 9.3332e-11,
22943  6.8796e-11, 4.6466e-11, 2.9723e-11, 1.8508e-11, 1.2106e-11,
22944  8.0142e-12, 5.4066e-12, 3.9329e-12, 3.1665e-12, 2.742e-12,
22945  2.3996e-12, 2.3804e-12, 2.3242e-12, 2.4476e-12, 2.5331e-12,
22946  2.3595e-12, 2.2575e-12, 2.1298e-12, 2.0088e-12, 1.8263e-12,
22947  1.6114e-12, 1.4422e-12, 1.2946e-12, 1.0837e-12, 9.1282e-13,
22948  7.2359e-13, 5.3307e-13, 3.8837e-13, 2.6678e-13, 1.6769e-13,
22949  1.0826e-13, 7.2364e-14, 4.5201e-14, 3.0808e-14, 2.2377e-14,
22950  1.704e-14, 9.2181e-15, 5.2934e-15, 3.5774e-15, 3.1431e-15,
22951  3.7647e-15, 5.6428e-15, 9.5139e-15, 1.7322e-14, 2.8829e-14,
22952  4.7708e-14, 6.9789e-14, 9.7267e-14, 1.4662e-13, 1.9429e-13,
22953  2.5998e-13, 3.6636e-13, 4.796e-13, 6.5129e-13, 7.7638e-13,
22954  9.3774e-13, 1.1467e-12, 1.3547e-12, 1.5686e-12, 1.6893e-12,
22955  1.9069e-12, 2.1352e-12, 2.3071e-12, 2.4759e-12, 2.8247e-12,
22956  3.4365e-12, 4.3181e-12, 5.6107e-12, 7.0017e-12, 8.6408e-12,
22957  1.0974e-11, 1.3742e-11, 1.6337e-11, 2.0157e-11, 2.3441e-11,
22958  2.6733e-11, 3.0247e-11, 3.3737e-11, 3.8618e-11, 4.1343e-11,
22959  4.387e-11, 4.4685e-11, 4.4881e-11, 4.5526e-11, 4.3628e-11,
22960  4.4268e-11, 4.6865e-11, 5.3426e-11, 5.402e-11, 5.3218e-11,
22961  5.4587e-11, 5.636e-11, 5.774e-11, 5.6426e-11, 6.0399e-11,
22962  6.6981e-11, 7.4319e-11, 7.7977e-11, 7.5539e-11, 7.161e-11,
22963  6.4606e-11, 5.5498e-11, 4.3944e-11, 3.3769e-11, 2.5771e-11,
22964  1.9162e-11, 1.3698e-11, 1.0173e-11, 7.8925e-12, 6.1938e-12,
22965  4.7962e-12, 4.0811e-12, 3.3912e-12, 2.8625e-12, 2.4504e-12,
22966  2.2188e-12, 2.2139e-12, 2.2499e-12, 2.2766e-12, 2.3985e-12,
22967  2.5459e-12, 2.9295e-12, 3.4196e-12, 3.6155e-12, 4.0733e-12,
22968  4.461e-12, 4.9372e-12, 5.4372e-12, 5.7304e-12, 6.164e-12,
22969  6.1278e-12, 6.294e-12, 6.4947e-12, 6.8174e-12, 7.519e-12,
22970  8.2608e-12, 8.4971e-12, 8.3484e-12, 8.1888e-12, 7.8552e-12,
22971  7.8468e-12, 7.5943e-12, 7.9096e-12, 8.6869e-12, 9.1303e-12,
22972  9.2547e-12, 8.9322e-12, 8.2177e-12, 7.3408e-12, 5.7956e-12,
22973  4.447e-12, 3.5881e-12, 2.6748e-12, 1.7074e-12, 9.67e-13,
22974  5.2645e-13, 2.9943e-13, 1.7316e-13, 1.0039e-13, 5.7859e-14,
22975  3.2968e-14, 1.8499e-14, 1.0192e-14, 5.5015e-15, 2.904e-15,
22976  1.4968e-15, 7.5244e-16, 3.6852e-16, 1.7568e-16, 8.1464e-17,
22977  3.6717e-17, 1.6076e-17, 6.8341e-18, 2.8195e-18, 1.1286e-18, 0.,
22978  0., 0., 0., 0., 0., 0., 0., 0., 1.407e-18, 3.0405e-18, 6.4059e-18,
22979  1.3169e-17, 2.6443e-17, 5.1917e-17, 9.9785e-17, 1.8802e-16,
22980  3.4788e-16, 6.3328e-16, 1.137e-15, 2.0198e-15, 3.5665e-15,
22981  6.3053e-15, 1.1309e-14, 2.1206e-14, 3.2858e-14, 5.5165e-14,
22982  8.6231e-14, 1.2776e-13, 1.778e-13, 2.5266e-13, 3.6254e-13,
22983  5.1398e-13, 6.8289e-13, 8.7481e-13, 1.1914e-12, 1.6086e-12,
22984  2.0469e-12, 2.5761e-12, 3.4964e-12, 4.498e-12, 5.5356e-12,
22985  6.7963e-12, 8.572e-12, 1.07e-11, 1.2983e-11, 1.627e-11,
22986  1.9609e-11, 2.2668e-11, 2.5963e-11, 3.0918e-11, 3.493e-11,
22987  3.933e-11, 4.4208e-11, 4.6431e-11, 5.1141e-11, 5.4108e-11,
22988  5.8077e-11, 6.505e-11, 7.2126e-11, 8.1064e-11, 8.1973e-11,
22989  8.1694e-11, 8.3081e-11, 8.024e-11, 7.9225e-11, 7.6256e-11,
22990  7.8468e-11, 8.0041e-11, 8.1585e-11, 8.3485e-11, 8.3774e-11,
22991  8.587e-11, 8.6104e-11, 8.8516e-11, 9.0814e-11, 9.2522e-11,
22992  8.8913e-11, 7.8381e-11, 6.8568e-11, 5.6797e-11, 4.4163e-11,
22993  3.2369e-11, 2.3259e-11, 1.6835e-11, 1.1733e-11, 8.5273e-12,
22994  6.3805e-12, 4.8983e-12, 3.8831e-12, 3.261e-12, 2.8577e-12,
22995  2.521e-12, 2.2913e-12, 2.0341e-12, 1.8167e-12, 1.6395e-12,
22996  1.489e-12, 1.3516e-12, 1.2542e-12, 1.291e-12, 1.3471e-12,
22997  1.4689e-12, 1.5889e-12, 1.6989e-12, 1.8843e-12, 2.0902e-12,
22998  2.3874e-12, 2.7294e-12, 3.3353e-12, 4.0186e-12, 4.5868e-12,
22999  5.2212e-12, 5.8856e-12, 6.5991e-12, 7.2505e-12, 7.6637e-12,
23000  8.5113e-12, 9.4832e-12, 9.9678e-12, 1.0723e-11, 1.0749e-11,
23001  1.138e-11, 1.1774e-11, 1.1743e-11, 1.2493e-11, 1.2559e-11,
23002  1.2332e-11, 1.1782e-11, 1.1086e-11, 1.0945e-11, 1.1178e-11,
23003  1.2083e-11, 1.3037e-11, 1.473e-11, 1.645e-11, 1.7403e-11,
23004  1.7004e-11, 1.5117e-11, 1.3339e-11, 1.0844e-11, 8.0915e-12,
23005  5.6615e-12, 3.7196e-12, 2.5194e-12, 1.6569e-12, 1.1201e-12,
23006  8.2335e-13, 6.027e-13, 4.8205e-13, 4.1313e-13, 3.6243e-13,
23007  3.2575e-13, 2.773e-13, 2.5292e-13, 2.3062e-13, 2.1126e-13,
23008  2.1556e-13, 2.1213e-13, 2.2103e-13, 2.1927e-13, 2.0794e-13,
23009  1.9533e-13, 1.6592e-13, 1.4521e-13, 1.1393e-13, 8.3772e-14,
23010  6.2077e-14, 4.3337e-14, 2.7165e-14, 1.6821e-14, 9.5407e-15,
23011  5.3093e-15, 3.032e-15, 1.7429e-15, 9.9828e-16, 5.6622e-16,
23012  3.1672e-16, 1.7419e-16, 9.3985e-17, 4.9656e-17, 2.5652e-17,
23013  1.2942e-17, 6.3695e-18, 3.0554e-18, 1.4273e-18, -0., -0., -0.,
23014  -0., -0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
23015  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
23016  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
23017  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
23018  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
23019  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
23020  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
23021  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
23022  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
23023  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
23024  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
23025  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.} };
23026 
23027 struct s_fh2ob_ {
23028  double e_1[3];
23029  int e_2;
23030  } fh2ob_ = { {-20., 2e4, 10.}, 2003 };
23031 
23032 struct s_sh2oa_ {
23033  double e_1[2003];
23034  } sh2oa_ = { {.11109, .10573, .10162, .10573, .11109, .12574, .13499,
23035  .14327, .15065, .15164, .15022, .13677, .13115, .12253, .11271,
23036  .1007, .087495, .080118, .06994, .062034, .056051, .047663,
23037  .04245, .03669, .033441, .030711, .025205, .022113, .01888,
23038  .016653, .014626, .012065, .010709, .0091783, .0077274, .0067302,
23039  .0056164, .0049089, .0041497, .0035823, .0031124, .0026414,
23040  .0023167, .0020156, .0017829, .0015666, .0013928, .0012338,
23041  .0010932, 9.7939e-4, 8.8241e-4, 7.9173e-4, 7.1296e-4, 6.4179e-4,
23042  5.8031e-4, 5.2647e-4, 4.7762e-4, 4.3349e-4, 3.9355e-4, 3.5887e-4,
23043  3.2723e-4, 2.9919e-4, 2.7363e-4, 2.5013e-4, 2.2876e-4, 2.0924e-4,
23044  1.9193e-4, 1.7618e-4, 1.6188e-4, 1.4891e-4, 1.3717e-4, 1.2647e-4,
23045  1.1671e-4, 1.0786e-4, 9.9785e-5, 9.235e-5, 8.5539e-5, 7.9377e-5,
23046  7.3781e-5, 6.8677e-5, 6.3993e-5, 5.9705e-5, 5.5788e-5, 5.2196e-5,
23047  4.8899e-5, 4.5865e-5, 4.3079e-5, 4.0526e-5, 3.8182e-5, 3.6025e-5,
23048  3.4038e-5, 3.2203e-5, 3.0511e-5, 2.8949e-5, 2.7505e-5, 2.617e-5,
23049  2.4933e-5, 2.3786e-5, 2.2722e-5, 2.1736e-5, 2.0819e-5, 1.9968e-5,
23050  1.9178e-5, 1.8442e-5, 1.776e-5, 1.7127e-5, 1.6541e-5, 1.5997e-5,
23051  1.5495e-5, 1.5034e-5, 1.4614e-5, 1.423e-5, 1.3883e-5, 1.3578e-5,
23052  1.3304e-5, 1.3069e-5, 1.2876e-5, 1.2732e-5, 1.2626e-5, 1.2556e-5,
23053  1.2544e-5, 1.2604e-5, 1.2719e-5, 1.2883e-5, 1.3164e-5, 1.3581e-5,
23054  1.4187e-5, 1.4866e-5, 1.5669e-5, 1.6717e-5, 1.8148e-5, 2.0268e-5,
23055  2.2456e-5, 2.5582e-5, 2.9183e-5, 3.3612e-5, 3.9996e-5, 4.6829e-5,
23056  5.5055e-5, 6.5897e-5, 7.536e-5, 8.7213e-5, 1.0046e-4, 1.1496e-4,
23057  1.2943e-4, 1.5049e-4, 1.6973e-4, 1.8711e-4, 2.0286e-4, 2.2823e-4,
23058  2.678e-4, 2.8766e-4, 3.1164e-4, 3.364e-4, 3.6884e-4, 3.9159e-4,
23059  3.8712e-4, 3.7433e-4, 3.4503e-4, 3.1003e-4, 2.8027e-4, 2.5253e-4,
23060  2.3408e-4, 2.2836e-4, 2.4442e-4, 2.7521e-4, 2.9048e-4, 3.0489e-4,
23061  3.2646e-4, 3.388e-4, 3.3492e-4, 3.0987e-4, 2.9482e-4, 2.8711e-4,
23062  2.6068e-4, 2.2683e-4, 1.9996e-4, 1.7788e-4, 1.6101e-4, 1.3911e-4,
23063  1.2013e-4, 1.0544e-4, 9.4224e-5, 8.1256e-5, 7.3667e-5, 6.2233e-5,
23064  5.5906e-5, 5.1619e-5, 4.514e-5, 4.0273e-5, 3.3268e-5, 3.0258e-5,
23065  2.644e-5, 2.3103e-5, 2.0749e-5, 1.8258e-5, 1.6459e-5, 1.4097e-5,
23066  1.2052e-5, 1.0759e-5, 9.14e-6, 8.1432e-6, 7.146e-6, 6.4006e-6,
23067  5.6995e-6, 4.9372e-6, 4.4455e-6, 3.9033e-6, 3.474e-6, 3.1269e-6,
23068  2.8059e-6, 2.5558e-6, 2.2919e-6, 2.0846e-6, 1.8983e-6, 1.7329e-6,
23069  1.5929e-6, 1.4631e-6, 1.3513e-6, 1.2461e-6, 1.1519e-6, 1.0682e-6,
23070  9.9256e-7, 9.2505e-7, 8.6367e-7, 8.0857e-7, 7.5674e-7, 7.0934e-7,
23071  6.658e-7, 6.258e-7, 5.8853e-7, 5.5333e-7, 5.2143e-7, 4.9169e-7,
23072  4.6431e-7, 4.3898e-7, 4.1564e-7, 3.9405e-7, 3.7403e-7, 3.5544e-7,
23073  3.3819e-7, 3.2212e-7, 3.0714e-7, 2.9313e-7, 2.8003e-7, 2.6777e-7,
23074  2.5628e-7, 2.4551e-7, 2.354e-7, 2.2591e-7, 2.1701e-7, 2.0866e-7,
23075  2.0082e-7, 1.9349e-7, 1.8665e-7, 1.8027e-7, 1.7439e-7, 1.6894e-7,
23076  1.64e-7, 1.5953e-7, 1.5557e-7, 1.5195e-7, 1.4888e-7, 1.4603e-7,
23077  1.4337e-7, 1.4093e-7, 1.3828e-7, 1.3569e-7, 1.327e-7, 1.2984e-7,
23078  1.2714e-7, 1.2541e-7, 1.2399e-7, 1.2102e-7, 1.1878e-7, 1.1728e-7,
23079  1.1644e-7, 1.1491e-7, 1.1305e-7, 1.1235e-7, 1.1228e-7, 1.1224e-7,
23080  1.1191e-7, 1.1151e-7, 1.1098e-7, 1.1068e-7, 1.1109e-7, 1.1213e-7,
23081  1.1431e-7, 1.1826e-7, 1.2322e-7, 1.3025e-7, 1.4066e-7, 1.5657e-7,
23082  1.7214e-7, 1.9449e-7, 2.2662e-7, 2.6953e-7, 3.1723e-7, 3.7028e-7,
23083  4.4482e-7, 5.3852e-7, 6.2639e-7, 7.2175e-7, 7.7626e-7, 8.7248e-7,
23084  9.6759e-7, 1.0102e-6, 1.062e-6, 1.1201e-6, 1.2107e-6, 1.2998e-6,
23085  1.313e-6, 1.2856e-6, 1.235e-6, 1.1489e-6, 1.0819e-6, 1.012e-6,
23086  9.4795e-7, 9.2858e-7, 9.806e-7, 1.0999e-6, 1.1967e-6, 1.2672e-6,
23087  1.3418e-6, 1.3864e-6, 1.433e-6, 1.4592e-6, 1.4598e-6, 1.4774e-6,
23088  1.4726e-6, 1.482e-6, 1.505e-6, 1.4984e-6, 1.5181e-6, 1.5888e-6,
23089  1.685e-6, 1.769e-6, 1.9277e-6, 2.1107e-6, 2.3068e-6, 2.5347e-6,
23090  2.8069e-6, 3.1345e-6, 3.5822e-6, 3.9051e-6, 4.3422e-6, 4.8704e-6,
23091  5.5351e-6, 6.3454e-6, 7.269e-6, 8.2974e-6, 9.7609e-6, 1.1237e-5,
23092  1.3187e-5, 1.5548e-5, 1.8784e-5, 2.1694e-5, 2.5487e-5, 3.0092e-5,
23093  3.5385e-5, 4.2764e-5, 4.9313e-5, 5.58e-5, 6.2968e-5, 7.106e-5,
23094  7.7699e-5, 8.7216e-5, 8.9335e-5, 9.2151e-5, 9.2779e-5, 9.4643e-5,
23095  9.7978e-5, 1.0008e-4, 1.0702e-4, 1.1026e-4, 1.0828e-4, 1.055e-4,
23096  1.0432e-4, 1.0428e-4, 9.898e-5, 9.4992e-5, 9.5159e-5, 1.0058e-4,
23097  1.0738e-4, 1.155e-4, 1.1229e-4, 1.0596e-4, 1.0062e-4, 9.1742e-5,
23098  8.4492e-5, 6.8099e-5, 5.6295e-5, 4.6502e-5, 3.8071e-5, 3.0721e-5,
23099  2.3297e-5, 1.8688e-5, 1.483e-5, 1.2049e-5, 9.6754e-6, 7.9192e-6,
23100  6.6673e-6, 5.6468e-6, 4.8904e-6, 4.2289e-6, 3.688e-6, 3.2396e-6,
23101  2.8525e-6, 2.5363e-6, 2.2431e-6, 1.9949e-6, 1.7931e-6, 1.6164e-6,
23102  1.4431e-6, 1.2997e-6, 1.1559e-6, 1.0404e-6, 9.43e-7, 8.4597e-7,
23103  7.6133e-7, 6.8623e-7, 6.2137e-7, 5.6345e-7, 5.1076e-7, 4.6246e-7,
23104  4.1906e-7, 3.8063e-7, 3.461e-7, 3.1554e-7, 2.8795e-7, 2.6252e-7,
23105  2.3967e-7, 2.1901e-7, 2.0052e-7, 1.8384e-7, 1.6847e-7, 1.5459e-7,
23106  1.4204e-7, 1.3068e-7, 1.2036e-7, 1.1095e-7, 1.0237e-7, 9.4592e-8,
23107  8.753e-8, 8.1121e-8, 7.5282e-8, 6.9985e-8, 6.5189e-8, 6.0874e-8,
23108  5.6989e-8, 5.353e-8, 5.0418e-8, 4.7745e-8, 4.5367e-8, 4.3253e-8,
23109  4.1309e-8, 3.9695e-8, 3.8094e-8, 3.6482e-8, 3.4897e-8, 3.35e-8,
23110  3.2302e-8, 3.0854e-8, 2.9698e-8, 2.8567e-8, 2.76e-8, 2.6746e-8,
23111  2.5982e-8, 2.551e-8, 2.5121e-8, 2.4922e-8, 2.4909e-8, 2.5013e-8,
23112  2.5216e-8, 2.5589e-8, 2.6049e-8, 2.6451e-8, 2.6978e-8, 2.7687e-8,
23113  2.86e-8, 2.9643e-8, 3.0701e-8, 3.2058e-8, 3.3695e-8, 3.5558e-8,
23114  3.7634e-8, 3.9875e-8, 4.2458e-8, 4.548e-8, 4.8858e-8, 5.2599e-8,
23115  5.703e-8, 6.2067e-8, 6.7911e-8, 7.4579e-8, 8.1902e-8, 8.9978e-8,
23116  9.987e-8, 1.1102e-7, 1.2343e-7, 1.3732e-7, 1.5394e-7, 1.7318e-7,
23117  1.9383e-7, 2.1819e-7, 2.4666e-7, 2.8109e-7, 3.2236e-7, 3.776e-7,
23118  4.4417e-7, 5.2422e-7, 6.1941e-7, 7.4897e-7, 9.2041e-7, 1.1574e-6,
23119  1.4126e-6, 1.7197e-6, 2.1399e-6, 2.6266e-6, 3.3424e-6, 3.8418e-6,
23120  4.514e-6, 5.0653e-6, 5.8485e-6, 6.5856e-6, 6.8937e-6, 6.9121e-6,
23121  6.9005e-6, 6.9861e-6, 6.82e-6, 6.6089e-6, 6.5809e-6, 7.3496e-6,
23122  8.0311e-6, 8.3186e-6, 8.426e-6, 9.0644e-6, 9.4965e-6, 9.4909e-6,
23123  9.016e-6, 9.1494e-6, 9.3629e-6, 9.5944e-6, 9.5459e-6, 8.9919e-6,
23124  8.604e-6, 7.8613e-6, 7.1567e-6, 6.2677e-6, 5.1899e-6, 4.4188e-6,
23125  3.7167e-6, 3.0636e-6, 2.5573e-6, 2.0317e-6, 1.6371e-6, 1.3257e-6,
23126  1.0928e-6, 8.9986e-7, 7.4653e-7, 6.1111e-7, 5.1395e-7, 4.35e-7,
23127  3.7584e-7, 3.2633e-7, 2.8413e-7, 2.4723e-7, 2.1709e-7, 1.9294e-7,
23128  1.7258e-7, 1.5492e-7, 1.382e-7, 1.2389e-7, 1.1189e-7, 1.0046e-7,
23129  9.0832e-8, 8.2764e-8, 7.4191e-8, 6.7085e-8, 6.0708e-8, 5.4963e-8,
23130  4.9851e-8, 4.5044e-8, 4.0916e-8, 3.722e-8, 3.3678e-8, 3.0663e-8,
23131  2.7979e-8, 2.5495e-8, 2.3286e-8, 2.1233e-8, 1.9409e-8, 1.777e-8,
23132  1.626e-8, 1.4885e-8, 1.3674e-8, 1.2543e-8, 1.1551e-8, 1.0655e-8,
23133  9.8585e-9, 9.1398e-9, 8.4806e-9, 7.8899e-9, 7.3547e-9, 6.867e-9,
23134  6.4131e-9, 5.993e-9, 5.6096e-9, 5.2592e-9, 4.9352e-9, 4.6354e-9,
23135  4.3722e-9, 4.125e-9, 3.9081e-9, 3.7118e-9, 3.5372e-9, 3.3862e-9,
23136  3.2499e-9, 3.1324e-9, 3.0313e-9, 2.9438e-9, 2.8686e-9, 2.805e-9,
23137  2.7545e-9, 2.7149e-9, 2.6907e-9, 2.6724e-9, 2.6649e-9, 2.6642e-9,
23138  2.6725e-9, 2.6871e-9, 2.7056e-9, 2.7357e-9, 2.7781e-9, 2.8358e-9,
23139  2.9067e-9, 2.9952e-9, 3.102e-9, 3.2253e-9, 3.3647e-9, 3.5232e-9,
23140  3.7037e-9, 3.9076e-9, 4.1385e-9, 4.3927e-9, 4.6861e-9, 5.0238e-9,
23141  5.4027e-9, 5.8303e-9, 6.3208e-9, 6.8878e-9, 7.5419e-9, 8.313e-9,
23142  9.1952e-9, 1.0228e-8, 1.1386e-8, 1.2792e-8, 1.4521e-8, 1.6437e-8,
23143  1.8674e-8, 2.116e-8, 2.4506e-8, 2.8113e-8, 3.2636e-8, 3.7355e-8,
23144  4.2234e-8, 4.9282e-8, 5.7358e-8, 6.6743e-8, 7.8821e-8, 9.4264e-8,
23145  1.1542e-7, 1.3684e-7, 1.6337e-7, 2.0056e-7, 2.3252e-7, 2.6127e-7,
23146  2.9211e-7, 3.3804e-7, 3.7397e-7, 3.8205e-7, 3.881e-7, 3.9499e-7,
23147  3.9508e-7, 3.7652e-7, 3.5859e-7, 3.6198e-7, 3.7871e-7, 4.0925e-7,
23148  4.2717e-7, 4.8241e-7, 5.2008e-7, 5.653e-7, 5.9531e-7, 6.1994e-7,
23149  6.508e-7, 6.6355e-7, 6.9193e-7, 6.993e-7, 7.3058e-7, 7.4678e-7,
23150  7.9193e-7, 8.3627e-7, 9.1267e-7, 1.0021e-6, 1.1218e-6, 1.2899e-6,
23151  1.4447e-6, 1.7268e-6, 2.0025e-6, 2.3139e-6, 2.5599e-6, 2.892e-6,
23152  3.3059e-6, 3.5425e-6, 3.9522e-6, 4.0551e-6, 4.2818e-6, 4.2892e-6,
23153  4.421e-6, 4.5614e-6, 4.6739e-6, 4.9482e-6, 5.1118e-6, 5.0986e-6,
23154  4.9417e-6, 4.9022e-6, 4.8449e-6, 4.8694e-6, 4.8111e-6, 4.9378e-6,
23155  5.3231e-6, 5.7362e-6, 6.235e-6, 6.0951e-6, 5.7281e-6, 5.4585e-6,
23156  4.9032e-6, 4.3009e-6, 3.4776e-6, 2.8108e-6, 2.2993e-6, 1.7999e-6,
23157  1.387e-6, 1.075e-6, 8.5191e-7, 6.7951e-7, 5.5336e-7, 4.6439e-7,
23158  4.0243e-7, 3.5368e-7, 3.1427e-7, 2.7775e-7, 2.4486e-7, 2.1788e-7,
23159  1.9249e-7, 1.7162e-7, 1.5115e-7, 1.3478e-7, 1.2236e-7, 1.1139e-7,
23160  1.0092e-7, 9.0795e-8, 8.2214e-8, 7.4691e-8, 6.7486e-8, 6.0414e-8,
23161  5.4584e-8, 4.8754e-8, 4.3501e-8, 3.8767e-8, 3.4363e-8, 3.0703e-8,
23162  2.7562e-8, 2.4831e-8, 2.2241e-8, 1.9939e-8, 1.8049e-8, 1.6368e-8,
23163  1.4863e-8, 1.346e-8, 1.2212e-8, 1.1155e-8, 1.0185e-8, 9.3417e-9,
23164  8.5671e-9, 7.8292e-9, 7.1749e-9, 6.5856e-9, 6.0588e-9, 5.5835e-9,
23165  5.135e-9, 4.7395e-9, 4.3771e-9, 4.0476e-9, 3.756e-9, 3.4861e-9,
23166  3.2427e-9, 3.024e-9, 2.8278e-9, 2.6531e-9, 2.4937e-9, 2.3511e-9,
23167  2.2245e-9, 2.1133e-9, 2.0159e-9, 1.933e-9, 1.8669e-9, 1.8152e-9,
23168  1.7852e-9, 1.7752e-9, 1.7823e-9, 1.8194e-9, 1.8866e-9, 1.9759e-9,
23169  2.0736e-9, 2.2083e-9, 2.3587e-9, 2.4984e-9, 2.6333e-9, 2.816e-9,
23170  3.0759e-9, 3.372e-9, 3.6457e-9, 4.0668e-9, 4.4541e-9, 4.7976e-9,
23171  5.0908e-9, 5.4811e-9, 6.1394e-9, 6.3669e-9, 6.5714e-9, 6.8384e-9,
23172  7.1918e-9, 7.3741e-9, 7.2079e-9, 7.2172e-9, 7.2572e-9, 7.3912e-9,
23173  7.6188e-9, 8.3291e-9, 8.7885e-9, 9.2412e-9, 1.0021e-8, 1.0752e-8,
23174  1.1546e-8, 1.1607e-8, 1.1949e-8, 1.2346e-8, 1.2516e-8, 1.2826e-8,
23175  1.3053e-8, 1.3556e-8, 1.4221e-8, 1.5201e-8, 1.6661e-8, 1.8385e-8,
23176  2.0585e-8, 2.3674e-8, 2.7928e-8, 3.3901e-8, 4.1017e-8, 4.9595e-8,
23177  6.0432e-8, 7.6304e-8, 9.0764e-8, 1.0798e-7, 1.2442e-7, 1.4404e-7,
23178  1.6331e-7, 1.8339e-7, 2.0445e-7, 2.2288e-7, 2.3083e-7, 2.3196e-7,
23179  2.3919e-7, 2.3339e-7, 2.3502e-7, 2.3444e-7, 2.6395e-7, 2.9928e-7,
23180  3.0025e-7, 3.0496e-7, 3.1777e-7, 3.4198e-7, 3.4739e-7, 3.2696e-7,
23181  3.41e-7, 3.5405e-7, 3.7774e-7, 3.8285e-7, 3.6797e-7, 3.58e-7,
23182  3.2283e-7, 2.9361e-7, 2.4881e-7, 2.0599e-7, 1.7121e-7, 1.3641e-7,
23183  1.1111e-7, 8.9413e-8, 7.3455e-8, 6.2078e-8, 5.2538e-8, 4.5325e-8,
23184  3.9005e-8, 3.4772e-8, 3.1203e-8, 2.8132e-8, 2.525e-8, 2.2371e-8,
23185  2.0131e-8, 1.7992e-8, 1.6076e-8, 1.4222e-8, 1.249e-8, 1.1401e-8,
23186  1.0249e-8, 9.2279e-9, 8.5654e-9, 7.6227e-9, 6.9648e-9, 6.2466e-9,
23187  5.7252e-9, 5.38e-9, 4.696e-9, 4.2194e-9, 3.7746e-9, 3.3813e-9,
23188  3.0656e-9, 2.6885e-9, 2.4311e-9, 2.1572e-9, 1.8892e-9, 1.7038e-9,
23189  1.4914e-9, 1.3277e-9, 1.1694e-9, 1.0391e-9, 9.2779e-10,
23190  8.3123e-10, 7.4968e-10, 6.8385e-10, 6.2915e-10, 5.7784e-10,
23191  5.2838e-10, 4.8382e-10, 4.4543e-10, 4.1155e-10, 3.7158e-10,
23192  3.3731e-10, 3.0969e-10, 2.8535e-10, 2.6416e-10, 2.4583e-10,
23193  2.2878e-10, 2.1379e-10, 2.0073e-10, 1.8907e-10, 1.7866e-10,
23194  1.6936e-10, 1.6119e-10, 1.5424e-10, 1.4847e-10, 1.4401e-10,
23195  1.4068e-10, 1.3937e-10, 1.3943e-10, 1.4281e-10, 1.4766e-10,
23196  1.5701e-10, 1.7079e-10, 1.8691e-10, 2.0081e-10, 2.174e-10,
23197  2.4847e-10, 2.6463e-10, 2.7087e-10, 2.7313e-10, 2.8352e-10,
23198  2.9511e-10, 2.8058e-10, 2.7227e-10, 2.7356e-10, 2.8012e-10,
23199  2.8034e-10, 2.9031e-10, 3.103e-10, 3.3745e-10, 3.8152e-10,
23200  4.0622e-10, 4.2673e-10, 4.3879e-10, 4.5488e-10, 4.7179e-10,
23201  4.614e-10, 4.6339e-10, 4.6716e-10, 4.7024e-10, 4.7931e-10,
23202  4.8503e-10, 4.9589e-10, 4.9499e-10, 5.0363e-10, 5.3184e-10,
23203  5.6451e-10, 6.0932e-10, 6.6469e-10, 7.4076e-10, 8.3605e-10,
23204  9.4898e-10, 1.0935e-9, 1.2593e-9, 1.4913e-9, 1.8099e-9, 2.1842e-9,
23205  2.7284e-9, 3.2159e-9, 3.7426e-9, 4.5226e-9, 5.3512e-9, 6.1787e-9,
23206  6.8237e-9, 7.9421e-9, 9.0002e-9, 9.6841e-9, 9.9558e-9, 1.0232e-8,
23207  1.0591e-8, 1.0657e-8, 1.0441e-8, 1.0719e-8, 1.1526e-8, 1.2962e-8,
23208  1.4336e-8, 1.615e-8, 1.8417e-8, 2.0725e-8, 2.3426e-8, 2.5619e-8,
23209  2.7828e-8, 3.0563e-8, 3.3438e-8, 3.6317e-8, 4.04e-8, 4.4556e-8,
23210  5.0397e-8, 5.3315e-8, 5.9185e-8, 6.5311e-8, 6.9188e-8, 7.7728e-8,
23211  7.9789e-8, 8.6598e-8, 8.7768e-8, 9.1773e-8, 9.7533e-8, 1.0007e-7,
23212  1.065e-7, 1.0992e-7, 1.0864e-7, 1.0494e-7, 1.0303e-7, 1.0031e-7,
23213  1.0436e-7, 1.0537e-7, 1.1184e-7, 1.2364e-7, 1.3651e-7, 1.4881e-7,
23214  1.4723e-7, 1.4118e-7, 1.3371e-7, 1.1902e-7, 1.0007e-7, 7.9628e-8,
23215  6.4362e-8, 5.0243e-8, 3.8133e-8, 2.94e-8, 2.3443e-8, 1.9319e-8,
23216  1.6196e-8, 1.4221e-8, 1.2817e-8, 1.1863e-8, 1.1383e-8, 1.1221e-8,
23217  1.1574e-8, 1.1661e-8, 1.2157e-8, 1.2883e-8, 1.3295e-8, 1.4243e-8,
23218  1.424e-8, 1.4614e-8, 1.4529e-8, 1.4685e-8, 1.4974e-8, 1.479e-8,
23219  1.489e-8, 1.4704e-8, 1.4142e-8, 1.3374e-8, 1.2746e-8, 1.2172e-8,
23220  1.2336e-8, 1.2546e-8, 1.3065e-8, 1.409e-8, 1.5215e-8, 1.654e-8,
23221  1.6144e-8, 1.5282e-8, 1.4358e-8, 1.2849e-8, 1.0998e-8, 8.6956e-9,
23222  7.0881e-9, 5.5767e-9, 4.2792e-9, 3.2233e-9, 2.502e-9, 1.9985e-9,
23223  1.5834e-9, 1.3015e-9, 1.0948e-9, 9.4141e-10, 8.1465e-10,
23224  7.1517e-10, 6.2906e-10, 5.5756e-10, 4.9805e-10, 4.3961e-10,
23225  3.9181e-10, 3.5227e-10, 3.167e-10, 2.8667e-10, 2.5745e-10,
23226  2.3212e-10, 2.0948e-10, 1.897e-10, 1.7239e-10, 1.5659e-10,
23227  1.4301e-10, 1.3104e-10, 1.2031e-10, 1.1095e-10, 1.0262e-10,
23228  9.513e-11, 8.8595e-11, 8.2842e-11, 7.7727e-11, 7.3199e-11,
23229  6.9286e-11, 6.5994e-11, 6.3316e-11, 6.1244e-11, 5.9669e-11,
23230  5.8843e-11, 5.8832e-11, 5.9547e-11, 6.1635e-11, 6.4926e-11,
23231  7.0745e-11, 7.8802e-11, 8.6724e-11, 1.0052e-10, 1.1575e-10,
23232  1.3626e-10, 1.5126e-10, 1.6751e-10, 1.9239e-10, 2.1748e-10,
23233  2.2654e-10, 2.2902e-10, 2.324e-10, 2.4081e-10, 2.393e-10,
23234  2.2378e-10, 2.2476e-10, 2.2791e-10, 2.4047e-10, 2.5305e-10,
23235  2.8073e-10, 3.1741e-10, 3.6592e-10, 4.1495e-10, 4.6565e-10,
23236  5.099e-10, 5.5607e-10, 6.1928e-10, 6.6779e-10, 7.335e-10,
23237  8.1434e-10, 8.9635e-10, 9.9678e-10, 1.1256e-9, 1.2999e-9,
23238  1.4888e-9, 1.7642e-9, 1.9606e-9, 2.2066e-9, 2.4601e-9, 2.7218e-9,
23239  3.0375e-9, 3.1591e-9, 3.2852e-9, 3.2464e-9, 3.3046e-9, 3.271e-9,
23240  3.2601e-9, 3.3398e-9, 3.7446e-9, 4.0795e-9, 4.0284e-9, 4.0584e-9,
23241  4.1677e-9, 4.5358e-9, 4.4097e-9, 4.2744e-9, 4.5449e-9, 4.8147e-9,
23242  5.2656e-9, 5.2476e-9, 5.0275e-9, 4.7968e-9, 4.3654e-9, 3.953e-9,
23243  3.2447e-9, 2.6489e-9, 2.1795e-9, 1.788e-9, 1.4309e-9, 1.1256e-9,
23244  9.1903e-10, 7.6533e-10, 6.3989e-10, 5.5496e-10, 4.9581e-10,
23245  4.5722e-10, 4.3898e-10, 4.3505e-10, 4.3671e-10, 4.5329e-10,
23246  4.6827e-10, 4.9394e-10, 5.1122e-10, 5.1649e-10, 5.0965e-10,
23247  4.9551e-10, 4.8928e-10, 4.7947e-10, 4.7989e-10, 4.9071e-10,
23248  4.8867e-10, 4.726e-10, 4.5756e-10, 4.54e-10, 4.5993e-10,
23249  4.4042e-10, 4.3309e-10, 4.4182e-10, 4.6735e-10, 5.0378e-10,
23250  5.2204e-10, 5.0166e-10, 4.6799e-10, 4.3119e-10, 3.8803e-10,
23251  3.3291e-10, 2.6289e-10, 2.1029e-10, 1.7011e-10, 1.3345e-10,
23252  1.0224e-10, 7.8207e-11, 6.2451e-11, 5.0481e-11, 4.1507e-11,
23253  3.5419e-11, 3.0582e-11, 2.69e-11, 2.3778e-11, 2.1343e-11,
23254  1.9182e-11, 1.7162e-11, 1.5391e-11, 1.3877e-11, 1.2619e-11,
23255  1.145e-11, 1.0461e-11, 9.6578e-12, 8.9579e-12, 8.3463e-12,
23256  7.8127e-12, 7.3322e-12, 6.9414e-12, 6.6037e-12, 6.3285e-12,
23257  6.1095e-12, 5.9387e-12, 5.8118e-12, 5.726e-12, 5.6794e-12,
23258  5.6711e-12, 5.7003e-12, 5.767e-12, 5.8717e-12, 6.0151e-12,
23259  6.1984e-12, 6.4232e-12, 6.6918e-12, 7.0065e-12, 7.3705e-12,
23260  7.7873e-12, 8.2612e-12, 8.7972e-12, 9.4009e-12, 1.0079e-11,
23261  1.084e-11, 1.1692e-11, 1.2648e-11, 1.3723e-11, 1.4935e-11,
23262  1.6313e-11, 1.7905e-11, 1.974e-11, 2.1898e-11, 2.4419e-11,
23263  2.7426e-11, 3.0869e-11, 3.4235e-11, 3.7841e-11, 4.1929e-11,
23264  4.6776e-11, 5.2123e-11, 5.8497e-11, 6.5294e-11, 7.4038e-11,
23265  8.4793e-11, 9.6453e-11, 1.1223e-10, 1.2786e-10, 1.4882e-10,
23266  1.7799e-10, 2.0766e-10, 2.4523e-10, 2.8591e-10, 3.3386e-10,
23267  4.0531e-10, 4.7663e-10, 5.4858e-10, 6.3377e-10, 7.1688e-10,
23268  8.4184e-10, 9.5144e-10, 1.0481e-9, 1.1356e-9, 1.2339e-9,
23269  1.3396e-9, 1.4375e-9, 1.5831e-9, 1.7323e-9, 1.9671e-9, 2.2976e-9,
23270  2.6679e-9, 3.0777e-9, 3.4321e-9, 3.8192e-9, 4.2711e-9, 4.4903e-9,
23271  4.8931e-9, 5.2253e-9, 5.404e-9, 5.6387e-9, 5.6704e-9, 6.0345e-9,
23272  6.1079e-9, 6.2576e-9, 6.4039e-9, 6.3776e-9, 6.1878e-9, 5.8616e-9,
23273  5.7036e-9, 5.584e-9, 5.6905e-9, 5.8931e-9, 6.2478e-9, 6.8291e-9,
23274  7.4528e-9, 7.6078e-9, 7.3898e-9, 6.7573e-9, 5.9827e-9, 5.0927e-9,
23275  4.0099e-9, 3.1933e-9, 2.4296e-9, 1.8485e-9, 1.4595e-9, 1.2017e-9,
23276  1.0164e-9, 8.7433e-10, 7.7108e-10, 7.0049e-10, 6.5291e-10,
23277  6.1477e-10, 5.9254e-10, 5.815e-10, 5.7591e-10, 5.849e-10,
23278  5.8587e-10, 5.9636e-10, 6.2408e-10, 6.5479e-10, 7.048e-10,
23279  7.2313e-10, 7.5524e-10, 8.0863e-10, 8.3386e-10, 9.2342e-10,
23280  9.6754e-10, 1.0293e-9, 1.0895e-9, 1.133e-9, 1.221e-9, 1.2413e-9,
23281  1.2613e-9, 1.2671e-9, 1.2225e-9, 1.1609e-9, 1.0991e-9, 1.06e-9,
23282  1.057e-9, 1.0818e-9, 1.1421e-9, 1.227e-9, 1.337e-9, 1.4742e-9,
23283  1.4946e-9, 1.4322e-9, 1.321e-9, 1.1749e-9, 1.0051e-9, 7.8387e-10,
23284  6.1844e-10, 4.6288e-10, 3.4164e-10, 2.5412e-10, 1.9857e-10,
23285  1.5876e-10, 1.2966e-10, 1.092e-10, 9.4811e-11, 8.3733e-11,
23286  7.3906e-11, 6.7259e-11, 6.1146e-11, 5.7119e-11, 5.3546e-11,
23287  4.8625e-11, 4.4749e-11, 4.1089e-11, 3.7825e-11, 3.4465e-11,
23288  3.1018e-11, 2.8109e-11, 2.561e-11, 2.2859e-11, 2.049e-11,
23289  1.8133e-11, 1.5835e-11, 1.3949e-11, 1.2295e-11, 1.0799e-11,
23290  9.6544e-12, 8.7597e-12, 7.999e-12, 7.3973e-12, 6.9035e-12,
23291  6.4935e-12, 6.1195e-12, 5.8235e-12, 5.5928e-12, 5.4191e-12,
23292  5.2993e-12, 5.2338e-12, 5.2272e-12, 5.2923e-12, 5.4252e-12,
23293  5.6523e-12, 5.9433e-12, 6.3197e-12, 6.9016e-12, 7.5016e-12,
23294  8.2885e-12, 9.405e-12, 1.0605e-11, 1.2257e-11, 1.3622e-11,
23295  1.5353e-11, 1.7543e-11, 1.9809e-11, 2.2197e-11, 2.4065e-11,
23296  2.6777e-11, 2.9751e-11, 3.2543e-11, 3.5536e-11, 3.9942e-11,
23297  4.6283e-11, 5.4556e-11, 6.549e-11, 7.6803e-11, 9.0053e-11,
23298  1.0852e-10, 1.2946e-10, 1.4916e-10, 1.7748e-10, 2.0073e-10,
23299  2.2485e-10, 2.5114e-10, 2.7715e-10, 3.1319e-10, 3.3305e-10,
23300  3.5059e-10, 3.5746e-10, 3.6311e-10, 3.7344e-10, 3.6574e-10,
23301  3.7539e-10, 3.9434e-10, 4.351e-10, 4.334e-10, 4.2588e-10,
23302  4.3977e-10, 4.6062e-10, 4.7687e-10, 4.6457e-10, 4.8578e-10,
23303  5.2344e-10, 5.6752e-10, 5.8702e-10, 5.6603e-10, 5.3784e-10,
23304  4.9181e-10, 4.3272e-10, 3.5681e-10, 2.8814e-10, 2.332e-10,
23305  1.8631e-10, 1.4587e-10, 1.1782e-10, 9.8132e-11, 8.2528e-11,
23306  6.9174e-11, 6.1056e-11, 5.3459e-11, 4.7116e-11, 4.1878e-11,
23307  3.8125e-11, 3.6347e-11, 3.5071e-11, 3.3897e-11, 3.3541e-11,
23308  3.3563e-11, 3.5469e-11, 3.8111e-11, 3.8675e-11, 4.1333e-11,
23309  4.3475e-11, 4.6476e-11, 4.9761e-11, 5.138e-11, 5.4135e-11,
23310  5.3802e-11, 5.5158e-11, 5.6864e-11, 5.9311e-11, 6.3827e-11,
23311  6.7893e-11, 6.823e-11, 6.6694e-11, 6.6018e-11, 6.4863e-11,
23312  6.5893e-11, 6.3813e-11, 6.4741e-11, 6.863e-11, 7.0255e-11,
23313  7.0667e-11, 6.881e-11, 6.4104e-11, 5.8136e-11, 4.7242e-11,
23314  3.7625e-11, 3.1742e-11, 2.5581e-11, 1.8824e-11, 1.3303e-11,
23315  9.6919e-12, 7.5353e-12, 6.0986e-12, 5.0742e-12, 4.3094e-12,
23316  3.719e-12, 3.252e-12, 2.8756e-12, 2.568e-12, 2.3139e-12,
23317  2.1025e-12, 1.9257e-12, 1.7777e-12, 1.6539e-12, 1.5508e-12,
23318  1.4657e-12, 1.3966e-12, 1.3417e-12, 1.2998e-12, 1.27e-12,
23319  1.2514e-12, 1.2437e-12, 1.2463e-12, 1.2592e-12, 1.2823e-12,
23320  1.3157e-12, 1.3596e-12, 1.4144e-12, 1.4806e-12, 1.5588e-12,
23321  1.6497e-12, 1.7544e-12, 1.8738e-12, 2.0094e-12, 2.1626e-12,
23322  2.3354e-12, 2.5297e-12, 2.7483e-12, 2.9941e-12, 3.2708e-12,
23323  3.5833e-12, 3.9374e-12, 4.3415e-12, 4.8079e-12, 5.3602e-12,
23324  5.9816e-12, 6.7436e-12, 7.6368e-12, 8.6812e-12, 9.8747e-12,
23325  1.135e-11, 1.3181e-11, 1.5406e-11, 1.7868e-11, 2.0651e-11,
23326  2.4504e-11, 2.9184e-11, 3.4159e-11, 3.9979e-11, 4.8704e-11,
23327  5.7856e-11, 6.7576e-11, 7.9103e-11, 9.437e-11, 1.1224e-10,
23328  1.3112e-10, 1.5674e-10, 1.8206e-10, 2.0576e-10, 2.3187e-10,
23329  2.7005e-10, 3.0055e-10, 3.3423e-10, 3.6956e-10, 3.8737e-10,
23330  4.263e-10, 4.5154e-10, 4.8383e-10, 5.3582e-10, 5.8109e-10,
23331  6.3741e-10, 6.3874e-10, 6.387e-10, 6.5818e-10, 6.5056e-10,
23332  6.5291e-10, 6.3159e-10, 6.3984e-10, 6.4549e-10, 6.5444e-10,
23333  6.7035e-10, 6.7665e-10, 6.9124e-10, 6.8451e-10, 6.9255e-10,
23334  6.9923e-10, 7.0396e-10, 6.7715e-10, 6.0371e-10, 5.3774e-10,
23335  4.6043e-10, 3.7635e-10, 2.9484e-10, 2.2968e-10, 1.8185e-10,
23336  1.4191e-10, 1.1471e-10, 9.479e-11, 7.9613e-11, 6.7989e-11,
23337  5.9391e-11, 5.281e-11, 4.7136e-11, 4.2618e-11, 3.8313e-11,
23338  3.4686e-11, 3.1669e-11, 2.911e-11, 2.6871e-11, 2.5074e-11,
23339  2.4368e-11, 2.3925e-11, 2.4067e-11, 2.4336e-11, 2.4704e-11,
23340  2.5823e-11, 2.7177e-11, 2.9227e-11, 3.1593e-11, 3.573e-11,
23341  4.0221e-11, 4.3994e-11, 4.8448e-11, 5.3191e-11, 5.8552e-11,
23342  6.3458e-11, 6.6335e-11, 7.2457e-11, 7.9091e-11, 8.2234e-11,
23343  8.7668e-11, 8.7951e-11, 9.2952e-11, 9.6157e-11, 9.5926e-11,
23344  1.012e-10, 1.0115e-10, 9.9577e-11, 9.6633e-11, 9.2891e-11,
23345  9.3315e-11, 9.5584e-11, 1.0064e-10, 1.0509e-10, 1.1455e-10,
23346  1.2443e-10, 1.2963e-10, 1.2632e-10, 1.1308e-10, 1.0186e-10,
23347  8.588e-11, 6.7863e-11, 5.1521e-11, 3.778e-11, 2.8842e-11,
23348  2.2052e-11, 1.7402e-11, 1.4406e-11, 1.1934e-11, 1.0223e-11,
23349  8.9544e-12, 7.9088e-12, 7.0675e-12, 6.2222e-12, 5.6051e-12,
23350  5.0502e-12, 4.5578e-12, 4.2636e-12, 3.9461e-12, 3.7599e-12,
23351  3.5215e-12, 3.2467e-12, 3.0018e-12, 2.6558e-12, 2.3928e-12,
23352  2.0707e-12, 1.7575e-12, 1.5114e-12, 1.2941e-12, 1.1004e-12,
23353  9.5175e-13, 8.2894e-13, 7.3253e-13, 6.5551e-13, 5.9098e-13,
23354  5.3548e-13, 4.8697e-13, 4.4413e-13, 4.06e-13, 3.7188e-13,
23355  3.4121e-13, 3.1356e-13, 2.8856e-13, 2.659e-13, 2.4533e-13,
23356  2.2663e-13, 2.096e-13, 1.9407e-13, 1.799e-13, 1.6695e-13,
23357  1.5512e-13, 1.4429e-13, 1.3437e-13, 1.2527e-13, 1.1693e-13,
23358  1.0927e-13, 1.0224e-13, 9.5767e-14, 8.9816e-14, 8.4335e-14,
23359  7.9285e-14, 7.4626e-14, 7.0325e-14, 6.6352e-14, 6.2676e-14,
23360  5.9274e-14, 5.6121e-14, 5.3195e-14, 5.0479e-14, 4.7953e-14,
23361  4.5602e-14, 4.3411e-14, 4.1367e-14, 3.9456e-14, 3.767e-14,
23362  3.5996e-14, 3.4427e-14, 3.2952e-14, 3.1566e-14, 3.0261e-14,
23363  2.903e-14, 2.7868e-14, 2.677e-14, 2.573e-14, 2.4745e-14,
23364  2.3809e-14, 2.2921e-14, 2.2076e-14, 2.1271e-14, 2.0504e-14,
23365  1.9772e-14, 1.9073e-14, 1.8404e-14, 1.7764e-14, 1.7151e-14,
23366  1.6564e-14, 1.6e-14, 1.5459e-14, 1.4939e-14, 1.4439e-14,
23367  1.3958e-14, 1.3495e-14, 1.3049e-14, 1.262e-14, 1.2206e-14,
23368  1.1807e-14, 1.1422e-14, 1.105e-14, 1.0691e-14, 1.0345e-14,
23369  1.001e-14, 9.687e-15, 9.3747e-15, 9.0727e-15, 8.7808e-15,
23370  8.4986e-15, 8.2257e-15, 7.9617e-15, 7.7064e-15, 7.4594e-15,
23371  7.2204e-15, 6.9891e-15, 6.7653e-15, 6.5488e-15, 6.3392e-15,
23372  6.1363e-15, 5.9399e-15, 5.7499e-15, 5.5659e-15, 5.3878e-15,
23373  5.2153e-15, 5.0484e-15, 4.8868e-15, 4.7303e-15, 4.5788e-15,
23374  4.4322e-15, 4.2902e-15, 4.1527e-15, 4.0196e-15, 3.8907e-15,
23375  3.7659e-15, 3.6451e-15, 3.5281e-15, 3.4149e-15, 3.3052e-15,
23376  3.1991e-15, 3.0963e-15, 2.9967e-15, 2.9004e-15, 2.8071e-15,
23377  2.7167e-15, 2.6293e-15, 2.5446e-15, 2.4626e-15, 2.3833e-15,
23378  2.3064e-15, 2.232e-15, 2.16e-15, 2.0903e-15, 2.0228e-15,
23379  1.9574e-15, 1.8942e-15, 1.8329e-15, 1.7736e-15, 1.7163e-15,
23380  1.6607e-15, 1.6069e-15, 1.5548e-15, 1.5044e-15, 1.4557e-15,
23381  1.4084e-15, 1.3627e-15, 1.3185e-15, 1.2757e-15, 1.2342e-15,
23382  1.1941e-15, 1.1552e-15, 1.1177e-15, 1.0813e-15, 1.0461e-15,
23383  1.012e-15, 9.79e-16, 9.4707e-16, 9.1618e-16, 8.8628e-16,
23384  8.5734e-16, 8.2933e-16, 8.0223e-16, 7.76e-16, 7.5062e-16,
23385  7.2606e-16, 7.0229e-16, 6.7929e-16, 6.5703e-16, 6.355e-16,
23386  6.1466e-16, 5.9449e-16, 5.7498e-16, 5.561e-16, 5.3783e-16,
23387  5.2015e-16, 5.0305e-16, 4.865e-16, 4.7049e-16, 4.55e-16,
23388  4.4002e-16, 4.2552e-16, 4.1149e-16, 3.9792e-16, 3.8479e-16,
23389  3.7209e-16, 3.5981e-16, 3.4792e-16, 3.3642e-16, 3.253e-16,
23390  3.1454e-16, 3.0413e-16, 2.9406e-16, 2.8432e-16, 2.749e-16,
23391  2.6579e-16, 2.5697e-16, 2.4845e-16, 2.402e-16, 2.3223e-16,
23392  2.2451e-16, 2.1705e-16, 2.0984e-16, 2.0286e-16, 1.9611e-16,
23393  1.8958e-16, 1.8327e-16, 1.7716e-16, 1.7126e-16, 1.6555e-16,
23394  1.6003e-16, 1.5469e-16, 1.4952e-16, 1.4453e-16, 1.397e-16,
23395  1.3503e-16 } };
23396 
23397 struct s_sh2ob_ {
23398  double e_1[3];
23399  int e_2;
23400  } sh2ob_ = { {-20., 2e4, 10.}, 2003 };
23401 
23402 struct s_s260a_ {
23403  double e_1[2003];
23404  } s260a_ = { {.1775, .17045, .16457, .17045, .1775, .20036, .21347, .22454,
23405  .23428, .23399, .23022, .20724, .19712, .18317, .16724, .1478,
23406  .12757, .11626, .10098, .089033, .07977, .067416, .059588,
23407  .051117, .046218, .042179, .034372, .029863, .025252, .022075,
23408  .019209, .015816, .013932, .011943, .010079, .0087667, .0074094,
23409  .0064967, .0055711, .0048444, .0042552, .0036953, .0032824,
23410  .0029124, .0026102, .002337, .00211, .0019008, .0017145, .0015573,
23411  .0014206, .0012931, .0011803, .0010774, 9.8616e-4, 9.0496e-4,
23412  8.3071e-4, 7.6319e-4, 7.0149e-4, 6.4637e-4, 5.9566e-4, 5.4987e-4,
23413  5.0768e-4, 4.688e-4, 4.3317e-4, 4.0037e-4, 3.7064e-4, 3.4325e-4,
23414  3.1809e-4, 2.9501e-4, 2.7382e-4, 2.543e-4, 2.363e-4, 2.1977e-4,
23415  2.0452e-4, 1.9042e-4, 1.774e-4, 1.6544e-4, 1.5442e-4, 1.4425e-4,
23416  1.3486e-4, 1.2618e-4, 1.1817e-4, 1.1076e-4, 1.0391e-4, 9.7563e-5,
23417  9.1696e-5, 8.6272e-5, 8.1253e-5, 7.6607e-5, 7.2302e-5, 6.8311e-5,
23418  6.4613e-5, 6.1183e-5, 5.8001e-5, 5.5048e-5, 5.2307e-5, 4.9761e-5,
23419  4.7395e-5, 4.5197e-5, 4.3155e-5, 4.1256e-5, 3.9491e-5, 3.7849e-5,
23420  3.6324e-5, 3.4908e-5, 3.3594e-5, 3.2374e-5, 3.1244e-5, 3.0201e-5,
23421  2.924e-5, 2.8356e-5, 2.7547e-5, 2.6814e-5, 2.6147e-5, 2.5551e-5,
23422  2.5029e-5, 2.4582e-5, 2.4203e-5, 2.3891e-5, 2.3663e-5, 2.3531e-5,
23423  2.3483e-5, 2.3516e-5, 2.3694e-5, 2.4032e-5, 2.4579e-5, 2.5234e-5,
23424  2.6032e-5, 2.7119e-5, 2.8631e-5, 3.0848e-5, 3.3262e-5, 3.6635e-5,
23425  4.0732e-5, 4.5923e-5, 5.3373e-5, 6.1875e-5, 7.2031e-5, 8.598e-5,
23426  9.8642e-5, 1.1469e-4, 1.3327e-4, 1.539e-4, 1.7513e-4, 2.0665e-4,
23427  2.3609e-4, 2.622e-4, 2.8677e-4, 3.259e-4, 3.8624e-4, 4.157e-4,
23428  4.5207e-4, 4.9336e-4, 5.45e-4, 5.8258e-4, 5.8086e-4, 5.6977e-4,
23429  5.3085e-4, 4.802e-4, 4.3915e-4, 4.0343e-4, 3.7853e-4, 3.7025e-4,
23430  3.9637e-4, 4.4675e-4, 4.7072e-4, 4.9022e-4, 5.2076e-4, 5.3676e-4,
23431  5.2755e-4, 4.8244e-4, 4.5473e-4, 4.3952e-4, 3.9614e-4, 3.4086e-4,
23432  2.9733e-4, 2.6367e-4, 2.3767e-4, 2.0427e-4, 1.7595e-4, 1.5493e-4,
23433  1.3851e-4, 1.1874e-4, 1.0735e-4, 9.049e-5, 8.1149e-5, 7.4788e-5,
23434  6.5438e-5, 5.8248e-5, 4.8076e-5, 4.3488e-5, 3.7856e-5, 3.3034e-5,
23435  2.9592e-5, 2.6088e-5, 2.3497e-5, 2.0279e-5, 1.7526e-5, 1.5714e-5,
23436  1.3553e-5, 1.2145e-5, 1.0802e-5, 9.7681e-6, 8.8196e-6, 7.8291e-6,
23437  7.1335e-6, 6.4234e-6, 5.8391e-6, 5.3532e-6, 4.9079e-6, 4.5378e-6,
23438  4.1716e-6, 3.8649e-6, 3.5893e-6, 3.3406e-6, 3.1199e-6, 2.9172e-6,
23439  2.7348e-6, 2.5644e-6, 2.4086e-6, 2.2664e-6, 2.1359e-6, 2.0159e-6,
23440  1.9051e-6, 1.8031e-6, 1.7074e-6, 1.6185e-6, 1.5356e-6, 1.4584e-6,
23441  1.3861e-6, 1.3179e-6, 1.2545e-6, 1.1951e-6, 1.1395e-6, 1.0873e-6,
23442  1.0384e-6, 9.925e-7, 9.4935e-7, 9.0873e-7, 8.705e-7, 8.3446e-7,
23443  8.0046e-7, 7.6834e-7, 7.38e-7, 7.0931e-7, 6.8217e-7, 6.5648e-7,
23444  6.3214e-7, 6.0909e-7, 5.8725e-7, 5.6655e-7, 5.4693e-7, 5.2835e-7,
23445  5.1077e-7, 4.9416e-7, 4.7853e-7, 4.6381e-7, 4.5007e-7, 4.3728e-7,
23446  4.255e-7, 4.145e-7, 4.0459e-7, 3.9532e-7, 3.8662e-7, 3.7855e-7,
23447  3.7041e-7, 3.6254e-7, 3.542e-7, 3.4617e-7, 3.3838e-7, 3.3212e-7,
23448  3.2655e-7, 3.1865e-7, 3.1203e-7, 3.067e-7, 3.0252e-7, 2.9749e-7,
23449  2.9184e-7, 2.8795e-7, 2.8501e-7, 2.8202e-7, 2.7856e-7, 2.7509e-7,
23450  2.7152e-7, 2.6844e-7, 2.6642e-7, 2.6548e-7, 2.6617e-7, 2.6916e-7,
23451  2.7372e-7, 2.8094e-7, 2.9236e-7, 3.1035e-7, 3.2854e-7, 3.5481e-7,
23452  3.9377e-7, 4.4692e-7, 5.0761e-7, 5.7715e-7, 6.7725e-7, 8.0668e-7,
23453  9.3716e-7, 1.0797e-6, 1.1689e-6, 1.3217e-6, 1.4814e-6, 1.5627e-6,
23454  1.6519e-6, 1.7601e-6, 1.906e-6, 2.0474e-6, 2.0716e-6, 2.0433e-6,
23455  1.9752e-6, 1.8466e-6, 1.7526e-6, 1.6657e-6, 1.587e-6, 1.5633e-6,
23456  1.652e-6, 1.8471e-6, 1.9953e-6, 2.0975e-6, 2.2016e-6, 2.2542e-6,
23457  2.3081e-6, 2.3209e-6, 2.2998e-6, 2.3056e-6, 2.2757e-6, 2.2685e-6,
23458  2.2779e-6, 2.2348e-6, 2.2445e-6, 2.3174e-6, 2.4284e-6, 2.529e-6,
23459  2.734e-6, 2.972e-6, 3.2332e-6, 3.5392e-6, 3.9013e-6, 4.3334e-6,
23460  4.9088e-6, 5.3428e-6, 5.9142e-6, 6.6106e-6, 7.4709e-6, 8.5019e-6,
23461  9.6835e-6, 1.0984e-5, 1.2831e-5, 1.4664e-5, 1.708e-5, 2.0103e-5,
23462  2.4148e-5, 2.7948e-5, 3.2855e-5, 3.9046e-5, 4.6429e-5, 5.6633e-5,
23463  6.6305e-5, 7.6048e-5, 8.7398e-5, 1.0034e-4, 1.1169e-4, 1.2813e-4,
23464  1.3354e-4, 1.3952e-4, 1.4204e-4, 1.4615e-4, 1.5144e-4, 1.5475e-4,
23465  1.6561e-4, 1.7135e-4, 1.6831e-4, 1.6429e-4, 1.6353e-4, 1.6543e-4,
23466  1.5944e-4, 1.5404e-4, 1.5458e-4, 1.6287e-4, 1.7277e-4, 1.8387e-4,
23467  1.7622e-4, 1.636e-4, 1.5273e-4, 1.3667e-4, 1.2364e-4, 9.7576e-5,
23468  7.914e-5, 6.4241e-5, 5.1826e-5, 4.1415e-5, 3.1347e-5, 2.5125e-5,
23469  2.0027e-5, 1.6362e-5, 1.3364e-5, 1.1117e-5, 9.4992e-6, 8.1581e-6,
23470  7.1512e-6, 6.2692e-6, 5.5285e-6, 4.9e-6, 4.3447e-6, 3.8906e-6,
23471  3.4679e-6, 3.1089e-6, 2.8115e-6, 2.5496e-6, 2.2982e-6, 2.0861e-6,
23472  1.8763e-6, 1.7035e-6, 1.5548e-6, 1.4107e-6, 1.2839e-6, 1.1706e-6,
23473  1.0709e-6, 9.8099e-7, 8.9901e-7, 8.2394e-7, 7.5567e-7, 6.9434e-7,
23474  6.3867e-7, 5.8845e-7, 5.4263e-7, 5.0033e-7, 4.6181e-7, 4.2652e-7,
23475  3.9437e-7, 3.6497e-7, 3.3781e-7, 3.1292e-7, 2.9011e-7, 2.6915e-7,
23476  2.4989e-7, 2.3215e-7, 2.1582e-7, 2.0081e-7, 1.87e-7, 1.7432e-7,
23477  1.6264e-7, 1.5191e-7, 1.4207e-7, 1.3306e-7, 1.2484e-7, 1.1737e-7,
23478  1.1056e-7, 1.0451e-7, 9.906e-8, 9.4135e-8, 8.9608e-8, 8.5697e-8,
23479  8.1945e-8, 7.8308e-8, 7.4808e-8, 7.1686e-8, 6.8923e-8, 6.5869e-8,
23480  6.3308e-8, 6.084e-8, 5.8676e-8, 5.6744e-8, 5.5016e-8, 5.3813e-8,
23481  5.2792e-8, 5.2097e-8, 5.1737e-8, 5.1603e-8, 5.1656e-8, 5.1989e-8,
23482  5.2467e-8, 5.2918e-8, 5.3589e-8, 5.456e-8, 5.5869e-8, 5.7403e-8,
23483  5.8968e-8, 6.0973e-8, 6.3432e-8, 6.6245e-8, 6.9353e-8, 7.2686e-8,
23484  7.6541e-8, 8.0991e-8, 8.595e-8, 9.1429e-8, 9.7851e-8, 1.0516e-7,
23485  1.1349e-7, 1.2295e-7, 1.3335e-7, 1.4488e-7, 1.5864e-7, 1.7412e-7,
23486  1.914e-7, 2.1078e-7, 2.3369e-7, 2.5996e-7, 2.8848e-7, 3.2169e-7,
23487  3.5991e-7, 4.0566e-7, 4.5969e-7, 5.3094e-7, 6.1458e-7, 7.1155e-7,
23488  8.3045e-7, 9.9021e-7, 1.2042e-6, 1.4914e-6, 1.8145e-6, 2.221e-6,
23489  2.7831e-6, 3.4533e-6, 4.4446e-6, 5.1989e-6, 6.2289e-6, 7.1167e-6,
23490  8.3949e-6, 9.6417e-6, 1.0313e-5, 1.0485e-5, 1.0641e-5, 1.0898e-5,
23491  1.0763e-5, 1.0506e-5, 1.0497e-5, 1.1696e-5, 1.2654e-5, 1.3029e-5,
23492  1.3175e-5, 1.4264e-5, 1.4985e-5, 1.4999e-5, 1.4317e-5, 1.4616e-5,
23493  1.4963e-5, 1.5208e-5, 1.4942e-5, 1.3879e-5, 1.3087e-5, 1.1727e-5,
23494  1.0515e-5, 9.0073e-6, 7.3133e-6, 6.1181e-6, 5.0623e-6, 4.1105e-6,
23495  3.3915e-6, 2.6711e-6, 2.1464e-6, 1.7335e-6, 1.4302e-6, 1.1847e-6,
23496  9.9434e-7, 8.2689e-7, 7.0589e-7, 6.075e-7, 5.3176e-7, 4.6936e-7,
23497  4.1541e-7, 3.6625e-7, 3.2509e-7, 2.9156e-7, 2.6308e-7, 2.3819e-7,
23498  2.1421e-7, 1.9366e-7, 1.7626e-7, 1.5982e-7, 1.4567e-7, 1.3354e-7,
23499  1.2097e-7, 1.1029e-7, 1.0063e-7, 9.2003e-8, 8.4245e-8, 7.7004e-8,
23500  7.0636e-8, 6.4923e-8, 5.9503e-8, 5.4742e-8, 5.045e-8, 4.647e-8,
23501  4.2881e-8, 3.955e-8, 3.6541e-8, 3.3803e-8, 3.1279e-8, 2.8955e-8,
23502  2.6858e-8, 2.4905e-8, 2.3146e-8, 2.1539e-8, 2.0079e-8, 1.8746e-8,
23503  1.7517e-8, 1.6396e-8, 1.5369e-8, 1.4426e-8, 1.3543e-8, 1.2724e-8,
23504  1.1965e-8, 1.1267e-8, 1.0617e-8, 1.001e-8, 9.4662e-9, 8.9553e-9,
23505  8.4988e-9, 8.0807e-9, 7.7043e-9, 7.3721e-9, 7.0707e-9, 6.8047e-9,
23506  6.5702e-9, 6.3634e-9, 6.1817e-9, 6.0239e-9, 5.8922e-9, 5.7824e-9,
23507  5.7019e-9, 5.6368e-9, 5.594e-9, 5.5669e-9, 5.5583e-9, 5.5653e-9,
23508  5.5837e-9, 5.6243e-9, 5.6883e-9, 5.78e-9, 5.8964e-9, 6.0429e-9,
23509  6.2211e-9, 6.4282e-9, 6.6634e-9, 6.9306e-9, 7.2336e-9, 7.5739e-9,
23510  7.9562e-9, 8.3779e-9, 8.8575e-9, 9.3992e-9, 1.0004e-8, 1.0684e-8,
23511  1.145e-8, 1.232e-8, 1.3311e-8, 1.4455e-8, 1.5758e-8, 1.7254e-8,
23512  1.8927e-8, 2.093e-8, 2.3348e-8, 2.6074e-8, 2.9221e-8, 3.277e-8,
23513  3.7485e-8, 4.2569e-8, 4.8981e-8, 5.5606e-8, 6.2393e-8, 7.1901e-8,
23514  8.2921e-8, 9.5513e-8, 1.1111e-7, 1.3143e-7, 1.5971e-7, 1.8927e-7,
23515  2.2643e-7, 2.786e-7, 3.2591e-7, 3.7024e-7, 4.2059e-7, 4.9432e-7,
23516  5.5543e-7, 5.7498e-7, 5.921e-7, 6.1005e-7, 6.1577e-7, 5.9193e-7,
23517  5.6602e-7, 5.7403e-7, 6.005e-7, 6.4723e-7, 6.7073e-7, 7.5415e-7,
23518  8.0982e-7, 8.7658e-7, 9.143e-7, 9.4459e-7, 9.8347e-7, 9.8768e-7,
23519  1.0153e-6, 1.0066e-6, 1.0353e-6, 1.0353e-6, 1.0722e-6, 1.1138e-6,
23520  1.1923e-6, 1.2947e-6, 1.4431e-6, 1.6537e-6, 1.8662e-6, 2.2473e-6,
23521  2.6464e-6, 3.1041e-6, 3.4858e-6, 4.0167e-6, 4.6675e-6, 5.0983e-6,
23522  5.7997e-6, 6.0503e-6, 6.4687e-6, 6.5396e-6, 6.7986e-6, 7.0244e-6,
23523  7.2305e-6, 7.6732e-6, 7.9783e-6, 7.9846e-6, 7.7617e-6, 7.7657e-6,
23524  7.7411e-6, 7.8816e-6, 7.8136e-6, 8.0051e-6, 8.5799e-6, 9.1659e-6,
23525  9.8646e-6, 9.492e-6, 8.767e-6, 8.2034e-6, 7.2297e-6, 6.2324e-6,
23526  4.9315e-6, 3.9128e-6, 3.1517e-6, 2.4469e-6, 1.8815e-6, 1.4627e-6,
23527  1.1698e-6, 9.4686e-7, 7.8486e-7, 6.697e-7, 5.8811e-7, 5.2198e-7,
23528  4.6809e-7, 4.1671e-7, 3.7006e-7, 3.3066e-7, 2.9387e-7, 2.6415e-7,
23529  2.3409e-7, 2.0991e-7, 1.9132e-7, 1.7519e-7, 1.5939e-7, 1.4368e-7,
23530  1.305e-7, 1.1883e-7, 1.0772e-7, 9.6884e-8, 8.7888e-8, 7.8956e-8,
23531  7.1024e-8, 6.3824e-8, 5.7256e-8, 5.1769e-8, 4.7037e-8, 4.2901e-8,
23532  3.897e-8, 3.5467e-8, 3.2502e-8, 2.9827e-8, 2.7389e-8, 2.5111e-8,
23533  2.3056e-8, 2.1267e-8, 1.961e-8, 1.8133e-8, 1.6775e-8, 1.5491e-8,
23534  1.4329e-8, 1.3265e-8, 1.23e-8, 1.142e-8, 1.0593e-8, 9.8475e-9,
23535  9.1585e-9, 8.5256e-9, 7.9525e-9, 7.4226e-9, 6.9379e-9, 6.495e-9,
23536  6.0911e-9, 5.7242e-9, 5.3877e-9, 5.0821e-9, 4.8051e-9, 4.5554e-9,
23537  4.3315e-9, 4.1336e-9, 3.9632e-9, 3.8185e-9, 3.708e-9, 3.6296e-9,
23538  3.5804e-9, 3.5776e-9, 3.6253e-9, 3.7115e-9, 3.8151e-9, 3.9804e-9,
23539  4.1742e-9, 4.3581e-9, 4.5306e-9, 4.7736e-9, 5.1297e-9, 5.5291e-9,
23540  5.9125e-9, 6.4956e-9, 7.0362e-9, 7.5318e-9, 7.9947e-9, 8.6438e-9,
23541  9.7227e-9, 1.013e-8, 1.0549e-8, 1.1064e-8, 1.1702e-8, 1.2043e-8,
23542  1.1781e-8, 1.1838e-8, 1.1917e-8, 1.2131e-8, 1.2476e-8, 1.3611e-8,
23543  1.436e-8, 1.5057e-8, 1.6247e-8, 1.7284e-8, 1.842e-8, 1.8352e-8,
23544  1.8722e-8, 1.9112e-8, 1.9092e-8, 1.9311e-8, 1.9411e-8, 1.9884e-8,
23545  2.0508e-8, 2.151e-8, 2.3143e-8, 2.505e-8, 2.7596e-8, 3.1231e-8,
23546  3.626e-8, 4.341e-8, 5.224e-8, 6.3236e-8, 7.7522e-8, 9.8688e-8,
23547  1.1859e-7, 1.4341e-7, 1.6798e-7, 1.9825e-7, 2.2898e-7, 2.6257e-7,
23548  2.9884e-7, 3.3247e-7, 3.4936e-7, 3.5583e-7, 3.715e-7, 3.658e-7,
23549  3.7124e-7, 3.703e-7, 4.1536e-7, 4.6656e-7, 4.6677e-7, 4.7507e-7,
23550  4.9653e-7, 5.3795e-7, 5.4957e-7, 5.2238e-7, 5.469e-7, 5.6569e-7,
23551  5.9844e-7, 5.9835e-7, 5.6522e-7, 5.4123e-7, 4.7904e-7, 4.2851e-7,
23552  3.5603e-7, 2.8932e-7, 2.3655e-7, 1.8592e-7, 1.4943e-7, 1.1971e-7,
23553  9.8482e-8, 8.3675e-8, 7.127e-8, 6.2496e-8, 5.4999e-8, 4.9821e-8,
23554  4.5387e-8, 4.134e-8, 3.7453e-8, 3.3298e-8, 3.012e-8, 2.7032e-8,
23555  2.4236e-8, 2.15e-8, 1.8988e-8, 1.7414e-8, 1.5706e-8, 1.4192e-8,
23556  1.3204e-8, 1.1759e-8, 1.0737e-8, 9.6309e-9, 8.8179e-9, 8.2619e-9,
23557  7.2264e-9, 6.4856e-9, 5.8037e-9, 5.2093e-9, 4.7205e-9, 4.1749e-9,
23558  3.7852e-9, 3.3915e-9, 3.0089e-9, 2.7335e-9, 2.4398e-9, 2.2031e-9,
23559  1.9786e-9, 1.789e-9, 1.6266e-9, 1.483e-9, 1.3576e-9, 1.2518e-9,
23560  1.1587e-9, 1.0726e-9, 9.9106e-10, 9.1673e-10, 8.5084e-10,
23561  7.9147e-10, 7.2882e-10, 6.7342e-10, 6.2593e-10, 5.8294e-10,
23562  5.4435e-10, 5.0997e-10, 4.7806e-10, 4.4931e-10, 4.2357e-10,
23563  4.0023e-10, 3.7909e-10, 3.5999e-10, 3.4285e-10, 3.2776e-10,
23564  3.1468e-10, 3.0377e-10, 2.9479e-10, 2.8877e-10, 2.8512e-10,
23565  2.8617e-10, 2.8976e-10, 3.0001e-10, 3.1718e-10, 3.3898e-10,
23566  3.5857e-10, 3.8358e-10, 4.3131e-10, 4.5741e-10, 4.6948e-10,
23567  4.7594e-10, 4.9529e-10, 5.1563e-10, 4.9475e-10, 4.8369e-10,
23568  4.8829e-10, 5.0047e-10, 5.0203e-10, 5.1954e-10, 5.5352e-10,
23569  5.9928e-10, 6.7148e-10, 7.1121e-10, 7.4317e-10, 7.6039e-10,
23570  7.8313e-10, 8.0684e-10, 7.8553e-10, 7.8312e-10, 7.8537e-10,
23571  7.8872e-10, 8.0185e-10, 8.1004e-10, 8.2608e-10, 8.2525e-10,
23572  8.3857e-10, 8.792e-10, 9.2451e-10, 9.8661e-10, 1.0629e-9,
23573  1.1659e-9, 1.2922e-9, 1.4387e-9, 1.6254e-9, 1.8425e-9, 2.1428e-9,
23574  2.5477e-9, 3.0379e-9, 3.757e-9, 4.4354e-9, 5.1802e-9, 6.2769e-9,
23575  7.4894e-9, 8.7474e-9, 9.8037e-9, 1.1582e-8, 1.3293e-8, 1.4471e-8,
23576  1.5025e-8, 1.558e-8, 1.6228e-8, 1.6413e-8, 1.602e-8, 1.6393e-8,
23577  1.7545e-8, 1.959e-8, 2.1449e-8, 2.3856e-8, 2.705e-8, 3.0214e-8,
23578  3.3733e-8, 3.6487e-8, 3.9353e-8, 4.266e-8, 4.6385e-8, 4.9955e-8,
23579  5.5313e-8, 6.0923e-8, 6.8948e-8, 7.3649e-8, 8.2602e-8, 9.2212e-8,
23580  9.908e-8, 1.1319e-7, 1.179e-7, 1.2941e-7, 1.3199e-7, 1.3914e-7,
23581  1.4843e-7, 1.53e-7, 1.6419e-7, 1.7095e-7, 1.6988e-7, 1.6494e-7,
23582  1.6327e-7, 1.6067e-7, 1.6909e-7, 1.7118e-7, 1.8106e-7, 1.9857e-7,
23583  2.1696e-7, 2.3385e-7, 2.2776e-7, 2.1402e-7, 1.9882e-7, 1.7362e-7,
23584  1.4308e-7, 1.1158e-7, 8.8781e-8, 6.8689e-8, 5.2062e-8, 4.0427e-8,
23585  3.2669e-8, 2.7354e-8, 2.32e-8, 2.058e-8, 1.8676e-8, 1.7329e-8,
23586  1.6621e-8, 1.6433e-8, 1.6953e-8, 1.7134e-8, 1.7948e-8, 1.9107e-8,
23587  1.9875e-8, 2.1416e-8, 2.1556e-8, 2.2265e-8, 2.2171e-8, 2.2534e-8,
23588  2.3029e-8, 2.2828e-8, 2.3143e-8, 2.2965e-8, 2.2223e-8, 2.1108e-8,
23589  2.0265e-8, 1.9516e-8, 1.9941e-8, 2.0312e-8, 2.108e-8, 2.2611e-8,
23590  2.421e-8, 2.6069e-8, 2.5097e-8, 2.3318e-8, 2.1543e-8, 1.8942e-8,
23591  1.596e-8, 1.2386e-8, 9.934e-9, 7.7502e-9, 5.9462e-9, 4.5113e-9,
23592  3.5523e-9, 2.8844e-9, 2.3394e-9, 1.9584e-9, 1.6749e-9, 1.4624e-9,
23593  1.2809e-9, 1.1359e-9, 1.0087e-9, 9.0166e-10, 8.1079e-10,
23594  7.2219e-10, 6.4922e-10, 5.8803e-10, 5.329e-10, 4.859e-10,
23595  4.4111e-10, 4.0184e-10, 3.6644e-10, 3.3529e-10, 3.0789e-10,
23596  2.8286e-10, 2.6089e-10, 2.4125e-10, 2.2355e-10, 2.0783e-10,
23597  1.937e-10, 1.8088e-10, 1.6948e-10, 1.5929e-10, 1.5013e-10,
23598  1.4193e-10, 1.347e-10, 1.2841e-10, 1.2307e-10, 1.1865e-10,
23599  1.1502e-10, 1.1243e-10, 1.1099e-10, 1.1066e-10, 1.1216e-10,
23600  1.1529e-10, 1.2171e-10, 1.3128e-10, 1.4153e-10, 1.5962e-10,
23601  1.8048e-10, 2.0936e-10, 2.3165e-10, 2.5746e-10, 2.96e-10,
23602  3.3707e-10, 3.5267e-10, 3.5953e-10, 3.6822e-10, 3.8363e-10,
23603  3.8286e-10, 3.5883e-10, 3.6154e-10, 3.6653e-10, 3.8507e-10,
23604  4.025e-10, 4.4435e-10, 4.9889e-10, 5.6932e-10, 6.3599e-10,
23605  7.0281e-10, 7.5777e-10, 8.1279e-10, 8.891e-10, 9.34e-10,
23606  1.0076e-9, 1.0945e-9, 1.1898e-9, 1.3108e-9, 1.4725e-9, 1.7028e-9,
23607  1.9619e-9, 2.3527e-9, 2.6488e-9, 3.0327e-9, 3.4396e-9, 3.8797e-9,
23608  4.4115e-9, 4.6853e-9, 4.9553e-9, 4.9551e-9, 5.1062e-9, 5.0996e-9,
23609  5.1119e-9, 5.2283e-9, 5.8297e-9, 6.3439e-9, 6.2675e-9, 6.3296e-9,
23610  6.5173e-9, 7.1685e-9, 7.0528e-9, 6.8856e-9, 7.3182e-9, 7.699e-9,
23611  8.3461e-9, 8.1946e-9, 7.7153e-9, 7.2411e-9, 6.4511e-9, 5.7336e-9,
23612  4.6105e-9, 3.6962e-9, 2.9944e-9, 2.4317e-9, 1.9399e-9, 1.5331e-9,
23613  1.2633e-9, 1.0613e-9, 9.0136e-10, 7.9313e-10, 7.1543e-10,
23614  6.6485e-10, 6.4225e-10, 6.398e-10, 6.4598e-10, 6.7428e-10,
23615  7.027e-10, 7.4694e-10, 7.7946e-10, 7.9395e-10, 7.8716e-10,
23616  7.6933e-10, 7.622e-10, 7.4825e-10, 7.4805e-10, 7.6511e-10,
23617  7.6492e-10, 7.4103e-10, 7.1979e-10, 7.1686e-10, 7.3403e-10,
23618  7.1142e-10, 7.0212e-10, 7.1548e-10, 7.5253e-10, 8.0444e-10,
23619  8.2378e-10, 7.8004e-10, 7.1712e-10, 6.4978e-10, 5.7573e-10,
23620  4.8675e-10, 3.7945e-10, 3.0118e-10, 2.4241e-10, 1.91e-10,
23621  1.4816e-10, 1.1567e-10, 9.4183e-11, 7.766e-11, 6.527e-11,
23622  5.6616e-11, 4.9576e-11, 4.4137e-11, 3.9459e-11, 3.5759e-11,
23623  3.2478e-11, 2.9419e-11, 2.6703e-11, 2.4365e-11, 2.2412e-11,
23624  2.0606e-11, 1.9067e-11, 1.78e-11, 1.6695e-11, 1.5729e-11,
23625  1.4887e-11, 1.4135e-11, 1.3519e-11, 1.2992e-11, 1.2563e-11,
23626  1.2223e-11, 1.1962e-11, 1.1775e-11, 1.1657e-11, 1.1605e-11,
23627  1.1619e-11, 1.1697e-11, 1.1839e-11, 1.2046e-11, 1.2319e-11,
23628  1.2659e-11, 1.307e-11, 1.3553e-11, 1.4113e-11, 1.4754e-11,
23629  1.548e-11, 1.6298e-11, 1.7214e-11, 1.8236e-11, 1.9372e-11,
23630  2.0635e-11, 2.2036e-11, 2.359e-11, 2.5317e-11, 2.7242e-11,
23631  2.94e-11, 3.1849e-11, 3.4654e-11, 3.7923e-11, 4.1695e-11,
23632  4.6055e-11, 5.094e-11, 5.5624e-11, 6.0667e-11, 6.6261e-11,
23633  7.2692e-11, 7.9711e-11, 8.7976e-11, 9.6884e-11, 1.0775e-10,
23634  1.2093e-10, 1.3531e-10, 1.5404e-10, 1.7315e-10, 1.9862e-10,
23635  2.3341e-10, 2.7014e-10, 3.1716e-10, 3.6957e-10, 4.3233e-10,
23636  5.2566e-10, 6.2251e-10, 7.2149e-10, 8.3958e-10, 9.5931e-10,
23637  1.1388e-9, 1.2973e-9, 1.4442e-9, 1.5638e-9, 1.6974e-9, 1.8489e-9,
23638  1.983e-9, 2.172e-9, 2.3662e-9, 2.6987e-9, 3.1697e-9, 3.6907e-9,
23639  4.2625e-9, 4.7946e-9, 5.3848e-9, 6.0897e-9, 6.473e-9, 7.1483e-9,
23640  7.7432e-9, 8.0851e-9, 8.5013e-9, 8.5909e-9, 9.189e-9, 9.3124e-9,
23641  9.5936e-9, 9.8787e-9, 9.9036e-9, 9.6712e-9, 9.2036e-9, 9.0466e-9,
23642  8.938e-9, 9.1815e-9, 9.5092e-9, 1.0027e-8, 1.0876e-8, 1.1744e-8,
23643  1.1853e-8, 1.1296e-8, 1.0134e-8, 8.8245e-9, 7.393e-9, 5.715e-9,
23644  4.4884e-9, 3.4027e-9, 2.6054e-9, 2.079e-9, 1.7267e-9, 1.4724e-9,
23645  1.2722e-9, 1.1234e-9, 1.0186e-9, 9.468e-10, 8.8854e-10,
23646  8.5127e-10, 8.3157e-10, 8.2226e-10, 8.3395e-10, 8.3294e-10,
23647  8.4725e-10, 8.8814e-10, 9.3697e-10, 1.0112e-9, 1.0412e-9,
23648  1.0948e-9, 1.181e-9, 1.2267e-9, 1.369e-9, 1.4512e-9, 1.5568e-9,
23649  1.6552e-9, 1.7321e-9, 1.8797e-9, 1.921e-9, 1.9686e-9, 1.9917e-9,
23650  1.9357e-9, 1.8486e-9, 1.7575e-9, 1.7113e-9, 1.7163e-9, 1.7623e-9,
23651  1.8536e-9, 1.9765e-9, 2.1334e-9, 2.3237e-9, 2.3259e-9, 2.1833e-9,
23652  1.9785e-9, 1.7308e-9, 1.4596e-9, 1.1198e-9, 8.7375e-10,
23653  6.5381e-10, 4.8677e-10, 3.6756e-10, 2.9155e-10, 2.3735e-10,
23654  1.959e-10, 1.6638e-10, 1.4549e-10, 1.2947e-10, 1.1511e-10,
23655  1.0548e-10, 9.6511e-11, 9.0469e-11, 8.517e-11, 7.7804e-11,
23656  7.1971e-11, 6.6213e-11, 6.1063e-11, 5.5881e-11, 5.0508e-11,
23657  4.5932e-11, 4.1997e-11, 3.7672e-11, 3.3972e-11, 3.0318e-11,
23658  2.6769e-11, 2.3874e-11, 2.1336e-11, 1.9073e-11, 1.7313e-11,
23659  1.5904e-11, 1.4684e-11, 1.3698e-11, 1.2873e-11, 1.2175e-11,
23660  1.1542e-11, 1.1024e-11, 1.0602e-11, 1.0267e-11, 1.0012e-11,
23661  9.8379e-12, 9.7482e-12, 9.7564e-12, 9.8613e-12, 1.0092e-11,
23662  1.0418e-11, 1.0868e-11, 1.1585e-11, 1.2351e-11, 1.3372e-11,
23663  1.4841e-11, 1.6457e-11, 1.8681e-11, 2.055e-11, 2.2912e-11,
23664  2.5958e-11, 2.9137e-11, 3.2368e-11, 3.4848e-11, 3.8462e-11,
23665  4.219e-11, 4.5629e-11, 4.9022e-11, 5.4232e-11, 6.19e-11,
23666  7.1953e-11, 8.5368e-11, 9.9699e-11, 1.1734e-10, 1.4185e-10,
23667  1.7017e-10, 1.9813e-10, 2.3859e-10, 2.7304e-10, 3.0971e-10,
23668  3.5129e-10, 3.9405e-10, 4.5194e-10, 4.8932e-10, 5.2436e-10,
23669  5.4098e-10, 5.5542e-10, 5.7794e-10, 5.6992e-10, 5.879e-10,
23670  6.1526e-10, 6.8034e-10, 6.7956e-10, 6.6864e-10, 6.9329e-10,
23671  7.2971e-10, 7.6546e-10, 7.5078e-10, 7.8406e-10, 8.3896e-10,
23672  9.0111e-10, 9.1994e-10, 8.7189e-10, 8.1426e-10, 7.3097e-10,
23673  6.3357e-10, 5.1371e-10, 4.0936e-10, 3.2918e-10, 2.6255e-10,
23674  2.0724e-10, 1.6879e-10, 1.4165e-10, 1.1989e-10, 1.0125e-10,
23675  8.9629e-11, 7.8458e-11, 6.8826e-11, 6.0935e-11, 5.5208e-11,
23676  5.2262e-11, 5.026e-11, 4.8457e-11, 4.7888e-11, 4.8032e-11,
23677  5.0838e-11, 5.4668e-11, 5.579e-11, 6.0056e-11, 6.3811e-11,
23678  6.8848e-11, 7.459e-11, 7.8249e-11, 8.3371e-11, 8.3641e-11,
23679  8.6591e-11, 8.9599e-11, 9.3487e-11, 1.0066e-10, 1.0765e-10,
23680  1.0851e-10, 1.0619e-10, 1.0557e-10, 1.046e-10, 1.0796e-10,
23681  1.0523e-10, 1.0674e-10, 1.1261e-10, 1.1431e-10, 1.1408e-10,
23682  1.0901e-10, 9.9105e-11, 8.8077e-11, 6.9928e-11, 5.4595e-11,
23683  4.5401e-11, 3.6313e-11, 2.6986e-11, 1.9463e-11, 1.4577e-11,
23684  1.1583e-11, 9.5492e-12, 8.077e-12, 6.9642e-12, 6.0966e-12,
23685  5.4046e-12, 4.8431e-12, 4.3815e-12, 3.9987e-12, 3.679e-12,
23686  3.4113e-12, 3.1868e-12, 2.9992e-12, 2.8434e-12, 2.7153e-12,
23687  2.612e-12, 2.5311e-12, 2.4705e-12, 2.429e-12, 2.4053e-12,
23688  2.3988e-12, 2.4087e-12, 2.4349e-12, 2.4771e-12, 2.5355e-12,
23689  2.6103e-12, 2.7019e-12, 2.811e-12, 2.9383e-12, 3.0848e-12,
23690  3.2518e-12, 3.4405e-12, 3.6527e-12, 3.8902e-12, 4.1555e-12,
23691  4.451e-12, 4.7801e-12, 5.1462e-12, 5.5539e-12, 6.0086e-12,
23692  6.5171e-12, 7.0884e-12, 7.7357e-12, 8.4831e-12, 9.3096e-12,
23693  1.0282e-11, 1.1407e-11, 1.269e-11, 1.4148e-11, 1.5888e-11,
23694  1.7992e-11, 2.0523e-11, 2.3342e-11, 2.6578e-11, 3.0909e-11,
23695  3.6228e-11, 4.2053e-11, 4.9059e-11, 5.9273e-11, 7.0166e-11,
23696  8.2298e-11, 9.7071e-11, 1.1673e-10, 1.401e-10, 1.6621e-10,
23697  2.0127e-10, 2.3586e-10, 2.705e-10, 3.095e-10, 3.6584e-10,
23698  4.1278e-10, 4.6591e-10, 5.222e-10, 5.5246e-10, 6.15e-10,
23699  6.5878e-10, 7.1167e-10, 7.9372e-10, 8.6975e-10, 9.6459e-10,
23700  9.7368e-10, 9.8142e-10, 1.0202e-9, 1.02e-9, 1.0356e-9, 1.0092e-9,
23701  1.0269e-9, 1.0366e-9, 1.049e-9, 1.0717e-9, 1.0792e-9, 1.1016e-9,
23702  1.0849e-9, 1.0929e-9, 1.0971e-9, 1.0969e-9, 1.046e-9, 9.2026e-10,
23703  8.1113e-10, 6.8635e-10, 5.5369e-10, 4.2908e-10, 3.3384e-10,
23704  2.648e-10, 2.081e-10, 1.6915e-10, 1.4051e-10, 1.1867e-10,
23705  1.0158e-10, 8.899e-11, 7.9175e-11, 7.044e-11, 6.3453e-11,
23706  5.7009e-11, 5.1662e-11, 4.7219e-11, 4.3454e-11, 4.0229e-11,
23707  3.7689e-11, 3.6567e-11, 3.5865e-11, 3.5955e-11, 3.5928e-11,
23708  3.6298e-11, 3.7629e-11, 3.93e-11, 4.1829e-11, 4.4806e-11,
23709  5.0534e-11, 5.6672e-11, 6.2138e-11, 6.8678e-11, 7.6111e-11,
23710  8.4591e-11, 9.2634e-11, 9.8085e-11, 1.083e-10, 1.1949e-10,
23711  1.2511e-10, 1.3394e-10, 1.3505e-10, 1.4342e-10, 1.4874e-10,
23712  1.492e-10, 1.5872e-10, 1.5972e-10, 1.5821e-10, 1.5425e-10,
23713  1.4937e-10, 1.5089e-10, 1.5521e-10, 1.6325e-10, 1.6924e-10,
23714  1.8265e-10, 1.9612e-10, 2.0176e-10, 1.9359e-10, 1.7085e-10,
23715  1.5197e-10, 1.2646e-10, 9.8552e-11, 7.453e-11, 5.5052e-11,
23716  4.2315e-11, 3.2736e-11, 2.6171e-11, 2.1909e-11, 1.8286e-11,
23717  1.5752e-11, 1.3859e-11, 1.2288e-11, 1.1002e-11, 9.7534e-12,
23718  8.8412e-12, 8.0169e-12, 7.2855e-12, 6.8734e-12, 6.4121e-12,
23719  6.1471e-12, 5.778e-12, 5.3478e-12, 4.9652e-12, 4.4043e-12,
23720  3.9862e-12, 3.4684e-12, 2.9681e-12, 2.5791e-12, 2.2339e-12,
23721  1.9247e-12, 1.6849e-12, 1.4863e-12, 1.3291e-12, 1.2021e-12,
23722  1.0947e-12, 1.0015e-12, 9.1935e-13, 8.4612e-13, 7.8036e-13,
23723  7.21e-13, 6.6718e-13, 6.1821e-13, 5.7353e-13, 5.3269e-13,
23724  4.9526e-13, 4.6093e-13, 4.2937e-13, 4.0034e-13, 3.7361e-13,
23725  3.4895e-13, 3.2621e-13, 3.052e-13, 2.8578e-13, 2.6782e-13,
23726  2.512e-13, 2.3581e-13, 2.2154e-13, 2.0832e-13, 1.9605e-13,
23727  1.8466e-13, 1.7408e-13, 1.6425e-13, 1.5511e-13, 1.4661e-13,
23728  1.3869e-13, 1.3131e-13, 1.2444e-13, 1.1803e-13, 1.1205e-13,
23729  1.0646e-13, 1.0124e-13, 9.6358e-14, 9.1789e-14, 8.7509e-14,
23730  8.3498e-14, 7.9735e-14, 7.6202e-14, 7.2882e-14, 6.976e-14,
23731  6.6822e-14, 6.4053e-14, 6.1442e-14, 5.8978e-14, 5.665e-14,
23732  5.4448e-14, 5.2364e-14, 5.0389e-14, 4.8516e-14, 4.6738e-14,
23733  4.5048e-14, 4.3441e-14, 4.1911e-14, 4.0453e-14, 3.9063e-14,
23734  3.7735e-14, 3.6467e-14, 3.5254e-14, 3.4093e-14, 3.298e-14,
23735  3.1914e-14, 3.0891e-14, 2.9909e-14, 2.8965e-14, 2.8058e-14,
23736  2.7185e-14, 2.6344e-14, 2.5535e-14, 2.4755e-14, 2.4002e-14,
23737  2.3276e-14, 2.2576e-14, 2.1899e-14, 2.1245e-14, 2.0613e-14,
23738  2.0002e-14, 1.9411e-14, 1.8839e-14, 1.8285e-14, 1.7749e-14,
23739  1.723e-14, 1.6727e-14, 1.624e-14, 1.5768e-14, 1.531e-14,
23740  1.4867e-14, 1.4436e-14, 1.4019e-14, 1.3614e-14, 1.3221e-14,
23741  1.284e-14, 1.2471e-14, 1.2112e-14, 1.1764e-14, 1.1425e-14,
23742  1.1097e-14, 1.0779e-14, 1.0469e-14, 1.0169e-14, 9.8775e-15,
23743  9.5943e-15, 9.3193e-15, 9.0522e-15, 8.7928e-15, 8.5409e-15,
23744  8.2962e-15, 8.0586e-15, 7.8278e-15, 7.6036e-15, 7.3858e-15,
23745  7.1742e-15, 6.9687e-15, 6.7691e-15, 6.5752e-15, 6.3868e-15,
23746  6.2038e-15, 6.026e-15, 5.8533e-15, 5.6856e-15, 5.5226e-15,
23747  5.3642e-15, 5.2104e-15, 5.061e-15, 4.9158e-15, 4.7748e-15,
23748  4.6378e-15, 4.5047e-15, 4.3753e-15, 4.2497e-15, 4.1277e-15,
23749  4.0091e-15, 3.8939e-15, 3.782e-15, 3.6733e-15, 3.5677e-15,
23750  3.4651e-15, 3.3655e-15, 3.2686e-15, 3.1746e-15, 3.0832e-15,
23751  2.9944e-15, 2.9082e-15, 2.8244e-15, 2.7431e-15, 2.664e-15,
23752  2.5872e-15, 2.5126e-15, 2.4401e-15, 2.3697e-15, 2.3014e-15,
23753  2.2349e-15, 2.1704e-15, 2.1077e-15, 2.0468e-15, 1.9877e-15,
23754  1.9302e-15, 1.8744e-15, 1.8202e-15, 1.7675e-15, 1.7164e-15,
23755  1.6667e-15, 1.6184e-15, 1.5716e-15, 1.526e-15, 1.4818e-15,
23756  1.4389e-15, 1.3971e-15, 1.3566e-15, 1.3172e-15, 1.279e-15,
23757  1.2419e-15, 1.2058e-15, 1.1708e-15, 1.1368e-15, 1.1037e-15,
23758  1.0716e-15, 1.0405e-15, 1.0102e-15, 9.8079e-16, 9.5224e-16,
23759  9.2451e-16, 8.9758e-16, 8.7142e-16, 8.4602e-16, 8.2136e-16,
23760  7.974e-16, 7.7414e-16, 7.5154e-16, 7.2961e-16, 7.083e-16,
23761  6.8761e-16, 6.6752e-16, 6.4801e-16, 6.2906e-16, 6.1066e-16,
23762  5.928e-16, 5.7545e-16, 5.586e-16, 5.4224e-16, 5.2636e-16,
23763  5.1094e-16, 4.9596e-16} };
23764 
23765 struct s_s260b_ {
23766  double e_1[3];
23767  int e_2;
23768  } s260b_ = { {-20., 2e4, 10.}, 2003 };
23769 
23770 struct s_consts_ {
23771  double e_1[9];
23772  } consts_ = { {3.1415927410125732, 6.62606876e-27, 1.3806503e-16,
23773  29979245800., 6.02214199e23, 2.6867775e19, 83144720.,
23774  1.191042722e-12, 1.4387752} };
23775 
23776 
23777 /* Table of constant values */
23778 
23779 /*
23780 static integer c__9 = 9;
23781 static integer c__1 = 1;
23782 static integer c__2 = 2;
23783 static integer c__5 = 5;
23784 static int cs__0 = 0;
23785 */
23786 // FIXME static double c_b125 = 0.;
23787 
23788 /* ############################################################################ */
23789 /* path: $Source: /srv/svn/cvs/cvsroot/arts/src/continua.cc,v $ */
23790 /* author: $Author $ */
23791 /* revision: $Revision: 1.39 $ */
23792 /* created: $Date: 2006/06/30 08:35:33 $ */
23793 /* ############################################################################ */
23794 
23795 /* CKD2.4 TEST */
23796 /* TKS, 2002-02-28 */
23797 /* CALL : g77 -c testckd.f ; g77 testckd.o -o testckd */
23798 
23799 /* ############################################################################ */
23800 /* ----------------------------------------------------------------------------- */
23801 
23802 /* INPUT PARAMETERS: */
23803 /* P [hPa] TOTAL PRESSURE */
23804 /* T [K] TEMPERATURE */
23805 /* VMRH2O [1] H2O VOLUME MIXING RATIO */
23806 /* VMRN2 [1] N2 VOLUME MIXING RATIO */
23807 /* VMRO2 [1] O2 VOLUME MIXING RATIO */
23808 /* FREQ [Hz] FREQUENCY OF ABSORPTION CALCULATION */
23809 
23810 
23811 /* OUTPUT PARAMETER: */
23812 /* artsckd_ [1/m] ABSORPTION COEFFICIENT */
23813 
23814 /* ----------------------------------------------------------------------------- */
23815 
23816 double artsckd_(double p, double t, double vmrh2o,
23817  double vmrn2, double vmro2, double freq, int ivc)
23818 {
23819  /* Initialized data */
23820 
23821  static double xslf = 1.;
23822  static double xfrg = 1.;
23823  static double xcn2 = 1.;
23824 
23825  /* System generated locals */
23826  double ret_val=0.0e0;
23827  // FIXME double d__1, d__2, d__3, d__4;
23828 
23829  /* Local variables */
23830  // FIXME int iosa;
23831  double w_wv__, oc_n2, radct;
23832  double w_other__, w_n2__, w_o2__;
23833  double of_wv, os_wv, p0, xn_wv__, t0, rhofac, wn, xn, xn0, tksvpt, rft;
23834 
23835  extern int initi_(double, double , double *,
23836  double *, double *, double *, double *,
23837  double *, double *, double *, double *,
23838  double *, double *);
23839  extern double fwv_(int , double , double *, double *,
23840  double *, double *, double *, double *);
23841  extern double swv_(int , double , double , double *, double *
23842  , double *, double *, double *, double *,
23843  double *);
23844  extern double conti_n2__(double , double , double *,
23845  double *, double *, double *, double *);
23846 
23847 
23848 /* PROGRAM: MODM */
23849 /* ------- */
23850 
23851 /* AUTHOR: Sid-Ahmed Boukabara */
23852 /* ------ */
23853 
23854 /* AFFILIATION: ATMOSPHERIC AND ENVIRONMENTAL RESEARCH INC. */
23855 /* ----------- */
23856 
23857 /* DATE OF CREATION : October 1998 */
23858 /* ---------------- */
23859 
23860 /* AIM: This program is aimed at the calculation of the */
23861 /* --- atmospheric optical depths. The spectral validity depends */
23862 /* only on the region covered by the file:"spectral_lines.dat" */
23863 /* The components treated here are the water vapor, the */
23864 /* oxygen, the ozone, the nitrogen and nitrogen dioxide. */
23865 
23866 /* - IVC : Flag of contin. vers.: CKD2.4(if=2) MPMf87/s93 (if=3) */
23867 /* - ICP : Flag to take(if =1) or not (if=0) the line coupling */
23868 /* - NWN : Number of wavenumbers to be treated */
23869 /* - WN : Vector of NWN wavenumbers [in cm-1], one should note that */
23870 /* this input could be a scalar (associated with NWN=1) */
23871 /* - NLAY : Number of layers to be treated. */
23872 /* - P : Vector of NLAY pressures (in mbar), one should note that */
23873 /* this input could be a scalar (associated with NLAY=1) */
23874 /* - T : Vector of NLAY temperatures [in Kelvin] */
23875 /* - W_WV : Vector of NLAY water vapor column amounts [in molecules/cm2] */
23876 /* - W_O2 : Vector of NLAY oxygen column amounts [in molecules/cm2] */
23877 /* - W_N2 : Vector of NLAY nitrogen column amounts [in molecules/cm2] */
23878 /* - W_OTHER : Vector of NLAY of other species column amounts [in molecules/cm2] */
23879 /* - CLW : Vector of NLAY Cloud Liquid Water amounts [in kg/m2 or mm] */
23880 /* When Cloud is present, the frequency must be consistent */
23881 /* with Rayleigh absorption (no scattering performed in */
23882 /* monortm). */
23883 /* - XSLF : Scaling factor of the self WV continuum (usually XSLF=1) */
23884 /* - XFRG : Scaling factor of the foreign WV continuum (usually XFRG=1) */
23885 /* - XCN2 : Scaling factor of the N2 continuum (usually XCN2=1) */
23886 /* - O : An array of NWNxNLAY elts containing the total optical depths */
23887 /* due to all the active species [in nepers] */
23888 /* - OS_WV : An array of NWNxNLAY elts containing the water vapor optical */
23889 /* depth (due to self continuum), [in Nepers] */
23890 /* - OF_WV : An array of NWNxNLAY elts containing the water vapor optical */
23891 /* depth (due to foreign continuum), [in Nepers] */
23892 /* - OC_N2 : An array of NWNxNLAY elts containing the nitrogen optical */
23893 /* depth (due to continuum), [in Nepers] */
23894 /* - O_CLW : An array of NWNxNLAY elts containing the CLW optical */
23895 /* depth , [in Nepers] */
23896 
23897 /* History of the modifications: */
23898 /* ***************************** */
23899 /* - written in 1999 by Sid Ahmed Boukabara, Ross Hoffman */
23900 /* and Tony Clough. */
23901 /* - validated against ARM sondes in the */
23902 /* microwave spectrum (23.8 and 31.4 GHz). SAB, 2000. */
23903 /* - extended to more species by Sid Ahmed Boukabara in 03/2000. */
23904 /* - cleaned up and commented in 2001 for first public release. */
23905 /* Also put under CVS configuration management. SAB. */
23906 /* - Extended O2 lines to submillimeter. Extensive validation */
23907 /* by comparison to Rosenkranz model and MWR data. */
23908 /* Update of the LBLATM module (accepts inputs at pressure */
23909 /* grid, along with altitude grid). */
23910 /* Fixed the handling of N2 amount coming from LBLATM (which */
23911 /* depends on the number of molecules NMOL). */
23912 /* Adopted accurate constants values. */
23913 /* Sid Ahmed Boukabara. Dec 14th 2001. */
23914 /* - Updated on January 7th 2002. ARM option (INP=2) updated and */
23915 /* made more efficient after Jim's comments. (INP=3) option optimized. */
23916 /* WV line intensities modified in the microwave (see Tony's email). */
23917 
23918 /* Comments should be forwarded to Sid Ahmed Boukabara (sboukaba@aer.com) */
23919 /* or Tony Clough (clough@aer.com). */
23920 
23921 /* ============================================================================ */
23922 
23923 
23924 /* TKS functions: */
23925 
23926 /* scaling factor (SLF cont) */
23927 /* scaling factor (FRG cont) */
23928 /* scaling factor (N2 cont) */
23929 
23930 
23931  w_wv__ = 0.0e0;
23932  w_o2__ = 0.0e0;
23933  w_n2__ = 0.0e0;
23934  w_other__ = 0.0e0;
23935  ret_val = 0.0e0;
23936  rft = 0.0e0;
23937  //os_wv = 0.0e0;
23938  //of_wv = 0.0e0;
23939  //oc_n2 = 0.0e0;
23940 
23941 /* ---INPUTS & GENERAL CONTROL PARAMETERS */
23942 
23943  /* set H2O, O2 and N2 number density to column amount [molec/cm2] */
23944  /* TKSVPT = P[Pa] / T[K] */
23945  tksvpt = (p * 100.0) / t;
23946  /* 7.242923e16 = k_B [J/K] * 1.0e-6 [m^3/cm^3] */
23947  w_wv__ = vmrh2o * 7.242923e16 * tksvpt;
23948  w_o2__ = vmro2 * 7.242923e16 * tksvpt;
23949  w_n2__ = vmrn2 * 7.242923e16 * tksvpt;
23950  w_other__ = (1.0000E0-vmrh2o-vmro2-vmrn2) * 7.242923e16 * tksvpt;
23951 
23952  /* frequency [Hz] to wave number [cm-1] */
23953  wn = freq / 29979245800.0;
23954  //cout << "CKD2.4 H2O column amounts [molec/cm2] =" << w_wv__ << "\n";
23955  //cout << "CKD2.4 O2 column amounts [molec/cm2] =" << w_o2__ << "\n";
23956  //cout << "CKD2.4 H2O column amounts [molec/cm2] =" << w_n2__ << "\n";
23957  //cout << "CKD2.4 others column amounts [molec/cm2] =" << w_other__ << "\n";
23958  //cout << "freq=" << freq << " Hz, wave num=" << wn << " cm-1\n";
23959 
23960 /* ---------------------------------------------------------------------------- */
23961 
23962 /* --- INITIALIZATION ----------------------------------------- */
23963  initi_(p, t, &radct, &t0, &p0, &w_wv__, &w_o2__, &w_n2__, &w_other__, &
23964  xn0, &xn, &xn_wv__, &rhofac);
23965  //cout << "CKD2.4 t0=" << t0 << " p0=" << p0 << "\n";
23966  //cout << "radct =" << radct << "\n";
23967  //cout << "xn0 =" << xn0 << "\n";
23968  //cout << "xn =" << xn << "\n";
23969  //cout << "xn_wv__ =" << xn_wv__ << "\n";
23970  //cout << "rhofac =" << rhofac << "\n";
23971 
23972  /* --- RAD_FIELD_TERM ----------------------------------------- */
23973  rft = wn * tanh(radct * wn / (t * 2));
23974  //cout << "rft =" << rft << "\n";
23975 
23976  /* --- H2O CONTINUUM TERM ------------------------------------- */
23977 
23978  if (ivc == 21) {
23979  /* CKD2.4 CONT_SELF_WV [Np/m] */
23980  os_wv = 1.0000e2 * swv_(2, wn, t, &t0, &w_wv__, &rft, &xn, &xn_wv__, &xn0, &xslf);
23981  //cout << "CKD2.4 ivc=21, H2O self cont [in Np/m] =" << os_wv << "\n";
23982  return os_wv;
23983  }
23984  if (ivc == 31) {
23985  /* MPMf87/s93 CONT_SELF_WV [Np/m] */
23986  os_wv = 1.0000e2 * swv_(3, wn, t, &t0, &w_wv__, &rft, &xn, &xn_wv__, &xn0, &xslf);
23987  //cout << "CKD2.4 ivc=31, H2O self cont [in Np/m] =" << os_wv << "\n";
23988  return os_wv;
23989  }
23990  if (ivc == 22) {
23991  /* CKD2.4 CONT_FRGN_WV [Np/m] */
23992  of_wv = 1.0000e2 * fwv_(2, wn, &w_wv__, &rft, &xn, &xn_wv__, &xn0, &xfrg);
23993  //cout << "CKD2.4 ivc=22, H2O foreign cont [in Np/m] =" << of_wv << "\n";
23994  return of_wv;
23995  }
23996  if (ivc == 32) {
23997  /* MPMf87/s93 CONT_FRGN_WV [Np/m] */
23998  of_wv = 1.0000e2 * fwv_(3, wn, &w_wv__, &rft, &xn, &xn_wv__, &xn0, &xfrg);
23999  //cout << "CKD2.4 ivc=32, H2O foreign cont [in Np/m] =" << of_wv << "\n";
24000  return of_wv ;
24001  }
24002 
24003  /* --- N2 CONTINUUM TERM [Np/m] ----------------------------------- */
24004  if (ivc == 1) {
24005  oc_n2 = 1.0000e2 * conti_n2__(wn, t, &t0, &w_n2__, &rft, &rhofac, &xcn2);
24006  //cout << "CKD2.4 ivc=1, N2 cont [in Np/m] =" << oc_n2 << "\n";
24007  return oc_n2;
24008  }
24009 
24010  /* --- TOTAL ABSORPTION IN [in Np/m] --------------------------- */
24011  // cout << "CKD2.4 H2O s+f cont [in Np/m] =" << ((os_wv+of_wv) * 1.0000e2) << "\n";
24012  //ret_val = ((os_wv + of_wv + oc_n2) * 1.0000e2);
24013 
24014 // FIXME L999:
24015 
24016  return ret_val; // [Np/m]
24017 } /* artsckd_ */
24018 
24019 
24020 /* ############################################################################ */
24021 /* foreign continuum functions -------------------------------------------- */
24022 double fwv_(int ivc, double wn, double *w_wv__, double *rft,
24023  double *xn, double *xn_wv__, double *xn0, double *xfrg)
24024 {
24025  /* System generated locals */
24026  double ret_val = 0.0e0;
24027 
24028  /* Local variables */
24029  extern double fwv24_(double , double *, double *,
24030  double *, double *, double *, double *),
24031  fwv_mpmf87s93__(double , double *, double *,
24032  double *, double *, double *, double *);
24033 
24034  ret_val = 0.0e0;
24035 
24036 /* --- CKD2.4 CONTINUUM ------------------------------------- */
24037  if (ivc == 2 && *w_wv__ > 0.) {
24038  ret_val = fwv24_(wn, w_wv__, rft, xn, xn_wv__, xn0, xfrg);
24039  }
24040 
24041 
24042 /* --- MPMf87s93 CONTINUUM ---------------------------------- */
24043  if (ivc == 3 && *w_wv__ > 0.) {
24044  ret_val = fwv_mpmf87s93__(wn, w_wv__, rft, xn, xn_wv__, xn0, xfrg);
24045  }
24046 
24047  return ret_val;
24048 } /* fwv_ */
24049 
24050 double fwv_mpmf87s93__(double wn, double *w_wv__, double *rft,
24051  double *xn, double *xn_wv__, double *xn0, double *xfrg)
24052 {
24053  /* System generated locals */
24054  double ret_val=0.0e0;
24055 
24056  /* Local variables */
24057  extern double xlgr_(double *, double *);
24058  int i__, j;
24059  double x[4], fscal, xf;
24060 
24061  j = (int) ((wn - fh2ob_1.v1) / fh2ob_1.dv) + 1;
24062 
24063  for (i__ = 1; i__ <= 4; ++i__) {
24064  x[i__ - 1] = fh2oa_1.fh2o[j + i__ - 3];
24065  }
24066 
24067  xf = (wn - (fh2ob_1.v1 + fh2ob_1.dv * (double) (j - 1))) /
24068  fh2ob_1.dv;
24069  fscal = .8;
24070  ret_val = xlgr_(&xf, x) * 1e-20 * (*w_wv__ * *rft * ((*xn - *xn_wv__) / *
24071  xn0)) * fscal * *xfrg;
24072 
24073 /* L999: */
24074  return ret_val;
24075 } /* fwv_mpmf87s93__ */
24076 
24077 double fwv24_(double wn, double *w_wv__, double *rft,
24078  double *xn, double *xn_wv__, double *xn0, double *
24079  xfrg)
24080 {
24081  /* Initialized data */
24082 
24083  static double v0f1 = 350.;
24084  static double hwsqf1 = 4e4;
24085  static double betaf1 = 5e-9;
24086  static double factrf1 = -.7;
24087  static double v0f1a = 630.;
24088  static double hwsqf1a = 4225.;
24089  static double betaf1a = 2e-8;
24090  static double factrf1a = .75;
24091  static double v0f2 = 1130.;
24092  static double hwsqf2 = 108900.;
24093  static double betaf2 = 8e-11;
24094  static double factrf2 = -.97;
24095  static double v0f3 = 1975.;
24096  static double hwsqf3 = 62500.;
24097  static double betaf3 = 5e-6;
24098  static double factrf3 = -.65;
24099 
24100  /* System generated locals */
24101  double ret_val=0.0e0;
24102  double d__1;
24103 
24104  /* Local variables */
24105  extern double xlgr_(double *, double *);
24106  int i__, j;
24107  double x[4], fscal, xf, vf2, vf4, vf6;
24108 
24109  j = (int) ((wn - fh2ob_1.v1) / fh2ob_1.dv) + 1;
24110  for (i__ = 1; i__ <= 4; ++i__) {
24111  x[i__ - 1] = fh2oa_1.fh2o[j + i__ - 3];
24112  }
24113 
24114  xf = (wn - (fh2ob_1.v1 + fh2ob_1.dv * (double) (j - 1))) /
24115  fh2ob_1.dv;
24116 
24117 /* ---added correction to the forgn continuum */
24118 /* Computing 2nd power */
24119  d__1 = wn - v0f1;
24120  vf2 = d__1 * d__1;
24121  vf6 = vf2 * vf2 * vf2;
24122  fscal = factrf1 * (hwsqf1 / (vf2 + betaf1 * vf6 + hwsqf1)) + 1.;
24123 /* Computing 2nd power */
24124  d__1 = wn - v0f1a;
24125  vf2 = d__1 * d__1;
24126  vf6 = vf2 * vf2 * vf2;
24127  fscal *= factrf1a * (hwsqf1a / (vf2 + betaf1a * vf6 + hwsqf1a)) + 1.;
24128 /* Computing 2nd power */
24129  d__1 = wn - v0f2;
24130  vf2 = d__1 * d__1;
24131  vf6 = vf2 * vf2 * vf2;
24132  fscal *= factrf2 * (hwsqf2 / (vf2 + betaf2 * vf6 + hwsqf2)) + 1.;
24133 /* Computing 2nd power */
24134  d__1 = wn - v0f3;
24135  vf2 = d__1 * d__1;
24136  vf4 = vf2 * vf2;
24137  fscal *= factrf3 * (hwsqf3 / (vf2 + betaf3 * vf4 + hwsqf3)) + 1.;
24138  ret_val = xlgr_(&xf, x) * 1e-20 * (*w_wv__ * *rft * ((*xn - *xn_wv__) / *
24139  xn0)) * fscal * *xfrg;
24140 
24141 /* L999: */
24142  return ret_val;
24143 } /* fwv24_ */
24144 
24145 
24146 
24147 /* self continuum function ------------------------------------------------ */
24148 double swv_(int ivc, double wn, double t, double *t0,
24149  double *w_wv__, double *rft, double *xn, double *
24150  xn_wv__, double *xn0, double *xslf)
24151 {
24152  /* System generated locals */
24153  double ret_val;
24154 
24155  /* Local variables */
24156  extern double swv_mpmf87s93__(double , double , double *
24157  , double *, double *, double *, double *,
24158  double *, double *);
24159  extern double swv24_(double , double ,
24160  double *, double *, double *, double *,
24161  double *, double *, double *);
24162 
24163  ret_val = 0.;
24164 
24165 /* CKD2.4 CONTINUUM */
24166  if (ivc == 2 && *w_wv__ > 0.) {
24167 /* CNT_SLF_WV CKD2.4 */
24168  ret_val = swv24_(wn, t, t0, w_wv__, rft, xn, xn_wv__, xn0, xslf);
24169  }
24170 
24171  if (ivc == 3 && *w_wv__ > 0.) {
24172 /* MPMf87s93 CKD2.4 CONT. */
24173 /* CNT_SLF_WV */
24174  ret_val = swv_mpmf87s93__(wn, t, t0, w_wv__, rft, xn, xn_wv__, xn0,
24175  xslf);
24176  }
24177 
24178  return ret_val;
24179 } /* swv_ */
24180 
24181 
24182 
24183 double swv24_(double wn, double t, double *t0, double *
24184  w_wv__, double *rft, double * /* xn */, double *xn_wv__,
24185  double *xn0, double *xslf)
24186 {
24187  /* Initialized data */
24188 
24189  static double v0s1 = 0.;
24190  static double hwsq1 = 1e4;
24191  static double betas1 = 1e-4;
24192  static double factrs1 = .688;
24193  static double v0s2 = 1050.;
24194  static double hwsq2 = 4e4;
24195  static double factrs2 = -.2333;
24196  static double v0s3 = 1310.;
24197  static double hwsq3 = 14400.;
24198  static double betas3 = 5e-6;
24199  static double factrs3 = -.15;
24200 
24201  /* System generated locals */
24202  double ret_val, d__1, d__2;
24203 
24204  /* Local variables */
24205  double sfac;
24206  extern double xlgr_(double *, double *);
24207  int j;
24208  double x[4], xf, vs2, vs4;
24209 
24210 /* ---UNITS(CM**3/MOL)*1.E-20 */
24211 
24212  j = (int) ((wn - sh2ob_1.v1) / sh2ob_1.dv) + 1;
24213  d__1 = s260a_1.swv260[j - 2] / sh2oa_1.swv296[j - 2];
24214  d__2 = (t - *t0) / (260. - *t0);
24215  x[0] = sh2oa_1.swv296[j - 2] * pow(d__1, d__2);
24216  d__1 = s260a_1.swv260[j - 1] / sh2oa_1.swv296[j - 1];
24217  d__2 = (t - *t0) / (260. - *t0);
24218  x[1] = sh2oa_1.swv296[j - 1] * pow(d__1, d__2);
24219  d__1 = s260a_1.swv260[j] / sh2oa_1.swv296[j];
24220  d__2 = (t - *t0) / (260. - *t0);
24221  x[2] = sh2oa_1.swv296[j] * pow(d__1, d__2);
24222  d__1 = s260a_1.swv260[j + 1] / sh2oa_1.swv296[j + 1];
24223  d__2 = (t - *t0) / (260. - *t0);
24224  x[3] = sh2oa_1.swv296[j + 1] * pow(d__1, d__2);
24225  xf = (wn - (sh2ob_1.v1 + sh2ob_1.dv * (double) (j - 1))) /
24226  sh2ob_1.dv;
24227  sfac = 1.;
24228 /* Computing 2nd power */
24229  d__1 = wn - v0s1;
24230  vs2 = d__1 * d__1;
24231  vs4 = vs2 * vs2;
24232 /* Computing 2nd power */
24233  d__1 = wn;
24234  sfac *= factrs1 * (hwsq1 / (d__1 * d__1 + betas1 * vs4 + hwsq1)) + 1.;
24235 /* Computing 2nd power */
24236  d__1 = wn - v0s2;
24237  vs2 = d__1 * d__1;
24238  sfac *= factrs2 * (hwsq2 / (vs2 + hwsq2)) + 1.;
24239 /* Computing 2nd power */
24240  d__1 = wn - v0s3;
24241  vs2 = d__1 * d__1;
24242  vs4 = vs2 * vs2;
24243  sfac *= factrs3 * (hwsq3 / (vs2 + betas3 * vs4 + hwsq3)) + 1.;
24244  ret_val = *w_wv__ * *rft * (*xn_wv__ / *xn0) * xlgr_(&xf, x) * 1e-20 *
24245  sfac * *xslf;
24246 
24247  return ret_val;
24248 } /* swv24_ */
24249 
24250 double swv_mpmf87s93__(double wn, double t, double *t0,
24251  double *w_wv__, double *rft, double * /* xn */, double *
24252  xn_wv__, double *xn0, double *xslf)
24253 {
24254  /* System generated locals */
24255  double ret_val, d__1, d__2;
24256 
24257  /* Local variables */
24258  double sfac;
24259  extern double xlgr_(double *, double *);
24260  int j;
24261  double x[4], xf;
24262 
24263 /* ---UNITS(CM**3/MOL)*1.E-20 */
24264 
24265  j = (int) ((wn - sh2ob_1.v1) / sh2ob_1.dv) + 1;
24266  d__1 = s260a_1.swv260[j - 2] / sh2oa_1.swv296[j - 2];
24267  d__2 = (t - *t0) / (260. - *t0);
24268  x[0] = sh2oa_1.swv296[j - 2] * pow(d__1, d__2);
24269  d__1 = s260a_1.swv260[j - 1] / sh2oa_1.swv296[j - 1];
24270  d__2 = (t - *t0) / (260. - *t0);
24271  x[1] = sh2oa_1.swv296[j - 1] * pow(d__1, d__2);
24272  d__1 = s260a_1.swv260[j] / sh2oa_1.swv296[j];
24273  d__2 = (t - *t0) / (260. - *t0);
24274  x[2] = sh2oa_1.swv296[j] * pow(d__1, d__2);
24275  d__1 = s260a_1.swv260[j + 1] / sh2oa_1.swv296[j + 1];
24276  d__2 = (t - *t0) / (260. - *t0);
24277  x[3] = sh2oa_1.swv296[j + 1] * pow(d__1, d__2);
24278  xf = (wn - (sh2ob_1.v1 + sh2ob_1.dv * (double) (j - 1))) /
24279  sh2ob_1.dv;
24280  sfac = 3.;
24281  ret_val = *w_wv__ * *rft * (*xn_wv__ / *xn0) * xlgr_(&xf, x) * 1e-20 *
24282  sfac * *xslf;
24283 
24284 /* L999: */
24285  return ret_val;
24286 } /* swv_mpmf87s93__ */
24287 
24288 /* --- N2 continuum ------------------------------------------------------- */
24289 double conti_n2__(double wn, double t, double *t0,
24290  double *w_n2__, double *rft, double *rhofac, double *
24291  xcn2)
24292 {
24293  /* Initialized data */
24294 
24295  static double v1 = -10.;
24296  static double dv = 5.;
24297  static double ct296[73] = { 4.303e-7,4.85e-7,4.979e-7,4.85e-7,
24298  4.303e-7,3.715e-7,3.292e-7,3.086e-7,2.92e-7,2.813e-7,2.804e-7,
24299  2.738e-7,2.726e-7,2.724e-7,2.635e-7,2.621e-7,2.547e-7,2.428e-7,
24300  2.371e-7,2.228e-7,2.1e-7,1.991e-7,1.822e-7,1.697e-7,1.555e-7,
24301  1.398e-7,1.281e-7,1.138e-7,1.012e-7,9.078e-8,7.879e-8,6.944e-8,
24302  6.084e-8,5.207e-8,4.54e-8,3.897e-8,3.313e-8,2.852e-8,2.413e-8,
24303  2.045e-8,1.737e-8,1.458e-8,1.231e-8,1.031e-8,8.586e-9,7.162e-9,
24304  5.963e-9,4.999e-9,4.226e-9,3.607e-9,3.09e-9,2.669e-9,2.325e-9,
24305  2.024e-9,1.783e-9,1.574e-9,1.387e-9,1.236e-9,1.098e-9,9.777e-10,
24306  8.765e-10,7.833e-10,7.022e-10,6.317e-10,5.65e-10,5.1e-10,
24307  4.572e-10,4.115e-10,3.721e-10,3.339e-10,3.005e-10,2.715e-10,
24308  2.428e-10 };
24309  static double ct220[73] = { 4.946e-7,5.756e-7,5.964e-7,5.756e-7,
24310  4.946e-7,4.145e-7,3.641e-7,3.482e-7,3.34e-7,3.252e-7,3.299e-7,
24311  3.206e-7,3.184e-7,3.167e-7,2.994e-7,2.943e-7,2.794e-7,2.582e-7,
24312  2.468e-7,2.237e-7,2.038e-7,1.873e-7,1.641e-7,1.474e-7,1.297e-7,
24313  1.114e-7,9.813e-8,8.309e-8,7.059e-8,6.068e-8,5.008e-8,4.221e-8,
24314  3.537e-8,2.885e-8,2.407e-8,1.977e-8,1.605e-8,1.313e-8,1.057e-8,
24315  8.482e-9,6.844e-9,5.595e-9,4.616e-9,3.854e-9,3.257e-9,2.757e-9,
24316  2.372e-9,2.039e-9,1.767e-9,1.548e-9,1.346e-9,1.181e-9,1.043e-9,
24317  9.11e-10,8.103e-10,7.189e-10,6.314e-10,5.635e-10,4.976e-10,
24318  4.401e-10,3.926e-10,3.477e-10,3.085e-10,2.745e-10,2.416e-10,
24319  2.155e-10,1.895e-10,1.678e-10,1.493e-10,1.31e-10,1.154e-10,
24320  1.019e-10,8.855e-11 };
24321 
24322  /* System generated locals */
24323  double ret_val, d__1, d__2;
24324 
24325  /* Local variables */
24326  extern double xlgr_(double *, double *);
24327  int j;
24328  double x[4], xf;
24329 
24330 /* TKS INTEGER NPTCONTN2 */
24331 /* TKS INTEGER NPTCONTN2B */
24332 /* TKS & V1B,V2B,DVB */
24333 /* TKS DATA V2 / 350.0 / */
24334 /* TKS DATA NPTCONTN2 / 73 / */
24335 /* TKS DATA V1B, V2B, DVB, NPTCONTN2B / -10., 350., 5.0, 73 / */
24336 
24337 
24338 
24339 /* TKS -- begin implementation of TKS */
24340  if (wn <= 0.) {
24341  ret_val = 0.;
24342  return ret_val;
24343  }
24344  if (wn > 350.) {
24345  ret_val = 0.;
24346  return ret_val;
24347  }
24348 /* TKS -- end implementation of TKS */
24349 
24350  if (*w_n2__ == 0.) {
24351  ret_val = 0.;
24352  return ret_val;
24353  }
24354 
24355  j = (int) ((wn - v1) / dv) + 1;
24356  d__1 = ct296[j - 2] / ct220[j - 2];
24357  d__2 = (t - *t0) / (220. - *t0);
24358  x[0] = ct296[j - 2] * pow(d__1, d__2);
24359  d__1 = ct296[j - 1] / ct220[j - 1];
24360  d__2 = (t - *t0) / (220. - *t0);
24361  x[1] = ct296[j - 1] * pow(d__1, d__2);
24362  d__1 = ct296[j] / ct220[j];
24363  d__2 = (t - *t0) / (220. - *t0);
24364  x[2] = ct296[j] * pow(d__1, d__2);
24365  d__1 = ct296[j + 1] / ct220[j + 1];
24366  d__2 = (t - *t0) / (220. - *t0);
24367  x[3] = ct296[j + 1] * pow(d__1, d__2);
24368  xf = (wn - (v1 + dv * (double) (j - 1))) / dv;
24369  ret_val = xlgr_(&xf, x) * 1e-20 * (*w_n2__ / .26867775 * *rft * *rhofac) *
24370  *xcn2;
24371 
24372  return ret_val;
24373 } /* conti_n2__ */
24374 
24375 /* --- 4 points Lagrange interpolation ----------------------------------- */
24376 double xlgr_(double *xf, double *x)
24377 {
24378  /* System generated locals */
24379  double ret_val;
24380 
24381  /* Local variables */
24382  double a[4], b;
24383 
24384 
24385 
24386 
24387 /* with continous derivatives */
24388  /* Parameter adjustments */
24389  --x;
24390 
24391  /* Function Body */
24392  b = *xf * .5 * (1. - *xf);
24393  a[0] = -b * (1. - *xf);
24394  a[1] = 1. - (3. - *xf * 2.) * *xf * *xf + b * *xf;
24395  a[2] = (3. - *xf * 2.) * *xf * *xf + b * (1. - *xf);
24396  a[3] = -(b * *xf);
24397  ret_val = a[0] * x[1] + a[1] * x[2] + a[2] * x[3] + a[3] * x[4];
24398 
24399 /* L999: */
24400  return ret_val;
24401 } /* xlgr_ */
24402 
24403 /* --- initializations ---------------------------------------------------- */
24404 int initi_(double p, double t, double *radct,
24405  double *t0, double *p0, double *w_wv__, double *
24406  w_o2__, double *w_n2__, double *w_other__, double *xn0,
24407  double *xn, double *xn_wv__, double *rhofac)
24408 {
24409  /* Initialized data */
24410 
24411  static double wvmolmass = 18.016;
24412  static double drymolmass = 28.97;
24413 
24414  double wdry, ratiomix, wvpress;
24415 
24416 /* [K] */
24417  *t0 = 296.;
24418 /* [hPa] */
24419  *p0 = 1013.25;
24420 
24421 /* [K/cm-1] */
24422  *radct = consts_1.planck * consts_1.clight / consts_1.boltz;
24423  *xn0 = *p0 / (consts_1.boltz * *t0) * 1e3;
24424  *xn = p / (consts_1.boltz * t) * 1e3;
24425  wdry = *w_o2__ + *w_n2__ + *w_other__;
24426  ratiomix = *w_wv__ * wvmolmass / (wdry * drymolmass);
24427  wvpress = ratiomix / (ratiomix + wvmolmass / drymolmass) * p;
24428  *xn_wv__ = wvpress / (consts_1.boltz * t) * 1e3;
24429  *rhofac = *w_n2__ / (wdry + *w_wv__) * (p / *p0) * (273.15 / t);
24430 
24431 /* L999: */
24432  return 0;
24433 } /* initi_ */
24434 
24435 /* ############################################################################ */
24436 /* ---Block data to be consistent with LBLRTM/LBLATM */
24437 /* Subroutine */ int phys_consts__(void)
24438 {
24439  return 0;
24440 } /* phys_consts__ */
24441 
24442 
24443 /* Pi was obtained from PI = 2.*ASIN(1.) */
24444 /* --------------------------------------------- */
24445 /* Constants from NIST 01/11/2002 */
24446 /* --------------------------------------------- */
24447 /* --------------------------------------------- */
24448 /* units are generally cgs */
24449 /* The first and second radiation constants are taken from NIST. */
24450 /* They were previously obtained from the relations: */
24451 /* RADCN1 = 2.*PLANCK*CLIGHT*CLIGHT*1.E-07 */
24452 /* RADCN2 = PLANCK*CLIGHT/BOLTZ */
24453 /* --------------------------------------------- */
24454 
24455 /* ############################################################################ */
24456 /* Subroutine */ int bsa296_(void)
24457 {
24458  return 0;
24459 } /* bsa296_ */
24460 
24461 
24462 
24463 
24464 
24465 
24466 
24467 /* Subroutine */ int bsb296_(void)
24468 {
24469  return 0;
24470 } /* bsb296_ */
24471 
24472 
24473 
24474 
24475 
24476 
24477 
24478 /* ---------------------------------------------------------------------------- */
24479 
24480 
24481 /* Subroutine */ int bs260a_(void)
24482 {
24483  return 0;
24484 } /* bs260a_ */
24485 
24486 
24487 
24488 
24489 
24490 
24491 
24492 
24493 /* Subroutine */ int bs260b_(void)
24494 {
24495  return 0;
24496 } /* bs260b_ */
24497 
24498 
24499 
24500 
24501 
24502 
24503 
24504 /* ---------------------------------------------------------------------------- */
24505 
24506 
24507 /* Subroutine */ int bfh2oa_(void)
24508 {
24509  return 0;
24510 } /* bfh2oa_ */
24511 
24512 
24513 
24514 
24515 
24516 
24517 
24518 
24519 /* Subroutine */ int bfh2ob_(void)
24520 {
24521  return 0;
24522 } /* bfh2ob_ */
24523 
24524 
24525 // ---------------------- end of monortm CKD F77 code --------------------------
#define jrange1
Definition: continua.cc:21473
union u_bba_ bba_
INDEX Index
The type to use for all integer numbers and indices.
Definition: matpack.h:35
doublereal d
Definition: continua.cc:20434
#define rsibb
Definition: continua.cc:21936
const double O2O2_O2Fo_ckd_mt_100[O2O2_O2F_ckd_mt_100_npt+addF77fields]
Definition: continua.cc:4450
ftnint icirnum
Definition: continua.cc:20367
void MPM02H2OAbsModel(MatrixView pxsec, const Numeric CCin, const Numeric CLin, const Numeric CWin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
MPM02H2OAbsModel.
Definition: continua.cc:5370
const int N2N2_CT220_ckd_mt_100_npt
Definition: continua.cc:4252
#define ik1k0
Definition: continua.cc:22243
shortint h
Definition: continua.cc:20430
char * oblnk
Definition: continua.cc:20380
void MPM87O2AbsModel(MatrixView pxsec, const Numeric CCin, const Numeric CLin, const Numeric CWin, const Numeric COin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView abs_h2o, ConstVectorView vmr, const Verbosity &verbosity)
MPM87O2AbsModel.
Definition: continua.cc:11937
VOID(* Z_fp)()
Definition: continua.cc:20490
void CP98H2OAbsModel(MatrixView pxsec, const Numeric CCin, const Numeric CLin, const Numeric CWin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
CP98H2OAbsModel.
Definition: continua.cc:6069
#define fnumin
Definition: continua.cc:20774
Parameters parameters
Holds the command line parameters.
Definition: parameters.cc:41
int type
Definition: continua.cc:20447
const int SL296_ckd_mt_100_npt
Definition: continua.cc:1745
int phys_consts__(void)
Definition: continua.cc:24437
const Numeric SL260_ckd_0_v1
Definition: continua.cc:1295
const Numeric SL260_ckd_mt_100_dv
Definition: continua.cc:2155
const double FH2O_ckd_mt_100[FH2O_ckd_mt_100_npt+addF77fields]
Definition: continua.cc:2569
int bs260a_(void)
Definition: continua.cc:24481
This header file contains all the declarations of the implemented continua and full absorption (lines...
void Pardo_ATM_H2O_ForeignContinuum(MatrixView pxsec, const Numeric Cin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
Pardo_ATM_H2O_ForeignContinuum.
Definition: continua.cc:11390
shortlogical(* K_fp)()
Definition: continua.cc:20492
const Numeric Pa_to_hPa
Definition: continua.cc:411
char * inblank
Definition: continua.cc:20422
const int O2_vis_ckd_mt_250_npt
Definition: continua.cc:4641
#define eb_ref(a_1, a_2)
ftnint * inrecl
Definition: continua.cc:20420
void MPM89O2AbsModel(MatrixView pxsec, const Numeric CCin, const Numeric CLin, const Numeric CWin, const Numeric COin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView abs_h2o, ConstVectorView vmr, const Verbosity &verbosity)
MPM89O2AbsModel.
Definition: continua.cc:12221
complex c
Definition: continua.cc:20435
double fwv_(int ivc, double wn, double *w_wv__, double *rft, double *xn, double *xn_wv__, double *xn0, double *xfrg)
Definition: continua.cc:24022
void CKD_mt_100_foreign_h2o(MatrixView pxsec, const Numeric Cin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
CKD version MT 1.00 H2O foreign continuum absorption model.
Definition: continua.cc:8001
#define C(a, b)
Definition: Faddeeva.cc:254
void Ho66_CO2_self_continuum(MatrixView pxsec, const Numeric Cin, const Numeric xin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
Ho66_CO2_self_continuum.
Definition: continua.cc:15006
char * inacc
Definition: continua.cc:20408
ftnlen inacclen
Definition: continua.cc:20409
logical(* L_fp)()
Definition: continua.cc:20491
void CKD_222_self_h2o(MatrixView pxsec, const Numeric Cin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
CKD version 2.2.2 H2O self continuum absorption model.
Definition: continua.cc:6703
ftnlen inunflen
Definition: continua.cc:20419
char * icifmt
Definition: continua.cc:20365
const Numeric O2O2_O2F_ckd_mt_100_v1
Definition: continua.cc:4446
ftnlen infilen
Definition: continua.cc:20401
char * iciunit
Definition: continua.cc:20363
void CKD_242_self_h2o(MatrixView pxsec, const Numeric Cin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
CKD version 2.4.2 H2O self continuum absorption model.
Definition: continua.cc:7211
const Numeric BOLTZMAN_CONST
Global constant, the Boltzmann constant [J/K].
#define rsilo
Definition: continua.cc:21191
#define consts_1
Definition: continua.cc:22672
#define q
Definition: continua.cc:21469
const Numeric FH2O_ckd_mt_100_v2
Definition: continua.cc:2566
char logical1
Definition: continua.cc:20321
const Numeric O2_00_ckd_mt_100_v1
Definition: continua.cc:4515
void Rosenkranz_O2_continuum(MatrixView pxsec, const Numeric S0in, const Numeric G0in, const Numeric XS0in, const Numeric XG0in, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView abs_h2o, ConstVectorView vmr, const Verbosity &verbosity)
3) O2-air
Definition: continua.cc:13918
void MPM93O2AbsModel(MatrixView pxsec, const Numeric CCin, const Numeric CLin, const Numeric CWin, const Numeric COin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView abs_h2o, ConstVectorView vmr, const Verbosity &verbosity)
MPM93O2AbsModel.
Definition: continua.cc:13071
char * address
Definition: continua.cc:20313
char * name
Definition: continua.cc:20452
void Rosenkranz_N2_self_continuum(MatrixView pxsec, const Numeric Cin, const Numeric xin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
Rosenkranz_N2_self_continuum.
Definition: continua.cc:14581
void MPM93_H2O_continuum(MatrixView pxsec, const Numeric fcenter, const Numeric b1, const Numeric b2, const Numeric b3, const Numeric b4, const Numeric b5, const Numeric b6, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
MPM93 H2O pseudo continuum line parameters:
Definition: continua.cc:11506
#define rsi
Definition: continua.cc:21519
The Vector class.
Definition: matpackI.h:556
ftnint icirlen
Definition: continua.cc:20366
The MatrixView class.
Definition: matpackI.h:679
void MPM93_O2_continuum(MatrixView pxsec, const Numeric S0in, const Numeric G0in, const Numeric XS0in, const Numeric XG0in, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView abs_h2o, ConstVectorView vmr, const Verbosity &verbosity)
MPM93 O2 continuum:
Definition: continua.cc:13763
char * infmt
Definition: continua.cc:20414
void MPM92O2AbsModel(MatrixView pxsec, const Numeric CCin, const Numeric CLin, const Numeric CWin, const Numeric COin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView abs_h2o, ConstVectorView vmr, const Verbosity &verbosity)
MPM92O2AbsModel.
Definition: continua.cc:12500
Numeric fac(const Index n)
fac
Definition: math_funcs.cc:68
const Numeric FCO2_ckd_mt_100_v2
Definition: continua.cc:2977
ftnint ounit
Definition: continua.cc:20373
struct s_dimer_ dimer_
flag icierr
Definition: continua.cc:20362
double conti_n2__(double wn, double t, double *t0, double *w_n2__, double *rft, double *rhofac, double *xcn2)
Definition: continua.cc:24289
double swv_mpmf87s93__(double wn, double t, double *t0, double *w_wv__, double *rft, double *, double *xn_wv__, double *xn0, double *xslf)
Definition: continua.cc:24250
const Numeric LOG10_EULER_NUMBER
char * infile
Definition: continua.cc:20400
const Numeric N2N2_CT220_ckd_mt_100_v2
Definition: continua.cc:4250
void MPM85O2AbsModel(MatrixView pxsec, const Numeric CCin, const Numeric CLin, const Numeric CWin, const Numeric COin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView abs_h2o, ConstVectorView vmr, const Verbosity &verbosity)
MPM85O2AbsModel.
Definition: continua.cc:11645
#define nsriup
Definition: continua.cc:21932
void CKD_mt_100_self_h2o(MatrixView pxsec, const Numeric Cin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
CKD version MT 1.00 H2O self continuum absorption model.
Definition: continua.cc:7751
int ik1k0
Definition: continua.cc:20601
VOID Z_f
Definition: continua.cc:20499
struct s_app3a_ app3a_
const Numeric O2O2_O2F_ckd_mt_100_dv
Definition: continua.cc:4448
void Standard_O2_continuum(MatrixView pxsec, const Numeric Cin, const Numeric G0in, const Numeric G0Ain, const Numeric G0Bin, const Numeric XG0din, const Numeric XG0win, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView abs_h2o, ConstVectorView vmr, const Verbosity &verbosity)
Standard_O2_continuum.
Definition: continua.cc:14050
double bgama_(double *fnu, double *t1, double *t2, double *eps, double *t3, double *t4, double *temp)
Definition: continua.cc:22245
#define rsigg
Definition: continua.cc:21193
const Numeric SL296_ckd_mt_100_dv
Definition: continua.cc:1744
void CKD_mt_250_co2(MatrixView pxsec, const Numeric Cin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
CKD version MT 2.50 CO2 continuum absorption model.
Definition: continua.cc:9090
const Numeric VMRCalcLimit
Definition: continua.cc:430
ftnlen ofnmlen
Definition: continua.cc:20375
const Numeric N2N2_CT220_ckd_mt_100_v1
Definition: continua.cc:4249
cmplx FADDEEVA() w(cmplx z, double relerr)
Definition: Faddeeva.cc:679
const Numeric FH2O_ckd_mt_100_dv
Definition: continua.cc:2567
ftnint cirec
Definition: continua.cc:20357
ftnint * innum
Definition: continua.cc:20404
const Numeric N2N2_N2F_ckd_mt_100_v2
Definition: continua.cc:4295
const Numeric N2N2_CT296_ckd_mt_100_v2
Definition: continua.cc:4203
int bsa296_(void)
Definition: continua.cc:24456
ftnint * innamed
Definition: continua.cc:20405
int ixpolat_(int *l, int *m, int *k, double *eps, double *x, double *y, double *t, double *ss, double *si, int *nr, double *s2)
Definition: continua.cc:22597
const Numeric NAT_LOG_TEN
int nsol
Definition: continua.cc:20582
struct s_sh2ob_ sh2ob_
shortint(* J_fp)()
Definition: continua.cc:20485
void Ho66_CO2_foreign_continuum(MatrixView pxsec, const Numeric Cin, const Numeric xin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView abs_n2, ConstVectorView vmr, const Verbosity &verbosity)
Ho66_CO2_foreign_continuum.
Definition: continua.cc:15104
void PWR98H2OAbsModel(MatrixView pxsec, const Numeric CCin, const Numeric CLin, const Numeric CWin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
PWR98H2OAbsModel.
Definition: continua.cc:5856
double v2
Definition: continua.cc:22620
flag ciend
Definition: continua.cc:20355
const Numeric SPEED_OF_LIGHT
Numeric RADFN_FUN(const Numeric VI, const Numeric XKT)
Definition: continua.cc:6617
const Numeric SL296_ckd_0_v1
Definition: continua.cc:466
void MPM93H2OAbsModel(MatrixView pxsec, const Numeric CCin, const Numeric CLin, const Numeric CWin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
MPM93H2OAbsModel.
Definition: continua.cc:5630
char * csta
Definition: continua.cc:20387
flag oerr
Definition: continua.cc:20372
Numeric XINT_FUN(const Numeric V1A, const Numeric, const Numeric DVA, ConstVectorView A, const Numeric VI)
Definition: continua.cc:6533
const double SL260_ckd_0[SL260_ckd_0_npt+addF77fields]
Definition: continua.cc:1299
const double O2_vis_ckd_mt_250[O2_vis_ckd_mt_250_npt+addF77fields]
Definition: continua.cc:4642
struct s_fh2ob_ fh2ob_
char * ofm
Definition: continua.cc:20378
const Numeric FCO2_ckd_mt_250_dv
Definition: continua.cc:3189
double swv_(int ivc, double wn, double t, double *t0, double *w_wv__, double *rft, double *xn, double *xn_wv__, double *xn0, double *xslf)
Definition: continua.cc:24148
const Numeric EULER_NUMBER
void MPM93RainExt(MatrixView pxsec, const Numeric CEin, const Numeric CAin, const Numeric CBin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
MPM93RainExt.
Definition: continua.cc:15554
Numeric WVSatPressureLiquidWater(const Numeric t)
Definition: continua.cc:15951
const Numeric FCO2_ckd_mt_100_dv
Definition: continua.cc:2978
double specfct_(double *freq, double *omega, double *phi, double *phi2, int *n, double *rtemp)
Definition: continua.cc:21624
const Numeric SL296_ckd_mt_100_v1
Definition: continua.cc:1742
doublereal(* D_fp)()
Definition: continua.cc:20488
ftnlen indirlen
Definition: continua.cc:20413
int bound54_(double *temp, double *rsi, int *nsol)
Definition: continua.cc:21938
Index nelem() const
Returns the number of elements.
Definition: matpackI.cc:180
short int shortint
Definition: continua.cc:20314
doublereal r
Definition: continua.cc:20318
const Numeric O2_10_ckd_mt_100_v2
Definition: continua.cc:4635
void CKD_mt_250_foreign_h2o(MatrixView pxsec, const Numeric Cin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
CKD version MT 2.50 H2O foreign continuum absorption model.
Definition: continua.cc:8491
integer(* I_fp)()
Definition: continua.cc:20486
const double FCO2_ckd_mt_100[FCO2_ckd_mt_100_npt+addF77fields]
Definition: continua.cc:2980
ftnint inunit
Definition: continua.cc:20399
const Array< SpeciesRecord > species_data
Species Data.
const Numeric N2N2_N2F_ckd_mt_100_v1
Definition: continua.cc:4294
struct s_bbc_ bbc_
#define ivi
Definition: continua.cc:21702
double v2
Definition: continua.cc:22660
const int FCO2_ckd_mt_100_npt
Definition: continua.cc:2979
#define b01
Definition: continua.cc:21199
double fctl_(int *n)
Definition: continua.cc:22208
unsigned long int uinteger
Definition: continua.cc:20312
This file contains the definition of Array.
const Numeric N2N2_N2F_ckd_mt_250_v1
Definition: continua.cc:4358
char * oacc
Definition: continua.cc:20377
#define fh2oa_1
Definition: continua.cc:22617
flag cerr
Definition: continua.cc:20385
The implementation for String, the ARTS string class.
Definition: mystring.h:63
const double N2N2_sf_296_ckd_mt_100[N2N2_CT296_ckd_mt_100_npt+addF77fields]
Definition: continua.cc:4224
int addspec_(double *g0, double *ep, double *tau1, double *tau2, double *tau5, double *tau6, double *temp, int *nf, double *freq, double *abscoef, int *, int *like, int *lambda1, int *lambda2, int *lambda, int *)
Definition: continua.cc:21208
const Numeric FH2O_ckd_0_v1
Definition: continua.cc:879
const Numeric N2N2_N2F_ckd_mt_100_dv
Definition: continua.cc:4296
void TRE05O2AbsModel(MatrixView pxsec, const Numeric CCin, const Numeric CLin, const Numeric CWin, const Numeric COin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView abs_h2o, ConstVectorView vmr, const Verbosity &verbosity)
TRE05O2AbsModel.
Definition: continua.cc:12787
Index ncols() const
Returns the number of columns.
Definition: matpackI.cc:838
int spline_0_(int n__, int *l, int *m, int *k, double *eps, double *x, double *y, double *t, double *ss, double *si, int *nr, double *s2)
Definition: continua.cc:22344
#define wn2
Definition: continua.cc:21470
#define d01
Definition: continua.cc:21200
The global header file for ARTS.
long int flag
Definition: continua.cc:20346
flag cierr
Definition: continua.cc:20353
const double N2N2_N2Ft_ckd_mt_250[N2N2_N2F_ckd_mt_250_npt+addF77fields]
Definition: continua.cc:4401
const Numeric O2_vis_ckd_mt_250_dv
Definition: continua.cc:4640
const double FCO2_ckd_mt_250[FCO2_ckd_mt_250_npt+addF77fields]
Definition: continua.cc:3191
ftnlen innamlen
Definition: continua.cc:20407
double radcn2
Definition: continua.cc:22668
doublereal E_f
Definition: continua.cc:20500
const Numeric O2_00_ckd_mt_100_dv
Definition: continua.cc:4517
const double N2N2_N2F_ckd_mt_100[N2N2_N2F_ckd_mt_100_npt+addF77fields]
Definition: continua.cc:4298
const double N2N2_N2Ft_ckd_mt_100[N2N2_N2F_ckd_mt_100_npt+addF77fields]
Definition: continua.cc:4326
void Pardo_ATM_N2_dry_continuum(MatrixView pxsec, const Numeric Cin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, ConstVectorView h2ovmr, const Verbosity &verbosity)
Pardo_ATM_N2_dry_continuum.
Definition: continua.cc:14476
#define sh2ob_1
Definition: continua.cc:22646
#define dnu
Definition: continua.cc:20776
int bfh2ob_(void)
Definition: continua.cc:24519
const double O2O2_O2Ft_ckd_mt_100[O2O2_O2F_ckd_mt_100_npt+addF77fields]
Definition: continua.cc:4474
void Standard_H2O_foreign_continuum(MatrixView pxsec, const Numeric Cin, const Numeric xin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
Standard_H2O_foreign_continuum.
Definition: continua.cc:6325
#define omeg
Definition: continua.cc:21192
struct s_s260a_ s260a_
double clebsqr_(int *l, int *lambda, int *lp)
Definition: continua.cc:22203
const Numeric SL260_ckd_0_dv
Definition: continua.cc:1297
void Standard_N2_self_continuum(MatrixView pxsec, const Numeric Cin, const Numeric xfin, const Numeric xtin, const Numeric xpin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
4) N2-N2
Definition: continua.cc:14687
flag iciend
Definition: continua.cc:20364
void PWR93O2AbsModel(MatrixView pxsec, const Numeric CCin, const Numeric CLin, const Numeric CWin, const Numeric COin, const String &model, const String &version, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmrh2o, ConstVectorView vmr, const Verbosity &verbosity)
Oxygen complex at 60 GHz plus mm O2 lines plus O2 continuum.
Definition: continua.cc:13376
const Numeric O2_vis_ckd_mt_250_v2
Definition: continua.cc:4639
#define nsol
Definition: continua.cc:21195
Numeric sum() const
The sum of all elements of a Vector.
Definition: matpackI.cc:186
char * inname
Definition: continua.cc:20406
#define max(a, b)
Definition: continua.cc:20461
#define b0
Definition: continua.cc:21471
const Numeric SL296_ckd_mt_100_v2
Definition: continua.cc:1743
void CKD_mt_co2(MatrixView pxsec, const Numeric Cin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
CKD version MT 1.00 CO2 continuum absorption model.
Definition: continua.cc:8893
Numeric n2n2tks_(double t, double f)
Definition: continua.cc:20789
const double O2_00_ckd_mt_100[O2_00_ckd_mt_100_npt+addF77fields]
Definition: continua.cc:4519
const int FH2O_ckd_mt_100_npt
Definition: continua.cc:2568
void CKD_mt_250_self_h2o(MatrixView pxsec, const Numeric Cin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
CKD version MT 2.50 H2O self continuum absorption model.
Definition: continua.cc:8204
const Numeric FCO2_ckd_mt_250_v1
Definition: continua.cc:3187
const Numeric N2N2_CT220_ckd_mt_100_dv
Definition: continua.cc:4251
double v2
Definition: continua.cc:22624
const Numeric FH2O_ckd_0_v2
Definition: continua.cc:880
long int ftnint
Definition: continua.cc:20348
struct s_bou43_ bou43_
const Numeric SL296_ckd_0_dv
Definition: continua.cc:468
void CKD_mt_v0v0_o2(MatrixView pxsec, const Numeric Cin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, ConstVectorView abs_n2, const Verbosity &verbosity)
CKD version MT 1.00 O2 v0<-v0 band absorption.
Definition: continua.cc:10567
char * cifmt
Definition: continua.cc:20356
const double N2N2_N2F_ckd_mt_250[N2N2_N2F_ckd_mt_250_npt+addF77fields]
Definition: continua.cc:4362
const int addF77fields
Definition: continua.cc:438
Vardesc ** vars
Definition: continua.cc:20453
const Numeric O2_10_ckd_mt_100_dv
Definition: continua.cc:4636
int bound32_(double *temp, double *rsi, int *nsol)
Definition: continua.cc:21708
char * ofnm
Definition: continua.cc:20374
struct s_like_ like_
#define ldelel
Definition: continua.cc:21704
double v2___
Definition: continua.cc:22656
const Numeric N2N2_CT296_ckd_mt_100_v1
Definition: continua.cc:4202
double swv24_(double wn, double t, double *t0, double *w_wv__, double *rft, double *, double *xn_wv__, double *xn0, double *xslf)
Definition: continua.cc:24183
char * inform
Definition: continua.cc:20416
const Numeric O2_10_ckd_mt_100_v1
Definition: continua.cc:4634
const double SL260_ckd_mt_100[SL260_ckd_mt_100_npt+addF77fields]
Definition: continua.cc:2157
#define slit
Definition: continua.cc:21927
char * indir
Definition: continua.cc:20412
void xsec_continuum_tag(MatrixView xsec, const String &name, ConstVectorView parameters, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView abs_n2, ConstVectorView abs_h2o, ConstVectorView abs_o2, ConstVectorView vmr, const Verbosity &verbosity)
Calculates model absorption for one continuum or full model tag.
Definition: continua.cc:16085
int partsum_(double *temp)
Definition: continua.cc:21475
struct s_blockin_ blockin_
#define jrange2
Definition: continua.cc:21201
#define abs(x)
Definition: continua.cc:20458
const Numeric dB_km_to_1_m
Definition: continua.cc:425
const Numeric N2N2_CT296_ckd_mt_100_dv
Definition: continua.cc:4204
struct s_app3b_ app3b_
const Joker joker
const int N2N2_N2F_ckd_mt_100_npt
Definition: continua.cc:4297
ftnint * inopen
Definition: continua.cc:20403
ftnlen inseqlen
Definition: continua.cc:20411
int ibound
Definition: continua.cc:20607
char * inunf
Definition: continua.cc:20418
NUMERIC Numeric
The type to use for all floating point numbers.
Definition: matpack.h:29
const double FH2O_ckd_0[FH2O_ckd_0_npt+addF77fields]
Definition: continua.cc:883
int nptslfwv
Definition: continua.cc:22639
#define dx
Definition: continua.cc:21928
struct s_bbb_ bbb_
The Matrix class.
Definition: matpackI.h:788
union u_bl3_ bl3_
struct s_energe_ energ_
void CKD_mt_v1v0_o2(MatrixView pxsec, const Numeric Cin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
CKD version MT 1.00 O2 v1<-v0 band absorption.
Definition: continua.cc:10773
const Numeric FH2O_ckd_0_dv
Definition: continua.cc:881
Declarations required for the calculation of absorption coefficients.
double temp
Definition: continua.cc:20540
#define nsri
Definition: continua.cc:21930
const Numeric FH2O_ckd_mt_100_v1
Definition: continua.cc:2565
struct s_sh2oa_ sh2oa_
long int ftnlen
Definition: continua.cc:20347
ftnint * inex
Definition: continua.cc:20402
void MPM93_N2_continuum(MatrixView pxsec, const Numeric Cin, const Numeric Gin, const Numeric xTin, const Numeric xfin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView abs_h2o, ConstVectorView vmr, const Verbosity &verbosity)
MPM93 N2 continuum.
Definition: continua.cc:14341
VOID C_f
Definition: continua.cc:20497
#define sh2oa_1
Definition: continua.cc:22635
int nptslfwv___
Definition: continua.cc:22657
int nsriup
Definition: continua.cc:20552
void MPM93WaterDropletAbs(MatrixView pxsec, const Numeric CCin, const Numeric CGin, const Numeric CEin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
MPM93WaterDropletAbs.
Definition: continua.cc:15214
int nlines
Definition: continua.cc:20620
const int N2N2_CT296_ckd_mt_100_npt
Definition: continua.cc:4205
void CKD_241_co2(MatrixView pxsec, const Numeric Cin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
CKD version 2.4.1 CO2 continuum absorption model.
Definition: continua.cc:8696
void MPM93IceCrystalAbs(MatrixView pxsec, const Numeric CCin, const Numeric CAin, const Numeric CBin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
MPM93IceCrystalAbs.
Definition: continua.cc:15391
#define like
Definition: continua.cc:20784
void CKD24_H20(MatrixView pxsec, int isf, const Numeric Cin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, ConstVectorView abs_n2, const Verbosity &verbosity)
CKD version 2.4 H2O continuum absorption model.
Definition: continua.cc:11206
#define q1
Definition: continua.cc:21197
#define ibound
Definition: continua.cc:21196
#define VOID
Definition: continua.cc:20426
#define llp
Definition: continua.cc:21706
void Rosenkranz_CO2_foreign_continuum(MatrixView pxsec, const Numeric Cin, const Numeric xin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView abs_n2, ConstVectorView vmr, const Verbosity &verbosity)
Rosenkranz_CO2_foreign_continuum.
Definition: continua.cc:14908
void CKD_mt_250_o2_vis(MatrixView pxsec, const Numeric Cin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
CKD version MT 2.50 O2.
Definition: continua.cc:11001
double artsckd_(double p, double t, double vmrh2o, double vmrn2, double vmro2, double freq, int ivc)
Definition: continua.cc:23816
long int logical
Definition: continua.cc:20319
ftnint informlen
Definition: continua.cc:20417
struct s_fh2oa_ fh2oa_
void CKD_mt_250_CIAfun_n2(MatrixView pxsec, const Numeric Cin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, ConstVectorView abs_h2o, ConstVectorView abs_o2, const Verbosity &verbosity)
CKD version MT 2.50 N2-N2 collision induced absorption (fundamental band)
Definition: continua.cc:10129
const Numeric Pa_to_kPa
Definition: continua.cc:407
char integer1
Definition: continua.cc:20322
void Rosenkranz_CO2_self_continuum(MatrixView pxsec, const Numeric Cin, const Numeric xin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
Rosenkranz_CO2_self_continuum.
Definition: continua.cc:14807
ftnint * innrec
Definition: continua.cc:20421
ftnlen infmtlen
Definition: continua.cc:20415
#define fnumax
Definition: continua.cc:20775
#define d0
Definition: continua.cc:21472
char * addr
Definition: continua.cc:20445
This can be used to make arrays out of anything.
Definition: array.h:40
doublereal(*)(* E_fp)()
Definition: continua.cc:20488
const Numeric SL260_ckd_mt_100_v1
Definition: continua.cc:2153
ftnlen inblanklen
Definition: continua.cc:20423
int(* S_fp)()
Definition: continua.cc:20494
ftnint cunit
Definition: continua.cc:20386
#define ldelvi
Definition: continua.cc:21701
struct s_s260b_ s260b_
const double SL296_ckd_0[SL296_ckd_0_npt+addF77fields]
Definition: continua.cc:470
VOID H_f
Definition: continua.cc:20498
double om0
Definition: continua.cc:20588
const Numeric SL260_ckd_0_v2
Definition: continua.cc:1296
doublecomplex z
Definition: continua.cc:20436
struct s_k1k0_ k1k0_
#define ns
Definition: continua.cc:21931
integer1 g
Definition: continua.cc:20429
void CKD_mt_CIAfun_n2(MatrixView pxsec, const Numeric Cin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
CKD version MT 1.00 N2-N2 collision induced absorption (fundamental band)
Definition: continua.cc:9651
const Numeric Hz_to_GHz
Definition: continua.cc:403
const int FH2O_ckd_0_npt
Definition: continua.cc:882
const Numeric O2O2_O2F_ckd_mt_100_v2
Definition: continua.cc:4447
const int N2N2_N2F_ckd_mt_250_npt
Definition: continua.cc:4361
void CKD_mt_CIArot_n2(MatrixView pxsec, const Numeric Cin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
CKD version MT 1.00 N2-N2 collision induced absorption (rotational band)
Definition: continua.cc:9405
const double N2N2_CT296_ckd_mt_100[N2N2_CT296_ckd_mt_100_npt+addF77fields]
Definition: continua.cc:4206
void CKD_222_foreign_h2o(MatrixView pxsec, const Numeric Cin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
CKD version 2.2.2 H2O foreign continuum absorption model.
Definition: continua.cc:6988
struct s_bf_ bf_
Numeric WVSatPressureIce(const Numeric t)
Definition: continua.cc:16016
VOID(* C_fp)()
Definition: continua.cc:20489
A constant view of a Vector.
Definition: matpackI.h:292
void BF86_CIA_N2(MatrixView pxsec, const Numeric Cin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
Borysow-Frommhold 1986 N2-N2 CIA absorption model;.
Definition: continua.cc:14215
#define s260a_1
Definition: continua.cc:22653
ftnint aunit
Definition: continua.cc:20393
const int O2O2_O2F_ckd_mt_100_npt
Definition: continua.cc:4449
char * osta
Definition: continua.cc:20376
void Standard_H2O_self_continuum(MatrixView pxsec, const Numeric Cin, const Numeric xin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
Standard_H2O_self_continuum.
Definition: continua.cc:6201
Numeric MPMLineShapeO2Function(const Numeric gamma, const Numeric fl, const Numeric f, const Numeric delta)
Definition: continua.cc:15891
#define nlines
Definition: continua.cc:21935
integer i
Definition: continua.cc:20431
void MaTipping_H2O_foreign_continuum(MatrixView pxsec, const Numeric Cin, const Numeric xin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
MaTipping_H2O_foreign_continuum.
Definition: continua.cc:6449
#define temp
Definition: continua.cc:20773
double fwv_mpmf87s93__(double wn, double *w_wv__, double *rft, double *xn, double *xn_wv__, double *xn0, double *xfrg)
Definition: continua.cc:24050
Numeric planck(const Numeric &f, const Numeric &t)
planck
#define ivip
Definition: continua.cc:21703
float real
Definition: continua.cc:20315
short int shortlogical
Definition: continua.cc:20320
#define _U_
Definition: config.h:167
const Numeric N2N2_N2F_ckd_mt_250_dv
Definition: continua.cc:4360
void check_continuum_model(const String &name)
An auxiliary functions that checks if a given continuum model is listed in species_data.cc.
Definition: continua.cc:20236
void CKD_242_foreign_h2o(MatrixView pxsec, const Numeric Cin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
CKD version 2.4.2 H2O foreign continuum absorption model.
Definition: continua.cc:7509
VOID(* H_fp)()
Definition: continua.cc:20493
void CKD_mt_250_CIArot_n2(MatrixView pxsec, const Numeric Cin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, ConstVectorView abs_h2o, ConstVectorView abs_o2, const Verbosity &verbosity)
CKD version MT 2.50 N2-N2 collision induced absorption (rotational band)
Definition: continua.cc:9866
int bs260b_(void)
Definition: continua.cc:24493
#define wnrmax3
Definition: continua.cc:21929
#define beta
Definition: continua.cc:21194
#define CREATE_OUT3
Definition: messages.h:214
int profile_(double *x, double *y)
Definition: continua.cc:21521
double fwv24_(double wn, double *w_wv__, double *rft, double *xn, double *xn_wv__, double *xn0, double *xfrg)
Definition: continua.cc:24077
const Numeric O2_vis_ckd_mt_250_v1
Definition: continua.cc:4638
struct s_consts_ consts_
const int O2_00_ckd_mt_100_npt
Definition: continua.cc:4518
const Numeric SL296_ckd_0_v2
Definition: continua.cc:467
flag aerr
Definition: continua.cc:20392
ftnint ciunit
Definition: continua.cc:20354
ftnlen * dims
Definition: continua.cc:20446
double wnrmax3
Definition: continua.cc:20546
const double SL296_ckd_mt_100[SL296_ckd_mt_100_npt+addF77fields]
Definition: continua.cc:1746
const double N2N2_CT220_ckd_mt_100[N2N2_CT220_ckd_mt_100_npt+addF77fields]
Definition: continua.cc:4253
double doublereal
Definition: continua.cc:20316
int spline_(int *l, int *m, int *k, double *eps, double *x, double *y, double *t, double *ss, double *si, int *nr, double *s2)
Definition: continua.cc:22590
const Numeric PI
#define ll
Definition: continua.cc:21705
#define fh2ob_1
Definition: continua.cc:22628
const int SL296_ckd_0_npt
Definition: continua.cc:469
int bfh2oa_(void)
Definition: continua.cc:24507
void MPM87H2OAbsModel(MatrixView pxsec, const Numeric CCin, const Numeric CLin, const Numeric CWin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
MPM87H2OAbsModel.
Definition: continua.cc:4980
const Numeric FCO2_ckd_mt_100_v1
Definition: continua.cc:2976
const Numeric N2N2_N2F_ckd_mt_250_v2
Definition: continua.cc:4359
Numeric MPMLineShapeFunction(const Numeric gamma, const Numeric fl, const Numeric f)
Definition: continua.cc:15834
void CKD_mt_CIAfun_o2(MatrixView pxsec, const Numeric Cin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
CKD version MT 1.00 O2-O2 collision induced absorption (fundamental band)
Definition: continua.cc:10347
int initi_(double p, double t, double *radct, double *t0, double *p0, double *w_wv__, double *w_o2__, double *w_n2__, double *w_other__, double *xn0, double *xn, double *xn_wv__, double *rhofac)
Definition: continua.cc:24404
char * name
Definition: continua.cc:20444
double v2
Definition: continua.cc:22642
long int integer
Definition: continua.cc:20311
double xlgr_(double *xf, double *x)
Definition: continua.cc:24376
flag inerr
Definition: continua.cc:20398
const int FCO2_ckd_mt_250_npt
Definition: continua.cc:3190
double clebsqr_0_(int n__, int *l, int *lambda, int *lp)
Definition: continua.cc:22132
int bsb296_(void)
Definition: continua.cc:24467
real(* R_fp)()
Definition: continua.cc:20487
#define eb
Definition: continua.cc:21933
const Numeric FCO2_ckd_mt_250_v2
Definition: continua.cc:3188
int nptfh2o
Definition: continua.cc:22621
void MPM89H2OAbsModel(MatrixView pxsec, const Numeric CCin, const Numeric CLin, const Numeric CWin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &verbosity)
MPM89H2OAbsModel.
Definition: continua.cc:5166
Index nrows() const
Returns the number of rows.
Definition: matpackI.cc:832
int like
Definition: continua.cc:20594
union u_bbbb_ bbbb_
ftnint orl
Definition: continua.cc:20379
const Numeric SL260_ckd_mt_100_v2
Definition: continua.cc:2154
struct s_n2part_ n2part_
real r
Definition: continua.cc:20317
struct s_rsilo_ rsilo_
const double N2N2_sf_220_ckd_mt_100[N2N2_CT220_ckd_mt_100_npt+addF77fields]
Definition: continua.cc:4271
#define niv
Definition: continua.cc:21934
const Numeric O2_00_ckd_mt_100_v2
Definition: continua.cc:4516
const int SL260_ckd_mt_100_npt
Definition: continua.cc:2156
char * inseq
Definition: continua.cc:20410
const int SL260_ckd_0_npt
Definition: continua.cc:1298
double v2
Definition: continua.cc:22638