ARTS  2.3.1277(git:c4d0469d)
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 
399 #include "continua.h"
400 #include <cmath>
401 #include "absorption.h"
402 #include "array.h"
403 #include "arts.h"
404 #include "global_data.h"
405 #include "matpackI.h"
406 
407 // #################################################################################
408 
409 // global constants as defined in constants.cc
410 
411 extern const Numeric EULER_NUMBER;
412 extern const Numeric LOG10_EULER_NUMBER;
413 extern const Numeric NAT_LOG_TEN;
414 extern const Numeric PI;
415 extern const Numeric SPEED_OF_LIGHT;
416 extern const Numeric DENSITY_OF_WATER;
417 
419 
420 // numerical constants specific defined for the file continua.cc
421 
422 // conversion from neper to decibel:
423 //const Numeric Np_to_dB = (10.000000 * LOG10_EULER_NUMBER); // [dB/Np]
424 // conversion from decibel to neper:
425 //const Numeric dB_to_Np = (1.000000 / Np_to_dB); // [Np/dB]
426 // conversion from GHz to Hz:
427 //const Numeric GHz_to_Hz = 1.000000e9; // [Hz/GHz]
428 // conversion from Hz to GHz:
429 const Numeric Hz_to_GHz = 1.000000e-9; // [GHz/Hz]
430 // conversion from kPa to Pa:
431 //const Numeric kPa_to_Pa = 1.000000e3; // [kPa/Pa]
432 // conversion from Pa to kPa:
433 const Numeric Pa_to_kPa = 1.000000e-3; // [Pa/kPa]
434 // conversion from hPa to Pa (hPa = mbar):
435 //const Numeric hPa_to_Pa = 1.000000e2; // [hPa/Pa]
436 // conversion from Pa to hPa (hPa = mbar):
437 const Numeric Pa_to_hPa = 1.000000e-2; // [Pa/hPa]
438 
439 // MPM pre-factor for unit setting:
440 //const Numeric dB_m_Hz = 0.1820427855916028e-06; // [dB/m/Hz] (4 * pi / c) * 10 * log(e)
441 //const Numeric dB_km_GHz = 0.1820427855916028e+06; // [dB/km/GHz] (4 * pi / c) * 10 * log(e)
442 
443 // absorption unit conversions
444 
445 // conversion from dB/km to Np/km for absorption units:
446 //const Numeric dB_km_to_Np_km = dB_to_Np;
447 // conversion from dB/km to Np/m for absorption units:
448 //const Numeric dB_km_to_Np_m = (1.00000e-3 / (10.0 * LOG10_EULER_NUMBER));
449 // conversion from dB/km to 1/m for absorption units:
450 const Numeric dB_km_to_1_m = (1.00000e-3 / (10.0 * LOG10_EULER_NUMBER));
451 
452 // lower limit for absorption calculation due to underflow error:
453 
454 const Numeric VMRCalcLimit = 1.000e-25;
455 
457 // arrays of the CKD H2O, CO2, N2, O2 absorption models
459 
460 // additional array fields due to different numbering schemes of F77 and C/C++
461 const int addF77fields = 1;
462 
464 // Continuum data constants
466 
467 /*
468  ---------------------------------------------------------------------
469 
470 c 29 August 2002
471 c
472 c This version, ckd_2.4.2, is composed of the updates to all continua
473 c including water vapor (ckd_2.2). This is to retain consistency between the
474 c continuum and the HITRAN line parameters.
475 c
476 
477  further information can be found under
478  http://www.rtweb.aer.com/continuum_frame.html
479 
480  Transformation from original F77 code to C/C++ by
481  T. Kuhn, iup Bremen, October 2003
482 
483  ---------------------------------------------------------------------
484  */
485 // H2O self continuum parameters at T=296 K for the CKD versions 0 to 2.4.2
486 // date of last update: 06/28/82
487 // units of (CM**3/MOL)*1.E-20
488 const Numeric SL296_ckd_0_v1 = -20.0;
489 const Numeric SL296_ckd_0_v2 = 20000.0;
490 const Numeric SL296_ckd_0_dv = 10.0;
491 const int SL296_ckd_0_npt = 2003;
493  0.0000e-00, 1.1109e-01, 1.0573e-01, 1.0162e-01, 1.0573e-01,
494  1.1109e-01, 1.2574e-01, 1.3499e-01, // f02740
495  1.4327e-01, 1.5065e-01, 1.5164e-01, 1.5022e-01, 1.3677e-01, // f02750
496  1.3115e-01, 1.2253e-01, 1.1271e-01, 1.0070e-01, 8.7495e-02, // f02760
497  8.0118e-02, 6.9940e-02, 6.2034e-02, 5.6051e-02, 4.7663e-02, // f02770
498  4.2450e-02, 3.6690e-02, 3.3441e-02, 3.0711e-02, 2.5205e-02, // f02780
499  2.2113e-02, 1.8880e-02, 1.6653e-02, 1.4626e-02, 1.2065e-02, // f02790
500  1.0709e-02, 9.1783e-03, 7.7274e-03, 6.7302e-03, 5.6164e-03, // f02800
501  4.9089e-03, 4.1497e-03, 3.5823e-03, 3.1124e-03, 2.6414e-03, // f02810
502  2.3167e-03, 2.0156e-03, 1.7829e-03, 1.5666e-03, 1.3928e-03, // f02820
503  1.2338e-03, 1.0932e-03, 9.7939e-04, 8.8241e-04, 7.9173e-04, // f02830
504  7.1296e-04, 6.4179e-04, 5.8031e-04, 5.2647e-04, 4.7762e-04, // f02850
505  4.3349e-04, 3.9355e-04, 3.5887e-04, 3.2723e-04, 2.9919e-04, // f02860
506  2.7363e-04, 2.5013e-04, 2.2876e-04, 2.0924e-04, 1.9193e-04, // f02870
507  1.7618e-04, 1.6188e-04, 1.4891e-04, 1.3717e-04, 1.2647e-04, // f02880
508  1.1671e-04, 1.0786e-04, 9.9785e-05, 9.2350e-05, 8.5539e-05, // f02890
509  7.9377e-05, 7.3781e-05, 6.8677e-05, 6.3993e-05, 5.9705e-05, // f02900
510  5.5788e-05, 5.2196e-05, 4.8899e-05, 4.5865e-05, 4.3079e-05, // f02910
511  4.0526e-05, 3.8182e-05, 3.6025e-05, 3.4038e-05, 3.2203e-05, // f02920
512  3.0511e-05, 2.8949e-05, 2.7505e-05, 2.6170e-05, 2.4933e-05, // f02930
513  2.3786e-05, 2.2722e-05, 2.1736e-05, 2.0819e-05, 1.9968e-05, // f02940
514  1.9178e-05, 1.8442e-05, 1.7760e-05, 1.7127e-05, 1.6541e-05, // f02960
515  1.5997e-05, 1.5495e-05, 1.5034e-05, 1.4614e-05, 1.4230e-05, // f02970
516  1.3883e-05, 1.3578e-05, 1.3304e-05, 1.3069e-05, 1.2876e-05, // f02980
517  1.2732e-05, 1.2626e-05, 1.2556e-05, 1.2544e-05, 1.2604e-05, // f02990
518  1.2719e-05, 1.2883e-05, 1.3164e-05, 1.3581e-05, 1.4187e-05, // f03000
519  1.4866e-05, 1.5669e-05, 1.6717e-05, 1.8148e-05, 2.0268e-05, // f03010
520  2.2456e-05, 2.5582e-05, 2.9183e-05, 3.3612e-05, 3.9996e-05, // f03020
521  4.6829e-05, 5.5055e-05, 6.5897e-05, 7.5360e-05, 8.7213e-05, // f03030
522  1.0046e-04, 1.1496e-04, 1.2943e-04, 1.5049e-04, 1.6973e-04, // f03040
523  1.8711e-04, 2.0286e-04, 2.2823e-04, 2.6780e-04, 2.8766e-04, // f03050
524  3.1164e-04, 3.3640e-04, 3.6884e-04, 3.9159e-04, 3.8712e-04, // f03070
525  3.7433e-04, 3.4503e-04, 3.1003e-04, 2.8027e-04, 2.5253e-04, // f03080
526  2.3408e-04, 2.2836e-04, 2.4442e-04, 2.7521e-04, 2.9048e-04, // f03090
527  3.0489e-04, 3.2646e-04, 3.3880e-04, 3.3492e-04, 3.0987e-04, // f03100
528  2.9482e-04, 2.8711e-04, 2.6068e-04, 2.2683e-04, 1.9996e-04, // f03110
529  1.7788e-04, 1.6101e-04, 1.3911e-04, 1.2013e-04, 1.0544e-04, // f03120
530  9.4224e-05, 8.1256e-05, 7.3667e-05, 6.2233e-05, 5.5906e-05, // f03130
531  5.1619e-05, 4.5140e-05, 4.0273e-05, 3.3268e-05, 3.0258e-05, // f03140
532  2.6440e-05, 2.3103e-05, 2.0749e-05, 1.8258e-05, 1.6459e-05, // f03150
533  1.4097e-05, 1.2052e-05, 1.0759e-05, 9.1400e-06, 8.1432e-06, // f03160
534  7.1460e-06, 6.4006e-06, 5.6995e-06, 4.9372e-06, 4.4455e-06, // f03180
535  3.9033e-06, 3.4740e-06, 3.1269e-06, 2.8059e-06, 2.5558e-06, // f03190
536  2.2919e-06, 2.0846e-06, 1.8983e-06, 1.7329e-06, 1.5929e-06, // f03200
537  1.4631e-06, 1.3513e-06, 1.2461e-06, 1.1519e-06, 1.0682e-06, // f03210
538  9.9256e-07, 9.2505e-07, 8.6367e-07, 8.0857e-07, 7.5674e-07, // f03220
539  7.0934e-07, 6.6580e-07, 6.2580e-07, 5.8853e-07, 5.5333e-07, // f03230
540  5.2143e-07, 4.9169e-07, 4.6431e-07, 4.3898e-07, 4.1564e-07, // f03240
541  3.9405e-07, 3.7403e-07, 3.5544e-07, 3.3819e-07, 3.2212e-07, // f03250
542  3.0714e-07, 2.9313e-07, 2.8003e-07, 2.6777e-07, 2.5628e-07, // f03260
543  2.4551e-07, 2.3540e-07, 2.2591e-07, 2.1701e-07, 2.0866e-07, // f03270
544  2.0082e-07, 1.9349e-07, 1.8665e-07, 1.8027e-07, 1.7439e-07, // f03290
545  1.6894e-07, 1.6400e-07, 1.5953e-07, 1.5557e-07, 1.5195e-07, // f03300
546  1.4888e-07, 1.4603e-07, 1.4337e-07, 1.4093e-07, 1.3828e-07, // f03310
547  1.3569e-07, 1.3270e-07, 1.2984e-07, 1.2714e-07, 1.2541e-07, // f03320
548  1.2399e-07, 1.2102e-07, 1.1878e-07, 1.1728e-07, 1.1644e-07, // f03330
549  1.1491e-07, 1.1305e-07, 1.1235e-07, 1.1228e-07, 1.1224e-07, // f03340
550  1.1191e-07, 1.1151e-07, 1.1098e-07, 1.1068e-07, 1.1109e-07, // f03350
551  1.1213e-07, 1.1431e-07, 1.1826e-07, 1.2322e-07, 1.3025e-07, // f03360
552  1.4066e-07, 1.5657e-07, 1.7214e-07, 1.9449e-07, 2.2662e-07, // f03370
553  2.6953e-07, 3.1723e-07, 3.7028e-07, 4.4482e-07, 5.3852e-07, // f03380
554  6.2639e-07, 7.2175e-07, 7.7626e-07, 8.7248e-07, 9.6759e-07, // f03400
555  1.0102e-06, 1.0620e-06, 1.1201e-06, 1.2107e-06, 1.2998e-06, // f03410
556  1.3130e-06, 1.2856e-06, 1.2350e-06, 1.1489e-06, 1.0819e-06, // f03420
557  1.0120e-06, 9.4795e-07, 9.2858e-07, 9.8060e-07, 1.0999e-06, // f03430
558  1.1967e-06, 1.2672e-06, 1.3418e-06, 1.3864e-06, 1.4330e-06, // f03440
559  1.4592e-06, 1.4598e-06, 1.4774e-06, 1.4726e-06, 1.4820e-06, // f03450
560  1.5050e-06, 1.4984e-06, 1.5181e-06, 1.5888e-06, 1.6850e-06, // f03460
561  1.7690e-06, 1.9277e-06, 2.1107e-06, 2.3068e-06, 2.5347e-06, // f03470
562  2.8069e-06, 3.1345e-06, 3.5822e-06, 3.9051e-06, 4.3422e-06, // f03480
563  4.8704e-06, 5.5351e-06, 6.3454e-06, 7.2690e-06, 8.2974e-06, // f03490
564  9.7609e-06, 1.1237e-05, 1.3187e-05, 1.5548e-05, 1.8784e-05, // f03510
565  2.1694e-05, 2.5487e-05, 3.0092e-05, 3.5385e-05, 4.2764e-05, // f03520
566  4.9313e-05, 5.5800e-05, 6.2968e-05, 7.1060e-05, 7.7699e-05, // f03530
567  8.7216e-05, 8.9335e-05, 9.2151e-05, 9.2779e-05, 9.4643e-05, // f03540
568  9.7978e-05, 1.0008e-04, 1.0702e-04, 1.1026e-04, 1.0828e-04, // f03550
569  1.0550e-04, 1.0432e-04, 1.0428e-04, 9.8980e-05, 9.4992e-05, // f03560
570  9.5159e-05, 1.0058e-04, 1.0738e-04, 1.1550e-04, 1.1229e-04, // f03570
571  1.0596e-04, 1.0062e-04, 9.1742e-05, 8.4492e-05, 6.8099e-05, // f03580
572  5.6295e-05, 4.6502e-05, 3.8071e-05, 3.0721e-05, 2.3297e-05, // f03590
573  1.8688e-05, 1.4830e-05, 1.2049e-05, 9.6754e-06, 7.9192e-06, // f03600
574  6.6673e-06, 5.6468e-06, 4.8904e-06, 4.2289e-06, 3.6880e-06, // f03620
575  3.2396e-06, 2.8525e-06, 2.5363e-06, 2.2431e-06, 1.9949e-06, // f03630
576  1.7931e-06, 1.6164e-06, 1.4431e-06, 1.2997e-06, 1.1559e-06, // f03640
577  1.0404e-06, 9.4300e-07, 8.4597e-07, 7.6133e-07, 6.8623e-07, // f03650
578  6.2137e-07, 5.6345e-07, 5.1076e-07, 4.6246e-07, 4.1906e-07, // f03660
579  3.8063e-07, 3.4610e-07, 3.1554e-07, 2.8795e-07, 2.6252e-07, // f03670
580  2.3967e-07, 2.1901e-07, 2.0052e-07, 1.8384e-07, 1.6847e-07, // f03680
581  1.5459e-07, 1.4204e-07, 1.3068e-07, 1.2036e-07, 1.1095e-07, // f03690
582  1.0237e-07, 9.4592e-08, 8.7530e-08, 8.1121e-08, 7.5282e-08, // f03700
583  6.9985e-08, 6.5189e-08, 6.0874e-08, 5.6989e-08, 5.3530e-08, // f03710
584  5.0418e-08, 4.7745e-08, 4.5367e-08, 4.3253e-08, 4.1309e-08, // f03730
585  3.9695e-08, 3.8094e-08, 3.6482e-08, 3.4897e-08, 3.3500e-08, // f03740
586  3.2302e-08, 3.0854e-08, 2.9698e-08, 2.8567e-08, 2.7600e-08, // f03750
587  2.6746e-08, 2.5982e-08, 2.5510e-08, 2.5121e-08, 2.4922e-08, // f03760
588  2.4909e-08, 2.5013e-08, 2.5216e-08, 2.5589e-08, 2.6049e-08, // f03770
589  2.6451e-08, 2.6978e-08, 2.7687e-08, 2.8600e-08, 2.9643e-08, // f03780
590  3.0701e-08, 3.2058e-08, 3.3695e-08, 3.5558e-08, 3.7634e-08, // f03790
591  3.9875e-08, 4.2458e-08, 4.5480e-08, 4.8858e-08, 5.2599e-08, // f03800
592  5.7030e-08, 6.2067e-08, 6.7911e-08, 7.4579e-08, 8.1902e-08, // f03810
593  8.9978e-08, 9.9870e-08, 1.1102e-07, 1.2343e-07, 1.3732e-07, // f03820
594  1.5394e-07, 1.7318e-07, 1.9383e-07, 2.1819e-07, 2.4666e-07, // f03840
595  2.8109e-07, 3.2236e-07, 3.7760e-07, 4.4417e-07, 5.2422e-07, // f03850
596  6.1941e-07, 7.4897e-07, 9.2041e-07, 1.1574e-06, 1.4126e-06, // f03860
597  1.7197e-06, 2.1399e-06, 2.6266e-06, 3.3424e-06, 3.8418e-06, // f03870
598  4.5140e-06, 5.0653e-06, 5.8485e-06, 6.5856e-06, 6.8937e-06, // f03880
599  6.9121e-06, 6.9005e-06, 6.9861e-06, 6.8200e-06, 6.6089e-06, // f03890
600  6.5809e-06, 7.3496e-06, 8.0311e-06, 8.3186e-06, 8.4260e-06, // f03900
601  9.0644e-06, 9.4965e-06, 9.4909e-06, 9.0160e-06, 9.1494e-06, // f03910
602  9.3629e-06, 9.5944e-06, 9.5459e-06, 8.9919e-06, 8.6040e-06, // f03920
603  7.8613e-06, 7.1567e-06, 6.2677e-06, 5.1899e-06, 4.4188e-06, // f03930
604  3.7167e-06, 3.0636e-06, 2.5573e-06, 2.0317e-06, 1.6371e-06, // f03950
605  1.3257e-06, 1.0928e-06, 8.9986e-07, 7.4653e-07, 6.1111e-07, // f03960
606  5.1395e-07, 4.3500e-07, 3.7584e-07, 3.2633e-07, 2.8413e-07, // f03970
607  2.4723e-07, 2.1709e-07, 1.9294e-07, 1.7258e-07, 1.5492e-07, // f03980
608  1.3820e-07, 1.2389e-07, 1.1189e-07, 1.0046e-07, 9.0832e-08, // f03990
609  8.2764e-08, 7.4191e-08, 6.7085e-08, 6.0708e-08, 5.4963e-08, // f04000
610  4.9851e-08, 4.5044e-08, 4.0916e-08, 3.7220e-08, 3.3678e-08, // f04010
611  3.0663e-08, 2.7979e-08, 2.5495e-08, 2.3286e-08, 2.1233e-08, // f04020
612  1.9409e-08, 1.7770e-08, 1.6260e-08, 1.4885e-08, 1.3674e-08, // f04030
613  1.2543e-08, 1.1551e-08, 1.0655e-08, 9.8585e-09, 9.1398e-09, // f04040
614  8.4806e-09, 7.8899e-09, 7.3547e-09, 6.8670e-09, 6.4131e-09, // f04060
615  5.9930e-09, 5.6096e-09, 5.2592e-09, 4.9352e-09, 4.6354e-09, // f04070
616  4.3722e-09, 4.1250e-09, 3.9081e-09, 3.7118e-09, 3.5372e-09, // f04080
617  3.3862e-09, 3.2499e-09, 3.1324e-09, 3.0313e-09, 2.9438e-09, // f04090
618  2.8686e-09, 2.8050e-09, 2.7545e-09, 2.7149e-09, 2.6907e-09, // f04100
619  2.6724e-09, 2.6649e-09, 2.6642e-09, 2.6725e-09, 2.6871e-09, // f04110
620  2.7056e-09, 2.7357e-09, 2.7781e-09, 2.8358e-09, 2.9067e-09, // f04120
621  2.9952e-09, 3.1020e-09, 3.2253e-09, 3.3647e-09, 3.5232e-09, // f04130
622  3.7037e-09, 3.9076e-09, 4.1385e-09, 4.3927e-09, 4.6861e-09, // f04140
623  5.0238e-09, 5.4027e-09, 5.8303e-09, 6.3208e-09, 6.8878e-09, // f04150
624  7.5419e-09, 8.3130e-09, 9.1952e-09, 1.0228e-08, 1.1386e-08, // f04170
625  1.2792e-08, 1.4521e-08, 1.6437e-08, 1.8674e-08, 2.1160e-08, // f04180
626  2.4506e-08, 2.8113e-08, 3.2636e-08, 3.7355e-08, 4.2234e-08, // f04190
627  4.9282e-08, 5.7358e-08, 6.6743e-08, 7.8821e-08, 9.4264e-08, // f04200
628  1.1542e-07, 1.3684e-07, 1.6337e-07, 2.0056e-07, 2.3252e-07, // f04210
629  2.6127e-07, 2.9211e-07, 3.3804e-07, 3.7397e-07, 3.8205e-07, // f04220
630  3.8810e-07, 3.9499e-07, 3.9508e-07, 3.7652e-07, 3.5859e-07, // f04230
631  3.6198e-07, 3.7871e-07, 4.0925e-07, 4.2717e-07, 4.8241e-07, // f04240
632  5.2008e-07, 5.6530e-07, 5.9531e-07, 6.1994e-07, 6.5080e-07, // f04250
633  6.6355e-07, 6.9193e-07, 6.9930e-07, 7.3058e-07, 7.4678e-07, // f04260
634  7.9193e-07, 8.3627e-07, 9.1267e-07, 1.0021e-06, 1.1218e-06, // f04280
635  1.2899e-06, 1.4447e-06, 1.7268e-06, 2.0025e-06, 2.3139e-06, // f04290
636  2.5599e-06, 2.8920e-06, 3.3059e-06, 3.5425e-06, 3.9522e-06, // f04300
637  4.0551e-06, 4.2818e-06, 4.2892e-06, 4.4210e-06, 4.5614e-06, // f04310
638  4.6739e-06, 4.9482e-06, 5.1118e-06, 5.0986e-06, 4.9417e-06, // f04320
639  4.9022e-06, 4.8449e-06, 4.8694e-06, 4.8111e-06, 4.9378e-06, // f04330
640  5.3231e-06, 5.7362e-06, 6.2350e-06, 6.0951e-06, 5.7281e-06, // f04340
641  5.4585e-06, 4.9032e-06, 4.3009e-06, 3.4776e-06, 2.8108e-06, // f04350
642  2.2993e-06, 1.7999e-06, 1.3870e-06, 1.0750e-06, 8.5191e-07, // f04360
643  6.7951e-07, 5.5336e-07, 4.6439e-07, 4.0243e-07, 3.5368e-07, // f04370
644  3.1427e-07, 2.7775e-07, 2.4486e-07, 2.1788e-07, 1.9249e-07, // f04390
645  1.7162e-07, 1.5115e-07, 1.3478e-07, 1.2236e-07, 1.1139e-07, // f04400
646  1.0092e-07, 9.0795e-08, 8.2214e-08, 7.4691e-08, 6.7486e-08, // f04410
647  6.0414e-08, 5.4584e-08, 4.8754e-08, 4.3501e-08, 3.8767e-08, // f04420
648  3.4363e-08, 3.0703e-08, 2.7562e-08, 2.4831e-08, 2.2241e-08, // f04430
649  1.9939e-08, 1.8049e-08, 1.6368e-08, 1.4863e-08, 1.3460e-08, // f04440
650  1.2212e-08, 1.1155e-08, 1.0185e-08, 9.3417e-09, 8.5671e-09, // f04450
651  7.8292e-09, 7.1749e-09, 6.5856e-09, 6.0588e-09, 5.5835e-09, // f04460
652  5.1350e-09, 4.7395e-09, 4.3771e-09, 4.0476e-09, 3.7560e-09, // f04470
653  3.4861e-09, 3.2427e-09, 3.0240e-09, 2.8278e-09, 2.6531e-09, // f04480
654  2.4937e-09, 2.3511e-09, 2.2245e-09, 2.1133e-09, 2.0159e-09, // f04500
655  1.9330e-09, 1.8669e-09, 1.8152e-09, 1.7852e-09, 1.7752e-09, // f04510
656  1.7823e-09, 1.8194e-09, 1.8866e-09, 1.9759e-09, 2.0736e-09, // f04520
657  2.2083e-09, 2.3587e-09, 2.4984e-09, 2.6333e-09, 2.8160e-09, // f04530
658  3.0759e-09, 3.3720e-09, 3.6457e-09, 4.0668e-09, 4.4541e-09, // f04540
659  4.7976e-09, 5.0908e-09, 5.4811e-09, 6.1394e-09, 6.3669e-09, // f04550
660  6.5714e-09, 6.8384e-09, 7.1918e-09, 7.3741e-09, 7.2079e-09, // f04560
661  7.2172e-09, 7.2572e-09, 7.3912e-09, 7.6188e-09, 8.3291e-09, // f04570
662  8.7885e-09, 9.2412e-09, 1.0021e-08, 1.0752e-08, 1.1546e-08, // f04580
663  1.1607e-08, 1.1949e-08, 1.2346e-08, 1.2516e-08, 1.2826e-08, // f04590
664  1.3053e-08, 1.3556e-08, 1.4221e-08, 1.5201e-08, 1.6661e-08, // f04610
665  1.8385e-08, 2.0585e-08, 2.3674e-08, 2.7928e-08, 3.3901e-08, // f04620
666  4.1017e-08, 4.9595e-08, 6.0432e-08, 7.6304e-08, 9.0764e-08, // f04630
667  1.0798e-07, 1.2442e-07, 1.4404e-07, 1.6331e-07, 1.8339e-07, // f04640
668  2.0445e-07, 2.2288e-07, 2.3083e-07, 2.3196e-07, 2.3919e-07, // f04650
669  2.3339e-07, 2.3502e-07, 2.3444e-07, 2.6395e-07, 2.9928e-07, // f04660
670  3.0025e-07, 3.0496e-07, 3.1777e-07, 3.4198e-07, 3.4739e-07, // f04670
671  3.2696e-07, 3.4100e-07, 3.5405e-07, 3.7774e-07, 3.8285e-07, // f04680
672  3.6797e-07, 3.5800e-07, 3.2283e-07, 2.9361e-07, 2.4881e-07, // f04690
673  2.0599e-07, 1.7121e-07, 1.3641e-07, 1.1111e-07, 8.9413e-08, // f04700
674  7.3455e-08, 6.2078e-08, 5.2538e-08, 4.5325e-08, 3.9005e-08, // f04720
675  3.4772e-08, 3.1203e-08, 2.8132e-08, 2.5250e-08, 2.2371e-08, // f04730
676  2.0131e-08, 1.7992e-08, 1.6076e-08, 1.4222e-08, 1.2490e-08, // f04740
677  1.1401e-08, 1.0249e-08, 9.2279e-09, 8.5654e-09, 7.6227e-09, // f04750
678  6.9648e-09, 6.2466e-09, 5.7252e-09, 5.3800e-09, 4.6960e-09, // f04760
679  4.2194e-09, 3.7746e-09, 3.3813e-09, 3.0656e-09, 2.6885e-09, // f04770
680  2.4311e-09, 2.1572e-09, 1.8892e-09, 1.7038e-09, 1.4914e-09, // f04780
681  1.3277e-09, 1.1694e-09, 1.0391e-09, 9.2779e-10, 8.3123e-10, // f04790
682  7.4968e-10, 6.8385e-10, 6.2915e-10, 5.7784e-10, 5.2838e-10, // f04800
683  4.8382e-10, 4.4543e-10, 4.1155e-10, 3.7158e-10, 3.3731e-10, // f04810
684  3.0969e-10, 2.8535e-10, 2.6416e-10, 2.4583e-10, 2.2878e-10, // f04830
685  2.1379e-10, 2.0073e-10, 1.8907e-10, 1.7866e-10, 1.6936e-10, // f04840
686  1.6119e-10, 1.5424e-10, 1.4847e-10, 1.4401e-10, 1.4068e-10, // f04850
687  1.3937e-10, 1.3943e-10, 1.4281e-10, 1.4766e-10, 1.5701e-10, // f04860
688  1.7079e-10, 1.8691e-10, 2.0081e-10, 2.1740e-10, 2.4847e-10, // f04870
689  2.6463e-10, 2.7087e-10, 2.7313e-10, 2.8352e-10, 2.9511e-10, // f04880
690  2.8058e-10, 2.7227e-10, 2.7356e-10, 2.8012e-10, 2.8034e-10, // f04890
691  2.9031e-10, 3.1030e-10, 3.3745e-10, 3.8152e-10, 4.0622e-10, // f04900
692  4.2673e-10, 4.3879e-10, 4.5488e-10, 4.7179e-10, 4.6140e-10, // f04910
693  4.6339e-10, 4.6716e-10, 4.7024e-10, 4.7931e-10, 4.8503e-10, // f04920
694  4.9589e-10, 4.9499e-10, 5.0363e-10, 5.3184e-10, 5.6451e-10, // f04940
695  6.0932e-10, 6.6469e-10, 7.4076e-10, 8.3605e-10, 9.4898e-10, // f04950
696  1.0935e-09, 1.2593e-09, 1.4913e-09, 1.8099e-09, 2.1842e-09, // f04960
697  2.7284e-09, 3.2159e-09, 3.7426e-09, 4.5226e-09, 5.3512e-09, // f04970
698  6.1787e-09, 6.8237e-09, 7.9421e-09, 9.0002e-09, 9.6841e-09, // f04980
699  9.9558e-09, 1.0232e-08, 1.0591e-08, 1.0657e-08, 1.0441e-08, // f04990
700  1.0719e-08, 1.1526e-08, 1.2962e-08, 1.4336e-08, 1.6150e-08, // f05000
701  1.8417e-08, 2.0725e-08, 2.3426e-08, 2.5619e-08, 2.7828e-08, // f05010
702  3.0563e-08, 3.3438e-08, 3.6317e-08, 4.0400e-08, 4.4556e-08, // f05020
703  5.0397e-08, 5.3315e-08, 5.9185e-08, 6.5311e-08, 6.9188e-08, // f05030
704  7.7728e-08, 7.9789e-08, 8.6598e-08, 8.7768e-08, 9.1773e-08, // f05050
705  9.7533e-08, 1.0007e-07, 1.0650e-07, 1.0992e-07, 1.0864e-07, // f05060
706  1.0494e-07, 1.0303e-07, 1.0031e-07, 1.0436e-07, 1.0537e-07, // f05070
707  1.1184e-07, 1.2364e-07, 1.3651e-07, 1.4881e-07, 1.4723e-07, // f05080
708  1.4118e-07, 1.3371e-07, 1.1902e-07, 1.0007e-07, 7.9628e-08, // f05090
709  6.4362e-08, 5.0243e-08, 3.8133e-08, 2.9400e-08, 2.3443e-08, // f05100
710  1.9319e-08, 1.6196e-08, 1.4221e-08, 1.2817e-08, 1.1863e-08, // f05110
711  1.1383e-08, 1.1221e-08, 1.1574e-08, 1.1661e-08, 1.2157e-08, // f05120
712  1.2883e-08, 1.3295e-08, 1.4243e-08, 1.4240e-08, 1.4614e-08, // f05130
713  1.4529e-08, 1.4685e-08, 1.4974e-08, 1.4790e-08, 1.4890e-08, // f05140
714  1.4704e-08, 1.4142e-08, 1.3374e-08, 1.2746e-08, 1.2172e-08, // f05160
715  1.2336e-08, 1.2546e-08, 1.3065e-08, 1.4090e-08, 1.5215e-08, // f05170
716  1.6540e-08, 1.6144e-08, 1.5282e-08, 1.4358e-08, 1.2849e-08, // f05180
717  1.0998e-08, 8.6956e-09, 7.0881e-09, 5.5767e-09, 4.2792e-09, // f05190
718  3.2233e-09, 2.5020e-09, 1.9985e-09, 1.5834e-09, 1.3015e-09, // f05200
719  1.0948e-09, 9.4141e-10, 8.1465e-10, 7.1517e-10, 6.2906e-10, // f05210
720  5.5756e-10, 4.9805e-10, 4.3961e-10, 3.9181e-10, 3.5227e-10, // f05220
721  3.1670e-10, 2.8667e-10, 2.5745e-10, 2.3212e-10, 2.0948e-10, // f05230
722  1.8970e-10, 1.7239e-10, 1.5659e-10, 1.4301e-10, 1.3104e-10, // f05240
723  1.2031e-10, 1.1095e-10, 1.0262e-10, 9.5130e-11, 8.8595e-11, // f05250
724  8.2842e-11, 7.7727e-11, 7.3199e-11, 6.9286e-11, 6.5994e-11, // f05270
725  6.3316e-11, 6.1244e-11, 5.9669e-11, 5.8843e-11, 5.8832e-11, // f05280
726  5.9547e-11, 6.1635e-11, 6.4926e-11, 7.0745e-11, 7.8802e-11, // f05290
727  8.6724e-11, 1.0052e-10, 1.1575e-10, 1.3626e-10, 1.5126e-10, // f05300
728  1.6751e-10, 1.9239e-10, 2.1748e-10, 2.2654e-10, 2.2902e-10, // f05310
729  2.3240e-10, 2.4081e-10, 2.3930e-10, 2.2378e-10, 2.2476e-10, // f05320
730  2.2791e-10, 2.4047e-10, 2.5305e-10, 2.8073e-10, 3.1741e-10, // f05330
731  3.6592e-10, 4.1495e-10, 4.6565e-10, 5.0990e-10, 5.5607e-10, // f05340
732  6.1928e-10, 6.6779e-10, 7.3350e-10, 8.1434e-10, 8.9635e-10, // f05350
733  9.9678e-10, 1.1256e-09, 1.2999e-09, 1.4888e-09, 1.7642e-09, // f05360
734  1.9606e-09, 2.2066e-09, 2.4601e-09, 2.7218e-09, 3.0375e-09, // f05380
735  3.1591e-09, 3.2852e-09, 3.2464e-09, 3.3046e-09, 3.2710e-09, // f05390
736  3.2601e-09, 3.3398e-09, 3.7446e-09, 4.0795e-09, 4.0284e-09, // f05400
737  4.0584e-09, 4.1677e-09, 4.5358e-09, 4.4097e-09, 4.2744e-09, // f05410
738  4.5449e-09, 4.8147e-09, 5.2656e-09, 5.2476e-09, 5.0275e-09, // f05420
739  4.7968e-09, 4.3654e-09, 3.9530e-09, 3.2447e-09, 2.6489e-09, // f05430
740  2.1795e-09, 1.7880e-09, 1.4309e-09, 1.1256e-09, 9.1903e-10, // f05440
741  7.6533e-10, 6.3989e-10, 5.5496e-10, 4.9581e-10, 4.5722e-10, // f05450
742  4.3898e-10, 4.3505e-10, 4.3671e-10, 4.5329e-10, 4.6827e-10, // f05460
743  4.9394e-10, 5.1122e-10, 5.1649e-10, 5.0965e-10, 4.9551e-10, // f05470
744  4.8928e-10, 4.7947e-10, 4.7989e-10, 4.9071e-10, 4.8867e-10, // f05490
745  4.7260e-10, 4.5756e-10, 4.5400e-10, 4.5993e-10, 4.4042e-10, // f05500
746  4.3309e-10, 4.4182e-10, 4.6735e-10, 5.0378e-10, 5.2204e-10, // f05510
747  5.0166e-10, 4.6799e-10, 4.3119e-10, 3.8803e-10, 3.3291e-10, // f05520
748  2.6289e-10, 2.1029e-10, 1.7011e-10, 1.3345e-10, 1.0224e-10, // f05530
749  7.8207e-11, 6.2451e-11, 5.0481e-11, 4.1507e-11, 3.5419e-11, // f05540
750  3.0582e-11, 2.6900e-11, 2.3778e-11, 2.1343e-11, 1.9182e-11, // f05550
751  1.7162e-11, 1.5391e-11, 1.3877e-11, 1.2619e-11, 1.1450e-11, // f05560
752  1.0461e-11, 9.6578e-12, 8.9579e-12, 8.3463e-12, 7.8127e-12, // f05570
753  7.3322e-12, 6.9414e-12, 6.6037e-12, 6.3285e-12, 6.1095e-12, // f05580
754  5.9387e-12, 5.8118e-12, 5.7260e-12, 5.6794e-12, 5.6711e-12, // f05600
755  5.7003e-12, 5.7670e-12, 5.8717e-12, 6.0151e-12, 6.1984e-12, // f05610
756  6.4232e-12, 6.6918e-12, 7.0065e-12, 7.3705e-12, 7.7873e-12, // f05620
757  8.2612e-12, 8.7972e-12, 9.4009e-12, 1.0079e-11, 1.0840e-11, // f05630
758  1.1692e-11, 1.2648e-11, 1.3723e-11, 1.4935e-11, 1.6313e-11, // f05640
759  1.7905e-11, 1.9740e-11, 2.1898e-11, 2.4419e-11, 2.7426e-11, // f05650
760  3.0869e-11, 3.4235e-11, 3.7841e-11, 4.1929e-11, 4.6776e-11, // f05660
761  5.2123e-11, 5.8497e-11, 6.5294e-11, 7.4038e-11, 8.4793e-11, // f05670
762  9.6453e-11, 1.1223e-10, 1.2786e-10, 1.4882e-10, 1.7799e-10, // f05680
763  2.0766e-10, 2.4523e-10, 2.8591e-10, 3.3386e-10, 4.0531e-10, // f05690
764  4.7663e-10, 5.4858e-10, 6.3377e-10, 7.1688e-10, 8.4184e-10, // f05710
765  9.5144e-10, 1.0481e-09, 1.1356e-09, 1.2339e-09, 1.3396e-09, // f05720
766  1.4375e-09, 1.5831e-09, 1.7323e-09, 1.9671e-09, 2.2976e-09, // f05730
767  2.6679e-09, 3.0777e-09, 3.4321e-09, 3.8192e-09, 4.2711e-09, // f05740
768  4.4903e-09, 4.8931e-09, 5.2253e-09, 5.4040e-09, 5.6387e-09, // f05750
769  5.6704e-09, 6.0345e-09, 6.1079e-09, 6.2576e-09, 6.4039e-09, // f05760
770  6.3776e-09, 6.1878e-09, 5.8616e-09, 5.7036e-09, 5.5840e-09, // f05770
771  5.6905e-09, 5.8931e-09, 6.2478e-09, 6.8291e-09, 7.4528e-09, // f05780
772  7.6078e-09, 7.3898e-09, 6.7573e-09, 5.9827e-09, 5.0927e-09, // f05790
773  4.0099e-09, 3.1933e-09, 2.4296e-09, 1.8485e-09, 1.4595e-09, // f05800
774  1.2017e-09, 1.0164e-09, 8.7433e-10, 7.7108e-10, 7.0049e-10, // f05820
775  6.5291e-10, 6.1477e-10, 5.9254e-10, 5.8150e-10, 5.7591e-10, // f05830
776  5.8490e-10, 5.8587e-10, 5.9636e-10, 6.2408e-10, 6.5479e-10, // f05840
777  7.0480e-10, 7.2313e-10, 7.5524e-10, 8.0863e-10, 8.3386e-10, // f05850
778  9.2342e-10, 9.6754e-10, 1.0293e-09, 1.0895e-09, 1.1330e-09, // f05860
779  1.2210e-09, 1.2413e-09, 1.2613e-09, 1.2671e-09, 1.2225e-09, // f05870
780  1.1609e-09, 1.0991e-09, 1.0600e-09, 1.0570e-09, 1.0818e-09, // f05880
781  1.1421e-09, 1.2270e-09, 1.3370e-09, 1.4742e-09, 1.4946e-09, // f05890
782  1.4322e-09, 1.3210e-09, 1.1749e-09, 1.0051e-09, 7.8387e-10, // f05900
783  6.1844e-10, 4.6288e-10, 3.4164e-10, 2.5412e-10, 1.9857e-10, // f05910
784  1.5876e-10, 1.2966e-10, 1.0920e-10, 9.4811e-11, 8.3733e-11, // f05930
785  7.3906e-11, 6.7259e-11, 6.1146e-11, 5.7119e-11, 5.3546e-11, // f05940
786  4.8625e-11, 4.4749e-11, 4.1089e-11, 3.7825e-11, 3.4465e-11, // f05950
787  3.1018e-11, 2.8109e-11, 2.5610e-11, 2.2859e-11, 2.0490e-11, // f05960
788  1.8133e-11, 1.5835e-11, 1.3949e-11, 1.2295e-11, 1.0799e-11, // f05970
789  9.6544e-12, 8.7597e-12, 7.9990e-12, 7.3973e-12, 6.9035e-12, // f05980
790  6.4935e-12, 6.1195e-12, 5.8235e-12, 5.5928e-12, 5.4191e-12, // f05990
791  5.2993e-12, 5.2338e-12, 5.2272e-12, 5.2923e-12, 5.4252e-12, // f06000
792  5.6523e-12, 5.9433e-12, 6.3197e-12, 6.9016e-12, 7.5016e-12, // f06010
793  8.2885e-12, 9.4050e-12, 1.0605e-11, 1.2257e-11, 1.3622e-11, // f06020
794  1.5353e-11, 1.7543e-11, 1.9809e-11, 2.2197e-11, 2.4065e-11, // f06040
795  2.6777e-11, 2.9751e-11, 3.2543e-11, 3.5536e-11, 3.9942e-11, // f06050
796  4.6283e-11, 5.4556e-11, 6.5490e-11, 7.6803e-11, 9.0053e-11, // f06060
797  1.0852e-10, 1.2946e-10, 1.4916e-10, 1.7748e-10, 2.0073e-10, // f06070
798  2.2485e-10, 2.5114e-10, 2.7715e-10, 3.1319e-10, 3.3305e-10, // f06080
799  3.5059e-10, 3.5746e-10, 3.6311e-10, 3.7344e-10, 3.6574e-10, // f06090
800  3.7539e-10, 3.9434e-10, 4.3510e-10, 4.3340e-10, 4.2588e-10, // f06100
801  4.3977e-10, 4.6062e-10, 4.7687e-10, 4.6457e-10, 4.8578e-10, // f06110
802  5.2344e-10, 5.6752e-10, 5.8702e-10, 5.6603e-10, 5.3784e-10, // f06120
803  4.9181e-10, 4.3272e-10, 3.5681e-10, 2.8814e-10, 2.3320e-10, // f06130
804  1.8631e-10, 1.4587e-10, 1.1782e-10, 9.8132e-11, 8.2528e-11, // f06150
805  6.9174e-11, 6.1056e-11, 5.3459e-11, 4.7116e-11, 4.1878e-11, // f06160
806  3.8125e-11, 3.6347e-11, 3.5071e-11, 3.3897e-11, 3.3541e-11, // f06170
807  3.3563e-11, 3.5469e-11, 3.8111e-11, 3.8675e-11, 4.1333e-11, // f06180
808  4.3475e-11, 4.6476e-11, 4.9761e-11, 5.1380e-11, 5.4135e-11, // f06190
809  5.3802e-11, 5.5158e-11, 5.6864e-11, 5.9311e-11, 6.3827e-11, // f06200
810  6.7893e-11, 6.8230e-11, 6.6694e-11, 6.6018e-11, 6.4863e-11, // f06210
811  6.5893e-11, 6.3813e-11, 6.4741e-11, 6.8630e-11, 7.0255e-11, // f06220
812  7.0667e-11, 6.8810e-11, 6.4104e-11, 5.8136e-11, 4.7242e-11, // f06230
813  3.7625e-11, 3.1742e-11, 2.5581e-11, 1.8824e-11, 1.3303e-11, // f06240
814  9.6919e-12, 7.5353e-12, 6.0986e-12, 5.0742e-12, 4.3094e-12, // f06260
815  3.7190e-12, 3.2520e-12, 2.8756e-12, 2.5680e-12, 2.3139e-12, // f06270
816  2.1025e-12, 1.9257e-12, 1.7777e-12, 1.6539e-12, 1.5508e-12, // f06280
817  1.4657e-12, 1.3966e-12, 1.3417e-12, 1.2998e-12, 1.2700e-12, // f06290
818  1.2514e-12, 1.2437e-12, 1.2463e-12, 1.2592e-12, 1.2823e-12, // f06300
819  1.3157e-12, 1.3596e-12, 1.4144e-12, 1.4806e-12, 1.5588e-12, // f06310
820  1.6497e-12, 1.7544e-12, 1.8738e-12, 2.0094e-12, 2.1626e-12, // f06320
821  2.3354e-12, 2.5297e-12, 2.7483e-12, 2.9941e-12, 3.2708e-12, // f06330
822  3.5833e-12, 3.9374e-12, 4.3415e-12, 4.8079e-12, 5.3602e-12, // f06340
823  5.9816e-12, 6.7436e-12, 7.6368e-12, 8.6812e-12, 9.8747e-12, // f06350
824  1.1350e-11, 1.3181e-11, 1.5406e-11, 1.7868e-11, 2.0651e-11, // f06370
825  2.4504e-11, 2.9184e-11, 3.4159e-11, 3.9979e-11, 4.8704e-11, // f06380
826  5.7856e-11, 6.7576e-11, 7.9103e-11, 9.4370e-11, 1.1224e-10, // f06390
827  1.3112e-10, 1.5674e-10, 1.8206e-10, 2.0576e-10, 2.3187e-10, // f06400
828  2.7005e-10, 3.0055e-10, 3.3423e-10, 3.6956e-10, 3.8737e-10, // f06410
829  4.2630e-10, 4.5154e-10, 4.8383e-10, 5.3582e-10, 5.8109e-10, // f06420
830  6.3741e-10, 6.3874e-10, 6.3870e-10, 6.5818e-10, 6.5056e-10, // f06430
831  6.5291e-10, 6.3159e-10, 6.3984e-10, 6.4549e-10, 6.5444e-10, // f06440
832  6.7035e-10, 6.7665e-10, 6.9124e-10, 6.8451e-10, 6.9255e-10, // f06450
833  6.9923e-10, 7.0396e-10, 6.7715e-10, 6.0371e-10, 5.3774e-10, // f06460
834  4.6043e-10, 3.7635e-10, 2.9484e-10, 2.2968e-10, 1.8185e-10, // f06480
835  1.4191e-10, 1.1471e-10, 9.4790e-11, 7.9613e-11, 6.7989e-11, // f06490
836  5.9391e-11, 5.2810e-11, 4.7136e-11, 4.2618e-11, 3.8313e-11, // f06500
837  3.4686e-11, 3.1669e-11, 2.9110e-11, 2.6871e-11, 2.5074e-11, // f06510
838  2.4368e-11, 2.3925e-11, 2.4067e-11, 2.4336e-11, 2.4704e-11, // f06520
839  2.5823e-11, 2.7177e-11, 2.9227e-11, 3.1593e-11, 3.5730e-11, // f06530
840  4.0221e-11, 4.3994e-11, 4.8448e-11, 5.3191e-11, 5.8552e-11, // f06540
841  6.3458e-11, 6.6335e-11, 7.2457e-11, 7.9091e-11, 8.2234e-11, // f06550
842  8.7668e-11, 8.7951e-11, 9.2952e-11, 9.6157e-11, 9.5926e-11, // f06560
843  1.0120e-10, 1.0115e-10, 9.9577e-11, 9.6633e-11, 9.2891e-11, // f06570
844  9.3315e-11, 9.5584e-11, 1.0064e-10, 1.0509e-10, 1.1455e-10, // f06590
845  1.2443e-10, 1.2963e-10, 1.2632e-10, 1.1308e-10, 1.0186e-10, // f06600
846  8.5880e-11, 6.7863e-11, 5.1521e-11, 3.7780e-11, 2.8842e-11, // f06610
847  2.2052e-11, 1.7402e-11, 1.4406e-11, 1.1934e-11, 1.0223e-11, // f06620
848  8.9544e-12, 7.9088e-12, 7.0675e-12, 6.2222e-12, 5.6051e-12, // f06630
849  5.0502e-12, 4.5578e-12, 4.2636e-12, 3.9461e-12, 3.7599e-12, // f06640
850  3.5215e-12, 3.2467e-12, 3.0018e-12, 2.6558e-12, 2.3928e-12, // f06650
851  2.0707e-12, 1.7575e-12, 1.5114e-12, 1.2941e-12, 1.1004e-12, // f06660
852  9.5175e-13, 8.2894e-13, 7.3253e-13, 6.5551e-13, 5.9098e-13, // f06670
853  5.3548e-13, 4.8697e-13, 4.4413e-13, 4.0600e-13, 3.7188e-13, // f06680
854  3.4121e-13, 3.1356e-13, 2.8856e-13, 2.6590e-13, 2.4533e-13, // f06700
855  2.2663e-13, 2.0960e-13, 1.9407e-13, 1.7990e-13, 1.6695e-13, // f06710
856  1.5512e-13, 1.4429e-13, 1.3437e-13, 1.2527e-13, 1.1693e-13, // f06720
857  1.0927e-13, 1.0224e-13, 9.5767e-14, 8.9816e-14, 8.4335e-14, // f06730
858  7.9285e-14, 7.4626e-14, 7.0325e-14, 6.6352e-14, 6.2676e-14, // f06740
859  5.9274e-14, 5.6121e-14, 5.3195e-14, 5.0479e-14, 4.7953e-14, // f06750
860  4.5602e-14, 4.3411e-14, 4.1367e-14, 3.9456e-14, 3.7670e-14, // f06760
861  3.5996e-14, 3.4427e-14, 3.2952e-14, 3.1566e-14, 3.0261e-14, // f06770
862  2.9030e-14, 2.7868e-14, 2.6770e-14, 2.5730e-14, 2.4745e-14, // f06780
863  2.3809e-14, 2.2921e-14, 2.2076e-14, 2.1271e-14, 2.0504e-14, // f06790
864  1.9772e-14, 1.9073e-14, 1.8404e-14, 1.7764e-14, 1.7151e-14, // f06810
865  1.6564e-14, 1.6000e-14, 1.5459e-14, 1.4939e-14, 1.4439e-14, // f06820
866  1.3958e-14, 1.3495e-14, 1.3049e-14, 1.2620e-14, 1.2206e-14, // f06830
867  1.1807e-14, 1.1422e-14, 1.1050e-14, 1.0691e-14, 1.0345e-14, // f06840
868  1.0010e-14, 9.6870e-15, 9.3747e-15, 9.0727e-15, 8.7808e-15, // f06850
869  8.4986e-15, 8.2257e-15, 7.9617e-15, 7.7064e-15, 7.4594e-15, // f06860
870  7.2204e-15, 6.9891e-15, 6.7653e-15, 6.5488e-15, 6.3392e-15, // f06870
871  6.1363e-15, 5.9399e-15, 5.7499e-15, 5.5659e-15, 5.3878e-15, // f06880
872  5.2153e-15, 5.0484e-15, 4.8868e-15, 4.7303e-15, 4.5788e-15, // f06890
873  4.4322e-15, 4.2902e-15, 4.1527e-15, 4.0196e-15, 3.8907e-15, // f06900
874  3.7659e-15, 3.6451e-15, 3.5281e-15, 3.4149e-15, 3.3052e-15, // f06920
875  3.1991e-15, 3.0963e-15, 2.9967e-15, 2.9004e-15, 2.8071e-15, // f06930
876  2.7167e-15, 2.6293e-15, 2.5446e-15, 2.4626e-15, 2.3833e-15, // f06940
877  2.3064e-15, 2.2320e-15, 2.1600e-15, 2.0903e-15, 2.0228e-15, // f06950
878  1.9574e-15, 1.8942e-15, 1.8329e-15, 1.7736e-15, 1.7163e-15, // f06960
879  1.6607e-15, 1.6069e-15, 1.5548e-15, 1.5044e-15, 1.4557e-15, // f06970
880  1.4084e-15, 1.3627e-15, 1.3185e-15, 1.2757e-15, 1.2342e-15, // f06980
881  1.1941e-15, 1.1552e-15, 1.1177e-15, 1.0813e-15, 1.0461e-15, // f06990
882  1.0120e-15, 9.7900e-16, 9.4707e-16, 9.1618e-16, 8.8628e-16, // f07000
883  8.5734e-16, 8.2933e-16, 8.0223e-16, 7.7600e-16, 7.5062e-16, // f07010
884  7.2606e-16, 7.0229e-16, 6.7929e-16, 6.5703e-16, 6.3550e-16, // f07030
885  6.1466e-16, 5.9449e-16, 5.7498e-16, 5.5610e-16, 5.3783e-16, // f07040
886  5.2015e-16, 5.0305e-16, 4.8650e-16, 4.7049e-16, 4.5500e-16, // f07050
887  4.4002e-16, 4.2552e-16, 4.1149e-16, 3.9792e-16, 3.8479e-16, // f07060
888  3.7209e-16, 3.5981e-16, 3.4792e-16, 3.3642e-16, 3.2530e-16, // f07070
889  3.1454e-16, 3.0413e-16, 2.9406e-16, 2.8432e-16, 2.7490e-16, // f07080
890  2.6579e-16, 2.5697e-16, 2.4845e-16, 2.4020e-16, 2.3223e-16, // f07090
891  2.2451e-16, 2.1705e-16, 2.0984e-16, 2.0286e-16, 1.9611e-16, // f07100
892  1.8958e-16, 1.8327e-16, 1.7716e-16, 1.7126e-16, 1.6555e-16, // f07110
893  1.6003e-16, 1.5469e-16, 1.4952e-16, 1.4453e-16, 1.3970e-16, // f07120
894  1.3503e-16};
895 
896 // H2O foreign continuum parameters at T=296 K for the CKD versions 0 to 2.4.2
897 // date of last update: 06/28/82
898 // units of (CM**3/MOL)*1.E-20
899 const Numeric FH2O_ckd_0_v1 = -20.0;
900 const Numeric FH2O_ckd_0_v2 = 20000.0;
901 const Numeric FH2O_ckd_0_dv = 10.0;
902 const int FH2O_ckd_0_npt = 2003;
904  0.0000e-00, 1.2859E-02, 1.1715E-02, 1.1038E-02, 1.1715E-02,
905  1.2859E-02, 1.5326E-02, 1.6999E-02, // F12660
906  1.8321E-02, 1.9402E-02, 1.9570E-02, 1.9432E-02, 1.7572E-02, // F12670
907  1.6760E-02, 1.5480E-02, 1.3984E-02, 1.2266E-02, 1.0467E-02, // F12680
908  9.4526E-03, 8.0485E-03, 6.9484E-03, 6.1416E-03, 5.0941E-03, // F12690
909  4.4836E-03, 3.8133E-03, 3.4608E-03, 3.1487E-03, 2.4555E-03, // F12700
910  2.0977E-03, 1.7266E-03, 1.4920E-03, 1.2709E-03, 9.8081E-04, // F12710
911  8.5063E-04, 6.8822E-04, 5.3809E-04, 4.4679E-04, 3.3774E-04, // F12720
912  2.7979E-04, 2.1047E-04, 1.6511E-04, 1.2993E-04, 9.3033E-05, // F12730
913  7.4360E-05, 5.6428E-05, 4.5442E-05, 3.4575E-05, 2.7903E-05, // F12740
914  2.1374E-05, 1.6075E-05, 1.3022E-05, 1.0962E-05, 8.5959E-06, // F12750
915  6.9125E-06, 5.3808E-06, 4.3586E-06, 3.6394E-06, 2.9552E-06, // F12770
916  2.3547E-06, 1.8463E-06, 1.6036E-06, 1.3483E-06, 1.1968E-06, // F12780
917  1.0333E-06, 8.4484E-07, 6.7195E-07, 5.0947E-07, 4.2343E-07, // F12790
918  3.4453E-07, 2.7830E-07, 2.3063E-07, 1.9951E-07, 1.7087E-07, // F12800
919  1.4393E-07, 1.2575E-07, 1.0750E-07, 8.2325E-08, 5.7524E-08, // F12810
920  4.4482E-08, 3.8106E-08, 3.4315E-08, 2.9422E-08, 2.5069E-08, // F12820
921  2.2402E-08, 1.9349E-08, 1.6152E-08, 1.2208E-08, 8.9660E-09, // F12830
922  7.1322E-09, 6.1028E-09, 5.2938E-09, 4.5350E-09, 3.4977E-09, // F12840
923  2.9511E-09, 2.4734E-09, 2.0508E-09, 1.8507E-09, 1.6373E-09, // F12850
924  1.5171E-09, 1.3071E-09, 1.2462E-09, 1.2148E-09, 1.2590E-09, // F12860
925  1.3153E-09, 1.3301E-09, 1.4483E-09, 1.6944E-09, 2.0559E-09, // F12880
926  2.2954E-09, 2.6221E-09, 3.2606E-09, 4.2392E-09, 5.2171E-09, // F12890
927  6.2553E-09, 8.2548E-09, 9.5842E-09, 1.1280E-08, 1.3628E-08, // F12900
928  1.7635E-08, 2.1576E-08, 2.4835E-08, 3.0014E-08, 3.8485E-08, // F12910
929  4.7440E-08, 5.5202E-08, 7.0897E-08, 9.6578E-08, 1.3976E-07, // F12920
930  1.8391E-07, 2.3207E-07, 2.9960E-07, 4.0408E-07, 5.9260E-07, // F12930
931  7.8487E-07, 1.0947E-06, 1.4676E-06, 1.9325E-06, 2.6587E-06, // F12940
932  3.4534E-06, 4.4376E-06, 5.8061E-06, 7.0141E-06, 8.4937E-06, // F12950
933  1.0186E-05, 1.2034E-05, 1.3837E-05, 1.6595E-05, 1.9259E-05, // F12960
934  2.1620E-05, 2.3681E-05, 2.7064E-05, 3.2510E-05, 3.5460E-05, // F12970
935  3.9109E-05, 4.2891E-05, 4.7757E-05, 5.0981E-05, 5.0527E-05, // F12990
936  4.8618E-05, 4.4001E-05, 3.7982E-05, 3.2667E-05, 2.7794E-05, // F13000
937  2.4910E-05, 2.4375E-05, 2.7316E-05, 3.2579E-05, 3.5499E-05, // F13010
938  3.8010E-05, 4.1353E-05, 4.3323E-05, 4.3004E-05, 3.9790E-05, // F13020
939  3.7718E-05, 3.6360E-05, 3.2386E-05, 2.7409E-05, 2.3626E-05, // F13030
940  2.0631E-05, 1.8371E-05, 1.5445E-05, 1.2989E-05, 1.1098E-05, // F13040
941  9.6552E-06, 8.0649E-06, 7.2365E-06, 5.9137E-06, 5.2759E-06, // F13050
942  4.8860E-06, 4.1321E-06, 3.5918E-06, 2.7640E-06, 2.4892E-06, // F13060
943  2.1018E-06, 1.7848E-06, 1.5855E-06, 1.3569E-06, 1.1986E-06, // F13070
944  9.4693E-07, 7.4097E-07, 6.3443E-07, 4.8131E-07, 4.0942E-07, // F13080
945  3.3316E-07, 2.8488E-07, 2.3461E-07, 1.7397E-07, 1.4684E-07, // F13100
946  1.0953E-07, 8.5396E-08, 6.9261E-08, 5.4001E-08, 4.5430E-08, // F13110
947  3.2791E-08, 2.5995E-08, 2.0225E-08, 1.5710E-08, 1.3027E-08, // F13120
948  1.0229E-08, 8.5277E-09, 6.5249E-09, 5.0117E-09, 3.9906E-09, // F13130
949  3.2332E-09, 2.7847E-09, 2.4570E-09, 2.3359E-09, 2.0599E-09, // F13140
950  1.8436E-09, 1.6559E-09, 1.4910E-09, 1.2794E-09, 9.8229E-10, // F13150
951  8.0054E-10, 6.0769E-10, 4.5646E-10, 3.3111E-10, 2.4428E-10, // F13160
952  1.8007E-10, 1.3291E-10, 9.7974E-11, 7.8271E-11, 6.3833E-11, // F13170
953  5.4425E-11, 4.6471E-11, 4.0209E-11, 3.5227E-11, 3.1212E-11, // F13180
954  2.8840E-11, 2.7762E-11, 2.7935E-11, 3.2012E-11, 3.9525E-11, // F13190
955  5.0303E-11, 6.8027E-11, 9.3954E-11, 1.2986E-10, 1.8478E-10, // F13210
956  2.5331E-10, 3.4827E-10, 4.6968E-10, 6.2380E-10, 7.9106E-10, // F13220
957  1.0026E-09, 1.2102E-09, 1.4146E-09, 1.6154E-09, 1.7510E-09, // F13230
958  1.8575E-09, 1.8742E-09, 1.8700E-09, 1.8582E-09, 1.9657E-09, // F13240
959  2.1204E-09, 2.0381E-09, 2.0122E-09, 2.0436E-09, 2.1213E-09, // F13250
960  2.0742E-09, 1.9870E-09, 2.0465E-09, 2.1556E-09, 2.2222E-09, // F13260
961  2.1977E-09, 2.1047E-09, 1.9334E-09, 1.7357E-09, 1.5754E-09, // F13270
962  1.4398E-09, 1.4018E-09, 1.5459E-09, 1.7576E-09, 2.1645E-09, // F13280
963  2.9480E-09, 4.4439E-09, 5.8341E-09, 8.0757E-09, 1.1658E-08, // F13290
964  1.6793E-08, 2.2694E-08, 2.9468E-08, 3.9278E-08, 5.2145E-08, // F13300
965  6.4378E-08, 7.7947E-08, 8.5321E-08, 9.7848E-08, 1.0999E-07, // F13320
966  1.1489E-07, 1.2082E-07, 1.2822E-07, 1.4053E-07, 1.5238E-07, // F13330
967  1.5454E-07, 1.5018E-07, 1.4048E-07, 1.2359E-07, 1.0858E-07, // F13340
968  9.3486E-08, 8.1638E-08, 7.7690E-08, 8.4625E-08, 1.0114E-07, // F13350
969  1.1430E-07, 1.2263E-07, 1.3084E-07, 1.3380E-07, 1.3573E-07, // F13360
970  1.3441E-07, 1.2962E-07, 1.2638E-07, 1.1934E-07, 1.1371E-07, // F13370
971  1.0871E-07, 9.8843E-08, 9.1877E-08, 9.1050E-08, 9.3213E-08, // F13380
972  9.2929E-08, 1.0155E-07, 1.1263E-07, 1.2370E-07, 1.3636E-07, // F13390
973  1.5400E-07, 1.7656E-07, 2.1329E-07, 2.3045E-07, 2.5811E-07, // F13400
974  2.9261E-07, 3.4259E-07, 4.0770E-07, 4.8771E-07, 5.8081E-07, // F13410
975  7.2895E-07, 8.7482E-07, 1.0795E-06, 1.3384E-06, 1.7208E-06, // F13430
976  2.0677E-06, 2.5294E-06, 3.1123E-06, 3.7900E-06, 4.7752E-06, // F13440
977  5.6891E-06, 6.6261E-06, 7.6246E-06, 8.7730E-06, 9.6672E-06, // F13450
978  1.0980E-05, 1.1287E-05, 1.1670E-05, 1.1635E-05, 1.1768E-05, // F13460
979  1.2039E-05, 1.2253E-05, 1.3294E-05, 1.4005E-05, 1.3854E-05, // F13470
980  1.3420E-05, 1.3003E-05, 1.2645E-05, 1.1715E-05, 1.1258E-05, // F13480
981  1.1516E-05, 1.2494E-05, 1.3655E-05, 1.4931E-05, 1.4649E-05, // F13490
982  1.3857E-05, 1.3120E-05, 1.1791E-05, 1.0637E-05, 8.2760E-06, // F13500
983  6.5821E-06, 5.1959E-06, 4.0158E-06, 3.0131E-06, 2.0462E-06, // F13510
984  1.4853E-06, 1.0365E-06, 7.3938E-07, 4.9752E-07, 3.4148E-07, // F13520
985  2.4992E-07, 1.8363E-07, 1.4591E-07, 1.1380E-07, 9.0588E-08, // F13540
986  7.3697E-08, 6.0252E-08, 5.1868E-08, 4.2660E-08, 3.6163E-08, // F13550
987  3.2512E-08, 2.9258E-08, 2.4238E-08, 2.1209E-08, 1.6362E-08, // F13560
988  1.3871E-08, 1.2355E-08, 9.6940E-09, 7.7735E-09, 6.2278E-09, // F13570
989  5.2282E-09, 4.3799E-09, 3.5545E-09, 2.7527E-09, 2.0950E-09, // F13580
990  1.6344E-09, 1.2689E-09, 1.0403E-09, 8.4880E-10, 6.3461E-10, // F13590
991  4.7657E-10, 3.5220E-10, 2.7879E-10, 2.3021E-10, 1.6167E-10, // F13600
992  1.1732E-10, 8.9206E-11, 7.0596E-11, 5.8310E-11, 4.4084E-11, // F13610
993  3.1534E-11, 2.5068E-11, 2.2088E-11, 2.2579E-11, 2.2637E-11, // F13620
994  2.5705E-11, 3.2415E-11, 4.6116E-11, 6.5346E-11, 9.4842E-11, // F13630
995  1.2809E-10, 1.8211E-10, 2.4052E-10, 3.0270E-10, 3.5531E-10, // F13650
996  4.2402E-10, 4.6730E-10, 4.7942E-10, 4.6813E-10, 4.5997E-10, // F13660
997  4.5788E-10, 4.0311E-10, 3.7367E-10, 3.3149E-10, 2.9281E-10, // F13670
998  2.5231E-10, 2.1152E-10, 1.9799E-10, 1.8636E-10, 1.9085E-10, // F13680
999  2.0786E-10, 2.2464E-10, 2.3785E-10, 2.5684E-10, 2.7499E-10, // F13690
1000  2.6962E-10, 2.6378E-10, 2.6297E-10, 2.6903E-10, 2.7035E-10, // F13700
1001  2.5394E-10, 2.5655E-10, 2.7184E-10, 2.9013E-10, 3.0585E-10, // F13710
1002  3.0791E-10, 3.1667E-10, 3.4343E-10, 3.7365E-10, 4.0269E-10, // F13720
1003  4.7260E-10, 5.6584E-10, 6.9791E-10, 8.6569E-10, 1.0393E-09, // F13730
1004  1.2067E-09, 1.5047E-09, 1.8583E-09, 2.2357E-09, 2.6498E-09, // F13740
1005  3.2483E-09, 3.9927E-09, 4.6618E-09, 5.5555E-09, 6.6609E-09, // F13760
1006  8.2139E-09, 1.0285E-08, 1.3919E-08, 1.8786E-08, 2.5150E-08, // F13770
1007  3.3130E-08, 4.5442E-08, 6.3370E-08, 9.0628E-08, 1.2118E-07, // F13780
1008  1.5927E-07, 2.1358E-07, 2.7825E-07, 3.7671E-07, 4.4894E-07, // F13790
1009  5.4442E-07, 6.2240E-07, 7.3004E-07, 8.3384E-07, 8.7933E-07, // F13800
1010  8.8080E-07, 8.6939E-07, 8.6541E-07, 8.2055E-07, 7.7278E-07, // F13810
1011  7.5989E-07, 8.6909E-07, 9.7945E-07, 1.0394E-06, 1.0646E-06, // F13820
1012  1.1509E-06, 1.2017E-06, 1.1915E-06, 1.1259E-06, 1.1549E-06, // F13830
1013  1.1938E-06, 1.2356E-06, 1.2404E-06, 1.1716E-06, 1.1149E-06, // F13840
1014  1.0073E-06, 8.9845E-07, 7.6639E-07, 6.1517E-07, 5.0887E-07, // F13850
1015  4.1269E-07, 3.2474E-07, 2.5698E-07, 1.8893E-07, 1.4009E-07, // F13870
1016  1.0340E-07, 7.7724E-08, 5.7302E-08, 4.2178E-08, 2.9603E-08, // F13880
1017  2.1945E-08, 1.6301E-08, 1.2806E-08, 1.0048E-08, 7.8970E-09, // F13890
1018  6.1133E-09, 4.9054E-09, 4.1985E-09, 3.6944E-09, 3.2586E-09, // F13900
1019  2.7362E-09, 2.3647E-09, 2.1249E-09, 1.8172E-09, 1.6224E-09, // F13910
1020  1.5158E-09, 1.2361E-09, 1.0682E-09, 9.2312E-10, 7.9220E-10, // F13920
1021  6.8174E-10, 5.6147E-10, 4.8268E-10, 4.1534E-10, 3.3106E-10, // F13930
1022  2.8275E-10, 2.4584E-10, 2.0742E-10, 1.7840E-10, 1.4664E-10, // F13940
1023  1.2390E-10, 1.0497E-10, 8.5038E-11, 6.7008E-11, 5.6355E-11, // F13950
1024  4.3323E-11, 3.6914E-11, 3.2262E-11, 3.0749E-11, 3.0318E-11, // F13960
1025  2.9447E-11, 2.9918E-11, 3.0668E-11, 3.1315E-11, 3.0329E-11, // F13980
1026  2.8259E-11, 2.6065E-11, 2.3578E-11, 2.0469E-11, 1.6908E-11, // F13990
1027  1.4912E-11, 1.1867E-11, 9.9730E-12, 8.1014E-12, 6.7528E-12, // F14000
1028  6.3133E-12, 5.8599E-12, 6.0145E-12, 6.5105E-12, 7.0537E-12, // F14010
1029  7.4973E-12, 7.8519E-12, 8.5039E-12, 9.1995E-12, 1.0694E-11, // F14020
1030  1.1659E-11, 1.2685E-11, 1.3087E-11, 1.3222E-11, 1.2634E-11, // F14030
1031  1.1077E-11, 9.6259E-12, 8.3202E-12, 7.4857E-12, 6.8069E-12, // F14040
1032  6.7496E-12, 7.3116E-12, 8.0171E-12, 8.6394E-12, 9.2659E-12, // F14050
1033  1.0048E-11, 1.0941E-11, 1.2226E-11, 1.3058E-11, 1.5193E-11, // F14060
1034  1.8923E-11, 2.3334E-11, 2.8787E-11, 3.6693E-11, 4.8295E-11, // F14070
1035  6.4260E-11, 8.8269E-11, 1.1865E-10, 1.5961E-10, 2.0605E-10, // F14090
1036  2.7349E-10, 3.7193E-10, 4.8216E-10, 6.1966E-10, 7.7150E-10, // F14100
1037  1.0195E-09, 1.2859E-09, 1.6535E-09, 2.0316E-09, 2.3913E-09, // F14110
1038  3.0114E-09, 3.7495E-09, 4.6504E-09, 5.9145E-09, 7.6840E-09, // F14120
1039  1.0304E-08, 1.3010E-08, 1.6441E-08, 2.1475E-08, 2.5892E-08, // F14130
1040  2.9788E-08, 3.3820E-08, 4.0007E-08, 4.4888E-08, 4.5765E-08, // F14140
1041  4.6131E-08, 4.6239E-08, 4.4849E-08, 4.0729E-08, 3.6856E-08, // F14150
1042  3.6164E-08, 3.7606E-08, 4.1457E-08, 4.3750E-08, 5.1150E-08, // F14160
1043  5.6054E-08, 6.1586E-08, 6.4521E-08, 6.6494E-08, 6.9024E-08, // F14170
1044  6.8893E-08, 7.0901E-08, 6.9760E-08, 7.1485E-08, 7.0740E-08, // F14180
1045  7.3764E-08, 7.6618E-08, 8.4182E-08, 9.3838E-08, 1.0761E-07, // F14200
1046  1.2851E-07, 1.4748E-07, 1.8407E-07, 2.2109E-07, 2.6392E-07, // F14210
1047  2.9887E-07, 3.4493E-07, 4.0336E-07, 4.3551E-07, 4.9231E-07, // F14220
1048  5.0728E-07, 5.3781E-07, 5.3285E-07, 5.4496E-07, 5.5707E-07, // F14230
1049  5.6944E-07, 6.1123E-07, 6.4317E-07, 6.4581E-07, 6.1999E-07, // F14240
1050  6.0191E-07, 5.7762E-07, 5.7241E-07, 5.7013E-07, 6.0160E-07, // F14250
1051  6.6905E-07, 7.4095E-07, 8.2121E-07, 8.0947E-07, 7.6145E-07, // F14260
1052  7.2193E-07, 6.3722E-07, 5.4316E-07, 4.2186E-07, 3.2528E-07, // F14270
1053  2.5207E-07, 1.8213E-07, 1.2658E-07, 8.6746E-08, 6.0216E-08, // F14280
1054  4.1122E-08, 2.8899E-08, 2.1740E-08, 1.7990E-08, 1.5593E-08, // F14290
1055  1.3970E-08, 1.2238E-08, 1.0539E-08, 9.2386E-09, 7.8481E-09, // F14310
1056  6.8704E-09, 5.7615E-09, 5.0434E-09, 4.6886E-09, 4.3770E-09, // F14320
1057  3.9768E-09, 3.5202E-09, 3.1854E-09, 2.9009E-09, 2.5763E-09, // F14330
1058  2.2135E-09, 1.9455E-09, 1.6248E-09, 1.3368E-09, 1.0842E-09, // F14340
1059  8.4254E-10, 6.7414E-10, 5.4667E-10, 4.5005E-10, 3.4932E-10, // F14350
1060  2.6745E-10, 2.2053E-10, 1.8162E-10, 1.4935E-10, 1.1618E-10, // F14360
1061  9.1888E-11, 8.0672E-11, 6.8746E-11, 6.2668E-11, 5.5715E-11, // F14370
1062  4.5074E-11, 3.7669E-11, 3.2082E-11, 2.8085E-11, 2.4838E-11, // F14380
1063  1.9791E-11, 1.6964E-11, 1.3887E-11, 1.1179E-11, 9.7499E-12, // F14390
1064  7.8255E-12, 6.3698E-12, 5.3265E-12, 4.6588E-12, 4.4498E-12, // F14400
1065  3.9984E-12, 3.7513E-12, 3.7176E-12, 3.9148E-12, 4.2702E-12, // F14420
1066  5.0090E-12, 6.5801E-12, 8.7787E-12, 1.2718E-11, 1.8375E-11, // F14430
1067  2.5304E-11, 3.5403E-11, 4.8842E-11, 6.4840E-11, 8.0911E-11, // F14440
1068  1.0136E-10, 1.2311E-10, 1.4203E-10, 1.5869E-10, 1.8093E-10, // F14450
1069  2.1370E-10, 2.5228E-10, 2.8816E-10, 3.4556E-10, 3.9860E-10, // F14460
1070  4.4350E-10, 4.7760E-10, 5.2357E-10, 6.0827E-10, 6.3635E-10, // F14470
1071  6.5886E-10, 6.8753E-10, 7.2349E-10, 7.2789E-10, 6.8232E-10, // F14480
1072  6.6081E-10, 6.4232E-10, 6.3485E-10, 6.4311E-10, 7.2235E-10, // F14490
1073  7.7263E-10, 8.1668E-10, 9.0324E-10, 9.7643E-10, 1.0535E-09, // F14500
1074  1.0195E-09, 1.0194E-09, 1.0156E-09, 9.6792E-10, 9.2725E-10, // F14510
1075  8.7347E-10, 8.4484E-10, 8.2647E-10, 8.4363E-10, 9.1261E-10, // F14530
1076  1.0051E-09, 1.1511E-09, 1.4037E-09, 1.8066E-09, 2.4483E-09, // F14540
1077  3.2739E-09, 4.3194E-09, 5.6902E-09, 7.7924E-09, 9.7376E-09, // F14550
1078  1.2055E-08, 1.4303E-08, 1.6956E-08, 1.9542E-08, 2.2233E-08, // F14560
1079  2.5186E-08, 2.7777E-08, 2.8943E-08, 2.8873E-08, 2.9417E-08, // F14570
1080  2.7954E-08, 2.7524E-08, 2.7040E-08, 3.1254E-08, 3.6843E-08, // F14580
1081  3.7797E-08, 3.8713E-08, 4.0135E-08, 4.2824E-08, 4.3004E-08, // F14590
1082  4.0279E-08, 4.2781E-08, 4.5220E-08, 4.8948E-08, 5.0172E-08, // F14600
1083  4.8499E-08, 4.7182E-08, 4.2204E-08, 3.7701E-08, 3.0972E-08, // F14610
1084  2.4654E-08, 1.9543E-08, 1.4609E-08, 1.1171E-08, 8.3367E-09, // F14620
1085  6.3791E-09, 5.0790E-09, 4.0655E-09, 3.3658E-09, 2.7882E-09, // F14640
1086  2.4749E-09, 2.2287E-09, 2.0217E-09, 1.8191E-09, 1.5897E-09, // F14650
1087  1.4191E-09, 1.2448E-09, 1.0884E-09, 9.3585E-10, 7.9429E-10, // F14660
1088  7.3214E-10, 6.5008E-10, 5.7549E-10, 5.4300E-10, 4.7251E-10, // F14670
1089  4.3451E-10, 3.8446E-10, 3.5589E-10, 3.4432E-10, 2.8209E-10, // F14680
1090  2.4620E-10, 2.1278E-10, 1.8406E-10, 1.6314E-10, 1.3261E-10, // F14690
1091  1.1696E-10, 9.6865E-11, 7.6814E-11, 6.6411E-11, 5.0903E-11, // F14700
1092  4.0827E-11, 3.0476E-11, 2.3230E-11, 1.7707E-11, 1.3548E-11, // F14710
1093  1.0719E-11, 9.3026E-12, 8.7967E-12, 8.3136E-12, 7.3918E-12, // F14720
1094  6.5293E-12, 5.9243E-12, 5.3595E-12, 3.5266E-12, 2.2571E-12, // F14730
1095  1.6150E-12, 1.1413E-12, 8.4998E-13, 7.0803E-13, 5.1747E-13, // F14750
1096  4.0694E-13, 3.6528E-13, 3.3670E-13, 3.1341E-13, 2.9390E-13, // F14760
1097  2.8680E-13, 3.1283E-13, 3.7294E-13, 5.0194E-13, 6.7919E-13, // F14770
1098  1.0455E-12, 1.5230E-12, 2.3932E-12, 3.4231E-12, 5.0515E-12, // F14780
1099  7.3193E-12, 9.9406E-12, 1.2193E-11, 1.4742E-11, 1.9269E-11, // F14790
1100  2.1816E-11, 2.2750E-11, 2.2902E-11, 2.3888E-11, 2.4902E-11, // F14800
1101  2.2160E-11, 2.0381E-11, 1.9903E-11, 2.0086E-11, 1.9304E-11, // F14810
1102  2.0023E-11, 2.2244E-11, 2.5450E-11, 3.1228E-11, 3.4560E-11, // F14820
1103  3.6923E-11, 3.7486E-11, 3.8124E-11, 3.8317E-11, 3.4737E-11, // F14830
1104  3.3037E-11, 3.1724E-11, 2.9840E-11, 2.8301E-11, 2.5857E-11, // F14840
1105  2.3708E-11, 1.9452E-11, 1.6232E-11, 1.5174E-11, 1.4206E-11, // F14860
1106  1.4408E-11, 1.5483E-11, 1.8642E-11, 2.3664E-11, 3.0181E-11, // F14870
1107  4.0160E-11, 5.2287E-11, 7.2754E-11, 1.0511E-10, 1.4531E-10, // F14880
1108  2.0998E-10, 2.6883E-10, 3.3082E-10, 4.2638E-10, 5.3132E-10, // F14890
1109  6.3617E-10, 7.1413E-10, 8.5953E-10, 9.9715E-10, 1.0796E-09, // F14900
1110  1.0978E-09, 1.1052E-09, 1.1095E-09, 1.0641E-09, 9.7881E-10, // F14910
1111  9.6590E-10, 1.0332E-09, 1.1974E-09, 1.3612E-09, 1.5829E-09, // F14920
1112  1.8655E-09, 2.1465E-09, 2.4779E-09, 2.7370E-09, 2.9915E-09, // F14930
1113  3.3037E-09, 3.6347E-09, 3.9587E-09, 4.4701E-09, 5.0122E-09, // F14940
1114  5.8044E-09, 6.1916E-09, 6.9613E-09, 7.7863E-09, 8.2820E-09, // F14950
1115  9.4359E-09, 9.7387E-09, 1.0656E-08, 1.0746E-08, 1.1210E-08, // F14970
1116  1.1905E-08, 1.2194E-08, 1.3145E-08, 1.3738E-08, 1.3634E-08, // F14980
1117  1.3011E-08, 1.2511E-08, 1.1805E-08, 1.2159E-08, 1.2390E-08, // F14990
1118  1.3625E-08, 1.5678E-08, 1.7886E-08, 1.9933E-08, 1.9865E-08, // F15000
1119  1.9000E-08, 1.7812E-08, 1.5521E-08, 1.2593E-08, 9.5635E-09, // F15010
1120  7.2987E-09, 5.2489E-09, 3.5673E-09, 2.4206E-09, 1.6977E-09, // F15020
1121  1.2456E-09, 9.3744E-10, 7.8379E-10, 6.9960E-10, 6.6451E-10, // F15030
1122  6.8521E-10, 7.4234E-10, 8.6658E-10, 9.4972E-10, 1.0791E-09, // F15040
1123  1.2359E-09, 1.3363E-09, 1.5025E-09, 1.5368E-09, 1.6152E-09, // F15050
1124  1.6184E-09, 1.6557E-09, 1.7035E-09, 1.6916E-09, 1.7237E-09, // F15060
1125  1.7175E-09, 1.6475E-09, 1.5335E-09, 1.4272E-09, 1.3282E-09, // F15080
1126  1.3459E-09, 1.4028E-09, 1.5192E-09, 1.7068E-09, 1.9085E-09, // F15090
1127  2.1318E-09, 2.1020E-09, 1.9942E-09, 1.8654E-09, 1.6391E-09, // F15100
1128  1.3552E-09, 1.0186E-09, 7.8540E-10, 5.7022E-10, 3.9247E-10, // F15110
1129  2.5441E-10, 1.6699E-10, 1.1132E-10, 6.8989E-11, 4.5255E-11, // F15120
1130  3.1106E-11, 2.3161E-11, 1.7618E-11, 1.4380E-11, 1.1601E-11, // F15130
1131  9.7148E-12, 8.4519E-12, 6.5392E-12, 5.4113E-12, 4.7624E-12, // F15140
1132  4.0617E-12, 3.6173E-12, 2.8608E-12, 2.2724E-12, 1.7436E-12, // F15150
1133  1.3424E-12, 1.0358E-12, 7.3064E-13, 5.4500E-13, 4.0551E-13, // F15160
1134  2.8642E-13, 2.1831E-13, 1.6860E-13, 1.2086E-13, 1.0150E-13, // F15170
1135  9.3550E-14, 8.4105E-14, 7.3051E-14, 6.9796E-14, 7.9949E-14, // F15190
1136  1.0742E-13, 1.5639E-13, 2.1308E-13, 3.1226E-13, 4.6853E-13, // F15200
1137  6.6917E-13, 1.0088E-12, 1.4824E-12, 2.2763E-12, 3.3917E-12, // F15210
1138  4.4585E-12, 6.3187E-12, 8.4189E-12, 1.1302E-11, 1.3431E-11, // F15220
1139  1.5679E-11, 1.9044E-11, 2.2463E-11, 2.3605E-11, 2.3619E-11, // F15230
1140  2.3505E-11, 2.3805E-11, 2.2549E-11, 1.9304E-11, 1.8382E-11, // F15240
1141  1.7795E-11, 1.8439E-11, 1.9146E-11, 2.1966E-11, 2.6109E-11, // F15250
1142  3.1883E-11, 3.7872E-11, 4.3966E-11, 4.8789E-11, 5.3264E-11, // F15260
1143  5.9705E-11, 6.3744E-11, 7.0163E-11, 7.9114E-11, 8.8287E-11, // F15270
1144  9.9726E-11, 1.1498E-10, 1.3700E-10, 1.6145E-10, 1.9913E-10, // F15280
1145  2.2778E-10, 2.6216E-10, 2.9770E-10, 3.3405E-10, 3.7821E-10, // F15300
1146  3.9552E-10, 4.1322E-10, 4.0293E-10, 4.0259E-10, 3.8853E-10, // F15310
1147  3.7842E-10, 3.8551E-10, 4.4618E-10, 5.0527E-10, 5.0695E-10, // F15320
1148  5.1216E-10, 5.1930E-10, 5.5794E-10, 5.3320E-10, 5.2008E-10, // F15330
1149  5.6888E-10, 6.1883E-10, 6.9006E-10, 6.9505E-10, 6.6768E-10, // F15340
1150  6.3290E-10, 5.6753E-10, 5.0327E-10, 3.9830E-10, 3.1147E-10, // F15350
1151  2.4416E-10, 1.8860E-10, 1.3908E-10, 9.9156E-11, 7.3779E-11, // F15360
1152  5.6048E-11, 4.2457E-11, 3.4505E-11, 2.9881E-11, 2.7865E-11, // F15370
1153  2.8471E-11, 3.1065E-11, 3.4204E-11, 3.9140E-11, 4.3606E-11, // F15380
1154  4.9075E-11, 5.3069E-11, 5.5236E-11, 5.5309E-11, 5.3832E-11, // F15390
1155  5.3183E-11, 5.1783E-11, 5.2042E-11, 5.4422E-11, 5.5656E-11, // F15410
1156  5.4409E-11, 5.2659E-11, 5.1696E-11, 5.1726E-11, 4.9003E-11, // F15420
1157  4.9050E-11, 5.1700E-11, 5.6818E-11, 6.3129E-11, 6.6542E-11, // F15430
1158  6.4367E-11, 5.9908E-11, 5.4470E-11, 4.7903E-11, 3.9669E-11, // F15440
1159  2.9651E-11, 2.2286E-11, 1.6742E-11, 1.1827E-11, 7.7739E-12, // F15450
1160  4.8805E-12, 3.1747E-12, 2.0057E-12, 1.2550E-12, 8.7434E-13, // F15460
1161  6.2755E-13, 4.9752E-13, 4.0047E-13, 3.5602E-13, 3.0930E-13, // F15470
1162  2.4903E-13, 1.9316E-13, 1.4995E-13, 1.2059E-13, 8.7242E-14, // F15480
1163  6.4511E-14, 5.3300E-14, 4.3741E-14, 3.4916E-14, 2.6560E-14, // F15490
1164  1.6923E-14, 1.1816E-14, 6.7071E-15, 3.6474E-15, 2.0686E-15, // F15500
1165  1.1925E-15, 6.8948E-16, 3.9661E-16, 2.2576E-16, 1.2669E-16, // F15520
1166  6.9908E-17, 3.7896E-17, 2.0280E-17, 1.1016E-17, 6.7816E-18, // F15530
1167  6.0958E-18, 8.9913E-18, 1.7201E-17, 3.4964E-17, 7.0722E-17, // F15540
1168  1.4020E-16, 2.7167E-16, 5.1478E-16, 9.5500E-16, 1.7376E-15, // F15550
1169  3.1074E-15, 5.4789E-15, 9.5640E-15, 1.6635E-14, 2.9145E-14, // F15560
1170  5.2179E-14, 8.8554E-14, 1.4764E-13, 2.3331E-13, 3.5996E-13, // F15570
1171  5.2132E-13, 6.3519E-13, 7.3174E-13, 8.3752E-13, 9.8916E-13, // F15580
1172  1.1515E-12, 1.4034E-12, 1.6594E-12, 2.1021E-12, 2.7416E-12, // F15590
1173  3.4135E-12, 4.5517E-12, 5.5832E-12, 7.2303E-12, 9.9484E-12, // F15600
1174  1.2724E-11, 1.6478E-11, 2.0588E-11, 2.5543E-11, 3.3625E-11, // F15610
1175  4.1788E-11, 5.0081E-11, 6.0144E-11, 6.9599E-11, 8.4408E-11, // F15630
1176  9.7143E-11, 1.0805E-10, 1.1713E-10, 1.2711E-10, 1.3727E-10, // F15640
1177  1.4539E-10, 1.6049E-10, 1.7680E-10, 2.0557E-10, 2.4967E-10, // F15650
1178  3.0096E-10, 3.5816E-10, 4.0851E-10, 4.6111E-10, 5.2197E-10, // F15660
1179  5.5043E-10, 6.0324E-10, 6.4983E-10, 6.7498E-10, 7.0545E-10, // F15670
1180  7.0680E-10, 7.5218E-10, 7.5723E-10, 7.7840E-10, 8.0081E-10, // F15680
1181  8.0223E-10, 7.7271E-10, 7.1676E-10, 6.7819E-10, 6.4753E-10, // F15690
1182  6.5844E-10, 7.0163E-10, 7.7503E-10, 8.8152E-10, 9.9022E-10, // F15700
1183  1.0229E-09, 9.9296E-10, 8.9911E-10, 7.7813E-10, 6.3785E-10, // F15710
1184  4.7491E-10, 3.5280E-10, 2.4349E-10, 1.6502E-10, 1.1622E-10, // F15720
1185  8.6715E-11, 6.7360E-11, 5.3910E-11, 4.5554E-11, 4.1300E-11, // F15740
1186  3.9728E-11, 3.9000E-11, 3.9803E-11, 4.1514E-11, 4.3374E-11, // F15750
1187  4.6831E-11, 4.8921E-11, 5.1995E-11, 5.7242E-11, 6.2759E-11, // F15760
1188  7.0801E-11, 7.4555E-11, 7.9754E-11, 8.7616E-11, 9.1171E-11, // F15770
1189  1.0349E-10, 1.1047E-10, 1.2024E-10, 1.2990E-10, 1.3725E-10, // F15780
1190  1.5005E-10, 1.5268E-10, 1.5535E-10, 1.5623E-10, 1.5009E-10, // F15790
1191  1.4034E-10, 1.3002E-10, 1.2225E-10, 1.1989E-10, 1.2411E-10, // F15800
1192  1.3612E-10, 1.5225E-10, 1.7202E-10, 1.9471E-10, 1.9931E-10, // F15810
1193  1.9079E-10, 1.7478E-10, 1.5259E-10, 1.2625E-10, 9.3332E-11, // F15820
1194  6.8796E-11, 4.6466E-11, 2.9723E-11, 1.8508E-11, 1.2106E-11, // F15830
1195  8.0142E-12, 5.4066E-12, 3.9329E-12, 3.1665E-12, 2.7420E-12, // F15850
1196  2.3996E-12, 2.3804E-12, 2.3242E-12, 2.4476E-12, 2.5331E-12, // F15860
1197  2.3595E-12, 2.2575E-12, 2.1298E-12, 2.0088E-12, 1.8263E-12, // F15870
1198  1.6114E-12, 1.4422E-12, 1.2946E-12, 1.0837E-12, 9.1282E-13, // F15880
1199  7.2359E-13, 5.3307E-13, 3.8837E-13, 2.6678E-13, 1.6769E-13, // F15890
1200  1.0826E-13, 7.2364E-14, 4.5201E-14, 3.0808E-14, 2.2377E-14, // F15900
1201  1.7040E-14, 9.2181E-15, 5.2934E-15, 3.5774E-15, 3.1431E-15, // F15910
1202  3.7647E-15, 5.6428E-15, 9.5139E-15, 1.7322E-14, 2.8829E-14, // F15920
1203  4.7708E-14, 6.9789E-14, 9.7267E-14, 1.4662E-13, 1.9429E-13, // F15930
1204  2.5998E-13, 3.6636E-13, 4.7960E-13, 6.5129E-13, 7.7638E-13, // F15940
1205  9.3774E-13, 1.1467E-12, 1.3547E-12, 1.5686E-12, 1.6893E-12, // F15960
1206  1.9069E-12, 2.1352E-12, 2.3071E-12, 2.4759E-12, 2.8247E-12, // F15970
1207  3.4365E-12, 4.3181E-12, 5.6107E-12, 7.0017E-12, 8.6408E-12, // F15980
1208  1.0974E-11, 1.3742E-11, 1.6337E-11, 2.0157E-11, 2.3441E-11, // F15990
1209  2.6733E-11, 3.0247E-11, 3.3737E-11, 3.8618E-11, 4.1343E-11, // F16000
1210  4.3870E-11, 4.4685E-11, 4.4881E-11, 4.5526E-11, 4.3628E-11, // F16010
1211  4.4268E-11, 4.6865E-11, 5.3426E-11, 5.4020E-11, 5.3218E-11, // F16020
1212  5.4587E-11, 5.6360E-11, 5.7740E-11, 5.6426E-11, 6.0399E-11, // F16030
1213  6.6981E-11, 7.4319E-11, 7.7977E-11, 7.5539E-11, 7.1610E-11, // F16040
1214  6.4606E-11, 5.5498E-11, 4.3944E-11, 3.3769E-11, 2.5771E-11, // F16050
1215  1.9162E-11, 1.3698E-11, 1.0173E-11, 7.8925E-12, 6.1938E-12, // F16070
1216  4.7962E-12, 4.0811E-12, 3.3912E-12, 2.8625E-12, 2.4504E-12, // F16080
1217  2.2188E-12, 2.2139E-12, 2.2499E-12, 2.2766E-12, 2.3985E-12, // F16090
1218  2.5459E-12, 2.9295E-12, 3.4196E-12, 3.6155E-12, 4.0733E-12, // F16100
1219  4.4610E-12, 4.9372E-12, 5.4372E-12, 5.7304E-12, 6.1640E-12, // F16110
1220  6.1278E-12, 6.2940E-12, 6.4947E-12, 6.8174E-12, 7.5190E-12, // F16120
1221  8.2608E-12, 8.4971E-12, 8.3484E-12, 8.1888E-12, 7.8552E-12, // F16130
1222  7.8468E-12, 7.5943E-12, 7.9096E-12, 8.6869E-12, 9.1303E-12, // F16140
1223  9.2547E-12, 8.9322E-12, 8.2177E-12, 7.3408E-12, 5.7956E-12, // F16150
1224  4.4470E-12, 3.5881E-12, 2.6748E-12, 1.7074E-12, 9.6700E-13, // F16160
1225  5.2645E-13, 2.9943E-13, 1.7316E-13, 1.0039E-13, 5.7859E-14, // F16180
1226  3.2968E-14, 1.8499E-14, 1.0192E-14, 5.5015E-15, 2.9040E-15, // F16190
1227  1.4968E-15, 7.5244E-16, 3.6852E-16, 1.7568E-16, 8.1464E-17, // F16200
1228  3.6717E-17, 1.6076E-17, 6.8341E-18, 2.8195E-18, 1.1286E-18, // F16210
1229  .0000E+00, .0000E+00, .0000E+00, .0000E+00, .0000E+00, // F16220
1230  .0000E+00, .0000E+00, .0000E+00, .0000E+00, 1.4070E-18, // F16230
1231  3.0405E-18, 6.4059E-18, 1.3169E-17, 2.6443E-17, 5.1917E-17, // F16240
1232  9.9785E-17, 1.8802E-16, 3.4788E-16, 6.3328E-16, 1.1370E-15, // F16250
1233  2.0198E-15, 3.5665E-15, 6.3053E-15, 1.1309E-14, 2.1206E-14, // F16260
1234  3.2858E-14, 5.5165E-14, 8.6231E-14, 1.2776E-13, 1.7780E-13, // F16270
1235  2.5266E-13, 3.6254E-13, 5.1398E-13, 6.8289E-13, 8.7481E-13, // F16290
1236  1.1914E-12, 1.6086E-12, 2.0469E-12, 2.5761E-12, 3.4964E-12, // F16300
1237  4.4980E-12, 5.5356E-12, 6.7963E-12, 8.5720E-12, 1.0700E-11, // F16310
1238  1.2983E-11, 1.6270E-11, 1.9609E-11, 2.2668E-11, 2.5963E-11, // F16320
1239  3.0918E-11, 3.4930E-11, 3.9330E-11, 4.4208E-11, 4.6431E-11, // F16330
1240  5.1141E-11, 5.4108E-11, 5.8077E-11, 6.5050E-11, 7.2126E-11, // F16340
1241  8.1064E-11, 8.1973E-11, 8.1694E-11, 8.3081E-11, 8.0240E-11, // F16350
1242  7.9225E-11, 7.6256E-11, 7.8468E-11, 8.0041E-11, 8.1585E-11, // F16360
1243  8.3485E-11, 8.3774E-11, 8.5870E-11, 8.6104E-11, 8.8516E-11, // F16370
1244  9.0814E-11, 9.2522E-11, 8.8913E-11, 7.8381E-11, 6.8568E-11, // F16380
1245  5.6797E-11, 4.4163E-11, 3.2369E-11, 2.3259E-11, 1.6835E-11, // F16400
1246  1.1733E-11, 8.5273E-12, 6.3805E-12, 4.8983E-12, 3.8831E-12, // F16410
1247  3.2610E-12, 2.8577E-12, 2.5210E-12, 2.2913E-12, 2.0341E-12, // F16420
1248  1.8167E-12, 1.6395E-12, 1.4890E-12, 1.3516E-12, 1.2542E-12, // F16430
1249  1.2910E-12, 1.3471E-12, 1.4689E-12, 1.5889E-12, 1.6989E-12, // F16440
1250  1.8843E-12, 2.0902E-12, 2.3874E-12, 2.7294E-12, 3.3353E-12, // F16450
1251  4.0186E-12, 4.5868E-12, 5.2212E-12, 5.8856E-12, 6.5991E-12, // F16460
1252  7.2505E-12, 7.6637E-12, 8.5113E-12, 9.4832E-12, 9.9678E-12, // F16470
1253  1.0723E-11, 1.0749E-11, 1.1380E-11, 1.1774E-11, 1.1743E-11, // F16480
1254  1.2493E-11, 1.2559E-11, 1.2332E-11, 1.1782E-11, 1.1086E-11, // F16490
1255  1.0945E-11, 1.1178E-11, 1.2083E-11, 1.3037E-11, 1.4730E-11, // F16510
1256  1.6450E-11, 1.7403E-11, 1.7004E-11, 1.5117E-11, 1.3339E-11, // F16520
1257  1.0844E-11, 8.0915E-12, 5.6615E-12, 3.7196E-12, 2.5194E-12, // F16530
1258  1.6569E-12, 1.1201E-12, 8.2335E-13, 6.0270E-13, 4.8205E-13, // F16540
1259  4.1313E-13, 3.6243E-13, 3.2575E-13, 2.7730E-13, 2.5292E-13, // F16550
1260  2.3062E-13, 2.1126E-13, 2.1556E-13, 2.1213E-13, 2.2103E-13, // F16560
1261  2.1927E-13, 2.0794E-13, 1.9533E-13, 1.6592E-13, 1.4521E-13, // F16570
1262  1.1393E-13, 8.3772E-14, 6.2077E-14, 4.3337E-14, 2.7165E-14, // F16580
1263  1.6821E-14, 9.5407E-15, 5.3093E-15, 3.0320E-15, 1.7429E-15, // F16590
1264  9.9828E-16, 5.6622E-16, 3.1672E-16, 1.7419E-16, 9.3985E-17, // F16600
1265  4.9656E-17, 2.5652E-17, 1.2942E-17, 6.3695E-18, 3.0554E-18, // F16620
1266  1.4273E-18, -0., -0., -0., -0., // F16630
1267  -0., 0., 0., 0., 0., // F16640
1268  0., 0., 0., 0., 0., // F16650
1269  0., 0., 0., 0., 0., // F16660
1270  0., 0., 0., 0., 0., // F16670
1271  0., 0., 0., 0., 0., // F16680
1272  0., 0., 0., 0., 0., // F16690
1273  0., 0., 0., 0., 0., // F16700
1274  0., 0., 0., 0., 0., // F16710
1275  0., 0., 0., 0., 0., // F16730
1276  0., 0., 0., 0., 0., // F16740
1277  0., 0., 0., 0., 0., // F16750
1278  0., 0., 0., 0., 0., // F16760
1279  0., 0., 0., 0., 0., // F16770
1280  0., 0., 0., 0., 0., // F16780
1281  0., 0., 0., 0., 0., // F16790
1282  0., 0., 0., 0., 0., // F16800
1283  0., 0., 0., 0., 0., // F16810
1284  0., 0., 0., 0., 0., // F16820
1285  0., 0., 0., 0., 0., // F16840
1286  0., 0., 0., 0., 0., // F16850
1287  0., 0., 0., 0., 0., // F16860
1288  0., 0., 0., 0., 0., // F16870
1289  0., 0., 0., 0., 0., // F16880
1290  0., 0., 0., 0., 0., // F16890
1291  0., 0., 0., 0., 0., // F16900
1292  0., 0., 0., 0., 0., // F16910
1293  0., 0., 0., 0., 0., // F16920
1294  0., 0., 0., 0., 0., // F16930
1295  0., 0., 0., 0., 0., // F16950
1296  0., 0., 0., 0., 0., // F16960
1297  0., 0., 0., 0., 0., // F16970
1298  0., 0., 0., 0., 0., // F16980
1299  0., 0., 0., 0., 0., // F16990
1300  0., 0., 0., 0., 0., // F17000
1301  0., 0., 0., 0., 0., // F17010
1302  0., 0., 0., 0., 0., // F17020
1303  0., 0., 0., 0., 0., // F17030
1304  0., 0., 0., 0., 0., // F17040
1305  0.};
1306 
1307 // H2O self continuum parameters at T=260 K for the CKD versions 0 to 2.4.2
1308 // date of last update: 06/28/82
1309 // units of (CM**3/MOL)*1.E-20
1310 const Numeric SL260_ckd_0_v1 = -20.0;
1311 const Numeric SL260_ckd_0_v2 = 20000.0;
1313 const int SL260_ckd_0_npt = 2003;
1315  0.0000e-00, 1.7750e-01, 1.7045e-01, 1.6457e-01, 1.7045e-01,
1316  1.7750e-01, 2.0036e-01, 2.1347e-01, // f07700
1317  2.2454e-01, 2.3428e-01, 2.3399e-01, 2.3022e-01, 2.0724e-01, // f07710
1318  1.9712e-01, 1.8317e-01, 1.6724e-01, 1.4780e-01, 1.2757e-01, // f07720
1319  1.1626e-01, 1.0098e-01, 8.9033e-02, 7.9770e-02, 6.7416e-02, // f07730
1320  5.9588e-02, 5.1117e-02, 4.6218e-02, 4.2179e-02, 3.4372e-02, // f07740
1321  2.9863e-02, 2.5252e-02, 2.2075e-02, 1.9209e-02, 1.5816e-02, // f07750
1322  1.3932e-02, 1.1943e-02, 1.0079e-02, 8.7667e-03, 7.4094e-03, // f07760
1323  6.4967e-03, 5.5711e-03, 4.8444e-03, 4.2552e-03, 3.6953e-03, // f07770
1324  3.2824e-03, 2.9124e-03, 2.6102e-03, 2.3370e-03, 2.1100e-03, // f07780
1325  1.9008e-03, 1.7145e-03, 1.5573e-03, 1.4206e-03, 1.2931e-03, // f07790
1326  1.1803e-03, 1.0774e-03, 9.8616e-04, 9.0496e-04, 8.3071e-04, // f07810
1327  7.6319e-04, 7.0149e-04, 6.4637e-04, 5.9566e-04, 5.4987e-04, // f07820
1328  5.0768e-04, 4.6880e-04, 4.3317e-04, 4.0037e-04, 3.7064e-04, // f07830
1329  3.4325e-04, 3.1809e-04, 2.9501e-04, 2.7382e-04, 2.5430e-04, // f07840
1330  2.3630e-04, 2.1977e-04, 2.0452e-04, 1.9042e-04, 1.7740e-04, // f07850
1331  1.6544e-04, 1.5442e-04, 1.4425e-04, 1.3486e-04, 1.2618e-04, // f07860
1332  1.1817e-04, 1.1076e-04, 1.0391e-04, 9.7563e-05, 9.1696e-05, // f07870
1333  8.6272e-05, 8.1253e-05, 7.6607e-05, 7.2302e-05, 6.8311e-05, // f07880
1334  6.4613e-05, 6.1183e-05, 5.8001e-05, 5.5048e-05, 5.2307e-05, // f07890
1335  4.9761e-05, 4.7395e-05, 4.5197e-05, 4.3155e-05, 4.1256e-05, // f07900
1336  3.9491e-05, 3.7849e-05, 3.6324e-05, 3.4908e-05, 3.3594e-05, // f07920
1337  3.2374e-05, 3.1244e-05, 3.0201e-05, 2.9240e-05, 2.8356e-05, // f07930
1338  2.7547e-05, 2.6814e-05, 2.6147e-05, 2.5551e-05, 2.5029e-05, // f07940
1339  2.4582e-05, 2.4203e-05, 2.3891e-05, 2.3663e-05, 2.3531e-05, // f07950
1340  2.3483e-05, 2.3516e-05, 2.3694e-05, 2.4032e-05, 2.4579e-05, // f07960
1341  2.5234e-05, 2.6032e-05, 2.7119e-05, 2.8631e-05, 3.0848e-05, // f07970
1342  3.3262e-05, 3.6635e-05, 4.0732e-05, 4.5923e-05, 5.3373e-05, // f07980
1343  6.1875e-05, 7.2031e-05, 8.5980e-05, 9.8642e-05, 1.1469e-04, // f07990
1344  1.3327e-04, 1.5390e-04, 1.7513e-04, 2.0665e-04, 2.3609e-04, // f08000
1345  2.6220e-04, 2.8677e-04, 3.2590e-04, 3.8624e-04, 4.1570e-04, // f08010
1346  4.5207e-04, 4.9336e-04, 5.4500e-04, 5.8258e-04, 5.8086e-04, // f08030
1347  5.6977e-04, 5.3085e-04, 4.8020e-04, 4.3915e-04, 4.0343e-04, // f08040
1348  3.7853e-04, 3.7025e-04, 3.9637e-04, 4.4675e-04, 4.7072e-04, // f08050
1349  4.9022e-04, 5.2076e-04, 5.3676e-04, 5.2755e-04, 4.8244e-04, // f08060
1350  4.5473e-04, 4.3952e-04, 3.9614e-04, 3.4086e-04, 2.9733e-04, // f08070
1351  2.6367e-04, 2.3767e-04, 2.0427e-04, 1.7595e-04, 1.5493e-04, // f08080
1352  1.3851e-04, 1.1874e-04, 1.0735e-04, 9.0490e-05, 8.1149e-05, // f08090
1353  7.4788e-05, 6.5438e-05, 5.8248e-05, 4.8076e-05, 4.3488e-05, // f08100
1354  3.7856e-05, 3.3034e-05, 2.9592e-05, 2.6088e-05, 2.3497e-05, // f08110
1355  2.0279e-05, 1.7526e-05, 1.5714e-05, 1.3553e-05, 1.2145e-05, // f08120
1356  1.0802e-05, 9.7681e-06, 8.8196e-06, 7.8291e-06, 7.1335e-06, // f08140
1357  6.4234e-06, 5.8391e-06, 5.3532e-06, 4.9079e-06, 4.5378e-06, // f08150
1358  4.1716e-06, 3.8649e-06, 3.5893e-06, 3.3406e-06, 3.1199e-06, // f08160
1359  2.9172e-06, 2.7348e-06, 2.5644e-06, 2.4086e-06, 2.2664e-06, // f08170
1360  2.1359e-06, 2.0159e-06, 1.9051e-06, 1.8031e-06, 1.7074e-06, // f08180
1361  1.6185e-06, 1.5356e-06, 1.4584e-06, 1.3861e-06, 1.3179e-06, // f08190
1362  1.2545e-06, 1.1951e-06, 1.1395e-06, 1.0873e-06, 1.0384e-06, // f08200
1363  9.9250e-07, 9.4935e-07, 9.0873e-07, 8.7050e-07, 8.3446e-07, // f08210
1364  8.0046e-07, 7.6834e-07, 7.3800e-07, 7.0931e-07, 6.8217e-07, // f08220
1365  6.5648e-07, 6.3214e-07, 6.0909e-07, 5.8725e-07, 5.6655e-07, // f08230
1366  5.4693e-07, 5.2835e-07, 5.1077e-07, 4.9416e-07, 4.7853e-07, // f08250
1367  4.6381e-07, 4.5007e-07, 4.3728e-07, 4.2550e-07, 4.1450e-07, // f08260
1368  4.0459e-07, 3.9532e-07, 3.8662e-07, 3.7855e-07, 3.7041e-07, // f08270
1369  3.6254e-07, 3.5420e-07, 3.4617e-07, 3.3838e-07, 3.3212e-07, // f08280
1370  3.2655e-07, 3.1865e-07, 3.1203e-07, 3.0670e-07, 3.0252e-07, // f08290
1371  2.9749e-07, 2.9184e-07, 2.8795e-07, 2.8501e-07, 2.8202e-07, // f08300
1372  2.7856e-07, 2.7509e-07, 2.7152e-07, 2.6844e-07, 2.6642e-07, // f08310
1373  2.6548e-07, 2.6617e-07, 2.6916e-07, 2.7372e-07, 2.8094e-07, // f08320
1374  2.9236e-07, 3.1035e-07, 3.2854e-07, 3.5481e-07, 3.9377e-07, // f08330
1375  4.4692e-07, 5.0761e-07, 5.7715e-07, 6.7725e-07, 8.0668e-07, // f08340
1376  9.3716e-07, 1.0797e-06, 1.1689e-06, 1.3217e-06, 1.4814e-06, // f08360
1377  1.5627e-06, 1.6519e-06, 1.7601e-06, 1.9060e-06, 2.0474e-06, // f08370
1378  2.0716e-06, 2.0433e-06, 1.9752e-06, 1.8466e-06, 1.7526e-06, // f08380
1379  1.6657e-06, 1.5870e-06, 1.5633e-06, 1.6520e-06, 1.8471e-06, // f08390
1380  1.9953e-06, 2.0975e-06, 2.2016e-06, 2.2542e-06, 2.3081e-06, // f08400
1381  2.3209e-06, 2.2998e-06, 2.3056e-06, 2.2757e-06, 2.2685e-06, // f08410
1382  2.2779e-06, 2.2348e-06, 2.2445e-06, 2.3174e-06, 2.4284e-06, // f08420
1383  2.5290e-06, 2.7340e-06, 2.9720e-06, 3.2332e-06, 3.5392e-06, // f08430
1384  3.9013e-06, 4.3334e-06, 4.9088e-06, 5.3428e-06, 5.9142e-06, // f08440
1385  6.6106e-06, 7.4709e-06, 8.5019e-06, 9.6835e-06, 1.0984e-05, // f08450
1386  1.2831e-05, 1.4664e-05, 1.7080e-05, 2.0103e-05, 2.4148e-05, // f08470
1387  2.7948e-05, 3.2855e-05, 3.9046e-05, 4.6429e-05, 5.6633e-05, // f08480
1388  6.6305e-05, 7.6048e-05, 8.7398e-05, 1.0034e-04, 1.1169e-04, // f08490
1389  1.2813e-04, 1.3354e-04, 1.3952e-04, 1.4204e-04, 1.4615e-04, // f08500
1390  1.5144e-04, 1.5475e-04, 1.6561e-04, 1.7135e-04, 1.6831e-04, // f08510
1391  1.6429e-04, 1.6353e-04, 1.6543e-04, 1.5944e-04, 1.5404e-04, // f08520
1392  1.5458e-04, 1.6287e-04, 1.7277e-04, 1.8387e-04, 1.7622e-04, // f08530
1393  1.6360e-04, 1.5273e-04, 1.3667e-04, 1.2364e-04, 9.7576e-05, // f08540
1394  7.9140e-05, 6.4241e-05, 5.1826e-05, 4.1415e-05, 3.1347e-05, // f08550
1395  2.5125e-05, 2.0027e-05, 1.6362e-05, 1.3364e-05, 1.1117e-05, // f08560
1396  9.4992e-06, 8.1581e-06, 7.1512e-06, 6.2692e-06, 5.5285e-06, // f08580
1397  4.9000e-06, 4.3447e-06, 3.8906e-06, 3.4679e-06, 3.1089e-06, // f08590
1398  2.8115e-06, 2.5496e-06, 2.2982e-06, 2.0861e-06, 1.8763e-06, // f08600
1399  1.7035e-06, 1.5548e-06, 1.4107e-06, 1.2839e-06, 1.1706e-06, // f08610
1400  1.0709e-06, 9.8099e-07, 8.9901e-07, 8.2394e-07, 7.5567e-07, // f08620
1401  6.9434e-07, 6.3867e-07, 5.8845e-07, 5.4263e-07, 5.0033e-07, // f08630
1402  4.6181e-07, 4.2652e-07, 3.9437e-07, 3.6497e-07, 3.3781e-07, // f08640
1403  3.1292e-07, 2.9011e-07, 2.6915e-07, 2.4989e-07, 2.3215e-07, // f08650
1404  2.1582e-07, 2.0081e-07, 1.8700e-07, 1.7432e-07, 1.6264e-07, // f08660
1405  1.5191e-07, 1.4207e-07, 1.3306e-07, 1.2484e-07, 1.1737e-07, // f08670
1406  1.1056e-07, 1.0451e-07, 9.9060e-08, 9.4135e-08, 8.9608e-08, // f08690
1407  8.5697e-08, 8.1945e-08, 7.8308e-08, 7.4808e-08, 7.1686e-08, // f08700
1408  6.8923e-08, 6.5869e-08, 6.3308e-08, 6.0840e-08, 5.8676e-08, // f08710
1409  5.6744e-08, 5.5016e-08, 5.3813e-08, 5.2792e-08, 5.2097e-08, // f08720
1410  5.1737e-08, 5.1603e-08, 5.1656e-08, 5.1989e-08, 5.2467e-08, // f08730
1411  5.2918e-08, 5.3589e-08, 5.4560e-08, 5.5869e-08, 5.7403e-08, // f08740
1412  5.8968e-08, 6.0973e-08, 6.3432e-08, 6.6245e-08, 6.9353e-08, // f08750
1413  7.2686e-08, 7.6541e-08, 8.0991e-08, 8.5950e-08, 9.1429e-08, // f08760
1414  9.7851e-08, 1.0516e-07, 1.1349e-07, 1.2295e-07, 1.3335e-07, // f08770
1415  1.4488e-07, 1.5864e-07, 1.7412e-07, 1.9140e-07, 2.1078e-07, // f08780
1416  2.3369e-07, 2.5996e-07, 2.8848e-07, 3.2169e-07, 3.5991e-07, // f08800
1417  4.0566e-07, 4.5969e-07, 5.3094e-07, 6.1458e-07, 7.1155e-07, // f08810
1418  8.3045e-07, 9.9021e-07, 1.2042e-06, 1.4914e-06, 1.8145e-06, // f08820
1419  2.2210e-06, 2.7831e-06, 3.4533e-06, 4.4446e-06, 5.1989e-06, // f08830
1420  6.2289e-06, 7.1167e-06, 8.3949e-06, 9.6417e-06, 1.0313e-05, // f08840
1421  1.0485e-05, 1.0641e-05, 1.0898e-05, 1.0763e-05, 1.0506e-05, // f08850
1422  1.0497e-05, 1.1696e-05, 1.2654e-05, 1.3029e-05, 1.3175e-05, // f08860
1423  1.4264e-05, 1.4985e-05, 1.4999e-05, 1.4317e-05, 1.4616e-05, // f08870
1424  1.4963e-05, 1.5208e-05, 1.4942e-05, 1.3879e-05, 1.3087e-05, // f08880
1425  1.1727e-05, 1.0515e-05, 9.0073e-06, 7.3133e-06, 6.1181e-06, // f08890
1426  5.0623e-06, 4.1105e-06, 3.3915e-06, 2.6711e-06, 2.1464e-06, // f08910
1427  1.7335e-06, 1.4302e-06, 1.1847e-06, 9.9434e-07, 8.2689e-07, // f08920
1428  7.0589e-07, 6.0750e-07, 5.3176e-07, 4.6936e-07, 4.1541e-07, // f08930
1429  3.6625e-07, 3.2509e-07, 2.9156e-07, 2.6308e-07, 2.3819e-07, // f08940
1430  2.1421e-07, 1.9366e-07, 1.7626e-07, 1.5982e-07, 1.4567e-07, // f08950
1431  1.3354e-07, 1.2097e-07, 1.1029e-07, 1.0063e-07, 9.2003e-08, // f08960
1432  8.4245e-08, 7.7004e-08, 7.0636e-08, 6.4923e-08, 5.9503e-08, // f08970
1433  5.4742e-08, 5.0450e-08, 4.6470e-08, 4.2881e-08, 3.9550e-08, // f08980
1434  3.6541e-08, 3.3803e-08, 3.1279e-08, 2.8955e-08, 2.6858e-08, // f08990
1435  2.4905e-08, 2.3146e-08, 2.1539e-08, 2.0079e-08, 1.8746e-08, // f09000
1436  1.7517e-08, 1.6396e-08, 1.5369e-08, 1.4426e-08, 1.3543e-08, // f09020
1437  1.2724e-08, 1.1965e-08, 1.1267e-08, 1.0617e-08, 1.0010e-08, // f09030
1438  9.4662e-09, 8.9553e-09, 8.4988e-09, 8.0807e-09, 7.7043e-09, // f09040
1439  7.3721e-09, 7.0707e-09, 6.8047e-09, 6.5702e-09, 6.3634e-09, // f09050
1440  6.1817e-09, 6.0239e-09, 5.8922e-09, 5.7824e-09, 5.7019e-09, // f09060
1441  5.6368e-09, 5.5940e-09, 5.5669e-09, 5.5583e-09, 5.5653e-09, // f09070
1442  5.5837e-09, 5.6243e-09, 5.6883e-09, 5.7800e-09, 5.8964e-09, // f09080
1443  6.0429e-09, 6.2211e-09, 6.4282e-09, 6.6634e-09, 6.9306e-09, // f09090
1444  7.2336e-09, 7.5739e-09, 7.9562e-09, 8.3779e-09, 8.8575e-09, // f09100
1445  9.3992e-09, 1.0004e-08, 1.0684e-08, 1.1450e-08, 1.2320e-08, // f09110
1446  1.3311e-08, 1.4455e-08, 1.5758e-08, 1.7254e-08, 1.8927e-08, // f09130
1447  2.0930e-08, 2.3348e-08, 2.6074e-08, 2.9221e-08, 3.2770e-08, // f09140
1448  3.7485e-08, 4.2569e-08, 4.8981e-08, 5.5606e-08, 6.2393e-08, // f09150
1449  7.1901e-08, 8.2921e-08, 9.5513e-08, 1.1111e-07, 1.3143e-07, // f09160
1450  1.5971e-07, 1.8927e-07, 2.2643e-07, 2.7860e-07, 3.2591e-07, // f09170
1451  3.7024e-07, 4.2059e-07, 4.9432e-07, 5.5543e-07, 5.7498e-07, // f09180
1452  5.9210e-07, 6.1005e-07, 6.1577e-07, 5.9193e-07, 5.6602e-07, // f09190
1453  5.7403e-07, 6.0050e-07, 6.4723e-07, 6.7073e-07, 7.5415e-07, // f09200
1454  8.0982e-07, 8.7658e-07, 9.1430e-07, 9.4459e-07, 9.8347e-07, // f09210
1455  9.8768e-07, 1.0153e-06, 1.0066e-06, 1.0353e-06, 1.0353e-06, // f09220
1456  1.0722e-06, 1.1138e-06, 1.1923e-06, 1.2947e-06, 1.4431e-06, // f09240
1457  1.6537e-06, 1.8662e-06, 2.2473e-06, 2.6464e-06, 3.1041e-06, // f09250
1458  3.4858e-06, 4.0167e-06, 4.6675e-06, 5.0983e-06, 5.7997e-06, // f09260
1459  6.0503e-06, 6.4687e-06, 6.5396e-06, 6.7986e-06, 7.0244e-06, // f09270
1460  7.2305e-06, 7.6732e-06, 7.9783e-06, 7.9846e-06, 7.7617e-06, // f09280
1461  7.7657e-06, 7.7411e-06, 7.8816e-06, 7.8136e-06, 8.0051e-06, // f09290
1462  8.5799e-06, 9.1659e-06, 9.8646e-06, 9.4920e-06, 8.7670e-06, // f09300
1463  8.2034e-06, 7.2297e-06, 6.2324e-06, 4.9315e-06, 3.9128e-06, // f09310
1464  3.1517e-06, 2.4469e-06, 1.8815e-06, 1.4627e-06, 1.1698e-06, // f09320
1465  9.4686e-07, 7.8486e-07, 6.6970e-07, 5.8811e-07, 5.2198e-07, // f09330
1466  4.6809e-07, 4.1671e-07, 3.7006e-07, 3.3066e-07, 2.9387e-07, // f09350
1467  2.6415e-07, 2.3409e-07, 2.0991e-07, 1.9132e-07, 1.7519e-07, // f09360
1468  1.5939e-07, 1.4368e-07, 1.3050e-07, 1.1883e-07, 1.0772e-07, // f09370
1469  9.6884e-08, 8.7888e-08, 7.8956e-08, 7.1024e-08, 6.3824e-08, // f09380
1470  5.7256e-08, 5.1769e-08, 4.7037e-08, 4.2901e-08, 3.8970e-08, // f09390
1471  3.5467e-08, 3.2502e-08, 2.9827e-08, 2.7389e-08, 2.5111e-08, // f09400
1472  2.3056e-08, 2.1267e-08, 1.9610e-08, 1.8133e-08, 1.6775e-08, // f09410
1473  1.5491e-08, 1.4329e-08, 1.3265e-08, 1.2300e-08, 1.1420e-08, // f09420
1474  1.0593e-08, 9.8475e-09, 9.1585e-09, 8.5256e-09, 7.9525e-09, // f09430
1475  7.4226e-09, 6.9379e-09, 6.4950e-09, 6.0911e-09, 5.7242e-09, // f09440
1476  5.3877e-09, 5.0821e-09, 4.8051e-09, 4.5554e-09, 4.3315e-09, // f09460
1477  4.1336e-09, 3.9632e-09, 3.8185e-09, 3.7080e-09, 3.6296e-09, // f09470
1478  3.5804e-09, 3.5776e-09, 3.6253e-09, 3.7115e-09, 3.8151e-09, // f09480
1479  3.9804e-09, 4.1742e-09, 4.3581e-09, 4.5306e-09, 4.7736e-09, // f09490
1480  5.1297e-09, 5.5291e-09, 5.9125e-09, 6.4956e-09, 7.0362e-09, // f09500
1481  7.5318e-09, 7.9947e-09, 8.6438e-09, 9.7227e-09, 1.0130e-08, // f09510
1482  1.0549e-08, 1.1064e-08, 1.1702e-08, 1.2043e-08, 1.1781e-08, // f09520
1483  1.1838e-08, 1.1917e-08, 1.2131e-08, 1.2476e-08, 1.3611e-08, // f09530
1484  1.4360e-08, 1.5057e-08, 1.6247e-08, 1.7284e-08, 1.8420e-08, // f09540
1485  1.8352e-08, 1.8722e-08, 1.9112e-08, 1.9092e-08, 1.9311e-08, // f09550
1486  1.9411e-08, 1.9884e-08, 2.0508e-08, 2.1510e-08, 2.3143e-08, // f09570
1487  2.5050e-08, 2.7596e-08, 3.1231e-08, 3.6260e-08, 4.3410e-08, // f09580
1488  5.2240e-08, 6.3236e-08, 7.7522e-08, 9.8688e-08, 1.1859e-07, // f09590
1489  1.4341e-07, 1.6798e-07, 1.9825e-07, 2.2898e-07, 2.6257e-07, // f09600
1490  2.9884e-07, 3.3247e-07, 3.4936e-07, 3.5583e-07, 3.7150e-07, // f09610
1491  3.6580e-07, 3.7124e-07, 3.7030e-07, 4.1536e-07, 4.6656e-07, // f09620
1492  4.6677e-07, 4.7507e-07, 4.9653e-07, 5.3795e-07, 5.4957e-07, // f09630
1493  5.2238e-07, 5.4690e-07, 5.6569e-07, 5.9844e-07, 5.9835e-07, // f09640
1494  5.6522e-07, 5.4123e-07, 4.7904e-07, 4.2851e-07, 3.5603e-07, // f09650
1495  2.8932e-07, 2.3655e-07, 1.8592e-07, 1.4943e-07, 1.1971e-07, // f09660
1496  9.8482e-08, 8.3675e-08, 7.1270e-08, 6.2496e-08, 5.4999e-08, // f09680
1497  4.9821e-08, 4.5387e-08, 4.1340e-08, 3.7453e-08, 3.3298e-08, // f09690
1498  3.0120e-08, 2.7032e-08, 2.4236e-08, 2.1500e-08, 1.8988e-08, // f09700
1499  1.7414e-08, 1.5706e-08, 1.4192e-08, 1.3204e-08, 1.1759e-08, // f09710
1500  1.0737e-08, 9.6309e-09, 8.8179e-09, 8.2619e-09, 7.2264e-09, // f09720
1501  6.4856e-09, 5.8037e-09, 5.2093e-09, 4.7205e-09, 4.1749e-09, // f09730
1502  3.7852e-09, 3.3915e-09, 3.0089e-09, 2.7335e-09, 2.4398e-09, // f09740
1503  2.2031e-09, 1.9786e-09, 1.7890e-09, 1.6266e-09, 1.4830e-09, // f09750
1504  1.3576e-09, 1.2518e-09, 1.1587e-09, 1.0726e-09, 9.9106e-10, // f09760
1505  9.1673e-10, 8.5084e-10, 7.9147e-10, 7.2882e-10, 6.7342e-10, // f09770
1506  6.2593e-10, 5.8294e-10, 5.4435e-10, 5.0997e-10, 4.7806e-10, // f09790
1507  4.4931e-10, 4.2357e-10, 4.0023e-10, 3.7909e-10, 3.5999e-10, // f09800
1508  3.4285e-10, 3.2776e-10, 3.1468e-10, 3.0377e-10, 2.9479e-10, // f09810
1509  2.8877e-10, 2.8512e-10, 2.8617e-10, 2.8976e-10, 3.0001e-10, // f09820
1510  3.1718e-10, 3.3898e-10, 3.5857e-10, 3.8358e-10, 4.3131e-10, // f09830
1511  4.5741e-10, 4.6948e-10, 4.7594e-10, 4.9529e-10, 5.1563e-10, // f09840
1512  4.9475e-10, 4.8369e-10, 4.8829e-10, 5.0047e-10, 5.0203e-10, // f09850
1513  5.1954e-10, 5.5352e-10, 5.9928e-10, 6.7148e-10, 7.1121e-10, // f09860
1514  7.4317e-10, 7.6039e-10, 7.8313e-10, 8.0684e-10, 7.8553e-10, // f09870
1515  7.8312e-10, 7.8537e-10, 7.8872e-10, 8.0185e-10, 8.1004e-10, // f09880
1516  8.2608e-10, 8.2525e-10, 8.3857e-10, 8.7920e-10, 9.2451e-10, // f09900
1517  9.8661e-10, 1.0629e-09, 1.1659e-09, 1.2922e-09, 1.4387e-09, // f09910
1518  1.6254e-09, 1.8425e-09, 2.1428e-09, 2.5477e-09, 3.0379e-09, // f09920
1519  3.7570e-09, 4.4354e-09, 5.1802e-09, 6.2769e-09, 7.4894e-09, // f09930
1520  8.7474e-09, 9.8037e-09, 1.1582e-08, 1.3293e-08, 1.4471e-08, // f09940
1521  1.5025e-08, 1.5580e-08, 1.6228e-08, 1.6413e-08, 1.6020e-08, // f09950
1522  1.6393e-08, 1.7545e-08, 1.9590e-08, 2.1449e-08, 2.3856e-08, // f09960
1523  2.7050e-08, 3.0214e-08, 3.3733e-08, 3.6487e-08, 3.9353e-08, // f09970
1524  4.2660e-08, 4.6385e-08, 4.9955e-08, 5.5313e-08, 6.0923e-08, // f09980
1525  6.8948e-08, 7.3649e-08, 8.2602e-08, 9.2212e-08, 9.9080e-08, // f09990
1526  1.1319e-07, 1.1790e-07, 1.2941e-07, 1.3199e-07, 1.3914e-07, // f10010
1527  1.4843e-07, 1.5300e-07, 1.6419e-07, 1.7095e-07, 1.6988e-07, // f10020
1528  1.6494e-07, 1.6327e-07, 1.6067e-07, 1.6909e-07, 1.7118e-07, // f10030
1529  1.8106e-07, 1.9857e-07, 2.1696e-07, 2.3385e-07, 2.2776e-07, // f10040
1530  2.1402e-07, 1.9882e-07, 1.7362e-07, 1.4308e-07, 1.1158e-07, // f10050
1531  8.8781e-08, 6.8689e-08, 5.2062e-08, 4.0427e-08, 3.2669e-08, // f10060
1532  2.7354e-08, 2.3200e-08, 2.0580e-08, 1.8676e-08, 1.7329e-08, // f10070
1533  1.6621e-08, 1.6433e-08, 1.6953e-08, 1.7134e-08, 1.7948e-08, // f10080
1534  1.9107e-08, 1.9875e-08, 2.1416e-08, 2.1556e-08, 2.2265e-08, // f10090
1535  2.2171e-08, 2.2534e-08, 2.3029e-08, 2.2828e-08, 2.3143e-08, // f10100
1536  2.2965e-08, 2.2223e-08, 2.1108e-08, 2.0265e-08, 1.9516e-08, // f10120
1537  1.9941e-08, 2.0312e-08, 2.1080e-08, 2.2611e-08, 2.4210e-08, // f10130
1538  2.6069e-08, 2.5097e-08, 2.3318e-08, 2.1543e-08, 1.8942e-08, // f10140
1539  1.5960e-08, 1.2386e-08, 9.9340e-09, 7.7502e-09, 5.9462e-09, // f10150
1540  4.5113e-09, 3.5523e-09, 2.8844e-09, 2.3394e-09, 1.9584e-09, // f10160
1541  1.6749e-09, 1.4624e-09, 1.2809e-09, 1.1359e-09, 1.0087e-09, // f10170
1542  9.0166e-10, 8.1079e-10, 7.2219e-10, 6.4922e-10, 5.8803e-10, // f10180
1543  5.3290e-10, 4.8590e-10, 4.4111e-10, 4.0184e-10, 3.6644e-10, // f10190
1544  3.3529e-10, 3.0789e-10, 2.8286e-10, 2.6089e-10, 2.4125e-10, // f10200
1545  2.2355e-10, 2.0783e-10, 1.9370e-10, 1.8088e-10, 1.6948e-10, // f10210
1546  1.5929e-10, 1.5013e-10, 1.4193e-10, 1.3470e-10, 1.2841e-10, // f10230
1547  1.2307e-10, 1.1865e-10, 1.1502e-10, 1.1243e-10, 1.1099e-10, // f10240
1548  1.1066e-10, 1.1216e-10, 1.1529e-10, 1.2171e-10, 1.3128e-10, // f10250
1549  1.4153e-10, 1.5962e-10, 1.8048e-10, 2.0936e-10, 2.3165e-10, // f10260
1550  2.5746e-10, 2.9600e-10, 3.3707e-10, 3.5267e-10, 3.5953e-10, // f10270
1551  3.6822e-10, 3.8363e-10, 3.8286e-10, 3.5883e-10, 3.6154e-10, // f10280
1552  3.6653e-10, 3.8507e-10, 4.0250e-10, 4.4435e-10, 4.9889e-10, // f10290
1553  5.6932e-10, 6.3599e-10, 7.0281e-10, 7.5777e-10, 8.1279e-10, // f10300
1554  8.8910e-10, 9.3400e-10, 1.0076e-09, 1.0945e-09, 1.1898e-09, // f10310
1555  1.3108e-09, 1.4725e-09, 1.7028e-09, 1.9619e-09, 2.3527e-09, // f10320
1556  2.6488e-09, 3.0327e-09, 3.4396e-09, 3.8797e-09, 4.4115e-09, // f10340
1557  4.6853e-09, 4.9553e-09, 4.9551e-09, 5.1062e-09, 5.0996e-09, // f10350
1558  5.1119e-09, 5.2283e-09, 5.8297e-09, 6.3439e-09, 6.2675e-09, // f10360
1559  6.3296e-09, 6.5173e-09, 7.1685e-09, 7.0528e-09, 6.8856e-09, // f10370
1560  7.3182e-09, 7.6990e-09, 8.3461e-09, 8.1946e-09, 7.7153e-09, // f10380
1561  7.2411e-09, 6.4511e-09, 5.7336e-09, 4.6105e-09, 3.6962e-09, // f10390
1562  2.9944e-09, 2.4317e-09, 1.9399e-09, 1.5331e-09, 1.2633e-09, // f10400
1563  1.0613e-09, 9.0136e-10, 7.9313e-10, 7.1543e-10, 6.6485e-10, // f10410
1564  6.4225e-10, 6.3980e-10, 6.4598e-10, 6.7428e-10, 7.0270e-10, // f10420
1565  7.4694e-10, 7.7946e-10, 7.9395e-10, 7.8716e-10, 7.6933e-10, // f10430
1566  7.6220e-10, 7.4825e-10, 7.4805e-10, 7.6511e-10, 7.6492e-10, // f10450
1567  7.4103e-10, 7.1979e-10, 7.1686e-10, 7.3403e-10, 7.1142e-10, // f10460
1568  7.0212e-10, 7.1548e-10, 7.5253e-10, 8.0444e-10, 8.2378e-10, // f10470
1569  7.8004e-10, 7.1712e-10, 6.4978e-10, 5.7573e-10, 4.8675e-10, // f10480
1570  3.7945e-10, 3.0118e-10, 2.4241e-10, 1.9100e-10, 1.4816e-10, // f10490
1571  1.1567e-10, 9.4183e-11, 7.7660e-11, 6.5270e-11, 5.6616e-11, // f10500
1572  4.9576e-11, 4.4137e-11, 3.9459e-11, 3.5759e-11, 3.2478e-11, // f10510
1573  2.9419e-11, 2.6703e-11, 2.4365e-11, 2.2412e-11, 2.0606e-11, // f10520
1574  1.9067e-11, 1.7800e-11, 1.6695e-11, 1.5729e-11, 1.4887e-11, // f10530
1575  1.4135e-11, 1.3519e-11, 1.2992e-11, 1.2563e-11, 1.2223e-11, // f10540
1576  1.1962e-11, 1.1775e-11, 1.1657e-11, 1.1605e-11, 1.1619e-11, // f10560
1577  1.1697e-11, 1.1839e-11, 1.2046e-11, 1.2319e-11, 1.2659e-11, // f10570
1578  1.3070e-11, 1.3553e-11, 1.4113e-11, 1.4754e-11, 1.5480e-11, // f10580
1579  1.6298e-11, 1.7214e-11, 1.8236e-11, 1.9372e-11, 2.0635e-11, // f10590
1580  2.2036e-11, 2.3590e-11, 2.5317e-11, 2.7242e-11, 2.9400e-11, // f10600
1581  3.1849e-11, 3.4654e-11, 3.7923e-11, 4.1695e-11, 4.6055e-11, // f10610
1582  5.0940e-11, 5.5624e-11, 6.0667e-11, 6.6261e-11, 7.2692e-11, // f10620
1583  7.9711e-11, 8.7976e-11, 9.6884e-11, 1.0775e-10, 1.2093e-10, // f10630
1584  1.3531e-10, 1.5404e-10, 1.7315e-10, 1.9862e-10, 2.3341e-10, // f10640
1585  2.7014e-10, 3.1716e-10, 3.6957e-10, 4.3233e-10, 5.2566e-10, // f10650
1586  6.2251e-10, 7.2149e-10, 8.3958e-10, 9.5931e-10, 1.1388e-09, // f10670
1587  1.2973e-09, 1.4442e-09, 1.5638e-09, 1.6974e-09, 1.8489e-09, // f10680
1588  1.9830e-09, 2.1720e-09, 2.3662e-09, 2.6987e-09, 3.1697e-09, // f10690
1589  3.6907e-09, 4.2625e-09, 4.7946e-09, 5.3848e-09, 6.0897e-09, // f10700
1590  6.4730e-09, 7.1483e-09, 7.7432e-09, 8.0851e-09, 8.5013e-09, // f10710
1591  8.5909e-09, 9.1890e-09, 9.3124e-09, 9.5936e-09, 9.8787e-09, // f10720
1592  9.9036e-09, 9.6712e-09, 9.2036e-09, 9.0466e-09, 8.9380e-09, // f10730
1593  9.1815e-09, 9.5092e-09, 1.0027e-08, 1.0876e-08, 1.1744e-08, // f10740
1594  1.1853e-08, 1.1296e-08, 1.0134e-08, 8.8245e-09, 7.3930e-09, // f10750
1595  5.7150e-09, 4.4884e-09, 3.4027e-09, 2.6054e-09, 2.0790e-09, // f10760
1596  1.7267e-09, 1.4724e-09, 1.2722e-09, 1.1234e-09, 1.0186e-09, // f10780
1597  9.4680e-10, 8.8854e-10, 8.5127e-10, 8.3157e-10, 8.2226e-10, // f10790
1598  8.3395e-10, 8.3294e-10, 8.4725e-10, 8.8814e-10, 9.3697e-10, // f10800
1599  1.0112e-09, 1.0412e-09, 1.0948e-09, 1.1810e-09, 1.2267e-09, // f10810
1600  1.3690e-09, 1.4512e-09, 1.5568e-09, 1.6552e-09, 1.7321e-09, // f10820
1601  1.8797e-09, 1.9210e-09, 1.9686e-09, 1.9917e-09, 1.9357e-09, // f10830
1602  1.8486e-09, 1.7575e-09, 1.7113e-09, 1.7163e-09, 1.7623e-09, // f10840
1603  1.8536e-09, 1.9765e-09, 2.1334e-09, 2.3237e-09, 2.3259e-09, // f10850
1604  2.1833e-09, 1.9785e-09, 1.7308e-09, 1.4596e-09, 1.1198e-09, // f10860
1605  8.7375e-10, 6.5381e-10, 4.8677e-10, 3.6756e-10, 2.9155e-10, // f10870
1606  2.3735e-10, 1.9590e-10, 1.6638e-10, 1.4549e-10, 1.2947e-10, // f10890
1607  1.1511e-10, 1.0548e-10, 9.6511e-11, 9.0469e-11, 8.5170e-11, // f10900
1608  7.7804e-11, 7.1971e-11, 6.6213e-11, 6.1063e-11, 5.5881e-11, // f10910
1609  5.0508e-11, 4.5932e-11, 4.1997e-11, 3.7672e-11, 3.3972e-11, // f10920
1610  3.0318e-11, 2.6769e-11, 2.3874e-11, 2.1336e-11, 1.9073e-11, // f10930
1611  1.7313e-11, 1.5904e-11, 1.4684e-11, 1.3698e-11, 1.2873e-11, // f10940
1612  1.2175e-11, 1.1542e-11, 1.1024e-11, 1.0602e-11, 1.0267e-11, // f10950
1613  1.0012e-11, 9.8379e-12, 9.7482e-12, 9.7564e-12, 9.8613e-12, // f10960
1614  1.0092e-11, 1.0418e-11, 1.0868e-11, 1.1585e-11, 1.2351e-11, // f10970
1615  1.3372e-11, 1.4841e-11, 1.6457e-11, 1.8681e-11, 2.0550e-11, // f10980
1616  2.2912e-11, 2.5958e-11, 2.9137e-11, 3.2368e-11, 3.4848e-11, // f11000
1617  3.8462e-11, 4.2190e-11, 4.5629e-11, 4.9022e-11, 5.4232e-11, // f11010
1618  6.1900e-11, 7.1953e-11, 8.5368e-11, 9.9699e-11, 1.1734e-10, // f11020
1619  1.4185e-10, 1.7017e-10, 1.9813e-10, 2.3859e-10, 2.7304e-10, // f11030
1620  3.0971e-10, 3.5129e-10, 3.9405e-10, 4.5194e-10, 4.8932e-10, // f11040
1621  5.2436e-10, 5.4098e-10, 5.5542e-10, 5.7794e-10, 5.6992e-10, // f11050
1622  5.8790e-10, 6.1526e-10, 6.8034e-10, 6.7956e-10, 6.6864e-10, // f11060
1623  6.9329e-10, 7.2971e-10, 7.6546e-10, 7.5078e-10, 7.8406e-10, // f11070
1624  8.3896e-10, 9.0111e-10, 9.1994e-10, 8.7189e-10, 8.1426e-10, // f11080
1625  7.3097e-10, 6.3357e-10, 5.1371e-10, 4.0936e-10, 3.2918e-10, // f11090
1626  2.6255e-10, 2.0724e-10, 1.6879e-10, 1.4165e-10, 1.1989e-10, // f11110
1627  1.0125e-10, 8.9629e-11, 7.8458e-11, 6.8826e-11, 6.0935e-11, // f11120
1628  5.5208e-11, 5.2262e-11, 5.0260e-11, 4.8457e-11, 4.7888e-11, // f11130
1629  4.8032e-11, 5.0838e-11, 5.4668e-11, 5.5790e-11, 6.0056e-11, // f11140
1630  6.3811e-11, 6.8848e-11, 7.4590e-11, 7.8249e-11, 8.3371e-11, // f11150
1631  8.3641e-11, 8.6591e-11, 8.9599e-11, 9.3487e-11, 1.0066e-10, // f11160
1632  1.0765e-10, 1.0851e-10, 1.0619e-10, 1.0557e-10, 1.0460e-10, // f11170
1633  1.0796e-10, 1.0523e-10, 1.0674e-10, 1.1261e-10, 1.1431e-10, // f11180
1634  1.1408e-10, 1.0901e-10, 9.9105e-11, 8.8077e-11, 6.9928e-11, // f11190
1635  5.4595e-11, 4.5401e-11, 3.6313e-11, 2.6986e-11, 1.9463e-11, // f11200
1636  1.4577e-11, 1.1583e-11, 9.5492e-12, 8.0770e-12, 6.9642e-12, // f11220
1637  6.0966e-12, 5.4046e-12, 4.8431e-12, 4.3815e-12, 3.9987e-12, // f11230
1638  3.6790e-12, 3.4113e-12, 3.1868e-12, 2.9992e-12, 2.8434e-12, // f11240
1639  2.7153e-12, 2.6120e-12, 2.5311e-12, 2.4705e-12, 2.4290e-12, // f11250
1640  2.4053e-12, 2.3988e-12, 2.4087e-12, 2.4349e-12, 2.4771e-12, // f11260
1641  2.5355e-12, 2.6103e-12, 2.7019e-12, 2.8110e-12, 2.9383e-12, // f11270
1642  3.0848e-12, 3.2518e-12, 3.4405e-12, 3.6527e-12, 3.8902e-12, // f11280
1643  4.1555e-12, 4.4510e-12, 4.7801e-12, 5.1462e-12, 5.5539e-12, // f11290
1644  6.0086e-12, 6.5171e-12, 7.0884e-12, 7.7357e-12, 8.4831e-12, // f11300
1645  9.3096e-12, 1.0282e-11, 1.1407e-11, 1.2690e-11, 1.4148e-11, // f11310
1646  1.5888e-11, 1.7992e-11, 2.0523e-11, 2.3342e-11, 2.6578e-11, // f11330
1647  3.0909e-11, 3.6228e-11, 4.2053e-11, 4.9059e-11, 5.9273e-11, // f11340
1648  7.0166e-11, 8.2298e-11, 9.7071e-11, 1.1673e-10, 1.4010e-10, // f11350
1649  1.6621e-10, 2.0127e-10, 2.3586e-10, 2.7050e-10, 3.0950e-10, // f11360
1650  3.6584e-10, 4.1278e-10, 4.6591e-10, 5.2220e-10, 5.5246e-10, // f11370
1651  6.1500e-10, 6.5878e-10, 7.1167e-10, 7.9372e-10, 8.6975e-10, // f11380
1652  9.6459e-10, 9.7368e-10, 9.8142e-10, 1.0202e-09, 1.0200e-09, // f11390
1653  1.0356e-09, 1.0092e-09, 1.0269e-09, 1.0366e-09, 1.0490e-09, // f11400
1654  1.0717e-09, 1.0792e-09, 1.1016e-09, 1.0849e-09, 1.0929e-09, // f11410
1655  1.0971e-09, 1.0969e-09, 1.0460e-09, 9.2026e-10, 8.1113e-10, // f11420
1656  6.8635e-10, 5.5369e-10, 4.2908e-10, 3.3384e-10, 2.6480e-10, // f11440
1657  2.0810e-10, 1.6915e-10, 1.4051e-10, 1.1867e-10, 1.0158e-10, // f11450
1658  8.8990e-11, 7.9175e-11, 7.0440e-11, 6.3453e-11, 5.7009e-11, // f11460
1659  5.1662e-11, 4.7219e-11, 4.3454e-11, 4.0229e-11, 3.7689e-11, // f11470
1660  3.6567e-11, 3.5865e-11, 3.5955e-11, 3.5928e-11, 3.6298e-11, // f11480
1661  3.7629e-11, 3.9300e-11, 4.1829e-11, 4.4806e-11, 5.0534e-11, // f11490
1662  5.6672e-11, 6.2138e-11, 6.8678e-11, 7.6111e-11, 8.4591e-11, // f11500
1663  9.2634e-11, 9.8085e-11, 1.0830e-10, 1.1949e-10, 1.2511e-10, // f11510
1664  1.3394e-10, 1.3505e-10, 1.4342e-10, 1.4874e-10, 1.4920e-10, // f11520
1665  1.5872e-10, 1.5972e-10, 1.5821e-10, 1.5425e-10, 1.4937e-10, // f11530
1666  1.5089e-10, 1.5521e-10, 1.6325e-10, 1.6924e-10, 1.8265e-10, // f11550
1667  1.9612e-10, 2.0176e-10, 1.9359e-10, 1.7085e-10, 1.5197e-10, // f11560
1668  1.2646e-10, 9.8552e-11, 7.4530e-11, 5.5052e-11, 4.2315e-11, // f11570
1669  3.2736e-11, 2.6171e-11, 2.1909e-11, 1.8286e-11, 1.5752e-11, // f11580
1670  1.3859e-11, 1.2288e-11, 1.1002e-11, 9.7534e-12, 8.8412e-12, // f11590
1671  8.0169e-12, 7.2855e-12, 6.8734e-12, 6.4121e-12, 6.1471e-12, // f11600
1672  5.7780e-12, 5.3478e-12, 4.9652e-12, 4.4043e-12, 3.9862e-12, // f11610
1673  3.4684e-12, 2.9681e-12, 2.5791e-12, 2.2339e-12, 1.9247e-12, // f11620
1674  1.6849e-12, 1.4863e-12, 1.3291e-12, 1.2021e-12, 1.0947e-12, // f11630
1675  1.0015e-12, 9.1935e-13, 8.4612e-13, 7.8036e-13, 7.2100e-13, // f11640
1676  6.6718e-13, 6.1821e-13, 5.7353e-13, 5.3269e-13, 4.9526e-13, // f11660
1677  4.6093e-13, 4.2937e-13, 4.0034e-13, 3.7361e-13, 3.4895e-13, // f11670
1678  3.2621e-13, 3.0520e-13, 2.8578e-13, 2.6782e-13, 2.5120e-13, // f11680
1679  2.3581e-13, 2.2154e-13, 2.0832e-13, 1.9605e-13, 1.8466e-13, // f11690
1680  1.7408e-13, 1.6425e-13, 1.5511e-13, 1.4661e-13, 1.3869e-13, // f11700
1681  1.3131e-13, 1.2444e-13, 1.1803e-13, 1.1205e-13, 1.0646e-13, // f11710
1682  1.0124e-13, 9.6358e-14, 9.1789e-14, 8.7509e-14, 8.3498e-14, // f11720
1683  7.9735e-14, 7.6202e-14, 7.2882e-14, 6.9760e-14, 6.6822e-14, // f11730
1684  6.4053e-14, 6.1442e-14, 5.8978e-14, 5.6650e-14, 5.4448e-14, // f11740
1685  5.2364e-14, 5.0389e-14, 4.8516e-14, 4.6738e-14, 4.5048e-14, // f11750
1686  4.3441e-14, 4.1911e-14, 4.0453e-14, 3.9063e-14, 3.7735e-14, // f11770
1687  3.6467e-14, 3.5254e-14, 3.4093e-14, 3.2980e-14, 3.1914e-14, // f11780
1688  3.0891e-14, 2.9909e-14, 2.8965e-14, 2.8058e-14, 2.7185e-14, // f11790
1689  2.6344e-14, 2.5535e-14, 2.4755e-14, 2.4002e-14, 2.3276e-14, // f11800
1690  2.2576e-14, 2.1899e-14, 2.1245e-14, 2.0613e-14, 2.0002e-14, // f11810
1691  1.9411e-14, 1.8839e-14, 1.8285e-14, 1.7749e-14, 1.7230e-14, // f11820
1692  1.6727e-14, 1.6240e-14, 1.5768e-14, 1.5310e-14, 1.4867e-14, // f11830
1693  1.4436e-14, 1.4019e-14, 1.3614e-14, 1.3221e-14, 1.2840e-14, // f11840
1694  1.2471e-14, 1.2112e-14, 1.1764e-14, 1.1425e-14, 1.1097e-14, // f11850
1695  1.0779e-14, 1.0469e-14, 1.0169e-14, 9.8775e-15, 9.5943e-15, // f11860
1696  9.3193e-15, 9.0522e-15, 8.7928e-15, 8.5409e-15, 8.2962e-15, // f11880
1697  8.0586e-15, 7.8278e-15, 7.6036e-15, 7.3858e-15, 7.1742e-15, // f11890
1698  6.9687e-15, 6.7691e-15, 6.5752e-15, 6.3868e-15, 6.2038e-15, // f11900
1699  6.0260e-15, 5.8533e-15, 5.6856e-15, 5.5226e-15, 5.3642e-15, // f11910
1700  5.2104e-15, 5.0610e-15, 4.9158e-15, 4.7748e-15, 4.6378e-15, // f11920
1701  4.5047e-15, 4.3753e-15, 4.2497e-15, 4.1277e-15, 4.0091e-15, // f11930
1702  3.8939e-15, 3.7820e-15, 3.6733e-15, 3.5677e-15, 3.4651e-15, // f11940
1703  3.3655e-15, 3.2686e-15, 3.1746e-15, 3.0832e-15, 2.9944e-15, // f11950
1704  2.9082e-15, 2.8244e-15, 2.7431e-15, 2.6640e-15, 2.5872e-15, // f11960
1705  2.5126e-15, 2.4401e-15, 2.3697e-15, 2.3014e-15, 2.2349e-15, // f11970
1706  2.1704e-15, 2.1077e-15, 2.0468e-15, 1.9877e-15, 1.9302e-15, // f11990
1707  1.8744e-15, 1.8202e-15, 1.7675e-15, 1.7164e-15, 1.6667e-15, // f12000
1708  1.6184e-15, 1.5716e-15, 1.5260e-15, 1.4818e-15, 1.4389e-15, // f12010
1709  1.3971e-15, 1.3566e-15, 1.3172e-15, 1.2790e-15, 1.2419e-15, // f12020
1710  1.2058e-15, 1.1708e-15, 1.1368e-15, 1.1037e-15, 1.0716e-15, // f12030
1711  1.0405e-15, 1.0102e-15, 9.8079e-16, 9.5224e-16, 9.2451e-16, // f12040
1712  8.9758e-16, 8.7142e-16, 8.4602e-16, 8.2136e-16, 7.9740e-16, // f12050
1713  7.7414e-16, 7.5154e-16, 7.2961e-16, 7.0830e-16, 6.8761e-16, // f12060
1714  6.6752e-16, 6.4801e-16, 6.2906e-16, 6.1066e-16, 5.9280e-16, // f12070
1715  5.7545e-16, 5.5860e-16, 5.4224e-16, 5.2636e-16, 5.1094e-16, // f12080
1716  4.9596e-16};
1717 
1718 /*
1719  --------------------------- CKD_MT_1.00 -------------------------
1720 
1721  11 February 2003
1722 
1723  Release Notes for MT_CKD_1.00
1724 
1725  Prepared by S. A. Clough,
1726  AER Inc.,
1727  131 Harwell Avenue
1728  Lexington, MA 02421
1729  clough@aer.com
1730 
1731  This is the initial release of the MT_CKD water vapor continuum and
1732  represents the first recomputation of the entire self and foreign
1733  broadened continuum since the original model was developed in the
1734  1980s. This version of the continuum is implemented in the line-by-line
1735  model LBLRTM v7.01 and will be utilized in all related AER Radiative
1736  Transfer models.
1737 
1738  further information can be found under
1739  http://www.rtweb.aer.com/continuum_frame.html
1740 
1741  Transformation from original F77 code to C/C++ by
1742  T. Kuhn, iup Bremen, August 2003
1743 
1744  --------------------------- CKD_MT_1.00 -------------------------
1745  */
1746 
1747 // H2O self continuum parameters at T=296 K
1748 // date of last update: 11/18/02
1749 // units of (CM**3/MOL)*1.E-20
1753 const int SL296_ckd_mt_100_npt = 2003;
1755  0.000e0, 1.720e-01, 1.695e-01, 1.700e-01, 1.695e-01, 1.720e-01, 1.680e-01,
1756  1.687e-01, 1.624e-01, 1.606e-01, 1.508e-01, 1.447e-01, 1.344e-01, 1.214e-01,
1757  1.133e-01, 1.009e-01, 9.217e-02, 8.297e-02, 6.989e-02, 6.513e-02, 5.469e-02,
1758  5.056e-02, 4.417e-02, 3.779e-02, 3.484e-02, 2.994e-02, 2.720e-02, 2.325e-02,
1759  2.063e-02, 1.818e-02, 1.592e-02, 1.405e-02, 1.251e-02, 1.080e-02, 9.647e-03,
1760  8.424e-03, 7.519e-03, 6.555e-03, 5.880e-03, 5.136e-03, 4.511e-03, 3.989e-03,
1761  3.509e-03, 3.114e-03, 2.740e-03, 2.446e-03, 2.144e-03, 1.895e-03, 1.676e-03,
1762  1.486e-03, 1.312e-03, 1.164e-03, 1.031e-03, 9.129e-04, 8.106e-04, 7.213e-04,
1763  6.400e-04, 5.687e-04, 5.063e-04, 4.511e-04, 4.029e-04, 3.596e-04, 3.220e-04,
1764  2.889e-04, 2.597e-04, 2.337e-04, 2.108e-04, 1.907e-04, 1.728e-04, 1.570e-04,
1765  1.430e-04, 1.305e-04, 1.195e-04, 1.097e-04, 1.009e-04, 9.307e-05, 8.604e-05,
1766  7.971e-05, 7.407e-05, 6.896e-05, 6.433e-05, 6.013e-05, 5.631e-05, 5.283e-05,
1767  4.963e-05, 4.669e-05, 4.398e-05, 4.148e-05, 3.917e-05, 3.702e-05, 3.502e-05,
1768  3.316e-05, 3.142e-05, 2.978e-05, 2.825e-05, 2.681e-05, 2.546e-05, 2.419e-05,
1769  2.299e-05, 2.186e-05, 2.079e-05, 1.979e-05, 1.884e-05, 1.795e-05, 1.711e-05,
1770  1.633e-05, 1.559e-05, 1.490e-05, 1.426e-05, 1.367e-05, 1.312e-05, 1.263e-05,
1771  1.218e-05, 1.178e-05, 1.143e-05, 1.112e-05, 1.088e-05, 1.070e-05, 1.057e-05,
1772  1.050e-05, 1.051e-05, 1.059e-05, 1.076e-05, 1.100e-05, 1.133e-05, 1.180e-05,
1773  1.237e-05, 1.308e-05, 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, 3.745e-05, 4.152e-05,
1775  4.813e-05, 5.477e-05, 6.203e-05, 7.331e-05, 8.056e-05, 9.882e-05, 1.050e-04,
1776  1.210e-04, 1.341e-04, 1.572e-04, 1.698e-04, 1.968e-04, 2.175e-04, 2.431e-04,
1777  2.735e-04, 2.867e-04, 3.190e-04, 3.371e-04, 3.554e-04, 3.726e-04, 3.837e-04,
1778  3.878e-04, 3.864e-04, 3.858e-04, 3.841e-04, 3.852e-04, 3.815e-04, 3.762e-04,
1779  3.618e-04, 3.579e-04, 3.450e-04, 3.202e-04, 3.018e-04, 2.785e-04, 2.602e-04,
1780  2.416e-04, 2.097e-04, 1.939e-04, 1.689e-04, 1.498e-04, 1.308e-04, 1.170e-04,
1781  1.011e-04, 9.237e-05, 7.909e-05, 7.006e-05, 6.112e-05, 5.401e-05, 4.914e-05,
1782  4.266e-05, 3.963e-05, 3.316e-05, 3.037e-05, 2.598e-05, 2.294e-05, 2.066e-05,
1783  1.813e-05, 1.583e-05, 1.423e-05, 1.247e-05, 1.116e-05, 9.760e-06, 8.596e-06,
1784  7.720e-06, 6.825e-06, 6.108e-06, 5.366e-06, 4.733e-06, 4.229e-06, 3.731e-06,
1785  3.346e-06, 2.972e-06, 2.628e-06, 2.356e-06, 2.102e-06, 1.878e-06, 1.678e-06,
1786  1.507e-06, 1.348e-06, 1.210e-06, 1.089e-06, 9.806e-07, 8.857e-07, 8.004e-07,
1787  7.261e-07, 6.599e-07, 6.005e-07, 5.479e-07, 5.011e-07, 4.595e-07, 4.219e-07,
1788  3.885e-07, 3.583e-07, 3.314e-07, 3.071e-07, 2.852e-07, 2.654e-07, 2.474e-07,
1789  2.311e-07, 2.162e-07, 2.026e-07, 1.902e-07, 1.788e-07, 1.683e-07, 1.587e-07,
1790  1.497e-07, 1.415e-07, 1.338e-07, 1.266e-07, 1.200e-07, 1.138e-07, 1.080e-07,
1791  1.027e-07, 9.764e-08, 9.296e-08, 8.862e-08, 8.458e-08, 8.087e-08, 7.744e-08,
1792  7.429e-08, 7.145e-08, 6.893e-08, 6.664e-08, 6.468e-08, 6.322e-08, 6.162e-08,
1793  6.070e-08, 5.992e-08, 5.913e-08, 5.841e-08, 5.796e-08, 5.757e-08, 5.746e-08,
1794  5.731e-08, 5.679e-08, 5.577e-08, 5.671e-08, 5.656e-08, 5.594e-08, 5.593e-08,
1795  5.602e-08, 5.620e-08, 5.693e-08, 5.725e-08, 5.858e-08, 6.037e-08, 6.249e-08,
1796  6.535e-08, 6.899e-08, 7.356e-08, 7.918e-08, 8.618e-08, 9.385e-08, 1.039e-07,
1797  1.158e-07, 1.290e-07, 1.437e-07, 1.650e-07, 1.871e-07, 2.121e-07, 2.427e-07,
1798  2.773e-07, 3.247e-07, 3.677e-07, 4.037e-07, 4.776e-07, 5.101e-07, 6.214e-07,
1799  6.936e-07, 7.581e-07, 8.486e-07, 9.355e-07, 9.942e-07, 1.063e-06, 1.123e-06,
1800  1.191e-06, 1.215e-06, 1.247e-06, 1.260e-06, 1.271e-06, 1.284e-06, 1.317e-06,
1801  1.323e-06, 1.349e-06, 1.353e-06, 1.362e-06, 1.344e-06, 1.329e-06, 1.336e-06,
1802  1.327e-06, 1.325e-06, 1.359e-06, 1.374e-06, 1.415e-06, 1.462e-06, 1.526e-06,
1803  1.619e-06, 1.735e-06, 1.863e-06, 2.034e-06, 2.265e-06, 2.482e-06, 2.756e-06,
1804  3.103e-06, 3.466e-06, 3.832e-06, 4.378e-06, 4.913e-06, 5.651e-06, 6.311e-06,
1805  7.169e-06, 8.057e-06, 9.253e-06, 1.047e-05, 1.212e-05, 1.360e-05, 1.569e-05,
1806  1.776e-05, 2.020e-05, 2.281e-05, 2.683e-05, 2.994e-05, 3.488e-05, 3.896e-05,
1807  4.499e-05, 5.175e-05, 6.035e-05, 6.340e-05, 7.281e-05, 7.923e-05, 8.348e-05,
1808  9.631e-05, 1.044e-04, 1.102e-04, 1.176e-04, 1.244e-04, 1.283e-04, 1.326e-04,
1809  1.400e-04, 1.395e-04, 1.387e-04, 1.363e-04, 1.314e-04, 1.241e-04, 1.228e-04,
1810  1.148e-04, 1.086e-04, 1.018e-04, 8.890e-05, 8.316e-05, 7.292e-05, 6.452e-05,
1811  5.625e-05, 5.045e-05, 4.380e-05, 3.762e-05, 3.290e-05, 2.836e-05, 2.485e-05,
1812  2.168e-05, 1.895e-05, 1.659e-05, 1.453e-05, 1.282e-05, 1.132e-05, 1.001e-05,
1813  8.836e-06, 7.804e-06, 6.922e-06, 6.116e-06, 5.429e-06, 4.824e-06, 4.278e-06,
1814  3.788e-06, 3.371e-06, 2.985e-06, 2.649e-06, 2.357e-06, 2.090e-06, 1.858e-06,
1815  1.647e-06, 1.462e-06, 1.299e-06, 1.155e-06, 1.028e-06, 9.142e-07, 8.132e-07,
1816  7.246e-07, 6.451e-07, 5.764e-07, 5.151e-07, 4.603e-07, 4.121e-07, 3.694e-07,
1817  3.318e-07, 2.985e-07, 2.690e-07, 2.428e-07, 2.197e-07, 1.992e-07, 1.810e-07,
1818  1.649e-07, 1.506e-07, 1.378e-07, 1.265e-07, 1.163e-07, 1.073e-07, 9.918e-08,
1819  9.191e-08, 8.538e-08, 7.949e-08, 7.419e-08, 6.940e-08, 6.508e-08, 6.114e-08,
1820  5.761e-08, 5.437e-08, 5.146e-08, 4.890e-08, 4.636e-08, 4.406e-08, 4.201e-08,
1821  4.015e-08, 3.840e-08, 3.661e-08, 3.510e-08, 3.377e-08, 3.242e-08, 3.130e-08,
1822  3.015e-08, 2.918e-08, 2.830e-08, 2.758e-08, 2.707e-08, 2.656e-08, 2.619e-08,
1823  2.609e-08, 2.615e-08, 2.630e-08, 2.675e-08, 2.745e-08, 2.842e-08, 2.966e-08,
1824  3.125e-08, 3.318e-08, 3.565e-08, 3.850e-08, 4.191e-08, 4.590e-08, 5.059e-08,
1825  5.607e-08, 6.239e-08, 6.958e-08, 7.796e-08, 8.773e-08, 9.880e-08, 1.114e-07,
1826  1.258e-07, 1.422e-07, 1.610e-07, 1.822e-07, 2.060e-07, 2.337e-07, 2.645e-07,
1827  2.996e-07, 3.393e-07, 3.843e-07, 4.363e-07, 4.935e-07, 5.607e-07, 6.363e-07,
1828  7.242e-07, 8.230e-07, 9.411e-07, 1.071e-06, 1.232e-06, 1.402e-06, 1.600e-06,
1829  1.820e-06, 2.128e-06, 2.386e-06, 2.781e-06, 3.242e-06, 3.653e-06, 4.323e-06,
1830  4.747e-06, 5.321e-06, 5.919e-06, 6.681e-06, 7.101e-06, 7.983e-06, 8.342e-06,
1831  8.741e-06, 9.431e-06, 9.952e-06, 1.026e-05, 1.055e-05, 1.095e-05, 1.095e-05,
1832  1.087e-05, 1.056e-05, 1.026e-05, 9.715e-06, 9.252e-06, 8.452e-06, 7.958e-06,
1833  7.268e-06, 6.295e-06, 6.003e-06, 5.000e-06, 4.591e-06, 3.983e-06, 3.479e-06,
1834  3.058e-06, 2.667e-06, 2.293e-06, 1.995e-06, 1.747e-06, 1.517e-06, 1.335e-06,
1835  1.165e-06, 1.028e-06, 9.007e-07, 7.956e-07, 7.015e-07, 6.192e-07, 5.491e-07,
1836  4.859e-07, 4.297e-07, 3.799e-07, 3.380e-07, 3.002e-07, 2.659e-07, 2.366e-07,
1837  2.103e-07, 1.861e-07, 1.655e-07, 1.469e-07, 1.309e-07, 1.162e-07, 1.032e-07,
1838  9.198e-08, 8.181e-08, 7.294e-08, 6.516e-08, 5.787e-08, 5.163e-08, 4.612e-08,
1839  4.119e-08, 3.695e-08, 3.308e-08, 2.976e-08, 2.670e-08, 2.407e-08, 2.171e-08,
1840  1.965e-08, 1.780e-08, 1.617e-08, 1.470e-08, 1.341e-08, 1.227e-08, 1.125e-08,
1841  1.033e-08, 9.524e-09, 8.797e-09, 8.162e-09, 7.565e-09, 7.040e-09, 6.560e-09,
1842  6.129e-09, 5.733e-09, 5.376e-09, 5.043e-09, 4.750e-09, 4.466e-09, 4.211e-09,
1843  3.977e-09, 3.759e-09, 3.558e-09, 3.373e-09, 3.201e-09, 3.043e-09, 2.895e-09,
1844  2.760e-09, 2.635e-09, 2.518e-09, 2.411e-09, 2.314e-09, 2.230e-09, 2.151e-09,
1845  2.087e-09, 2.035e-09, 1.988e-09, 1.946e-09, 1.927e-09, 1.916e-09, 1.916e-09,
1846  1.933e-09, 1.966e-09, 2.018e-09, 2.090e-09, 2.182e-09, 2.299e-09, 2.442e-09,
1847  2.623e-09, 2.832e-09, 3.079e-09, 3.368e-09, 3.714e-09, 4.104e-09, 4.567e-09,
1848  5.091e-09, 5.701e-09, 6.398e-09, 7.194e-09, 8.127e-09, 9.141e-09, 1.035e-08,
1849  1.177e-08, 1.338e-08, 1.508e-08, 1.711e-08, 1.955e-08, 2.216e-08, 2.534e-08,
1850  2.871e-08, 3.291e-08, 3.711e-08, 4.285e-08, 4.868e-08, 5.509e-08, 6.276e-08,
1851  7.262e-08, 8.252e-08, 9.400e-08, 1.064e-07, 1.247e-07, 1.411e-07, 1.626e-07,
1852  1.827e-07, 2.044e-07, 2.284e-07, 2.452e-07, 2.854e-07, 3.026e-07, 3.278e-07,
1853  3.474e-07, 3.693e-07, 3.930e-07, 4.104e-07, 4.220e-07, 4.439e-07, 4.545e-07,
1854  4.778e-07, 4.812e-07, 5.018e-07, 4.899e-07, 5.075e-07, 5.073e-07, 5.171e-07,
1855  5.131e-07, 5.250e-07, 5.617e-07, 5.846e-07, 6.239e-07, 6.696e-07, 7.398e-07,
1856  8.073e-07, 9.150e-07, 1.009e-06, 1.116e-06, 1.264e-06, 1.439e-06, 1.644e-06,
1857  1.856e-06, 2.147e-06, 2.317e-06, 2.713e-06, 2.882e-06, 2.990e-06, 3.489e-06,
1858  3.581e-06, 4.033e-06, 4.260e-06, 4.543e-06, 4.840e-06, 4.826e-06, 5.013e-06,
1859  5.252e-06, 5.277e-06, 5.306e-06, 5.236e-06, 5.123e-06, 5.171e-06, 4.843e-06,
1860  4.615e-06, 4.385e-06, 3.970e-06, 3.693e-06, 3.231e-06, 2.915e-06, 2.495e-06,
1861  2.144e-06, 1.910e-06, 1.639e-06, 1.417e-06, 1.226e-06, 1.065e-06, 9.290e-07,
1862  8.142e-07, 7.161e-07, 6.318e-07, 5.581e-07, 4.943e-07, 4.376e-07, 3.884e-07,
1863  3.449e-07, 3.060e-07, 2.712e-07, 2.412e-07, 2.139e-07, 1.903e-07, 1.689e-07,
1864  1.499e-07, 1.331e-07, 1.183e-07, 1.050e-07, 9.362e-08, 8.306e-08, 7.403e-08,
1865  6.578e-08, 5.853e-08, 5.216e-08, 4.632e-08, 4.127e-08, 3.678e-08, 3.279e-08,
1866  2.923e-08, 2.612e-08, 2.339e-08, 2.094e-08, 1.877e-08, 1.686e-08, 1.516e-08,
1867  1.366e-08, 1.234e-08, 1.114e-08, 1.012e-08, 9.182e-09, 8.362e-09, 7.634e-09,
1868  6.981e-09, 6.406e-09, 5.888e-09, 5.428e-09, 5.021e-09, 4.650e-09, 4.326e-09,
1869  4.033e-09, 3.770e-09, 3.536e-09, 3.327e-09, 3.141e-09, 2.974e-09, 2.825e-09,
1870  2.697e-09, 2.584e-09, 2.488e-09, 2.406e-09, 2.340e-09, 2.292e-09, 2.259e-09,
1871  2.244e-09, 2.243e-09, 2.272e-09, 2.310e-09, 2.378e-09, 2.454e-09, 2.618e-09,
1872  2.672e-09, 2.831e-09, 3.050e-09, 3.225e-09, 3.425e-09, 3.677e-09, 3.968e-09,
1873  4.221e-09, 4.639e-09, 4.960e-09, 5.359e-09, 5.649e-09, 6.230e-09, 6.716e-09,
1874  7.218e-09, 7.746e-09, 7.988e-09, 8.627e-09, 8.999e-09, 9.442e-09, 9.820e-09,
1875  1.015e-08, 1.060e-08, 1.079e-08, 1.109e-08, 1.137e-08, 1.186e-08, 1.180e-08,
1876  1.187e-08, 1.194e-08, 1.192e-08, 1.224e-08, 1.245e-08, 1.246e-08, 1.318e-08,
1877  1.377e-08, 1.471e-08, 1.582e-08, 1.713e-08, 1.853e-08, 2.063e-08, 2.270e-08,
1878  2.567e-08, 2.891e-08, 3.264e-08, 3.744e-08, 4.286e-08, 4.915e-08, 5.623e-08,
1879  6.336e-08, 7.293e-08, 8.309e-08, 9.319e-08, 1.091e-07, 1.243e-07, 1.348e-07,
1880  1.449e-07, 1.620e-07, 1.846e-07, 1.937e-07, 2.040e-07, 2.179e-07, 2.298e-07,
1881  2.433e-07, 2.439e-07, 2.464e-07, 2.611e-07, 2.617e-07, 2.582e-07, 2.453e-07,
1882  2.401e-07, 2.349e-07, 2.203e-07, 2.066e-07, 1.939e-07, 1.780e-07, 1.558e-07,
1883  1.391e-07, 1.203e-07, 1.048e-07, 9.464e-08, 8.306e-08, 7.239e-08, 6.317e-08,
1884  5.520e-08, 4.847e-08, 4.282e-08, 3.796e-08, 3.377e-08, 2.996e-08, 2.678e-08,
1885  2.400e-08, 2.134e-08, 1.904e-08, 1.705e-08, 1.523e-08, 1.350e-08, 1.204e-08,
1886  1.070e-08, 9.408e-09, 8.476e-09, 7.470e-09, 6.679e-09, 5.929e-09, 5.267e-09,
1887  4.711e-09, 4.172e-09, 3.761e-09, 3.288e-09, 2.929e-09, 2.609e-09, 2.315e-09,
1888  2.042e-09, 1.844e-09, 1.640e-09, 1.470e-09, 1.310e-09, 1.176e-09, 1.049e-09,
1889  9.377e-10, 8.462e-10, 7.616e-10, 6.854e-10, 6.191e-10, 5.596e-10, 5.078e-10,
1890  4.611e-10, 4.197e-10, 3.830e-10, 3.505e-10, 3.215e-10, 2.956e-10, 2.726e-10,
1891  2.521e-10, 2.338e-10, 2.173e-10, 2.026e-10, 1.895e-10, 1.777e-10, 1.672e-10,
1892  1.579e-10, 1.496e-10, 1.423e-10, 1.358e-10, 1.302e-10, 1.254e-10, 1.216e-10,
1893  1.187e-10, 1.163e-10, 1.147e-10, 1.145e-10, 1.150e-10, 1.170e-10, 1.192e-10,
1894  1.250e-10, 1.298e-10, 1.345e-10, 1.405e-10, 1.538e-10, 1.648e-10, 1.721e-10,
1895  1.872e-10, 1.968e-10, 2.089e-10, 2.172e-10, 2.317e-10, 2.389e-10, 2.503e-10,
1896  2.585e-10, 2.686e-10, 2.800e-10, 2.895e-10, 3.019e-10, 3.037e-10, 3.076e-10,
1897  3.146e-10, 3.198e-10, 3.332e-10, 3.397e-10, 3.540e-10, 3.667e-10, 3.895e-10,
1898  4.071e-10, 4.565e-10, 4.983e-10, 5.439e-10, 5.968e-10, 6.676e-10, 7.456e-10,
1899  8.405e-10, 9.478e-10, 1.064e-09, 1.218e-09, 1.386e-09, 1.581e-09, 1.787e-09,
1900  2.032e-09, 2.347e-09, 2.677e-09, 3.008e-09, 3.544e-09, 4.056e-09, 4.687e-09,
1901  5.331e-09, 6.227e-09, 6.854e-09, 8.139e-09, 8.945e-09, 9.865e-09, 1.125e-08,
1902  1.178e-08, 1.364e-08, 1.436e-08, 1.540e-08, 1.672e-08, 1.793e-08, 1.906e-08,
1903  2.036e-08, 2.144e-08, 2.292e-08, 2.371e-08, 2.493e-08, 2.606e-08, 2.706e-08,
1904  2.866e-08, 3.036e-08, 3.136e-08, 3.405e-08, 3.665e-08, 3.837e-08, 4.229e-08,
1905  4.748e-08, 5.320e-08, 5.763e-08, 6.677e-08, 7.216e-08, 7.716e-08, 8.958e-08,
1906  9.419e-08, 1.036e-07, 1.108e-07, 1.189e-07, 1.246e-07, 1.348e-07, 1.310e-07,
1907  1.361e-07, 1.364e-07, 1.363e-07, 1.343e-07, 1.293e-07, 1.254e-07, 1.235e-07,
1908  1.158e-07, 1.107e-07, 9.961e-08, 9.011e-08, 7.910e-08, 6.916e-08, 6.338e-08,
1909  5.564e-08, 4.827e-08, 4.198e-08, 3.695e-08, 3.276e-08, 2.929e-08, 2.633e-08,
1910  2.391e-08, 2.192e-08, 2.021e-08, 1.890e-08, 1.772e-08, 1.667e-08, 1.603e-08,
1911  1.547e-08, 1.537e-08, 1.492e-08, 1.515e-08, 1.479e-08, 1.450e-08, 1.513e-08,
1912  1.495e-08, 1.529e-08, 1.565e-08, 1.564e-08, 1.553e-08, 1.569e-08, 1.584e-08,
1913  1.570e-08, 1.538e-08, 1.513e-08, 1.472e-08, 1.425e-08, 1.349e-08, 1.328e-08,
1914  1.249e-08, 1.170e-08, 1.077e-08, 9.514e-09, 8.614e-09, 7.460e-09, 6.621e-09,
1915  5.775e-09, 5.006e-09, 4.308e-09, 3.747e-09, 3.240e-09, 2.840e-09, 2.481e-09,
1916  2.184e-09, 1.923e-09, 1.710e-09, 1.504e-09, 1.334e-09, 1.187e-09, 1.053e-09,
1917  9.367e-10, 8.306e-10, 7.419e-10, 6.630e-10, 5.918e-10, 5.277e-10, 4.717e-10,
1918  4.222e-10, 3.783e-10, 3.390e-10, 3.036e-10, 2.729e-10, 2.455e-10, 2.211e-10,
1919  1.995e-10, 1.804e-10, 1.635e-10, 1.485e-10, 1.355e-10, 1.240e-10, 1.139e-10,
1920  1.051e-10, 9.757e-11, 9.114e-11, 8.577e-11, 8.139e-11, 7.792e-11, 7.520e-11,
1921  7.390e-11, 7.311e-11, 7.277e-11, 7.482e-11, 7.698e-11, 8.162e-11, 8.517e-11,
1922  8.968e-11, 9.905e-11, 1.075e-10, 1.187e-10, 1.291e-10, 1.426e-10, 1.573e-10,
1923  1.734e-10, 1.905e-10, 2.097e-10, 2.280e-10, 2.473e-10, 2.718e-10, 2.922e-10,
1924  3.128e-10, 3.361e-10, 3.641e-10, 3.910e-10, 4.196e-10, 4.501e-10, 4.932e-10,
1925  5.258e-10, 5.755e-10, 6.253e-10, 6.664e-10, 7.344e-10, 7.985e-10, 8.877e-10,
1926  1.005e-09, 1.118e-09, 1.251e-09, 1.428e-09, 1.610e-09, 1.888e-09, 2.077e-09,
1927  2.331e-09, 2.751e-09, 3.061e-09, 3.522e-09, 3.805e-09, 4.181e-09, 4.575e-09,
1928  5.167e-09, 5.634e-09, 6.007e-09, 6.501e-09, 6.829e-09, 7.211e-09, 7.262e-09,
1929  7.696e-09, 7.832e-09, 7.799e-09, 7.651e-09, 7.304e-09, 7.150e-09, 6.977e-09,
1930  6.603e-09, 6.209e-09, 5.690e-09, 5.432e-09, 4.764e-09, 4.189e-09, 3.640e-09,
1931  3.203e-09, 2.848e-09, 2.510e-09, 2.194e-09, 1.946e-09, 1.750e-09, 1.567e-09,
1932  1.426e-09, 1.302e-09, 1.197e-09, 1.109e-09, 1.035e-09, 9.719e-10, 9.207e-10,
1933  8.957e-10, 8.578e-10, 8.262e-10, 8.117e-10, 7.987e-10, 7.875e-10, 7.741e-10,
1934  7.762e-10, 7.537e-10, 7.424e-10, 7.474e-10, 7.294e-10, 7.216e-10, 7.233e-10,
1935  7.075e-10, 6.892e-10, 6.618e-10, 6.314e-10, 6.208e-10, 5.689e-10, 5.550e-10,
1936  4.984e-10, 4.600e-10, 4.078e-10, 3.879e-10, 3.459e-10, 2.982e-10, 2.626e-10,
1937  2.329e-10, 1.988e-10, 1.735e-10, 1.487e-10, 1.297e-10, 1.133e-10, 9.943e-11,
1938  8.736e-11, 7.726e-11, 6.836e-11, 6.053e-11, 5.384e-11, 4.789e-11, 4.267e-11,
1939  3.804e-11, 3.398e-11, 3.034e-11, 2.710e-11, 2.425e-11, 2.173e-11, 1.950e-11,
1940  1.752e-11, 1.574e-11, 1.418e-11, 1.278e-11, 1.154e-11, 1.044e-11, 9.463e-12,
1941  8.602e-12, 7.841e-12, 7.171e-12, 6.584e-12, 6.073e-12, 5.631e-12, 5.254e-12,
1942  4.937e-12, 4.679e-12, 4.476e-12, 4.328e-12, 4.233e-12, 4.194e-12, 4.211e-12,
1943  4.286e-12, 4.424e-12, 4.628e-12, 4.906e-12, 5.262e-12, 5.708e-12, 6.254e-12,
1944  6.914e-12, 7.714e-12, 8.677e-12, 9.747e-12, 1.101e-11, 1.256e-11, 1.409e-11,
1945  1.597e-11, 1.807e-11, 2.034e-11, 2.316e-11, 2.622e-11, 2.962e-11, 3.369e-11,
1946  3.819e-11, 4.329e-11, 4.932e-11, 5.589e-11, 6.364e-11, 7.284e-11, 8.236e-11,
1947  9.447e-11, 1.078e-10, 1.229e-10, 1.417e-10, 1.614e-10, 1.843e-10, 2.107e-10,
1948  2.406e-10, 2.728e-10, 3.195e-10, 3.595e-10, 4.153e-10, 4.736e-10, 5.410e-10,
1949  6.088e-10, 6.769e-10, 7.691e-10, 8.545e-10, 9.621e-10, 1.047e-09, 1.161e-09,
1950  1.296e-09, 1.424e-09, 1.576e-09, 1.739e-09, 1.893e-09, 2.080e-09, 2.336e-09,
1951  2.604e-09, 2.760e-09, 3.001e-09, 3.365e-09, 3.550e-09, 3.895e-09, 4.183e-09,
1952  4.614e-09, 4.846e-09, 5.068e-09, 5.427e-09, 5.541e-09, 5.864e-09, 5.997e-09,
1953  5.997e-09, 6.061e-09, 5.944e-09, 5.855e-09, 5.661e-09, 5.523e-09, 5.374e-09,
1954  4.940e-09, 4.688e-09, 4.170e-09, 3.913e-09, 3.423e-09, 2.997e-09, 2.598e-09,
1955  2.253e-09, 1.946e-09, 1.710e-09, 1.507e-09, 1.336e-09, 1.190e-09, 1.068e-09,
1956  9.623e-10, 8.772e-10, 8.007e-10, 7.420e-10, 6.884e-10, 6.483e-10, 6.162e-10,
1957  5.922e-10, 5.688e-10, 5.654e-10, 5.637e-10, 5.701e-10, 5.781e-10, 5.874e-10,
1958  6.268e-10, 6.357e-10, 6.525e-10, 7.137e-10, 7.441e-10, 8.024e-10, 8.485e-10,
1959  9.143e-10, 9.536e-10, 9.717e-10, 1.018e-09, 1.042e-09, 1.054e-09, 1.092e-09,
1960  1.079e-09, 1.064e-09, 1.043e-09, 1.020e-09, 9.687e-10, 9.273e-10, 9.208e-10,
1961  9.068e-10, 7.687e-10, 7.385e-10, 6.595e-10, 5.870e-10, 5.144e-10, 4.417e-10,
1962  3.804e-10, 3.301e-10, 2.866e-10, 2.509e-10, 2.202e-10, 1.947e-10, 1.719e-10,
1963  1.525e-10, 1.361e-10, 1.210e-10, 1.084e-10, 9.800e-11, 8.801e-11, 7.954e-11,
1964  7.124e-11, 6.335e-11, 5.760e-11, 5.132e-11, 4.601e-11, 4.096e-11, 3.657e-11,
1965  3.250e-11, 2.909e-11, 2.587e-11, 2.297e-11, 2.050e-11, 1.828e-11, 1.632e-11,
1966  1.462e-11, 1.314e-11, 1.185e-11, 1.073e-11, 9.760e-12, 8.922e-12, 8.206e-12,
1967  7.602e-12, 7.100e-12, 6.694e-12, 6.378e-12, 6.149e-12, 6.004e-12, 5.941e-12,
1968  5.962e-12, 6.069e-12, 6.265e-12, 6.551e-12, 6.935e-12, 7.457e-12, 8.074e-12,
1969  8.811e-12, 9.852e-12, 1.086e-11, 1.207e-11, 1.361e-11, 1.553e-11, 1.737e-11,
1970  1.930e-11, 2.175e-11, 2.410e-11, 2.706e-11, 3.023e-11, 3.313e-11, 3.657e-11,
1971  4.118e-11, 4.569e-11, 5.025e-11, 5.660e-11, 6.231e-11, 6.881e-11, 7.996e-11,
1972  8.526e-11, 9.694e-11, 1.106e-10, 1.222e-10, 1.355e-10, 1.525e-10, 1.775e-10,
1973  1.924e-10, 2.181e-10, 2.379e-10, 2.662e-10, 2.907e-10, 3.154e-10, 3.366e-10,
1974  3.579e-10, 3.858e-10, 4.046e-10, 4.196e-10, 4.166e-10, 4.457e-10, 4.466e-10,
1975  4.404e-10, 4.337e-10, 4.150e-10, 4.083e-10, 3.910e-10, 3.723e-10, 3.514e-10,
1976  3.303e-10, 2.847e-10, 2.546e-10, 2.230e-10, 1.994e-10, 1.733e-10, 1.488e-10,
1977  1.297e-10, 1.144e-10, 1.004e-10, 8.741e-11, 7.928e-11, 7.034e-11, 6.323e-11,
1978  5.754e-11, 5.250e-11, 4.850e-11, 4.502e-11, 4.286e-11, 4.028e-11, 3.899e-11,
1979  3.824e-11, 3.761e-11, 3.804e-11, 3.839e-11, 3.845e-11, 4.244e-11, 4.382e-11,
1980  4.582e-11, 4.847e-11, 5.209e-11, 5.384e-11, 5.887e-11, 6.371e-11, 6.737e-11,
1981  7.168e-11, 7.415e-11, 7.827e-11, 8.037e-11, 8.120e-11, 8.071e-11, 8.008e-11,
1982  7.851e-11, 7.544e-11, 7.377e-11, 7.173e-11, 6.801e-11, 6.267e-11, 5.727e-11,
1983  5.288e-11, 4.853e-11, 4.082e-11, 3.645e-11, 3.136e-11, 2.672e-11, 2.304e-11,
1984  1.986e-11, 1.725e-11, 1.503e-11, 1.315e-11, 1.153e-11, 1.014e-11, 8.942e-12,
1985  7.901e-12, 6.993e-12, 6.199e-12, 5.502e-12, 4.890e-12, 4.351e-12, 3.878e-12,
1986  3.461e-12, 3.094e-12, 2.771e-12, 2.488e-12, 2.241e-12, 2.025e-12, 1.838e-12,
1987  1.677e-12, 1.541e-12, 1.427e-12, 1.335e-12, 1.262e-12, 1.209e-12, 1.176e-12,
1988  1.161e-12, 1.165e-12, 1.189e-12, 1.234e-12, 1.300e-12, 1.389e-12, 1.503e-12,
1989  1.644e-12, 1.814e-12, 2.017e-12, 2.255e-12, 2.534e-12, 2.858e-12, 3.231e-12,
1990  3.661e-12, 4.153e-12, 4.717e-12, 5.360e-12, 6.094e-12, 6.930e-12, 7.882e-12,
1991  8.966e-12, 1.020e-11, 1.162e-11, 1.324e-11, 1.510e-11, 1.720e-11, 1.965e-11,
1992  2.237e-11, 2.560e-11, 2.927e-11, 3.371e-11, 3.842e-11, 4.429e-11, 5.139e-11,
1993  5.798e-11, 6.697e-11, 7.626e-11, 8.647e-11, 1.022e-10, 1.136e-10, 1.300e-10,
1994  1.481e-10, 1.672e-10, 1.871e-10, 2.126e-10, 2.357e-10, 2.583e-10, 2.997e-10,
1995  3.289e-10, 3.702e-10, 4.012e-10, 4.319e-10, 4.527e-10, 5.001e-10, 5.448e-10,
1996  5.611e-10, 5.760e-10, 5.965e-10, 6.079e-10, 6.207e-10, 6.276e-10, 6.222e-10,
1997  6.137e-10, 6.000e-10, 5.814e-10, 5.393e-10, 5.350e-10, 4.947e-10, 4.629e-10,
1998  4.117e-10, 3.712e-10, 3.372e-10, 2.923e-10, 2.550e-10, 2.232e-10, 1.929e-10,
1999  1.679e-10, 1.460e-10, 1.289e-10, 1.130e-10, 9.953e-11, 8.763e-11, 7.760e-11,
2000  6.900e-11, 6.160e-11, 5.525e-11, 4.958e-11, 4.489e-11, 4.072e-11, 3.728e-11,
2001  3.438e-11, 3.205e-11, 3.006e-11, 2.848e-11, 2.766e-11, 2.688e-11, 2.664e-11,
2002  2.670e-11, 2.696e-11, 2.786e-11, 2.861e-11, 3.009e-11, 3.178e-11, 3.389e-11,
2003  3.587e-11, 3.819e-11, 4.054e-11, 4.417e-11, 4.703e-11, 5.137e-11, 5.460e-11,
2004  6.055e-11, 6.333e-11, 6.773e-11, 7.219e-11, 7.717e-11, 8.131e-11, 8.491e-11,
2005  8.574e-11, 9.010e-11, 9.017e-11, 8.999e-11, 8.959e-11, 8.838e-11, 8.579e-11,
2006  8.162e-11, 8.098e-11, 7.472e-11, 7.108e-11, 6.559e-11, 5.994e-11, 5.172e-11,
2007  4.424e-11, 3.951e-11, 3.340e-11, 2.902e-11, 2.541e-11, 2.215e-11, 1.945e-11,
2008  1.716e-11, 1.503e-11, 1.339e-11, 1.185e-11, 1.050e-11, 9.336e-12, 8.307e-12,
2009  7.312e-12, 6.550e-12, 5.836e-12, 5.178e-12, 4.600e-12, 4.086e-12, 3.639e-12,
2010  3.247e-12, 2.904e-12, 2.604e-12, 2.341e-12, 2.112e-12, 1.914e-12, 1.744e-12,
2011  1.598e-12, 1.476e-12, 1.374e-12, 1.293e-12, 1.230e-12, 1.185e-12, 1.158e-12,
2012  1.147e-12, 1.154e-12, 1.177e-12, 1.219e-12, 1.280e-12, 1.360e-12, 1.463e-12,
2013  1.591e-12, 1.750e-12, 1.940e-12, 2.156e-12, 2.430e-12, 2.748e-12, 3.052e-12,
2014  3.533e-12, 3.967e-12, 4.471e-12, 5.041e-12, 5.860e-12, 6.664e-12, 7.522e-12,
2015  8.342e-12, 9.412e-12, 1.072e-11, 1.213e-11, 1.343e-11, 1.496e-11, 1.664e-11,
2016  1.822e-11, 2.029e-11, 2.233e-11, 2.457e-11, 2.709e-11, 2.928e-11, 3.115e-11,
2017  3.356e-11, 3.592e-11, 3.818e-11, 3.936e-11, 4.061e-11, 4.149e-11, 4.299e-11,
2018  4.223e-11, 4.251e-11, 4.287e-11, 4.177e-11, 4.094e-11, 3.942e-11, 3.772e-11,
2019  3.614e-11, 3.394e-11, 3.222e-11, 2.791e-11, 2.665e-11, 2.309e-11, 2.032e-11,
2020  1.740e-11, 1.535e-11, 1.323e-11, 1.151e-11, 9.803e-12, 8.650e-12, 7.540e-12,
2021  6.619e-12, 5.832e-12, 5.113e-12, 4.503e-12, 3.975e-12, 3.520e-12, 3.112e-12,
2022  2.797e-12, 2.500e-12, 2.240e-12, 2.013e-12, 1.819e-12, 1.653e-12, 1.513e-12,
2023  1.395e-12, 1.299e-12, 1.225e-12, 1.168e-12, 1.124e-12, 1.148e-12, 1.107e-12,
2024  1.128e-12, 1.169e-12, 1.233e-12, 1.307e-12, 1.359e-12, 1.543e-12, 1.686e-12,
2025  1.794e-12, 2.028e-12, 2.210e-12, 2.441e-12, 2.653e-12, 2.828e-12, 3.093e-12,
2026  3.280e-12, 3.551e-12, 3.677e-12, 3.803e-12, 3.844e-12, 4.068e-12, 4.093e-12,
2027  4.002e-12, 3.904e-12, 3.624e-12, 3.633e-12, 3.622e-12, 3.443e-12, 3.184e-12,
2028  2.934e-12, 2.476e-12, 2.212e-12, 1.867e-12, 1.594e-12, 1.370e-12, 1.192e-12,
2029  1.045e-12, 9.211e-13, 8.170e-13, 7.290e-13, 6.550e-13, 5.929e-13, 5.415e-13,
2030  4.995e-13, 4.661e-13, 4.406e-13, 4.225e-13, 4.116e-13, 4.075e-13, 4.102e-13,
2031  4.198e-13, 4.365e-13, 4.606e-13, 4.925e-13, 5.326e-13, 5.818e-13, 6.407e-13,
2032  7.104e-13, 7.920e-13, 8.868e-13, 9.964e-13, 1.123e-12, 1.268e-12, 1.434e-12,
2033  1.626e-12, 1.848e-12, 2.107e-12, 2.422e-12, 2.772e-12, 3.145e-12, 3.704e-12,
2034  4.270e-12, 4.721e-12, 5.361e-12, 6.083e-12, 7.095e-12, 7.968e-12, 9.228e-12,
2035  1.048e-11, 1.187e-11, 1.336e-11, 1.577e-11, 1.772e-11, 2.017e-11, 2.250e-11,
2036  2.630e-11, 2.911e-11, 3.356e-11, 3.820e-11, 4.173e-11, 4.811e-11, 5.254e-11,
2037  5.839e-11, 6.187e-11, 6.805e-11, 7.118e-11, 7.369e-11, 7.664e-11, 7.794e-11,
2038  7.947e-11, 8.036e-11, 7.954e-11, 7.849e-11, 7.518e-11, 7.462e-11, 6.926e-11,
2039  6.531e-11, 6.197e-11, 5.421e-11, 4.777e-11, 4.111e-11, 3.679e-11, 3.166e-11,
2040  2.786e-11, 2.436e-11, 2.144e-11, 1.859e-11, 1.628e-11, 1.414e-11, 1.237e-11,
2041  1.093e-11, 9.558e-12};
2042 
2043 // H2O self continuum parameters at T=260 K
2044 // date of last update: 11/18/02
2045 // units of (CM**3/MOL)*1.E-20
2049 const int SL260_ckd_mt_100_npt = 2003;
2051  0.000e0, 2.749e-01, 2.732e-01, 2.752e-01, 2.732e-01, 2.749e-01, 2.676e-01,
2052  2.667e-01, 2.545e-01, 2.497e-01, 2.327e-01, 2.218e-01, 2.036e-01, 1.825e-01,
2053  1.694e-01, 1.497e-01, 1.353e-01, 1.210e-01, 1.014e-01, 9.405e-02, 7.848e-02,
2054  7.195e-02, 6.246e-02, 5.306e-02, 4.853e-02, 4.138e-02, 3.735e-02, 3.171e-02,
2055  2.785e-02, 2.431e-02, 2.111e-02, 1.845e-02, 1.640e-02, 1.405e-02, 1.255e-02,
2056  1.098e-02, 9.797e-03, 8.646e-03, 7.779e-03, 6.898e-03, 6.099e-03, 5.453e-03,
2057  4.909e-03, 4.413e-03, 3.959e-03, 3.581e-03, 3.199e-03, 2.871e-03, 2.583e-03,
2058  2.330e-03, 2.086e-03, 1.874e-03, 1.684e-03, 1.512e-03, 1.361e-03, 1.225e-03,
2059  1.100e-03, 9.890e-04, 8.916e-04, 8.039e-04, 7.256e-04, 6.545e-04, 5.918e-04,
2060  5.359e-04, 4.867e-04, 4.426e-04, 4.033e-04, 3.682e-04, 3.366e-04, 3.085e-04,
2061  2.833e-04, 2.605e-04, 2.403e-04, 2.221e-04, 2.055e-04, 1.908e-04, 1.774e-04,
2062  1.653e-04, 1.544e-04, 1.443e-04, 1.351e-04, 1.267e-04, 1.190e-04, 1.119e-04,
2063  1.053e-04, 9.922e-05, 9.355e-05, 8.831e-05, 8.339e-05, 7.878e-05, 7.449e-05,
2064  7.043e-05, 6.664e-05, 6.307e-05, 5.969e-05, 5.654e-05, 5.357e-05, 5.075e-05,
2065  4.810e-05, 4.560e-05, 4.322e-05, 4.102e-05, 3.892e-05, 3.696e-05, 3.511e-05,
2066  3.339e-05, 3.177e-05, 3.026e-05, 2.886e-05, 2.756e-05, 2.636e-05, 2.527e-05,
2067  2.427e-05, 2.337e-05, 2.257e-05, 2.185e-05, 2.127e-05, 2.080e-05, 2.041e-05,
2068  2.013e-05, 2.000e-05, 1.997e-05, 2.009e-05, 2.031e-05, 2.068e-05, 2.124e-05,
2069  2.189e-05, 2.267e-05, 2.364e-05, 2.463e-05, 2.618e-05, 2.774e-05, 2.937e-05,
2070  3.144e-05, 3.359e-05, 3.695e-05, 4.002e-05, 4.374e-05, 4.947e-05, 5.431e-05,
2071  6.281e-05, 7.169e-05, 8.157e-05, 9.728e-05, 1.079e-04, 1.337e-04, 1.442e-04,
2072  1.683e-04, 1.879e-04, 2.223e-04, 2.425e-04, 2.838e-04, 3.143e-04, 3.527e-04,
2073  4.012e-04, 4.237e-04, 4.747e-04, 5.057e-04, 5.409e-04, 5.734e-04, 5.944e-04,
2074  6.077e-04, 6.175e-04, 6.238e-04, 6.226e-04, 6.248e-04, 6.192e-04, 6.098e-04,
2075  5.818e-04, 5.709e-04, 5.465e-04, 5.043e-04, 4.699e-04, 4.294e-04, 3.984e-04,
2076  3.672e-04, 3.152e-04, 2.883e-04, 2.503e-04, 2.211e-04, 1.920e-04, 1.714e-04,
2077  1.485e-04, 1.358e-04, 1.156e-04, 1.021e-04, 8.887e-05, 7.842e-05, 7.120e-05,
2078  6.186e-05, 5.730e-05, 4.792e-05, 4.364e-05, 3.720e-05, 3.280e-05, 2.946e-05,
2079  2.591e-05, 2.261e-05, 2.048e-05, 1.813e-05, 1.630e-05, 1.447e-05, 1.282e-05,
2080  1.167e-05, 1.041e-05, 9.449e-06, 8.510e-06, 7.596e-06, 6.961e-06, 6.272e-06,
2081  5.728e-06, 5.198e-06, 4.667e-06, 4.288e-06, 3.897e-06, 3.551e-06, 3.235e-06,
2082  2.952e-06, 2.688e-06, 2.449e-06, 2.241e-06, 2.050e-06, 1.879e-06, 1.722e-06,
2083  1.582e-06, 1.456e-06, 1.339e-06, 1.236e-06, 1.144e-06, 1.060e-06, 9.830e-07,
2084  9.149e-07, 8.535e-07, 7.973e-07, 7.466e-07, 6.999e-07, 6.574e-07, 6.180e-07,
2085  5.821e-07, 5.487e-07, 5.180e-07, 4.896e-07, 4.631e-07, 4.386e-07, 4.160e-07,
2086  3.945e-07, 3.748e-07, 3.562e-07, 3.385e-07, 3.222e-07, 3.068e-07, 2.922e-07,
2087  2.788e-07, 2.659e-07, 2.539e-07, 2.425e-07, 2.318e-07, 2.219e-07, 2.127e-07,
2088  2.039e-07, 1.958e-07, 1.885e-07, 1.818e-07, 1.758e-07, 1.711e-07, 1.662e-07,
2089  1.630e-07, 1.605e-07, 1.580e-07, 1.559e-07, 1.545e-07, 1.532e-07, 1.522e-07,
2090  1.510e-07, 1.495e-07, 1.465e-07, 1.483e-07, 1.469e-07, 1.448e-07, 1.444e-07,
2091  1.436e-07, 1.426e-07, 1.431e-07, 1.425e-07, 1.445e-07, 1.477e-07, 1.515e-07,
2092  1.567e-07, 1.634e-07, 1.712e-07, 1.802e-07, 1.914e-07, 2.024e-07, 2.159e-07,
2093  2.295e-07, 2.461e-07, 2.621e-07, 2.868e-07, 3.102e-07, 3.394e-07, 3.784e-07,
2094  4.223e-07, 4.864e-07, 5.501e-07, 6.039e-07, 7.193e-07, 7.728e-07, 9.514e-07,
2095  1.073e-06, 1.180e-06, 1.333e-06, 1.472e-06, 1.566e-06, 1.677e-06, 1.784e-06,
2096  1.904e-06, 1.953e-06, 2.020e-06, 2.074e-06, 2.128e-06, 2.162e-06, 2.219e-06,
2097  2.221e-06, 2.249e-06, 2.239e-06, 2.235e-06, 2.185e-06, 2.141e-06, 2.124e-06,
2098  2.090e-06, 2.068e-06, 2.100e-06, 2.104e-06, 2.142e-06, 2.181e-06, 2.257e-06,
2099  2.362e-06, 2.500e-06, 2.664e-06, 2.884e-06, 3.189e-06, 3.480e-06, 3.847e-06,
2100  4.313e-06, 4.790e-06, 5.250e-06, 5.989e-06, 6.692e-06, 7.668e-06, 8.520e-06,
2101  9.606e-06, 1.073e-05, 1.225e-05, 1.377e-05, 1.582e-05, 1.761e-05, 2.029e-05,
2102  2.284e-05, 2.602e-05, 2.940e-05, 3.483e-05, 3.928e-05, 4.618e-05, 5.240e-05,
2103  6.132e-05, 7.183e-05, 8.521e-05, 9.111e-05, 1.070e-04, 1.184e-04, 1.264e-04,
2104  1.475e-04, 1.612e-04, 1.704e-04, 1.818e-04, 1.924e-04, 1.994e-04, 2.061e-04,
2105  2.180e-04, 2.187e-04, 2.200e-04, 2.196e-04, 2.131e-04, 2.015e-04, 1.988e-04,
2106  1.847e-04, 1.729e-04, 1.597e-04, 1.373e-04, 1.262e-04, 1.087e-04, 9.439e-05,
2107  8.061e-05, 7.093e-05, 6.049e-05, 5.120e-05, 4.435e-05, 3.817e-05, 3.340e-05,
2108  2.927e-05, 2.573e-05, 2.291e-05, 2.040e-05, 1.827e-05, 1.636e-05, 1.463e-05,
2109  1.309e-05, 1.170e-05, 1.047e-05, 9.315e-06, 8.328e-06, 7.458e-06, 6.665e-06,
2110  5.940e-06, 5.316e-06, 4.752e-06, 4.252e-06, 3.825e-06, 3.421e-06, 3.064e-06,
2111  2.746e-06, 2.465e-06, 2.216e-06, 1.990e-06, 1.790e-06, 1.609e-06, 1.449e-06,
2112  1.306e-06, 1.177e-06, 1.063e-06, 9.607e-07, 8.672e-07, 7.855e-07, 7.118e-07,
2113  6.460e-07, 5.871e-07, 5.340e-07, 4.868e-07, 4.447e-07, 4.068e-07, 3.729e-07,
2114  3.423e-07, 3.151e-07, 2.905e-07, 2.686e-07, 2.484e-07, 2.306e-07, 2.142e-07,
2115  1.995e-07, 1.860e-07, 1.738e-07, 1.626e-07, 1.522e-07, 1.427e-07, 1.338e-07,
2116  1.258e-07, 1.183e-07, 1.116e-07, 1.056e-07, 9.972e-08, 9.460e-08, 9.007e-08,
2117  8.592e-08, 8.195e-08, 7.816e-08, 7.483e-08, 7.193e-08, 6.892e-08, 6.642e-08,
2118  6.386e-08, 6.154e-08, 5.949e-08, 5.764e-08, 5.622e-08, 5.479e-08, 5.364e-08,
2119  5.301e-08, 5.267e-08, 5.263e-08, 5.313e-08, 5.410e-08, 5.550e-08, 5.745e-08,
2120  6.003e-08, 6.311e-08, 6.713e-08, 7.173e-08, 7.724e-08, 8.368e-08, 9.121e-08,
2121  9.986e-08, 1.097e-07, 1.209e-07, 1.338e-07, 1.486e-07, 1.651e-07, 1.837e-07,
2122  2.048e-07, 2.289e-07, 2.557e-07, 2.857e-07, 3.195e-07, 3.587e-07, 4.015e-07,
2123  4.497e-07, 5.049e-07, 5.665e-07, 6.366e-07, 7.121e-07, 7.996e-07, 8.946e-07,
2124  1.002e-06, 1.117e-06, 1.262e-06, 1.416e-06, 1.611e-06, 1.807e-06, 2.056e-06,
2125  2.351e-06, 2.769e-06, 3.138e-06, 3.699e-06, 4.386e-06, 5.041e-06, 6.074e-06,
2126  6.812e-06, 7.790e-06, 8.855e-06, 1.014e-05, 1.095e-05, 1.245e-05, 1.316e-05,
2127  1.390e-05, 1.504e-05, 1.583e-05, 1.617e-05, 1.652e-05, 1.713e-05, 1.724e-05,
2128  1.715e-05, 1.668e-05, 1.629e-05, 1.552e-05, 1.478e-05, 1.340e-05, 1.245e-05,
2129  1.121e-05, 9.575e-06, 8.956e-06, 7.345e-06, 6.597e-06, 5.612e-06, 4.818e-06,
2130  4.165e-06, 3.579e-06, 3.041e-06, 2.623e-06, 2.290e-06, 1.984e-06, 1.748e-06,
2131  1.534e-06, 1.369e-06, 1.219e-06, 1.092e-06, 9.800e-07, 8.762e-07, 7.896e-07,
2132  7.104e-07, 6.364e-07, 5.691e-07, 5.107e-07, 4.575e-07, 4.090e-07, 3.667e-07,
2133  3.287e-07, 2.931e-07, 2.633e-07, 2.356e-07, 2.111e-07, 1.895e-07, 1.697e-07,
2134  1.525e-07, 1.369e-07, 1.233e-07, 1.114e-07, 9.988e-08, 9.004e-08, 8.149e-08,
2135  7.352e-08, 6.662e-08, 6.030e-08, 5.479e-08, 4.974e-08, 4.532e-08, 4.129e-08,
2136  3.781e-08, 3.462e-08, 3.176e-08, 2.919e-08, 2.687e-08, 2.481e-08, 2.292e-08,
2137  2.119e-08, 1.967e-08, 1.828e-08, 1.706e-08, 1.589e-08, 1.487e-08, 1.393e-08,
2138  1.307e-08, 1.228e-08, 1.156e-08, 1.089e-08, 1.028e-08, 9.696e-09, 9.159e-09,
2139  8.658e-09, 8.187e-09, 7.746e-09, 7.340e-09, 6.953e-09, 6.594e-09, 6.259e-09,
2140  5.948e-09, 5.660e-09, 5.386e-09, 5.135e-09, 4.903e-09, 4.703e-09, 4.515e-09,
2141  4.362e-09, 4.233e-09, 4.117e-09, 4.017e-09, 3.962e-09, 3.924e-09, 3.905e-09,
2142  3.922e-09, 3.967e-09, 4.046e-09, 4.165e-09, 4.320e-09, 4.522e-09, 4.769e-09,
2143  5.083e-09, 5.443e-09, 5.872e-09, 6.366e-09, 6.949e-09, 7.601e-09, 8.371e-09,
2144  9.220e-09, 1.020e-08, 1.129e-08, 1.251e-08, 1.393e-08, 1.542e-08, 1.720e-08,
2145  1.926e-08, 2.152e-08, 2.392e-08, 2.678e-08, 3.028e-08, 3.390e-08, 3.836e-08,
2146  4.309e-08, 4.900e-08, 5.481e-08, 6.252e-08, 7.039e-08, 7.883e-08, 8.849e-08,
2147  1.012e-07, 1.142e-07, 1.300e-07, 1.475e-07, 1.732e-07, 1.978e-07, 2.304e-07,
2148  2.631e-07, 2.988e-07, 3.392e-07, 3.690e-07, 4.355e-07, 4.672e-07, 5.110e-07,
2149  5.461e-07, 5.828e-07, 6.233e-07, 6.509e-07, 6.672e-07, 6.969e-07, 7.104e-07,
2150  7.439e-07, 7.463e-07, 7.708e-07, 7.466e-07, 7.668e-07, 7.549e-07, 7.586e-07,
2151  7.384e-07, 7.439e-07, 7.785e-07, 7.915e-07, 8.310e-07, 8.745e-07, 9.558e-07,
2152  1.038e-06, 1.173e-06, 1.304e-06, 1.452e-06, 1.671e-06, 1.931e-06, 2.239e-06,
2153  2.578e-06, 3.032e-06, 3.334e-06, 3.980e-06, 4.300e-06, 4.518e-06, 5.321e-06,
2154  5.508e-06, 6.211e-06, 6.590e-06, 7.046e-06, 7.555e-06, 7.558e-06, 7.875e-06,
2155  8.319e-06, 8.433e-06, 8.590e-06, 8.503e-06, 8.304e-06, 8.336e-06, 7.739e-06,
2156  7.301e-06, 6.827e-06, 6.078e-06, 5.551e-06, 4.762e-06, 4.224e-06, 3.538e-06,
2157  2.984e-06, 2.619e-06, 2.227e-06, 1.923e-06, 1.669e-06, 1.462e-06, 1.294e-06,
2158  1.155e-06, 1.033e-06, 9.231e-07, 8.238e-07, 7.360e-07, 6.564e-07, 5.869e-07,
2159  5.236e-07, 4.673e-07, 4.174e-07, 3.736e-07, 3.330e-07, 2.976e-07, 2.657e-07,
2160  2.367e-07, 2.106e-07, 1.877e-07, 1.671e-07, 1.494e-07, 1.332e-07, 1.192e-07,
2161  1.065e-07, 9.558e-08, 8.586e-08, 7.717e-08, 6.958e-08, 6.278e-08, 5.666e-08,
2162  5.121e-08, 4.647e-08, 4.213e-08, 3.815e-08, 3.459e-08, 3.146e-08, 2.862e-08,
2163  2.604e-08, 2.375e-08, 2.162e-08, 1.981e-08, 1.817e-08, 1.670e-08, 1.537e-08,
2164  1.417e-08, 1.310e-08, 1.215e-08, 1.128e-08, 1.050e-08, 9.793e-09, 9.158e-09,
2165  8.586e-09, 8.068e-09, 7.595e-09, 7.166e-09, 6.778e-09, 6.427e-09, 6.108e-09,
2166  5.826e-09, 5.571e-09, 5.347e-09, 5.144e-09, 4.968e-09, 4.822e-09, 4.692e-09,
2167  4.589e-09, 4.506e-09, 4.467e-09, 4.440e-09, 4.466e-09, 4.515e-09, 4.718e-09,
2168  4.729e-09, 4.937e-09, 5.249e-09, 5.466e-09, 5.713e-09, 6.030e-09, 6.436e-09,
2169  6.741e-09, 7.330e-09, 7.787e-09, 8.414e-09, 8.908e-09, 9.868e-09, 1.069e-08,
2170  1.158e-08, 1.253e-08, 1.300e-08, 1.409e-08, 1.470e-08, 1.548e-08, 1.612e-08,
2171  1.666e-08, 1.736e-08, 1.763e-08, 1.812e-08, 1.852e-08, 1.923e-08, 1.897e-08,
2172  1.893e-08, 1.888e-08, 1.868e-08, 1.895e-08, 1.899e-08, 1.876e-08, 1.960e-08,
2173  2.020e-08, 2.121e-08, 2.239e-08, 2.379e-08, 2.526e-08, 2.766e-08, 2.994e-08,
2174  3.332e-08, 3.703e-08, 4.158e-08, 4.774e-08, 5.499e-08, 6.355e-08, 7.349e-08,
2175  8.414e-08, 9.846e-08, 1.143e-07, 1.307e-07, 1.562e-07, 1.817e-07, 2.011e-07,
2176  2.192e-07, 2.485e-07, 2.867e-07, 3.035e-07, 3.223e-07, 3.443e-07, 3.617e-07,
2177  3.793e-07, 3.793e-07, 3.839e-07, 4.081e-07, 4.117e-07, 4.085e-07, 3.920e-07,
2178  3.851e-07, 3.754e-07, 3.490e-07, 3.229e-07, 2.978e-07, 2.691e-07, 2.312e-07,
2179  2.029e-07, 1.721e-07, 1.472e-07, 1.308e-07, 1.132e-07, 9.736e-08, 8.458e-08,
2180  7.402e-08, 6.534e-08, 5.811e-08, 5.235e-08, 4.762e-08, 4.293e-08, 3.896e-08,
2181  3.526e-08, 3.165e-08, 2.833e-08, 2.551e-08, 2.288e-08, 2.036e-08, 1.820e-08,
2182  1.626e-08, 1.438e-08, 1.299e-08, 1.149e-08, 1.030e-08, 9.148e-09, 8.122e-09,
2183  7.264e-09, 6.425e-09, 5.777e-09, 5.060e-09, 4.502e-09, 4.013e-09, 3.567e-09,
2184  3.145e-09, 2.864e-09, 2.553e-09, 2.311e-09, 2.087e-09, 1.886e-09, 1.716e-09,
2185  1.556e-09, 1.432e-09, 1.311e-09, 1.202e-09, 1.104e-09, 1.013e-09, 9.293e-10,
2186  8.493e-10, 7.790e-10, 7.185e-10, 6.642e-10, 6.141e-10, 5.684e-10, 5.346e-10,
2187  5.032e-10, 4.725e-10, 4.439e-10, 4.176e-10, 3.930e-10, 3.714e-10, 3.515e-10,
2188  3.332e-10, 3.167e-10, 3.020e-10, 2.887e-10, 2.769e-10, 2.665e-10, 2.578e-10,
2189  2.503e-10, 2.436e-10, 2.377e-10, 2.342e-10, 2.305e-10, 2.296e-10, 2.278e-10,
2190  2.321e-10, 2.355e-10, 2.402e-10, 2.478e-10, 2.670e-10, 2.848e-10, 2.982e-10,
2191  3.263e-10, 3.438e-10, 3.649e-10, 3.829e-10, 4.115e-10, 4.264e-10, 4.473e-10,
2192  4.630e-10, 4.808e-10, 4.995e-10, 5.142e-10, 5.313e-10, 5.318e-10, 5.358e-10,
2193  5.452e-10, 5.507e-10, 5.698e-10, 5.782e-10, 5.983e-10, 6.164e-10, 6.532e-10,
2194  6.811e-10, 7.624e-10, 8.302e-10, 9.067e-10, 9.937e-10, 1.104e-09, 1.221e-09,
2195  1.361e-09, 1.516e-09, 1.675e-09, 1.883e-09, 2.101e-09, 2.349e-09, 2.614e-09,
2196  2.920e-09, 3.305e-09, 3.724e-09, 4.142e-09, 4.887e-09, 5.614e-09, 6.506e-09,
2197  7.463e-09, 8.817e-09, 9.849e-09, 1.187e-08, 1.321e-08, 1.474e-08, 1.698e-08,
2198  1.794e-08, 2.090e-08, 2.211e-08, 2.362e-08, 2.556e-08, 2.729e-08, 2.880e-08,
2199  3.046e-08, 3.167e-08, 3.367e-08, 3.457e-08, 3.590e-08, 3.711e-08, 3.826e-08,
2200  4.001e-08, 4.211e-08, 4.315e-08, 4.661e-08, 5.010e-08, 5.249e-08, 5.840e-08,
2201  6.628e-08, 7.512e-08, 8.253e-08, 9.722e-08, 1.067e-07, 1.153e-07, 1.347e-07,
2202  1.428e-07, 1.577e-07, 1.694e-07, 1.833e-07, 1.938e-07, 2.108e-07, 2.059e-07,
2203  2.157e-07, 2.185e-07, 2.208e-07, 2.182e-07, 2.093e-07, 2.014e-07, 1.962e-07,
2204  1.819e-07, 1.713e-07, 1.510e-07, 1.340e-07, 1.154e-07, 9.890e-08, 8.880e-08,
2205  7.673e-08, 6.599e-08, 5.730e-08, 5.081e-08, 4.567e-08, 4.147e-08, 3.773e-08,
2206  3.460e-08, 3.194e-08, 2.953e-08, 2.759e-08, 2.594e-08, 2.442e-08, 2.355e-08,
2207  2.283e-08, 2.279e-08, 2.231e-08, 2.279e-08, 2.239e-08, 2.210e-08, 2.309e-08,
2208  2.293e-08, 2.352e-08, 2.415e-08, 2.430e-08, 2.426e-08, 2.465e-08, 2.500e-08,
2209  2.496e-08, 2.465e-08, 2.445e-08, 2.383e-08, 2.299e-08, 2.165e-08, 2.113e-08,
2210  1.968e-08, 1.819e-08, 1.644e-08, 1.427e-08, 1.270e-08, 1.082e-08, 9.428e-09,
2211  8.091e-09, 6.958e-09, 5.988e-09, 5.246e-09, 4.601e-09, 4.098e-09, 3.664e-09,
2212  3.287e-09, 2.942e-09, 2.656e-09, 2.364e-09, 2.118e-09, 1.903e-09, 1.703e-09,
2213  1.525e-09, 1.365e-09, 1.229e-09, 1.107e-09, 9.960e-10, 8.945e-10, 8.080e-10,
2214  7.308e-10, 6.616e-10, 5.994e-10, 5.422e-10, 4.929e-10, 4.478e-10, 4.070e-10,
2215  3.707e-10, 3.379e-10, 3.087e-10, 2.823e-10, 2.592e-10, 2.385e-10, 2.201e-10,
2216  2.038e-10, 1.897e-10, 1.774e-10, 1.667e-10, 1.577e-10, 1.502e-10, 1.437e-10,
2217  1.394e-10, 1.358e-10, 1.324e-10, 1.329e-10, 1.324e-10, 1.360e-10, 1.390e-10,
2218  1.424e-10, 1.544e-10, 1.651e-10, 1.817e-10, 1.984e-10, 2.195e-10, 2.438e-10,
2219  2.700e-10, 2.991e-10, 3.322e-10, 3.632e-10, 3.957e-10, 4.360e-10, 4.701e-10,
2220  5.030e-10, 5.381e-10, 5.793e-10, 6.190e-10, 6.596e-10, 7.004e-10, 7.561e-10,
2221  7.934e-10, 8.552e-10, 9.142e-10, 9.570e-10, 1.027e-09, 1.097e-09, 1.193e-09,
2222  1.334e-09, 1.470e-09, 1.636e-09, 1.871e-09, 2.122e-09, 2.519e-09, 2.806e-09,
2223  3.203e-09, 3.846e-09, 4.362e-09, 5.114e-09, 5.643e-09, 6.305e-09, 6.981e-09,
2224  7.983e-09, 8.783e-09, 9.419e-09, 1.017e-08, 1.063e-08, 1.121e-08, 1.130e-08,
2225  1.201e-08, 1.225e-08, 1.232e-08, 1.223e-08, 1.177e-08, 1.151e-08, 1.116e-08,
2226  1.047e-08, 9.698e-09, 8.734e-09, 8.202e-09, 7.041e-09, 6.074e-09, 5.172e-09,
2227  4.468e-09, 3.913e-09, 3.414e-09, 2.975e-09, 2.650e-09, 2.406e-09, 2.173e-09,
2228  2.009e-09, 1.861e-09, 1.727e-09, 1.612e-09, 1.514e-09, 1.430e-09, 1.362e-09,
2229  1.333e-09, 1.288e-09, 1.249e-09, 1.238e-09, 1.228e-09, 1.217e-09, 1.202e-09,
2230  1.209e-09, 1.177e-09, 1.157e-09, 1.165e-09, 1.142e-09, 1.131e-09, 1.138e-09,
2231  1.117e-09, 1.100e-09, 1.069e-09, 1.023e-09, 1.005e-09, 9.159e-10, 8.863e-10,
2232  7.865e-10, 7.153e-10, 6.247e-10, 5.846e-10, 5.133e-10, 4.360e-10, 3.789e-10,
2233  3.335e-10, 2.833e-10, 2.483e-10, 2.155e-10, 1.918e-10, 1.709e-10, 1.529e-10,
2234  1.374e-10, 1.235e-10, 1.108e-10, 9.933e-11, 8.932e-11, 8.022e-11, 7.224e-11,
2235  6.520e-11, 5.896e-11, 5.328e-11, 4.813e-11, 4.365e-11, 3.961e-11, 3.594e-11,
2236  3.266e-11, 2.967e-11, 2.701e-11, 2.464e-11, 2.248e-11, 2.054e-11, 1.878e-11,
2237  1.721e-11, 1.579e-11, 1.453e-11, 1.341e-11, 1.241e-11, 1.154e-11, 1.078e-11,
2238  1.014e-11, 9.601e-12, 9.167e-12, 8.838e-12, 8.614e-12, 8.493e-12, 8.481e-12,
2239  8.581e-12, 8.795e-12, 9.131e-12, 9.601e-12, 1.021e-11, 1.097e-11, 1.191e-11,
2240  1.303e-11, 1.439e-11, 1.601e-11, 1.778e-11, 1.984e-11, 2.234e-11, 2.474e-11,
2241  2.766e-11, 3.085e-11, 3.415e-11, 3.821e-11, 4.261e-11, 4.748e-11, 5.323e-11,
2242  5.935e-11, 6.619e-11, 7.418e-11, 8.294e-11, 9.260e-11, 1.039e-10, 1.156e-10,
2243  1.297e-10, 1.460e-10, 1.641e-10, 1.858e-10, 2.100e-10, 2.383e-10, 2.724e-10,
2244  3.116e-10, 3.538e-10, 4.173e-10, 4.727e-10, 5.503e-10, 6.337e-10, 7.320e-10,
2245  8.298e-10, 9.328e-10, 1.059e-09, 1.176e-09, 1.328e-09, 1.445e-09, 1.593e-09,
2246  1.770e-09, 1.954e-09, 2.175e-09, 2.405e-09, 2.622e-09, 2.906e-09, 3.294e-09,
2247  3.713e-09, 3.980e-09, 4.384e-09, 4.987e-09, 5.311e-09, 5.874e-09, 6.337e-09,
2248  7.027e-09, 7.390e-09, 7.769e-09, 8.374e-09, 8.605e-09, 9.165e-09, 9.415e-09,
2249  9.511e-09, 9.704e-09, 9.588e-09, 9.450e-09, 9.086e-09, 8.798e-09, 8.469e-09,
2250  7.697e-09, 7.168e-09, 6.255e-09, 5.772e-09, 4.970e-09, 4.271e-09, 3.653e-09,
2251  3.154e-09, 2.742e-09, 2.435e-09, 2.166e-09, 1.936e-09, 1.731e-09, 1.556e-09,
2252  1.399e-09, 1.272e-09, 1.157e-09, 1.066e-09, 9.844e-10, 9.258e-10, 8.787e-10,
2253  8.421e-10, 8.083e-10, 8.046e-10, 8.067e-10, 8.181e-10, 8.325e-10, 8.517e-10,
2254  9.151e-10, 9.351e-10, 9.677e-10, 1.071e-09, 1.126e-09, 1.219e-09, 1.297e-09,
2255  1.408e-09, 1.476e-09, 1.517e-09, 1.600e-09, 1.649e-09, 1.678e-09, 1.746e-09,
2256  1.742e-09, 1.728e-09, 1.699e-09, 1.655e-09, 1.561e-09, 1.480e-09, 1.451e-09,
2257  1.411e-09, 1.171e-09, 1.106e-09, 9.714e-10, 8.523e-10, 7.346e-10, 6.241e-10,
2258  5.371e-10, 4.704e-10, 4.144e-10, 3.683e-10, 3.292e-10, 2.942e-10, 2.620e-10,
2259  2.341e-10, 2.104e-10, 1.884e-10, 1.700e-10, 1.546e-10, 1.394e-10, 1.265e-10,
2260  1.140e-10, 1.019e-10, 9.279e-11, 8.283e-11, 7.458e-11, 6.668e-11, 5.976e-11,
2261  5.330e-11, 4.794e-11, 4.289e-11, 3.841e-11, 3.467e-11, 3.130e-11, 2.832e-11,
2262  2.582e-11, 2.356e-11, 2.152e-11, 1.970e-11, 1.808e-11, 1.664e-11, 1.539e-11,
2263  1.434e-11, 1.344e-11, 1.269e-11, 1.209e-11, 1.162e-11, 1.129e-11, 1.108e-11,
2264  1.099e-11, 1.103e-11, 1.119e-11, 1.148e-11, 1.193e-11, 1.252e-11, 1.329e-11,
2265  1.421e-11, 1.555e-11, 1.685e-11, 1.839e-11, 2.054e-11, 2.317e-11, 2.571e-11,
2266  2.839e-11, 3.171e-11, 3.490e-11, 3.886e-11, 4.287e-11, 4.645e-11, 5.047e-11,
2267  5.592e-11, 6.109e-11, 6.628e-11, 7.381e-11, 8.088e-11, 8.966e-11, 1.045e-10,
2268  1.120e-10, 1.287e-10, 1.486e-10, 1.662e-10, 1.866e-10, 2.133e-10, 2.524e-10,
2269  2.776e-10, 3.204e-10, 3.559e-10, 4.028e-10, 4.448e-10, 4.882e-10, 5.244e-10,
2270  5.605e-10, 6.018e-10, 6.328e-10, 6.579e-10, 6.541e-10, 7.024e-10, 7.074e-10,
2271  7.068e-10, 7.009e-10, 6.698e-10, 6.545e-10, 6.209e-10, 5.834e-10, 5.412e-10,
2272  5.001e-10, 4.231e-10, 3.727e-10, 3.211e-10, 2.833e-10, 2.447e-10, 2.097e-10,
2273  1.843e-10, 1.639e-10, 1.449e-10, 1.270e-10, 1.161e-10, 1.033e-10, 9.282e-11,
2274  8.407e-11, 7.639e-11, 7.023e-11, 6.474e-11, 6.142e-11, 5.760e-11, 5.568e-11,
2275  5.472e-11, 5.390e-11, 5.455e-11, 5.540e-11, 5.587e-11, 6.230e-11, 6.490e-11,
2276  6.868e-11, 7.382e-11, 8.022e-11, 8.372e-11, 9.243e-11, 1.004e-10, 1.062e-10,
2277  1.130e-10, 1.176e-10, 1.244e-10, 1.279e-10, 1.298e-10, 1.302e-10, 1.312e-10,
2278  1.295e-10, 1.244e-10, 1.211e-10, 1.167e-10, 1.098e-10, 9.927e-11, 8.854e-11,
2279  8.011e-11, 7.182e-11, 5.923e-11, 5.212e-11, 4.453e-11, 3.832e-11, 3.371e-11,
2280  2.987e-11, 2.651e-11, 2.354e-11, 2.093e-11, 1.863e-11, 1.662e-11, 1.486e-11,
2281  1.331e-11, 1.193e-11, 1.071e-11, 9.628e-12, 8.660e-12, 7.801e-12, 7.031e-12,
2282  6.347e-12, 5.733e-12, 5.182e-12, 4.695e-12, 4.260e-12, 3.874e-12, 3.533e-12,
2283  3.235e-12, 2.979e-12, 2.760e-12, 2.579e-12, 2.432e-12, 2.321e-12, 2.246e-12,
2284  2.205e-12, 2.196e-12, 2.223e-12, 2.288e-12, 2.387e-12, 2.525e-12, 2.704e-12,
2285  2.925e-12, 3.191e-12, 3.508e-12, 3.876e-12, 4.303e-12, 4.793e-12, 5.347e-12,
2286  5.978e-12, 6.682e-12, 7.467e-12, 8.340e-12, 9.293e-12, 1.035e-11, 1.152e-11,
2287  1.285e-11, 1.428e-11, 1.586e-11, 1.764e-11, 1.972e-11, 2.214e-11, 2.478e-11,
2288  2.776e-11, 3.151e-11, 3.591e-11, 4.103e-11, 4.660e-11, 5.395e-11, 6.306e-11,
2289  7.172e-11, 8.358e-11, 9.670e-11, 1.110e-10, 1.325e-10, 1.494e-10, 1.736e-10,
2290  2.007e-10, 2.296e-10, 2.608e-10, 3.004e-10, 3.361e-10, 3.727e-10, 4.373e-10,
2291  4.838e-10, 5.483e-10, 6.006e-10, 6.535e-10, 6.899e-10, 7.687e-10, 8.444e-10,
2292  8.798e-10, 9.135e-10, 9.532e-10, 9.757e-10, 9.968e-10, 1.006e-09, 9.949e-10,
2293  9.789e-10, 9.564e-10, 9.215e-10, 8.510e-10, 8.394e-10, 7.707e-10, 7.152e-10,
2294  6.274e-10, 5.598e-10, 5.028e-10, 4.300e-10, 3.710e-10, 3.245e-10, 2.809e-10,
2295  2.461e-10, 2.154e-10, 1.910e-10, 1.685e-10, 1.487e-10, 1.313e-10, 1.163e-10,
2296  1.031e-10, 9.172e-11, 8.221e-11, 7.382e-11, 6.693e-11, 6.079e-11, 5.581e-11,
2297  5.167e-11, 4.811e-11, 4.506e-11, 4.255e-11, 4.083e-11, 3.949e-11, 3.881e-11,
2298  3.861e-11, 3.858e-11, 3.951e-11, 4.045e-11, 4.240e-11, 4.487e-11, 4.806e-11,
2299  5.133e-11, 5.518e-11, 5.919e-11, 6.533e-11, 7.031e-11, 7.762e-11, 8.305e-11,
2300  9.252e-11, 9.727e-11, 1.045e-10, 1.117e-10, 1.200e-10, 1.275e-10, 1.341e-10,
2301  1.362e-10, 1.438e-10, 1.450e-10, 1.455e-10, 1.455e-10, 1.434e-10, 1.381e-10,
2302  1.301e-10, 1.276e-10, 1.163e-10, 1.089e-10, 9.911e-11, 8.943e-11, 7.618e-11,
2303  6.424e-11, 5.717e-11, 4.866e-11, 4.257e-11, 3.773e-11, 3.331e-11, 2.958e-11,
2304  2.629e-11, 2.316e-11, 2.073e-11, 1.841e-11, 1.635e-11, 1.464e-11, 1.310e-11,
2305  1.160e-11, 1.047e-11, 9.408e-12, 8.414e-12, 7.521e-12, 6.705e-12, 5.993e-12,
2306  5.371e-12, 4.815e-12, 4.338e-12, 3.921e-12, 3.567e-12, 3.265e-12, 3.010e-12,
2307  2.795e-12, 2.613e-12, 2.464e-12, 2.346e-12, 2.256e-12, 2.195e-12, 2.165e-12,
2308  2.166e-12, 2.198e-12, 2.262e-12, 2.364e-12, 2.502e-12, 2.682e-12, 2.908e-12,
2309  3.187e-12, 3.533e-12, 3.946e-12, 4.418e-12, 5.013e-12, 5.708e-12, 6.379e-12,
2310  7.430e-12, 8.390e-12, 9.510e-12, 1.078e-11, 1.259e-11, 1.438e-11, 1.630e-11,
2311  1.814e-11, 2.055e-11, 2.348e-11, 2.664e-11, 2.956e-11, 3.300e-11, 3.677e-11,
2312  4.032e-11, 4.494e-11, 4.951e-11, 5.452e-11, 6.014e-11, 6.500e-11, 6.915e-11,
2313  7.450e-11, 7.971e-11, 8.468e-11, 8.726e-11, 8.995e-11, 9.182e-11, 9.509e-11,
2314  9.333e-11, 9.386e-11, 9.457e-11, 9.210e-11, 9.019e-11, 8.680e-11, 8.298e-11,
2315  7.947e-11, 7.460e-11, 7.082e-11, 6.132e-11, 5.855e-11, 5.073e-11, 4.464e-11,
2316  3.825e-11, 3.375e-11, 2.911e-11, 2.535e-11, 2.160e-11, 1.907e-11, 1.665e-11,
2317  1.463e-11, 1.291e-11, 1.133e-11, 9.997e-12, 8.836e-12, 7.839e-12, 6.943e-12,
2318  6.254e-12, 5.600e-12, 5.029e-12, 4.529e-12, 4.102e-12, 3.737e-12, 3.428e-12,
2319  3.169e-12, 2.959e-12, 2.798e-12, 2.675e-12, 2.582e-12, 2.644e-12, 2.557e-12,
2320  2.614e-12, 2.717e-12, 2.874e-12, 3.056e-12, 3.187e-12, 3.631e-12, 3.979e-12,
2321  4.248e-12, 4.817e-12, 5.266e-12, 5.836e-12, 6.365e-12, 6.807e-12, 7.470e-12,
2322  7.951e-12, 8.636e-12, 8.972e-12, 9.314e-12, 9.445e-12, 1.003e-11, 1.013e-11,
2323  9.937e-12, 9.729e-12, 9.064e-12, 9.119e-12, 9.124e-12, 8.704e-12, 8.078e-12,
2324  7.470e-12, 6.329e-12, 5.674e-12, 4.808e-12, 4.119e-12, 3.554e-12, 3.103e-12,
2325  2.731e-12, 2.415e-12, 2.150e-12, 1.926e-12, 1.737e-12, 1.578e-12, 1.447e-12,
2326  1.340e-12, 1.255e-12, 1.191e-12, 1.146e-12, 1.121e-12, 1.114e-12, 1.126e-12,
2327  1.156e-12, 1.207e-12, 1.278e-12, 1.372e-12, 1.490e-12, 1.633e-12, 1.805e-12,
2328  2.010e-12, 2.249e-12, 2.528e-12, 2.852e-12, 3.228e-12, 3.658e-12, 4.153e-12,
2329  4.728e-12, 5.394e-12, 6.176e-12, 7.126e-12, 8.188e-12, 9.328e-12, 1.103e-11,
2330  1.276e-11, 1.417e-11, 1.615e-11, 1.840e-11, 2.155e-11, 2.429e-11, 2.826e-11,
2331  3.222e-11, 3.664e-11, 4.140e-11, 4.906e-11, 5.536e-11, 6.327e-11, 7.088e-11,
2332  8.316e-11, 9.242e-11, 1.070e-10, 1.223e-10, 1.341e-10, 1.553e-10, 1.703e-10,
2333  1.900e-10, 2.022e-10, 2.233e-10, 2.345e-10, 2.438e-10, 2.546e-10, 2.599e-10,
2334  2.661e-10, 2.703e-10, 2.686e-10, 2.662e-10, 2.560e-10, 2.552e-10, 2.378e-10,
2335  2.252e-10, 2.146e-10, 1.885e-10, 1.668e-10, 1.441e-10, 1.295e-10, 1.119e-10,
2336  9.893e-11, 8.687e-11, 7.678e-11, 6.685e-11, 5.879e-11, 5.127e-11, 4.505e-11,
2337  3.997e-11, 3.511e-11};
2338 
2339 // H2O foreign continuum parameters at all temperatures
2340 // date of last update: 11/18/02
2341 // units of (CM**3/MOL)*1.E-20
2343 const Numeric FH2O_ckd_mt_100_v2 = 20000.0;
2345 const int FH2O_ckd_mt_100_npt = 2003;
2347  0.000e0, 1.205e-02, 1.126e-02, 1.095e-02, 1.126e-02, 1.205e-02, 1.322e-02,
2348  1.430e-02, 1.506e-02, 1.548e-02, 1.534e-02, 1.486e-02, 1.373e-02, 1.262e-02,
2349  1.134e-02, 1.001e-02, 8.702e-03, 7.475e-03, 6.481e-03, 5.480e-03, 4.600e-03,
2350  3.833e-03, 3.110e-03, 2.543e-03, 2.049e-03, 1.680e-03, 1.374e-03, 1.046e-03,
2351  8.193e-04, 6.267e-04, 4.968e-04, 3.924e-04, 2.983e-04, 2.477e-04, 1.997e-04,
2352  1.596e-04, 1.331e-04, 1.061e-04, 8.942e-05, 7.168e-05, 5.887e-05, 4.848e-05,
2353  3.817e-05, 3.170e-05, 2.579e-05, 2.162e-05, 1.768e-05, 1.490e-05, 1.231e-05,
2354  1.013e-05, 8.555e-06, 7.328e-06, 6.148e-06, 5.207e-06, 4.387e-06, 3.741e-06,
2355  3.220e-06, 2.753e-06, 2.346e-06, 1.985e-06, 1.716e-06, 1.475e-06, 1.286e-06,
2356  1.122e-06, 9.661e-07, 8.284e-07, 7.057e-07, 6.119e-07, 5.290e-07, 4.571e-07,
2357  3.948e-07, 3.432e-07, 2.983e-07, 2.589e-07, 2.265e-07, 1.976e-07, 1.704e-07,
2358  1.456e-07, 1.260e-07, 1.101e-07, 9.648e-08, 8.415e-08, 7.340e-08, 6.441e-08,
2359  5.643e-08, 4.940e-08, 4.276e-08, 3.703e-08, 3.227e-08, 2.825e-08, 2.478e-08,
2360  2.174e-08, 1.898e-08, 1.664e-08, 1.458e-08, 1.278e-08, 1.126e-08, 9.891e-09,
2361  8.709e-09, 7.652e-09, 6.759e-09, 5.975e-09, 5.310e-09, 4.728e-09, 4.214e-09,
2362  3.792e-09, 3.463e-09, 3.226e-09, 2.992e-09, 2.813e-09, 2.749e-09, 2.809e-09,
2363  2.913e-09, 3.037e-09, 3.413e-09, 3.738e-09, 4.189e-09, 4.808e-09, 5.978e-09,
2364  7.088e-09, 8.071e-09, 9.610e-09, 1.210e-08, 1.500e-08, 1.764e-08, 2.221e-08,
2365  2.898e-08, 3.948e-08, 5.068e-08, 6.227e-08, 7.898e-08, 1.033e-07, 1.437e-07,
2366  1.889e-07, 2.589e-07, 3.590e-07, 4.971e-07, 7.156e-07, 9.983e-07, 1.381e-06,
2367  1.929e-06, 2.591e-06, 3.453e-06, 4.570e-06, 5.930e-06, 7.552e-06, 9.556e-06,
2368  1.183e-05, 1.425e-05, 1.681e-05, 1.978e-05, 2.335e-05, 2.668e-05, 3.022e-05,
2369  3.371e-05, 3.715e-05, 3.967e-05, 4.060e-05, 4.010e-05, 3.809e-05, 3.491e-05,
2370  3.155e-05, 2.848e-05, 2.678e-05, 2.660e-05, 2.811e-05, 3.071e-05, 3.294e-05,
2371  3.459e-05, 3.569e-05, 3.560e-05, 3.434e-05, 3.186e-05, 2.916e-05, 2.622e-05,
2372  2.275e-05, 1.918e-05, 1.620e-05, 1.373e-05, 1.182e-05, 1.006e-05, 8.556e-06,
2373  7.260e-06, 6.107e-06, 5.034e-06, 4.211e-06, 3.426e-06, 2.865e-06, 2.446e-06,
2374  1.998e-06, 1.628e-06, 1.242e-06, 1.005e-06, 7.853e-07, 6.210e-07, 5.071e-07,
2375  4.156e-07, 3.548e-07, 2.825e-07, 2.261e-07, 1.916e-07, 1.510e-07, 1.279e-07,
2376  1.059e-07, 9.140e-08, 7.707e-08, 6.170e-08, 5.311e-08, 4.263e-08, 3.518e-08,
2377  2.961e-08, 2.457e-08, 2.119e-08, 1.712e-08, 1.439e-08, 1.201e-08, 1.003e-08,
2378  8.564e-09, 7.199e-09, 6.184e-09, 5.206e-09, 4.376e-09, 3.708e-09, 3.157e-09,
2379  2.725e-09, 2.361e-09, 2.074e-09, 1.797e-09, 1.562e-09, 1.364e-09, 1.196e-09,
2380  1.042e-09, 8.862e-10, 7.648e-10, 6.544e-10, 5.609e-10, 4.791e-10, 4.108e-10,
2381  3.531e-10, 3.038e-10, 2.618e-10, 2.268e-10, 1.969e-10, 1.715e-10, 1.496e-10,
2382  1.308e-10, 1.147e-10, 1.008e-10, 8.894e-11, 7.885e-11, 7.031e-11, 6.355e-11,
2383  5.854e-11, 5.534e-11, 5.466e-11, 5.725e-11, 6.447e-11, 7.943e-11, 1.038e-10,
2384  1.437e-10, 2.040e-10, 2.901e-10, 4.051e-10, 5.556e-10, 7.314e-10, 9.291e-10,
2385  1.134e-09, 1.321e-09, 1.482e-09, 1.596e-09, 1.669e-09, 1.715e-09, 1.762e-09,
2386  1.817e-09, 1.828e-09, 1.848e-09, 1.873e-09, 1.902e-09, 1.894e-09, 1.864e-09,
2387  1.841e-09, 1.797e-09, 1.704e-09, 1.559e-09, 1.382e-09, 1.187e-09, 1.001e-09,
2388  8.468e-10, 7.265e-10, 6.521e-10, 6.381e-10, 6.660e-10, 7.637e-10, 9.705e-10,
2389  1.368e-09, 1.856e-09, 2.656e-09, 3.954e-09, 5.960e-09, 8.720e-09, 1.247e-08,
2390  1.781e-08, 2.491e-08, 3.311e-08, 4.272e-08, 5.205e-08, 6.268e-08, 7.337e-08,
2391  8.277e-08, 9.185e-08, 1.004e-07, 1.091e-07, 1.159e-07, 1.188e-07, 1.175e-07,
2392  1.124e-07, 1.033e-07, 9.381e-08, 8.501e-08, 7.956e-08, 7.894e-08, 8.331e-08,
2393  9.102e-08, 9.836e-08, 1.035e-07, 1.064e-07, 1.060e-07, 1.032e-07, 9.808e-08,
2394  9.139e-08, 8.442e-08, 7.641e-08, 6.881e-08, 6.161e-08, 5.404e-08, 4.804e-08,
2395  4.446e-08, 4.328e-08, 4.259e-08, 4.421e-08, 4.673e-08, 4.985e-08, 5.335e-08,
2396  5.796e-08, 6.542e-08, 7.714e-08, 8.827e-08, 1.040e-07, 1.238e-07, 1.499e-07,
2397  1.829e-07, 2.222e-07, 2.689e-07, 3.303e-07, 3.981e-07, 4.840e-07, 5.910e-07,
2398  7.363e-07, 9.087e-07, 1.139e-06, 1.455e-06, 1.866e-06, 2.440e-06, 3.115e-06,
2399  3.941e-06, 4.891e-06, 5.992e-06, 7.111e-06, 8.296e-06, 9.210e-06, 9.987e-06,
2400  1.044e-05, 1.073e-05, 1.092e-05, 1.106e-05, 1.138e-05, 1.171e-05, 1.186e-05,
2401  1.186e-05, 1.179e-05, 1.166e-05, 1.151e-05, 1.160e-05, 1.197e-05, 1.241e-05,
2402  1.268e-05, 1.260e-05, 1.184e-05, 1.063e-05, 9.204e-06, 7.584e-06, 6.053e-06,
2403  4.482e-06, 3.252e-06, 2.337e-06, 1.662e-06, 1.180e-06, 8.150e-07, 5.950e-07,
2404  4.354e-07, 3.302e-07, 2.494e-07, 1.930e-07, 1.545e-07, 1.250e-07, 1.039e-07,
2405  8.602e-08, 7.127e-08, 5.897e-08, 4.838e-08, 4.018e-08, 3.280e-08, 2.720e-08,
2406  2.307e-08, 1.972e-08, 1.654e-08, 1.421e-08, 1.174e-08, 1.004e-08, 8.739e-09,
2407  7.358e-09, 6.242e-09, 5.303e-09, 4.567e-09, 3.940e-09, 3.375e-09, 2.864e-09,
2408  2.422e-09, 2.057e-09, 1.750e-09, 1.505e-09, 1.294e-09, 1.101e-09, 9.401e-10,
2409  8.018e-10, 6.903e-10, 5.965e-10, 5.087e-10, 4.364e-10, 3.759e-10, 3.247e-10,
2410  2.809e-10, 2.438e-10, 2.123e-10, 1.853e-10, 1.622e-10, 1.426e-10, 1.260e-10,
2411  1.125e-10, 1.022e-10, 9.582e-11, 9.388e-11, 9.801e-11, 1.080e-10, 1.276e-10,
2412  1.551e-10, 1.903e-10, 2.291e-10, 2.724e-10, 3.117e-10, 3.400e-10, 3.562e-10,
2413  3.625e-10, 3.619e-10, 3.429e-10, 3.221e-10, 2.943e-10, 2.645e-10, 2.338e-10,
2414  2.062e-10, 1.901e-10, 1.814e-10, 1.827e-10, 1.906e-10, 1.984e-10, 2.040e-10,
2415  2.068e-10, 2.075e-10, 2.018e-10, 1.959e-10, 1.897e-10, 1.852e-10, 1.791e-10,
2416  1.696e-10, 1.634e-10, 1.598e-10, 1.561e-10, 1.518e-10, 1.443e-10, 1.377e-10,
2417  1.346e-10, 1.342e-10, 1.375e-10, 1.525e-10, 1.767e-10, 2.108e-10, 2.524e-10,
2418  2.981e-10, 3.477e-10, 4.262e-10, 5.326e-10, 6.646e-10, 8.321e-10, 1.069e-09,
2419  1.386e-09, 1.743e-09, 2.216e-09, 2.808e-09, 3.585e-09, 4.552e-09, 5.907e-09,
2420  7.611e-09, 9.774e-09, 1.255e-08, 1.666e-08, 2.279e-08, 3.221e-08, 4.531e-08,
2421  6.400e-08, 9.187e-08, 1.295e-07, 1.825e-07, 2.431e-07, 3.181e-07, 4.009e-07,
2422  4.941e-07, 5.880e-07, 6.623e-07, 7.155e-07, 7.451e-07, 7.594e-07, 7.541e-07,
2423  7.467e-07, 7.527e-07, 7.935e-07, 8.461e-07, 8.954e-07, 9.364e-07, 9.843e-07,
2424  1.024e-06, 1.050e-06, 1.059e-06, 1.074e-06, 1.072e-06, 1.043e-06, 9.789e-07,
2425  8.803e-07, 7.662e-07, 6.378e-07, 5.133e-07, 3.958e-07, 2.914e-07, 2.144e-07,
2426  1.570e-07, 1.140e-07, 8.470e-08, 6.200e-08, 4.657e-08, 3.559e-08, 2.813e-08,
2427  2.222e-08, 1.769e-08, 1.391e-08, 1.125e-08, 9.186e-09, 7.704e-09, 6.447e-09,
2428  5.381e-09, 4.442e-09, 3.669e-09, 3.057e-09, 2.564e-09, 2.153e-09, 1.784e-09,
2429  1.499e-09, 1.281e-09, 1.082e-09, 9.304e-10, 8.169e-10, 6.856e-10, 5.866e-10,
2430  5.043e-10, 4.336e-10, 3.731e-10, 3.175e-10, 2.745e-10, 2.374e-10, 2.007e-10,
2431  1.737e-10, 1.508e-10, 1.302e-10, 1.130e-10, 9.672e-11, 8.375e-11, 7.265e-11,
2432  6.244e-11, 5.343e-11, 4.654e-11, 3.975e-11, 3.488e-11, 3.097e-11, 2.834e-11,
2433  2.649e-11, 2.519e-11, 2.462e-11, 2.443e-11, 2.440e-11, 2.398e-11, 2.306e-11,
2434  2.183e-11, 2.021e-11, 1.821e-11, 1.599e-11, 1.403e-11, 1.196e-11, 1.023e-11,
2435  8.728e-12, 7.606e-12, 6.941e-12, 6.545e-12, 6.484e-12, 6.600e-12, 6.718e-12,
2436  6.785e-12, 6.746e-12, 6.724e-12, 6.764e-12, 6.995e-12, 7.144e-12, 7.320e-12,
2437  7.330e-12, 7.208e-12, 6.789e-12, 6.090e-12, 5.337e-12, 4.620e-12, 4.037e-12,
2438  3.574e-12, 3.311e-12, 3.346e-12, 3.566e-12, 3.836e-12, 4.076e-12, 4.351e-12,
2439  4.691e-12, 5.114e-12, 5.427e-12, 6.167e-12, 7.436e-12, 8.842e-12, 1.038e-11,
2440  1.249e-11, 1.540e-11, 1.915e-11, 2.480e-11, 3.256e-11, 4.339e-11, 5.611e-11,
2441  7.519e-11, 1.037e-10, 1.409e-10, 1.883e-10, 2.503e-10, 3.380e-10, 4.468e-10,
2442  5.801e-10, 7.335e-10, 8.980e-10, 1.110e-09, 1.363e-09, 1.677e-09, 2.104e-09,
2443  2.681e-09, 3.531e-09, 4.621e-09, 6.106e-09, 8.154e-09, 1.046e-08, 1.312e-08,
2444  1.607e-08, 1.948e-08, 2.266e-08, 2.495e-08, 2.655e-08, 2.739e-08, 2.739e-08,
2445  2.662e-08, 2.589e-08, 2.590e-08, 2.664e-08, 2.833e-08, 3.023e-08, 3.305e-08,
2446  3.558e-08, 3.793e-08, 3.961e-08, 4.056e-08, 4.102e-08, 4.025e-08, 3.917e-08,
2447  3.706e-08, 3.493e-08, 3.249e-08, 3.096e-08, 3.011e-08, 3.111e-08, 3.395e-08,
2448  3.958e-08, 4.875e-08, 6.066e-08, 7.915e-08, 1.011e-07, 1.300e-07, 1.622e-07,
2449  2.003e-07, 2.448e-07, 2.863e-07, 3.317e-07, 3.655e-07, 3.960e-07, 4.098e-07,
2450  4.168e-07, 4.198e-07, 4.207e-07, 4.289e-07, 4.384e-07, 4.471e-07, 4.524e-07,
2451  4.574e-07, 4.633e-07, 4.785e-07, 5.028e-07, 5.371e-07, 5.727e-07, 5.955e-07,
2452  5.998e-07, 5.669e-07, 5.082e-07, 4.397e-07, 3.596e-07, 2.814e-07, 2.074e-07,
2453  1.486e-07, 1.057e-07, 7.250e-08, 4.946e-08, 3.430e-08, 2.447e-08, 1.793e-08,
2454  1.375e-08, 1.096e-08, 9.091e-09, 7.709e-09, 6.631e-09, 5.714e-09, 4.886e-09,
2455  4.205e-09, 3.575e-09, 3.070e-09, 2.631e-09, 2.284e-09, 2.002e-09, 1.745e-09,
2456  1.509e-09, 1.284e-09, 1.084e-09, 9.163e-10, 7.663e-10, 6.346e-10, 5.283e-10,
2457  4.354e-10, 3.590e-10, 2.982e-10, 2.455e-10, 2.033e-10, 1.696e-10, 1.432e-10,
2458  1.211e-10, 1.020e-10, 8.702e-11, 7.380e-11, 6.293e-11, 5.343e-11, 4.532e-11,
2459  3.907e-11, 3.365e-11, 2.945e-11, 2.558e-11, 2.192e-11, 1.895e-11, 1.636e-11,
2460  1.420e-11, 1.228e-11, 1.063e-11, 9.348e-12, 8.200e-12, 7.231e-12, 6.430e-12,
2461  5.702e-12, 5.052e-12, 4.469e-12, 4.000e-12, 3.679e-12, 3.387e-12, 3.197e-12,
2462  3.158e-12, 3.327e-12, 3.675e-12, 4.292e-12, 5.437e-12, 7.197e-12, 1.008e-11,
2463  1.437e-11, 2.035e-11, 2.905e-11, 4.062e-11, 5.528e-11, 7.177e-11, 9.064e-11,
2464  1.109e-10, 1.297e-10, 1.473e-10, 1.652e-10, 1.851e-10, 2.079e-10, 2.313e-10,
2465  2.619e-10, 2.958e-10, 3.352e-10, 3.796e-10, 4.295e-10, 4.923e-10, 5.490e-10,
2466  5.998e-10, 6.388e-10, 6.645e-10, 6.712e-10, 6.549e-10, 6.380e-10, 6.255e-10,
2467  6.253e-10, 6.459e-10, 6.977e-10, 7.590e-10, 8.242e-10, 8.920e-10, 9.403e-10,
2468  9.701e-10, 9.483e-10, 9.135e-10, 8.617e-10, 7.921e-10, 7.168e-10, 6.382e-10,
2469  5.677e-10, 5.045e-10, 4.572e-10, 4.312e-10, 4.145e-10, 4.192e-10, 4.541e-10,
2470  5.368e-10, 6.771e-10, 8.962e-10, 1.210e-09, 1.659e-09, 2.330e-09, 3.249e-09,
2471  4.495e-09, 5.923e-09, 7.642e-09, 9.607e-09, 1.178e-08, 1.399e-08, 1.584e-08,
2472  1.730e-08, 1.816e-08, 1.870e-08, 1.868e-08, 1.870e-08, 1.884e-08, 1.990e-08,
2473  2.150e-08, 2.258e-08, 2.364e-08, 2.473e-08, 2.602e-08, 2.689e-08, 2.731e-08,
2474  2.816e-08, 2.859e-08, 2.839e-08, 2.703e-08, 2.451e-08, 2.149e-08, 1.787e-08,
2475  1.449e-08, 1.111e-08, 8.282e-09, 6.121e-09, 4.494e-09, 3.367e-09, 2.487e-09,
2476  1.885e-09, 1.503e-09, 1.249e-09, 1.074e-09, 9.427e-10, 8.439e-10, 7.563e-10,
2477  6.772e-10, 6.002e-10, 5.254e-10, 4.588e-10, 3.977e-10, 3.449e-10, 3.003e-10,
2478  2.624e-10, 2.335e-10, 2.040e-10, 1.771e-10, 1.534e-10, 1.296e-10, 1.097e-10,
2479  9.173e-11, 7.730e-11, 6.547e-11, 5.191e-11, 4.198e-11, 3.361e-11, 2.732e-11,
2480  2.244e-11, 1.791e-11, 1.509e-11, 1.243e-11, 1.035e-11, 8.969e-12, 7.394e-12,
2481  6.323e-12, 5.282e-12, 4.543e-12, 3.752e-12, 3.140e-12, 2.600e-12, 2.194e-12,
2482  1.825e-12, 1.511e-12, 1.245e-12, 1.024e-12, 8.539e-13, 7.227e-13, 6.102e-13,
2483  5.189e-13, 4.430e-13, 3.774e-13, 3.236e-13, 2.800e-13, 2.444e-13, 2.156e-13,
2484  1.932e-13, 1.775e-13, 1.695e-13, 1.672e-13, 1.704e-13, 1.825e-13, 2.087e-13,
2485  2.614e-13, 3.377e-13, 4.817e-13, 6.989e-13, 1.062e-12, 1.562e-12, 2.288e-12,
2486  3.295e-12, 4.550e-12, 5.965e-12, 7.546e-12, 9.395e-12, 1.103e-11, 1.228e-11,
2487  1.318e-11, 1.380e-11, 1.421e-11, 1.390e-11, 1.358e-11, 1.336e-11, 1.342e-11,
2488  1.356e-11, 1.424e-11, 1.552e-11, 1.730e-11, 1.951e-11, 2.128e-11, 2.249e-11,
2489  2.277e-11, 2.226e-11, 2.111e-11, 1.922e-11, 1.775e-11, 1.661e-11, 1.547e-11,
2490  1.446e-11, 1.323e-11, 1.210e-11, 1.054e-11, 9.283e-12, 8.671e-12, 8.670e-12,
2491  9.429e-12, 1.062e-11, 1.255e-11, 1.506e-11, 1.818e-11, 2.260e-11, 2.831e-11,
2492  3.723e-11, 5.092e-11, 6.968e-11, 9.826e-11, 1.349e-10, 1.870e-10, 2.580e-10,
2493  3.430e-10, 4.424e-10, 5.521e-10, 6.812e-10, 8.064e-10, 9.109e-10, 9.839e-10,
2494  1.028e-09, 1.044e-09, 1.029e-09, 1.005e-09, 1.002e-09, 1.038e-09, 1.122e-09,
2495  1.233e-09, 1.372e-09, 1.524e-09, 1.665e-09, 1.804e-09, 1.908e-09, 2.015e-09,
2496  2.117e-09, 2.219e-09, 2.336e-09, 2.531e-09, 2.805e-09, 3.189e-09, 3.617e-09,
2497  4.208e-09, 4.911e-09, 5.619e-09, 6.469e-09, 7.188e-09, 7.957e-09, 8.503e-09,
2498  9.028e-09, 9.571e-09, 9.990e-09, 1.055e-08, 1.102e-08, 1.132e-08, 1.141e-08,
2499  1.145e-08, 1.145e-08, 1.176e-08, 1.224e-08, 1.304e-08, 1.388e-08, 1.445e-08,
2500  1.453e-08, 1.368e-08, 1.220e-08, 1.042e-08, 8.404e-09, 6.403e-09, 4.643e-09,
2501  3.325e-09, 2.335e-09, 1.638e-09, 1.190e-09, 9.161e-10, 7.412e-10, 6.226e-10,
2502  5.516e-10, 5.068e-10, 4.831e-10, 4.856e-10, 5.162e-10, 5.785e-10, 6.539e-10,
2503  7.485e-10, 8.565e-10, 9.534e-10, 1.052e-09, 1.115e-09, 1.173e-09, 1.203e-09,
2504  1.224e-09, 1.243e-09, 1.248e-09, 1.261e-09, 1.265e-09, 1.250e-09, 1.217e-09,
2505  1.176e-09, 1.145e-09, 1.153e-09, 1.199e-09, 1.278e-09, 1.366e-09, 1.426e-09,
2506  1.444e-09, 1.365e-09, 1.224e-09, 1.051e-09, 8.539e-10, 6.564e-10, 4.751e-10,
2507  3.404e-10, 2.377e-10, 1.631e-10, 1.114e-10, 7.870e-11, 5.793e-11, 4.284e-11,
2508  3.300e-11, 2.620e-11, 2.152e-11, 1.777e-11, 1.496e-11, 1.242e-11, 1.037e-11,
2509  8.725e-12, 7.004e-12, 5.718e-12, 4.769e-12, 3.952e-12, 3.336e-12, 2.712e-12,
2510  2.213e-12, 1.803e-12, 1.492e-12, 1.236e-12, 1.006e-12, 8.384e-13, 7.063e-13,
2511  5.879e-13, 4.930e-13, 4.171e-13, 3.569e-13, 3.083e-13, 2.688e-13, 2.333e-13,
2512  2.035e-13, 1.820e-13, 1.682e-13, 1.635e-13, 1.674e-13, 1.769e-13, 2.022e-13,
2513  2.485e-13, 3.127e-13, 4.250e-13, 5.928e-13, 8.514e-13, 1.236e-12, 1.701e-12,
2514  2.392e-12, 3.231e-12, 4.350e-12, 5.559e-12, 6.915e-12, 8.519e-12, 1.013e-11,
2515  1.146e-11, 1.240e-11, 1.305e-11, 1.333e-11, 1.318e-11, 1.263e-11, 1.238e-11,
2516  1.244e-11, 1.305e-11, 1.432e-11, 1.623e-11, 1.846e-11, 2.090e-11, 2.328e-11,
2517  2.526e-11, 2.637e-11, 2.702e-11, 2.794e-11, 2.889e-11, 2.989e-11, 3.231e-11,
2518  3.680e-11, 4.375e-11, 5.504e-11, 7.159e-11, 9.502e-11, 1.279e-10, 1.645e-10,
2519  2.098e-10, 2.618e-10, 3.189e-10, 3.790e-10, 4.303e-10, 4.753e-10, 5.027e-10,
2520  5.221e-10, 5.293e-10, 5.346e-10, 5.467e-10, 5.796e-10, 6.200e-10, 6.454e-10,
2521  6.705e-10, 6.925e-10, 7.233e-10, 7.350e-10, 7.538e-10, 7.861e-10, 8.077e-10,
2522  8.132e-10, 7.749e-10, 7.036e-10, 6.143e-10, 5.093e-10, 4.089e-10, 3.092e-10,
2523  2.299e-10, 1.705e-10, 1.277e-10, 9.723e-11, 7.533e-11, 6.126e-11, 5.154e-11,
2524  4.428e-11, 3.913e-11, 3.521e-11, 3.297e-11, 3.275e-11, 3.460e-11, 3.798e-11,
2525  4.251e-11, 4.745e-11, 5.232e-11, 5.606e-11, 5.820e-11, 5.880e-11, 5.790e-11,
2526  5.661e-11, 5.491e-11, 5.366e-11, 5.341e-11, 5.353e-11, 5.336e-11, 5.293e-11,
2527  5.248e-11, 5.235e-11, 5.208e-11, 5.322e-11, 5.521e-11, 5.725e-11, 5.827e-11,
2528  5.685e-11, 5.245e-11, 4.612e-11, 3.884e-11, 3.129e-11, 2.404e-11, 1.732e-11,
2529  1.223e-11, 8.574e-12, 5.888e-12, 3.986e-12, 2.732e-12, 1.948e-12, 1.414e-12,
2530  1.061e-12, 8.298e-13, 6.612e-13, 5.413e-13, 4.472e-13, 3.772e-13, 3.181e-13,
2531  2.645e-13, 2.171e-13, 1.778e-13, 1.464e-13, 1.183e-13, 9.637e-14, 7.991e-14,
2532  6.668e-14, 5.570e-14, 4.663e-14, 3.848e-14, 3.233e-14, 2.706e-14, 2.284e-14,
2533  1.944e-14, 1.664e-14, 1.430e-14, 1.233e-14, 1.066e-14, 9.234e-15, 8.023e-15,
2534  6.993e-15, 6.119e-15, 5.384e-15, 4.774e-15, 4.283e-15, 3.916e-15, 3.695e-15,
2535  3.682e-15, 4.004e-15, 4.912e-15, 6.853e-15, 1.056e-14, 1.712e-14, 2.804e-14,
2536  4.516e-14, 7.113e-14, 1.084e-13, 1.426e-13, 1.734e-13, 1.978e-13, 2.194e-13,
2537  2.388e-13, 2.489e-13, 2.626e-13, 2.865e-13, 3.105e-13, 3.387e-13, 3.652e-13,
2538  3.984e-13, 4.398e-13, 4.906e-13, 5.550e-13, 6.517e-13, 7.813e-13, 9.272e-13,
2539  1.164e-12, 1.434e-12, 1.849e-12, 2.524e-12, 3.328e-12, 4.523e-12, 6.108e-12,
2540  8.207e-12, 1.122e-11, 1.477e-11, 1.900e-11, 2.412e-11, 2.984e-11, 3.680e-11,
2541  4.353e-11, 4.963e-11, 5.478e-11, 5.903e-11, 6.233e-11, 6.483e-11, 6.904e-11,
2542  7.569e-11, 8.719e-11, 1.048e-10, 1.278e-10, 1.557e-10, 1.869e-10, 2.218e-10,
2543  2.610e-10, 2.975e-10, 3.371e-10, 3.746e-10, 4.065e-10, 4.336e-10, 4.503e-10,
2544  4.701e-10, 4.800e-10, 4.917e-10, 5.038e-10, 5.128e-10, 5.143e-10, 5.071e-10,
2545  5.019e-10, 5.025e-10, 5.183e-10, 5.496e-10, 5.877e-10, 6.235e-10, 6.420e-10,
2546  6.234e-10, 5.698e-10, 4.916e-10, 4.022e-10, 3.126e-10, 2.282e-10, 1.639e-10,
2547  1.142e-10, 7.919e-11, 5.690e-11, 4.313e-11, 3.413e-11, 2.807e-11, 2.410e-11,
2548  2.166e-11, 2.024e-11, 1.946e-11, 1.929e-11, 1.963e-11, 2.035e-11, 2.162e-11,
2549  2.305e-11, 2.493e-11, 2.748e-11, 3.048e-11, 3.413e-11, 3.754e-11, 4.155e-11,
2550  4.635e-11, 5.110e-11, 5.734e-11, 6.338e-11, 6.990e-11, 7.611e-11, 8.125e-11,
2551  8.654e-11, 8.951e-11, 9.182e-11, 9.310e-11, 9.273e-11, 9.094e-11, 8.849e-11,
2552  8.662e-11, 8.670e-11, 8.972e-11, 9.566e-11, 1.025e-10, 1.083e-10, 1.111e-10,
2553  1.074e-10, 9.771e-11, 8.468e-11, 6.958e-11, 5.470e-11, 4.040e-11, 2.940e-11,
2554  2.075e-11, 1.442e-11, 1.010e-11, 7.281e-12, 5.409e-12, 4.138e-12, 3.304e-12,
2555  2.784e-12, 2.473e-12, 2.273e-12, 2.186e-12, 2.118e-12, 2.066e-12, 1.958e-12,
2556  1.818e-12, 1.675e-12, 1.509e-12, 1.349e-12, 1.171e-12, 9.838e-13, 8.213e-13,
2557  6.765e-13, 5.378e-13, 4.161e-13, 3.119e-13, 2.279e-13, 1.637e-13, 1.152e-13,
2558  8.112e-14, 5.919e-14, 4.470e-14, 3.492e-14, 2.811e-14, 2.319e-14, 1.948e-14,
2559  1.660e-14, 1.432e-14, 1.251e-14, 1.109e-14, 1.006e-14, 9.450e-15, 9.384e-15,
2560  1.012e-14, 1.216e-14, 1.636e-14, 2.305e-14, 3.488e-14, 5.572e-14, 8.479e-14,
2561  1.265e-13, 1.905e-13, 2.730e-13, 3.809e-13, 4.955e-13, 6.303e-13, 7.861e-13,
2562  9.427e-13, 1.097e-12, 1.212e-12, 1.328e-12, 1.415e-12, 1.463e-12, 1.495e-12,
2563  1.571e-12, 1.731e-12, 1.981e-12, 2.387e-12, 2.930e-12, 3.642e-12, 4.584e-12,
2564  5.822e-12, 7.278e-12, 9.193e-12, 1.135e-11, 1.382e-11, 1.662e-11, 1.958e-11,
2565  2.286e-11, 2.559e-11, 2.805e-11, 2.988e-11, 3.106e-11, 3.182e-11, 3.200e-11,
2566  3.258e-11, 3.362e-11, 3.558e-11, 3.688e-11, 3.800e-11, 3.929e-11, 4.062e-11,
2567  4.186e-11, 4.293e-11, 4.480e-11, 4.643e-11, 4.704e-11, 4.571e-11, 4.206e-11,
2568  3.715e-11, 3.131e-11, 2.541e-11, 1.978e-11, 1.508e-11, 1.146e-11, 8.700e-12,
2569  6.603e-12, 5.162e-12, 4.157e-12, 3.408e-12, 2.829e-12, 2.405e-12, 2.071e-12,
2570  1.826e-12, 1.648e-12, 1.542e-12, 1.489e-12, 1.485e-12, 1.493e-12, 1.545e-12,
2571  1.637e-12, 1.814e-12, 2.061e-12, 2.312e-12, 2.651e-12, 3.030e-12, 3.460e-12,
2572  3.901e-12, 4.306e-12, 4.721e-12, 5.008e-12, 5.281e-12, 5.541e-12, 5.791e-12,
2573  6.115e-12, 6.442e-12, 6.680e-12, 6.791e-12, 6.831e-12, 6.839e-12, 6.946e-12,
2574  7.128e-12, 7.537e-12, 8.036e-12, 8.392e-12, 8.526e-12, 8.110e-12, 7.325e-12,
2575  6.329e-12, 5.183e-12, 4.081e-12, 2.985e-12, 2.141e-12, 1.492e-12, 1.015e-12,
2576  6.684e-13, 4.414e-13, 2.987e-13, 2.038e-13, 1.391e-13, 9.860e-14, 7.240e-14,
2577  5.493e-14, 4.288e-14, 3.427e-14, 2.787e-14, 2.296e-14, 1.909e-14, 1.598e-14,
2578  1.344e-14, 1.135e-14, 9.616e-15, 8.169e-15, 6.957e-15, 5.938e-15, 5.080e-15,
2579  4.353e-15, 3.738e-15, 3.217e-15, 2.773e-15, 2.397e-15, 2.077e-15, 1.805e-15,
2580  1.575e-15, 1.382e-15, 1.221e-15, 1.090e-15, 9.855e-16, 9.068e-16, 8.537e-16,
2581  8.270e-16, 8.290e-16, 8.634e-16, 9.359e-16, 1.055e-15, 1.233e-15, 1.486e-15,
2582  1.839e-15, 2.326e-15, 2.998e-15, 3.934e-15, 5.256e-15, 7.164e-15, 9.984e-15,
2583  1.427e-14, 2.099e-14, 3.196e-14, 5.121e-14, 7.908e-14, 1.131e-13, 1.602e-13,
2584  2.239e-13, 3.075e-13, 4.134e-13, 5.749e-13, 7.886e-13, 1.071e-12, 1.464e-12,
2585  2.032e-12, 2.800e-12, 3.732e-12, 4.996e-12, 6.483e-12, 8.143e-12, 1.006e-11,
2586  1.238e-11, 1.484e-11, 1.744e-11, 2.020e-11, 2.274e-11, 2.562e-11, 2.848e-11,
2587  3.191e-11, 3.617e-11, 4.081e-11, 4.577e-11, 4.937e-11, 5.204e-11, 5.401e-11,
2588  5.462e-11, 5.507e-11, 5.510e-11, 5.605e-11, 5.686e-11, 5.739e-11, 5.766e-11,
2589  5.740e-11, 5.754e-11, 5.761e-11, 5.777e-11, 5.712e-11, 5.510e-11, 5.088e-11,
2590  4.438e-11, 3.728e-11, 2.994e-11, 2.305e-11, 1.715e-11, 1.256e-11, 9.208e-12,
2591  6.745e-12, 5.014e-12, 3.785e-12, 2.900e-12, 2.239e-12, 1.757e-12, 1.414e-12,
2592  1.142e-12, 9.482e-13, 8.010e-13, 6.961e-13, 6.253e-13, 5.735e-13, 5.433e-13,
2593  5.352e-13, 5.493e-13, 5.706e-13, 6.068e-13, 6.531e-13, 7.109e-13, 7.767e-13,
2594  8.590e-13, 9.792e-13, 1.142e-12, 1.371e-12, 1.650e-12, 1.957e-12, 2.302e-12,
2595  2.705e-12, 3.145e-12, 3.608e-12, 4.071e-12, 4.602e-12, 5.133e-12, 5.572e-12,
2596  5.987e-12, 6.248e-12, 6.533e-12, 6.757e-12, 6.935e-12, 7.224e-12, 7.422e-12,
2597  7.538e-12, 7.547e-12, 7.495e-12, 7.543e-12, 7.725e-12, 8.139e-12, 8.627e-12,
2598  9.146e-12, 9.443e-12, 9.318e-12, 8.649e-12, 7.512e-12, 6.261e-12, 4.915e-12,
2599  3.647e-12, 2.597e-12, 1.785e-12, 1.242e-12, 8.660e-13, 6.207e-13, 4.610e-13,
2600  3.444e-13, 2.634e-13, 2.100e-13, 1.725e-13, 1.455e-13, 1.237e-13, 1.085e-13,
2601  9.513e-14, 7.978e-14, 6.603e-14, 5.288e-14, 4.084e-14, 2.952e-14, 2.157e-14,
2602  1.593e-14, 1.199e-14, 9.267e-15, 7.365e-15, 6.004e-15, 4.995e-15, 4.218e-15,
2603  3.601e-15, 3.101e-15, 2.692e-15, 2.360e-15, 2.094e-15, 1.891e-15, 1.755e-15,
2604  1.699e-15, 1.755e-15, 1.987e-15, 2.506e-15, 3.506e-15, 5.289e-15, 8.311e-15,
2605  1.325e-14, 2.129e-14, 3.237e-14, 4.595e-14, 6.441e-14, 8.433e-14, 1.074e-13,
2606  1.383e-13, 1.762e-13, 2.281e-13, 2.831e-13, 3.523e-13, 4.380e-13, 5.304e-13,
2607  6.290e-13, 7.142e-13, 8.032e-13, 8.934e-13, 9.888e-13, 1.109e-12, 1.261e-12,
2608  1.462e-12, 1.740e-12, 2.099e-12, 2.535e-12, 3.008e-12, 3.462e-12, 3.856e-12,
2609  4.098e-12, 4.239e-12, 4.234e-12, 4.132e-12, 3.986e-12, 3.866e-12, 3.829e-12,
2610  3.742e-12, 3.705e-12, 3.694e-12, 3.765e-12, 3.849e-12, 3.929e-12, 4.056e-12,
2611  4.092e-12, 4.047e-12, 3.792e-12, 3.407e-12, 2.953e-12, 2.429e-12, 1.931e-12,
2612  1.460e-12, 1.099e-12, 8.199e-13, 6.077e-13, 4.449e-13, 3.359e-13, 2.524e-13,
2613  1.881e-13, 1.391e-13, 1.020e-13, 7.544e-14, 5.555e-14, 4.220e-14, 3.321e-14,
2614  2.686e-14, 2.212e-14, 1.780e-14, 1.369e-14, 1.094e-14, 9.130e-15, 8.101e-15,
2615  7.828e-15, 8.393e-15, 1.012e-14, 1.259e-14, 1.538e-14, 1.961e-14, 2.619e-14,
2616  3.679e-14, 5.049e-14, 6.917e-14, 8.880e-14, 1.115e-13, 1.373e-13, 1.619e-13,
2617  1.878e-13, 2.111e-13, 2.330e-13, 2.503e-13, 2.613e-13, 2.743e-13, 2.826e-13,
2618  2.976e-13, 3.162e-13, 3.360e-13, 3.491e-13, 3.541e-13, 3.595e-13, 3.608e-13,
2619  3.709e-13, 3.869e-13, 4.120e-13, 4.366e-13, 4.504e-13, 4.379e-13, 3.955e-13,
2620  3.385e-13, 2.741e-13, 2.089e-13, 1.427e-13, 9.294e-14, 5.775e-14, 3.565e-14,
2621  2.210e-14, 1.398e-14, 9.194e-15, 6.363e-15, 4.644e-15, 3.550e-15, 2.808e-15,
2622  2.274e-15, 1.871e-15, 1.557e-15, 1.308e-15, 1.108e-15, 9.488e-16, 8.222e-16,
2623  7.238e-16, 6.506e-16, 6.008e-16, 5.742e-16, 5.724e-16, 5.991e-16, 6.625e-16,
2624  7.775e-16, 9.734e-16, 1.306e-15, 1.880e-15, 2.879e-15, 4.616e-15, 7.579e-15,
2625  1.248e-14, 2.030e-14, 3.244e-14, 5.171e-14, 7.394e-14, 9.676e-14, 1.199e-13,
2626  1.467e-13, 1.737e-13, 2.020e-13, 2.425e-13, 3.016e-13, 3.700e-13, 4.617e-13,
2627  5.949e-13, 7.473e-13, 9.378e-13, 1.191e-12, 1.481e-12, 1.813e-12, 2.232e-12,
2628  2.722e-12, 3.254e-12, 3.845e-12, 4.458e-12, 5.048e-12, 5.511e-12, 5.898e-12,
2629  6.204e-12, 6.293e-12, 6.386e-12, 6.467e-12, 6.507e-12, 6.466e-12, 6.443e-12,
2630  6.598e-12, 6.873e-12, 7.300e-12, 7.816e-12, 8.368e-12, 8.643e-12, 8.466e-12,
2631  7.871e-12, 6.853e-12, 5.714e-12, 4.482e-12, 3.392e-12, 2.613e-12, 2.008e-12,
2632  1.562e-12, 1.228e-12, 9.888e-13, 7.646e-13, 5.769e-13, 4.368e-13, 3.324e-13,
2633  2.508e-13, 1.916e-13};
2634 
2635 /*
2636  --------------------------- CKD_MT_3.20 -------------------------
2637 
2638  29 October 2018
2639 
2640  Release Notes for MT_CKD_3.20
2641 
2642  Prepared by S. A. Clough,
2643  AER Inc.,
2644  131 Harwell Avenue
2645  Lexington, MA 02421
2646  clough@aer.com
2647 
2648  The continuum was updated to MT_CKD_3.2, which has new self continnum
2649  coefficients in window regions for wavenumbers greater than 2000 cm-1
2650  and updated self continuum temperature dependence from 1800-3500 cm-1
2651  (E.J. Mlawer, M.J. Alvarado, K.E. Cady-Pereira)
2652 
2653  The continuum has been updated to MT_CKD v3.0, which included modifications
2654  to the H2O foreign continuum from 0-600 cm-1 and the self continuum in the
2655  microwave that resulted from an analysis of measurements taken at the ARM
2656  RHUBC-II campaign and a re-analysis of RHUBC-I measurements. (E.J. Mlawer,
2657  D.D. Turner, S.N. Paine, V.H. Payne)
2658 
2659  further information can be found under
2660  http://www.rtweb.aer.com/continuum_frame.html
2661 
2662  Transformation from original F77 code to C/C++ by
2663  E. Turner, Met Office UK, 29 October 2018
2664 
2665  --------------------------- CKD_MT_3.20 -------------------------
2666  */
2667 
2668 // H2O self continuum parameters at T=296 K
2669 // date of last update: 10/29/18
2670 // units of (CM**3/MOL)*1.E-20
2674 const int SL296_ckd_mt_320_npt = 2003;
2676  {0.000e0, 1.720e-01, 1.695e-01, 1.700e-01, 1.695e-01, 1.720e-01,
2677  1.680e-01, 1.687e-01, 1.624e-01, 1.606e-01, 1.508e-01, 1.447e-01,
2678  1.344e-01, 1.214e-01, 1.133e-01, 1.009e-01, 9.217e-02, 8.297e-02,
2679  6.989e-02, 6.513e-02, 5.469e-02, 5.056e-02, 4.417e-02, 3.779e-02,
2680  3.484e-02, 2.994e-02, 2.720e-02, 2.325e-02, 2.063e-02, 1.818e-02,
2681  1.592e-02, 1.405e-02, 1.251e-02, 1.080e-02, 9.647e-03, 8.424e-03,
2682  7.519e-03, 6.555e-03, 5.880e-03, 5.136e-03, 4.511e-03, 3.989e-03,
2683  3.509e-03, 3.114e-03, 2.740e-03, 2.446e-03, 2.144e-03, 1.895e-03,
2684  1.676e-03, 1.486e-03, 1.312e-03, 1.164e-03, 1.031e-03, 9.129e-04,
2685  8.106e-04, 7.213e-04, 6.400e-04, 5.687e-04, 5.063e-04, 4.511e-04,
2686  4.029e-04, 3.596e-04, 3.220e-04, 2.889e-04, 2.597e-04, 2.337e-04,
2687  2.108e-04, 1.907e-04, 1.728e-04, 1.570e-04, 1.430e-04, 1.305e-04,
2688  1.195e-04, 1.097e-04, 1.009e-04, 9.307e-05, 8.604e-05, 7.971e-05,
2689  7.407e-05, 6.896e-05, 6.433e-05, 6.013e-05, 5.631e-05, 5.283e-05,
2690  4.963e-05, 4.669e-05, 4.398e-05, 4.148e-05, 3.917e-05, 3.702e-05,
2691  3.502e-05, 3.316e-05, 3.142e-05, 2.978e-05, 2.825e-05, 2.681e-05,
2692  2.546e-05, 2.419e-05, 2.299e-05, 2.186e-05, 2.079e-05, 1.979e-05,
2693  1.884e-05, 1.795e-05, 1.711e-05, 1.633e-05, 1.559e-05, 1.490e-05,
2694  1.426e-05, 1.367e-05, 1.312e-05, 1.263e-05, 1.218e-05, 1.178e-05,
2695  1.143e-05, 1.112e-05, 1.088e-05, 1.070e-05, 1.057e-05, 1.050e-05,
2696  1.051e-05, 1.059e-05, 1.076e-05, 1.100e-05, 1.133e-05, 1.180e-05,
2697  1.237e-05, 1.308e-05, 1.393e-05, 1.483e-05, 1.614e-05, 1.758e-05,
2698  1.930e-05, 2.123e-05, 2.346e-05, 2.647e-05, 2.930e-05, 3.279e-05,
2699  3.745e-05, 4.152e-05, 4.813e-05, 5.477e-05, 6.203e-05, 7.331e-05,
2700  8.056e-05, 9.882e-05, 1.050e-04, 1.210e-04, 1.341e-04, 1.572e-04,
2701  1.698e-04, 1.968e-04, 2.175e-04, 2.431e-04, 2.735e-04, 2.867e-04,
2702  3.190e-04, 3.371e-04, 3.554e-04, 3.726e-04, 3.837e-04, 3.878e-04,
2703  3.864e-04, 3.858e-04, 3.841e-04, 3.852e-04, 3.815e-04, 3.762e-04,
2704  3.618e-04, 3.579e-04, 3.450e-04, 3.202e-04, 3.018e-04, 2.785e-04,
2705  2.602e-04, 2.416e-04, 2.097e-04, 1.939e-04, 1.689e-04, 1.498e-04,
2706  1.308e-04, 1.170e-04, 1.011e-04, 9.237e-05, 7.909e-05, 7.006e-05,
2707  6.112e-05, 5.401e-05, 4.914e-05, 4.266e-05, 3.963e-05, 3.316e-05,
2708  3.037e-05, 2.598e-05, 2.294e-05, 2.066e-05, 1.813e-05, 1.583e-05,
2709  1.423e-05, 1.247e-05, 1.116e-05, 9.760e-06, 8.596e-06, 7.720E-06,
2710  7.091E-06, 6.499E-06, 5.801E-06, 5.150E-06, // section diff to MT_1.0
2711  4.500E-06, 4.000E-06, 3.509E-06, 3.100E-06, 2.714E-06, 2.406E-06,
2712  2.108E-06, 1.875E-06, 1.669E-06, 1.555E-06, 1.444E-06, 1.345E-06,
2713  1.257E-06, 1.175E-06, 1.102E-06, 1.035E-06, 9.745E-07, 9.194E-07,
2714  8.685E-07, 8.222E-07, 7.798E-07, 7.412E-07, 7.052E-07, 6.724E-07,
2715  6.420E-07, 6.143E-07, 5.886E-07, 5.649E-07, 5.430E-07, 5.228E-07,
2716  5.041E-07, 4.868E-07, 4.708E-07, 4.559E-07, 4.421E-07, 4.293E-07,
2717  4.174E-07, 4.064E-07, 3.961E-07, 3.865E-07, 3.775E-07, 3.692E-07,
2718  3.614E-07, 3.542E-07, 3.474E-07, 3.411E-07, 3.353E-07, 3.298E-07,
2719  3.248E-07, 3.201E-07, 3.158E-07, 3.119E-07, 3.084E-07, 3.053E-07,
2720  3.025E-07, 3.003E-07, 2.988E-07, 2.976E-07, 2.977E-07, 2.989E-07,
2721  3.015E-07, 3.057E-07, 3.112E-07, 3.161E-07, 3.186E-07, 3.176E-07,
2722  3.142E-07, 3.099E-07, 3.065E-07, 3.011E-07, 2.955E-07, 2.914E-07,
2723  2.884E-07, 2.864E-07, 2.858E-07, 2.851E-07, 2.857E-07, 2.870E-07,
2724  2.888E-07, 2.914E-07, 2.948E-07, 2.990E-07, 3.042E-07, 3.105E-07,
2725  3.185E-07, 3.276E-07, 3.385E-07, 3.511E-07, 3.646E-07, 3.858E-07,
2726  4.081E-07, 4.335E-07, 4.643E-07, 5.011E-07, 5.494E-07, 5.953E-07,
2727  6.354E-07, 7.116E-07, 7.498E-07, 8.613E-07, 9.350E-07, 1.002E-06,
2728  1.090E-06, 1.174E-06, 1.230E-06, 1.288E-06, 1.334E-06, 1.383E-06,
2729  1.380E-06, 1.390E-06, 1.373E-06, 1.354E-06, 1.335E-06, 1.343E-06,
2730  1.323E-06, 1.349E-06, 1.353E-06, 1.362E-06, 1.344E-06, 1.329E-06,
2731  1.336E-06, 1.327E-06, 1.325E-06, 1.359E-06, 1.374E-06, 1.415E-06,
2732  1.462E-06, 1.526E-06, 1.619E-06, 1.735E-06, 1.863E-06, 2.034E-06,
2733  2.265E-06, 2.482E-06, 2.756E-06, 3.103E-06, 3.466E-06, 3.832E-06,
2734  4.378E-06, 4.913E-06, 5.651E-06, 6.311E-06, 7.169E-06, 8.057E-06,
2735  9.253E-06, 1.047E-05, 1.212E-05, 1.360E-05, 1.569E-05, 1.776E-05,
2736  2.020E-05, 2.281E-05, 2.683E-05, 2.994E-05, 3.488E-05, 3.896E-05,
2737  4.499E-05, 5.175E-05, 6.035E-05, 6.340E-05, 7.281E-05, 7.923E-05,
2738  8.348E-05, 9.631E-05, 1.044E-04, 1.102E-04, 1.176E-04, 1.244E-04,
2739  1.283E-04, 1.326E-04, 1.400E-04, 1.395E-04, 1.387E-04, 1.363E-04,
2740  1.314E-04, 1.241E-04, 1.228E-04, 1.148E-04, 1.086E-04, 1.018E-04,
2741  8.890E-05, 8.316E-05, 7.292E-05, 6.452E-05, 5.625E-05, 5.045E-05,
2742  4.380E-05, 3.762E-05, 3.290E-05, 2.836E-05, 2.485E-05, 2.168E-05,
2743  1.895E-05, 1.659E-05, 1.453E-05, 1.282E-05, 1.132E-05, 1.001E-05,
2744  8.836E-06, 7.804E-06, 6.922E-06, 6.116E-06, 5.429E-06, 4.824E-06,
2745  4.278E-06, 3.788E-06, 3.371E-06, 2.985E-06, 2.649E-06, 2.357E-06,
2746  2.090E-06, 1.858E-06, 1.647E-06, 1.462E-06, 1.299E-06, 1.155E-06,
2747  1.028E-06, 9.142E-07, 8.132E-07, 7.246E-07, 6.418E-07, 5.726E-07,
2748  5.221E-07, 4.890E-07, 4.666E-07, 4.443E-07, 4.203E-07, 3.978E-07,
2749  3.770E-07, 3.575E-07, 3.395E-07, 3.227E-07, 3.070E-07, 2.924E-07,
2750  2.788E-07, 2.661E-07, 2.543E-07, 2.433E-07, 2.329E-07, 2.233E-07,
2751  2.143E-07, 2.058E-07, 1.980E-07, 1.906E-07, 1.837E-07, 1.773E-07,
2752  1.713E-07, 1.657E-07, 1.605E-07, 1.557E-07, 1.514E-07, 1.472E-07,
2753  1.435E-07, 1.404E-07, 1.377E-07, 1.354E-07, 1.332E-07, 1.308E-07,
2754  1.282E-07, 1.256E-07, 1.227E-07, 1.192E-07, 1.159E-07, 1.134E-07,
2755  1.114E-07, 1.098E-07, 1.081E-07, 1.066E-07, 1.055E-07, 1.045E-07,
2756  1.036E-07, 1.030E-07, 1.026E-07, 1.025E-07, 1.025E-07, 1.028E-07,
2757  1.033E-07, 1.041E-07, 1.049E-07, 1.060E-07, 1.075E-07, 1.093E-07,
2758  1.114E-07, 1.139E-07, 1.166E-07, 1.199E-07, 1.239E-07, 1.282E-07,
2759  1.316E-07, 1.355E-07, 1.436E-07, 1.588E-07, 1.807E-07, 2.060E-07,
2760  2.337E-07, 2.645E-07, 2.996E-07, 3.393E-07, 3.843E-07, 4.363E-07,
2761  4.935E-07, 5.607E-07, 6.363E-07, 7.242E-07, 8.230E-07, 9.411E-07,
2762  1.071E-06, 1.232E-06, 1.402E-06, 1.600E-06, 1.820E-06, 2.128E-06,
2763  2.386E-06, 2.781E-06, 3.242E-06, 3.653E-06, 4.323E-06, 4.747E-06,
2764  5.321E-06, 5.919E-06, 6.681E-06, 7.101E-06, 7.983E-06, 8.342E-06,
2765  8.741E-06, 9.431E-06, 9.952E-06, 1.026E-05, 1.055E-05, 1.095E-05,
2766  1.095E-05, 1.087E-05, 1.056E-05, 1.026E-05, 9.715E-06, 9.252E-06,
2767  8.452E-06, 7.958E-06, 7.268E-06, 6.295E-06, 6.003E-06, 5.000E-06,
2768  4.591E-06, 3.983E-06, 3.479E-06, 3.058E-06, 2.667E-06, 2.293E-06,
2769  1.995E-06, 1.747E-06, 1.517E-06, 1.335E-06, 1.165E-06, 1.028E-06,
2770  9.007E-07, 7.956E-07, 7.015E-07, 6.192E-07, 5.491E-07, 4.859E-07,
2771  4.297E-07, 3.799E-07, 3.380E-07, 3.002E-07, 2.659E-07, 2.366E-07,
2772  2.103E-07, 1.861E-07, 1.655E-07, 1.469E-07, 1.309E-07, 1.162E-07,
2773  1.032E-07, 9.198E-08, 8.181E-08, 7.294E-08, 6.516E-08, 5.787E-08,
2774  5.163E-08, 4.612E-08, 4.096E-08, 3.654E-08, 3.299E-08, 3.052E-08,
2775  2.856E-08, 2.683E-08, 2.507E-08, 2.346E-08, 2.194E-08, 2.053E-08,
2776  1.921E-08, 1.799E-08, 1.686E-08, 1.580E-08, 1.481E-08, 1.389E-08,
2777  1.304E-08, 1.226E-08, 1.151E-08, 1.083E-08, 1.020E-08, 9.618E-09,
2778  9.080E-09, 8.575E-09, 8.080E-09, 7.624E-09, 7.176E-09, 6.761E-09,
2779  6.370E-09, 6.004E-09, 5.672E-09, 5.371E-09, 5.097E-09, 4.845E-09,
2780  4.608E-09, 4.390E-09, 4.192E-09, 4.011E-09, 3.846E-09, 3.698E-09,
2781  3.568E-09, 3.450E-09, 3.351E-09, 3.268E-09, 3.195E-09, 3.131E-09,
2782  3.091E-09, 3.060E-09, 3.039E-09, 3.034E-09, 3.045E-09, 3.072E-09,
2783  3.116E-09, 3.176E-09, 3.253E-09, 3.347E-09, 3.467E-09, 3.605E-09,
2784  3.763E-09, 3.946E-09, 4.162E-09, 4.399E-09, 4.677E-09, 4.983E-09,
2785  5.336E-09, 5.728E-09, 6.168E-09, 6.684E-09, 7.214E-09, 7.861E-09,
2786  8.620E-09, 9.481E-09, 1.032E-08, 1.135E-08, 1.264E-08, 1.396E-08,
2787  1.567E-08, 1.740E-08, 1.977E-08, 2.200E-08, 2.563E-08, 2.935E-08,
2788  3.386E-08, 3.993E-08, 4.828E-08, 5.714E-08, 6.877E-08, 8.135E-08,
2789  9.779E-08, 1.132E-07, 1.344E-07, 1.544E-07, 1.820E-07, 2.207E-07,
2790  2.509E-07, 2.854E-07, 3.026E-07, 3.278E-07, 3.474E-07, 3.693E-07,
2791  3.930E-07, 4.104E-07, 4.220E-07, 4.439E-07, 4.545E-07, 4.778E-07,
2792  4.812E-07, 5.018E-07, 4.899E-07, 5.075E-07, 5.073E-07, 5.171E-07,
2793  5.131E-07, 5.250E-07, 5.617E-07, 5.846E-07, 6.239E-07, 6.696E-07,
2794  7.398E-07, 8.073E-07, 9.150E-07, 1.009E-06, 1.116E-06, 1.264E-06,
2795  1.439E-06, 1.644E-06, 1.856E-06, 2.147E-06, 2.317E-06, 2.713E-06,
2796  2.882E-06, 2.990E-06, 3.489E-06, 3.581E-06, 4.033E-06, 4.260E-06,
2797  4.543E-06, 4.840E-06, 4.826E-06, 5.013E-06, 5.252E-06, 5.277E-06,
2798  5.306E-06, 5.234E-06, 5.111E-06, 5.134E-06, 4.748E-06, 4.434E-06,
2799  4.109E-06, 3.605E-06, 3.252E-06, 2.731E-06, 2.369E-06, 1.922E-06,
2800  1.558E-06, 1.321E-06, 1.058E-06, 8.515E-07, 6.811E-07, 5.431E-07,
2801  4.348E-07, 3.510E-07, 2.853E-07, 2.344E-07, 1.949E-07, 1.649E-07,
2802  1.409E-07, 1.232E-07, 1.098E-07, 9.866E-08, 8.899E-08, 8.135E-08,
2803  7.409E-08, 6.809E-08, 6.237E-08, 5.728E-08, 5.267E-08, 4.865E-08,
2804  4.482E-08, 4.169E-08, 3.841E-08, 3.573E-08, 3.304E-08, 3.065E-08,
2805  2.851E-08, 2.634E-08, 2.448E-08, 2.275E-08, 2.114E-08, 1.965E-08,
2806  1.830E-08, 1.707E-08, 1.591E-08, 1.484E-08, 1.386E-08, 1.294E-08,
2807  1.209E-08, 1.131E-08, 1.056E-08, 9.901E-09, 9.263E-09, 8.680E-09,
2808  8.137E-09, 7.627E-09, 7.158E-09, 6.715E-09, 6.305E-09, 5.927E-09,
2809  5.568E-09, 5.242E-09, 4.935E-09, 4.648E-09, 4.383E-09, 4.137E-09,
2810  3.909E-09, 3.697E-09, 3.500E-09, 3.321E-09, 3.156E-09, 3.006E-09,
2811  2.868E-09, 2.745E-09, 2.638E-09, 2.545E-09, 2.469E-09, 2.405E-09,
2812  2.369E-09, 2.344E-09, 2.350E-09, 2.371E-09, 2.491E-09, 2.535E-09,
2813  2.730E-09, 3.067E-09, 3.322E-09, 3.630E-09, 4.045E-09, 4.524E-09,
2814  4.981E-09, 5.613E-09, 6.051E-09, 6.538E-09, 6.892E-09, 7.601E-09,
2815  8.194E-09, 8.806E-09, 9.450E-09, 9.745E-09, 1.009E-08, 1.017E-08,
2816  1.039E-08, 1.061E-08, 1.076E-08, 1.086E-08, 1.111E-08, 1.142E-08,
2817  1.160E-08, 1.174E-08, 1.180E-08, 1.187E-08, 1.194E-08, 1.192E-08,
2818  1.224E-08, 1.245E-08, 1.246E-08, 1.318E-08, 1.377E-08, 1.471E-08,
2819  1.582E-08, 1.713E-08, 1.853E-08, 2.063E-08, 2.270E-08, 2.567E-08,
2820  2.891E-08, 3.264E-08, 3.744E-08, 4.286E-08, 4.915E-08, 5.623E-08,
2821  6.336E-08, 7.293E-08, 8.309E-08, 9.319E-08, 1.091E-07, 1.243E-07,
2822  1.348E-07, 1.449E-07, 1.620E-07, 1.846E-07, 1.937E-07, 2.040E-07,
2823  2.179E-07, 2.298E-07, 2.433E-07, 2.439E-07, 2.464E-07, 2.611E-07,
2824  2.617E-07, 2.582E-07, 2.453E-07, 2.401E-07, 2.349E-07, 2.203E-07,
2825  2.066E-07, 1.939E-07, 1.780E-07, 1.558E-07, 1.391E-07, 1.203E-07,
2826  1.048E-07, 9.464E-08, 8.306E-08, 7.239E-08, 6.317E-08, 5.520E-08,
2827  4.847E-08, 4.282E-08, 3.796E-08, 3.377E-08, 2.996E-08, 2.678E-08,
2828  2.400E-08, 2.134E-08, 1.904E-08, 1.705E-08, 1.523E-08, 1.350E-08,
2829  1.204E-08, 1.070E-08, 9.408E-09, 8.476E-09, 7.470E-09, 6.679E-09,
2830  5.929E-09, 5.267E-09, 4.711E-09, 4.172E-09, 3.761E-09, 3.288E-09,
2831  2.929E-09, 2.609E-09, 2.315E-09, 2.042E-09, 1.844E-09, 1.640E-09,
2832  1.470E-09, 1.310E-09, 1.176E-09, 1.049E-09, 9.377E-10, 8.462E-10,
2833  7.616E-10, 6.818E-10, 6.119E-10, 5.558E-10, 5.152E-10, 4.832E-10,
2834  4.546E-10, 4.267E-10, 4.009E-10, 3.770E-10, 3.546E-10, 3.340E-10,
2835  3.149E-10, 2.971E-10, 2.805E-10, 2.652E-10, 2.509E-10, 2.377E-10,
2836  2.255E-10, 2.142E-10, 2.038E-10, 1.943E-10, 1.855E-10, 1.776E-10,
2837  1.703E-10, 1.640E-10, 1.586E-10, 1.536E-10, 1.494E-10, 1.466E-10,
2838  1.446E-10, 1.440E-10, 1.439E-10, 1.455E-10, 1.461E-10, 1.479E-10,
2839  1.514E-10, 1.538E-10, 1.590E-10, 1.652E-10, 1.750E-10, 1.811E-10,
2840  1.880E-10, 1.933E-10, 2.027E-10, 2.078E-10, 2.170E-10, 2.249E-10,
2841  2.323E-10, 2.408E-10, 2.461E-10, 2.536E-10, 2.581E-10, 2.615E-10,
2842  2.721E-10, 2.782E-10, 2.866E-10, 2.938E-10, 2.958E-10, 3.011E-10,
2843  3.155E-10, 3.237E-10, 3.589E-10, 3.838E-10, 4.083E-10, 4.354E-10,
2844  4.745E-10, 5.148E-10, 5.648E-10, 6.194E-10, 6.748E-10, 7.566E-10,
2845  8.421E-10, 9.427E-10, 1.042E-09, 1.165E-09, 1.341E-09, 1.518E-09,
2846  1.686E-09, 2.036E-09, 2.362E-09, 2.811E-09, 3.296E-09, 4.070E-09,
2847  4.695E-09, 6.152E-09, 7.572E-09, 9.557E-09, 1.135E-08, 1.279E-08,
2848  1.364E-08, 1.436E-08, 1.540E-08, 1.672E-08, 1.793E-08, 1.906E-08,
2849  2.036E-08, 2.144E-08, 2.292E-08, 2.371E-08, 2.493E-08, 2.606E-08,
2850  2.706E-08, 2.866E-08, 3.036E-08, 3.136E-08, 3.405E-08, 3.665E-08,
2851  3.837E-08, 4.229E-08, 4.748E-08, 5.320E-08, 5.763E-08, 6.677E-08,
2852  7.216E-08, 7.716E-08, 8.958E-08, 9.419E-08, 1.036E-07, 1.108E-07,
2853  1.189E-07, 1.246E-07, 1.348E-07, 1.310E-07, 1.361E-07, 1.364E-07,
2854  1.363E-07, 1.343E-07, 1.293E-07, 1.254E-07, 1.235E-07, 1.158E-07,
2855  1.107E-07, 9.961E-08, 9.011E-08, 7.910E-08, 6.916E-08, 6.338E-08,
2856  5.564E-08, 4.827E-08, 4.198E-08, 3.695E-08, 3.276E-08, 2.929E-08,
2857  2.633E-08, 2.391E-08, 2.192E-08, 2.021E-08, 1.890E-08, 1.772E-08,
2858  1.667E-08, 1.603E-08, 1.547E-08, 1.537E-08, 1.492E-08, 1.515E-08,
2859  1.479E-08, 1.450E-08, 1.513E-08, 1.495E-08, 1.529E-08, 1.565E-08,
2860  1.564E-08, 1.553E-08, 1.569E-08, 1.584E-08, 1.570E-08, 1.538E-08,
2861  1.531E-08, 1.346E-08, 1.199E-08, 1.044E-08, 8.892E-09, 7.076E-09,
2862  5.884E-09, 5.039E-09, 4.129E-09, 3.663E-09, 2.993E-09, 2.622E-09,
2863  2.232E-09, 1.884E-09, 1.569E-09, 1.348E-09, 1.144E-09, 1.009E-09,
2864  8.833E-10, 7.907E-10, 7.079E-10, 6.514E-10, 5.823E-10, 5.312E-10,
2865  4.883E-10, 4.458E-10, 4.094E-10, 3.734E-10, 3.458E-10, 3.205E-10,
2866  2.962E-10, 2.733E-10, 2.532E-10, 2.351E-10, 2.187E-10, 2.034E-10,
2867  1.889E-10, 1.764E-10, 1.648E-10, 1.541E-10, 1.443E-10, 1.355E-10,
2868  1.274E-10, 1.198E-10, 1.133E-10, 1.071E-10, 1.015E-10, 9.648E-11,
2869  9.195E-11, 8.791E-11, 8.435E-11, 8.125E-11, 7.859E-11, 7.621E-11,
2870  7.481E-11, 7.351E-11, 7.228E-11, 7.295E-11, 7.339E-11, 7.588E-11,
2871  7.701E-11, 7.886E-11, 8.511E-11, 9.061E-11, 9.926E-11, 1.083E-10,
2872  1.241E-10, 1.469E-10, 1.736E-10, 1.966E-10, 2.132E-10, 2.280E-10,
2873  2.473E-10, 2.718E-10, 2.922E-10, 3.128E-10, 3.361E-10, 3.641E-10,
2874  3.910E-10, 4.196E-10, 4.501E-10, 4.932E-10, 5.258E-10, 5.755E-10,
2875  6.253E-10, 6.664E-10, 7.344E-10, 7.985E-10, 8.877E-10, 1.005E-09,
2876  1.118E-09, 1.251E-09, 1.428E-09, 1.610E-09, 1.888E-09, 2.077E-09,
2877  2.331E-09, 2.751E-09, 3.061E-09, 3.522E-09, 3.805E-09, 4.181E-09,
2878  4.575E-09, 5.167E-09, 5.634E-09, 6.007E-09, 6.501E-09, 6.829E-09,
2879  7.211E-09, 7.262E-09, 7.696E-09, 7.832E-09, 7.799E-09, 7.651E-09,
2880  7.304E-09, 7.150E-09, 6.977E-09, 6.603E-09, 6.209E-09, 5.690E-09,
2881  5.432E-09, 4.764E-09, 4.189E-09, 3.640E-09, 3.203E-09, 2.848E-09,
2882  2.510E-09, 2.194E-09, 1.946E-09, 1.750E-09, 1.567E-09, 1.426E-09,
2883  1.302E-09, 1.197E-09, 1.109E-09, 1.035E-09, 9.719E-10, 9.207E-10,
2884  8.957E-10, 8.578E-10, 8.262E-10, 8.117E-10, 7.987E-10, 7.875E-10,
2885  7.741E-10, 7.762E-10, 7.537E-10, 7.424E-10, 7.474E-10, 7.294E-10,
2886  7.216E-10, 7.233E-10, 7.140E-10, 7.085E-10, 6.434E-10, 5.585E-10,
2887  5.015E-10, 3.956E-10, 3.337E-10, 2.545E-10, 2.141E-10, 1.761E-10,
2888  1.685E-10, 1.507E-10, 1.241E-10, 1.081E-10, 9.675E-11, 7.964E-11,
2889  6.930E-11, 5.790E-11, 5.069E-11, 4.452E-11, 3.970E-11, 3.551E-11,
2890  3.228E-11, 2.939E-11, 2.682E-11, 2.471E-11, 2.278E-11, 2.106E-11,
2891  1.950E-11, 1.811E-11, 1.682E-11, 1.563E-11, 1.458E-11, 1.363E-11,
2892  1.278E-11, 1.200E-11, 1.129E-11, 1.066E-11, 1.007E-11, 9.545E-12,
2893  9.075E-12, 8.656E-12, 8.285E-12, 7.958E-12, 7.674E-12, 7.431E-12,
2894  7.227E-12, 7.061E-12, 6.934E-12, 6.843E-12, 6.790E-12, 6.775E-12,
2895  6.798E-12, 6.859E-12, 6.960E-12, 7.102E-12, 7.287E-12, 7.517E-12,
2896  7.795E-12, 8.123E-12, 8.504E-12, 8.945E-12, 9.450E-12, 1.003E-11,
2897  1.070E-11, 1.148E-11, 1.232E-11, 1.327E-11, 1.441E-11, 1.535E-11,
2898  1.655E-11, 1.814E-11, 2.020E-11, 2.307E-11, 2.622E-11, 2.962E-11,
2899  3.369E-11, 3.819E-11, 4.329E-11, 4.932E-11, 5.589E-11, 6.364E-11,
2900  7.284E-11, 8.236E-11, 9.447E-11, 1.078E-10, 1.229E-10, 1.417E-10,
2901  1.614E-10, 1.843E-10, 2.107E-10, 2.406E-10, 2.728E-10, 3.195E-10,
2902  3.595E-10, 4.153E-10, 4.736E-10, 5.410E-10, 6.088E-10, 6.769E-10,
2903  7.691E-10, 8.545E-10, 9.621E-10, 1.047E-09, 1.161E-09, 1.296E-09,
2904  1.424E-09, 1.576E-09, 1.739E-09, 1.893E-09, 2.080E-09, 2.336E-09,
2905  2.604E-09, 2.760E-09, 3.001E-09, 3.365E-09, 3.550E-09, 3.895E-09,
2906  4.183E-09, 4.614E-09, 4.846E-09, 5.068E-09, 5.427E-09, 5.541E-09,
2907  5.864E-09, 5.997E-09, 5.997E-09, 6.061E-09, 5.944E-09, 5.855E-09,
2908  5.661E-09, 5.523E-09, 5.374E-09, 4.940E-09, 4.688E-09, 4.170E-09,
2909  3.913E-09, 3.423E-09, 2.997E-09, 2.598E-09, 2.253E-09, 1.946E-09,
2910  1.710E-09, 1.507E-09, 1.336E-09, 1.190E-09, 1.068E-09, 9.623E-10,
2911  8.772E-10, 8.007E-10, 7.420E-10, 6.884E-10, 6.483E-10, 6.162E-10,
2912  5.922E-10, 5.688E-10, 5.654E-10, 5.637E-10, 5.701E-10, 5.781E-10,
2913  5.874E-10, 6.268E-10, 6.357E-10, 6.525E-10, 7.137E-10, 7.441E-10,
2914  8.024E-10, 8.485E-10, 9.143E-10, 9.536E-10, 9.717E-10, 1.018E-09,
2915  1.042E-09, 1.054E-09, 1.092E-09, 1.093E-09, 1.072E-09, 1.046E-09,
2916  9.283E-10, 8.053E-10, 6.680E-10, 5.630E-10, 4.933E-10, 3.488E-10,
2917  3.324E-10, 2.826E-10, 2.429E-10, 2.051E-10, 1.679E-10, 1.411E-10,
2918  1.240E-10, 1.098E-10, 9.668E-11, 8.529E-11, 7.848E-11, 7.098E-11,
2919  6.117E-11, 5.246E-11, 4.521E-11, 4.059E-11, 3.783E-11, 3.502E-11,
2920  3.271E-11, 2.956E-11, 2.636E-11, 2.464E-11, 2.190E-11, 1.986E-11,
2921  1.791E-11, 1.638E-11, 1.491E-11, 1.383E-11, 1.271E-11, 1.166E-11,
2922  1.082E-11, 1.002E-11, 9.317E-12, 8.697E-12, 8.157E-12, 7.678E-12,
2923  7.252E-12, 6.874E-12, 6.539E-12, 6.243E-12, 5.985E-12, 5.763E-12,
2924  5.575E-12, 5.421E-12, 5.300E-12, 5.212E-12, 5.157E-12, 5.138E-12,
2925  5.156E-12, 5.214E-12, 5.313E-12, 5.457E-12, 5.686E-12, 5.953E-12,
2926  6.284E-12, 6.856E-12, 7.351E-12, 8.006E-12, 8.957E-12, 1.031E-11,
2927  1.170E-11, 1.345E-11, 1.623E-11, 1.999E-11, 2.507E-11, 3.004E-11,
2928  3.378E-11, 3.688E-11, 4.118E-11, 4.569E-11, 5.025E-11, 5.660E-11,
2929  6.231E-11, 6.881E-11, 7.996E-11, 8.526E-11, 9.694E-11, 1.106E-10,
2930  1.222E-10, 1.355E-10, 1.525E-10, 1.775E-10, 1.924E-10, 2.181E-10,
2931  2.379E-10, 2.662E-10, 2.907E-10, 3.154E-10, 3.366E-10, 3.579E-10,
2932  3.858E-10, 4.046E-10, 4.196E-10, 4.166E-10, 4.457E-10, 4.466E-10,
2933  4.404E-10, 4.337E-10, 4.150E-10, 4.083E-10, 3.910E-10, 3.723E-10,
2934  3.514E-10, 3.303E-10, 2.847E-10, 2.546E-10, 2.230E-10, 1.994E-10,
2935  1.733E-10, 1.488E-10, 1.297E-10, 1.144E-10, 1.004E-10, 8.741E-11,
2936  7.928E-11, 7.034E-11, 6.323E-11, 5.754E-11, 5.250E-11, 4.850E-11,
2937  4.502E-11, 4.286E-11, 4.028E-11, 3.899E-11, 3.824E-11, 3.761E-11,
2938  3.804E-11, 3.839E-11, 3.845E-11, 4.244E-11, 4.382E-11, 4.582E-11,
2939  4.847E-11, 5.209E-11, 5.384E-11, 5.887E-11, 6.371E-11, 6.737E-11,
2940  7.168E-11, 7.415E-11, 7.827E-11, 8.037E-11, 8.120E-11, 8.154E-11,
2941  7.981E-11, 7.783E-11, 6.900E-11, 6.030E-11, 4.900E-11, 3.878E-11,
2942  3.068E-11, 2.533E-11, 2.255E-11, 2.056E-11, 1.569E-11, 1.398E-11,
2943  1.149E-11, 9.249E-12, 7.706E-12, 6.436E-12, 5.514E-12, 4.782E-12,
2944  4.202E-12, 3.721E-12, 3.336E-12, 3.015E-12, 2.744E-12, 2.512E-12,
2945  2.312E-12, 2.138E-12, 1.987E-12, 1.855E-12, 1.741E-12, 1.642E-12,
2946  1.557E-12, 1.483E-12, 1.422E-12, 1.370E-12, 1.329E-12, 1.297E-12,
2947  1.274E-12, 1.259E-12, 1.253E-12, 1.255E-12, 1.266E-12, 1.284E-12,
2948  1.312E-12, 1.348E-12, 1.393E-12, 1.448E-12, 1.512E-12, 1.587E-12,
2949  1.672E-12, 1.770E-12, 1.880E-12, 1.990E-12, 2.110E-12, 2.274E-12,
2950  2.516E-12, 2.844E-12, 3.231E-12, 3.661E-12, 4.153E-12, 4.717E-12,
2951  5.360E-12, 6.094E-12, 6.930E-12, 7.882E-12, 8.966E-12, 1.020E-11,
2952  1.162E-11, 1.324E-11, 1.510E-11, 1.720E-11, 1.965E-11, 2.237E-11,
2953  2.560E-11, 2.927E-11, 3.371E-11, 3.842E-11, 4.429E-11, 5.139E-11,
2954  5.798E-11, 6.697E-11, 7.626E-11, 8.647E-11, 1.022E-10, 1.136E-10,
2955  1.300E-10, 1.481E-10, 1.672E-10, 1.871E-10, 2.126E-10, 2.357E-10,
2956  2.583E-10, 2.997E-10, 3.289E-10, 3.702E-10, 4.012E-10, 4.319E-10,
2957  4.527E-10, 5.001E-10, 5.448E-10, 5.611E-10, 5.760E-10, 5.965E-10,
2958  6.079E-10, 6.207E-10, 6.276E-10, 6.222E-10, 6.137E-10, 6.000E-10,
2959  5.814E-10, 5.393E-10, 5.350E-10, 4.947E-10, 4.629E-10, 4.117E-10,
2960  3.712E-10, 3.372E-10, 2.923E-10, 2.550E-10, 2.232E-10, 1.929E-10,
2961  1.679E-10, 1.460E-10, 1.289E-10, 1.130E-10, 9.953E-11, 8.763E-11,
2962  7.760E-11, 6.900E-11, 6.160E-11, 5.525E-11, 4.958E-11, 4.489E-11,
2963  4.072E-11, 3.728E-11, 3.438E-11, 3.205E-11, 3.006E-11, 2.848E-11,
2964  2.766E-11, 2.688E-11, 2.664E-11, 2.670E-11, 2.696E-11, 2.786E-11,
2965  2.861E-11, 3.009E-11, 3.178E-11, 3.389E-11, 3.587E-11, 3.819E-11,
2966  4.054E-11, 4.417E-11, 4.703E-11, 5.137E-11, 5.460E-11, 6.055E-11,
2967  6.333E-11, 6.773E-11, 7.219E-11, 7.717E-11, 8.131E-11, 8.491E-11,
2968  8.574E-11, 9.010E-11, 9.017E-11, 8.999E-11, 8.959E-11, 8.838E-11,
2969  8.579E-11, 8.162E-11, 8.098E-11, 7.472E-11, 7.108E-11, 6.559E-11,
2970  5.994E-11, 5.172E-11, 4.424E-11, 3.951E-11, 3.340E-11, 2.902E-11,
2971  2.541E-11, 2.215E-11, 1.945E-11, 1.716E-11, 1.503E-11, 1.339E-11,
2972  1.185E-11, 1.050E-11, 9.336E-12, 8.307E-12, 7.312E-12, 6.550E-12,
2973  5.836E-12, 5.178E-12, 4.600E-12, 4.086E-12, 3.639E-12, 3.247E-12,
2974  2.904E-12, 2.604E-12, 2.341E-12, 2.112E-12, 1.914E-12, 1.744E-12,
2975  1.598E-12, 1.476E-12, 1.374E-12, 1.293E-12, 1.230E-12, 1.185E-12,
2976  1.158E-12, 1.147E-12, 1.154E-12, 1.177E-12, 1.219E-12, 1.280E-12,
2977  1.360E-12, 1.463E-12, 1.591E-12, 1.750E-12, 1.940E-12, 2.156E-12,
2978  2.430E-12, 2.748E-12, 3.052E-12, 3.533E-12, 3.967E-12, 4.471E-12,
2979  5.041E-12, 5.860E-12, 6.664E-12, 7.522E-12, 8.342E-12, 9.412E-12,
2980  1.072E-11, 1.213E-11, 1.343E-11, 1.496E-11, 1.664E-11, 1.822E-11,
2981  2.029E-11, 2.233E-11, 2.457E-11, 2.709E-11, 2.928E-11, 3.115E-11,
2982  3.356E-11, 3.592E-11, 3.818E-11, 3.936E-11, 4.061E-11, 4.149E-11,
2983  4.299E-11, 4.223E-11, 4.251E-11, 4.287E-11, 4.177E-11, 4.094E-11,
2984  3.942E-11, 3.772E-11, 3.614E-11, 3.394E-11, 3.222E-11, 2.791E-11,
2985  2.665E-11, 2.309E-11, 2.032E-11, 1.740E-11, 1.535E-11, 1.323E-11,
2986  1.151E-11, 9.803E-12, 8.650E-12, 7.540E-12, 6.619E-12, 5.832E-12,
2987  5.113E-12, 4.503E-12, 3.975E-12, 3.520E-12, 3.112E-12, 2.797E-12,
2988  2.500E-12, 2.240E-12, 2.013E-12, 1.819E-12, 1.653E-12, 1.513E-12,
2989  1.395E-12, 1.299E-12, 1.225E-12, 1.168E-12, 1.124E-12, 1.148E-12,
2990  1.107E-12, 1.128E-12, 1.169E-12, 1.233E-12, 1.307E-12, 1.359E-12,
2991  1.543E-12, 1.686E-12, 1.794E-12, 2.028E-12, 2.210E-12, 2.441E-12,
2992  2.653E-12, 2.828E-12, 3.093E-12, 3.280E-12, 3.551E-12, 3.677E-12,
2993  3.803E-12, 3.844E-12, 4.068E-12, 4.093E-12, 4.002E-12, 3.904E-12,
2994  3.624E-12, 3.633E-12, 3.622E-12, 3.443E-12, 3.184E-12, 2.934E-12,
2995  2.476E-12, 2.212E-12, 1.867E-12, 1.594E-12, 1.370E-12, 1.192E-12,
2996  1.045E-12, 9.211E-13, 8.170E-13, 7.290E-13, 6.550E-13, 5.929E-13,
2997  5.415E-13, 4.995E-13, 4.661E-13, 4.406E-13, 4.225E-13, 4.116E-13,
2998  4.075E-13, 4.102E-13, 4.198E-13, 4.365E-13, 4.606E-13, 4.925E-13,
2999  5.326E-13, 5.818E-13, 6.407E-13, 7.104E-13, 7.920E-13, 8.868E-13,
3000  9.964E-13, 1.123E-12, 1.268E-12, 1.434E-12, 1.626E-12, 1.848E-12,
3001  2.107E-12, 2.422E-12, 2.772E-12, 3.145E-12, 3.704E-12, 4.270E-12,
3002  4.721E-12, 5.361E-12, 6.083E-12, 7.095E-12, 7.968E-12, 9.228E-12,
3003  1.048E-11, 1.187E-11, 1.336E-11, 1.577E-11, 1.772E-11, 2.017E-11,
3004  2.250E-11, 2.630E-11, 2.911E-11, 3.356E-11, 3.820E-11, 4.173E-11,
3005  4.811E-11, 5.254E-11, 5.839E-11, 6.187E-11, 6.805E-11, 7.118E-11,
3006  7.369E-11, 7.664E-11, 7.794E-11, 7.947E-11, 8.036E-11, 7.954E-11,
3007  7.849E-11, 7.518E-11, 7.462E-11, 6.926E-11, 6.531E-11, 6.197E-11,
3008  5.421E-11, 4.777E-11, 4.111E-11, 3.679E-11, 3.166E-11, 2.786E-11,
3009  2.436E-11, 2.144E-11, 1.859E-11, 1.628E-11, 1.414E-11, 1.237E-11,
3010  1.093E-11, 9.558e-12}; // end section diff to MT 1.0
3011 
3012 // H2O self continuum parameters at T=260 K
3013 // date of last update: 10/29/18
3014 // units of (CM**3/MOL)*1.E-20
3018 const int SL260_ckd_mt_320_npt = 2003;
3019 const double
3022  {
3023  0.000e0, 2.749e-01, 2.732e-01, 2.752e-01,
3024  2.732e-01, 2.749e-01, 2.676e-01, 2.667e-01,
3025  2.545e-01, 2.497e-01, 2.327e-01, 2.218e-01,
3026  2.036e-01, 1.825e-01, 1.694e-01, 1.497e-01,
3027  1.353e-01, 1.210e-01, 1.014e-01, 9.405e-02,
3028  7.848e-02, 7.195e-02, 6.246e-02, 5.306e-02,
3029  4.853e-02, 4.138e-02, 3.735e-02, 3.171e-02,
3030  2.785e-02, 2.431e-02, 2.111e-02, 1.845e-02,
3031  1.640e-02, 1.405e-02, 1.255e-02, 1.098e-02,
3032  9.797e-03, 8.646e-03, 7.779e-03, 6.898e-03,
3033  6.099e-03, 5.453e-03, 4.909e-03, 4.413e-03,
3034  3.959e-03, 3.581e-03, 3.199e-03, 2.871e-03,
3035  2.583e-03, 2.330e-03, 2.086e-03, 1.874e-03,
3036  1.684e-03, 1.512e-03, 1.361e-03, 1.225e-03,
3037  1.100e-03, 9.890e-04, 8.916e-04, 8.039e-04,
3038  7.256e-04, 6.545e-04, 5.918e-04, 5.359e-04,
3039  4.867e-04, 4.426e-04, 4.033e-04, 3.682e-04,
3040  3.366e-04, 3.085e-04, 2.833e-04, 2.605e-04,
3041  2.403e-04, 2.221e-04, 2.055e-04, 1.908e-04,
3042  1.774e-04, 1.653e-04, 1.544e-04, 1.443e-04,
3043  1.351e-04, 1.267e-04, 1.190e-04, 1.119e-04,
3044  1.053e-04, 9.922e-05, 9.355e-05, 8.831e-05,
3045  8.339e-05, 7.878e-05, 7.449e-05, 7.043e-05,
3046  6.664e-05, 6.307e-05, 5.969e-05, 5.654e-05,
3047  5.357e-05, 5.075e-05, 4.810e-05, 4.560e-05,
3048  4.322e-05, 4.102e-05, 3.892e-05, 3.696e-05,
3049  3.511e-05, 3.339e-05, 3.177e-05, 3.026e-05,
3050  2.886e-05, 2.756e-05, 2.636e-05, 2.527e-05,
3051  2.427e-05, 2.337e-05, 2.257e-05, 2.185e-05,
3052  2.127e-05, 2.080e-05, 2.041e-05, 2.013e-05,
3053  2.000e-05, 1.997e-05, 2.009e-05, 2.031e-05,
3054  2.068e-05, 2.124e-05, 2.189e-05, 2.267e-05,
3055  2.364e-05, 2.463e-05, 2.618e-05, 2.774e-05,
3056  2.937e-05, 3.144e-05, 3.359e-05, 3.695e-05,
3057  4.002e-05, 4.374e-05, 4.947e-05, 5.431e-05,
3058  6.281e-05, 7.169e-05, 8.157e-05, 9.728e-05,
3059  1.079e-04, 1.337e-04, 1.442e-04, 1.683e-04,
3060  1.879e-04, 2.223e-04, 2.425e-04, 2.838e-04,
3061  3.143e-04, 3.527e-04, 4.012e-04, 4.237e-04,
3062  4.747e-04, 5.057e-04, 5.409e-04, 5.734e-04,
3063  5.944e-04, 6.077e-04, 6.175e-04, 6.238e-04,
3064  6.226e-04, 6.248e-04, 6.192e-04, 6.098e-04,
3065  5.818e-04, 5.709e-04, 5.465e-04, 5.043e-04,
3066  4.699e-04, 4.294e-04, 3.984e-04, 3.672e-04,
3067  3.152e-04, 2.883e-04, 2.503e-04, 2.211e-04,
3068  1.920e-04, 1.714e-04, 1.485e-04, 1.358e-04,
3069  1.156e-04, 1.021e-04, 8.887e-05, 7.842e-05,
3070  7.120e-05, 6.186e-05, 5.730e-05, 4.792e-05,
3071  4.364e-05, 3.720e-05, 3.280e-05, 2.946e-05,
3072  2.591e-05, 2.261e-05, 2.048e-05, 1.813e-05,
3073  1.630e-05, 1.447e-05, 1.282e-05, // section diff to MTCKD 1.00
3074  1.156E-05, 1.072E-05, 9.922E-06, 8.919E-06,
3075  7.974E-06, 7.050E-06, 6.301E-06, 5.559E-06,
3076  4.978E-06, 4.371E-06, 3.941E-06, 3.479E-06,
3077  3.119E-06, 2.795E-06, 2.624E-06, 2.458E-06,
3078  2.321E-06, 2.192E-06, 2.077E-06, 1.966E-06,
3079  1.863E-06, 1.775E-06, 1.691E-06, 1.617E-06,
3080  1.545E-06, 1.484E-06, 1.422E-06, 1.371E-06,
3081  1.320E-06, 1.275E-06, 1.233E-06, 1.187E-06,
3082  1.145E-06, 1.118E-06, 1.082E-06, 1.048E-06,
3083  1.020E-06, 9.889E-07, 9.649E-07, 9.368E-07,
3084  9.174E-07, 8.960E-07, 8.763E-07, 8.566E-07,
3085  8.381E-07, 8.192E-07, 8.033E-07, 7.864E-07,
3086  7.715E-07, 7.563E-07, 7.429E-07, 7.282E-07,
3087  7.149E-07, 7.011E-07, 6.901E-07, 6.771E-07,
3088  6.671E-07, 6.577E-07, 6.476E-07, 6.376E-07,
3089  6.313E-07, 6.233E-07, 6.171E-07, 6.163E-07,
3090  6.162E-07, 6.186E-07, 6.241E-07, 6.337E-07,
3091  6.420E-07, 6.421E-07, 6.368E-07, 6.269E-07,
3092  6.141E-07, 6.023E-07, 5.886E-07, 5.730E-07,
3093  5.601E-07, 5.496E-07, 5.414E-07, 5.354E-07,
3094  5.285E-07, 5.233E-07, 5.199E-07, 5.168E-07,
3095  5.145E-07, 5.125E-07, 5.112E-07, 5.125E-07,
3096  5.135E-07, 5.209E-07, 5.256E-07, 5.357E-07,
3097  5.503E-07, 5.636E-07, 5.891E-07, 6.194E-07,
3098  6.511E-07, 6.915E-07, 7.401E-07, 8.004E-07,
3099  8.606E-07, 9.087E-07, 1.003E-06, 1.043E-06,
3100  1.190E-06, 1.293E-06, 1.398E-06, 1.508E-06,
3101  1.649E-06, 1.735E-06, 1.852E-06, 1.955E-06,
3102  2.056E-06, 2.079E-06, 2.127E-06, 2.117E-06,
3103  2.109E-06, 2.101E-06, 2.122E-06, 2.097E-06,
3104  2.142E-06, 2.139E-06, 2.138E-06, 2.097E-06,
3105  2.069E-06, 2.072E-06, 2.038E-06, 2.020E-06,
3106  2.052E-06, 2.046E-06, 2.077E-06, 2.103E-06,
3107  2.163E-06, 2.244E-06, 2.388E-06, 2.552E-06,
3108  2.773E-06, 3.067E-06, 3.360E-06, 3.714E-06,
3109  4.172E-06, 4.643E-06, 5.116E-06, 5.831E-06,
3110  6.522E-06, 7.478E-06, 8.312E-06, 9.407E-06,
3111  1.051E-05, 1.207E-05, 1.359E-05, 1.568E-05,
3112  1.759E-05, 2.029E-05, 2.284E-05, 2.602E-05,
3113  2.940E-05, 3.483E-05, 3.928E-05, 4.618E-05,
3114  5.240E-05, 6.132E-05, 7.183E-05, 8.521E-05,
3115  9.111E-05, 1.070E-04, 1.184E-04, 1.264E-04,
3116  1.475E-04, 1.612E-04, 1.704E-04, 1.818E-04,
3117  1.924E-04, 1.994E-04, 2.061E-04, 2.180E-04,
3118  2.187E-04, 2.200E-04, 2.196E-04, 2.131E-04,
3119  2.015E-04, 1.988E-04, 1.847E-04, 1.729E-04,
3120  1.597E-04, 1.373E-04, 1.262E-04, 1.087E-04,
3121  9.439E-05, 8.061E-05, 7.093E-05, 6.049E-05,
3122  5.120E-05, 4.435E-05, 3.817E-05, 3.340E-05,
3123  2.927E-05, 2.573E-05, 2.291E-05, 2.040E-05,
3124  1.827E-05, 1.636E-05, 1.463E-05, 1.309E-05,
3125  1.170E-05, 1.047E-05, 9.315E-06, 8.328E-06,
3126  7.458E-06, 6.665E-06, 5.940E-06, 5.316E-06,
3127  4.752E-06, 4.252E-06, 3.825E-06, 3.421E-06,
3128  3.064E-06, 2.746E-06, 2.465E-06, 2.216E-06,
3129  1.990E-06, 1.790E-06, 1.609E-06, 1.449E-06,
3130  1.306E-06, 1.171E-06, 1.056E-06, 9.738E-07,
3131  9.212E-07, 8.894E-07, 8.561E-07, 8.183E-07,
3132  7.824E-07, 7.484E-07, 7.168E-07, 6.872E-07,
3133  6.590E-07, 6.325E-07, 6.070E-07, 5.833E-07,
3134  5.610E-07, 5.400E-07, 5.197E-07, 5.005E-07,
3135  4.823E-07, 4.652E-07, 4.483E-07, 4.329E-07,
3136  4.177E-07, 4.029E-07, 3.888E-07, 3.749E-07,
3137  3.618E-07, 3.492E-07, 3.377E-07, 3.269E-07,
3138  3.166E-07, 3.081E-07, 3.010E-07, 2.947E-07,
3139  2.890E-07, 2.844E-07, 2.789E-07, 2.731E-07,
3140  2.670E-07, 2.604E-07, 2.525E-07, 2.444E-07,
3141  2.384E-07, 2.328E-07, 2.280E-07, 2.230E-07,
3142  2.183E-07, 2.144E-07, 2.105E-07, 2.073E-07,
3143  2.046E-07, 2.022E-07, 2.002E-07, 1.985E-07,
3144  1.975E-07, 1.965E-07, 1.960E-07, 1.954E-07,
3145  1.954E-07, 1.960E-07, 1.971E-07, 1.984E-07,
3146  2.003E-07, 2.026E-07, 2.058E-07, 2.099E-07,
3147  2.142E-07, 2.171E-07, 2.206E-07, 2.312E-07,
3148  2.523E-07, 2.834E-07, 3.195E-07, 3.587E-07,
3149  4.015E-07, 4.497E-07, 5.049E-07, 5.665E-07,
3150  6.366E-07, 7.121E-07, 7.996E-07, 8.946E-07,
3151  1.002E-06, 1.117E-06, 1.262E-06, 1.416E-06,
3152  1.611E-06, 1.807E-06, 2.056E-06, 2.351E-06,
3153  2.769E-06, 3.138E-06, 3.699E-06, 4.386E-06,
3154  5.041E-06, 6.074E-06, 6.812E-06, 7.790E-06,
3155  8.855E-06, 1.014E-05, 1.095E-05, 1.245E-05,
3156  1.316E-05, 1.390E-05, 1.504E-05, 1.583E-05,
3157  1.617E-05, 1.652E-05, 1.713E-05, 1.724E-05,
3158  1.715E-05, 1.668E-05, 1.629E-05, 1.552E-05,
3159  1.478E-05, 1.340E-05, 1.245E-05, 1.121E-05,
3160  9.575E-06, 8.956E-06, 7.345E-06, 6.597E-06,
3161  5.612E-06, 4.818E-06, 4.165E-06, 3.579E-06,
3162  3.041E-06, 2.623E-06, 2.290E-06, 1.984E-06,
3163  1.748E-06, 1.534E-06, 1.369E-06, 1.219E-06,
3164  1.092E-06, 9.800E-07, 8.762E-07, 7.896E-07,
3165  7.104E-07, 6.364E-07, 5.691E-07, 5.107E-07,
3166  4.575E-07, 4.090E-07, 3.667E-07, 3.287E-07,
3167  2.931E-07, 2.633E-07, 2.356E-07, 2.111E-07,
3168  1.895E-07, 1.697E-07, 1.525E-07, 1.369E-07,
3169  1.233E-07, 1.114E-07, 9.988E-08, 9.004E-08,
3170  8.149E-08, 7.311E-08, 6.587E-08, 6.014E-08,
3171  5.618E-08, 5.320E-08, 5.052E-08, 4.768E-08,
3172  4.514E-08, 4.267E-08, 4.032E-08, 3.815E-08,
3173  3.605E-08, 3.409E-08, 3.219E-08, 3.038E-08,
3174  2.869E-08, 2.710E-08, 2.563E-08, 2.418E-08,
3175  2.288E-08, 2.166E-08, 2.051E-08, 1.945E-08,
3176  1.844E-08, 1.745E-08, 1.650E-08, 1.558E-08,
3177  1.471E-08, 1.387E-08, 1.308E-08, 1.235E-08,
3178  1.169E-08, 1.107E-08, 1.050E-08, 9.963E-09,
3179  9.461E-09, 9.004E-09, 8.580E-09, 8.191E-09,
3180  7.835E-09, 7.525E-09, 7.242E-09, 7.004E-09,
3181  6.798E-09, 6.617E-09, 6.463E-09, 6.355E-09,
3182  6.267E-09, 6.194E-09, 6.156E-09, 6.144E-09,
3183  6.159E-09, 6.210E-09, 6.288E-09, 6.398E-09,
3184  6.536E-09, 6.719E-09, 6.929E-09, 7.176E-09,
3185  7.459E-09, 7.787E-09, 8.147E-09, 8.573E-09,
3186  9.024E-09, 9.547E-09, 1.011E-08, 1.073E-08,
3187  1.146E-08, 1.217E-08, 1.306E-08, 1.411E-08,
3188  1.525E-08, 1.637E-08, 1.776E-08, 1.958E-08,
3189  2.136E-08, 2.372E-08, 2.612E-08, 2.944E-08,
3190  3.249E-08, 3.740E-08, 4.244E-08, 4.845E-08,
3191  5.630E-08, 6.728E-08, 7.908E-08, 9.511E-08,
3192  1.128E-07, 1.358E-07, 1.587E-07, 1.904E-07,
3193  2.224E-07, 2.660E-07, 3.278E-07, 3.775E-07,
3194  4.355E-07, 4.672E-07, 5.110E-07, 5.461E-07,
3195  5.828E-07, 6.233E-07, 6.509E-07, 6.672E-07,
3196  6.969E-07, 7.104E-07, 7.439E-07, 7.463E-07,
3197  7.708E-07, 7.466E-07, 7.668E-07, 7.549E-07,
3198  7.586E-07, 7.384E-07, 7.439E-07, 7.785E-07,
3199  7.915E-07, 8.310E-07, 8.745E-07, 9.558E-07,
3200  1.038E-06, 1.173E-06, 1.304E-06, 1.452E-06,
3201  1.671E-06, 1.931E-06, 2.239E-06, 2.578E-06,
3202  3.032E-06, 3.334E-06, 3.980E-06, 4.300E-06,
3203  4.518E-06, 5.321E-06, 5.508E-06, 6.211E-06,
3204  6.590E-06, 7.046E-06, 7.555E-06, 7.558E-06,
3205  7.875E-06, 8.319E-06, 8.433E-06, 8.590E-06,
3206  8.499E-06, 8.284E-06, 8.276E-06, 7.587E-06,
3207  7.014E-06, 6.397E-06, 5.520E-06, 4.888E-06,
3208  4.024E-06, 3.433E-06, 2.726E-06, 2.169E-06,
3209  1.811E-06, 1.438E-06, 1.156E-06, 9.272E-07,
3210  7.455E-07, 6.056E-07, 4.980E-07, 4.116E-07,
3211  3.425E-07, 2.878E-07, 2.455E-07, 2.114E-07,
3212  1.862E-07, 1.667E-07, 1.507E-07, 1.370E-07,
3213  1.260E-07, 1.153E-07, 1.065E-07, 9.812E-08,
3214  9.045E-08, 8.334E-08, 7.719E-08, 7.133E-08,
3215  6.653E-08, 6.160E-08, 5.753E-08, 5.349E-08,
3216  5.005E-08, 4.693E-08, 4.388E-08, 4.127E-08,
3217  3.883E-08, 3.653E-08, 3.443E-08, 3.256E-08,
3218  3.075E-08, 2.899E-08, 2.735E-08, 2.586E-08,
3219  2.443E-08, 2.305E-08, 2.177E-08, 2.049E-08,
3220  1.938E-08, 1.833E-08, 1.734E-08, 1.638E-08,
3221  1.548E-08, 1.464E-08, 1.386E-08, 1.310E-08,
3222  1.239E-08, 1.173E-08, 1.110E-08, 1.051E-08,
3223  9.947E-09, 9.414E-09, 8.911E-09, 8.435E-09,
3224  7.989E-09, 7.567E-09, 7.174E-09, 6.804E-09,
3225  6.460E-09, 6.132E-09, 5.828E-09, 5.550E-09,
3226  5.286E-09, 5.049E-09, 4.831E-09, 4.658E-09,
3227  4.505E-09, 4.413E-09, 4.362E-09, 4.489E-09,
3228  4.487E-09, 4.761E-09, 5.278E-09, 5.630E-09,
3229  6.056E-09, 6.633E-09, 7.337E-09, 7.954E-09,
3230  8.869E-09, 9.500E-09, 1.027E-08, 1.087E-08,
3231  1.204E-08, 1.304E-08, 1.413E-08, 1.529E-08,
3232  1.586E-08, 1.649E-08, 1.661E-08, 1.703E-08,
3233  1.741E-08, 1.766E-08, 1.779E-08, 1.816E-08,
3234  1.866E-08, 1.889E-08, 1.904E-08, 1.897E-08,
3235  1.893E-08, 1.888E-08, 1.868E-08, 1.895E-08,
3236  1.899E-08, 1.876E-08, 1.960E-08, 2.020E-08,
3237  2.121E-08, 2.239E-08, 2.379E-08, 2.526E-08,
3238  2.766E-08, 2.994E-08, 3.332E-08, 3.703E-08,
3239  4.158E-08, 4.774E-08, 5.499E-08, 6.355E-08,
3240  7.349E-08, 8.414E-08, 9.846E-08, 1.143E-07,
3241  1.307E-07, 1.562E-07, 1.817E-07, 2.011E-07,
3242  2.192E-07, 2.485E-07, 2.867E-07, 3.035E-07,
3243  3.223E-07, 3.443E-07, 3.617E-07, 3.793E-07,
3244  3.793E-07, 3.839E-07, 4.081E-07, 4.117E-07,
3245  4.085E-07, 3.920E-07, 3.851E-07, 3.754E-07,
3246  3.490E-07, 3.229E-07, 2.978E-07, 2.691E-07,
3247  2.312E-07, 2.029E-07, 1.721E-07, 1.472E-07,
3248  1.308E-07, 1.132E-07, 9.736E-08, 8.458E-08,
3249  7.402E-08, 6.534E-08, 5.811E-08, 5.235E-08,
3250  4.762E-08, 4.293E-08, 3.896E-08, 3.526E-08,
3251  3.165E-08, 2.833E-08, 2.551E-08, 2.288E-08,
3252  2.036E-08, 1.820E-08, 1.626E-08, 1.438E-08,
3253  1.299E-08, 1.149E-08, 1.030E-08, 9.148E-09,
3254  8.122E-09, 7.264E-09, 6.425E-09, 5.777E-09,
3255  5.060E-09, 4.502E-09, 4.013E-09, 3.567E-09,
3256  3.145E-09, 2.864E-09, 2.553E-09, 2.311E-09,
3257  2.087E-09, 1.886E-09, 1.716E-09, 1.556E-09,
3258  1.432E-09, 1.311E-09, 1.196E-09, 1.091E-09,
3259  1.006E-09, 9.428E-10, 8.900E-10, 8.438E-10,
3260  8.005E-10, 7.597E-10, 7.201E-10, 6.818E-10,
3261  6.550E-10, 6.286E-10, 6.004E-10, 5.730E-10,
3262  5.466E-10, 5.203E-10, 4.968E-10, 4.741E-10,
3263  4.520E-10, 4.314E-10, 4.124E-10, 3.944E-10,
3264  3.777E-10, 3.619E-10, 3.477E-10, 3.344E-10,
3265  3.217E-10, 3.096E-10, 2.999E-10, 2.898E-10,
3266  2.826E-10, 2.750E-10, 2.701E-10, 2.651E-10,
3267  2.641E-10, 2.671E-10, 2.670E-10, 2.748E-10,
3268  2.863E-10, 3.051E-10, 3.163E-10, 3.284E-10,
3269  3.408E-10, 3.601E-10, 3.710E-10, 3.878E-10,
3270  4.028E-10, 4.159E-10, 4.296E-10, 4.371E-10,
3271  4.463E-10, 4.520E-10, 4.554E-10, 4.716E-10,
3272  4.791E-10, 4.900E-10, 5.001E-10, 4.999E-10,
3273  5.061E-10, 5.291E-10, 5.416E-10, 5.994E-10,
3274  6.394E-10, 6.807E-10, 7.250E-10, 7.847E-10,
3275  8.430E-10, 9.146E-10, 9.907E-10, 1.062E-09,
3276  1.170E-09, 1.277E-09, 1.401E-09, 1.524E-09,
3277  1.674E-09, 1.888E-09, 2.112E-09, 2.322E-09,
3278  2.808E-09, 3.269E-09, 3.902E-09, 4.614E-09,
3279  5.763E-09, 6.747E-09, 8.972E-09, 1.118E-08,
3280  1.428E-08, 1.713E-08, 1.948E-08, 2.090E-08,
3281  2.211E-08, 2.362E-08, 2.556E-08, 2.729E-08,
3282  2.880E-08, 3.046E-08, 3.167E-08, 3.367E-08,
3283  3.457E-08, 3.590E-08, 3.711E-08, 3.826E-08,
3284  4.001E-08, 4.211E-08, 4.315E-08, 4.661E-08,
3285  5.010E-08, 5.249E-08, 5.840E-08, 6.628E-08,
3286  7.512E-08, 8.253E-08, 9.722E-08, 1.067E-07,
3287  1.153E-07, 1.347E-07, 1.428E-07, 1.577E-07,
3288  1.694E-07, 1.833E-07, 1.938E-07, 2.108E-07,
3289  2.059E-07, 2.157E-07, 2.185E-07, 2.208E-07,
3290  2.182E-07, 2.093E-07, 2.014E-07, 1.962E-07,
3291  1.819E-07, 1.713E-07, 1.510E-07, 1.340E-07,
3292  1.154E-07, 9.890E-08, 8.880E-08, 7.673E-08,
3293  6.599E-08, 5.730E-08, 5.081E-08, 4.567E-08,
3294  4.147E-08, 3.773E-08, 3.460E-08, 3.194E-08,
3295  2.953E-08, 2.759E-08, 2.594E-08, 2.442E-08,
3296  2.355E-08, 2.283E-08, 2.279E-08, 2.231E-08,
3297  2.279E-08, 2.239E-08, 2.210E-08, 2.309E-08,
3298  2.293E-08, 2.352E-08, 2.415E-08, 2.430E-08,
3299  2.426E-08, 2.465E-08, 2.500E-08, 2.496E-08,
3300  2.465E-08, 2.475E-08, 2.179E-08, 1.934E-08,
3301  1.676E-08, 1.415E-08, 1.115E-08, 9.148E-09,
3302  7.692E-09, 6.193E-09, 5.401E-09, 4.341E-09,
3303  3.734E-09, 3.127E-09, 2.619E-09, 2.181E-09,
3304  1.887E-09, 1.625E-09, 1.456E-09, 1.304E-09,
3305  1.190E-09, 1.083E-09, 1.012E-09, 9.153E-10,
3306  8.434E-10, 7.828E-10, 7.210E-10, 6.665E-10,
3307  6.136E-10, 5.728E-10, 5.351E-10, 4.985E-10,
3308  4.633E-10, 4.337E-10, 4.069E-10, 3.825E-10,
3309  3.596E-10, 3.374E-10, 3.186E-10, 3.006E-10,
3310  2.837E-10, 2.681E-10, 2.538E-10, 2.405E-10,
3311  2.277E-10, 2.167E-10, 2.060E-10, 1.961E-10,
3312  1.871E-10, 1.788E-10, 1.711E-10, 1.639E-10,
3313  1.574E-10, 1.515E-10, 1.456E-10, 1.411E-10,
3314  1.365E-10, 1.315E-10, 1.296E-10, 1.262E-10,
3315  1.264E-10, 1.257E-10, 1.252E-10, 1.327E-10,
3316  1.392E-10, 1.519E-10, 1.664E-10, 1.911E-10,
3317  2.276E-10, 2.702E-10, 3.086E-10, 3.378E-10,
3318  3.632E-10, 3.957E-10, 4.360E-10, 4.701E-10,
3319  5.030E-10, 5.381E-10, 5.793E-10, 6.190E-10,
3320  6.596E-10, 7.004E-10, 7.561E-10, 7.934E-10,
3321  8.552E-10, 9.142E-10, 9.570E-10, 1.027E-09,
3322  1.097E-09, 1.193E-09, 1.334E-09, 1.470E-09,
3323  1.636E-09, 1.871E-09, 2.122E-09, 2.519E-09,
3324  2.806E-09, 3.203E-09, 3.846E-09, 4.362E-09,
3325  5.114E-09, 5.643E-09, 6.305E-09, 6.981E-09,
3326  7.983E-09, 8.783E-09, 9.419E-09, 1.017E-08,
3327  1.063E-08, 1.121E-08, 1.130E-08, 1.201E-08,
3328  1.225E-08, 1.232E-08, 1.223E-08, 1.177E-08,
3329  1.151E-08, 1.116E-08, 1.047E-08, 9.698E-09,
3330  8.734E-09, 8.202E-09, 7.041E-09, 6.074E-09,
3331  5.172E-09, 4.468E-09, 3.913E-09, 3.414E-09,
3332  2.975E-09, 2.650E-09, 2.406E-09, 2.173E-09,
3333  2.009E-09, 1.861E-09, 1.727E-09, 1.612E-09,
3334  1.514E-09, 1.430E-09, 1.362E-09, 1.333E-09,
3335  1.288E-09, 1.249E-09, 1.238E-09, 1.228E-09,
3336  1.217E-09, 1.202E-09, 1.209E-09, 1.177E-09,
3337  1.157E-09, 1.165E-09, 1.142E-09, 1.131E-09,
3338  1.138E-09, 1.127E-09, 1.131E-09, 1.039E-09,
3339  9.049E-10, 8.118E-10, 6.369E-10, 5.329E-10,
3340  4.016E-10, 3.329E-10, 2.698E-10, 2.539E-10,
3341  2.236E-10, 1.814E-10, 1.560E-10, 1.385E-10,
3342  1.135E-10, 9.918E-11, 8.391E-11, 7.496E-11,
3343  6.715E-11, 6.105E-11, 5.585E-11, 5.160E-11,
3344  4.764E-11, 4.401E-11, 4.099E-11, 3.816E-11,
3345  3.565E-11, 3.342E-11, 3.142E-11, 2.954E-11,
3346  2.776E-11, 2.624E-11, 2.485E-11, 2.355E-11,
3347  2.237E-11, 2.128E-11, 2.031E-11, 1.942E-11,
3348  1.859E-11, 1.785E-11, 1.718E-11, 1.658E-11,
3349  1.603E-11, 1.555E-11, 1.514E-11, 1.477E-11,
3350  1.447E-11, 1.423E-11, 1.405E-11, 1.393E-11,
3351  1.388E-11, 1.388E-11, 1.396E-11, 1.409E-11,
3352  1.430E-11, 1.459E-11, 1.494E-11, 1.538E-11,
3353  1.590E-11, 1.650E-11, 1.719E-11, 1.800E-11,
3354  1.890E-11, 1.996E-11, 2.118E-11, 2.247E-11,
3355  2.391E-11, 2.563E-11, 2.695E-11, 2.866E-11,
3356  3.096E-11, 3.392E-11, 3.806E-11, 4.261E-11,
3357  4.748E-11, 5.323E-11, 5.935E-11, 6.619E-11,
3358  7.418E-11, 8.294E-11, 9.260E-11, 1.039E-10,
3359  1.156E-10, 1.297E-10, 1.460E-10, 1.641E-10,
3360  1.858E-10, 2.100E-10, 2.383E-10, 2.724E-10,
3361  3.116E-10, 3.538E-10, 4.173E-10, 4.727E-10,
3362  5.503E-10, 6.337E-10, 7.320E-10, 8.298E-10,
3363  9.328E-10, 1.059E-09, 1.176E-09, 1.328E-09,
3364  1.445E-09, 1.593E-09, 1.770E-09, 1.954E-09,
3365  2.175E-09, 2.405E-09, 2.622E-09, 2.906E-09,
3366  3.294E-09, 3.713E-09, 3.980E-09, 4.384E-09,
3367  4.987E-09, 5.311E-09, 5.874E-09, 6.337E-09,
3368  7.027E-09, 7.390E-09, 7.769E-09, 8.374E-09,
3369  8.605E-09, 9.165E-09, 9.415E-09, 9.511E-09,
3370  9.704E-09, 9.588E-09, 9.450E-09, 9.086E-09,
3371  8.798E-09, 8.469E-09, 7.697E-09, 7.168E-09,
3372  6.255E-09, 5.772E-09, 4.970E-09, 4.271E-09,
3373  3.653E-09, 3.154E-09, 2.742E-09, 2.435E-09,
3374  2.166E-09, 1.936E-09, 1.731E-09, 1.556E-09,
3375  1.399E-09, 1.272E-09, 1.157E-09, 1.066E-09,
3376  9.844E-10, 9.258E-10, 8.787E-10, 8.421E-10,
3377  8.083E-10, 8.046E-10, 8.067E-10, 8.181E-10,
3378  8.325E-10, 8.517E-10, 9.151E-10, 9.351E-10,
3379  9.677E-10, 1.071E-09, 1.126E-09, 1.219E-09,
3380  1.297E-09, 1.408E-09, 1.476E-09, 1.517E-09,
3381  1.600E-09, 1.649E-09, 1.678E-09, 1.746E-09,
3382  1.764E-09, 1.741E-09, 1.703E-09, 1.506E-09,
3383  1.298E-09, 1.066E-09, 8.872E-10, 7.676E-10,
3384  5.313E-10, 4.978E-10, 4.163E-10, 3.527E-10,
3385  2.929E-10, 2.372E-10, 1.992E-10, 1.767E-10,
3386  1.588E-10, 1.419E-10, 1.275E-10, 1.186E-10,
3387  1.082E-10, 9.390E-11, 8.110E-11, 7.039E-11,
3388  6.366E-11, 5.968E-11, 5.547E-11, 5.202E-11,
3389  4.730E-11, 4.240E-11, 3.969E-11, 3.535E-11,
3390  3.219E-11, 2.916E-11, 2.677E-11, 2.445E-11,
3391  2.279E-11, 2.107E-11, 1.950E-11, 1.830E-11,
3392  1.716E-11, 1.617E-11, 1.536E-11, 1.463E-11,
3393  1.394E-11, 1.331E-11, 1.273E-11, 1.220E-11,
3394  1.171E-11, 1.129E-11, 1.091E-11, 1.057E-11,
3395  1.028E-11, 1.002E-11, 9.801E-12, 9.618E-12,
3396  9.471E-12, 9.371E-12, 9.313E-12, 9.311E-12,
3397  9.387E-12, 9.547E-12, 9.799E-12, 1.013E-11,
3398  1.082E-11, 1.141E-11, 1.220E-11, 1.352E-11,
3399  1.538E-11, 1.732E-11, 1.978E-11, 2.366E-11,
3400  2.896E-11, 3.601E-11, 4.259E-11, 4.737E-11,
3401  5.089E-11, 5.592E-11, 6.109E-11, 6.628E-11,
3402  7.381E-11, 8.088E-11, 8.966E-11, 1.045E-10,
3403  1.120E-10, 1.287E-10, 1.486E-10, 1.662E-10,
3404  1.866E-10, 2.133E-10, 2.524E-10, 2.776E-10,
3405  3.204E-10, 3.559E-10, 4.028E-10, 4.448E-10,
3406  4.882E-10, 5.244E-10, 5.605E-10, 6.018E-10,
3407  6.328E-10, 6.579E-10, 6.541E-10, 7.024E-10,
3408  7.074E-10, 7.068E-10, 7.009E-10, 6.698E-10,
3409  6.545E-10, 6.209E-10, 5.834E-10, 5.412E-10,
3410  5.001E-10, 4.231E-10, 3.727E-10, 3.211E-10,
3411  2.833E-10, 2.447E-10, 2.097E-10, 1.843E-10,
3412  1.639E-10, 1.449E-10, 1.270E-10, 1.161E-10,
3413  1.033E-10, 9.282E-11, 8.407E-11, 7.639E-11,
3414  7.023E-11, 6.474E-11, 6.142E-11, 5.760E-11,
3415  5.568E-11, 5.472E-11, 5.390E-11, 5.455E-11,
3416  5.540E-11, 5.587E-11, 6.230E-11, 6.490E-11,
3417  6.868E-11, 7.382E-11, 8.022E-11, 8.372E-11,
3418  9.243E-11, 1.004E-10, 1.062E-10, 1.130E-10,
3419  1.176E-10, 1.244E-10, 1.279E-10, 1.298E-10,
3420  1.315E-10, 1.308E-10, 1.284E-10, 1.138E-10,
3421  9.898E-11, 7.972E-11, 6.261E-11, 4.860E-11,
3422  3.916E-11, 3.416E-11, 3.043E-11, 2.277E-11,
3423  1.999E-11, 1.632E-11, 1.326E-11, 1.127E-11,
3424  9.680E-12, 8.474E-12, 7.490E-12, 6.688E-12,
3425  6.012E-12, 5.468E-12, 5.010E-12, 4.623E-12,
3426  4.285E-12, 3.994E-12, 3.741E-12, 3.519E-12,
3427  3.326E-12, 3.157E-12, 3.011E-12, 2.885E-12,
3428  2.773E-12, 2.683E-12, 2.604E-12, 2.542E-12,
3429  2.493E-12, 2.458E-12, 2.434E-12, 2.423E-12,
3430  2.424E-12, 2.440E-12, 2.465E-12, 2.506E-12,
3431  2.560E-12, 2.626E-12, 2.707E-12, 2.803E-12,
3432  2.914E-12, 3.039E-12, 3.184E-12, 3.345E-12,
3433  3.501E-12, 3.670E-12, 3.910E-12, 4.273E-12,
3434  4.770E-12, 5.347E-12, 5.978E-12, 6.682E-12,
3435  7.467E-12, //end diff section
3436  8.340E-12, 9.293E-12, 1.035E-11, 1.152E-11,
3437  1.285E-11, 1.428e-11, 1.586e-11, 1.764e-11,
3438  1.972e-11, 2.214e-11, 2.478e-11, 2.776e-11,
3439  3.151e-11, 3.591e-11, 4.103e-11, 4.660e-11,
3440  5.395e-11, 6.306e-11, 7.172e-11, 8.358e-11,
3441  9.670e-11, 1.110e-10, 1.325e-10, 1.494e-10,
3442  1.736e-10, 2.007e-10, 2.296e-10, 2.608e-10,
3443  3.004e-10, 3.361e-10, 3.727e-10, 4.373e-10,
3444  4.838e-10, 5.483e-10, 6.006e-10, 6.535e-10,
3445  6.899e-10, 7.687e-10, 8.444e-10, 8.798e-10,
3446  9.135e-10, 9.532e-10, 9.757e-10, 9.968e-10,
3447  1.006e-09, 9.949e-10, 9.789e-10, 9.564e-10,
3448  9.215e-10, 8.510e-10, 8.394e-10, 7.707e-10,
3449  7.152e-10, 6.274e-10, 5.598e-10, 5.028e-10,
3450  4.300e-10, 3.710e-10, 3.245e-10, 2.809e-10,
3451  2.461e-10, 2.154e-10, 1.910e-10, 1.685e-10,
3452  1.487e-10, 1.313e-10, 1.163e-10, 1.031e-10,
3453  9.172e-11, 8.221e-11, 7.382e-11, 6.693e-11,
3454  6.079e-11, 5.581e-11, 5.167e-11, 4.811e-11,
3455  4.506e-11, 4.255e-11, 4.083e-11, 3.949e-11,
3456  3.881e-11, 3.861e-11, 3.858e-11, 3.951e-11,
3457  4.045e-11, 4.240e-11, 4.487e-11, 4.806e-11,
3458  5.133e-11, 5.518e-11, 5.919e-11, 6.533e-11,
3459  7.031e-11, 7.762e-11, 8.305e-11, 9.252e-11,
3460  9.727e-11, 1.045e-10, 1.117e-10, 1.200e-10,
3461  1.275e-10, 1.341e-10, 1.362e-10, 1.438e-10,
3462  1.450e-10, 1.455e-10, 1.455e-10, 1.434e-10,
3463  1.381e-10, 1.301e-10, 1.276e-10, 1.163e-10,
3464  1.089e-10, 9.911e-11, 8.943e-11, 7.618e-11,
3465  6.424e-11, 5.717e-11, 4.866e-11, 4.257e-11,
3466  3.773e-11, 3.331e-11, 2.958e-11, 2.629e-11,
3467  2.316e-11, 2.073e-11, 1.841e-11, 1.635e-11,
3468  1.464e-11, 1.310e-11, 1.160e-11, 1.047e-11,
3469  9.408e-12, 8.414e-12, 7.521e-12, 6.705e-12,
3470  5.993e-12, 5.371e-12, 4.815e-12, 4.338e-12,
3471  3.921e-12, 3.567e-12, 3.265e-12, 3.010e-12,
3472  2.795e-12, 2.613e-12, 2.464e-12, 2.346e-12,
3473  2.256e-12, 2.195e-12, 2.165e-12, 2.166e-12,
3474  2.198e-12, 2.262e-12, 2.364e-12, 2.502e-12,
3475  2.682e-12, 2.908e-12, 3.187e-12, 3.533e-12,
3476  3.946e-12, 4.418e-12, 5.013e-12, 5.708e-12,
3477  6.379e-12, 7.430e-12, 8.390e-12, 9.510e-12,
3478  1.078e-11, 1.259e-11, 1.438e-11, 1.630e-11,
3479  1.814e-11, 2.055e-11, 2.348e-11, 2.664e-11,
3480  2.956e-11, 3.300e-11, 3.677e-11, 4.032e-11,
3481  4.494e-11, 4.951e-11, 5.452e-11, 6.014e-11,
3482  6.500e-11, 6.915e-11, 7.450e-11, 7.971e-11,
3483  8.468e-11, 8.726e-11, 8.995e-11, 9.182e-11,
3484  9.509e-11, 9.333e-11, 9.386e-11, 9.457e-11,
3485  9.210e-11, 9.019e-11, 8.680e-11, 8.298e-11,
3486  7.947e-11, 7.460e-11, 7.082e-11, 6.132e-11,
3487  5.855e-11, 5.073e-11, 4.464e-11, 3.825e-11,
3488  3.375e-11, 2.911e-11, 2.535e-11, 2.160e-11,
3489  1.907e-11, 1.665e-11, 1.463e-11, 1.291e-11,
3490  1.133e-11, 9.997e-12, 8.836e-12, 7.839e-12,
3491  6.943e-12, 6.254e-12, 5.600e-12, 5.029e-12,
3492  4.529e-12, 4.102e-12, 3.737e-12, 3.428e-12,
3493  3.169e-12, 2.959e-12, 2.798e-12, 2.675e-12,
3494  2.582e-12, 2.644e-12, 2.557e-12, 2.614e-12,
3495  2.717e-12, 2.874e-12, 3.056e-12, 3.187e-12,
3496  3.631e-12, 3.979e-12, 4.248e-12, 4.817e-12,
3497  5.266e-12, 5.836e-12, 6.365e-12, 6.807e-12,
3498  7.470e-12, 7.951e-12, 8.636e-12, 8.972e-12,
3499  9.314e-12, 9.445e-12, 1.003e-11, 1.013e-11,
3500  9.937e-12, 9.729e-12, 9.064e-12, 9.119e-12,
3501  9.124e-12, 8.704e-12, 8.078e-12, 7.470e-12,
3502  6.329e-12, 5.674e-12, 4.808e-12, 4.119e-12,
3503  3.554e-12, 3.103e-12, 2.731e-12, 2.415e-12,
3504  2.150e-12, 1.926e-12, 1.737e-12, 1.578e-12,
3505  1.447e-12, 1.340e-12, 1.255e-12, 1.191e-12,
3506  1.146e-12, 1.121e-12, 1.114e-12, 1.126e-12,
3507  1.156e-12, 1.207e-12, 1.278e-12, 1.372e-12,
3508  1.490e-12, 1.633e-12, 1.805e-12, 2.010e-12,
3509  2.249e-12, 2.528e-12, 2.852e-12, 3.228e-12,
3510  3.658e-12, 4.153e-12, 4.728e-12, 5.394e-12,
3511  6.176e-12, 7.126e-12, 8.188e-12, 9.328e-12,
3512  1.103e-11, 1.276e-11, 1.417e-11, 1.615e-11,
3513  1.840e-11, 2.155e-11, 2.429e-11, 2.826e-11,
3514  3.222e-11, 3.664e-11, 4.140e-11, 4.906e-11,
3515  5.536e-11, 6.327e-11, 7.088e-11, 8.316e-11,
3516  9.242e-11, 1.070e-10, 1.223e-10, 1.341e-10,
3517  1.553e-10, 1.703e-10, 1.900e-10, 2.022e-10,
3518  2.233e-10, 2.345e-10, 2.438e-10, 2.546e-10,
3519  2.599e-10, 2.661e-10, 2.703e-10, 2.686e-10,
3520  2.662e-10, 2.560e-10, 2.552e-10, 2.378e-10,
3521  2.252e-10, 2.146e-10, 1.885e-10, 1.668e-10,
3522  1.441e-10, 1.295e-10, 1.119e-10, 9.893e-11,
3523  8.687e-11, 7.678e-11, 6.685e-11, 5.879e-11,
3524  5.127e-11, 4.505e-11, 3.997e-11, 3.511e-11};
3525 
3526 // H2O foreign continuum parameters at all temperatures
3527 // date of last update: 10/29/18
3528 // units of (CM**3/MOL)*1.E-20
3530 const Numeric FH2O_ckd_mt_320_v2 = 20000.0;
3532 const int FH2O_ckd_mt_320_npt = 2003;
3533 const double
3536  {
3537  0.000e0, 1.205e-02, 1.126e-02, 1.095e-02, 1.126e-02,
3538  1.205e-02, 1.322e-02, 1.430e-02, 1.506e-02, 1.548e-02,
3539  1.534e-02, 1.486e-02, 1.373e-02, 1.262e-02, 1.134e-02,
3540  1.001e-02, 8.702e-03, 7.475e-03, 6.481e-03, 5.480e-03,
3541  4.600e-03, 3.833e-03, 3.110e-03, 2.543e-03, 2.049e-03,
3542  1.680e-03, 1.374e-03, 1.046e-03, 8.193e-04, 6.267e-04,
3543  4.968e-04, 3.924e-04, 2.983e-04, 2.477e-04, 1.997e-04,
3544  1.596e-04, 1.331e-04, 1.061e-04, 8.942e-05, 7.168e-05,
3545  5.887e-05, 4.848e-05, 3.817e-05, 3.170e-05, 2.579e-05,
3546  2.162e-05, 1.768e-05, 1.490e-05, 1.231e-05, 1.013e-05,
3547  8.555e-06, 7.328e-06, 6.148e-06, 5.207e-06, 4.387e-06,
3548  3.741e-06, 3.220e-06, 2.753e-06, 2.346e-06, 1.985e-06,
3549  1.716e-06, 1.475e-06, 1.286e-06, 1.122e-06, 9.661e-07,
3550  8.284e-07, 7.057e-07, 6.119e-07, 5.290e-07, 4.571e-07,
3551  3.948e-07, 3.432e-07, 2.983e-07, 2.589e-07, 2.265e-07,
3552  1.976e-07, 1.704e-07, 1.456e-07, 1.260e-07, 1.101e-07,
3553  9.648e-08, 8.415e-08, 7.340e-08, 6.441e-08, 5.643e-08,
3554  4.940e-08, 4.276e-08, 3.703e-08, 3.227e-08, 2.825e-08,
3555  2.478e-08, 2.174e-08, 1.898e-08, 1.664e-08, 1.458e-08,
3556  1.278e-08, 1.126e-08, 9.891e-09, 8.709e-09, 7.652e-09,
3557  6.759e-09, 5.975e-09, 5.310e-09, 4.728e-09, 4.214e-09,
3558  3.792e-09, 3.463e-09, 3.226e-09, 2.992e-09, 2.813e-09,
3559  2.749e-09, 2.809e-09, 2.913e-09, 3.037e-09, 3.413e-09,
3560  3.738e-09, 4.189e-09, 4.808e-09, 5.978e-09, 7.088e-09,
3561  8.071e-09, 9.610e-09, 1.210e-08, 1.500e-08, 1.764e-08,
3562  2.221e-08, 2.898e-08, 3.948e-08, 5.068e-08, 6.227e-08,
3563  7.898e-08, 1.033e-07, 1.437e-07, 1.889e-07, 2.589e-07,
3564  3.590e-07, 4.971e-07, 7.156e-07, 9.983e-07, 1.381e-06,
3565  1.929e-06, 2.591e-06, 3.453e-06, 4.570e-06, 5.930e-06,
3566  7.552e-06, 9.556e-06, 1.183e-05, 1.425e-05, 1.681e-05,
3567  1.978e-05, 2.335e-05, 2.668e-05, 3.022e-05, 3.371e-05,
3568  3.715e-05, 3.967e-05, 4.060e-05, 4.010e-05, 3.809e-05,
3569  3.491e-05, 3.155e-05, 2.848e-05, 2.678e-05, 2.660e-05,
3570  2.811e-05, 3.071e-05, 3.294e-05, 3.459e-05, 3.569e-05,
3571  3.560e-05, 3.434e-05, 3.186e-05, 2.916e-05, 2.622e-05,
3572  2.275e-05, 1.918e-05, 1.620e-05, 1.373e-05, 1.182e-05,
3573  1.006e-05, 8.556e-06, 7.260e-06, 6.110E-06, 5.040E-06,
3574  4.230E-06, 3.456E-06, 2.903E-06, 2.486E-06, 2.039E-06,
3575  1.672E-06, 1.285E-06, 1.054E-06, // begin section diff to MT 1.00
3576  8.302E-07, 6.667E-07, 5.503E-07, 4.562E-07, 3.948E-07,
3577  3.198E-07, 2.586E-07, 2.225E-07, 1.807E-07, 1.530E-07,
3578  1.294E-07, 1.126E-07, 9.604E-08, 7.850E-08, 6.813E-08,
3579  5.583E-08, 4.690E-08, 3.996E-08, 3.373E-08, 2.930E-08,
3580  2.417E-08, 2.061E-08, 1.743E-08, 1.475E-08, 1.273E-08,
3581  1.084E-08, 9.368E-09, 7.985E-09, 6.785E-09, 5.804E-09,
3582  4.975E-09, 4.311E-09, 3.738E-09, 3.275E-09, 2.847E-09,
3583  2.469E-09, 2.149E-09, 1.884E-09, 1.631E-09, 1.393E-09,
3584  1.201E-09, 1.027E-09, 8.807E-10, 7.521E-10, 6.436E-10,
3585  5.509E-10, 4.729E-10, 4.055E-10, 3.490E-10, 3.006E-10,
3586  2.599E-10, 2.246E-10, 1.942E-10, 1.685E-10, 1.464E-10,
3587  1.273E-10, 1.115E-10, 9.794E-11, 8.729E-11, 7.893E-11,
3588  7.313E-11, 7.069E-11, 7.190E-11, 7.828E-11, 9.295E-11,
3589  1.174E-10, 1.578E-10, 2.184E-10, 3.053E-10, 4.212E-10,
3590  5.733E-10, 7.497E-10, 9.487E-10, 1.153E-09, 1.343E-09,
3591  1.503E-09, 1.623E-09, 1.696E-09, 1.746E-09, 1.789E-09,
3592  1.852E-09, 1.862E-09, 1.886E-09, 1.912E-09, 1.942E-09,
3593  1.938E-09, 1.914E-09, 1.898E-09, 1.864E-09, 1.770E-09,
3594  1.635E-09, 1.464E-09, 1.279E-09, 1.099E-09, 9.528E-10,
3595  8.433E-10, 7.794E-10, 7.793E-10, 8.241E-10, 9.417E-10,
3596  1.179E-09, 1.616E-09, 2.144E-09, 2.992E-09, 4.344E-09,
3597  6.415E-09, 9.242E-09, 1.310E-08, 1.847E-08, 2.567E-08,
3598  3.390E-08, 4.357E-08, 5.301E-08, 6.364E-08, 7.438E-08,
3599  8.381E-08, 9.294E-08, 1.013E-07, 1.103E-07, 1.170E-07,
3600  1.200E-07, 1.190E-07, 1.133E-07, 1.040E-07, 9.475E-08,
3601  8.601E-08, 8.074E-08, 8.023E-08, 8.473E-08, 9.256E-08,
3602  9.989E-08, 1.056E-07, 1.079E-07, 1.079E-07, 1.049E-07,
3603  1.000E-07, 9.350E-08, 8.662E-08, 7.880E-08, 7.137E-08,
3604  6.438E-08, 5.706E-08, 5.132E-08, 4.815E-08, 4.736E-08,
3605  4.709E-08, 4.918E-08, 5.227E-08, 5.603E-08, 6.023E-08,
3606  6.567E-08, 7.403E-08, 8.695E-08, 9.929E-08, 1.163E-07,
3607  1.379E-07, 1.658E-07, 2.010E-07, 2.425E-07, 2.920E-07,
3608  3.562E-07, 4.274E-07, 5.173E-07, 6.285E-07, 7.787E-07,
3609  9.563E-07, 1.194E-06, 1.517E-06, 1.934E-06, 2.511E-06,
3610  3.197E-06, 4.024E-06, 4.981E-06, 6.090E-06, 7.229E-06,
3611  8.439E-06, 9.367E-06, 1.016E-05, 1.057E-05, 1.088E-05,
3612  1.108E-05, 1.129E-05, 1.159E-05, 1.190E-05, 1.210E-05,
3613  1.210E-05, 1.200E-05, 1.190E-05, 1.180E-05, 1.190E-05,
3614  1.230E-05, 1.280E-05, 1.300E-05, 1.290E-05, 1.210E-05,
3615  1.090E-05, 9.440E-06, 7.790E-06, 6.220E-06, 4.640E-06,
3616  3.400E-06, 2.470E-06, 1.780E-06, 1.290E-06, 9.260E-07,
3617  7.000E-07, 5.360E-07, 4.260E-07, 3.410E-07, 2.790E-07,
3618  2.360E-07, 2.010E-07, 1.750E-07, 1.520E-07, 1.330E-07,
3619  1.160E-07, 1.010E-07, 8.830E-08, 7.710E-08, 6.770E-08,
3620  6.010E-08, 5.340E-08, 4.720E-08, 4.200E-08, 3.690E-08,
3621  3.270E-08, 2.920E-08, 2.570E-08, 2.270E-08, 2.000E-08,
3622  1.770E-08, 1.560E-08, 1.370E-08, 1.200E-08, 1.050E-08,
3623  9.180E-09, 8.000E-09, 6.980E-09, 6.080E-09, 5.270E-09,
3624  4.560E-09, 3.940E-09, 3.400E-09, 2.930E-09, 2.510E-09,
3625  2.150E-09, 1.840E-09, 1.570E-09, 1.340E-09, 1.140E-09,
3626  9.660E-10, 8.190E-10, 6.930E-10, 5.860E-10, 4.950E-10,
3627  4.190E-10, 3.560E-10, 3.060E-10, 2.670E-10, 2.410E-10,
3628  2.260E-10, 2.250E-10, 2.360E-10, 2.570E-10, 2.840E-10,
3629  3.180E-10, 3.490E-10, 3.710E-10, 3.810E-10, 3.840E-10,
3630  3.800E-10, 3.590E-10, 3.370E-10, 3.080E-10, 2.770E-10,
3631  2.470E-10, 2.200E-10, 2.050E-10, 1.990E-10, 2.030E-10,
3632  2.130E-10, 2.250E-10, 2.340E-10, 2.410E-10, 2.470E-10,
3633  2.480E-10, 2.500E-10, 2.520E-10, 2.580E-10, 2.640E-10,
3634  2.690E-10, 2.790E-10, 2.950E-10, 3.130E-10, 3.340E-10,
3635  3.570E-10, 3.840E-10, 4.200E-10, 4.660E-10, 5.210E-10,
3636  5.960E-10, 6.890E-10, 8.010E-10, 9.320E-10, 1.080E-09,
3637  1.240E-09, 1.450E-09, 1.710E-09, 2.010E-09, 2.360E-09,
3638  2.820E-09, 3.380E-09, 4.010E-09, 4.790E-09, 5.740E-09,
3639  6.920E-09, 8.338E-09, 1.015E-08, 1.246E-08, 1.512E-08,
3640  1.851E-08, 2.320E-08, 2.988E-08, 3.989E-08, 5.351E-08,
3641  7.256E-08, 1.011E-07, 1.388E-07, 1.914E-07, 2.512E-07,
3642  3.257E-07, 4.075E-07, 4.991E-07, 5.914E-07, 6.638E-07,
3643  7.160E-07, 7.450E-07, 7.590E-07, 7.540E-07, 7.470E-07,
3644  7.530E-07, 7.940E-07, 8.460E-07, 8.950E-07, 9.360E-07,
3645  9.840E-07, 1.020E-06, 1.050E-06, 1.060E-06, 1.070E-06,
3646  1.070E-06, 1.040E-06, 9.790E-07, 8.800E-07, 7.660E-07,
3647  6.380E-07, 5.142E-07, 3.982E-07, 2.940E-07, 2.177E-07,
3648  1.612E-07, 1.185E-07, 8.966E-08, 6.735E-08, 5.219E-08,
3649  4.140E-08, 3.403E-08, 2.811E-08, 2.358E-08, 1.969E-08,
3650  1.684E-08, 1.462E-08, 1.285E-08, 1.134E-08, 9.916E-09,
3651  8.650E-09, 7.550E-09, 6.620E-09, 5.830E-09, 5.140E-09,
3652  4.510E-09, 3.980E-09, 3.530E-09, 3.120E-09, 2.780E-09,
3653  2.480E-09, 2.180E-09, 1.930E-09, 1.700E-09, 1.500E-09,
3654  1.330E-09, 1.160E-09, 1.030E-09, 9.010E-10, 7.860E-10,
3655  6.880E-10, 6.020E-10, 5.250E-10, 4.570E-10, 3.960E-10,
3656  3.440E-10, 2.980E-10, 2.570E-10, 2.210E-10, 1.900E-10,
3657  1.630E-10, 1.400E-10, 1.210E-10, 1.040E-10, 9.090E-11,
3658  7.960E-11, 7.050E-11, 6.300E-11, 5.670E-11, 5.090E-11,
3659  4.550E-11, 4.040E-11, 3.550E-11, 3.090E-11, 2.640E-11,
3660  2.260E-11, 1.900E-11, 1.600E-11, 1.340E-11, 1.140E-11,
3661  1.010E-11, 9.170E-12, 8.690E-12, 8.470E-12, 8.330E-12,
3662  8.200E-12, 8.040E-12, 7.950E-12, 7.980E-12, 8.250E-12,
3663  8.470E-12, 8.740E-12, 8.870E-12, 8.920E-12, 8.710E-12,
3664  8.300E-12, 7.890E-12, 7.590E-12, 7.500E-12, 7.630E-12,
3665  8.060E-12, 8.890E-12, 1.000E-11, 1.140E-11, 1.280E-11,
3666  1.450E-11, 1.640E-11, 1.870E-11, 2.120E-11, 2.440E-11,
3667  2.850E-11, 3.310E-11, 3.830E-11, 4.460E-11, 5.230E-11,
3668  6.150E-11, 7.350E-11, 8.840E-11, 1.070E-10, 1.290E-10,
3669  1.590E-10, 1.990E-10, 2.490E-10, 3.120E-10, 3.910E-10,
3670  4.980E-10, 6.280E-10, 7.860E-10, 9.660E-10, 1.160E-09,
3671  1.410E-09, 1.700E-09, 2.060E-09, 2.540E-09, 3.170E-09,
3672  4.080E-09, 5.240E-09, 6.800E-09, 8.920E-09, 1.130E-08,
3673  1.400E-08, 1.700E-08, 2.050E-08, 2.370E-08, 2.610E-08,
3674  2.770E-08, 2.850E-08, 2.860E-08, 2.780E-08, 2.720E-08,
3675  2.740E-08, 2.830E-08, 3.010E-08, 3.220E-08, 3.520E-08,
3676  3.780E-08, 4.030E-08, 4.210E-08, 4.330E-08, 4.390E-08,
3677  4.340E-08, 4.250E-08, 4.070E-08, 3.880E-08, 3.670E-08,
3678  3.560E-08, 3.520E-08, 3.670E-08, 4.020E-08, 4.640E-08,
3679  5.630E-08, 6.890E-08, 8.820E-08, 1.110E-07, 1.410E-07,
3680  1.730E-07, 2.120E-07, 2.570E-07, 2.990E-07, 3.450E-07,
3681  3.790E-07, 4.090E-07, 4.230E-07, 4.300E-07, 4.330E-07,
3682  4.350E-07, 4.440E-07, 4.540E-07, 4.620E-07, 4.670E-07,
3683  4.710E-07, 4.770E-07, 4.930E-07, 5.190E-07, 5.540E-07,
3684  5.900E-07, 6.120E-07, 6.150E-07, 5.810E-07, 5.210E-07,
3685  4.510E-07, 3.690E-07, 2.890E-07, 2.140E-07, 1.550E-07,
3686  1.110E-07, 7.780E-08, 5.460E-08, 3.930E-08, 2.930E-08,
3687  2.260E-08, 1.820E-08, 1.520E-08, 1.310E-08, 1.150E-08,
3688  1.020E-08, 9.010E-09, 7.950E-09, 7.040E-09, 6.200E-09,
3689  5.490E-09, 4.860E-09, 4.340E-09, 3.880E-09, 3.460E-09,
3690  3.070E-09, 2.710E-09, 2.380E-09, 2.090E-09, 1.820E-09,
3691  1.590E-09, 1.380E-09, 1.200E-09, 1.040E-09, 9.080E-10,
3692  7.880E-10, 6.850E-10, 5.960E-10, 5.200E-10, 4.530E-10,
3693  3.940E-10, 3.430E-10, 2.970E-10, 2.580E-10, 2.230E-10,
3694  1.920E-10, 1.660E-10, 1.430E-10, 1.240E-10, 1.060E-10,
3695  9.100E-11, 7.790E-11, 6.650E-11, 5.680E-11, 4.840E-11,
3696  4.110E-11, 3.510E-11, 2.990E-11, 2.540E-11, 2.170E-11,
3697  1.860E-11, 1.590E-11, 1.370E-11, 1.180E-11, 1.040E-11,
3698  9.240E-12, 8.390E-12, 7.860E-12, 7.700E-12, 7.850E-12,
3699  8.410E-12, 9.620E-12, 1.160E-11, 1.470E-11, 1.940E-11,
3700  2.580E-11, 3.510E-11, 4.730E-11, 6.260E-11, 7.980E-11,
3701  9.950E-11, 1.210E-10, 1.400E-10, 1.580E-10, 1.770E-10,
3702  1.980E-10, 2.220E-10, 2.470E-10, 2.790E-10, 3.140E-10,
3703  3.550E-10, 4.000E-10, 4.510E-10, 5.150E-10, 5.730E-10,
3704  6.250E-10, 6.650E-10, 6.910E-10, 6.980E-10, 6.830E-10,
3705  6.670E-10, 6.570E-10, 6.600E-10, 6.840E-10, 7.390E-10,
3706  8.040E-10, 8.730E-10, 9.440E-10, 9.950E-10, 1.030E-09,
3707  1.010E-09, 9.800E-10, 9.320E-10, 8.670E-10, 7.990E-10,
3708  7.290E-10, 6.670E-10, 6.140E-10, 5.780E-10, 5.650E-10,
3709  5.650E-10, 5.880E-10, 6.430E-10, 7.500E-10, 9.160E-10,
3710  1.160E-09, 1.510E-09, 1.990E-09, 2.700E-09, 3.660E-09,
3711  4.950E-09, 6.410E-09, 8.160E-09, 1.020E-08, 1.240E-08,
3712  1.460E-08, 1.640E-08, 1.790E-08, 1.870E-08, 1.930E-08,
3713  1.930E-08, 1.930E-08, 1.950E-08, 2.070E-08, 2.230E-08,
3714  2.340E-08, 2.440E-08, 2.550E-08, 2.670E-08, 2.760E-08,
3715  2.810E-08, 2.900E-08, 2.940E-08, 2.910E-08, 2.770E-08,
3716  2.520E-08, 2.210E-08, 1.840E-08, 1.490E-08, 1.150E-08,
3717  8.640E-09, 6.440E-09, 4.790E-09, 3.640E-09, 2.750E-09,
3718  2.140E-09, 1.750E-09, 1.480E-09, 1.300E-09, 1.160E-09,
3719  1.050E-09, 9.460E-10, 8.550E-10, 7.660E-10, 6.790E-10,
3720  6.010E-10, 5.300E-10, 4.670E-10, 4.130E-10, 3.670E-10,
3721  3.290E-10, 2.920E-10, 2.570E-10, 2.270E-10, 1.960E-10,
3722  1.700E-10, 1.470E-10, 1.270E-10, 1.100E-10, 9.190E-11,
3723  7.790E-11, 6.590E-11, 5.610E-11, 4.810E-11, 4.070E-11,
3724  3.540E-11, 3.040E-11, 2.620E-11, 2.300E-11, 1.970E-11,
3725  1.710E-11, 1.480E-11, 1.280E-11, 1.100E-11, 9.440E-12,
3726  8.080E-12, 6.940E-12, 5.930E-12, 5.060E-12, 4.310E-12,
3727  3.660E-12, 3.120E-12, 2.670E-12, 2.280E-12, 1.950E-12,
3728  1.670E-12, 1.430E-12, 1.220E-12, 1.050E-12, 9.060E-13,
3729  7.860E-13, 6.870E-13, 6.090E-13, 5.500E-13, 5.070E-13,
3730  4.780E-13, 4.660E-13, 4.770E-13, 5.210E-13, 5.940E-13,
3731  7.440E-13, 9.710E-13, 1.350E-12, 1.870E-12, 2.630E-12,
3732  3.670E-12, 4.950E-12, 6.390E-12, 8.000E-12, 9.880E-12,
3733  1.150E-11, 1.280E-11, 1.370E-11, 1.430E-11, 1.470E-11,
3734  1.450E-11, 1.420E-11, 1.400E-11, 1.410E-11, 1.430E-11,
3735  1.510E-11, 1.650E-11, 1.830E-11, 2.070E-11, 2.250E-11,
3736  2.380E-11, 2.420E-11, 2.380E-11, 2.270E-11, 2.100E-11,
3737  1.980E-11, 1.890E-11, 1.790E-11, 1.720E-11, 1.620E-11,
3738  1.540E-11, 1.430E-11, 1.350E-11, 1.350E-11, 1.420E-11,
3739  1.570E-11, 1.770E-11, 2.060E-11, 2.420E-11, 2.850E-11,
3740  3.430E-11, 4.160E-11, 5.240E-11, 6.820E-11, 8.920E-11,
3741  1.200E-10, 1.600E-10, 2.150E-10, 2.890E-10, 3.770E-10,
3742  4.800E-10, 5.930E-10, 7.250E-10, 8.530E-10, 9.600E-10,
3743  1.040E-09, 1.080E-09, 1.100E-09, 1.090E-09, 1.070E-09,
3744  1.070E-09, 1.120E-09, 1.210E-09, 1.330E-09, 1.480E-09,
3745  1.640E-09, 1.790E-09, 1.940E-09, 2.050E-09, 2.170E-09,
3746  2.280E-09, 2.400E-09, 2.530E-09, 2.740E-09, 3.030E-09,
3747  3.420E-09, 3.870E-09, 4.470E-09, 5.190E-09, 5.910E-09,
3748  6.770E-09, 7.500E-09, 8.280E-09, 8.830E-09, 9.360E-09,
3749  9.910E-09, 1.030E-08, 1.090E-08, 1.140E-08, 1.170E-08,
3750  1.180E-08, 1.180E-08, 1.180E-08, 1.210E-08, 1.260E-08,
3751  1.350E-08, 1.430E-08, 1.490E-08, 1.490E-08, 1.400E-08,
3752  1.250E-08, 1.070E-08, 8.610E-09, 6.570E-09, 4.800E-09,
3753  3.470E-09, 2.470E-09, 1.780E-09, 1.330E-09, 1.050E-09,
3754  8.720E-10, 7.510E-10, 6.760E-10, 6.270E-10, 6.000E-10,
3755  5.990E-10, 6.260E-10, 6.860E-10, 7.580E-10, 8.490E-10,
3756  9.530E-10, 1.050E-09, 1.140E-09, 1.200E-09, 1.250E-09,
3757  1.280E-09, 1.300E-09, 1.310E-09, 1.320E-09, 1.330E-09,
3758  1.330E-09, 1.310E-09, 1.270E-09, 1.230E-09, 1.190E-09,
3759  1.200E-09, 1.250E-09, 1.330E-09, 1.420E-09, 1.480E-09,
3760  1.490E-09, 1.410E-09, 1.260E-09, 1.080E-09, 8.800E-10,
3761  6.780E-10, 4.950E-10, 3.580E-10, 2.540E-10, 1.780E-10,
3762  1.260E-10, 9.280E-11, 7.130E-11, 5.560E-11, 4.500E-11,
3763  3.750E-11, 3.210E-11, 2.760E-11, 2.410E-11, 2.090E-11,
3764  1.820E-11, 1.590E-11, 1.360E-11, 1.180E-11, 1.030E-11,
3765  9.010E-12, 7.940E-12, 6.900E-12, 6.020E-12, 5.260E-12,
3766  4.620E-12, 4.060E-12, 3.550E-12, 3.130E-12, 2.760E-12,
3767  2.430E-12, 2.150E-12, 1.900E-12, 1.680E-12, 1.490E-12,
3768  1.320E-12, 1.170E-12, 1.040E-12, 9.350E-13, 8.470E-13,
3769  7.790E-13, 7.300E-13, 6.960E-13, 6.880E-13, 7.110E-13,
3770  7.600E-13, 8.670E-13, 1.040E-12, 1.310E-12, 1.710E-12,
3771  2.200E-12, 2.930E-12, 3.800E-12, 4.970E-12, 6.220E-12,
3772  7.630E-12, 9.290E-12, 1.100E-11, 1.240E-11, 1.340E-11,
3773  1.410E-11, 1.440E-11, 1.440E-11, 1.390E-11, 1.380E-11,
3774  1.410E-11, 1.490E-11, 1.640E-11, 1.860E-11, 2.110E-11,
3775  2.380E-11, 2.650E-11, 2.890E-11, 3.040E-11, 3.140E-11,
3776  3.290E-11, 3.430E-11, 3.600E-11, 3.910E-11, 4.440E-11,
3777  5.210E-11, 6.430E-11, 8.180E-11, 1.060E-10, 1.400E-10,
3778  1.780E-10, 2.240E-10, 2.770E-10, 3.350E-10, 3.950E-10,
3779  4.470E-10, 4.920E-10, 5.200E-10, 5.390E-10, 5.460E-10,
3780  5.530E-10, 5.660E-10, 6.020E-10, 6.430E-10, 6.680E-10,
3781  6.910E-10, 7.120E-10, 7.420E-10, 7.550E-10, 7.750E-10,
3782  8.090E-10, 8.300E-10, 8.350E-10, 7.950E-10, 7.220E-10,
3783  6.300E-10, 5.230E-10, 4.200E-10, 3.190E-10, 2.390E-10,
3784  1.790E-10, 1.360E-10, 1.050E-10, 8.320E-11, 6.890E-11,
3785  5.890E-11, 5.140E-11, 4.600E-11, 4.190E-11, 3.940E-11,
3786  3.900E-11, 4.070E-11, 4.390E-11, 4.820E-11, 5.290E-11,
3787  5.750E-11, 6.090E-11, 6.280E-11, 6.310E-11, 6.190E-11,
3788  6.040E-11, 5.850E-11, 5.710E-11, 5.680E-11, 5.680E-11,
3789  5.640E-11, 5.580E-11, 5.510E-11, 5.480E-11, 5.450E-11,
3790  5.570E-11, 5.770E-11, 5.960E-11, 6.050E-11, 5.890E-11,
3791  5.430E-11, 4.770E-11, 4.020E-11, 3.250E-11, 2.500E-11,
3792  1.820E-11, 1.310E-11, 9.320E-12, 6.580E-12, 4.640E-12,
3793  3.350E-12, 2.530E-12, 1.960E-12, 1.580E-12, 1.310E-12,
3794  1.110E-12, 9.580E-13, 8.320E-13, 7.310E-13, 6.430E-13,
3795  5.620E-13, 4.890E-13, 4.270E-13, 3.730E-13, 3.250E-13,
3796  2.840E-13, 2.500E-13, 2.210E-13, 1.950E-13, 1.720E-13,
3797  1.520E-13, 1.340E-13, 1.180E-13, 1.050E-13, 9.260E-14,
3798  8.210E-14, 7.290E-14, 6.480E-14, 5.770E-14, 5.150E-14,
3799  4.620E-14, 4.170E-14, 3.790E-14, 3.490E-14, 3.260E-14,
3800  3.090E-14, 3.000E-14, 2.980E-14, 3.040E-14, 3.200E-14,
3801  3.490E-14, 3.960E-14, 4.680E-14, 5.780E-14, 7.420E-14,
3802  9.800E-14, 1.320E-13, 1.790E-13, 2.230E-13, 2.650E-13,
3803  3.020E-13, 3.380E-13, 3.740E-13, 4.050E-13, 4.420E-13,
3804  4.940E-13, 5.480E-13, 6.110E-13, 6.770E-13, 7.560E-13,
3805  8.490E-13, 9.590E-13, 1.090E-12, 1.270E-12, 1.480E-12,
3806  1.730E-12, 2.080E-12, 2.480E-12, 3.030E-12, 3.880E-12,
3807  4.860E-12, 6.250E-12, 8.050E-12, 1.040E-11, 1.370E-11,
3808  1.750E-11, 2.200E-11, 2.750E-11, 3.350E-11, 4.080E-11,
3809  4.790E-11, 5.440E-11, 5.990E-11, 6.460E-11, 6.820E-11,
3810  7.130E-11, 7.620E-11, 8.360E-11, 9.590E-11, 1.150E-10,
3811  1.380E-10, 1.670E-10, 1.990E-10, 2.350E-10, 2.740E-10,
3812  3.110E-10, 3.510E-10, 3.890E-10, 4.210E-10, 4.490E-10,
3813  4.660E-10, 4.860E-10, 4.960E-10, 5.080E-10, 5.200E-10,
3814  5.290E-10, 5.300E-10, 5.220E-10, 5.160E-10, 5.180E-10,
3815  5.350E-10, 5.680E-10, 6.070E-10, 6.420E-10, 6.600E-10,
3816  6.390E-10, 5.830E-10, 5.030E-10, 4.110E-10, 3.200E-10,
3817  2.350E-10, 1.700E-10, 1.200E-10, 8.540E-11, 6.310E-11,
3818  4.920E-11, 4.010E-11, 3.380E-11, 2.970E-11, 2.710E-11,
3819  2.550E-11, 2.450E-11, 2.420E-11, 2.430E-11, 2.490E-11,
3820  2.600E-11, 2.730E-11, 2.910E-11, 3.160E-11, 3.450E-11,
3821  3.810E-11, 4.140E-11, 4.540E-11, 5.020E-11, 5.480E-11,
3822  6.110E-11, 6.720E-11, 7.370E-11, 7.990E-11, 8.500E-11,
3823  9.010E-11, 9.300E-11, 9.520E-11, 9.640E-11, 9.590E-11,
3824  9.390E-11, 9.140E-11, 8.950E-11, 8.970E-11, 9.300E-11,
3825  9.910E-11, 1.060E-10, 1.120E-10, 1.140E-10, 1.100E-10,
3826  1.000E-10, 8.680E-11, 7.140E-11, 5.610E-11, 4.170E-11,
3827  3.050E-11, 2.180E-11, 1.550E-11, 1.110E-11, 8.290E-12,
3828  6.380E-12, 5.070E-12, 4.200E-12, 3.640E-12, 3.280E-12,
3829  3.030E-12, 2.900E-12, 2.780E-12, 2.670E-12, 2.520E-12,
3830  2.340E-12, 2.150E-12, 1.950E-12, 1.750E-12, 1.540E-12,
3831  1.320E-12, 1.130E-12, 9.550E-13, 7.900E-13, 6.440E-13,
3832  5.180E-13, 4.140E-13, 3.320E-13, 2.670E-13, 2.180E-13,
3833  1.830E-13, 1.560E-13, 1.350E-13, 1.180E-13, 1.050E-13,
3834  9.310E-14, 8.350E-14, 7.550E-14, 6.890E-14, 6.360E-14,
3835  5.960E-14, 5.690E-14, 5.560E-14, 5.600E-14, 5.860E-14,
3836  6.420E-14, 7.330E-14, 8.850E-14, 1.140E-13, 1.490E-13,
3837  1.970E-13, 2.690E-13, 3.610E-13, 4.790E-13, 6.040E-13,
3838  7.510E-13, 9.200E-13, 1.090E-12, 1.260E-12, 1.390E-12,
3839  1.530E-12, 1.640E-12, 1.710E-12, 1.770E-12, 1.880E-12,
3840  2.080E-12, 2.370E-12, 2.820E-12, 3.420E-12, 4.180E-12,
3841  5.180E-12, 6.470E-12, 7.980E-12, 9.970E-12, 1.220E-11,
3842  1.470E-11, 1.750E-11, 2.050E-11, 2.380E-11, 2.660E-11,
3843  2.910E-11, 3.090E-11, 3.210E-11, 3.290E-11, 3.310E-11,
3844  3.370E-11, 3.490E-11, 3.690E-11, 3.820E-11, 3.920E-11,
3845  4.050E-11, 4.170E-11, 4.300E-11, 4.420E-11, 4.610E-11,
3846  4.780E-11, 4.830E-11, 4.690E-11, 4.310E-11, 3.810E-11,
3847  3.210E-11, 2.610E-11, 2.040E-11, 1.560E-11, 1.200E-11,
3848  9.200E-12, 7.100E-12, 5.650E-12, 4.630E-12, 3.860E-12,
3849  3.270E-12, 2.830E-12, 2.480E-12, 2.220E-12, 2.030E-12,
3850  1.910E-12, 1.840E-12, 1.820E-12, 1.820E-12, 1.860E-12,
3851  1.940E-12, 2.110E-12, 2.360E-12, 2.600E-12, 2.940E-12,
3852  3.310E-12, 3.730E-12, 4.170E-12, 4.570E-12, 4.980E-12,
3853  5.260E-12, 5.540E-12, 5.790E-12, 6.050E-12, 6.380E-12,
3854  6.710E-12, 6.930E-12, 7.030E-12, 7.050E-12, 7.050E-12,
3855  7.160E-12, 7.370E-12, 7.790E-12, 8.300E-12, 8.650E-12,
3856  8.760E-12, 8.320E-12, 7.510E-12, 6.480E-12, 5.310E-12,
3857  4.180E-12, 3.070E-12, 2.220E-12, 1.570E-12, 1.090E-12,
3858  7.390E-13, 5.110E-13, 3.660E-13, 2.680E-13, 2.000E-13,
3859  1.560E-13, 1.270E-13, 1.060E-13, 9.050E-14, 7.850E-14,
3860  6.900E-14, 6.100E-14, 5.420E-14, 4.840E-14, 4.320E-14,
3861  3.870E-14, 3.470E-14, 3.120E-14, 2.800E-14, 2.520E-14,
3862  2.270E-14, 2.050E-14, 1.860E-14, 1.690E-14, 1.550E-14,
3863  1.430E-14, 1.330E-14, 1.250E-14, 1.200E-14, 1.160E-14,
3864  1.150E-14, 1.160E-14, 1.190E-14, 1.250E-14, 1.340E-14,
3865  1.450E-14, 1.600E-14, 1.780E-14, 2.010E-14, 2.270E-14,
3866  2.590E-14, 2.960E-14, 3.400E-14, 3.920E-14, 4.530E-14,
3867  5.240E-14, 6.080E-14, 7.090E-14, 8.310E-14, 9.810E-14,
3868  1.170E-13, 1.420E-13, 1.780E-13, 2.250E-13, 2.790E-13,
3869  3.500E-13, 4.400E-13, 5.530E-13, 6.920E-13, 8.920E-13,
3870  1.150E-12, 1.480E-12, 1.920E-12, 2.540E-12, 3.370E-12,
3871  4.370E-12, 5.710E-12, 7.260E-12, 8.980E-12, 1.100E-11,
3872  1.340E-11, 1.590E-11, 1.860E-11, 2.140E-11, 2.400E-11,
3873  2.690E-11, 2.980E-11, 3.330E-11, 3.770E-11, 4.250E-11,
3874  4.750E-11, 5.110E-11, 5.370E-11, 5.560E-11, 5.610E-11,
3875  5.670E-11, 5.680E-11, 5.780E-11, 5.860E-11, 5.910E-11,
3876  5.930E-11, 5.910E-11, 5.920E-11, 5.930E-11, 5.940E-11,
3877  5.870E-11, 5.650E-11, 5.210E-11, 4.540E-11, 3.820E-11,
3878  3.070E-11, 2.370E-11, 1.780E-11, 1.320E-11, 9.820E-12,
3879  7.340E-12, 5.590E-12, 4.330E-12, 3.420E-12, 2.740E-12,
3880  2.230E-12, 1.860E-12, 1.560E-12, 1.350E-12, 1.170E-12,
3881  1.050E-12, 9.540E-13, 8.830E-13, 8.340E-13, 8.100E-13,
3882  8.110E-13, 8.200E-13, 8.460E-13, 8.830E-13, 9.330E-13,
3883  9.920E-13, 1.070E-12, 1.190E-12, 1.350E-12, 1.580E-12,
3884  1.860E-12, 2.170E-12, 2.520E-12, 2.920E-12, 3.360E-12,
3885  3.830E-12, 4.300E-12, 4.830E-12, 5.370E-12, 5.810E-12,
3886  6.230E-12, 6.480E-12, 6.770E-12, 6.990E-12, 7.170E-12,
3887  7.470E-12, 7.660E-12, 7.770E-12, 7.770E-12, 7.720E-12,
3888  7.770E-12, 7.970E-12, 8.400E-12, 8.900E-12, 9.420E-12,
3889  9.710E-12, 9.550E-12, 8.850E-12, 7.680E-12, 6.390E-12,
3890  5.020E-12, 3.740E-12, 2.680E-12, 1.870E-12, 1.330E-12,
3891  9.480E-13, 7.000E-13, 5.370E-13, 4.170E-13, 3.330E-13,
3892  2.760E-13, 2.350E-13, 2.040E-13, 1.780E-13, 1.590E-13,
3893  1.420E-13, 1.230E-13, 1.060E-13, 8.950E-14, 7.450E-14,
3894  6.060E-14, 5.020E-14, 4.220E-14, 3.610E-14, 3.130E-14,
3895  2.750E-14, 2.450E-14, 2.190E-14, 1.970E-14, 1.790E-14,
3896  1.630E-14, 1.490E-14, 1.380E-14, 1.290E-14, 1.220E-14,
3897  1.170E-14, 1.140E-14, 1.140E-14, 1.180E-14, 1.260E-14,
3898  1.410E-14, 1.650E-14, 2.040E-14, 2.650E-14, 3.590E-14,
3899  4.870E-14, 6.410E-14, 8.470E-14, 1.070E-13, 1.320E-13,
3900  1.660E-13, 2.070E-13, 2.620E-13, 3.210E-13, 3.940E-13,
3901  4.840E-13, 5.810E-13, 6.840E-13, 7.730E-13, 8.670E-13,
3902  9.620E-13, 1.060E-12, 1.190E-12, 1.350E-12, 1.560E-12,
3903  1.850E-12, 2.210E-12, 2.660E-12, 3.140E-12, 3.600E-12,
3904  3.990E-12, 4.220E-12, 4.360E-12, 4.350E-12, 4.250E-12,
3905  4.100E-12, 3.990E-12, 3.950E-12, 3.870E-12, 3.830E-12,
3906  3.820E-12, 3.890E-12, 3.980E-12, 4.060E-12, 4.190E-12,
3907  4.220E-12, 4.170E-12, 3.900E-12, 3.500E-12, 3.030E-12,
3908  2.490E-12, 1.990E-12, 1.510E-12, 1.150E-12, 8.680E-13,
3909  6.530E-13, 4.890E-13, 3.780E-13, 2.920E-13, 2.250E-13,
3910  1.740E-13, 1.350E-13, 1.070E-13, 8.540E-14, 7.020E-14,
3911  5.950E-14, 5.130E-14, 4.480E-14, 3.890E-14, 3.340E-14,
3912  2.940E-14, 2.630E-14, 2.420E-14, 2.300E-14, 2.270E-14,
3913  2.370E-14, 2.560E-14, 2.780E-14, 3.160E-14, 3.800E-14,
3914  4.860E-14, 6.250E-14, 8.150E-14, 1.010E-13, 1.240E-13,
3915  1.490E-13, 1.730E-13, 1.990E-13, 2.220E-13, 2.440E-13,
3916  2.610E-13, 2.720E-13, 2.850E-13, 2.940E-13, 3.100E-13,
3917  3.290E-13, 3.500E-13, 3.620E-13, 3.660E-13, 3.700E-13,
3918  3.720E-13, 3.830E-13, 4.010E-13, 4.260E-13, 4.510E-13,
3919  4.640E-13, 4.490E-13, 4.050E-13, 3.450E-13, 2.790E-13,
3920  2.120E-13, 1.460E-13, 9.670E-14, 6.180E-14, 3.980E-14,
3921  2.630E-14, 1.810E-14, 1.320E-14, 1.030E-14, 8.420E-15,
3922  7.220E-15, 6.390E-15, 5.780E-15, 5.330E-15, 5.000E-15,
3923  4.760E-15, 4.610E-15, 4.540E-15, 4.550E-15, 4.640E-15,
3924  4.810E-15, 5.060E-15, 5.410E-15, 5.870E-15, 6.440E-15,
3925  7.150E-15, 8.020E-15, 9.100E-15, 1.050E-14, 1.220E-14,
3926  1.460E-14, 1.800E-14, 2.280E-14, 2.980E-14, 4.020E-14,
3927  5.530E-14, 7.810E-14, 1.040E-13, 1.310E-13, 1.580E-13,
3928  1.890E-13, 2.200E-13, 2.540E-13, 3.010E-13, 3.670E-13,
3929  4.430E-13, 5.420E-13, 6.850E-13, 8.440E-13, 1.040E-12,
3930  1.310E-12, 1.610E-12, 1.950E-12, 2.380E-12, 2.880E-12,
3931  3.420E-12, 4.030E-12, 4.650E-12, 5.240E-12, 5.700E-12,
3932  6.090E-12, 6.390E-12, 6.480E-12, 6.580E-12, 6.660E-12,
3933  6.700E-12, 6.660E-12, 6.650E-12, 6.800E-12, 7.090E-12,
3934  7.540E-12, 8.060E-12, 8.620E-12, 8.890E-12, 8.680E-12,
3935  8.040E-12, 7.000E-12, 5.830E-12, 4.580E-12, 3.490E-12,
3936  2.710E-12, 2.100E-12, 1.650E-12, 1.310E-12, 1.060E-12,
3937  8.350E-13, 6.450E-13, 5.020E-13, 3.940E-13, 3.090E-13,
3938  2.460E-13}; // end section diffs to MT 1.00
3939 
3940 // CO2 continuum Ridgeway 1982, implementation of CKD_MT_1.00
3941 // UNITS OF (CM**3/MOL)*1.E-20
3943 const Numeric FCO2_ckd_mt_100_v2 = 10000.0;
3945 const int FCO2_ckd_mt_100_npt = 1003;
3947  0.000e0, 1.1110E-11, 1.0188E-11, 9.3516E-12, 1.0188E-11,
3948  1.1110E-11, 1.2127E-11, 1.3251E-11, // F17590
3949  1.4495E-11, 1.5872E-11, 1.7400E-11, 1.9097E-11, 2.0985E-11, // F17600
3950  2.3087E-11, 2.5431E-11, 2.8051E-11, 3.0982E-11, 3.4268E-11, // F17610
3951  3.7956E-11, 4.2105E-11, 4.6779E-11, 5.2056E-11, 5.8025E-11, // F17620
3952  6.4791E-11, 7.2477E-11, 8.1226E-11, 9.1209E-11, 1.0263E-10, // F17630
3953  1.1572E-10, 1.3078E-10, 1.4814E-10, 1.6821E-10, 1.9148E-10, // F17640
3954  2.1857E-10, 2.5019E-10, 2.8723E-10, 3.3080E-10, 3.8223E-10, // F17650
3955  4.4321E-10, 5.1583E-10, 6.0274E-10, 7.0725E-10, 8.3363E-10, // F17660
3956  9.8735E-10, 1.1755E-09, 1.4074E-09, 1.6953E-09, 2.0557E-09, // F17670
3957  2.5107E-09, 3.0909E-09, 3.8391E-09, 4.8165E-09, 6.1117E-09, // F17680
3958  7.8550E-09, 1.0241E-08, 1.3593E-08, 1.8344E-08, 2.5408E-08, // F17700
3959  3.6386E-08, 5.4251E-08, 8.4262E-08, 1.3273E-07, 2.1867E-07, // F17710
3960  3.5007E-07, 6.0011E-07, 1.0797E-06, 1.8254E-06, 3.1621E-06, // F17720
3961  4.0293E-06, 4.3683E-06, 4.4552E-06, 4.2684E-06, 3.9341E-06, // F17730
3962  2.5972E-06, 1.5617E-06, 8.9063E-07, 5.0360E-07, 3.0616E-07, // F17740
3963  1.9066E-07, 1.1904E-07, 7.6078E-08, 4.9304E-08, 3.3335E-08, // F17750
3964  2.3494E-08, 1.7114E-08, 1.2742E-08, 9.6068E-09, 7.3706E-09, // F17760
3965  5.7386E-09, 4.5302E-09, 3.6223E-09, 2.9309E-09, 2.4001E-09, // F17770
3966  1.9927E-09, 1.6877E-09, 1.4602E-09, 1.2764E-09, 1.1317E-09, // F17780
3967  1.0273E-09, 9.1943E-10, 8.0353E-10, 6.8746E-10, 5.9354E-10, // F17790
3968  5.1722E-10, 4.4975E-10, 4.2350E-10, 4.2282E-10, 4.2610E-10, // F17810
3969  4.5465E-10, 4.6166E-10, 4.3149E-10, 3.7615E-10, 3.1576E-10, // F17820
3970  2.6490E-10, 1.9143E-10, 1.2885E-10, 9.4954E-11, 7.6499E-11, // F17830
3971  6.4581E-11, 5.5923E-11, 4.9200E-11, 4.3813E-11, 3.9533E-11, // F17840
3972  3.6338E-11, 3.4320E-11, 3.3329E-11, 3.2400E-11, 3.1700E-11, // F17850
3973  3.1267E-11, 2.9940E-11, 2.7628E-11, 2.4496E-11, 2.1764E-11, // F17860
3974  1.9306E-11, 1.7352E-11, 1.7292E-11, 1.8733E-11, 2.0224E-11, // F17870
3975  2.2396E-11, 2.4225E-11, 2.4890E-11, 2.3513E-11, 2.0824E-11, // F17880
3976  1.8642E-11, 1.5676E-11, 1.2882E-11, 1.1054E-11, 1.0074E-11, // F17890
3977  9.6324E-12, 9.4910E-12, 9.5134E-12, 9.6427E-12, 9.8552E-12, // F17900
3978  1.0140E-11, 1.0494E-11, 1.0915E-11, 1.1405E-11, 1.1965E-11, // F17920
3979  1.2601E-11, 1.3316E-11, 1.4116E-11, 1.5006E-11, 1.5997E-11, // F17930
3980  1.7092E-11, 1.8305E-11, 1.9641E-11, 2.1121E-11, 2.2744E-11, // F17940
3981  2.4503E-11, 2.6419E-11, 2.8221E-11, 3.0609E-11, 3.3260E-11, // F17950
3982  3.6247E-11, 3.9581E-11, 4.3279E-11, 4.7376E-11, 5.1932E-11, // F17960
3983  5.7001E-11, 6.2654E-11, 6.8973E-11, 7.6058E-11, 8.4037E-11, // F17970
3984  9.3081E-11, 1.0344E-10, 1.1547E-10, 1.2970E-10, 1.4659E-10, // F17980
3985  1.6724E-10, 1.9481E-10, 2.3520E-10, 2.9424E-10, 3.6319E-10, // F17990
3986  4.2279E-10, 4.8494E-10, 5.2296E-10, 5.6111E-10, 5.8935E-10, // F18000
3987  6.0807E-10, 6.4204E-10, 6.8457E-10, 7.6709E-10, 8.7664E-10, // F18010
3988  1.0183E-09, 1.2116E-09, 1.4874E-09, 1.8596E-09, 2.2742E-09, // F18030
3989  2.7577E-09, 3.1932E-09, 3.6381E-09, 4.1207E-09, 4.6458E-09, // F18040
3990  5.3065E-09, 6.0741E-09, 7.1942E-09, 8.7103E-09, 1.0713E-08, // F18050
3991  1.3344E-08, 1.6831E-08, 2.1524E-08, 2.7967E-08, 3.7047E-08, // F18060
3992  5.0312E-08, 7.0566E-08, 1.0275E-07, 1.5419E-07, 2.3309E-07, // F18070
3993  3.4843E-07, 5.3194E-07, 8.7207E-07, 1.5075E-06, 2.7077E-06, // F18080
3994  4.7125E-06, 7.1734E-06, 9.2381E-06, 1.1507E-05, 1.3737E-05, // F18090
3995  1.4004E-05, 1.2679E-05, 1.0478E-05, 8.5684E-06, 6.1472E-06, // F18100
3996  3.2424E-06, 1.5291E-06, 8.0390E-07, 4.6767E-07, 2.9170E-07, // F18110
3997  1.9148E-07, 1.3076E-07, 9.2156E-08, 6.6652E-08, 4.9265E-08, // F18120
3998  3.7094E-08, 2.8380E-08, 2.2019E-08, 1.7297E-08, 1.3738E-08, // F18140
3999  1.1019E-08, 8.9178E-09, 7.2762E-09, 5.9810E-09, 4.9500E-09, // F18150
4000  4.1226E-09, 3.4534E-09, 2.9082E-09, 2.4611E-09, 2.0922E-09, // F18160
4001  1.7864E-09, 1.5313E-09, 1.3176E-09, 1.1379E-09, 9.8612E-10, // F18170
4002  8.5741E-10, 7.4782E-10, 6.5416E-10, 5.7384E-10, 5.0471E-10, // F18180
4003  4.4503E-10, 3.9334E-10, 3.4841E-10, 3.0927E-10, 2.7510E-10, // F18190
4004  2.4519E-10, 2.1893E-10, 1.9587E-10, 1.7555E-10, 1.5762E-10, // F18200
4005  1.4178E-10, 1.2772E-10, 1.1524E-10, 1.0414E-10, 9.4248E-11, // F18210
4006  8.5421E-11, 7.7530E-11, 7.0466E-11, 6.4134E-11, 5.8450E-11, // F18220
4007  5.3342E-11, 4.8746E-11, 4.4607E-11, 4.0874E-11, 3.7507E-11, // F18230
4008  3.4466E-11, 3.1719E-11, 2.9237E-11, 2.6993E-11, 2.4968E-11, // F18250
4009  2.3139E-11, 2.1494E-11, 2.0022E-11, 1.8709E-11, 1.7541E-11, // F18260
4010  1.6533E-11, 1.5690E-11, 1.5027E-11, 1.4560E-11, 1.4169E-11, // F18270
4011  1.3796E-11, 1.3553E-11, 1.3526E-11, 1.3567E-11, 1.3399E-11, // F18280
4012  1.3149E-11, 1.3049E-11, 1.3078E-11, 1.3093E-11, 1.3168E-11, // F18290
4013  1.3572E-11, 1.4383E-11, 1.5698E-11, 1.7658E-11, 2.0197E-11, // F18300
4014  2.2845E-11, 2.5944E-11, 3.0250E-11, 3.5900E-11, 4.1482E-11, // F18310
4015  4.6602E-11, 5.2453E-11, 5.9754E-11, 6.9308E-11, 8.0696E-11, // F18320
4016  9.5737E-11, 1.1733E-10, 1.4793E-10, 1.9119E-10, 2.5355E-10, // F18330
4017  3.4588E-10, 4.8343E-10, 6.9378E-10, 1.0212E-09, 1.4858E-09, // F18340
4018  2.0906E-09, 3.0576E-09, 4.6318E-09, 7.1585E-09, 1.1259E-08, // F18360
4019  1.7954E-08, 2.9760E-08, 4.6693E-08, 6.2035E-08, 7.4399E-08, // F18370
4020  9.1705E-08, 9.9448E-08, 9.5181E-08, 8.3050E-08, 7.1756E-08, // F18380
4021  6.6261E-08, 6.0357E-08, 6.6988E-08, 8.3419E-08, 9.8834E-08, // F18390
4022  1.2385E-07, 1.3962E-07, 1.3651E-07, 1.1963E-07, 9.7731E-08, // F18400
4023  8.0083E-08, 5.1660E-08, 2.5778E-08, 1.2600E-08, 6.8779E-09, // F18410
4024  4.1161E-09, 2.6276E-09, 1.7595E-09, 1.2225E-09, 8.7493E-10, // F18420
4025  6.4179E-10, 4.7987E-10, 3.6491E-10, 2.8191E-10, 2.2084E-10, // F18430
4026  1.7507E-10, 1.4025E-10, 1.1344E-10, 9.2580E-11, 7.6170E-11, // F18440
4027  6.3142E-11, 5.2694E-11, 4.4260E-11, 3.7421E-11, 3.1847E-11, // F18450
4028  2.7263E-11, 2.3352E-11, 2.0081E-11, 1.7332E-11, 1.5000E-11, // F18470
4029  1.2978E-11, 1.1204E-11, 9.7513E-12, 8.5300E-12, 7.4888E-12, // F18480
4030  6.5947E-12, 5.8231E-12, 5.1548E-12, 4.5739E-12, 4.0675E-12, // F18490
4031  3.6250E-12, 3.2371E-12, 2.8963E-12, 2.5964E-12, 2.3316E-12, // F18500
4032  2.0975E-12, 1.8902E-12, 1.7061E-12, 1.5425E-12, 1.3967E-12, // F18510
4033  1.2665E-12, 1.1503E-12, 1.0463E-12, 9.5319E-13, 8.6963E-13, // F18520
4034  7.9461E-13, 7.2718E-13, 6.6654E-13, 6.1201E-13, 5.6296E-13, // F18530
4035  5.1894E-13, 4.7969E-13, 4.4494E-13, 4.1320E-13, 3.8529E-13, // F18540
4036  3.6202E-13, 3.4320E-13, 3.2546E-13, 3.0741E-13, 2.9156E-13, // F18550
4037  2.7819E-13, 2.6576E-13, 2.5327E-13, 2.4319E-13, 2.3770E-13, // F18560
4038  2.3645E-13, 2.3967E-13, 2.4960E-13, 2.6858E-13, 2.9679E-13, // F18580
4039  3.3247E-13, 3.8487E-13, 4.7576E-13, 6.1833E-13, 8.0740E-13, // F18590
4040  1.0267E-12, 1.2291E-12, 1.4710E-12, 1.7211E-12, 1.8251E-12, // F18600
4041  1.8982E-12, 1.9768E-12, 2.1877E-12, 2.5008E-12, 3.0545E-12, // F18610
4042  4.1513E-12, 5.7469E-12, 7.7913E-12, 1.0873E-11, 1.5538E-11, // F18620
4043  2.2838E-11, 3.4153E-11, 4.9751E-11, 7.0591E-11, 1.0794E-10, // F18630
4044  1.7287E-10, 2.6554E-10, 3.5250E-10, 4.1952E-10, 5.1979E-10, // F18640
4045  5.7649E-10, 5.6168E-10, 5.0014E-10, 4.3670E-10, 4.0057E-10, // F18650
4046  3.5169E-10, 3.7578E-10, 5.5054E-10, 8.8962E-10, 1.2940E-09, // F18660
4047  1.6293E-09, 2.0553E-09, 2.3945E-09, 2.3926E-09, 2.1385E-09, // F18670
4048  1.7637E-09, 1.4623E-09, 1.0150E-09, 5.5612E-10, 3.5162E-10, // F18690
4049  3.4009E-10, 4.1744E-10, 5.0009E-10, 6.0748E-10, 7.3258E-10, // F18700
4050  7.6553E-10, 7.2066E-10, 6.1317E-10, 5.1585E-10, 3.9136E-10, // F18710
4051  2.2991E-10, 1.2590E-10, 6.9549E-11, 3.8699E-11, 2.2976E-11, // F18720
4052  1.4702E-11, 9.9989E-12, 7.1233E-12, 5.2612E-12, 4.0298E-12, // F18730
4053  3.2395E-12, 2.7932E-12, 2.6331E-12, 2.7835E-12, 3.3167E-12, // F18740
4054  3.3581E-12, 3.3404E-12, 3.1243E-12, 2.8459E-12, 2.4092E-12, // F18750
4055  1.5349E-12, 9.7039E-13, 5.8611E-13, 3.9686E-13, 2.9332E-13, // F18760
4056  2.2795E-13, 1.8432E-13, 1.5287E-13, 1.2898E-13, 1.1019E-13, // F18770
4057  9.5041E-14, 8.2617E-14, 7.2310E-14, 6.3711E-14, 5.6561E-14, // F18780
4058  5.0763E-14, 4.6525E-14, 4.4418E-14, 4.4681E-14, 4.7199E-14, // F18800
4059  5.0389E-14, 5.3620E-14, 6.0817E-14, 6.0192E-14, 5.5878E-14, // F18810
4060  4.9874E-14, 4.3955E-14, 3.9854E-14, 3.1697E-14, 3.1135E-14, // F18820
4061  3.4683E-14, 3.8789E-14, 4.6932E-14, 5.0213E-14, 4.7156E-14, // F18830
4062  4.2130E-14, 3.5554E-14, 3.0465E-14, 1.9216E-14, 1.1378E-14, // F18840
4063  8.2878E-15, 6.8260E-15, 6.0960E-15, 5.8135E-15, 5.9618E-15, // F18850
4064  6.8295E-15, 9.2943E-15, 1.2572E-14, 1.4837E-14, 1.8595E-14, // F18860
4065  2.1533E-14, 2.2008E-14, 2.1305E-14, 1.9743E-14, 2.0413E-14, // F18870
4066  2.1131E-14, 2.5346E-14, 3.3709E-14, 4.3995E-14, 5.8911E-14, // F18880
4067  7.8451E-14, 1.0537E-13, 1.4559E-13, 2.0405E-13, 2.6734E-13, // F18890
4068  3.5029E-13, 4.9788E-13, 7.3207E-13, 1.0979E-12, 1.4960E-12, // F18910
4069  1.7906E-12, 2.2171E-12, 2.5369E-12, 2.5873E-12, 2.3871E-12, // F18920
4070  2.0730E-12, 1.9095E-12, 1.6227E-12, 1.3981E-12, 1.5228E-12, // F18930
4071  2.0956E-12, 3.2493E-12, 5.2740E-12, 8.6666E-12, 1.2672E-11, // F18940
4072  1.5725E-11, 1.9496E-11, 2.2858E-11, 2.2939E-11, 2.0597E-11, // F18950
4073  1.7021E-11, 1.4456E-11, 1.0794E-11, 7.1327E-12, 6.5438E-12, // F18960
4074  8.8057E-12, 1.2311E-11, 1.5284E-11, 1.9273E-11, 2.2796E-11, // F18970
4075  2.3156E-11, 2.0914E-11, 1.7298E-11, 1.4424E-11, 1.0127E-11, // F18980
4076  5.2952E-12, 2.5759E-12, 1.4304E-12, 9.4758E-13, 7.9895E-13, // F18990
4077  9.1124E-13, 1.2297E-12, 1.5898E-12, 1.9056E-12, 2.3905E-12, // F19000
4078  2.6695E-12, 2.6297E-12, 2.3467E-12, 2.0058E-12, 1.6773E-12, // F19020
4079  1.1327E-12, 6.7331E-13, 4.0954E-13, 2.5152E-13, 1.4491E-13, // F19030
4080  9.0916E-14, 6.6510E-14, 5.9022E-14, 6.4403E-14, 8.3126E-14, // F19040
4081  1.2409E-13, 1.5153E-13, 1.6909E-13, 1.7938E-13, 1.9169E-13, // F19050
4082  2.1173E-13, 2.1941E-13, 2.6360E-13, 3.5956E-13, 4.8369E-13, // F19060
4083  5.9657E-13, 7.4062E-13, 8.9452E-13, 8.7899E-13, 8.2012E-13, // F19070
4084  7.4109E-13, 6.9845E-13, 6.3130E-13, 5.6538E-13, 6.9516E-13, // F19080
4085  9.9486E-13, 1.5226E-12, 2.4155E-12, 3.9119E-12, 6.3541E-12, // F19090
4086  1.0075E-11, 1.5903E-11, 2.5091E-11, 3.6282E-11, 4.6076E-11, // F19100
4087  5.6240E-11, 7.1126E-11, 7.0230E-11, 6.3642E-11, 5.3722E-11, // F19110
4088  4.4651E-11, 3.4409E-11, 1.5287E-11, 7.2479E-12, 3.9218E-12, // F19130
4089  2.3172E-12, 1.4585E-12, 9.6297E-13, 6.6017E-13, 4.6655E-13, // F19140
4090  3.3814E-13, 2.5034E-13, 1.8874E-13, 1.4457E-13, 1.1228E-13, // F19150
4091  8.8284E-14, 7.0188E-14, 5.6365E-14, 4.5685E-14, 3.7357E-14, // F19160
4092  3.0817E-14, 2.5674E-14, 2.1679E-14, 1.8780E-14, 1.7243E-14, // F19170
4093  1.6273E-14, 1.5201E-14, 1.5091E-14, 1.4725E-14, 1.3668E-14, // F19180
4094  1.1940E-14, 1.0097E-14, 8.8905E-15, 7.1475E-15, 5.8080E-15, // F19190
4095  5.5216E-15, 5.9338E-15, 7.1932E-15, 9.9780E-15, 1.6167E-14, // F19200
4096  2.9100E-14, 5.2355E-14, 8.4889E-14, 1.1311E-13, 1.4192E-13, // F19210
4097  1.7648E-13, 1.8657E-13, 1.7498E-13, 1.4877E-13, 1.2578E-13, // F19220
4098  1.0051E-13, 6.7213E-14, 5.4750E-14, 7.0454E-14, 1.1351E-13, // F19240
4099  1.8015E-13, 2.4825E-13, 3.0875E-13, 3.9200E-13, 4.2550E-13, // F19250
4100  4.0067E-13, 3.4438E-13, 2.8204E-13, 2.2432E-13, 1.3172E-13, // F19260
4101  6.2820E-14, 3.6474E-14, 2.9409E-14, 3.4164E-14, 4.8300E-14, // F19270
4102  6.4140E-14, 7.7284E-14, 9.7973E-14, 1.0969E-13, 1.0580E-13, // F19280
4103  9.2070E-14, 7.5008E-14, 6.1722E-14, 3.8874E-14, 1.9007E-14, // F19290
4104  9.6765E-15, 5.5169E-15, 3.5254E-15, 2.5012E-15, 2.0013E-15, // F19300
4105  1.8810E-15, 2.2143E-15, 3.5332E-15, 5.7552E-15, 7.3359E-15, // F19310
4106  8.3292E-15, 9.9174E-15, 1.0930E-14, 1.1185E-14, 1.0884E-14, // F19320
4107  1.0577E-14, 1.1048E-14, 1.1611E-14, 1.1128E-14, 1.0729E-14, // F19330
4108  1.0248E-14, 1.0630E-14, 1.1793E-14, 1.3977E-14, 1.9857E-14, // F19350
4109  2.9182E-14, 4.2229E-14, 6.2710E-14, 9.0717E-14, 1.2561E-13, // F19360
4110  1.6951E-13, 2.2520E-13, 3.2470E-13, 4.5178E-13, 6.3104E-13, // F19370
4111  8.7521E-13, 1.1073E-12, 1.3534E-12, 1.6954E-12, 1.7005E-12, // F19380
4112  1.5993E-12, 1.4416E-12, 1.3280E-12, 1.2760E-12, 1.1076E-12, // F19390
4113  1.2850E-12, 1.6208E-12, 1.9527E-12, 2.4941E-12, 2.5077E-12, // F19400
4114  2.3156E-12, 2.0069E-12, 1.6301E-12, 1.2885E-12, 5.9863E-13, // F19410
4115  2.8012E-13, 1.5065E-13, 8.8802E-14, 5.5888E-14, 3.6951E-14, // F19420
4116  2.5393E-14, 1.8001E-14, 1.3093E-14, 9.7308E-15, 7.3665E-15, // F19430
4117  5.6662E-15, 4.4194E-15, 3.4897E-15, 2.7857E-15, 2.2457E-15, // F19440
4118  1.8264E-15, 1.4973E-15, 1.2365E-15, 1.0280E-15, 8.5996E-16, // F19460
4119  7.2345E-16, 6.1182E-16, 5.1994E-16, 4.4388E-16, 3.8055E-16, // F19470
4120  3.2756E-16, 2.8300E-16, 2.4537E-16, 2.1347E-16, 1.8630E-16, // F19480
4121  1.6307E-16, 1.4314E-16, 1.2599E-16, 1.1117E-16, 9.8344E-17, // F19490
4122  8.7197E-17, 7.7487E-17, 6.9004E-17, 6.1577E-17, 5.5060E-17, // F19500
4123  4.9325E-17, 4.4271E-17, 3.9810E-17, 3.5861E-17, 3.2361E-17, // F19510
4124  2.9252E-17, 2.6487E-17, 2.4023E-17, 2.1826E-17, 1.9862E-17, // F19520
4125  1.8107E-17, 1.6536E-17, 1.5129E-17, 1.3869E-17, 1.2739E-17, // F19530
4126  1.1726E-17, 1.0820E-17, 1.0009E-17, 9.2846E-18, 8.6398E-18, // F19540
4127  8.0682E-18, 7.5641E-18, 7.1229E-18, 6.7411E-18, 6.4161E-18, // F19550
4128  6.1455E-18, 5.9290E-18, 5.7662E-18, 5.6574E-18, 5.6049E-18, // F19570
4129  5.6112E-18, 5.6811E-18, 5.8200E-18, 6.0364E-18, 6.3405E-18, // F19580
4130  6.7450E-18, 7.2674E-18, 7.9298E-18, 8.7613E-18, 9.8010E-18, // F19590
4131  1.1086E-17, 1.2686E-17, 1.4679E-17, 1.7177E-17, 2.0335E-17, // F19600
4132  2.4384E-17, 2.9538E-17, 3.6416E-17, 4.5520E-17, 5.7788E-17, // F19610
4133  7.4676E-17, 9.8513E-17, 1.3323E-16, 1.8570E-16, 2.6897E-16, // F19620
4134  4.0958E-16, 6.6785E-16, 1.2064E-15, 2.4023E-15, 4.3240E-15, // F19630
4135  6.6353E-15, 8.6393E-15, 1.1433E-14, 1.3946E-14, 1.3611E-14, // F19640
4136  1.2557E-14, 1.0934E-14, 1.0039E-14, 8.5099E-15, 7.9557E-15, // F19650
4137  1.1346E-14, 1.8512E-14, 2.9285E-14, 4.1585E-14, 5.2809E-14, // F19660
4138  7.0377E-14, 7.8094E-14, 7.3735E-14, 6.5845E-14, 5.5023E-14, // F19680
4139  4.6866E-14, 2.7430E-14, 1.5975E-14, 1.4522E-14, 1.7075E-14, // F19690
4140  2.0408E-14, 2.5119E-14, 3.1194E-14, 3.0280E-14, 2.7676E-14, // F19700
4141  2.3344E-14, 1.9466E-14, 1.4140E-14, 6.2087E-15, 3.0307E-15, // F19710
4142  1.6815E-15, 1.0169E-15, 6.5448E-16, 4.4162E-16, 3.0928E-16, // F19720
4143  2.2320E-16, 1.6511E-16, 1.2471E-16, 9.5881E-17, 7.4850E-17, // F19730
4144  5.9216E-17, 4.7400E-17, 3.8338E-17, 3.1298E-17, 2.5765E-17, // F19740
4145  2.1371E-17, 1.7848E-17, 1.5000E-17, 1.2679E-17, 1.0774E-17, // F19750
4146  9.2002E-18, 7.8922E-18, 6.7987E-18, 5.8800E-18, 5.1042E-18, // F19760
4147  4.4461E-18, 3.8855E-18, 3.4060E-18, 2.9944E-18, 2.6397E-18, // F19770
4148  2.3331E-18};
4149 
4150 // CO2 continuum Ridgeway 1982, implementation of CKD_MT_2.50
4151 //Hartmann line coupling: isotopes 1 and 2
4152 // UNITS OF (CM**3/MOL)*1.E-20
4154 const Numeric FCO2_ckd_mt_250_v2 = 10000.0;
4156 const int FCO2_ckd_mt_250_npt = 5003;
4158  8.391e-13, 8.359e-13, 8.345e-13, 8.359e-13, 8.391e-13, 8.439e-13, 8.500e-13,
4159  8.573e-13, 8.655e-13, 8.750e-13, 8.859e-13, 8.981e-13, 9.119e-13, 9.273e-13,
4160  9.442e-13, 9.626e-13, 9.825e-13, 1.004e-12, 1.027e-12, 1.052e-12, 1.078e-12,
4161  1.106e-12, 1.135e-12, 1.166e-12, 1.199e-12, 1.233e-12, 1.270e-12, 1.308e-12,
4162  1.347e-12, 1.389e-12, 1.432e-12, 1.478e-12, 1.525e-12, 1.574e-12, 1.625e-12,
4163  1.678e-12, 1.734e-12, 1.791e-12, 1.850e-12, 1.912e-12, 1.976e-12, 2.042e-12,
4164  2.110e-12, 2.181e-12, 2.254e-12, 2.329e-12, 2.408e-12, 2.488e-12, 2.572e-12,
4165  2.658e-12, 2.746e-12, 2.838e-12, 2.933e-12, 3.030e-12, 3.130e-12, 3.234e-12,
4166  3.341e-12, 3.451e-12, 3.564e-12, 3.681e-12, 3.801e-12, 3.925e-12, 4.053e-12,
4167  4.184e-12, 4.320e-12, 4.459e-12, 4.603e-12, 4.750e-12, 4.902e-12, 5.059e-12,
4168  5.220e-12, 5.386e-12, 5.556e-12, 5.732e-12, 5.912e-12, 6.098e-12, 6.290e-12,
4169  6.487e-12, 6.689e-12, 6.897e-12, 7.112e-12, 7.333e-12, 7.560e-12, 7.793e-12,
4170  8.034e-12, 8.281e-12, 8.535e-12, 8.797e-12, 9.067e-12, 9.344e-12, 9.629e-12,
4171  9.923e-12, 1.023e-11, 1.054e-11, 1.086e-11, 1.119e-11, 1.152e-11, 1.187e-11,
4172  1.223e-11, 1.260e-11, 1.298e-11, 1.338e-11, 1.378e-11, 1.419e-11, 1.462e-11,
4173  1.506e-11, 1.552e-11, 1.598e-11, 1.646e-11, 1.696e-11, 1.747e-11, 1.799e-11,
4174  1.854e-11, 1.909e-11, 1.967e-11, 2.026e-11, 2.087e-11, 2.150e-11, 2.214e-11,
4175  2.281e-11, 2.350e-11, 2.421e-11, 2.494e-11, 2.569e-11, 2.647e-11, 2.727e-11,
4176  2.810e-11, 2.895e-11, 2.983e-11, 3.073e-11, 3.167e-11, 3.263e-11, 3.363e-11,
4177  3.466e-11, 3.572e-11, 3.681e-11, 3.794e-11, 3.910e-11, 4.031e-11, 4.155e-11,
4178  4.283e-11, 4.416e-11, 4.552e-11, 4.694e-11, 4.840e-11, 4.991e-11, 5.147e-11,
4179  5.308e-11, 5.474e-11, 5.646e-11, 5.824e-11, 6.008e-11, 6.199e-11, 6.395e-11,
4180  6.599e-11, 6.809e-11, 7.027e-11, 7.253e-11, 7.486e-11, 7.728e-11, 7.978e-11,
4181  8.237e-11, 8.505e-11, 8.782e-11, 9.070e-11, 9.368e-11, 9.677e-11, 9.997e-11,
4182  1.033e-10, 1.067e-10, 1.103e-10, 1.140e-10, 1.178e-10, 1.218e-10, 1.259e-10,
4183  1.302e-10, 1.347e-10, 1.393e-10, 1.441e-10, 1.491e-10, 1.542e-10, 1.596e-10,
4184  1.652e-10, 1.710e-10, 1.770e-10, 1.833e-10, 1.899e-10, 1.966e-10, 2.037e-10,
4185  2.111e-10, 2.187e-10, 2.267e-10, 2.350e-10, 2.437e-10, 2.527e-10, 2.621e-10,
4186  2.719e-10, 2.821e-10, 2.928e-10, 3.039e-10, 3.155e-10, 3.276e-10, 3.403e-10,
4187  3.535e-10, 3.674e-10, 3.818e-10, 3.969e-10, 4.127e-10, 4.293e-10, 4.466e-10,
4188  4.647e-10, 4.837e-10, 5.036e-10, 5.245e-10, 5.464e-10, 5.695e-10, 5.937e-10,
4189  6.191e-10, 6.459e-10, 6.742e-10, 7.039e-10, 7.353e-10, 7.683e-10, 8.032e-10,
4190  8.400e-10, 8.785e-10, 9.213e-10, 9.661e-10, 1.013e-09, 1.062e-09, 1.114e-09,
4191  1.169e-09, 1.226e-09, 1.286e-09, 1.350e-09, 1.417e-09, 1.488e-09, 1.564e-09,
4192  1.643e-09, 1.728e-09, 1.818e-09, 1.914e-09, 2.016e-09, 2.126e-09, 2.244e-09,
4193  2.378e-09, 2.522e-09, 2.677e-09, 2.843e-09, 3.024e-09, 3.220e-09, 3.437e-09,
4194  3.676e-09, 3.941e-09, 4.236e-09, 4.565e-09, 4.931e-09, 5.336e-09, 5.784e-09,
4195  6.276e-09, 6.817e-09, 7.410e-09, 8.108e-09, 9.238e-09, 1.044e-08, 1.167e-08,
4196  1.292e-08, 1.419e-08, 1.548e-08, 1.679e-08, 1.816e-08, 1.956e-08, 2.103e-08,
4197  2.258e-08, 2.425e-08, 2.609e-08, 2.815e-08, 3.051e-08, 3.326e-08, 3.653e-08,
4198  4.040e-08, 4.546e-08, 5.160e-08, 5.909e-08, 6.836e-08, 7.995e-08, 9.457e-08,
4199  1.130e-07, 1.366e-07, 1.731e-07, 2.156e-07, 2.655e-07, 3.241e-07, 3.927e-07,
4200  4.723e-07, 5.639e-07, 6.685e-07, 7.872e-07, 9.510e-07, 1.199e-06, 1.528e-06,
4201  1.847e-06, 2.155e-06, 2.453e-06, 2.742e-06, 3.026e-06, 3.308e-06, 3.594e-06,
4202  3.895e-06, 4.227e-06, 4.609e-06, 5.073e-06, 5.660e-06, 6.406e-06, 7.410e-06,
4203  8.801e-06, 1.052e-05, 1.261e-05, 1.512e-05, 1.808e-05, 2.149e-05, 2.535e-05,
4204  2.970e-05, 3.413e-05, 4.573e-05, 6.122e-05, 7.642e-05, 9.099e-05, 1.048e-04,
4205  1.176e-04, 1.294e-04, 1.398e-04, 1.488e-04, 1.561e-04, 1.616e-04, 1.653e-04,
4206  1.670e-04, 1.666e-04, 1.642e-04, 1.599e-04, 1.538e-04, 1.460e-04, 1.365e-04,
4207  1.256e-04, 1.132e-04, 9.969e-05, 8.499e-05, 6.925e-05, 5.260e-05, 4.198e-05,
4208  3.475e-05, 2.933e-05, 2.457e-05, 2.043e-05, 1.690e-05, 1.394e-05, 1.151e-05,
4209  9.559e-06, 8.021e-06, 6.826e-06, 5.920e-06, 5.232e-06, 4.703e-06, 4.285e-06,
4210  3.941e-06, 3.643e-06, 3.368e-06, 3.106e-06, 2.847e-06, 2.585e-06, 2.316e-06,
4211  2.040e-06, 1.755e-06, 1.463e-06, 1.165e-06, 9.093e-07, 8.070e-07, 6.991e-07,
4212  6.009e-07, 5.118e-07, 4.319e-07, 3.612e-07, 2.996e-07, 2.465e-07, 2.012e-07,
4213  1.633e-07, 1.370e-07, 1.172e-07, 1.015e-07, 8.892e-08, 7.876e-08, 7.053e-08,
4214  6.378e-08, 5.817e-08, 5.367e-08, 4.988e-08, 4.660e-08, 4.372e-08, 4.113e-08,
4215  3.874e-08, 3.651e-08, 3.439e-08, 3.234e-08, 3.033e-08, 2.836e-08, 2.641e-08,
4216  2.448e-08, 2.255e-08, 2.062e-08, 1.869e-08, 1.677e-08, 1.532e-08, 1.417e-08,
4217  1.317e-08, 1.226e-08, 1.143e-08, 1.068e-08, 1.001e-08, 9.396e-09, 8.846e-09,
4218  8.350e-09, 7.902e-09, 7.496e-09, 7.125e-09, 6.784e-09, 6.467e-09, 6.171e-09,
4219  5.892e-09, 5.629e-09, 5.379e-09, 5.161e-09, 4.952e-09, 4.756e-09, 4.571e-09,
4220  4.396e-09, 4.232e-09, 4.077e-09, 3.930e-09, 3.792e-09, 3.662e-09, 3.541e-09,
4221  3.426e-09, 3.320e-09, 3.221e-09, 3.129e-09, 3.045e-09, 2.967e-09, 2.898e-09,
4222  2.839e-09, 2.788e-09, 2.743e-09, 2.706e-09, 2.676e-09, 2.653e-09, 2.638e-09,
4223  2.633e-09, 2.640e-09, 2.661e-09, 2.700e-09, 2.760e-09, 2.844e-09, 2.953e-09,
4224  3.092e-09, 3.260e-09, 3.459e-09, 3.685e-09, 3.936e-09, 4.205e-09, 4.482e-09,
4225  4.756e-09, 5.015e-09, 5.255e-09, 5.479e-09, 5.696e-09, 5.915e-09, 6.139e-09,
4226  6.369e-09, 6.596e-09, 6.811e-09, 6.999e-09, 7.148e-09, 7.244e-09, 7.280e-09,
4227  7.252e-09, 7.159e-09, 7.007e-09, 6.799e-09, 6.547e-09, 6.260e-09, 5.948e-09,
4228  5.618e-09, 5.279e-09, 4.935e-09, 4.584e-09, 4.224e-09, 3.849e-09, 3.457e-09,
4229  3.055e-09, 2.658e-09, 2.285e-09, 1.948e-09, 1.661e-09, 1.429e-09, 1.254e-09,
4230  1.133e-09, 1.060e-09, 1.031e-09, 1.038e-09, 1.079e-09, 1.151e-09, 1.254e-09,
4231  1.391e-09, 1.564e-09, 1.777e-09, 2.033e-09, 2.335e-09, 2.682e-09, 3.072e-09,
4232  3.497e-09, 3.947e-09, 4.407e-09, 4.859e-09, 5.293e-09, 5.707e-09, 6.108e-09,
4233  6.510e-09, 6.919e-09, 7.337e-09, 7.762e-09, 8.178e-09, 8.573e-09, 8.923e-09,
4234  9.211e-09, 9.419e-09, 9.536e-09, 9.554e-09, 9.473e-09, 9.300e-09, 9.043e-09,
4235  8.715e-09, 8.330e-09, 7.904e-09, 7.447e-09, 6.968e-09, 6.471e-09, 5.955e-09,
4236  5.414e-09, 4.843e-09, 4.246e-09, 3.644e-09, 3.054e-09, 2.504e-09, 2.010e-09,
4237  1.584e-09, 1.234e-09, 9.578e-10, 7.490e-10, 5.962e-10, 4.887e-10, 4.149e-10,
4238  3.652e-10, 3.309e-10, 3.067e-10, 2.892e-10, 2.758e-10, 2.650e-10, 2.560e-10,
4239  2.482e-10, 2.413e-10, 2.351e-10, 2.295e-10, 2.244e-10, 2.197e-10, 2.154e-10,
4240  2.113e-10, 2.075e-10, 2.039e-10, 2.005e-10, 1.973e-10, 1.942e-10, 1.912e-10,
4241  1.884e-10, 1.857e-10, 1.831e-10, 1.805e-10, 1.781e-10, 1.757e-10, 1.734e-10,
4242  1.712e-10, 1.691e-10, 1.670e-10, 1.649e-10, 1.629e-10, 1.610e-10, 1.591e-10,
4243  1.573e-10, 1.555e-10, 1.537e-10, 1.520e-10, 1.503e-10, 1.487e-10, 1.471e-10,
4244  1.455e-10, 1.440e-10, 1.425e-10, 1.410e-10, 1.396e-10, 1.381e-10, 1.368e-10,
4245  1.354e-10, 1.341e-10, 1.328e-10, 1.315e-10, 1.303e-10, 1.290e-10, 1.278e-10,
4246  1.267e-10, 1.255e-10, 1.244e-10, 1.233e-10, 1.222e-10, 1.211e-10, 1.201e-10,
4247  1.190e-10, 1.180e-10, 1.170e-10, 1.161e-10, 1.151e-10, 1.142e-10, 1.133e-10,
4248  1.124e-10, 1.115e-10, 1.106e-10, 1.098e-10, 1.089e-10, 1.081e-10, 1.073e-10,
4249  1.065e-10, 1.058e-10, 1.050e-10, 1.043e-10, 1.036e-10, 1.028e-10, 1.022e-10,
4250  1.015e-10, 1.008e-10, 1.001e-10, 9.950e-11, 9.887e-11, 9.825e-11, 9.765e-11,
4251  9.705e-11, 9.647e-11, 9.591e-11, 9.535e-11, 9.480e-11, 9.427e-11, 9.375e-11,
4252  9.324e-11, 9.274e-11, 9.225e-11, 9.177e-11, 9.131e-11, 9.085e-11, 9.040e-11,
4253  8.997e-11, 8.954e-11, 8.913e-11, 8.872e-11, 8.833e-11, 8.794e-11, 8.757e-11,
4254  8.720e-11, 8.684e-11, 8.650e-11, 8.616e-11, 8.583e-11, 8.551e-11, 8.520e-11,
4255  8.490e-11, 8.461e-11, 8.432e-11, 8.405e-11, 8.378e-11, 8.352e-11, 8.327e-11,
4256  8.303e-11, 8.280e-11, 8.257e-11, 8.236e-11, 8.215e-11, 8.195e-11, 8.176e-11,
4257  8.158e-11, 8.140e-11, 8.123e-11, 8.107e-11, 8.092e-11, 8.078e-11, 8.064e-11,
4258  8.051e-11, 8.039e-11, 8.028e-11, 8.018e-11, 8.008e-11, 7.999e-11, 7.991e-11,
4259  7.983e-11, 7.976e-11, 7.971e-11, 7.965e-11, 7.961e-11, 7.957e-11, 7.954e-11,
4260  7.952e-11, 7.951e-11, 7.950e-11, 7.950e-11, 7.951e-11, 7.952e-11, 7.955e-11,
4261  7.958e-11, 7.961e-11, 7.966e-11, 7.971e-11, 7.977e-11, 7.984e-11, 7.991e-11,
4262  8.000e-11, 8.009e-11, 8.018e-11, 8.029e-11, 8.040e-11, 8.052e-11, 8.065e-11,
4263  8.079e-11, 8.093e-11, 8.108e-11, 8.124e-11, 8.141e-11, 8.158e-11, 8.176e-11,
4264  8.195e-11, 8.215e-11, 8.235e-11, 8.257e-11, 8.279e-11, 8.302e-11, 8.326e-11,
4265  8.350e-11, 8.376e-11, 8.402e-11, 8.429e-11, 8.457e-11, 8.486e-11, 8.515e-11,
4266  8.546e-11, 8.577e-11, 8.609e-11, 8.642e-11, 8.676e-11, 8.711e-11, 8.747e-11,
4267  8.783e-11, 8.821e-11, 8.859e-11, 8.898e-11, 8.939e-11, 8.980e-11, 9.022e-11,
4268  9.065e-11, 9.109e-11, 9.155e-11, 9.201e-11, 9.248e-11, 9.296e-11, 9.345e-11,
4269  9.395e-11, 9.446e-11, 9.499e-11, 9.552e-11, 9.606e-11, 9.662e-11, 9.719e-11,
4270  9.776e-11, 9.835e-11, 9.895e-11, 9.956e-11, 1.002e-10, 1.008e-10, 1.015e-10,
4271  1.021e-10, 1.028e-10, 1.035e-10, 1.042e-10, 1.049e-10, 1.056e-10, 1.063e-10,
4272  1.071e-10, 1.079e-10, 1.086e-10, 1.094e-10, 1.102e-10, 1.111e-10, 1.119e-10,
4273  1.127e-10, 1.136e-10, 1.145e-10, 1.154e-10, 1.163e-10, 1.172e-10, 1.181e-10,
4274  1.191e-10, 1.201e-10, 1.211e-10, 1.221e-10, 1.231e-10, 1.241e-10, 1.252e-10,
4275  1.263e-10, 1.274e-10, 1.285e-10, 1.296e-10, 1.308e-10, 1.319e-10, 1.331e-10,
4276  1.344e-10, 1.356e-10, 1.368e-10, 1.381e-10, 1.394e-10, 1.407e-10, 1.421e-10,
4277  1.435e-10, 1.448e-10, 1.463e-10, 1.477e-10, 1.492e-10, 1.506e-10, 1.522e-10,
4278  1.537e-10, 1.553e-10, 1.568e-10, 1.585e-10, 1.601e-10, 1.618e-10, 1.635e-10,
4279  1.652e-10, 1.670e-10, 1.688e-10, 1.706e-10, 1.725e-10, 1.744e-10, 1.763e-10,
4280  1.782e-10, 1.802e-10, 1.823e-10, 1.843e-10, 1.864e-10, 1.886e-10, 1.907e-10,
4281  1.929e-10, 1.952e-10, 1.975e-10, 1.998e-10, 2.022e-10, 2.046e-10, 2.071e-10,
4282  2.096e-10, 2.122e-10, 2.148e-10, 2.174e-10, 2.202e-10, 2.229e-10, 2.257e-10,
4283  2.286e-10, 2.315e-10, 2.345e-10, 2.375e-10, 2.406e-10, 2.438e-10, 2.470e-10,
4284  2.503e-10, 2.536e-10, 2.570e-10, 2.605e-10, 2.641e-10, 2.677e-10, 2.714e-10,
4285  2.752e-10, 2.791e-10, 2.831e-10, 2.871e-10, 2.913e-10, 2.955e-10, 2.999e-10,
4286  3.043e-10, 3.089e-10, 3.136e-10, 3.184e-10, 3.234e-10, 3.285e-10, 3.337e-10,
4287  3.391e-10, 3.447e-10, 3.505e-10, 3.564e-10, 3.626e-10, 3.689e-10, 3.754e-10,
4288  3.822e-10, 3.892e-10, 3.965e-10, 4.041e-10, 4.120e-10, 4.203e-10, 4.290e-10,
4289  4.381e-10, 4.478e-10, 4.581e-10, 4.691e-10, 4.807e-10, 4.931e-10, 5.062e-10,
4290  5.200e-10, 5.346e-10, 5.499e-10, 5.659e-10, 5.826e-10, 6.002e-10, 6.189e-10,
4291  6.392e-10, 6.606e-10, 6.834e-10, 7.080e-10, 7.348e-10, 7.643e-10, 7.974e-10,
4292  8.351e-10, 8.791e-10, 9.301e-10, 9.894e-10, 1.059e-09, 1.140e-09, 1.235e-09,
4293  1.346e-09, 1.472e-09, 1.616e-09, 1.777e-09, 1.954e-09, 2.147e-09, 2.347e-09,
4294  2.549e-09, 2.747e-09, 2.941e-09, 3.126e-09, 3.309e-09, 3.589e-09, 3.848e-09,
4295  4.066e-09, 4.238e-09, 4.365e-09, 4.445e-09, 4.481e-09, 4.474e-09, 4.426e-09,
4296  4.341e-09, 4.223e-09, 4.076e-09, 3.905e-09, 3.717e-09, 3.516e-09, 3.308e-09,
4297  3.100e-09, 2.897e-09, 2.701e-09, 2.514e-09, 2.332e-09, 2.156e-09, 1.985e-09,
4298  1.819e-09, 1.659e-09, 1.635e-09, 1.630e-09, 1.634e-09, 1.642e-09, 1.654e-09,
4299  1.668e-09, 1.685e-09, 1.705e-09, 1.728e-09, 1.754e-09, 1.785e-09, 1.819e-09,
4300  1.859e-09, 1.903e-09, 1.952e-09, 2.007e-09, 2.068e-09, 2.134e-09, 2.207e-09,
4301  2.287e-09, 2.374e-09, 2.469e-09, 2.573e-09, 2.686e-09, 2.810e-09, 2.947e-09,
4302  3.098e-09, 3.285e-09, 3.494e-09, 3.729e-09, 3.999e-09, 4.311e-09, 4.677e-09,
4303  5.110e-09, 5.628e-09, 6.239e-09, 6.963e-09, 7.806e-09, 8.772e-09, 9.860e-09,
4304  1.106e-08, 1.236e-08, 1.375e-08, 1.519e-08, 1.666e-08, 1.817e-08, 1.962e-08,
4305  2.240e-08, 2.516e-08, 2.762e-08, 2.977e-08, 3.157e-08, 3.303e-08, 3.411e-08,
4306  3.479e-08, 3.524e-08, 3.533e-08, 3.506e-08, 3.445e-08, 3.353e-08, 3.236e-08,
4307  3.096e-08, 2.939e-08, 2.769e-08, 2.589e-08, 2.404e-08, 2.215e-08, 2.024e-08,
4308  1.832e-08, 1.640e-08, 1.449e-08, 1.261e-08, 1.203e-08, 1.188e-08, 1.185e-08,
4309  1.188e-08, 1.195e-08, 1.205e-08, 1.216e-08, 1.228e-08, 1.250e-08, 1.278e-08,
4310  1.307e-08, 1.337e-08, 1.369e-08, 1.402e-08, 1.436e-08, 1.474e-08, 1.513e-08,
4311  1.556e-08, 1.601e-08, 1.651e-08, 1.703e-08, 1.760e-08, 1.821e-08, 1.886e-08,
4312  1.957e-08, 2.032e-08, 2.119e-08, 2.213e-08, 2.313e-08, 2.420e-08, 2.534e-08,
4313  2.656e-08, 2.785e-08, 2.923e-08, 3.070e-08, 3.228e-08, 3.396e-08, 3.577e-08,
4314  3.772e-08, 3.981e-08, 4.207e-08, 4.451e-08, 4.715e-08, 5.001e-08, 5.313e-08,
4315  5.654e-08, 6.027e-08, 6.438e-08, 6.891e-08, 7.395e-08, 7.959e-08, 8.594e-08,
4316  9.315e-08, 1.014e-07, 1.109e-07, 1.220e-07, 1.351e-07, 1.506e-07, 1.691e-07,
4317  1.914e-07, 2.184e-07, 2.511e-07, 2.910e-07, 3.396e-07, 3.986e-07, 4.703e-07,
4318  5.565e-07, 6.598e-07, 7.824e-07, 9.260e-07, 1.092e-06, 1.282e-06, 1.495e-06,
4319  1.730e-06, 1.984e-06, 2.254e-06, 2.533e-06, 2.816e-06, 3.100e-06, 3.386e-06,
4320  3.683e-06, 3.999e-06, 4.343e-06, 4.721e-06, 5.140e-06, 5.603e-06, 6.119e-06,
4321  6.699e-06, 7.361e-06, 8.132e-06, 9.049e-06, 1.017e-05, 1.155e-05, 1.329e-05,
4322  1.549e-05, 1.827e-05, 2.178e-05, 2.619e-05, 3.169e-05, 3.845e-05, 4.668e-05,
4323  5.656e-05, 6.822e-05, 8.175e-05, 9.719e-05, 1.145e-04, 1.334e-04, 1.537e-04,
4324  1.748e-04, 1.960e-04, 2.167e-04, 2.363e-04, 2.549e-04, 2.731e-04, 2.911e-04,
4325  3.094e-04, 3.277e-04, 3.458e-04, 3.629e-04, 3.782e-04, 3.910e-04, 4.003e-04,
4326  4.058e-04, 4.069e-04, 4.038e-04, 3.964e-04, 3.853e-04, 3.709e-04, 3.538e-04,
4327  3.348e-04, 3.143e-04, 2.928e-04, 2.707e-04, 2.481e-04, 2.250e-04, 2.010e-04,
4328  1.760e-04, 1.504e-04, 1.250e-04, 1.010e-04, 7.907e-05, 6.005e-05, 4.430e-05,
4329  3.180e-05, 2.231e-05, 1.544e-05, 1.069e-05, 7.481e-06, 5.397e-06, 4.055e-06,
4330  3.178e-06, 2.581e-06, 2.153e-06, 1.827e-06, 1.568e-06, 1.357e-06, 1.182e-06,
4331  1.035e-06, 9.114e-07, 8.059e-07, 7.156e-07, 6.378e-07, 5.706e-07, 5.122e-07,
4332  4.612e-07, 4.165e-07, 3.771e-07, 3.424e-07, 3.116e-07, 2.843e-07, 2.599e-07,
4333  2.381e-07, 2.186e-07, 2.010e-07, 1.852e-07, 1.709e-07, 1.580e-07, 1.463e-07,
4334  1.356e-07, 1.259e-07, 1.171e-07, 1.090e-07, 1.017e-07, 9.489e-08, 8.868e-08,
4335  8.297e-08, 7.772e-08, 7.288e-08, 6.841e-08, 6.428e-08, 6.045e-08, 5.691e-08,
4336  5.362e-08, 5.057e-08, 4.773e-08, 4.508e-08, 4.262e-08, 4.032e-08, 3.818e-08,
4337  3.617e-08, 3.430e-08, 3.255e-08, 3.090e-08, 2.936e-08, 2.791e-08, 2.655e-08,
4338  2.527e-08, 2.407e-08, 2.294e-08, 2.187e-08, 2.087e-08, 1.992e-08, 1.902e-08,
4339  1.818e-08, 1.738e-08, 1.662e-08, 1.590e-08, 1.522e-08, 1.458e-08, 1.397e-08,
4340  1.339e-08, 1.284e-08, 1.232e-08, 1.183e-08, 1.136e-08, 1.091e-08, 1.048e-08,
4341  1.008e-08, 9.691e-09, 9.322e-09, 8.971e-09, 8.636e-09, 8.316e-09, 8.011e-09,
4342  7.720e-09, 7.441e-09, 7.175e-09, 6.921e-09, 6.677e-09, 6.444e-09, 6.221e-09,
4343  6.008e-09, 5.803e-09, 5.607e-09, 5.419e-09, 5.239e-09, 5.066e-09, 4.900e-09,
4344  4.740e-09, 4.587e-09, 4.440e-09, 4.299e-09, 4.163e-09, 4.033e-09, 3.907e-09,
4345  3.787e-09, 3.671e-09, 3.559e-09, 3.451e-09, 3.347e-09, 3.247e-09, 3.151e-09,
4346  3.058e-09, 2.969e-09, 2.883e-09, 2.799e-09, 2.719e-09, 2.642e-09, 2.567e-09,
4347  2.495e-09, 2.425e-09, 2.357e-09, 2.292e-09, 2.229e-09, 2.169e-09, 2.110e-09,
4348  2.053e-09, 1.998e-09, 1.945e-09, 1.893e-09, 1.843e-09, 1.795e-09, 1.748e-09,
4349  1.703e-09, 1.659e-09, 1.617e-09, 1.576e-09, 1.536e-09, 1.497e-09, 1.460e-09,
4350  1.424e-09, 1.388e-09, 1.354e-09, 1.321e-09, 1.289e-09, 1.258e-09, 1.227e-09,
4351  1.198e-09, 1.169e-09, 1.142e-09, 1.115e-09, 1.088e-09, 1.063e-09, 1.038e-09,
4352  1.014e-09, 9.908e-10, 9.681e-10, 9.460e-10, 9.246e-10, 9.037e-10, 8.834e-10,
4353  8.636e-10, 8.444e-10, 8.257e-10, 8.074e-10, 7.897e-10, 7.724e-10, 7.556e-10,
4354  7.393e-10, 7.233e-10, 7.078e-10, 6.927e-10, 6.779e-10, 6.636e-10, 6.496e-10,
4355  6.359e-10, 6.226e-10, 6.097e-10, 5.970e-10, 5.847e-10, 5.727e-10, 5.610e-10,
4356  5.495e-10, 5.384e-10, 5.275e-10, 5.169e-10, 5.065e-10, 4.964e-10, 4.865e-10,
4357  4.769e-10, 4.675e-10, 4.583e-10, 4.493e-10, 4.406e-10, 4.320e-10, 4.236e-10,
4358  4.155e-10, 4.075e-10, 3.997e-10, 3.921e-10, 3.846e-10, 3.774e-10, 3.703e-10,
4359  3.633e-10, 3.565e-10, 3.499e-10, 3.434e-10, 3.370e-10, 3.308e-10, 3.248e-10,
4360  3.188e-10, 3.130e-10, 3.073e-10, 3.018e-10, 2.963e-10, 2.910e-10, 2.858e-10,
4361  2.807e-10, 2.757e-10, 2.708e-10, 2.660e-10, 2.613e-10, 2.567e-10, 2.523e-10,
4362  2.479e-10, 2.436e-10, 2.393e-10, 2.352e-10, 2.312e-10, 2.272e-10, 2.233e-10,
4363  2.195e-10, 2.158e-10, 2.121e-10, 2.086e-10, 2.051e-10, 2.016e-10, 1.983e-10,
4364  1.950e-10, 1.917e-10, 1.886e-10, 1.855e-10, 1.824e-10, 1.794e-10, 1.765e-10,
4365  1.736e-10, 1.708e-10, 1.680e-10, 1.653e-10, 1.627e-10, 1.601e-10, 1.575e-10,
4366  1.550e-10, 1.525e-10, 1.501e-10, 1.478e-10, 1.454e-10, 1.431e-10, 1.409e-10,
4367  1.387e-10, 1.366e-10, 1.344e-10, 1.324e-10, 1.303e-10, 1.283e-10, 1.264e-10,
4368  1.244e-10, 1.225e-10, 1.207e-10, 1.189e-10, 1.171e-10, 1.153e-10, 1.136e-10,
4369  1.119e-10, 1.102e-10, 1.086e-10, 1.070e-10, 1.054e-10, 1.039e-10, 1.023e-10,
4370  1.008e-10, 9.937e-11, 9.793e-11, 9.651e-11, 9.512e-11, 9.375e-11, 9.241e-11,
4371  9.109e-11, 8.979e-11, 8.852e-11, 8.726e-11, 8.603e-11, 8.483e-11, 8.364e-11,
4372  8.247e-11, 8.132e-11, 8.020e-11, 7.909e-11, 7.800e-11, 7.693e-11, 7.588e-11,
4373  7.485e-11, 7.384e-11, 7.284e-11, 7.186e-11, 7.090e-11, 6.995e-11, 6.902e-11,
4374  6.811e-11, 6.721e-11, 6.633e-11, 6.546e-11, 6.461e-11, 6.377e-11, 6.295e-11,
4375  6.214e-11, 6.135e-11, 6.057e-11, 5.980e-11, 5.905e-11, 5.831e-11, 5.758e-11,
4376  5.687e-11, 5.617e-11, 5.548e-11, 5.481e-11, 5.415e-11, 5.350e-11, 5.286e-11,
4377  5.224e-11, 5.163e-11, 5.103e-11, 5.045e-11, 4.989e-11, 4.934e-11, 4.881e-11,
4378  4.830e-11, 4.781e-11, 4.734e-11, 4.689e-11, 4.646e-11, 4.605e-11, 4.565e-11,
4379  4.527e-11, 4.489e-11, 4.453e-11, 4.417e-11, 4.381e-11, 4.346e-11, 4.312e-11,
4380  4.279e-11, 4.247e-11, 4.216e-11, 4.187e-11, 4.160e-11, 4.136e-11, 4.114e-11,
4381  4.097e-11, 4.084e-11, 4.075e-11, 4.073e-11, 4.077e-11, 4.089e-11, 4.110e-11,
4382  4.142e-11, 4.185e-11, 4.238e-11, 4.301e-11, 4.372e-11, 4.448e-11, 4.527e-11,
4383  4.604e-11, 4.677e-11, 4.742e-11, 4.798e-11, 4.844e-11, 4.879e-11, 4.905e-11,
4384  4.924e-11, 4.936e-11, 4.940e-11, 4.939e-11, 4.937e-11, 4.935e-11, 4.938e-11,
4385  4.946e-11, 4.963e-11, 4.987e-11, 5.018e-11, 5.057e-11, 5.100e-11, 5.147e-11,
4386  5.195e-11, 5.242e-11, 5.285e-11, 5.321e-11, 5.346e-11, 5.358e-11, 5.352e-11,
4387  5.327e-11, 5.283e-11, 5.217e-11, 5.133e-11, 5.034e-11, 4.918e-11, 4.786e-11,
4388  4.643e-11, 4.492e-11, 4.338e-11, 4.186e-11, 4.042e-11, 3.908e-11, 3.789e-11,
4389  3.685e-11, 3.598e-11, 3.527e-11, 3.472e-11, 3.430e-11, 3.402e-11, 3.385e-11,
4390  3.379e-11, 3.382e-11, 3.395e-11, 3.420e-11, 3.466e-11, 3.519e-11, 3.579e-11,
4391  3.645e-11, 3.718e-11, 3.798e-11, 3.886e-11, 3.982e-11, 4.088e-11, 4.204e-11,
4392  4.331e-11, 4.471e-11, 4.626e-11, 4.800e-11, 4.996e-11, 5.219e-11, 5.475e-11,
4393  5.769e-11, 6.108e-11, 6.494e-11, 6.930e-11, 7.414e-11, 7.941e-11, 8.501e-11,
4394  9.086e-11, 9.693e-11, 1.029e-10, 1.087e-10, 1.142e-10, 1.193e-10, 1.240e-10,
4395  1.282e-10, 1.342e-10, 1.412e-10, 1.485e-10, 1.559e-10, 1.639e-10, 1.725e-10,
4396  1.821e-10, 1.928e-10, 2.047e-10, 2.175e-10, 2.312e-10, 2.454e-10, 2.596e-10,
4397  2.735e-10, 2.867e-10, 2.988e-10, 3.094e-10, 3.182e-10, 3.248e-10, 3.291e-10,
4398  3.308e-10, 3.298e-10, 3.260e-10, 3.195e-10, 3.101e-10, 3.000e-10, 2.891e-10,
4399  2.769e-10, 2.635e-10, 2.493e-10, 2.347e-10, 2.204e-10, 2.068e-10, 1.944e-10,
4400  1.836e-10, 1.746e-10, 1.675e-10, 1.622e-10, 1.586e-10, 1.565e-10, 1.559e-10,
4401  1.564e-10, 1.579e-10, 1.604e-10, 1.636e-10, 1.675e-10, 1.721e-10, 1.774e-10,
4402  1.833e-10, 1.899e-10, 1.973e-10, 2.055e-10, 2.146e-10, 2.247e-10, 2.360e-10,
4403  2.486e-10, 2.626e-10, 2.784e-10, 2.960e-10, 3.158e-10, 3.380e-10, 3.630e-10,
4404  3.913e-10, 4.234e-10, 4.599e-10, 5.020e-10, 5.507e-10, 6.075e-10, 6.737e-10,
4405  7.509e-10, 8.409e-10, 9.452e-10, 1.066e-09, 1.203e-09, 1.360e-09, 1.535e-09,
4406  1.730e-09, 1.945e-09, 2.179e-09, 2.436e-09, 2.721e-09, 3.044e-09, 3.417e-09,
4407  3.853e-09, 4.362e-09, 4.955e-09, 5.639e-09, 6.417e-09, 7.287e-09, 8.241e-09,
4408  9.269e-09, 1.035e-08, 1.145e-08, 1.256e-08, 1.365e-08, 1.475e-08, 1.589e-08,
4409  1.710e-08, 1.842e-08, 1.988e-08, 2.149e-08, 2.326e-08, 2.520e-08, 2.731e-08,
4410  2.962e-08, 3.215e-08, 3.498e-08, 3.823e-08, 4.199e-08, 4.646e-08, 5.180e-08,
4411  5.819e-08, 6.582e-08, 7.484e-08, 8.539e-08, 9.756e-08, 1.114e-07, 1.270e-07,
4412  1.443e-07, 1.635e-07, 1.848e-07, 2.090e-07, 2.371e-07, 2.706e-07, 3.111e-07,
4413  3.601e-07, 4.190e-07, 4.892e-07, 5.717e-07, 6.668e-07, 7.748e-07, 8.947e-07,
4414  1.025e-06, 1.162e-06, 1.301e-06, 1.439e-06, 1.570e-06, 1.692e-06, 1.808e-06,
4415  1.920e-06, 2.034e-06, 2.150e-06, 2.269e-06, 2.386e-06, 2.499e-06, 2.600e-06,
4416  2.684e-06, 2.746e-06, 2.781e-06, 2.788e-06, 2.768e-06, 2.720e-06, 2.648e-06,
4417  2.556e-06, 2.448e-06, 2.328e-06, 2.198e-06, 2.063e-06, 1.923e-06, 1.779e-06,
4418  1.628e-06, 1.469e-06, 1.300e-06, 1.126e-06, 9.526e-07, 7.885e-07, 6.394e-07,
4419  5.112e-07, 4.064e-07, 3.262e-07, 2.698e-07, 2.352e-07, 2.206e-07, 2.235e-07,
4420  2.429e-07, 2.784e-07, 3.302e-07, 3.995e-07, 4.880e-07, 5.968e-07, 7.277e-07,
4421  8.811e-07, 1.056e-06, 1.251e-06, 1.461e-06, 1.680e-06, 1.901e-06, 2.116e-06,
4422  2.321e-06, 2.519e-06, 2.715e-06, 2.913e-06, 3.115e-06, 3.321e-06, 3.526e-06,
4423  3.724e-06, 3.905e-06, 4.059e-06, 4.181e-06, 4.261e-06, 4.295e-06, 4.283e-06,
4424  4.225e-06, 4.126e-06, 3.991e-06, 3.826e-06, 3.637e-06, 3.432e-06, 3.215e-06,
4425  2.989e-06, 2.755e-06, 2.511e-06, 2.254e-06, 1.985e-06, 1.706e-06, 1.429e-06,
4426  1.166e-06, 9.250e-07, 7.135e-07, 5.356e-07, 3.921e-07, 2.814e-07, 1.988e-07,
4427  1.398e-07, 9.915e-08, 7.137e-08, 5.280e-08, 4.038e-08, 3.192e-08, 2.601e-08,
4428  2.164e-08, 1.836e-08, 1.578e-08, 1.371e-08, 1.199e-08, 1.056e-08, 9.353e-09,
4429  8.321e-09, 7.436e-09, 6.672e-09, 6.010e-09, 5.433e-09, 4.929e-09, 4.487e-09,
4430  4.098e-09, 3.754e-09, 3.448e-09, 3.174e-09, 2.929e-09, 2.708e-09, 2.507e-09,
4431  2.325e-09, 2.159e-09, 2.006e-09, 1.866e-09, 1.738e-09, 1.619e-09, 1.510e-09,
4432  1.409e-09, 1.316e-09, 1.230e-09, 1.149e-09, 1.074e-09, 1.003e-09, 9.372e-10,
4433  8.757e-10, 8.186e-10, 7.661e-10, 7.179e-10, 6.740e-10, 6.339e-10, 5.974e-10,
4434  5.641e-10, 5.335e-10, 5.053e-10, 4.791e-10, 4.548e-10, 4.321e-10, 4.109e-10,
4435  3.909e-10, 3.722e-10, 3.546e-10, 3.380e-10, 3.224e-10, 3.076e-10, 2.936e-10,
4436  2.804e-10, 2.680e-10, 2.562e-10, 2.451e-10, 2.346e-10, 2.246e-10, 2.153e-10,
4437  2.064e-10, 1.981e-10, 1.901e-10, 1.826e-10, 1.755e-10, 1.687e-10, 1.623e-10,
4438  1.562e-10, 1.503e-10, 1.448e-10, 1.395e-10, 1.344e-10, 1.296e-10, 1.250e-10,
4439  1.206e-10, 1.165e-10, 1.125e-10, 1.087e-10, 1.050e-10, 1.015e-10, 9.822e-11,
4440  9.506e-11, 9.203e-11, 8.915e-11, 8.640e-11, 8.377e-11, 8.127e-11, 7.888e-11,
4441  7.660e-11, 7.442e-11, 7.234e-11, 7.035e-11, 6.844e-11, 6.661e-11, 6.486e-11,
4442  6.316e-11, 6.154e-11, 5.998e-11, 5.850e-11, 5.710e-11, 5.582e-11, 5.460e-11,
4443  5.344e-11, 5.234e-11, 5.132e-11, 5.040e-11, 4.961e-11, 4.896e-11, 4.845e-11,
4444  4.806e-11, 4.774e-11, 4.742e-11, 4.702e-11, 4.652e-11, 4.594e-11, 4.527e-11,
4445  4.451e-11, 4.366e-11, 4.274e-11, 4.172e-11, 4.063e-11, 3.946e-11, 3.822e-11,
4446  3.693e-11, 3.560e-11, 3.428e-11, 3.293e-11, 3.155e-11, 3.014e-11, 2.872e-11,
4447  2.734e-11, 2.603e-11, 2.482e-11, 2.376e-11, 2.286e-11, 2.211e-11, 2.146e-11,
4448  2.088e-11, 2.032e-11, 1.980e-11, 1.930e-11, 1.882e-11, 1.836e-11, 1.792e-11,
4449  1.749e-11, 1.708e-11, 1.669e-11, 1.630e-11, 1.593e-11, 1.557e-11, 1.522e-11,
4450  1.488e-11, 1.456e-11, 1.424e-11, 1.392e-11, 1.362e-11, 1.333e-11, 1.304e-11,
4451  1.276e-11, 1.249e-11, 1.223e-11, 1.197e-11, 1.172e-11, 1.147e-11, 1.124e-11,
4452  1.100e-11, 1.078e-11, 1.056e-11, 1.034e-11, 1.013e-11, 9.924e-12, 9.723e-12,
4453  9.528e-12, 9.336e-12, 9.149e-12, 8.967e-12, 8.789e-12, 8.615e-12, 8.445e-12,
4454  8.278e-12, 8.116e-12, 7.957e-12, 7.802e-12, 7.650e-12, 7.502e-12, 7.357e-12,
4455  7.215e-12, 7.076e-12, 6.940e-12, 6.807e-12, 6.677e-12, 6.550e-12, 6.426e-12,
4456  6.304e-12, 6.185e-12, 6.068e-12, 5.954e-12, 5.842e-12, 5.732e-12, 5.625e-12,
4457  5.520e-12, 5.417e-12, 5.316e-12, 5.217e-12, 5.121e-12, 5.026e-12, 4.933e-12,
4458  4.842e-12, 4.753e-12, 4.665e-12, 4.580e-12, 4.496e-12, 4.414e-12, 4.333e-12,
4459  4.254e-12, 4.176e-12, 4.100e-12, 4.025e-12, 3.952e-12, 3.880e-12, 3.810e-12,
4460  3.741e-12, 3.673e-12, 3.607e-12, 3.542e-12, 3.478e-12, 3.415e-12, 3.353e-12,
4461  3.293e-12, 3.233e-12, 3.175e-12, 3.118e-12, 3.062e-12, 3.007e-12, 2.953e-12,
4462  2.899e-12, 2.847e-12, 2.796e-12, 2.746e-12, 2.696e-12, 2.648e-12, 2.600e-12,
4463  2.554e-12, 2.508e-12, 2.463e-12, 2.418e-12, 2.375e-12, 2.332e-12, 2.290e-12,
4464  2.249e-12, 2.208e-12, 2.168e-12, 2.129e-12, 2.090e-12, 2.053e-12, 2.015e-12,
4465  1.979e-12, 1.943e-12, 1.908e-12, 1.873e-12, 1.839e-12, 1.805e-12, 1.772e-12,
4466  1.740e-12, 1.708e-12, 1.677e-12, 1.646e-12, 1.616e-12, 1.586e-12, 1.557e-12,
4467  1.528e-12, 1.500e-12, 1.472e-12, 1.445e-12, 1.418e-12, 1.391e-12, 1.365e-12,
4468  1.340e-12, 1.314e-12, 1.290e-12, 1.265e-12, 1.241e-12, 1.218e-12, 1.195e-12,
4469  1.172e-12, 1.150e-12, 1.128e-12, 1.106e-12, 1.085e-12, 1.064e-12, 1.043e-12,
4470  1.023e-12, 1.003e-12, 9.835e-13, 9.643e-13, 9.453e-13, 9.267e-13, 9.084e-13,
4471  8.904e-13, 8.727e-13, 8.553e-13, 8.382e-13, 8.213e-13, 8.048e-13, 7.885e-13,
4472  7.725e-13, 7.568e-13, 7.414e-13, 7.262e-13, 7.113e-13, 6.966e-13, 6.822e-13,
4473  6.680e-13, 6.541e-13, 6.404e-13, 6.270e-13, 6.138e-13, 6.009e-13, 5.882e-13,
4474  5.757e-13, 5.634e-13, 5.514e-13, 5.396e-13, 5.280e-13, 5.167e-13, 5.055e-13,
4475  4.946e-13, 4.839e-13, 4.734e-13, 4.631e-13, 4.531e-13, 4.432e-13, 4.336e-13,
4476  4.241e-13, 4.149e-13, 4.059e-13, 3.971e-13, 3.885e-13, 3.801e-13, 3.720e-13,
4477  3.640e-13, 3.562e-13, 3.487e-13, 3.414e-13, 3.342e-13, 3.274e-13, 3.207e-13,
4478  3.142e-13, 3.080e-13, 3.020e-13, 2.963e-13, 2.908e-13, 2.856e-13, 2.806e-13,
4479  2.759e-13, 2.715e-13, 2.673e-13, 2.635e-13, 2.600e-13, 2.569e-13, 2.542e-13,
4480  2.519e-13, 2.500e-13, 2.487e-13, 2.479e-13, 2.477e-13, 2.483e-13, 2.498e-13,
4481  2.524e-13, 2.562e-13, 2.614e-13, 2.684e-13, 2.776e-13, 2.894e-13, 3.045e-13,
4482  3.235e-13, 3.472e-13, 3.765e-13, 4.123e-13, 4.554e-13, 5.064e-13, 5.654e-13,
4483  6.321e-13, 7.055e-13, 7.844e-13, 8.666e-13, 9.498e-13, 1.032e-12, 1.111e-12,
4484  1.186e-12, 1.257e-12, 1.322e-12, 1.377e-12, 1.473e-12, 1.580e-12, 1.690e-12,
4485  1.806e-12, 1.930e-12, 2.066e-12, 2.217e-12, 2.386e-12, 2.572e-12, 2.771e-12,
4486  2.983e-12, 3.199e-12, 3.414e-12, 3.619e-12, 3.810e-12, 3.980e-12, 4.123e-12,
4487  4.235e-12, 4.311e-12, 4.348e-12, 4.343e-12, 4.296e-12, 4.204e-12, 4.069e-12,
4488  3.891e-12, 3.711e-12, 3.520e-12, 3.310e-12, 3.085e-12, 2.854e-12, 2.622e-12,
4489  2.400e-12, 2.198e-12, 2.022e-12, 1.879e-12, 1.772e-12, 1.703e-12, 1.673e-12,
4490  1.680e-12, 1.723e-12, 1.799e-12, 1.911e-12, 2.055e-12, 2.231e-12, 2.440e-12,
4491  2.683e-12, 2.960e-12, 3.271e-12, 3.620e-12, 4.012e-12, 4.456e-12, 4.958e-12,
4492  5.520e-12, 6.142e-12, 6.818e-12, 7.538e-12, 8.289e-12, 9.052e-12, 9.821e-12,
4493  1.060e-11, 1.140e-11, 1.226e-11, 1.320e-11, 1.426e-11, 1.547e-11, 1.686e-11,
4494  1.846e-11, 2.030e-11, 2.243e-11, 2.487e-11, 2.767e-11, 3.089e-11, 3.452e-11,
4495  3.858e-11, 4.305e-11, 4.791e-11, 5.309e-11, 5.851e-11, 6.412e-11, 6.995e-11,
4496  7.609e-11, 8.271e-11, 8.987e-11, 9.758e-11, 1.058e-10, 1.146e-10, 1.237e-10,
4497  1.331e-10, 1.428e-10, 1.530e-10, 1.638e-10, 1.755e-10, 1.886e-10, 2.036e-10,
4498  2.212e-10, 2.418e-10, 2.662e-10, 2.949e-10, 3.287e-10, 3.677e-10, 4.130e-10,
4499  4.648e-10, 5.232e-10, 5.877e-10, 6.574e-10, 7.307e-10, 8.058e-10, 8.802e-10,
4500  9.540e-10, 1.027e-09, 1.102e-09, 1.181e-09, 1.268e-09, 1.365e-09, 1.476e-09,
4501  1.601e-09, 1.744e-09, 1.908e-09, 2.099e-09, 2.323e-09, 2.589e-09, 2.904e-09,
4502  3.278e-09, 3.721e-09, 4.237e-09, 4.828e-09, 5.491e-09, 6.214e-09, 6.977e-09,
4503  7.752e-09, 8.508e-09, 9.225e-09, 9.899e-09, 1.055e-08, 1.120e-08, 1.187e-08,
4504  1.256e-08, 1.325e-08, 1.395e-08, 1.461e-08, 1.520e-08, 1.569e-08, 1.605e-08,
4505  1.626e-08, 1.631e-08, 1.620e-08, 1.594e-08, 1.553e-08, 1.501e-08, 1.439e-08,
4506  1.370e-08, 1.296e-08, 1.219e-08, 1.139e-08, 1.055e-08, 9.668e-09, 8.719e-09,
4507  7.720e-09, 6.699e-09, 5.699e-09, 4.763e-09, 3.920e-09, 3.193e-09, 2.592e-09,
4508  2.116e-09, 1.754e-09, 1.496e-09, 1.322e-09, 1.222e-09, 1.179e-09, 1.188e-09,
4509  1.242e-09, 1.341e-09, 1.488e-09, 1.691e-09, 1.963e-09, 2.320e-09, 2.783e-09,
4510  3.375e-09, 4.124e-09, 5.059e-09, 6.212e-09, 7.615e-09, 9.297e-09, 1.128e-08,
4511  1.359e-08, 1.623e-08, 1.920e-08, 2.246e-08, 2.598e-08, 2.967e-08, 3.341e-08,
4512  3.709e-08, 4.060e-08, 4.393e-08, 4.715e-08, 5.035e-08, 5.359e-08, 5.689e-08,
4513  6.020e-08, 6.340e-08, 6.637e-08, 6.892e-08, 7.091e-08, 7.222e-08, 7.275e-08,
4514  7.249e-08, 7.146e-08, 6.970e-08, 6.732e-08, 6.443e-08, 6.112e-08, 5.751e-08,
4515  5.370e-08, 4.974e-08, 4.570e-08, 4.155e-08, 3.726e-08, 3.279e-08, 2.817e-08,
4516  2.355e-08, 1.910e-08, 1.501e-08, 1.141e-08, 8.412e-09, 6.023e-09, 4.215e-09,
4517  2.923e-09, 2.033e-09, 1.455e-09, 1.093e-09, 8.740e-10, 7.431e-10, 6.659e-10,
4518  6.264e-10, 6.148e-10, 6.290e-10, 6.704e-10, 7.425e-10, 8.507e-10, 1.003e-09,
4519  1.207e-09, 1.473e-09, 1.814e-09, 2.240e-09, 2.764e-09, 3.393e-09, 4.135e-09,
4520  4.986e-09, 5.942e-09, 6.983e-09, 8.082e-09, 9.200e-09, 1.030e-08, 1.135e-08,
4521  1.236e-08, 1.334e-08, 1.434e-08, 1.536e-08, 1.642e-08, 1.749e-08, 1.854e-08,
4522  1.954e-08, 2.042e-08, 2.114e-08, 2.167e-08, 2.198e-08, 2.205e-08, 2.189e-08,
4523  2.153e-08, 2.099e-08, 2.030e-08, 1.949e-08, 1.859e-08, 1.763e-08, 1.662e-08,
4524  1.556e-08, 1.445e-08, 1.325e-08, 1.197e-08, 1.060e-08, 9.205e-09, 7.832e-09,
4525  6.544e-09, 5.383e-09, 4.378e-09, 3.539e-09, 2.863e-09, 2.326e-09, 1.907e-09,
4526  1.578e-09, 1.311e-09, 1.088e-09, 8.975e-10, 7.318e-10, 5.895e-10, 4.686e-10,
4527  3.686e-10, 2.875e-10, 2.242e-10, 1.750e-10, 1.380e-10, 1.104e-10, 8.948e-11,
4528  7.378e-11, 6.180e-11, 5.251e-11, 4.520e-11, 3.940e-11, 3.475e-11, 3.099e-11,
4529  2.792e-11, 2.537e-11, 2.323e-11, 2.141e-11, 1.985e-11, 1.850e-11, 1.734e-11,
4530  1.633e-11, 1.545e-11, 1.468e-11, 1.399e-11, 1.338e-11, 1.281e-11, 1.228e-11,
4531  1.179e-11, 1.133e-11, 1.091e-11, 1.055e-11, 1.019e-11, 9.838e-12, 9.494e-12,
4532  9.161e-12, 8.845e-12, 8.544e-12, 8.258e-12, 7.982e-12, 7.708e-12, 7.428e-12,
4533  7.141e-12, 6.853e-12, 6.574e-12, 6.319e-12, 6.101e-12, 5.933e-12, 5.825e-12,
4534  5.790e-12, 5.845e-12, 6.018e-12, 6.355e-12, 6.862e-12, 7.521e-12, 8.372e-12,
4535  9.455e-12, 1.076e-11, 1.231e-11, 1.415e-11, 1.635e-11, 1.900e-11, 2.233e-11,
4536  2.688e-11, 3.335e-11, 4.316e-11, 5.277e-11, 6.203e-11, 7.088e-11, 7.925e-11,
4537  8.706e-11, 9.420e-11, 1.005e-10, 1.059e-10, 1.101e-10, 1.130e-10, 1.145e-10,
4538  1.146e-10, 1.132e-10, 1.104e-10, 1.063e-10, 1.008e-10, 9.418e-11, 8.642e-11,
4539  7.766e-11, 6.805e-11, 5.779e-11, 4.724e-11, 3.706e-11, 2.875e-11, 2.362e-11,
4540  1.918e-11, 1.520e-11, 1.168e-11, 8.671e-12, 6.195e-12, 4.263e-12, 2.844e-12,
4541  1.873e-12, 1.259e-12, 8.916e-13, 6.808e-13, 5.494e-13, 4.535e-13, 3.758e-13,
4542  3.113e-13, 2.571e-13, 2.110e-13, 1.714e-13, 1.372e-13, 1.074e-13, 8.140e-14,
4543  5.888e-14, 3.992e-14, 2.574e-14, 2.098e-14, 1.985e-14, 1.894e-14, 1.804e-14,
4544  1.721e-14, 1.645e-14, 1.570e-14, 1.509e-14, 1.449e-14, 1.389e-14, 1.336e-14,
4545  1.291e-14, 1.238e-14, 1.200e-14, 1.155e-14, 1.117e-14, 1.079e-14, 1.042e-14,
4546  1.004e-14, 9.736e-15, 9.434e-15, 9.132e-15, 8.830e-15, 8.604e-15, 8.302e-15,
4547  8.075e-15, 7.849e-15, 7.623e-15, 7.381e-15, 7.170e-15, 6.974e-15, 6.777e-15,
4548  6.589e-15, 6.408e-15, 6.234e-15, 6.068e-15, 5.909e-15, 5.751e-15, 5.600e-15,
4549  5.457e-15, 5.321e-15, 5.185e-15, 5.057e-15, 4.928e-15, 4.808e-15, 4.694e-15,
4550  4.581e-15, 4.475e-15, 4.370e-15, 4.272e-15, 4.174e-15, 4.083e-15, 3.992e-15,
4551  3.909e-15, 3.834e-15, 3.758e-15, 3.691e-15, 3.623e-15, 3.562e-15, 3.509e-15,
4552  3.464e-15, 3.426e-15, 3.396e-15, 3.374e-15, 3.351e-15, 3.343e-15, 3.336e-15,
4553  3.343e-15, 3.358e-15, 3.374e-15, 3.396e-15, 3.434e-15, 3.472e-15, 3.517e-15,
4554  3.562e-15, 3.608e-15, 3.653e-15, 3.706e-15, 3.751e-15, 3.437e-14, 7.989e-14,
4555  1.282e-13, 1.776e-13, 2.263e-13, 2.729e-13, 3.172e-13, 3.605e-13, 4.054e-13,
4556  4.547e-13, 5.102e-13, 5.724e-13, 6.399e-13, 7.079e-13, 7.639e-13, 8.028e-13,
4557  8.255e-13, 8.329e-13, 8.264e-13, 8.071e-13, 7.764e-13, 7.358e-13, 6.868e-13,
4558  6.310e-13, 5.700e-13, 5.051e-13, 4.376e-13, 3.681e-13, 2.968e-13, 2.234e-13,
4559  1.473e-13, 6.888e-14, 3.200e-15, 3.147e-15, 3.087e-15, 3.011e-15, 2.898e-15,
4560  2.755e-15, 2.611e-15, 2.483e-15, 2.392e-15, 2.340e-15, 2.317e-15, 2.317e-15,
4561  2.332e-15, 2.347e-15, 2.385e-15, 2.430e-15, 2.491e-15, 2.558e-15, 2.619e-15,
4562  3.956e-14, 8.813e-14, 1.397e-13, 1.926e-13, 2.457e-13, 2.970e-13, 3.453e-13,
4563  3.918e-13, 4.390e-13, 4.899e-13, 5.472e-13, 6.123e-13, 6.845e-13, 7.615e-13,
4564  8.299e-13, 8.795e-13, 9.111e-13, 9.260e-13, 9.252e-13, 9.099e-13, 8.817e-13,
4565  8.421e-13, 7.925e-13, 7.350e-13, 6.711e-13, 6.022e-13, 5.297e-13, 4.544e-13,
4566  3.767e-13, 2.965e-13, 2.132e-13, 1.265e-13, 3.808e-14, 2.408e-15, 2.302e-15,
4567  2.158e-15, 1.985e-15, 1.796e-15, 1.615e-15, 1.449e-15, 1.313e-15, 1.177e-15,
4568  1.057e-15, 9.509e-16, 8.604e-16, 7.849e-16, 7.336e-16, 6.928e-16, 6.589e-16,
4569  6.257e-16, 5.947e-16, 5.698e-16, 5.494e-16, 5.321e-16, 5.155e-16, 5.004e-16,
4570  4.875e-16, 4.770e-16, 4.679e-16, 4.604e-16, 4.528e-16, 4.475e-16, 4.430e-16,
4571  4.408e-16, 4.385e-16, 4.377e-16, 4.385e-16, 4.400e-16, 4.438e-16, 4.498e-16,
4572  4.574e-16, 4.664e-16, 4.777e-16, 4.936e-16, 5.155e-16, 5.442e-16, 5.781e-16,
4573  6.166e-16, 6.581e-16, 7.011e-16, 7.479e-16, 8.000e-16, 8.528e-16, 9.057e-16,
4574  9.509e-16, 9.887e-16, 1.019e-15, 1.049e-15, 1.079e-15, 1.117e-15, 1.170e-15,
4575  1.230e-15, 1.291e-15, 1.351e-15, 1.404e-15, 1.457e-15, 1.509e-15, 1.555e-15,
4576  1.592e-15, 1.623e-15, 1.645e-15, 1.660e-15, 1.660e-15, 1.660e-15, 1.660e-15,
4577  1.660e-15, 1.653e-15, 1.638e-15, 1.623e-15, 1.608e-15, 1.585e-15, 1.555e-15,
4578  1.532e-15, 1.502e-15, 1.487e-15, 1.487e-15, 1.502e-15, 1.509e-15, 1.525e-15,
4579  1.540e-15, 1.547e-15, 1.547e-15, 1.555e-15, 1.570e-15, 1.592e-15, 1.638e-15,
4580  1.691e-15, 1.751e-15, 1.826e-15, 1.917e-15, 2.015e-15, 2.136e-15, 2.264e-15,
4581  2.408e-15, 2.543e-15, 2.687e-15, 2.830e-15, 2.981e-15, 3.140e-15, 3.321e-15,
4582  3.517e-15, 1.344e-14, 5.071e-14, 9.298e-14, 1.386e-13, 1.864e-13, 2.353e-13,
4583  2.838e-13, 3.317e-13, 3.798e-13, 4.276e-13, 4.770e-13, 5.299e-13, 5.879e-13,
4584  6.531e-13, 7.277e-13, 8.135e-13, 9.128e-13, 1.028e-12, 1.163e-12, 1.320e-12,
4585  1.506e-12, 1.723e-12, 1.983e-12, 2.292e-12, 2.657e-12, 3.080e-12, 3.560e-12,
4586  4.093e-12, 4.664e-12, 5.252e-12, 5.837e-12, 6.395e-12, 6.924e-12, 7.424e-12,
4587  7.909e-12, 8.394e-12, 8.890e-12, 9.398e-12, 9.911e-12, 1.042e-11, 1.092e-11,
4588  1.140e-11, 1.184e-11, 1.226e-11, 1.268e-11, 1.311e-11, 1.360e-11, 1.420e-11,
4589  1.499e-11, 1.603e-11, 1.740e-11, 1.916e-11, 2.136e-11, 2.401e-11, 2.709e-11,
4590  3.051e-11, 3.419e-11, 3.796e-11, 4.166e-11, 4.519e-11, 4.858e-11, 5.189e-11,
4591  5.528e-11, 5.883e-11, 6.257e-11, 6.644e-11, 7.032e-11, 7.407e-11, 7.751e-11,
4592  8.044e-11, 8.273e-11, 8.424e-11, 8.491e-11, 8.472e-11, 8.371e-11, 8.193e-11,
4593  7.954e-11, 7.660e-11, 7.327e-11, 6.964e-11, 6.579e-11, 6.175e-11, 5.748e-11,
4594  5.295e-11, 4.807e-11, 4.289e-11, 3.757e-11, 3.230e-11, 2.731e-11, 2.278e-11,
4595  1.881e-11, 1.546e-11, 1.273e-11, 1.058e-11, 8.955e-12, 7.746e-12, 6.902e-12,
4596  6.331e-12, 5.989e-12, 5.820e-12, 5.808e-12, 5.927e-12, 6.175e-12, 6.552e-12,
4597  7.059e-12, 7.708e-12, 8.512e-12, 9.506e-12, 1.072e-11, 1.220e-11, 1.402e-11,
4598  1.623e-11, 1.889e-11, 2.204e-11, 2.573e-11, 2.996e-11, 3.477e-11, 4.016e-11,
4599  4.617e-11, 5.289e-11, 6.051e-11, 6.933e-11, 7.972e-11, 9.209e-11, 1.068e-10,
4600  1.243e-10, 1.447e-10, 1.684e-10, 1.953e-10, 2.254e-10, 2.582e-10, 2.933e-10,
4601  3.297e-10, 3.662e-10, 4.014e-10, 4.345e-10, 4.655e-10, 4.951e-10, 5.248e-10,
4602  5.554e-10, 5.872e-10, 6.200e-10, 6.526e-10, 6.838e-10, 7.115e-10, 7.342e-10,
4603  7.503e-10, 7.590e-10, 7.597e-10, 7.526e-10, 7.380e-10, 7.170e-10, 6.905e-10,
4604  6.597e-10, 6.255e-10, 5.889e-10, 5.506e-10, 5.107e-10, 4.691e-10, 4.252e-10,
4605  3.786e-10, 3.296e-10, 2.797e-10, 2.307e-10, 1.848e-10, 1.440e-10, 1.091e-10,
4606  8.078e-11, 5.881e-11, 4.268e-11, 3.141e-11, 2.402e-11, 1.953e-11, 1.711e-11,
4607  1.615e-11, 1.625e-11, 1.722e-11, 1.901e-11, 2.170e-11, 2.541e-11, 3.033e-11,
4608  3.670e-11, 4.480e-11, 5.496e-11, 6.753e-11, 8.287e-11, 1.013e-10, 1.232e-10,
4609  1.486e-10, 1.776e-10, 2.100e-10, 2.453e-10, 2.826e-10, 3.207e-10, 3.585e-10,
4610  3.947e-10, 4.295e-10, 4.634e-10, 4.975e-10, 5.327e-10, 5.691e-10, 6.066e-10,
4611  6.440e-10, 6.801e-10, 7.130e-10, 7.410e-10, 7.624e-10, 7.761e-10, 7.814e-10,
4612  7.782e-10, 7.670e-10, 7.483e-10, 7.233e-10, 6.931e-10, 6.588e-10, 6.215e-10,
4613  5.819e-10, 5.402e-10, 4.966e-10, 4.506e-10, 4.017e-10, 3.503e-10, 2.981e-10,
4614  2.468e-10, 1.987e-10, 1.552e-10, 1.179e-10, 8.705e-11, 6.278e-11, 4.457e-11,
4615  3.136e-11, 2.219e-11, 1.601e-11, 1.191e-11, 9.181e-12, 7.312e-12, 6.003e-12,
4616  5.040e-12, 4.304e-12, 3.722e-12, 3.250e-12, 2.861e-12, 2.533e-12, 2.254e-12,
4617  2.016e-12, 1.812e-12, 1.637e-12, 1.491e-12, 1.370e-12, 1.275e-12, 1.205e-12,
4618  1.164e-12, 1.153e-12, 1.179e-12, 1.248e-12, 1.370e-12, 1.561e-12, 1.839e-12,
4619  2.232e-12, 2.761e-12, 3.467e-12, 4.391e-12, 5.580e-12, 7.078e-12, 8.932e-12,
4620  1.117e-11, 1.382e-11, 1.688e-11, 2.031e-11, 2.403e-11, 2.792e-11, 3.188e-11,
4621  3.573e-11, 3.941e-11, 4.294e-11, 4.645e-11, 5.000e-11, 5.367e-11, 5.743e-11,
4622  6.123e-11, 6.491e-11, 6.837e-11, 7.141e-11, 7.392e-11, 7.576e-11, 7.687e-11,
4623  7.720e-11, 7.678e-11, 7.567e-11, 7.396e-11, 7.187e-11, 6.938e-11, 6.665e-11,
4624  6.373e-11, 6.070e-11, 5.757e-11, 5.426e-11, 5.070e-11, 4.683e-11, 4.269e-11,
4625  3.841e-11, 3.420e-11, 3.020e-11, 2.654e-11, 2.330e-11, 2.050e-11, 1.812e-11,
4626  1.611e-11, 1.439e-11, 1.291e-11, 1.158e-11, 1.037e-11, 9.206e-12, 8.084e-12,
4627  7.010e-12, 6.045e-12, 5.105e-12, 4.203e-12, 3.363e-12, 2.610e-12, 1.964e-12,
4628  1.429e-12, 1.009e-12, 6.869e-13, 4.567e-13, 2.909e-13, 1.790e-13, 1.033e-13,
4629  5.183e-14, 1.809e-14, 8.906e-15, 8.151e-15, 7.472e-15, 6.860e-15, 6.332e-15,
4630  5.902e-15, 5.555e-15, 5.268e-15, 5.019e-15, 4.808e-15, 4.657e-15, 4.551e-15,
4631  4.483e-15, 4.453e-15, 4.460e-15, 4.498e-15, 4.581e-15, 4.702e-15, 4.860e-15,
4632  5.049e-15, 5.275e-15, 5.540e-15, 5.864e-15, 6.272e-15, 3.285e-14, 8.652e-14,
4633  1.564e-13, 2.476e-13, 3.706e-13, 5.518e-13, 8.262e-13, 1.265e-12, 1.708e-12,
4634  2.148e-12, 2.584e-12, 3.012e-12, 3.432e-12, 3.836e-12, 4.219e-12, 4.571e-12,
4635  4.879e-12, 5.133e-12, 5.322e-12, 5.439e-12, 5.482e-12, 5.452e-12, 5.352e-12,
4636  5.185e-12, 4.955e-12, 4.666e-12, 4.323e-12, 3.935e-12, 3.511e-12, 3.069e-12,
4637  2.641e-12, 2.302e-12, 2.118e-12, 1.978e-12, 1.874e-12, 1.809e-12, 1.787e-12,
4638  1.812e-12, 1.888e-12, 2.015e-12, 2.195e-12, 2.429e-12, 2.721e-12, 3.074e-12,
4639  3.495e-12, 3.990e-12, 4.564e-12, 5.216e-12, 5.943e-12, 6.726e-12, 7.566e-12,
4640  8.462e-12, 9.412e-12, 1.040e-11, 1.142e-11, 1.244e-11, 1.342e-11, 1.433e-11,
4641  1.519e-11, 1.602e-11, 1.688e-11, 1.782e-11, 1.890e-11, 2.010e-11, 2.139e-11,
4642  2.268e-11, 2.375e-11, 2.445e-11, 2.481e-11, 2.486e-11, 2.464e-11, 2.417e-11,
4643  2.349e-11, 2.262e-11, 2.157e-11, 2.038e-11, 1.908e-11, 1.770e-11, 1.626e-11,
4644  1.477e-11, 1.323e-11, 1.165e-11, 9.999e-12, 8.290e-12, 6.576e-12, 4.935e-12,
4645  3.475e-12, 2.280e-12, 1.419e-12, 9.163e-13, 7.470e-13, 7.556e-13, 7.834e-13,
4646  8.307e-13, 8.969e-13, 9.822e-13, 1.088e-12, 1.215e-12, 1.367e-12, 1.546e-12,
4647  1.755e-12, 1.999e-12, 2.283e-12, 2.614e-12, 2.998e-12, 3.446e-12, 3.968e-12,
4648  4.576e-12, 5.280e-12, 6.095e-12, 7.031e-12, 8.103e-12, 9.320e-12, 1.070e-11,
4649  1.225e-11, 1.400e-11, 1.600e-11, 1.825e-11, 2.082e-11, 2.377e-11, 2.719e-11,
4650  3.115e-11, 3.576e-11, 4.110e-11, 4.725e-11, 5.425e-11, 6.219e-11, 7.118e-11,
4651  8.133e-11, 9.264e-11, 1.052e-10, 1.190e-10, 1.341e-10, 1.506e-10, 1.684e-10,
4652  1.879e-10, 2.094e-10, 2.339e-10, 2.624e-10, 2.956e-10, 3.345e-10, 3.795e-10,
4653  4.309e-10, 4.883e-10, 5.499e-10, 6.166e-10, 6.887e-10, 7.664e-10, 8.495e-10,
4654  9.372e-10, 1.028e-09, 1.119e-09, 1.209e-09, 1.293e-09, 1.372e-09, 1.448e-09,
4655  1.526e-09, 1.612e-09, 1.711e-09, 1.822e-09, 1.944e-09, 2.070e-09, 2.175e-09,
4656  2.246e-09, 2.287e-09, 2.298e-09, 2.285e-09, 2.248e-09, 2.190e-09, 2.111e-09,
4657  2.016e-09, 1.906e-09, 1.785e-09, 1.657e-09, 1.521e-09, 1.382e-09, 1.238e-09,
4658  1.089e-09, 9.341e-10, 7.733e-10, 6.100e-10, 4.528e-10, 3.101e-10, 1.906e-10,
4659  1.028e-10, 4.896e-11, 2.904e-11, 2.392e-11, 1.984e-11, 1.661e-11, 1.403e-11,
4660  1.193e-11, 1.023e-11, 8.815e-12, 7.641e-12, 6.658e-12, 5.828e-12, 5.123e-12,
4661  4.521e-12, 4.004e-12, 3.558e-12, 3.171e-12, 2.834e-12, 2.539e-12, 2.280e-12,
4662  2.052e-12, 1.850e-12, 1.671e-12, 1.512e-12, 1.370e-12, 1.243e-12, 1.129e-12,
4663  1.026e-12, 9.339e-13, 8.504e-13, 7.748e-13, 7.063e-13, 6.440e-13, 5.872e-13,
4664  5.354e-13, 4.881e-13, 4.448e-13, 4.051e-13, 3.686e-13, 3.351e-13, 3.042e-13,
4665  2.757e-13, 2.494e-13, 2.252e-13, 2.027e-13, 1.818e-13, 1.625e-13, 1.446e-13,
4666  1.280e-13, 1.125e-13, 9.815e-14, 8.481e-14, 7.242e-14, 6.095e-14, 5.034e-14,
4667  4.060e-14, 3.174e-14, 2.390e-14, 1.717e-14, 1.206e-14, 1.034e-14, 9.811e-15,
4668  9.358e-15, 8.906e-15, 8.453e-15, 8.075e-15, 7.698e-15, 7.328e-15, 6.989e-15,
4669  6.664e-15, 6.355e-15, 6.068e-15, 5.796e-15, 5.540e-15, 5.298e-15, 5.064e-15,
4670  4.845e-15, 4.642e-15, 4.445e-15, 4.257e-15, 4.075e-15, 3.909e-15, 3.743e-15,
4671  3.592e-15, 3.449e-15, 3.306e-15, 3.177e-15, 3.057e-15, 2.936e-15, 2.823e-15,
4672  2.709e-15, 2.611e-15, 2.513e-15, 2.415e-15, 2.325e-15, 2.242e-15, 2.158e-15,
4673  2.083e-15, 2.008e-15, 1.940e-15, 1.872e-15, 1.804e-15, 1.743e-15, 1.691e-15,
4674  1.638e-15, 1.585e-15, 1.540e-15, 1.494e-15, 1.457e-15, 1.419e-15, 1.389e-15,
4675  1.358e-15, 1.343e-15, 1.321e-15, 1.298e-15, 1.283e-15, 1.268e-15, 1.253e-15,
4676  1.245e-15, 5.862e-15, 3.288e-14, 6.265e-14, 9.326e-14, 1.234e-13, 1.522e-13,
4677  1.796e-13, 2.058e-13, 2.317e-13, 2.575e-13, 2.833e-13, 3.087e-13, 3.328e-13,
4678  3.550e-13, 3.742e-13, 3.895e-13, 4.003e-13, 4.058e-13, 4.058e-13, 4.003e-13,
4679  3.895e-13, 3.742e-13, 3.548e-13, 3.324e-13, 3.077e-13, 2.818e-13, 2.549e-13,
4680  2.274e-13, 1.990e-13, 1.691e-13, 1.374e-13, 1.040e-13, 6.996e-14, 3.648e-14,
4681  5.560e-15, 6.709e-16, 6.468e-16, 6.196e-16, 5.917e-16, 5.645e-16, 5.396e-16,
4682  5.162e-16, 4.928e-16, 4.717e-16, 4.528e-16, 4.385e-16, 4.279e-16, 4.211e-16,
4683  4.181e-16, 4.166e-16, 4.166e-16, 4.189e-16, 4.226e-16, 4.279e-16, 4.370e-16,
4684  4.475e-16, 4.611e-16, 4.755e-16, 4.936e-16, 5.155e-16, 5.426e-16, 5.736e-16,
4685  6.060e-16, 6.453e-16, 6.928e-16, 2.296e-14, 5.327e-14, 8.601e-14, 1.202e-13,
4686  1.548e-13, 1.892e-13, 2.235e-13, 2.581e-13, 2.945e-13, 3.339e-13, 3.774e-13,
4687  4.261e-13, 4.803e-13, 5.411e-13, 6.089e-13, 6.851e-13, 7.711e-13, 8.691e-13,
4688  9.818e-13, 1.112e-12, 1.263e-12, 1.436e-12, 1.634e-12, 1.856e-12, 2.099e-12,
4689  2.358e-12, 2.625e-12, 2.889e-12, 3.139e-12, 3.373e-12, 3.595e-12, 3.811e-12,
4690  4.032e-12, 4.260e-12, 4.497e-12, 4.736e-12, 4.970e-12, 5.185e-12, 5.369e-12,
4691  5.511e-12, 5.600e-12, 5.630e-12, 5.600e-12, 5.512e-12, 5.369e-12, 5.181e-12,
4692  4.955e-12, 4.699e-12, 4.424e-12, 4.134e-12, 3.833e-12, 3.520e-12, 3.193e-12,
4693  2.847e-12, 2.481e-12, 2.103e-12, 1.730e-12, 1.375e-12, 1.053e-12, 7.751e-13,
4694  5.442e-13, 3.613e-13, 2.236e-13, 1.239e-13, 5.619e-14, 1.470e-14, 4.747e-15,
4695  4.483e-15, 4.279e-15, 4.158e-15, 4.136e-15, 4.204e-15, 4.355e-15, 1.840e-14,
4696  4.496e-14, 8.112e-14, 1.284e-13, 1.892e-13, 2.667e-13, 3.638e-13, 4.862e-13,
4697  6.386e-13, 8.266e-13, 1.056e-12, 1.334e-12, 1.665e-12, 2.055e-12, 2.506e-12,
4698  3.021e-12, 3.595e-12, 4.225e-12, 4.900e-12, 5.605e-12, 6.318e-12, 7.018e-12,
4699  7.688e-12, 8.326e-12, 8.949e-12, 9.578e-12, 1.023e-11, 1.089e-11, 1.157e-11,
4700  1.224e-11, 1.286e-11, 1.339e-11, 1.380e-11, 1.407e-11, 1.418e-11, 1.412e-11,
4701  1.390e-11, 1.354e-11, 1.306e-11, 1.247e-11, 1.181e-11, 1.108e-11, 1.032e-11,
4702  9.520e-12, 8.700e-12, 7.857e-12, 6.985e-12, 6.077e-12, 5.144e-12, 4.213e-12,
4703  3.324e-12, 2.518e-12, 1.820e-12, 1.251e-12, 8.129e-13, 4.967e-13, 2.819e-13,
4704  1.460e-13, 6.531e-14, 1.977e-14, 6.506e-15, 5.547e-15, 4.740e-15, 4.113e-15,
4705  3.645e-15, 3.291e-15, 3.004e-15, 2.755e-15, 2.536e-15, 2.392e-15, 2.302e-15,
4706  2.249e-15, 2.219e-15, 2.226e-15, 2.264e-15, 2.340e-15, 2.445e-15, 2.581e-15,
4707  8.149e-15, 4.005e-14, 8.285e-14, 1.376e-13, 2.056e-13, 2.892e-13, 3.902e-13,
4708  5.099e-13, 6.488e-13, 8.062e-13, 9.798e-13, 1.166e-12, 1.358e-12, 1.551e-12,
4709  1.737e-12, 1.915e-12, 2.088e-12, 2.261e-12, 2.440e-12, 2.626e-12, 2.818e-12,
4710  3.010e-12, 3.195e-12, 3.365e-12, 3.508e-12, 3.618e-12, 3.689e-12, 3.718e-12,
4711  3.705e-12, 3.652e-12, 3.564e-12, 3.447e-12, 3.305e-12, 3.146e-12, 2.973e-12,
4712  2.790e-12, 2.600e-12, 2.400e-12, 2.189e-12, 1.963e-12, 1.722e-12, 1.473e-12,
4713  1.226e-12, 9.909e-13, 7.778e-13, 5.938e-13, 4.407e-13, 3.182e-13, 2.235e-13,
4714  1.522e-13, 9.812e-14, 5.676e-14, 2.415e-14, 1.683e-15, 1.434e-15, 1.238e-15,
4715  1.079e-15, 9.434e-16, 8.302e-16, 7.306e-16, 6.400e-16, 5.691e-16, 5.117e-16,
4716  4.626e-16, 4.166e-16, 3.743e-16, 3.411e-16, 3.132e-16, 2.891e-16, 2.664e-16,
4717  2.453e-16, 2.279e-16, 2.136e-16, 2.008e-16, 1.887e-16, 1.781e-16, 1.698e-16,
4718  1.623e-16, 1.562e-16, 1.509e-16, 1.472e-16, 1.434e-16, 1.419e-16, 1.411e-16,
4719  1.419e-16, 1.434e-16, 1.457e-16, 1.502e-16, 1.570e-16, 1.668e-16, 1.811e-16,
4720  1.985e-16, 2.181e-16, 2.415e-16, 2.664e-16, 2.966e-16, 3.313e-16, 3.675e-16,
4721  4.030e-16, 4.347e-16, 4.619e-16, 4.875e-16, 5.117e-16, 5.336e-16, 5.540e-16,
4722  5.706e-16, 5.849e-16, 5.977e-16, 6.113e-16, 1.061e-14, 2.170e-14, 3.323e-14,
4723  4.525e-14, 5.762e-14, 7.011e-14, 8.221e-14, 9.352e-14, 1.034e-13, 1.115e-13,
4724  1.176e-13, 1.216e-13, 1.234e-13, 1.229e-13, 1.206e-13, 1.170e-13, 1.127e-13,
4725  1.081e-13, 1.038e-13, 1.002e-13, 9.738e-14, 9.552e-14, 9.443e-14, 9.389e-14,
4726  9.366e-14, 9.377e-14, 9.433e-14, 9.567e-14, 9.768e-14, 1.005e-13, 1.046e-13,
4727  1.106e-13, 1.191e-13, 1.304e-13, 1.446e-13, 1.611e-13, 1.789e-13, 1.960e-13,
4728  2.106e-13, 2.203e-13, 2.255e-13, 2.263e-13, 2.231e-13, 2.165e-13, 2.068e-13,
4729  1.945e-13, 1.800e-13, 1.637e-13, 1.462e-13, 1.278e-13, 1.088e-13, 8.916e-14,
4730  6.893e-14, 4.796e-14, 2.634e-14, 4.974e-15, 8.151e-16, 8.302e-16, 8.453e-16,
4731  8.679e-16, 8.906e-16, 9.132e-16, 9.358e-16, 9.660e-16, 1.004e-15, 1.057e-15,
4732  1.125e-15, 1.200e-15, 1.291e-15, 1.389e-15, 6.595e-15, 2.605e-14, 4.954e-14,
4733  7.688e-14, 1.083e-13, 1.441e-13, 1.841e-13, 2.286e-13, 2.772e-13, 3.294e-13,
4734  3.845e-13, 4.415e-13, 4.993e-13, 5.575e-13, 6.175e-13, 6.813e-13, 7.524e-13,
4735  8.335e-13, 9.256e-13, 1.029e-12, 1.141e-12, 1.253e-12, 1.358e-12, 1.460e-12,
4736  1.561e-12, 1.663e-12, 1.770e-12, 1.884e-12, 2.005e-12, 2.136e-12, 2.276e-12,
4737  2.426e-12, 2.585e-12, 2.750e-12, 2.918e-12, 3.082e-12, 3.243e-12, 3.398e-12,
4738  3.558e-12, 3.735e-12, 3.947e-12, 4.208e-12, 4.525e-12, 4.897e-12, 5.316e-12,
4739  5.752e-12, 6.174e-12, 6.589e-12, 7.013e-12, 7.462e-12, 7.957e-12, 8.518e-12,
4740  9.167e-12, 9.929e-12, 1.082e-11, 1.187e-11, 1.309e-11, 1.449e-11, 1.607e-11,
4741  1.782e-11, 1.972e-11, 2.172e-11, 2.376e-11, 2.578e-11, 2.771e-11, 2.956e-11,
4742  3.140e-11, 3.336e-11, 3.556e-11, 3.809e-11, 4.093e-11, 4.398e-11, 4.703e-11,
4743  4.986e-11, 5.188e-11, 5.313e-11, 5.366e-11, 5.352e-11, 5.277e-11, 5.147e-11,
4744  4.970e-11, 4.753e-11, 4.503e-11, 4.228e-11, 3.936e-11, 3.631e-11, 3.316e-11,
4745  2.993e-11, 2.661e-11, 2.317e-11, 1.961e-11, 1.604e-11, 1.264e-11, 9.610e-12,
4746  7.158e-12, 5.460e-12, 4.584e-12, 4.502e-12, 5.024e-12, 5.734e-12, 6.605e-12,
4747  7.649e-12, 8.877e-12, 1.031e-11, 1.195e-11, 1.382e-11, 1.593e-11, 1.828e-11,
4748  2.090e-11, 2.377e-11, 2.691e-11, 3.027e-11, 3.380e-11, 3.740e-11, 4.095e-11,
4749  4.430e-11, 4.743e-11, 5.043e-11, 5.352e-11, 5.687e-11, 6.059e-11, 6.473e-11,
4750  6.903e-11, 7.342e-11, 7.661e-11, 7.866e-11, 7.963e-11, 7.959e-11, 7.862e-11,
4751  7.683e-11, 7.428e-11, 7.108e-11, 6.733e-11, 6.313e-11, 5.862e-11, 5.389e-11,
4752  4.904e-11, 4.412e-11, 3.915e-11, 3.410e-11, 2.889e-11, 2.350e-11, 1.814e-11,
4753  1.303e-11, 8.549e-12, 4.950e-12, 2.450e-12, 1.118e-12, 8.048e-13, 6.484e-13,
4754  5.257e-13, 4.281e-13, 3.496e-13, 2.858e-13, 2.334e-13, 1.900e-13, 1.538e-13,
4755  1.235e-13, 9.783e-14, 7.609e-14, 5.762e-14, 4.193e-14, 2.872e-14, 1.785e-14,
4756  9.478e-15, 6.702e-15, 6.045e-15, 5.502e-15, 5.034e-15, 4.611e-15, 4.219e-15,
4757  3.857e-15, 3.547e-15, 3.268e-15, 3.019e-15, 2.792e-15, 2.574e-15, 2.385e-15,
4758  2.219e-15, 2.060e-15, 1.917e-15, 1.781e-15, 1.660e-15, 1.555e-15, 1.457e-15,
4759  1.358e-15, 1.268e-15, 1.192e-15, 1.117e-15, 1.049e-15, 9.887e-16, 9.283e-16,
4760  8.755e-16, 8.226e-16, 7.774e-16, 7.343e-16, 6.928e-16, 6.551e-16, 6.204e-16,
4761  5.872e-16, 5.562e-16, 5.268e-16, 4.996e-16, 4.740e-16, 4.506e-16, 4.279e-16,
4762  4.060e-16, 3.864e-16, 3.675e-16, 3.502e-16, 3.336e-16, 3.177e-16, 3.026e-16,
4763  2.891e-16, 2.762e-16, 2.634e-16, 2.513e-16, 2.400e-16, 2.302e-16, 2.196e-16,
4764  2.106e-16, 2.015e-16, 1.925e-16, 1.849e-16, 1.766e-16, 1.698e-16, 1.623e-16,
4765  1.562e-16, 1.494e-16, 1.434e-16, 1.381e-16, 1.321e-16, 1.275e-16, 1.223e-16,
4766  1.177e-16, 1.132e-16, 1.087e-16, 1.049e-16, 1.004e-16, 9.660e-17, 9.358e-17,
4767  8.981e-17, 8.679e-17, 8.377e-17, 8.075e-17, 7.774e-17, 7.479e-17, 7.215e-17,
4768  6.966e-17, 6.725e-17, 6.491e-17, 6.264e-17, 6.053e-17, 5.849e-17, 5.653e-17,
4769  5.457e-17, 5.275e-17, 5.102e-17, 4.936e-17, 4.777e-17, 4.619e-17, 4.468e-17,
4770  4.325e-17, 4.189e-17, 4.053e-17, 3.925e-17, 3.804e-17, 3.683e-17, 3.570e-17,
4771  3.457e-17, 3.351e-17, 3.245e-17, 3.147e-17, 3.057e-17, 2.958e-17, 2.875e-17,
4772  2.785e-17, 2.702e-17, 2.626e-17, 2.551e-17, 2.475e-17, 2.400e-17, 2.332e-17,
4773  2.264e-17, 2.196e-17, 2.136e-17, 2.075e-17, 2.015e-17, 1.962e-17, 1.902e-17,
4774  1.849e-17, 1.804e-17, 1.751e-17, 1.706e-17, 1.660e-17, 1.615e-17, 1.570e-17,
4775  1.525e-17, 1.487e-17, 1.442e-17, 1.404e-17, 1.366e-17, 1.336e-17, 1.298e-17,
4776  1.260e-17, 1.230e-17, 1.200e-17, 1.170e-17, 1.140e-17, 1.109e-17, 1.079e-17,
4777  1.057e-17, 1.026e-17, 1.004e-17, 9.736e-18, 9.509e-18, 9.283e-18, 9.057e-18,
4778  8.830e-18, 8.604e-18, 8.377e-18, 8.226e-18, 8.000e-18, 7.774e-18, 7.623e-18,
4779  7.419e-18, 7.245e-18, 7.072e-18, 6.906e-18, 6.740e-18, 6.581e-18, 6.423e-18,
4780  6.279e-18, 6.128e-18, 5.985e-18, 5.849e-18, 5.713e-18, 5.585e-18, 5.457e-18,
4781  5.328e-18, 5.208e-18, 5.087e-18, 4.974e-18, 4.860e-18, 4.755e-18, 4.649e-18,
4782  4.543e-18, 4.445e-18, 4.347e-18, 4.249e-18, 4.158e-18, 4.068e-18, 3.977e-18,
4783  3.887e-18, 3.804e-18, 3.721e-18, 3.645e-18, 3.562e-18, 3.487e-18, 3.411e-18,
4784  3.343e-18, 3.268e-18, 3.200e-18, 3.132e-18, 3.072e-18, 3.004e-18, 2.943e-18,
4785  2.883e-18, 2.823e-18, 2.762e-18, 2.709e-18, 2.649e-18, 2.596e-18, 2.543e-18,
4786  2.491e-18, 2.445e-18, 2.392e-18, 2.347e-18, 2.302e-18, 2.257e-18, 2.211e-18,
4787  2.166e-18, 2.121e-18, 2.083e-18, 2.038e-18, 2.000e-18, 1.962e-18, 1.925e-18,
4788  1.887e-18, 1.849e-18, 1.811e-18, 1.781e-18, 1.743e-18, 1.713e-18, 1.683e-18,
4789  1.645e-18, 1.615e-18, 1.585e-18, 1.555e-18, 1.525e-18, 1.502e-18, 1.472e-18,
4790  1.442e-18, 1.419e-18, 1.389e-18, 1.366e-18, 1.343e-18, 1.321e-18, 1.291e-18,
4791  1.268e-18, 1.245e-18, 1.223e-18, 1.208e-18, 1.185e-18, 1.162e-18, 1.140e-18,
4792  1.125e-18, 1.102e-18, 1.087e-18, 1.064e-18, 1.049e-18, 1.026e-18, 1.011e-18,
4793  9.962e-19, 9.811e-19, 9.585e-19, 9.434e-19, 9.283e-19, 9.132e-19, 8.981e-19,
4794  8.830e-19, 8.679e-19, 8.604e-19, 8.453e-19, 8.302e-19, 8.151e-19, 8.075e-19,
4795  7.925e-19, 7.774e-19, 7.698e-19, 7.547e-19, 7.442e-19, 7.328e-19, 7.215e-19,
4796  7.109e-19, 7.011e-19, 6.906e-19, 6.808e-19, 6.709e-19, 6.611e-19, 6.521e-19,
4797  6.430e-19, 6.340e-19, 6.257e-19, 6.174e-19, 6.091e-19, 6.008e-19, 5.932e-19,
4798  5.857e-19, 5.781e-19, 5.706e-19, 5.638e-19, 5.570e-19, 5.502e-19, 5.442e-19,
4799  5.374e-19, 5.313e-19, 5.253e-19, 5.200e-19, 5.140e-19, 5.087e-19, 5.034e-19,
4800  4.981e-19, 4.936e-19, 4.891e-19, 4.845e-19, 4.800e-19, 4.755e-19, 4.717e-19,
4801  4.679e-19, 4.642e-19, 4.604e-19, 4.566e-19, 4.536e-19, 4.506e-19, 4.475e-19,
4802  4.445e-19, 4.423e-19, 4.400e-19, 4.370e-19, 4.355e-19, 4.332e-19, 4.317e-19,
4803  4.294e-19, 4.287e-19, 4.272e-19, 4.257e-19, 4.249e-19, 4.242e-19, 4.234e-19,
4804  4.234e-19, 4.226e-19, 4.226e-19, 4.226e-19, 4.234e-19, 4.234e-19, 4.242e-19,
4805  4.249e-19, 4.264e-19, 4.272e-19, 4.287e-19, 4.302e-19, 4.325e-19, 4.347e-19,
4806  4.370e-19, 4.392e-19, 4.423e-19, 4.453e-19, 4.483e-19, 4.521e-19, 4.558e-19,
4807  4.596e-19, 4.642e-19, 4.687e-19, 4.732e-19, 4.785e-19, 4.838e-19, 4.898e-19,
4808  4.958e-19, 5.026e-19, 5.094e-19, 5.162e-19, 5.238e-19, 5.313e-19, 5.396e-19,
4809  5.487e-19, 5.577e-19, 5.668e-19, 5.774e-19, 5.872e-19, 5.985e-19, 6.098e-19,
4810  6.219e-19, 6.347e-19, 6.475e-19, 6.611e-19, 6.755e-19, 6.906e-19, 7.064e-19,
4811  7.223e-19, 7.396e-19, 7.547e-19, 7.774e-19, 7.925e-19, 8.151e-19, 8.377e-19,
4812  8.604e-19, 8.830e-19, 9.057e-19, 9.283e-19, 9.585e-19, 9.887e-19, 1.011e-18,
4813  1.042e-18, 1.072e-18, 1.109e-18, 1.140e-18, 1.177e-18, 1.215e-18, 1.253e-18,
4814  1.298e-18, 1.343e-18, 1.389e-18, 1.434e-18, 1.479e-18, 1.532e-18, 1.592e-18,
4815  1.645e-18, 1.706e-18, 1.774e-18, 1.842e-18, 1.909e-18, 1.985e-18, 2.060e-18,
4816  2.143e-18, 2.226e-18, 2.325e-18, 2.423e-18, 2.521e-18, 2.634e-18, 2.747e-18,
4817  2.868e-18, 3.004e-18, 3.132e-18, 3.283e-18, 3.434e-18, 3.600e-18, 3.774e-18,
4818  3.955e-18, 4.151e-18, 4.362e-18, 4.589e-18, 4.823e-18, 5.072e-18, 5.343e-18,
4819  5.638e-18, 5.947e-18, 6.279e-18, 6.634e-18, 7.011e-18, 7.434e-18, 7.925e-18,
4820  8.377e-18, 8.906e-18, 9.434e-18, 1.004e-17, 1.072e-17, 1.147e-17, 1.223e-17,
4821  1.306e-17, 1.404e-17, 1.509e-17, 1.615e-17, 1.736e-17, 1.872e-17, 2.030e-17,
4822  2.204e-17, 2.377e-17, 2.581e-17, 2.815e-17, 3.094e-17, 3.389e-17, 3.706e-17,
4823  4.068e-17, 4.498e-17, 5.042e-17, 5.638e-17, 6.279e-17, 7.019e-17, 7.925e-17,
4824  9.132e-17, 1.049e-16, 1.208e-16, 1.389e-16, 1.592e-16, 1.811e-16, 2.060e-16,
4825  2.340e-16, 2.634e-16, 2.943e-16, 3.260e-16, 3.600e-16, 3.955e-16, 4.309e-16,
4826  1.103e-14, 2.506e-14, 4.104e-14, 5.874e-14, 7.793e-14, 9.821e-14, 1.190e-13,
4827  1.397e-13, 1.596e-13, 1.784e-13, 1.965e-13, 2.147e-13, 2.340e-13, 2.551e-13,
4828  2.783e-13, 3.032e-13, 3.282e-13, 3.517e-13, 3.712e-13, 3.839e-13, 3.902e-13,
4829  3.907e-13, 3.857e-13, 3.758e-13, 3.617e-13, 3.440e-13, 3.234e-13, 3.005e-13,
4830  2.758e-13, 2.500e-13, 2.232e-13, 1.957e-13, 1.672e-13, 1.376e-13, 1.068e-13,
4831  7.534e-14, 4.448e-14, 1.646e-14, 7.117e-16, 6.853e-16, 6.611e-16, 6.423e-16,
4832  6.242e-16, 6.060e-16, 5.925e-16, 5.887e-16, 6.008e-16, 6.279e-16, 6.679e-16,
4833  7.192e-16, 7.849e-16, 8.604e-16, 9.434e-16, 1.237e-14, 2.704e-14, 4.486e-14,
4834  6.621e-14, 9.162e-14, 1.215e-13, 1.567e-13, 1.979e-13, 2.458e-13, 3.012e-13,
4835  3.647e-13, 4.369e-13, 5.184e-13, 6.090e-13, 7.084e-13, 8.155e-13, 9.281e-13,
4836  1.044e-12, 1.160e-12, 1.272e-12, 1.377e-12, 1.480e-12, 1.584e-12, 1.698e-12,
4837  1.828e-12, 1.975e-12, 2.140e-12, 2.312e-12, 2.455e-12, 2.557e-12, 2.620e-12,
4838  2.647e-12, 2.640e-12, 2.602e-12, 2.536e-12, 2.446e-12, 2.334e-12, 2.206e-12,
4839  2.063e-12, 1.911e-12, 1.750e-12, 1.584e-12, 1.413e-12, 1.237e-12, 1.054e-12,
4840  8.642e-13, 6.704e-13, 4.821e-13, 3.093e-13, 1.651e-13, 5.853e-14, 2.657e-15,
4841  2.340e-15, 2.068e-15, 1.849e-15, 1.645e-15, 1.472e-15, 1.321e-15, 1.208e-15,
4842  1.132e-15, 1.094e-15, 1.079e-15, 4.198e-15, 1.473e-14, 2.792e-14, 4.378e-14,
4843  6.256e-14, 8.443e-14, 1.096e-13, 1.382e-13, 1.702e-13, 2.055e-13, 2.437e-13,
4844  2.843e-13, 3.262e-13, 3.682e-13, 4.090e-13, 4.477e-13, 4.847e-13, 5.220e-13,
4845  5.617e-13, 6.059e-13, 6.555e-13, 7.100e-13, 7.681e-13, 8.206e-13, 8.615e-13,
4846  8.884e-13, 9.020e-13, 9.031e-13, 8.928e-13, 8.720e-13, 8.425e-13, 8.051e-13,
4847  7.613e-13, 7.123e-13, 6.594e-13, 6.037e-13, 5.458e-13, 4.862e-13, 4.248e-13,
4848  3.610e-13, 2.945e-13, 2.263e-13, 1.588e-13, 9.623e-14, 4.206e-14, 1.162e-15,
4849  1.064e-15, 9.509e-16, 8.226e-16, 6.913e-16, 5.683e-16, 4.687e-16, 3.955e-16,
4850  3.404e-16, 2.974e-16, 2.619e-16, 2.287e-16, 1.985e-16, 1.758e-16, 1.570e-16,
4851  1.419e-16, 1.268e-16, 1.132e-16, 1.019e-16, 9.283e-17, 8.453e-17, 7.698e-17,
4852  6.966e-17, 6.362e-17, 5.842e-17, 5.381e-17, 4.943e-17, 4.536e-17, 4.189e-17,
4853  3.879e-17, 3.600e-17, 3.336e-17, 3.087e-17, 2.875e-17, 2.679e-17, 2.506e-17,
4854  2.332e-17, 2.181e-17, 2.038e-17, 1.909e-17, 1.796e-17, 1.683e-17, 1.585e-17,
4855  1.487e-17, 1.404e-17, 1.321e-17, 1.245e-17, 1.177e-17, 1.109e-17, 1.049e-17,
4856  9.962e-18, 9.434e-18, 8.906e-18, 8.453e-18, 8.000e-18, 7.623e-18, 7.238e-18,
4857  6.875e-18, 6.543e-18, 6.226e-18, 5.932e-18, 5.653e-18, 5.381e-18, 5.132e-18,
4858  4.898e-18, 4.679e-18, 4.468e-18, 4.272e-18, 4.083e-18, 3.902e-18, 3.736e-18,
4859  3.577e-18, 3.426e-18, 3.283e-18, 3.147e-18, 3.019e-18, 2.891e-18, 2.777e-18,
4860  2.664e-18, 2.558e-18, 2.460e-18, 2.362e-18, 2.272e-18, 2.181e-18, 2.098e-18,
4861  2.023e-18, 1.947e-18, 1.872e-18, 1.804e-18, 1.736e-18, 1.675e-18, 1.615e-18,
4862  1.555e-18, 1.502e-18, 1.449e-18, 1.396e-18, 1.351e-18, 1.298e-18, 1.253e-18,
4863  1.215e-18, 1.170e-18, 1.132e-18, 1.094e-18, 1.057e-18, 1.026e-18, 9.887e-19,
4864  9.585e-19, 9.283e-19, 8.981e-19, 8.679e-19, 8.377e-19, 8.151e-19, 7.849e-19,
4865  7.623e-19, 7.396e-19, 7.162e-19, 6.943e-19, 6.732e-19, 6.528e-19, 6.332e-19,
4866  6.143e-19, 5.955e-19, 5.781e-19, 5.608e-19, 5.442e-19, 5.283e-19, 5.132e-19,
4867  4.981e-19, 4.838e-19, 4.702e-19, 4.566e-19, 4.438e-19, 4.309e-19, 4.189e-19,
4868  4.075e-19, 3.962e-19, 3.849e-19, 3.743e-19, 3.645e-19, 3.547e-19, 3.449e-19,
4869  3.358e-19, 3.268e-19, 3.177e-19, 3.094e-19, 3.011e-19, 2.936e-19, 2.853e-19,
4870  2.785e-19, 2.709e-19, 2.642e-19, 2.574e-19, 2.506e-19, 2.438e-19, 2.377e-19,
4871  2.317e-19, 2.257e-19, 2.204e-19, 2.151e-19, 2.098e-19, 2.045e-19, 1.992e-19,
4872  1.970e-19, 1.970e-19, 1.962e-19, 1.902e-19, 1.887e-19};
4873 
4874 // CKD_MT 1.00 implementation of N2-N2 model of
4875 // Borysow, A, and L. Frommhold,
4876 // "Collision-induced rototranslational absorption spectra of N2-N2
4877 // pairs for temperatures from 50 to 300 K", The
4878 // Astrophysical Journal, 311, 1043-1057, 1986.
4879 // absorption coefficient in units of [cm^-1 Amagat^-2]
4880 // these data are for T=296K
4886  0.0000e0, 0.4303E-06, 0.4850E-06, 0.4979E-06, 0.4850E-06, 0.4303E-06,
4887  0.3715E-06, 0.3292E-06, 0.3086E-06, 0.2920E-06, 0.2813E-06, 0.2804E-06,
4888  0.2738E-06, 0.2726E-06, 0.2724E-06, 0.2635E-06, 0.2621E-06, 0.2547E-06,
4889  0.2428E-06, 0.2371E-06, 0.2228E-06, 0.2100E-06, 0.1991E-06, 0.1822E-06,
4890  0.1697E-06, 0.1555E-06, 0.1398E-06, 0.1281E-06, 0.1138E-06, 0.1012E-06,
4891  0.9078E-07, 0.7879E-07, 0.6944E-07, 0.6084E-07, 0.5207E-07, 0.4540E-07,
4892  0.3897E-07, 0.3313E-07, 0.2852E-07, 0.2413E-07, 0.2045E-07, 0.1737E-07,
4893  0.1458E-07, 0.1231E-07, 0.1031E-07, 0.8586E-08, 0.7162E-08, 0.5963E-08,
4894  0.4999E-08, 0.4226E-08, 0.3607E-08, 0.3090E-08, 0.2669E-08, 0.2325E-08,
4895  0.2024E-08, 0.1783E-08, 0.1574E-08, 0.1387E-08, 0.1236E-08, 0.1098E-08,
4896  0.9777E-09, 0.8765E-09, 0.7833E-09, 0.7022E-09, 0.6317E-09, 0.5650E-09,
4897  0.5100E-09, 0.4572E-09, 0.4115E-09, 0.3721E-09, 0.3339E-09, 0.3005E-09,
4898  0.2715E-09, 0.2428E-09};
4899 
4901  {0.0e0, 1.3534, 1.3517, 1.3508, 1.3517, 1.3534, 1.3558, 1.3584, 1.3607,
4902  1.3623, 1.3632, 1.3634, 1.3632, 1.3627, 1.3620, 1.3612, 1.3605, 1.3597,
4903  1.3590, 1.3585, 1.3582, 1.3579, 1.3577, 1.3577, 1.3580, 1.3586, 1.3594,
4904  1.3604, 1.3617, 1.3633, 1.3653, 1.3677, 1.3706, 1.3742, 1.3780, 1.3822,
4905  1.3868, 1.3923, 1.3989, 1.4062, 1.4138, 1.4216, 1.4298, 1.4388, 1.4491,
4906  1.4604, 1.4718, 1.4829, 1.4930, 1.5028, 1.5138, 1.5265, 1.5392, 1.5499,
4907  1.5577, 1.5639, 1.5714, 1.5816, 1.5920, 1.6003, 1.6051, 1.6072, 1.6097,
4908  1.6157, 1.6157, 1.6157, 1.6157, 1.6157, 1.6157, 1.6157, 1.6157, 1.6157,
4909  1.6157, 1.6157};
4910 
4911 // CKD_MT 1.00 implementation of N2-N2 model of
4912 // Borysow, A, and L. Frommhold,
4913 // "Collision-induced rototranslational absorption spectra of N2-N2
4914 // pairs for temperatures from 50 to 300 K", The
4915 // Astrophysical Journal, 311, 1043-1057, 1986.
4916 // absorption coefficient in units of [cm^-1 Amagat^-2]
4917 // these data are for T=220K
4923  0.0000e0, 0.4946E-06, 0.5756E-06, 0.5964E-06, 0.5756E-06, 0.4946E-06,
4924  0.4145E-06, 0.3641E-06, 0.3482E-06, 0.3340E-06, 0.3252E-06, 0.3299E-06,
4925  0.3206E-06, 0.3184E-06, 0.3167E-06, 0.2994E-06, 0.2943E-06, 0.2794E-06,
4926  0.2582E-06, 0.2468E-06, 0.2237E-06, 0.2038E-06, 0.1873E-06, 0.1641E-06,
4927  0.1474E-06, 0.1297E-06, 0.1114E-06, 0.9813E-07, 0.8309E-07, 0.7059E-07,
4928  0.6068E-07, 0.5008E-07, 0.4221E-07, 0.3537E-07, 0.2885E-07, 0.2407E-07,
4929  0.1977E-07, 0.1605E-07, 0.1313E-07, 0.1057E-07, 0.8482E-08, 0.6844E-08,
4930  0.5595E-08, 0.4616E-08, 0.3854E-08, 0.3257E-08, 0.2757E-08, 0.2372E-08,
4931  0.2039E-08, 0.1767E-08, 0.1548E-08, 0.1346E-08, 0.1181E-08, 0.1043E-08,
4932  0.9110E-09, 0.8103E-09, 0.7189E-09, 0.6314E-09, 0.5635E-09, 0.4976E-09,
4933  0.4401E-09, 0.3926E-09, 0.3477E-09, 0.3085E-09, 0.2745E-09, 0.2416E-09,
4934  0.2155E-09, 0.1895E-09, 0.1678E-09, 0.1493E-09, 0.1310E-09, 0.1154E-09,
4935  0.1019E-09, 0.8855E-10};
4936 
4938  {0.0e0, 1.3536, 1.3515, 1.3502, 1.3515, 1.3536, 1.3565, 1.3592, 1.3612,
4939  1.3623, 1.3626, 1.3623, 1.3616, 1.3609, 1.3600, 1.3591, 1.3583, 1.3576,
4940  1.3571, 1.3571, 1.3572, 1.3574, 1.3578, 1.3585, 1.3597, 1.3616, 1.3640,
4941  1.3666, 1.3698, 1.3734, 1.3776, 1.3828, 1.3894, 1.3969, 1.4049, 1.4127,
4942  1.4204, 1.4302, 1.4427, 1.4562, 1.4687, 1.4798, 1.4894, 1.5000, 1.5142,
4943  1.5299, 1.5441, 1.5555, 1.5615, 1.5645, 1.5730, 1.5880, 1.6028, 1.6121,
4944  1.6133, 1.6094, 1.6117, 1.6244, 1.6389, 1.6485, 1.6513, 1.6468, 1.6438,
4945  1.6523, 1.6523, 1.6523, 1.6523, 1.6523, 1.6523, 1.6523, 1.6523, 1.6523,
4946  1.6523, 1.6523};
4947 
4948 // CKD_MT 1.00 implementation of N2-N2 model of
4949 // Lafferty, W.J., A.M. Solodov,A. Weber, W.B. Olson and J._M. Hartmann,
4950 // Infrared collision-induced absorption by N2 near 4.3 microns for
4951 // atmospheric applications: measurements and emprirical modeling,
4952 // Appl. Optics, 35, 5911-5917, (1996).
4956 const int N2N2_N2F_ckd_mt_100_npt = 118;
4958  0.000E+00, 0.000E+00, 2.000E-10, 5.200E-09, 1.020E-08, 1.520E-08,
4959  2.020E-08, 2.520E-08, 3.020E-08, 4.450E-08, 5.220E-08, 6.460E-08,
4960  7.750E-08, 9.030E-08, 1.060E-07, 1.210E-07, 1.370E-07, 1.570E-07,
4961  1.750E-07, 2.010E-07, 2.300E-07, 2.590E-07, 2.950E-07, 3.260E-07,
4962  3.660E-07, 4.050E-07, 4.470E-07, 4.920E-07, 5.340E-07, 5.840E-07,
4963  6.240E-07, 6.670E-07, 7.140E-07, 7.260E-07, 7.540E-07, 7.840E-07,
4964  8.090E-07, 8.420E-07, 8.620E-07, 8.870E-07, 9.110E-07, 9.360E-07,
4965  9.760E-07, 1.030E-06, 1.110E-06, 1.230E-06, 1.390E-06, 1.610E-06,
4966  1.760E-06, 1.940E-06, 1.970E-06, 1.870E-06, 1.750E-06, 1.560E-06,
4967  1.420E-06, 1.350E-06, 1.320E-06, 1.290E-06, 1.290E-06, 1.290E-06,
4968  1.300E-06, 1.320E-06, 1.330E-06, 1.340E-06, 1.350E-06, 1.330E-06,
4969  1.310E-06, 1.290E-06, 1.240E-06, 1.200E-06, 1.160E-06, 1.100E-06,
4970  1.040E-06, 9.960E-07, 9.380E-07, 8.630E-07, 7.980E-07, 7.260E-07,
4971  6.550E-07, 5.940E-07, 5.350E-07, 4.740E-07, 4.240E-07, 3.770E-07,
4972  3.330E-07, 2.960E-07, 2.630E-07, 2.340E-07, 2.080E-07, 1.850E-07,
4973  1.670E-07, 1.470E-07, 1.320E-07, 1.200E-07, 1.090E-07, 9.850E-08,
4974  9.080E-08, 8.180E-08, 7.560E-08, 6.850E-08, 6.140E-08, 5.830E-08,
4975  5.770E-08, 5.000E-08, 4.320E-08, 3.140E-08, 2.890E-08, 2.640E-08,
4976  2.390E-08, 2.140E-08, 1.890E-08, 1.640E-08, 1.390E-08, 1.140E-08,
4977  8.900E-09, 6.400E-09, 3.900E-09, 1.400E-09, 0.000E+00};
4978 
4979 // temperature coefficients:
4981  0.000E+00, 1.040E+03, 1.010E+03, 9.800E+02, 9.500E+02, 9.200E+02,
4982  8.900E+02, 8.600E+02, 8.300E+02, 8.020E+02, 7.610E+02, 7.220E+02,
4983  6.790E+02, 6.460E+02, 6.090E+02, 5.620E+02, 5.110E+02, 4.720E+02,
4984  4.360E+02, 4.060E+02, 3.770E+02, 3.550E+02, 3.380E+02, 3.190E+02,
4985  2.990E+02, 2.780E+02, 2.550E+02, 2.330E+02, 2.080E+02, 1.840E+02,
4986  1.490E+02, 1.070E+02, 6.600E+01, 2.500E+01, -1.300E+01, -4.900E+01,
4987  -8.200E+01, -1.040E+02, -1.190E+02, -1.300E+02, -1.390E+02, -1.440E+02,
4988  -1.460E+02, -1.460E+02, -1.470E+02, -1.480E+02, -1.500E+02, -1.530E+02,
4989  -1.600E+02, -1.690E+02, -1.810E+02, -1.890E+02, -1.950E+02, -2.000E+02,
4990  -2.050E+02, -2.090E+02, -2.110E+02, -2.100E+02, -2.100E+02, -2.090E+02,
4991  -2.050E+02, -1.990E+02, -1.900E+02, -1.800E+02, -1.680E+02, -1.570E+02,
4992  -1.430E+02, -1.260E+02, -1.080E+02, -8.900E+01, -6.300E+01, -3.200E+01,
4993  1.000E+00, 3.500E+01, 6.500E+01, 9.500E+01, 1.210E+02, 1.410E+02,
4994  1.520E+02, 1.610E+02, 1.640E+02, 1.640E+02, 1.610E+02, 1.550E+02,
4995  1.480E+02, 1.430E+02, 1.370E+02, 1.330E+02, 1.310E+02, 1.330E+02,
4996  1.390E+02, 1.500E+02, 1.650E+02, 1.870E+02, 2.130E+02, 2.480E+02,
4997  2.840E+02, 3.210E+02, 3.720E+02, 4.490E+02, 5.140E+02, 5.690E+02,
4998  6.090E+02, 6.420E+02, 6.730E+02, 7.000E+02, 7.300E+02, 7.600E+02,
4999  7.900E+02, 8.200E+02, 8.500E+02, 8.800E+02, 9.100E+02, 9.400E+02,
5000  9.700E+02, 1.000E+03, 1.030E+03, 1.060E+03, 1.090E+03};
5001 
5002 // CKD_MT 2.50 implementation of N2-N2 model of
5003 // Lafferty, W.J., A.M. Solodov,A. Weber, W.B. Olson and J._M. Hartmann,
5004 // Infrared collision-induced absorption by N2 near 4.3 microns for
5005 // atmospheric applications: measurements and emprirical modeling,
5006 // Appl. Optics, 35, 5911-5917, (1996).
5007 const Numeric N2N2_N2F_ckd_mt_250_v1 = 2001.766357;
5009 const Numeric N2N2_N2F_ckd_mt_250_dv = 3.981461525;
5010 const int N2N2_N2F_ckd_mt_250_npt = 179;
5012  0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00,
5013  0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00,
5014  9.280E-11, 3.660E-10, 8.130E-10, 1.430E-09, 2.230E-09, 3.210E-09, 4.370E-09,
5015  5.750E-09, 7.340E-09, 9.190E-09, 1.130E-08, 1.370E-08, 1.650E-08, 1.960E-08,
5016  2.310E-08, 2.710E-08, 3.160E-08, 3.660E-08, 4.230E-08, 4.860E-08, 5.570E-08,
5017  6.350E-08, 7.230E-08, 8.200E-08, 9.270E-08, 1.050E-07, 1.180E-07, 1.320E-07,
5018  1.480E-07, 1.650E-07, 1.840E-07, 2.040E-07, 2.270E-07, 2.510E-07, 2.770E-07,
5019  3.060E-07, 3.360E-07, 3.670E-07, 4.010E-07, 4.330E-07, 4.710E-07, 5.050E-07,
5020  5.450E-07, 5.790E-07, 6.200E-07, 6.540E-07, 6.940E-07, 7.240E-07, 7.610E-07,
5021  7.880E-07, 8.220E-07, 8.440E-07, 8.720E-07, 8.930E-07, 9.190E-07, 9.370E-07,
5022  9.620E-07, 9.870E-07, 1.020E-06, 1.060E-06, 1.110E-06, 1.180E-06, 1.280E-06,
5023  1.400E-06, 1.570E-06, 1.750E-06, 1.880E-06, 2.020E-06, 2.080E-06, 2.060E-06,
5024  1.960E-06, 1.860E-06, 1.710E-06, 1.570E-06, 1.490E-06, 1.440E-06, 1.410E-06,
5025  1.390E-06, 1.380E-06, 1.380E-06, 1.390E-06, 1.390E-06, 1.410E-06, 1.420E-06,
5026  1.430E-06, 1.420E-06, 1.430E-06, 1.410E-06, 1.400E-06, 1.370E-06, 1.350E-06,
5027  1.310E-06, 1.270E-06, 1.220E-06, 1.170E-06, 1.120E-06, 1.060E-06, 1.010E-06,
5028  9.470E-07, 8.910E-07, 8.290E-07, 7.740E-07, 7.160E-07, 6.620E-07, 6.090E-07,
5029  5.600E-07, 5.130E-07, 4.680E-07, 4.290E-07, 3.900E-07, 3.560E-07, 3.240E-07,
5030  2.950E-07, 2.680E-07, 2.440E-07, 2.230E-07, 2.030E-07, 1.850E-07, 1.690E-07,
5031  1.540E-07, 1.410E-07, 1.290E-07, 1.180E-07, 1.080E-07, 9.950E-08, 9.100E-08,
5032  8.380E-08, 7.700E-08, 7.100E-08, 6.510E-08, 6.010E-08, 5.550E-08, 5.110E-08,
5033  4.710E-08, 4.340E-08, 3.980E-08, 3.660E-08, 3.380E-08, 3.110E-08, 2.840E-08,
5034  2.610E-08, 2.390E-08, 2.210E-08, 2.010E-08, 1.830E-08, 1.710E-08, 1.550E-08,
5035  1.450E-08, 1.320E-08, 1.250E-08, 1.140E-08, 1.070E-08, 1.000E-08, 8.100E-09,
5036  6.400E-09, 4.900E-09, 3.600E-09, 2.500E-09, 1.600E-09, 9.000E-10, 4.000E-10,
5037  1.000E-10, 0.000E+00, 0.000E+00, 0.000E+00};
5038 
5039 // temperature coefficients:
5041  0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00,
5042  0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00,
5043  1.880E-10, 7.160E-10, 1.530E-09, 2.580E-09, 3.840E-09, 5.270E-09, 6.850E-09,
5044  8.550E-09, 1.040E-08, 1.230E-08, 1.440E-08, 1.650E-08, 1.880E-08, 2.130E-08,
5045  2.400E-08, 2.690E-08, 3.010E-08, 3.360E-08, 3.750E-08, 4.180E-08, 4.670E-08,
5046  5.210E-08, 5.830E-08, 6.520E-08, 7.290E-08, 8.170E-08, 9.150E-08, 1.030E-07,
5047  1.150E-07, 1.290E-07, 1.440E-07, 1.610E-07, 1.800E-07, 2.020E-07, 2.250E-07,
5048  2.510E-07, 2.790E-07, 3.090E-07, 3.430E-07, 3.770E-07, 4.160E-07, 4.540E-07,
5049  4.990E-07, 5.370E-07, 5.850E-07, 6.250E-07, 6.750E-07, 7.130E-07, 7.610E-07,
5050  7.970E-07, 8.410E-07, 8.720E-07, 9.100E-07, 9.380E-07, 9.720E-07, 9.940E-07,
5051  1.020E-06, 1.050E-06, 1.080E-06, 1.120E-06, 1.170E-06, 1.240E-06, 1.340E-06,
5052  1.470E-06, 1.660E-06, 1.870E-06, 2.040E-06, 2.220E-06, 2.300E-06, 2.290E-06,
5053  2.160E-06, 2.050E-06, 1.870E-06, 1.710E-06, 1.620E-06, 1.580E-06, 1.550E-06,
5054  1.540E-06, 1.540E-06, 1.550E-06, 1.560E-06, 1.570E-06, 1.590E-06, 1.590E-06,
5055  1.600E-06, 1.580E-06, 1.570E-06, 1.540E-06, 1.510E-06, 1.470E-06, 1.430E-06,
5056  1.370E-06, 1.310E-06, 1.250E-06, 1.180E-06, 1.110E-06, 1.040E-06, 9.740E-07,
5057  9.020E-07, 8.360E-07, 7.650E-07, 7.050E-07, 6.430E-07, 5.860E-07, 5.320E-07,
5058  4.820E-07, 4.370E-07, 3.950E-07, 3.570E-07, 3.220E-07, 2.910E-07, 2.630E-07,
5059  2.390E-07, 2.160E-07, 1.960E-07, 1.780E-07, 1.620E-07, 1.480E-07, 1.330E-07,
5060  1.220E-07, 1.120E-07, 1.020E-07, 9.280E-08, 8.420E-08, 7.700E-08, 6.990E-08,
5061  6.390E-08, 5.880E-08, 5.380E-08, 4.840E-08, 4.380E-08, 4.020E-08, 3.690E-08,
5062  3.290E-08, 3.050E-08, 2.720E-08, 2.490E-08, 2.260E-08, 2.020E-08, 1.810E-08,
5063  1.620E-08, 1.500E-08, 1.310E-08, 1.100E-08, 1.020E-08, 8.730E-09, 8.190E-09,
5064  6.630E-09, 5.960E-09, 5.110E-09, 4.500E-09, 3.810E-09, 2.680E-09, 3.050E-09,
5065  2.480E-09, 1.370E-09, 1.550E-09, 4.690E-10, 5.120E-10, 0.000E+00, 0.000E+00,
5066  0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00};
5067 
5068 // CKD_MT 1.00 implementation of oxygen collision induced fundamental model of
5069 // F. Thibault, V. Menoux, R. Le Doucen, L. Rosenman,
5070 // J.-M. Hartmann, Ch. Boulet,
5071 // "Infrared collision-induced absorption by O2 near 6.4 microns for
5072 // atmospheric applications: measurements and emprirical modeling",
5073 // Appl. Optics, 35, 5911-5917, (1996).
5077 const int O2O2_O2F_ckd_mt_100_npt = 103;
5079  0.000E+00, 0.000E+00, 9.744E-09, 2.256E-08, 3.538E-08, 4.820E-08, 6.100E-08,
5080  7.400E-08, 8.400E-08, 9.600E-08, 1.200E-07, 1.620E-07, 2.080E-07, 2.460E-07,
5081  2.850E-07, 3.140E-07, 3.800E-07, 4.440E-07, 5.000E-07, 5.710E-07, 6.730E-07,
5082  7.680E-07, 8.530E-07, 9.660E-07, 1.100E-06, 1.210E-06, 1.330E-06, 1.470E-06,
5083  1.590E-06, 1.690E-06, 1.800E-06, 1.920E-06, 2.040E-06, 2.150E-06, 2.260E-06,
5084  2.370E-06, 2.510E-06, 2.670E-06, 2.850E-06, 3.070E-06, 3.420E-06, 3.830E-06,
5085  4.200E-06, 4.450E-06, 4.600E-06, 4.530E-06, 4.280E-06, 3.960E-06, 3.680E-06,
5086  3.480E-06, 3.350E-06, 3.290E-06, 3.250E-06, 3.230E-06, 3.230E-06, 3.210E-06,
5087  3.190E-06, 3.110E-06, 3.030E-06, 2.910E-06, 2.800E-06, 2.650E-06, 2.510E-06,
5088  2.320E-06, 2.130E-06, 1.930E-06, 1.760E-06, 1.590E-06, 1.420E-06, 1.250E-06,
5089  1.110E-06, 9.900E-07, 8.880E-07, 7.910E-07, 6.780E-07, 5.870E-07, 5.240E-07,
5090  4.640E-07, 4.030E-07, 3.570E-07, 3.200E-07, 2.900E-07, 2.670E-07, 2.420E-07,
5091  2.150E-07, 1.820E-07, 1.600E-07, 1.460E-07, 1.280E-07, 1.030E-07, 8.700E-08,
5092  8.100E-08, 7.100E-08, 6.400E-08, 5.807E-08, 5.139E-08, 4.496E-08, 3.854E-08,
5093  3.212E-08, 2.569E-08, 1.927E-08, 1.285E-08, 6.423E-09, 0.000E+00};
5094 
5096  0.000E+00, 4.000E+02, 4.000E+02, 4.000E+02, 4.000E+02, 4.000E+02,
5097  4.670E+02, 4.000E+02, 3.150E+02, 3.790E+02, 3.680E+02, 4.750E+02,
5098  5.210E+02, 5.310E+02, 5.120E+02, 4.420E+02, 4.440E+02, 4.300E+02,
5099  3.810E+02, 3.350E+02, 3.240E+02, 2.960E+02, 2.480E+02, 2.150E+02,
5100  1.930E+02, 1.580E+02, 1.270E+02, 1.010E+02, 7.100E+01, 3.100E+01,
5101  -6.000E+00, -2.600E+01, -4.700E+01, -6.300E+01, -7.900E+01, -8.800E+01,
5102  -8.800E+01, -8.700E+01, -9.000E+01, -9.800E+01, -9.900E+01, -1.090E+02,
5103  -1.340E+02, -1.600E+02, -1.670E+02, -1.640E+02, -1.580E+02, -1.530E+02,
5104  -1.510E+02, -1.560E+02, -1.660E+02, -1.680E+02, -1.730E+02, -1.700E+02,
5105  -1.610E+02, -1.450E+02, -1.260E+02, -1.080E+02, -8.400E+01, -5.900E+01,
5106  -2.900E+01, 4.000E+00, 4.100E+01, 7.300E+01, 9.700E+01, 1.230E+02,
5107  1.590E+02, 1.980E+02, 2.200E+02, 2.420E+02, 2.560E+02, 2.810E+02,
5108  3.110E+02, 3.340E+02, 3.190E+02, 3.130E+02, 3.210E+02, 3.230E+02,
5109  3.100E+02, 3.150E+02, 3.200E+02, 3.350E+02, 3.610E+02, 3.780E+02,
5110  3.730E+02, 3.380E+02, 3.190E+02, 3.460E+02, 3.220E+02, 2.910E+02,
5111  2.900E+02, 3.500E+02, 3.710E+02, 5.040E+02, 4.000E+02, 4.000E+02,
5112  4.000E+02, 4.000E+02, 4.000E+02, 4.000E+02, 4.000E+02, 4.000E+02,
5113  4.000E+02, 4.000E+02};
5114 
5115 // CKD_MT 1.00 implementation of oxygen v0<-v0 band model of
5116 // Mate et al. over the spectral region 7550-8486 cm-1:
5117 // B. Mate, C. Lugez, G.T. Fraser, W.J. Lafferty,
5118 // "Absolute Intensities for the O2 1.27 micron
5119 // continuum absorption",
5120 // J. Geophys. Res., 104, 30,585-30,590, 1999.
5121 //
5122 // The units of these continua coefficients are 1 / (amagat_O2*amagat_air)
5123 //
5124 // Also, refer to the paper "Observed Atmospheric
5125 // Collision Induced Absorption in Near Infrared Oxygen Bands",
5126 // Mlawer, Clough, Brown, Stephen, Landry, Goldman, & Murcray,
5127 // Journal of Geophysical Research (1998).
5128 //
5129 // (comment: v0<--v0 band around 7536 to 8500 cm-1 (1.27mu))
5130 const Numeric O2_00_ckd_mt_100_v1 = 7536.000e0;
5131 const Numeric O2_00_ckd_mt_100_v2 = 8500.000e0;
5133 const int O2_00_ckd_mt_100_npt = 483;
5135  0.000E+00, 0.000E+00, 4.355E-11, 8.709E-11, 1.742E-10, 3.484E-10, 6.968E-10,
5136  1.394E-09, 2.787E-09, 3.561E-09, 3.314E-09, 3.368E-09, 3.435E-09, 2.855E-09,
5137  3.244E-09, 3.447E-09, 3.891E-09, 4.355E-09, 3.709E-09, 4.265E-09, 4.772E-09,
5138  4.541E-09, 4.557E-09, 4.915E-09, 4.688E-09, 5.282E-09, 5.755E-09, 5.096E-09,
5139  5.027E-09, 4.860E-09, 4.724E-09, 5.048E-09, 5.248E-09, 5.473E-09, 4.852E-09,
5140  5.362E-09, 6.157E-09, 6.150E-09, 6.347E-09, 6.388E-09, 6.213E-09, 6.521E-09,
5141  8.470E-09, 8.236E-09, 8.269E-09, 8.776E-09, 9.122E-09, 9.189E-09, 9.778E-09,
5142  8.433E-09, 9.964E-09, 9.827E-09, 1.064E-08, 1.063E-08, 1.031E-08, 1.098E-08,
5143  1.156E-08, 1.295E-08, 1.326E-08, 1.467E-08, 1.427E-08, 1.452E-08, 1.456E-08,
5144  1.554E-08, 1.605E-08, 1.659E-08, 1.754E-08, 1.757E-08, 1.876E-08, 1.903E-08,
5145  1.876E-08, 1.869E-08, 2.036E-08, 2.203E-08, 2.221E-08, 2.284E-08, 2.288E-08,
5146  2.394E-08, 2.509E-08, 2.663E-08, 2.720E-08, 2.839E-08, 2.923E-08, 2.893E-08,
5147  2.949E-08, 2.962E-08, 3.057E-08, 3.056E-08, 3.364E-08, 3.563E-08, 3.743E-08,
5148  3.813E-08, 3.946E-08, 4.082E-08, 4.201E-08, 4.297E-08, 4.528E-08, 4.587E-08,
5149  4.704E-08, 4.962E-08, 5.115E-08, 5.341E-08, 5.365E-08, 5.557E-08, 5.891E-08,
5150  6.084E-08, 6.270E-08, 6.448E-08, 6.622E-08, 6.939E-08, 7.233E-08, 7.498E-08,
5151  7.749E-08, 8.027E-08, 8.387E-08, 8.605E-08, 8.888E-08, 9.277E-08, 9.523E-08,
5152  9.880E-08, 1.037E-07, 1.076E-07, 1.114E-07, 1.151E-07, 1.203E-07, 1.246E-07,
5153  1.285E-07, 1.345E-07, 1.408E-07, 1.465E-07, 1.519E-07, 1.578E-07, 1.628E-07,
5154  1.685E-07, 1.760E-07, 1.847E-07, 1.929E-07, 2.002E-07, 2.070E-07, 2.177E-07,
5155  2.262E-07, 2.365E-07, 2.482E-07, 2.587E-07, 2.655E-07, 2.789E-07, 2.925E-07,
5156  3.023E-07, 3.153E-07, 3.296E-07, 3.409E-07, 3.532E-07, 3.680E-07, 3.859E-07,
5157  3.951E-07, 4.074E-07, 4.210E-07, 4.381E-07, 4.588E-07, 4.792E-07, 4.958E-07,
5158  5.104E-07, 5.271E-07, 5.501E-07, 5.674E-07, 5.913E-07, 6.243E-07, 6.471E-07,
5159  6.622E-07, 6.831E-07, 6.987E-07, 7.159E-07, 7.412E-07, 7.698E-07, 7.599E-07,
5160  7.600E-07, 7.918E-07, 8.026E-07, 8.051E-07, 8.049E-07, 7.914E-07, 7.968E-07,
5161  7.945E-07, 7.861E-07, 7.864E-07, 7.741E-07, 7.675E-07, 7.592E-07, 7.400E-07,
5162  7.362E-07, 7.285E-07, 7.173E-07, 6.966E-07, 6.744E-07, 6.597E-07, 6.413E-07,
5163  6.265E-07, 6.110E-07, 5.929E-07, 5.717E-07, 5.592E-07, 5.411E-07, 5.235E-07,
5164  5.061E-07, 4.845E-07, 4.732E-07, 4.593E-07, 4.467E-07, 4.328E-07, 4.161E-07,
5165  4.035E-07, 3.922E-07, 3.820E-07, 3.707E-07, 3.585E-07, 3.475E-07, 3.407E-07,
5166  3.317E-07, 3.226E-07, 3.134E-07, 3.016E-07, 2.969E-07, 2.894E-07, 2.814E-07,
5167  2.749E-07, 2.657E-07, 2.610E-07, 2.536E-07, 2.467E-07, 2.394E-07, 2.337E-07,
5168  2.302E-07, 2.241E-07, 2.191E-07, 2.140E-07, 2.093E-07, 2.052E-07, 1.998E-07,
5169  1.963E-07, 1.920E-07, 1.862E-07, 1.834E-07, 1.795E-07, 1.745E-07, 1.723E-07,
5170  1.686E-07, 1.658E-07, 1.629E-07, 1.595E-07, 1.558E-07, 1.523E-07, 1.498E-07,
5171  1.466E-07, 1.452E-07, 1.431E-07, 1.408E-07, 1.381E-07, 1.362E-07, 1.320E-07,
5172  1.298E-07, 1.262E-07, 1.247E-07, 1.234E-07, 1.221E-07, 1.197E-07, 1.176E-07,
5173  1.142E-07, 1.121E-07, 1.099E-07, 1.081E-07, 1.073E-07, 1.061E-07, 1.041E-07,
5174  1.019E-07, 9.969E-08, 9.727E-08, 9.642E-08, 9.487E-08, 9.318E-08, 9.116E-08,
5175  9.046E-08, 8.827E-08, 8.689E-08, 8.433E-08, 8.324E-08, 8.204E-08, 8.036E-08,
5176  7.951E-08, 7.804E-08, 7.524E-08, 7.392E-08, 7.227E-08, 7.176E-08, 6.975E-08,
5177  6.914E-08, 6.859E-08, 6.664E-08, 6.506E-08, 6.368E-08, 6.262E-08, 6.026E-08,
5178  6.002E-08, 5.866E-08, 5.867E-08, 5.641E-08, 5.589E-08, 5.499E-08, 5.309E-08,
5179  5.188E-08, 5.139E-08, 4.991E-08, 4.951E-08, 4.833E-08, 4.640E-08, 4.524E-08,
5180  4.479E-08, 4.304E-08, 4.228E-08, 4.251E-08, 4.130E-08, 3.984E-08, 3.894E-08,
5181  3.815E-08, 3.732E-08, 3.664E-08, 3.512E-08, 3.463E-08, 3.503E-08, 3.218E-08,
5182  3.253E-08, 3.107E-08, 2.964E-08, 2.920E-08, 2.888E-08, 2.981E-08, 2.830E-08,
5183  2.750E-08, 2.580E-08, 2.528E-08, 2.444E-08, 2.378E-08, 2.413E-08, 2.234E-08,
5184  2.316E-08, 2.199E-08, 2.088E-08, 1.998E-08, 1.920E-08, 1.942E-08, 1.859E-08,
5185  1.954E-08, 1.955E-08, 1.749E-08, 1.720E-08, 1.702E-08, 1.521E-08, 1.589E-08,
5186  1.469E-08, 1.471E-08, 1.543E-08, 1.433E-08, 1.298E-08, 1.274E-08, 1.226E-08,
5187  1.204E-08, 1.201E-08, 1.298E-08, 1.220E-08, 1.220E-08, 1.096E-08, 1.080E-08,
5188  9.868E-09, 9.701E-09, 1.130E-08, 9.874E-09, 9.754E-09, 9.651E-09, 9.725E-09,
5189  8.413E-09, 7.705E-09, 7.846E-09, 8.037E-09, 9.163E-09, 8.098E-09, 8.160E-09,
5190  7.511E-09, 7.011E-09, 6.281E-09, 6.502E-09, 7.323E-09, 7.569E-09, 5.941E-09,
5191  5.867E-09, 5.676E-09, 4.840E-09, 5.063E-09, 5.207E-09, 4.917E-09, 5.033E-09,
5192  5.356E-09, 3.795E-09, 4.983E-09, 4.600E-09, 3.635E-09, 3.099E-09, 2.502E-09,
5193  3.823E-09, 3.464E-09, 4.332E-09, 3.612E-09, 3.682E-09, 3.709E-09, 3.043E-09,
5194  3.593E-09, 3.995E-09, 4.460E-09, 3.583E-09, 3.290E-09, 3.132E-09, 2.812E-09,
5195  3.109E-09, 3.874E-09, 3.802E-09, 4.024E-09, 3.901E-09, 2.370E-09, 1.821E-09,
5196  2.519E-09, 4.701E-09, 3.855E-09, 4.685E-09, 5.170E-09, 4.387E-09, 4.148E-09,
5197  4.043E-09, 3.545E-09, 3.392E-09, 3.609E-09, 4.635E-09, 3.467E-09, 2.558E-09,
5198  3.389E-09, 2.672E-09, 2.468E-09, 1.989E-09, 2.816E-09, 4.023E-09, 2.664E-09,
5199  2.219E-09, 3.169E-09, 1.654E-09, 3.189E-09, 2.535E-09, 2.618E-09, 3.265E-09,
5200  2.138E-09, 1.822E-09, 2.920E-09, 2.002E-09, 1.300E-09, 3.764E-09, 3.212E-09,
5201  3.222E-09, 2.961E-09, 2.108E-09, 1.708E-09, 2.636E-09, 2.937E-09, 2.939E-09,
5202  2.732E-09, 2.218E-09, 1.046E-09, 6.419E-10, 1.842E-09, 1.112E-09, 1.265E-09,
5203  4.087E-09, 2.044E-09, 1.022E-09, 5.109E-10, 2.554E-10, 1.277E-10, 6.386E-11,
5204  0.000E+00};
5205 
5206 // CKD_MT 1.00 implementation of oxygen v0<-v0 band model of
5207 // Mate et al. over the spectral region 7550-8486 cm-1:
5208 // B. Mate, C. Lugez, G.T. Fraser, W.J. Lafferty,
5209 // "Absolute Intensities for the O2 1.27 micron
5210 // continuum absorption",
5211 // J. Geophys. Res., 104, 30,585-30,590, 1999.
5212 //
5213 // The units of these continua coefficients are 1 / (amagat_O2*amagat_air)
5214 //
5215 // Also, refer to the paper "Observed Atmospheric
5216 // Collision Induced Absorption in Near Infrared Oxygen Bands",
5217 // Mlawer, Clough, Brown, Stephen, Landry, Goldman, & Murcray,
5218 // Journal of Geophysical Research (1998).
5219 //
5220 // (comment: v1<--v0 band around 9100 to 11000 cm-1 (1mu))
5221 const Numeric O2_10_ckd_mt_100_v1 = 9100.000e0;
5222 const Numeric O2_10_ckd_mt_100_v2 = 11000.000e0;
5224 
5225 const Numeric O2_vis_ckd_mt_250_v1 = 15000.000e0;
5226 const Numeric O2_vis_ckd_mt_250_v2 = 29870.000e0;
5228 const int O2_vis_ckd_mt_250_npt = 1488;
5230  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
5231  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
5232  0.00E+00, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5233  1.00E-03, 1.00E-03, 1.00E-03, 0.00E+00, 0.00E+00, 0.00E+00, 6.06E-04,
5234  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5235  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.49E-03, 3.00E-03,
5236  3.00E-03, 3.00E-03, 4.00E-03, 4.00E-03, 5.00E-03, 5.00E-03, 6.00E-03,
5237  7.00E-03, 8.00E-03, 9.00E-03, 1.00E-02, 1.10E-02, 1.25E-02, 1.46E-02,
5238  1.60E-02, 1.80E-02, 2.00E-02, 2.23E-02, 2.50E-02, 2.69E-02, 3.00E-02,
5239  3.30E-02, 3.63E-02, 4.01E-02, 4.42E-02, 4.67E-02, 5.14E-02, 5.55E-02,
5240  5.96E-02, 6.43E-02, 6.94E-02, 7.37E-02, 7.88E-02, 8.38E-02, 8.86E-02,
5241  9.37E-02, 9.89E-02, 1.03E-01, 1.07E-01, 1.10E-01, 1.14E-01, 1.16E-01,
5242  1.18E-01, 1.19E-01, 1.20E-01, 1.21E-01, 1.20E-01, 1.20E-01, 1.19E-01,
5243  1.17E-01, 1.16E-01, 1.13E-01, 1.10E-01, 1.07E-01, 1.03E-01, 9.97E-02,
5244  9.58E-02, 9.15E-02, 8.80E-02, 8.41E-02, 7.94E-02, 7.53E-02, 7.17E-02,
5245  6.83E-02, 6.43E-02, 6.08E-02, 5.69E-02, 5.31E-02, 5.02E-02, 4.77E-02,
5246  4.40E-02, 4.23E-02, 3.94E-02, 3.70E-02, 3.51E-02, 3.30E-02, 3.10E-02,
5247  2.90E-02, 2.79E-02, 2.60E-02, 2.50E-02, 2.32E-02, 2.20E-02, 2.10E-02,
5248  2.00E-02, 1.90E-02, 1.80E-02, 1.70E-02, 1.65E-02, 1.50E-02, 1.40E-02,
5249  1.30E-02, 1.30E-02, 1.20E-02, 1.10E-02, 1.10E-02, 1.00E-02, 1.00E-02,
5250  9.00E-03, 9.00E-03, 9.00E-03, 8.00E-03, 8.00E-03, 7.01E-03, 7.00E-03,
5251  7.00E-03, 6.98E-03, 6.00E-03, 5.80E-03, 5.00E-03, 5.00E-03, 5.00E-03,
5252  4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03,
5253  4.00E-03, 4.00E-03, 4.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
5254  3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
5255  3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
5256  3.00E-03, 3.00E-03, 3.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03,
5257  5.00E-03, 5.00E-03, 6.00E-03, 6.00E-03, 7.00E-03, 7.41E-03, 8.15E-03,
5258  9.00E-03, 1.01E-02, 1.10E-02, 1.20E-02, 1.40E-02, 1.50E-02, 1.70E-02,
5259  1.85E-02, 1.97E-02, 2.24E-02, 2.47E-02, 2.74E-02, 3.06E-02, 3.36E-02,
5260  3.70E-02, 4.05E-02, 4.49E-02, 4.93E-02, 5.47E-02, 6.01E-02, 6.52E-02,
5261  7.23E-02, 7.89E-02, 8.80E-02, 9.61E-02, 1.05E-01, 1.17E-01, 1.26E-01,
5262  1.39E-01, 1.49E-01, 1.60E-01, 1.68E-01, 1.74E-01, 1.79E-01, 1.82E-01,
5263  1.84E-01, 1.85E-01, 1.84E-01, 1.83E-01, 1.81E-01, 1.80E-01, 1.77E-01,
5264  1.74E-01, 1.71E-01, 1.68E-01, 1.64E-01, 1.60E-01, 1.55E-01, 1.51E-01,
5265  1.46E-01, 1.40E-01, 1.36E-01, 1.30E-01, 1.25E-01, 1.20E-01, 1.14E-01,
5266  1.09E-01, 1.05E-01, 9.93E-02, 9.30E-02, 8.88E-02, 8.38E-02, 7.94E-02,
5267  7.51E-02, 7.08E-02, 6.66E-02, 6.32E-02, 6.01E-02, 5.55E-02, 5.24E-02,
5268  4.93E-02, 4.63E-02, 4.41E-02, 4.15E-02, 3.90E-02, 3.63E-02, 3.50E-02,
5269  3.26E-02, 3.05E-02, 2.94E-02, 2.73E-02, 2.62E-02, 2.46E-02, 2.36E-02,
5270  2.25E-02, 2.10E-02, 2.00E-02, 1.90E-02, 1.80E-02, 1.76E-02, 1.70E-02,
5271  1.60E-02, 1.50E-02, 1.49E-02, 1.40E-02, 1.30E-02, 1.30E-02, 1.22E-02,
5272  1.20E-02, 1.20E-02, 1.10E-02, 1.10E-02, 1.10E-02, 1.00E-02, 1.00E-02,
5273  1.00E-02, 1.00E-02, 9.16E-03, 9.00E-03, 9.00E-03, 9.00E-03, 9.00E-03,
5274  8.49E-03, 8.00E-03, 8.00E-03, 8.00E-03, 8.00E-03, 8.00E-03, 8.00E-03,
5275  8.00E-03, 7.00E-03, 8.00E-03, 7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03,
5276  7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03,
5277  7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03,
5278  7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03,
5279  7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03, 8.00E-03, 8.00E-03, 8.00E-03,
5280  8.00E-03, 8.00E-03, 8.00E-03, 9.00E-03, 9.00E-03, 9.00E-03, 9.07E-03,
5281  1.00E-02, 1.00E-02, 1.00E-02, 1.10E-02, 1.10E-02, 1.20E-02, 1.22E-02,
5282  1.30E-02, 1.31E-02, 1.40E-02, 1.50E-02, 1.60E-02, 1.70E-02, 1.82E-02,
5283  2.00E-02, 2.01E-02, 2.10E-02, 2.20E-02, 2.28E-02, 2.30E-02, 2.30E-02,
5284  2.30E-02, 2.30E-02, 2.30E-02, 2.30E-02, 2.30E-02, 2.20E-02, 2.20E-02,
5285  2.20E-02, 2.10E-02, 2.10E-02, 2.00E-02, 2.00E-02, 1.90E-02, 1.90E-02,
5286  1.82E-02, 1.80E-02, 1.74E-02, 1.70E-02, 1.63E-02, 1.60E-02, 1.50E-02,
5287  1.49E-02, 1.40E-02, 1.37E-02, 1.30E-02, 1.30E-02, 1.21E-02, 1.20E-02,
5288  1.13E-02, 1.09E-02, 1.00E-02, 9.34E-03, 9.00E-03, 8.43E-03, 8.00E-03,
5289  7.39E-03, 7.00E-03, 6.00E-03, 6.00E-03, 5.74E-03, 5.00E-03, 5.00E-03,
5290  5.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03,
5291  4.00E-03, 4.00E-03, 4.00E-03, 3.17E-03, 3.00E-03, 3.00E-03, 3.00E-03,
5292  3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
5293  3.00E-03, 3.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
5294  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
5295  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 1.04E-03, 1.00E-03,
5296  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5297  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5298  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5299  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5300  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5301  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5302  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5303  1.00E-03, 1.41E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
5304  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
5305  2.00E-03, 2.00E-03, 2.00E-03, 1.98E-03, 1.46E-03, 1.05E-03, 1.00E-03,
5306  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5307  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5308  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.71E-03,
5309  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 3.00E-03, 3.00E-03,
5310  3.82E-03, 4.00E-03, 4.17E-03, 5.00E-03, 6.00E-03, 7.00E-03, 7.73E-03,
5311  8.07E-03, 9.70E-03, 1.17E-02, 1.31E-02, 1.47E-02, 1.64E-02, 1.81E-02,
5312  2.07E-02, 2.37E-02, 2.70E-02, 2.97E-02, 3.27E-02, 3.70E-02, 4.13E-02,
5313  4.49E-02, 4.89E-02, 5.38E-02, 5.98E-02, 6.45E-02, 6.94E-02, 7.41E-02,
5314  8.01E-02, 8.51E-02, 9.00E-02, 9.49E-02, 9.88E-02, 1.01E-01, 1.04E-01,
5315  1.07E-01, 1.07E-01, 1.06E-01, 1.03E-01, 1.00E-01, 9.66E-02, 8.93E-02,
5316  8.35E-02, 7.92E-02, 7.33E-02, 6.84E-02, 6.40E-02, 5.91E-02, 5.57E-02,
5317  5.26E-02, 5.03E-02, 4.75E-02, 4.48E-02, 4.26E-02, 4.07E-02, 3.83E-02,
5318  3.69E-02, 3.47E-02, 3.24E-02, 3.11E-02, 2.85E-02, 2.69E-02, 2.55E-02,
5319  2.42E-02, 2.21E-02, 2.09E-02, 1.93E-02, 1.77E-02, 1.62E-02, 1.60E-02,
5320  1.44E-02, 1.36E-02, 1.30E-02, 1.16E-02, 1.10E-02, 1.00E-02, 1.00E-02,
5321  9.00E-03, 8.27E-03, 8.00E-03, 7.45E-03, 7.00E-03, 7.00E-03, 6.18E-03,
5322  6.00E-03, 6.00E-03, 5.00E-03, 5.00E-03, 5.00E-03, 5.00E-03, 4.00E-03,
5323  4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 3.00E-03, 3.00E-03,
5324  3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 2.07E-03,
5325  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
5326  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
5327  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
5328  1.28E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
5329  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
5330  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
5331  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
5332  2.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 4.00E-03,
5333  4.00E-03, 4.00E-03, 4.57E-03, 5.00E-03, 5.00E-03, 5.64E-03, 6.00E-03,
5334  6.67E-03, 7.00E-03, 7.35E-03, 8.00E-03, 8.36E-03, 9.00E-03, 9.00E-03,
5335  1.00E-02, 1.00E-02, 1.00E-02, 1.00E-02, 1.00E-02, 1.00E-02, 1.00E-02,
5336  9.65E-03, 9.00E-03, 9.00E-03, 8.00E-03, 8.00E-03, 7.69E-03, 7.00E-03,
5337  7.00E-03, 6.44E-03, 6.00E-03, 6.00E-03, 6.00E-03, 5.00E-03, 5.00E-03,
5338  5.00E-03, 5.00E-03, 5.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03,
5339  4.00E-03, 3.98E-03, 3.01E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
5340  3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 2.54E-03, 2.00E-03, 2.00E-03,
5341  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
5342  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
5343  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
5344  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
5345  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
5346  2.00E-03, 2.00E-03, 2.00E-03, 1.33E-03, 1.89E-03, 1.07E-03, 1.06E-03,
5347  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5348  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5349  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5350  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5351  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5352  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5353  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5354  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5355  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5356  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5357  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5358  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5359  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 5.50E-04,
5360  0.00E+00, 0.00E+00, 1.00E-03, 1.00E-03, 7.51E-04, 0.00E+00, 0.00E+00,
5361  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
5362  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
5363  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
5364  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
5365  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
5366  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 1.34E-04,
5367  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5368  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5369  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5370  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5371  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 7.65E-05, 1.00E-03, 1.00E-03,
5372  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5373  1.20E-04, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
5374  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
5375  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
5376  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
5377  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
5378  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
5379  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
5380  0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 6.09E-04,
5381  3.47E-04, 6.97E-04, 2.60E-04, 7.81E-04, 1.00E-03, 1.00E-03, 1.00E-03,
5382  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5383  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5384  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5385  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.68E-03,
5386  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.76E-03, 3.00E-03, 3.00E-03,
5387  3.00E-03, 3.80E-03, 4.00E-03, 4.82E-03, 5.00E-03, 5.84E-03, 6.00E-03,
5388  6.85E-03, 7.85E-03, 8.86E-03, 9.86E-03, 1.09E-02, 1.19E-02, 1.29E-02,
5389  1.47E-02, 1.59E-02, 1.77E-02, 1.97E-02, 2.09E-02, 2.27E-02, 2.47E-02,
5390  2.67E-02, 2.87E-02, 3.07E-02, 3.26E-02, 3.38E-02, 3.56E-02, 3.68E-02,
5391  3.86E-02, 3.90E-02, 3.98E-02, 4.07E-02, 4.10E-02, 4.10E-02, 4.03E-02,
5392  3.93E-02, 3.83E-02, 3.73E-02, 3.64E-02, 3.48E-02, 3.34E-02, 3.18E-02,
5393  2.99E-02, 2.85E-02, 2.70E-02, 2.50E-02, 2.31E-02, 2.11E-02, 1.92E-02,
5394  1.76E-02, 1.63E-02, 1.47E-02, 1.34E-02, 1.17E-02, 1.07E-02, 9.78E-03,
5395  8.81E-03, 7.84E-03, 6.88E-03, 6.00E-03, 5.94E-03, 5.00E-03, 5.00E-03,
5396  4.05E-03, 4.00E-03, 3.13E-03, 3.00E-03, 3.00E-03, 2.24E-03, 2.00E-03,
5397  2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 1.54E-03, 1.41E-03,
5398  1.64E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5399  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5400  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5401  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5402  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5403  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5404  1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5405  1.00E-03, 1.15E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
5406  2.00E-03, 2.56E-03, 3.00E-03, 3.00E-03, 3.30E-03, 4.00E-03, 4.00E-03,
5407  4.04E-03, 4.95E-03, 5.85E-03, 6.00E-03, 6.67E-03, 7.58E-03, 8.48E-03,
5408  9.39E-03, 1.03E-02, 1.14E-02, 1.31E-02, 1.40E-02, 1.58E-02, 1.76E-02,
5409  1.94E-02, 2.12E-02, 2.30E-02, 2.56E-02, 2.89E-02, 3.16E-02, 3.44E-02,
5410  3.80E-02, 4.16E-02, 4.52E-02, 4.87E-02, 5.23E-02, 5.59E-02, 5.91E-02,
5411  6.20E-02, 6.53E-02, 6.71E-02, 6.89E-02, 6.98E-02, 7.07E-02, 7.10E-02,
5412  7.10E-02, 7.06E-02, 6.97E-02, 6.89E-02, 6.80E-02, 6.71E-02, 6.54E-02,
5413  6.43E-02, 6.29E-02, 6.11E-02, 5.94E-02, 5.74E-02, 5.48E-02, 5.31E-02,
5414  5.05E-02, 4.86E-02, 4.62E-02, 4.41E-02, 4.23E-02, 4.03E-02, 3.78E-02,
5415  3.61E-02, 3.43E-02, 3.26E-02, 3.08E-02, 2.91E-02, 2.73E-02, 2.58E-02,
5416  2.49E-02, 2.31E-02, 2.22E-02, 2.07E-02, 1.95E-02, 1.86E-02, 1.77E-02,
5417  1.69E-02, 1.60E-02, 1.51E-02, 1.43E-02, 1.40E-02, 1.35E-02, 1.27E-02,
5418  1.18E-02, 1.10E-02, 1.10E-02, 1.02E-02, 1.00E-02, 1.00E-02, 9.67E-03,
5419  8.81E-03, 8.05E-03, 8.90E-03, 8.24E-03, 8.00E-03, 7.53E-03, 7.00E-03,
5420  7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03, 6.42E-03, 6.00E-03, 6.00E-03,
5421  6.00E-03, 6.00E-03, 5.18E-03, 5.00E-03, 5.00E-03, 5.00E-03, 4.80E-03,
5422  4.04E-03, 4.89E-03, 4.27E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03,
5423  4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03,
5424  3.20E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
5425  3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
5426  3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.75E-03, 4.00E-03, 4.00E-03,
5427  4.00E-03, 4.00E-03, 4.00E-03, 4.69E-03, 5.00E-03, 5.00E-03, 5.15E-03,
5428  5.97E-03, 6.00E-03, 6.61E-03, 7.43E-03, 8.00E-03, 8.06E-03, 8.88E-03,
5429  9.70E-03, 1.05E-02, 1.13E-02, 1.21E-02, 1.30E-02, 1.38E-02, 1.52E-02,
5430  1.64E-02, 1.72E-02, 1.80E-02, 1.88E-02, 1.96E-02, 2.04E-02, 2.10E-02,
5431  2.10E-02, 2.10E-02, 2.10E-02, 2.10E-02, 2.10E-02, 2.10E-02, 2.10E-02,
5432  2.10E-02, 2.05E-02, 2.00E-02, 1.99E-02, 1.91E-02, 1.90E-02, 1.85E-02,
5433  1.80E-02, 1.79E-02, 1.71E-02, 1.63E-02, 1.55E-02, 1.47E-02, 1.40E-02,
5434  1.40E-02, 1.33E-02, 1.25E-02, 1.20E-02, 1.19E-02, 1.11E-02, 1.03E-02,
5435  1.00E-02, 9.75E-03, 9.00E-03, 9.00E-03, 8.37E-03, 8.00E-03, 8.00E-03,
5436  8.00E-03, 7.22E-03, 7.00E-03, 7.00E-03, 6.86E-03, 6.07E-03, 6.00E-03,
5437  6.00E-03, 6.00E-03, 5.93E-03, 5.15E-03, 5.00E-03, 5.00E-03, 5.00E-03,
5438  5.00E-03, 5.00E-03, 5.00E-03, 5.00E-03, 5.00E-03, 5.00E-03, 5.00E-03,
5439  5.00E-03, 5.00E-03, 5.00E-03, 5.00E-03, 5.00E-03, 4.68E-03, 4.00E-03,
5440  4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03,
5441  4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03,
5442  4.00E-03, 1.00E-03, 2.00E-04, 0.};
5443 
5444 // #################################################################################
5445 // ############################## WATER VAPOR MODELS ###############################
5446 // #################################################################################
5448 
5483  const Numeric CCin, // continuum scale factor
5484  const Numeric CLin, // line strength scale factor
5485  const Numeric CWin, // line broadening scale factor
5486  const String &model,
5487  ConstVectorView f_grid,
5488  ConstVectorView abs_p,
5489  ConstVectorView abs_t,
5490  ConstVectorView vmr,
5491  const Verbosity &verbosity) {
5492  CREATE_OUT3;
5493 
5494  //
5495  // Coefficients are from Liebe, Radio Science, 20(5), 1985, 1069
5496  // 0 1 2 3
5497  // f0 b1 b2 b3
5498  // [GHz] [kHz/kPa] [1] [GHz/kPa]
5499  const Numeric mpm87[30][4] = {{22.235080, 0.1090, 2.143, 27.84e-3},
5500  {67.813960, 0.0011, 8.730, 27.60e-3},
5501  {119.995940, 0.0007, 8.347, 27.00e-3},
5502  {183.310117, 2.3000, 0.653, 31.64e-3},
5503  {321.225644, 0.0464, 6.156, 21.40e-3},
5504  {325.152919, 1.5400, 1.515, 29.70e-3},
5505  {336.187000, 0.0010, 9.802, 26.50e-3},
5506  {380.197372, 11.9000, 1.018, 30.36e-3},
5507  {390.134508, 0.0044, 7.318, 19.00e-3},
5508  {437.346667, 0.0637, 5.015, 13.70e-3},
5509  {439.150812, 0.9210, 3.561, 16.40e-3},
5510  {443.018295, 0.1940, 5.015, 14.40e-3},
5511  {448.001075, 10.6000, 1.370, 23.80e-3},
5512  {470.888947, 0.3300, 3.561, 18.20e-3},
5513  {474.689127, 1.2800, 2.342, 19.80e-3},
5514  {488.491133, 0.2530, 2.814, 24.90e-3},
5515  {503.568532, 0.0374, 6.693, 11.50e-3},
5516  {504.482692, 0.0125, 6.693, 11.90e-3},
5517  {556.936002, 510.0000, 0.114, 30.00e-3},
5518  {620.700807, 5.0900, 2.150, 22.30e-3},
5519  {658.006500, 0.2740, 7.767, 30.00e-3},
5520  {752.033227, 250.0000, 0.336, 28.60e-3},
5521  {841.073593, 0.0130, 8.113, 14.10e-3},
5522  {859.865000, 0.1330, 7.989, 28.60e-3},
5523  {899.407000, 0.0550, 7.845, 28.60e-3},
5524  {902.555000, 0.0380, 8.360, 26.40e-3},
5525  {906.205524, 0.1830, 5.039, 23.40e-3},
5526  {916.171582, 8.5600, 1.369, 25.30e-3},
5527  {970.315022, 9.1600, 1.842, 24.00e-3},
5528  {987.926764, 138.0000, 0.178, 28.60e-3}};
5529 
5530  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
5531  // standard values for the MPM87 model (Radio Science, 20(5), 1985, 1069):
5532  const Numeric CC_MPM87 = 1.00000;
5533  const Numeric CL_MPM87 = 1.00000;
5534  const Numeric CW_MPM87 = 1.00000;
5535  // ---------------------------------------------------------------------------------------
5536 
5537  // select the parameter set (!!model dominates values!!):
5538  Numeric CC, CL, CW;
5539  if (model == "MPM87") {
5540  CC = CC_MPM87;
5541  CL = CL_MPM87;
5542  CW = CW_MPM87;
5543  } else if (model == "MPM87Lines") {
5544  CC = 0.000;
5545  CL = CL_MPM87;
5546  CW = CW_MPM87;
5547  } else if (model == "MPM87Continuum") {
5548  CC = CC_MPM87;
5549  CL = 0.000;
5550  CW = 0.000;
5551  } else if (model == "user") {
5552  CC = CCin;
5553  CL = CLin;
5554  CW = CWin;
5555  } else {
5556  ostringstream os;
5557  os << "H2O-MPM87: ERROR! Wrong model values given.\n"
5558  << "Valid models are: 'MPM87', 'MPM87Lines', 'MPM87Continuum', and 'user'"
5559  << '\n';
5560  throw runtime_error(os.str());
5561  }
5562  out3 << "H2O-MPM87: (model=" << model << ") parameter values in use:\n"
5563  << " CC = " << CC << "\n"
5564  << " CL = " << CL << "\n"
5565  << " CW = " << CW << "\n";
5566 
5567  // number of lines of liebe line catalog (30 lines)
5568  const Index i_first = 0;
5569  const Index i_last = 29;
5570 
5571  const Index n_p = abs_p.nelem(); // Number of pressure levels
5572  const Index n_f = f_grid.nelem(); // Number of frequencies
5573 
5574  // Check that dimensions of abs_p, abs_t, and vmr agree:
5575  assert(n_p == abs_t.nelem());
5576  assert(n_p == vmr.nelem());
5577 
5578  // Check that dimensions of pxsec are consistent with n_f
5579  // and n_p. It should be [n_f,n_p]:
5580  assert(n_f == pxsec.nrows());
5581  assert(n_p == pxsec.ncols());
5582 
5583  // Loop pressure/temperature (pressure in [hPa] therefore the factor 0.01)
5584  for (Index i = 0; i < n_p; ++i) {
5585  // here the total pressure is not multiplied by the H2O vmr for the
5586  // P_H2O calculation because we calculate pxsec and not abs: abs = vmr * pxsec
5587  Numeric pwv_dummy = Pa_to_kPa * abs_p[i];
5588  // relative inverse temperature [1]
5589  Numeric theta = (300.0 / abs_t[i]);
5590  // H2O partial pressure [kPa]
5591  Numeric pwv = Pa_to_kPa * abs_p[i] * vmr[i];
5592  // dry air partial pressure [kPa]
5593  Numeric pda = (Pa_to_kPa * abs_p[i]) - pwv;
5594  // H2O continuum absorption [dB/km/GHz2] like in the original MPM87
5595  Numeric Nppc = CC * pwv_dummy * pow(theta, (Numeric)3.0) * 1.000e-5 *
5596  ((0.113 * pda) + (3.57 * pwv * pow(theta, (Numeric)7.8)));
5597 
5598  // Loop over input frequency
5599  for (Index s = 0; s < n_f; ++s) {
5600  // input frequency in [GHz]
5601  Numeric ff = f_grid[s] * Hz_to_GHz;
5602  // H2O line contribution at position f
5603  Numeric Nppl = 0.000;
5604 
5605  // Loop over MPM89 H2O spectral lines
5606  for (Index l = i_first; l <= i_last; ++l) {
5607  // line strength [kHz]
5608  Numeric strength = CL * pwv_dummy * mpm87[l][1] *
5609  pow(theta, (Numeric)3.5) *
5610  exp(mpm87[l][2] * (1.000 - theta));
5611  // line broadening parameter [GHz]
5612  Numeric gam = CW * mpm87[l][3] *
5613  ((4.80 * pwv * pow(theta, (Numeric)1.1)) +
5614  (pda * pow(theta, (Numeric)0.6)));
5615  // effective line width with Doppler broadening [GHz]
5616  // gam = sqrt(gam*gam + (2.14e-12 * mpm87[l][0] * mpm87[l][0] / theta));
5617  // H2O line absorption [dB/km/GHz] like in the original MPM87
5618  Nppl += strength * MPMLineShapeFunction(gam, mpm87[l][0], ff);
5619  }
5620  // pxsec = abs/vmr [1/m] but MPM87 is in [dB/km] --> conversion necessary
5621  pxsec(s, i) += dB_km_to_1_m * 0.1820 * ff * (Nppl + (Nppc * ff));
5622  }
5623  }
5624  return;
5625 }
5626 //
5627 // #################################################################################
5629 
5655  const Numeric CCin, // continuum scale factor
5656  const Numeric CLin, // line strength scale factor
5657  const Numeric CWin, // line broadening scale factor
5658  const String &model, // model
5659  ConstVectorView f_grid,
5660  ConstVectorView abs_p,
5661  ConstVectorView abs_t,
5662  ConstVectorView vmr,
5663  const Verbosity &verbosity) {
5664  CREATE_OUT3;
5665 
5666  //
5667  // Coefficients are from Liebe, Int. J. Infrared and Millimeter Waves, 10(6), 1989, 631
5668  // 0 1 2 3 4 5 6
5669  // f0 b1 b2 b3 b4 b5 b6
5670  // [GHz] [kHz/kPa] [1] [MHz/kPa] [1] [1] [1]
5671  const Numeric mpm89[30][7] = {
5672  {22.235080, 0.1090, 2.143, 28.11, 0.69, 4.80, 1.00},
5673  {67.813960, 0.0011, 8.735, 28.58, 0.69, 4.93, 0.82},
5674  {119.995940, 0.0007, 8.356, 29.48, 0.70, 4.78, 0.79},
5675  {183.310074, 2.3000, 0.668, 28.13, 0.64, 5.30, 0.85},
5676  {321.225644, 0.0464, 6.181, 23.03, 0.67, 4.69, 0.54},
5677  {325.152919, 1.5400, 1.540, 27.83, 0.68, 4.85, 0.74},
5678  {336.187000, 0.0010, 9.829, 26.93, 0.69, 4.74, 0.61},
5679  {380.197372, 11.9000, 1.048, 28.73, 0.69, 5.38, 0.84},
5680  {390.134508, 0.0044, 7.350, 21.52, 0.63, 4.81, 0.55},
5681  {437.346667, 0.0637, 5.050, 18.45, 0.60, 4.23, 0.48},
5682  {439.150812, 0.9210, 3.596, 21.00, 0.63, 4.29, 0.52},
5683  {443.018295, 0.1940, 5.050, 18.60, 0.60, 4.23, 0.50},
5684  {448.001075, 10.6000, 1.405, 26.32, 0.66, 4.84, 0.67},
5685  {470.888947, 0.3300, 3.599, 21.52, 0.66, 4.57, 0.65},
5686  {474.689127, 1.2800, 2.381, 23.55, 0.65, 4.65, 0.64},
5687  {488.491133, 0.2530, 2.853, 26.02, 0.69, 5.04, 0.72},
5688  {503.568532, 0.0374, 6.733, 16.12, 0.61, 3.98, 0.43},
5689  {504.482692, 0.0125, 6.733, 16.12, 0.61, 4.01, 0.45},
5690  {556.936002, 510.0000, 0.159, 32.10, 0.69, 4.11, 1.00},
5691  {620.700807, 5.0900, 2.200, 24.38, 0.71, 4.68, 0.68},
5692  {658.006500, 0.2740, 7.820, 32.10, 0.69, 4.14, 1.00},
5693  {752.033227, 250.0000, 0.396, 30.60, 0.68, 4.09, 0.84},
5694  {841.073593, 0.0130, 8.180, 15.90, 0.33, 5.76, 0.45},
5695  {859.865000, 0.1330, 7.989, 30.60, 0.68, 4.09, 0.84},
5696  {899.407000, 0.0550, 7.917, 29.85, 0.68, 4.53, 0.90},
5697  {902.555000, 0.0380, 8.432, 28.65, 0.70, 5.10, 0.95},
5698  {906.205524, 0.1830, 5.111, 24.08, 0.70, 4.70, 0.53},
5699  {916.171582, 8.5600, 1.442, 26.70, 0.70, 4.78, 0.78},
5700  {970.315022, 9.1600, 1.920, 25.50, 0.64, 4.94, 0.67},
5701  {987.926764, 138.0000, 0.258, 29.85, 0.68, 4.55, 0.90}};
5702 
5703  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
5704  // standard values for the MPM89 model
5705  // (Liebe, Int. J. Infrared and Millimeter Waves, 10(6), 1989, 631):
5706  const Numeric CC_MPM89 = 1.00000;
5707  const Numeric CL_MPM89 = 1.00000;
5708  const Numeric CW_MPM89 = 1.00000;
5709  // ---------------------------------------------------------------------------------------
5710 
5711  // select the parameter set (!!model goes for values!!):
5712  Numeric CC, CL, CW;
5713  if (model == "MPM89") {
5714  CC = CC_MPM89;
5715  CL = CL_MPM89;
5716  CW = CW_MPM89;
5717  } else if (model == "MPM89Lines") {
5718  CC = 0.000;
5719  CL = CL_MPM89;
5720  CW = CW_MPM89;
5721  } else if (model == "MPM89Continuum") {
5722  CC = CC_MPM89;
5723  CL = 0.000;
5724  CW = 0.000;
5725  } else if (model == "user") {
5726  CC = CCin;
5727  CL = CLin;
5728  CW = CWin;
5729  } else {
5730  ostringstream os;
5731  os << "H2O-MPM89: ERROR! Wrong model values given.\n"
5732  << "Valid models are: 'MPM89', 'MPM89Lines', 'MPM89Continuum', and 'user'"
5733  << '\n';
5734  throw runtime_error(os.str());
5735  }
5736  out3 << "H2O-MPM89: (model=" << model << ") parameter values in use:\n"
5737  << " CC = " << CC << "\n"
5738  << " CL = " << CL << "\n"
5739  << " CW = " << CW << "\n";
5740 
5741  // number of lines of Liebe line catalog (30 lines)
5742  const Index i_first = 0;
5743  const Index i_last = 29;
5744 
5745  const Index n_p = abs_p.nelem(); // Number of pressure levels
5746  const Index n_f = f_grid.nelem(); // Number of frequencies
5747 
5748  // Check that dimensions of abs_p, abs_t, and vmr agree:
5749  assert(n_p == abs_t.nelem());
5750  assert(n_p == vmr.nelem());
5751 
5752  // Check that dimensions of pxsec are consistent with n_f
5753  // and n_p. It should be [n_f,n_p]:
5754  assert(n_f == pxsec.nrows());
5755  assert(n_p == pxsec.ncols());
5756 
5757  // Loop pressure/temperature (pressure in [hPa] therefore the factor 0.01)
5758  for (Index i = 0; i < n_p; ++i) {
5759  // here the total pressure is not multiplied by the H2O vmr for the
5760  // P_H2O calculation because we calculate pxsec and not abs: abs = vmr * pxsec
5761  Numeric pwv_dummy = Pa_to_kPa * abs_p[i];
5762  // relative inverse temperature [1]
5763  Numeric theta = (300.0 / abs_t[i]);
5764  // H2O partial pressure [kPa]
5765  Numeric pwv = Pa_to_kPa * abs_p[i] * vmr[i];
5766  // dry air partial pressure [kPa]
5767  Numeric pda = (Pa_to_kPa * abs_p[i]) - pwv;
5768  // H2O continuum absorption [dB/km/GHz^2] like in the original MPM89
5769  Numeric Nppc = CC * pwv_dummy * pow(theta, (Numeric)3.0) * 1.000e-5 *
5770  ((0.113 * pda) + (3.57 * pwv * pow(theta, (Numeric)7.5)));
5771 
5772  // Loop over input frequency
5773  for (Index s = 0; s < n_f; ++s) {
5774  // input frequency in [GHz]
5775  Numeric ff = f_grid[s] * Hz_to_GHz;
5776  // H2O line contribution at position f
5777  Numeric Nppl = 0.000;
5778 
5779  // Loop over MPM89 spectral lines:
5780  for (Index l = i_first; l <= i_last; ++l) {
5781  // line strength [kHz]
5782  Numeric strength = CL * pwv_dummy * mpm89[l][1] *
5783  pow(theta, (Numeric)3.5) *
5784  exp(mpm89[l][2] * (1.000 - theta));
5785  // line broadening parameter [GHz]
5786  Numeric gam = CW * mpm89[l][3] * 0.001 *
5787  (mpm89[l][5] * pwv * pow(theta, mpm89[l][6]) +
5788  pda * pow(theta, mpm89[l][4]));
5789  // Doppler line width [GHz]
5790  // Numeric gamd = 1.46e-6 * mpm89[l][0] / sqrt(theta);
5791  // effective line width [GHz]
5792  // gam = 0.535 * gam + sqrt(0.217*gam*gam + gamd*gamd);
5793  // H2O line absorption [dB/km/GHz] like in the original MPM89
5794  Nppl += strength * MPMLineShapeFunction(gam, mpm89[l][0], ff);
5795  }
5796  // pxsec = abs/vmr [1/m] but MPM89 is in [dB/km] --> conversion necessary
5797  pxsec(s, i) += dB_km_to_1_m * 0.1820 * ff * (Nppl + (Nppc * ff));
5798  }
5799  }
5800  return;
5801 }
5802 //
5803 // #################################################################################
5805 
5846  const Numeric CCin, // continuum scale factor
5847  const Numeric CLin, // line strength scale factor
5848  const Numeric CWin, // line broadening scale factor
5849  const String &model,
5850  ConstVectorView f_grid,
5851  ConstVectorView abs_p,
5852  ConstVectorView abs_t,
5853  ConstVectorView vmr,
5854  const Verbosity &verbosity) {
5855  CREATE_OUT3;
5856 
5857  //
5858  /*
5859 CTKS OTHER DATA USED IF NOT FROM THEORETICAL CALC. IN A. BAUER ET AL. 41(1989)49-54:
5860 CTKS --------------------------------------------------------------------------------------------------------------
5861 CTKS | T=300 K | T=300 K | T=300 K |
5862 CTKS F ISO|GWVHZO NWVHZO| GWVNZ NWVNZ| GWVAIR NWVAIR| REFERENCE
5863 CTKS GHZ 1 |MHZ/TORR 1 | MHZ/TORR 1 | MHZ/TORR 1 |
5864 CTKS --------------------------------------------------------------------------------------------------------------
5865 CTKS 22.2 1 18.00(18) - 4.10 -- 3.77 -- LIEBE ET AL., J.CHEM.PHYS., 50(1969)727
5866 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
5867 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
5868 CTKS 203.4 2 -- -- 4.214 0.93 3.833 0.89 J.-M. COLMONT ET AL. J. MOLEC. SPEC. 193(1999)233-243
5869 CTKS 225.9 4 -- -- 4.21 0.70 3.798 0.75 J.-M. COLMONT ET AL. J. MOLEC. SPEC. 193(1999)233-243
5870 CTKS 241.6 4 -- -- 4.45 0.77 4.08 0.80 J.-M. COLMONT ET AL. J. MOLEC. SPEC. 193(1999)233-243
5871 CTKS 241.9 4 -- -- 3.47 0.67 3.07 0.70 J.-M. COLMONT ET AL. J. MOLEC. SPEC. 193(1999)233-243
5872 CTKS 325.1 1 -- -- 4.011 0.63 3.633 0.64 J.-M. COLMONT ET AL. J. MOLEC. SPEC. 193(1999)233-243
5873 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
5874 CTKS 380.2 1 - - 4.16(4) 0.70(3) 3.80 0.72 T. M. GOYETTE ET AL. JQSRT 41(1993)485
5875 CTKS 439.2 1 12.95(25)0.62(9) -- -- -- -- V. N. MARKOV, J. MOLEC. SPEC, 164(1994)233
5876 CTKS 752.0 1 4.16(18) -- 3.75 -- S. S. D. GASSTER ET AL. JOSA, 5(1988)593
5877 CTKS 987.9 1 4.42(23) -- 4.01 -- S. S. D. GASSTER ET AL. JOSA, 5(1988)593
5878 */
5879  // Coefficients are from Liebe et al., AGARD CP-May93, Paper 3/1-10
5880  // 0 1 2 3 4 5 6
5881  // f0 b1 b2 b3 b4 b5 b6
5882  // [MHz] [kHz/kPa] [1] [MHz/hPa] [1] [1]
5883  // air self air self
5884  const Numeric mpm02[35][7] = {
5885  {22235.0800, 0.10947, 2.1678, 2.811, 4.80, 0.69, 0.61},
5886  {67803.9600, 0.00111, 8.7518, 2.858, 4.93, 0.69, 0.82},
5887  {119995.9400, 0.00072, 8.3688, 2.948, 4.78, 0.70, 0.79},
5888  {183310.1170, 2.30351, 0.6794, 3.050, 5.30, 0.76, 0.85},
5889  {321225.6400, 0.04646, 6.1792, 2.303, 4.69, 0.67, 0.54},
5890  {325152.9190, 1.53869, 1.5408, 2.783, 4.85, 0.68, 0.74},
5891  {336227.6200, 0.00099, 9.8233, 2.693, 4.74, 0.64, 0.61},
5892  {380197.3720, 11.9079, 1.0439, 2.873, 5.38, 0.72, 0.89},
5893  {390134.5080, 0.00437, 7.3408, 2.152, 4.81, 0.63, 0.55},
5894  {437346.6670, 0.06378, 5.0384, 1.845, 4.23, 0.60, 0.48},
5895  {439150.8120, 0.92144, 3.5853, 2.100, 4.29, 0.63, 0.62},
5896  {443018.2950, 0.19384, 5.0384, 1.860, 4.23, 0.60, 0.50},
5897  {448001.0750, 10.6190, 1.3952, 2.632, 4.84, 0.66, 0.67},
5898  {470888.9470, 0.33005, 3.5853, 2.152, 4.57, 0.66, 0.65},
5899  {474689.1270, 1.27660, 2.3674, 2.355, 4.65, 0.65, 0.64},
5900  {488491.1330, 0.25312, 2.8391, 2.602, 5.04, 0.69, 0.72},
5901  {503568.5320, 0.03746, 6.7158, 1.612, 3.98, 0.61, 0.43},
5902  {504482.6920, 0.01250, 6.7158, 1.612, 4.01, 0.61, 0.45},
5903  {547676.4400, 1.01467, 0.1427, 2.600, 4.50, 0.69, 1.00}, // *
5904  {552020.9600, 0.18668, 0.1452, 2.600, 4.50, 0.69, 1.00}, // *
5905  {556936.0020, 510.51086, 0.1405, 3.210, 4.11, 0.69, 1.00},
5906  {620700.8070, 5.10539, 2.3673, 2.438, 4.68, 0.71, 0.68},
5907  {645905.6200, 0.00667, 8.6065, 1.800, 4.00, 0.60, 0.43},
5908  {658006.5500, 0.27451, 7.7889, 3.210, 4.14, 0.69, 1.00},
5909  {752033.2270, 249.68466, 0.3625, 3.060, 4.09, 0.68, 0.84},
5910  {841051.1620, 0.01308, 8.1347, 1.590, 5.76, 0.33, 0.45},
5911  {859965.6490, 0.13326, 8.0114, 3.060, 4.09, 0.68, 0.84},
5912  {899302.1710, 0.05492, 7.8676, 2.985, 4.53, 0.68, 0.90},
5913  {902609.4360, 0.03854, 8.3823, 2.865, 5.10, 0.70, 0.95},
5914  {906206.1180, 0.18323, 5.0628, 2.408, 4.70, 0.70, 0.53},
5915  {916171.5820, 8.56444, 1.3943, 2.670, 4.78, 0.70, 0.78},
5916  {923113.1900, 0.00784, 10.2441, 2.900, 5.00, 0.66, 0.67},
5917  {970315.0220, 9.16280, 1.8673, 2.550, 4.94, 0.64, 0.67},
5918  {987926.7640, 138.28461, 0.2045, 2.985, 4.55, 0.68, 0.90},
5919  //--------------------------------------------------------------------
5920  {1780.000000,
5921  2230.00000,
5922  0.952,
5923  17.620,
5924  30.50,
5925  2.00,
5926  5.00}}; // pseudo continuum line
5927 
5928  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
5929  // standard values for the MPM93 model (J. Liebe and G. A. Hufford and M. G. Cotton,
5930  // "Propagation modeling of moist air and suspended water/ice
5931  // particles at frequencies below 1000 GHz",
5932  // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
5933  // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21)
5934  const Numeric CC_MPM02 = 1.00000;
5935  const Numeric CL_MPM02 = 1.00000;
5936  const Numeric CW_MPM02 = 1.00000;
5937  // ---------------------------------------------------------------------------------------
5938 
5939  // select the parameter set (!!model dominates values!!):
5940  Numeric CC, CL, CW;
5941  // number of lines of Liebe line catalog (0-33 lines, 34 cont. pseudo line)
5942  Index i_first = 0;
5943  Index i_last = 34;
5944  if (model == "MPM02") {
5945  CC = CC_MPM02;
5946  CL = CL_MPM02;
5947  CW = CW_MPM02;
5948  i_first = 0;
5949  i_last = 34;
5950  } else if (model == "MPM02Lines") {
5951  CC = 0.000;
5952  CL = CL_MPM02;
5953  CW = CW_MPM02;
5954  i_first = 0;
5955  i_last = 33;
5956  } else if (model == "MPM02Continuum") {
5957  CC = CC_MPM02;
5958  CL = 0.000;
5959  CW = 0.000;
5960  i_first = 34;
5961  i_last = 34;
5962  } else if (model == "user") {
5963  CC = CCin;
5964  CL = CLin;
5965  CW = CWin;
5966  i_first = 0;
5967  i_last = 34;
5968 
5969  } else {
5970  ostringstream os;
5971  os << "H2O-MPM02: ERROR! Wrong model values given.\n"
5972  << "Valid models are: 'MPM02', 'MPM02Lines', 'MPM02Continuum', and 'user'"
5973  << '\n';
5974  throw runtime_error(os.str());
5975  }
5976  out3 << "H2O-MPM02: (model=" << model << ") parameter values in use:\n"
5977  << " CC = " << CC << "\n"
5978  << " CL = " << CL << "\n"
5979  << " CW = " << CW << "\n";
5980 
5981  const Index n_p = abs_p.nelem(); // Number of pressure levels
5982  const Index n_f = f_grid.nelem(); // Number of frequencies
5983 
5984  // Check that dimensions of abs_p, abs_t, and vmr agree:
5985  assert(n_p == abs_t.nelem());
5986  assert(n_p == vmr.nelem());
5987 
5988  // Check that dimensions of pxsec are consistent with n_f
5989  // and n_p. It should be [n_f,n_p]:
5990  assert(n_f == pxsec.nrows());
5991  assert(n_p == pxsec.ncols());
5992 
5993  // Loop pressure/temperature (pressure in hPa therefore the factor 0.01)
5994  for (Index i = 0; i < n_p; ++i) {
5995  // here the total pressure is not multiplied by the H2O vmr for the
5996  // P_H2O calculation because we calculate pxsec and not abs: abs = vmr * pxsec
5997  Numeric pwv_dummy = Pa_to_hPa * abs_p[i];
5998  // relative inverse temperature [1]
5999  Numeric theta = (300.0 / abs_t[i]);
6000  // H2O partial pressure [hPa]
6001  Numeric pwv = Pa_to_hPa * abs_p[i] * vmr[i];
6002  // dry air partial pressure [hPa]
6003  Numeric pda = (Pa_to_hPa * abs_p[i]) - pwv;
6004  // Loop over MPM02 spectral lines:
6005 
6006  // Loop over input frequency
6007  for (Index s = 0; s < n_f; ++s) {
6008  // input frequency in [GHz]
6009  Numeric ff = f_grid[s] * Hz_to_GHz;
6010 
6011  for (Index l = i_first; l <= i_last; ++l) {
6012  // line strength [ppm]. The missing vmr of H2O will be multiplied
6013  // at the stage of absorption calculation: abs / vmr * pxsec.
6014  Numeric strength = 0.00;
6015  Numeric gam = 0.00;
6016  if ((l >= 0) && (l <= 33)) // ---- just the lines ------------------
6017  {
6018  strength = CL * pwv_dummy * mpm02[l][1] * pow(theta, (Numeric)3.5) *
6019  exp(mpm02[l][2] * (1.0 - theta));
6020  // line broadening parameter [GHz]
6021  gam = CW * mpm02[l][3] * 0.001 *
6022  ((mpm02[l][4] * pwv * pow(theta, mpm02[l][6])) +
6023  (pda * pow(theta, mpm02[l][5])));
6024  } else if (l == 34) // ----- just the continuum pseudo-line ----------
6025  {
6026  strength = CC * pwv_dummy * mpm02[l][1] * pow(theta, (Numeric)3.5) *
6027  exp(mpm02[l][2] * (1.0 - theta));
6028  // line broadening parameter [GHz]
6029  gam = mpm02[l][3] * 0.001 *
6030  ((mpm02[l][4] * pwv * pow(theta, mpm02[l][6])) +
6031  (pda * pow(theta, mpm02[l][5])));
6032  } else // ----- if something strange happens ---------------------------
6033  {
6034  ostringstream os;
6035  os << "H2O-MPM02: wrong line number detected l=" << l << " (0-34)\n";
6036  throw runtime_error(os.str());
6037  return;
6038  } // ---------------------------------------------------------------
6039  // Doppler line width [GHz]
6040  // Numeric gamd = 1.46e-6 * mpm02[l][0] / sqrt(theta);
6041  // effective line width [GHz]
6042  //gam = 0.535 * gam + sqrt(0.217*gam*gam + gamd*gamd);
6043  // absorption [dB/km] like in the original MPM02
6044  Numeric Npp = strength * MPMLineShapeFunction(gam, mpm02[l][0], ff);
6045  // pxsec = abs/vmr [1/m] but MPM89 is in [dB/km] --> conversion necessary
6046  pxsec(s, i) += dB_km_to_1_m * 0.1820 * ff * Npp;
6047  }
6048  }
6049  }
6050  return;
6051 }
6052 //
6053 //
6054 // #################################################################################
6056 
6096  const Numeric CCin, // continuum scale factor
6097  const Numeric CLin, // line strength scale factor
6098  const Numeric CWin, // line broadening scale factor
6099  const String &model,
6100  ConstVectorView f_grid,
6101  ConstVectorView abs_p,
6102  ConstVectorView abs_t,
6103  ConstVectorView vmr,
6104  const Verbosity &verbosity) {
6105  CREATE_OUT3;
6106 
6107  //
6108  // Coefficients are from Liebe et al., AGARD CP-May93, Paper 3/1-10
6109  // 0 1 2 3 4 5 6
6110  // f0 b1 b2 b3 b4 b5 b6
6111  // [GHz] [kHz/hPa] [1] [MHz/hPa] [1] [1] [1]
6112  const Numeric mpm93[35][7] = {
6113  {22.235080, 0.01130, 2.143, 2.811, 4.80, 0.69, 1.00},
6114  {67.803960, 0.00012, 8.735, 2.858, 4.93, 0.69, 0.82},
6115  {119.995940, 0.00008, 8.356, 2.948, 4.78, 0.70, 0.79},
6116  {183.310091, 0.24200, 0.668, 3.050, 5.30, 0.64, 0.85},
6117  {321.225644, 0.00483, 6.181, 2.303, 4.69, 0.67, 0.54},
6118  {325.152919, 0.14990, 1.540, 2.783, 4.85, 0.68, 0.74},
6119  {336.222601, 0.00011, 9.829, 2.693, 4.74, 0.69, 0.61},
6120  {380.197372, 1.15200, 1.048, 2.873, 5.38, 0.54, 0.89},
6121  {390.134508, 0.00046, 7.350, 2.152, 4.81, 0.63, 0.55},
6122  {437.346667, 0.00650, 5.050, 1.845, 4.23, 0.60, 0.48},
6123  {439.150812, 0.09218, 3.596, 2.100, 4.29, 0.63, 0.52},
6124  {443.018295, 0.01976, 5.050, 1.860, 4.23, 0.60, 0.50},
6125  {448.001075, 1.03200, 1.405, 2.632, 4.84, 0.66, 0.67},
6126  {470.888947, 0.03297, 3.599, 2.152, 4.57, 0.66, 0.65},
6127  {474.689127, 0.12620, 2.381, 2.355, 4.65, 0.65, 0.64},
6128  {488.491133, 0.02520, 2.853, 2.602, 5.04, 0.69, 0.72},
6129  {503.568532, 0.00390, 6.733, 1.612, 3.98, 0.61, 0.43},
6130  {504.482692, 0.00130, 6.733, 1.612, 4.01, 0.61, 0.45},
6131  // { 547.676440, 0.97010, 0.114, 2.600, 4.50, 0.70, 1.00},
6132  // { 552.020960, 1.47700, 0.114, 2.600, 4.50, 0.70, 1.00},
6133  {547.676440,
6134  0.97010 * 0.00199983,
6135  0.114,
6136  2.600,
6137  4.50,
6138  0.70,
6139  1.00}, // isotopologue ratio multiplied
6140  {552.020960,
6141  1.47700 * 0.00037200,
6142  0.114,
6143  2.600,
6144  4.50,
6145  0.70,
6146  1.00}, // isotopologue ratio multiplied
6147  {556.936002, 48.74000, 0.159, 3.210, 4.11, 0.69, 1.00},
6148  {620.700807, 0.50120, 2.200, 2.438, 4.68, 0.71, 0.68},
6149  {645.866155,
6150  0.00713,
6151  8.580,
6152  1.800,
6153  4.00,
6154  0.60,
6155  0.50}, // ?? JPL tag 18003 (H2O) f_o = 645.7660100GHz
6156  {658.005280, 0.03022, 7.820, 3.210, 4.14, 0.69, 1.00},
6157  {752.033227, 23.96000, 0.396, 3.060, 4.09, 0.68, 0.84},
6158  {841.053973, 0.00140, 8.180, 1.590, 5.76, 0.33, 0.45},
6159  {859.962313, 0.01472, 7.989, 3.060, 4.09, 0.68, 0.84},
6160  {899.306675, 0.00605, 7.917, 2.985, 4.53, 0.68, 0.90},
6161  {902.616173, 0.00426, 8.432, 2.865, 5.10, 0.70, 0.95},
6162  {906.207325, 0.01876, 5.111, 2.408, 4.70, 0.70, 0.53},
6163  {916.171582, 0.83400, 1.442, 2.670, 4.78, 0.70, 0.78},
6164  {923.118427, 0.00869, 10.220, 2.900, 5.00, 0.70, 0.80},
6165  {970.315022, 0.89720, 1.920, 2.550, 4.94, 0.64, 0.67},
6166  {987.926764, 13.21000, 0.258, 2.985, 4.55, 0.68, 0.90},
6167  //--------------------------------------------------------------------
6168  {1780.000000,
6169  2230.00000,
6170  0.952,
6171  17.620,
6172  30.50,
6173  2.00,
6174  5.00}}; // pseudo continuum line
6175 
6176  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
6177  // standard values for the MPM93 model (J. Liebe and G. A. Hufford and M. G. Cotton,
6178  // "Propagation modeling of moist air and suspended water/ice
6179  // particles at frequencies below 1000 GHz",
6180  // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
6181  // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21)
6182  const Numeric CC_MPM93 = 1.00000;
6183  const Numeric CL_MPM93 = 1.00000;
6184  const Numeric CW_MPM93 = 1.00000;
6185  // ---------------------------------------------------------------------------------------
6186 
6187  // select the parameter set (!!model dominates values!!):
6188  Numeric CC, CL, CW;
6189  // number of lines of Liebe line catalog (0-33 lines, 34 cont. pseudo line)
6190  Index i_first = 0;
6191  Index i_last = 34;
6192  if (model == "MPM93") {
6193  CC = CC_MPM93;
6194  CL = CL_MPM93;
6195  CW = CW_MPM93;
6196  i_first = 0;
6197  i_last = 34;
6198  } else if (model == "MPM93Lines") {
6199  CC = 0.000;
6200  CL = CL_MPM93;
6201  CW = CW_MPM93;
6202  i_first = 0;
6203  i_last = 33;
6204  } else if (model == "MPM93Continuum") {
6205  CC = CC_MPM93;
6206  CL = 0.000;
6207  CW = 0.000;
6208  i_first = 34;
6209  i_last = 34;
6210  } else if (model == "user") {
6211  CC = CCin;
6212  CL = CLin;
6213  CW = CWin;
6214  i_first = 0;
6215  i_last = 34;
6216 
6217  } else {
6218  ostringstream os;
6219  os << "H2O-MPM93: ERROR! Wrong model values given.\n"
6220  << "Valid models are: 'MPM93', 'MPM93Lines', 'MPM93Continuum', and 'user'"
6221  << '\n';
6222  throw runtime_error(os.str());
6223  }
6224  out3 << "H2O-MPM93: (model=" << model << ") parameter values in use:\n"
6225  << " CC = " << CC << "\n"
6226  << " CL = " << CL << "\n"
6227  << " CW = " << CW << "\n";
6228 
6229  const Index n_p = abs_p.nelem(); // Number of pressure levels
6230  const Index n_f = f_grid.nelem(); // Number of frequencies
6231 
6232  // Check that dimensions of abs_p, abs_t, and vmr agree:
6233  assert(n_p == abs_t.nelem());
6234  assert(n_p == vmr.nelem());
6235 
6236  // Check that dimensions of pxsec are consistent with n_f
6237  // and n_p. It should be [n_f,n_p]:
6238  assert(n_f == pxsec.nrows());
6239  assert(n_p == pxsec.ncols());
6240 
6241  // Loop pressure/temperature (pressure in hPa therefore the factor 0.01)
6242  for (Index i = 0; i < n_p; ++i) {
6243  // here the total pressure is not multiplied by the H2O vmr for the
6244  // P_H2O calculation because we calculate pxsec and not abs: abs = vmr * pxsec
6245  Numeric pwv_dummy = Pa_to_hPa * abs_p[i];
6246  // relative inverse temperature [1]
6247  Numeric theta = (300.0 / abs_t[i]);
6248  // H2O partial pressure [hPa]
6249  Numeric pwv = Pa_to_hPa * abs_p[i] * vmr[i];
6250  // dry air partial pressure [hPa]
6251  Numeric pda = (Pa_to_hPa * abs_p[i]) - pwv;
6252  // Loop over MPM93 spectral lines:
6253 
6254  // Loop over input frequency
6255  for (Index s = 0; s < n_f; ++s) {
6256  // input frequency in [GHz]
6257  Numeric ff = f_grid[s] * Hz_to_GHz;
6258 
6259  for (Index l = i_first; l <= i_last; ++l) {
6260  // line strength [ppm]. The missing vmr of H2O will be multiplied
6261  // at the stage of absorption calculation: abs / vmr * pxsec.
6262  Numeric strength = 0.00;
6263  Numeric gam = 0.00;
6264  if ((l >= 0) && (l <= 33)) // ---- just the lines ------------------
6265  {
6266  strength = CL * pwv_dummy * mpm93[l][1] * pow(theta, (Numeric)3.5) *
6267  exp(mpm93[l][2] * (1.0 - theta));
6268  // line broadening parameter [GHz]
6269  gam = CW * mpm93[l][3] * 0.001 *
6270  ((mpm93[l][4] * pwv * pow(theta, mpm93[l][6])) +
6271  (pda * pow(theta, mpm93[l][5])));
6272  } else if (l == 34) // ----- just the continuum pseudo-line ----------
6273  {
6274  strength = CC * pwv_dummy * mpm93[l][1] * pow(theta, (Numeric)3.5) *
6275  exp(mpm93[l][2] * (1.0 - theta));
6276  // line broadening parameter [GHz]
6277  gam = mpm93[l][3] * 0.001 *
6278  ((mpm93[l][4] * pwv * pow(theta, mpm93[l][6])) +
6279  (pda * pow(theta, mpm93[l][5])));
6280  } else // ----- if something strange happens ---------------------------
6281  {
6282  ostringstream os;
6283  os << "H2O-MPM93: wrong line number detected l=" << l << " (0-34)\n";
6284  throw runtime_error(os.str());
6285  return;
6286  } // ---------------------------------------------------------------
6287  // Doppler line width [GHz]
6288  // Numeric gamd = 1.46e-6 * mpm93[l][0] / sqrt(theta);
6289  // effective line width [GHz]
6290  //gam = 0.535 * gam + sqrt(0.217*gam*gam + gamd*gamd);
6291  // absorption [dB/km] like in the original MPM93
6292  Numeric Npp = strength * MPMLineShapeFunction(gam, mpm93[l][0], ff);
6293  // pxsec = abs/vmr [1/m] but MPM89 is in [dB/km] --> conversion necessary
6294  pxsec(s, i) += dB_km_to_1_m * 0.1820 * ff * Npp;
6295  }
6296  }
6297  }
6298  return;
6299 }
6300 //
6301 // #################################################################################
6303 
6330  const Numeric CCin, // continuum scale factor
6331  const Numeric CLin, // line strength scale factor
6332  const Numeric CWin, // line broadening scale factor
6333  const String &model,
6334  ConstVectorView f_grid,
6335  ConstVectorView abs_p,
6336  ConstVectorView abs_t,
6337  ConstVectorView vmr,
6338  const Verbosity &verbosity) {
6339  CREATE_OUT3;
6340 
6341  // REFERENCES:
6342  // LINE INTENSITIES FROM HITRAN92 (SELECTION THRESHOLD=
6343  // HALF OF CONTINUUM ABSORPTION AT 1000 MB).
6344  // WIDTHS MEASURED AT 22,183,380 GHZ, OTHERS CALCULATED:
6345  // H.J.LIEBE AND T.A.DILLON, J.CHEM.PHYS. V.50, PP.727-732 (1969) &
6346  // H.J.LIEBE ET AL., JQSRT V.9, PP. 31-47 (1969) (22GHz);
6347  // A.BAUER ET AL., JQSRT V.37, PP.531-539 (1987) &
6348  // ASA WORKSHOP (SEPT. 1989) (380GHz);
6349  // AND A.BAUER ET AL., JQSRT V.41, PP.49-54 (1989) (OTHER LINES).
6350  // AIR-BROADENED CONTINUUM BASED ON LIEBE & LAYTON, NTIA
6351  // REPORT 87-224 (1987); SELF-BROADENED CONTINUUM BASED ON
6352  // LIEBE ET AL, AGARD CONF. PROC. 542 (MAY 1993),
6353  // BUT READJUSTED FOR LINE SHAPE OF
6354  // CLOUGH et al, ATMOS. RESEARCH V.23, PP.229-241 (1989).
6355  //
6356  // Coefficients are from P. W. Rosenkranz., Radio Science, 33(4), 919, 1998
6357  // line frequencies [GHz]
6358  const Numeric PWRfl[15] = {22.2350800,
6359  183.3101170,
6360  321.2256400,
6361  325.1529190,
6362  380.1973720,
6363  439.1508120,
6364  443.0182950,
6365  448.0010750,
6366  470.8889470,
6367  474.6891270,
6368  488.4911330,
6369  556.9360020,
6370  620.7008070,
6371  752.0332270,
6372  916.1715820};
6373  // line intensities at 300K [Hz * cm2] (see Janssen Appendix to Chap.2 for this)
6374  const Numeric PWRs1[15] = {1.31e-14,
6375  2.273e-12,
6376  8.036e-14,
6377  2.694e-12,
6378  2.438e-11,
6379  2.179e-12,
6380  4.624e-13,
6381  2.562e-11,
6382  8.369e-13,
6383  3.263e-12,
6384  6.659e-13,
6385  1.531e-9,
6386  1.707e-11,
6387  1.011e-9,
6388  4.227e-11};
6389  // T coeff. of intensities [1]
6390  const Numeric PWRb2[15] = {2.144,
6391  0.668,
6392  6.179,
6393  1.541,
6394  1.048,
6395  3.595,
6396  5.048,
6397  1.405,
6398  3.597,
6399  2.379,
6400  2.852,
6401  0.159,
6402  2.391,
6403  0.396,
6404  1.441};
6405  // air-broadened width parameters at 300K [GHz/hPa]
6406  const Numeric PWRw3[15] = {0.00281,
6407  0.00281,
6408  0.00230,
6409  0.00278,
6410  0.00287,
6411  0.00210,
6412  0.00186,
6413  0.00263,
6414  0.00215,
6415  0.00236,
6416  0.00260,
6417  0.00321,
6418  0.00244,
6419  0.00306,
6420  0.00267};
6421  // T-exponent of air-broadening [1]
6422  const Numeric PWRx[15] = {0.69,
6423  0.64,
6424  0.67,
6425  0.68,
6426  0.54,
6427  0.63,
6428  0.60,
6429  0.66,
6430  0.66,
6431  0.65,
6432  0.69,
6433  0.69,
6434  0.71,
6435  0.68,
6436  0.70};
6437  // self-broadened width parameters at 300K [GHz/hPa]
6438  const Numeric PWRws[15] = {0.01349,
6439  0.01491,
6440  0.01080,
6441  0.01350,
6442  0.01541,
6443  0.00900,
6444  0.00788,
6445  0.01275,
6446  0.00983,
6447  0.01095,
6448  0.01313,
6449  0.01320,
6450  0.01140,
6451  0.01253,
6452  0.01275};
6453 
6454  // T-exponent of self-broadening [1]
6455  const Numeric PWRxs[15] = {0.61,
6456  0.85,
6457  0.54,
6458  0.74,
6459  0.89,
6460  0.52,
6461  0.50,
6462  0.67,
6463  0.65,
6464  0.64,
6465  0.72,
6466  1.00,
6467  0.68,
6468  0.84,
6469  0.78};
6470 
6471  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
6472  // standard values for the MPM87 model (P. W. Rosenkranz., Radio Science, 33(4), 919, 1998):
6473  const Numeric CC_PWR98 = 1.00000;
6474  const Numeric CL_PWR98 = 1.00000;
6475  const Numeric CW_PWR98 = 1.00000;
6476  // ---------------------------------------------------------------------------------------
6477 
6478  // select the parameter set (!!model dominates values!!):
6479  Numeric CC, CL, CW;
6480  if (model == "Rosenkranz") {
6481  CC = CC_PWR98;
6482  CL = CL_PWR98;
6483  CW = CW_PWR98;
6484  } else if (model == "RosenkranzLines") {
6485  CC = 0.000;
6486  CL = CL_PWR98;
6487  CW = CW_PWR98;
6488  } else if (model == "RosenkranzContinuum") {
6489  CC = CC_PWR98;
6490  CL = 0.000;
6491  CW = 0.000;
6492  } else if (model == "user") {
6493  CC = CCin;
6494  CL = CLin;
6495  CW = CWin;
6496  } else {
6497  ostringstream os;
6498  os << "H2O-PWR98: ERROR! Wrong model values given.\n"
6499  << "Valid models are: 'Rosenkranz', 'RosenkranzLines', 'RosenkranzContinuum', and 'user'"
6500  << '\n';
6501  throw runtime_error(os.str());
6502  }
6503  out3 << "H2O-PWR98: (model=" << model << ") parameter values in use:\n"
6504  << " CC = " << CC << "\n"
6505  << " CL = " << CL << "\n"
6506  << " CW = " << CW << "\n";
6507 
6508  const Index n_p = abs_p.nelem(); // Number of pressure levels
6509  const Index n_f = f_grid.nelem(); // Number of frequencies
6510 
6511  // Check that dimensions of abs_p, abs_t, and vmr agree:
6512  assert(n_p == abs_t.nelem());
6513  assert(n_p == vmr.nelem());
6514 
6515  // Check that dimensions of pxsec are consistent with n_f
6516  // and n_p. It should be [n_f,n_p]:
6517  assert(n_f == pxsec.nrows());
6518  assert(n_p == pxsec.ncols());
6519 
6520  // Loop pressure/temperature:
6521 #pragma omp parallel for if (!arts_omp_in_parallel() && \
6522  n_p >= arts_omp_get_max_threads())
6523  for (Index i = 0; i < n_p; ++i) {
6524  // here the total pressure is not multiplied by the H2O vmr for the
6525  // P_H2O calculation because we calculate pxsec and not abs: abs = vmr * pxsec
6526  Numeric pvap_dummy = Pa_to_hPa * abs_p[i];
6527  // water vapor partial pressure [hPa]
6528  Numeric pvap = Pa_to_hPa * abs_p[i] * vmr[i];
6529  // dry air partial pressure [hPa]
6530  Numeric pda = (Pa_to_hPa * abs_p[i]) - pvap;
6531  // Rosenkranz number density (Rosenkranz H2O mass density in [g/m³])
6532  // [g/m³] = [g*K / Pa*m³] * [Pa/K]
6533  // rho = (M_H2O / R) * (P_H2O / T)
6534  // rho = 2.1667 * abs_p * vmr / abs_t
6535  // den = 3.335e16 * rho
6536  // FIXME Numeric den = 3.335e16 * (2.1667 * abs_p[i] * vmr[i] / abs_t[i]);
6537  Numeric den_dummy = 3.335e16 * (2.1667 * abs_p[i] / abs_t[i]);
6538  // inverse relative temperature [1]
6539  Numeric ti = (300.0 / abs_t[i]);
6540  Numeric ti2 = pow(ti, (Numeric)2.5);
6541 
6542  // continuum term [Np/km/GHz2]
6543  Numeric con = CC * pvap_dummy * pow(ti, (Numeric)3.0) * 1.000e-9 *
6544  ((0.543 * pda) + (17.96 * pvap * pow(ti, (Numeric)4.5)));
6545 
6546  // Loop over input frequency
6547  for (Index s = 0; s < n_f; ++s) {
6548  // input frequency in [GHz]
6549  Numeric ff = f_grid[s] * Hz_to_GHz;
6550  // line contribution at position f
6551  Numeric sum = 0.000;
6552 
6553  // Loop over spectral lines
6554  for (Index l = 0; l < 15; l++) {
6555  Numeric width = (CW * PWRw3[l] * pda * pow(ti, PWRx[l])) +
6556  (PWRws[l] * pvap * pow(ti, PWRxs[l]));
6557  // Numeric width = CW * ( PWRw3[l] * pda * pow(ti, PWRx[l]) +
6558  // PWRws[l] * pvap * pow(ti, PWRxs[l]) );
6559  Numeric wsq = width * width;
6560  Numeric strength = CL * PWRs1[l] * ti2 * exp(PWRb2[l] * (1.0 - ti));
6561  // frequency differences
6562  Numeric df0 = ff - PWRfl[l];
6563  Numeric df1 = ff + PWRfl[l];
6564  // use Clough's definition of local line contribution
6565  Numeric base = width / (wsq + 562500.000);
6566  // positive and negative resonances
6567  Numeric res = 0.000;
6568  if (fabs(df0) < 750.0) res += width / (df0 * df0 + wsq) - base;
6569  if (fabs(df1) < 750.0) res += width / (df1 * df1 + wsq) - base;
6570  sum += strength * res * pow((ff / PWRfl[l]), (Numeric)2.0);
6571  }
6572  // line term [Np/km]
6573  Numeric absl = 0.3183e-4 * den_dummy * sum;
6574  // pxsec = abs/vmr [1/m] (Rosenkranz model in [Np/km])
6575  // 4.1907e-5 = 0.230259 * 0.1820 * 1.0e-3 (1/(10*log(e)) = 0.230259)
6576  pxsec(s, i) += 1.000e-3 * (absl + (con * ff * ff));
6577  }
6578  }
6579  return;
6580 }
6581 //
6582 // #################################################################################
6583 //
6585 
6611  const Numeric CCin, // continuum scale factor
6612  const Numeric CLin, // line strength scale factor
6613  const Numeric CWin, // line broadening scale factor
6614  const String &model,
6615  ConstVectorView f_grid,
6616  ConstVectorView abs_p,
6617  ConstVectorView abs_t,
6618  ConstVectorView vmr,
6619  const Verbosity &verbosity) {
6620  CREATE_OUT3;
6621 
6622  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
6623  // standard values for the CP98 model (S. L. Cruz-Pol et al., Radio Science, 33(5), 1319, 1998):
6624  const Numeric CC_CP98 = 1.2369; // +/- 0.155 !LARGE!
6625  const Numeric CL_CP98 = 1.0639; // +/- 0.016
6626  const Numeric CW_CP98 = 1.0658; // +/- 0.0096
6627  // ---------------------------------------------------------------------------------------
6628 
6629  // select the parameter set (!!model dominates values!!):
6630  Numeric CC, CL, CW;
6631  if (model == "CruzPol") {
6632  CC = CC_CP98;
6633  CL = CL_CP98;
6634  CW = CW_CP98;
6635  } else if (model == "CruzPolLine") {
6636  CC = 0.000;
6637  CL = CL_CP98;
6638  CW = CW_CP98;
6639  } else if (model == "CruzPolContinuum") {
6640  CC = CC_CP98;
6641  CL = 0.000;
6642  CW = 0.000;
6643  } else if (model == "user") {
6644  CC = CCin;
6645  CL = CLin;
6646  CW = CWin;
6647  } else {
6648  ostringstream os;
6649  os << "H2O-CP98: ERROR! Wrong model values given.\n"
6650  << "Valid models are: 'CruzPol', 'CruzPolLine', 'CruzPolContinuum', and 'user'"
6651  << "\n";
6652  throw runtime_error(os.str());
6653  }
6654  out3 << "H2O-CP98: (model=" << model << ") parameter values in use:\n"
6655  << " CC = " << CC << "\n"
6656  << " CL = " << CL << "\n"
6657  << " CW = " << CW << "\n";
6658 
6659  const Index n_p = abs_p.nelem(); // Number of pressure levels
6660  const Index n_f = f_grid.nelem(); // Number of frequencies
6661 
6662  // Check that dimensions of abs_p, abs_t, and vmr agree:
6663  assert(n_p == abs_t.nelem());
6664  assert(n_p == vmr.nelem());
6665 
6666  // Check that dimensions of pxsec are consistent with n_f
6667  // and n_p. It should be [n_f,n_p]:
6668  assert(n_f == pxsec.nrows());
6669  assert(n_p == pxsec.ncols());
6670 
6671  // Loop pressure/temperature (pressure in [hPa] therefore the factor 0.01)
6672  for (Index i = 0; i < n_p; ++i) {
6673  // calculate pxsec only if VMR(H2O) > VMRCalcLimit
6674  if (vmr[i] > VMRCalcLimit) {
6675  // relative inverse temperature [1]
6676  Numeric theta = (300.0 / abs_t[i]);
6677  // H2O partial pressure [hPa]
6678  Numeric pwv = Pa_to_hPa * abs_p[i] * vmr[i];
6679  // dry air partial pressure [hPa]
6680  Numeric pda = (Pa_to_hPa * abs_p[i]) - pwv;
6681  // line strength
6682  Numeric TL = CL * 0.0109 * pwv * pow(theta, (Numeric)3.5) *
6683  exp(2.143 * (1.0 - theta));
6684  // line broadening parameter [GHz]
6685  Numeric gam = CW * 0.002784 *
6686  ((pda * pow(theta, (Numeric)0.6)) +
6687  (4.80 * pwv * pow(theta, (Numeric)1.1)));
6688  // continuum term
6689  Numeric TC = CC * pwv * pow(theta, (Numeric)3.0) * 1.000e-7 *
6690  ((0.113 * pda) + (3.57 * pwv * pow(theta, (Numeric)7.5)));
6691 
6692  // Loop over input frequency
6693  for (Index s = 0; s < n_f; ++s) {
6694  // input frequency in [GHz]
6695  Numeric ff = f_grid[s] * Hz_to_GHz;
6696  Numeric TSf = MPMLineShapeFunction(gam, 22.235080, ff);
6697  // pxsec = abs/vmr [1/m] (Cruz-Pol model in [Np/km])
6698  pxsec(s, i) += 4.1907e-5 * ff * ((TL * TSf) + (ff * TC)) / vmr[i];
6699  }
6700  }
6701  }
6702  return;
6703 }
6704 //
6705 // #################################################################################
6707 
6731  const Numeric Cin,
6732  const Numeric xin,
6733  const String &model,
6734  ConstVectorView f_grid,
6735  ConstVectorView abs_p,
6736  ConstVectorView abs_t,
6737  ConstVectorView vmr,
6738  const Verbosity &verbosity) {
6739  CREATE_OUT3;
6740 
6741  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
6742  // standard values for the Rosenkranz model (Radio Science, 33(4), 919, 1998):
6743  const Numeric Cs_PWR = 1.796e-33; // [1/m / (Hz²*Pa²)]
6744  const Numeric xs_PWR = 4.5; // [1]
6745  // standard values for the Cruz-Pol model (Radio Science, 33(5), 1319, 1998):
6746  const Numeric Cs_CP = 1.851e-33; // [1/m / (Hz²*Pa²)]
6747  const Numeric xs_CP = 7.5; // [1]
6748  // standard values for the MPM89 model (Int. J. Inf. and Millim. Waves, 10(6), 1989, 631):
6749  const Numeric Cs_MPM89 = 1.500e-33; // [1/m / (Hz²*Pa²)]
6750  const Numeric xs_MPM89 = 7.5; // [1]
6751  // standard values for the MPM87 model (Radio Science, 20(5), 1985, 1069):
6752  const Numeric Cs_MPM87 = 1.500e-33; // [1/m / (Hz²*Pa²)]
6753  const Numeric xs_MPM87 = 7.5; // [1]
6754  // ---------------------------------------------------------------------------------------
6755 
6756  // select the parameter set (!!model goes for values!!):
6757  Numeric C, x;
6758  if (model == "Rosenkranz") {
6759  C = Cs_PWR;
6760  x = xs_PWR;
6761  } else if (model == "CruzPol") {
6762  C = Cs_CP;
6763  x = xs_CP;
6764  } else if (model == "MPM89") {
6765  C = Cs_MPM89;
6766  x = xs_MPM89;
6767  } else if (model == "MPM87") {
6768  C = Cs_MPM87;
6769  x = xs_MPM87;
6770  } else if (model == "user") {
6771  C = Cin;
6772  x = xin;
6773  } else {
6774  ostringstream os;
6775  os << "H2O-SelfContStandardType: ERROR! Wrong model values given.\n"
6776  << "allowed models are: 'Rosenkranz', 'CruzPol', 'MPM89', 'MPM87', 'user'"
6777  << '\n';
6778  throw runtime_error(os.str());
6779  }
6780  out3 << "H2O-SelfContStandardType: (model=" << model
6781  << ") parameter values in use:\n"
6782  << " C_s = " << C << "\n"
6783  << " x_s = " << x << "\n";
6784 
6785  const Index n_p = abs_p.nelem(); // Number of pressure levels
6786  const Index n_f = f_grid.nelem(); // Number of frequencies
6787 
6788  // Check that dimensions of abs_p, abs_t, and vmr agree:
6789  assert(n_p == abs_t.nelem());
6790  assert(n_p == vmr.nelem());
6791 
6792  // Check that dimensions of pxsec are consistent with n_f
6793  // and n_p. It should be [n_f,n_p]:
6794  assert(n_f == pxsec.nrows());
6795  assert(n_p == pxsec.ncols());
6796 
6797  // Loop over pressure/temperature grid:
6798  for (Index i = 0; i < n_p; ++i) {
6799  // Dummy scalar holds everything except the quadratic frequency dependence.
6800  // The second vmr of H2O will be multiplied at the stage of absorption
6801  // calculation: abs = vmr * pxsec.
6802  Numeric dummy = C * pow((Numeric)300. / abs_t[i], x + (Numeric)3.) *
6803  pow(abs_p[i], (Numeric)2.) * vmr[i];
6804 
6805  // Loop over frequency grid:
6806  for (Index s = 0; s < n_f; ++s) {
6807  pxsec(s, i) += dummy * pow(f_grid[s], (Numeric)2.);
6808  // cout << "pxsec(" << s << "," << i << "): " << pxsec(s,i) << "\n";
6809  }
6810  }
6811 }
6812 //
6813 // #################################################################################
6815 
6840  const Numeric Cin,
6841  const Numeric xin,
6842  const String &model,
6843  ConstVectorView f_grid,
6844  ConstVectorView abs_p,
6845  ConstVectorView abs_t,
6846  ConstVectorView vmr,
6847  const Verbosity &verbosity) {
6848  CREATE_OUT3;
6849 
6850  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
6851  // standard values for the Rosenkranz model (Radio Science, 33(4), 919, 1998):
6852  const Numeric Cf_PWR = 5.43e-35; // [1/m / (Hz²*Pa²)]
6853  const Numeric xf_PWR = 0.0; // [1]
6854  // standard values for the Cruz-Pol model (Radio Science, 33(5), 1319, 1998):
6855  const Numeric Cf_CP = 5.85e-35; // [1/m / (Hz²*Pa²)]
6856  const Numeric xf_CP = 0.0; // [1]
6857  // standard values for the MPM89 model (Int. J. Inf. and Millim. Waves, 10(6), 1989, 631):
6858  const Numeric Cf_MPM89 = 4.74e-35; // [1/m / (Hz²*Pa²)]
6859  const Numeric xf_MPM89 = 0.0; // [1]
6860  // standard values for the MPM87 model (Radio Science, 20(5), 1985, 1069):
6861  const Numeric Cf_MPM87 = 4.74e-35; // [1/m / (Hz²*Pa²)]
6862  const Numeric xf_MPM87 = 0.0; // [1]
6863  // ---------------------------------------------------------------------------------------
6864 
6865  // select the parameter set (!!model goes for values!!):
6866  Numeric C, x;
6867  if (model == "Rosenkranz") {
6868  C = Cf_PWR;
6869  x = xf_PWR;
6870  } else if (model == "CruzPol") {
6871  C = Cf_CP;
6872  x = xf_CP;
6873  } else if (model == "MPM89") {
6874  C = Cf_MPM89;
6875  x = xf_MPM89;
6876  } else if (model == "MPM87") {
6877  C = Cf_MPM87;
6878  x = xf_MPM87;
6879  } else if (model == "user") {
6880  C = Cin;
6881  x = xin;
6882  } else {
6883  ostringstream os;
6884  os << "H2O-ForeignContStandardType: ERROR! Wrong model values given.\n"
6885  << "allowed models are: 'Rosenkranz', 'CruzPol', 'MPM89', 'MPM87', 'user'"
6886  << '\n';
6887  throw runtime_error(os.str());
6888  }
6889  out3 << "H2O-ForeignContStandardType: (model=" << model
6890  << ") parameter values in use:\n"
6891  << " C_s = " << C << "\n"
6892  << " x_s = " << x << "\n";
6893 
6894  const Index n_p = abs_p.nelem(); // Number of pressure levels
6895  const Index n_f = f_grid.nelem(); // Number of frequencies
6896 
6897  // Check that dimensions of abs_p, abs_t, and vmr agree:
6898  assert(n_p == abs_t.nelem());
6899  assert(n_p == vmr.nelem());
6900 
6901  // Check that dimensions of pxsec are consistent with n_f
6902  // and n_p. It should be [n_f,n_p]:
6903  assert(n_f == pxsec.nrows());
6904  assert(n_p == pxsec.ncols());
6905 
6906  // Loop pressure/temperature:
6907  for (Index i = 0; i < n_p; ++i) {
6908  // Dry air partial pressure: p_dry := p_tot - p_h2o.
6909  Numeric pdry = abs_p[i] * (1.000e0 - vmr[i]);
6910  // Dummy scalar holds everything except the quadratic frequency dependence.
6911  // The vmr of H2O will be multiplied at the stage of absorption
6912  // calculation: abs = vmr * pxsec.
6913  Numeric dummy =
6914  C * pow((Numeric)300. / abs_t[i], x + (Numeric)3.) * abs_p[i] * pdry;
6915 
6916  // Loop frequency:
6917  for (Index s = 0; s < n_f; ++s) {
6918  pxsec(s, i) += dummy * pow(f_grid[s], (Numeric)2.);
6919  // cout << "pxsec(" << s << "," << i << "): " << pxsec(s,i) << "\n";
6920  }
6921  }
6922 }
6923 //
6924 //
6925 // #################################################################################
6927 
6951  const Numeric Cin,
6952  const Numeric xin,
6953  const String &model,
6954  ConstVectorView f_grid,
6955  ConstVectorView abs_p,
6956  ConstVectorView abs_t,
6957  ConstVectorView vmr,
6958  const Verbosity &verbosity) {
6959  CREATE_OUT3;
6960 
6961  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
6962  // standard values for Q. Ma and R. H. Tipping, J. Chem. Phys., 117(23), 10581, 2002:
6963  // the Cf value is originally given in dB/km/kPa^2/GHz^2.0389. the conversion factor is
6964  // then 1.0283E-28 to get arts units. Additionally the Cf value is divided by 1.08 to
6965  // get the Cf for air.
6966  const Numeric Cf_MaTipping = 1.8590e-35; // [1/m / (Hz²*Pa²)]
6967  const Numeric xf_MaTipping = 4.6019; // [1]
6968  // ---------------------------------------------------------------------------------------
6969 
6970  // select the parameter set (!!model goes for values!!):
6971  Numeric C, x;
6972  if (model == "MaTipping") {
6973  C = Cf_MaTipping;
6974  x = xf_MaTipping;
6975  } else if (model == "user") {
6976  C = Cin;
6977  x = xin;
6978  } else {
6979  ostringstream os;
6980  os << "H2O-MaTipping_H2O_foreign_continuum: ERROR! Wrong model values given.\n"
6981  << "allowed models are: 'MaTipping', 'user'" << '\n';
6982  throw runtime_error(os.str());
6983  }
6984  out3 << "H2O-MaTipping_H2O_foreign_continuum: (model=" << model
6985  << ") parameter values in use:\n"
6986  << " C_s = " << C << "\n"
6987  << " x_s = " << x << "\n";
6988 
6989  const Index n_p = abs_p.nelem(); // Number of pressure levels
6990  const Index n_f = f_grid.nelem(); // Number of frequencies
6991 
6992  // Check that dimensions of abs_p, abs_t, and vmr agree:
6993  assert(n_p == abs_t.nelem());
6994  assert(n_p == vmr.nelem());
6995 
6996  // Check that dimensions of pxsec are consistent with n_f
6997  // and n_p. It should be [n_f,n_p]:
6998  assert(n_f == pxsec.nrows());
6999  assert(n_p == pxsec.ncols());
7000 
7001  // Loop pressure/temperature:
7002  for (Index i = 0; i < n_p; ++i) {
7003  // Dry air partial pressure: p_dry := p_tot - p_h2o.
7004  Numeric pdry = abs_p[i] * (1.000e0 - vmr[i]);
7005  // Dummy scalar holds everything except the quadratic frequency dependence.
7006  // The vmr of H2O will be multiplied at the stage of absorption
7007  // calculation: abs = vmr * pxsec.
7008  Numeric dummy = C * pow((Numeric)300. / abs_t[i], x) * abs_p[i] * pdry;
7009 
7010  // Loop frequency:
7011  for (Index s = 0; s < n_f; ++s) {
7012  pxsec(s, i) += dummy * pow(f_grid[s], (Numeric)2.0389);
7013  // cout << "pxsec(" << s << "," << i << "): " << pxsec(s,i) << "\n";
7014  }
7015  }
7016 }
7017 //
7018 // #################################################################################
7019 
7020 // =================================================================================
7021 
7023  const Numeric /* V2A */,
7024  const Numeric DVA,
7025  ConstVectorView A,
7026  const Numeric VI) {
7027  // ----------------------------------------------------------------------
7028  // THIS SUBROUTINE INTERPOLATES THE A ARRAY STORED
7029  // FROM V1A TO V2A IN INCREMENTS OF DVA INTO XINT
7030  // ----------------------------------------------------------------------
7031 
7032  const Numeric ONEPL = 1.001; // original value given in F77 code
7033  // FIXME const Numeric ONEMI = 0.999; // original value given in F77 code
7034 
7035  //const Numeric ONEPL = 0.001; // modified value for C/C++ code
7036 
7037  Numeric RECDVA = 1.00e0 / DVA;
7038 
7039  int J = (int)((VI - V1A) * RECDVA + ONEPL);
7040  Numeric VJ = V1A + DVA * (Numeric)(J - 1);
7041  Numeric P = RECDVA * (VI - VJ);
7042  Numeric C = (3.00e0 - 2.00e0 * P) * P * P;
7043  Numeric B = 0.500e0 * P * (1.00e0 - P);
7044  Numeric B1 = B * (1.00e0 - P);
7045  Numeric B2 = B * P;
7046 
7047  Numeric xint = 0.;
7048  if (J - 1 > 0 && J + 2 < A.nelem()) {
7049  xint = -A[J - 1] * B1 + A[J] * (1.00e0 - C + B2) + A[J + 1] * (C + B1) -
7050  A[J + 2] * B2;
7051  }
7052 
7053  /*
7054  cout << (J-1) << " <-> " << (J+2)
7055  << ", V=" << VI << ", VJ=" << VJ << "\n";
7056  cout << "xint=" << xint << " " << A[J-1] << " " << A[J] << " " << A[J+1] << " " << A[J+2] << "\n";
7057  */
7058 
7059  return xint;
7060 }
7061 
7063  const Numeric /* V2A */,
7064  const Numeric DVA,
7065  const Numeric A[],
7066  const Index nA,
7067  const Numeric VI) {
7068  // ----------------------------------------------------------------------
7069  // THIS SUBROUTINE INTERPOLATES THE A ARRAY STORED
7070  // FROM V1A TO V2A IN INCREMENTS OF DVA INTO XINT
7071  // ----------------------------------------------------------------------
7072 
7073  const Numeric ONEPL = 1.001; // original value given in F77 code
7074  // FIXME const Numeric ONEMI = 0.999; // original value given in F77 code
7075 
7076  //const Numeric ONEPL = 0.001; // modified value for C/C++ code
7077 
7078  Numeric RECDVA = 1.00e0 / DVA;
7079 
7080  int J = (int)((VI - V1A) * RECDVA + ONEPL);
7081  Numeric VJ = V1A + DVA * (Numeric)(J - 1);
7082  Numeric P = RECDVA * (VI - VJ);
7083  Numeric C = (3.00e0 - 2.00e0 * P) * P * P;
7084  Numeric B = 0.500e0 * P * (1.00e0 - P);
7085  Numeric B1 = B * (1.00e0 - P);
7086  Numeric B2 = B * P;
7087 
7088  Numeric xint = 0.;
7089  if (J - 1 > 0 && J + 2 < nA) {
7090  xint = -A[J - 1] * B1 + A[J] * (1.00e0 - C + B2) + A[J + 1] * (C + B1) -
7091  A[J + 2] * B2;
7092  }
7093 
7094  /*
7095  cout << (J-1) << " <-> " << (J+2)
7096  << ", V=" << VI << ", VJ=" << VJ << "\n";
7097  cout << "xint=" << xint << " " << A[J-1] << " " << A[J] << " " << A[J+1] << " " << A[J+2] << "\n";
7098  */
7099 
7100  return xint;
7101 }
7102 
7103 // =================================================================================
7104 
7105 Numeric RADFN_FUN(const Numeric VI, const Numeric XKT) {
7106  // ---------------------------------------------------------------------- B18060
7107  // LAST MODIFICATION: 12 AUGUST 1991 B17940
7108  // B17950
7109  // IMPLEMENTATION: R.D. WORSHAM B17960
7110  // B17970
7111  // ALGORITHM REVISIONS: S.A. CLOUGH B17980
7112  // R.D. WORSHAM B17990
7113  // J.L. MONCET B18000
7114  // B18010
7115  // B18020
7116  // ATMOSPHERIC AND ENVIRONMENTAL RESEARCH INC. B18030
7117  // 840 MEMORIAL DRIVE, CAMBRIDGE, MA 02139 B18040
7118  // B18050
7119  // B18070
7120  // WORK SUPPORTED BY: THE ARM PROGRAM B18080
7121  // OFFICE OF ENERGY RESEARCH B18090
7122  // DEPARTMENT OF ENERGY B18100
7123  // B18110
7124  // B18120
7125  // SOURCE OF ORIGINAL ROUTINE: AFGL LINE-BY-LINE MODEL B18130
7126  // B18140
7127  // FASCOD3 B18150
7128  // B18160
7129  // ---------------------------------------------------------------------- B18060
7130  // B18170
7131  // IN THE SMALL XVIOKT REGION 0.5 IS REQUIRED
7132 
7133  Numeric XVI = VI;
7134  Numeric RADFN = 0.00e0;
7135 
7136  if (XKT > 0.0) {
7137  Numeric XVIOKT = XVI / XKT;
7138 
7139  if (XVIOKT <= 0.01e0) {
7140  RADFN = 0.500e0 * XVIOKT * XVI;
7141  } else if (XVIOKT <= 10.0e0) {
7142  Numeric EXPVKT = exp(-XVIOKT);
7143  RADFN = XVI * (1.00e0 - EXPVKT) / (1.00e0 + EXPVKT);
7144  } else {
7145  RADFN = XVI;
7146  }
7147  } else {
7148  RADFN = XVI;
7149  }
7150 
7151  return RADFN;
7152 }
7153 
7154 // =================================================================================
7155 
7157 
7182  const Numeric Cin,
7183  const String &model,
7184  ConstVectorView f_grid,
7185  ConstVectorView abs_p,
7186  ConstVectorView abs_t,
7187  ConstVectorView vmr,
7188  const Verbosity &verbosity) {
7189  CREATE_OUT3;
7190 
7191  // check the model name about consistency
7192  if ((model != "user") && (model != "CKD222")) {
7193  ostringstream os;
7194  os << "!!ERROR!!\n"
7195  << "CKDv2.2.2 H2O self continuum:\n"
7196  << "INPUT model name is: " << model << ".\n"
7197  << "VALID model names are user and CKD222\n";
7198  throw runtime_error(os.str());
7199  }
7200 
7201  // scaling factor of the self H2O cont. absorption
7202  Numeric ScalingFac = 1.0000e0;
7203  if (model == "user") {
7204  ScalingFac = Cin; // input scaling factor of calculated absorption
7205  }
7206 
7207  const Index n_p = abs_p.nelem(); // Number of pressure levels
7208  const Index n_f = f_grid.nelem(); // Number of frequencies
7209 
7210  // Check that dimensions of abs_p, abs_t, and vmr agree:
7211  assert(n_p == abs_t.nelem());
7212  assert(n_p == vmr.nelem());
7213 
7214  // Check that dimensions of pxsec are consistent with n_f
7215  // and n_p. It should be [n_f,n_p]:
7216  assert(n_f == pxsec.nrows());
7217  assert(n_p == pxsec.ncols());
7218 
7219  // ************************** CKD stuff ************************************
7220 
7221  const Numeric xLosmt = 2.686763e19; // [molecules/cm^3]
7222  // FIXME const Numeric T1 = 273.0e0;
7223  const Numeric TO = 296.0e0;
7224  const Numeric PO = 1013.0e0;
7225 
7226  // CKD2.2.2 specific self continuum correction function parameters
7227  const Numeric ALPHA2 = 200.000 * 200.000;
7228  const Numeric ALPHS2 = 120.000 * 120.000;
7229  const Numeric BETAS = 5.000e-06;
7230  const Numeric V0S = 1310.000;
7231  const Numeric FACTRS = 0.150;
7232 
7233  // These are self-continuum modification factors from 700-1200 cm-1
7234  const Numeric XFAC[51] = {
7235  1.00000, 1.01792, 1.03767, 1.05749, 1.07730, 1.09708, 1.10489, 1.11268,
7236  1.12047, 1.12822, 1.13597, 1.14367, 1.15135, 1.15904, 1.16669, 1.17431,
7237  1.18786, 1.20134, 1.21479, 1.22821, 1.24158, 1.26580, 1.28991, 1.28295,
7238  1.27600, 1.26896, 1.25550, 1.24213, 1.22879, 1.21560, 1.20230, 1.18162,
7239  1.16112, 1.14063, 1.12016, 1.10195, 1.09207, 1.08622, 1.08105, 1.07765,
7240  1.07398, 1.06620, 1.05791, 1.04905, 1.03976, 1.02981, 1.00985, 1.00000,
7241  1.00000, 1.00000, 1.00000};
7242 
7243  // wavenumber range where CKD H2O self continuum is valid
7244  const Numeric VABS_min = SL260_ckd_0_v1; // [cm^-1]
7245  const Numeric VABS_max = SL260_ckd_0_v2; // [cm^-1]
7246 
7247  // It is assumed here that f_grid is monotonically increasing with index!
7248  // In future change this return into a change of the loop over
7249  // the frequency f_grid. n_f_new < n_f
7250  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
7251  Numeric V2ABS = f_grid[n_f - 1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
7252  if ((V1ABS < VABS_min) || (V1ABS > VABS_max) || (V2ABS < VABS_min) ||
7253  (V2ABS > VABS_max)) {
7254  out3 << "WARNING:\n"
7255  << " CKD2.2.2 H2O self continuum:\n"
7256  << " input frequency vector exceeds range of model validity\n"
7257  << " " << SL296_ckd_0_v1 << "<->" << SL296_ckd_0_v2 << "cm^-1\n";
7258  }
7259 
7260  // ------------------- subroutine SL296/SL260 ----------------------------
7261 
7262  if (SL296_ckd_0_v1 != SL260_ckd_0_v1) {
7263  ostringstream os;
7264  os << "!!ERROR!!\n"
7265  << "CKD2.2.2 H2O self continuum:\n"
7266  << "parameter V1 not the same for different ref. temperatures.\n";
7267  throw runtime_error(os.str());
7268  }
7269  if (SL296_ckd_0_v2 != SL260_ckd_0_v2) {
7270  ostringstream os;
7271  os << "!!ERROR!!\n"
7272  << "CKD2.2.2 H2O self continuum:\n"
7273  << "parameter V2 not the same for different ref. temperatures.\n";
7274  throw runtime_error(os.str());
7275  }
7276  if (SL296_ckd_0_dv != SL260_ckd_0_dv) {
7277  ostringstream os;
7278  os << "!!ERROR!!\n"
7279  << "CKD2.2.2 H2O self continuum:\n"
7280  << "parameter DV not the same for different ref. temperatures.\n";
7281  throw runtime_error(os.str());
7282  }
7284  ostringstream os;
7285  os << "!!ERROR!!\n"
7286  << "CKD2.2.2 H2O self continuum:\n"
7287  << "parameter NPT not the same for different ref. temperatures.\n";
7288  throw runtime_error(os.str());
7289  }
7290 
7291  // retrieve the appropriate array sequence of the self continuum
7292  // arrays of the CKD model.
7293  Numeric DVC = SL296_ckd_0_dv;
7294  Numeric V1C = V1ABS - DVC;
7295  Numeric V2C = V2ABS + DVC;
7296 
7297  int I1 = (int)((V1C - SL296_ckd_0_v1) / SL296_ckd_0_dv);
7298  if (V1C < SL296_ckd_0_v1) I1 = -1;
7299  V1C = SL296_ckd_0_v1 + (SL296_ckd_0_dv * (Numeric)I1);
7300 
7301  int I2 = (int)((V2C - SL296_ckd_0_v1) / SL296_ckd_0_dv);
7302 
7303  int NPTC = I2 - I1 + 3;
7304  if (NPTC > SL296_ckd_0_npt) NPTC = SL296_ckd_0_npt + 1;
7305 
7306  V2C = V1C + SL296_ckd_0_dv * (Numeric)(NPTC - 1);
7307 
7308  if (NPTC < 1) {
7309  out3
7310  << "WARNING:\n"
7311  << " CKD2.2.2 H2O self continuum:\n"
7312  << " no elements of internal continuum coefficients could be found for the\n"
7313  << " input frequency range.\n"
7314  << " Leave the function without calculating the absorption.";
7315  return;
7316  }
7317 
7318  Numeric SH2OT0[NPTC + addF77fields]; // [cm^3/molecules]
7319  Numeric SH2OT1[NPTC + addF77fields]; // [cm^3/molecules]
7320 
7321  for (Index J = 1; J <= NPTC; ++J) {
7322  Index I = I1 + J;
7323  if ((I < 1) || (I > SL296_ckd_0_npt)) {
7324  SH2OT0[J] = 0.0e0; // at T=296 K
7325  SH2OT1[J] = 0.0e0; // at T=260 K
7326  } else {
7327  SH2OT0[J] = SL296_ckd_0[I]; // at T=296 K
7328  SH2OT1[J] = SL260_ckd_0[I]; // at T=260 K
7329  }
7330  }
7331 
7332  // ------------------- subroutine SL296/SL260 ----------------------------
7333 
7334  Numeric SFAC = 1.00e0;
7335  Numeric VS2 = 0.00e0;
7336  // FIXME Numeric VS4 = 0.00e0;
7337 
7338  // Loop pressure/temperature:
7339  for (Index i = 0; i < n_p; ++i) {
7340  // atmospheric state parameters
7341  Numeric Tave = abs_t[i]; // [K]
7342  Numeric Pave = (abs_p[i] * 1.000e-2); // [hPa]
7343  Numeric Patm = Pave / PO; // [1]
7344  Numeric vmrh2o = vmr[i]; // [1]
7345  // FIXME Numeric Ph2o = Patm * vmrh2o; // [1]
7346  // second vmr in abs_coefCalc multiplied
7347  Numeric Rh2o = Patm * (TO / Tave); // [1]
7348  Numeric Tfac = (Tave - TO) / (260.0 - TO); // [1]
7349  Numeric WTOT =
7350  xLosmt * (Pave / 1.013000e3) * (2.7300e2 / Tave); // [molecules/cm^2]
7351  Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
7352  Numeric XKT = Tave / 1.4387752e0; // = (T*k_B)/(h*c)
7353 
7354  // Molecular cross section calculated by CKD.
7355  // The cross sectionis calculated on the predefined
7356  // CKD wavenumber grid.
7357  Numeric k[NPTC + addF77fields]; // [1/cm]
7358  k[0] = 0.00e0; // not used array field
7359  for (Index J = 1; J <= NPTC; ++J) {
7360  Numeric VJ = V1C + (DVC * (Numeric)(J - 1));
7361  Numeric SH2O = 0.0e0;
7362  if (SH2OT0[J] > 0.0e0) {
7363  SH2O = SH2OT0[J] * pow((SH2OT1[J] / SH2OT0[J]), Tfac);
7364  SFAC = 1.00e0;
7365 
7366  if ((VJ >= 700.0e0) && (VJ <= 1200.0e0)) {
7367  int JFAC = (int)((VJ - 700.0e0) / 10.0e0 + 0.00001e0);
7368  if ((JFAC >= 0) && (JFAC <= 50)) SFAC = XFAC[JFAC];
7369  }
7370 
7371  // ---------------------------------------------------------
7372  // Correction to self continuum (1 SEPT 85); factor of
7373  // 0.78 at 1000 and .......
7374 
7375  VS2 = (VJ - V0S) * (VJ - V0S);
7376 
7377  SFAC = SFAC * (1.000e0 + 0.3000e0 * (1.000e4 / ((VJ * VJ) + 1.000e4))) *
7378  (1.000e0 -
7379  0.2333e0 * (ALPHA2 /
7380  ((VJ - 1050.000e0) * (VJ - 1050.000e0) + ALPHA2))) *
7381  (1.000e0 -
7382  FACTRS * (ALPHS2 / (VS2 + (BETAS * VS2 * VS2) + ALPHS2)));
7383 
7384  SH2O = SFAC * SH2O;
7385  }
7386 
7387  // CKD cross section with radiative field [1/cm]
7388  // the VMRH2O will be multiplied in abs_coefCalc, hence Rh2o does not contain
7389  // VMRH2O as multiplicative term
7390  k[J] = W1 * Rh2o * (SH2O * 1.000e-20) * RADFN_FUN(VJ, XKT); // [1]
7391  }
7392 
7393  // Loop input frequency array. The previously calculated cross section
7394  // has therefore to be interpolated on the input frequencies.
7395  for (Index s = 0; s < n_f; ++s) {
7396  // calculate the associated wave number (= 1/wavelength)
7397  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
7398  if ((V >= 0.000e0) && (V < SL296_ckd_0_v2)) {
7399  // arts cross section [1/m]
7400  // interpolate the k vector on the f_grid grid
7401  // The factor 100 comes from the conversion from 1/cm to 1/m for
7402  // the absorption coefficient
7403  pxsec(s, i) += ScalingFac * 1.000e2 *
7404  XINT_FUN(V1C, V2C, DVC, k, NPTC + addF77fields, V);
7405  }
7406  }
7407  }
7408 }
7409 
7410 // =================================================================================
7411 
7413 
7438  const Numeric Cin,
7439  const String &model,
7440  ConstVectorView f_grid,
7441  ConstVectorView abs_p,
7442  ConstVectorView abs_t,
7443  ConstVectorView vmr,
7444  const Verbosity &verbosity) {
7445  CREATE_OUT3;
7446 
7447  // check the model name about consistency
7448  if ((model != "user") && (model != "CKD222")) {
7449  ostringstream os;
7450  os << "!!ERROR!!\n"
7451  << "CKDv2.2.2 H2O foreign continuum:\n"
7452  << "INPUT model name is: " << model << ".\n"
7453  << "VALID model names are user and CKD222\n";
7454  throw runtime_error(os.str());
7455  }
7456 
7457  // scaling factor of the foreign H2O cont. absorption
7458  Numeric ScalingFac = 1.0000e0;
7459  if (model == "user") {
7460  ScalingFac = Cin; // input scaling factor of calculated absorption
7461  }
7462 
7463  const Index n_p = abs_p.nelem(); // Number of pressure levels
7464  const Index n_f = f_grid.nelem(); // Number of frequencies
7465 
7466  // Check that dimensions of abs_p, abs_t, and vmr agree:
7467  assert(n_p == abs_t.nelem());
7468  assert(n_p == vmr.nelem());
7469 
7470  // Check that dimensions of pxsec are consistent with n_f
7471  // and n_p. It should be [n_f,n_p]:
7472  assert(n_f == pxsec.nrows());
7473  assert(n_p == pxsec.ncols());
7474 
7475  // ************************** CKD stuff ************************************
7476 
7477  const Numeric xLosmt = 2.686763e19; // [molecules/cm^3]
7478  const Numeric T1 = 273.000e0;
7479  const Numeric TO = 296.000e0;
7480  const Numeric PO = 1013.000e0;
7481 
7482  // CKD2.2.2 foreign H2O continuum correction function parameters
7483  const Numeric HWSQF = 330.000e0 * 330.000e0;
7484  const Numeric BETAF = 8.000e-11;
7485  const Numeric V0F = 1130.000e0;
7486  const Numeric FACTRF = 0.970e0;
7487 
7488  const Numeric V0F2 = 1900.000e0;
7489  const Numeric HWSQF2 = 150.000e0 * 150.000e0;
7490  const Numeric BETA2 = 3.000e-6;
7491 
7492  // wavenumber range where CKD H2O foreign continuum is valid
7493  const Numeric VABS_min = FH2O_ckd_0_v1; // [cm^-1]
7494  const Numeric VABS_max = FH2O_ckd_0_v2; // [cm^-1]
7495 
7496  // It is assumed here that f_grid is monotonically increasing with index!
7497  // In future change this return into a change of the loop over
7498  // the frequency f_grid. n_f_new < n_f
7499  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
7500  Numeric V2ABS = f_grid[n_f - 1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
7501  if ((V1ABS < VABS_min) || (V1ABS > VABS_max) || (V2ABS < VABS_min) ||
7502  (V2ABS > VABS_max)) {
7503  out3 << "WARNING:\n"
7504  << " CKD2.2.2 H2O foreign continuum:\n"
7505  << " input frequency vector exceeds range of model validity\n"
7506  << " " << FH2O_ckd_0_v1 << "<->" << FH2O_ckd_0_v2 << "cm^-1\n";
7507  }
7508 
7509  // ---------------------- subroutine FRN296 ------------------------------
7510 
7511  // retrieve the appropriate array sequence of the foreign continuum
7512  // arrays of the CKD model.
7513  Numeric DVC = FH2O_ckd_0_dv;
7514  Numeric V1C = V1ABS - DVC;
7515  Numeric V2C = V2ABS + DVC;
7516 
7517  int I1 = (int)((V1C - FH2O_ckd_0_v1) / FH2O_ckd_0_dv);
7518  if (V1C < FH2O_ckd_0_v1) I1 = -1;
7519  V1C = FH2O_ckd_0_v1 + (FH2O_ckd_0_dv * (Numeric)I1);
7520 
7521  int I2 = (int)((V2C - FH2O_ckd_0_v1) / FH2O_ckd_0_dv);
7522 
7523  int NPTC = I2 - I1 + 3;
7524  if (NPTC > FH2O_ckd_0_npt) NPTC = FH2O_ckd_0_npt + 1;
7525 
7526  V2C = V1C + FH2O_ckd_0_dv * (Numeric)(NPTC - 1);
7527 
7528  if (NPTC < 1) {
7529  out3
7530  << "WARNING:\n"
7531  << " CKD2.2.2 H2O foreign continuum:\n"
7532  << " no elements of internal continuum coefficients could be found for the\n"
7533  << " input frequency range.\n"
7534  << " Leave the function without calculating the absorption.";
7535  return;
7536  }
7537 
7538  Numeric FH2OT0[NPTC + addF77fields]; // [cm^3/molecules]
7539 
7540  for (Index J = 1; J <= NPTC; ++J) {
7541  Index I = I1 + J;
7542  if ((I < 1) || (I > FH2O_ckd_0_npt)) {
7543  FH2OT0[J] = 0.0e0;
7544  } else {
7545  FH2OT0[J] = FH2O_ckd_0[I];
7546  }
7547  }
7548 
7549  // ---------------------- subroutine FRN296 ------------------------------
7550 
7551  Numeric VF2 = 0.000e0;
7552  Numeric VF4 = 0.000e0;
7553  Numeric VF6 = 0.000e0;
7554  Numeric FSCAL = 0.000e0;
7555  Numeric FH2O = 0.000e0;
7556 
7557  // Loop pressure/temperature:
7558  for (Index i = 0; i < n_p; ++i) {
7559  // atmospheric state parameters
7560  Numeric Tave = abs_t[i]; // [K]
7561  Numeric Pave = (abs_p[i] * 1.000e-2); // [hPa]
7562  Numeric vmrh2o = vmr[i]; // [1]
7563  // FIXME Numeric ph2o = vmrh2o * Pave; // [hPa]
7564  Numeric PFRGN =
7565  (Pave / PO) * (1.00000e0 - vmrh2o); // dry air pressure [hPa]
7566  Numeric RFRGN = PFRGN * (TO / Tave); // [hPa]
7567  Numeric WTOT = xLosmt * (Pave / PO) * (T1 / Tave); // [molecules/cm^2]
7568  // FIXME Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
7569  Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
7570 
7571  // Molecular cross section calculated by CKD.
7572  // The cross sectionis calculated on the predefined
7573  // CKD wavenumber grid.
7574  Numeric k[NPTC + addF77fields]; // [1/cm]
7575  k[0] = 0.00e0; // not used array field
7576  for (Index J = 1; J <= NPTC; ++J) {
7577  Numeric VJ = V1C + (DVC * (Numeric)(J - 1));
7578 
7579  // CORRECTION TO FOREIGN CONTINUUM
7580  VF2 = (VJ - V0F) * (VJ - V0F);
7581  VF6 = VF2 * VF2 * VF2;
7582  FSCAL = (1.000e0 - FACTRF * (HWSQF / (VF2 + (BETAF * VF6) + HWSQF)));
7583 
7584  VF2 = (VJ - V0F2) * (VJ - V0F2);
7585  VF4 = VF2 * VF2;
7586  FSCAL =
7587  FSCAL * (1.000e0 - 0.600e0 * (HWSQF2 / (VF2 + BETA2 * VF4 + HWSQF2)));
7588 
7589  FH2O = FH2OT0[J] * FSCAL;
7590 
7591  // CKD cross section with radiative field [1/cm]
7592  // The VMRH2O will be multiplied in abs_coefCalc, hence WTOT and not W1
7593  // as multiplicative term
7594  k[J] = WTOT * RFRGN * (FH2O * 1.000e-20) * RADFN_FUN(VJ, XKT);
7595  }
7596 
7597  // Loop input frequency array. The previously calculated cross section
7598  // has therefore to be interpolated on the input frequencies.
7599  for (Index s = 0; s < n_f; ++s) {
7600  // calculate the associated wave number (= 1/wavelength)
7601  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
7602  if ((V > 0.000e0) && (V < VABS_max)) {
7603  // arts CKD2.2.2 foreign H2O continuum cross section [1/m]
7604  // interpolate the k vector on the f_grid grid
7605  // The factor 100 comes from the conversion from (1/cm) to (1/m)
7606  // of the abs. coeff.
7607  pxsec(s, i) += ScalingFac * 1.000e2 *
7608  XINT_FUN(V1C, V2C, DVC, k, NPTC + addF77fields, V);
7609  }
7610  }
7611  }
7612 }
7613 
7614 // =================================================================================
7615 
7617 
7642  const Numeric Cin,
7643  const String &model,
7644  ConstVectorView f_grid,
7645  ConstVectorView abs_p,
7646  ConstVectorView abs_t,
7647  ConstVectorView vmr,
7648  const Verbosity &verbosity) {
7649  CREATE_OUT3;
7650 
7651  // check the model name about consistency
7652  if ((model != "user") && (model != "CKD242")) {
7653  ostringstream os;
7654  os << "!!ERROR!!\n"
7655  << "CKDv2.4.2 H2O self continuum:\n"
7656  << "INPUT model name is: " << model << ".\n"
7657  << "VALID model names are user and CKD242\n";
7658  throw runtime_error(os.str());
7659  }
7660 
7661  // scaling factor of the self H2O cont. absorption
7662  Numeric ScalingFac = 1.0000e0;
7663  if (model == "user") {
7664  ScalingFac = Cin; // input scaling factor of calculated absorption
7665  }
7666 
7667  const Index n_p = abs_p.nelem(); // Number of pressure levels
7668  const Index n_f = f_grid.nelem(); // Number of frequencies
7669 
7670  // Check that dimensions of abs_p, abs_t, and vmr agree:
7671  assert(n_p == abs_t.nelem());
7672  assert(n_p == vmr.nelem());
7673 
7674  // Check that dimensions of pxsec are consistent with n_f
7675  // and n_p. It should be [n_f,n_p]:
7676  assert(n_f == pxsec.nrows());
7677  assert(n_p == pxsec.ncols());
7678 
7679  // ************************** CKD stuff ************************************
7680 
7681  const Numeric xLosmt = 2.686763e19; // [molecules/cm^3]
7682  // FIXME const Numeric T1 = 273.0e0;
7683  const Numeric TO = 296.0e0;
7684  const Numeric PO = 1013.0e0;
7685 
7686  // CKD2.4.2 specific correction functions
7687  const Numeric V0S1 = 0.000e+00;
7688  const Numeric HWSQ1 = (1.000e+02 * 1.000e+02);
7689  const Numeric BETAS1 = 1.000e-04;
7690  const Numeric FACTRS1 = 0.688e+00;
7691 
7692  const Numeric V0S2 = 1.050e+03;
7693  const Numeric HWSQ2 = (2.000e+02 * 2.000e+02);
7694  const Numeric FACTRS2 = -0.2333e+00;
7695 
7696  const Numeric V0S3 = 1.310e+03;
7697  const Numeric HWSQ3 = (1.200e+02 * 1.200e+02);
7698  const Numeric BETAS3 = 5.000e-06;
7699  const Numeric FACTRS3 = -0.150e+00;
7700 
7701  const Numeric XFAC[51] = {
7702  1.00000, 1.01792, 1.03767, 1.05749, 1.07730, 1.09708, 1.10489, 1.11268,
7703  1.12047, 1.12822, 1.13597, 1.14367, 1.15135, 1.15904, 1.16669, 1.17431,
7704  1.18786, 1.20134, 1.21479, 1.22821, 1.24158, 1.26580, 1.28991, 1.28295,
7705  1.27600, 1.26896, 1.25550, 1.24213, 1.22879, 1.21560, 1.20230, 1.18162,
7706  1.16112, 1.14063, 1.12016, 1.10195, 1.09207, 1.08622, 1.08105, 1.07765,
7707  1.07398, 1.06620, 1.05791, 1.04905, 1.03976, 1.02981, 1.00985, 1.00000,
7708  1.00000, 1.00000, 1.00000};
7709 
7710  // wavenumber range where CKD H2O self continuum is valid
7711  const Numeric VABS_min = SL260_ckd_0_v1; // [cm^-1]
7712  const Numeric VABS_max = SL260_ckd_0_v2; // [cm^-1]
7713 
7714  // It is assumed here that f_grid is monotonically increasing with index!
7715  // In future change this return into a change of the loop over
7716  // the frequency f_grid. n_f_new < n_f
7717  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
7718  Numeric V2ABS = f_grid[n_f - 1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
7719  if ((V1ABS < VABS_min) || (V1ABS > VABS_max) || (V2ABS < VABS_min) ||
7720  (V2ABS > VABS_max)) {
7721  out3 << "WARNING:\n"
7722  << " CKD2.4.2 H2O self continuum:\n"
7723  << " input frequency vector exceeds range of model validity\n"
7724  << " " << SL296_ckd_0_v1 << "<->" << SL296_ckd_0_v2 << "cm^-1\n";
7725  }
7726 
7727  // ------------------- subroutine SL296/SL260 ----------------------------
7728 
7729  if (SL296_ckd_0_v1 != SL260_ckd_0_v1) {
7730  ostringstream os;
7731  os << "!!ERROR!!\n"
7732  << "CKD2.4.2 H2O self continuum:\n"
7733  << "parameter V1 not the same for different ref. temperatures.\n";
7734  throw runtime_error(os.str());
7735  }
7736  if (SL296_ckd_0_v2 != SL260_ckd_0_v2) {
7737  ostringstream os;
7738  os << "!!ERROR!!\n"
7739  << "CKD2.4.2 H2O self continuum:\n"
7740  << "parameter V2 not the same for different ref. temperatures.\n";
7741  throw runtime_error(os.str());
7742  }
7743  if (SL296_ckd_0_dv != SL260_ckd_0_dv) {
7744  ostringstream os;
7745  os << "!!ERROR!!\n"
7746  << "CKD2.4.2 H2O self continuum:\n"
7747  << "parameter DV not the same for different ref. temperatures.\n";
7748  throw runtime_error(os.str());
7749  }
7751  ostringstream os;
7752  os << "!!ERROR!!\n"
7753  << "CKD2.4.2 H2O self continuum:\n"
7754  << "parameter NPT not the same for different ref. temperatures.\n";
7755  throw runtime_error(os.str());
7756  }
7757 
7758  // retrieve the appropriate array sequence of the self continuum
7759  // arrays of the CKD model.
7760  Numeric DVC = SL296_ckd_0_dv;
7761  Numeric V1C = V1ABS - DVC;
7762  Numeric V2C = V2ABS + DVC;
7763 
7764  int I1 = (int)((V1C - SL296_ckd_0_v1) / SL296_ckd_0_dv);
7765  if (V1C < SL296_ckd_0_v1) I1 = -1;
7766  V1C = SL296_ckd_0_v1 + (SL296_ckd_0_dv * (Numeric)I1);
7767 
7768  int I2 = (int)((V2C - SL296_ckd_0_v1) / SL296_ckd_0_dv);
7769 
7770  int NPTC = I2 - I1 + 3;
7771  if (NPTC > SL296_ckd_0_npt) NPTC = SL296_ckd_0_npt + 1;
7772 
7773  V2C = V1C + SL296_ckd_0_dv * (Numeric)(NPTC - 1);
7774 
7775  if (NPTC < 1) {
7776  out3
7777  << "WARNING:\n"
7778  << " CKDv2.4.2 H2O self continuum:\n"
7779  << " no elements of internal continuum coefficients could be found for the\n"
7780  << " input frequency range.\n"
7781  << " Leave the function without calculating the absorption.";
7782  return;
7783  }
7784 
7785  Numeric SH2OT0[NPTC + addF77fields]; // [cm^3/molecules]
7786  Numeric SH2OT1[NPTC + addF77fields]; // [cm^3/molecules]
7787 
7788  for (Index J = 1; J <= NPTC; ++J) {
7789  Index I = I1 + J;
7790  if ((I < 1) || (I > SL296_ckd_0_npt)) {
7791  SH2OT0[J] = 0.0e0; // at T=296 K
7792  SH2OT1[J] = 0.0e0; // at T=260 K
7793  } else {
7794  SH2OT0[J] = SL296_ckd_0[I]; // at T=296 K
7795  SH2OT1[J] = SL260_ckd_0[I]; // at T=260 K
7796  }
7797  }
7798 
7799  // ------------------- subroutine SL296/SL260 ----------------------------
7800 
7801  Numeric SFAC = 1.00e0;
7802  Numeric VS2 = 0.00e0;
7803  Numeric VS4 = 0.00e0;
7804 
7805  // Loop pressure/temperature:
7806  for (Index i = 0; i < n_p; ++i) {
7807  // atmospheric state parameters
7808  Numeric Tave = abs_t[i]; // [K]
7809  Numeric Pave = (abs_p[i] * 1.000e-2); // [hPa]
7810  Numeric Patm = Pave / PO; // [1]
7811  Numeric vmrh2o = vmr[i]; // [1]
7812  // FIXME Numeric Ph2o = Patm * vmrh2o; // [1]
7813  // second vmr in abs_coefCalc multiplied
7814  Numeric Rh2o = Patm * (TO / Tave); // [1]
7815  Numeric Tfac = (Tave - TO) / (260.0 - TO); // [1]
7816  Numeric WTOT =
7817  xLosmt * (Pave / 1.013000e3) * (2.7300e2 / Tave); // [molecules/cm^2]
7818  Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
7819  Numeric XKT = Tave / 1.4387752e0; // = (T*k_B)/(h*c)
7820 
7821  // Molecular cross section calculated by CKD.
7822  // The cross sectionis calculated on the predefined
7823  // CKD wavenumber grid.
7824  Numeric k[NPTC + addF77fields]; // [1/cm]
7825  k[0] = 0.00e0; // not used array field
7826  for (Index J = 1; J <= NPTC; ++J) {
7827  Numeric VJ = V1C + (DVC * (Numeric)(J - 1));
7828  Numeric SH2O = 0.0e0;
7829  if (SH2OT0[J] > 0.0e0) {
7830  SH2O = SH2OT0[J] * pow((SH2OT1[J] / SH2OT0[J]), Tfac);
7831  SFAC = 1.00e0;
7832 
7833  if ((VJ >= 700.0e0) && (VJ <= 1200.0e0)) {
7834  int JFAC = (int)((VJ - 700.0e0) / 10.0e0 + 0.00001e0);
7835  if ((JFAC >= 0) && (JFAC <= 50)) SFAC = XFAC[JFAC];
7836  }
7837 
7838  // ---------------------------------------------------------
7839  // Correction to self continuum (1 SEPT 85); factor of
7840  // 0.78 at 1000 and .......
7841 
7842  VS2 = (VJ - V0S1) * (VJ - V0S1);
7843  VS4 = VS2 * VS2;
7844  SFAC =
7845  SFAC * (1.000e0 +
7846  FACTRS1 * (HWSQ1 / ((VJ * VJ) + (BETAS1 * VS4) + HWSQ1)));
7847 
7848  VS2 = (VJ - V0S2) * (VJ - V0S2);
7849  SFAC = SFAC * (1.000e0 + FACTRS2 * (HWSQ2 / (VS2 + HWSQ2)));
7850 
7851  VS2 = (VJ - V0S3) * (VJ - V0S3);
7852  VS4 = VS2 * VS2;
7853  SFAC = SFAC *
7854  (1.000e0 + FACTRS3 * (HWSQ3 / (VS2 + (BETAS3 * VS4) + HWSQ3)));
7855 
7856  SH2O = SFAC * SH2O;
7857  }
7858 
7859  // CKD cross section with radiative field [1/cm]
7860  // The VMRH2O will be multiplied in abs_coefCalc, hence Rh2o does not contain
7861  // VMRH2O as multiplicative term
7862  k[J] = W1 * Rh2o * (SH2O * 1.000e-20) * RADFN_FUN(VJ, XKT);
7863  }
7864 
7865  // Loop input frequency array. The previously calculated cross section
7866  // has therefore to be interpolated on the input frequencies.
7867  for (Index s = 0; s < n_f; ++s) {
7868  // calculate the associated wave number (= 1/wavelength)
7869  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
7870  if ((V >= 0.000e0) && (V < SL296_ckd_0_v2)) {
7871  // arts cross section [1/m]
7872  // interpolate the k vector on the f_grid grid
7873  // The factor 100 comes from the conversion from 1/cm to 1/m for
7874  // the absorption coefficient
7875  pxsec(s, i) += ScalingFac * 1.000e2 *
7876  XINT_FUN(V1C, V2C, DVC, k, NPTC + addF77fields, V);
7877  }
7878  }
7879  }
7880 }
7881 
7882 // =================================================================================
7883 
7885 
7910  const Numeric Cin,
7911  const String &model,
7912  ConstVectorView f_grid,
7913  ConstVectorView abs_p,
7914  ConstVectorView abs_t,
7915  ConstVectorView vmr,
7916  const Verbosity &verbosity) {
7917  CREATE_OUT3;
7918 
7919  // check the model name about consistency
7920  if ((model != "user") && (model != "CKD242")) {
7921  ostringstream os;
7922  os << "!!ERROR!!\n"
7923  << "CKDv2.4.2 H2O foreign continuum:\n"
7924  << "INPUT model name is: " << model << ".\n"
7925  << "VALID model names are user and CKD242\n";
7926  throw runtime_error(os.str());
7927  }
7928 
7929  // scaling factor of the foreign H2O cont. absorption
7930  Numeric ScalingFac = 1.0000e0;
7931  if (model == "user") {
7932  ScalingFac = Cin; // input scaling factor of calculated absorption
7933  }
7934 
7935  const Index n_p = abs_p.nelem(); // Number of pressure levels
7936  const Index n_f = f_grid.nelem(); // Number of frequencies
7937 
7938  // Check that dimensions of abs_p, abs_t, and vmr agree:
7939  assert(n_p == abs_t.nelem());
7940  assert(n_p == vmr.nelem());
7941 
7942  // Check that dimensions of pxsec are consistent with n_f
7943  // and n_p. It should be [n_f,n_p]:
7944  assert(n_f == pxsec.nrows());
7945  assert(n_p == pxsec.ncols());
7946 
7947  // ************************** CKD stuff ************************************
7948 
7949  const Numeric xLosmt = 2.686763e19; // [molecules/cm^3]
7950  const Numeric T1 = 273.0e0;
7951  const Numeric TO = 296.0e0;
7952  const Numeric PO = 1013.0e0;
7953 
7954  // CKD2.4.2 foreign H2O continuum correction function parameters
7955  const Numeric V0F1 = 350.000e0;
7956  const Numeric HWSQF1 = 200.000e0 * 200.000e0;
7957  const Numeric BETAF1 = 5.000e-9;
7958  const Numeric FACTRF1 = -0.700e0;
7959 
7960  const Numeric V0F1a = 630.000e0;
7961  const Numeric HWSQF1a = 65.000e0 * 65.000e0;
7962  const Numeric BETAF1a = 2.000e-08;
7963  const Numeric FACTRF1a = 0.750e0;
7964 
7965  const Numeric V0F2 = 1130.000e0;
7966  const Numeric HWSQF2 = 330.000e0 * 330.000e0;
7967  const Numeric BETAF2 = 8.000e-11;
7968  const Numeric FACTRF2 = -0.970e0;
7969 
7970  const Numeric V0F3 = 1975.000e0;
7971  const Numeric HWSQF3 = 250.000e0 * 250.000e0;
7972  const Numeric BETAF3 = 5.000e-06;
7973  const Numeric FACTRF3 = -0.650e0;
7974 
7975  // wavenumber range where CKD H2O foreign continuum is valid
7976  const Numeric VABS_min = FH2O_ckd_0_v1; // [cm^-1]
7977  const Numeric VABS_max = FH2O_ckd_0_v2; // [cm^-1]
7978 
7979  // It is assumed here that f_grid is monotonically increasing with index!
7980  // In future change this return into a change of the loop over
7981  // the frequency f_grid. n_f_new < n_f
7982  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
7983  Numeric V2ABS = f_grid[n_f - 1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
7984  if ((V1ABS < VABS_min) || (V1ABS > VABS_max) || (V2ABS < VABS_min) ||
7985  (V2ABS > VABS_max)) {
7986  out3 << "WARNING:\n"
7987  << " CKDv2.4.2 H2O foreign continuum:\n"
7988  << " input frequency vector exceeds range of model validity\n"
7989  << " " << FH2O_ckd_0_v1 << "<->" << FH2O_ckd_0_v2 << "cm^-1\n";
7990  }
7991 
7992  // ---------------------- subroutine FRN296 ------------------------------
7993 
7994  // retrieve the appropriate array sequence of the foreign continuum
7995  // arrays of the CKD model.
7996  Numeric DVC = FH2O_ckd_0_dv;
7997  Numeric V1C = V1ABS - DVC;
7998  Numeric V2C = V2ABS + DVC;
7999 
8000  int I1 = (int)((V1C - FH2O_ckd_0_v1) / FH2O_ckd_0_dv);
8001  if (V1C < FH2O_ckd_0_v1) I1 = -1;
8002  V1C = FH2O_ckd_0_v1 + (FH2O_ckd_0_dv * (Numeric)I1);
8003 
8004  int I2 = (int)((V2C - FH2O_ckd_0_v1) / FH2O_ckd_0_dv);
8005 
8006  int NPTC = I2 - I1 + 3;
8007  if (NPTC > FH2O_ckd_0_npt) NPTC = FH2O_ckd_0_npt + 1;
8008 
8009  V2C = V1C + FH2O_ckd_0_dv * (Numeric)(NPTC - 1);
8010 
8011  if (NPTC < 1) {
8012  out3
8013  << "WARNING:\n"
8014  << " CKDv2.4.2 H2O foreign continuum:\n"
8015  << " no elements of internal continuum coefficients could be found for the\n"
8016  << " input frequency range.\n"
8017  << " Leave the function without calculating the absorption.";
8018  return;
8019  }
8020 
8021  Numeric FH2OT0[NPTC + addF77fields]; // [cm^3/molecules]
8022 
8023  for (Index J = 1; J <= NPTC; ++J) {
8024  Index I = I1 + J;
8025  if ((I < 1) || (I > FH2O_ckd_0_npt)) {
8026  FH2OT0[J] = 0.0e0;
8027  } else {
8028  FH2OT0[J] = FH2O_ckd_0[I];
8029  }
8030  }
8031 
8032  // ---------------------- subroutine FRN296 ------------------------------
8033 
8034  Numeric VF2 = 0.000e0;
8035  Numeric VF4 = 0.000e0;
8036  Numeric VF6 = 0.000e0;
8037  Numeric FSCAL = 0.000e0;
8038  Numeric FH2O = 0.000e0;
8039 
8040  // Loop pressure/temperature:
8041  for (Index i = 0; i < n_p; ++i) {
8042  // atmospheric state parameters
8043  Numeric Tave = abs_t[i]; // [K]
8044  Numeric Pave = (abs_p[i] * 1.000e-2); // [hPa]
8045  Numeric vmrh2o = vmr[i]; // [1]
8046  // FIXME Numeric ph2o = vmrh2o * Pave; // [hPa]
8047  Numeric PFRGN =
8048  (Pave / PO) * (1.00000e0 - vmrh2o); // dry air pressure [hPa]
8049  Numeric RFRGN = PFRGN * (TO / Tave); // [hPa]
8050  Numeric WTOT = xLosmt * (Pave / PO) * (T1 / Tave); // [molecules/cm^2]
8051  // FIXME Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
8052  Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
8053 
8054  // Molecular cross section calculated by CKD.
8055  // The cross sectionis calculated on the predefined
8056  // CKD wavenumber grid.
8057  Numeric k[NPTC + addF77fields]; // [1/cm]
8058  k[0] = 0.00e0; // not used array field
8059  for (Index J = 1; J <= NPTC; ++J) {
8060  Numeric VJ = V1C + (DVC * (Numeric)(J - 1));
8061 
8062  // CORRECTION TO FOREIGN CONTINUUM
8063  VF2 = (VJ - V0F1) * (VJ - V0F1);
8064  VF6 = VF2 * VF2 * VF2;
8065  FSCAL = (1.000e0 + FACTRF1 * (HWSQF1 / (VF2 + (BETAF1 * VF6) + HWSQF1)));
8066 
8067  VF2 = (VJ - V0F1a) * (VJ - V0F1a);
8068  VF6 = VF2 * VF2 * VF2;
8069  FSCAL =
8070  FSCAL *
8071  (1.000e0 + FACTRF1a * (HWSQF1a / (VF2 + (BETAF1a * VF6) + HWSQF1a)));
8072 
8073  VF2 = (VJ - V0F2) * (VJ - V0F2);
8074  VF6 = VF2 * VF2 * VF2;
8075  FSCAL = FSCAL *
8076  (1.000e0 + FACTRF2 * (HWSQF2 / (VF2 + (BETAF2 * VF6) + HWSQF2)));
8077 
8078  VF2 = (VJ - V0F3) * (VJ - V0F3);
8079  VF4 = VF2 * VF2;
8080  FSCAL = FSCAL *
8081  (1.000e0 + FACTRF3 * (HWSQF3 / (VF2 + BETAF3 * VF4 + HWSQF3)));
8082 
8083  FH2O = FH2OT0[J] * FSCAL;
8084 
8085  // CKD cross section without radiative field
8086  // The VMRH2O will be multiplied in abs_coefCalc, hence WTOT and not W1
8087  // as multiplicative term
8088  k[J] = WTOT * RFRGN * (FH2O * 1.000e-20) * RADFN_FUN(VJ, XKT);
8089  }
8090 
8091  // Loop input frequency array. The previously calculated cross section
8092  // has therefore to be interpolated on the input frequencies.
8093  for (Index s = 0; s < n_f; ++s) {
8094  // calculate the associated wave number (= 1/wavelength)
8095  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8096  if ((V >= 0.000e0) && (V < VABS_max)) {
8097  // arts CKD2.4.2 foreign H2O continuum cross section [1/m]
8098  // interpolate the k vector on the f_grid grid
8099  pxsec(s, i) += ScalingFac * 1.000e2 *
8100  XINT_FUN(V1C, V2C, DVC, k, NPTC + addF77fields, V);
8101  }
8102  }
8103  }
8104 }
8105 
8106 // =================================================================================
8107 
8109 
8134  const Numeric Cin,
8135  const String &model,
8136  ConstVectorView f_grid,
8137  ConstVectorView abs_p,
8138  ConstVectorView abs_t,
8139  ConstVectorView vmr,
8140  const Verbosity &verbosity) {
8141  CREATE_OUT3;
8142 
8143  // check the model name about consistency
8144  if ((model != "user") && (model != "CKDMT100")) {
8145  ostringstream os;
8146  os << "!!ERROR!!\n"
8147  << "CKD_MT1.00 H2O self continuum:\n"
8148  << "INPUT model name is: " << model << ".\n"
8149  << "VALID model names are user and CKDMT100\n";
8150  throw runtime_error(os.str());
8151  }
8152 
8153  // scaling factor of the self H2O cont. absorption
8154  Numeric ScalingFac = 1.0000e0;
8155  if (model == "user") {
8156  ScalingFac = Cin; // input scaling factor of calculated absorption
8157  }
8158 
8159  const Index n_p = abs_p.nelem(); // Number of pressure levels
8160  const Index n_f = f_grid.nelem(); // Number of frequencies
8161 
8162  // Check that dimensions of abs_p, abs_t, and vmr agree:
8163  assert(n_p == abs_t.nelem());
8164  assert(n_p == vmr.nelem());
8165 
8166  // Check that dimensions of pxsec are consistent with n_f
8167  // and n_p. It should be [n_f,n_p]:
8168  assert(n_f == pxsec.nrows());
8169  assert(n_p == pxsec.ncols());
8170 
8171  // ************************** CKD stuff ************************************
8172 
8173  const Numeric xLosmt = 2.68675e19; // [molecules/cm^3]
8174  // FIXME const Numeric T1 = 273.000e0; // [K]
8175  const Numeric TO = 296.000e0; // [K]
8176  const Numeric PO = 1013.000e0; // [hPa]
8177 
8178  const Numeric XFACREV[15] = {1.003,
8179  1.009,
8180  1.015,
8181  1.023,
8182  1.029,
8183  1.033,
8184  1.037,
8185  1.039,
8186  1.040,
8187  1.046,
8188  1.036,
8189  1.027,
8190  1.01,
8191  1.002,
8192  1.00};
8193 
8194  // wavenumber range where CKD H2O self continuum is valid
8195  const Numeric VABS_min = -2.000e1; // [cm^-1]
8196  const Numeric VABS_max = 2.000e4; // [cm^-1]
8197 
8198  // It is assumed here that f_grid is monotonically increasing with index!
8199  // In future change this return into a change of the loop over
8200  // the frequency f_grid. n_f_new < n_f
8201  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8202  Numeric V2ABS = f_grid[n_f - 1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8203  if ((V1ABS < VABS_min) || (V1ABS > VABS_max) || (V2ABS < VABS_min) ||
8204  (V2ABS > VABS_max)) {
8205  out3 << "WARNING:\n"
8206  << " CKD_MT 1.00 H2O self continuum:\n"
8207  << " input frequency vector exceeds range of model validity\n"
8208  << " " << SL296_ckd_mt_100_v1 << "<->" << SL296_ckd_mt_100_v2
8209  << "cm^-1\n";
8210  }
8211 
8212  // ------------------- subroutine SL296/SL260 ----------------------------
8213 
8215  ostringstream os;
8216  os << "!!ERROR!!\n"
8217  << "CKD_MT 1.00 H2O self continuum:\n"
8218  << "parameter V1 not the same for different ref. temperatures.\n";
8219  throw runtime_error(os.str());
8220  }
8222  ostringstream os;
8223  os << "!!ERROR!!\n"
8224  << "CKD_MT 1.00 H2O self continuum:\n"
8225  << "parameter V2 not the same for different ref. temperatures.\n";
8226  throw runtime_error(os.str());
8227  }
8229  ostringstream os;
8230  os << "!!ERROR!!\n"
8231  << "CKD_MT 1.00 H2O self continuum:\n"
8232  << "parameter DV not the same for different ref. temperatures.\n";
8233  throw runtime_error(os.str());
8234  }
8236  ostringstream os;
8237  os << "!!ERROR!!\n"
8238  << "CKD_MT 1.00 H2O self continuum:\n"
8239  << "parameter NPT not the same for different ref. temperatures.\n";
8240  throw runtime_error(os.str());
8241  }
8242 
8243  // retrieve the appropriate array sequence of the self continuum
8244  // arrays of the CKD model.
8246  Numeric V1C = V1ABS - DVC;
8247  Numeric V2C = V2ABS + DVC;
8248 
8249  int I1 = (int)((V1C - SL296_ckd_mt_100_v1) / SL296_ckd_mt_100_dv);
8250  if (V1C < SL296_ckd_mt_100_v1) I1 = -1;
8252 
8253  int I2 = (int)((V2C - SL296_ckd_mt_100_v1) / SL296_ckd_mt_100_dv);
8254 
8255  int NPTC = I2 - I1 + 3;
8256  if (NPTC > SL296_ckd_mt_100_npt) NPTC = SL296_ckd_mt_100_npt + 1;
8257 
8258  V2C = V1C + SL296_ckd_mt_100_dv * (Numeric)(NPTC - 1);
8259 
8260  if (NPTC < 1) {
8261  out3
8262  << "WARNING:\n"
8263  << " CKD_MT 1.00 H2O self continuum:\n"
8264  << " no elements of internal continuum coefficients could be found for the\n"
8265  << " input frequency range.\n"
8266  << " Leave the function without calculating the absorption.";
8267  return;
8268  }
8269 
8270  Vector SH2OT0(NPTC + addF77fields, 0.); // [cm^3/molecules]
8271  Vector SH2OT1(NPTC + addF77fields, 0.); // [cm^3/molecules]
8272 
8273  for (Index J = 1; J <= NPTC; ++J) {
8274  Index I = I1 + J;
8275  if ((I > 0) && (I <= SL296_ckd_mt_100_npt)) {
8276  SH2OT0[J] = SL296_ckd_mt_100[I]; // at T=296 K
8277  SH2OT1[J] = SL260_ckd_mt_100[I]; // at T=260 K
8278  }
8279  }
8280 
8281  // ------------------- subroutine SL296/SL260 ----------------------------
8282 
8283  Numeric SFAC = 1.00e0;
8284 
8285  // Loop pressure/temperature:
8286  for (Index i = 0; i < n_p; ++i) {
8287  // atmospheric state parameters
8288  Numeric Tave = abs_t[i]; // [K]
8289  Numeric Pave = (abs_p[i] * 1.000e-2); // [hPa]
8290  Numeric Patm = Pave / PO; // [1]
8291  Numeric vmrh2o = vmr[i]; // [1]
8292  // FIXME Numeric Ph2o = Patm * vmrh2o; // [1]
8293  // second vmr in abs_coefCalc multiplied
8294  Numeric Rh2o = Patm * (TO / Tave); // [1]
8295  Numeric Tfac = (Tave - TO) / (260.0 - TO); // [1]
8296  Numeric WTOT =
8297  xLosmt * (Pave / 1.013000e3) * (2.7300e2 / Tave); // [molecules/cm^2]
8298  Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
8299  Numeric XKT = Tave / 1.4387752e0; // = (T*k_B)/(h*c)
8300 
8301  // Molecular cross section calculated by CKD.
8302  // The cross sectionis calculated on the predefined
8303  // CKD wavenumber grid.
8304  Vector k(NPTC + addF77fields, 0.); // [1/cm]
8305  for (Index J = 1; J <= NPTC; ++J) {
8306  Numeric VJ = V1C + (DVC * (Numeric)(J - 1));
8307  Numeric SH2O = 0.0e0;
8308  if (SH2OT0[J] > 0.0e0) {
8309  SH2O = SH2OT0[J] * pow((SH2OT1[J] / SH2OT0[J]), Tfac);
8310  SFAC = 1.00e0;
8311 
8312  if ((VJ >= 820.0e0) && (VJ <= 960.0e0)) {
8313  int JFAC = (int)((VJ - 820.0e0) / 10.0e0 + 0.00001e0);
8314  if ((JFAC >= 0) && (JFAC <= 14)) SFAC = XFACREV[JFAC];
8315  }
8316 
8317  SH2O = SFAC * SH2O;
8318  }
8319 
8320  // CKD cross section with radiative field [1/cm]
8321  // The VMRH2O will be multiplied in abs_coefCalc, hence Rh2o does not contain
8322  // VMRH2O as multiplicative term
8323  k[J] = W1 * Rh2o * (SH2O * 1.000e-20) * RADFN_FUN(VJ, XKT);
8324  }
8325 
8326  // Loop input frequency array. The previously calculated cross section
8327  // has therefore to be interpolated on the input frequencies.
8328  for (Index s = 0; s < n_f; ++s) {
8329  // calculate the associated wave number (= 1/wavelength)
8330  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8331  if ((V > 0.000e0) && (V < SL296_ckd_mt_100_v2)) {
8332  // arts cross section [1/m]
8333  // interpolate the k vector on the f_grid grid
8334  // The factor 100 comes from the conversion from 1/cm to 1/m for
8335  // the absorption coefficient
8336  pxsec(s, i) += ScalingFac * 1.000e2 * XINT_FUN(V1C, V2C, DVC, k, V);
8337  }
8338  }
8339  }
8340 }
8341 
8342 // =================================================================================
8343 
8345 
8370  const Numeric Cin,
8371  const String &model,
8372  ConstVectorView f_grid,
8373  ConstVectorView abs_p,
8374  ConstVectorView abs_t,
8375  ConstVectorView vmr,
8376  const Verbosity &verbosity) {
8377  CREATE_OUT3;
8378 
8379  // check the model name about consistency
8380  if ((model != "user") && (model != "CKDMT100")) {
8381  ostringstream os;
8382  os << "!!ERROR!!\n"
8383  << "CKD_MT1.00 H2O foreign continuum:\n"
8384  << "INPUT model name is: " << model << ".\n"
8385  << "VALID model names are user and CKDMT100\n";
8386  throw runtime_error(os.str());
8387  }
8388 
8389  // scaling factor of the foreign H2O cont. absorption
8390  Numeric ScalingFac = 1.0000e0;
8391  if (model == "user") {
8392  ScalingFac = Cin; // input scaling factor of calculated absorption
8393  }
8394 
8395  const Index n_p = abs_p.nelem(); // Number of pressure levels
8396  const Index n_f = f_grid.nelem(); // Number of frequencies
8397 
8398  // Check that dimensions of abs_p, abs_t, and vmr agree:
8399  assert(n_p == abs_t.nelem());
8400  assert(n_p == vmr.nelem());
8401 
8402  // Check that dimensions of pxsec are consistent with n_f
8403  // and n_p. It should be [n_f,n_p]:
8404  assert(n_f == pxsec.nrows());
8405  assert(n_p == pxsec.ncols());
8406 
8407  // ************************** CKD stuff ************************************
8408 
8409  const Numeric xLosmt = 2.68675e19; // [molecules/cm^3]
8410  const Numeric T1 = 273.000e0;
8411  const Numeric TO = 296.000e0;
8412  const Numeric PO = 1013.000e0;
8413 
8414  // wavenumber range where CKD H2O self continuum is valid
8415  const Numeric VABS_min = -2.000e1; // [cm^-1]
8416  const Numeric VABS_max = 2.000e4; // [cm^-1]
8417 
8418  // It is assumed here that f_grid is monotonically increasing with index!
8419  // In future change this return into a change of the loop over
8420  // the frequency f_grid. n_f_new < n_f
8421  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8422  Numeric V2ABS = f_grid[n_f - 1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8423  if ((V1ABS < VABS_min) || (V1ABS > VABS_max) || (V2ABS < VABS_min) ||
8424  (V2ABS > VABS_max)) {
8425  out3 << "WARNING:\n"
8426  << " CKD_MT 1.00 H2O foreign continuum:\n"
8427  << " input frequency vector exceeds range of model validity\n"
8428  << " " << FH2O_ckd_mt_100_v1 << "<->" << FH2O_ckd_mt_100_v2
8429  << "cm^-1\n";
8430  }
8431 
8432  // ---------------------- subroutine FRN296 ------------------------------
8433 
8434  // retrieve the appropriate array sequence of the foreign continuum
8435  // arrays of the CKD model.
8437  Numeric V1C = V1ABS - DVC;
8438  Numeric V2C = V2ABS + DVC;
8439 
8440  int I1 = (int)((V1C - FH2O_ckd_mt_100_v1) / FH2O_ckd_mt_100_dv);
8441  if (V1C < FH2O_ckd_mt_100_v1) I1 = -1;
8443 
8444  int I2 = (int)((V2C - FH2O_ckd_mt_100_v1) / FH2O_ckd_mt_100_dv);
8445 
8446  int NPTC = I2 - I1 + 3;
8447  if (NPTC > FH2O_ckd_mt_100_npt) NPTC = FH2O_ckd_mt_100_npt + 1;
8448 
8449  V2C = V1C + FH2O_ckd_mt_100_dv * (Numeric)(NPTC - 1);
8450 
8451  if (NPTC < 1) {
8452  out3
8453  << "WARNING:\n"
8454  << " CKD_MT 1.00 H2O foreign continuum:\n"
8455  << " no elements of internal continuum coefficients could be found for the\n"
8456  << " input frequency range.\n"
8457  << " Leave the function without calculating the absorption.";
8458  return;
8459  }
8460 
8461  Vector FH2OT0(NPTC + addF77fields, 0.); // [cm^3/molecules]
8462 
8463  for (Index J = 1; J <= NPTC; ++J) {
8464  Index I = I1 + J;
8465  if ((I > 0) && (I <= FH2O_ckd_mt_100_npt)) {
8466  FH2OT0[J] = FH2O_ckd_mt_100[I];
8467  }
8468  }
8469 
8470  // ---------------------- subroutine FRN296 ------------------------------
8471 
8472  // Loop pressure/temperature:
8473  for (Index i = 0; i < n_p; ++i) {
8474  // atmospheric state parameters
8475  Numeric Tave = abs_t[i]; // [K]
8476  Numeric Pave = (abs_p[i] * 1.000e-2); // [hPa]
8477  Numeric vmrh2o = vmr[i]; // [1]
8478  // FIXME Numeric ph2o = vmrh2o * Pave; // [hPa]
8479  Numeric PFRGN =
8480  (Pave / PO) * (1.00000e0 - vmrh2o); // dry air pressure [hPa]
8481  Numeric RFRGN = PFRGN * (TO / Tave); // [hPa]
8482  Numeric WTOT = xLosmt * (Pave / PO) * (T1 / Tave); // [molecules/cm^2]
8483  // FIXME Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
8484  Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
8485 
8486  // Molecular cross section calculated by CKD.
8487  // The cross sectionis calculated on the predefined
8488  // CKD wavenumber grid.
8489  Vector k(NPTC + addF77fields, 0.); // [1/cm]
8490  for (Index J = 1; J <= NPTC; ++J) {
8491  Numeric VJ = V1C + (DVC * (Numeric)(J - 1));
8492  Numeric FH2O = FH2OT0[J];
8493 
8494  // CKD cross section with radiative field [1/cm]
8495  // The VMRH2O will be multiplied in abs_coefCalc, hence WTOT and not W1
8496  // as multiplicative term
8497  k[J] = WTOT * RFRGN * (FH2O * 1.000e-20) * RADFN_FUN(VJ, XKT);
8498  }
8499 
8500  // Loop input frequency array. The previously calculated cross section
8501  // has therefore to be interpolated on the input frequencies.
8502  for (Index s = 0; s < n_f; ++s) {
8503  // calculate the associated wave number (= 1/wavelength)
8504  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8505  if ((V >= 0.000e0) && (V < VABS_max)) {
8506  // arts CKD_MT.100 cross section [1/m]
8507  // interpolate the k vector on the f_grid grid
8508  // The factor 100 comes from the conversion from (1/cm) to (1/m)
8509  // of the abs. coeff.
8510  pxsec(s, i) += ScalingFac * 1.000e2 * XINT_FUN(V1C, V2C, DVC, k, V);
8511  }
8512  }
8513  }
8514 }
8515 
8516 //
8517 // =================================================================================
8518 
8520 
8554  const Numeric Cin,
8555  const String &model,
8556  ConstVectorView f_grid,
8557  ConstVectorView abs_p,
8558  ConstVectorView abs_t,
8559  ConstVectorView vmr,
8560  const Verbosity &verbosity) {
8561  CREATE_OUT3;
8562 
8563  // check the model name about consistency
8564  if ((model != "user") && (model != "CKDMT252")) {
8565  ostringstream os;
8566  os << "!!ERROR!!\n"
8567  << "CKD_MT2.50 H2O self continuum:\n"
8568  << "INPUT model name is: " << model << ".\n"
8569  << "VALID model names are user and CKDMT252\n";
8570  throw runtime_error(os.str());
8571  }
8572 
8573  // scaling factor of the self H2O cont. absorption
8574  Numeric ScalingFac = 1.0000e0;
8575  if (model == "user") {
8576  ScalingFac = Cin; // input scaling factor of calculated absorption
8577  }
8578 
8579  const Index n_p = abs_p.nelem(); // Number of pressure levels
8580  const Index n_f = f_grid.nelem(); // Number of frequencies
8581 
8582  // Check that dimensions of abs_p, abs_t, and vmr agree:
8583  assert(n_p == abs_t.nelem());
8584  assert(n_p == vmr.nelem());
8585 
8586  // Check that dimensions of pxsec are consistent with n_f
8587  // and n_p. It should be [n_f,n_p]:
8588  assert(n_f == pxsec.nrows());
8589  assert(n_p == pxsec.ncols());
8590 
8591  // ************************** CKD stuff ************************************
8592 
8593  const Numeric xLosmt = 2.68675e19; // [molecules/cm^3]
8594  // FIXME const Numeric T1 = 273.000e0; // [K]
8595  const Numeric TO = 296.000e0; // [K]
8596  const Numeric PO = 1013.000e0; // [hPa]
8597 
8598  const Numeric XFACREV[15] = {1.003,
8599  1.009,
8600  1.015,
8601  1.023,
8602  1.029,
8603  1.033,
8604  1.037,
8605  1.039,
8606  1.040,
8607  1.046,
8608  1.036,
8609  1.027,
8610  1.01,
8611  1.002,
8612  1.00};
8613 
8614  const Numeric XFACREV1[120] = {
8615  1.000, 1.040, 1.080, 1.120, 1.160, 1.200, 1.240, 1.280, 1.318, 1.357,
8616  1.404, 1.453, 1.499, 1.553, 1.608, 1.674, 1.746, 1.818, 1.899, 1.984,
8617  2.078, 2.174, 2.276, 2.385, 2.502, 2.624, 2.747, 2.883, 3.018, 3.170,
8618  3.321, 3.473, 3.635, 3.803, 3.974, 4.144, 4.327, 4.500, 4.703, 4.887,
8619  5.102, 5.286, 5.498, 5.701, 5.935, 6.155, 6.405, 6.633, 6.892, 7.115,
8620  7.397, 7.650, 7.917, 8.177, 8.437, 8.704, 8.953, 9.192, 9.428, 9.644,
8621  9.821, 9.954, 10.11, 10.17, 10.21, 10.26, 10.29, 10.28, 10.26, 10.20,
8622  10.15, 10.16, 10.25, 10.02, 9.965, 10.01, 9.934, 9.847, 9.744, 9.566,
8623  9.436, 9.181, 8.872, 8.547, 8.155, 7.730, 7.261, 6.777, 6.271, 5.807,
8624  5.313, 4.845, 4.444, 4.074, 3.677, 3.362, 3.087, 2.826, 2.615, 2.385,
8625  2.238, 2.148, 1.979, 1.939, 1.773, 1.696, 1.642, 1.569, 1.510, 1.474,
8626  1.425, 1.375, 1.322, 1.272, 1.230, 1.180, 1.130, 1.080, 1.040, 1.000};
8627 
8628  // wavenumber range where CKD H2O self continuum is valid
8629  const Numeric VABS_min = -2.000e1; // [cm^-1]
8630  const Numeric VABS_max = 2.000e4; // [cm^-1]
8631 
8632  // It is assumed here that f_grid is monotonically increasing with index!
8633  // In future change this return into a change of the loop over
8634  // the frequency f_grid. n_f_new < n_f
8635  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8636  Numeric V2ABS = f_grid[n_f - 1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8637  if ((V1ABS < VABS_min) || (V1ABS > VABS_max) || (V2ABS < VABS_min) ||
8638  (V2ABS > VABS_max)) {
8639  out3 << "WARNING:\n"
8640  << " CKD_MT 1.00 H2O self continuum:\n"
8641  << " input frequency vector exceeds range of model validity\n"
8642  << " " << SL296_ckd_mt_100_v1 << "<->" << SL296_ckd_mt_100_v2
8643  << "cm^-1\n";
8644  }
8645 
8646  // ------------------- subroutine SL296/SL260 ----------------------------
8647 
8649  ostringstream os;
8650  os << "!!ERROR!!\n"
8651  << "CKD_MT 1.00 H2O self continuum:\n"
8652  << "parameter V1 not the same for different ref. temperatures.\n";
8653  throw runtime_error(os.str());
8654  }
8656  ostringstream os;
8657  os << "!!ERROR!!\n"
8658  << "CKD_MT 1.00 H2O self continuum:\n"
8659  << "parameter V2 not the same for different ref. temperatures.\n";
8660  throw runtime_error(os.str());
8661  }
8663  ostringstream os;
8664  os << "!!ERROR!!\n"
8665  << "CKD_MT 1.00 H2O self continuum:\n"
8666  << "parameter DV not the same for different ref. temperatures.\n";
8667  throw runtime_error(os.str());
8668  }
8670  ostringstream os;
8671  os << "!!ERROR!!\n"
8672  << "CKD_MT 1.00 H2O self continuum:\n"
8673  << "parameter NPT not the same for different ref. temperatures.\n";
8674  throw runtime_error(os.str());
8675  }
8676 
8677  // retrieve the appropriate array sequence of the self continuum
8678  // arrays of the CKD model.
8680  Numeric V1C = V1ABS - DVC;
8681  Numeric V2C = V2ABS + DVC;
8682 
8683  int I1 = (int)((V1C - SL296_ckd_mt_100_v1) / SL296_ckd_mt_100_dv);
8684  if (V1C < SL296_ckd_mt_100_v1) I1 = -1;
8686 
8687  int I2 = (int)((V2C - SL296_ckd_mt_100_v1) / SL296_ckd_mt_100_dv);
8688 
8689  int NPTC = I2 - I1 + 3;
8690  if (NPTC > SL296_ckd_mt_100_npt) NPTC = SL296_ckd_mt_100_npt + 1;
8691 
8692  V2C = V1C + SL296_ckd_mt_100_dv * (Numeric)(NPTC - 1);
8693 
8694  if (NPTC < 1) {
8695  out3
8696  << "WARNING:\n"
8697  << " CKD_MT 1.00 H2O self continuum:\n"
8698  << " no elements of internal continuum coefficients could be found for the\n"
8699  << " input frequency range.\n"
8700  << " Leave the function without calculating the absorption.";
8701  return;
8702  }
8703 
8704  Vector SH2OT0(NPTC + addF77fields, 0.); // [cm^3/molecules]
8705  Vector SH2OT1(NPTC + addF77fields, 0.); // [cm^3/molecules]
8706 
8707  for (Index J = 1; J <= NPTC; ++J) {
8708  Index I = I1 + J;
8709  if ((I > 0) && (I <= SL296_ckd_mt_100_npt)) {
8710  SH2OT0[J] = SL296_ckd_mt_100[I]; // at T=296 K
8711  SH2OT1[J] = SL260_ckd_mt_100[I]; // at T=260 K
8712  }
8713  }
8714 
8715  // ------------------- subroutine SL296/SL260 ----------------------------
8716 
8717  Numeric SFAC = 1.00e0;
8718 
8719  // Loop pressure/temperature:
8720  for (Index i = 0; i < n_p; ++i) {
8721  // atmospheric state parameters
8722  Numeric Tave = abs_t[i]; // [K]
8723  Numeric Pave = (abs_p[i] * 1.000e-2); // [hPa]
8724  Numeric Patm = Pave / PO; // [1]
8725  Numeric vmrh2o = vmr[i]; // [1]
8726  // FIXME Numeric Ph2o = Patm * vmrh2o; // [1]
8727  // second vmr in abs_coefCalc multiplied
8728  Numeric Rh2o = Patm * (TO / Tave); // [1]
8729  Numeric Tfac = (Tave - TO) / (260.0 - TO); // [1]
8730  Numeric WTOT =
8731  xLosmt * (Pave / 1.013000e3) * (2.7300e2 / Tave); // [molecules/cm^2]
8732  Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
8733  Numeric XKT = Tave / 1.4387752e0; // = (T*k_B)/(h*c)
8734 
8735  // Molecular cross section calculated by CKD.
8736  // The cross sectionis calculated on the predefined
8737  // CKD wavenumber grid.
8738  Vector k(NPTC + addF77fields, 0.); // [1/cm]
8739  for (Index J = 1; J <= NPTC; ++J) {
8740  Numeric VJ = V1C + (DVC * (Numeric)(J - 1));
8741  Numeric SH2O = 0.0e0;
8742  if (SH2OT0[J] > 0.0e0) {
8743  SH2O = SH2OT0[J] * pow((SH2OT1[J] / SH2OT0[J]), Tfac);
8744  SFAC = 1.00e0;
8745 
8746  if ((VJ >= 820.0e0) && (VJ <= 960.0e0)) {
8747  int JFAC = (int)((VJ - 820.0e0) / 10.0e0 + 0.00001e0);
8748  if ((JFAC >= 0) && (JFAC <= 14)) SFAC = XFACREV[JFAC];
8749  }
8750 
8751  // 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
8752 
8753  if ((VJ >= 2000.0e0) && (VJ <= 3190.0e0)) {
8754  int JFAC = (int)((VJ - 1990.0e0) / 10.0e0 + 0.00001e0);
8755  if ((JFAC >= 1) && (JFAC <= 120)) SFAC = XFACREV1[JFAC];
8756  }
8757  SFAC =
8758  SFAC *
8759  (1.000e0 +
8760  (0.25e0 /
8761  (1.000e0 +
8762  pow((VJ / 350.0),
8763  6.0)))); // CKD MT 2.4 (microwave and IR ARM data 0-600 cm-1)
8764 
8765  SH2O = SFAC * SH2O;
8766  }
8767 
8768  // CKD cross section with radiative field [1/cm]
8769  // The VMRH2O will be multiplied in abs_coefCalc, hence Rh2o does not contain
8770  // VMRH2O as multiplicative term
8771  k[J] = W1 * Rh2o * (SH2O * 1.000e-20) * RADFN_FUN(VJ, XKT);
8772  }
8773 
8774  // Loop input frequency array. The previously calculated cross section
8775  // has therefore to be interpolated on the input frequencies.
8776  for (Index s = 0; s < n_f; ++s) {
8777  // calculate the associated wave number (= 1/wavelength)
8778  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8779  if ((V > 0.000e0) && (V < SL296_ckd_mt_100_v2)) {
8780  // arts cross section [1/m]
8781  // interpolate the k vector on the f_grid grid
8782  // The factor 100 comes from the conversion from 1/cm to 1/m for
8783  // the absorption coefficient
8784  pxsec(s, i) += ScalingFac * 1.000e2 * XINT_FUN(V1C, V2C, DVC, k, V);
8785  }
8786  }
8787  }
8788 }
8789 
8790 // =================================================================================
8791 
8793 
8818  const Numeric Cin,
8819  const String &model,
8820  ConstVectorView f_grid,
8821  ConstVectorView abs_p,
8822  ConstVectorView abs_t,
8823  ConstVectorView vmr,
8824  const Verbosity &verbosity) {
8825  CREATE_OUT3;
8826 
8827  // check the model name about consistency
8828  if ((model != "user") && (model != "CKDMT252")) {
8829  ostringstream os;
8830  os << "!!ERROR!!\n"
8831  << "CKD_MT2.50 H2O foreign continuum:\n"
8832  << "INPUT model name is: " << model << ".\n"
8833  << "VALID model names are user and CKDMT252\n";
8834  throw runtime_error(os.str());
8835  }
8836 
8837  // scaling factor of the foreign H2O cont. absorption
8838  Numeric ScalingFac = 1.0000e0;
8839  if (model == "user") {
8840  ScalingFac = Cin; // input scaling factor of calculated absorption
8841  }
8842 
8843  const Index n_p = abs_p.nelem(); // Number of pressure levels
8844  const Index n_f = f_grid.nelem(); // Number of frequencies
8845 
8846  // Check that dimensions of abs_p, abs_t, and vmr agree:
8847  assert(n_p == abs_t.nelem());
8848  assert(n_p == vmr.nelem());
8849 
8850  // Check that dimensions of pxsec are consistent with n_f
8851  // and n_p. It should be [n_f,n_p]:
8852  assert(n_f == pxsec.nrows());
8853  assert(n_p == pxsec.ncols());
8854 
8855  // ************************** CKD stuff ************************************
8856 
8857  const Numeric xLosmt = 2.68675e19; // [molecules/cm^3]
8858  const Numeric T1 = 273.000e0;
8859  const Numeric TO = 296.000e0;
8860  const Numeric PO = 1013.000e0;
8861 
8862  // wavenumber range where CKD H2O self continuum is valid
8863  const Numeric VABS_min = -2.000e1; // [cm^-1]
8864  const Numeric VABS_max = 2.000e4; // [cm^-1]
8865 
8866  // It is assumed here that f_grid is monotonically increasing with index!
8867  // In future change this return into a change of the loop over
8868  // the frequency f_grid. n_f_new < n_f
8869  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8870  Numeric V2ABS = f_grid[n_f - 1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8871  if ((V1ABS < VABS_min) || (V1ABS > VABS_max) || (V2ABS < VABS_min) ||
8872  (V2ABS > VABS_max)) {
8873  out3 << "WARNING:\n"
8874  << " CKD_MT 2.50 H2O foreign continuum:\n"
8875  << " input frequency vector exceeds range of model validity\n"
8876  << " " << FH2O_ckd_mt_100_v1 << "<->" << FH2O_ckd_mt_100_v2
8877  << "cm^-1\n";
8878  }
8879 
8880  // ---------------------- subroutine FRN296 ------------------------------
8881 
8882  // retrieve the appropriate array sequence of the foreign continuum
8883  // arrays of the CKD model.
8885  Numeric V1C = V1ABS - DVC;
8886  Numeric V2C = V2ABS + DVC;
8887 
8888  int I1 = (int)((V1C - FH2O_ckd_mt_100_v1) / FH2O_ckd_mt_100_dv);
8889  if (V1C < FH2O_ckd_mt_100_v1) I1 = -1;
8891 
8892  int I2 = (int)((V2C - FH2O_ckd_mt_100_v1) / FH2O_ckd_mt_100_dv);
8893 
8894  int NPTC = I2 - I1 + 3;
8895  if (NPTC > FH2O_ckd_mt_100_npt) NPTC = FH2O_ckd_mt_100_npt + 1;
8896 
8897  V2C = V1C + FH2O_ckd_mt_100_dv * (Numeric)(NPTC - 1);
8898 
8899  if (NPTC < 1) {
8900  out3
8901  << "WARNING:\n"
8902  << " CKD_MT 2.50 H2O foreign continuum:\n"
8903  << " no elements of internal continuum coefficients could be found for the\n"
8904  << " input frequency range.\n"
8905  << " Leave the function without calculating the absorption.";
8906  return;
8907  }
8908 
8909  Vector FH2OT0(NPTC + addF77fields, 0.); // [cm^3/molecules]
8910 
8911  for (Index J = 1; J <= NPTC; ++J) {
8912  Index I = I1 + J;
8913  if ((I > 0) && (I <= FH2O_ckd_mt_100_npt)) {
8914  FH2OT0[J] = FH2O_ckd_mt_100[I];
8915  }
8916  }
8917 
8918  // ---------------------- subroutine FRN296 ------------------------------
8919 
8920  // Loop pressure/temperature:
8921  for (Index i = 0; i < n_p; ++i) {
8922  // atmospheric state parameters
8923  Numeric Tave = abs_t[i]; // [K]
8924  Numeric Pave = (abs_p[i] * 1.000e-2); // [hPa]
8925  Numeric vmrh2o = vmr[i]; // [1]
8926  // FIXME Numeric ph2o = vmrh2o * Pave; // [hPa]
8927  Numeric PFRGN =
8928  (Pave / PO) * (1.00000e0 - vmrh2o); // dry air pressure [hPa]
8929  Numeric RFRGN = PFRGN * (TO / Tave); // [hPa]
8930  Numeric WTOT = xLosmt * (Pave / PO) * (T1 / Tave); // [molecules/cm^2]
8931  // FIXME Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
8932  Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
8933 
8934  // Molecular cross section calculated by CKD.
8935  // The cross sectionis calculated on the predefined
8936  // CKD wavenumber grid.
8937  Vector k(NPTC + addF77fields, 0.); // [1/cm]
8938  for (Index J = 1; J <= NPTC; ++J) {
8939  Numeric VJ = V1C + (DVC * (Numeric)(J - 1));
8940  Numeric VDELSQ1 = pow((VJ - 255.67e0), 2e0);
8941  Numeric VDELmSQ1 = pow((VJ + 255.67e0), 2e0);
8942  Numeric VF1 = pow(((VJ - 255.67e0) / 57.83e0), 8e0);
8943  Numeric VmF1 = pow(((VJ + 255.67e0) / 57.83e0), 8e0);
8944  Numeric VF2 = pow(((VJ) / 57.83e0), 8e0);
8945 
8946  Numeric FSCAL =
8947  1.000e0 +
8948  (0.06e0 + (-0.42e0) * ((57600e0 / (VDELSQ1 + 57600e0 + VF1)) +
8949  (57600e0 / (VDELmSQ1 + 57600e0 + VmF1)))) /
8950  (1.000e0 + 0.3e0 * VF2);
8951 
8952  Numeric FH2O = FH2OT0[J] * FSCAL; //CKD MT 2.4
8953 
8954  // CKD cross section with radiative field [1/cm]
8955  // The VMRH2O will be multiplied in abs_coefCalc, hence WTOT and not W1
8956  // as multiplicative term
8957  k[J] = WTOT * RFRGN * (FH2O * 1.000e-20) * RADFN_FUN(VJ, XKT);
8958  }
8959 
8960  // Loop input frequency array. The previously calculated cross section
8961  // has therefore to be interpolated on the input frequencies.
8962  for (Index s = 0; s < n_f; ++s) {
8963  // calculate the associated wave number (= 1/wavelength)
8964  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8965  if ((V >= 0.000e0) && (V < VABS_max)) {
8966  // arts CKD_MT.100 cross section [1/m]
8967  // interpolate the k vector on the f_grid grid
8968  // The factor 100 comes from the conversion from (1/cm) to (1/m)
8969  // of the abs. coeff.
8970  pxsec(s, i) += ScalingFac * 1.000e2 * XINT_FUN(V1C, V2C, DVC, k, V);
8971  }
8972  }
8973  }
8974 }
8975 
8976 //
8977 
8978 //
8979 // =================================================================================
8980 
8982 
9020  const Numeric Cin,
9021  const String &model,
9022  ConstVectorView f_grid,
9023  ConstVectorView abs_p,
9024  ConstVectorView abs_t,
9025  ConstVectorView vmr,
9026  const Verbosity &verbosity) {
9027  CREATE_OUT3;
9028 
9029  // check the model name about consistency
9030  if ((model != "user") && (model != "CKDMT320")) {
9031  ostringstream os;
9032  os << "!!ERROR!!\n"
9033  << "CKD_MT3.20 H2O self continuum:\n"
9034  << "INPUT model name is: " << model << ".\n"
9035  << "VALID model names are user and CKDMT320\n";
9036  throw runtime_error(os.str());
9037  }
9038 
9039  // scaling factor of the self H2O cont. absorption
9040  Numeric ScalingFac = 1.0000e0;
9041  if (model == "user") {
9042  ScalingFac = Cin; // input scaling factor of calculated absorption
9043  }
9044 
9045  const Index n_p = abs_p.nelem(); // Number of pressure levels
9046  const Index n_f = f_grid.nelem(); // Number of frequencies
9047 
9048  // Check that dimensions of abs_p, abs_t, and vmr agree:
9049  assert(n_p == abs_t.nelem());
9050  assert(n_p == vmr.nelem());
9051 
9052  // Check that dimensions of pxsec are consistent with n_f
9053  // and n_p. It should be [n_f,n_p]:
9054  assert(n_f == pxsec.nrows());
9055  assert(n_p == pxsec.ncols());
9056 
9057  // ************************** CKD stuff ************************************
9058 
9059  const Numeric xLosmt = 2.68675e19; // [molecules/cm^3]
9060  // FIXME const Numeric T1 = 273.000e0; // [K]
9061  const Numeric TO = 296.000e0; // [K]
9062  const Numeric PO = 1013.000e0; // [hPa]
9063 
9064  const Numeric XFACREV[15] = {1.003,
9065  1.009,
9066  1.015,
9067  1.023,
9068  1.029,
9069  1.033,
9070  1.037,
9071  1.039,
9072  1.040,
9073  1.046,
9074  1.036,
9075  1.027,
9076  1.01,
9077  1.002,
9078  1.00};
9079 
9080  // wavenumber range where CKD H2O self continuum is valid
9081  const Numeric VABS_min = -2.000e1; // [cm^-1]
9082  const Numeric VABS_max = 2.000e4; // [cm^-1]
9083 
9084  // It is assumed here that f_grid is monotonically increasing with index!
9085  // In future change this return into a change of the loop over
9086  // the frequency f_grid. n_f_new < n_f
9087  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9088  Numeric V2ABS = f_grid[n_f - 1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9089  if ((V1ABS < VABS_min) || (V1ABS > VABS_max) || (V2ABS < VABS_min) ||
9090  (V2ABS > VABS_max)) {
9091  out3 << "WARNING:\n"
9092  << " CKD_MT 3.20 H2O self continuum:\n"
9093  << " input frequency vector exceeds range of model validity\n"
9094  << " " << SL296_ckd_mt_320_v1 << "<->" << SL296_ckd_mt_320_v2
9095  << "cm^-1\n";
9096  }
9097 
9098  // ------------------- subroutine SL296/SL260 ----------------------------
9099 
9101  ostringstream os;
9102  os << "!!ERROR!!\n"
9103  << "CKD_MT 3.20 H2O self continuum:\n"
9104  << "parameter V1 not the same for different ref. temperatures.\n";
9105  throw runtime_error(os.str());
9106  }
9108  ostringstream os;
9109  os << "!!ERROR!!\n"
9110  << "CKD_MT 3.20 H2O self continuum:\n"
9111  << "parameter V2 not the same for different ref. temperatures.\n";
9112  throw runtime_error(os.str());
9113  }
9115  ostringstream os;
9116  os << "!!ERROR!!\n"
9117  << "CKD_MT 3.20 H2O self continuum:\n"
9118  << "parameter DV not the same for different ref. temperatures.\n";
9119  throw runtime_error(os.str());
9120  }
9122  ostringstream os;
9123  os << "!!ERROR!!\n"
9124  << "CKD_MT 3.20 H2O self continuum:\n"
9125  << "parameter NPT not the same for different ref. temperatures.\n";
9126  throw runtime_error(os.str());
9127  }
9128 
9129  // retrieve the appropriate array sequence of the self continuum
9130  // arrays of the CKD model.
9132  Numeric V1C = V1ABS - DVC;
9133  Numeric V2C = V2ABS + DVC;
9134 
9135  int I1 = (int)((V1C - SL296_ckd_mt_320_v1) / SL296_ckd_mt_320_dv);
9136  if (V1C < SL296_ckd_mt_320_v1) I1 = -1;
9138 
9139  int I2 = (int)((V2C - SL296_ckd_mt_320_v1) / SL296_ckd_mt_320_dv);
9140 
9141  int NPTC = I2 - I1 + 3;
9142  if (NPTC > SL296_ckd_mt_320_npt) NPTC = SL296_ckd_mt_320_npt + 1;
9143 
9144  V2C = V1C + SL296_ckd_mt_320_dv * (Numeric)(NPTC - 1);
9145 
9146  if (NPTC < 1) {
9147  out3
9148  << "WARNING:\n"
9149  << " CKD_MT 3.20 H2O self continuum:\n"
9150  << " no elements of internal continuum coefficients could be found for the\n"
9151  << " input frequency range.\n"
9152  << " Leave the function without calculating the absorption.";
9153  return;
9154  }
9155 
9156  Vector SH2OT0(NPTC + addF77fields, 0.); // [cm^3/molecules]
9157  Vector SH2OT1(NPTC + addF77fields, 0.); // [cm^3/molecules]
9158 
9159  for (Index J = 1; J <= NPTC; ++J) {
9160  Index I = I1 + J;
9161  if ((I > 0) && (I <= SL296_ckd_mt_320_npt)) {
9162  SH2OT0[J] = SL296_ckd_mt_320[I]; // at T=296 K
9163  SH2OT1[J] = SL260_ckd_mt_320[I]; // at T=260 K
9164  }
9165  }
9166 
9167  // ------------------- subroutine SL296/SL260 ----------------------------
9168 
9169  Numeric SFAC = 1.00e0;
9170 
9171  // Loop pressure/temperature:
9172  for (Index i = 0; i < n_p; ++i) {
9173  // atmospheric state parameters
9174  Numeric Tave = abs_t[i]; // [K]
9175  Numeric Pave = (abs_p[i] * 1.000e-2); // [hPa]
9176  Numeric Patm = Pave / PO; // [1]
9177  Numeric vmrh2o = vmr[i]; // [1]
9178  // FIXME Numeric Ph2o = Patm * vmrh2o; // [1]
9179  // second vmr in abs_coefCalc multiplied
9180  Numeric Rh2o = Patm * (TO / Tave); // [1]
9181  Numeric Tfac = (Tave - TO) / (260.0 - TO); // [1]
9182  Numeric WTOT =
9183  xLosmt * (Pave / 1.013000e3) * (2.7300e2 / Tave); // [molecules/cm^2]
9184  Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
9185  Numeric XKT = Tave / 1.4387752e0; // = (T*k_B)/(h*c)
9186 
9187  // Molecular cross section calculated by CKD.
9188  // The cross sectionis calculated on the predefined
9189  // CKD wavenumber grid.
9190  Vector k(NPTC + addF77fields, 0.); // [1/cm]
9191  for (Index J = 1; J <= NPTC; ++J) {
9192  Numeric VJ = V1C + (DVC * (Numeric)(J - 1));
9193  Numeric SH2O = 0.0e0;
9194  if (SH2OT0[J] > 0.0e0) {
9195  SH2O = SH2OT0[J] * pow((SH2OT1[J] / SH2OT0[J]), Tfac);
9196  SFAC = 1.00e0;
9197 
9198  if ((VJ >= 820.0e0) && (VJ <= 960.0e0)) {
9199  int JFAC = (int)((VJ - 820.0e0) / 10.0e0 + 0.00001e0);
9200  if ((JFAC >= 0) && (JFAC <= 14)) SFAC = XFACREV[JFAC];
9201  }
9202 
9203  SFAC =
9204  SFAC *
9205  (1.000e0 +
9206  (0.25e0 /
9207  (1.000e0 +
9208  pow((VJ / 350.0),
9209  6.0)))); // CKD MT 2.4 (microwave and IR ARM data 0-600 cm-1)
9210 
9211  SFAC =
9212  SFAC *
9213  (1.000e0 +
9214  (0.08e0 /
9215  (1.000e0 +
9216  pow((VJ / 40.0),
9217  6.0)))); // CKD MT 3.0 correction from RHUBC-II Nov 2016 (Mlawer, E.J. et al. 2018)
9218 
9219  SH2O = SFAC * SH2O;
9220  }
9221 
9222  // CKD cross section with radiative field [1/cm]
9223  // The VMRH2O will be multiplied in abs_coefCalc, hence Rh2o does not contain
9224  // VMRH2O as multiplicative term
9225  k[J] = W1 * Rh2o * (SH2O * 1.000e-20) * RADFN_FUN(VJ, XKT);
9226  }
9227 
9228  // Loop input frequency array. The previously calculated cross section
9229  // has therefore to be interpolated on the input frequencies.
9230  for (Index s = 0; s < n_f; ++s) {
9231  // calculate the associated wave number (= 1/wavelength)
9232  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9233  if ((V > 0.000e0) && (V < SL296_ckd_mt_320_v2)) {
9234  // arts cross section [1/m]
9235  // interpolate the k vector on the f_grid grid
9236  // The factor 100 comes from the conversion from 1/cm to 1/m for
9237  // the absorption coefficient
9238  pxsec(s, i) += ScalingFac * 1.000e2 * XINT_FUN(V1C, V2C, DVC, k, V);
9239  }
9240  }
9241  }
9242 }
9243 
9244 // =================================================================================
9245 
9247 
9293  const Numeric Cin,
9294  const String &model,
9295  ConstVectorView f_grid,
9296  ConstVectorView abs_p,
9297  ConstVectorView abs_t,
9298  ConstVectorView vmr,
9299  const Verbosity &verbosity) {
9300  CREATE_OUT3;
9301 
9302  // check the model name about consistency
9303  if ((model != "user") && (model != "CKDMT320")) {
9304  ostringstream os;
9305  os << "!!ERROR!!\n"
9306  << "CKD_MT3.20 H2O foreign continuum:\n"
9307  << "INPUT model name is: " << model << ".\n"
9308  << "VALID model names are user and CKDMT320\n";
9309  throw runtime_error(os.str());
9310  }
9311 
9312  // scaling factor of the foreign H2O cont. absorption
9313  Numeric ScalingFac = 1.0000e0;
9314  if (model == "user") {
9315  ScalingFac = Cin; // input scaling factor of calculated absorption
9316  }
9317 
9318  const Index n_p = abs_p.nelem(); // Number of pressure levels
9319  const Index n_f = f_grid.nelem(); // Number of frequencies
9320 
9321  // Check that dimensions of abs_p, abs_t, and vmr agree:
9322  assert(n_p == abs_t.nelem());
9323  assert(n_p == vmr.nelem());
9324 
9325  // Check that dimensions of pxsec are consistent with n_f
9326  // and n_p. It should be [n_f,n_p]:
9327  assert(n_f == pxsec.nrows());
9328  assert(n_p == pxsec.ncols());
9329 
9330  // ************************** CKD stuff ************************************
9331 
9332  const Numeric xLosmt = 2.68675e19; // [molecules/cm^3]
9333  const Numeric T1 = 273.000e0;
9334  const Numeric TO = 296.000e0;
9335  const Numeric PO = 1013.000e0;
9336 
9337  // wavenumber range where CKD H2O self continuum is valid
9338  const Numeric VABS_min = -2.000e1; // [cm^-1]
9339  const Numeric VABS_max = 2.000e4; // [cm^-1]
9340 
9341  // Foreign correction factors from joint RHUBC-II/RHUBC-I
9342  // analysis (mt_ckd_3.0) for up to 600cm-1
9343  const Numeric XFAC_RHU[63] = {
9344  0.7810, 0.8330, 0.8500, 0.8330, 0.7810, 0.7540, 0.8180, 0.9140, 0.9980,
9345  0.9830, 0.9330, 0.8850, 0.8420, 0.8070, 0.8000, 0.8010, 0.8100, 0.8090,
9346  0.8320, 0.8180, 0.7970, 0.8240, 0.8640, 0.8830, 0.8830, 0.8470, 0.8380,
9347  0.8660, 0.9410, 1.0400, 1.0680, 1.1410, 1.0800, 1.0340, 1.1550, 1.0990,
9348  1.0270, 0.9500, 0.8950, 0.8150, 0.7830, 0.7700, 0.7000, 0.7650, 0.7750,
9349  0.8500, 0.9000, 0.9050, 0.9540, 1.0200, 1.0200, 1.0250, 1.0200, 1.1000,
9350  1.1250, 1.1200, 1.1110, 1.1370, 1.1600, 1.1490, 1.1070, 1.0640, 1.0450};
9351 
9352  // It is assumed here that f_grid is monotonically increasing with index!
9353  // In future change this return into a change of the loop over
9354  // the frequency f_grid. n_f_new < n_f
9355  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9356  Numeric V2ABS = f_grid[n_f - 1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9357  if ((V1ABS < VABS_min) || (V1ABS > VABS_max) || (V2ABS < VABS_min) ||
9358  (V2ABS > VABS_max)) {
9359  out3 << "WARNING:\n"
9360  << " CKD_MT 3.20 H2O foreign continuum:\n"
9361  << " input frequency vector exceeds range of model validity\n"
9362  << " " << FH2O_ckd_mt_320_v1 << "<->" << FH2O_ckd_mt_320_v2
9363  << "cm^-1\n";
9364  }
9365 
9366  // ---------------------- subroutine FRN296 ------------------------------
9367 
9368  // retrieve the appropriate array sequence of the foreign continuum
9369  // arrays of the CKD model.
9371  Numeric V1C = V1ABS - DVC;
9372  Numeric V2C = V2ABS + DVC;
9373 
9374  int I1 = (int)((V1C - FH2O_ckd_mt_320_v1) / FH2O_ckd_mt_320_dv);
9375  if (V1C < FH2O_ckd_mt_320_v1) I1 = -1;
9377 
9378  int I2 = (int)((V2C - FH2O_ckd_mt_320_v1) / FH2O_ckd_mt_320_dv);
9379 
9380  int NPTC = I2 - I1 + 3;
9381  if (NPTC > FH2O_ckd_mt_320_npt) NPTC = FH2O_ckd_mt_320_npt + 1;
9382 
9383  V2C = V1C + FH2O_ckd_mt_320_dv * (Numeric)(NPTC - 1);
9384 
9385  if (NPTC < 1) {
9386  out3
9387  << "WARNING:\n"
9388  << " CKD_MT 3.20 H2O foreign continuum:\n"
9389  << " no elements of internal continuum coefficients could be found for the\n"
9390  << " input frequency range.\n"
9391  << " Leave the function without calculating the absorption.";
9392  return;
9393  }
9394 
9395  Vector FH2OT0(NPTC + addF77fields, 0.); // [cm^3/molecules]
9396 
9397  for (Index J = 1; J <= NPTC; ++J) {
9398  Index I = I1 + J;
9399  if ((I > 0) && (I <= FH2O_ckd_mt_320_npt)) {
9400  FH2OT0[J] = FH2O_ckd_mt_320[I];
9401  }
9402  }
9403 
9404  // ---------------------- subroutine FRN296 ------------------------------
9405 
9406  // Loop pressure/temperature:
9407  for (Index i = 0; i < n_p; ++i) {
9408  // atmospheric state parameters
9409  Numeric Tave = abs_t[i]; // [K]
9410  Numeric Pave = (abs_p[i] * 1.000e-2); // [hPa]
9411  Numeric vmrh2o = vmr[i]; // [1]
9412  // FIXME Numeric ph2o = vmrh2o * Pave; // [hPa]
9413  Numeric PFRGN =
9414  (Pave / PO) * (1.00000e0 - vmrh2o); // dry air pressure [hPa]
9415  Numeric RFRGN = PFRGN * (TO / Tave); // [hPa]
9416  Numeric WTOT = xLosmt * (Pave / PO) * (T1 / Tave); // [molecules/cm^2]
9417  // FIXME Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
9418  Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
9419 
9420  // Molecular cross section calculated by CKD.
9421  // The cross sectionis calculated on the predefined
9422  // CKD wavenumber grid.
9423  Vector k(NPTC + addF77fields, 0.); // [1/cm]
9424  for (Index J = 1; J <= NPTC; ++J) {
9425  Numeric VJ = V1C + (DVC * (Numeric)(J - 1));
9426 
9427  int JFAC = 0;
9428  Numeric FSCAL = 0;
9429 
9430  if (VJ < 600e0) // New condition for MT-CKD 3.2
9431  {
9432  // Scaling factor below 600cm-1 based on RHUBC-II campaign
9433  JFAC = (int)((VJ + 10e0) / 10e0 + 0.00001e0);
9434  FSCAL = XFAC_RHU[JFAC];
9435  } else // same as from version 2.4 apart from the 630e0 in the VF2 equation
9436  {
9437  Numeric VDELSQ1 = pow((VJ - 255.67e0), 2e0);
9438  Numeric VDELmSQ1 = pow((VJ + 255.67e0), 2e0);
9439  Numeric VF1 = pow(((VJ - 255.67e0) / 57.83e0), 8e0);
9440  Numeric VmF1 = pow(((VJ + 255.67e0) / 57.83e0), 8e0);
9441  // Numeric VF2 = pow( ((VJ)/57.83e0), 8e0); // previous VF2 equation
9442  Numeric VF2 = pow(
9443  ((VJ) / 630e0),
9444  8e0); // the 630e0 factor is different from previous versions of VF2 equation
9445 
9446  FSCAL =
9447  1.000e0 +
9448  (0.06e0 + (-0.42e0) * ((57600e0 / (VDELSQ1 + 57600e0 + VF1)) +
9449  (57600e0 / (VDELmSQ1 + 57600e0 + VmF1)))) /
9450  (1.000e0 + 0.3e0 * VF2);
9451  }
9452 
9453  Numeric FH2O = FH2OT0[J] * FSCAL;
9454 
9455  // CKD cross section with radiative field [1/cm]
9456  // The VMRH2O will be multiplied in abs_coefCalc, hence WTOT and not W1
9457  // as multiplicative term
9458  k[J] = WTOT * RFRGN * (FH2O * 1.000e-20) * RADFN_FUN(VJ, XKT);
9459  }
9460 
9461  // Loop input frequency array. The previously calculated cross section
9462  // has therefore to be interpolated on the input frequencies.
9463  for (Index s = 0; s < n_f; ++s) {
9464  // calculate the associated wave number (= 1/wavelength)
9465  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9466  if ((V >= 0.000e0) && (V < VABS_max)) {
9467  // arts CKD_MT.100 cross section [1/m]
9468  // interpolate the k vector on the f_grid grid
9469  // The factor 100 comes from the conversion from (1/cm) to (1/m)
9470  // of the abs. coeff.
9471  pxsec(s, i) += ScalingFac * 1.000e2 * XINT_FUN(V1C, V2C, DVC, k, V);
9472  }
9473  }
9474  }
9475 }
9476 
9477 // ===========END WATER VAPOUR MODELS==============================================
9478 
9479 // =================================================================================
9480 
9482 
9507  const Numeric Cin,
9508  const String &model,
9509  ConstVectorView f_grid,
9510  ConstVectorView abs_p,
9511  ConstVectorView abs_t _U_,
9512  ConstVectorView vmr _U_,
9513  const Verbosity &verbosity) {
9514  CREATE_OUT3;
9515 
9516  // check the model name about consistency
9517  if ((model != "user") && (model != "CKD241")) {
9518  ostringstream os;
9519  os << "!!ERROR!!\n"
9520  << "CKDv2.4.1 CO2 continuum:\n"
9521  << "INPUT model name is: " << model << ".\n"
9522  << "VALID model names are user and CKD241\n";
9523  throw runtime_error(os.str());
9524  }
9525 
9526  // scaling factor of the CO2 absorption
9527  Numeric ScalingFac = 0.0000e0;
9528  if (model == "user") {
9529  ScalingFac = Cin; // input scaling factor of calculated absorption
9530  } else {
9531  ScalingFac = 1.0000e0;
9532  }
9533 
9534  const Index n_p = abs_p.nelem(); // Number of pressure levels
9535  const Index n_f = f_grid.nelem(); // Number of frequencies
9536 
9537  // Check that dimensions of abs_p, abs_t, and vmr agree:
9538  assert(n_p == abs_t.nelem());
9539  assert(n_p == vmr.nelem());
9540 
9541  // Check that dimensions of pxsec are consistent with n_f
9542  // and n_p. It should be [n_f,n_p]:
9543  assert(n_f == pxsec.nrows());
9544  assert(n_p == pxsec.ncols());
9545 
9546  // ************************** CKD stuff ************************************
9547 
9548  const Numeric xLosmt = 2.686763e19; // [molecules/cm^3]
9549  const Numeric T1 = 273.0e0;
9550  const Numeric TO = 296.0e0;
9551  const Numeric PO = 1013.0e0;
9552 
9553  // wavenumber range where CKD CO2 continuum is valid
9554  const Numeric VABS_min = -2.000e1; // [cm^-1]
9555  const Numeric VABS_max = 1.000e4; // [cm^-1]
9556 
9557  // It is assumed here that f_grid is monotonically increasing with index!
9558  // In future change this return into a change of the loop over
9559  // the frequency f_grid. n_f_new < n_f
9560  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9561  Numeric V2ABS = f_grid[n_f - 1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9562  if ((V1ABS < VABS_min) || (V1ABS > VABS_max) || (V2ABS < VABS_min) ||
9563  (V2ABS > VABS_max)) {
9564  out3 << "WARNING:\n"
9565  << " CKDv2.4.1 CO2 continuum:\n"
9566  << " input frequency vector exceeds range of model validity\n"
9567  << " " << FCO2_ckd_mt_100_v1 << "<->" << FCO2_ckd_mt_100_v2
9568  << "cm^-1\n";
9569  }
9570 
9571  // ---------------------- subroutine FRNCO2 ------------------------------
9572 
9573  // retrieve the appropriate array sequence of the CO2 continuum
9574  // arrays of the CKD model.
9576  Numeric V1C = V1ABS - DVC;
9577  Numeric V2C = V2ABS + DVC;
9578 
9579  int I1 = (int)((V1C - FCO2_ckd_mt_100_v1) / FCO2_ckd_mt_100_dv);
9580  if (V1C < FCO2_ckd_mt_100_v1) I1 = -1;
9582 
9583  int I2 = (int)((V2C - FCO2_ckd_mt_100_v1) / FCO2_ckd_mt_100_dv);
9584 
9585  int NPTC = I2 - I1 + 3;
9586  if (NPTC > FCO2_ckd_mt_100_npt) NPTC = FCO2_ckd_mt_100_npt + 1;
9587 
9588  V2C = V1C + FCO2_ckd_mt_100_dv * (Numeric)(NPTC - 1);
9589 
9590  if (NPTC < 1) {
9591  out3
9592  << "WARNING:\n"
9593  << " CKDv2.4.1 CO2 continuum:\n"
9594  << " no elements of internal continuum coefficients could be found for the\n"
9595  << " input frequency range.\n"
9596  << " Leave the function without calculating the absorption.";
9597  return;
9598  }
9599 
9600  Numeric FCO2T0[NPTC + addF77fields]; // [cm^3/molecules]
9601 
9602  for (Index J = 1; J <= NPTC; ++J) {
9603  Index I = I1 + J;
9604  if ((I < 1) || (I > FCO2_ckd_mt_100_npt)) {
9605  FCO2T0[J] = 0.0e0;
9606  } else {
9607  FCO2T0[J] = FCO2_ckd_mt_100[I];
9608  }
9609  }
9610 
9611  // ---------------------- subroutine FRNCO2 ------------------------------
9612 
9613  // Loop pressure/temperature:
9614  for (Index i = 0; i < n_p; ++i) {
9615  Numeric Tave = abs_t[i]; // [K]
9616  Numeric Pave = (abs_p[i] * 1.000e-2); // [hPa]
9617  // FIXME Numeric vmrco2 = vmr[i]; // [1]
9618  Numeric Rhoave = (Pave / PO) * (TO / Tave); // [hPa]
9619  Numeric WTOT = xLosmt * (Pave / PO) * (T1 / Tave); // [molecules/cm^2]
9620  Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
9621 
9622  // Molecular cross section calculated by CKD.
9623  // The cross sectionis calculated on the predefined
9624  // CKD wavenumber grid.
9625  Numeric k[NPTC + addF77fields]; // [1/cm]
9626  k[0] = 0.00e0; // not used array field
9627  for (Index J = 1; J <= NPTC; ++J) {
9628  Numeric VJ = V1C + (DVC * (Numeric)(J - 1));
9629  Numeric FCO2 = FCO2T0[J];
9630 
9631  // CKD cross section times number density with radiative field [1]
9632  // the VMRCO2 will be multiplied in abs_coefCalc
9633  k[J] = ((WTOT * Rhoave) * (FCO2 * 1.000e-20) * RADFN_FUN(VJ, XKT));
9634  }
9635 
9636  // Loop input frequency array. The previously calculated cross section
9637  // has therefore to be interpolated on the input frequencies.
9638  for (Index s = 0; s < n_f; ++s) {
9639  // calculate the associated wave number (= 1/wavelength)
9640  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9641  if ((V > 0.000e0) && (V < FCO2_ckd_mt_100_v2)) {
9642  // arts cross section [1/m]
9643  // interpolate the k vector on the f_grid grid
9644  pxsec(s, i) += ScalingFac * 1.000e2 *
9645  XINT_FUN(V1C, V2C, DVC, k, NPTC + addF77fields, V);
9646  }
9647  }
9648  }
9649 }
9650 
9651 // =================================================================================
9652 
9654 
9679  const Numeric Cin,
9680  const String &model,
9681  ConstVectorView f_grid,
9682  ConstVectorView abs_p,
9683  ConstVectorView abs_t,
9684  ConstVectorView vmr _U_,
9685  const Verbosity &verbosity) {
9686  CREATE_OUT3;
9687 
9688  // check the model name about consistency
9689  if ((model != "user") && (model != "CKDMT100")) {
9690  ostringstream os;
9691  os << "!!ERROR!!\n"
9692  << "CKD_MT.1.00 CO2 continuum:\n"
9693  << "INPUT model name is: " << model << ".\n"
9694  << "VALID model names are user and CKDMT100\n";
9695  throw runtime_error(os.str());
9696  }
9697 
9698  // scaling factor of the CO2 absorption
9699  Numeric ScalingFac = 0.0000e0;
9700  if (model == "user") {
9701  ScalingFac = Cin; // input scaling factor of calculated absorption
9702  } else {
9703  ScalingFac = 1.0000e0;
9704  }
9705 
9706  const Index n_p = abs_p.nelem(); // Number of pressure levels
9707  const Index n_f = f_grid.nelem(); // Number of frequencies
9708 
9709  // Check that dimensions of abs_p, abs_t, and vmr agree:
9710  assert(n_p == abs_t.nelem());
9711  assert(n_p == vmr.nelem());
9712 
9713  // Check that dimensions of pxsec are consistent with n_f
9714  // and n_p. It should be [n_f,n_p]:
9715  assert(n_f == pxsec.nrows());
9716  assert(n_p == pxsec.ncols());
9717 
9718  // ************************** CKD stuff ************************************
9719 
9720  const Numeric xLosmt = 2.686763e19; // [molecules/cm^3]
9721  const Numeric T1 = 273.0e0;
9722  const Numeric TO = 296.0e0;
9723  const Numeric PO = 1013.0e0;
9724 
9725  // wavenumber range where CKD CO2 continuum is valid
9726  const Numeric VABS_min = FCO2_ckd_mt_100_v1; // [cm^-1]
9727  const Numeric VABS_max = FCO2_ckd_mt_100_v2; // [cm^-1]
9728 
9729  // It is assumed here that f_grid is monotonically increasing with index!
9730  // In future change this return into a change of the loop over
9731  // the frequency f_grid. n_f_new < n_f
9732  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9733  Numeric V2ABS = f_grid[n_f - 1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9734  if ((V1ABS < VABS_min) || (V1ABS > VABS_max) || (V2ABS < VABS_min) ||
9735  (V2ABS > VABS_max)) {
9736  out3 << "WARNING:\n"
9737  << " CKD_MT 1.00 CO2 continuum:\n"
9738  << " input frequency vector exceeds range of model validity\n"
9739  << " " << FCO2_ckd_mt_100_v1 << "<->" << FCO2_ckd_mt_100_v2
9740  << "cm^-1\n";
9741  }
9742 
9743  // ---------------------- subroutine FRNCO2 ------------------------------
9744 
9745  // retrieve the appropriate array sequence of the CO2 continuum
9746  // arrays of the CKD model.
9748  Numeric V1C = V1ABS - DVC;
9749  Numeric V2C = V2ABS + DVC;
9750 
9751  int I1 = (int)((V1C - FCO2_ckd_mt_100_v1) / FCO2_ckd_mt_100_dv);
9752  if (V1C < FCO2_ckd_mt_100_v1) I1 = -1;
9754 
9755  int I2 = (int)((V2C - FCO2_ckd_mt_100_v1) / FCO2_ckd_mt_100_dv);
9756 
9757  int NPTC = I2 - I1 + 3;
9758  if (NPTC > FCO2_ckd_mt_100_npt) NPTC = FCO2_ckd_mt_100_npt + 1;
9759 
9760  V2C = V1C + FCO2_ckd_mt_100_dv * (Numeric)(NPTC - 1);
9761 
9762  if (NPTC < 1) {
9763  out3
9764  << "WARNING:\n"
9765  << " CKD_MT 1.00 CO2 continuum:\n"
9766  << " no elements of internal continuum coefficients could be found for the\n"
9767  << " input frequency range.\n"
9768  << " Leave the function without calculating the absorption.";
9769  return;
9770  }
9771 
9772  Vector FCO2T0(NPTC + addF77fields, 0.); // [cm^3/molecules]
9773 
9774  for (Index J = 1; J <= NPTC; ++J) {
9775  Index I = I1 + J;
9776  if ((I > 0) && (I <= FCO2_ckd_mt_100_npt)) {
9777  FCO2T0[J] = FCO2_ckd_mt_100[I];
9778  }
9779  }
9780 
9781  // ---------------------- subroutine FRNCO2 ------------------------------
9782 
9783  // Loop pressure/temperature:
9784  for (Index i = 0; i < n_p; ++i) {
9785  Numeric Tave = abs_t[i]; // [K]
9786  Numeric Pave = (abs_p[i] * 1.000e-2); // [hPa]
9787  // FIXME Numeric vmrco2 = vmr[i]; // [1]
9788  Numeric Rhoave = (Pave / PO) * (TO / Tave); // [hPa]
9789  Numeric WTOT = xLosmt * (Pave / PO) * (T1 / Tave); // [molecules/cm^2]
9790  Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
9791 
9792  // Molecular cross section calculated by CKD.
9793  // The cross sectionis calculated on the predefined
9794  // CKD wavenumber grid.
9795  Vector k(NPTC + addF77fields, 0.); // [1/cm]
9796  for (Index J = 1; J <= NPTC; ++J) {
9797  Numeric VJ = V1C + (DVC * (Numeric)(J - 1));
9798  Numeric FCO2 = FCO2T0[J];
9799 
9800  // continuum has been increased in the nu2 band by a factor of 7
9801  if ((VJ > 500.0e0) && (VJ < 900.0e0)) {
9802  FCO2 = 7.000e0 * FCO2;
9803  }
9804 
9805  // CKD cross section times number density with radiative field [1]
9806  // the VMRCO2 will be multiplied in abs_coefCalc
9807  k[J] = ((WTOT * Rhoave) * (FCO2 * 1.000e-20) * RADFN_FUN(VJ, XKT));
9808  }
9809 
9810  // Loop input frequency array. The previously calculated cross section
9811  // has therefore to be interpolated on the input frequencies.
9812  for (Index s = 0; s < n_f; ++s) {
9813  // calculate the associated wave number (= 1/wavelength)
9814  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9815  if ((V > 0.000e0) && (V < FCO2_ckd_mt_100_v2)) {
9816  // arts cross section [1/m]
9817  // interpolate the k vector on the f_grid grid
9818  pxsec(s, i) += ScalingFac * 1.000e2 * XINT_FUN(V1C, V2C, DVC, k, V);
9819  }
9820  }
9821  }
9822 }
9823 // =================================================================================
9824 
9826 
9851  const Numeric Cin,
9852  const String &model,
9853  ConstVectorView f_grid,
9854  ConstVectorView abs_p,
9855  ConstVectorView abs_t,
9856  ConstVectorView vmr _U_,
9857  const Verbosity &verbosity) {
9858  CREATE_OUT3;
9859 
9860  // check the model name about consistency
9861  if ((model != "user") && (model != "CKDMT252")) {
9862  ostringstream os;
9863  os << "!!ERROR!!\n"
9864  << "CKD_MT.2.50 CO2 continuum:\n"
9865  << "INPUT model name is: " << model << ".\n"
9866  << "VALID model names are user and CKDMT252\n";
9867  throw runtime_error(os.str());
9868  }
9869 
9870  // scaling factor of the CO2 absorption
9871  Numeric ScalingFac = 0.0000e0;
9872  if (model == "user") {
9873  ScalingFac = Cin; // input scaling factor of calculated absorption
9874  } else {
9875  ScalingFac = 1.0000e0;
9876  }
9877 
9878  const Index n_p = abs_p.nelem(); // Number of pressure levels
9879  const Index n_f = f_grid.nelem(); // Number of frequencies
9880 
9881  // Check that dimensions of abs_p, abs_t, and vmr agree:
9882  assert(n_p == abs_t.nelem());
9883  assert(n_p == vmr.nelem());
9884 
9885  // Check that dimensions of pxsec are consistent with n_f
9886  // and n_p. It should be [n_f,n_p]:
9887  assert(n_f == pxsec.nrows());
9888  assert(n_p == pxsec.ncols());
9889 
9890  // ************************** CKD stuff ************************************
9891 
9892  const Numeric xLosmt = 2.686763e19; // [molecules/cm^3]
9893  const Numeric T1 = 273.0e0;
9894  const Numeric TO = 296.0e0;
9895  const Numeric PO = 1013.0e0;
9896  // Temparature dependence coefficients for wavenumbers between 2386
9897  // and 2434. Computed based on (line-coupled) continuum coefficients
9898  // at 250K and 296K, set to unity at T_eff (determined by invariance
9899  // of calculations in this region for IASI low PWV cases).
9900  const Numeric tdep_bandhead[25] = {
9901  1.44e-01, 3.61e-01, 5.71e-01, 7.63e-01, 8.95e-01, 9.33e-01, 8.75e-01,
9902  7.30e-01, 5.47e-01, 3.79e-01, 2.55e-01, 1.78e-01, 1.34e-01, 1.07e-01,
9903  9.06e-02, 7.83e-02, 6.83e-02, 6.00e-02, 5.30e-02, 4.72e-02, 4.24e-02,
9904  3.83e-02, 3.50e-02, 3.23e-02, 3.01e-02};
9905  // Correction factors for CO2 from 2000-3000 cm-1 (mt_ckd_2.5)
9906  // (stored every 2 cm-1 - same as CO2 continuum).
9907  const Numeric XfacCO2[500] = {
9908  1.0000, 0.9998, 0.9997, 0.9996, 0.9995, 0.9994, 0.9992, 0.9991, 0.9991,
9909  0.9990, 0.9990, 0.9989, 0.9988, 0.9988, 0.9987, 0.9986, 0.9985, 0.9984,
9910  0.9983, 0.9982, 0.9981, 0.9980, 0.9979, 0.9978, 0.9976, 0.9975, 0.9973,
9911  0.9972, 0.9970, 0.9969, 0.9967, 0.9965, 0.9963, 0.9961, 0.9958, 0.9956,
9912  0.9954, 0.9951, 0.9948, 0.9946, 0.9943, 0.9940, 0.9936, 0.9933, 0.9929,
9913  0.9926, 0.9922, 0.9918, 0.9913, 0.9909, 0.9904, 0.9899, 0.9894, 0.9889,
9914  0.9884, 0.9878, 0.9872, 0.9866, 0.9859, 0.9853, 0.9846, 0.9838, 0.9831,
9915  0.9823, 0.9815, 0.9806, 0.9798, 0.9789, 0.9779, 0.9770, 0.9759, 0.9749,
9916  0.9738, 0.9727, 0.9716, 0.9704, 0.9691, 0.9679, 0.9666, 0.9652, 0.9638,
9917  0.9624, 0.9609, 0.9594, 0.9578, 0.9562, 0.9546, 0.9529, 0.9511, 0.9493,
9918  0.9475, 0.9456, 0.9436, 0.9417, 0.9396, 0.9375, 0.9354, 0.9332, 0.9310,
9919  0.9287, 0.9264, 0.9240, 0.9216, 0.9191, 0.9166, 0.9140, 0.9114, 0.9087,
9920  0.9060, 0.9032, 0.9004, 0.8976, 0.8947, 0.8917, 0.8887, 0.8857, 0.8827,
9921  0.8796, 0.8764, 0.8732, 0.8700, 0.8668, 0.8635, 0.8602, 0.8568, 0.8534,
9922  0.8500, 0.8466, 0.8432, 0.8397, 0.8362, 0.8327, 0.8292, 0.8257, 0.8221,
9923  0.8186, 0.8151, 0.8115, 0.8080, 0.8044, 0.8009, 0.7973, 0.7938, 0.7903,
9924  0.7868, 0.7833, 0.7799, 0.7764, 0.7730, 0.7697, 0.7663, 0.7630, 0.7597,
9925  0.7565, 0.7533, 0.7502, 0.7471, 0.7441, 0.7411, 0.7382, 0.7354, 0.7326,
9926  0.7298, 0.7272, 0.7246, 0.7221, 0.7197, 0.7173, 0.7150, 0.7129, 0.7108,
9927  0.7088, 0.7068, 0.7050, 0.7033, 0.7016, 0.7001, 0.6986, 0.6973, 0.6961,
9928  0.6949, 0.6939, 0.6930, 0.6921, 0.6914, 0.6908, 0.6903, 0.6899, 0.6897,
9929  0.6895, 0.6895, 0.6895, 0.6895, 0.6895, 0.6895, 0.6908, 0.7014, 0.7121,
9930  0.7227, 0.7552, 0.8071, 0.8400, 0.9012, 0.9542, 1.0044, 1.0330, 1.0554,
9931  1.0766, 1.0967, 1.1160, 1.1346, 1.1525, 1.1700, 1.1869, 1.2035, 1.2196,
9932  1.2354, 1.2509, 1.2662, 1.2811, 1.2958, 1.3103, 1.3245, 1.3386, 1.3525,
9933  1.3661, 1.3796, 1.3930, 1.4062, 1.4193, 1.4322, 1.4449, 1.4576, 1.4701,
9934  1.4825, 1.4949, 1.5070, 1.5191, 1.5311, 1.5430, 1.5548, 1.5550, 1.5550,
9935  1.5550, 1.5550, 1.5550, 1.5550, 1.5550, 1.5550, 1.5550, 1.5550, 1.5550,
9936  1.5550, 1.5550, 1.5550, 1.5550, 1.5550, 1.5550, 1.5550, 1.5550, 1.5550,
9937  1.5549, 1.5547, 1.5543, 1.5539, 1.5532, 1.5525, 1.5516, 1.5506, 1.5494,
9938  1.5481, 1.5467, 1.5452, 1.5435, 1.5417, 1.5397, 1.5377, 1.5355, 1.5332,
9939  1.5308, 1.5282, 1.5255, 1.5228, 1.5199, 1.5169, 1.5137, 1.5105, 1.5072,
9940  1.5037, 1.5002, 1.4966, 1.4929, 1.4890, 1.4851, 1.4811, 1.4771, 1.4729,
9941  1.4686, 1.4643, 1.4599, 1.4555, 1.4509, 1.4463, 1.4417, 1.4370, 1.4322,
9942  1.4274, 1.4225, 1.4176, 1.4126, 1.4076, 1.4025, 1.3974, 1.3923, 1.3872,
9943  1.3820, 1.3768, 1.3716, 1.3663, 1.3611, 1.3558, 1.3505, 1.3452, 1.3400,
9944  1.3347, 1.3294, 1.3241, 1.3188, 1.3135, 1.3083, 1.3030, 1.2978, 1.2926,
9945  1.2874, 1.2822, 1.2771, 1.2720, 1.2669, 1.2618, 1.2568, 1.2518, 1.2468,
9946  1.2419, 1.2370, 1.2322, 1.2274, 1.2227, 1.2180, 1.2133, 1.2087, 1.2041,
9947  1.1996, 1.1952, 1.1907, 1.1864, 1.1821, 1.1778, 1.1737, 1.1695, 1.1654,
9948  1.1614, 1.1575, 1.1536, 1.1497, 1.1460, 1.1422, 1.1386, 1.1350, 1.1314,
9949  1.1280, 1.1246, 1.1212, 1.1179, 1.1147, 1.1115, 1.1084, 1.1053, 1.1024,
9950  1.0994, 1.0966, 1.0938, 1.0910, 1.0883, 1.0857, 1.0831, 1.0806, 1.0781,
9951  1.0757, 1.0734, 1.0711, 1.0688, 1.0667, 1.0645, 1.0624, 1.0604, 1.0584,
9952  1.0565, 1.0546, 1.0528, 1.0510, 1.0493, 1.0476, 1.0460, 1.0444, 1.0429,
9953  1.0414, 1.0399, 1.0385, 1.0371, 1.0358, 1.0345, 1.0332, 1.0320, 1.0308,
9954  1.0296, 1.0285, 1.0275, 1.0264, 1.0254, 1.0244, 1.0235, 1.0226, 1.0217,
9955  1.0208, 1.0200, 1.0192, 1.0184, 1.0177, 1.0170, 1.0163, 1.0156, 1.0150,
9956  1.0143, 1.0137, 1.0132, 1.0126, 1.0121, 1.0116, 1.0111, 1.0106, 1.0101,
9957  1.0097, 1.0092, 1.0088, 1.0084, 1.0081, 1.0077, 1.0074, 1.0070, 1.0067,
9958  1.0064, 1.0061, 1.0058, 1.0055, 1.0053, 1.0050, 1.0048, 1.0046, 1.0043,
9959  1.0041, 1.0039, 1.0037, 1.0036, 1.0034, 1.0032, 1.0030, 1.0029, 1.0027,
9960  1.0026, 1.0025, 1.0023, 1.0022, 1.0021, 1.0020, 1.0019, 1.0018, 1.0017,
9961  1.0016, 1.0015, 1.0014, 1.0014, 1.0013, 1.0012, 1.0011, 1.0011, 1.0010,
9962  1.0010, 1.0009, 1.0009, 1.0008, 1.0007, 1.0006, 1.0005, 1.0004, 1.0003,
9963  1.0002, 1.0001, 1.0000, 1.0000, 1.0000};
9964 
9965  // wavenumber range where CKD CO2 continuum is valid
9966  const Numeric VABS_min = FCO2_ckd_mt_250_v1; // [cm^-1]
9967  const Numeric VABS_max = FCO2_ckd_mt_250_v2; // [cm^-1]
9968 
9969  // It is assumed here that f_grid is monotonically increasing with index!
9970  // In future change this return into a change of the loop over
9971  // the frequency f_grid. n_f_new < n_f
9972  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9973  Numeric V2ABS = f_grid[n_f - 1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9974  if ((V1ABS < VABS_min) || (V1ABS > VABS_max) || (V2ABS < VABS_min) ||
9975  (V2ABS > VABS_max)) {
9976  out3 << "WARNING:\n"
9977  << " CKD_MT 2.50 CO2 continuum:\n"
9978  << " input frequency vector exceeds range of model validity\n"
9979  << " " << FCO2_ckd_mt_250_v1 << "<->" << FCO2_ckd_mt_250_v2
9980  << "cm^-1\n";
9981  }
9982 
9983  // ---------------------- subroutine FRNCO2 ------------------------------
9984 
9985  // retrieve the appropriate array sequence of the CO2 continuum
9986  // arrays of the CKD model.
9988  Numeric V1C = V1ABS - DVC;
9989  Numeric V2C = V2ABS + DVC;
9990 
9991  int I1 = (int)((V1C - FCO2_ckd_mt_250_v1) / FCO2_ckd_mt_250_dv);
9992  if (V1C < FCO2_ckd_mt_250_v1) I1 = -1;
9994 
9995  int I2 = (int)((V2C - FCO2_ckd_mt_250_v1) / FCO2_ckd_mt_250_dv);
9996 
9997  int NPTC = I2 - I1 + 3;
9998  if (NPTC > FCO2_ckd_mt_250_npt) NPTC = FCO2_ckd_mt_250_npt + 1;
9999 
10000  V2C = V1C + FCO2_ckd_mt_250_dv * (Numeric)(NPTC - 1);
10001 
10002  if (NPTC < 1) {
10003  out3
10004  << "WARNING:\n"
10005  << " CKD_MT 2.50 CO2 continuum:\n"
10006  << " no elements of internal continuum coefficients could be found for the\n"
10007  << " input frequency range.\n"
10008  << " Leave the function without calculating the absorption.";
10009  return;
10010  }
10011 
10012  Vector FCO2T0(NPTC + addF77fields, 0.); // [cm^3/molecules]
10013 
10014  for (Index J = 1; J <= NPTC; ++J) {
10015  Index I = I1 + J;
10016  if ((I > 0) && (I <= FCO2_ckd_mt_250_npt)) {
10017  FCO2T0[J] = FCO2_ckd_mt_250[I];
10018  }
10019  }
10020 
10021  // ---------------------- subroutine FRNCO2 ------------------------------
10022 
10023  // Loop pressure/temperature:
10024  for (Index i = 0; i < n_p; ++i) {
10025  Numeric Tave = abs_t[i]; // [K]
10026  Numeric Pave = (abs_p[i] * 1.000e-2); // [hPa]
10027  // FIXME Numeric vmrco2 = vmr[i]; // [1]
10028  Numeric Rhoave = (Pave / PO) * (TO / Tave); // [hPa]
10029  Numeric WTOT = xLosmt * (Pave / PO) * (T1 / Tave); // [molecules/cm^2]
10030  Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
10031 
10032  // Molecular cross section calculated by CKD.
10033  // The cross sectionis calculated on the predefined
10034  // CKD wavenumber grid.
10035  Vector k(NPTC + addF77fields, 0.); // [1/cm]
10036  for (Index J = 1; J <= NPTC; ++J) {
10037  Numeric VJ = V1C + (DVC * (Numeric)(J - 1));
10038  Numeric FCO2 = FCO2T0[J];
10039  const Index I1J = I1 + J - 1;
10040 
10041  // CKD MT 2.0 This continuum differs from mt_ck_1.3 in that an entirely
10042  // new co2 continuum has been developed based on the line coupling parameters from
10043  // Hartmann's group as distributed with hitran. This continuum must be used with lblrtm_v11
10044  // and spectral line parameters including Hartmann's line parameters for co2.
10045  // Based on recent validation studies, a scaling of the continuum for v3 is required to achieve an acceptable result
10046  // at 2385 cm-1, the 'bandhead' of v3. Clough et al., presentation at EGU 2007
10047 
10048  if ((I1J >= 1196) && (I1J <= 1220)) {
10049  FCO2 = pow((Tave / 246.0e0), tdep_bandhead[I1J - 1196]) * FCO2;
10050  }
10051  // CKD MT 2.5 Adjustment to the original scaling made (temperature dependece added)
10052  if ((VJ > 2000.0e0) && (VJ < 2998.0e0)) {
10053  int JFAC = int((VJ - 1998.00e0) / 2.00e0 + 0.00001e0);
10054  FCO2 = XfacCO2[JFAC] * FCO2;
10055  }
10056 
10057  // CKD cross section times number density with radiative field [1]
10058  // the VMRCO2 will be multiplied in abs_coefCalc
10059  k[J] = ((WTOT * Rhoave) * (FCO2 * 1.000e-20) * RADFN_FUN(VJ, XKT));
10060  }
10061 
10062  // Loop input frequency array. The previously calculated cross section
10063  // has therefore to be interpolated on the input frequencies.
10064  for (Index s = 0; s < n_f; ++s) {
10065  // calculate the associated wave number (= 1/wavelength)
10066  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10067  if ((V > 0.000e0) && (V < FCO2_ckd_mt_250_v2)) {
10068  // arts cross section [1/m]
10069  // interpolate the k vector on the f_grid grid
10070  pxsec(s, i) += ScalingFac * 1.000e2 * XINT_FUN(V1C, V2C, DVC, k, V);
10071  }
10072  }
10073  }
10074 }
10075 
10076 // =================================================================================
10078 
10114  const Numeric Cin,
10115  const String &model,
10116  ConstVectorView f_grid,
10117  ConstVectorView abs_p,
10118  ConstVectorView abs_t,
10119  ConstVectorView vmr,
10120  const Verbosity &verbosity) {
10121  CREATE_OUT3;
10122 
10123  // check the model name about consistency
10124  if ((model != "user") && (model != "CKDMT100")) {
10125  ostringstream os;
10126  os << "!!ERROR!!\n"
10127  << "CKD_MT1.00 N2 CIA rotational band:\n"
10128  << "INPUT model name is: " << model << ".\n"
10129  << "VALID model names are user and CKDMT100\n";
10130  throw runtime_error(os.str());
10131  }
10132 
10133  // scaling factor of the N2-N2 CIA rot. band absorption
10134  Numeric ScalingFac = 0.0000e0;
10135  if (model == "user") {
10136  ScalingFac = Cin; // input scaling factor of calculated absorption
10137  } else {
10138  ScalingFac = 1.0000e0;
10139  }
10140 
10141  const Index n_p = abs_p.nelem(); // Number of pressure levels
10142  const Index n_f = f_grid.nelem(); // Number of frequencies
10143 
10144  // Check that dimensions of abs_p, abs_t, and vmr agree:
10145  assert(n_p == abs_t.nelem());
10146  assert(n_p == vmr.nelem());
10147 
10148  // Check that dimensions of pxsec are consistent with n_f
10149  // and n_p. It should be [n_f,n_p]:
10150  assert(n_f == pxsec.nrows());
10151  assert(n_p == pxsec.ncols());
10152 
10153  // ************************** CKD stuff ************************************
10154 
10155  // FIXME const Numeric xLosmt = 2.686763e19; // Loschmidt Number [molecules/cm^3]
10156  const Numeric T1 = 273.0e0;
10157  const Numeric TO = 296.0e0;
10158  const Numeric PO = 1013.0e0;
10159 
10160  // wavenumber range where CKD H2O self continuum is valid
10161  const Numeric VABS_min = -1.000e1; // [cm^-1]
10162  const Numeric VABS_max = 3.500e2; // [cm^-1]
10163 
10164  // It is assumed here that f_grid is monotonically increasing with index!
10165  // In future change this return into a change of the loop over
10166  // the frequency f_grid. n_f_new < n_f
10167  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10168  Numeric V2ABS = f_grid[n_f - 1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10169  if ((V1ABS < VABS_min) || (V1ABS > VABS_max) || (V2ABS < VABS_min) ||
10170  (V2ABS > VABS_max)) {
10171  out3 << "WARNING:\n"
10172  << " CKD_MT 1.00 N2-N2 CIA rotational band:\n"
10173  << " input frequency vector exceeds range of model validity\n"
10174  << " " << N2N2_CT296_ckd_mt_100_v1 << "<->"
10175  << N2N2_CT220_ckd_mt_100_v2 << "cm^-1\n";
10176  }
10177 
10178  // ------------------- subroutine N2R296/N2R220 ----------------------------
10179 
10181  ostringstream os;
10182  os << "!!ERROR!!\n"
10183  << "CKD_MT 1.00 N2-N2 CIA rotational band:\n"
10184  << "parameter V1 not the same for different ref. temperatures.\n";
10185  throw runtime_error(os.str());
10186  }
10188  ostringstream os;
10189  os << "!!ERROR!!\n"
10190  << "CKD_MT 1.00 N2-N2 CIA rotational band:\n"
10191  << "parameter V2 not the same for different ref. temperatures.\n";
10192  throw runtime_error(os.str());
10193  }
10195  ostringstream os;
10196  os << "!!ERROR!!\n"
10197  << "CKD_MT 1.00 N2-N2 CIA rotational band:\n"
10198  << "parameter DV not the same for different ref. temperatures.\n";
10199  throw runtime_error(os.str());
10200  }
10202  ostringstream os;
10203  os << "!!ERROR!!\n"
10204  << "CKD_MT 1.00 N2-N2 CIA rotational band:\n"
10205  << "parameter NPT not the same for different ref. temperatures.\n";
10206  throw runtime_error(os.str());
10207  }
10208 
10209  // retrieve the appropriate array sequence of the self continuum
10210  // arrays of the CKD model.
10212  Numeric V1C = V1ABS - DVC;
10213  Numeric V2C = V2ABS + DVC;
10214 
10215  int I1 = (int)((V1C - N2N2_CT296_ckd_mt_100_v1) / N2N2_CT296_ckd_mt_100_dv);
10216  if (V1C < N2N2_CT296_ckd_mt_100_v1) I1 = -1;
10218 
10219  int I2 = (int)((V2C - N2N2_CT296_ckd_mt_100_v1) / N2N2_CT296_ckd_mt_100_dv);
10220 
10221  int NPTC = I2 - I1 + 3;
10223 
10224  V2C = V1C + N2N2_CT296_ckd_mt_100_dv * (Numeric)(NPTC - 1);
10225 
10226  if (NPTC < 1) {
10227  out3
10228  << "WARNING:\n"
10229  << " CKD_MT 1.00 N2-N2 CIA rotational band:\n"
10230  << " no elements of internal continuum coefficients could be found for the\n"
10231  << " input frequency range.\n"
10232  << " Leave the function without calculating the absorption.\n";
10233  return;
10234  }
10235 
10236  Vector C0(NPTC + addF77fields, 0.); // [cm^3/molecules]
10237  Vector C1(NPTC + addF77fields, 0.); // [cm^3/molecules]
10238 
10239  for (Index J = 1; J <= NPTC; ++J) {
10240  Index I = I1 + J;
10241  if ((I > 0) && (I <= N2N2_CT296_ckd_mt_100_npt)) {
10242  C0[J] = N2N2_CT296_ckd_mt_100[I]; // at T=296 K
10243  C1[J] = N2N2_CT220_ckd_mt_100[I]; // at T=260 K
10244  }
10245  }
10246 
10247  // ------------------- subroutine N2R296/N2R220 ----------------------------
10248 
10249  // Loop pressure/temperature:
10250  for (Index i = 0; i < n_p; ++i) {
10251  Numeric Tave = abs_t[i]; // [K]
10252  Numeric Pave = (abs_p[i] * 1.000e-2); // [hPa]
10253  Numeric vmrn2 = vmr[i]; // [1]
10254  Numeric facfac =
10255  vmrn2 * (Pave / PO) * (Pave / PO) * (T1 / Tave) * (T1 / Tave);
10256 
10257  Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
10258  Numeric Tfac = (Tave - TO) / (220.0e0 - TO);
10259 
10260  // Molecular cross section calculated by CKD.
10261  // The cross sectionis calculated on the predefined
10262  // CKD wavenumber grid.
10263  Vector k(NPTC + addF77fields, 0.); // [1/cm]
10264  for (Index J = 1; J <= NPTC; ++J) {
10265  Numeric VJ = V1C + (DVC * (Numeric)(J - 1));
10266  Numeric SN2 = 0.000e0;
10267  if ((C0[J] > 0.000e0) && (C1[J] > 0.000e0)) {
10268  SN2 = facfac * C0[J] * pow((C1[J] / C0[J]), Tfac);
10269  }
10270 
10271  // CKD cross section with radiative field
10272  k[J] = SN2 * RADFN_FUN(VJ, XKT); // [1]
10273  }
10274 
10275  // Loop input frequency array. The previously calculated cross section
10276  // has therefore to be interpolated on the input frequencies.
10277  for (Index s = 0; s < n_f; ++s) {
10278  // calculate the associated wave number (= 1/wavelength)
10279  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10280  if ((V > 0.000e0) && (V < N2N2_CT220_ckd_mt_100_v2)) {
10281  // arts cross section [1/m]
10282  // interpolate the k vector on the f_grid grid
10283  pxsec(s, i) += ScalingFac * 1.000e2 * XINT_FUN(V1C, V2C, DVC, k, V);
10284  }
10285  }
10286  }
10287 }
10288 
10289 // =================================================================================
10290 
10292 
10333  const Numeric Cin,
10334  const String &model,
10335  ConstVectorView f_grid,
10336  ConstVectorView abs_p,
10337  ConstVectorView abs_t,
10338  ConstVectorView vmr,
10339  const Verbosity &verbosity) {
10340  CREATE_OUT3;
10341 
10342  // check the model name about consistency
10343  if ((model != "user") && (model != "CKDMT100")) {
10344  ostringstream os;
10345  os << "!!ERROR!!\n"
10346  << "CKD_MT1.00 N2 CIA fundamental band:\n"
10347  << "INPUT model name is: " << model << ".\n"
10348  << "VALID model names are user and CKDMT100\n";
10349  throw runtime_error(os.str());
10350  }
10351 
10352  // scaling factor of the N2-N2 CIA fundamental band absorption
10353  Numeric ScalingFac = 1.0000e0;
10354  if (model == "user") {
10355  ScalingFac = Cin; // input scaling factor of calculated absorption
10356  }
10357 
10358  const Index n_p = abs_p.nelem(); // Number of pressure levels
10359  const Index n_f = f_grid.nelem(); // Number of frequencies
10360 
10361  // Check that dimensions of abs_p, abs_t, and vmr agree:
10362  assert(n_p == abs_t.nelem());
10363  assert(n_p == vmr.nelem());
10364 
10365  // Check that dimensions of pxsec are consistent with n_f
10366  // and n_p. It should be [n_f,n_p]:
10367  assert(n_f == pxsec.nrows());
10368  assert(n_p == pxsec.ncols());
10369 
10370  // ************************** CKD stuff ************************************
10371 
10372  const Numeric xLosmt = 2.686763e19; // Loschmidt Number [molecules/cm^3]
10373  const Numeric T1 = 273.0e0;
10374  const Numeric TO = 296.0e0;
10375  const Numeric PO = 1013.0e0;
10376  const Numeric a1 = 0.8387e0;
10377  const Numeric a2 = 0.0754e0;
10378 
10379  // It is assumed here that f_grid is monotonically increasing with index!
10380  // In future change this return into a change of the loop over
10381  // the frequency f_grid. n_f_new < n_f
10382  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10383  Numeric V2ABS = f_grid[n_f - 1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10384  if ((V1ABS < N2N2_N2F_ckd_mt_100_v1) || (V1ABS > N2N2_N2F_ckd_mt_100_v2) ||
10385  (V2ABS < N2N2_N2F_ckd_mt_100_v1) || (V2ABS > N2N2_N2F_ckd_mt_100_v2)) {
10386  out3 << "WARNING:\n"
10387  << " CKD_MT 1.00 N2-N2 CIA fundamental band:\n"
10388  << " input frequency vector exceeds range of model validity\n"
10389  << " " << N2N2_N2F_ckd_mt_100_v1 << "<->" << N2N2_N2F_ckd_mt_100_v2
10390  << "cm^-1\n";
10391  }
10392 
10393  // ------------------- subroutine N2_VER_1 ----------------------------
10394 
10395  // retrieve the appropriate array sequence of the self continuum
10396  // arrays of the CKD model.
10398  Numeric V1C = V1ABS - DVC;
10399  Numeric V2C = V2ABS + DVC;
10400 
10401  int I1 = (int)((V1C - N2N2_N2F_ckd_mt_100_v1) / N2N2_N2F_ckd_mt_100_dv);
10402  if (V1C < N2N2_N2F_ckd_mt_100_v1) I1 = -1;
10404 
10405  int I2 = (int)((V2C - N2N2_N2F_ckd_mt_100_v1) / N2N2_N2F_ckd_mt_100_dv);
10406 
10407  int NPTC = I2 - I1 + 3;
10408  if (NPTC > N2N2_N2F_ckd_mt_100_npt) NPTC = N2N2_N2F_ckd_mt_100_npt + 1;
10409 
10410  V2C = V1C + N2N2_N2F_ckd_mt_100_dv * (Numeric)(NPTC - 1);
10411 
10412  if (NPTC < 1) {
10413  out3
10414  << "WARNING:\n"
10415  << " CKD_MT 1.00 N2-N2 CIA fundamental band:\n"
10416  << " no elements of internal continuum coefficients could be found for the\n"
10417  << " input frequency range.\n";
10418  return;
10419  }
10420 
10421  Vector xn2(NPTC + addF77fields, 0.);
10422  Vector xn2t(NPTC + addF77fields, 0.);
10423 
10424  for (Index J = 1; J <= NPTC; ++J) {
10425  Index I = I1 + J;
10426  if ((I > 0) && (I <= N2N2_N2F_ckd_mt_100_npt)) {
10427  xn2[J] = N2N2_N2F_ckd_mt_100[I];
10428  xn2t[J] = N2N2_N2Ft_ckd_mt_100[I];
10429  }
10430  }
10431 
10432  // ------------------- subroutine N2_VER_1 ----------------------------
10433 
10434  // Loop pressure/temperature:
10435  for (Index i = 0; i < n_p; ++i) {
10436  Numeric Tave = abs_t[i]; // [K]
10437  Numeric Pave = (abs_p[i] * 1.000e-2); // [hPa]
10438  Numeric vmrn2 = vmr[i]; // [1]
10439  Numeric WTOT = xLosmt * (Pave / PO) * (T1 / Tave); // [molecules/cm^2]
10440  Numeric tau_fac = WTOT * (Pave / PO) * (T1 / Tave);
10441 
10442  Numeric XKT = Tave / 1.4387752e0; // = (T*k_B) / (h*c)
10443 
10444  // FIXME Numeric Tfac = (Tave - TO) / (220.0e0 - TO); // [1]
10445  Numeric xktfac = (1.000e0 / TO) - (1.000e0 / Tave); // [1/K]
10446  Numeric factor = 0.000e0;
10447  if (vmrn2 > VMRCalcLimit) {
10448  factor = (1.000e0 / xLosmt) * (1.000e0 / vmrn2) * (a1 - a2 * (Tave / TO));
10449  }
10450 
10451  // Molecular cross section calculated by CKD.
10452  // The cross sectionis calculated on the predefined
10453  // CKD wavenumber grid.
10454  Vector k(NPTC + addF77fields + 1, 0.); // [1/cm]
10455  for (Index J = 1; J <= NPTC; ++J) {
10456  Numeric VJ = V1C + (DVC * (Numeric)(J - 1));
10457  Numeric SN2 = 0.000e0;
10458  if (xn2[J] > 0.000e0) {
10459  Numeric C0 = factor * xn2[J] * exp(xn2t[J] * xktfac) / VJ;
10460  SN2 = tau_fac * C0;
10461  }
10462 
10463  // CKD cross section with radiative field
10464  k[J] = SN2 * RADFN_FUN(VJ, XKT); // [1/cm]
10465  }
10466 
10467  // Loop input frequency array. The previously calculated cross section
10468  // has therefore to be interpolated on the input frequencies.
10469  for (Index s = 0; s < n_f; ++s) {
10470  // calculate the associated wave number (= 1/wavelength)
10471  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10472  if ((V > N2N2_N2F_ckd_mt_100_v1) && (V < N2N2_N2F_ckd_mt_100_v2)) {
10473  // arts cross section [1/m]
10474  // interpolate the k vector on the f_grid grid
10475  pxsec(s, i) += ScalingFac * 1.000e2 * XINT_FUN(V1C, V2C, DVC, k, V);
10476  }
10477  }
10478  }
10479 }
10480 // =================================================================================
10482 
10526  const Numeric Cin,
10527  const String &model,
10528  ConstVectorView f_grid,
10529  ConstVectorView abs_p,
10530  ConstVectorView abs_t,
10531  ConstVectorView vmr,
10532  ConstVectorView abs_h2o,
10533  ConstVectorView abs_o2,
10534  const Verbosity &verbosity) {
10535  CREATE_OUT3;
10536 
10537  // check the model name about consistency
10538  if ((model != "user") && (model != "CKDMT252")) {
10539  ostringstream os;
10540  os << "!!ERROR!!\n"
10541  << "CKD_MT2.50 N2 CIA rotational band:\n"
10542  << "INPUT model name is: " << model << ".\n"
10543  << "VALID model names are user and CKDMT252\n";
10544  throw runtime_error(os.str());
10545  }
10546 
10547  // scaling factor of the N2-N2 CIA rot. band absorption
10548  Numeric ScalingFac = 0.0000e0;
10549  if (model == "user") {
10550  ScalingFac = Cin; // input scaling factor of calculated absorption
10551  } else {
10552  ScalingFac = 1.0000e0;
10553  }
10554 
10555  const Index n_p = abs_p.nelem(); // Number of pressure levels
10556  const Index n_f = f_grid.nelem(); // Number of frequencies
10557 
10558  // Check that dimensions of abs_p, abs_t, and vmr agree:
10559  assert(n_p == abs_t.nelem());
10560  assert(n_p == vmr.nelem());
10561 
10562  // Check that dimensions of pxsec are consistent with n_f
10563  // and n_p. It should be [n_f,n_p]:
10564  assert(n_f == pxsec.nrows());
10565  assert(n_p == pxsec.ncols());
10566 
10567  // ************************** CKD stuff ************************************
10568 
10569  // FIXME const Numeric xLosmt = 2.686763e19; // Loschmidt Number [molecules/cm^3]
10570  const Numeric T1 = 273.0e0;
10571  const Numeric TO = 296.0e0;
10572  const Numeric PO = 1013.0e0;
10573 
10574  // wavenumber range where CKD H2O self continuum is valid
10575  const Numeric VABS_min = -1.000e1; // [cm^-1]
10576  const Numeric VABS_max = 3.500e2; // [cm^-1]
10577 
10578  // It is assumed here that f_grid is monotonically increasing with index!
10579  // In future change this return into a change of the loop over
10580  // the frequency f_grid. n_f_new < n_f
10581  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10582  Numeric V2ABS = f_grid[n_f - 1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10583  if ((V1ABS < VABS_min) || (V1ABS > VABS_max) || (V2ABS < VABS_min) ||
10584  (V2ABS > VABS_max)) {
10585  out3 << "WARNING:\n"
10586  << " CKD_MT 2.50 N2-N2 CIA rotational band:\n"
10587  << " input frequency vector exceeds range of model validity\n"
10588  << " " << N2N2_CT296_ckd_mt_100_v1 << "<->"
10589  << N2N2_CT220_ckd_mt_100_v2 << "cm^-1\n";
10590  }
10591 
10592  // ------------------- subroutine N2R296/N2R220 ----------------------------
10593 
10595  ostringstream os;
10596  os << "!!ERROR!!\n"
10597  << "CKD_MT 2.50 N2-N2 CIA rotational band:\n"
10598  << "parameter V1 not the same for different ref. temperatures.\n";
10599  throw runtime_error(os.str());
10600  }
10602  ostringstream os;
10603  os << "!!ERROR!!\n"
10604  << "CKD_MT 2.50 N2-N2 CIA rotational band:\n"
10605  << "parameter V2 not the same for different ref. temperatures.\n";
10606  throw runtime_error(os.str());
10607  }
10609  ostringstream os;
10610  os << "!!ERROR!!\n"
10611  << "CKD_MT 2.50 N2-N2 CIA rotational band:\n"
10612  << "parameter DV not the same for different ref. temperatures.\n";
10613  throw runtime_error(os.str());
10614  }
10616  ostringstream os;
10617  os << "!!ERROR!!\n"
10618  << "CKD_MT 2.50 N2-N2 CIA rotational band:\n"
10619  << "parameter NPT not the same for different ref. temperatures.\n";
10620  throw runtime_error(os.str());
10621  }
10622 
10623  // retrieve the appropriate array sequence of the self continuum
10624  // arrays of the CKD model.
10626  Numeric V1C = V1ABS - DVC;
10627  Numeric V2C = V2ABS + DVC;
10628 
10629  int I1 = (int)((V1C - N2N2_CT296_ckd_mt_100_v1) / N2N2_CT296_ckd_mt_100_dv);
10630  if (V1C < N2N2_CT296_ckd_mt_100_v1) I1 = -1;
10632 
10633  int I2 = (int)((V2C - N2N2_CT296_ckd_mt_100_v1) / N2N2_CT296_ckd_mt_100_dv);
10634 
10635  int NPTC = I2 - I1 + 3;
10637 
10638  V2C = V1C + N2N2_CT296_ckd_mt_100_dv * (Numeric)(NPTC - 1);
10639 
10640  if (NPTC < 1) {
10641  out3
10642  << "WARNING:\n"
10643  << " CKD_MT 2.50 N2-N2 CIA rotational band:\n"
10644  << " no elements of internal continuum coefficients could be found for the\n"
10645  << " input frequency range.\n"
10646  << " Leave the function without calculating the absorption.\n";
10647  return;
10648  }
10649 
10650  Vector C0(NPTC + addF77fields, 0.); // [cm^3/molecules]
10651  Vector C1(NPTC + addF77fields, 0.); // [cm^3/molecules]
10652  Vector sf_T0(NPTC + addF77fields, 0.);
10653  Vector sf_T1(NPTC + addF77fields, 0.);
10654  for (Index J = 1; J <= NPTC; ++J) {
10655  Index I = I1 + J;
10656  if ((I > 0) && (I <= N2N2_CT296_ckd_mt_100_npt)) {
10657  C0[J] = N2N2_CT296_ckd_mt_100[I]; // at T=296 K
10658  sf_T0[J] = N2N2_sf_296_ckd_mt_100[I];
10659  C1[J] = N2N2_CT220_ckd_mt_100[I]; // at T=260 K
10660  sf_T1[J] = N2N2_sf_220_ckd_mt_100[I];
10661  }
10662  }
10663 
10664  // ------------------- subroutine N2R296/N2R220 ----------------------------
10665 
10666  // Loop pressure/temperature:
10667  for (Index i = 0; i < n_p; ++i) {
10668  Numeric Tave = abs_t[i]; // [K]
10669  Numeric Pave = (abs_p[i] * 1.000e-2); // [hPa]
10670  Numeric vmrn2 = vmr[i]; // [1]
10671  Numeric vmro2 = abs_o2[i];
10672  Numeric vmrh2o = abs_h2o[i];
10673  Numeric facfac =
10674  vmrn2 * (Pave / PO) * (Pave / PO) * (T1 / Tave) * (T1 / Tave);
10675 
10676  Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
10677  Numeric Tfac = (Tave - TO) / (220.0e0 - TO);
10678 
10679  // Molecular cross section calculated by CKD.
10680  // The cross sectionis calculated on the predefined
10681  // CKD wavenumber grid.
10682  Vector k(NPTC + addF77fields, 0.); // [1/cm]
10683  Numeric C = 0.000e0;
10684  Numeric sf = 0.000e0;
10685  for (Index J = 1; J <= NPTC; ++J) {
10686  Numeric VJ = V1C + (DVC * (Numeric)(J - 1));
10687  Numeric SN2 = 0.000e0;
10688  if ((C0[J] > 0.000e0) && (C1[J] > 0.000e0)) {
10689  C = C0[J] * pow((C1[J] / C0[J]), Tfac);
10690  sf = ((sf_T0[J] * pow((sf_T1[J] / sf_T0[J]), Tfac)) - 1.000e0) *
10691  (0.79 / 0.21);
10692  SN2 = facfac * C * (vmrn2 + sf * vmro2 + vmrh2o);
10693  }
10694  // sf is ~ the ratio of alpha(n2-o2)/alpha(n2-n2)
10695  // Eq's 7 and 8 in the Boissoles paper.
10696  // if ( (C0[J] > 0.000e0) && (C1[J] > 0.000e0) )
10697  // {
10698  // SN2 = facfac* C0[J] * pow( (C1[J]/C0[J]), Tfac );
10699  // }
10700 
10701  // CKD cross section with radiative field
10702  k[J] = SN2 * RADFN_FUN(VJ, XKT); // [1]
10703  }
10704 
10705  // Loop input frequency array. The previously calculated cross section
10706  // has therefore to be interpolated on the input frequencies.
10707  for (Index s = 0; s < n_f; ++s) {
10708  // calculate the associated wave number (= 1/wavelength)
10709  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10710  if ((V > 0.000e0) && (V < N2N2_CT220_ckd_mt_100_v2)) {
10711  // arts cross section [1/m]
10712  // interpolate the k vector on the f_grid grid
10713  pxsec(s, i) += ScalingFac * 1.000e2 * XINT_FUN(V1C, V2C, DVC, k, V);
10714  }
10715  }
10716  }
10717 }
10718 
10719 // =================================================================================
10720 
10722 
10763  const Numeric Cin,
10764  const String &model,
10765  ConstVectorView f_grid,
10766  ConstVectorView abs_p,
10767  ConstVectorView abs_t,
10768  ConstVectorView vmr,
10769  ConstVectorView abs_h2o,
10770  ConstVectorView abs_o2,
10771  const Verbosity &verbosity) {
10772  CREATE_OUT3;
10773 
10774  // check the model name about consistency
10775  if ((model != "user") && (model != "CKDMT252")) {
10776  ostringstream os;
10777  os << "!!ERROR!!\n"
10778  << "CKD_MT2.50 N2 CIA fundamental band:\n"
10779  << "INPUT model name is: " << model << ".\n"
10780  << "VALID model names are user and CKDMT252\n";
10781  throw runtime_error(os.str());
10782  }
10783 
10784  // scaling factor of the N2-N2 CIA fundamental band absorption
10785  Numeric ScalingFac = 1.0000e0;
10786  if (model == "user") {
10787  ScalingFac = Cin; // input scaling factor of calculated absorption
10788  }
10789 
10790  const Index n_p = abs_p.nelem(); // Number of pressure levels
10791  const Index n_f = f_grid.nelem(); // Number of frequencies
10792 
10793  // Check that dimensions of abs_p, abs_t, and vmr agree:
10794  assert(n_p == abs_t.nelem());
10795  assert(n_p == vmr.nelem());
10796 
10797  // Check that dimensions of pxsec are consistent with n_f
10798  // and n_p. It should be [n_f,n_p]:
10799  assert(n_f == pxsec.nrows());
10800  assert(n_p == pxsec.ncols());
10801 
10802  // ************************** CKD stuff ************************************
10803 
10804  const Numeric xLosmt = 2.686763e19; // Loschmidt Number [molecules/cm^3]
10805  const Numeric T1 = 273.0e0;
10806  // const Numeric TO = 296.0e0;
10807  const Numeric PO = 1013.0e0;
10808 
10809  // It is assumed here that f_grid is monotonically increasing with index!
10810  // In future change this return into a change of the loop over
10811  // the frequency f_grid. n_f_new < n_f
10812  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10813  Numeric V2ABS = f_grid[n_f - 1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10814  if ((V1ABS < N2N2_N2F_ckd_mt_250_v1) || (V1ABS > N2N2_N2F_ckd_mt_250_v2) ||
10815  (V2ABS < N2N2_N2F_ckd_mt_250_v1) || (V2ABS > N2N2_N2F_ckd_mt_250_v2)) {
10816  out3 << "WARNING:\n"
10817  << " CKD_MT 2.50 N2-N2 CIA fundamental band:\n"
10818  << " input frequency vector exceeds range of model validity\n"
10819  << " " << N2N2_N2F_ckd_mt_250_v1 << "<->" << N2N2_N2F_ckd_mt_250_v2
10820  << "cm^-1\n";
10821  }
10822 
10823  // ------------------- subroutine N2_VER_1 ----------------------------
10824 
10825  // retrieve the appropriate array sequence of the self continuum
10826  // arrays of the CKD model.
10828  Numeric V1C = V1ABS - DVC;
10829  Numeric V2C = V2ABS + DVC;
10830 
10831  int I1 = (int)((V1C - N2N2_N2F_ckd_mt_250_v1) / N2N2_N2F_ckd_mt_250_dv);
10832  if (V1C < N2N2_N2F_ckd_mt_250_v1) I1 = -1;
10834 
10835  int I2 = (int)((V2C - N2N2_N2F_ckd_mt_250_v1) / N2N2_N2F_ckd_mt_250_dv);
10836 
10837  int NPTC = I2 - I1 + 3;
10838  if (NPTC > N2N2_N2F_ckd_mt_250_npt) NPTC = N2N2_N2F_ckd_mt_250_npt + 1;
10839 
10840  V2C = V1C + N2N2_N2F_ckd_mt_250_dv * (Numeric)(NPTC - 1);
10841 
10842  if (NPTC < 1) {
10843  out3
10844  << "WARNING:\n"
10845  << " CKD_MT 2.50 N2-N2 CIA fundamental band:\n"
10846  << " no elements of internal continuum coefficients could be found for the\n"
10847  << " input frequency range.\n";
10848  return;
10849  }
10850 
10851  Vector xn2(NPTC + addF77fields, 0.);
10852  Vector xn2t(NPTC + addF77fields, 0.);
10853 
10854  for (Index J = 1; J <= NPTC; ++J) {
10855  Index I = I1 + J;
10856  if ((I > 0) && (I <= N2N2_N2F_ckd_mt_250_npt)) {
10857  xn2[J] = N2N2_N2F_ckd_mt_250[I];
10858  xn2t[J] = N2N2_N2Ft_ckd_mt_250[I];
10859  }
10860  }
10861 
10862  // ------------------- subroutine N2_VER_1 ----------------------------
10863 
10864  // Loop pressure/temperature:
10865  for (Index i = 0; i < n_p; ++i) {
10866  Numeric Tave = abs_t[i]; // [K]
10867  Numeric Pave = (abs_p[i] * 1.000e-2); // [hPa]
10868  Numeric vmrn2 = vmr[i]; // [1]
10869  Numeric vmro2 = abs_o2[i]; // [1]
10870  Numeric vmrh2o = abs_h2o[i]; // [1]
10871  Numeric WTOT = xLosmt * (Pave / PO) * (T1 / Tave); // [molecules/cm^2]
10872  Numeric tau_fac = WTOT * (Pave / PO) * (T1 / Tave);
10873  Numeric a_o2 = 1.294 - 0.4545 * Tave / 296.00e0;
10874  Numeric a_h2o = 1.00e0;
10875  Numeric XKT = Tave / 1.4387752e0; // = (T*k_B) / (h*c)
10876 
10877  // FIXME Numeric Tfac = (Tave - TO) / (220.0e0 - TO); // [1]
10878  Numeric xktfac = ((1.000e0 / Tave) - (1.000e0 / 272)) /
10879  ((1.000e0 / 228) - (1.000e0 / 272)); // [1/K]
10880  Numeric xt_lin = (Tave - 272) / (228 - 272); // [K]
10881  Numeric factor = 0.000e0;
10882  if (vmrn2 > VMRCalcLimit) {
10883  factor = (1.000e0 / xLosmt) * (vmrn2 + a_o2 * vmro2 + a_h2o * vmrh2o);
10884  }
10885 
10886  // Molecular cross section calculated by CKD.
10887  // The cross sectionis calculated on the predefined
10888  // CKD wavenumber grid.
10889  Vector k(NPTC + addF77fields + 1, 0.); // [1/cm]
10890  Vector C0(NPTC + addF77fields + 1, 0.);
10891  for (Index J = 1; J <= NPTC; ++J) {
10892  Numeric VJ = V1C + (DVC * (Numeric)(J - 1));
10893  Numeric SN2 = 0.000e0;
10894  if ((xn2[J] > 0.000e0) && (xn2t[J] > 0.000e0)) {
10895  C0[J] = factor * xn2[J] * pow((xn2t[J] / xn2[J]), xktfac) / VJ;
10896  SN2 = tau_fac * C0[J];
10897  } else {
10898  C0[J] = factor * (xn2[J] + (xn2t[J] - xn2[J]) * xt_lin) / VJ;
10899  SN2 = tau_fac * C0[J];
10900  }
10901  // CKD cross section with radiative field
10902  k[J] = SN2 * RADFN_FUN(VJ, XKT); // [1/cm]
10903  }
10904 
10905  // Loop input frequency array. The previously calculated cross section
10906  // has therefore to be interpolated on the input frequencies.
10907  for (Index s = 0; s < n_f; ++s) {
10908  // calculate the associated wave number (= 1/wavelength)
10909  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10910  if ((V > N2N2_N2F_ckd_mt_250_v1) && (V < N2N2_N2F_ckd_mt_250_v2)) {
10911  // arts cross section [1/m]
10912  // interpolate the k vector on the f_grid grid
10913  pxsec(s, i) += ScalingFac * 1.000e2 * XINT_FUN(V1C, V2C, DVC, k, V);
10914  }
10915  }
10916  }
10917 }
10918 // =================================================================================
10919 
10921 
10959  const Numeric Cin,
10960  const String &model,
10961  ConstVectorView f_grid,
10962  ConstVectorView abs_p,
10963  ConstVectorView abs_t,
10964  ConstVectorView vmr _U_,
10965  const Verbosity &verbosity) {
10966  CREATE_OUT3;
10967 
10968  // check the model name about consistency
10969  if ((model != "user") && (model != "CKDMT100")) {
10970  ostringstream os;
10971  os << "!!ERROR!!\n"
10972  << "CKD_MT1.00 O2 CIA fundamental band:\n"
10973  << "INPUT model name is: " << model << ".\n"
10974  << "VALID model names are user and CKDMT100\n";
10975  throw runtime_error(os.str());
10976  }
10977 
10978  // scaling factor of the O2-O2 CIA fundamental band absorption
10979  Numeric ScalingFac = 1.0000e0;
10980  if (model == "user") {
10981  ScalingFac = Cin; // input scaling factor of calculated absorption
10982  }
10983 
10984  const Index n_p = abs_p.nelem(); // Number of pressure levels
10985  const Index n_f = f_grid.nelem(); // Number of frequencies
10986 
10987  // Check that dimensions of abs_p, abs_t, and vmr agree:
10988  assert(n_p == abs_t.nelem());
10989  assert(n_p == vmr.nelem());
10990 
10991  // Check that dimensions of pxsec are consistent with n_f
10992  // and n_p. It should be [n_f,n_p]:
10993  assert(n_f == pxsec.nrows());
10994  assert(n_p == pxsec.ncols());
10995 
10996  // ************************** CKD stuff ************************************
10997 
10998  const Numeric xLosmt = 2.686763e19; // Loschmidt Number [molecules/cm^3]
10999  const Numeric T1 = 273.0e0;
11000  const Numeric TO = 296.0e0;
11001  const Numeric PO = 1013.0e0;
11002 
11003  // It is assumed here that f_grid is monotonically increasing with index!
11004  // In future change this return into a change of the loop over
11005  // the frequency f_grid. n_f_new < n_f
11006  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11007  Numeric V2ABS = f_grid[n_f - 1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11008  if ((V1ABS < O2O2_O2F_ckd_mt_100_v1) || (V1ABS > O2O2_O2F_ckd_mt_100_v2) ||
11009  (V2ABS < O2O2_O2F_ckd_mt_100_v1) || (V2ABS > O2O2_O2F_ckd_mt_100_v2)) {
11010  out3 << "WARNING:\n"
11011  << " CKD_MT 1.00 O2-O2 CIA fundamental band:\n"
11012  << " input frequency vector exceeds range of model validity\n"
11013  << " " << O2O2_O2F_ckd_mt_100_v1 << "<->" << O2O2_O2F_ckd_mt_100_v2
11014  << "cm^-1\n";
11015  }
11016 
11017  // ------------------- subroutine O2_VER_1 ----------------------------
11018 
11019  // retrieve the appropriate array sequence of the CKD model array.
11021  Numeric V1C = V1ABS - DVC;
11022  Numeric V2C = V2ABS + DVC;
11023 
11024  int I1 = (int)((V1C - O2O2_O2F_ckd_mt_100_v1) / O2O2_O2F_ckd_mt_100_dv);
11025  if (V1C < O2O2_O2F_ckd_mt_100_v1) I1 = -1;
11027 
11028  int I2 = (int)((V2C - O2O2_O2F_ckd_mt_100_v1) / O2O2_O2F_ckd_mt_100_dv);
11029 
11030  int NPTC = I2 - I1 + 3;
11031  if (NPTC > O2O2_O2F_ckd_mt_100_npt) NPTC = O2O2_O2F_ckd_mt_100_npt + 1;
11032 
11033  V2C = V1C + O2O2_O2F_ckd_mt_100_dv * (Numeric)(NPTC - 1);
11034 
11035  if (NPTC < 1) {
11036  out3
11037  << "WARNING:\n"
11038  << " CKD_MT 1.00 O2 CIA fundamental band:\n"
11039  << " no elements of internal continuum coefficients could be found for the\n"
11040  << " input frequency range.\n"
11041  << " Leave the function without calculating the absorption.\n";
11042  return;
11043  }
11044 
11045  Vector xo2(NPTC + addF77fields, 0.);
11046  Vector xo2t(NPTC + addF77fields, 0.);
11047 
11048  for (Index J = 1; J <= NPTC; ++J) {
11049  Index I = I1 + J;
11050  if ((I > 0) && (I <= O2O2_O2F_ckd_mt_100_npt)) {
11051  xo2[J] = O2O2_O2Fo_ckd_mt_100[I];
11052  xo2t[J] = O2O2_O2Ft_ckd_mt_100[I];
11053  }
11054  }
11055 
11056  // ------------------- subroutine O2_VER_1 ----------------------------
11057 
11058  // Loop pressure/temperature:
11059  for (Index i = 0; i < n_p; ++i) {
11060  Numeric Tave = abs_t[i]; // [K]
11061  Numeric Pave = (abs_p[i] * 1.000e-2); // [hPa]
11062  // FIXME Numeric vmro2 = vmr[i]; // [1]
11063  Numeric WTOT = xLosmt * (Pave / PO) * (T1 / Tave); // [molecules/cm^2]
11064  Numeric tau_fac = WTOT * (Pave / PO) * (T1 / Tave);
11065 
11066  Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
11067 
11068  Numeric xktfac = (1.000e0 / TO) - (1.000e0 / Tave); // [1/K]
11069  Numeric factor = (1.000e0 / xLosmt);
11070 
11071  // Molecular cross section calculated by CKD.
11072  // The cross sectionis calculated on the predefined
11073  // CKD wavenumber grid.
11074  Vector k(NPTC + addF77fields + 1, 0.); // [1/cm]
11075  for (Index J = 1; J <= NPTC; ++J) {
11076  Numeric VJ = V1C + (DVC * (Numeric)(J - 1));
11077  Numeric SO2 = 0.0e0;
11078  if (xo2[J] > 0.0e0) {
11079  Numeric C0 = factor * xo2[J] * exp(xo2t[J] * xktfac) / VJ;
11080  SO2 = tau_fac * C0;
11081  }
11082 
11083  // CKD cross section without radiative field
11084  k[J] = SO2 * RADFN_FUN(VJ, XKT); // [1]
11085  }
11086 
11087  // Loop input frequency array. The previously calculated cross section
11088  // has therefore to be interpolated on the input frequencies.
11089  for (Index s = 0; s < n_f; ++s) {
11090  // calculate the associated wave number (= 1/wavelength)
11091  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11092  if ((V > O2O2_O2F_ckd_mt_100_v1) && (V < O2O2_O2F_ckd_mt_100_v2)) {
11093  // arts cross section [1/m]
11094  // interpolate the k vector on the f_grid grid
11095  pxsec(s, i) += ScalingFac * 1.000e2 * XINT_FUN(V1C, V2C, DVC, k, V);
11096  }
11097  }
11098  }
11099 }
11100 
11101 // =================================================================================
11102 
11104 
11158  const Numeric Cin,
11159  const String &model,
11160  ConstVectorView f_grid,
11161  ConstVectorView abs_p,
11162  ConstVectorView abs_t,
11163  ConstVectorView vmr,
11164  ConstVectorView abs_n2,
11165  const Verbosity &verbosity) {
11166  CREATE_OUT3;
11167 
11168  // check the model name about consistency
11169  if ((model != "user") && (model != "CKDMT100")) {
11170  ostringstream os;
11171  os << "!!ERROR!!\n"
11172  << "CKD_MT1.00 O2 band at 1.27 micrometer:\n"
11173  << "INPUT model name is: " << model << ".\n"
11174  << "VALID model names are user and CKDMT100\n";
11175  throw runtime_error(os.str());
11176  }
11177 
11178  // scaling factor of the O2 v0<-v0 band absorption
11179  Numeric ScalingFac = 1.0000e0;
11180  if (model == "user") {
11181  ScalingFac = Cin; // input scaling factor of calculated absorption
11182  };
11183 
11184  const Index n_p = abs_p.nelem(); // Number of pressure levels
11185  const Index n_f = f_grid.nelem(); // Number of frequencies
11186 
11187  // Check that dimensions of abs_p, abs_t, and vmr agree:
11188  assert(n_p == abs_t.nelem());
11189  assert(n_p == vmr.nelem());
11190 
11191  // Check that dimensions of pxsec are consistent with n_f
11192  // and n_p. It should be [n_f,n_p]:
11193  assert(n_f == pxsec.nrows());
11194  assert(n_p == pxsec.ncols());
11195 
11196  // ************************** CKD stuff ************************************
11197 
11198  // FIXME const Numeric xLosmt = 2.686763e19; // Loschmidt Number [molecules/cm^3]
11199  const Numeric T1 = 273.0e0;
11200  // FIXME const Numeric TO = 296.0e0;
11201  const Numeric PO = 1013.0e0;
11202 
11203  // It is assumed here that f_grid is monotonically increasing with index!
11204  // In future change this return into a change of the loop over
11205  // the frequency f_grid. n_f_new < n_f
11206  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11207  Numeric V2ABS = f_grid[n_f - 1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11208  if ((V1ABS < O2_00_ckd_mt_100_v1) || (V1ABS > O2_00_ckd_mt_100_v2) ||
11209  (V2ABS < O2_00_ckd_mt_100_v1) || (V2ABS > O2_00_ckd_mt_100_v2)) {
11210  out3 << "WARNING:\n"
11211  << " CKD_MT 1.00 O2 v0<-v0 band:\n"
11212  << " input frequency vector exceeds range of model validity\n"
11213  << " " << O2_00_ckd_mt_100_v1 << "<->" << O2_00_ckd_mt_100_v2
11214  << "cm^-1\n";
11215  }
11216 
11217  // ------------------- subroutine O2INF1 ----------------------------
11218 
11219  // retrieve the appropriate array sequence of the CKD model array.
11221  Numeric V1C = V1ABS - DVC;
11222  Numeric V2C = V2ABS + DVC;
11223 
11224  int I1 = (int)((V1C - O2_00_ckd_mt_100_v1) / O2_00_ckd_mt_100_dv);
11225  if (V1C < O2_00_ckd_mt_100_v1) I1 = I1 - 1;
11227 
11228  int I2 = (int)((V2C - O2_00_ckd_mt_100_v1) / O2_00_ckd_mt_100_dv);
11229 
11230  int NPTC = I2 - I1 + 3;
11231 
11232  V2C = V1C + O2_00_ckd_mt_100_dv * (Numeric)(NPTC - 1);
11233 
11234  if (NPTC < 1) {
11235  out3
11236  << "WARNING:\n"
11237  << " CKD_MT 1.00 O2 v0<-v0 band:\n"
11238  << " no elements of internal continuum coefficients could be found for the\n"
11239  << " input frequency range.\n"
11240  << " Leave the function without calculating the absorption.\n";
11241  return;
11242  }
11243 
11244  Numeric CO[(int)(NPTC + addF77fields)];
11245 
11246  for (Index J = 1; J <= NPTC; ++J) {
11247  CO[J] = 0.000e0;
11248  Index I = I1 + J;
11249  if ((I > 0) && (I <= O2_00_ckd_mt_100_npt)) {
11250  Numeric VJ = V1C + (DVC * (Numeric)(J - 1));
11251  CO[J] = O2_00_ckd_mt_100[I] / VJ;
11252  }
11253  }
11254 
11255  // ------------------- subroutine O2INF1 ----------------------------
11256 
11257  // Loop pressure/temperature:
11258  for (Index i = 0; i < n_p; ++i) {
11259  Numeric Tave = abs_t[i]; // [K]
11260  Numeric Pave = (abs_p[i] * 1.000e-2); // [hPa]
11261  Numeric vmro2 = vmr[i]; // [1]
11262  Numeric vmrn2 = abs_n2[i]; // [1]
11263  Numeric ADJWO2 = (vmro2 + 0.300e0 * vmrn2) / 0.446e0 * (Pave / PO) *
11264  (Pave / PO) * (T1 / Tave) * (T1 / Tave);
11265  Numeric XKT = Tave / 1.4387752e0; // = (T*k_B) / (h*c)
11266 
11267  // Molecular cross section calculated by CKD.
11268  // The cross sectionis calculated on the predefined
11269  // CKD wavenumber grid. The abs. coeff. is then the
11270  // cross section times the number density.
11271  Numeric k[NPTC + addF77fields]; // [1/cm]
11272  k[0] = 0.00e0; // not used array field
11273  for (Index J = 1; J <= NPTC; ++J) {
11274  Numeric VJ = V1C + (DVC * (Numeric)(J - 1));
11275  Numeric SO2 = 0.0e0;
11276  if (CO[J] > 0.0e0) {
11277  SO2 = ADJWO2 * CO[J];
11278  }
11279 
11280  // CKD (cross section * number density) with radiative field
11281  k[J] = SO2 * RADFN_FUN(VJ, XKT); // [1/cm]
11282  }
11283 
11284  // Loop input frequency array. The previously calculated cross section
11285  // has therefore to be interpolated on the input frequencies.
11286  for (Index s = 0; s < n_f; ++s) {
11287  // calculate the associated wave number (= 1/wavelength)
11288  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11289  if ((V > O2_00_ckd_mt_100_v1) && (V < O2_00_ckd_mt_100_v2)) {
11290  // arts cross section [1/m]
11291  // interpolate the k vector on the f_grid grid
11292  pxsec(s, i) += ScalingFac * 1.000e2 *
11293  XINT_FUN(V1C, V2C, DVC, k, NPTC + addF77fields, V);
11294  }
11295  }
11296  }
11297 }
11298 
11299 // =================================================================================
11300 
11302 
11345  const Numeric Cin,
11346  const String &model,
11347  ConstVectorView f_grid,
11348  ConstVectorView abs_p,
11349  ConstVectorView abs_t,
11350  ConstVectorView vmr,
11351  const Verbosity &verbosity) {
11352  CREATE_OUT3;
11353 
11354  // check the model name about consistency
11355  if ((model != "user") && (model != "CKDMT100")) {
11356  ostringstream os;
11357  os << "!!ERROR!!\n"
11358  << "CKD_MT1.00 O2 band at 1.06 micrometer:\n"
11359  << "INPUT model name is: " << model << ".\n"
11360  << "VALID model names are user and CKDMT100\n";
11361  throw runtime_error(os.str());
11362  }
11363 
11364  // scaling factor of the O2 v1<-v0 band absorption
11365  Numeric ScalingFac = 1.0000e0;
11366  if (model == "user") {
11367  ScalingFac = Cin; // input scaling factor of calculated absorption
11368  };
11369 
11370  const Index n_p = abs_p.nelem(); // Number of pressure levels
11371  const Index n_f = f_grid.nelem(); // Number of frequencies
11372 
11373  // Check that dimensions of abs_p, abs_t, and vmr agree:
11374  assert(n_p == abs_t.nelem());
11375  assert(n_p == vmr.nelem());
11376 
11377  // Check that dimensions of pxsec are consistent with n_f
11378  // and n_p. It should be [n_f,n_p]:
11379  assert(n_f == pxsec.nrows());
11380  assert(n_p == pxsec.ncols());
11381 
11382  // ************************** CKD stuff ************************************
11383 
11384  const Numeric xLosmt = 2.686763e19; // Loschmidt Number [molecules/cm^3]
11385  const Numeric T1 = 273.0e0;
11386  const Numeric TO = 296.0e0;
11387  const Numeric PO = 1013.0e0;
11388  // FIXME const Numeric vmr_argon = 9.000e-3; // VMR of argon is assumed to be const.
11389 
11390  // CKD_MT 1.00 implementation of oxygen v1<-v0 band model of
11391  // Mlawer, Clough, Brown, Stephen, Landry, Goldman, Murcray,
11392  // "Observed Atmospheric Collision Induced Absorption in Near Infrared Oxygen Bands",
11393  // Journal of Geophysical Research, vol 103, no. D4, pp. 3859-3863, 1998.
11394  const Numeric V1S = O2_10_ckd_mt_100_v1;
11395  const Numeric V2S = O2_10_ckd_mt_100_v2;
11396  const Numeric DVS = O2_10_ckd_mt_100_dv;
11397  const Numeric V1_osc = 9375.000e0;
11398  const Numeric HW1 = 58.960e0;
11399  const Numeric V2_osc = 9439.000e0;
11400  const Numeric HW2 = 45.040e0;
11401  const Numeric S1 = 1.166e-4;
11402  const Numeric S2 = 3.086e-5;
11403 
11404  // It is assumed here that f_grid is monotonically increasing with index!
11405  // In future change this return into a change of the loop over
11406  // the frequency f_grid. n_f_new < n_f
11407  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11408  Numeric V2ABS = f_grid[n_f - 1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11409  if ((V1ABS < O2_10_ckd_mt_100_v1) || (V1ABS > O2_10_ckd_mt_100_v2) ||
11410  (V2ABS < O2_10_ckd_mt_100_v1) || (V2ABS > O2_10_ckd_mt_100_v2)) {
11411  out3 << "WARNING:\n"
11412  << " CKD_MT 1.00 O2 v1<-v0 band:\n"
11413  << " input frequency vector exceeds range of model validity\n"
11414  << " " << O2_10_ckd_mt_100_v1 << "<->" << O2_10_ckd_mt_100_v2
11415  << "cm^-1\n";
11416  }
11417 
11418  // ------------------- subroutine O2INF2 ----------------------------
11419 
11420  // retrieve the appropriate array sequence of the CKD model array.
11421  Numeric DVC = DVS;
11422  Numeric V1C = V1ABS - DVC;
11423  Numeric V2C = V2ABS + DVC;
11424 
11425  int NPTC = (int)(((V2C - V1C) / DVC) + 3);
11426 
11427  V2C = V1C + (DVC * (Numeric)(NPTC - 1));
11428 
11429  if (NPTC < 1) {
11430  out3
11431  << "WARNING:\n"
11432  << " CKD_MT 1.00 O2 v1<-v0 band:\n"
11433  << " no elements of internal continuum coefficients could be found for the\n"
11434  << " input frequency range.\n"
11435  << " Leave the function without calculating the absorption.\n";
11436  return;
11437  }
11438 
11439  Numeric C[NPTC + addF77fields];
11440  C[0] = 0.000e0; // not used field of array
11441 
11442  for (Index J = 1; J <= NPTC; ++J) {
11443  C[J] = 0.000e0;
11444  Numeric VJ = V1C + (DVC * (Numeric)(J - 1));
11445 
11446  if ((VJ > V1S) && (VJ < V2S)) {
11447  Numeric DV1 = VJ - V1_osc;
11448  Numeric DV2 = VJ - V2_osc;
11449 
11450  Numeric DAMP1 = 1.00e0;
11451  Numeric DAMP2 = 1.00e0;
11452 
11453  if (DV1 < 0.00e0) {
11454  DAMP1 = exp(DV1 / 176.100e0);
11455  }
11456 
11457  if (DV2 < 0.00e0) {
11458  DAMP2 = exp(DV2 / 176.100e0);
11459  }
11460 
11461  Numeric O2INF =
11462  0.31831e0 *
11463  (((S1 * DAMP1 / HW1) / (1.000e0 + pow((DV1 / HW1), (Numeric)2.0e0))) +
11464  ((S2 * DAMP2 / HW2) /
11465  (1.000e0 + pow((DV2 / HW2), (Numeric)2.0e0)))) *
11466  1.054e0;
11467  C[J] = O2INF / VJ;
11468  }
11469  }
11470 
11471  // ------------------- subroutine O2INF2 ----------------------------
11472 
11473  // Loop pressure/temperature:
11474  for (Index i = 0; i < n_p; ++i) {
11475  Numeric Tave = abs_t[i]; // [K]
11476  Numeric Pave = (abs_p[i] * 1.000e-2); // [hPa]
11477  Numeric vmro2 = vmr[i]; // [1]
11478  Numeric WTOT =
11479  1.000e-20 * xLosmt * (Pave / PO) * (T1 / Tave); // [molecules/cm^2]
11480  Numeric ADJWO2 = (vmro2 / 0.209e0) * WTOT * (Pave / PO) * (TO / Tave);
11481  Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
11482 
11483  // Molecular cross section calculated by CKD.
11484  // The cross sectionis calculated on the predefined
11485  // CKD wavenumber grid.
11486  Numeric k[NPTC + addF77fields]; // [1/cm]
11487  k[0] = 0.00e0; // not used array field
11488  for (Index J = 1; J <= NPTC; ++J) {
11489  Numeric VJ = V1C + (DVC * (Numeric)(J - 1));
11490  Numeric SO2 = 0.0e0;
11491  if (C[J] > 0.0e0) {
11492  SO2 = ADJWO2 * C[J];
11493  }
11494 
11495  // CKD cross section without radiative field
11496  k[J] = SO2 * RADFN_FUN(VJ, XKT); // [1]
11497  }
11498 
11499  // Loop input frequency array. The previously calculated cross section
11500  // has therefore to be interpolated on the input frequencies.
11501  for (Index s = 0; s < n_f; ++s) {
11502  // calculate the associated wave number (= 1/wavelength)
11503  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11504  if ((V > V1S) && (V < V2S)) {
11505  // arts cross section [1/m]
11506  // interpolate the k vector on the f_grid grid
11507  pxsec(s, i) += ScalingFac * 1.000e2 *
11508  XINT_FUN(V1C, V2C, DVC, k, NPTC + addF77fields, V);
11509  }
11510  }
11511  }
11512 }
11513 // =================================================================================
11514 
11516 
11556  const Numeric Cin,
11557  const String &model,
11558  ConstVectorView f_grid,
11559  ConstVectorView abs_p,
11560  ConstVectorView abs_t,
11562  const Verbosity &verbosity) {
11563  CREATE_OUT3;
11564 
11565  // check the model name about consistency
11566  if ((model != "user") && (model != "CKDMT252")) {
11567  ostringstream os;
11568  os << "!!ERROR!!\n"
11569  << "CKD_MT2.50 O2 band at 1.06 micrometer:\n"
11570  << "INPUT model name is: " << model << ".\n"
11571  << "VALID model names are user and CKDMT252\n";
11572  throw runtime_error(os.str());
11573  }
11574 
11575  // scaling factor of the O2 v1<-v0 band absorption
11576  Numeric ScalingFac = 1.0000e0;
11577  if (model == "user") {
11578  ScalingFac = Cin; // input scaling factor of calculated absorption
11579  };
11580 
11581  const Index n_p = abs_p.nelem(); // Number of pressure levels
11582  const Index n_f = f_grid.nelem(); // Number of frequencies
11583 
11584  // Check that dimensions of abs_p, abs_t, and vmr agree:
11585  assert(n_p == abs_t.nelem());
11586  assert(n_p == vmr.nelem());
11587 
11588  // Check that dimensions of pxsec are consistent with n_f
11589  // and n_p. It should be [n_f,n_p]:
11590  assert(n_f == pxsec.nrows());
11591  assert(n_p == pxsec.ncols());
11592 
11593  // ************************** CKD stuff ************************************
11594 
11595  const Numeric xLosmt = 2.686763e19; // Loschmidt Number [molecules/cm^3]
11596  const Numeric T1 = 273.0e0;
11597  // const Numeric TO = 296.0e0;
11598  const Numeric PO = 1013.0e0;
11599  // FIXME const Numeric vmr_argon = 9.000e-3; // VMR of argon is assumed to be const.
11600 
11601  // "Observed Atmospheric Collision Induced Absorption in Near Infrared Oxygen Bands",
11602  // Journal of Geophysical Research, vol 103, no. D4, pp. 3859-3863, 1998.
11603  const Numeric V1S = O2_vis_ckd_mt_250_v1;
11604  const Numeric V2S = O2_vis_ckd_mt_250_v2;
11605  const Numeric DVS = O2_vis_ckd_mt_250_dv;
11606 
11607  // It is assumed here that f_grid is monotonically increasing with index!
11608  // In future change this return into a change of the loop over
11609  // the frequency f_grid. n_f_new < n_f
11610  Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11611  Numeric V2ABS = f_grid[n_f - 1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11612  if ((V1ABS < O2_vis_ckd_mt_250_v1) || (V1ABS > O2_vis_ckd_mt_250_v2) ||
11613  (V2ABS < O2_vis_ckd_mt_250_v1) || (V2ABS > O2_vis_ckd_mt_250_v2)) {
11614  out3 << "WARNING:\n"
11615  << " CKD_MT 2.50 O2 vis band:\n"
11616  << " input frequency vector exceeds range of model validity\n"
11617  << " " << O2_vis_ckd_mt_250_v1 << "<->" << O2_vis_ckd_mt_250_v2
11618  << "cm^-1\n";
11619  }
11620 
11621  // ------------------- subroutine O2INF2 ----------------------------
11622 
11623  // retrieve the appropriate array sequence of the CKD model array.
11624  Numeric DVC = DVS;
11625  Numeric V1C = V1ABS - DVC;
11626  Numeric V2C = V2ABS + DVC;
11627 
11628  int I1 = (int)((V1C - O2_vis_ckd_mt_250_v1) / O2_vis_ckd_mt_250_dv);
11629  if (V1C < O2_vis_ckd_mt_250_v1) I1 = I1 - 1;
11631 
11632  int I2 = (int)((V2C - O2_vis_ckd_mt_250_v1) / O2_vis_ckd_mt_250_dv);
11633 
11634  int NPTC = I2 - I1 + 3;
11635 
11636  V2C = V1C + O2_vis_ckd_mt_250_dv * (Numeric)(NPTC - 1);
11637 
11638  if (NPTC < 1) {
11639  out3
11640  << "WARNING:\n"
11641  << " CKD_MT 2.50 O2 vis band:\n"
11642  << " no elements of internal continuum coefficients could be found for the\n"
11643  << " input frequency range.\n"
11644  << " Leave the function without calculating the absorption.\n";
11645  return;
11646  }
11647 
11648  Numeric CO[(int)(NPTC + addF77fields)];
11649 
11650  for (Index J = 1; J <= NPTC; ++J) {
11651  CO[J] = 0.000e0;
11652  Index I = I1 + J;
11653  if ((I > 0) && (I <= O2_vis_ckd_mt_250_npt)) {
11654  Numeric VJ = V1C + (DVC * (Numeric)(J - 1));
11655  CO[J] = O2_vis_ckd_mt_250[I] / VJ;
11656  }
11657  }
11658 
11659  // ------------------- subroutine O2_vis ----------------------------
11660 
11661  // Loop pressure/temperature:
11662  for (Index i = 0; i < n_p; ++i) {
11663  Numeric Tave = abs_t[i]; // [K]
11664  Numeric Pave = (abs_p[i] * 1.000e-2); // [hPa]
11665  // Numeric vmro2 = vmr[i]; // [1]
11666  Numeric WTOT =
11667  1.000e-20 * xLosmt * (Pave / PO) * (T1 / Tave); // [molecules/cm^2]
11668  Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
11669  Numeric tau_fac = WTOT * (Pave / PO) * (T1 / Tave);
11670 
11671  // these are the conditions reported in the paper by Greenblatt et al. for
11672  // the spectrum of Fig. 1.
11673 
11674  // conditions: 55 atm.; 296 K; 89.5 cm path
11675 
11676  Numeric factor = 1.000e0 / (xLosmt * 1.e-20 *
11677  pow((55.e0 * 273.0e0 / 296.0e0), 2) * 89.5);
11678 
11679  // Molecular cross section calculated by CKD.
11680  // The cross sectionis calculated on the predefined
11681  // CKD wavenumber grid.
11682  Numeric k[NPTC + addF77fields]; // [1/cm]
11683  k[0] = 0.00e0; // not used array field
11684  for (Index J = 1; J <= NPTC; ++J) {
11685  Numeric VJ = V1C + (DVC * (Numeric)(J - 1));
11686  Numeric SO2 = 0.0e0;
11687 
11688  SO2 = CO[J] * factor * tau_fac;
11689 
11690  // CKD cross section without radiative field
11691  k[J] = SO2 * RADFN_FUN(VJ, XKT); // [1]
11692  }
11693 
11694  // Loop input frequency array. The previously calculated cross section
11695  // has therefore to be interpolated on the input frequencies.
11696  for (Index s = 0; s < n_f; ++s) {
11697  // calculate the associated wave number (= 1/wavelength)
11698  Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11699  if ((V > V1S) && (V < V2S)) {
11700  // arts cross section [1/m]
11701  // interpolate the k vector on the f_grid grid
11702  pxsec(s, i) += ScalingFac * 1.000e2 *
11703  XINT_FUN(V1C, V2C, DVC, k, NPTC + addF77fields, V);
11704  }
11705  }
11706  }
11707 }
11708 
11709 // #################################################################################
11710 
11712 
11745  int isf,
11746  const Numeric Cin,
11747  const String &model,
11748  ConstVectorView f_grid,
11749  ConstVectorView abs_p,
11750  ConstVectorView abs_t,
11751  ConstVectorView vmr,
11752  ConstVectorView abs_n2,
11753  const Verbosity &verbosity) {
11754  CREATE_OUT3;
11755 
11756  //
11757  //
11758  // external function to call (original F77 code translated with f2c)
11759  /* INPUT PARAMETERS: */
11760  /* P [hPa] TOTAL PRESSURE */
11761  /* T [K] TEMPERATURE */
11762  /* VMRH2O [1] H2O VOLUME MIXING RATIO */
11763  /* VMRN2 [1] N2 VOLUME MIXING RATIO */
11764  /* VMRO2 [1] O2 VOLUME MIXING RATIO */
11765  /* FREQ [Hz] FREQUENCY OF CALCULATION */
11766  extern double artsckd_(double p,
11767  double t,
11768  double vmrh2o,
11769  double vmrn2,
11770  double vmro2,
11771  double freq,
11772  int ivc);
11773  //
11774  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
11775  Numeric XFAC = 1.0000; // scaling factor
11776  // ---------------------------------------------------------------------------------------
11777 
11778  // check the model name about consistency
11779  if ((model != "user") && (model != "CKD24")) {
11780  ostringstream os;
11781  os << "!!ERROR!!\n"
11782  << "CKDv2.4.2 H2O self/foreign continuum:\n"
11783  << "INPUT model name is: " << model << ".\n"
11784  << "VALID model names are user and CKD24\n";
11785  throw runtime_error(os.str());
11786  }
11787 
11788  // select the parameter set (!!model dominates values!!):
11789  if (model == "CKD24") {
11790  XFAC = 1.0000;
11791  } else if (model == "user") {
11792  XFAC = Cin;
11793  } else {
11794  if (isf == 0) {
11795  ostringstream os;
11796  os << "H2O-SelfContCKD24: ERROR! Wrong model values given.\n"
11797  << "allowed models are: 'CKD24', 'user'" << '\n';
11798  throw runtime_error(os.str());
11799  }
11800  if (isf == 1) {
11801  ostringstream os;
11802  os << "H2O-ForeignContCKD: ERROR! Wrong model values given.\n"
11803  << "allowed models are: 'CKD24', 'user'" << '\n';
11804  throw runtime_error(os.str());
11805  }
11806  }
11807 
11808  if (isf == 0) {
11809  out3 << "H2O-SelfContCKD24: (model=" << model
11810  << ") parameter values in use:\n"
11811  << " XFAC = " << XFAC << "\n";
11812  }
11813  if (isf == 1) {
11814  out3 << "H2O-ForeignContCKD: (model=" << model
11815  << ") parameter values in use:\n"
11816  << " XFAC = " << XFAC << "\n";
11817  }
11818 
11819  const Index n_p = abs_p.nelem(); // Number of pressure levels
11820  const Index n_f = f_grid.nelem(); // Number of frequencies
11821 
11822  // Check that dimensions of abs_p, abs_t, and vmr agree:
11823  assert(n_p == abs_t.nelem());
11824  assert(n_p == vmr.nelem());
11825 
11826  // Check that dimensions of pxsec are consistent with n_f
11827  // and n_p. It should be [n_f,n_p]:
11828  assert(n_f == pxsec.nrows());
11829  assert(n_p == pxsec.ncols());
11830 
11831  // ivc = 1 : N2-N2 CKD version of Borysow-Fromhold model
11832  // ivc = 21 : H2O CKD2.4 self cont part
11833  // ivc = 22 : H2O CKD2.4 foreign cont part
11834  // ivc = 31 : MPMf87/s93 self cont part
11835  // ivc = 32 : MPMf87/s93 foreign cont part
11836  int ivc = 55;
11837  if (isf == 0) {
11838  ivc = 21; // CKD2.4 self continuum
11839  // ivc = 31; // MPMf87/s93 self continuum
11840  }
11841  if (isf == 1) {
11842  ivc = 22; // CKD2.4 foreign continuum
11843  //ivc = 32; // MPMf87/s93 foreign continuum
11844  }
11845  if ((ivc != 1) && (ivc != 21) && (ivc != 22) && (ivc != 31) && (ivc != 32)) {
11846  ostringstream os;
11847  os << "!!ERROR: CKD24 H2O model: wrong input parameter isf (=0,1) given!\n"
11848  << "retrun without calculation!"
11849  << "\n"
11850  << "actual value of isf is " << isf << "\n";
11851  throw runtime_error(os.str());
11852  return;
11853  }
11854  // ivc = 1;
11855 
11856  // Loop pressure/temperature:
11857  for (Index i = 0; i < n_p; ++i) {
11858  double T = (double)abs_t[i]; // [K]
11859  double p = (double)(abs_p[i] * 1.000e-2); // [hPa]
11860  double vmrh2o = (double)vmr[i]; // [1]
11861  double vmrn2 = (double)abs_n2[i]; // [1]
11862  double vmro2 = 0.0e0; // [1]
11863 
11864  //cout << "------------------------------------------------\n";
11865  //cout << "CKD2.4 H2O: ivc =" << ivc << "\n";
11866  //cout << "CKD2.4 H2O: T =" << T << " K\n";
11867  //cout << "CKD2.4 H2O: p =" << p << " hPa\n";
11868  //cout << "CKD2.4 H2O: vmrh2o=" << vmrh2o << "\n";
11869  //cout << "CKD2.4 H2O: vmrn2 =" << vmrn2 << "\n";
11870  //cout << "CKD2.4 H2O: vmro2 =" << vmro2 << "\n";
11871  // Loop frequency:
11872  for (Index s = 0; s < n_f; ++s) {
11873  // the second vmr of N2 will be multiplied at the stage of
11874  // absorption calculation: abs = vmr * pxsec.
11875  double f = (double)f_grid[s]; // [Hz]
11876  if (ivc == 1) { // ---------- N2 -----------------
11877  if (abs_n2[i] > 0.0e0) {
11878  //cout << "CKD2.4 N2: f =" << f << " Hz\n";
11879  double cont = artsckd_(p, T, vmrh2o, vmrn2, vmro2, f, ivc);
11880  pxsec(s, i) += (Numeric)(cont / vmr[i]);
11881  //cout << "CKD2.4 N2: abs =" << cont << " 1/m\n";
11882  }
11883  } else { // ---------------- H2O -----------------
11884  if (vmr[i] > 0.0e0) {
11885  //cout << "CKD2.4 H2O: f =" << f << " Hz\n";
11886  double cont = artsckd_(p, T, vmrh2o, vmrn2, vmro2, f, ivc);
11887  pxsec(s, i) += (Numeric)(cont / vmr[i]);
11888  //cout << "CKD2.4 H2O: abs =" << cont << " 1/m\n";
11889  }
11890  }
11891  }
11892  }
11893  return;
11894 }
11895 //
11896 // #################################################################################
11898 
11923  const Numeric Cin,
11924  const String &model,
11925  ConstVectorView f_grid,
11926  ConstVectorView abs_p,
11927  ConstVectorView abs_t,
11928  ConstVectorView vmr,
11929  const Verbosity &verbosity) {
11930  CREATE_OUT3;
11931 
11932  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
11933  // standard values for the Pardo et al. model (IEEE, Trans. Ant. Prop.,
11934  // Vol 49, No 12, pp. 1683-1694, 2001)
11935  const Numeric C_ATM = 0.0315; // [1/m]
11936  // ---------------------------------------------------------------------------------------
11937 
11938  // select the parameter set (!!model dominates parameters!!):
11939  Numeric C;
11940  if (model == "ATM") {
11941  C = C_ATM;
11942  } else if (model == "user") {
11943  C = Cin;
11944  } else {
11945  ostringstream os;
11946  os << "H2O-ForeignContATM01: ERROR! Wrong model values given.\n"
11947  << "allowed models are: 'ATM', 'user'" << '\n';
11948  throw runtime_error(os.str());
11949  }
11950  out3 << "H2O-ForeignContATM01: (model=" << model
11951  << ") parameter values in use:\n"
11952  << " C_f = " << C << "\n";
11953 
11954  const Index n_p = abs_p.nelem(); // Number of pressure levels
11955  const Index n_f = f_grid.nelem(); // Number of frequencies
11956 
11957  // Check that dimensions of abs_p, abs_t, and vmr agree:
11958  assert(n_p == abs_t.nelem());
11959  assert(n_p == vmr.nelem());
11960 
11961  // Check that dimensions of pxsec are consistent with n_f
11962  // and n_p. It should be [n_f,n_p]:
11963  assert(n_f == pxsec.nrows());
11964  assert(n_p == pxsec.ncols());
11965 
11966  // Loop over pressure/temperature grid:
11967  for (Index i = 0; i < n_p; ++i) {
11968  // since this is an effective "dry air" continuum, it is not really
11969  // it is not specifically attributed to N2, so we need the total
11970  // dry air part in total which is equal to the total minus the
11971  // water vapor pressure:
11972  Numeric pd = abs_p[i] * (1.00000e0 - vmr[i]); // [Pa]
11973  // since the H2O VMR will be multiplied in abs_coefCalc, we omit it here
11974  Numeric pwdummy = abs_p[i]; // [Pa]
11975  // Loop over frequency grid:
11976  for (Index s = 0; s < n_f; ++s) {
11977  // Becaue this is an effective "dry air" continuum, it is not really
11978  // specific N2 but mainly caused by N2. Therefore the N2 vmr must be
11979  // canceled out here which is later in abs_coefCalc multiplied
11980  // (calculation: abs = vmr * pxsec):
11981  pxsec(s, i) += C * // strength [1/(m*Hz²Pa²)]
11982  pow((f_grid[s] / (Numeric)2.25e11),
11983  (Numeric)2.) * // quadratic f dependence [1]
11984  pow(((Numeric)300.0 / abs_t[i]),
11985  (Numeric)3.) * // free T dependence [1]
11986  (pd / 1.01300e5) * // p_dry dependence [1]
11987  (pwdummy / 1.01300e5); // p_H2O dependence [1]
11988  }
11989  }
11990 }
11991 //
11992 // #################################################################################
11993 //
11995 
12034  const Numeric fcenter,
12035  const Numeric b1,
12036  const Numeric b2,
12037  const Numeric b3,
12038  const Numeric b4,
12039  const Numeric b5,
12040  const Numeric b6,
12041  const String &model,
12042  ConstVectorView f_grid,
12043  ConstVectorView abs_p,
12044  ConstVectorView abs_t,
12045  ConstVectorView vmr,
12046  const Verbosity &verbosity) {
12047  CREATE_OUT3;
12048 
12049  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
12050  // standard values for the MPM93 H2O continuum model
12051  // (AGARD 52nd Specialists Meeting of the Electromagnetic Wave
12052  // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21):
12053  const Numeric MPM93fo_orig = 1780.000e9; // [Hz]
12054  const Numeric MPM93b1_orig = 22300.000; // [Hz/Pa]
12055  const Numeric MPM93b2_orig = 0.952; // [1]
12056  const Numeric MPM93b3_orig = 17.600e4; // [Hz/Pa]
12057  const Numeric MPM93b4_orig = 30.500; // [1]
12058  const Numeric MPM93b5_orig = 2.000; // [1]
12059  const Numeric MPM93b6_orig = 5.000; // [1]
12060  // ---------------------------------------------------------------------------------------
12061 
12062  // select the parameter set (!!model goes for values!!):
12063  Numeric MPM93fopcl, MPM93b1pcl, MPM93b2pcl, MPM93b3pcl, MPM93b4pcl,
12064  MPM93b5pcl, MPM93b6pcl;
12065  if (model == "MPM93") {
12066  MPM93fopcl = MPM93fo_orig;
12067  MPM93b1pcl = MPM93b1_orig;
12068  MPM93b2pcl = MPM93b2_orig;
12069  MPM93b3pcl = MPM93b3_orig;
12070  MPM93b4pcl = MPM93b4_orig;
12071  MPM93b5pcl = MPM93b5_orig;
12072  MPM93b6pcl = MPM93b6_orig;
12073  } else if (model == "user") {
12074  MPM93fopcl = fcenter;
12075  MPM93b1pcl = b1;
12076  MPM93b2pcl = b2;
12077  MPM93b3pcl = b3;
12078  MPM93b4pcl = b4;
12079  MPM93b5pcl = b5;
12080  MPM93b6pcl = b6;
12081  } else {
12082  ostringstream os;
12083  os << "H2O-ContMPM93: ERROR! Wrong model values given.\n"
12084  << "allowed models are: 'MPM93', 'user'" << '\n';
12085  throw runtime_error(os.str());
12086  }
12087  out3 << "H2O-ContMPM93: (model=" << model << ") parameter values in use:\n"
12088  << " fo = " << MPM93fopcl << "\n"
12089  << " b1 = " << MPM93b1pcl << "\n"
12090  << " b2 = " << MPM93b2pcl << "\n"
12091  << " b3 = " << MPM93b3pcl << "\n"
12092  << " b4 = " << MPM93b4pcl << "\n"
12093  << " b5 = " << MPM93b5pcl << "\n"
12094  << " b6 = " << MPM93b6pcl << "\n";
12095 
12096  const Index n_p = abs_p.nelem(); // Number of pressure levels
12097  const Index n_f = f_grid.nelem(); // Number of frequencies
12098 
12099  // Check that dimensions of abs_p, abs_t, and vmr agree:
12100  assert(n_p == abs_t.nelem());
12101  assert(n_p == vmr.nelem());
12102 
12103  // Check that dimensions of pxsec are consistent with n_f
12104  // and n_p. It should be [n_f,n_p]:
12105  assert(n_f == pxsec.nrows());
12106  assert(n_p == pxsec.ncols());
12107 
12108  // Loop pressure/temperature:
12109  for (Index i = 0; i < n_p; ++i) {
12110  Numeric th = 300.0 / abs_t[i];
12111  // the vmr of H2O will be multiplied at the stage of absorption calculation:
12112  // abs / vmr * pxsec.
12113  Numeric strength = MPM93b1pcl * abs_p[i] * pow(th, (Numeric)3.5) *
12114  exp(MPM93b2pcl * (1 - th));
12115  Numeric gam = MPM93b3pcl * 0.001 *
12116  (MPM93b4pcl * abs_p[i] * vmr[i] * pow(th, MPM93b6pcl) +
12117  abs_p[i] * (1.000 - vmr[i]) * pow(th, MPM93b5pcl));
12118  // Loop frequency:
12119  for (Index s = 0; s < n_f; ++s) {
12120  // pxsec = abs/vmr [1/m] but MPM89 is in [dB/km] --> conversion necessary
12121  pxsec(s, i) += dB_km_to_1_m * 0.1820 * f_grid[s] * strength *
12122  MPMLineShapeFunction(gam, MPM93fopcl, f_grid[s]);
12123  }
12124  }
12125  return;
12126 }
12127 //
12128 // #################################################################################
12129 // ################################# OXYGEN MODELS #################################
12130 // #################################################################################
12132 
12161  const Numeric CCin, // continuum scale factor
12162  const Numeric CLin, // line strength scale factor
12163  const Numeric CWin, // line broadening scale factor
12164  const Numeric COin, // line coupling scale factor
12165  const String &model,
12166  ConstVectorView f_grid,
12167  ConstVectorView abs_p,
12168  ConstVectorView abs_t,
12169  ConstVectorView abs_h2o,
12170  ConstVectorView vmr,
12171  const Verbosity &verbosity) {
12172  CREATE_OUT3;
12173 
12174  //
12175  // Coefficients are from Liebe et al., AGARD CP-May93, Paper 3/1-10
12176  // 0 1 2 3 4 5 6
12177  // f0 a1 a2 a3 a4 a5 a6
12178  // [GHz] [kHz/hPa] [1] [MHz/hPa] [1] [1/kPa] [1]
12179  const Numeric mpm85[48][7] = {
12180  {49.452379, 0.12, 11.830, 8.40, 0.0, 5.600, 1.700},
12181  {49.962257, 0.34, 10.720, 8.50, 0.0, 5.600, 1.700},
12182  {50.474238, 0.94, 9.690, 8.60, 0.0, 5.600, 1.700},
12183  {50.987748, 2.46, 8.690, 8.70, 0.0, 5.500, 1.700},
12184  {51.503350, 6.08, 7.740, 8.90, 0.0, 5.600, 1.800},
12185  {52.021409, 14.14, 6.840, 9.20, 0.0, 5.500, 1.800},
12186  {52.542393, 31.02, 6.000, 9.40, 0.0, 5.700, 1.800},
12187  {53.066906, 64.10, 5.220, 9.70, 0.0, 5.300, 1.900},
12188  {53.595748, 124.70, 4.480, 10.00, 0.0, 5.400, 1.800},
12189  {54.129999, 228.00, 3.810, 10.20, 0.0, 4.800, 2.000},
12190  {54.671157, 391.80, 3.190, 10.50, 0.0, 4.800, 1.900},
12191  {55.221365, 631.60, 2.620, 10.79, 0.0, 4.170, 2.100},
12192  {55.783800, 953.50, 2.115, 11.10, 0.0, 3.750, 2.100},
12193  {56.264777, 548.90, 0.010, 16.46, 0.0, 7.740, 0.900},
12194  {56.363387, 1344.00, 1.655, 11.44, 0.0, 2.970, 2.300},
12195  {56.968180, 1763.00, 1.255, 11.81, 0.0, 2.120, 2.500},
12196  {57.612481, 2141.00, 0.910, 12.21, 0.0, 0.940, 3.700},
12197  {58.323874, 2386.00, 0.621, 12.66, 0.0, -0.550, -3.100},
12198  {58.446589, 1457.00, 0.079, 14.49, 0.0, 5.970, 0.800},
12199  {59.164204, 2404.00, 0.386, 13.19, 0.0, -2.440, 0.100},
12200  {59.590982, 2112.00, 0.207, 13.60, 0.0, 3.440, 0.500},
12201  {60.306057, 2124.00, 0.207, 13.82, 0.0, -4.130, 0.700},
12202  {60.434775, 2461.00, 0.386, 12.97, 0.0, 1.320, -1.000},
12203  {61.150558, 2504.00, 0.621, 12.48, 0.0, -0.360, 5.800},
12204  {61.800152, 2298.00, 0.910, 12.07, 0.0, -1.590, 2.900},
12205  {62.411212, 1933.00, 1.255, 11.71, 0.0, -2.660, 2.300},
12206  {62.486253, 1517.00, 0.078, 14.68, 0.0, -4.770, 0.900},
12207  {62.997974, 1503.00, 1.660, 11.39, 0.0, -3.340, 2.200},
12208  {63.568515, 1087.00, 2.110, 11.08, 0.0, -4.170, 2.000},
12209  {64.127764, 733.50, 2.620, 10.78, 0.0, -4.480, 2.000},
12210  {64.678900, 463.50, 3.190, 10.50, 0.0, -5.100, 1.800},
12211  {65.224067, 274.80, 3.810, 10.20, 0.0, -5.100, 1.900},
12212  {65.764769, 153.00, 4.480, 10.00, 0.0, -5.700, 1.800},
12213  {66.302088, 80.09, 5.220, 9.70, 0.0, -5.500, 1.800},
12214  {66.836827, 39.46, 6.000, 9.40, 0.0, -5.900, 1.700},
12215  {67.369595, 18.32, 6.840, 9.20, 0.0, -5.600, 1.800},
12216  {67.900862, 8.01, 7.740, 8.90, 0.0, -5.800, 1.700},
12217  {68.431001, 3.30, 8.690, 8.70, 0.0, -5.700, 1.700},
12218  {68.960306, 1.28, 9.690, 8.60, 0.0, -5.600, 1.700},
12219  {69.489021, 0.47, 10.720, 8.50, 0.0, -5.600, 1.700},
12220  {70.017342, 0.16, 11.830, 8.40, 0.0, -5.600, 1.700},
12221  {118.750341, 945.00, 0.000, 15.92, 0.0, -0.440, 0.900},
12222  {368.498350, 67.90, 0.020, 19.20, 0.6, 0.000, 0.000},
12223  {424.763120, 638.00, 0.011, 19.16, 0.6, 0.000, 0.000},
12224  {487.249370, 235.00, 0.011, 19.20, 0.6, 0.000, 0.000},
12225  {715.393150, 99.60, 0.089, 18.10, 0.6, 0.000, 0.000},
12226  {773.838730, 671.00, 0.079, 18.10, 0.6, 0.000, 0.000},
12227  {834.145330, 180.00, 0.079, 18.10, 0.6, 0.000, 0.000},
12228  };
12229 
12230  // number of lines of Liebe O2-line catalog (0-47 lines)
12231  const Index i_first = 0;
12232  const Index i_last = 47; // all the spec. lines up to 1THz
12233  // const Index i_last = 40; // only the 60GHz complex + 118GHz line
12234 
12235  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
12236  // standard values for the MPM85 model (Liebe, Radio Science, 20, 1069-1089, 1985):
12237  const Numeric CC_MPM85 = 1.00000;
12238  const Numeric CL_MPM85 = 1.00000;
12239  const Numeric CW_MPM85 = 1.00000;
12240  const Numeric CO_MPM85 = 1.00000;
12241  int AppCutoff = 0;
12242  // ---------------------------------------------------------------------------------------
12243 
12244  // select the parameter set (!!model dominates values!!):
12245  Numeric CC, CL, CW, CO;
12246  if (model == "MPM85") {
12247  CC = CC_MPM85;
12248  CL = CL_MPM85;
12249  CW = CW_MPM85;
12250  CO = CO_MPM85;
12251  } else if (model == "MPM85Lines") {
12252  CC = 0.000;
12253  CL = CL_MPM85;
12254  CW = CW_MPM85;
12255  CO = CO_MPM85;
12256  } else if (model == "MPM85Continuum") {
12257  CC = CC_MPM85;
12258  CL = 0.000;
12259  CW = 0.000;
12260  CO = 0.000;
12261  } else if (model == "MPM85NoCoupling") {
12262  CC = CC_MPM85;
12263  CL = CL_MPM85;
12264  CW = CW_MPM85;
12265  CO = 0.000;
12266  } else if (model == "MPM85NoCutoff") {
12267  CC = CC_MPM85;
12268  CL = CL_MPM85;
12269  CW = CW_MPM85;
12270  CO = CO_MPM85;
12271  AppCutoff = 1;
12272  } else if (model == "user") {
12273  CC = CCin;
12274  CL = CLin;
12275  CW = CWin;
12276  CO = COin;
12277  } else {
12278  ostringstream os;
12279  os << "O2-MPM85: ERROR! Wrong model values given.\n"
12280  << "Valid models are: 'MPM85' 'MPM85Lines' 'MPM85Continuum' 'MPM85NoCoupling' 'MPM85NoCutoff'"
12281  << "and 'user'" << '\n';
12282  throw runtime_error(os.str());
12283  }
12284  out3 << "O2-MPM85: (model=" << model << ") parameter values in use:\n"
12285  << " CC = " << CC << "\n"
12286  << " CL = " << CL << "\n"
12287  << " CW = " << CW << "\n"
12288  << " CO = " << CO << "\n";
12289 
12290  // O2 continuum parameters of MPM92:
12291  const Numeric S0 = 6.140e-4; // line strength [ppm]
12292  const Numeric G0 =
12293  5.600e-3; // line width [GHz/kPa]
12294  const Numeric X0 = 0.800; // temperature dependence of line width [1]
12295 
12296  const Index n_p = abs_p.nelem(); // Number of pressure levels
12297  const Index n_f = f_grid.nelem(); // Number of frequencies
12298 
12299  // const = VMR * ISORATIO = 0.20946 * 0.99519
12300  // this constant is already incorporated into the line strength, so we
12301  // have top devide the line strength by this value since arts multiplies pxsec
12302  // by these variables later in abs_coefCalc.
12303  const Numeric VMRISO = 0.2085;
12304 
12305  // Check that dimensions of abs_p, abs_t, and vmr agree:
12306  assert(n_p == abs_t.nelem());
12307  assert(n_p == vmr.nelem());
12308 
12309  // Check that dimensions of pxsec are consistent with n_f
12310  // and n_p. It should be [n_f,n_p]:
12311  assert(n_f == pxsec.nrows());
12312  assert(n_p == pxsec.ncols());
12313 
12314  // Loop pressure/temperature (pressure in hPa therefore the factor 0.01)
12315  for (Index i = 0; i < n_p; ++i) {
12316  // check if O2-VMR is exactly zero (caused by zeropadding), then return 0.
12317  if (vmr[i] == 0.) {
12318  pxsec(joker, i) = 0.;
12319  continue;
12320  }
12321 
12322  // check if O2-VMR will cause an underflow due to division by zero:
12323  if (vmr[i] < VMRCalcLimit) {
12324  ostringstream os;
12325  os << "ERROR: MPM87 O2 full absorption model has detected a O2 volume mixing ratio of "
12326  << vmr[i] << " which is below the threshold of " << VMRCalcLimit
12327  << ".\n"
12328  << "Therefore no calculation is performed.\n";
12329  throw runtime_error(os.str());
12330  return;
12331  }
12332 
12333  // relative inverse temperature [1]
12334  Numeric theta = (300.0 / abs_t[i]);
12335  // H2O partial pressure [kPa]
12336  Numeric pwv = Pa_to_kPa * abs_p[i] * abs_h2o[i];
12337  // dry air partial pressure [kPa]
12338  Numeric pda = (Pa_to_kPa * abs_p[i]) - pwv;
12339  // here the total pressure is devided by the O2 vmr for the
12340  // P_dry calculation because we calculate pxsec and not abs: abs = vmr * pxsec
12341  Numeric pda_dummy = pda;
12342  // O2 continuum strength [ppm]
12343  Numeric strength_cont = S0 * pda_dummy * pow(theta, (Numeric)2.);
12344  // O2 continuum pseudo line broadening [GHz]
12345  Numeric gam_cont = G0 * (pda + 1.10 * pwv) * pow(theta, X0); // GHz
12346 
12347  // Loop over input frequency
12348  for (Index s = 0; s < n_f; ++s) {
12349  // input frequency in [GHz]
12350  Numeric ff = f_grid[s] * Hz_to_GHz;
12351  // O2 continuum absorption [1/m]
12352  // cross section: pxsec = absorption / var
12353  // the vmr of O2 will be multiplied at the stage of absorption calculation:
12354  // here the rolloff parameter FAC is implemented!
12355  // Numeric FAC = 1.000 / ( pow( ff, 2) + pow( 60.000, 2) );
12356  // if we let the non-proofen rollofff away as in further version:
12357  Numeric FAC = 1.000;
12358  Numeric Nppc = CC * strength_cont * FAC * ff * gam_cont /
12359  (pow(ff, (Numeric)2.) + pow(gam_cont, (Numeric)2.));
12360 
12361  // Loop over MPM85 O2 spectral lines:
12362  Numeric Nppl = 0.0;
12363  for (Index l = i_first; l <= i_last; ++l) {
12364  // line strength [ppm] S=A(1,I)*P*V**3*EXP(A(2,I)*(1.-V))*1.E-6
12365  Numeric strength = CL * mpm85[l][1] * 1.000e-6 * pda_dummy *
12366  pow(theta, (Numeric)3.) *
12367  exp(mpm85[l][2] * (1.000 - theta)) / mpm85[l][0];
12368  // line broadening parameter [GHz]
12369  Numeric gam = CW * (mpm85[l][3] * 1.000e-3 *
12370  ((pda * pow(theta, ((Numeric)0.80 - mpm85[l][4]))) +
12371  (1.10 * pwv * theta)));
12372  // line mixing parameter [1]
12373  Numeric delta =
12374  CO * mpm85[l][5] * 1.000e-3 * pda * pow(theta, mpm85[l][6]);
12375  // absorption [dB/km] like in the original MPM92
12376  Nppl += strength * MPMLineShapeO2Function(gam, mpm85[l][0], ff, delta);
12377  }
12378  // in MPM85 there is a cutoff for O2 line absorption if abs_l < 0
12379  // absorption cannot be less than 0 according to MPM87 philosophy.
12380  // since this cutoff is only 'detectable' in the source code and not in the
12381  // publications we assume this cutoff also for MPM85 since it is also
12382  // implemented in MPM87.
12383  if (AppCutoff == 0) {
12384  if (Nppl < 0.000) Nppl = 0.0000;
12385  }
12386  //
12387  // O2 line absorption [1/m]
12388  // cross section: pxsec = absorption / var
12389  // the vmr of O2 will be multiplied at the stage of absorption calculation:
12390  pxsec(s, i) += dB_km_to_1_m * 0.1820 * ff * (Nppl + Nppc) / VMRISO;
12391  }
12392  }
12393  return;
12394 }
12395 //
12396 // #################################################################################
12398 
12431  const Numeric CCin, // continuum scale factor
12432  const Numeric CLin, // line strength scale factor
12433  const Numeric CWin, // line broadening scale factor
12434  const Numeric COin, // line coupling scale factor
12435  const String &model,
12436  ConstVectorView f_grid,
12437  ConstVectorView abs_p,
12438  ConstVectorView abs_t,
12439  ConstVectorView abs_h2o,
12440  ConstVectorView vmr,
12441  const Verbosity &verbosity) {
12442  CREATE_OUT3;
12443 
12444  //
12445  // Coefficients are from Liebe et al., AGARD CP-May93, Paper 3/1-10
12446  // 0 1 2 3 4 5 6
12447  // f0 a1 a2 a3 a4 a5 a6
12448  // [GHz] [kHz/hPa] [1] [MHz/hPa] [1] [1/kPa]
12449  const Numeric mpm87[48][7] = {
12450  {49.452379, 0.12, 11.830, 8.40, 0.0, 6.600, 1.700}, // 0
12451  {49.962257, 0.34, 10.720, 8.50, 0.0, 6.600, 1.700}, // 1
12452  {50.474238, 0.94, 9.690, 8.60, 0.0, 6.600, 1.700}, // 2
12453  {50.987748, 2.46, 8.690, 8.70, 0.0, 6.500, 1.700}, // 3
12454  {51.503350, 6.08, 7.740, 8.90, 0.0, 6.627, 1.800}, // 4
12455  {52.021409, 14.14, 6.840, 9.20, 0.0, 6.347, 1.800}, // 5
12456  {52.542393, 31.02, 6.000, 9.40, 0.0, 6.046, 1.800}, // 6
12457  {53.066906, 64.10, 5.220, 9.70, 0.0, 5.719, 1.900}, // 7
12458  {53.595748, 124.70, 4.480, 10.00, 0.0, 5.400, 1.800}, // 8
12459  {54.129999, 228.00, 3.810, 10.20, 0.0, 5.157, 2.000}, // 9
12460  {54.671157, 391.80, 3.190, 10.50, 0.0, 4.783, 1.900}, // 10
12461  {55.221365, 631.60, 2.620, 10.79, 0.0, 4.339, 2.100}, // 11
12462  {55.783800, 953.50, 2.115, 11.10, 0.0, 4.011, 2.100}, // 12
12463  {56.264777, 548.90, 0.010, 16.46, 0.0, 2.772, 0.900}, // 13
12464  {56.363387, 1344.00, 1.655, 11.44, 0.0, 3.922, 2.300}, // 14
12465  {56.968180, 1763.00, 1.255, 11.81, 0.0, 3.398, 2.500}, // 15
12466  {57.612481, 2141.00, 0.910, 12.21, 0.0, 1.145, 3.200}, // 16
12467  {58.323874, 2386.00, 0.621, 12.66, 0.0, -0.317, -2.500}, // 17
12468  {58.446589, 1457.00, 0.079, 14.49, 0.0, 6.270, 0.800}, // 18
12469  {59.164204, 2404.00, 0.386, 13.19, 0.0, -4.119, 0.100}, // 19
12470  {59.590982, 2112.00, 0.207, 13.60, 0.0, 6.766, 0.500}, // 20
12471  {60.306057, 2124.00, 0.207, 13.82, 0.0, -6.183, 0.700}, // 21
12472  {60.434775, 2461.00, 0.386, 12.97, 0.0, 3.290, -0.400}, // 22
12473  {61.150558, 2504.00, 0.621, 12.48, 0.0, -1.591, 3.500}, // 23
12474  {61.800152, 2298.00, 0.910, 12.07, 0.0, -2.068, 2.900}, // 24
12475  {62.411212, 1933.00, 1.255, 11.71, 0.0, -4.158, 2.300}, // 25
12476  {62.486253, 1517.00, 0.078, 14.68, 0.0, -4.068, 0.900}, // 26
12477  {62.997974, 1503.00, 1.660, 11.39, 0.0, -4.482, 2.200}, // 27
12478  {63.568515, 1087.00, 2.110, 11.08, 0.0, -4.442, 2.000}, // 28
12479  {64.127764, 733.50, 2.620, 10.78, 0.0, -4.687, 2.000}, // 29
12480  {64.678900, 463.50, 3.190, 10.50, 0.0, -5.074, 1.800}, // 30
12481  {65.224067, 274.80, 3.810, 10.20, 0.0, -5.403, 1.900}, // 31
12482  {65.764769, 153.00, 4.480, 10.00, 0.0, -5.610, 1.800}, // 32
12483  {66.302088, 80.09, 5.220, 9.70, 0.0, -5.896, 1.800}, // 33
12484  {66.836827, 39.46, 6.000, 9.40, 0.0, -6.194, 1.700}, // 34
12485  {67.369595, 18.32, 6.840, 9.20, 0.0, -6.468, 1.800}, // 35
12486  {67.900862, 8.01, 7.740, 8.90, 0.0, -6.718, 1.700}, // 36
12487  {68.431001, 3.30, 8.690, 8.70, 0.0, -6.700, 1.700}, // 37
12488  {68.960306, 1.28, 9.690, 8.60, 0.0, -6.600, 1.700}, // 38
12489  {69.489021, 0.47, 10.720, 8.50, 0.0, -6.600, 1.700}, // 39
12490  {70.017342, 0.16, 11.830, 8.40, 0.0, -6.600, 1.700}, // 40
12491  {118.750341, 945.00, 0.000, 16.30, 0.0, -0.134, 0.800}, // 41
12492  {368.498350, 67.90, 0.020, 19.20, 0.6, 0.000, 0.000}, // 42
12493  {424.763120, 638.00, 0.011, 19.16, 0.6, 0.000, 0.000}, // 43
12494  {487.249370, 235.00, 0.011, 19.20, 0.6, 0.000, 0.000}, // 44
12495  {715.393150, 99.60, 0.089, 18.10, 0.6, 0.000, 0.000}, // 45
12496  {773.838730, 671.00, 0.079, 18.10, 0.6, 0.000, 0.000}, // 46
12497  {834.145330, 180.00, 0.079, 18.10, 0.6, 0.000, 0.000} // 47
12498  };
12499 
12500  // number of lines of Liebe O2-line catalog (0-47 lines)
12501  const Index i_first = 0;
12502  const Index i_last = 47; // all the spec. lines up to 1THz
12503  // const Index i_last = 40; // only the 60GHz complex + 118GHz line
12504 
12505  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
12506  // standard values for the MPM87 model (NITA Report 87-224):
12507  const Numeric CC_MPM87 = 1.00000;
12508  const Numeric CL_MPM87 = 1.00000;
12509  const Numeric CW_MPM87 = 1.00000;
12510  const Numeric CO_MPM87 = 1.00000;
12511  int AppCutoff = 0;
12512  // ---------------------------------------------------------------------------------------
12513 
12514  // select the parameter set (!!model dominates values!!):
12515  Numeric CC, CL, CW, CO;
12516  if (model == "MPM87") {
12517  CC = CC_MPM87;
12518  CL = CL_MPM87;
12519  CW = CW_MPM87;
12520  CO = CO_MPM87;
12521  } else if (model == "MPM87Lines") {
12522  CC = 0.000;
12523  CL = CL_MPM87;
12524  CW = CW_MPM87;
12525  CO = CO_MPM87;
12526  } else if (model == "MPM87Continuum") {
12527  CC = CC_MPM87;
12528  CL = 0.000;
12529  CW = 0.000;
12530  CO = 0.000;
12531  } else if (model == "MPM87NoCoupling") {
12532  CC = CC_MPM87;
12533  CL = CL_MPM87;
12534  CW = CW_MPM87;
12535  CO = 0.000;
12536  } else if (model == "MPM87NoCutoff") {
12537  // !!ATTENTION!!
12538  // In the window regions the total absorption can get negative values.
12539  // So be carefull with this selection!
12540  CC = CC_MPM87;
12541  CL = CL_MPM87;
12542  CW = CW_MPM87;
12543  CO = CO_MPM87;
12544  AppCutoff = 1;
12545  } else if (model == "user") {
12546  CC = CCin;
12547  CL = CLin;
12548  CW = CWin;
12549  CO = COin;
12550  } else {
12551  ostringstream os;
12552  os << "O2-MPM87: ERROR! Wrong model values given.\n"
12553  << "Valid models are: 'MPM87' 'MPM87Lines' 'MPM87Continuum' 'MPM87NoCoupling' 'MPM87NoCutoff'"
12554  << "and 'user'" << '\n';
12555  throw runtime_error(os.str());
12556  }
12557  out3 << "O2-MPM87: (model=" << model << ") parameter values in use:\n"
12558  << " CC = " << CC << "\n"
12559  << " CL = " << CL << "\n"
12560  << " CW = " << CW << "\n"
12561  << " CO = " << CO << "\n";
12562 
12563  // O2 continuum parameters of MPM92:
12564  const Numeric S0 = 6.140e-4; // line strength [ppm]
12565  const Numeric G0 =
12566  4.800e-3; // line width [GHz/kPa] !! 14% lower than in all the other versions !!
12567  const Numeric X0 = 0.800; // temperature dependence of line width [1]
12568 
12569  const Index n_p = abs_p.nelem(); // Number of pressure levels
12570  const Index n_f = f_grid.nelem(); // Number of frequencies
12571 
12572  // const = VMR * ISORATIO = 0.20946 * 0.99519
12573  // this constant is already incorporated into the line strength, so we
12574  // have top devide the line strength by this value since arts multiplies pxsec
12575  // by these variables later in abs_coefCalc.
12576  const Numeric VMRISO = 0.2085;
12577 
12578  // Check that dimensions of abs_p, abs_t, and vmr agree:
12579  assert(n_p == abs_t.nelem());
12580  assert(n_p == vmr.nelem());
12581 
12582  // Check that dimensions of pxsec are consistent with n_f
12583  // and n_p. It should be [n_f,n_p]:
12584  assert(n_f == pxsec.nrows());
12585  assert(n_p == pxsec.ncols());
12586 
12587  // Loop pressure/temperature (pressure in hPa therefore the factor 0.01)
12588  for (Index i = 0; i < n_p; ++i) {
12589  // check if O2-VMR is exactly zero (caused by zeropadding), then return 0.
12590  if (vmr[i] == 0.) {
12591  pxsec(joker, i) = 0.;
12592  continue;
12593  }
12594 
12595  // check if O2-VMR will cause an underflow due to division by zero:
12596  if (vmr[i] < VMRCalcLimit) {
12597  ostringstream os;
12598  os << "ERROR: MPM87 O2 full absorption model has detected a O2 volume mixing ratio of "
12599  << vmr[i] << " which is below the threshold of " << VMRCalcLimit
12600  << ".\n"
12601  << "Therefore no calculation is performed.\n";
12602  throw runtime_error(os.str());
12603  return;
12604  }
12605 
12606  // relative inverse temperature [1]
12607  Numeric theta = (300.0 / abs_t[i]);
12608  // H2O partial pressure [kPa]
12609  Numeric pwv = Pa_to_kPa * abs_p[i] * abs_h2o[i];
12610  // dry air partial pressure [kPa]
12611  Numeric pda = (Pa_to_kPa * abs_p[i]) - pwv;
12612  // here the total pressure is devided by the O2 vmr for the
12613  // P_dry calculation because we calculate pxsec and not abs: abs = vmr * pxsec
12614  Numeric pda_dummy = pda;
12615  // O2 continuum strength [ppm]
12616  Numeric strength_cont = S0 * pda_dummy * pow(theta, (Numeric)2.);
12617  // O2 continuum pseudo line broadening [GHz]
12618  Numeric gam_cont = G0 * (pda + 1.10 * pwv) * pow(theta, X0); // GHz
12619 
12620  // Loop over input frequency
12621  for (Index s = 0; s < n_f; ++s) {
12622  // input frequency in [GHz]
12623  Numeric ff = f_grid[s] * Hz_to_GHz;
12624  // O2 continuum absorption [1/m]
12625  // cross section: pxsec = absorption / var
12626  // the vmr of O2 will be multiplied at the stage of absorption calculation:
12627  Numeric Nppc = CC * strength_cont * ff * gam_cont /
12628  (pow(ff, (Numeric)2.) + pow(gam_cont, (Numeric)2.));
12629 
12630  // Loop over MPM87 O2 spectral lines:
12631  Numeric Nppl = 0.0;
12632  for (Index l = i_first; l <= i_last; ++l) {
12633  // line strength [ppm] S=A(1,I)*P*V**3*EXP(A(2,I)*(1.-V))*1.E-6
12634  Numeric strength = CL * mpm87[l][1] * 1.000e-6 * pda_dummy *
12635  pow(theta, (Numeric)3.) *
12636  exp(mpm87[l][2] * (1.000 - theta)) / mpm87[l][0];
12637  // line broadening parameter [GHz]
12638  Numeric gam = CW * (mpm87[l][3] * 1.000e-3 *
12639  ((pda * pow(theta, ((Numeric)0.80 - mpm87[l][4]))) +
12640  (1.10 * pwv * theta)));
12641  // line mixing parameter [1]
12642  Numeric delta =
12643  CO * mpm87[l][5] * 1.000e-3 * pda * pow(theta, mpm87[l][6]);
12644  // absorption [dB/km] like in the original MPM92
12645  Nppl += strength * MPMLineShapeO2Function(gam, mpm87[l][0], ff, delta);
12646  }
12647  // in MPM87 there is a cutoff for O2 line absorption if abs_l < 0
12648  // absorption cannot be less than 0 according to MPM87 source code.
12649  if (AppCutoff == 0) {
12650  if (Nppl < 0.000) Nppl = 0.0000;
12651  }
12652  //
12653  // O2 line absorption [1/m]
12654  // cross section: pxsec = absorption / var
12655  // the vmr of O2 will be multiplied at the stage of absorption calculation:
12656  pxsec(s, i) += dB_km_to_1_m * 0.1820 * ff * (Nppl + Nppc) / VMRISO;
12657  }
12658  }
12659  return;
12660 }
12661 //
12662 // #################################################################################
12664 
12694  const Numeric CCin, // continuum scale factor
12695  const Numeric CLin, // line strength scale factor
12696  const Numeric CWin, // line broadening scale factor
12697  const Numeric COin, // line coupling scale factor
12698  const String &model,
12699  ConstVectorView f_grid,
12700  ConstVectorView abs_p,
12701  ConstVectorView abs_t,
12702  ConstVectorView abs_h2o,
12703  ConstVectorView vmr,
12704  const Verbosity &verbosity) {
12705  CREATE_OUT3;
12706 
12707  //
12708  // Coefficients are from Liebe et al., AGARD CP-May93, Paper 3/1-10
12709  // 0 1 2 3 4 5 6
12710  // f0 a1 a2 a3 a4 a5 a6
12711  // [GHz] [kHz/hPa] [1] [MHz/hPa] [1] [1/kPa]
12712  const Numeric mpm89[44][7] = {
12713  {50.474238, 0.94, 9.694, 8.60, 0.0, 1.600, 5.520}, // 0
12714  {50.987749, 2.46, 8.694, 8.70, 0.0, 1.400, 5.520}, // 1
12715  {51.503350, 6.08, 7.744, 8.90, 0.0, 1.165, 5.520}, // 2
12716  {52.021410, 14.14, 6.844, 9.20, 0.0, 0.883, 5.520}, // 3
12717  {52.542394, 31.02, 6.004, 9.40, 0.0, 0.579, 5.520}, // 4
12718  {53.066907, 64.10, 5.224, 9.70, 0.0, 0.252, 5.520}, // 5
12719  {53.595749, 124.70, 4.484, 10.00, 0.0, -0.066, 5.520}, // 6
12720  {54.130000, 228.00, 3.814, 10.20, 0.0, -0.314, 5.520}, // 7
12721  {54.671159, 391.80, 3.194, 10.50, 0.0, -0.706, 5.520}, // 8
12722  {55.221367, 631.60, 2.624, 10.79, 0.0, -1.151, 5.514}, // 9
12723  {55.783802, 953.50, 2.119, 11.10, 0.0, -0.920, 5.025}, // 10
12724  {56.264775, 548.90, 0.015, 16.46, 0.0, 2.881, -0.069}, // 11
12725  {56.363389, 1344.00, 1.660, 11.44, 0.0, -0.596, 4.750}, // 12
12726  {56.968206, 1763.00, 1.260, 11.81, 0.0, -0.556, 4.104}, // 13
12727  {57.612484, 2141.00, 0.915, 12.21, 0.0, -2.414, 3.536}, // 14
12728  {58.323877, 2386.00, 0.626, 12.66, 0.0, -2.635, 2.686}, // 15
12729  {58.446590, 1457.00, 0.084, 14.49, 0.0, 6.848, -0.647}, // 16
12730  {59.164207, 2404.00, 0.391, 13.19, 0.0, -6.032, 1.858}, // 17
12731  {59.590983, 2112.00, 0.212, 13.60, 0.0, 8.266, -1.413}, // 18
12732  {60.306061, 2124.00, 0.212, 13.82, 0.0, -7.170, 0.916}, // 19
12733  {60.434776, 2461.00, 0.391, 12.97, 0.0, 5.664, -2.323}, // 20
12734  {61.150560, 2504.00, 0.626, 12.48, 0.0, 1.731, -3.039}, // 21
12735  {61.800154, 2298.00, 0.915, 12.07, 0.0, 1.738, -3.797}, // 22
12736  {62.411215, 1933.00, 1.260, 11.71, 0.0, -0.048, -4.277}, // 23
12737  {62.486260, 1517.00, 0.083, 14.68, 0.0, -4.290, 0.238}, // 24
12738  {62.997977, 1503.00, 1.665, 11.39, 0.0, 0.134, -4.860}, // 25
12739  {63.568518, 1087.00, 2.115, 11.08, 0.0, 0.541, -5.079}, // 26
12740  {64.127767, 733.50, 2.620, 10.78, 0.0, 0.814, -5.525}, // 27
12741  {64.678903, 463.50, 3.195, 10.50, 0.0, 0.415, -5.520}, // 28
12742  {65.224071, 274.80, 3.815, 10.20, 0.0, 0.069, -5.520}, // 29
12743  {65.764772, 153.00, 4.485, 10.00, 0.0, -0.143, -5.520}, // 30
12744  {66.302091, 80.09, 5.225, 9.70, 0.0, -0.428, -5.520}, // 31
12745  {66.836830, 39.46, 6.005, 9.40, 0.0, -0.726, -5.520}, // 32
12746  {67.369598, 18.32, 6.845, 9.20, 0.0, -1.002, -5.520}, // 33
12747  {67.900867, 8.01, 7.745, 8.90, 0.0, -1.255, -5.520}, // 34
12748  {68.431005, 3.30, 8.695, 8.70, 0.0, -1.500, -5.520}, // 35
12749  {68.960311, 1.28, 9.695, 8.60, 0.0, -1.700, -5.520}, // 36
12750  {118.750343, 945.00, 0.009, 16.30, 0.0, -0.247, 0.003}, // 37
12751  {368.498350, 67.90, 0.049, 19.20, 0.6, 0.000, 0.000}, // 38
12752  {424.763124, 638.00, 0.044, 19.16, 0.6, 0.000, 0.000}, // 39
12753  {487.249370, 235.00, 0.049, 19.20, 0.6, 0.000, 0.000}, // 40
12754  {715.393150, 99.60, 0.145, 18.10, 0.6, 0.000, 0.000}, // 41
12755  {773.839675, 671.00, 0.130, 18.10, 0.6, 0.000, 0.000}, // 42
12756  {834.145330, 180.00, 0.147, 18.10, 0.6, 0.000, 0.000} // 43
12757  };
12758 
12759  // number of lines of Liebe O2-line catalog (0-43 lines)
12760  const Index i_first = 0;
12761  const Index i_last = 43; // all the spec. lines up to 1THz
12762  // const Index i_last = 37; // only the 60GHz complex + 118GHz line
12763 
12764  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
12765  // standard values for the MPM89 model (IJIMW, Vol 10, pp. 631-650, 1989):
12766  const Numeric CC_MPM89 = 1.00000;
12767  const Numeric CL_MPM89 = 1.00000;
12768  const Numeric CW_MPM89 = 1.00000;
12769  const Numeric CO_MPM89 = 1.00000;
12770  int AppCutoff = 0;
12771  // ---------------------------------------------------------------------------------------
12772 
12773  // select the parameter set (!!model dominates values!!):
12774  Numeric CC, CL, CW, CO;
12775  if (model == "MPM89") {
12776  CC = CC_MPM89;
12777  CL = CL_MPM89;
12778  CW = CW_MPM89;
12779  CO = CO_MPM89;
12780  } else if (model == "MPM89Lines") {
12781  CC = 0.000;
12782  CL = CL_MPM89;
12783  CW = CW_MPM89;
12784  CO = CO_MPM89;
12785  } else if (model == "MPM89Continuum") {
12786  CC = CC_MPM89;
12787  CL = 0.000;
12788  CW = 0.000;
12789  CO = 0.000;
12790  } else if (model == "MPM89NoCoupling") {
12791  CC = CC_MPM89;
12792  CL = CL_MPM89;
12793  CW = CW_MPM89;
12794  CO = 0.000;
12795  } else if (model == "MPM89NoCutoff") {
12796  CC = CC_MPM89;
12797  CL = CL_MPM89;
12798  CW = CW_MPM89;
12799  CO = CO_MPM89;
12800  AppCutoff = 1;
12801  } else if (model == "user") {
12802  CC = CCin;
12803  CL = CLin;
12804  CW = CWin;
12805  CO = COin;
12806  } else {
12807  ostringstream os;
12808  os << "O2-MPM89: ERROR! Wrong model values given.\n"
12809  << "Valid models are: 'MPM89' 'MPM89Lines' 'MPM89Continuum' 'MPM89NoCoupling' 'MPM89NoCutoff'"
12810  << "and 'user'" << '\n';
12811  throw runtime_error(os.str());
12812  }
12813  out3 << "O2-MPM89: (model=" << model << ") parameter values in use:\n"
12814  << " CC = " << CC << "\n"
12815  << " CL = " << CL << "\n"
12816  << " CW = " << CW << "\n"
12817  << " CO = " << CO << "\n";
12818 
12819  // O2 continuum parameters of MPM92:
12820  const Numeric S0 = 6.140e-4; // line strength [ppm]
12821  const Numeric G0 = 5.60e-3; // line width [GHz/kPa]
12822  const Numeric X0 = 0.800; // temperature dependence of line width [1]
12823 
12824  const Index n_p = abs_p.nelem(); // Number of pressure levels
12825  const Index n_f = f_grid.nelem(); // Number of frequencies
12826 
12827  // const = VMR * ISORATIO = 0.20946 * 0.99519
12828  // this constant is already incorporated into the line strength, so we
12829  // have top devide the line strength by this value since arts multiplies pxsec
12830  // by these variables later in abs_coefCalc.
12831  const Numeric VMRISO = 0.2085;
12832 
12833  // Check that dimensions of abs_p, abs_t, and vmr agree:
12834  assert(n_p == abs_t.nelem());
12835  assert(n_p == vmr.nelem());
12836 
12837  // Check that dimensions of pxsec are consistent with n_f
12838  // and n_p. It should be [n_f,n_p]:
12839  assert(n_f == pxsec.nrows());
12840  assert(n_p == pxsec.ncols());
12841 
12842  // Loop pressure/temperature (pressure in hPa therefore the factor 0.01)
12843  for (Index i = 0; i < n_p; ++i) {
12844  // check if O2-VMR is exactly zero (caused by zeropadding), then return 0.
12845  if (vmr[i] == 0.) {
12846  pxsec(joker, i) = 0.;
12847  continue;
12848  }
12849 
12850  // check if O2-VMR will cause an underflow due to division by zero:
12851  if (vmr[i] < VMRCalcLimit) {
12852  ostringstream os;
12853  os << "ERROR: MPM89 O2 full absorption model has detected a O2 volume mixing ratio of "
12854  << vmr[i] << " which is below the threshold of " << VMRCalcLimit
12855  << ".\n"
12856  << "Therefore no calculation is performed.\n";
12857  throw runtime_error(os.str());
12858  return;
12859  }
12860 
12861  // relative inverse temperature [1]
12862  Numeric theta = (300.0 / abs_t[i]);
12863  // H2O partial pressure [kPa]
12864  Numeric pwv = Pa_to_kPa * abs_p[i] * abs_h2o[i];
12865  // dry air partial pressure [kPa]
12866  Numeric pda = (Pa_to_kPa * abs_p[i]) - pwv;
12867  // here the total pressure is devided by the O2 vmr for the
12868  // P_dry calculation because we calculate pxsec and not abs: abs = vmr * pxsec
12869  Numeric pda_dummy = pda;
12870  // O2 continuum strength [ppm]
12871  Numeric strength_cont = S0 * pda_dummy * pow(theta, (Numeric)2.);
12872  // O2 continuum pseudo line broadening [GHz]
12873  Numeric gam_cont = G0 * (pwv + pda) * pow(theta, X0); // GHz
12874 
12875  // Loop over input frequency
12876  for (Index s = 0; s < n_f; ++s) {
12877  // input frequency in [GHz]
12878  Numeric ff = f_grid[s] * Hz_to_GHz;
12879  // O2 continuum absorption [1/m]
12880  // cross section: pxsec = absorption / var
12881  // the vmr of O2 will be multiplied at the stage of absorption calculation:
12882  Numeric Nppc = CC * strength_cont * ff * gam_cont /
12883  (pow(ff, (Numeric)2.) + pow(gam_cont, (Numeric)2.));
12884 
12885  // Loop over MPM89 O2 spectral lines:
12886  Numeric Nppl = 0.0;
12887  for (Index l = i_first; l <= i_last; ++l) {
12888  // line strength [ppm] S=A(1,I)*P*V**3*EXP(A(2,I)*(1.-V))*1.E-6
12889  Numeric strength = CL * mpm89[l][1] * 1.000e-6 * pda_dummy *
12890  pow(theta, (Numeric)3.) *
12891  exp(mpm89[l][2] * (1.000 - theta)) / mpm89[l][0];
12892  // line broadening parameter [GHz]
12893  Numeric gam = CW * (mpm89[l][3] * 1.000e-3 *
12894  ((pda * pow(theta, ((Numeric)0.80 - mpm89[l][4]))) +
12895  (1.10 * pwv * theta)));
12896  // line mixing parameter [1]
12897  Numeric delta = CO * ((mpm89[l][5] + mpm89[l][6] * theta) * 1.000e-3 *
12898  pda * pow(theta, (Numeric)0.8));
12899  // absorption [dB/km] like in the original MPM92
12900  Nppl += strength * MPMLineShapeO2Function(gam, mpm89[l][0], ff, delta);
12901  }
12902  // in MPM89 we adopt the cutoff for O2 line absorption if abs_l < 0
12903  // absorption cannot be less than 0 according to MPM87 source code.
12904  if (AppCutoff == 0) {
12905  if (Nppl < 0.000) Nppl = 0.0000;
12906  }
12907  //
12908  // O2 line absorption [1/m]
12909  // cross section: pxsec = absorption / var
12910  // the vmr of O2 will be multiplied at the stage of absorption calculation:
12911  pxsec(s, i) += dB_km_to_1_m * 0.1820 * ff * (Nppl + Nppc) / VMRISO;
12912  }
12913  }
12914  return;
12915 }
12916 //
12917 // #################################################################################
12918 //
12920 
12951  const Numeric CCin, // continuum scale factor
12952  const Numeric CLin, // line strength scale factor
12953  const Numeric CWin, // line broadening scale factor
12954  const Numeric COin, // line coupling scale factor
12955  const String &model,
12956  ConstVectorView f_grid,
12957  ConstVectorView abs_p,
12958  ConstVectorView abs_t,
12959  ConstVectorView abs_h2o,
12960  ConstVectorView vmr,
12961  const Verbosity &verbosity) {
12962  CREATE_OUT3;
12963 
12964  //
12965  // Coefficients are from Liebe et al., AGARD CP-May93, Paper 3/1-10
12966  // 0 1 2 3 4 5 6
12967  // f0 a1 a2 a3 a4 a5 a6
12968  // [GHz] [kHz/hPa] [1] [MHz/hPa] [1] [10³/hPa]
12969  const Numeric mpm92[44][7] = {
12970  {50.474238, 0.094, 9.694, 0.850, 0.0, 0.210, 0.685}, // 0
12971  {50.987749, 0.246, 8.694, 0.870, 0.0, 0.190, 0.680}, // 1
12972  {51.503350, 0.608, 7.744, 0.890, 0.0, 0.171, 0.673}, // 2
12973  {52.021410, 1.414, 6.844, 0.920, 0.0, 0.144, 0.664}, // 3
12974  {52.542394, 3.102, 6.004, 0.940, 0.0, 0.118, 0.653}, // 4
12975  {53.066907, 6.410, 5.224, 0.970, 0.0, 0.114, 0.621}, // 5
12976  {53.595749, 12.470, 4.484, 1.000, 0.0, 0.200, 0.508}, // 6
12977  {54.130000, 22.800, 3.814, 1.020, 0.0, 0.291, 0.375}, // 7
12978  {54.671159, 39.180, 3.194, 1.050, 0.0, 0.325, 0.265}, // 8
12979  {55.221367, 63.160, 2.624, 1.080, 0.0, 0.224, 0.295}, // 9
12980  {55.783802, 95.350, 2.119, 1.110, 0.0, -0.144, 0.613}, // 0
12981  {56.264775, 54.890, 0.015, 1.646, 0.0, 0.339, -0.098}, // 11
12982  {56.363389, 134.400, 1.660, 1.144, 0.0, -0.258, 0.655}, // 12
12983  {56.968206, 176.300, 1.260, 1.181, 0.0, -0.362, 0.645}, // 13
12984  {57.612484, 214.100, 0.915, 1.221, 0.0, -0.533, 0.606}, // 14
12985  {58.323877, 238.600, 0.626, 1.266, 0.0, -0.178, 0.044}, // 15
12986  {58.446590, 145.700, 0.084, 1.449, 0.0, 0.650, -0.127}, // 16
12987  {59.164207, 240.400, 0.391, 1.319, 0.0, -0.628, 0.231}, // 17
12988  {59.590983, 211.200, 0.212, 1.360, 0.0, 0.665, -0.078}, // 18
12989  {60.306061, 212.400, 0.212, 1.382, 0.0, -0.613, 0.070}, // 19
12990  {60.434776, 246.100, 0.391, 1.297, 0.0, 0.606, -0.282}, // 20
12991  {61.150560, 250.400, 0.626, 1.248, 0.0, 0.090, -0.058}, // 21
12992  {61.800154, 229.800, 0.915, 1.207, 0.0, 0.496, -0.662}, // 22
12993  {62.411215, 193.300, 1.260, 1.171, 0.0, 0.313, -0.676}, // 23
12994  {62.486260, 151.700, 0.083, 1.468, 0.0, -0.433, 0.084}, // 24
12995  {62.997977, 150.300, 1.665, 1.139, 0.0, 0.208, -0.668}, // 25
12996  {63.568518, 108.700, 2.115, 1.110, 0.0, 0.094, -0.614}, // 26
12997  {64.127767, 73.350, 2.620, 1.080, 0.0, -0.270, -0.289}, // 27
12998  {64.678903, 46.350, 3.195, 1.050, 0.0, -0.366, -0.259}, // 28
12999  {65.224071, 27.480, 3.815, 1.020, 0.0, -0.326, -0.368}, // 29
13000  {65.764772, 15.300, 4.485, 1.000, 0.0, -0.232, -0.500}, // 30
13001  {66.302091, 8.009, 5.225, 0.970, 0.0, -0.146, -0.609}, // 31
13002  {66.836830, 3.946, 6.005, 0.940, 0.0, -0.147, -0.639}, // 32
13003  {67.369598, 1.832, 6.845, 0.920, 0.0, -0.174, -0.647}, // 33
13004  {67.900867, 0.801, 7.745, 0.890, 0.0, -0.198, -0.655}, // 34
13005  {68.431005, 0.330, 8.695, 0.870, 0.0, -0.210, -0.660}, // 35
13006  {68.960311, 0.128, 9.695, 0.850, 0.0, -0.220, -0.665}, // 36
13007  {118.750343, 94.500, 0.009, 1.630, 0.0, -0.031, 0.008}, // 37
13008  {368.498350, 6.790, 0.049, 1.920, 0.6, 0.000, 0.000}, // 38
13009  {424.763124, 63.800, 0.044, 1.926, 0.6, 0.000, 0.000}, // 39
13010  {487.249370, 23.500, 0.049, 1.920, 0.6, 0.000, 0.000}, // 40
13011  {715.393150, 9.960, 0.145, 1.810, 0.6, 0.000, 0.000}, // 41
13012  {773.839675, 67.100, 0.130, 1.810, 0.6, 0.000, 0.000}, // 42
13013  {834.145330, 18.000, 0.147, 1.810, 0.6, 0.000, 0.000}}; // 43
13014 
13015  // number of lines of Liebe O2-line catalog (0-43 lines)
13016  const Index i_first = 0;
13017  const Index i_last = 43; // all the spec. lines up to 1THz
13018  // const Index i_last = 37; // only the 60GHz complex + 118GHz line
13019 
13020  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
13021  // standard values for the MPM92 model (JQSRT, Vol 48, pp. 629-643, 1992):
13022  const Numeric CC_MPM92 = 1.00000;
13023  const Numeric CL_MPM92 = 1.00000;
13024  const Numeric CW_MPM92 = 1.00000;
13025  const Numeric CO_MPM92 = 1.00000;
13026  int AppCutoff = 0;
13027  // ---------------------------------------------------------------------------------------
13028 
13029  // select the parameter set (!!model dominates values!!):
13030  Numeric CC, CL, CW, CO;
13031  if (model == "MPM92") {
13032  CC = CC_MPM92;
13033  CL = CL_MPM92;
13034  CW = CW_MPM92;
13035  CO = CO_MPM92;
13036  } else if (model == "MPM92Lines") {
13037  CC = 0.000;
13038  CL = CL_MPM92;
13039  CW = CW_MPM92;
13040  CO = CO_MPM92;
13041  } else if (model == "MPM92Continuum") {
13042  CC = CC_MPM92;
13043  CL = 0.000;
13044  CW = 0.000;
13045  CO = 0.000;
13046  } else if (model == "MPM92NoCoupling") {
13047  CC = CC_MPM92;
13048  CL = CL_MPM92;
13049  CW = CW_MPM92;
13050  CO = 0.000;
13051  } else if (model == "MPM92NoCutoff") {
13052  CC = CC_MPM92;
13053  CL = CL_MPM92;
13054  CW = CW_MPM92;
13055  CO = CO_MPM92;
13056  AppCutoff = 1;
13057  } else if (model == "user") {
13058  CC = CCin;
13059  CL = CLin;
13060  CW = CWin;
13061  CO = COin;
13062  } else {
13063  ostringstream os;
13064  os << "O2-MPM92: ERROR! Wrong model values given.\n"
13065  << "Valid models are: 'MPM92' 'MPM92Lines' 'MPM92Continuum' 'MPM92NoCoupling' 'MPM92NoCutoff'"
13066  << "and 'user'" << '\n';
13067  throw runtime_error(os.str());
13068  }
13069  out3 << "O2-MPM92: (model=" << model << ") parameter values in use:\n"
13070  << " CC = " << CC << "\n"
13071  << " CL = " << CL << "\n"
13072  << " CW = " << CW << "\n"
13073  << " CO = " << CO << "\n";
13074 
13075  // const = VMR * ISORATIO = 0.20946 * 0.99519
13076  // this constant is already incorporated into the line strength, so we
13077  // have top devide the line strength by this value since arts multiplies pxsec
13078  // by these variables later in abs_coefCalc.
13079  const Numeric VMRISO = 0.2085;
13080 
13081  // O2 continuum parameters of MPM92:
13082  const Numeric S0 = 6.140e-5; // line strength [ppm]
13083  const Numeric G0 =
13084  0.560e-3; // line width [GHz/hPa]
13085  const Numeric X0 = 0.800; // temperature dependence of line width [1]
13086 
13087  const Index n_p = abs_p.nelem(); // Number of pressure levels
13088  const Index n_f = f_grid.nelem(); // Number of frequencies
13089 
13090  // Check that dimensions of abs_p, abs_t, and vmr agree:
13091  assert(n_p == abs_t.nelem());
13092  assert(n_p == vmr.nelem());
13093 
13094  // Check that dimensions of pxsec are consistent with n_f
13095  // and n_p. It should be [n_f,n_p]:
13096  assert(n_f == pxsec.nrows());
13097  assert(n_p == pxsec.ncols());
13098 
13099  // Loop pressure/temperature (pressure in hPa therefore the factor 0.01)
13100  for (Index i = 0; i < n_p; ++i) {
13101  // check if O2-VMR is exactly zero (caused by zeropadding), then return 0.
13102  if (vmr[i] == 0.) {
13103  pxsec(joker, i) = 0.;
13104  continue;
13105  }
13106 
13107  // check if O2-VMR will cause an underflow due to division by zero:
13108  if (vmr[i] < VMRCalcLimit) {
13109  ostringstream os;
13110  os << "ERROR: MPM92 O2 full absorption model has detected a O2 volume mixing ratio of "
13111  << vmr[i] << " which is below the threshold of " << VMRCalcLimit
13112  << ".\n"
13113  << "Therefore no calculation is performed.\n";
13114  throw runtime_error(os.str());
13115  return;
13116  }
13117 
13118  // relative inverse temperature [1]
13119  Numeric theta = (300.0 / abs_t[i]);
13120  // H2O partial pressure [hPa]
13121  Numeric pwv = Pa_to_hPa * abs_p[i] * abs_h2o[i];
13122  // dry air partial pressure [hPa]
13123  Numeric pda = (Pa_to_hPa * abs_p[i]) - pwv;
13124  // here the total pressure is devided by the O2 vmr for the
13125  // P_dry calculation because we calculate pxsec and not abs: abs = vmr * pxsec
13126  Numeric pda_dummy = pda;
13127  // O2 continuum strength [ppm]
13128  Numeric strength_cont = S0 * pda_dummy * pow(theta, (Numeric)2.);
13129  // O2 continuum pseudo line broadening [GHz]
13130  Numeric gam_cont = G0 * (pwv + pda) * pow(theta, X0); // GHz
13131 
13132  // Loop over input frequency
13133  for (Index s = 0; s < n_f; ++s) {
13134  // input frequency in [GHz]
13135  Numeric ff = f_grid[s] * Hz_to_GHz;
13136  // O2 continuum absorption [1/m]
13137  // cross section: pxsec = absorption / var
13138  // the vmr of O2 will be multiplied at the stage of absorption calculation:
13139  Numeric Nppc = CC * strength_cont * ff * gam_cont /
13140  (pow(ff, (Numeric)2.) + pow(gam_cont, (Numeric)2.));
13141 
13142  // Loop over MPM92 O2 spectral lines:
13143  Numeric Nppl = 0.0;
13144  for (Index l = i_first; l <= i_last; ++l) {
13145  // line strength [ppm] S=A(1,I)*P*V**3*EXP(A(2,I)*(1.-V))*1.E-6
13146  Numeric strength = CL * 1.000e-6 * pda_dummy * mpm92[l][1] /
13147  mpm92[l][0] * pow(theta, (Numeric)3.) *
13148  exp(mpm92[l][2] * (1.0 - theta));
13149  // line broadening parameter [GHz]
13150  Numeric gam = CW * (mpm92[l][3] * 0.001 *
13151  ((pda * pow(theta, ((Numeric)0.8 - mpm92[l][4]))) +
13152  (1.10 * pwv * theta)));
13153  // line mixing parameter [1]
13154  // if (l < 11) CD = 1.1000;
13155  Numeric delta = CO * ((mpm92[l][5] + mpm92[l][6] * theta) *
13156  (pda + pwv) * 0.001 * pow(theta, (Numeric)0.8));
13157  // absorption [dB/km] like in the original MPM92
13158  Nppl += strength * MPMLineShapeO2Function(gam, mpm92[l][0], ff, delta);
13159  }
13160  // in MPM92 we adopt the cutoff for O2 line absorption if abs_l < 0
13161  // absorption cannot be less than 0 according to MPM87 and MPM93 source code.
13162  if (AppCutoff == 0) {
13163  if (Nppl < 0.000) Nppl = 0.0000;
13164  }
13165  //
13166  // O2 line absorption [1/m]
13167  // cross section: pxsec = absorption / var
13168  // the vmr of O2 will be multiplied at the stage of absorption calculation:
13169  pxsec(s, i) += dB_km_to_1_m * 0.1820 * ff * (Nppl + Nppc) / VMRISO;
13170  }
13171  }
13172  return;
13173 }
13174 //
13175 // #################################################################################
13177 
13218  const Numeric CCin, // continuum scale factor
13219  const Numeric CLin, // line strength scale factor
13220  const Numeric CWin, // line broadening scale factor
13221  const Numeric COin, // line coupling scale factor
13222  const String &model,
13223  ConstVectorView f_grid,
13224  ConstVectorView abs_p,
13225  ConstVectorView abs_t,
13226  ConstVectorView abs_h2o, // VMR 0f H2O
13227  ConstVectorView vmr, // VMR of O2
13228  const Verbosity &verbosity) {
13229  CREATE_OUT3;
13230 
13231  //
13232  // Coefficients are from Liebe et al., AGARD CP-May93, Paper 3/1-10
13233  // 0 1 2 3 4 5 6
13234  // f0 a1 a2 a3 a4 a5 a6
13235  // [GHz] [kHz/hPa] [1] [MHz/hPa] [1] [10³/hPa]
13236  const Numeric tre05[44][7] = {
13237  {50.474214, 0.975 / 10, 9.651, 0.669, 0.0, 0.2566, 0.685}, // 37-
13238  {50.987745, 2.529 / 10, 8.653, 0.717, 0.0, 0.2246, 0.680}, // 35-
13239  {51.503360, 6.193 / 10, 7.709, 0.764, 0.0, 0.1947, 0.6729}, // 33-
13240  {52.021429, 14.32 / 10, 6.819, 0.811, 0.0, 0.1667, 0.6640}, // 31-
13241  {52.542418, 31.24 / 10, 5.983, 0.858, 0.0, 0.1388, 0.6526}, // 29-
13242  {53.066934, 64.29 / 10, 5.201, 0.906, 0.0, 0.1349, 0.6206}, // 27-
13243  {53.595775, 124.6 / 10, 4.474, 0.955, 0.0, 0.2227, 0.5085}, // 25-
13244  {54.130025, 227.3 / 10, 3.800, 0.996, 0.0, 0.3170, 0.3750}, // 23-
13245  {54.671180, 389.7 / 10, 3.182, 1.037, 0.0, 0.3558, 0.2654}, // 21-
13246  {55.221384, 627.1 / 10, 2.618, 1.089, 0.0, 0.2560, 0.2952}, // 19-
13247  {55.783815, 945.3 / 10, 2.109, 1.134, 0.0, -0.1172, 0.6135}, // 17-
13248  {56.264774, 543.4 / 10, 0.014, 1.703, 0.0, 0.3525, -0.0978}, // 1+
13249  {56.363399, 1331.8 / 10, 1.654, 1.189, 0.0, -0.2378, 0.6547}, // 15-
13250  {56.968211, 1746.6 / 10, 1.255, 1.223, 0.0, -0.3545, 0.6451}, // 13-
13251  {57.612486, 2120.1 / 10, 0.910, 1.262, 0.0, -0.5416, 0.6056}, // 11-
13252  {58.323877, 2363.7 / 10, 0.621, 1.295, 0.0, -0.1932, 0.0436}, // 9-
13253  {58.446588, 1442.1 / 10, 0.083, 1.491, 0.0, 0.6768, -0.1273}, // 3+
13254  {59.164204, 2379.9 / 10, 0.387, 1.353, 0.0, -0.6561, 0.2309}, // 7-
13255  {59.590983, 2090.7 / 10, 0.207, 1.408, 0.0, 0.6957, -0.0776}, // 5+
13256  {60.306056, 2103.4 / 10, 0.207, 1.415, 0.0, -0.6395, 0.0699}, // 5-
13257  {60.434778, 2438.0 / 10, 0.386, 1.339, 0.0, 0.6342, -0.2825}, // 7+
13258  {61.150562, 2479.5 / 10, 0.621, 1.292, 0.0, 0.1014, -0.0584}, // 9+
13259  {61.800158, 2275.9 / 10, 0.910, 1.263, 0.0, 0.5014, -0.6619}, // 11+
13260  {62.411220, 1915.4 / 10, 1.255, 1.217, 0.0, 0.3029, -0.6759}, // 13+
13261  {62.486253, 1503.0 / 10, 0.083, 1.513, 0.0, -0.4499, 0.0844}, // 3-
13262  {62.997984, 1490.2 / 10, 1.654, 1.174, 0.0, 0.1856, -0.6675}, // 15+
13263  {63.568526, 1078.0 / 10, 2.108, 1.134, 0.0, 0.0658, -0.6139}, // 17+
13264  {64.127775, 728.7 / 10, 2.617, 1.088, 0.0, -0.3036, -0.2895}, // 19+
13265  {64.678910, 461.3 / 10, 3.181, 1.038, 0.0, -0.3968, -0.2590}, // 21+
13266  {65.224078, 274.0 / 10, 3.800, 0.996, 0.0, -0.3528, -0.3680}, // 23+
13267  {65.764779, 153.0 / 10, 4.473, 0.955, 0.0, -0.2548, -0.5002}, // 25+
13268  {66.302096, 80.40 / 10, 5.200, 0.906, 0.0, -0.1660, -0.6091}, // 27+
13269  {66.836834, 39.80 / 10, 5.982, 0.858, 0.0, -0.1680, -0.6393}, // 29+
13270  {67.369601, 18.56 / 10, 6.818, 0.811, 0.0, -0.1956, -0.6475}, // 31+
13271  {67.900868, 8.172 / 10, 7.708, 0.764, 0.0, -0.2216, -0.6545}, // 33+
13272  {68.431006, 3.397 / 10, 8.652, 0.717, 0.0, -0.2492, -0.660}, // 35+
13273  {68.960312, 1.334 / 10, 9.650, 0.669, 0.0, -0.2773, -0.665}, // 37+
13274  {118.750334, 940.3 / 10, 0.010, 1.664, 0.0, -0.0439, 0.0079}, // 1-
13275  {368.498246, 67.4 / 10, 0.048, 1.64, 0.6, 0.0, 0.0}, // QN1
13276  {424.763020, 637.7 / 10, 0.044, 1.64, 0.6, 0.0, 0.0}, // QN2
13277  {487.249273, 237.4 / 10, 0.049, 1.60, 0.6, 0.0, 0.0}, // QN3
13278  {715.392902, 98.1 / 10, 0.145, 1.60, 0.6, 0.0, 0.0}, // QN4
13279  {773.839490, 572.3 / 10, 0.141, 1.62, 0.6, 0.0, 0.0}, // QN5
13280  {834.145546, 183.1 / 10, 0.145, 1.47, 0.6, 0.0, 0.0}}; // QN6
13281  // number of lines of Liebe O2-line catalog (0-43 lines)
13282  const Index i_first = 0;
13283  const Index i_last = 43; // all the spec. lines up to 1THz
13284  // const Index i_last = 37; // only the 60GHz complex + 118GHz line
13285 
13286  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
13287  // standard values for the MPM87 model (Radio Science, 20(5), 1985, 1069):
13288  const Numeric CC_TRE05 = 1.00000;
13289  const Numeric CL_TRE05 = 1.00000;
13290  const Numeric CW_TRE05 = 1.00000;
13291  const Numeric CO_TRE05 = 1.00000;
13292  int AppCutoff = 0;
13293  // ---------------------------------------------------------------------------------------
13294 
13295  // select the parameter set (!!model dominates values!!):
13296  Numeric CC, CL, CW, CO;
13297  if (model == "TRE05") {
13298  CC = CC_TRE05;
13299  CL = CL_TRE05;
13300  CW = CW_TRE05;
13301  CO = CO_TRE05;
13302  } else if (model == "TRE05Lines") {
13303  CC = 0.000;
13304  CL = CL_TRE05;
13305  CW = CW_TRE05;
13306  CO = CO_TRE05;
13307  } else if (model == "TRE05Continuum") {
13308  CC = CC_TRE05;
13309  CL = 0.000;
13310  CW = 0.000;
13311  CO = 0.000;
13312  } else if (model == "TRE05NoCoupling") {
13313  CC = CC_TRE05;
13314  CL = CL_TRE05;
13315  CW = CW_TRE05;
13316  CO = 0.000;
13317  } else if (model == "TRE05NoCutoff") {
13318  // !!ATTENTION!!
13319  // In the window regions the total absorption can get negative values.
13320  // So be carefull with this selection!
13321  CC = CC_TRE05;
13322  CL = CL_TRE05;
13323  CW = CW_TRE05;
13324  CO = CO_TRE05;
13325  AppCutoff = 1;
13326  } else if (model == "user") {
13327  CC = CCin;
13328  CL = CLin;
13329  CW = CWin;
13330  CO = COin;
13331  } else {
13332  ostringstream os;
13333  os << "O2-TRE05: ERROR! Wrong model values given.\n"
13334  << "Valid models are: 'TRE05' 'TRE05Lines' 'TRE05Continuum' 'TRE05NoCoupling' 'TRE05NoCutoff'"
13335  << "and 'user'" << '\n';
13336  throw runtime_error(os.str());
13337  }
13338  out3 << "O2-TRE05: (model=" << model << ") parameter values in use:\n"
13339  << " CC = " << CC << "\n"
13340  << " CL = " << CL << "\n"
13341  << " CW = " << CW << "\n"
13342  << " CO = " << CO << "\n";
13343 
13344  // const = VMR * ISORATIO = 0.20946 * 0.99519
13345  // this constant is already incorporated into the line strength, so we
13346  // have top devide the line strength by this value since arts multiplies pxsec
13347  // by these variables later in abs_coefCalc.
13348  const Numeric VMRISO = 0.2085;
13349 
13350  // O2 continuum parameters of TRE05:
13351  const Numeric S0 = 6.140e-5; // line strength [ppm]
13352  const Numeric G0 =
13353  0.560e-3; // line width [GHz/hPa]
13354  const Numeric X0 = 0.800; // temperature dependence of line width [1]
13355 
13356  const Index n_p = abs_p.nelem(); // Number of pressure levels
13357  const Index n_f = f_grid.nelem(); // Number of frequencies
13358 
13359  // Check that dimensions of abs_p, abs_t, and vmr agree:
13360  assert(n_p == abs_t.nelem());
13361  assert(n_p == vmr.nelem());
13362 
13363  // Check that dimensions of pxsec are consistent with n_f
13364  // and n_p. It should be [n_f,n_p]:
13365  assert(n_f == pxsec.nrows());
13366  assert(n_p == pxsec.ncols());
13367 
13368  // Loop pressure/temperature (pressure in hPa therefore the factor 0.01)
13369  for (Index i = 0; i < n_p; ++i) {
13370  // check if O2-VMR is exactly zero (caused by zeropadding), then return 0.
13371  if (vmr[i] == 0.) {
13372  pxsec(joker, i) = 0.;
13373  continue;
13374  }
13375 
13376  // check if O2-VMR will cause an underflow due to division by zero:
13377  if (vmr[i] < VMRCalcLimit) {
13378  ostringstream os;
13379  os << "ERROR: TRE05 O2 full absorption model has detected a O2 volume mixing ratio of "
13380  << vmr[i] << " which is below the threshold of " << VMRCalcLimit
13381  << ".\n"
13382  << "Therefore no calculation is performed.\n";
13383  throw runtime_error(os.str());
13384  return;
13385  }
13386 
13387  // relative inverse temperature [1]
13388  Numeric theta = (300.0 / abs_t[i]);
13389  // H2O partial pressure [hPa]
13390  Numeric pwv = Pa_to_hPa * abs_p[i] * abs_h2o[i];
13391  // dry air partial pressure [hPa]
13392  Numeric pda = (Pa_to_hPa * abs_p[i]) - pwv;
13393  // here the total pressure is devided by the O2 vmr for the
13394  // P_dry calculation because we calculate pxsec and not abs: abs = vmr * pxsec
13395  // old version without VMRISO: Numeric pda_dummy = pda / vmr[i];
13396  Numeric pda_dummy = pda;
13397  // O2 continuum strength [ppm]
13398  Numeric strength_cont = S0 * pda_dummy * pow(theta, (Numeric)2.);
13399  // O2 continuum pseudo line broadening [GHz]
13400  Numeric gam_cont = G0 * (pwv + pda) * pow(theta, X0); // GHz
13401 
13402  // Loop over input frequency
13403  for (Index s = 0; s < n_f; ++s) {
13404  // input frequency in [GHz]
13405  Numeric ff = f_grid[s] * Hz_to_GHz;
13406  // O2 continuum absorption [1/m]
13407  // cross section: pxsec = absorption / var
13408  // the vmr of O2 will be multiplied at the stage of absorption calculation:
13409  Numeric Nppc = CC * strength_cont * ff * gam_cont /
13410  (pow(ff, (Numeric)2.) + pow(gam_cont, (Numeric)2.));
13411 
13412  // Loop over TRE05 O2 spectral lines:
13413  Numeric Nppl = 0.0;
13414  for (Index l = i_first; l <= i_last; ++l) {
13415  // line strength [ppm] S=A(1,I)*P*V**3*EXP(A(2,I)*(1.-V))*1.E-6
13416  Numeric strength = CL * 1.000e-6 * pda_dummy * tre05[l][1] /
13417  tre05[l][0] * pow(theta, (Numeric)3.) *
13418  exp(tre05[l][2] * (1.0 - theta));
13419  // line broadening parameter [GHz]
13420  Numeric gam = CW * (tre05[l][3] * 0.001 *
13421  ((pda * pow(theta, ((Numeric)0.8 - tre05[l][4]))) +
13422  (1.10 * pwv * theta)));
13423  // line mixing parameter [1]
13424  // if (l < 11) CD = 1.1000;
13425  Numeric delta =
13426  CO * ((tre05[l][5] + tre05[l][6] * theta) * (pda + pwv) *
13427  pow(theta, (Numeric)0.8) * (Numeric)0.001);
13428  // absorption [dB/km] like in the original TRE05
13429  Nppl += strength * MPMLineShapeO2Function(gam, tre05[l][0], ff, delta);
13430  }
13431  // in TRE05 there is a cutoff for O2 line absorption if abs_l < 0
13432  // absorption cannot be less than 0 according to TRE05 philosophy.
13433  if (AppCutoff == 0) {
13434  if (Nppl < 0.000) Nppl = 0.0000; // <---!!IMPORTANT FEATURE!!
13435  }
13436  //
13437  // O2 line absorption [1/m]
13438  // cross section: pxsec = absorption / var
13439  // the vmr of O2 will be multiplied at the stage of absorption calculation:
13440  pxsec(s, i) += dB_km_to_1_m * 0.1820 * ff * (Nppl + Nppc) / VMRISO;
13441  }
13442  }
13443  return;
13444 }
13445 //
13446 // #################################################################################
13448 
13480  const Numeric CCin, // continuum scale factor
13481  const Numeric CLin, // line strength scale factor
13482  const Numeric CWin, // line broadening scale factor
13483  const Numeric COin, // line coupling scale factor
13484  const String &model,
13485  ConstVectorView f_grid,
13486  ConstVectorView abs_p,
13487  ConstVectorView abs_t,
13488  ConstVectorView abs_h2o, // VMR 0f H2O
13489  ConstVectorView vmr, // VMR of O2
13490  const Verbosity &verbosity) {
13491  CREATE_OUT3;
13492 
13493  //
13494  // Coefficients are from Liebe et al., AGARD CP-May93, Paper 3/1-10
13495  // 0 1 2 3 4 5 6
13496  // f0 a1 a2 a3 a4 a5 a6
13497  // [GHz] [kHz/hPa] [1] [MHz/hPa] [1] [10³/hPa]
13498  const Numeric mpm93[44][7] = {
13499  {50.474238, 0.094, 9.694, 0.890, 0.0, 0.240, 0.790}, // 0
13500  {50.987749, 0.246, 8.694, 0.910, 0.0, 0.220, 0.780}, // 1
13501  {51.503350, 0.608, 7.744, 0.940, 0.0, 0.197, 0.774}, // 2
13502  {52.021410, 1.414, 6.844, 0.970, 0.0, 0.166, 0.764}, // 3
13503  {52.542394, 3.102, 6.004, 0.990, 0.0, 0.136, 0.751}, // 4
13504  {53.066907, 6.410, 5.224, 1.020, 0.0, 0.131, 0.714}, // 5
13505  {53.595749, 12.470, 4.484, 1.050, 0.0, 0.230, 0.584}, // 6
13506  {54.130000, 22.800, 3.814, 1.070, 0.0, 0.335, 0.431}, // 7
13507  {54.671159, 39.180, 3.194, 1.100, 0.0, 0.374, 0.305}, // 8
13508  {55.221367, 63.160, 2.624, 1.130, 0.0, 0.258, 0.339}, // 9
13509  {55.783802, 95.350, 2.119, 1.170, 0.0, -0.166, 0.705}, // 10
13510  {56.264775, 54.890, 0.015, 1.730, 0.0, 0.390, -0.113}, // 11
13511  {56.363389, 134.400, 1.660, 1.200, 0.0, -0.297, 0.753}, // 12
13512  {56.968206, 176.300, 1.260, 1.240, 0.0, -0.416, 0.742}, // 13
13513  {57.612484, 214.100, 0.915, 1.280, 0.0, -0.613, 0.697}, // 14
13514  {58.323877, 238.600, 0.626, 1.330, 0.0, -0.205, 0.051}, // 15
13515  {58.446590, 145.700, 0.084, 1.520, 0.0, 0.748, -0.146}, // 16
13516  {59.164207, 240.400, 0.391, 1.390, 0.0, -0.722, 0.266}, // 17
13517  {59.590983, 211.200, 0.212, 1.430, 0.0, 0.765, -0.090}, // 18
13518  {60.306061, 212.400, 0.212, 1.450, 0.0, -0.705, 0.081}, // 19
13519  {60.434776, 246.100, 0.391, 1.360, 0.0, 0.697, -0.324}, // 20
13520  {61.150560, 250.400, 0.626, 1.310, 0.0, 0.104, -0.067}, // 21
13521  {61.800154, 229.800, 0.915, 1.270, 0.0, 0.570, -0.761}, // 22
13522  {62.411215, 193.300, 1.260, 1.230, 0.0, 0.360, -0.777}, // 23
13523  {62.486260, 151.700, 0.083, 1.540, 0.0, -0.498, 0.097}, // 24
13524  {62.997977, 150.300, 1.665, 1.200, 0.0, 0.239, -0.768}, // 25
13525  {63.568518, 108.700, 2.115, 1.170, 0.0, 0.108, -0.706}, // 26
13526  {64.127767, 73.350, 2.620, 1.130, 0.0, -0.311, -0.332}, // 27
13527  {64.678903, 46.350, 3.195, 1.100, 0.0, -0.421, -0.298}, // 28
13528  {65.224071, 27.480, 3.815, 1.070, 0.0, -0.375, -0.423}, // 29
13529  {65.764772, 15.300, 4.485, 1.050, 0.0, -0.267, -0.575}, // 30
13530  {66.302091, 8.009, 5.225, 1.020, 0.0, -0.168, -0.700}, // 31
13531  {66.836830, 3.946, 6.005, 0.990, 0.0, -0.169, -0.735}, // 32
13532  {67.369598, 1.832, 6.845, 0.970, 0.0, -0.200, -0.744}, // 33
13533  {67.900867, 0.801, 7.745, 0.940, 0.0, -0.228, -0.753}, // 34
13534  {68.431005, 0.330, 8.695, 0.920, 0.0, -0.240, -0.760}, // 35
13535  {68.960311, 0.128, 9.695, 0.900, 0.0, -0.250, -0.765}, // 36
13536  {118.750343, 94.500, 0.009, 1.630, 0.0, -0.036, 0.009}, // 37
13537  {368.498350, 6.790, 0.049, 1.920, 0.6, 0.000, 0.000}, // 38
13538  {424.763124, 63.800, 0.044, 1.930, 0.6, 0.000, 0.000}, // 39
13539  {487.249370, 23.500, 0.049, 1.920, 0.6, 0.000, 0.000}, // 40
13540  {715.393150, 9.960, 0.145, 1.810, 0.6, 0.000, 0.000}, // 41
13541  {773.839675, 67.100, 0.130, 1.820, 0.6, 0.000, 0.000}, // 42
13542  {834.145330, 18.000, 0.147, 1.810, 0.6, 0.000, 0.000}}; // 43
13543  // number of lines of Liebe O2-line catalog (0-43 lines)
13544  const Index i_first = 0;
13545  const Index i_last = 43; // all the spec. lines up to 1THz
13546  // const Index i_last = 37; // only the 60GHz complex + 118GHz line
13547 
13548  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
13549  // standard values for the MPM87 model (Radio Science, 20(5), 1985, 1069):
13550  const Numeric CC_MPM93 = 1.00000;
13551  const Numeric CL_MPM93 = 1.00000;
13552  const Numeric CW_MPM93 = 1.00000;
13553  const Numeric CO_MPM93 = 1.00000;
13554  int AppCutoff = 0;
13555  // ---------------------------------------------------------------------------------------
13556 
13557  // select the parameter set (!!model dominates values!!):
13558  Numeric CC, CL, CW, CO;
13559  if (model == "MPM93") {
13560  CC = CC_MPM93;
13561  CL = CL_MPM93;
13562  CW = CW_MPM93;
13563  CO = CO_MPM93;
13564  } else if (model == "MPM93Lines") {
13565  CC = 0.000;
13566  CL = CL_MPM93;
13567  CW = CW_MPM93;
13568  CO = CO_MPM93;
13569  } else if (model == "MPM93Continuum") {
13570  CC = CC_MPM93;
13571  CL = 0.000;
13572  CW = 0.000;
13573  CO = 0.000;
13574  } else if (model == "MPM93NoCoupling") {
13575  CC = CC_MPM93;
13576  CL = CL_MPM93;
13577  CW = CW_MPM93;
13578  CO = 0.000;
13579  } else if (model == "MPM93NoCutoff") {
13580  // !!ATTENTION!!
13581  // In the window regions the total absorption can get negative values.
13582  // So be carefull with this selection!
13583  CC = CC_MPM93;
13584  CL = CL_MPM93;
13585  CW = CW_MPM93;
13586  CO = CO_MPM93;
13587  AppCutoff = 1;
13588  } else if (model == "user") {
13589  CC = CCin;
13590  CL = CLin;
13591  CW = CWin;
13592  CO = COin;
13593  } else {
13594  ostringstream os;
13595  os << "O2-MPM93: ERROR! Wrong model values given.\n"
13596  << "Valid models are: 'MPM93' 'MPM93Lines' 'MPM93Continuum' 'MPM93NoCoupling' 'MPM93NoCutoff'"
13597  << "and 'user'" << '\n';
13598  throw runtime_error(os.str());
13599  }
13600  out3 << "O2-MPM93: (model=" << model << ") parameter values in use:\n"
13601  << " CC = " << CC << "\n"
13602  << " CL = " << CL << "\n"
13603  << " CW = " << CW << "\n"
13604  << " CO = " << CO << "\n";
13605 
13606  // const = VMR * ISORATIO = 0.20946 * 0.99519
13607  // this constant is already incorporated into the line strength, so we
13608  // have top devide the line strength by this value since arts multiplies pxsec
13609  // by these variables later in abs_coefCalc.
13610  const Numeric VMRISO = 0.2085;
13611 
13612  // O2 continuum parameters of MPM93:
13613  const Numeric S0 = 6.140e-5; // line strength [ppm]
13614  const Numeric G0 =
13615  0.560e-3; // line width [GHz/hPa]
13616  const Numeric X0 = 0.800; // temperature dependence of line width [1]
13617 
13618  const Index n_p = abs_p.nelem(); // Number of pressure levels
13619  const Index n_f = f_grid.nelem(); // Number of frequencies
13620 
13621  // Check that dimensions of abs_p, abs_t, and vmr agree:
13622  assert(n_p == abs_t.nelem());
13623  assert(n_p == vmr.nelem());
13624 
13625  // Check that dimensions of pxsec are consistent with n_f
13626  // and n_p. It should be [n_f,n_p]:
13627  assert(n_f == pxsec.nrows());
13628  assert(n_p == pxsec.ncols());
13629 
13630  // Loop pressure/temperature (pressure in hPa therefore the factor 0.01)
13631  for (Index i = 0; i < n_p; ++i) {
13632  // check if O2-VMR is exactly zero (caused by zeropadding), then return 0.
13633  if (vmr[i] == 0.) {
13634  pxsec(joker, i) = 0.;
13635  continue;
13636  }
13637 
13638  // check if O2-VMR will cause an underflow due to division by zero:
13639  if (vmr[i] < VMRCalcLimit) {
13640  ostringstream os;
13641  os << "ERROR: MPM93 O2 full absorption model has detected a O2 volume mixing ratio of "
13642  << vmr[i] << " which is below the threshold of " << VMRCalcLimit
13643  << ".\n"
13644  << "Therefore no calculation is performed.\n";
13645  throw runtime_error(os.str());
13646  return;
13647  }
13648 
13649  // relative inverse temperature [1]
13650  Numeric theta = (300.0 / abs_t[i]);
13651  // H2O partial pressure [hPa]
13652  Numeric pwv = Pa_to_hPa * abs_p[i] * abs_h2o[i];
13653  // dry air partial pressure [hPa]
13654  Numeric pda = (Pa_to_hPa * abs_p[i]) - pwv;
13655  // here the total pressure is devided by the O2 vmr for the
13656  // P_dry calculation because we calculate pxsec and not abs: abs = vmr * pxsec
13657  // old version without VMRISO: Numeric pda_dummy = pda / vmr[i];
13658  Numeric pda_dummy = pda;
13659  // O2 continuum strength [ppm]
13660  Numeric strength_cont = S0 * pda_dummy * pow(theta, (Numeric)2.);
13661  // O2 continuum pseudo line broadening [GHz]
13662  Numeric gam_cont = G0 * (pwv + pda) * pow(theta, X0); // GHz
13663 
13664  // Loop over input frequency
13665  for (Index s = 0; s < n_f; ++s) {
13666  // input frequency in [GHz]
13667  Numeric ff = f_grid[s] * Hz_to_GHz;
13668  // O2 continuum absorption [1/m]
13669  // cross section: pxsec = absorption / var
13670  // the vmr of O2 will be multiplied at the stage of absorption calculation:
13671  Numeric Nppc = CC * strength_cont * ff * gam_cont /
13672  (pow(ff, (Numeric)2.) + pow(gam_cont, (Numeric)2.));
13673 
13674  // Loop over MPM93 O2 spectral lines:
13675  Numeric Nppl = 0.0;
13676  for (Index l = i_first; l <= i_last; ++l) {
13677  // line strength [ppm] S=A(1,I)*P*V**3*EXP(A(2,I)*(1.-V))*1.E-6
13678  Numeric strength = CL * 1.000e-6 * pda_dummy * mpm93[l][1] /
13679  mpm93[l][0] * pow(theta, (Numeric)3.) *
13680  exp(mpm93[l][2] * (1.0 - theta));
13681  // line broadening parameter [GHz]
13682  Numeric gam = CW * (mpm93[l][3] * 0.001 *
13683  ((pda * pow(theta, ((Numeric)0.8 - mpm93[l][4]))) +
13684  (1.10 * pwv * theta)));
13685  // line mixing parameter [1]
13686  // if (l < 11) CD = 1.1000;
13687  Numeric delta =
13688  CO * ((mpm93[l][5] + mpm93[l][6] * theta) * (pda + pwv) *
13689  pow(theta, (Numeric)0.8) * (Numeric)0.001);
13690  // absorption [dB/km] like in the original MPM93
13691  Nppl += strength * MPMLineShapeO2Function(gam, mpm93[l][0], ff, delta);
13692  }
13693  // in MPM93 there is a cutoff for O2 line absorption if abs_l < 0
13694  // absorption cannot be less than 0 according to MPM93 philosophy.
13695  if (AppCutoff == 0) {
13696  if (Nppl < 0.000) Nppl = 0.0000; // <---!!IMPORTANT FEATURE!!
13697  }
13698  //
13699  // O2 line absorption [1/m]
13700  // cross section: pxsec = absorption / var
13701  // the vmr of O2 will be multiplied at the stage of absorption calculation:
13702  pxsec(s, i) += dB_km_to_1_m * 0.1820 * ff * (Nppl + Nppc) / VMRISO;
13703  }
13704  }
13705  return;
13706 }
13707 //
13708 // #################################################################################
13709 //
13711 
13763  const Numeric CCin, // model parameter
13764  const Numeric CLin, // model parameter
13765  const Numeric CWin, // model parameter
13766  const Numeric COin, // model parameter
13767  const String &model, // model selection string
13768  const String &version, // PWR98, PWR93 or PWR88
13769  ConstVectorView f_grid,
13770  ConstVectorView abs_p,
13771  ConstVectorView abs_t,
13772  ConstVectorView vmrh2o,
13773  ConstVectorView vmr,
13774  const Verbosity &verbosity) {
13775  CREATE_OUT3;
13776 
13777  const Index n_lines = 40; // all O2 lines in this model (range: 50-850 GHz)
13778  //
13779  // lines are arranged 1-,1+,3-,3+,etc. in spin-rotation spectrum
13780  // line center frequency in [GHz]
13781  const Numeric F93[n_lines] = {
13782  118.7503, 56.2648, 62.4863, 58.4466, // 00-03
13783  60.3061, 59.5910, 59.1642, 60.4348, // 04-07
13784  58.3239, 61.1506, 57.6125, 61.8002, // 08-11
13785  56.9682, 62.4112, 56.3634, 62.9980, // 12-15
13786  55.7838, 63.5685, 55.2214, 64.1278, // 16-19
13787  54.6712, 64.6789, 54.1300, 65.2241, // 20-23
13788  53.5957, 65.7648, 53.0669, 66.3021, // 24-27
13789  52.5424, 66.8368, 52.0214, 67.3696, // 28-31
13790  51.5034, 67.9009, 368.4984, 424.7631, // 32-35
13791  487.2494, 715.3932, 773.8397, 834.1453}; // 36-39
13792 
13793  // intensities in the submm range are updated according to HITRAN96
13794  const Numeric F98[n_lines] = {
13795  118.7503, 56.2648, 62.4863, 58.4466, 60.3061, 59.5910, 59.1642,
13796  60.4348, 58.3239, 61.1506, 57.6125, 61.8002, 56.9682, 62.4112,
13797  56.3634, 62.9980, 55.7838, 63.5685, 55.2214, 64.1278, 54.6712,
13798  64.6789, 54.1300, 65.2241, 53.5957, 65.7648, 53.0669, 66.3021,
13799  52.5424, 66.8368, 52.0214, 67.3696, 51.5034, 67.9009, 368.4984,
13800  424.7632, 487.2494, 715.3931, 773.8397, 834.1458};
13801 
13802  // line strength at T=300K in [cm² * Hz]
13803  const Numeric S93[n_lines] = {
13804  0.2936E-14, 0.8079E-15, 0.2480E-14, 0.2228E-14, 0.3351E-14, 0.3292E-14,
13805  0.3721E-14, 0.3891E-14, 0.3640E-14, 0.4005E-14, 0.3227E-14, 0.3715E-14,
13806  0.2627E-14, 0.3156E-14, 0.1982E-14, 0.2477E-14, 0.1391E-14, 0.1808E-14,
13807  0.9124E-15, 0.1230E-14, 0.5603E-15, 0.7842E-15, 0.3228E-15, 0.4689E-15,
13808  0.1748E-15, 0.2632E-15, 0.8898E-16, 0.1389E-15, 0.4264E-16, 0.6899E-16,
13809  0.1924E-16, 0.3229E-16, 0.8191E-17, 0.1423E-16, 0.6460E-15, 0.7047E-14,
13810  0.3011E-14, 0.1826E-14, 0.1152E-13, 0.3971E-14};
13811 
13812  // intensities in the submm range are updated according to HITRAN96
13813  const Numeric S98[n_lines] = {
13814  0.2936E-14, 0.8079E-15, 0.2480E-14, 0.2228E-14, 0.3351E-14, 0.3292E-14,
13815  0.3721E-14, 0.3891E-14, 0.3640E-14, 0.4005E-14, 0.3227E-14, 0.3715E-14,
13816  0.2627E-14, 0.3156E-14, 0.1982E-14, 0.2477E-14, 0.1391E-14, 0.1808E-14,
13817  0.9124E-15, 0.1230E-14, 0.5603E-15, 0.7842E-15, 0.3228E-15, 0.4689E-15,
13818  0.1748E-15, 0.2632E-15, 0.8898E-16, 0.1389E-15, 0.4264E-16, 0.6899E-16,
13819  0.1924E-16, 0.3229E-16, 0.8191E-17, 0.1423E-16, 0.6494E-15, 0.7083E-14,
13820  0.3025E-14, 0.1835E-14, 0.1158E-13, 0.3993E-14};
13821 
13822  // temperature exponent of the line strength in [1]
13823  const Numeric BE[n_lines] = {
13824  0.009, 0.015, 0.083, 0.084, 0.212, 0.212, 0.391, 0.391, 0.626, 0.626,
13825  0.915, 0.915, 1.260, 1.260, 1.660, 1.665, 2.119, 2.115, 2.624, 2.625,
13826  3.194, 3.194, 3.814, 3.814, 4.484, 4.484, 5.224, 5.224, 6.004, 6.004,
13827  6.844, 6.844, 7.744, 7.744, 0.048, 0.044, 0.049, 0.145, 0.141, 0.145};
13828 
13829  // widths in MHz/mbar for the O2 continuum
13830  const Numeric WB300 = 0.56; // [MHz/mbar]=[MHz/hPa]
13831  const Numeric X = 0.80; // [1]
13832 
13833  // line width parameter [GHz/bar]
13834  const Numeric W300[n_lines] = {
13835  1.630, 1.646, 1.468, 1.449, 1.382, 1.360, 1.319, 1.297, 1.266, 1.248,
13836  1.221, 1.207, 1.181, 1.171, 1.144, 1.139, 1.110, 1.108, 1.079, 1.078,
13837  1.050, 1.050, 1.020, 1.020, 1.000, 1.000, 0.970, 0.970, 0.940, 0.940,
13838  0.920, 0.920, 0.890, 0.890, 1.920, 1.920, 1.920, 1.810, 1.810, 1.810};
13839 
13840  // y parameter for the calculation of Y [1/bar]
13841  const Numeric Y93[n_lines] = {
13842  -0.0233, 0.2408, -0.3486, 0.5227, -0.5430, 0.5877, -0.3970, 0.3237,
13843  -0.1348, 0.0311, 0.0725, -0.1663, 0.2832, -0.3629, 0.3970, -0.4599,
13844  0.4695, -0.5199, 0.5187, -0.5597, 0.5903, -0.6246, 0.6656, -0.6942,
13845  0.7086, -0.7325, 0.7348, -0.7546, 0.7702, -0.7864, 0.8083, -0.8210,
13846  0.8439, -0.8529, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000};
13847 
13848  // y parameter for the calculation of Y [1/bar].
13849  // These values are from P. W. Rosenkranz, Interference coefficients for the
13850  // overlapping oxygen lines in air, JQSRT, 1988, Volume 39, 287-297.
13851  const Numeric Y88[n_lines] = {
13852  -0.0244, 0.2772, -0.4068, 0.6270, -0.6183, 0.6766, -0.4119, 0.3290,
13853  0.0317, -0.1591, 0.1145, -0.2068, 0.3398, -0.4158, 0.3922, -0.4482,
13854  0.4011, -0.4442, 0.4339, -0.4687, 0.4783, -0.5074, 0.5157, -0.5403,
13855  0.5400, -0.5610, 0.5719, -0.5896, 0.6046, -0.6194, 0.6347, -0.6468,
13856  0.6627, -0.6718, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000};
13857 
13858  // v parameter for the calculation of Y [1/bar]
13859  const Numeric V[n_lines] = {
13860  0.0079, -0.0978, 0.0844, -0.1273, 0.0699, -0.0776, 0.2309, -0.2825,
13861  0.0436, -0.0584, 0.6056, -0.6619, 0.6451, -0.6759, 0.6547, -0.6675,
13862  0.6135, -0.6139, 0.2952, -0.2895, 0.2654, -0.2590, 0.3750, -0.3680,
13863  0.5085, -0.5002, 0.6206, -0.6091, 0.6526, -0.6393, 0.6640, -0.6475,
13864  0.6729, -0.6545, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000};
13865  // range of lines to take into account for the line absorption part
13866  const Index first_line = 0; // first line for calculation
13867  const Index last_line = 39; // last line for calculation
13868 
13869  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
13870  // standard values for the Rosenkranz model
13871  // (P. W. Rosenkranz, Chapter 2, pp 74, in M. A. Janssen,
13872  // "Atmospheric Remote Sensing by Microwave Radiometry", John Wiley & Sons, Inc., 1993):
13873  const Numeric CC_PWR93 = 1.00000;
13874  const Numeric CL_PWR93 = 1.00000;
13875  const Numeric CW_PWR93 = 1.00000;
13876  const Numeric CO_PWR93 = 1.00000;
13877  // ---------------------------------------------------------------------------------------
13878 
13879  // select the parameter set (!!model dominates values!!):
13880  Numeric CC, CL, CW, CO, Y300[n_lines], S300[n_lines], F[n_lines];
13881  // FIXME int oldnewflag = 0;
13882 
13883  if (model == "Rosenkranz") {
13884  CC = CC_PWR93;
13885  CL = CL_PWR93;
13886  CW = CW_PWR93;
13887  CO = CO_PWR93;
13888  } else if (model == "RosenkranzLines") {
13889  CC = 0.000;
13890  CL = CL_PWR93;
13891  CW = CW_PWR93;
13892  CO = CO_PWR93;
13893  } else if (model == "RosenkranzContinuum") {
13894  CC = CC_PWR93;
13895  CL = 0.000;
13896  CW = 0.000;
13897  CO = 0.000;
13898  } else if (model == "RosenkranzNoCoupling") {
13899  CC = CC_PWR93;
13900  CL = CL_PWR93;
13901  CW = CW_PWR93;
13902  CO = 0.000;
13903  } else if (model == "user") {
13904  CC = CCin;
13905  CL = CLin;
13906  CW = CWin;
13907  CO = COin;
13908  } else {
13909  ostringstream os;
13910  os << "O2-PWR93: ERROR! Wrong model values given.\n"
13911  << "Valid models are: 'Rosenkranz', 'RosenkranzLines', RosenkranzContinuum, "
13912  << "'RosenkranzNoCoupling', and 'user'" << '\n';
13913  throw runtime_error(os.str());
13914  }
13915  out3 << "O2-PWR93: (model=" << model << ") parameter values in use:\n"
13916  << " CC = " << CC << "\n"
13917  << " CL = " << CL << "\n"
13918  << " CW = " << CW << "\n"
13919  << " CO = " << CO << "\n";
13920 
13921  // select version dependent parameters
13922  if (version == "PWR88") {
13923  for (Index i = 0; i < n_lines; ++i) {
13924  F[i] = F93[i];
13925  S300[i] = S93[i];
13926  Y300[i] = Y88[i];
13927  };
13928  } else if (version == "PWR93") {
13929  for (Index i = 0; i < n_lines; ++i) {
13930  F[i] = F93[i];
13931  S300[i] = S93[i];
13932  Y300[i] = Y93[i];
13933  };
13934  } else if (version == "PWR98") {
13935  for (Index i = 0; i < n_lines; ++i) {
13936  F[i] = F98[i];
13937  S300[i] = S98[i];
13938  Y300[i] = Y93[i];
13939  };
13940  } else {
13941  ostringstream os;
13942  os << "O2-PWR93/PWR88: ERROR! Wrong version is selected.\n"
13943  << "Valid versions are:\n"
13944  << " 'PWR98' updates of F and S to HISTRAN96 and M.J.Schwartz, MIT, 1997\n"
13945  << " suggestions implemented.\n"
13946  << " 'PWR93' for the oxygen absorption model described in \n"
13947  << " P. W. Rosenkranz, Chapter 2, in M. A. Janssen,\n"
13948  << " Atmospheric Remote Sensing by Microwave Radiometry,\n"
13949  << " John Wiley & Sons, Inc., 1993.\n"
13950  << " 'PWR88' for the oxygen absorption model described in \n"
13951  << " P. W. Rosenkranz, Interference coefficients for the \n"
13952  << " overlapping oxygen lines in air, \n"
13953  << " JQSRT, 1988, Volume 39, 287-297.\n";
13954  throw runtime_error(os.str());
13955  }
13956 
13957  const Index n_p = abs_p.nelem(); // Number of pressure levels
13958  const Index n_f = f_grid.nelem(); // Number of frequencies
13959 
13960  // Check that dimensions of abs_p, abs_t, and vmr agree:
13961  assert(n_p == abs_t.nelem());
13962  assert(n_p == vmr.nelem());
13963 
13964  // Check that dimensions of pxsec are consistent with n_f
13965  // and n_p. It should be [n_f,n_p]:
13966  assert(n_f == pxsec.nrows());
13967  assert(n_p == pxsec.ncols());
13968 
13969  String fail_msg;
13970  bool failed = false;
13971 
13972  // Loop pressure/temperature:
13973 #pragma omp parallel for if (!arts_omp_in_parallel() && \
13974  n_p >= arts_omp_get_max_threads())
13975  for (Index i = 0; i < n_p; ++i) {
13976  // check if O2-VMR is exactly zero (caused by zeropadding), then return 0.
13977  if (vmr[i] == 0.) {
13978  pxsec(joker, i) = 0.;
13979  continue;
13980  }
13981 
13982  // check if O2-VMR will cause an underflow due to division by zero:
13983  if (vmr[i] < VMRCalcLimit) {
13984  ostringstream os;
13985  os << "ERROR: PWR93 O2 full absorption model has detected a O2 volume mixing ratio of "
13986  << vmr[i] << " which is below the threshold of " << VMRCalcLimit
13987  << ".\n"
13988  << "Therefore no calculation is performed.\n";
13989 #pragma omp critical(PWR93O2AbsModel_error)
13990  {
13991  fail_msg = os.str();
13992  failed = true;
13993  }
13994  continue;
13995  }
13996  // relative inverse temperature [1]
13997  Numeric TH = 3.0000e2 / abs_t[i];
13998  Numeric TH1 = (TH - 1.000e0);
13999  Numeric B = pow(TH, X);
14000  // partial pressure of H2O and dry air [hPa]
14001  Numeric PRESWV = Pa_to_hPa * (abs_p[i] * vmrh2o[i]);
14002  Numeric PRESDA = Pa_to_hPa * (abs_p[i] * (1.000e0 - vmrh2o[i]));
14003  Numeric DEN = 0.001 * (PRESDA * B + 1.1 * PRESWV * TH); // [hPa]
14004  Numeric DENS = 0.001 * (PRESDA + 1.1 * PRESWV) * TH; // [hPa]
14005  Numeric DFNR = WB300 * DEN; // [GHz]
14006 
14007  // continuum absorption [1/m/GHz]
14008  Numeric CCONT = CC * 1.23e-10 * pow(TH, (Numeric)2.) * abs_p[i];
14009 
14010  // Loop over input frequency
14011  for (Index s = 0; s < n_f; ++s) {
14012  // initial O2 line absorption at position ff
14013  // Numeric O2ABS = 0.000e0;cd safff
14014 
14015  // input frequency in [GHz]
14016  Numeric ff = Hz_to_GHz * f_grid[s];
14017 
14018  // continuum absorption [Neper/km]
14019  Numeric CONT = CCONT * (ff * ff * DFNR / (ff * ff + DFNR * DFNR));
14020 
14021  // Loop over Rosnekranz '93 spectral line frequency:
14022  Numeric SUM = 0.000e0;
14023  for (Index l = first_line; l <= last_line; ++l) {
14024  Numeric DF = CW * W300[l] * DEN; // [hPa]
14025  // 118 line update according to M. J. Schwartz, MIT, 1997
14026  if ((version == "PWR98") && (fabs((F[l] - 118.75)) < 0.10)) {
14027  DF = CW * W300[l] * DENS; // [hPa]
14028  }
14029  Numeric Y = CO * 0.001 * 0.01 * abs_p[i] * B * (Y300[l] + V[l] * TH1);
14030  Numeric STR = CL * S300[l] * exp(-BE[l] * TH1);
14031  Numeric SF1 =
14032  (DF + (ff - F[l]) * Y) / ((ff - F[l]) * (ff - F[l]) + DF * DF);
14033  Numeric SF2 =
14034  (DF - (ff + F[l]) * Y) / ((ff + F[l]) * (ff + F[l]) + DF * DF);
14035  SUM += STR * (SF1 + SF2) * (ff / F[l]) * (ff / F[l]);
14036  }
14037  // O2 absorption [Neper/km]
14038  // Rosenkranz uses the factor 0.5034e12 in the calculation of the abs coeff.
14039  // This factor is the product of several terms:
14040  // 0.5034e12 = ISORATIO * VMR * (Hz/GHz) * (k_B*300K)^-1
14041  // = 0.995262 * 0.20946 * 10^-9 * 2.414322e21(hPa*cm^2*km)^-1
14042  // |---- 0.2085 ----| |---- 2.414322e12(hPa*cm^2*km)^-1 ---|
14043  // |---- 0.2085 ----| |---- 2.414322e10( Pa*cm^2*km)^-1 ---|
14044  // O2ABS = 2.4143e12 * SUM * PRESDA * pow(TH, 3.0) / PI;
14045  // O2ABS = CONT + (2.414322e10 * SUM * abs_p[i] * pow(TH, 3.0) / PI);
14046  // unit conversion x Nepers/km = y 1/m ---> y = x * 1.000e-3
14047  // therefore 2.414322e10 --> 2.414322e7
14048  // pxsec [1/m]
14049  pxsec(s, i) +=
14050  CONT + (2.414322e7 * SUM * abs_p[i] * pow(TH, (Numeric)3.) / PI);
14051  }
14052  }
14053 
14054  if (failed) throw runtime_error(fail_msg);
14055 
14056  return;
14057 }
14058 //
14059 // #################################################################################
14060 //
14062 
14099  const Numeric S0in, // model parameter
14100  const Numeric G0in, // model parameter
14101  const Numeric XS0in, // model parameter
14102  const Numeric XG0in, // model parameter
14103  const String &model,
14104  ConstVectorView f_grid,
14105  ConstVectorView abs_p,
14106  ConstVectorView abs_t,
14107  ConstVectorView abs_h2o,
14108  ConstVectorView vmr,
14109  const Verbosity &verbosity) {
14110  CREATE_OUT3;
14111 
14112  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
14113  // standard values for the MPM93 model (J. Liebe and G. A. Hufford and M. G. Cotton,
14114  // "Propagation modeling of moist air and suspended water/ice
14115  // particles at frequencies below 1000 GHz",
14116  // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
14117  // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21):
14118  // const Numeric S0_MPM93 = 6.140e-13/0.20946; // line strength/VMR-O2 [1/Pa]
14119  const Numeric S0_MPM93 = 6.140e-13; // line strength [1/Pa]
14120  const Numeric G0_MPM93 = 0.560e4; // line width [Hz/Pa]
14121  const Numeric XS0_MPM93 = 2.000; // temperature dependence of line strength
14122  const Numeric XG0_MPM93 = 0.800; // temperature dependence of line width
14123  // ---------------------------------------------------------------------------------------
14124 
14125  // select the parameter set (!!model dominates parameters!!):
14126  Numeric S0, G0, XS0, XG0;
14127  if (model == "MPM93") {
14128  S0 = S0_MPM93;
14129  G0 = G0_MPM93;
14130  XS0 = XS0_MPM93;
14131  XG0 = XG0_MPM93;
14132  } else if (model == "user") {
14133  S0 = S0in;
14134  G0 = G0in;
14135  XS0 = XS0in;
14136  XG0 = XG0in;
14137  } else {
14138  ostringstream os;
14139  os << "O2-SelfContMPM93: ERROR! Wrong model values given.\n"
14140  << "Valid models are: 'MPM93' and 'user'" << '\n';
14141  throw runtime_error(os.str());
14142  }
14143  out3 << "O2-SelfContMPM93: (model=" << model << ") parameter values in use:\n"
14144  << " S0 = " << S0 << "\n"
14145  << " G0 = " << G0 << "\n"
14146  << " XS0 = " << XS0 << "\n"
14147  << " XG0 = " << XG0 << "\n";
14148 
14149  const Index n_p = abs_p.nelem(); // Number of pressure levels
14150  const Index n_f = f_grid.nelem(); // Number of frequencies
14151 
14152  // Check that dimensions of abs_p, abs_t, and vmr agree:
14153  assert(n_p == abs_t.nelem());
14154  assert(n_p == vmr.nelem());
14155 
14156  // Check that dimensions of pxsec are consistent with n_f
14157  // and n_p. It should be [n_f,n_p]:
14158  assert(n_f == pxsec.nrows());
14159  assert(n_p == pxsec.ncols());
14160 
14161  // const = VMR * ISORATIO = 0.20946 * 0.99519
14162  // this constant is already incorporated into the line strength, so we
14163  // have top devide the line strength by this value since arts multiplies pxsec
14164  // by these variables later in abs_coefCalc.
14165  const Numeric VMRISO = 0.2085;
14166 
14167  // Loop pressure/temperature:
14168  for (Index i = 0; i < n_p; ++i) {
14169  // check if O2-VMR is exactly zero (caused by zeropadding), then return 0.
14170  if (vmr[i] == 0.) {
14171  pxsec(joker, i) = 0.;
14172  continue;
14173  }
14174 
14175  if (vmr[i] < VMRCalcLimit) // make sure that division by zero is excluded
14176  {
14177  ostringstream os;
14178  os << "ERROR: MPM93 O2 continuum absorption model has detected a O2 volume mixing ratio of "
14179  << vmr[i] << " which is below the threshold of " << VMRCalcLimit
14180  << ".\n"
14181  << "Therefore no calculation is performed.\n";
14182  throw runtime_error(os.str());
14183  return;
14184  }
14185  Numeric th = 300.0 / abs_t[i]; // Theta
14186  // continuum strength
14187  Numeric strength = S0 * abs_p[i] * (1.0000 - abs_h2o[i]) * pow(th, XS0);
14188  // G0 from the input has to be converted to unit GHz/hPa --> * 1.0e-7
14189  Numeric gamma = G0 * abs_p[i] * pow(th, XG0); // Hz
14190 
14191  // Loop frequency:
14192  for (Index s = 0; s < n_f; ++s) {
14193  // the vmr of O2 will be multiplied at the stage of absorption calculation:
14194  // abs / vmr * pxsec.
14195  pxsec(s, i) += (4.0 * PI / SPEED_OF_LIGHT) * // unit factor [1/(m*Hz)]
14196  (strength / VMRISO) * // strength [1]
14197  (pow(f_grid[s], (Numeric)2.) * gamma / // line shape [Hz]
14198  (pow(f_grid[s], (Numeric)2.) + pow(gamma, (Numeric)2.)));
14199  }
14200  }
14201  return;
14202 }
14203 //
14204 // #################################################################################
14205 //
14207 
14243  const Numeric S0in, // model parameter
14244  const Numeric G0in, // model parameter
14245  const Numeric XS0in, // model parameter
14246  const Numeric XG0in, // model parameter
14247  const String &model,
14248  ConstVectorView f_grid,
14249  ConstVectorView abs_p, // total pressure [Pa]
14250  ConstVectorView abs_t,
14251  ConstVectorView abs_h2o, // H2O VMR
14252  ConstVectorView vmr _U_, // O2 VMR
14253  const Verbosity &verbosity) {
14254  CREATE_OUT3;
14255 
14256  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
14257  // P. W. Rosenkranz, Chapter 2, in M. A. Janssen,
14258  // Atmospheric Remote Sensing by Microwave Radiometry, John Wiley & Sons, Inc., 1993
14259  // ftp://mesa.mit.edu/phil/lbl_rt
14260  const Numeric S0_PWR93 = 1.11e-14; // [K²/(Hz*Pa*m)] line strength
14261  const Numeric G0_PWR93 = 5600.000; // line width [Hz/Pa]
14262  const Numeric XS0_PWR93 = 2.000; // temperature dependence of line strength
14263  const Numeric XG0_PWR93 = 0.800; // temperature dependence of line width
14264  // ---------------------------------------------------------------------------------------
14265 
14266  // select the parameter set (!!model dominates values!!):
14267  Numeric S0, G0, XS0, XG0;
14268  if (model == "Rosenkranz") {
14269  S0 = S0_PWR93;
14270  G0 = G0_PWR93;
14271  XS0 = XS0_PWR93;
14272  XG0 = XG0_PWR93;
14273  } else if (model == "user") {
14274  S0 = S0in;
14275  G0 = G0in;
14276  XS0 = XS0in;
14277  XG0 = XG0in;
14278  } else {
14279  ostringstream os;
14280  os << "O2-SelfContPWR93: ERROR! Wrong model values given.\n"
14281  << "Valid models are: 'Rosenkranz' and 'user'" << '\n';
14282  throw runtime_error(os.str());
14283  }
14284  out3 << "O2-SelfContPWR93: (model=" << model << ") parameter values in use:\n"
14285  << " S0 = " << S0 << "\n"
14286  << " G0 = " << G0 << "\n"
14287  << " XS0 = " << XS0 << "\n"
14288  << " XG0 = " << XG0 << "\n";
14289 
14290  const Index n_p = abs_p.nelem(); // Number of pressure levels
14291  const Index n_f = f_grid.nelem(); // Number of frequencies
14292 
14293  // Check that dimensions of abs_p, abs_t, and vmr agree:
14294  assert(n_p == abs_t.nelem());
14295  assert(n_p == vmr.nelem());
14296 
14297  // Check that dimensions of pxsec are consistent with n_f
14298  // and n_p. It should be [n_f,n_p]:
14299  assert(n_f == pxsec.nrows());
14300  assert(n_p == pxsec.ncols());
14301 
14302  // loop over all pressure levels:
14303  for (Index i = 0; i < n_p; ++i) {
14304  Numeric TH = 300.00 / abs_t[i]; // relative temperature [1]
14305 
14306  Numeric ph2o = abs_p[i] * abs_h2o[i]; // water vapor partial pressure [Pa]
14307  Numeric pdry = abs_p[i] - ph2o; // dry air partial pressure [Pa]
14308 
14309  // pseudo broadening term [Hz]
14310  Numeric gamma = G0 * (pdry * pow(TH, XG0) + 1.100 * ph2o * TH);
14311 
14312  // Loop over frequency grid:
14313  for (Index s = 0; s < n_f; ++s) {
14314  // division by vmr of O2 is necessary because of the absorption calculation
14315  // abs = vmr * pxsec.
14316  pxsec(s, i) += S0 * abs_p[i] / pow(abs_t[i], XS0) *
14317  (pow(f_grid[s], (Numeric)2.) * gamma /
14318  (pow(f_grid[s], 2) + pow(gamma, (Numeric)2.)));
14319  }
14320  }
14321 }
14322 //
14323 //
14324 // #################################################################################
14326 
14363 void Standard_O2_continuum(MatrixView pxsec, // cross section
14364  const Numeric Cin, // model parameter
14365  const Numeric G0in, // model parameter
14366  const Numeric G0Ain, // model parameter
14367  const Numeric G0Bin, // model parameter
14368  const Numeric XG0din, // model parameter
14369  const Numeric XG0win, // model parameter
14370  const String &model, // model parameter
14371  ConstVectorView f_grid, // frequency grid
14372  ConstVectorView abs_p, // P_tot grid
14373  ConstVectorView abs_t, // T grid
14374  ConstVectorView abs_h2o, // VMR H2O profile
14375  ConstVectorView vmr _U_, // VMR O2 profile
14376  const Verbosity &verbosity) {
14377  CREATE_OUT3;
14378 
14379  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
14380  // P. W. Rosenkranz, Chapter 2, in M. A. Janssen,
14381  // Atmospheric Remote Sensing by Microwave Radiometry, John Wiley & Sons, Inc., 1993
14382  // ftp://mesa.mit.edu/phil/lbl_rt
14383  const Numeric C_PWR93 =
14384  (1.108e-14 /
14385  pow((Numeric)3.0e2, (Numeric)2.)); // [1/(Hz*Pa*m)] line strength
14386  const Numeric G0_PWR93 = 5600.000; // line width [Hz/Pa]
14387  const Numeric G0A_PWR93 = 1.000; // line width [1]
14388  const Numeric G0B_PWR93 = 1.100; // line width [1]
14389  const Numeric XG0d_PWR93 = 0.800; // temperature dependence of line width [1]
14390  const Numeric XG0w_PWR93 = 1.000; // temperature dependence of line width [1]
14391  //
14392  // standard values for the MPM93 model (J. Liebe and G. A. Hufford and M. G. Cotton,
14393  // "Propagation modeling of moist air and suspended water/ice
14394  // particles at frequencies below 1000 GHz",
14395  // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
14396  // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21):
14397  // const Numeric C_MPM93 = 1.23e-19; // line strength/VMR [1/m*1/Hz*1/Pa]
14398  const Numeric C_MPM93 = 6.14e-13 * (4.0 * PI / SPEED_OF_LIGHT) /
14399  0.2085; // line strength [1/m*1/Hz*1/Pa]
14400  // 0.2085 = VMR * ISORATIO = 0.20946 * 0.99519
14401  const Numeric G0_MPM93 = 5600.000; // line width [Hz/Pa]
14402  const Numeric G0A_MPM93 = 1.000; // line width [1]
14403  const Numeric G0B_MPM93 = 1.000; // line width [1]
14404  const Numeric XG0d_MPM93 =
14405  0.800; // temperature dependence of line strength [1]
14406  const Numeric XG0w_MPM93 =
14407  0.800; // temperature dependence of line width [1]
14408  // ---------------------------------------------------------------------------------------
14409 
14410  // select the parameter set (!!model dominates values!!):
14411  Numeric C, G0, G0A, G0B, XG0d, XG0w;
14412  if (model == "Rosenkranz") {
14413  C = C_PWR93;
14414  G0 = G0_PWR93;
14415  G0A = G0A_PWR93;
14416  G0B = G0B_PWR93;
14417  XG0d = XG0d_PWR93;
14418  XG0w = XG0w_PWR93;
14419  } else if (model == "MPM93") {
14420  C = C_MPM93;
14421  G0 = G0_MPM93;
14422  G0A = G0A_MPM93;
14423  G0B = G0B_MPM93;
14424  XG0d = XG0d_MPM93;
14425  XG0w = XG0w_MPM93;
14426  } else if (model == "user") {
14427  C = Cin;
14428  G0 = G0in;
14429  G0A = G0Ain;
14430  G0B = G0Bin;
14431  XG0d = XG0din;
14432  XG0w = XG0win;
14433  } else {
14434  ostringstream os;
14435  os << "O2-GenerealCont: ERROR! Wrong model values given.\n"
14436  << "Valid models are: 'Rosenkranz', 'MPM93' and 'user'" << '\n';
14437  throw runtime_error(os.str());
14438  }
14439  out3 << "O2-GeneralCont: (model=" << model << ") parameter values in use:\n"
14440  << " C = " << C << "\n"
14441  << " G0 = " << G0 << "\n"
14442  << " G0A = " << G0A << "\n"
14443  << " G0B = " << G0B << "\n"
14444  << " XG0d = " << XG0d << "\n"
14445  << " XG0w = " << XG0w << "\n";
14446 
14447  const Index n_p = abs_p.nelem(); // Number of pressure levels
14448  const Index n_f = f_grid.nelem(); // Number of frequencies
14449 
14450  // Check that dimensions of abs_p, abs_t, and vmr agree:
14451  assert(n_p == abs_t.nelem());
14452  assert(n_p == vmr.nelem());
14453 
14454  // Check that dimensions of pxsec are consistent with n_f
14455  // and n_p. It should be [n_f,n_p]:
14456  assert(n_f == pxsec.nrows());
14457  assert(n_p == pxsec.ncols());
14458 
14459  // const = VMR * ISORATIO = 0.20946 * 0.99519
14460  // this constant is already incorporated into the line strength, so we
14461  // have top devide the line strength by this value since arts multiplies pxsec
14462  // by these variables later in abs_coefCalc.
14463  // FIXME const Numeric VMRISO = 0.2085;
14464 
14465  // loop over all pressure levels:
14466  for (Index i = 0; i < n_p; ++i) {
14467  Numeric TH = 3.0e2 / abs_t[i]; // relative temperature [1]
14468 
14469  Numeric ph2o = abs_p[i] * abs_h2o[i]; // water vapor partial pressure [Pa]
14470  Numeric pdry = abs_p[i] - ph2o; // dry air partial pressure [Pa]
14471 
14472  // pseudo broadening term [Hz]
14473  Numeric gamma =
14474  G0 * (G0A * pdry * pow(TH, XG0d) + G0B * ph2o * pow(TH, XG0w));
14475 
14476  // Loop over frequency grid:
14477  for (Index s = 0; s < n_f; ++s) {
14478  // division by vmr of O2 is necessary because of the absorption calculation
14479  // abs = vmr * pxsec.
14480  pxsec(s, i) += C * abs_p[i] * pow(TH, (Numeric)2.) *
14481  (gamma * pow(f_grid[s], (Numeric)2.) /
14482  (pow(f_grid[s], 2) + pow(gamma, (Numeric)2.)));
14483  }
14484  }
14485 }
14486 //
14487 // #################################################################################
14488 // ################################ NITROGEN MODELS ################################
14489 // #################################################################################
14490 //
14492 
14523  const Numeric Cin,
14524  const String &model,
14525  ConstVectorView f_grid,
14526  ConstVectorView abs_p,
14527  ConstVectorView abs_t,
14528  ConstVectorView vmr,
14529  const Verbosity &verbosity) {
14530  CREATE_OUT3;
14531 
14532  //
14533  //
14534  // external function to call (original F77 code translated with f2c)
14535  extern Numeric n2n2tks_(double t, double f);
14536  //
14537  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
14538  // standard values for the MPM93 H2O continuum model
14539  // (AGARD 52nd Specialists Meeting of the Electromagnetic Wave
14540  // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21):
14541  Numeric XFAC = 1.0000; // scaling factor
14542  // ---------------------------------------------------------------------------------------
14543 
14544  // select the parameter set (!!model dominates values!!):
14545  if (model == "BF86") {
14546  XFAC = 1.0000;
14547  } else if (model == "user") {
14548  XFAC = Cin;
14549  } else {
14550  ostringstream os;
14551  os << "N2-SelfContBorysow: ERROR! Wrong model values given.\n"
14552  << "allowed models are: 'BF86', 'user'" << '\n';
14553  throw runtime_error(os.str());
14554  }
14555 
14556  out3 << "N2-SelfContBorysow: (model=" << model
14557  << ") parameter values in use:\n"
14558  << " XFAC = " << XFAC << "\n";
14559 
14560  const Index n_p = abs_p.nelem(); // Number of pressure levels
14561  const Index n_f = f_grid.nelem(); // Number of frequencies
14562 
14563  const Numeric AMAG2DEN = 44.53807; // inverse of N2 mol volume at std p/T
14564  const Numeric RIDGAS = 8.314510; // ideal gas constant
14565 
14566  // Check that dimensions of abs_p, abs_t, and vmr agree:
14567  assert(n_p == abs_t.nelem());
14568  assert(n_p == vmr.nelem());
14569 
14570  // Check that dimensions of pxsec are consistent with n_f
14571  // and n_p. It should be [n_f,n_p]:
14572  assert(n_f == pxsec.nrows());
14573  assert(n_p == pxsec.ncols());
14574 
14575  // Loop pressure/temperature:
14576  for (Index i = 0; i < n_p; ++i) {
14577  //cout << "------------------------------------------------\n";
14578  double T = (double)abs_t[i];
14579  //cout << "N2-N2 BF86: T =" << T << " K\n";
14580  //cout << "N2-N2 BF86: p =" << abs_p[i] << " Pa\n";
14581  //cout << "N2-N2 BF86: VMR =" << vmr[i] << "\n";
14582  Numeric XAMA = (abs_p[i]) / (AMAG2DEN * RIDGAS * abs_t[i]);
14583  Numeric XAMA2 = pow(XAMA, (Numeric)2.);
14584  //cout << "N2-N2 BF86: XAMA =" << XAMA << "\n";
14585 
14586  // Loop frequency:
14587  for (Index s = 0; s < n_f; ++s) {
14588  // the second vmr of N2 will be multiplied at the stage of
14589  // absorption calculation: abs = vmr * pxsec.
14590  double f = (double)f_grid[s];
14591  //cout << "N2-N2 BF86: f =" << f << " Hz\n";
14592  double cont = n2n2tks_(T, f);
14593  pxsec(s, i) += (Numeric)(cont * 1.000e2 * vmr[i] * XAMA2);
14594  //cout << "N2-N2 BF86: cont =" << cont << " cm-1 * amagat-2\n";
14595  //cout << "N2-N2 BF86: abs =" << (vmr[i] * pxsec(s,i)) << " m-1\n";
14596  }
14597  }
14598  return;
14599 }
14600 //
14601 // #################################################################################
14602 //
14604 
14641  const Numeric Cin,
14642  const Numeric Gin,
14643  const Numeric xTin,
14644  const Numeric xfin,
14645  const String &model,
14646  ConstVectorView f_grid,
14647  ConstVectorView abs_p,
14648  ConstVectorView abs_t,
14649  ConstVectorView abs_h2o,
14650  ConstVectorView vmr,
14651  const Verbosity &verbosity) {
14652  CREATE_OUT3;
14653 
14654  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
14655  // standard values for the MPM93 H2O continuum model
14656  // (AGARD 52nd Specialists Meeting of the Electromagnetic Wave
14657  // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21):
14658  const Numeric xT_MPM93 = 3.500; // temperature exponent [1]
14659  const Numeric xf_MPM93 = 1.500; // frequency exponent [1]
14660  const Numeric gxf_MPM93 =
14661  9.000 * xf_MPM93; // needed for the unit conversion of G_MPM93
14662  const Numeric S_MPM93 = 2.296e-31; // line strength [1/Pa² * 1/Hz]
14663  const Numeric G_MPM93 =
14664  1.930e-5 *
14665  pow((Numeric)10.000, -gxf_MPM93); // frequency factor [1/Hz^xf]
14666  // ---------------------------------------------------------------------------------------
14667 
14668  // select the parameter set (!!model dominates values!!):
14669  Numeric S0, G0, xf, xT;
14670  //Numeric gxf;
14671  if (model == "MPM93") {
14672  S0 = S_MPM93;
14673  G0 = G_MPM93;
14674  xT = xT_MPM93;
14675  xf = xf_MPM93;
14676  //gxf = gxf_MPM93;
14677  } else if (model == "MPM93Scale") {
14678  S0 = Cin * S_MPM93;
14679  G0 = G_MPM93;
14680  xT = xT_MPM93;
14681  xf = xf_MPM93;
14682  //gxf = gxf_MPM93;
14683  } else if (model == "user") {
14684  S0 = Cin;
14685  G0 = Gin;
14686  xT = xTin;
14687  xf = xfin;
14688  //gxf = 9.000*xf;
14689  } else {
14690  ostringstream os;
14691  os << "N2-SelfContMPM93 : ERROR! Wrong model values given.\n"
14692  << "allowed models are: 'MPM93', 'MPM93Scale' or 'user'" << '\n';
14693  throw runtime_error(os.str());
14694  }
14695 
14696  out3 << "N2-SelfContMPM93: (model=" << model << ") parameter values in use:\n"
14697  << " S0 = " << S0 << "\n"
14698  << " G0 = " << G0 << "\n"
14699  << " xT = " << xT << "\n"
14700  << " xf = " << xf << "\n";
14701 
14702  // unit conversion internally:
14703  //const Numeric S0unitconv = 1.000e+13; // x [1/(hPa²*GHz)] => y [1/(pa²*Hz)]
14704  //const Numeric G0unitconv = pow(10.000, gxf);
14705 
14706  const Index n_p = abs_p.nelem(); // Number of pressure levels
14707  const Index n_f = f_grid.nelem(); // Number of frequencies
14708 
14709  // Check that dimensions of abs_p, abs_t, and vmr agree:
14710  assert(n_p == abs_t.nelem());
14711  assert(n_p == vmr.nelem());
14712 
14713  // Check that dimensions of pxsec are consistent with n_f
14714  // and n_p. It should be [n_f,n_p]:
14715  assert(n_f == pxsec.nrows());
14716  assert(n_p == pxsec.ncols());
14717 
14718  Numeric fac = 4.0 * PI / SPEED_OF_LIGHT; // = 4 * pi / c
14719  // Loop pressure/temperature:
14720  for (Index i = 0; i < n_p; ++i) {
14721  Numeric th = 300.0 / abs_t[i];
14722  Numeric strength =
14723  S0 * pow((abs_p[i] * ((Numeric)1.0000 - abs_h2o[i])), (Numeric)2.) *
14724  pow(th, xT);
14725 
14726  // Loop frequency:
14727  for (Index s = 0; s < n_f; ++s) {
14728  // FIXME Numeric f = f_grid[s] * Hz_to_GHz; // frequency in GHz
14729  // the vmr of N2 will be multiplied at the stage of absorption calculation:
14730  // abs / vmr * pxsec.
14731  pxsec(s, i) += fac * strength * // strength
14732  pow(f_grid[s], (Numeric)2.) / // frequency dependence
14733  (1.000 + G0 * pow(f_grid[s], xf)) * vmr[i]; // N2 vmr
14734  }
14735  }
14736  return;
14737 }
14738 //
14739 // #################################################################################
14741 
14767  const Numeric Cin,
14768  const String &model,
14769  ConstVectorView f_grid,
14770  ConstVectorView abs_p,
14771  ConstVectorView abs_t,
14772  ConstVectorView vmr,
14773  ConstVectorView h2ovmr,
14774  const Verbosity &verbosity) {
14775  CREATE_OUT3;
14776 
14777  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
14778  // standard values for the Pardo et al. model (IEEE, Trans. Ant. Prop.,
14779  // Vol 49, No 12, pp. 1683-1694, 2001)
14780  const Numeric C_ATM = 2.612e-6; // [1/m]
14781  // ---------------------------------------------------------------------------------------
14782 
14783  // select the parameter set (!!model dominates parameters!!):
14784  Numeric C;
14785  if (model == "ATM") {
14786  C = C_ATM;
14787  } else if (model == "user") {
14788  C = Cin;
14789  } else {
14790  ostringstream os;
14791  os << "N2-DryContATM01: ERROR! Wrong model values given.\n"
14792  << "allowed models are: 'ATM', 'user'" << '\n';
14793  throw runtime_error(os.str());
14794  }
14795  out3 << "N2-DryContATM01: (model=" << model << ") parameter values in use:\n"
14796  << " C_s = " << C << "\n";
14797 
14798  const Index n_p = abs_p.nelem(); // Number of pressure levels
14799  const Index n_f = f_grid.nelem(); // Number of frequencies
14800 
14801  // Check that dimensions of abs_p, abs_t, and vmr agree:
14802  assert(n_p == abs_t.nelem());
14803  assert(n_p == vmr.nelem());
14804 
14805  // Check that dimensions of pxsec are consistent with n_f
14806  // and n_p. It should be [n_f,n_p]:
14807  assert(n_f == pxsec.nrows());
14808  assert(n_p == pxsec.ncols());
14809 
14810  // Loop over pressure/temperature grid:
14811  for (Index i = 0; i < n_p; ++i) {
14812  // since this is an effective "dry air" continuum, it is not really
14813  // it is not specifically attributed to N2, so we need the total
14814  // dry air part in total which is equal to the total minus the
14815  // water vapor pressure:
14816  Numeric pd = abs_p[i] * (1.00000e0 - h2ovmr[i]); // [Pa]
14817  // Loop over frequency grid:
14818  if (vmr[i] > VMRCalcLimit) {
14819  for (Index s = 0; s < n_f; ++s) {
14820  // Becaue this is an effective "dry air" continuum, it is not really
14821  // specific N2 but mainly caused by N2. Therefore the N2 vmr must be
14822  // canceled out here which is later in abs_coefCalc multiplied
14823  // (calculation: abs = vmr * pxsec):
14824  pxsec(s, i) += C * // strength [1/(m*Hz²Pa²)]
14825  pow((f_grid[s] / (Numeric)2.25e11),
14826  (Numeric)2.) * // quadratic f dependence [Hz²]
14827  pow(((Numeric)300.0 / abs_t[i]),
14828  (Numeric)3.5) * // free T dependence [1]
14829  pow((pd / (Numeric)1.01300e5),
14830  (Numeric)2.) / // quadratic p dependence [Pa²]
14831  vmr[i]; // cancel the vmr dependency
14832  }
14833  }
14834  }
14835 }
14836 //
14837 // #################################################################################
14839 
14866  const Numeric Cin,
14867  const Numeric xin,
14868  const String &model,
14869  ConstVectorView f_grid,
14870  ConstVectorView abs_p,
14871  ConstVectorView abs_t,
14872  ConstVectorView vmr,
14873  const Verbosity &verbosity) {
14874  CREATE_OUT3;
14875 
14876  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
14877  // standard values for the Rosenkranz model (Chapter 2, pp 74, in M. A. Janssen,
14878  // "Atmospheric Remote Sensing by Microwave Radiometry", John Wiley & Sons, Inc., 1993
14879  const Numeric C_PWR = 1.05e-38; // [1/(Pa²*Hz²*m)]
14880  const Numeric x_PWR = 3.55; // [1]
14881  // ---------------------------------------------------------------------------------------
14882 
14883  // select the parameter set (!!model dominates parameters!!):
14884  Numeric C, x;
14885  if (model == "Rosenkranz") {
14886  C = C_PWR;
14887  x = x_PWR;
14888  } else if (model == "user") {
14889  C = Cin;
14890  x = xin;
14891  } else {
14892  ostringstream os;
14893  os << "N2-SelfContPWR93: ERROR! Wrong model values given.\n"
14894  << "allowed models are: 'Rosenkranz', 'user'" << '\n';
14895  throw runtime_error(os.str());
14896  }
14897  out3 << "N2-SelfContPWR93: (model=" << model << ") parameter values in use:\n"
14898  << " C_s = " << C << "\n"
14899  << " x_s = " << x << "\n";
14900 
14901  const Index n_p = abs_p.nelem(); // Number of pressure levels
14902  const Index n_f = f_grid.nelem(); // Number of frequencies
14903 
14904  // Check that dimensions of abs_p, abs_t, and vmr agree:
14905  assert(n_p == abs_t.nelem());
14906  assert(n_p == vmr.nelem());
14907 
14908  // Check that dimensions of pxsec are consistent with n_f
14909  // and n_p. It should be [n_f,n_p]:
14910  assert(n_f == pxsec.nrows());
14911  assert(n_p == pxsec.ncols());
14912 
14913  // Loop over pressure/temperature grid:
14914  for (Index i = 0; i < n_p; ++i) {
14915  // Loop over frequency grid:
14916  for (Index s = 0; s < n_f; ++s) {
14917  // The second vmr of N2 will be multiplied at the stage of absorption
14918  // calculation: abs = vmr * pxsec.
14919  pxsec(s, i) +=
14920  C * // strength [1/(m*Hz²Pa²)]
14921  pow(f_grid[s], (Numeric)2.) * // quadratic f dependence [Hz²]
14922  pow((Numeric)300.0 / abs_t[i], x) * // free T dependence [1]
14923  pow(abs_p[i], (Numeric)2.) * // quadratic p dependence [Pa²]
14924  vmr[i]; // second N2-VMR at the stage
14925  // of absorption calculation
14926  }
14927  }
14928 }
14929 //
14930 // #################################################################################
14931 //
14933 
14965  const Numeric Cin,
14966  const Numeric xfin,
14967  const Numeric xtin,
14968  const Numeric xpin,
14969  const String &model,
14970  ConstVectorView f_grid,
14971  ConstVectorView abs_p,
14972  ConstVectorView abs_t,
14973  ConstVectorView vmr,
14974  const Verbosity &verbosity) {
14975  CREATE_OUT3;
14976 
14977  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
14978  // standard values for the Rosenkranz model, Chapter 2, pp 74, in M. A. Janssen,
14979  // "Atmospheric Remote Sensing by Microwave Radiometry", John Wiley & Sons, Inc., 1993
14980  const Numeric C_GM = 1.05e-38; // [1/(Pa²*Hz²*m)]
14981  const Numeric xf_GM = 2.00; // [1]
14982  const Numeric xt_GM = 3.55; // [1]
14983  const Numeric xp_GM = 2.00; // [1]
14984  // ---------------------------------------------------------------------------------------
14985 
14986  // select the parameter set (!!model dominates over values!!):
14987  Numeric C, xt, xf, xp;
14988  if (model == "Rosenkranz") {
14989  C = C_GM;
14990  xt = xt_GM;
14991  xf = xf_GM;
14992  xp = xp_GM;
14993  } else if (model == "user") {
14994  C = Cin;
14995  xt = xtin;
14996  xf = xfin;
14997  xp = xpin;
14998  } else {
14999  ostringstream os;
15000  os << "N2-SelfContStandardType: ERROR! Wrong model values given.\n"
15001  << "allowed models are: 'Rosenkranz', 'user'" << '\n';
15002  throw runtime_error(os.str());
15003  }
15004  out3 << "N2-SelfContStandardType: (model=" << model
15005  << ") parameter values in use:\n"
15006  << " C = " << C << "\n"
15007  << " xt = " << xt << "\n"
15008  << " xf = " << xf << "\n"
15009  << " xp = " << xp << "\n";
15010 
15011  const Index n_p = abs_p.nelem(); // Number of pressure levels
15012  const Index n_f = f_grid.nelem(); // Number of frequencies
15013 
15014  // Check that dimensions of abs_p, abs_t, and vmr agree:
15015  assert(n_p == abs_t.nelem());
15016  assert(n_p == vmr.nelem());
15017 
15018  // Check that dimensions of pxsec are consistent with n_f
15019  // and n_p. It should be [n_f,n_p]:
15020  assert(n_f == pxsec.nrows());
15021  assert(n_p == pxsec.ncols());
15022 
15023  // Loop over pressure/temperature grid:
15024  for (Index i = 0; i < n_p; ++i) {
15025  //cout << "vmr[" << i << "]= " << vmr[i] << "\n";
15026  // Loop over frequency grid:
15027  for (Index s = 0; s < n_f; ++s) {
15028  // The second N2-VMR will be multiplied at the stage of absorption
15029  // calculation: abs = vmr * pxsec.
15030  pxsec(s, i) +=
15031  C * // strength [1/(m*Hz²Pa²)]
15032  pow(((Numeric)300.00 / abs_t[i]), xt) * // T dependence [1]
15033  pow(f_grid[s], xf) * // f dependence [Hz^xt]
15034  pow(abs_p[i], xp) * // p dependence [Pa^xp]
15035  pow(vmr[i], (xp - (Numeric)1.)); // last N2-VMR at the stage
15036  // of absorption calculation
15037  }
15038  }
15039 }
15040 
15041 // ############################################################################
15042 // ############################## CARBON DIOXIDE MODELS #######################
15043 // ############################################################################
15044 
15045 // ############################################################################
15047 
15074  const Numeric Cin,
15075  const Numeric xin,
15076  const String &model,
15077  ConstVectorView f_grid,
15078  ConstVectorView abs_p,
15079  ConstVectorView abs_t,
15080  ConstVectorView vmr,
15081  const Verbosity &verbosity) {
15082  CREATE_OUT3;
15083 
15084  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
15085  // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen,
15086  // "Atmospheric Remote Sensing by Microwave Radiometry", John Wiley & Sons, Inc., 1993
15087  const Numeric C_PWR = 7.43e-37; // [ 1/(Pa²*Hz²*m) ]
15088  const Numeric x_PWR = 5.08; // [ 1 ]
15089  // ---------------------------------------------------------------------------------------
15090 
15091  // select the parameter set (!!model dominates values!!):
15092  Numeric C, x;
15093  if (model == "Rosenkranz") {
15094  C = C_PWR;
15095  x = x_PWR;
15096  } else if (model == "user") {
15097  C = Cin;
15098  x = xin;
15099  } else {
15100  ostringstream os;
15101  os << "CO2-SelfContPWR93 : ERROR! Wrong model values given.\n"
15102  << "allowed models are: 'Rosenkranz', 'user'"
15103  << "\n";
15104  throw runtime_error(os.str());
15105  }
15106 
15107  out3 << "CO2-SelfContPWR93: (model=" << model
15108  << ") parameter values in use:\n"
15109  << " C = " << C << "\n"
15110  << " x = " << x << "\n";
15111 
15112  const Index n_p = abs_p.nelem(); // Number of pressure levels
15113  const Index n_f = f_grid.nelem(); // Number of frequencies
15114 
15115  // Check that dimensions of abs_p, abs_t, and vmr agree:
15116  assert(n_p == abs_t.nelem());
15117  assert(n_p == vmr.nelem());
15118 
15119  // Check that dimensions of pxsec are consistent with n_f
15120  // and n_p. It should be [n_f,n_p]:
15121  assert(n_f == pxsec.nrows());
15122  assert(n_p == pxsec.ncols());
15123 
15124  // Loop over pressure/temperature grid:
15125  for (Index i = 0; i < n_p; ++i) {
15126  // Dummy scalar holds everything except the quadratic frequency dependence.
15127  // The second vmr of CO2 will be multiplied at the stage of absorption
15128  // calculation: abs = vmr * pxsec.
15129  Numeric dummy = C * pow((Numeric)300. / abs_t[i], x) *
15130  pow(abs_p[i], (Numeric)2.) * vmr[i];
15131 
15132  // Loop over frequency grid:
15133  for (Index s = 0; s < n_f; ++s) {
15134  pxsec(s, i) += dummy * pow(f_grid[s], (Numeric)2.);
15135  }
15136  }
15137 }
15138 
15139 // ############################################################################
15141 
15169  const Numeric Cin,
15170  const Numeric xin,
15171  const String &model,
15172  ConstVectorView f_grid,
15173  ConstVectorView abs_p,
15174  ConstVectorView abs_t,
15175  ConstVectorView abs_n2,
15176  ConstVectorView vmr _U_,
15177  const Verbosity &verbosity) {
15178  CREATE_OUT3;
15179 
15180  // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
15181  // "Atmospheric Remote Sensing by Microwave Radiometry", John Wiley & Sons, Inc., 1993
15182  const Numeric C_PWR = 2.71e-37; // default: 2.71*10^-37 1/(Pa²*Hz²*m)
15183  const Numeric x_PWR = 4.7; // default: 4.7
15184  // ---------------------------------------------------------------------------------------
15185 
15186  // select the parameter set (!!model dominates values!!):
15187  Numeric C, x;
15188  if (model == "Rosenkranz") {
15189  C = C_PWR;
15190  x = x_PWR;
15191  } else if (model == "user") {
15192  C = Cin;
15193  x = xin;
15194  } else {
15195  ostringstream os;
15196  os << "CO2-ForeignContPWR93: ERROR! Wrong model values given.\n"
15197  << "allowed models are: 'Rosenkranz', 'user'"
15198  << "\n";
15199  throw runtime_error(os.str());
15200  }
15201 
15202  out3 << "CO2-ForeignContPWR93: (model=" << model
15203  << ") parameter values in use:\n"
15204  << " C = " << C << "\n"
15205  << " x = " << x << "\n";
15206 
15207  const Index n_p = abs_p.nelem(); // Number of pressure levels
15208  const Index n_f = f_grid.nelem(); // Number of frequencies
15209 
15210  // Check that dimensions of abs_p, abs_t, and vmr agree:
15211  assert(n_p == abs_t.nelem());
15212  assert(n_p == vmr.nelem());
15213 
15214  // Check that dimensions of pxsec are consistent with n_f
15215  // and n_p. It should be [n_f,n_p]:
15216  assert(n_f == pxsec.nrows());
15217  assert(n_p == pxsec.ncols());
15218 
15219  // Loop pressure/temperature:
15220  for (Index i = 0; i < n_p; ++i) {
15221  // Dummy scalar holds everything except the quadratic frequency dependence.
15222  // The vmr of CO2 will be multiplied at the stage of absorption
15223  // calculation: abs = vmr * pxsec.
15224  Numeric dummy =
15225  C * pow((Numeric)300. / abs_t[i], x) * abs_p[i] * abs_p[i] * abs_n2[i];
15226 
15227  // Loop frequency:
15228  for (Index s = 0; s < n_f; ++s) {
15229  pxsec(s, i) += dummy * pow(f_grid[s], (Numeric)2.);
15230  }
15231  }
15232 }
15233 
15234 // ############################################################################
15236 
15262  const Numeric Cin,
15263  const Numeric xin,
15264  const String &model,
15265  ConstVectorView f_grid,
15266  ConstVectorView abs_p,
15267  ConstVectorView abs_t,
15268  ConstVectorView vmr,
15269  const Verbosity &verbosity) {
15270  CREATE_OUT3;
15271 
15272  // --------- STANDARD MODEL PARAMETERS --------------------------------------
15273  // Values (after conversion for C) from abstract of Ho66:
15274  const Numeric C_Ho66 = 1.70e-36; // [ 1/(Pa²*Hz²*m) ]
15275  const Numeric x_Ho66 = 5; // [ 1 ]
15276  // --------------------------------------------------------------------------
15277 
15278  // select the parameter set (!!model dominates values!!):
15279  Numeric C, x;
15280  if (model == "Ho66") {
15281  C = C_Ho66;
15282  x = x_Ho66;
15283  } else if (model == "user") {
15284  C = Cin;
15285  x = xin;
15286  } else {
15287  ostringstream os;
15288  os << "CO2-SelfContHo66 : ERROR! Wrong model values given.\n"
15289  << "allowed models are: 'Ho66', 'user'"
15290  << "\n";
15291  throw runtime_error(os.str());
15292  }
15293 
15294  out3 << "CO2-SelfContHo66: (model=" << model << ") parameter values in use:\n"
15295  << " C = " << C << "\n"
15296  << " x = " << x << "\n";
15297 
15298  const Index n_p = abs_p.nelem(); // Number of pressure levels
15299  const Index n_f = f_grid.nelem(); // Number of frequencies
15300 
15301  // Check that dimensions of abs_p, abs_t, and vmr agree:
15302  assert(n_p == abs_t.nelem());
15303  assert(n_p == vmr.nelem());
15304 
15305  // Check that dimensions of pxsec are consistent with n_f
15306  // and n_p. It should be [n_f,n_p]:
15307  assert(n_f == pxsec.nrows());
15308  assert(n_p == pxsec.ncols());
15309 
15310  // Loop over pressure/temperature grid:
15311  for (Index i = 0; i < n_p; ++i) {
15312  // Dummy scalar holds everything except the quadratic frequency
15313  // dependence. The second vmr of CO2 will be multiplied at the stage of
15314  // absorption calculation: abs = vmr * pxsec.
15315 
15316  Numeric dummy = C * pow((Numeric)273. / abs_t[i], x) *
15317  pow(abs_p[i], (Numeric)2.) * vmr[i];
15318 
15319  // Loop over frequency grid:
15320  for (Index s = 0; s < n_f; ++s) {
15321  pxsec(s, i) += dummy * pow(f_grid[s], (Numeric)2.);
15322  }
15323  }
15324 }
15325 
15326 // ############################################################################
15328 
15355  const Numeric Cin,
15356  const Numeric xin,
15357  const String &model,
15358  ConstVectorView f_grid,
15359  ConstVectorView abs_p,
15360  ConstVectorView abs_t,
15361  ConstVectorView abs_n2,
15362  ConstVectorView vmr _U_,
15363  const Verbosity &verbosity) {
15364  CREATE_OUT3;
15365 
15366  // --------- STANDARD MODEL PARAMETERS --------------------------------------
15367  // Values (after conversion for C) from abstract of Ho66:
15368  const Numeric C_Ho66 = 4.23e-37; // [ 1/(Pa²*Hz²*m) ]
15369  const Numeric x_Ho66 = 5; // [ 1 ]
15370  // --------------------------------------------------------------------------
15371 
15372  // select the parameter set (!!model dominates values!!):
15373  Numeric C, x;
15374  if (model == "Ho66") {
15375  C = C_Ho66;
15376  x = x_Ho66;
15377  } else if (model == "user") {
15378  C = Cin;
15379  x = xin;
15380  } else {
15381  ostringstream os;
15382  os << "CO2-ForeignContHo66: ERROR! Wrong model values given.\n"
15383  << "allowed models are: 'Ho66', 'user'"
15384  << "\n";
15385  throw runtime_error(os.str());
15386  }
15387 
15388  out3 << "CO2-ForeignContHo66: (model=" << model
15389  << ") parameter values in use:\n"
15390  << " C = " << C << "\n"
15391  << " x = " << x << "\n";
15392 
15393  const Index n_p = abs_p.nelem(); // Number of pressure levels
15394  const Index n_f = f_grid.nelem(); // Number of frequencies
15395 
15396  // Check that dimensions of abs_p, abs_t, and vmr agree:
15397  assert(n_p == abs_t.nelem());
15398  assert(n_p == vmr.nelem());
15399 
15400  // Check that dimensions of pxsec are consistent with n_f
15401  // and n_p. It should be [n_f,n_p]:
15402  assert(n_f == pxsec.nrows());
15403  assert(n_p == pxsec.ncols());
15404 
15405  // Loop pressure/temperature:
15406  for (Index i = 0; i < n_p; ++i) {
15407  // Dummy scalar holds everything except the quadratic frequency
15408  // dependence The vmr of CO2 will be multiplied at the stage of
15409  // absorption calculation: abs = vmr * pxsec.
15410  Numeric dummy =
15411  C * pow((Numeric)273. / abs_t[i], x) * abs_p[i] * abs_p[i] * abs_n2[i];
15412 
15413  // Loop frequency:
15414  for (Index s = 0; s < n_f; ++s) {
15415  pxsec(s, i) += dummy * pow(f_grid[s], (Numeric)2.);
15416  }
15417  }
15418 }
15419 
15420 // ############################################################################
15421 // ################################### CLOUD AND RAIN MODELS ##################
15422 // ############################################################################
15424 
15456  MatrixView pxsec,
15457  const Numeric CCin, // input parameter
15458  const Numeric CGin, // input parameter
15459  const Numeric CEin, // input parameter
15460  const String &model, // model
15461  ConstVectorView f_grid, // frequency vector
15462  ConstVectorView abs_p, // pressure vector
15463  ConstVectorView abs_t, // temperature vector
15464  ConstVectorView vmr, // suspended water droplet density vector
15465  const Verbosity &) {
15466  // --------- STANDARD MODEL PARAMETERS ------------------------------------------------
15467  // standard values for the MPM93 model (J. Liebe and G. A. Hufford and M. G. Cotton,
15468  // "Propagation modeling of moist air and suspended water/ice
15469  // particles at frequencies below 1000 GHz",
15470  // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
15471  // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21)
15472  const Numeric CC_MPM93 = 1.00000;
15473  const Numeric CG_MPM93 = 1.00000;
15474  const Numeric CE_MPM93 = 1.00000;
15475  // ------------------------------------------------------------------------------------
15476 
15477  // select the parameter set (!!model dominates values!!):
15478  Numeric CC, CG, CE;
15479  if (model == "MPM93") {
15480  CC = CC_MPM93;
15481  CG = CG_MPM93;
15482  CE = CE_MPM93;
15483  } else if (model == "user") {
15484  CC = CCin;
15485  CG = CGin;
15486  CE = CEin;
15487  } else {
15488  ostringstream os;
15489  os << "liquidcloud-MPM93: ERROR! Wrong model values given.\n"
15490  << "Valid models are: \"MPM93\" and \"user\"";
15491  throw runtime_error(os.str());
15492  }
15493 
15494  const Numeric m =
15495  1.00e3; // specific weight of the droplet, fixed value: 1.00e3 kg/m3
15496  const Numeric low_lim_den =
15497  -LIQUID_AND_ICE_TREAT_AS_ZERO; // lower limit of suspended droplet particle density vector [kg/m3]
15498  const Numeric high_lim_den =
15499  5.00e-3; // upper limit of suspended droplet particle density vector [kg/m3]
15500 
15501  const Index n_p = abs_p.nelem(); // Number of pressure levels
15502  const Index n_f = f_grid.nelem(); // Number of frequencies
15503 
15504  // Check that dimensions of abs_p, abs_t, and vmr agree:
15505  assert(n_p == abs_t.nelem());
15506  assert(n_p == vmr.nelem());
15507 
15508  // Check that dimensions of pxsec are consistent with n_f
15509  // and n_p. It should be [n_f,n_p]:
15510  assert(n_f == pxsec.nrows());
15511  assert(n_p == pxsec.ncols());
15512 
15513  // Loop pressure/temperature:
15514  for (Index i = 0; i < n_p; ++i) {
15515  // Check limits of suspended water droplet density ("vmr") [kg/m³]
15516  if ((vmr[i] < low_lim_den) || (vmr[i] > high_lim_den)) {
15517  ostringstream os;
15518  os << "ERROR in MPM93WaterDropletAbs:\n"
15519  << "Valid range is " << low_lim_den << "-" << low_lim_den << "kg/m3,\n"
15520  << "but found a value = " << vmr[i];
15521  throw runtime_error(os.str());
15522  }
15523 
15524  else if (vmr[i] < LIQUID_AND_ICE_TREAT_AS_ZERO) {
15525  pxsec(joker, i) = 0;
15526  }
15527 
15528  else {
15529  // relative inverse temperature [1]
15530  Numeric theta = 300.000 / abs_t[i];
15531  // relaxation frequencies [GHz]
15532  Numeric gamma1 = CG * 20.20 - 146.40 * (theta - 1.000) +
15533  316.00 * (theta - 1.000) * (theta - 1.000);
15534  // Numeric gamma1 = 20.1 * exp( 7.88 * theta ); // see Liebe et al. IJIMW, 1992, p667, Eq. (2b)
15535  Numeric gamma2 = 39.80 * gamma1;
15536  // static and high-frequency permittivities
15537  Numeric epsilon0 = CE * 103.30 * (theta - 1.000) + 77.66;
15538  Numeric epsilon1 = 0.0671 * epsilon0;
15539  Numeric epsilon2 = 3.52;
15540 
15541  // Loop frequency:
15542  for (Index s = 0; s < n_f; ++s) {
15543  // real part of the complex permittivity of water (double-debye model)
15544  Numeric Reepsilon =
15545  epsilon0 - pow((f_grid[s] * Hz_to_GHz), (Numeric)2.) *
15546  (((epsilon0 - epsilon1) /
15547  (pow((f_grid[s] * Hz_to_GHz), (Numeric)2.) +
15548  pow(gamma1, (Numeric)2.))) +
15549  ((epsilon1 - epsilon2) /
15550  (pow((f_grid[s] * Hz_to_GHz), (Numeric)2.) +
15551  pow(gamma2, (Numeric)2.))));
15552  // imaginary part of the complex permittivity of water (double-debye model)
15553  Numeric Imepsilon = (f_grid[s] * Hz_to_GHz) *
15554  ((gamma1 * (epsilon0 - epsilon1) /
15555  (pow((f_grid[s] * Hz_to_GHz), (Numeric)2.) +
15556  pow(gamma1, (Numeric)2.))) +
15557  (gamma2 * (epsilon1 - epsilon2) /
15558  (pow((f_grid[s] * Hz_to_GHz), (Numeric)2.) +
15559  pow(gamma2, (Numeric)2.))));
15560  // the imaginary part of the complex refractivity of suspended liquid water particle [ppm]
15561  // In MPM93 w is in g/m³ and m is in g/cm³. Because of the units used in arts,
15562  // a factor of 1.000e6 must be multiplied with the ratio (w/m):
15563  // MPM93: (w/m)_MPM93 in (g/m³)/(g/cm³)
15564  // arts: (w/m)_arts in (kg/m³)/(kg/m³)
15565  // =====> (w/m)_MPM93 = 1.0e6 * (w/m)_arts
15566  // the factor of 1.0e6 is included below in pxsec calculation.
15567  Numeric ImNw = 1.500 / m *
15568  (3.000 * Imepsilon /
15569  (pow((Reepsilon + (Numeric)2.000), (Numeric)2.) +
15570  pow(Imepsilon, (Numeric)2.)));
15571  // liquid water particle absorption cross section [1/m]
15572  // The vmr of H2O will be multiplied at the stage of absorption
15573  // calculation: abs = vmr * pxsec.
15574  // pxsec = abs/vmr [1/m] but MPM93 is in [dB/km] --> conversion necessary
15575  pxsec(s, i) += CC * 1.000e6 * dB_km_to_1_m * 0.1820 *
15576  (f_grid[s] * Hz_to_GHz) * ImNw;
15577  }
15578  }
15579  }
15580 }
15581 
15582 //
15583 // #################################################################################
15585 
15609  MatrixView pxsec,
15610  const String &model, // model
15611  ConstVectorView f_grid, // frequency vector
15612  ConstVectorView abs_p, // pressure vector
15613  ConstVectorView abs_t, // temperature vector
15614  ConstVectorView vmr, // suspended water droplet density vector
15615  const Verbosity &) {
15616  if (model != "ELL07") {
15617  ostringstream os;
15618  os << "liquidcloud-ELL07: ERROR! Wrong model values given.\n"
15619  << "Valid models are: \"ELL07\"";
15620  throw runtime_error(os.str());
15621  }
15622 
15623  const Numeric m =
15624  1.00e3; // specific weight of the droplet, fixed value: 1.00e3 kg/m3
15625  const Numeric low_lim_den =
15626  -LIQUID_AND_ICE_TREAT_AS_ZERO; // lower limit of suspended droplet particle density vector [kg/m3]
15627  const Numeric high_lim_den =
15628  5.00e-3; // upper limit of suspended droplet particle density vector [kg/m3]
15629 
15630  const Index n_p = abs_p.nelem(); // Number of pressure levels
15631  const Index n_f = f_grid.nelem(); // Number of frequencies
15632 
15633  // ELL07 model parameters - table 2 in Ellison (2007)
15634  const Numeric a1 = 79.23882;
15635  const Numeric a2 = 3.815866;
15636  const Numeric a3 = 1.634967;
15637  const Numeric tc = 133.1383;
15638  const Numeric b1 = 0.004300598;
15639  const Numeric b2 = 0.01117295;
15640  const Numeric b3 = 0.006841548;
15641  const Numeric c1 = 1.382264e-13;
15642  const Numeric c2 = 3.510354e-16;
15643  const Numeric c3 = 6.30035e-15;
15644  const Numeric d1 = 652.7648;
15645  const Numeric d2 = 1249.533;
15646  const Numeric d3 = 405.5169;
15647  const Numeric p0 = 0.8379692;
15648  const Numeric p1 = -0.006118594;
15649  const Numeric p2 = -0.000012936798;
15650  const Numeric p3 = 4235901000000.0;
15651  const Numeric p4 = -14260880000.0;
15652  const Numeric p5 = 273815700.0;
15653  const Numeric p6 = -1246943.0;
15654  const Numeric p7 = 9.618642e-14;
15655  const Numeric p8 = 1.795786e-16;
15656  const Numeric p9 = -9.310017E-18;
15657  const Numeric p10 = 1.655473e-19;
15658  const Numeric p11 = 0.6165532;
15659  const Numeric p12 = 0.007238532;
15660  const Numeric p13 = -0.00009523366;
15661  const Numeric p14 = 15983170000000.0;
15662  const Numeric p15 = -74413570000.0;
15663  const Numeric p16 = 497448000.0;
15664  const Numeric p17 = 2.882476e-14;
15665  const Numeric p18 = -3.142118e-16;
15666  const Numeric p19 = 3.528051e-18;
15667 
15668  // Check that dimensions of abs_p, abs_t, and vmr agree:
15669  assert(n_p == abs_t.nelem());
15670  assert(n_p == vmr.nelem());
15671 
15672  // Check that dimensions of pxsec are consistent with n_f
15673  // and n_p. It should be [n_f,n_p]:
15674  assert(n_f == pxsec.nrows());
15675  assert(n_p == pxsec.ncols());
15676 
15677  // Loop pressure/temperature:
15678  for (Index i = 0; i < n_p; ++i) {
15679  // Check limits of suspended water droplet density ("vmr") [kg/m³]
15680  if ((vmr[i] < low_lim_den) || (vmr[i] > high_lim_den)) {
15681  ostringstream os;
15682  os << "ERROR in ELL07WaterDropletAbs:\n"
15683  << "Valid range is " << low_lim_den << "-" << low_lim_den << "kg/m3,\n"
15684  << "but found a value = " << vmr[i];
15685  throw runtime_error(os.str());
15686  }
15687 
15688  else if (vmr[i] < LIQUID_AND_ICE_TREAT_AS_ZERO) {
15689  pxsec(joker, i) = 0;
15690  }
15691 
15692  else {
15693  // Temperature in celsius
15694  Numeric t_cels = abs_t[i] - 273.15;
15695  // static permittivity
15696  Numeric epsilon_s = 87.9144 - 0.404399 * t_cels -
15697  9.58726e-4 * pow(t_cels, (Numeric)2.) -
15698  1.32802e-6 * pow(t_cels, (Numeric)3.);
15699  // Model parameters
15700  Numeric delta1 = a1 * exp(-b1 * t_cels);
15701  Numeric delta2 = a2 * exp(-b2 * t_cels);
15702  Numeric delta3 = a3 * exp(-b3 * t_cels);
15703  Numeric tau1 = c1 * exp(d1 / (t_cels + tc));
15704  Numeric tau2 = c2 * exp(d2 / (t_cels + tc));
15705  Numeric tau3 = c3 * exp(d3 / (t_cels + tc));
15706  Numeric delta4 = p0 + p1 * t_cels + p2 * pow(t_cels, (Numeric)2.);
15707  Numeric f0 = p3 + p4 * t_cels + p5 * pow(t_cels, (Numeric)2.) +
15708  p6 * pow(t_cels, (Numeric)3.);
15709  Numeric tau4 = p7 + p8 * t_cels + p9 * pow(t_cels, (Numeric)2.) +
15710  p10 * pow(t_cels, (Numeric)3.);
15711  Numeric delta5 = p11 + p12 * t_cels + p13 * pow(t_cels, (Numeric)2.);
15712  Numeric f1 = p14 + p15 * t_cels + p16 * pow(t_cels, (Numeric)2.);
15713  Numeric tau5 = p17 + p18 * t_cels + p19 * pow(t_cels, (Numeric)2.);
15714 
15715  // Loop frequency:
15716  for (Index s = 0; s < n_f; ++s) {
15717  // real part of the complex permittivity of water (triple-debye + 2 resonances)
15718  Numeric Reepsilon =
15719  epsilon_s -
15720  pow(((Numeric)2. * PI * f_grid[s]), (Numeric)2.) *
15721  (pow(tau1, (Numeric)2.) * delta1 /
15722  ((Numeric)1. +
15723  pow((Numeric)2. * PI * f_grid[s] * tau1, (Numeric)2.)) +
15724  pow(tau2, (Numeric)2.) * delta2 /
15725  ((Numeric)1. +
15726  pow((Numeric)2. * PI * f_grid[s] * tau2, (Numeric)2.)) +
15727  pow(tau3, (Numeric)2.) * delta3 /
15728  ((Numeric)1. +
15729  pow((Numeric)2. * PI * f_grid[s] * tau3, (Numeric)2.))) -
15730  pow((Numeric)2. * PI * tau4, (Numeric)2.) * delta4 / (Numeric)2. *
15731  (f_grid[s] * (f0 + f_grid[s]) /
15732  ((Numeric)1. +
15733  pow((Numeric)2. * PI * tau4 * (f0 + f_grid[s]),
15734  (Numeric)2.)) -
15735  f_grid[s] * (f0 - f_grid[s]) /
15736  ((Numeric)1. +
15737  pow((Numeric)2. * PI * tau4 * (f0 - f_grid[s]),
15738  (Numeric)2.))) -
15739  pow((Numeric)2. * PI * tau5, (Numeric)2.) * delta5 / (Numeric)2. *
15740  (f_grid[s] * (f1 + f_grid[s]) /
15741  ((Numeric)1. +
15742  pow((Numeric)2. * PI * tau5 * (f1 + f_grid[s]),
15743  (Numeric)2.)) -
15744  f_grid[s] * (f1 - f_grid[s]) /
15745  ((Numeric)1. +
15746  pow((Numeric)2. * PI * tau5 * (f1 - f_grid[s]),
15747  (Numeric)2.)));
15748  // imaginary part of the complex permittivity of water (triple-debye + 2 resonances)
15749  Numeric Imepsilon =
15750  2 * PI * f_grid[s] *
15751  (tau1 * delta1 /
15752  ((Numeric)1. +
15753  pow((Numeric)2. * PI * f_grid[s] * tau1, (Numeric)2.)) +
15754  tau2 * delta2 /
15755  ((Numeric)1. +
15756  pow((Numeric)2. * PI * f_grid[s] * tau2, (Numeric)2.)) +
15757  tau3 * delta3 /
15758  ((Numeric)1. +
15759  pow((Numeric)2. * PI * f_grid[s] * tau3, (Numeric)2.))) +
15760  PI * f_grid[s] * tau4 * delta4 *
15761  ((Numeric)1. / ((Numeric)1. +
15762  pow((Numeric)2. * PI * tau4 * (f0 + f_grid[s]),
15763  (Numeric)2.)) +
15764  (Numeric)1. / ((Numeric)1. +
15765  pow((Numeric)2. * PI * tau4 * (f0 - f_grid[s]),
15766  (Numeric)2.))) +
15767  PI * f_grid[s] * tau5 * delta5 *
15768  ((Numeric)1. / ((Numeric)1. +
15769  pow((Numeric)2. * PI * tau5 * (f1 + f_grid[s]),
15770  (Numeric)2.)) +
15771  (Numeric)1. / ((Numeric)1. +
15772  pow((Numeric)2. * PI * tau5 * (f1 - f_grid[s]),
15773  (Numeric)2.)));
15774 
15775  // the imaginary part of the complex refractivity of suspended liquid water particle [ppm]
15776  // In MPM93 w is in g/m³ and m is in g/cm³. Because of the units used in arts,
15777  // a factor of 1.000e6 must be multiplied with the ratio (w/m):
15778  // MPM93: (w/m)_MPM93 in (g/m³)/(g/cm³)
15779  // arts: (w/m)_arts in (kg/m³)/(kg/m³)
15780  // =====> (w/m)_MPM93 = 1.0e6 * (w/m)_arts
15781  // the factor of 1.0e6 is included below in pxsec calculation.
15782  Numeric ImNw = 1.500 / m *
15783  (3.000 * Imepsilon /
15784  (pow((Reepsilon + (Numeric)2.000), (Numeric)2.) +
15785  pow(Imepsilon, (Numeric)2.)));
15786  // liquid water particle absorption cross section [1/m]
15787  // The vmr of H2O will be multiplied at the stage of absorption
15788  // calculation: abs = vmr * pxsec.
15789  // pxsec = abs/vmr [1/m] but MPM93 is in [dB/km] --> conversion necessary
15790  pxsec(s, i) +=
15791  1.000e6 * dB_km_to_1_m * 0.1820 * (f_grid[s] * Hz_to_GHz) * ImNw;
15792  }
15793  }
15794  }
15795 }
15796 
15797 //
15798 // #################################################################################
15800 
15833  MatrixView pxsec,
15834  const Numeric CCin, // input parameter
15835  const Numeric CAin, // input parameter
15836  const Numeric CBin, // input parameter
15837  const String &model, // model
15838  ConstVectorView f_grid, // frequency vector
15839  ConstVectorView abs_p, // pressure vector
15840  ConstVectorView abs_t, // temperature vector
15841  ConstVectorView vmr, // suspended ice particle density vector,
15842  // valid range: 0-1.0e-3 kg/m³ const Verbosity &) { // --------- STANDARD MODEL PARAMETERS ------------------------------------------------ // standard values for the MPM93 model (J. Liebe and G. A. Hufford and M. G. Cotton, // "Propagation modeling of moist air and suspended water/ice // particles at frequencies below 1000 GHz", // AGARD 52nd Specialists Meeting of the Electromagnetic Wave // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21) const Numeric CC_MPM93 = 1.00000; const Numeric CA_MPM93 = 1.00000; const Numeric CB_MPM93 = 1.00000; // ------------------------------------------------------------------------------------ // select the parameter set (!!model dominates values!!): Numeric CC, CA, CB; if (model == "MPM93") { CC = CC_MPM93; CA = CA_MPM93; CB = CB_MPM93; } else if (model == "user") { CC = CCin; CA = CAin; CB = CBin; } else { ostringstream os; os << "icecloud-MPM93: ERROR! Wrong model values given.\n" << "Valid models are: \"MPM93\" and \"user\""; throw runtime_error(os.str()); } const Numeric m = 0.916e3; // specific weight of ice particles, fixed value: 0.916e3 kg/m³ const Numeric low_lim_den = -LIQUID_AND_ICE_TREAT_AS_ZERO; // lower limit of suspended droplet particle density vector [kg/m3] const Numeric high_lim_den = 1.00e-3; // lower limit of suspended ice particle density vector [kg/m³] const Index n_p = abs_p.nelem(); // Number of pressure levels const Index n_f = f_grid.nelem(); // Number of frequencies // Check that dimensions of abs_p, abs_t, and vmr agree: assert(n_p == abs_t.nelem()); assert(n_p == vmr.nelem()); // Check that dimensions of pxsec are consistent with n_f // and n_p. It should be [n_f,n_p]: assert(n_f == pxsec.nrows()); assert(n_p == pxsec.ncols()); // Loop pressure/temperature: for (Index i = 0; i < n_p; ++i) { // Check limits of suspended water droplet density ("vmr") [kg/m³] if ((vmr[i] < low_lim_den) || (vmr[i] > high_lim_den)) { ostringstream os; os << "ERROR in MPM93IceCrystalAbs:\n" << "Valid range is " << low_lim_den << "-" << low_lim_den << "kg/m3,\n" << "but found a value = " << vmr[i]; throw runtime_error(os.str()); } else if (vmr[i] < LIQUID_AND_ICE_TREAT_AS_ZERO) { pxsec(joker, i) = 0; } else { // relative inverse temperature [1] Numeric theta = 300.000 / abs_t[i]; // inverse frequency T-dependency function [Hz] Numeric ai = CA * (62.000 * theta - 11.600) * exp(-22.100 * (theta - 1.000)) * 1.000e-4; // linear frequency T-dependency function [1/Hz] Numeric bi = CB * 0.542e-6 * (-24.17 + (116.79 / theta) + pow((theta / (theta - (Numeric)0.9927)), (Numeric)2.)); // Loop frequency: for (Index s = 0; s < n_f; ++s) { // real part of the complex permittivity of ice Numeric Reepsilon = 3.15; // imaginary part of the complex permittivity of water Numeric Imepsilon = ((ai / (f_grid[s] * Hz_to_GHz)) + (bi * (f_grid[s] * Hz_to_GHz))); // the imaginary part of the complex refractivity of suspended ice particles. // In MPM93 w is in g/m³ and m is in g/cm³. Because of the units used in arts, // a factor of 1.000e6 must be multiplied with the ratio (w/m): // MPM93: (w/m)_MPM93 in (g/m³)/(g/cm³) // arts: (w/m)_arts in (kg/m³)/(kg/m³) // =====> (w/m)_MPM93 = 1.0e6 * (w/m)_arts // the factor of 1.0e6 is included below in pxsec calculation. Numeric ImNw = 1.500 / m * (3.000 * Imepsilon / (pow((Reepsilon + (Numeric)2.000), (Numeric)2.) + pow(Imepsilon, (Numeric)2.))); // ice particle absorption cross section [1/m] // The vmr of H2O will be multiplied at the stage of absorption // calculation: abs = vmr * pxsec. // pxsec = abs/vmr [1/m] but MPM93 is in [dB/km] --> conversion necessary pxsec(s, i) += CC * 1.000e6 * dB_km_to_1_m * 0.1820 * (f_grid[s] * Hz_to_GHz) * ImNw; } } } } // // ################################################################################# //! MPM93RainExt /*! \param[out] pxsec cross section (absorption/volume mixing ratio) of water clouds according to MPM93 [1/m] \param CEin scaling parameter of the calculated cross section [1] \param CAin scaling parameter of the factor a_rain [1] \param CBin scaling parameter of the exponent b_rain [1] \param model allows user defined input parameter (CEin, CAin, CBin)<br> or choice of pre-defined parameters of specific models (see note below). \param f_grid predefined frequency grid [Hz] \param abs_p predefined pressure grid [Pa] \param abs_t predefined temperature grid [K] \param vmr rain rate vector (i.e. vertical profile) [kg/m2/s] (valid range: 0-0.42) \note Except for model 'user' the input parameters CEin, CAin, and CBin are neglected (model dominates over parameters).<br> Allowed models: 'MPM93' and 'user'. See the user guide for detailed explanations. \remark Reference: R. L. Olsen and D.V. Rogers and D. B. Hodge,<br> <i> The aR^b relation in the calculation of rain attenuation</i>,<br> IEEE Trans. Antennas Propagat., vol. AP-26, pp. 318-329, 1978. \author Christian Melsheimer \date 2003-22-05 */ void MPM93RainExt(MatrixView pxsec, const Numeric CEin, // input parameter const Numeric CAin, // input parameter const Numeric CBin, // input parameter const String &model, // model ConstVectorView f_grid, // frequency vector ConstVectorView abs_p, // pressure vector ConstVectorView abs_t _U_, // temperature vector ConstVectorView vmr, // rain rate profile [kg/m2/s] const Verbosity &) { // --------- STANDARD MODEL PARAMETERS ------------------------------------------------ // standard values for the MPM93 model based on Olsen, R.L., // D.V. Rogers, and D. B. Hodge, "The aR^b relation in the // calculation of rain attenuation", IEEE Trans. Antennas Propagat., // vol. AP-26, pp. 318-329, 1978, const Numeric CE_MPM93 = 1.00000; const Numeric CA_MPM93 = 1.00000; const Numeric CB_MPM93 = 1.00000; // ------------------------------------------------------------------------------------ // select the parameter set (!!model dominates values!!): Numeric CE, CA, CB; if (model == "MPM93") { CE = CE_MPM93; CA = CA_MPM93; CB = CB_MPM93; } else if (model == "user") { CE = CEin; CA = CAin; CB = CBin; } else { ostringstream os; os << "rain-MPM93: ERROR! Wrong model values given.\n" << "Valid models are: \"MPM93\" and \"user\""; throw runtime_error(os.str()); } // --------------------------------------------------------------------------------------- // conversion factor to convert input SI-units [kg/m2/s] to [mm/h] const Numeric convfac = 3.6e6 / DENSITY_OF_WATER; const Numeric low_lim_rr = 0.000; // lower limit of allowed rain rate [mm/h] const Numeric high_lim_rr = 150.000; // upper limit of allowed rain rate [mm/h] const Index n_p = abs_p.nelem(); // Number of pressure levels const Index n_f = f_grid.nelem(); // Number of frequencies // Check that dimensions of abs_p, abs_t, and vmr agree: assert(n_p == abs_t.nelem()); assert(n_p == vmr.nelem()); // Check that dimensions of pxsec are consistent with n_f // and n_p. It should be [n_f,n_p]: assert(n_f == pxsec.nrows()); assert(n_p == pxsec.ncols()); // Loop pressure/temperature: for (Index i = 0; i < n_p; ++i) { // Extinction by rain is parameterized as: // ext_rain = a_rain * rr ^ b_rain // a_rain and b_rain each depend on frequency by power laws: // a_rain = Ga * freq ^ Ea // b_rain = Gb * freq ^ Eb Numeric Ga = 0.; Numeric Ea = 0.; Numeric Gb = 0.; Numeric Eb = 0.; // FIXME Numeric a_rain; // FIXME Numeric b_rain; // FIXME Numeric ext_rain; const Numeric vmri = vmr[i] * convfac; // Check limits of rain rate ("vmr") [mm/h] if (vmr[i] == 0.) pxsec(joker, i) += 0.; else if ((vmri >= low_lim_rr) && (vmri < high_lim_rr)) { // Loop frequency: for (Index s = 0; s < n_f; ++s) { // for rain rate < 25 mm/h, take parameters from Olsen et al.'s // own power law fit to their Laws-Parsons-Low data; // for rain rate > 25 mm/h, take C. Melsheimer's power law fit // to Olsen et al.'s Laws-Parson-High data if (vmri <= 25) { // power law coeff. Ga and exponent Ea for a, piecewise: if (f_grid[s] <= 2.9e9) { Ga = 6.39e-5; Ea = 2.03; } else if (f_grid[s] <= 54.0e9) { Ga = 4.21e-5; Ea = 2.42; } else if (f_grid[s] <= 180e9) { Ga = 4.09e-2; Ea = 0.699; } else if (f_grid[s] <= 1000e9) { Ga = 3.38; Ea = -0.151; } else { ostringstream os; os << "ERROR in MPM93RainExt:\n" << " frequency (valid range 0-1000 GHz):" << f_grid[s] * Hz_to_GHz << "\n" << " ==> no calculation performed!\n"; throw runtime_error(os.str()); } // power law coeff. Gb and exponent Eb for b, piecewise: if (f_grid[s] <= 8.5e9) { Gb = 0.851; Eb = 0.158; } else if (f_grid[s] <= 25.0e9) { Gb = 1.41; Eb = -0.0779; } else if (f_grid[s] <= 164.0e9) { Gb = 2.63; Eb = -0.272; } else if (f_grid[s] <= 1000e9) { Gb = 0.616; Eb = 0.0126; } else { ostringstream os; os << "ERROR in MPM93RainExt:\n" << " frequency (valid range 0-1000 GHz):" << f_grid[s] * Hz_to_GHz << "\n" << " ==> no calculation performed!\n"; throw runtime_error(os.str()); } } else if (vmri > 25) { // power law coeff. Ga and exponent Ea for a, piecewise: if (f_grid[s] <= 4.9e9) { Ga = 5.30e-5; Ea = 1.87; } else if (f_grid[s] <= 10.7e9) { Ga = 5.03e-6; Ea = 3.35; } else if (f_grid[s] <= 40.1e9) { Ga = 2.53e-5; Ea = 2.67; } else if (f_grid[s] <= 59.1e9) { Ga = 3.58e-3; Ea = 1.33; } else if (f_grid[s] <= 100e9) { Ga = 0.143; Ea = 0.422; } else { ostringstream os; os << "ERROR in MPM93RainExt:\n" << " frequency (valid range for rain rate > 25mm/h: 0-100 GHz):" << f_grid[s] * Hz_to_GHz << "\n" << " ==> no calculation performed!\n"; throw runtime_error(os.str()); } // power law coeff. Gb and exponent Eb for b, piecewise: if (f_grid[s] <= 6.2e9) { Gb = 0.911; Eb = 0.190; } else if (f_grid[s] <= 23.8e9) { Gb = 1.71; Eb = -0.156; } else if (f_grid[s] <= 48.4e9) { Gb = 3.08; Eb = -0.342; } else if (f_grid[s] <= 68.2e9) { Gb = 1.28; Eb = -0.116; } else if (f_grid[s] <= 100e9) { Gb = 0.932; Eb = -0.0408; } else { ostringstream os; os << "ERROR in MPM93RainExt:\n" << " frequency (valid range for rain rate > 25mm/h: 0-100 GHz):" << f_grid[s] * Hz_to_GHz << "\n" << " ==> no calculation performed!\n"; throw runtime_error(os.str()); } } //Factor a_rain Numeric a_rain = Ga * pow((f_grid[s] * Hz_to_GHz), Ea); //Factor b_rain Numeric b_rain = Gb * pow((f_grid[s] * Hz_to_GHz), Eb); // Extinction coefficient [dB/km], with scaling // parameters CA and CB Numeric ext_rain = CA * a_rain * pow(vmri, (CB * b_rain)); // rain extinction cross section [1/m] // The vmr will be multiplied at the stage of extinction // calculation: ext = vmr * pxsec. // pxsec = ext/vmr [1/m] but MPM93 is in [dB/km] --> conversion necessary pxsec(s, i) += CE * dB_km_to_1_m * ext_rain / vmri; } } else { if ((vmri < low_lim_rr) || (vmri > high_lim_rr)) { ostringstream os; os << "ERROR in MPM93RainExt:\n" << " rain rate (valid range 0.00-150.00 mm/h):" << vmr[i] << " kg/m2/s (" << vmri << " mm/h)\n" << " ==> no calculation performed!\n"; throw runtime_error(os.str()); } } } } // // ################################################################################# // ################################# HELP FUNCTIONS ################################ // ################################################################################# // /** \retval MPMLineShapeFunction H2O-line shape function value [1/Hz] \param gamma H2O-line width [Hz] \param fl H2O-line central frequency [Hz] \param f frequency position of calculation [Hz] \note This function calculates the line shape function of Van Vleck and Weisskopf with the factor (f/fl)¹. for the MPM pseudo continuum line. \remark Reference: H. J. Liebe and G. A. Hufford and M. G. Cotton,<br> <i>Propagation modeling of moist air and suspended water/ice particles at frequencies below 1000 GHz</i>,<br> AGARD 52nd Specialists Meeting of the Electromagnetic Wave Propagation Panel,<br> Palma de Mallorca, Spain, 1993, May 17-21 \author Thomas Kuhn \date 2001-11-05 */ Numeric MPMLineShapeFunction(const Numeric gamma, const Numeric fl, const Numeric f) { /* this routine calculates the line shape function of Van Vleck and Weisskopf with the factor (f/f_o)¹. for the MPM pseudo continuum line. creation TKS, 4.11.00 input: gamma [Hz] line width of line L fl [Hz] central frequency of line L f [Hz] frequency position of calculation output: value [1/Hz] line shape function value at f for the line parameters of line L */ double f_minus, f_plus; /* internal variables */ double value; /* return value */ // line at fl f_minus = 1.000 / ((f - fl) * (f - fl) + gamma * gamma); // mirror line at -fl f_plus = 1.000 / ((f + fl) * (f + fl) + gamma * gamma); // VVW line shape function value value = fabs(f / fl) * gamma * (f_minus + f_plus); return value; } // // ################################################################################# // /** \retval MPMLineShapeO2Function O2-line shape function value [1] \param gamma O2-line width [Hz] \param fl H2O-line central frequency of the [Hz] \param f frequency position of calculation [Hz] \param delta O2-line mixing parameter [1] \note This function calculates the line shape function of Van Vleck and Weisskopf for O2 with line mixing. \remark Reference: H. J. Liebe and G. A. Hufford and M. G. Cotton,<br> <i>Propagation modeling of moist air and suspended water/ice particles at frequencies below 1000 GHz</i>,<br> AGARD 52nd Specialists Meeting of the Electromagnetic Wave Propagation Panel,<br> Palma de Mallorca, Spain, 1993, May 17-21 \author Thomas Kuhn \date 2001-11-05 */ Numeric MPMLineShapeO2Function(const Numeric gamma, const Numeric fl, const Numeric f, const Numeric delta) { /* this routine calculates the line shape function of Van Vleck and Weisskopf for O2 with line mixing. creation TKS, 14.07.01 input: gamma [GHz] line width of line L fl [GHz] central frequency of line L f [GHz] frequency position of calculation delta [1] line mixing parameter output: value [1] line shape function value at f for the line parameters of line L */ double f_minus, f_plus; /* internal variables */ double value; /* return value */ // line at fl f_minus = (gamma - delta * (fl - f)) / ((fl - f) * (fl - f) + gamma * gamma); // mirror line at -fl f_plus = (gamma - delta * (fl + f)) / ((fl + f) * (fl + f) + gamma * gamma); // VVW line shape function value value = f * (f_minus + f_plus); return value; } // // ############################################################################ // #################### CONTROL OF ADDITIONAL ABSORPTION MODEL ################ // ############################################################################ // // /** Calculates model absorption for one continuum or full model tag. Note, that only one tag can be taken at a time. Calculated is the true absorption cross section, that means you have to multiply this with n*VMR in order to get the absorption coefficient in units of 1/m. This is the type of xsec that is used all over ARTS, but not what is used by the internal continuum functions! (We have to divide the output of the internal continuum functions by the number density n.) \retval xsec Cross section of one continuum tag,<br> xsec = alpha / (n*VMR) [m^2]. This is both input and output! (The function adds the continuum absorption cross section to the previous content of xsec.) \param name The name of the model to calculate (derived from the tag name) \param parameters model parameters, as defined in method abs_cont_parameters. \param model model, related to model parameters \param f_grid Frequency grid [Hz] \param abs_p Pressure grid [Pa] \param abs_t Temperatures associated with the pressure grid, abs_p [K] \param abs_n2 Total volume mixing ratio profile of molecular nitrogen.<br> This will be needed only for the CO2 foreign continuum [1]<br> however one is forced to give this input [1] \param abs_h2o Total volume mixing ratio profile of water vapor.<br> This will be needed only for the oxygen continuum <br> however one is forced to give this input [1] \param vmr Volume mixing ratio profile of the actual species [1] \author Stefan Buehler, Thomas Kuhn \date 2001-11-05 */ 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) { CREATE_OUT3; /* In the following all the possible tags are listed here and after a first consistency check about the input parameters the appropriate internal function is called, !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ATTENTION PLEASE UPDATE THIS COMMENT IF ANY CHANGES ARE MADE CONCERNING THE ASSOCIATED MODELS TO EACH TAG !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ---------------------------------------------------------------------------------------------------- TAG VALID MODELS ---------------------------------------------------------------------------------------------------- *CONTAGMODINFO* H2O-SelfContStandardType: Rosenkranz, user *CONTAGMODINFO* H2O-ForeignContStandardType: Rosenkranz, user *CONTAGMODINFO* H2O-ForeignContMaTippingType: MaTipping, user *CONTAGMODINFO* H2O-ContMPM93: MPM93, user *CONTAGMODINFO* H2O-MPM87: MPM87, MPM87Lines, MPM87Continuum, user *CONTAGMODINFO* H2O-MPM89: MPM89, MPM89Lines, MPM89Continuum, user *CONTAGMODINFO* H2O-MPM93: MPM93, MPM93Lines, MPM93Continuum, user *CONTAGMODINFO* H2O-PWR98: Rosenkranz, RosenkranzLines, RosenkranzContinuum, user *CONTAGMODINFO* H2O-CP98: CruzPol, CruzPolLine, CruzPolContinuum, user *CONTAGMODINFO* H2O-CKD24: CKD24, user *CONTAGMODINFO* O2-MPM85: MPM85, MPM85Lines, MPM85Continuum, MPM85NoCoupling, MPM85NoCutoff, user *CONTAGMODINFO* O2-MPM87: MPM87, MPM87Lines, MPM87Continuum, MPM87NoCoupling, MPM87NoCutoff, user *CONTAGMODINFO* O2-MPM89: MPM89, MPM89Lines, MPM89Continuum, MPM89NoCoupling, MPM89NoCutoff, user *CONTAGMODINFO* O2-MPM92: MPM92, MPM92Lines, MPM92Continuum, MPM92NoCoupling, MPM92NoCutoff, user *CONTAGMODINFO* O2-MPM93: MPM93, MPM93Lines, MPM93Continuum, MPM93NoCoupling, MPM92NoCutoff, user *CONTAGMODINFO* O2-PWR93: Rosenkranz, RosenkranzLines, RosenkranzContinuum, user *CONTAGMODINFO* O2-PWR88: Rosenkranz, RosenkranzLines, RosenkranzContinuum, user *CONTAGMODINFO* O2-SelfContMPM93: MPM93, user *CONTAGMODINFO* O2-SelfContPWR93: Rosenkranz, user *CONTAGMODINFO* O2-GenerealCont: Rosenkranz, MPM93, user *CONTAGMODINFO* N2-BFCIA86: BF86, user *CONTAGMODINFO* N2-SelfContMPM93: MPM93, user, MPM93Scale *CONTAGMODINFO* N2-SelfContPWR93: Rosenkranz, user *CONTAGMODINFO* N2-SelfContStandardType: Rosenkranz, user *CONTAGMODINFO* CO2-SelfContPWR93: Rosenkranz, user *CONTAGMODINFO* CO2-ForeignContPWR93: Rosenkranz, user *CONTAGMODINFO* liquidcloud-MPM93: MPM93, user *CONTAGMODINFO* liquidcloud-ELL07: ELL07 *CONTAGMODINFO* icecloud-MPM93: MPM93, user *CONTAGMODINFO* rain-MPM93: MPM93, user ---------------------------------------------------------------------------------------------------- */ // Set up a lokal variable pxsec for the pseudo cross sections, that // are used by the internal contiuum functions. It is important that // we also inititialize this to zero here, since the continuum // routines just add to this. // The dimensions of this are [n_frequencies,n_pressures]. Matrix pxsec(xsec.nrows(), xsec.ncols(), 0.0); // ============= H2O continuum ======================================================== if ("H2O-SelfContStandardType" == name) { // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum coefficient (C_s) [1/m / (Hz²*Pa²)] // parameters[1] : temperature exponent (x_s) [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 2; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; Standard_H2O_self_continuum(pxsec, parameters[0], parameters[1], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; Standard_H2O_self_continuum( pxsec, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-ForeignContStandardType" == name) { // // specific continuum parameters units: // a) output // pxsec : [1/m], // b) input // parameters[0] : [1/m / (Hz²*Pa²)] // parameters[1] : [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 2; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; Standard_H2O_foreign_continuum(pxsec, parameters[0], parameters[1], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; Standard_H2O_foreign_continuum( pxsec, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-ForeignContMaTippingType" == name) { // // specific continuum parameters units: // a) output // pxsec : [1/m], // b) input // parameters[0] : [1/m / (Hz²*Pa²)] // parameters[1] : [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 2; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MaTipping_H2O_foreign_continuum(pxsec, parameters[0], parameters[1], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; MaTipping_H2O_foreign_continuum( pxsec, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-ContMPM93" == name) { // self and foreign continuum term are simultaneously calculated // since the parameterization can not be divided up in these two // terms because they are not additive terms. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : pseudo continuum line frequency [Hz] // parameters[1] : pseudo continuum line strength parameter [Hz/Pa] // parameters[2] : pseudo continuum line strength temperature parameter [1] // parameters[3] : pseudo continuum line broadening parameter [Hz/Pa] // parameters[4] : pseudo continuum line broadening parameter [1] // parameters[5] : pseudo continuum line broadening parameter [1] // parameters[6] : pseudo continuum line broadening parameter [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 7; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM93_H2O_continuum(pxsec, parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; MPM93_H2O_continuum(pxsec, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-ForeignContATM01" == name) { // Foreign wet continuum term. // // Pardo et al., IEEE, Trans. Ant. Prop., // Vol 49, No 12, pp. 1683-1694, 2001. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : pseudo continuum line frequency [Hz] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; Pardo_ATM_H2O_ForeignContinuum( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; Pardo_ATM_H2O_ForeignContinuum( pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-SelfContCKD222" == name) { // OUTPUT: // pxsec cross section (absorption/volume mixing ratio) of // H2O self continuum according to CKD2.2.2 [1/m] // INPUT: // parameters[0] strength scaling factor [1] // model allows user defined input parameter set // (Cin) or choice of // pre-defined parameters of specific models (see note below). // f_grid predefined frequency grid [Hz] // abs_p predefined pressure grid [Pa] // abs_t predefined temperature grid [K] // vmr H2O volume mixing ratio profile [1] // // WWW resource: ftp.aer.com/aer_contnm_ckd const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_222_self_h2o( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_222_self_h2o( pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-ForeignContCKD222" == name) { // OUTPUT: // pxsec cross section (absorption/volume mixing ratio) of // H2O foreign continuum according to CKD2.2.2 [1/m] // INPUT: // parameters[0] strength scaling factor [1] // model allows user defined input parameter set // (Cin) or choice of // pre-defined parameters of specific models (see note below). // f_grid predefined frequency grid [Hz] // abs_p predefined pressure grid [Pa] // abs_t predefined temperature grid [K] // vmr H2O volume mixing ratio profile [1] // // WWW resource: ftp.aer.com/aer_contnm_ckd const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_222_foreign_h2o( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_222_foreign_h2o( pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-SelfContCKD242" == name) { // OUTPUT: // pxsec cross section (absorption/volume mixing ratio) of // H2O self continuum according to CKD2.4.2 [1/m] // INPUT: // parameters[0] strength scaling factor [1] // model allows user defined input parameter set // (Cin) or choice of // pre-defined parameters of specific models (see note below). // f_grid predefined frequency grid [Hz] // abs_p predefined pressure grid [Pa] // abs_t predefined temperature grid [K] // vmr H2O volume mixing ratio profile [1] // // WWW resource: ftp.aer.com/aer_contnm_ckd const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_242_self_h2o( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_242_self_h2o( pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-ForeignContCKD242" == name) { // OUTPUT: // pxsec cross section (absorption/volume mixing ratio) of // H2O foreign continuum according to CKD2.4.2 [1/m] // INPUT: // parameters[0] strength scaling factor [1] // model allows user defined input parameter set // (Cin) or choice of // pre-defined parameters of specific models (see note below). // f_grid predefined frequency grid [Hz] // abs_p predefined pressure grid [Pa] // abs_t predefined temperature grid [K] // vmr H2O volume mixing ratio profile [1] // // WWW resource: ftp.aer.com/aer_contnm_ckd const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_242_foreign_h2o( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_242_foreign_h2o( pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-SelfContCKDMT100" == name) { // OUTPUT: // pxsec cross section (absorption/volume mixing ratio) of // H2O self continuum according to CKD MT 1.00 [1/m] // INPUT: // parameters[0] strength scaling factor [1] // model allows user defined input parameter set // (Cin) or choice of // pre-defined parameters of specific models (see note below). // f_grid predefined frequency grid [Hz] // abs_p predefined pressure grid [Pa] // abs_t predefined temperature grid [K] // vmr H2O volume mixing ratio profile [1] // // WWW resource: ftp.aer.com/aer_contnm_ckd const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_100_self_h2o( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_100_self_h2o( pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-ForeignContCKDMT100" == name) { // OUTPUT: // pxsec cross section (absorption/volume mixing ratio) of // H2O foreign continuum according to CKD MT 1.00 [1/m] // INPUT: // parameters[0] strength scaling factor [1] // model allows user defined input parameter set // (Cin) or choice of // pre-defined parameters of specific models (see note below). // f_grid predefined frequency grid [Hz] // abs_p predefined pressure grid [Pa] // abs_t predefined temperature grid [K] // vmr H2O volume mixing ratio profile [1] // // WWW resource: ftp.aer.com/aer_contnm_ckd const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_100_foreign_h2o( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_100_foreign_h2o( pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-SelfContCKDMT252" == name) { // OUTPUT: // pxsec cross section (absorption/volume mixing ratio) of // H2O self continuum according to CKD MT 2.50 [1/m] // INPUT: // parameters[0] strength scaling factor [1] // model allows user defined input parameter set // (Cin) or choice of // pre-defined parameters of specific models (see note below). // f_grid predefined frequency grid [Hz] // abs_p predefined pressure grid [Pa] // abs_t predefined temperature grid [K] // vmr H2O volume mixing ratio profile [1] // // WWW resource: ftp.aer.com/aer_contnm_ckd const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_250_self_h2o( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_250_self_h2o( pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-ForeignContCKDMT252" == name) { // OUTPUT: // pxsec cross section (absorption/volume mixing ratio) of // H2O foreign continuum according to CKD MT 2.50 [1/m] // INPUT: // parameters[0] strength scaling factor [1] // model allows user defined input parameter set // (Cin) or choice of // pre-defined parameters of specific models (see note below). // f_grid predefined frequency grid [Hz] // abs_p predefined pressure grid [Pa] // abs_t predefined temperature grid [K] // vmr H2O volume mixing ratio profile [1] // // WWW resource: ftp.aer.com/aer_contnm_ckd const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_250_foreign_h2o( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_250_foreign_h2o( pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-SelfContCKDMT320" == name) { // OUTPUT: // pxsec cross section (absorption/volume mixing ratio) of // H2O self continuum according to CKD MT 2.50 [1/m] // INPUT: // parameters[0] strength scaling factor [1] // model allows user defined input parameter set // (Cin) or choice of // pre-defined parameters of specific models (see note below). // f_grid predefined frequency grid [Hz] // abs_p predefined pressure grid [Pa] // abs_t predefined temperature grid [K] // vmr H2O volume mixing ratio profile [1] // // WWW resource: ftp.aer.com/aer_contnm_ckd const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_320_self_h2o( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_320_self_h2o( pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-ForeignContCKDMT320" == name) { // OUTPUT: // pxsec cross section (absorption/volume mixing ratio) of // H2O foreign continuum according to CKD MT 2.50 [1/m] // INPUT: // parameters[0] strength scaling factor [1] // model allows user defined input parameter set // (Cin) or choice of // pre-defined parameters of specific models (see note below). // f_grid predefined frequency grid [Hz] // abs_p predefined pressure grid [Pa] // abs_t predefined temperature grid [K] // vmr H2O volume mixing ratio profile [1] // // WWW resource: ftp.aer.com/aer_contnm_ckd const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_320_foreign_h2o( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_320_foreign_h2o( pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-SelfContCKD24" == name) { // OUTPUT: // pxsec cross section (absorption/volume mixing ratio) of // H2O continuum according to CKD2.4 [1/m] // INPUT: // parameters[0] strength scaling factor [1] // model allows user defined input parameter set // (Cin) or choice of // pre-defined parameters of specific models (see note below). // f_grid predefined frequency grid [Hz] // abs_p predefined pressure grid [Pa] // abs_t predefined temperature grid [K] // abs_n2 N2 volume mixing ratio profile [1] // vmr H2O volume mixing ratio profile [1] // // WWW resource: ftp.aer.com/aer_contnm_ckd // abs_n2 needed here. check, whether this is valid. if (abs_n2.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires N2-vmr, but no tag group contains N2!"; throw runtime_error(os.str()); } const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD24_H20(pxsec, 0, parameters[0], model, f_grid, abs_p, abs_t, vmr, abs_n2, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD24_H20( pxsec, 0, 0.000, model, f_grid, abs_p, abs_t, vmr, abs_n2, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-ForeignContCKD24" == name) { // OUTPUT: // pxsec cross section (absorption/volume mixing ratio) of // H2O continuum according to CKD2.4 [1/m] // INPUT: // Cin strength scaling factor [1] // model allows user defined input parameter set // (Cin) or choice of // pre-defined parameters of specific models (see note below). // f_grid predefined frequency grid [Hz] // abs_p predefined pressure grid [Pa] // abs_t predefined temperature grid [K] // vmr H2O volume mixing ratio profile [1] // abs_n2 N2 volume mixing ratio profile [1] // // WWW resource: ftp.aer.com/aer_contnm_ckd if (abs_n2.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires N2-vmr, but no tag group contains N2!"; throw runtime_error(os.str()); } const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD24_H20(pxsec, 1, parameters[0], model, f_grid, abs_p, abs_t, vmr, abs_n2, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD24_H20( pxsec, 1, 0, model, f_grid, abs_p, abs_t, vmr, abs_n2, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ============= H2O full models ====================================================== else if ("H2O-CP98" == name) { // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum scale factor (CC) [1] // parameters[1] : line strength scale factor (CL) [1] // parameters[2] : line broadening scale factor (CW) [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 3; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CP98H2OAbsModel(pxsec, parameters[0], parameters[1], parameters[2], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CP98H2OAbsModel( pxsec, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-MPM87" == name) { // // specific continuum parameters and units: // a) output // pxsec : [1/m], // b) input // parameters[0] : continuum scale factor (CC) [1] // parameters[1] : line strength scale factor (CL) [1] // parameters[2] : line broadening scale factor (CW) [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 3; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM87H2OAbsModel(pxsec, parameters[0], parameters[1], parameters[2], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; MPM87H2OAbsModel( pxsec, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-MPM89" == name) { // // specific continuum parameters and units: // a) output // pxsec : [1/m], // b) input // parameters[0] : continuum scale factor (CC) [1] // parameters[1] : line strength scale factor (CL) [1] // parameters[2] : line broadening scale factor (CW [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 3; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM89H2OAbsModel(pxsec, parameters[0], parameters[1], parameters[2], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; MPM89H2OAbsModel( pxsec, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-MPM93" == name) { // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum scale factor (CC) [1] // parameters[1] : line strength scale factor (CL) [1] // parameters[2] : line broadening scale factor (CW) [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 3; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM93H2OAbsModel(pxsec, parameters[0], parameters[1], parameters[2], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; MPM93H2OAbsModel( pxsec, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-PWR98" == name) { // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum scale factor (CC) [1] // parameters[1] : line strength scale factor (CL) [1] // parameters[2] : line broadening scale factor (CW) [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 3; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; PWR98H2OAbsModel(pxsec, parameters[0], parameters[1], parameters[2], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; PWR98H2OAbsModel( pxsec, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ============= O2 continuum ========================================================= else if ("O2-CIAfunCKDMT100" == name) { // Model reference: // F. Thibault, V. Menoux, R. Le Doucen, L. Rosenman, // J.-M. Hartmann, Ch. Boulet, // "Infrared collision-induced absorption by O2 near 6.4 microns for // atmospheric applications: measurements and emprirical modeling", // Appl. Optics, 35, 5911-5917, (1996). // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum scaling // model : model option ("CKD" or "user") // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_CIAfun_o2( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_CIAfun_o2( pxsec, 0.00e0, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-v0v0CKDMT100" == name) { // Model reference: // B. Mate, C. Lugez, G.T. Fraser, W.J. Lafferty, // "Absolute Intensities for the O2 1.27 micron // continuum absorption", // J. Geophys. Res., 104, 30,585-30,590, 1999. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum scaling // model : model option ("CKD" or "user") // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // abs_n2 : [1] // if (abs_n2.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires N2-vmr, but no tag group contains N2!"; throw runtime_error(os.str()); } const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_v0v0_o2(pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, abs_n2, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_v0v0_o2( pxsec, 0.0e0, model, f_grid, abs_p, abs_t, vmr, abs_n2, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-v1v0CKDMT100" == name) { // Model reference: // Mlawer, Clough, Brown, Stephen, Landry, Goldman, Murcray, // "Observed Atmospheric Collision Induced Absorption in Near Infrared Oxygen Bands", // Journal of Geophysical Research, vol 103, no. D4, pp. 3859-3863, 1998. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum scaling // model : model option ("CKD" or "user") // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_v1v0_o2( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_v1v0_o2(pxsec, 0.0e0, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the ARTS User Guide.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-visCKDMT252" == name) { // Model reference: // O2 continuum formulated by Greenblatt et al. over the spectral region // 8797-29870 cm-1: "Absorption Coefficients of Oxygen Between // 330 and 1140 nm, G.D. Green blatt, J.J. Orlando, J.B. Burkholder, // and A.R. Ravishabkara, J. Geophys. Res., 95, 18577-18582, 1990. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum scaling // model : model option ("CKD" or "user") // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_250_o2_vis( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_250_o2_vis( pxsec, 0.0e0, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-SelfContStandardType" == name) { // MPM93, Rosenkranz 1993 O2 continuum: // see publication side of National Telecommunications and Information Administration // http://www.its.bldrdoc.gov/pub/all_pubs/all_pubs.html // and ftp side for downloading the MPM93 original source code: // ftp://ftp.its.bldrdoc.gov/pub/mpm93/ // // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen, // "Atmospheric Remote Sensing by Microwave Radiometry", // John Wiley & Sons, Inc., 1993, ISBN 0-471-62891-3 // (see also JQSRT, Vol.48, No.5/6 pp.629-643, 1992) // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum coefficient (C) [1/m*1/Hz*1/Pa] // parameters[1] : frequency coefficient (G0) [Hz/Pa] // parameters[3] : line width parameter (G0A) [1] // parameters[3] : line width parameter (G0B) [1] // parameters[2] : temperature exponent (XG0d) [1] // parameters[2] : temperature exponent (x_s) [1] // parameters[5] : continuum coefficient (XG0w) [1] // model : model option ("MPM93", "Rosenkranz", or "user") // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_h2o : [1] // vmr : [1] // if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 6; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; Standard_O2_continuum(pxsec, parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; Standard_O2_continuum(pxsec, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-SelfContMPM93" == name) { // MPM93 O2 continuum: // see publication side of National Telecommunications and Information Administration // http://www.its.bldrdoc.gov/pub/all_pubs/all_pubs.html // and ftp side for downloading the MPM93 original source code: // ftp://ftp.its.bldrdoc.gov/pub/mpm93/ // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum coefficient (C) [1/m / (Hz²*Pa²)] // parameters[1] : temperature exponent (x_s) [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_h2o : [1] // vmr : [1] // if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 4; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM93_O2_continuum(pxsec, parameters[0], parameters[1], parameters[2], parameters[3], model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; MPM93_O2_continuum(pxsec, 0.00, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-SelfContPWR93" == name) { // data information about this continuum: // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen, // "Atmospheric Remote Sensing by Microwave Radiometry", // John Wiley & Sons, Inc., 1993, ISBN 0-471-62891-3 // (see also JQSRT, Vol.48, No.5/6 pp.629-643, 1992) // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum coefficient (C) [K²/(Hz*Pa*m)] // parameters[1] : temperature exponent (x) [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 4; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; Rosenkranz_O2_continuum(pxsec, parameters[0], parameters[1], parameters[2], parameters[3], model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; Rosenkranz_O2_continuum(pxsec, 0.00, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ============= O2 full model ======================================================== else if ("O2-PWR88" == name) { // REFERENCE FOR EQUATIONS AND COEFFICIENTS: // P.W. ROSENKRANZ, CHAP. 2 AND APPENDIX, IN ATMOSPHERIC REMOTE SENSING // BY MICROWAVE RADIOMETRY (M.A. JANSSEN, ED. 1993) // AND // H.J. LIEBE ET AL, JQSRT V.48, PP.629-643 (1992) // (EXCEPT: SUBMILLIMETER LINE INTENSITIES FROM HITRAN92) // AND // P. W. ROSENKRANZ, INTERFERENCE COEFFICIENTS FOR THE // OVERLAPPING OXYGEN LINES IN AIR, JQSRT, 1988, VOLUME 39, 287-297. // // the only difference to the 1993 version is the line mixing // parameter Y, which is taken from the above reference JQSRT, 1988. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum term scale factor, default CC = 1.000 [1] // parameters[1] : line strength scale factor, default CL = 1.000 [1] // parameters[1] : line broadening scale factor, default CW = 1.000 [1] // parameters[1] : line coupling scale factor, default CO = 1.000 [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_h2o, : [1] // vmr : [1] // if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 4; const char *version = "PWR88"; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; PWR93O2AbsModel(pxsec, parameters[0], // continuum term scale factor parameters[1], // line strength scale factor parameters[2], // line broadening scale factor parameters[3], // line coupling scale factor model, version, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; PWR93O2AbsModel(pxsec, 0.00, 0.00, 0.00, 0.00, model, version, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-PWR93" == name) { // REFERENCE FOR EQUATIONS AND COEFFICIENTS: // P.W. ROSENKRANZ, CHAP. 2 AND APPENDIX, IN ATMOSPHERIC REMOTE SENSING // BY MICROWAVE RADIOMETRY (M.A. JANSSEN, ED. 1993) // AND H.J. LIEBE ET AL, JQSRT V.48, PP.629-643 (1992) // (EXCEPT: SUBMILLIMETER LINE INTENSITIES FROM HITRAN92) // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum term scale factor, default CC = 1.000 [1] // parameters[1] : line strength scale factor, default CL = 1.000 [1] // parameters[1] : line broadening scale factor, default CW = 1.000 [1] // parameters[1] : line coupling scale factor, default CO = 1.000 [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_h2o, : [1] // vmr : [1] // if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 4; const char *version = "PWR93"; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; PWR93O2AbsModel(pxsec, parameters[0], // continuum term scale factor parameters[1], // line strength scale factor parameters[2], // line broadening scale factor parameters[3], // line coupling scale factor model, version, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; PWR93O2AbsModel(pxsec, 0.00, 0.00, 0.00, 0.00, model, version, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-PWR98" == name) { // REFERENCES FOR EQUATIONS AND COEFFICIENTS: // P.W. Rosenkranz, CHAP. 2 and appendix, in ATMOSPHERIC REMOTE SENSING // BY MICROWAVE RADIOMETRY (M.A. Janssen, ed., 1993). // H.J. Liebe et al, JQSRT V.48, PP.629-643 (1992). // M.J. Schwartz, Ph.D. thesis, M.I.T. (1997). // SUBMILLIMETER LINE INTENSITIES FROM HITRAN96. // This version differs from Liebe's MPM92 in two significant respects: // 1. It uses the modification of the 1- line width temperature dependence // recommended by Schwartz: (1/T). // 2. It uses the same temperature dependence (X) for submillimeter // line widths as in the 60 GHz band: (1/T)**0.8 // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum term scale factor, default CC = 1.000 [1] // parameters[1] : line strength scale factor, default CL = 1.000 [1] // parameters[1] : line broadening scale factor, default CW = 1.000 [1] // parameters[1] : line coupling scale factor, default CO = 1.000 [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_h2o, : [1] // vmr : [1] // // abs_h2o needed here. check, whether this is valid. if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 4; const char *version = "PWR98"; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; PWR93O2AbsModel(pxsec, parameters[0], // continuum term scale factor parameters[1], // line strength scale factor parameters[2], // line broadening scale factor parameters[3], // line coupling scale factor model, version, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; PWR93O2AbsModel(pxsec, 0.00, 0.00, 0.00, 0.00, model, version, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-MPM93" == name) { // H. J. Liebe and G. A. Hufford and M. G. Cotton, // "Propagation modeling of moist air and suspended water/ice // particles at frequencies below 1000 GHz", // AGARD 52nd Specialists Meeting of the Electromagnetic Wave // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21 // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum term scale factor, default CC = 1.000 [1] // parameters[1] : line strength scale factor, default CL = 1.000 [1] // parameters[2] : line broadening scale factor, default CW = 1.000 [1] // parameters[3] : line coupling scale factor, default CO = 1.000 [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_h2o, : [1] // vmr : [1] // if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 4; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM93O2AbsModel(pxsec, parameters[0], // continuum term scale factor parameters[1], // line strength scale factor parameters[2], // line broadening scale factor parameters[3], // line coupling scale factor model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; MPM93O2AbsModel(pxsec, 0.00, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-TRE05" == name) { // H. J. Liebe and G. A. Hufford and M. G. Cotton, // "Propagation modeling of moist air and suspended water/ice // particles at frequencies below 1000 GHz", // AGARD 52nd Specialists Meeting of the Electromagnetic Wave // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21 // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum term scale factor, default CC = 1.000 [1] // parameters[1] : line strength scale factor, default CL = 1.000 [1] // parameters[2] : line broadening scale factor, default CW = 1.000 [1] // parameters[3] : line coupling scale factor, default CO = 1.000 [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_h2o, : [1] // vmr : [1] // if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 4; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; TRE05O2AbsModel(pxsec, parameters[0], // continuum term scale factor parameters[1], // line strength scale factor parameters[2], // line broadening scale factor parameters[3], // line coupling scale factor model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; TRE05O2AbsModel(pxsec, 0.00, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-MPM92" == name) { // H. J. Liebe, P. W. Rosenkranz and G. A. Hufford, // Atmospheric 60-GHz Oxygen Spectrum: New Laboratory // Measurements and Line Parameters // JQSRT, Vol 48, pp. 629-643, 1992 // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum term scale factor, default CC = 1.000 [1] // parameters[1] : line strength scale factor, default CL = 1.000 [1] // parameters[2] : line broadening scale factor, default CW = 1.000 [1] // parameters[3] : line coupling scale factor, default CO = 1.000 [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_h2o, : [1] // vmr : [1] // if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 4; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM92O2AbsModel(pxsec, parameters[0], // continuum term scale factor parameters[1], // line strength scale factor parameters[2], // line broadening scale factor parameters[3], // line coupling scale factor model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; MPM92O2AbsModel(pxsec, 0.00, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-MPM89" == name) { // H. J. Liebe, // MPM - an atmospheric millimeter-wave propagation model, // Int. J. Infrared and Mill. Waves, Vol 10, pp. 631-650, 1989. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum term scale factor, default CC = 1.000 [1] // parameters[1] : line strength scale factor, default CL = 1.000 [1] // parameters[2] : line broadening scale factor, default CW = 1.000 [1] // parameters[3] : line coupling scale factor, default CO = 1.000 [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_h2o, : [1] // vmr : [1] // if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 4; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM89O2AbsModel(pxsec, parameters[0], // continuum term scale factor parameters[1], // line strength scale factor parameters[2], // line broadening scale factor parameters[3], // line coupling scale factor model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; MPM89O2AbsModel(pxsec, 0.00, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-MPM87" == name) { // H. J. Liebe and D. H. Layton, // Millimeter-wave properties of the atmosphere: // Laboratory studies and propagation modelling, // NITA Report 87-224, // U.S. Dept. of Commerce, National Telecommunications and Information // Administration, Institute for Communication Sciences, rep. 87-224, // 325 Broadway, Boulder, CO 80303-3328 // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum term scale factor, default CC = 1.000 [1] // parameters[1] : line strength scale factor, default CL = 1.000 [1] // parameters[2] : line broadening scale factor, default CW = 1.000 [1] // parameters[3] : line coupling scale factor, default CO = 1.000 [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_h2o, : [1] // vmr : [1] // if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 4; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM87O2AbsModel(pxsec, parameters[0], // continuum term scale factor parameters[1], // line strength scale factor parameters[2], // line broadening scale factor parameters[3], // line coupling scale factor model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; MPM87O2AbsModel(pxsec, 0.00, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-MPM85" == name) { // H. J. Liebe and D. H. Layton, // An updated model for millimeter wave propagation in moist air // Radio Science, vol. 20, pp. 1069-1089, 1985 // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum term scale factor, default CC = 1.000 [1] // parameters[1] : line strength scale factor, default CL = 1.000 [1] // parameters[2] : line broadening scale factor, default CW = 1.000 [1] // parameters[3] : line coupling scale factor, default CO = 1.000 [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_h2o, : [1] // vmr : [1] // if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 4; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM85O2AbsModel(pxsec, parameters[0], // continuum term scale factor parameters[1], // line strength scale factor parameters[2], // line broadening scale factor parameters[3], // line coupling scale factor model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; MPM85O2AbsModel(pxsec, 0.00, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ============= N2 continuum ========================================================= else if ("N2-SelfContMPM93" == name) { // MPM93 N2 continuum: // see publication side of National Telecommunications and Information Administration // http://www.its.bldrdoc.gov/pub/all_pubs/all_pubs.html // and ftp side for downloading the MPM93 original source code: // ftp://ftp.its.bldrdoc.gov/pub/mpm93/ // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : strength parameter [1/m * 1/(Hz²*Pa²)] // parameters[1] : broadening parameter [1] // parameters[2] : temperature exponent [1] // parameters[3] : frequency exponent [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_h2o : [1] // vmr : [1] // if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 4; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM93_N2_continuum(pxsec, parameters[0], parameters[1], parameters[2], parameters[3], model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model == "MPM93Scale") && (parameters.nelem() == 1)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; MPM93_N2_continuum(pxsec, parameters[0], 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "MPM93Scale") && (parameters.nelem() != 1)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires 1 scaling input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (model != "MPM93Scale") && (parameters.nelem() == 0)) // -- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; MPM93_N2_continuum(pxsec, 0.00, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } /* -------------------------------------------------------------------------- else if ( (model != "user") && (parameters.nelem() != 0) ) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } ----------------------------------------------------------------------*/ } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("N2-DryContATM01" == name) { // data information about this continuum: // Pardo et al. model model (IEEE, Trans. Ant. Prop., // Vol 49, No 12, pp. 1683-1694, 2001) // // specific continuum parameters and units: // a) output // pxsec : [1/m], // b) input // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] N2 vmr // abs_h2o : [1] H2O vmr // if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; Pardo_ATM_N2_dry_continuum(pxsec, parameters[0], // coefficient model, f_grid, abs_p, abs_t, vmr, abs_h2o, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; Pardo_ATM_N2_dry_continuum(pxsec, 0.000, // coefficient model, f_grid, abs_p, abs_t, vmr, abs_h2o, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("N2-SelfContPWR93" == name) { // data information about this continuum: // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen, // "Atmospheric Remote Sensing by Microwave Radiometry", // John Wiley & Sons, Inc., 1993, ISBN 0-471-62891-3 // // specific continuum parameters and units: // a) output // pxsec : [1/m], // b) input // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²] // parameters[1] : continuum temperature exponent [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 2; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; Rosenkranz_N2_self_continuum(pxsec, parameters[0], // coefficient parameters[1], // temp. exponent model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; Rosenkranz_N2_self_continuum( pxsec, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("N2-SelfContStandardType" == name) { // data information about this continuum: // A completely general expression for the N2 continuum // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum coefficient (C) [1/m * 1/(Hz*Pa)²] // parameters[1] : frequency exponent (xf) [1] // parameters[2] : temperature exponent (xt) [1] // parameters[3] : pressure exponent (xp) [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] const int Nparam = 4; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; Standard_N2_self_continuum(pxsec, parameters[0], parameters[1], parameters[2], parameters[3], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; Standard_N2_self_continuum(pxsec, 0.000, 0.000, 0.000, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("N2-SelfContBorysow" == name) { // data information about this continuum: // A. Borysow and L. Frommhold, The Astrophysical Journal, // Vol. 311, pp.1043-1057, 1986 const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; BF86_CIA_N2(pxsec, parameters[0], // scaling factor model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; BF86_CIA_N2(pxsec, 0.0, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("N2-CIArotCKDMT100" == name) { // data information about this continuum: // A. Borysow and L. Frommhold, The Astrophysical Journal, // Vol. 311, pp.1043-1057, 1986 const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_CIArot_n2(pxsec, parameters[0], // scaling factor model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_CIArot_n2(pxsec, 0.0, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("N2-CIAfunCKDMT100" == name) { // data information about this continuum: // Lafferty, W.J., A.M. Solodov,A. Weber, W.B. Olson and J._M. Hartmann, // Infrared collision-induced absorption by // N2 near 4.3 microns for atmospheric applications: // Measurements and emprirical modeling, // Appl. Optics, 35, 5911-5917, (1996) const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_CIAfun_n2(pxsec, parameters[0], // scaling factor model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_CIAfun_n2(pxsec, 0.0, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("N2-CIArotCKDMT252" == name) { // data information about this continuum: // A. Borysow and L. Frommhold, The Astrophysical Journal, // Vol. 311, pp.1043-1057, 1986 if (abs_o2.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires O2-vmr, but no tag group contains O2!"; throw runtime_error(os.str()); } if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_250_CIArot_n2(pxsec, parameters[0], // scaling factor model, f_grid, abs_p, abs_t, vmr, abs_h2o, abs_o2, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_250_CIArot_n2(pxsec, 0.0, model, f_grid, abs_p, abs_t, vmr, abs_h2o, abs_o2, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("N2-CIAfunCKDMT252" == name) { // data information about this continuum: // Lafferty, W.J., A.M. Solodov,A. Weber, W.B. Olson and J._M. Hartmann, // Infrared collision-induced absorption by // N2 near 4.3 microns for atmospheric applications: // Measurements and emprirical modeling, // Appl. Optics, 35, 5911-5917, (1996) if (abs_o2.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires O2-vmr, but no tag group contains O2!"; throw runtime_error(os.str()); } if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_250_CIAfun_n2(pxsec, parameters[0], // scaling factor model, f_grid, abs_p, abs_t, vmr, abs_h2o, abs_o2, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_250_CIAfun_n2(pxsec, 0.0, model, f_grid, abs_p, abs_t, vmr, abs_h2o, abs_o2, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ============= CO2 continuum ======================================================== else if ("CO2-CKD241" == name) { // data information about this continuum: // CKDv2.4.1 model at http://www.rtweb.aer.com/continuum_frame.html // This continuum accounts for the far wings of the many COS lines/bands since // the line is used with a cutoff in the line shape with +/- 25 cm^-1. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²] // parameters[1] : continuum temperature exponent [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_241_co2(pxsec, parameters[0], // abs. scaling model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_241_co2(pxsec, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("CO2-CKDMT100" == name) { // data information about this continuum: // CKD model at http://www.rtweb.aer.com/continuum_frame.html // This continuum accounts for the far wings of the many COS lines/bands since // the line is used with a cutoff in the line shape with +/- 25 cm^-1. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²] // parameters[1] : continuum temperature exponent [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_co2(pxsec, parameters[0], // abs. scaling model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_co2(pxsec, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("CO2-CKDMT252" == name) { // data information about this continuum: // CKD model at http://www.rtweb.aer.com/continuum_frame.html // This continuum accounts for the far wings of the many COS lines/bands since // the line is used with a cutoff in the line shape with +/- 25 cm^-1. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²] // parameters[1] : continuum temperature exponent [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_250_co2(pxsec, parameters[0], // abs. scaling model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_250_co2(pxsec, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("CO2-SelfContPWR93" == name) { // data information about this continuum: // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen, // "Atmospheric Remote Sensing by Microwave Radiometry", // John Wiley & Sons, Inc., 1993, ISBN 0-471-62891-3 // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²] // parameters[1] : continuum temperature exponent [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 2; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; Rosenkranz_CO2_self_continuum(pxsec, parameters[0], // coefficient parameters[1], // temp. exponent model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; Rosenkranz_CO2_self_continuum( pxsec, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("CO2-ForeignContPWR93" == name) { // data information about this continuum: // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen, // "Atmospheric Remote Sensing by Microwave Radiometry", // John Wiley & Sons, Inc., 1993, ISBN 0-471-62891-3 // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²] // parameters[1] : continuum temperature exponent [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_n2 : [1] // vmr : [1] // if (abs_n2.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires N2-vmr, but no tag group contains N2!"; throw runtime_error(os.str()); } const int Nparam = 2; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; Rosenkranz_CO2_foreign_continuum(pxsec, parameters[0], parameters[1], model, f_grid, abs_p, abs_t, abs_n2, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; Rosenkranz_CO2_foreign_continuum(pxsec, 0.00, 0.00, model, f_grid, abs_p, abs_t, abs_n2, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("CO2-SelfContHo66" == name) { // data information about this continuum: // Reference: Ho, Kaufman and Thaddeus, "Laboratory measurements of // microwave absorption in models of the atmosphere of Venus", JGR, 1966. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²] // parameters[1] : continuum temperature exponent [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 2; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; Ho66_CO2_self_continuum(pxsec, parameters[0], // coefficient parameters[1], // temp. exponent model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; Ho66_CO2_self_continuum( pxsec, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("CO2-ForeignContHo66" == name) { // data information about this continuum: // Reference: Ho, Kaufman and Thaddeus, "Laboratory measurements of // microwave absorption in models of the atmosphere of Venus", JGR, 1966. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²] // parameters[1] : continuum temperature exponent [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_n2 : [1] // vmr : [1] // if (abs_n2.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires N2-vmr, but no tag group contains N2!"; throw runtime_error(os.str()); } const int Nparam = 2; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; Ho66_CO2_foreign_continuum(pxsec, parameters[0], parameters[1], model, f_grid, abs_p, abs_t, abs_n2, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; Ho66_CO2_foreign_continuum(pxsec, 0.00, 0.00, model, f_grid, abs_p, abs_t, abs_n2, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ============= cloud and fog absorption from MPM93 ================================== else if ("liquidcloud-MPM93" == name) { // Suspended water droplet absorption parameterization from MPM93 model // H. J. Liebe and G. A. Hufford and M. G. Cotton, // "Propagation modeling of moist air and suspended water/ice // particles at frequencies below 1000 GHz", // AGARD 52nd Specialists Meeting of the Electromagnetic Wave // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21 // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : [1] // parameters[1] : [1] // parameters[2] : [1] // model : [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // // liquid water droplet parameters: // suspended water droplet density range: 0-5 g/m³ // // valid atmospheric condition: // temperature : 210 to 373 K // for (Index s = 0; s < f_grid.nelem(); ++s) { if (f_grid[s] > 1e12) { ostringstream os; os << "Liquid cloud absorption model MPM93 only valid at\n" "frequencies up to 1THz. Yours are above."; throw runtime_error(os.str()); } } for (Index s = 0; s < abs_t.nelem(); ++s) { if ((abs_t[s] < 210. || abs_t[s] > 373.) && abs(vmr[s]) > LIQUID_AND_ICE_TREAT_AS_ZERO) { ostringstream os; os << "Liquid cloud absorption model MPM93 only valid at\n" << "temperatures between 210 and 373K.\n" << "LWC values outside this temperature range must be < " << LIQUID_AND_ICE_TREAT_AS_ZERO << " kg/m3.\n" << "Your value at " << abs_t[s] << "K is: " << vmr[s] << " kg/m3."; throw runtime_error(os.str()); } } const int Nparam = 3; if ((model == "user") && (parameters.nelem() == Nparam)) // -------------------- { MPM93WaterDropletAbs(pxsec, parameters[0], // scaling factror parameters[1], // scaling factror parameters[2], // scaling factror model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "MPM93 liquid water cloud absorption model " << name << " requires\n" << Nparam << " input parameter for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "MPM93 liquid water cloud absorption model " << name << " running with \n" << "the parameter for model " << model << ".\n"; MPM93WaterDropletAbs(pxsec, 0.000, // scaling factror 0.000, // scaling factror 0.000, // scaling factror model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: MPM93 liquid water cloud absorption model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 4.\n"; throw runtime_error(os.str()); } } // ============= cloud and fog absorption from ELL07 ================================ else if ("liquidcloud-ELL07" == name) { // Suspended water droplet absorption parameterization from ELL07 model // W. J. Ellison // "Permittivity of Pure Water, at Standard Atmospheric Pressure, over the // Frequency Range 0-25 THz and Temperature Range 0-100C" // J. Phys. Chem. Ref. Data, Vol. 36, No. 1, 2007 // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // model : [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // // liquid water droplet parameters: // suspended water droplet density range: 0-5 g/m³ // // valid atmospheric condition: // temperature : 210 to 373 K // for (Index s = 0; s < f_grid.nelem(); ++s) { if (f_grid[s] > 25e12) { ostringstream os; os << "Liquid cloud absorption model ELL07 only valid at\n" "frequencies up to 25THz. Yours are above."; throw runtime_error(os.str()); } } for (Index s = 0; s < abs_t.nelem(); ++s) { if ((abs_t[s] < 210. || abs_t[s] > 373.) && abs(vmr[s]) > LIQUID_AND_ICE_TREAT_AS_ZERO) { ostringstream os; os << "Liquid cloud absorption model ELL07 only valid at\n" << "temperatures between 210 and 373K.\n" << "LWC values outside this temperature range must be < " << LIQUID_AND_ICE_TREAT_AS_ZERO << " kg/m3.\n" << "Your value at " << abs_t[s] << "K is: " << vmr[s] << " kg/m3."; throw runtime_error(os.str()); } } if ((model == "ELL07") && (parameters.nelem() == 0)) // -------------------- { ELL07WaterDropletAbs(pxsec, model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "ELL07") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: ELL07 liquid water cloud absorption model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 4."; throw runtime_error(os.str()); } else { ostringstream os; os << "ERROR: ELL07 liquid water cloud absorption model " << name << " has no model " << model; throw runtime_error(os.str()); } } // ============= ice particle absorption from MPM93 =================================== else if ("icecloud-MPM93" == name) { // Ice particle absorption parameterization from MPM93 model // H. J. Liebe and G. A. Hufford and M. G. Cotton, // "Propagation modeling of moist air and suspended water/ice // particles at frequencies below 1000 GHz", // AGARD 52nd Specialists Meeting of the Electromagnetic Wave // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21 // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : [1] // parameters[1] : [1] // parameters[2] : [1] // model : [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // // ice crystal parameters: // suspended water droplet density range: 0-10 g/m³ // specific droplet weight value: 1 g/cm³ // // valid atmospheric condition: // temperature : 233 to 323 K // relative humidity: 1 to 100 % // for (Index s = 0; s < f_grid.nelem(); ++s) { if (f_grid[s] > 1e12) { ostringstream os; os << "Ice cloud absorption model MPM93 only valid at\n" "frequencies up to 1THz. Yours are above."; throw runtime_error(os.str()); } } const int Nparam = 3; if ((model == "user") && (parameters.nelem() == Nparam)) // --------------------- { MPM93IceCrystalAbs(pxsec, parameters[0], // scaling factror parameters[1], // scaling factror parameters[2], // scaling factror model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // ---------------- { ostringstream os; os << "MPM93 ice water cloud absorption model " << name << " requires \n" << Nparam << " input parameter for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { MPM93IceCrystalAbs(pxsec, 0.000, // scaling factror 0.000, // scaling factror 0.000, // scaling factror model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: MPM93 ice water cloud absorption model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 4.\n"; throw runtime_error(os.str()); } } // ============= rain extinction from MPM93 =========================================== else if ("rain-MPM93" == name) { // Rain extinction parameterization from MPM93 model, described in // H. J. Liebe, // "MPM - An Atmospheric Millimeter-Wave Propagation Model", // Int. J. Infrared and Millimeter Waves, vol. 10(6), // pp. 631-650, 1989 // and based on // Olsen, R.L., D.V. Rogers, and D. B. Hodge, "The aR^b relation in the // calculation of rain attenuation", IEEE Trans. Antennas Propagat., // vol. AP-26, pp. 318-329, 1978. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : [1] // parameters[1] : [1] // parameters[2] : [1] // model : [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [kg/m2/s] // // rain parameters: // rain rate range: 0-150 mm/h (=0-0.42 kg/m2/s) // // valid atmospheric condition: // temperature : (preferably above 273 K...) // for (Index s = 0; s < f_grid.nelem(); ++s) { if (f_grid[s] > 1e12) { ostringstream os; os << "Rain absorption model MPM93 only valid at\n" "frequencies up to 1THz. Yours is above."; throw runtime_error(os.str()); } } const int Nparam = 3; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "MPM93 rain extinction model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM93RainExt(pxsec, parameters[0], // scaling factor parameters[1], // scaling factor parameters[2], // scaling factor model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "MPM93 rain extinction model " << name << " requires \n" << Nparam << " input parameter for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "MPM93 rain extinction model " << name << " running with \n" << "the parameter for model " << model << ".\n"; MPM93RainExt(pxsec, 0.000, // scaling factor 0.000, // scaling factor 0.000, // scaling factor model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: MPM93 rain extinction model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 4.\n"; throw runtime_error(os.str()); } } else // ----------------------------------------------------------------------- { // none of the continuum or full model tags were selected -> error message. ostringstream os; os << "ERROR: Continuum/ full model tag `" << name << "' not yet implemented in arts!"; throw runtime_error(os.str()); } // We have to divide the result from the internal continuum model by // the number density n to convert it from pseudo cross section to a // true cross section. // Boltzmann constant extern const Numeric BOLTZMAN_CONST; // Loop all pressures: for (Index i = 0; i < abs_p.nelem(); ++i) { const Numeric p_i = abs_p[i]; const Numeric t_i = abs_t[i]; // Calculate total number density from pressure and temperature. // n = n0*T0/p0 * p/T or n = p/kB/t, ideal gas law const Numeric n = p_i / BOLTZMAN_CONST / t_i; // We add to the output variable xsec here, previous content is // not overwritten! pxsec(joker, i) /= n; xsec(joker, i) += pxsec(joker, i); } } // ################################################################################# /** An auxiliary functions that checks if a given continuum model is listed in species_data.cc. This is just in order to verify that this really represents a valid continuum model. The given name should be something like 'H2O-ContStandardSelf'. The function simply checks if there is a species H2O with an isotopologue ContStandardSelf. For user-friendliness, the function also compiles a list of allowed continuum models and gives this as an error message if the model is not found. The function has no return value, since, if the name does not match a valid model an error is thrown anyway. \param name The name of the continuum model to check. \throw runtime_error The model does not exist. \author Stefan Buehler \date 2001-03-12 */ void check_continuum_model(const String &name) { // The species lookup data: using global_data::species_data; // For the list of valid continuum models: ArrayOfString valid_models; bool found = false; // Loop all species: for (Array<SpeciesRecord>::const_iterator i = species_data.begin(); i < species_data.end(); ++i) { String specnam = i->Name(); // Loop all isotopologues: for (Array<IsotopologueRecord>::const_iterator j = i->Isotopologue().begin(); j < i->Isotopologue().end(); ++j) { String isonam = j->Name(); // The specified name consists of a species part and an // isotopologue part, e.g., H2O-ContStandardSelf. We need to // construct a similar String from the species lookup data // by concatenating species name and isotopologue name. String fullnam = specnam + "-" + isonam; // cout << fullnam << "\n"; // See if this is a continuum tag, so that we can add it to // the list: if (j->isContinuum()) { valid_models.push_back(fullnam); } if (name == fullnam) { found = true; } } } // ---------------------------------------------------------------------- // Have we found it? if (!found) { ostringstream os; os << "The String `" << name << "' matches none of the known\n" << "continuum models. Known continuum models are:"; for (ArrayOfString::const_iterator i = valid_models.begin(); i < valid_models.end(); ++i) { os << "\n" << *i; } throw runtime_error(os.str()); } } // // // ################################################################################# // ############################# f2c code implementation ########################### // ################################################################################# // // // ------------------- begin of f2c.h file -------------------------------- // /* f2c.h -- Standard Fortran to C header file */ #ifndef F2C_INCLUDE #define F2C_INCLUDE typedef long int integer; typedef unsigned long int uinteger; typedef char *address; typedef short int shortint; typedef float real_t; typedef double doublereal; typedef struct { real_t r, i; } complex_t; typedef struct { doublereal r, i; } doublecomplex; typedef long int logical; typedef short int shortlogical; typedef char logical1; typedef char integer1; #ifdef INTEGER_STAR_8 /* Adjust for integer*8. */ typedef long long longint; /* system-dependent */ typedef unsigned long long ulongint; /* system-dependent */ #define qbit_clear(a, b) ((a) & ~((ulongint)1 << (b))) #define qbit_set(a, b) ((a) | ((ulongint)1 << (b))) #endif #define TRUE_ (1) #define FALSE_ (0) /* Extern is for use with -E */ #ifndef Extern #define Extern extern #endif /* I/O stuff */ #ifdef f2c_i2 /* for -i2 */ typedef short flag; typedef short ftnlen; typedef short ftnint; #else typedef long int flag; typedef long int ftnlen; typedef long int ftnint; #endif /*external read, write*/ typedef struct { flag cierr; ftnint ciunit; flag ciend; char *cifmt; ftnint cirec; } cilist; /*internal read, write*/ typedef struct { flag icierr; char *iciunit; flag iciend; char *icifmt; ftnint icirlen; ftnint icirnum; } icilist; /*open*/ typedef struct { flag oerr; ftnint ounit; char *ofnm; ftnlen ofnmlen; char *osta; char *oacc; char *ofm; ftnint orl; char *oblnk; } olist; /*close*/ typedef struct { flag cerr; ftnint cunit; char *csta; } cllist; /*rewind, backspace, endfile*/ typedef struct { flag aerr; ftnint aunit; } alist; /* inquire */ typedef struct { flag inerr; ftnint inunit; char *infile; ftnlen infilen; ftnint *inex; /*parameters in standard's order*/ ftnint *inopen; ftnint *innum; ftnint *innamed; char *inname; ftnlen innamlen; char *inacc; ftnlen inacclen; char *inseq; ftnlen inseqlen; char *indir; ftnlen indirlen; char *infmt; ftnlen infmtlen; char *inform; ftnint informlen; char *inunf; ftnlen inunflen; ftnint *inrecl; ftnint *innrec; char *inblank; ftnlen inblanklen; } inlist; #define VOID void union Multitype { /* for multiple entry points */ integer1 g; shortint h; integer i; /* longint j; */ real_t r; doublereal d; complex_t c; doublecomplex z; }; typedef union Multitype Multitype; /*typedef long int Long;*/ /* No longer used; formerly in Namelist */ struct Vardesc { /* for Namelist */ char *name; char *addr; ftnlen *dims; int type; }; typedef struct Vardesc Vardesc; struct Namelist { char *name; Vardesc **vars; int nvars; }; typedef struct Namelist Namelist; #define abs(x) ((x) >= 0 ? (x) : -(x)) #define dabs(x) (doublereal) abs(x) #define min(a, b) ((a) <= (b) ? (a) : (b)) #define max(a, b) ((a) >= (b) ? (a) : (b)) #define dmin(a, b) (doublereal) min(a, b) #define dmax(a, b) (doublereal) max(a, b) #define bit_test(a, b) ((a) >> (b)&1) #define bit_clear(a, b) ((a) & ~((uinteger)1 << (b))) #define bit_set(a, b) ((a) | ((uinteger)1 << (b))) /* procedure parameter types for -A and -C++ */ #define F2C_proc_par_types 1 #ifdef __cplusplus typedef int /* Unknown procedure type */ (*U_fp)(...); typedef shortint (*J_fp)(...); typedef integer (*I_fp)(...); typedef real_t (*R_fp)(...); typedef doublereal (*D_fp)(...), (*E_fp)(...); typedef /* Complex */ VOID (*C_fp)(...); typedef /* Double Complex */ VOID (*Z_fp)(...); typedef logical (*L_fp)(...); typedef shortlogical (*K_fp)(...); typedef /* Character */ VOID (*H_fp)(...); typedef /* Subroutine */ int (*S_fp)(...); #else typedef int /* Unknown procedure type */ (*U_fp)(); typedef shortint (*J_fp)(); typedef integer (*I_fp)(); typedef real_t (*R_fp)(); typedef doublereal (*D_fp)(), (*E_fp)(); typedef /* Complex */ VOID (*C_fp)(); typedef /* Double Complex */ VOID (*Z_fp)(); typedef logical (*L_fp)(); typedef shortlogical (*K_fp)(); typedef /* Character */ VOID (*H_fp)(); typedef /* Subroutine */ int (*S_fp)(); #endif /* E_fp is for real functions when -R is not specified */ typedef VOID C_f; /* complex function */ typedef VOID H_f; /* character function */ typedef VOID Z_f; /* double complex function */ typedef doublereal E_f; /* real function with -R not specified */ /* undef any lower-case symbols that your C compiler predefines, e.g.: */ #ifndef Skip_f2c_Undefs #undef cray #undef gcos #undef mc68010 #undef mc68020 #undef mips #undef pdp11 #undef sgi #undef sparc #undef sun #undef sun2 #undef sun3 #undef sun4 #undef u370 #undef u3b #undef u3b2 #undef u3b5 #undef unix #undef vax #endif #endif // ------------------- end of f2c.h file -------------------------------- // ------------------ begin of Borysow N2N2 F77 code -------------------- /* n2n2tks.f -- translated by f2c (version 20010821). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ /* Common Block Declarations */ struct s_blockin_ { double temp, fnumin, fnumax, dnu; } blockin_; #define blockin_1 blockin_ struct s_app3a_ { double slit, dx, wnrmax3; } app3a_; #define app3a_1 app3a_ struct s_app3b_ { int nsri, ns, nsriup; } app3b_; #define app3b_1 app3b_ struct s_rsilo_ { double rsilo[201]; } rsilo_; #define rsilo_1 rsilo_ struct s_bou43_ { int initb; } bou43_; #define bou43_1 bou43_ union u_bba_ { struct s_m_1 { double omeg[201], rsi[201], rsigg[201], alfa; } m_1; struct s_m_2 { double omeg[201], rsi[201], rsigg[201], beta; } m_2; } bba_; #define bba_1 (bba_.m_1) #define bba_2 (bba_.m_2) struct s_bbc_ { int nsol; } bbc_; #define bbc_1 bbc_ struct s_bf_ { double g0bf, delbf, om0; } bf_; #define bf_1 bf_ struct like_1_ { int like; char lgas[5]; }; #define like_1 (*(struct like_1_ *)&like_) struct s_k1k0_ { int ik1k0; } k1k0_; #define k1k0_1 k1k0_ struct s_bbb_ { int ibound; } bbb_; #define bbb_1 bbb_ struct energ_1_ { double eb[246] /* was [41][6] */; int niv[6]; }; #define energ_1 (*(struct energ_1_ *)&energ_) struct s_dimer_ { int nlines; } dimer_; #define dimer_1 dimer_ struct n2part_1_ { double q1, wn2[2], b01, d01; int jrange2; }; struct n2part_2_ { double q, wn2[2], b0, d0; int jrange1; }; #define n2part_1 (*(struct n2part_1_ *)&n2part_) #define n2part_2 (*(struct n2part_2_ *)&n2part_) union u_bl3_ { struct s_m_1 { double rsi[401]; } m_1; struct s_m_2 { double rsibb[401]; } m_2; } bl3_; #define bl3_1 (bl3_.m_1) #define bl3_2 (bl3_.m_2) union u_bbbb_ { struct s_m_1 { int idelv, iv, ivp, idell, il, ilp; } m_1; struct s_m_2 { int ldelvi, ivi, ivip, ldelel, ll, llp; } m_2; } bbbb_; #define bbbb_1 (bbbb_.m_1) #define bbbb_2 (bbbb_.m_2) /* Initialized data */ struct s_energe_ { double e_1[246]; int e_2[6]; } energ_ = {{-54.99996, -54.86228, -54.58697, -54.17413, -53.62391, -52.93648, -52.11211, -51.15108, -50.05374, -48.82049, -47.45179, -45.94815, -44.31014, -42.53841, -40.63365, -38.59665, -36.42824, -34.12937, -31.70105, -29.14439, -26.46061, -23.65103, -20.71709, -17.66041, -14.48271, -11.18593, -7.77221, -4.24393, -.60374, 3.14531, 6.99978, 10.95566, 15.00818, 19.15136, 23.37787, 27.67681, 32.03237, 36.42278, 40.83668, 45.29436, 49.79246, -31.89437, -31.77215, -31.52779, -31.16143, -30.67334, -30.06382, -29.33328, -28.48222, -27.51123, -26.42099, -25.21229, -23.88603, -22.44322, -20.88502, -19.21272, -17.42777, -15.53182, -13.52669, -11.41446, -9.1975, -6.87848, -4.46049, -1.94714, .65736, 3.34788, 6.11816, 8.95978, 11.8613, 14.80383, 17.75924, 20.71774, 23.71589, 0., 0., 0., 0., 0., 0., 0., 0., 0., -16.05019, -15.9464, -15.73896, -15.42815, -15.0144, -14.4983, -13.88057, -13.16213, -12.34407, -11.42771, -10.41455, -9.30639, -8.10531, -6.81376, -5.43459, -3.97121, -2.42768, -.80899, .87859, 2.62689, 4.42334, 6.24733, 8.06983, 9.90464, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -6.49343, -6.41131, -6.24732, -6.00202, -5.67623, -5.27111, -4.78813, -4.22919, -3.59665, -2.89345, -2.12325, -1.29074, -.40202, .5345, 1.50455, 2.48212, 3.46665, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -1.76583, -1.70887, -1.59552, -1.427, -1.20523, -.93302, -.61434, -.25504, .13641, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -.17133, -.14341, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}, {41, 32, 24, 17, 9, 2}}; struct s_n2part_ { double fill_1[1]; double e_2[4]; int fill_3[1]; } n2part_ = {{0}, {2., 1., 1.98957, 5.8e-6}, {0}}; struct s_like_ { int fill_1[1]; char e_2[5]; } like_ = {{0}, "N2N2"}; /* Table of constant values */ // FIXME static integer c__9 = 9; // FIXME static integer c__1 = 1; // FIXME static integer c__5 = 5; static int cs__1 = 1; static int cs__0 = 0; static double c_b24 = 2.9723; static double c_b25 = -.99569; static double c_b26 = .09464; static double c_b27 = 1.2962e-12; static double c_b28 = -.13048; static double c_b29 = -.03128; static double c_b30 = 3.7969e-14; static double c_b31 = 1.03681; static double c_b32 = -.14336; static int cs__2 = 2; static int cs__3 = 3; static double c_b43 = .180926; static double c_b44 = -1.69153; static double c_b45 = .18605; static double c_b46 = .3; static double c_b47 = 0.; static double c_b49 = 6.6017e-16; static double c_b50 = 2.59982; static double c_b51 = -.31831; static double c_b52 = 1.2481e-12; static double c_b53 = -.57028; static double c_b54 = .05983; static double c_b55 = 5.2681e-13; static double c_b56 = -.24719; static double c_b57 = .00519; static double c_b58 = 2.7518e15; static double c_b59 = -25.38969; static double c_b60 = 2.46542; static int cs__4 = 4; static int cs__5 = 5; // FIXME static integer c__2 = 2; static double c_b78 = .0825299; static double c_b79 = -1.25562; static double c_b80 = .12981; static double c_b84 = 3.6611e-15; static double c_b85 = 1.47688; static double c_b86 = -.16537; static double c_b87 = 6.1264e-10; static double c_b88 = -2.25011; static double c_b89 = .15289; static double c_b90 = 7.982e-10; static double c_b91 = -2.76152; static double c_b92 = .21847; static double c_b93 = 5.2868e-22; static double c_b94 = 7.66253; static double c_b95 = -.77527; static double c_b112 = 119.261; static double c_b113 = -3.78587; static double c_b114 = .34024; static double c_b115 = 9.3777e-12; static double c_b116 = -.66548; static double c_b117 = .0033; static double c_b118 = 3.0395e-13; static double c_b119 = .24728; static double c_b120 = -.06607; static double c_b183 = 1e-6; static double c_b186 = 1.5; #define temp (blockin_1.temp) #define fnumin (blockin_1.fnumin) #define fnumax (blockin_1.fnumax) #define dnu (blockin_1.dnu) #define slit (app3a_1.slit) #define dx (app3a_1.dx) #define rsilo (rsilo_1.rsilo) #define omeg (bba_1.omeg) #define rsi (bba_1.rsi) #define rsigg (bba_1.rsigg) #define nsol (bbc_1.nsol) #define like (like_1.like) #define ik1k0 (k1k0_1.ik1k0) #define ibound (bbb_1.ibound) /* TKS ****** SUBROUTINE N2N2TKS(T, F) ***************************************/ Numeric n2n2tks_(double t, double f) { /* System generated locals */ int s__1; double ret_val; /* Local variables */ //double hexa[10], quad[10]; double freq[10], e; int i__; double s, x, t1, t2, t3, t4; int ij, nf, jj; double rslow1, si; int nr; double ss[1], tt[2]; extern /* Subroutine */ int bound32_(double *, double *, int *), bound54_(double *, double *, int *); //double tksabs[5]; extern /* Subroutine */ int spline_(int *, int *, int *, double *, double *, double *, double *, double *, double *, int *, double *); double abscoef[10]; //double dtrans[10]; extern /* Subroutine */ int addspec_(double *, double *, double *, double *, double *, double *, double *, int *, double *, double *, int *, int *, int *, int *, int *, int *); double eps, alfatot[10]; extern /* Subroutine */ int partsum_(double *); /* ========================================= */ /* Copyright (C) Aleksandra Borysow, 1987) */ /* ==================================================================== */ /* PROGRAM PREPARED BY ALEKSANDRA BORYSOW (APRIL'1987) */ /* (UNIVERSITY OF TEXAS AT AUSTIN, PHYSICS DEPARTMENT) */ /* ORIGINAL VERSION: WRITTEN ON CYBER */ /* PROGRAM GENERATES N2-N2 COLLISION-INDUCED SPECTRA AT */ /* TEMPERATURES BETWEEN 50 TO 300 K. */ /* CIA SPECTRA MODELED AFTER PAPER (*) */ /* ALEKSANDRA BORYSOW AND LOTHAR FROMMHOLD, */ /* ASTROPHYSICAL JOURNAL, VOL. 311, PAGES 1043-1057, (1986) */ /* REVISED BY GLENN ORTON (1989) - TO WORK ON SUN WORKSTATIONS */ /* AND ON THE VAX MACHINES (FORTRAN-77) */ /* PASSES STANDARD TEST ON SUN, AT 200K (JULY 1992) */ /* ==================================================================== */ /* ALSO IN REVISION: DOUBLE PRECISION FOR ALL F.P. VARIABLES */ /* ==================================================================== */ /* HISTORY: */ /* 2001-02-28 THOMAS KUHN: */ /* CHANGE OF LINES */ /* RSILO(I)=DLOG(RSI(I)*1.E80) */ /* TO */ /* RSILO(I)=(DLOG(RSI(I))+80.0D0*DLOG(10.0D0)) */ /* BECAUSE OF OVERFLOW PROBLEMS. */ /* COSMETICS FOR THE CODE TO BE FASTER READABLE. */ /* CHANGE OF OUTPUT FILE NAME. */ /* CHANGE OF OUTPUT FILE CONTENT */ /* ==================================================================== */ /* TKS* IMPLICIT REAL*8 (A-H,O-Z) */ /* TKS INPUT/OUTPUT VARIABLES */ /* REAL T, F */ //ret_val = 0.; /* TEMP = TEMPERATURE IN KELVIN, SHOULD BE BETWEEN 50. AND 300. */ /* FNUMIN = LOWEST FREQUENCY IN CM-1, FOR LISTING OF ALPHA(FNU) */ /* FNUMAX = HIGHEST FREQUENCY IN CM-1, FOR LISTING OF ALPHA(FNU) */ /* LINE SHAPE MODELLING WILL BE MOST ACCURATE WITHIN RANGE OF */ /* R-T SPECTRAL INTENSITIES AS 1:100. */ /* DNU = FREQUENCY INCREMENT IN CM-1. DNU SHOULD BE CHOSEN SO */ /* THAT NOT MORE THAN 10 STEPS ARE NEEDED TO GO FROM */ /* FNUMIN TO FNUMAX (ELSE ARRAY DIMENSIONS OF FREQ,ABSCOEF */ /* MUST BE ADJUSTED IN ADDEM). */ /* USER: */ /* ----- */ /* EDIT ONLY HERE: TEMP (K), MIN. FREQ. (CM^-1)= FNUMIN, */ /* MAX. FREQ. = FNUMAX, STEP = DNU, SLITWIDTH (CM^-1)=SLIT */ /* (SLIT=4.3 IS EQUIVALENT TO THAT OF VOYAGER SPECTRA, ONLY BOUND BOUND */ /* SPECTRA ARE CONVOLUTED WITH THIS SLITWIDTH, THE FREE FREE SPECTRA */ /* ARE FAR TOO BROAD FOR THE SLITWIDTH FUNCTION TO MATTER, */ /* LEAVE LIKE = 1 (FOR LIKE PAIRS, AS N2-N2) */ /* THE PROGRAM WILL ASSUME EQUILIBRIUM N2, */ /* ALLOWED TEMPERATURE RANGE: 50-300K (DO NOT EXTEND IT BEYOND THESE LIMITS!) */ /* IF QUESTIONS: CONTACT ABORYSOW@NBI.DK */ /* TKS* NF=INT((FNUMAX-FNUMIN)/DNU+0.5)+1 */ /* TKS* IF (NF.GT.10) NF=10 */ /* TKS* FNUMAX=FNUMIN+FLOAT(NF-1)*DNU */ /* TKS INPUT TEMPERATURE (K) CHECK OF RANGE */ if (t < 50. || t > 300.) { ostringstream os; os << "out of T range ( 50<T<300)! return without calc.!" << "\n"; throw runtime_error(os.str()); goto L999; } temp = t; /* *********************** INPUT DATA FROM USER *********************** */ /* FNUMIN = MINIMUM FREQENCY [CM^-1] */ fnumin = f / 29979245800.; /* FNUMAX = MAXIMUM FREQENCY [CM^-1] */ fnumax = fnumin; /* ONLY ONE FREQUENCY PER CALL */ nf = 1; /* DEFAULT VALUE OF FREQUENCY STEP [CM^-1] */ dnu = 10.; /* DEFAULT VALUE */ like = 1; /* SLIT = SLITWIDTH [CM^-1] */ /* SLIT=4.3 IS EQUIVALENT TO THAT OF VOYAGER SPECTRA, ONLY BOUND BOUND */ /* SPECTRA ARE CONVOLUTED WITH THIS SLITWIDTH, THE FREE FREE SPECTRA */ /* ARE FAR TOO BROAD FOR THE SLITWIDTH FUNCTION TO MATTER. */ slit = 4.3; /* ******************************************************************** */ /* TKS* WRITE (6,14) LGAS,TEMP,FNUMIN,FNUMAX,DNU,NF-1 */ /* TKS*14 FORMAT(' ABSORPTION SPECTRA OF ',A5,' AT',F8.1,' K'/ */ /* TKS* $ 1X,43(1H=),/ */ /* TKS* 1' MIN.FREQ.=',F8.1,' CM-1',10X,'MAX.FREQ.=',F8.1,' CM-1',10X, */ /* TKS* 2'FREQ.INCREMENT=',F8.2,' CM-1',5X,'IN',I5,' STEPS'//) */ partsum_(&temp); /* THE N2-N2 SPECTRA FOR 50-300K */ /* ================================ */ x = log(temp); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { /* FREQ(I)=FNUMIN+FLOAT(I-1)*DNU */ freq[i__ - 1] = fnumin; alfatot[i__ - 1] = 0.; /* L10: */ abscoef[i__ - 1] = 0.; } /* ==================================================================== */ jj = 1; L442: /* L1023: */ ++jj; if (jj == 42) { goto L444; } goto L442; /* EB(JJ,IV) JJ-ROTATIONAL LEVEL "L", IV- VIBRATIONAL LEVEL "V"; */ L444: /* ==================================================================== */ /* QUADRUPOLAR INDUCTION: (50-300K) LAMBDA1,LAMBDA2,LAMBDA,L=2023&0223 */ /* ------------------------------------------------------------------- */ eps = 1e-5; tt[0] = 10.; bound32_(&temp, rsi, &nsol); ij = 0; rslow1 = 0.; s__1 = nsol; for (i__ = 1; i__ <= s__1; ++i__) { ++ij; /* MOD CAN BE ONLY 0 OR 1 OR 2 */ if (ij % 3 == 0) { rslow1 = 1.5e-60; } if (ij % 3 == 1) { rslow1 = 1.7e-60; } if (ij % 3 == 2) { rslow1 = 1.6e-60; } if (rsi[i__ - 1] < 1e-60) { rsi[i__ - 1] = rslow1; } /* TKS* RSILO(I)=DLOG(RSI(I)*1.D80) */ rsilo[i__ - 1] = log(rsi[i__ - 1]) + log(10.) * 80.; omeg[i__ - 1] = (double)(i__ - 1) * dx; /* L88: */ } /* L9991: */ spline_(&nsol, &cs__1, &cs__0, &eps, omeg, rsilo, tt, ss, &si, &nr, rsigg); ik1k0 = 1; ibound = 1; /* B-C LINESHAPE HERE */ /* THESE VALUES (S,T1,T2) REPLACE VALUES GIVEN IN PAPER (*): */ /* PUBLISHED IN AN ERRATUM, ASTROPHYSICAL JOURNAL, VOL.320, P.437 */ /* (1987) */ s = c_b24 * exp((c_b26 * x + c_b25) * x); t1 = c_b27 * exp((c_b29 * x + c_b28) * x); t2 = c_b30 * exp((c_b32 * x + c_b31) * x); e = 0.; t3 = 0.; t4 = 0.; addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &like, &cs__2, &cs__0, &cs__2, &cs__3); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { //quad[i__ - 1] = abscoef[i__ - 1]; /* L20: */ alfatot[i__ - 1] = abscoef[i__ - 1] + alfatot[i__ - 1]; } /* ==================================================================== */ /* HEXADECAPOLE COMPONENTS: LAMBDA1,LAMBDA2,LAMBDA,L=4045&0445 */ /* ----------------------------------------------------------- */ bound54_(&temp, rsi, &nsol); ij = 0; s__1 = nsol; for (i__ = 1; i__ <= s__1; ++i__) { ++ij; /* MOD CAN BE ONLY 0 OR 1 OR 2 */ if (ij % 3 == 0) { rslow1 = 1.5e-60; } if (ij % 3 == 1) { rslow1 = 1.7e-60; } if (ij % 3 == 2) { rslow1 = 1.6e-60; } if (rsi[i__ - 1] < 1e-60) { rsi[i__ - 1] = rslow1; } /* TKS RSILO(I)=DLOG(RSI(I)*1.E80) */ rsilo[i__ - 1] = log(rsi[i__ - 1]) + log(10.) * 80.; /* L111: */ omeg[i__ - 1] = (double)(i__ - 1) * dx; } spline_(&nsol, &cs__1, &cs__0, &eps, omeg, rsilo, tt, ss, &si, &nr, rsigg); /* --------------------------- */ /* TEMPERATURES 50-140K */ /* --------------------------- */ if (temp >= 140.) { goto L333; } s = c_b43 * exp((c_b45 * x + c_b44) * x); e = c_b46 * exp((c_b47 * x + c_b47) * x); t1 = c_b49 * exp((c_b51 * x + c_b50) * x); t2 = c_b52 * exp((c_b54 * x + c_b53) * x); t3 = c_b55 * exp((c_b57 * x + c_b56) * x); t4 = c_b58 * exp((c_b60 * x + c_b59) * x); ik1k0 = 0; ibound = 1; addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &like, &cs__4, &cs__0, &cs__4, &cs__5); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { //hexa[i__ - 1] = abscoef[i__ - 1]; /* s_wsle(&io___25); do_lio(&c__9, &c__1, " T=50-140K: HEXA(", (ftnlen)17); do_lio(&c__2, &c__1, (char *)&i__, (ftnlen)sizeof(int)); do_lio(&c__9, &c__1, ") =", (ftnlen)3); do_lio(&c__5, &c__1, (char *)&abscoef[i__ - 1], (ftnlen)sizeof( double)); e_wsle(); */ /* L50: */ alfatot[i__ - 1] += abscoef[i__ - 1]; } goto L334; /* --------------------------- */ /* TEMPERATURES 140-300K */ /* --------------------------- */ L333: ik1k0 = 0; ibound = 1; s = c_b78 * exp((c_b80 * x + c_b79) * x); e = c_b46 * exp((c_b47 * x + c_b47) * x); t1 = c_b84 * exp((c_b86 * x + c_b85) * x); t2 = c_b87 * exp((c_b89 * x + c_b88) * x); t3 = c_b90 * exp((c_b92 * x + c_b91) * x); t4 = c_b93 * exp((c_b95 * x + c_b94) * x); addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &like, &cs__4, &cs__0, &cs__4, &cs__5); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { //hexa[i__ - 1] = abscoef[i__ - 1]; /* s_wsle(&io___26); do_lio(&c__9, &c__1, " T=140-300K: HEXA(", (ftnlen)18); do_lio(&c__2, &c__1, (char *)&i__, (ftnlen)sizeof(int)); do_lio(&c__9, &c__1, ") =", (ftnlen)3); do_lio(&c__5, &c__1, (char *)&abscoef[i__ - 1], (ftnlen)sizeof( double)); e_wsle(); */ /* L550: */ alfatot[i__ - 1] += abscoef[i__ - 1]; } /* ==================================================================== */ /* DOUBLE TRANSITIONS: LAMBDA1,LAMBDA2,LAMBDA,L=2,2,3,3 */ /* ---------------------------------------------------- */ /* --------------------------- */ /* TEMPERATURES 50-300K */ /* --------------------------- */ L334: ik1k0 = 1; ibound = 0; /* X S=Y(X,1.19261D-58, -3.78587,0.34024) */ s = c_b112 * exp((c_b114 * x + c_b113) * x); t1 = c_b115 * exp((c_b117 * x + c_b116) * x); t2 = c_b118 * exp((c_b120 * x + c_b119) * x); t3 = 0.; t4 = 0.; addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &like, &cs__2, &cs__2, &cs__3, &cs__3); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { //dtrans[i__ - 1] = abscoef[i__ - 1]; /* L650: */ alfatot[i__ - 1] += abscoef[i__ - 1]; } /* ==================================================================== */ /* ANISOTROPIC OVERLAP NEGLECTED (LAMBDA1,LAMBDA2,LAMBDA,L=0212) */ /* SINCE THIS TERM IS EXTREMELY SMALL */ /* ==================================================================== */ /* TKS* PRINT 154, FREQ(1),FREQ(NF),FREQ(2)-FREQ(1),TEMP */ /* TKS* PRINT 156, (ALFATOT(I),I=1,NF) */ /* TKS*154 FORMAT(///' ABSORPTION COEFFICIENT ALPHA(FNU), FROM ',F5.1, */ /* TKS* $' CM-1 TO',F7.1,' CM-1, AT',F6.2,' CM-1 INCREMENTS, AT T=', */ /* TKS* $F7.2,' K, IN UNITS OF CM-1 AMAGAT-2'/) */ /* TKS*156 FORMAT(' ',10D13.5) */ /* TKS* OPEN(UNIT=10, FILE='OUT', STATUS='UNKNOWN') */ /* TKS* WRITE(10, 2929) (FREQ(I), ALFATOT(I), I=1, NF) */ /* TKS*C WRITE(10, 2929) (FREQ(I), QUAD(I), HEXA(I) ALFATOT(I), I=1, NF) */ /* TKS*2929 FORMAT(F10.3, E12.4) */ /* TKS* STOP */ /* TKS FILL OUTPUT VARIABLE */ // tksabs[0] = quad[0]; // tksabs[1] = hexa[0]; // tksabs[2] = dtrans[0]; // tksabs[3] = alfatot[0]; ret_val = alfatot[0]; /* TKS print*,'QUAD(1),HEXA(1),DTRANS(1)=',QUAD(1),HEXA(1),DTRANS(1) */ L999: return ret_val; } /* n2n2tks_ */ #undef temp #undef fnumin #undef fnumax #undef dnu #undef slit #undef dx #undef rsilo #undef omeg #undef rsi #undef rsigg #undef nsol #undef like #undef ik1k0 #undef ibound #define wnrmax3 (app3a_1.wnrmax3) #define rsilo (rsilo_1.rsilo) #define omeg (bba_2.omeg) #define rsigg (bba_2.rsigg) #define beta (bba_2.beta) #define nsol (bbc_1.nsol) #define ibound (bbb_1.ibound) #define q1 (n2part_1.q1) #define wn2 (n2part_1.wn2) #define b01 (n2part_1.b01) #define d01 (n2part_1.d01) #define jrange2 (n2part_1.jrange2) /* ########################################################################## */ /* Subroutine */ int addspec_(double *g0, double *ep, double *tau1, double *tau2, double *tau5, double *tau6, double *temp, int *nf, double *freq, double *abscoef, int * /* mp */, int *like, int *lambda1, int *lambda2, int *lambda, int * /* lvalue */) { /* Initialized data */ static double closchm = 2.68675484e19; static double boltzwn = .6950304; static double hbar = 1.054588757e-27; static double pi = 3.1415926535898; static double clight = 2.997925e10; /* Format strings */ /* static char fmt_20[] = "(/\002 LAMBDA1,LAMBDA2, LAMBDA,LVALUE=\002,2i3,2" "x,2i3,\002 COMPONENT.\002/15x,\002LINE SHAPE PARAMETERS:\002,6d1" "2.3,5x,\002G(0)=\002,d12.3/)"; */ /* System generated locals */ int s__1, s__2, s__3, s__4, s__5, s__6; double d__1, d__2; /* Builtin functions */ /* integer s_wsfe(cilist *), do_fio(integer *, char *, ftnlen), e_wsfe(void), s_wsle(cilist *), do_lio(integer *, integer *, char *, ftnlen), e_wsle(void); */ /* Local variables */ int list, jsum = 0; extern double bgama_( double *, double *, double *, double *, double *, double *, double *); int i__, j; double calib, p; int i1, j1, i2, j2; double p1, p2, omega1, omega2; int ip, jp, iq; double twopic; int jplusl, ip1, jp1, ip2, jp2; double fac, cgs, xbg, wkf, frq, wki; extern double specfct_( double *, double *, double *, double *, int *, d
15843  const Verbosity &) {
15844  // --------- STANDARD MODEL PARAMETERS ------------------------------------------------
15845  // standard values for the MPM93 model (J. Liebe and G. A. Hufford and M. G. Cotton,
15846  // "Propagation modeling of moist air and suspended water/ice
15847  // particles at frequencies below 1000 GHz",
15848  // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
15849  // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21)
15850  const Numeric CC_MPM93 = 1.00000;
15851  const Numeric CA_MPM93 = 1.00000;
15852  const Numeric CB_MPM93 = 1.00000;
15853  // ------------------------------------------------------------------------------------
15854 
15855  // select the parameter set (!!model dominates values!!):
15856  Numeric CC, CA, CB;
15857  if (model == "MPM93") {
15858  CC = CC_MPM93;
15859  CA = CA_MPM93;
15860  CB = CB_MPM93;
15861  } else if (model == "user") {
15862  CC = CCin;
15863  CA = CAin;
15864  CB = CBin;
15865  } else {
15866  ostringstream os;
15867  os << "icecloud-MPM93: ERROR! Wrong model values given.\n"
15868  << "Valid models are: \"MPM93\" and \"user\"";
15869  throw runtime_error(os.str());
15870  }
15871 
15872  const Numeric m =
15873  0.916e3; // specific weight of ice particles, fixed value: 0.916e3 kg/m³ const Numeric low_lim_den = -LIQUID_AND_ICE_TREAT_AS_ZERO; // lower limit of suspended droplet particle density vector [kg/m3] const Numeric high_lim_den = 1.00e-3; // lower limit of suspended ice particle density vector [kg/m³] const Index n_p = abs_p.nelem(); // Number of pressure levels const Index n_f = f_grid.nelem(); // Number of frequencies // Check that dimensions of abs_p, abs_t, and vmr agree: assert(n_p == abs_t.nelem()); assert(n_p == vmr.nelem()); // Check that dimensions of pxsec are consistent with n_f // and n_p. It should be [n_f,n_p]: assert(n_f == pxsec.nrows()); assert(n_p == pxsec.ncols()); // Loop pressure/temperature: for (Index i = 0; i < n_p; ++i) { // Check limits of suspended water droplet density ("vmr") [kg/m³] if ((vmr[i] < low_lim_den) || (vmr[i] > high_lim_den)) { ostringstream os; os << "ERROR in MPM93IceCrystalAbs:\n" << "Valid range is " << low_lim_den << "-" << low_lim_den << "kg/m3,\n" << "but found a value = " << vmr[i]; throw runtime_error(os.str()); } else if (vmr[i] < LIQUID_AND_ICE_TREAT_AS_ZERO) { pxsec(joker, i) = 0; } else { // relative inverse temperature [1] Numeric theta = 300.000 / abs_t[i]; // inverse frequency T-dependency function [Hz] Numeric ai = CA * (62.000 * theta - 11.600) * exp(-22.100 * (theta - 1.000)) * 1.000e-4; // linear frequency T-dependency function [1/Hz] Numeric bi = CB * 0.542e-6 * (-24.17 + (116.79 / theta) + pow((theta / (theta - (Numeric)0.9927)), (Numeric)2.)); // Loop frequency: for (Index s = 0; s < n_f; ++s) { // real part of the complex permittivity of ice Numeric Reepsilon = 3.15; // imaginary part of the complex permittivity of water Numeric Imepsilon = ((ai / (f_grid[s] * Hz_to_GHz)) + (bi * (f_grid[s] * Hz_to_GHz))); // the imaginary part of the complex refractivity of suspended ice particles. // In MPM93 w is in g/m³ and m is in g/cm³. Because of the units used in arts, // a factor of 1.000e6 must be multiplied with the ratio (w/m): // MPM93: (w/m)_MPM93 in (g/m³)/(g/cm³) // arts: (w/m)_arts in (kg/m³)/(kg/m³) // =====> (w/m)_MPM93 = 1.0e6 * (w/m)_arts // the factor of 1.0e6 is included below in pxsec calculation. Numeric ImNw = 1.500 / m * (3.000 * Imepsilon / (pow((Reepsilon + (Numeric)2.000), (Numeric)2.) + pow(Imepsilon, (Numeric)2.))); // ice particle absorption cross section [1/m] // The vmr of H2O will be multiplied at the stage of absorption // calculation: abs = vmr * pxsec. // pxsec = abs/vmr [1/m] but MPM93 is in [dB/km] --> conversion necessary pxsec(s, i) += CC * 1.000e6 * dB_km_to_1_m * 0.1820 * (f_grid[s] * Hz_to_GHz) * ImNw; } } } } // // ################################################################################# //! MPM93RainExt /*! \param[out] pxsec cross section (absorption/volume mixing ratio) of water clouds according to MPM93 [1/m] \param CEin scaling parameter of the calculated cross section [1] \param CAin scaling parameter of the factor a_rain [1] \param CBin scaling parameter of the exponent b_rain [1] \param model allows user defined input parameter (CEin, CAin, CBin)<br> or choice of pre-defined parameters of specific models (see note below). \param f_grid predefined frequency grid [Hz] \param abs_p predefined pressure grid [Pa] \param abs_t predefined temperature grid [K] \param vmr rain rate vector (i.e. vertical profile) [kg/m2/s] (valid range: 0-0.42) \note Except for model 'user' the input parameters CEin, CAin, and CBin are neglected (model dominates over parameters).<br> Allowed models: 'MPM93' and 'user'. See the user guide for detailed explanations. \remark Reference: R. L. Olsen and D.V. Rogers and D. B. Hodge,<br> <i> The aR^b relation in the calculation of rain attenuation</i>,<br> IEEE Trans. Antennas Propagat., vol. AP-26, pp. 318-329, 1978. \author Christian Melsheimer \date 2003-22-05 */ void MPM93RainExt(MatrixView pxsec, const Numeric CEin, // input parameter const Numeric CAin, // input parameter const Numeric CBin, // input parameter const String &model, // model ConstVectorView f_grid, // frequency vector ConstVectorView abs_p, // pressure vector ConstVectorView abs_t _U_, // temperature vector ConstVectorView vmr, // rain rate profile [kg/m2/s] const Verbosity &) { // --------- STANDARD MODEL PARAMETERS ------------------------------------------------ // standard values for the MPM93 model based on Olsen, R.L., // D.V. Rogers, and D. B. Hodge, "The aR^b relation in the // calculation of rain attenuation", IEEE Trans. Antennas Propagat., // vol. AP-26, pp. 318-329, 1978, const Numeric CE_MPM93 = 1.00000; const Numeric CA_MPM93 = 1.00000; const Numeric CB_MPM93 = 1.00000; // ------------------------------------------------------------------------------------ // select the parameter set (!!model dominates values!!): Numeric CE, CA, CB; if (model == "MPM93") { CE = CE_MPM93; CA = CA_MPM93; CB = CB_MPM93; } else if (model == "user") { CE = CEin; CA = CAin; CB = CBin; } else { ostringstream os; os << "rain-MPM93: ERROR! Wrong model values given.\n" << "Valid models are: \"MPM93\" and \"user\""; throw runtime_error(os.str()); } // --------------------------------------------------------------------------------------- // conversion factor to convert input SI-units [kg/m2/s] to [mm/h] const Numeric convfac = 3.6e6 / DENSITY_OF_WATER; const Numeric low_lim_rr = 0.000; // lower limit of allowed rain rate [mm/h] const Numeric high_lim_rr = 150.000; // upper limit of allowed rain rate [mm/h] const Index n_p = abs_p.nelem(); // Number of pressure levels const Index n_f = f_grid.nelem(); // Number of frequencies // Check that dimensions of abs_p, abs_t, and vmr agree: assert(n_p == abs_t.nelem()); assert(n_p == vmr.nelem()); // Check that dimensions of pxsec are consistent with n_f // and n_p. It should be [n_f,n_p]: assert(n_f == pxsec.nrows()); assert(n_p == pxsec.ncols()); // Loop pressure/temperature: for (Index i = 0; i < n_p; ++i) { // Extinction by rain is parameterized as: // ext_rain = a_rain * rr ^ b_rain // a_rain and b_rain each depend on frequency by power laws: // a_rain = Ga * freq ^ Ea // b_rain = Gb * freq ^ Eb Numeric Ga = 0.; Numeric Ea = 0.; Numeric Gb = 0.; Numeric Eb = 0.; // FIXME Numeric a_rain; // FIXME Numeric b_rain; // FIXME Numeric ext_rain; const Numeric vmri = vmr[i] * convfac; // Check limits of rain rate ("vmr") [mm/h] if (vmr[i] == 0.) pxsec(joker, i) += 0.; else if ((vmri >= low_lim_rr) && (vmri < high_lim_rr)) { // Loop frequency: for (Index s = 0; s < n_f; ++s) { // for rain rate < 25 mm/h, take parameters from Olsen et al.'s // own power law fit to their Laws-Parsons-Low data; // for rain rate > 25 mm/h, take C. Melsheimer's power law fit // to Olsen et al.'s Laws-Parson-High data if (vmri <= 25) { // power law coeff. Ga and exponent Ea for a, piecewise: if (f_grid[s] <= 2.9e9) { Ga = 6.39e-5; Ea = 2.03; } else if (f_grid[s] <= 54.0e9) { Ga = 4.21e-5; Ea = 2.42; } else if (f_grid[s] <= 180e9) { Ga = 4.09e-2; Ea = 0.699; } else if (f_grid[s] <= 1000e9) { Ga = 3.38; Ea = -0.151; } else { ostringstream os; os << "ERROR in MPM93RainExt:\n" << " frequency (valid range 0-1000 GHz):" << f_grid[s] * Hz_to_GHz << "\n" << " ==> no calculation performed!\n"; throw runtime_error(os.str()); } // power law coeff. Gb and exponent Eb for b, piecewise: if (f_grid[s] <= 8.5e9) { Gb = 0.851; Eb = 0.158; } else if (f_grid[s] <= 25.0e9) { Gb = 1.41; Eb = -0.0779; } else if (f_grid[s] <= 164.0e9) { Gb = 2.63; Eb = -0.272; } else if (f_grid[s] <= 1000e9) { Gb = 0.616; Eb = 0.0126; } else { ostringstream os; os << "ERROR in MPM93RainExt:\n" << " frequency (valid range 0-1000 GHz):" << f_grid[s] * Hz_to_GHz << "\n" << " ==> no calculation performed!\n"; throw runtime_error(os.str()); } } else if (vmri > 25) { // power law coeff. Ga and exponent Ea for a, piecewise: if (f_grid[s] <= 4.9e9) { Ga = 5.30e-5; Ea = 1.87; } else if (f_grid[s] <= 10.7e9) { Ga = 5.03e-6; Ea = 3.35; } else if (f_grid[s] <= 40.1e9) { Ga = 2.53e-5; Ea = 2.67; } else if (f_grid[s] <= 59.1e9) { Ga = 3.58e-3; Ea = 1.33; } else if (f_grid[s] <= 100e9) { Ga = 0.143; Ea = 0.422; } else { ostringstream os; os << "ERROR in MPM93RainExt:\n" << " frequency (valid range for rain rate > 25mm/h: 0-100 GHz):" << f_grid[s] * Hz_to_GHz << "\n" << " ==> no calculation performed!\n"; throw runtime_error(os.str()); } // power law coeff. Gb and exponent Eb for b, piecewise: if (f_grid[s] <= 6.2e9) { Gb = 0.911; Eb = 0.190; } else if (f_grid[s] <= 23.8e9) { Gb = 1.71; Eb = -0.156; } else if (f_grid[s] <= 48.4e9) { Gb = 3.08; Eb = -0.342; } else if (f_grid[s] <= 68.2e9) { Gb = 1.28; Eb = -0.116; } else if (f_grid[s] <= 100e9) { Gb = 0.932; Eb = -0.0408; } else { ostringstream os; os << "ERROR in MPM93RainExt:\n" << " frequency (valid range for rain rate > 25mm/h: 0-100 GHz):" << f_grid[s] * Hz_to_GHz << "\n" << " ==> no calculation performed!\n"; throw runtime_error(os.str()); } } //Factor a_rain Numeric a_rain = Ga * pow((f_grid[s] * Hz_to_GHz), Ea); //Factor b_rain Numeric b_rain = Gb * pow((f_grid[s] * Hz_to_GHz), Eb); // Extinction coefficient [dB/km], with scaling // parameters CA and CB Numeric ext_rain = CA * a_rain * pow(vmri, (CB * b_rain)); // rain extinction cross section [1/m] // The vmr will be multiplied at the stage of extinction // calculation: ext = vmr * pxsec. // pxsec = ext/vmr [1/m] but MPM93 is in [dB/km] --> conversion necessary pxsec(s, i) += CE * dB_km_to_1_m * ext_rain / vmri; } } else { if ((vmri < low_lim_rr) || (vmri > high_lim_rr)) { ostringstream os; os << "ERROR in MPM93RainExt:\n" << " rain rate (valid range 0.00-150.00 mm/h):" << vmr[i] << " kg/m2/s (" << vmri << " mm/h)\n" << " ==> no calculation performed!\n"; throw runtime_error(os.str()); } } } } // // ################################################################################# // ################################# HELP FUNCTIONS ################################ // ################################################################################# // /** \retval MPMLineShapeFunction H2O-line shape function value [1/Hz] \param gamma H2O-line width [Hz] \param fl H2O-line central frequency [Hz] \param f frequency position of calculation [Hz] \note This function calculates the line shape function of Van Vleck and Weisskopf with the factor (f/fl)¹. for the MPM pseudo continuum line. \remark Reference: H. J. Liebe and G. A. Hufford and M. G. Cotton,<br> <i>Propagation modeling of moist air and suspended water/ice particles at frequencies below 1000 GHz</i>,<br> AGARD 52nd Specialists Meeting of the Electromagnetic Wave Propagation Panel,<br> Palma de Mallorca, Spain, 1993, May 17-21 \author Thomas Kuhn \date 2001-11-05 */ Numeric MPMLineShapeFunction(const Numeric gamma, const Numeric fl, const Numeric f) { /* this routine calculates the line shape function of Van Vleck and Weisskopf with the factor (f/f_o)¹. for the MPM pseudo continuum line. creation TKS, 4.11.00 input: gamma [Hz] line width of line L fl [Hz] central frequency of line L f [Hz] frequency position of calculation output: value [1/Hz] line shape function value at f for the line parameters of line L */ double f_minus, f_plus; /* internal variables */ double value; /* return value */ // line at fl f_minus = 1.000 / ((f - fl) * (f - fl) + gamma * gamma); // mirror line at -fl f_plus = 1.000 / ((f + fl) * (f + fl) + gamma * gamma); // VVW line shape function value value = fabs(f / fl) * gamma * (f_minus + f_plus); return value; } // // ################################################################################# // /** \retval MPMLineShapeO2Function O2-line shape function value [1] \param gamma O2-line width [Hz] \param fl H2O-line central frequency of the [Hz] \param f frequency position of calculation [Hz] \param delta O2-line mixing parameter [1] \note This function calculates the line shape function of Van Vleck and Weisskopf for O2 with line mixing. \remark Reference: H. J. Liebe and G. A. Hufford and M. G. Cotton,<br> <i>Propagation modeling of moist air and suspended water/ice particles at frequencies below 1000 GHz</i>,<br> AGARD 52nd Specialists Meeting of the Electromagnetic Wave Propagation Panel,<br> Palma de Mallorca, Spain, 1993, May 17-21 \author Thomas Kuhn \date 2001-11-05 */ Numeric MPMLineShapeO2Function(const Numeric gamma, const Numeric fl, const Numeric f, const Numeric delta) { /* this routine calculates the line shape function of Van Vleck and Weisskopf for O2 with line mixing. creation TKS, 14.07.01 input: gamma [GHz] line width of line L fl [GHz] central frequency of line L f [GHz] frequency position of calculation delta [1] line mixing parameter output: value [1] line shape function value at f for the line parameters of line L */ double f_minus, f_plus; /* internal variables */ double value; /* return value */ // line at fl f_minus = (gamma - delta * (fl - f)) / ((fl - f) * (fl - f) + gamma * gamma); // mirror line at -fl f_plus = (gamma - delta * (fl + f)) / ((fl + f) * (fl + f) + gamma * gamma); // VVW line shape function value value = f * (f_minus + f_plus); return value; } // // ############################################################################ // #################### CONTROL OF ADDITIONAL ABSORPTION MODEL ################ // ############################################################################ // // /** Calculates model absorption for one continuum or full model tag. Note, that only one tag can be taken at a time. Calculated is the true absorption cross section, that means you have to multiply this with n*VMR in order to get the absorption coefficient in units of 1/m. This is the type of xsec that is used all over ARTS, but not what is used by the internal continuum functions! (We have to divide the output of the internal continuum functions by the number density n.) \retval xsec Cross section of one continuum tag,<br> xsec = alpha / (n*VMR) [m^2]. This is both input and output! (The function adds the continuum absorption cross section to the previous content of xsec.) \param name The name of the model to calculate (derived from the tag name) \param parameters model parameters, as defined in method abs_cont_parameters. \param model model, related to model parameters \param f_grid Frequency grid [Hz] \param abs_p Pressure grid [Pa] \param abs_t Temperatures associated with the pressure grid, abs_p [K] \param abs_n2 Total volume mixing ratio profile of molecular nitrogen.<br> This will be needed only for the CO2 foreign continuum [1]<br> however one is forced to give this input [1] \param abs_h2o Total volume mixing ratio profile of water vapor.<br> This will be needed only for the oxygen continuum <br> however one is forced to give this input [1] \param vmr Volume mixing ratio profile of the actual species [1] \author Stefan Buehler, Thomas Kuhn \date 2001-11-05 */ 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) { CREATE_OUT3; /* In the following all the possible tags are listed here and after a first consistency check about the input parameters the appropriate internal function is called, !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ATTENTION PLEASE UPDATE THIS COMMENT IF ANY CHANGES ARE MADE CONCERNING THE ASSOCIATED MODELS TO EACH TAG !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ---------------------------------------------------------------------------------------------------- TAG VALID MODELS ---------------------------------------------------------------------------------------------------- *CONTAGMODINFO* H2O-SelfContStandardType: Rosenkranz, user *CONTAGMODINFO* H2O-ForeignContStandardType: Rosenkranz, user *CONTAGMODINFO* H2O-ForeignContMaTippingType: MaTipping, user *CONTAGMODINFO* H2O-ContMPM93: MPM93, user *CONTAGMODINFO* H2O-MPM87: MPM87, MPM87Lines, MPM87Continuum, user *CONTAGMODINFO* H2O-MPM89: MPM89, MPM89Lines, MPM89Continuum, user *CONTAGMODINFO* H2O-MPM93: MPM93, MPM93Lines, MPM93Continuum, user *CONTAGMODINFO* H2O-PWR98: Rosenkranz, RosenkranzLines, RosenkranzContinuum, user *CONTAGMODINFO* H2O-CP98: CruzPol, CruzPolLine, CruzPolContinuum, user *CONTAGMODINFO* H2O-CKD24: CKD24, user *CONTAGMODINFO* O2-MPM85: MPM85, MPM85Lines, MPM85Continuum, MPM85NoCoupling, MPM85NoCutoff, user *CONTAGMODINFO* O2-MPM87: MPM87, MPM87Lines, MPM87Continuum, MPM87NoCoupling, MPM87NoCutoff, user *CONTAGMODINFO* O2-MPM89: MPM89, MPM89Lines, MPM89Continuum, MPM89NoCoupling, MPM89NoCutoff, user *CONTAGMODINFO* O2-MPM92: MPM92, MPM92Lines, MPM92Continuum, MPM92NoCoupling, MPM92NoCutoff, user *CONTAGMODINFO* O2-MPM93: MPM93, MPM93Lines, MPM93Continuum, MPM93NoCoupling, MPM92NoCutoff, user *CONTAGMODINFO* O2-PWR93: Rosenkranz, RosenkranzLines, RosenkranzContinuum, user *CONTAGMODINFO* O2-PWR88: Rosenkranz, RosenkranzLines, RosenkranzContinuum, user *CONTAGMODINFO* O2-SelfContMPM93: MPM93, user *CONTAGMODINFO* O2-SelfContPWR93: Rosenkranz, user *CONTAGMODINFO* O2-GenerealCont: Rosenkranz, MPM93, user *CONTAGMODINFO* N2-BFCIA86: BF86, user *CONTAGMODINFO* N2-SelfContMPM93: MPM93, user, MPM93Scale *CONTAGMODINFO* N2-SelfContPWR93: Rosenkranz, user *CONTAGMODINFO* N2-SelfContStandardType: Rosenkranz, user *CONTAGMODINFO* CO2-SelfContPWR93: Rosenkranz, user *CONTAGMODINFO* CO2-ForeignContPWR93: Rosenkranz, user *CONTAGMODINFO* liquidcloud-MPM93: MPM93, user *CONTAGMODINFO* liquidcloud-ELL07: ELL07 *CONTAGMODINFO* icecloud-MPM93: MPM93, user *CONTAGMODINFO* rain-MPM93: MPM93, user ---------------------------------------------------------------------------------------------------- */ // Set up a lokal variable pxsec for the pseudo cross sections, that // are used by the internal contiuum functions. It is important that // we also inititialize this to zero here, since the continuum // routines just add to this. // The dimensions of this are [n_frequencies,n_pressures]. Matrix pxsec(xsec.nrows(), xsec.ncols(), 0.0); // ============= H2O continuum ======================================================== if ("H2O-SelfContStandardType" == name) { // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum coefficient (C_s) [1/m / (Hz²*Pa²)] // parameters[1] : temperature exponent (x_s) [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 2; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; Standard_H2O_self_continuum(pxsec, parameters[0], parameters[1], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; Standard_H2O_self_continuum( pxsec, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-ForeignContStandardType" == name) { // // specific continuum parameters units: // a) output // pxsec : [1/m], // b) input // parameters[0] : [1/m / (Hz²*Pa²)] // parameters[1] : [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 2; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; Standard_H2O_foreign_continuum(pxsec, parameters[0], parameters[1], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; Standard_H2O_foreign_continuum( pxsec, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-ForeignContMaTippingType" == name) { // // specific continuum parameters units: // a) output // pxsec : [1/m], // b) input // parameters[0] : [1/m / (Hz²*Pa²)] // parameters[1] : [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 2; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MaTipping_H2O_foreign_continuum(pxsec, parameters[0], parameters[1], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; MaTipping_H2O_foreign_continuum( pxsec, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-ContMPM93" == name) { // self and foreign continuum term are simultaneously calculated // since the parameterization can not be divided up in these two // terms because they are not additive terms. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : pseudo continuum line frequency [Hz] // parameters[1] : pseudo continuum line strength parameter [Hz/Pa] // parameters[2] : pseudo continuum line strength temperature parameter [1] // parameters[3] : pseudo continuum line broadening parameter [Hz/Pa] // parameters[4] : pseudo continuum line broadening parameter [1] // parameters[5] : pseudo continuum line broadening parameter [1] // parameters[6] : pseudo continuum line broadening parameter [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 7; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM93_H2O_continuum(pxsec, parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], parameters[6], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; MPM93_H2O_continuum(pxsec, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-ForeignContATM01" == name) { // Foreign wet continuum term. // // Pardo et al., IEEE, Trans. Ant. Prop., // Vol 49, No 12, pp. 1683-1694, 2001. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : pseudo continuum line frequency [Hz] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; Pardo_ATM_H2O_ForeignContinuum( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; Pardo_ATM_H2O_ForeignContinuum( pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-SelfContCKD222" == name) { // OUTPUT: // pxsec cross section (absorption/volume mixing ratio) of // H2O self continuum according to CKD2.2.2 [1/m] // INPUT: // parameters[0] strength scaling factor [1] // model allows user defined input parameter set // (Cin) or choice of // pre-defined parameters of specific models (see note below). // f_grid predefined frequency grid [Hz] // abs_p predefined pressure grid [Pa] // abs_t predefined temperature grid [K] // vmr H2O volume mixing ratio profile [1] // // WWW resource: ftp.aer.com/aer_contnm_ckd const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_222_self_h2o( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_222_self_h2o( pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-ForeignContCKD222" == name) { // OUTPUT: // pxsec cross section (absorption/volume mixing ratio) of // H2O foreign continuum according to CKD2.2.2 [1/m] // INPUT: // parameters[0] strength scaling factor [1] // model allows user defined input parameter set // (Cin) or choice of // pre-defined parameters of specific models (see note below). // f_grid predefined frequency grid [Hz] // abs_p predefined pressure grid [Pa] // abs_t predefined temperature grid [K] // vmr H2O volume mixing ratio profile [1] // // WWW resource: ftp.aer.com/aer_contnm_ckd const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_222_foreign_h2o( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_222_foreign_h2o( pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-SelfContCKD242" == name) { // OUTPUT: // pxsec cross section (absorption/volume mixing ratio) of // H2O self continuum according to CKD2.4.2 [1/m] // INPUT: // parameters[0] strength scaling factor [1] // model allows user defined input parameter set // (Cin) or choice of // pre-defined parameters of specific models (see note below). // f_grid predefined frequency grid [Hz] // abs_p predefined pressure grid [Pa] // abs_t predefined temperature grid [K] // vmr H2O volume mixing ratio profile [1] // // WWW resource: ftp.aer.com/aer_contnm_ckd const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_242_self_h2o( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_242_self_h2o( pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-ForeignContCKD242" == name) { // OUTPUT: // pxsec cross section (absorption/volume mixing ratio) of // H2O foreign continuum according to CKD2.4.2 [1/m] // INPUT: // parameters[0] strength scaling factor [1] // model allows user defined input parameter set // (Cin) or choice of // pre-defined parameters of specific models (see note below). // f_grid predefined frequency grid [Hz] // abs_p predefined pressure grid [Pa] // abs_t predefined temperature grid [K] // vmr H2O volume mixing ratio profile [1] // // WWW resource: ftp.aer.com/aer_contnm_ckd const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_242_foreign_h2o( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_242_foreign_h2o( pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-SelfContCKDMT100" == name) { // OUTPUT: // pxsec cross section (absorption/volume mixing ratio) of // H2O self continuum according to CKD MT 1.00 [1/m] // INPUT: // parameters[0] strength scaling factor [1] // model allows user defined input parameter set // (Cin) or choice of // pre-defined parameters of specific models (see note below). // f_grid predefined frequency grid [Hz] // abs_p predefined pressure grid [Pa] // abs_t predefined temperature grid [K] // vmr H2O volume mixing ratio profile [1] // // WWW resource: ftp.aer.com/aer_contnm_ckd const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_100_self_h2o( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_100_self_h2o( pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-ForeignContCKDMT100" == name) { // OUTPUT: // pxsec cross section (absorption/volume mixing ratio) of // H2O foreign continuum according to CKD MT 1.00 [1/m] // INPUT: // parameters[0] strength scaling factor [1] // model allows user defined input parameter set // (Cin) or choice of // pre-defined parameters of specific models (see note below). // f_grid predefined frequency grid [Hz] // abs_p predefined pressure grid [Pa] // abs_t predefined temperature grid [K] // vmr H2O volume mixing ratio profile [1] // // WWW resource: ftp.aer.com/aer_contnm_ckd const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_100_foreign_h2o( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_100_foreign_h2o( pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-SelfContCKDMT252" == name) { // OUTPUT: // pxsec cross section (absorption/volume mixing ratio) of // H2O self continuum according to CKD MT 2.50 [1/m] // INPUT: // parameters[0] strength scaling factor [1] // model allows user defined input parameter set // (Cin) or choice of // pre-defined parameters of specific models (see note below). // f_grid predefined frequency grid [Hz] // abs_p predefined pressure grid [Pa] // abs_t predefined temperature grid [K] // vmr H2O volume mixing ratio profile [1] // // WWW resource: ftp.aer.com/aer_contnm_ckd const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_250_self_h2o( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_250_self_h2o( pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-ForeignContCKDMT252" == name) { // OUTPUT: // pxsec cross section (absorption/volume mixing ratio) of // H2O foreign continuum according to CKD MT 2.50 [1/m] // INPUT: // parameters[0] strength scaling factor [1] // model allows user defined input parameter set // (Cin) or choice of // pre-defined parameters of specific models (see note below). // f_grid predefined frequency grid [Hz] // abs_p predefined pressure grid [Pa] // abs_t predefined temperature grid [K] // vmr H2O volume mixing ratio profile [1] // // WWW resource: ftp.aer.com/aer_contnm_ckd const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_250_foreign_h2o( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_250_foreign_h2o( pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-SelfContCKDMT320" == name) { // OUTPUT: // pxsec cross section (absorption/volume mixing ratio) of // H2O self continuum according to CKD MT 2.50 [1/m] // INPUT: // parameters[0] strength scaling factor [1] // model allows user defined input parameter set // (Cin) or choice of // pre-defined parameters of specific models (see note below). // f_grid predefined frequency grid [Hz] // abs_p predefined pressure grid [Pa] // abs_t predefined temperature grid [K] // vmr H2O volume mixing ratio profile [1] // // WWW resource: ftp.aer.com/aer_contnm_ckd const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_320_self_h2o( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_320_self_h2o( pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-ForeignContCKDMT320" == name) { // OUTPUT: // pxsec cross section (absorption/volume mixing ratio) of // H2O foreign continuum according to CKD MT 2.50 [1/m] // INPUT: // parameters[0] strength scaling factor [1] // model allows user defined input parameter set // (Cin) or choice of // pre-defined parameters of specific models (see note below). // f_grid predefined frequency grid [Hz] // abs_p predefined pressure grid [Pa] // abs_t predefined temperature grid [K] // vmr H2O volume mixing ratio profile [1] // // WWW resource: ftp.aer.com/aer_contnm_ckd const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_320_foreign_h2o( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_320_foreign_h2o( pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-SelfContCKD24" == name) { // OUTPUT: // pxsec cross section (absorption/volume mixing ratio) of // H2O continuum according to CKD2.4 [1/m] // INPUT: // parameters[0] strength scaling factor [1] // model allows user defined input parameter set // (Cin) or choice of // pre-defined parameters of specific models (see note below). // f_grid predefined frequency grid [Hz] // abs_p predefined pressure grid [Pa] // abs_t predefined temperature grid [K] // abs_n2 N2 volume mixing ratio profile [1] // vmr H2O volume mixing ratio profile [1] // // WWW resource: ftp.aer.com/aer_contnm_ckd // abs_n2 needed here. check, whether this is valid. if (abs_n2.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires N2-vmr, but no tag group contains N2!"; throw runtime_error(os.str()); } const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD24_H20(pxsec, 0, parameters[0], model, f_grid, abs_p, abs_t, vmr, abs_n2, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD24_H20( pxsec, 0, 0.000, model, f_grid, abs_p, abs_t, vmr, abs_n2, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-ForeignContCKD24" == name) { // OUTPUT: // pxsec cross section (absorption/volume mixing ratio) of // H2O continuum according to CKD2.4 [1/m] // INPUT: // Cin strength scaling factor [1] // model allows user defined input parameter set // (Cin) or choice of // pre-defined parameters of specific models (see note below). // f_grid predefined frequency grid [Hz] // abs_p predefined pressure grid [Pa] // abs_t predefined temperature grid [K] // vmr H2O volume mixing ratio profile [1] // abs_n2 N2 volume mixing ratio profile [1] // // WWW resource: ftp.aer.com/aer_contnm_ckd if (abs_n2.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires N2-vmr, but no tag group contains N2!"; throw runtime_error(os.str()); } const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD24_H20(pxsec, 1, parameters[0], model, f_grid, abs_p, abs_t, vmr, abs_n2, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD24_H20( pxsec, 1, 0, model, f_grid, abs_p, abs_t, vmr, abs_n2, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ============= H2O full models ====================================================== else if ("H2O-CP98" == name) { // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum scale factor (CC) [1] // parameters[1] : line strength scale factor (CL) [1] // parameters[2] : line broadening scale factor (CW) [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 3; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CP98H2OAbsModel(pxsec, parameters[0], parameters[1], parameters[2], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CP98H2OAbsModel( pxsec, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-MPM87" == name) { // // specific continuum parameters and units: // a) output // pxsec : [1/m], // b) input // parameters[0] : continuum scale factor (CC) [1] // parameters[1] : line strength scale factor (CL) [1] // parameters[2] : line broadening scale factor (CW) [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 3; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM87H2OAbsModel(pxsec, parameters[0], parameters[1], parameters[2], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; MPM87H2OAbsModel( pxsec, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-MPM89" == name) { // // specific continuum parameters and units: // a) output // pxsec : [1/m], // b) input // parameters[0] : continuum scale factor (CC) [1] // parameters[1] : line strength scale factor (CL) [1] // parameters[2] : line broadening scale factor (CW [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 3; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM89H2OAbsModel(pxsec, parameters[0], parameters[1], parameters[2], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; MPM89H2OAbsModel( pxsec, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-MPM93" == name) { // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum scale factor (CC) [1] // parameters[1] : line strength scale factor (CL) [1] // parameters[2] : line broadening scale factor (CW) [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 3; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM93H2OAbsModel(pxsec, parameters[0], parameters[1], parameters[2], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; MPM93H2OAbsModel( pxsec, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("H2O-PWR98" == name) { // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum scale factor (CC) [1] // parameters[1] : line strength scale factor (CL) [1] // parameters[2] : line broadening scale factor (CW) [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 3; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; PWR98H2OAbsModel(pxsec, parameters[0], parameters[1], parameters[2], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; PWR98H2OAbsModel( pxsec, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ============= O2 continuum ========================================================= else if ("O2-CIAfunCKDMT100" == name) { // Model reference: // F. Thibault, V. Menoux, R. Le Doucen, L. Rosenman, // J.-M. Hartmann, Ch. Boulet, // "Infrared collision-induced absorption by O2 near 6.4 microns for // atmospheric applications: measurements and emprirical modeling", // Appl. Optics, 35, 5911-5917, (1996). // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum scaling // model : model option ("CKD" or "user") // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_CIAfun_o2( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_CIAfun_o2( pxsec, 0.00e0, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-v0v0CKDMT100" == name) { // Model reference: // B. Mate, C. Lugez, G.T. Fraser, W.J. Lafferty, // "Absolute Intensities for the O2 1.27 micron // continuum absorption", // J. Geophys. Res., 104, 30,585-30,590, 1999. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum scaling // model : model option ("CKD" or "user") // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // abs_n2 : [1] // if (abs_n2.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires N2-vmr, but no tag group contains N2!"; throw runtime_error(os.str()); } const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_v0v0_o2(pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, abs_n2, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_v0v0_o2( pxsec, 0.0e0, model, f_grid, abs_p, abs_t, vmr, abs_n2, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-v1v0CKDMT100" == name) { // Model reference: // Mlawer, Clough, Brown, Stephen, Landry, Goldman, Murcray, // "Observed Atmospheric Collision Induced Absorption in Near Infrared Oxygen Bands", // Journal of Geophysical Research, vol 103, no. D4, pp. 3859-3863, 1998. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum scaling // model : model option ("CKD" or "user") // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_v1v0_o2( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_v1v0_o2(pxsec, 0.0e0, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the ARTS User Guide.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-visCKDMT252" == name) { // Model reference: // O2 continuum formulated by Greenblatt et al. over the spectral region // 8797-29870 cm-1: "Absorption Coefficients of Oxygen Between // 330 and 1140 nm, G.D. Green blatt, J.J. Orlando, J.B. Burkholder, // and A.R. Ravishabkara, J. Geophys. Res., 95, 18577-18582, 1990. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum scaling // model : model option ("CKD" or "user") // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_250_o2_vis( pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_250_o2_vis( pxsec, 0.0e0, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-SelfContStandardType" == name) { // MPM93, Rosenkranz 1993 O2 continuum: // see publication side of National Telecommunications and Information Administration // http://www.its.bldrdoc.gov/pub/all_pubs/all_pubs.html // and ftp side for downloading the MPM93 original source code: // ftp://ftp.its.bldrdoc.gov/pub/mpm93/ // // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen, // "Atmospheric Remote Sensing by Microwave Radiometry", // John Wiley & Sons, Inc., 1993, ISBN 0-471-62891-3 // (see also JQSRT, Vol.48, No.5/6 pp.629-643, 1992) // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum coefficient (C) [1/m*1/Hz*1/Pa] // parameters[1] : frequency coefficient (G0) [Hz/Pa] // parameters[3] : line width parameter (G0A) [1] // parameters[3] : line width parameter (G0B) [1] // parameters[2] : temperature exponent (XG0d) [1] // parameters[2] : temperature exponent (x_s) [1] // parameters[5] : continuum coefficient (XG0w) [1] // model : model option ("MPM93", "Rosenkranz", or "user") // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_h2o : [1] // vmr : [1] // if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 6; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; Standard_O2_continuum(pxsec, parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5], model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; Standard_O2_continuum(pxsec, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-SelfContMPM93" == name) { // MPM93 O2 continuum: // see publication side of National Telecommunications and Information Administration // http://www.its.bldrdoc.gov/pub/all_pubs/all_pubs.html // and ftp side for downloading the MPM93 original source code: // ftp://ftp.its.bldrdoc.gov/pub/mpm93/ // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum coefficient (C) [1/m / (Hz²*Pa²)] // parameters[1] : temperature exponent (x_s) [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_h2o : [1] // vmr : [1] // if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 4; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM93_O2_continuum(pxsec, parameters[0], parameters[1], parameters[2], parameters[3], model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; MPM93_O2_continuum(pxsec, 0.00, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-SelfContPWR93" == name) { // data information about this continuum: // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen, // "Atmospheric Remote Sensing by Microwave Radiometry", // John Wiley & Sons, Inc., 1993, ISBN 0-471-62891-3 // (see also JQSRT, Vol.48, No.5/6 pp.629-643, 1992) // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum coefficient (C) [K²/(Hz*Pa*m)] // parameters[1] : temperature exponent (x) [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 4; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; Rosenkranz_O2_continuum(pxsec, parameters[0], parameters[1], parameters[2], parameters[3], model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; Rosenkranz_O2_continuum(pxsec, 0.00, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ============= O2 full model ======================================================== else if ("O2-PWR88" == name) { // REFERENCE FOR EQUATIONS AND COEFFICIENTS: // P.W. ROSENKRANZ, CHAP. 2 AND APPENDIX, IN ATMOSPHERIC REMOTE SENSING // BY MICROWAVE RADIOMETRY (M.A. JANSSEN, ED. 1993) // AND // H.J. LIEBE ET AL, JQSRT V.48, PP.629-643 (1992) // (EXCEPT: SUBMILLIMETER LINE INTENSITIES FROM HITRAN92) // AND // P. W. ROSENKRANZ, INTERFERENCE COEFFICIENTS FOR THE // OVERLAPPING OXYGEN LINES IN AIR, JQSRT, 1988, VOLUME 39, 287-297. // // the only difference to the 1993 version is the line mixing // parameter Y, which is taken from the above reference JQSRT, 1988. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum term scale factor, default CC = 1.000 [1] // parameters[1] : line strength scale factor, default CL = 1.000 [1] // parameters[1] : line broadening scale factor, default CW = 1.000 [1] // parameters[1] : line coupling scale factor, default CO = 1.000 [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_h2o, : [1] // vmr : [1] // if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 4; const char *version = "PWR88"; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; PWR93O2AbsModel(pxsec, parameters[0], // continuum term scale factor parameters[1], // line strength scale factor parameters[2], // line broadening scale factor parameters[3], // line coupling scale factor model, version, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; PWR93O2AbsModel(pxsec, 0.00, 0.00, 0.00, 0.00, model, version, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-PWR93" == name) { // REFERENCE FOR EQUATIONS AND COEFFICIENTS: // P.W. ROSENKRANZ, CHAP. 2 AND APPENDIX, IN ATMOSPHERIC REMOTE SENSING // BY MICROWAVE RADIOMETRY (M.A. JANSSEN, ED. 1993) // AND H.J. LIEBE ET AL, JQSRT V.48, PP.629-643 (1992) // (EXCEPT: SUBMILLIMETER LINE INTENSITIES FROM HITRAN92) // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum term scale factor, default CC = 1.000 [1] // parameters[1] : line strength scale factor, default CL = 1.000 [1] // parameters[1] : line broadening scale factor, default CW = 1.000 [1] // parameters[1] : line coupling scale factor, default CO = 1.000 [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_h2o, : [1] // vmr : [1] // if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 4; const char *version = "PWR93"; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; PWR93O2AbsModel(pxsec, parameters[0], // continuum term scale factor parameters[1], // line strength scale factor parameters[2], // line broadening scale factor parameters[3], // line coupling scale factor model, version, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; PWR93O2AbsModel(pxsec, 0.00, 0.00, 0.00, 0.00, model, version, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-PWR98" == name) { // REFERENCES FOR EQUATIONS AND COEFFICIENTS: // P.W. Rosenkranz, CHAP. 2 and appendix, in ATMOSPHERIC REMOTE SENSING // BY MICROWAVE RADIOMETRY (M.A. Janssen, ed., 1993). // H.J. Liebe et al, JQSRT V.48, PP.629-643 (1992). // M.J. Schwartz, Ph.D. thesis, M.I.T. (1997). // SUBMILLIMETER LINE INTENSITIES FROM HITRAN96. // This version differs from Liebe's MPM92 in two significant respects: // 1. It uses the modification of the 1- line width temperature dependence // recommended by Schwartz: (1/T). // 2. It uses the same temperature dependence (X) for submillimeter // line widths as in the 60 GHz band: (1/T)**0.8 // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum term scale factor, default CC = 1.000 [1] // parameters[1] : line strength scale factor, default CL = 1.000 [1] // parameters[1] : line broadening scale factor, default CW = 1.000 [1] // parameters[1] : line coupling scale factor, default CO = 1.000 [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_h2o, : [1] // vmr : [1] // // abs_h2o needed here. check, whether this is valid. if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 4; const char *version = "PWR98"; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; PWR93O2AbsModel(pxsec, parameters[0], // continuum term scale factor parameters[1], // line strength scale factor parameters[2], // line broadening scale factor parameters[3], // line coupling scale factor model, version, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; PWR93O2AbsModel(pxsec, 0.00, 0.00, 0.00, 0.00, model, version, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-MPM93" == name) { // H. J. Liebe and G. A. Hufford and M. G. Cotton, // "Propagation modeling of moist air and suspended water/ice // particles at frequencies below 1000 GHz", // AGARD 52nd Specialists Meeting of the Electromagnetic Wave // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21 // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum term scale factor, default CC = 1.000 [1] // parameters[1] : line strength scale factor, default CL = 1.000 [1] // parameters[2] : line broadening scale factor, default CW = 1.000 [1] // parameters[3] : line coupling scale factor, default CO = 1.000 [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_h2o, : [1] // vmr : [1] // if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 4; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM93O2AbsModel(pxsec, parameters[0], // continuum term scale factor parameters[1], // line strength scale factor parameters[2], // line broadening scale factor parameters[3], // line coupling scale factor model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; MPM93O2AbsModel(pxsec, 0.00, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-TRE05" == name) { // H. J. Liebe and G. A. Hufford and M. G. Cotton, // "Propagation modeling of moist air and suspended water/ice // particles at frequencies below 1000 GHz", // AGARD 52nd Specialists Meeting of the Electromagnetic Wave // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21 // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum term scale factor, default CC = 1.000 [1] // parameters[1] : line strength scale factor, default CL = 1.000 [1] // parameters[2] : line broadening scale factor, default CW = 1.000 [1] // parameters[3] : line coupling scale factor, default CO = 1.000 [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_h2o, : [1] // vmr : [1] // if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 4; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; TRE05O2AbsModel(pxsec, parameters[0], // continuum term scale factor parameters[1], // line strength scale factor parameters[2], // line broadening scale factor parameters[3], // line coupling scale factor model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; TRE05O2AbsModel(pxsec, 0.00, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-MPM92" == name) { // H. J. Liebe, P. W. Rosenkranz and G. A. Hufford, // Atmospheric 60-GHz Oxygen Spectrum: New Laboratory // Measurements and Line Parameters // JQSRT, Vol 48, pp. 629-643, 1992 // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum term scale factor, default CC = 1.000 [1] // parameters[1] : line strength scale factor, default CL = 1.000 [1] // parameters[2] : line broadening scale factor, default CW = 1.000 [1] // parameters[3] : line coupling scale factor, default CO = 1.000 [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_h2o, : [1] // vmr : [1] // if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 4; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM92O2AbsModel(pxsec, parameters[0], // continuum term scale factor parameters[1], // line strength scale factor parameters[2], // line broadening scale factor parameters[3], // line coupling scale factor model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; MPM92O2AbsModel(pxsec, 0.00, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-MPM89" == name) { // H. J. Liebe, // MPM - an atmospheric millimeter-wave propagation model, // Int. J. Infrared and Mill. Waves, Vol 10, pp. 631-650, 1989. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum term scale factor, default CC = 1.000 [1] // parameters[1] : line strength scale factor, default CL = 1.000 [1] // parameters[2] : line broadening scale factor, default CW = 1.000 [1] // parameters[3] : line coupling scale factor, default CO = 1.000 [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_h2o, : [1] // vmr : [1] // if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 4; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM89O2AbsModel(pxsec, parameters[0], // continuum term scale factor parameters[1], // line strength scale factor parameters[2], // line broadening scale factor parameters[3], // line coupling scale factor model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; MPM89O2AbsModel(pxsec, 0.00, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-MPM87" == name) { // H. J. Liebe and D. H. Layton, // Millimeter-wave properties of the atmosphere: // Laboratory studies and propagation modelling, // NITA Report 87-224, // U.S. Dept. of Commerce, National Telecommunications and Information // Administration, Institute for Communication Sciences, rep. 87-224, // 325 Broadway, Boulder, CO 80303-3328 // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum term scale factor, default CC = 1.000 [1] // parameters[1] : line strength scale factor, default CL = 1.000 [1] // parameters[2] : line broadening scale factor, default CW = 1.000 [1] // parameters[3] : line coupling scale factor, default CO = 1.000 [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_h2o, : [1] // vmr : [1] // if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 4; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM87O2AbsModel(pxsec, parameters[0], // continuum term scale factor parameters[1], // line strength scale factor parameters[2], // line broadening scale factor parameters[3], // line coupling scale factor model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; MPM87O2AbsModel(pxsec, 0.00, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("O2-MPM85" == name) { // H. J. Liebe and D. H. Layton, // An updated model for millimeter wave propagation in moist air // Radio Science, vol. 20, pp. 1069-1089, 1985 // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum term scale factor, default CC = 1.000 [1] // parameters[1] : line strength scale factor, default CL = 1.000 [1] // parameters[2] : line broadening scale factor, default CW = 1.000 [1] // parameters[3] : line coupling scale factor, default CO = 1.000 [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_h2o, : [1] // vmr : [1] // if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 4; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Full model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM85O2AbsModel(pxsec, parameters[0], // continuum term scale factor parameters[1], // line strength scale factor parameters[2], // line broadening scale factor parameters[3], // line coupling scale factor model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Full model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Full model " << name << " running with \n" << "the parameters for model " << model << ".\n"; MPM85O2AbsModel(pxsec, 0.00, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Full model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ============= N2 continuum ========================================================= else if ("N2-SelfContMPM93" == name) { // MPM93 N2 continuum: // see publication side of National Telecommunications and Information Administration // http://www.its.bldrdoc.gov/pub/all_pubs/all_pubs.html // and ftp side for downloading the MPM93 original source code: // ftp://ftp.its.bldrdoc.gov/pub/mpm93/ // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : strength parameter [1/m * 1/(Hz²*Pa²)] // parameters[1] : broadening parameter [1] // parameters[2] : temperature exponent [1] // parameters[3] : frequency exponent [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_h2o : [1] // vmr : [1] // if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 4; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM93_N2_continuum(pxsec, parameters[0], parameters[1], parameters[2], parameters[3], model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model == "MPM93Scale") && (parameters.nelem() == 1)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; MPM93_N2_continuum(pxsec, parameters[0], 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } else if ((model == "MPM93Scale") && (parameters.nelem() != 1)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires 1 scaling input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (model != "MPM93Scale") && (parameters.nelem() == 0)) // -- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; MPM93_N2_continuum(pxsec, 0.00, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, abs_h2o, vmr, verbosity); } /* -------------------------------------------------------------------------- else if ( (model != "user") && (parameters.nelem() != 0) ) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } ----------------------------------------------------------------------*/ } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("N2-DryContATM01" == name) { // data information about this continuum: // Pardo et al. model model (IEEE, Trans. Ant. Prop., // Vol 49, No 12, pp. 1683-1694, 2001) // // specific continuum parameters and units: // a) output // pxsec : [1/m], // b) input // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] N2 vmr // abs_h2o : [1] H2O vmr // if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; Pardo_ATM_N2_dry_continuum(pxsec, parameters[0], // coefficient model, f_grid, abs_p, abs_t, vmr, abs_h2o, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; Pardo_ATM_N2_dry_continuum(pxsec, 0.000, // coefficient model, f_grid, abs_p, abs_t, vmr, abs_h2o, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("N2-SelfContPWR93" == name) { // data information about this continuum: // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen, // "Atmospheric Remote Sensing by Microwave Radiometry", // John Wiley & Sons, Inc., 1993, ISBN 0-471-62891-3 // // specific continuum parameters and units: // a) output // pxsec : [1/m], // b) input // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²] // parameters[1] : continuum temperature exponent [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 2; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; Rosenkranz_N2_self_continuum(pxsec, parameters[0], // coefficient parameters[1], // temp. exponent model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; Rosenkranz_N2_self_continuum( pxsec, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("N2-SelfContStandardType" == name) { // data information about this continuum: // A completely general expression for the N2 continuum // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum coefficient (C) [1/m * 1/(Hz*Pa)²] // parameters[1] : frequency exponent (xf) [1] // parameters[2] : temperature exponent (xt) [1] // parameters[3] : pressure exponent (xp) [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] const int Nparam = 4; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; Standard_N2_self_continuum(pxsec, parameters[0], parameters[1], parameters[2], parameters[3], model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; Standard_N2_self_continuum(pxsec, 0.000, 0.000, 0.000, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("N2-SelfContBorysow" == name) { // data information about this continuum: // A. Borysow and L. Frommhold, The Astrophysical Journal, // Vol. 311, pp.1043-1057, 1986 const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; BF86_CIA_N2(pxsec, parameters[0], // scaling factor model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; BF86_CIA_N2(pxsec, 0.0, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("N2-CIArotCKDMT100" == name) { // data information about this continuum: // A. Borysow and L. Frommhold, The Astrophysical Journal, // Vol. 311, pp.1043-1057, 1986 const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_CIArot_n2(pxsec, parameters[0], // scaling factor model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_CIArot_n2(pxsec, 0.0, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("N2-CIAfunCKDMT100" == name) { // data information about this continuum: // Lafferty, W.J., A.M. Solodov,A. Weber, W.B. Olson and J._M. Hartmann, // Infrared collision-induced absorption by // N2 near 4.3 microns for atmospheric applications: // Measurements and emprirical modeling, // Appl. Optics, 35, 5911-5917, (1996) const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_CIAfun_n2(pxsec, parameters[0], // scaling factor model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_CIAfun_n2(pxsec, 0.0, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("N2-CIArotCKDMT252" == name) { // data information about this continuum: // A. Borysow and L. Frommhold, The Astrophysical Journal, // Vol. 311, pp.1043-1057, 1986 if (abs_o2.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires O2-vmr, but no tag group contains O2!"; throw runtime_error(os.str()); } if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_250_CIArot_n2(pxsec, parameters[0], // scaling factor model, f_grid, abs_p, abs_t, vmr, abs_h2o, abs_o2, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_250_CIArot_n2(pxsec, 0.0, model, f_grid, abs_p, abs_t, vmr, abs_h2o, abs_o2, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("N2-CIAfunCKDMT252" == name) { // data information about this continuum: // Lafferty, W.J., A.M. Solodov,A. Weber, W.B. Olson and J._M. Hartmann, // Infrared collision-induced absorption by // N2 near 4.3 microns for atmospheric applications: // Measurements and emprirical modeling, // Appl. Optics, 35, 5911-5917, (1996) if (abs_o2.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires O2-vmr, but no tag group contains O2!"; throw runtime_error(os.str()); } if (abs_h2o.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!"; throw runtime_error(os.str()); } const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_250_CIAfun_n2(pxsec, parameters[0], // scaling factor model, f_grid, abs_p, abs_t, vmr, abs_h2o, abs_o2, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_250_CIAfun_n2(pxsec, 0.0, model, f_grid, abs_p, abs_t, vmr, abs_h2o, abs_o2, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ============= CO2 continuum ======================================================== else if ("CO2-CKD241" == name) { // data information about this continuum: // CKDv2.4.1 model at http://www.rtweb.aer.com/continuum_frame.html // This continuum accounts for the far wings of the many COS lines/bands since // the line is used with a cutoff in the line shape with +/- 25 cm^-1. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²] // parameters[1] : continuum temperature exponent [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_241_co2(pxsec, parameters[0], // abs. scaling model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_241_co2(pxsec, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("CO2-CKDMT100" == name) { // data information about this continuum: // CKD model at http://www.rtweb.aer.com/continuum_frame.html // This continuum accounts for the far wings of the many COS lines/bands since // the line is used with a cutoff in the line shape with +/- 25 cm^-1. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²] // parameters[1] : continuum temperature exponent [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_co2(pxsec, parameters[0], // abs. scaling model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_co2(pxsec, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("CO2-CKDMT252" == name) { // data information about this continuum: // CKD model at http://www.rtweb.aer.com/continuum_frame.html // This continuum accounts for the far wings of the many COS lines/bands since // the line is used with a cutoff in the line shape with +/- 25 cm^-1. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²] // parameters[1] : continuum temperature exponent [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 1; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; CKD_mt_250_co2(pxsec, parameters[0], // abs. scaling model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; CKD_mt_250_co2(pxsec, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("CO2-SelfContPWR93" == name) { // data information about this continuum: // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen, // "Atmospheric Remote Sensing by Microwave Radiometry", // John Wiley & Sons, Inc., 1993, ISBN 0-471-62891-3 // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²] // parameters[1] : continuum temperature exponent [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 2; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; Rosenkranz_CO2_self_continuum(pxsec, parameters[0], // coefficient parameters[1], // temp. exponent model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; Rosenkranz_CO2_self_continuum( pxsec, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("CO2-ForeignContPWR93" == name) { // data information about this continuum: // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen, // "Atmospheric Remote Sensing by Microwave Radiometry", // John Wiley & Sons, Inc., 1993, ISBN 0-471-62891-3 // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²] // parameters[1] : continuum temperature exponent [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_n2 : [1] // vmr : [1] // if (abs_n2.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires N2-vmr, but no tag group contains N2!"; throw runtime_error(os.str()); } const int Nparam = 2; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; Rosenkranz_CO2_foreign_continuum(pxsec, parameters[0], parameters[1], model, f_grid, abs_p, abs_t, abs_n2, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; Rosenkranz_CO2_foreign_continuum(pxsec, 0.00, 0.00, model, f_grid, abs_p, abs_t, abs_n2, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("CO2-SelfContHo66" == name) { // data information about this continuum: // Reference: Ho, Kaufman and Thaddeus, "Laboratory measurements of // microwave absorption in models of the atmosphere of Venus", JGR, 1966. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²] // parameters[1] : continuum temperature exponent [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // const int Nparam = 2; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; Ho66_CO2_self_continuum(pxsec, parameters[0], // coefficient parameters[1], // temp. exponent model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; Ho66_CO2_self_continuum( pxsec, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ else if ("CO2-ForeignContHo66" == name) { // data information about this continuum: // Reference: Ho, Kaufman and Thaddeus, "Laboratory measurements of // microwave absorption in models of the atmosphere of Venus", JGR, 1966. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²] // parameters[1] : continuum temperature exponent [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // abs_n2 : [1] // vmr : [1] // if (abs_n2.sum() < -1.) { ostringstream os; os << "Continuum/full model tag " << name << " requires N2-vmr, but no tag group contains N2!"; throw runtime_error(os.str()); } const int Nparam = 2; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "Continuum model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; Ho66_CO2_foreign_continuum(pxsec, parameters[0], parameters[1], model, f_grid, abs_p, abs_t, abs_n2, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "Continuum model " << name << " requires " << Nparam << " input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "Continuum model " << name << " running with \n" << "the parameters for model " << model << ".\n"; Ho66_CO2_foreign_continuum(pxsec, 0.00, 0.00, model, f_grid, abs_p, abs_t, abs_n2, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: Continuum model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters. " << "\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 3.\n"; throw runtime_error(os.str()); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ============= cloud and fog absorption from MPM93 ================================== else if ("liquidcloud-MPM93" == name) { // Suspended water droplet absorption parameterization from MPM93 model // H. J. Liebe and G. A. Hufford and M. G. Cotton, // "Propagation modeling of moist air and suspended water/ice // particles at frequencies below 1000 GHz", // AGARD 52nd Specialists Meeting of the Electromagnetic Wave // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21 // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : [1] // parameters[1] : [1] // parameters[2] : [1] // model : [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // // liquid water droplet parameters: // suspended water droplet density range: 0-5 g/m³ // // valid atmospheric condition: // temperature : 210 to 373 K // for (Index s = 0; s < f_grid.nelem(); ++s) { if (f_grid[s] > 1e12) { ostringstream os; os << "Liquid cloud absorption model MPM93 only valid at\n" "frequencies up to 1THz. Yours are above."; throw runtime_error(os.str()); } } for (Index s = 0; s < abs_t.nelem(); ++s) { if ((abs_t[s] < 210. || abs_t[s] > 373.) && abs(vmr[s]) > LIQUID_AND_ICE_TREAT_AS_ZERO) { ostringstream os; os << "Liquid cloud absorption model MPM93 only valid at\n" << "temperatures between 210 and 373K.\n" << "LWC values outside this temperature range must be < " << LIQUID_AND_ICE_TREAT_AS_ZERO << " kg/m3.\n" << "Your value at " << abs_t[s] << "K is: " << vmr[s] << " kg/m3."; throw runtime_error(os.str()); } } const int Nparam = 3; if ((model == "user") && (parameters.nelem() == Nparam)) // -------------------- { MPM93WaterDropletAbs(pxsec, parameters[0], // scaling factror parameters[1], // scaling factror parameters[2], // scaling factror model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "MPM93 liquid water cloud absorption model " << name << " requires\n" << Nparam << " input parameter for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "MPM93 liquid water cloud absorption model " << name << " running with \n" << "the parameter for model " << model << ".\n"; MPM93WaterDropletAbs(pxsec, 0.000, // scaling factror 0.000, // scaling factror 0.000, // scaling factror model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: MPM93 liquid water cloud absorption model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 4.\n"; throw runtime_error(os.str()); } } // ============= cloud and fog absorption from ELL07 ================================ else if ("liquidcloud-ELL07" == name) { // Suspended water droplet absorption parameterization from ELL07 model // W. J. Ellison // "Permittivity of Pure Water, at Standard Atmospheric Pressure, over the // Frequency Range 0-25 THz and Temperature Range 0-100C" // J. Phys. Chem. Ref. Data, Vol. 36, No. 1, 2007 // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // model : [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // // liquid water droplet parameters: // suspended water droplet density range: 0-5 g/m³ // // valid atmospheric condition: // temperature : 210 to 373 K // for (Index s = 0; s < f_grid.nelem(); ++s) { if (f_grid[s] > 25e12) { ostringstream os; os << "Liquid cloud absorption model ELL07 only valid at\n" "frequencies up to 25THz. Yours are above."; throw runtime_error(os.str()); } } for (Index s = 0; s < abs_t.nelem(); ++s) { if ((abs_t[s] < 210. || abs_t[s] > 373.) && abs(vmr[s]) > LIQUID_AND_ICE_TREAT_AS_ZERO) { ostringstream os; os << "Liquid cloud absorption model ELL07 only valid at\n" << "temperatures between 210 and 373K.\n" << "LWC values outside this temperature range must be < " << LIQUID_AND_ICE_TREAT_AS_ZERO << " kg/m3.\n" << "Your value at " << abs_t[s] << "K is: " << vmr[s] << " kg/m3."; throw runtime_error(os.str()); } } if ((model == "ELL07") && (parameters.nelem() == 0)) // -------------------- { ELL07WaterDropletAbs(pxsec, model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "ELL07") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: ELL07 liquid water cloud absorption model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 4."; throw runtime_error(os.str()); } else { ostringstream os; os << "ERROR: ELL07 liquid water cloud absorption model " << name << " has no model " << model; throw runtime_error(os.str()); } } // ============= ice particle absorption from MPM93 =================================== else if ("icecloud-MPM93" == name) { // Ice particle absorption parameterization from MPM93 model // H. J. Liebe and G. A. Hufford and M. G. Cotton, // "Propagation modeling of moist air and suspended water/ice // particles at frequencies below 1000 GHz", // AGARD 52nd Specialists Meeting of the Electromagnetic Wave // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21 // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : [1] // parameters[1] : [1] // parameters[2] : [1] // model : [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // // ice crystal parameters: // suspended water droplet density range: 0-10 g/m³ // specific droplet weight value: 1 g/cm³ // // valid atmospheric condition: // temperature : 233 to 323 K // relative humidity: 1 to 100 % // for (Index s = 0; s < f_grid.nelem(); ++s) { if (f_grid[s] > 1e12) { ostringstream os; os << "Ice cloud absorption model MPM93 only valid at\n" "frequencies up to 1THz. Yours are above."; throw runtime_error(os.str()); } } const int Nparam = 3; if ((model == "user") && (parameters.nelem() == Nparam)) // --------------------- { MPM93IceCrystalAbs(pxsec, parameters[0], // scaling factror parameters[1], // scaling factror parameters[2], // scaling factror model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // ---------------- { ostringstream os; os << "MPM93 ice water cloud absorption model " << name << " requires \n" << Nparam << " input parameter for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { MPM93IceCrystalAbs(pxsec, 0.000, // scaling factror 0.000, // scaling factror 0.000, // scaling factror model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: MPM93 ice water cloud absorption model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 4.\n"; throw runtime_error(os.str()); } } // ============= rain extinction from MPM93 =========================================== else if ("rain-MPM93" == name) { // Rain extinction parameterization from MPM93 model, described in // H. J. Liebe, // "MPM - An Atmospheric Millimeter-Wave Propagation Model", // Int. J. Infrared and Millimeter Waves, vol. 10(6), // pp. 631-650, 1989 // and based on // Olsen, R.L., D.V. Rogers, and D. B. Hodge, "The aR^b relation in the // calculation of rain attenuation", IEEE Trans. Antennas Propagat., // vol. AP-26, pp. 318-329, 1978. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : [1] // parameters[1] : [1] // parameters[2] : [1] // model : [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [kg/m2/s] // // rain parameters: // rain rate range: 0-150 mm/h (=0-0.42 kg/m2/s) // // valid atmospheric condition: // temperature : (preferably above 273 K...) // for (Index s = 0; s < f_grid.nelem(); ++s) { if (f_grid[s] > 1e12) { ostringstream os; os << "Rain absorption model MPM93 only valid at\n" "frequencies up to 1THz. Yours is above."; throw runtime_error(os.str()); } } const int Nparam = 3; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "MPM93 rain extinction model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM93RainExt(pxsec, parameters[0], // scaling factor parameters[1], // scaling factor parameters[2], // scaling factor model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "MPM93 rain extinction model " << name << " requires \n" << Nparam << " input parameter for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "MPM93 rain extinction model " << name << " running with \n" << "the parameter for model " << model << ".\n"; MPM93RainExt(pxsec, 0.000, // scaling factor 0.000, // scaling factor 0.000, // scaling factor model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: MPM93 rain extinction model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 4.\n"; throw runtime_error(os.str()); } } else // ----------------------------------------------------------------------- { // none of the continuum or full model tags were selected -> error message. ostringstream os; os << "ERROR: Continuum/ full model tag `" << name << "' not yet implemented in arts!"; throw runtime_error(os.str()); } // We have to divide the result from the internal continuum model by // the number density n to convert it from pseudo cross section to a // true cross section. // Boltzmann constant extern const Numeric BOLTZMAN_CONST; // Loop all pressures: for (Index i = 0; i < abs_p.nelem(); ++i) { const Numeric p_i = abs_p[i]; const Numeric t_i = abs_t[i]; // Calculate total number density from pressure and temperature. // n = n0*T0/p0 * p/T or n = p/kB/t, ideal gas law const Numeric n = p_i / BOLTZMAN_CONST / t_i; // We add to the output variable xsec here, previous content is // not overwritten! pxsec(joker, i) /= n; xsec(joker, i) += pxsec(joker, i); } } // ################################################################################# /** An auxiliary functions that checks if a given continuum model is listed in species_data.cc. This is just in order to verify that this really represents a valid continuum model. The given name should be something like 'H2O-ContStandardSelf'. The function simply checks if there is a species H2O with an isotopologue ContStandardSelf. For user-friendliness, the function also compiles a list of allowed continuum models and gives this as an error message if the model is not found. The function has no return value, since, if the name does not match a valid model an error is thrown anyway. \param name The name of the continuum model to check. \throw runtime_error The model does not exist. \author Stefan Buehler \date 2001-03-12 */ void check_continuum_model(const String &name) { // The species lookup data: using global_data::species_data; // For the list of valid continuum models: ArrayOfString valid_models; bool found = false; // Loop all species: for (Array<SpeciesRecord>::const_iterator i = species_data.begin(); i < species_data.end(); ++i) { String specnam = i->Name(); // Loop all isotopologues: for (Array<IsotopologueRecord>::const_iterator j = i->Isotopologue().begin(); j < i->Isotopologue().end(); ++j) { String isonam = j->Name(); // The specified name consists of a species part and an // isotopologue part, e.g., H2O-ContStandardSelf. We need to // construct a similar String from the species lookup data // by concatenating species name and isotopologue name. String fullnam = specnam + "-" + isonam; // cout << fullnam << "\n"; // See if this is a continuum tag, so that we can add it to // the list: if (j->isContinuum()) { valid_models.push_back(fullnam); } if (name == fullnam) { found = true; } } } // ---------------------------------------------------------------------- // Have we found it? if (!found) { ostringstream os; os << "The String `" << name << "' matches none of the known\n" << "continuum models. Known continuum models are:"; for (ArrayOfString::const_iterator i = valid_models.begin(); i < valid_models.end(); ++i) { os << "\n" << *i; } throw runtime_error(os.str()); } } // // // ################################################################################# // ############################# f2c code implementation ########################### // ################################################################################# // // // ------------------- begin of f2c.h file -------------------------------- // /* f2c.h -- Standard Fortran to C header file */ #ifndef F2C_INCLUDE #define F2C_INCLUDE typedef long int integer; typedef unsigned long int uinteger; typedef char *address; typedef short int shortint; typedef float real_t; typedef double doublereal; typedef struct { real_t r, i; } complex_t; typedef struct { doublereal r, i; } doublecomplex; typedef long int logical; typedef short int shortlogical; typedef char logical1; typedef char integer1; #ifdef INTEGER_STAR_8 /* Adjust for integer*8. */ typedef long long longint; /* system-dependent */ typedef unsigned long long ulongint; /* system-dependent */ #define qbit_clear(a, b) ((a) & ~((ulongint)1 << (b))) #define qbit_set(a, b) ((a) | ((ulongint)1 << (b))) #endif #define TRUE_ (1) #define FALSE_ (0) /* Extern is for use with -E */ #ifndef Extern #define Extern extern #endif /* I/O stuff */ #ifdef f2c_i2 /* for -i2 */ typedef short flag; typedef short ftnlen; typedef short ftnint; #else typedef long int flag; typedef long int ftnlen; typedef long int ftnint; #endif /*external read, write*/ typedef struct { flag cierr; ftnint ciunit; flag ciend; char *cifmt; ftnint cirec; } cilist; /*internal read, write*/ typedef struct { flag icierr; char *iciunit; flag iciend; char *icifmt; ftnint icirlen; ftnint icirnum; } icilist; /*open*/ typedef struct { flag oerr; ftnint ounit; char *ofnm; ftnlen ofnmlen; char *osta; char *oacc; char *ofm; ftnint orl; char *oblnk; } olist; /*close*/ typedef struct { flag cerr; ftnint cunit; char *csta; } cllist; /*rewind, backspace, endfile*/ typedef struct { flag aerr; ftnint aunit; } alist; /* inquire */ typedef struct { flag inerr; ftnint inunit; char *infile; ftnlen infilen; ftnint *inex; /*parameters in standard's order*/ ftnint *inopen; ftnint *innum; ftnint *innamed; char *inname; ftnlen innamlen; char *inacc; ftnlen inacclen; char *inseq; ftnlen inseqlen; char *indir; ftnlen indirlen; char *infmt; ftnlen infmtlen; char *inform; ftnint informlen; char *inunf; ftnlen inunflen; ftnint *inrecl; ftnint *innrec; char *inblank; ftnlen inblanklen; } inlist; #define VOID void union Multitype { /* for multiple entry points */ integer1 g; shortint h; integer i; /* longint j; */ real_t r; doublereal d; complex_t c; doublecomplex z; }; typedef union Multitype Multitype; /*typedef long int Long;*/ /* No longer used; formerly in Namelist */ struct Vardesc { /* for Namelist */ char *name; char *addr; ftnlen *dims; int type; }; typedef struct Vardesc Vardesc; struct Namelist { char *name; Vardesc **vars; int nvars; }; typedef struct Namelist Namelist; #define abs(x) ((x) >= 0 ? (x) : -(x)) #define dabs(x) (doublereal) abs(x) #define min(a, b) ((a) <= (b) ? (a) : (b)) #define max(a, b) ((a) >= (b) ? (a) : (b)) #define dmin(a, b) (doublereal) min(a, b) #define dmax(a, b) (doublereal) max(a, b) #define bit_test(a, b) ((a) >> (b)&1) #define bit_clear(a, b) ((a) & ~((uinteger)1 << (b))) #define bit_set(a, b) ((a) | ((uinteger)1 << (b))) /* procedure parameter types for -A and -C++ */ #define F2C_proc_par_types 1 #ifdef __cplusplus typedef int /* Unknown procedure type */ (*U_fp)(...); typedef shortint (*J_fp)(...); typedef integer (*I_fp)(...); typedef real_t (*R_fp)(...); typedef doublereal (*D_fp)(...), (*E_fp)(...); typedef /* Complex */ VOID (*C_fp)(...); typedef /* Double Complex */ VOID (*Z_fp)(...); typedef logical (*L_fp)(...); typedef shortlogical (*K_fp)(...); typedef /* Character */ VOID (*H_fp)(...); typedef /* Subroutine */ int (*S_fp)(...); #else typedef int /* Unknown procedure type */ (*U_fp)(); typedef shortint (*J_fp)(); typedef integer (*I_fp)(); typedef real_t (*R_fp)(); typedef doublereal (*D_fp)(), (*E_fp)(); typedef /* Complex */ VOID (*C_fp)(); typedef /* Double Complex */ VOID (*Z_fp)(); typedef logical (*L_fp)(); typedef shortlogical (*K_fp)(); typedef /* Character */ VOID (*H_fp)(); typedef /* Subroutine */ int (*S_fp)(); #endif /* E_fp is for real functions when -R is not specified */ typedef VOID C_f; /* complex function */ typedef VOID H_f; /* character function */ typedef VOID Z_f; /* double complex function */ typedef doublereal E_f; /* real function with -R not specified */ /* undef any lower-case symbols that your C compiler predefines, e.g.: */ #ifndef Skip_f2c_Undefs #undef cray #undef gcos #undef mc68010 #undef mc68020 #undef mips #undef pdp11 #undef sgi #undef sparc #undef sun #undef sun2 #undef sun3 #undef sun4 #undef u370 #undef u3b #undef u3b2 #undef u3b5 #undef unix #undef vax #endif #endif // ------------------- end of f2c.h file -------------------------------- // ------------------ begin of Borysow N2N2 F77 code -------------------- /* n2n2tks.f -- translated by f2c (version 20010821). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ /* Common Block Declarations */ struct s_blockin_ { double temp, fnumin, fnumax, dnu; } blockin_; #define blockin_1 blockin_ struct s_app3a_ { double slit, dx, wnrmax3; } app3a_; #define app3a_1 app3a_ struct s_app3b_ { int nsri, ns, nsriup; } app3b_; #define app3b_1 app3b_ struct s_rsilo_ { double rsilo[201]; } rsilo_; #define rsilo_1 rsilo_ struct s_bou43_ { int initb; } bou43_; #define bou43_1 bou43_ union u_bba_ { struct s_m_1 { double omeg[201], rsi[201], rsigg[201], alfa; } m_1; struct s_m_2 { double omeg[201], rsi[201], rsigg[201], beta; } m_2; } bba_; #define bba_1 (bba_.m_1) #define bba_2 (bba_.m_2) struct s_bbc_ { int nsol; } bbc_; #define bbc_1 bbc_ struct s_bf_ { double g0bf, delbf, om0; } bf_; #define bf_1 bf_ struct like_1_ { int like; char lgas[5]; }; #define like_1 (*(struct like_1_ *)&like_) struct s_k1k0_ { int ik1k0; } k1k0_; #define k1k0_1 k1k0_ struct s_bbb_ { int ibound; } bbb_; #define bbb_1 bbb_ struct energ_1_ { double eb[246] /* was [41][6] */; int niv[6]; }; #define energ_1 (*(struct energ_1_ *)&energ_) struct s_dimer_ { int nlines; } dimer_; #define dimer_1 dimer_ struct n2part_1_ { double q1, wn2[2], b01, d01; int jrange2; }; struct n2part_2_ { double q, wn2[2], b0, d0; int jrange1; }; #define n2part_1 (*(struct n2part_1_ *)&n2part_) #define n2part_2 (*(struct n2part_2_ *)&n2part_) union u_bl3_ { struct s_m_1 { double rsi[401]; } m_1; struct s_m_2 { double rsibb[401]; } m_2; } bl3_; #define bl3_1 (bl3_.m_1) #define bl3_2 (bl3_.m_2) union u_bbbb_ { struct s_m_1 { int idelv, iv, ivp, idell, il, ilp; } m_1; struct s_m_2 { int ldelvi, ivi, ivip, ldelel, ll, llp; } m_2; } bbbb_; #define bbbb_1 (bbbb_.m_1) #define bbbb_2 (bbbb_.m_2) /* Initialized data */ struct s_energe_ { double e_1[246]; int e_2[6]; } energ_ = {{-54.99996, -54.86228, -54.58697, -54.17413, -53.62391, -52.93648, -52.11211, -51.15108, -50.05374, -48.82049, -47.45179, -45.94815, -44.31014, -42.53841, -40.63365, -38.59665, -36.42824, -34.12937, -31.70105, -29.14439, -26.46061, -23.65103, -20.71709, -17.66041, -14.48271, -11.18593, -7.77221, -4.24393, -.60374, 3.14531, 6.99978, 10.95566, 15.00818, 19.15136, 23.37787, 27.67681, 32.03237, 36.42278, 40.83668, 45.29436, 49.79246, -31.89437, -31.77215, -31.52779, -31.16143, -30.67334, -30.06382, -29.33328, -28.48222, -27.51123, -26.42099, -25.21229, -23.88603, -22.44322, -20.88502, -19.21272, -17.42777, -15.53182, -13.52669, -11.41446, -9.1975, -6.87848, -4.46049, -1.94714, .65736, 3.34788, 6.11816, 8.95978, 11.8613, 14.80383, 17.75924, 20.71774, 23.71589, 0., 0., 0., 0., 0., 0., 0., 0., 0., -16.05019, -15.9464, -15.73896, -15.42815, -15.0144, -14.4983, -13.88057, -13.16213, -12.34407, -11.42771, -10.41455, -9.30639, -8.10531, -6.81376, -5.43459, -3.97121, -2.42768, -.80899, .87859, 2.62689, 4.42334, 6.24733, 8.06983, 9.90464, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -6.49343, -6.41131, -6.24732, -6.00202, -5.67623, -5.27111, -4.78813, -4.22919, -3.59665, -2.89345, -2.12325, -1.29074, -.40202, .5345, 1.50455, 2.48212, 3.46665, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -1.76583, -1.70887, -1.59552, -1.427, -1.20523, -.93302, -.61434, -.25504, .13641, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -.17133, -.14341, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}, {41, 32, 24, 17, 9, 2}}; struct s_n2part_ { double fill_1[1]; double e_2[4]; int fill_3[1]; } n2part_ = {{0}, {2., 1., 1.98957, 5.8e-6}, {0}}; struct s_like_ { int fill_1[1]; char e_2[5]; } like_ = {{0}, "N2N2"}; /* Table of constant values */ // FIXME static integer c__9 = 9; // FIXME static integer c__1 = 1; // FIXME static integer c__5 = 5; static int cs__1 = 1; static int cs__0 = 0; static double c_b24 = 2.9723; static double c_b25 = -.99569; static double c_b26 = .09464; static double c_b27 = 1.2962e-12; static double c_b28 = -.13048; static double c_b29 = -.03128; static double c_b30 = 3.7969e-14; static double c_b31 = 1.03681; static double c_b32 = -.14336; static int cs__2 = 2; static int cs__3 = 3; static double c_b43 = .180926; static double c_b44 = -1.69153; static double c_b45 = .18605; static double c_b46 = .3; static double c_b47 = 0.; static double c_b49 = 6.6017e-16; static double c_b50 = 2.59982; static double c_b51 = -.31831; static double c_b52 = 1.2481e-12; static double c_b53 = -.57028; static double c_b54 = .05983; static double c_b55 = 5.2681e-13; static double c_b56 = -.24719; static double c_b57 = .00519; static double c_b58 = 2.7518e15; static double c_b59 = -25.38969; static double c_b60 = 2.46542; static int cs__4 = 4; static int cs__5 = 5; // FIXME static integer c__2 = 2; static double c_b78 = .0825299; static double c_b79 = -1.25562; static double c_b80 = .12981; static double c_b84 = 3.6611e-15; static double c_b85 = 1.47688; static double c_b86 = -.16537; static double c_b87 = 6.1264e-10; static double c_b88 = -2.25011; static double c_b89 = .15289; static double c_b90 = 7.982e-10; static double c_b91 = -2.76152; static double c_b92 = .21847; static double c_b93 = 5.2868e-22; static double c_b94 = 7.66253; static double c_b95 = -.77527; static double c_b112 = 119.261; static double c_b113 = -3.78587; static double c_b114 = .34024; static double c_b115 = 9.3777e-12; static double c_b116 = -.66548; static double c_b117 = .0033; static double c_b118 = 3.0395e-13; static double c_b119 = .24728; static double c_b120 = -.06607; static double c_b183 = 1e-6; static double c_b186 = 1.5; #define temp (blockin_1.temp) #define fnumin (blockin_1.fnumin) #define fnumax (blockin_1.fnumax) #define dnu (blockin_1.dnu) #define slit (app3a_1.slit) #define dx (app3a_1.dx) #define rsilo (rsilo_1.rsilo) #define omeg (bba_1.omeg) #define rsi (bba_1.rsi) #define rsigg (bba_1.rsigg) #define nsol (bbc_1.nsol) #define like (like_1.like) #define ik1k0 (k1k0_1.ik1k0) #define ibound (bbb_1.ibound) /* TKS ****** SUBROUTINE N2N2TKS(T, F) ***************************************/ Numeric n2n2tks_(double t, double f) { /* System generated locals */ int s__1; double ret_val; /* Local variables */ //double hexa[10], quad[10]; double freq[10], e; int i__; double s, x, t1, t2, t3, t4; int ij, nf, jj; double rslow1, si; int nr; double ss[1], tt[2]; extern /* Subroutine */ int bound32_(double *, double *, int *), bound54_(double *, double *, int *); //double tksabs[5]; extern /* Subroutine */ int spline_(int *, int *, int *, double *, double *, double *, double *, double *, double *, int *, double *); double abscoef[10]; //double dtrans[10]; extern /* Subroutine */ int addspec_(double *, double *, double *, double *, double *, double *, double *, int *, double *, double *, int *, int *, int *, int *, int *, int *); double eps, alfatot[10]; extern /* Subroutine */ int partsum_(double *); /* ========================================= */ /* Copyright (C) Aleksandra Borysow, 1987) */ /* ==================================================================== */ /* PROGRAM PREPARED BY ALEKSANDRA BORYSOW (APRIL'1987) */ /* (UNIVERSITY OF TEXAS AT AUSTIN, PHYSICS DEPARTMENT) */ /* ORIGINAL VERSION: WRITTEN ON CYBER */ /* PROGRAM GENERATES N2-N2 COLLISION-INDUCED SPECTRA AT */ /* TEMPERATURES BETWEEN 50 TO 300 K. */ /* CIA SPECTRA MODELED AFTER PAPER (*) */ /* ALEKSANDRA BORYSOW AND LOTHAR FROMMHOLD, */ /* ASTROPHYSICAL JOURNAL, VOL. 311, PAGES 1043-1057, (1986) */ /* REVISED BY GLENN ORTON (1989) - TO WORK ON SUN WORKSTATIONS */ /* AND ON THE VAX MACHINES (FORTRAN-77) */ /* PASSES STANDARD TEST ON SUN, AT 200K (JULY 1992) */ /* ==================================================================== */ /* ALSO IN REVISION: DOUBLE PRECISION FOR ALL F.P. VARIABLES */ /* ==================================================================== */ /* HISTORY: */ /* 2001-02-28 THOMAS KUHN: */ /* CHANGE OF LINES */ /* RSILO(I)=DLOG(RSI(I)*1.E80) */ /* TO */ /* RSILO(I)=(DLOG(RSI(I))+80.0D0*DLOG(10.0D0)) */ /* BECAUSE OF OVERFLOW PROBLEMS. */ /* COSMETICS FOR THE CODE TO BE FASTER READABLE. */ /* CHANGE OF OUTPUT FILE NAME. */ /* CHANGE OF OUTPUT FILE CONTENT */ /* ==================================================================== */ /* TKS* IMPLICIT REAL*8 (A-H,O-Z) */ /* TKS INPUT/OUTPUT VARIABLES */ /* REAL T, F */ //ret_val = 0.; /* TEMP = TEMPERATURE IN KELVIN, SHOULD BE BETWEEN 50. AND 300. */ /* FNUMIN = LOWEST FREQUENCY IN CM-1, FOR LISTING OF ALPHA(FNU) */ /* FNUMAX = HIGHEST FREQUENCY IN CM-1, FOR LISTING OF ALPHA(FNU) */ /* LINE SHAPE MODELLING WILL BE MOST ACCURATE WITHIN RANGE OF */ /* R-T SPECTRAL INTENSITIES AS 1:100. */ /* DNU = FREQUENCY INCREMENT IN CM-1. DNU SHOULD BE CHOSEN SO */ /* THAT NOT MORE THAN 10 STEPS ARE NEEDED TO GO FROM */ /* FNUMIN TO FNUMAX (ELSE ARRAY DIMENSIONS OF FREQ,ABSCOEF */ /* MUST BE ADJUSTED IN ADDEM). */ /* USER: */ /* ----- */ /* EDIT ONLY HERE: TEMP (K), MIN. FREQ. (CM^-1)= FNUMIN, */ /* MAX. FREQ. = FNUMAX, STEP = DNU, SLITWIDTH (CM^-1)=SLIT */ /* (SLIT=4.3 IS EQUIVALENT TO THAT OF VOYAGER SPECTRA, ONLY BOUND BOUND */ /* SPECTRA ARE CONVOLUTED WITH THIS SLITWIDTH, THE FREE FREE SPECTRA */ /* ARE FAR TOO BROAD FOR THE SLITWIDTH FUNCTION TO MATTER, */ /* LEAVE LIKE = 1 (FOR LIKE PAIRS, AS N2-N2) */ /* THE PROGRAM WILL ASSUME EQUILIBRIUM N2, */ /* ALLOWED TEMPERATURE RANGE: 50-300K (DO NOT EXTEND IT BEYOND THESE LIMITS!) */ /* IF QUESTIONS: CONTACT ABORYSOW@NBI.DK */ /* TKS* NF=INT((FNUMAX-FNUMIN)/DNU+0.5)+1 */ /* TKS* IF (NF.GT.10) NF=10 */ /* TKS* FNUMAX=FNUMIN+FLOAT(NF-1)*DNU */ /* TKS INPUT TEMPERATURE (K) CHECK OF RANGE */ if (t < 50. || t > 300.) { ostringstream os; os << "out of T range ( 50<T<300)! return without calc.!" << "\n"; throw runtime_error(os.str()); goto L999; } temp = t; /* *********************** INPUT DATA FROM USER *********************** */ /* FNUMIN = MINIMUM FREQENCY [CM^-1] */ fnumin = f / 29979245800.; /* FNUMAX = MAXIMUM FREQENCY [CM^-1] */ fnumax = fnumin; /* ONLY ONE FREQUENCY PER CALL */ nf = 1; /* DEFAULT VALUE OF FREQUENCY STEP [CM^-1] */ dnu = 10.; /* DEFAULT VALUE */ like = 1; /* SLIT = SLITWIDTH [CM^-1] */ /* SLIT=4.3 IS EQUIVALENT TO THAT OF VOYAGER SPECTRA, ONLY BOUND BOUND */ /* SPECTRA ARE CONVOLUTED WITH THIS SLITWIDTH, THE FREE FREE SPECTRA */ /* ARE FAR TOO BROAD FOR THE SLITWIDTH FUNCTION TO MATTER. */ slit = 4.3; /* ******************************************************************** */ /* TKS* WRITE (6,14) LGAS,TEMP,FNUMIN,FNUMAX,DNU,NF-1 */ /* TKS*14 FORMAT(' ABSORPTION SPECTRA OF ',A5,' AT',F8.1,' K'/ */ /* TKS* $ 1X,43(1H=),/ */ /* TKS* 1' MIN.FREQ.=',F8.1,' CM-1',10X,'MAX.FREQ.=',F8.1,' CM-1',10X, */ /* TKS* 2'FREQ.INCREMENT=',F8.2,' CM-1',5X,'IN',I5,' STEPS'//) */ partsum_(&temp); /* THE N2-N2 SPECTRA FOR 50-300K */ /* ================================ */ x = log(temp); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { /* FREQ(I)=FNUMIN+FLOAT(I-1)*DNU */ freq[i__ - 1] = fnumin; alfatot[i__ - 1] = 0.; /* L10: */ abscoef[i__ - 1] = 0.; } /* ==================================================================== */ jj = 1; L442: /* L1023: */ ++jj; if (jj == 42) { goto L444; } goto L442; /* EB(JJ,IV) JJ-ROTATIONAL LEVEL "L", IV- VIBRATIONAL LEVEL "V"; */ L444: /* ==================================================================== */ /* QUADRUPOLAR INDUCTION: (50-300K) LAMBDA1,LAMBDA2,LAMBDA,L=2023&0223 */ /* ------------------------------------------------------------------- */ eps = 1e-5; tt[0] = 10.; bound32_(&temp, rsi, &nsol); ij = 0; rslow1 = 0.; s__1 = nsol; for (i__ = 1; i__ <= s__1; ++i__) { ++ij; /* MOD CAN BE ONLY 0 OR 1 OR 2 */ if (ij % 3 == 0) { rslow1 = 1.5e-60; } if (ij % 3 == 1) { rslow1 = 1.7e-60; } if (ij % 3 == 2) { rslow1 = 1.6e-60; } if (rsi[i__ - 1] < 1e-60) { rsi[i__ - 1] = rslow1; } /* TKS* RSILO(I)=DLOG(RSI(I)*1.D80) */ rsilo[i__ - 1] = log(rsi[i__ - 1]) + log(10.) * 80.; omeg[i__ - 1] = (double)(i__ - 1) * dx; /* L88: */ } /* L9991: */ spline_(&nsol, &cs__1, &cs__0, &eps, omeg, rsilo, tt, ss, &si, &nr, rsigg); ik1k0 = 1; ibound = 1; /* B-C LINESHAPE HERE */ /* THESE VALUES (S,T1,T2) REPLACE VALUES GIVEN IN PAPER (*): */ /* PUBLISHED IN AN ERRATUM, ASTROPHYSICAL JOURNAL, VOL.320, P.437 */ /* (1987) */ s = c_b24 * exp((c_b26 * x + c_b25) * x); t1 = c_b27 * exp((c_b29 * x + c_b28) * x); t2 = c_b30 * exp((c_b32 * x + c_b31) * x); e = 0.; t3 = 0.; t4 = 0.; addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &like, &cs__2, &cs__0, &cs__2, &cs__3); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { //quad[i__ - 1] = abscoef[i__ - 1]; /* L20: */ alfatot[i__ - 1] = abscoef[i__ - 1] + alfatot[i__ - 1]; } /* ==================================================================== */ /* HEXADECAPOLE COMPONENTS: LAMBDA1,LAMBDA2,LAMBDA,L=4045&0445 */ /* ----------------------------------------------------------- */ bound54_(&temp, rsi, &nsol); ij = 0; s__1 = nsol; for (i__ = 1; i__ <= s__1; ++i__) { ++ij; /* MOD CAN BE ONLY 0 OR 1 OR 2 */ if (ij % 3 == 0) { rslow1 = 1.5e-60; } if (ij % 3 == 1) { rslow1 = 1.7e-60; } if (ij % 3 == 2) { rslow1 = 1.6e-60; } if (rsi[i__ - 1] < 1e-60) { rsi[i__ - 1] = rslow1; } /* TKS RSILO(I)=DLOG(RSI(I)*1.E80) */ rsilo[i__ - 1] = log(rsi[i__ - 1]) + log(10.) * 80.; /* L111: */ omeg[i__ - 1] = (double)(i__ - 1) * dx; } spline_(&nsol, &cs__1, &cs__0, &eps, omeg, rsilo, tt, ss, &si, &nr, rsigg); /* --------------------------- */ /* TEMPERATURES 50-140K */ /* --------------------------- */ if (temp >= 140.) { goto L333; } s = c_b43 * exp((c_b45 * x + c_b44) * x); e = c_b46 * exp((c_b47 * x + c_b47) * x); t1 = c_b49 * exp((c_b51 * x + c_b50) * x); t2 = c_b52 * exp((c_b54 * x + c_b53) * x); t3 = c_b55 * exp((c_b57 * x + c_b56) * x); t4 = c_b58 * exp((c_b60 * x + c_b59) * x); ik1k0 = 0; ibound = 1; addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &like, &cs__4, &cs__0, &cs__4, &cs__5); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { //hexa[i__ - 1] = abscoef[i__ - 1]; /* s_wsle(&io___25); do_lio(&c__9, &c__1, " T=50-140K: HEXA(", (ftnlen)17); do_lio(&c__2, &c__1, (char *)&i__, (ftnlen)sizeof(int)); do_lio(&c__9, &c__1, ") =", (ftnlen)3); do_lio(&c__5, &c__1, (char *)&abscoef[i__ - 1], (ftnlen)sizeof( double)); e_wsle(); */ /* L50: */ alfatot[i__ - 1] += abscoef[i__ - 1]; } goto L334; /* --------------------------- */ /* TEMPERATURES 140-300K */ /* --------------------------- */ L333: ik1k0 = 0; ibound = 1; s = c_b78 * exp((c_b80 * x + c_b79) * x); e = c_b46 * exp((c_b47 * x + c_b47) * x); t1 = c_b84 * exp((c_b86 * x + c_b85) * x); t2 = c_b87 * exp((c_b89 * x + c_b88) * x); t3 = c_b90 * exp((c_b92 * x + c_b91) * x); t4 = c_b93 * exp((c_b95 * x + c_b94) * x); addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &like, &cs__4, &cs__0, &cs__4, &cs__5); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { //hexa[i__ - 1] = abscoef[i__ - 1]; /* s_wsle(&io___26); do_lio(&c__9, &c__1, " T=140-300K: HEXA(", (ftnlen)18); do_lio(&c__2, &c__1, (char *)&i__, (ftnlen)sizeof(int)); do_lio(&c__9, &c__1, ") =", (ftnlen)3); do_lio(&c__5, &c__1, (char *)&abscoef[i__ - 1], (ftnlen)sizeof( double)); e_wsle(); */ /* L550: */ alfatot[i__ - 1] += abscoef[i__ - 1]; } /* ==================================================================== */ /* DOUBLE TRANSITIONS: LAMBDA1,LAMBDA2,LAMBDA,L=2,2,3,3 */ /* ---------------------------------------------------- */ /* --------------------------- */ /* TEMPERATURES 50-300K */ /* --------------------------- */ L334: ik1k0 = 1; ibound = 0; /* X S=Y(X,1.19261D-58, -3.78587,0.34024) */ s = c_b112 * exp((c_b114 * x + c_b113) * x); t1 = c_b115 * exp((c_b117 * x + c_b116) * x); t2 = c_b118 * exp((c_b120 * x + c_b119) * x); t3 = 0.; t4 = 0.; addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &like, &cs__2, &cs__2, &cs__3, &cs__3); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { //dtrans[i__ - 1] = abscoef[i__ - 1]; /* L650: */ alfatot[i__ - 1] += abscoef[i__ - 1]; } /* ==================================================================== */ /* ANISOTROPIC OVERLAP NEGLECTED (LAMBDA1,LAMBDA2,LAMBDA,L=0212) */ /* SINCE THIS TERM IS EXTREMELY SMALL */ /* ==================================================================== */ /* TKS* PRINT 154, FREQ(1),FREQ(NF),FREQ(2)-FREQ(1),TEMP */ /* TKS* PRINT 156, (ALFATOT(I),I=1,NF) */ /* TKS*154 FORMAT(///' ABSORPTION COEFFICIENT ALPHA(FNU), FROM ',F5.1, */ /* TKS* $' CM-1 TO',F7.1,' CM-1, AT',F6.2,' CM-1 INCREMENTS, AT T=', */ /* TKS* $F7.2,' K, IN UNITS OF CM-1 AMAGAT-2'/) */ /* TKS*156 FORMAT(' ',10D13.5) */ /* TKS* OPEN(UNIT=10, FILE='OUT', STATUS='UNKNOWN') */ /* TKS* WRITE(10, 2929) (FREQ(I), ALFATOT(I), I=1, NF) */ /* TKS*C WRITE(10, 2929) (FREQ(I), QUAD(I), HEXA(I) ALFATOT(I), I=1, NF) */ /* TKS*2929 FORMAT(F10.3, E12.4) */ /* TKS* STOP */ /* TKS FILL OUTPUT VARIABLE */ // tksabs[0] = quad[0]; // tksabs[1] = hexa[0]; // tksabs[2] = dtrans[0]; // tksabs[3] = alfatot[0]; ret_val = alfatot[0]; /* TKS print*,'QUAD(1),HEXA(1),DTRANS(1)=',QUAD(1),HEXA(1),DTRANS(1) */ L999: return ret_val; } /* n2n2tks_ */ #undef temp #undef fnumin #undef fnumax #undef dnu #undef slit #undef dx #undef rsilo #undef omeg #undef rsi #undef rsigg #undef nsol #undef like #undef ik1k0 #undef ibound #define wnrmax3 (app3a_1.wnrmax3) #define rsilo (rsilo_1.rsilo) #define omeg (bba_2.omeg) #define rsigg (bba_2.rsigg) #define beta (bba_2.beta) #define nsol (bbc_1.nsol) #define ibound (bbb_1.ibound) #define q1 (n2part_1.q1) #define wn2 (n2part_1.wn2) #define b01 (n2part_1.b01) #define d01 (n2part_1.d01) #define jrange2 (n2part_1.jrange2) /* ########################################################################## */ /* Subroutine */ int addspec_(double *g0, double *ep, double *tau1, double *tau2, double *tau5, double *tau6, double *temp, int *nf, double *freq, double *abscoef, int * /* mp */, int *like, int *lambda1, int *lambda2, int *lambda, int * /* lvalue */) { /* Initialized data */ static double closchm = 2.68675484e19; static double boltzwn = .6950304; static double hbar = 1.054588757e-27; static double pi = 3.1415926535898; static double clight = 2.997925e10; /* Format strings */ /* static char fmt_20[] = "(/\002 LAMBDA1,LAMBDA2, LAMBDA,LVALUE=\002,2i3,2" "x,2i3,\002 COMPONENT.\002/15x,\002LINE SHAPE PARAMETERS:\002,6d1" "2.3,5x,\002G(0)=\002,d12.3/)"; */ /* System generated locals */ int s__1, s__2, s__3, s__4, s__5, s__6; double d__1, d__2; /* Builtin functions */ /* integer s_wsfe(cilist *), do_fio(integer *, char *, ftnlen), e_wsfe(void), s_wsle(cilist *), do_lio(integer *, integer *, char *, ftnlen), e_wsle(void); */ /* Local variables */ int list, jsum = 0; extern double bgama_( double *, double *, double *, double *, double *, double *, double *); int i__, j; double calib, p; int i1, j1, i2, j2; double p1, p2, omega1, omega2; int ip, jp, iq; double twopic; int jplusl, ip1, jp1, ip2, jp2; double fac, cgs, xbg, wkf, frq, wki; extern double specfct_( double *, double *, double *, double *, int *, d
15874  const Numeric low_lim_den =
15875  -LIQUID_AND_ICE_TREAT_AS_ZERO; // lower limit of suspended droplet particle density vector [kg/m3]
15876  const Numeric high_lim_den =
15877  1.00e-3; // lower limit of suspended ice particle density vector [kg/m³]
15878 
15879  const Index n_p = abs_p.nelem(); // Number of pressure levels
15880  const Index n_f = f_grid.nelem(); // Number of frequencies
15881 
15882  // Check that dimensions of abs_p, abs_t, and vmr agree:
15883  assert(n_p == abs_t.nelem());
15884  assert(n_p == vmr.nelem());
15885 
15886  // Check that dimensions of pxsec are consistent with n_f
15887  // and n_p. It should be [n_f,n_p]:
15888  assert(n_f == pxsec.nrows());
15889  assert(n_p == pxsec.ncols());
15890 
15891  // Loop pressure/temperature:
15892  for (Index i = 0; i < n_p; ++i) {
15893  // Check limits of suspended water droplet density ("vmr") [kg/m³]
15894  if ((vmr[i] < low_lim_den) || (vmr[i] > high_lim_den)) {
15895  ostringstream os;
15896  os << "ERROR in MPM93IceCrystalAbs:\n"
15897  << "Valid range is " << low_lim_den << "-" << low_lim_den << "kg/m3,\n"
15898  << "but found a value = " << vmr[i];
15899  throw runtime_error(os.str());
15900  }
15901 
15902  else if (vmr[i] < LIQUID_AND_ICE_TREAT_AS_ZERO) {
15903  pxsec(joker, i) = 0;
15904  }
15905 
15906  else {
15907  // relative inverse temperature [1]
15908  Numeric theta = 300.000 / abs_t[i];
15909  // inverse frequency T-dependency function [Hz]
15910  Numeric ai = CA * (62.000 * theta - 11.600) *
15911  exp(-22.100 * (theta - 1.000)) * 1.000e-4;
15912  // linear frequency T-dependency function [1/Hz]
15913  Numeric bi = CB * 0.542e-6 *
15914  (-24.17 + (116.79 / theta) +
15915  pow((theta / (theta - (Numeric)0.9927)), (Numeric)2.));
15916 
15917  // Loop frequency:
15918  for (Index s = 0; s < n_f; ++s) {
15919  // real part of the complex permittivity of ice
15920  Numeric Reepsilon = 3.15;
15921  // imaginary part of the complex permittivity of water
15922  Numeric Imepsilon =
15923  ((ai / (f_grid[s] * Hz_to_GHz)) + (bi * (f_grid[s] * Hz_to_GHz)));
15924  // the imaginary part of the complex refractivity of suspended ice particles.
15925  // In MPM93 w is in g/m³ and m is in g/cm³. Because of the units used in arts,
15926  // a factor of 1.000e6 must be multiplied with the ratio (w/m):
15927  // MPM93: (w/m)_MPM93 in (g/m³)/(g/cm³)
15928  // arts: (w/m)_arts in (kg/m³)/(kg/m³)
15929  // =====> (w/m)_MPM93 = 1.0e6 * (w/m)_arts
15930  // the factor of 1.0e6 is included below in pxsec calculation.
15931  Numeric ImNw = 1.500 / m *
15932  (3.000 * Imepsilon /
15933  (pow((Reepsilon + (Numeric)2.000), (Numeric)2.) +
15934  pow(Imepsilon, (Numeric)2.)));
15935  // ice particle absorption cross section [1/m]
15936  // The vmr of H2O will be multiplied at the stage of absorption
15937  // calculation: abs = vmr * pxsec.
15938  // pxsec = abs/vmr [1/m] but MPM93 is in [dB/km] --> conversion necessary
15939  pxsec(s, i) += CC * 1.000e6 * dB_km_to_1_m * 0.1820 *
15940  (f_grid[s] * Hz_to_GHz) * ImNw;
15941  }
15942  }
15943  }
15944 }
15945 
15946 //
15947 // #################################################################################
15949 
15978  const Numeric CEin, // input parameter
15979  const Numeric CAin, // input parameter
15980  const Numeric CBin, // input parameter
15981  const String &model, // model
15982  ConstVectorView f_grid, // frequency vector
15983  ConstVectorView abs_p, // pressure vector
15984  ConstVectorView abs_t _U_, // temperature vector
15985  ConstVectorView vmr, // rain rate profile [kg/m2/s]
15986  const Verbosity &) {
15987  // --------- STANDARD MODEL PARAMETERS ------------------------------------------------
15988  // standard values for the MPM93 model based on Olsen, R.L.,
15989  // D.V. Rogers, and D. B. Hodge, "The aR^b relation in the
15990  // calculation of rain attenuation", IEEE Trans. Antennas Propagat.,
15991  // vol. AP-26, pp. 318-329, 1978,
15992  const Numeric CE_MPM93 = 1.00000;
15993  const Numeric CA_MPM93 = 1.00000;
15994  const Numeric CB_MPM93 = 1.00000;
15995  // ------------------------------------------------------------------------------------
15996 
15997  // select the parameter set (!!model dominates values!!):
15998  Numeric CE, CA, CB;
15999  if (model == "MPM93") {
16000  CE = CE_MPM93;
16001  CA = CA_MPM93;
16002  CB = CB_MPM93;
16003  } else if (model == "user") {
16004  CE = CEin;
16005  CA = CAin;
16006  CB = CBin;
16007  } else {
16008  ostringstream os;
16009  os << "rain-MPM93: ERROR! Wrong model values given.\n"
16010  << "Valid models are: \"MPM93\" and \"user\"";
16011  throw runtime_error(os.str());
16012  }
16013  // ---------------------------------------------------------------------------------------
16014 
16015  // conversion factor to convert input SI-units [kg/m2/s] to [mm/h]
16016  const Numeric convfac = 3.6e6 / DENSITY_OF_WATER;
16017 
16018  const Numeric low_lim_rr = 0.000; // lower limit of allowed rain rate [mm/h]
16019  const Numeric high_lim_rr =
16020  150.000; // upper limit of allowed rain rate [mm/h]
16021 
16022  const Index n_p = abs_p.nelem(); // Number of pressure levels
16023  const Index n_f = f_grid.nelem(); // Number of frequencies
16024 
16025  // Check that dimensions of abs_p, abs_t, and vmr agree:
16026  assert(n_p == abs_t.nelem());
16027  assert(n_p == vmr.nelem());
16028 
16029  // Check that dimensions of pxsec are consistent with n_f
16030  // and n_p. It should be [n_f,n_p]:
16031  assert(n_f == pxsec.nrows());
16032  assert(n_p == pxsec.ncols());
16033 
16034  // Loop pressure/temperature:
16035  for (Index i = 0; i < n_p; ++i) {
16036  // Extinction by rain is parameterized as:
16037  // ext_rain = a_rain * rr ^ b_rain
16038  // a_rain and b_rain each depend on frequency by power laws:
16039  // a_rain = Ga * freq ^ Ea
16040  // b_rain = Gb * freq ^ Eb
16041  Numeric Ga = 0.;
16042  Numeric Ea = 0.;
16043  Numeric Gb = 0.;
16044  Numeric Eb = 0.;
16045  // FIXME Numeric a_rain;
16046  // FIXME Numeric b_rain;
16047  // FIXME Numeric ext_rain;
16048 
16049  const Numeric vmri = vmr[i] * convfac;
16050 
16051  // Check limits of rain rate ("vmr") [mm/h]
16052  if (vmr[i] == 0.)
16053  pxsec(joker, i) += 0.;
16054 
16055  else if ((vmri >= low_lim_rr) && (vmri < high_lim_rr)) {
16056  // Loop frequency:
16057  for (Index s = 0; s < n_f; ++s) {
16058  // for rain rate < 25 mm/h, take parameters from Olsen et al.'s
16059  // own power law fit to their Laws-Parsons-Low data;
16060  // for rain rate > 25 mm/h, take C. Melsheimer's power law fit
16061  // to Olsen et al.'s Laws-Parson-High data
16062  if (vmri <= 25) {
16063  // power law coeff. Ga and exponent Ea for a, piecewise:
16064  if (f_grid[s] <= 2.9e9) {
16065  Ga = 6.39e-5;
16066  Ea = 2.03;
16067  } else if (f_grid[s] <= 54.0e9) {
16068  Ga = 4.21e-5;
16069  Ea = 2.42;
16070  } else if (f_grid[s] <= 180e9) {
16071  Ga = 4.09e-2;
16072  Ea = 0.699;
16073  } else if (f_grid[s] <= 1000e9) {
16074  Ga = 3.38;
16075  Ea = -0.151;
16076  } else {
16077  ostringstream os;
16078  os << "ERROR in MPM93RainExt:\n"
16079  << " frequency (valid range 0-1000 GHz):"
16080  << f_grid[s] * Hz_to_GHz << "\n"
16081  << " ==> no calculation performed!\n";
16082  throw runtime_error(os.str());
16083  }
16084  // power law coeff. Gb and exponent Eb for b, piecewise:
16085  if (f_grid[s] <= 8.5e9) {
16086  Gb = 0.851;
16087  Eb = 0.158;
16088  } else if (f_grid[s] <= 25.0e9) {
16089  Gb = 1.41;
16090  Eb = -0.0779;
16091  } else if (f_grid[s] <= 164.0e9) {
16092  Gb = 2.63;
16093  Eb = -0.272;
16094  } else if (f_grid[s] <= 1000e9) {
16095  Gb = 0.616;
16096  Eb = 0.0126;
16097  } else {
16098  ostringstream os;
16099  os << "ERROR in MPM93RainExt:\n"
16100  << " frequency (valid range 0-1000 GHz):"
16101  << f_grid[s] * Hz_to_GHz << "\n"
16102  << " ==> no calculation performed!\n";
16103  throw runtime_error(os.str());
16104  }
16105 
16106  } else if (vmri > 25) {
16107  // power law coeff. Ga and exponent Ea for a, piecewise:
16108  if (f_grid[s] <= 4.9e9) {
16109  Ga = 5.30e-5;
16110  Ea = 1.87;
16111  } else if (f_grid[s] <= 10.7e9) {
16112  Ga = 5.03e-6;
16113  Ea = 3.35;
16114  } else if (f_grid[s] <= 40.1e9) {
16115  Ga = 2.53e-5;
16116  Ea = 2.67;
16117  } else if (f_grid[s] <= 59.1e9) {
16118  Ga = 3.58e-3;
16119  Ea = 1.33;
16120  } else if (f_grid[s] <= 100e9) {
16121  Ga = 0.143;
16122  Ea = 0.422;
16123  } else {
16124  ostringstream os;
16125  os << "ERROR in MPM93RainExt:\n"
16126  << " frequency (valid range for rain rate > 25mm/h: 0-100 GHz):"
16127  << f_grid[s] * Hz_to_GHz << "\n"
16128  << " ==> no calculation performed!\n";
16129  throw runtime_error(os.str());
16130  }
16131  // power law coeff. Gb and exponent Eb for b, piecewise:
16132  if (f_grid[s] <= 6.2e9) {
16133  Gb = 0.911;
16134  Eb = 0.190;
16135  } else if (f_grid[s] <= 23.8e9) {
16136  Gb = 1.71;
16137  Eb = -0.156;
16138  } else if (f_grid[s] <= 48.4e9) {
16139  Gb = 3.08;
16140  Eb = -0.342;
16141  } else if (f_grid[s] <= 68.2e9) {
16142  Gb = 1.28;
16143  Eb = -0.116;
16144  } else if (f_grid[s] <= 100e9) {
16145  Gb = 0.932;
16146  Eb = -0.0408;
16147  } else {
16148  ostringstream os;
16149  os << "ERROR in MPM93RainExt:\n"
16150  << " frequency (valid range for rain rate > 25mm/h: 0-100 GHz):"
16151  << f_grid[s] * Hz_to_GHz << "\n"
16152  << " ==> no calculation performed!\n";
16153  throw runtime_error(os.str());
16154  }
16155  }
16156  //Factor a_rain
16157  Numeric a_rain = Ga * pow((f_grid[s] * Hz_to_GHz), Ea);
16158  //Factor b_rain
16159  Numeric b_rain = Gb * pow((f_grid[s] * Hz_to_GHz), Eb);
16160  // Extinction coefficient [dB/km], with scaling
16161  // parameters CA and CB
16162  Numeric ext_rain = CA * a_rain * pow(vmri, (CB * b_rain));
16163  // rain extinction cross section [1/m]
16164  // The vmr will be multiplied at the stage of extinction
16165  // calculation: ext = vmr * pxsec.
16166  // pxsec = ext/vmr [1/m] but MPM93 is in [dB/km] --> conversion necessary
16167  pxsec(s, i) += CE * dB_km_to_1_m * ext_rain / vmri;
16168  }
16169  } else {
16170  if ((vmri < low_lim_rr) || (vmri > high_lim_rr)) {
16171  ostringstream os;
16172  os << "ERROR in MPM93RainExt:\n"
16173  << " rain rate (valid range 0.00-150.00 mm/h):" << vmr[i]
16174  << " kg/m2/s (" << vmri << " mm/h)\n"
16175  << " ==> no calculation performed!\n";
16176  throw runtime_error(os.str());
16177  }
16178  }
16179  }
16180 }
16181 //
16182 // #################################################################################
16183 // ################################# HELP FUNCTIONS ################################
16184 // #################################################################################
16185 //
16207  const Numeric fl,
16208  const Numeric f) {
16209  /*
16210  this routine calculates the line shape function of Van Vleck and Weisskopf
16211  with the factor (f/f_o)¹. for the MPM pseudo continuum line.
16212 
16213  creation TKS, 4.11.00
16214 
16215  input: gamma [Hz] line width of line L
16216  fl [Hz] central frequency of line L
16217  f [Hz] frequency position of calculation
16218 
16219  output: value [1/Hz] line shape function value at f for the line parameters
16220  of line L
16221 
16222  */
16223 
16224  double f_minus, f_plus; /* internal variables */
16225  double value; /* return value */
16226 
16227  // line at fl
16228  f_minus = 1.000 / ((f - fl) * (f - fl) + gamma * gamma);
16229 
16230  // mirror line at -fl
16231  f_plus = 1.000 / ((f + fl) * (f + fl) + gamma * gamma);
16232 
16233  // VVW line shape function value
16234  value = fabs(f / fl) * gamma * (f_minus + f_plus);
16235 
16236  return value;
16237 }
16238 //
16239 // #################################################################################
16240 //
16263  const Numeric fl,
16264  const Numeric f,
16265  const Numeric delta) {
16266  /*
16267  this routine calculates the line shape function of Van Vleck and Weisskopf
16268  for O2 with line mixing.
16269 
16270  creation TKS, 14.07.01
16271 
16272  input: gamma [GHz] line width of line L
16273  fl [GHz] central frequency of line L
16274  f [GHz] frequency position of calculation
16275  delta [1] line mixing parameter
16276 
16277  output: value [1] line shape function value at f for the line parameters
16278  of line L
16279 
16280  */
16281 
16282  double f_minus, f_plus; /* internal variables */
16283  double value; /* return value */
16284 
16285  // line at fl
16286  f_minus = (gamma - delta * (fl - f)) / ((fl - f) * (fl - f) + gamma * gamma);
16287 
16288  // mirror line at -fl
16289  f_plus = (gamma - delta * (fl + f)) / ((fl + f) * (fl + f) + gamma * gamma);
16290 
16291  // VVW line shape function value
16292  value = f * (f_minus + f_plus);
16293 
16294  return value;
16295 }
16296 
16297 //
16298 // ############################################################################
16299 // #################### CONTROL OF ADDITIONAL ABSORPTION MODEL ################
16300 // ############################################################################
16301 //
16302 //
16341  const String &name,
16343  const String &model,
16344  ConstVectorView f_grid,
16345  ConstVectorView abs_p,
16346  ConstVectorView abs_t,
16347  ConstVectorView abs_n2,
16348  ConstVectorView abs_h2o,
16349  ConstVectorView abs_o2,
16350  ConstVectorView vmr,
16351  const Verbosity &verbosity) {
16352  CREATE_OUT3;
16353 
16354  /* In the following all the possible tags are listed here and
16355  after a first consistency check about the input parameters the
16356  appropriate internal function is called,
16357 
16358  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
16359  ATTENTION PLEASE UPDATE THIS COMMENT IF ANY CHANGES ARE MADE CONCERNING
16360  THE ASSOCIATED MODELS TO EACH TAG
16361  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
16362 
16363  ----------------------------------------------------------------------------------------------------
16364  TAG VALID MODELS
16365  ----------------------------------------------------------------------------------------------------
16366  *CONTAGMODINFO* H2O-SelfContStandardType: Rosenkranz, user
16367  *CONTAGMODINFO* H2O-ForeignContStandardType: Rosenkranz, user
16368  *CONTAGMODINFO* H2O-ForeignContMaTippingType: MaTipping, user
16369  *CONTAGMODINFO* H2O-ContMPM93: MPM93, user
16370  *CONTAGMODINFO* H2O-MPM87: MPM87, MPM87Lines, MPM87Continuum, user
16371  *CONTAGMODINFO* H2O-MPM89: MPM89, MPM89Lines, MPM89Continuum, user
16372  *CONTAGMODINFO* H2O-MPM93: MPM93, MPM93Lines, MPM93Continuum, user
16373  *CONTAGMODINFO* H2O-PWR98: Rosenkranz, RosenkranzLines, RosenkranzContinuum, user
16374  *CONTAGMODINFO* H2O-CP98: CruzPol, CruzPolLine, CruzPolContinuum, user
16375  *CONTAGMODINFO* H2O-CKD24: CKD24, user
16376  *CONTAGMODINFO* O2-MPM85: MPM85, MPM85Lines, MPM85Continuum, MPM85NoCoupling, MPM85NoCutoff, user
16377  *CONTAGMODINFO* O2-MPM87: MPM87, MPM87Lines, MPM87Continuum, MPM87NoCoupling, MPM87NoCutoff, user
16378  *CONTAGMODINFO* O2-MPM89: MPM89, MPM89Lines, MPM89Continuum, MPM89NoCoupling, MPM89NoCutoff, user
16379  *CONTAGMODINFO* O2-MPM92: MPM92, MPM92Lines, MPM92Continuum, MPM92NoCoupling, MPM92NoCutoff, user
16380  *CONTAGMODINFO* O2-MPM93: MPM93, MPM93Lines, MPM93Continuum, MPM93NoCoupling, MPM92NoCutoff, user
16381  *CONTAGMODINFO* O2-PWR93: Rosenkranz, RosenkranzLines, RosenkranzContinuum, user
16382  *CONTAGMODINFO* O2-PWR88: Rosenkranz, RosenkranzLines, RosenkranzContinuum, user
16383  *CONTAGMODINFO* O2-SelfContMPM93: MPM93, user
16384  *CONTAGMODINFO* O2-SelfContPWR93: Rosenkranz, user
16385  *CONTAGMODINFO* O2-GenerealCont: Rosenkranz, MPM93, user
16386  *CONTAGMODINFO* N2-BFCIA86: BF86, user
16387  *CONTAGMODINFO* N2-SelfContMPM93: MPM93, user, MPM93Scale
16388  *CONTAGMODINFO* N2-SelfContPWR93: Rosenkranz, user
16389  *CONTAGMODINFO* N2-SelfContStandardType: Rosenkranz, user
16390  *CONTAGMODINFO* CO2-SelfContPWR93: Rosenkranz, user
16391  *CONTAGMODINFO* CO2-ForeignContPWR93: Rosenkranz, user
16392  *CONTAGMODINFO* liquidcloud-MPM93: MPM93, user
16393  *CONTAGMODINFO* liquidcloud-ELL07: ELL07
16394  *CONTAGMODINFO* icecloud-MPM93: MPM93, user
16395  *CONTAGMODINFO* rain-MPM93: MPM93, user
16396  ----------------------------------------------------------------------------------------------------
16397  */
16398 
16399  // Set up a lokal variable pxsec for the pseudo cross sections, that
16400  // are used by the internal contiuum functions. It is important that
16401  // we also inititialize this to zero here, since the continuum
16402  // routines just add to this.
16403  // The dimensions of this are [n_frequencies,n_pressures].
16404  Matrix pxsec(xsec.nrows(), xsec.ncols(), 0.0);
16405 
16406  // ============= H2O continuum ========================================================
16407  if ("H2O-SelfContStandardType" == name) {
16408  //
16409  // specific continuum parameters and units:
16410  // OUTPUT
16411  // pxsec : [1/m],
16412  // INPUT
16413  // parameters[0] : continuum coefficient (C_s) [1/m / (Hz²*Pa²)]
16414  // parameters[1] : temperature exponent (x_s) [1]
16415  // f_grid : [Hz]
16416  // abs_p : [Pa]
16417  // abs_t : [K]
16418  // vmr : [1]
16419  //
16420  const int Nparam = 2;
16421  if ((model == "user") &&
16422  (parameters.nelem() == Nparam)) // -------------------------
16423  {
16424  out3 << "Continuum model " << name << " is running with \n"
16425  << "user defined parameters according to model " << model << ".\n";
16427  parameters[0],
16428  parameters[1],
16429  model,
16430  f_grid,
16431  abs_p,
16432  abs_t,
16433  vmr,
16434  verbosity);
16435  } else if ((model == "user") &&
16436  (parameters.nelem() != Nparam)) // --------------------
16437  {
16438  ostringstream os;
16439  os << "Continuum model " << name << " requires " << Nparam << " input\n"
16440  << "parameters for the model " << model << ",\n"
16441  << "but you specified " << parameters.nelem() << " parameters.\n";
16442  throw runtime_error(os.str());
16443  } else if ((model != "user") &&
16444  (parameters.nelem() == 0)) // --------------------
16445  {
16446  out3 << "Continuum model " << name << " running with \n"
16447  << "the parameters for model " << model << ".\n";
16449  pxsec, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity);
16450  } else if ((model != "user") &&
16451  (parameters.nelem() != 0)) // --------------------
16452  {
16453  ostringstream os;
16454  os << "ERROR: Continuum model " << name << " requires NO input\n"
16455  << "parameters for the model " << model << ",\n"
16456  << "but you specified " << parameters.nelem() << " parameters.\n"
16457  << "This ambiguity can not be solved by arts.\n"
16458  << "Please see the arts user guide chapter 3.\n";
16459  throw runtime_error(os.str());
16460  }
16461  }
16462  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16463  else if ("H2O-ForeignContStandardType" == name) {
16464  //
16465  // specific continuum parameters units:
16466  // a) output
16467  // pxsec : [1/m],
16468  // b) input
16469  // parameters[0] : [1/m / (Hz²*Pa²)]
16470  // parameters[1] : [1]
16471  // f_grid : [Hz]
16472  // abs_p : [Pa]
16473  // abs_t : [K]
16474  // vmr : [1]
16475  //
16476  const int Nparam = 2;
16477  if ((model == "user") &&
16478  (parameters.nelem() == Nparam)) // -------------------------
16479  {
16480  out3 << "Continuum model " << name << " is running with \n"
16481  << "user defined parameters according to model " << model << ".\n";
16483  parameters[0],
16484  parameters[1],
16485  model,
16486  f_grid,
16487  abs_p,
16488  abs_t,
16489  vmr,
16490  verbosity);
16491  } else if ((model == "user") &&
16492  (parameters.nelem() != Nparam)) // --------------------
16493  {
16494  ostringstream os;
16495  os << "Continuum model " << name << " requires " << Nparam << " input\n"
16496  << "parameters for the model " << model << ",\n"
16497  << "but you specified " << parameters.nelem() << " parameters.\n";
16498  throw runtime_error(os.str());
16499  } else if ((model != "user") &&
16500  (parameters.nelem() == 0)) // --------------------
16501  {
16502  out3 << "Continuum model " << name << " running with \n"
16503  << "the parameters for model " << model << ".\n";
16505  pxsec, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity);
16506  } else if ((model != "user") &&
16507  (parameters.nelem() != 0)) // --------------------
16508  {
16509  ostringstream os;
16510  os << "ERROR: Continuum model " << name << " requires NO input\n"
16511  << "parameters for the model " << model << ",\n"
16512  << "but you specified " << parameters.nelem() << " parameters.\n"
16513  << "This ambiguity can not be solved by arts.\n"
16514  << "Please see the arts user guide chapter 3.\n";
16515  throw runtime_error(os.str());
16516  }
16517  }
16518  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16519  else if ("H2O-ForeignContMaTippingType" == name) {
16520  //
16521  // specific continuum parameters units:
16522  // a) output
16523  // pxsec : [1/m],
16524  // b) input
16525  // parameters[0] : [1/m / (Hz²*Pa²)]
16526  // parameters[1] : [1]
16527  // f_grid : [Hz]
16528  // abs_p : [Pa]
16529  // abs_t : [K]
16530  // vmr : [1]
16531  //
16532  const int Nparam = 2;
16533  if ((model == "user") &&
16534  (parameters.nelem() == Nparam)) // -------------------------
16535  {
16536  out3 << "Continuum model " << name << " is running with \n"
16537  << "user defined parameters according to model " << model << ".\n";
16539  parameters[0],
16540  parameters[1],
16541  model,
16542  f_grid,
16543  abs_p,
16544  abs_t,
16545  vmr,
16546  verbosity);
16547  } else if ((model == "user") &&
16548  (parameters.nelem() != Nparam)) // --------------------
16549  {
16550  ostringstream os;
16551  os << "Continuum model " << name << " requires " << Nparam << " input\n"
16552  << "parameters for the model " << model << ",\n"
16553  << "but you specified " << parameters.nelem() << " parameters.\n";
16554  throw runtime_error(os.str());
16555  } else if ((model != "user") &&
16556  (parameters.nelem() == 0)) // --------------------
16557  {
16558  out3 << "Continuum model " << name << " running with \n"
16559  << "the parameters for model " << model << ".\n";
16561  pxsec, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity);
16562  } else if ((model != "user") &&
16563  (parameters.nelem() != 0)) // --------------------
16564  {
16565  ostringstream os;
16566  os << "ERROR: Continuum model " << name << " requires NO input\n"
16567  << "parameters for the model " << model << ",\n"
16568  << "but you specified " << parameters.nelem() << " parameters.\n"
16569  << "This ambiguity can not be solved by arts.\n"
16570  << "Please see the arts user guide chapter 3.\n";
16571  throw runtime_error(os.str());
16572  }
16573  }
16574  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16575  else if ("H2O-ContMPM93" == name) {
16576  // self and foreign continuum term are simultaneously calculated
16577  // since the parameterization can not be divided up in these two
16578  // terms because they are not additive terms.
16579  //
16580  // specific continuum parameters and units:
16581  // OUTPUT
16582  // pxsec : [1/m],
16583  // INPUT
16584  // parameters[0] : pseudo continuum line frequency [Hz]
16585  // parameters[1] : pseudo continuum line strength parameter [Hz/Pa]
16586  // parameters[2] : pseudo continuum line strength temperature parameter [1]
16587  // parameters[3] : pseudo continuum line broadening parameter [Hz/Pa]
16588  // parameters[4] : pseudo continuum line broadening parameter [1]
16589  // parameters[5] : pseudo continuum line broadening parameter [1]
16590  // parameters[6] : pseudo continuum line broadening parameter [1]
16591  // f_grid : [Hz]
16592  // abs_p : [Pa]
16593  // abs_t : [K]
16594  // vmr : [1]
16595  //
16596  const int Nparam = 7;
16597  if ((model == "user") &&
16598  (parameters.nelem() == Nparam)) // -------------------------
16599  {
16600  out3 << "Continuum model " << name << " is running with \n"
16601  << "user defined parameters according to model " << model << ".\n";
16602  MPM93_H2O_continuum(pxsec,
16603  parameters[0],
16604  parameters[1],
16605  parameters[2],
16606  parameters[3],
16607  parameters[4],
16608  parameters[5],
16609  parameters[6],
16610  model,
16611  f_grid,
16612  abs_p,
16613  abs_t,
16614  vmr,
16615  verbosity);
16616  } else if ((model == "user") &&
16617  (parameters.nelem() != Nparam)) // --------------------
16618  {
16619  ostringstream os;
16620  os << "Continuum model " << name << " requires " << Nparam << " input\n"
16621  << "parameters for the model " << model << ",\n"
16622  << "but you specified " << parameters.nelem() << " parameters.\n";
16623  throw runtime_error(os.str());
16624  } else if ((model != "user") &&
16625  (parameters.nelem() == 0)) // --------------------
16626  {
16627  out3 << "Continuum model " << name << " running with \n"
16628  << "the parameters for model " << model << ".\n";
16629  MPM93_H2O_continuum(pxsec,
16630  0.00,
16631  0.00,
16632  0.00,
16633  0.00,
16634  0.00,
16635  0.00,
16636  0.00,
16637  model,
16638  f_grid,
16639  abs_p,
16640  abs_t,
16641  vmr,
16642  verbosity);
16643  } else if ((model != "user") &&
16644  (parameters.nelem() != 0)) // --------------------
16645  {
16646  ostringstream os;
16647  os << "ERROR: Continuum model " << name << " requires NO input\n"
16648  << "parameters for the model " << model << ",\n"
16649  << "but you specified " << parameters.nelem() << " parameters. "
16650  << "\n"
16651  << "This ambiguity can not be solved by arts.\n"
16652  << "Please see the arts user guide chapter 3.\n";
16653  throw runtime_error(os.str());
16654  }
16655  }
16656  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16657  else if ("H2O-ForeignContATM01" == name) {
16658  // Foreign wet continuum term.
16659  //
16660  // Pardo et al., IEEE, Trans. Ant. Prop.,
16661  // Vol 49, No 12, pp. 1683-1694, 2001.
16662  //
16663  // specific continuum parameters and units:
16664  // OUTPUT
16665  // pxsec : [1/m],
16666  // INPUT
16667  // parameters[0] : pseudo continuum line frequency [Hz]
16668  // f_grid : [Hz]
16669  // abs_p : [Pa]
16670  // abs_t : [K]
16671  // vmr : [1]
16672  //
16673  const int Nparam = 1;
16674  if ((model == "user") &&
16675  (parameters.nelem() == Nparam)) // -------------------------
16676  {
16677  out3 << "Continuum model " << name << " is running with \n"
16678  << "user defined parameters according to model " << model << ".\n";
16680  pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity);
16681  } else if ((model == "user") &&
16682  (parameters.nelem() != Nparam)) // --------------------
16683  {
16684  ostringstream os;
16685  os << "Continuum model " << name << " requires " << Nparam << " input\n"
16686  << "parameters for the model " << model << ",\n"
16687  << "but you specified " << parameters.nelem() << " parameters.\n";
16688  throw runtime_error(os.str());
16689  } else if ((model != "user") &&
16690  (parameters.nelem() == 0)) // --------------------
16691  {
16692  out3 << "Continuum model " << name << " running with \n"
16693  << "the parameters for model " << model << ".\n";
16695  pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity);
16696  } else if ((model != "user") &&
16697  (parameters.nelem() != 0)) // --------------------
16698  {
16699  ostringstream os;
16700  os << "ERROR: Continuum model " << name << " requires NO input\n"
16701  << "parameters for the model " << model << ",\n"
16702  << "but you specified " << parameters.nelem() << " parameters. "
16703  << "\n"
16704  << "This ambiguity can not be solved by arts.\n"
16705  << "Please see the arts user guide chapter 3.\n";
16706  throw runtime_error(os.str());
16707  }
16708  }
16709  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16710  else if ("H2O-SelfContCKD222" == name) {
16711  // OUTPUT:
16712  // pxsec cross section (absorption/volume mixing ratio) of
16713  // H2O self continuum according to CKD2.2.2 [1/m]
16714  // INPUT:
16715  // parameters[0] strength scaling factor [1]
16716  // model allows user defined input parameter set
16717  // (Cin) or choice of
16718  // pre-defined parameters of specific models (see note below).
16719  // f_grid predefined frequency grid [Hz]
16720  // abs_p predefined pressure grid [Pa]
16721  // abs_t predefined temperature grid [K]
16722  // vmr H2O volume mixing ratio profile [1]
16723  //
16724  // WWW resource: ftp.aer.com/aer_contnm_ckd
16725  const int Nparam = 1;
16726  if ((model == "user") &&
16727  (parameters.nelem() == Nparam)) // -------------------------
16728  {
16729  out3 << "Continuum model " << name << " is running with \n"
16730  << "user defined parameters according to model " << model << ".\n";
16732  pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity);
16733  } else if ((model == "user") &&
16734  (parameters.nelem() != Nparam)) // --------------------
16735  {
16736  ostringstream os;
16737  os << "Continuum model " << name << " requires " << Nparam << " input\n"
16738  << "parameters for the model " << model << ",\n"
16739  << "but you specified " << parameters.nelem() << " parameters.\n";
16740  throw runtime_error(os.str());
16741  } else if ((model != "user") &&
16742  (parameters.nelem() == 0)) // --------------------
16743  {
16744  out3 << "Continuum model " << name << " running with \n"
16745  << "the parameters for model " << model << ".\n";
16747  pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity);
16748  } else if ((model != "user") &&
16749  (parameters.nelem() != 0)) // --------------------
16750  {
16751  ostringstream os;
16752  os << "ERROR: continuum model " << name << " requires NO input\n"
16753  << "parameters for the model " << model << ",\n"
16754  << "but you specified " << parameters.nelem() << " parameters.\n"
16755  << "This ambiguity can not be solved by arts.\n"
16756  << "Please see the arts user guide chapter 3.\n";
16757  throw runtime_error(os.str());
16758  }
16759  }
16760  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16761  else if ("H2O-ForeignContCKD222" == name) {
16762  // OUTPUT:
16763  // pxsec cross section (absorption/volume mixing ratio) of
16764  // H2O foreign continuum according to CKD2.2.2 [1/m]
16765  // INPUT:
16766  // parameters[0] strength scaling factor [1]
16767  // model allows user defined input parameter set
16768  // (Cin) or choice of
16769  // pre-defined parameters of specific models (see note below).
16770  // f_grid predefined frequency grid [Hz]
16771  // abs_p predefined pressure grid [Pa]
16772  // abs_t predefined temperature grid [K]
16773  // vmr H2O volume mixing ratio profile [1]
16774  //
16775  // WWW resource: ftp.aer.com/aer_contnm_ckd
16776  const int Nparam = 1;
16777  if ((model == "user") &&
16778  (parameters.nelem() == Nparam)) // -------------------------
16779  {
16780  out3 << "Continuum model " << name << " is running with \n"
16781  << "user defined parameters according to model " << model << ".\n";
16783  pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity);
16784  } else if ((model == "user") &&
16785  (parameters.nelem() != Nparam)) // --------------------
16786  {
16787  ostringstream os;
16788  os << "Continuum model " << name << " requires " << Nparam << " input\n"
16789  << "parameters for the model " << model << ",\n"
16790  << "but you specified " << parameters.nelem() << " parameters.\n";
16791  throw runtime_error(os.str());
16792  } else if ((model != "user") &&
16793  (parameters.nelem() == 0)) // --------------------
16794  {
16795  out3 << "Continuum model " << name << " running with \n"
16796  << "the parameters for model " << model << ".\n";
16798  pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity);
16799  } else if ((model != "user") &&
16800  (parameters.nelem() != 0)) // --------------------
16801  {
16802  ostringstream os;
16803  os << "ERROR: continuum model " << name << " requires NO input\n"
16804  << "parameters for the model " << model << ",\n"
16805  << "but you specified " << parameters.nelem() << " parameters.\n"
16806  << "This ambiguity can not be solved by arts.\n"
16807  << "Please see the arts user guide chapter 3.\n";
16808  throw runtime_error(os.str());
16809  }
16810  }
16811  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16812  else if ("H2O-SelfContCKD242" == name) {
16813  // OUTPUT:
16814  // pxsec cross section (absorption/volume mixing ratio) of
16815  // H2O self continuum according to CKD2.4.2 [1/m]
16816  // INPUT:
16817  // parameters[0] strength scaling factor [1]
16818  // model allows user defined input parameter set
16819  // (Cin) or choice of
16820  // pre-defined parameters of specific models (see note below).
16821  // f_grid predefined frequency grid [Hz]
16822  // abs_p predefined pressure grid [Pa]
16823  // abs_t predefined temperature grid [K]
16824  // vmr H2O volume mixing ratio profile [1]
16825  //
16826  // WWW resource: ftp.aer.com/aer_contnm_ckd
16827  const int Nparam = 1;
16828  if ((model == "user") &&
16829  (parameters.nelem() == Nparam)) // -------------------------
16830  {
16831  out3 << "Continuum model " << name << " is running with \n"
16832  << "user defined parameters according to model " << model << ".\n";
16834  pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity);
16835  } else if ((model == "user") &&
16836  (parameters.nelem() != Nparam)) // --------------------
16837  {
16838  ostringstream os;
16839  os << "Continuum model " << name << " requires " << Nparam << " input\n"
16840  << "parameters for the model " << model << ",\n"
16841  << "but you specified " << parameters.nelem() << " parameters.\n";
16842  throw runtime_error(os.str());
16843  } else if ((model != "user") &&
16844  (parameters.nelem() == 0)) // --------------------
16845  {
16846  out3 << "Continuum model " << name << " running with \n"
16847  << "the parameters for model " << model << ".\n";
16849  pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity);
16850  } else if ((model != "user") &&
16851  (parameters.nelem() != 0)) // --------------------
16852  {
16853  ostringstream os;
16854  os << "ERROR: continuum model " << name << " requires NO input\n"
16855  << "parameters for the model " << model << ",\n"
16856  << "but you specified " << parameters.nelem() << " parameters.\n"
16857  << "This ambiguity can not be solved by arts.\n"
16858  << "Please see the arts user guide chapter 3.\n";
16859  throw runtime_error(os.str());
16860  }
16861  }
16862  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16863  else if ("H2O-ForeignContCKD242" == name) {
16864  // OUTPUT:
16865  // pxsec cross section (absorption/volume mixing ratio) of
16866  // H2O foreign continuum according to CKD2.4.2 [1/m]
16867  // INPUT:
16868  // parameters[0] strength scaling factor [1]
16869  // model allows user defined input parameter set
16870  // (Cin) or choice of
16871  // pre-defined parameters of specific models (see note below).
16872  // f_grid predefined frequency grid [Hz]
16873  // abs_p predefined pressure grid [Pa]
16874  // abs_t predefined temperature grid [K]
16875  // vmr H2O volume mixing ratio profile [1]
16876  //
16877  // WWW resource: ftp.aer.com/aer_contnm_ckd
16878  const int Nparam = 1;
16879  if ((model == "user") &&
16880  (parameters.nelem() == Nparam)) // -------------------------
16881  {
16882  out3 << "Continuum model " << name << " is running with \n"
16883  << "user defined parameters according to model " << model << ".\n";
16885  pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity);
16886  } else if ((model == "user") &&
16887  (parameters.nelem() != Nparam)) // --------------------
16888  {
16889  ostringstream os;
16890  os << "Continuum model " << name << " requires " << Nparam << " input\n"
16891  << "parameters for the model " << model << ",\n"
16892  << "but you specified " << parameters.nelem() << " parameters.\n";
16893  throw runtime_error(os.str());
16894  } else if ((model != "user") &&
16895  (parameters.nelem() == 0)) // --------------------
16896  {
16897  out3 << "Continuum model " << name << " running with \n"
16898  << "the parameters for model " << model << ".\n";
16900  pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity);
16901  } else if ((model != "user") &&
16902  (parameters.nelem() != 0)) // --------------------
16903  {
16904  ostringstream os;
16905  os << "ERROR: continuum model " << name << " requires NO input\n"
16906  << "parameters for the model " << model << ",\n"
16907  << "but you specified " << parameters.nelem() << " parameters.\n"
16908  << "This ambiguity can not be solved by arts.\n"
16909  << "Please see the arts user guide chapter 3.\n";
16910  throw runtime_error(os.str());
16911  }
16912  }
16913  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16914  else if ("H2O-SelfContCKDMT100" == name) {
16915  // OUTPUT:
16916  // pxsec cross section (absorption/volume mixing ratio) of
16917  // H2O self continuum according to CKD MT 1.00 [1/m]
16918  // INPUT:
16919  // parameters[0] strength scaling factor [1]
16920  // model allows user defined input parameter set
16921  // (Cin) or choice of
16922  // pre-defined parameters of specific models (see note below).
16923  // f_grid predefined frequency grid [Hz]
16924  // abs_p predefined pressure grid [Pa]
16925  // abs_t predefined temperature grid [K]
16926  // vmr H2O volume mixing ratio profile [1]
16927  //
16928  // WWW resource: ftp.aer.com/aer_contnm_ckd
16929  const int Nparam = 1;
16930  if ((model == "user") &&
16931  (parameters.nelem() == Nparam)) // -------------------------
16932  {
16933  out3 << "Continuum model " << name << " is running with \n"
16934  << "user defined parameters according to model " << model << ".\n";
16936  pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity);
16937  } else if ((model == "user") &&
16938  (parameters.nelem() != Nparam)) // --------------------
16939  {
16940  ostringstream os;
16941  os << "Continuum model " << name << " requires " << Nparam << " input\n"
16942  << "parameters for the model " << model << ",\n"
16943  << "but you specified " << parameters.nelem() << " parameters.\n";
16944  throw runtime_error(os.str());
16945  } else if ((model != "user") &&
16946  (parameters.nelem() == 0)) // --------------------
16947  {
16948  out3 << "Continuum model " << name << " running with \n"
16949  << "the parameters for model " << model << ".\n";
16951  pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity);
16952  } else if ((model != "user") &&
16953  (parameters.nelem() != 0)) // --------------------
16954  {
16955  ostringstream os;
16956  os << "ERROR: continuum model " << name << " requires NO input\n"
16957  << "parameters for the model " << model << ",\n"
16958  << "but you specified " << parameters.nelem() << " parameters.\n"
16959  << "This ambiguity can not be solved by arts.\n"
16960  << "Please see the arts user guide chapter 3.\n";
16961  throw runtime_error(os.str());
16962  }
16963  }
16964  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16965  else if ("H2O-ForeignContCKDMT100" == name) {
16966  // OUTPUT:
16967  // pxsec cross section (absorption/volume mixing ratio) of
16968  // H2O foreign continuum according to CKD MT 1.00 [1/m]
16969  // INPUT:
16970  // parameters[0] strength scaling factor [1]
16971  // model allows user defined input parameter set
16972  // (Cin) or choice of
16973  // pre-defined parameters of specific models (see note below).
16974  // f_grid predefined frequency grid [Hz]
16975  // abs_p predefined pressure grid [Pa]
16976  // abs_t predefined temperature grid [K]
16977  // vmr H2O volume mixing ratio profile [1]
16978  //
16979  // WWW resource: ftp.aer.com/aer_contnm_ckd
16980  const int Nparam = 1;
16981  if ((model == "user") &&
16982  (parameters.nelem() == Nparam)) // -------------------------
16983  {
16984  out3 << "Continuum model " << name << " is running with \n"
16985  << "user defined parameters according to model " << model << ".\n";
16987  pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity);
16988  } else if ((model == "user") &&
16989  (parameters.nelem() != Nparam)) // --------------------
16990  {
16991  ostringstream os;
16992  os << "Continuum model " << name << " requires " << Nparam << " input\n"
16993  << "parameters for the model " << model << ",\n"
16994  << "but you specified " << parameters.nelem() << " parameters.\n";
16995  throw runtime_error(os.str());
16996  } else if ((model != "user") &&
16997  (parameters.nelem() == 0)) // --------------------
16998  {
16999  out3 << "Continuum model " << name << " running with \n"
17000  << "the parameters for model " << model << ".\n";
17002  pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity);
17003  } else if ((model != "user") &&
17004  (parameters.nelem() != 0)) // --------------------
17005  {
17006  ostringstream os;
17007  os << "ERROR: continuum model " << name << " requires NO input\n"
17008  << "parameters for the model " << model << ",\n"
17009  << "but you specified " << parameters.nelem() << " parameters.\n"
17010  << "This ambiguity can not be solved by arts.\n"
17011  << "Please see the arts user guide chapter 3.\n";
17012  throw runtime_error(os.str());
17013  }
17014  }
17015  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17016  else if ("H2O-SelfContCKDMT252" == name) {
17017  // OUTPUT:
17018  // pxsec cross section (absorption/volume mixing ratio) of
17019  // H2O self continuum according to CKD MT 2.50 [1/m]
17020  // INPUT:
17021  // parameters[0] strength scaling factor [1]
17022  // model allows user defined input parameter set
17023  // (Cin) or choice of
17024  // pre-defined parameters of specific models (see note below).
17025  // f_grid predefined frequency grid [Hz]
17026  // abs_p predefined pressure grid [Pa]
17027  // abs_t predefined temperature grid [K]
17028  // vmr H2O volume mixing ratio profile [1]
17029  //
17030  // WWW resource: ftp.aer.com/aer_contnm_ckd
17031  const int Nparam = 1;
17032  if ((model == "user") &&
17033  (parameters.nelem() == Nparam)) // -------------------------
17034  {
17035  out3 << "Continuum model " << name << " is running with \n"
17036  << "user defined parameters according to model " << model << ".\n";
17038  pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity);
17039  } else if ((model == "user") &&
17040  (parameters.nelem() != Nparam)) // --------------------
17041  {
17042  ostringstream os;
17043  os << "Continuum model " << name << " requires " << Nparam << " input\n"
17044  << "parameters for the model " << model << ",\n"
17045  << "but you specified " << parameters.nelem() << " parameters.\n";
17046  throw runtime_error(os.str());
17047  } else if ((model != "user") &&
17048  (parameters.nelem() == 0)) // --------------------
17049  {
17050  out3 << "Continuum model " << name << " running with \n"
17051  << "the parameters for model " << model << ".\n";
17053  pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity);
17054  } else if ((model != "user") &&
17055  (parameters.nelem() != 0)) // --------------------
17056  {
17057  ostringstream os;
17058  os << "ERROR: continuum model " << name << " requires NO input\n"
17059  << "parameters for the model " << model << ",\n"
17060  << "but you specified " << parameters.nelem() << " parameters.\n"
17061  << "This ambiguity can not be solved by arts.\n"
17062  << "Please see the arts user guide chapter 3.\n";
17063  throw runtime_error(os.str());
17064  }
17065  }
17066  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17067  else if ("H2O-ForeignContCKDMT252" == name) {
17068  // OUTPUT:
17069  // pxsec cross section (absorption/volume mixing ratio) of
17070  // H2O foreign continuum according to CKD MT 2.50 [1/m]
17071  // INPUT:
17072  // parameters[0] strength scaling factor [1]
17073  // model allows user defined input parameter set
17074  // (Cin) or choice of
17075  // pre-defined parameters of specific models (see note below).
17076  // f_grid predefined frequency grid [Hz]
17077  // abs_p predefined pressure grid [Pa]
17078  // abs_t predefined temperature grid [K]
17079  // vmr H2O volume mixing ratio profile [1]
17080  //
17081  // WWW resource: ftp.aer.com/aer_contnm_ckd
17082  const int Nparam = 1;
17083  if ((model == "user") &&
17084  (parameters.nelem() == Nparam)) // -------------------------
17085  {
17086  out3 << "Continuum model " << name << " is running with \n"
17087  << "user defined parameters according to model " << model << ".\n";
17089  pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity);
17090  } else if ((model == "user") &&
17091  (parameters.nelem() != Nparam)) // --------------------
17092  {
17093  ostringstream os;
17094  os << "Continuum model " << name << " requires " << Nparam << " input\n"
17095  << "parameters for the model " << model << ",\n"
17096  << "but you specified " << parameters.nelem() << " parameters.\n";
17097  throw runtime_error(os.str());
17098  } else if ((model != "user") &&
17099  (parameters.nelem() == 0)) // --------------------
17100  {
17101  out3 << "Continuum model " << name << " running with \n"
17102  << "the parameters for model " << model << ".\n";
17104  pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity);
17105  } else if ((model != "user") &&
17106  (parameters.nelem() != 0)) // --------------------
17107  {
17108  ostringstream os;
17109  os << "ERROR: continuum model " << name << " requires NO input\n"
17110  << "parameters for the model " << model << ",\n"
17111  << "but you specified " << parameters.nelem() << " parameters.\n"
17112  << "This ambiguity can not be solved by arts.\n"
17113  << "Please see the arts user guide chapter 3.\n";
17114  throw runtime_error(os.str());
17115  }
17116  }
17117 
17118  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17119  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17120  else if ("H2O-SelfContCKDMT320" == name) {
17121  // OUTPUT:
17122  // pxsec cross section (absorption/volume mixing ratio) of
17123  // H2O self continuum according to CKD MT 2.50 [1/m]
17124  // INPUT:
17125  // parameters[0] strength scaling factor [1]
17126  // model allows user defined input parameter set
17127  // (Cin) or choice of
17128  // pre-defined parameters of specific models (see note below).
17129  // f_grid predefined frequency grid [Hz]
17130  // abs_p predefined pressure grid [Pa]
17131  // abs_t predefined temperature grid [K]
17132  // vmr H2O volume mixing ratio profile [1]
17133  //
17134  // WWW resource: ftp.aer.com/aer_contnm_ckd
17135  const int Nparam = 1;
17136  if ((model == "user") &&
17137  (parameters.nelem() == Nparam)) // -------------------------
17138  {
17139  out3 << "Continuum model " << name << " is running with \n"
17140  << "user defined parameters according to model " << model << ".\n";
17142  pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity);
17143  } else if ((model == "user") &&
17144  (parameters.nelem() != Nparam)) // --------------------
17145  {
17146  ostringstream os;
17147  os << "Continuum model " << name << " requires " << Nparam << " input\n"
17148  << "parameters for the model " << model << ",\n"
17149  << "but you specified " << parameters.nelem() << " parameters.\n";
17150  throw runtime_error(os.str());
17151  } else if ((model != "user") &&
17152  (parameters.nelem() == 0)) // --------------------
17153  {
17154  out3 << "Continuum model " << name << " running with \n"
17155  << "the parameters for model " << model << ".\n";
17157  pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity);
17158  } else if ((model != "user") &&
17159  (parameters.nelem() != 0)) // --------------------
17160  {
17161  ostringstream os;
17162  os << "ERROR: continuum model " << name << " requires NO input\n"
17163  << "parameters for the model " << model << ",\n"
17164  << "but you specified " << parameters.nelem() << " parameters.\n"
17165  << "This ambiguity can not be solved by arts.\n"
17166  << "Please see the arts user guide chapter 3.\n";
17167  throw runtime_error(os.str());
17168  }
17169  }
17170  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17171  else if ("H2O-ForeignContCKDMT320" == name) {
17172  // OUTPUT:
17173  // pxsec cross section (absorption/volume mixing ratio) of
17174  // H2O foreign continuum according to CKD MT 2.50 [1/m]
17175  // INPUT:
17176  // parameters[0] strength scaling factor [1]
17177  // model allows user defined input parameter set
17178  // (Cin) or choice of
17179  // pre-defined parameters of specific models (see note below).
17180  // f_grid predefined frequency grid [Hz]
17181  // abs_p predefined pressure grid [Pa]
17182  // abs_t predefined temperature grid [K]
17183  // vmr H2O volume mixing ratio profile [1]
17184  //
17185  // WWW resource: ftp.aer.com/aer_contnm_ckd
17186  const int Nparam = 1;
17187  if ((model == "user") &&
17188  (parameters.nelem() == Nparam)) // -------------------------
17189  {
17190  out3 << "Continuum model " << name << " is running with \n"
17191  << "user defined parameters according to model " << model << ".\n";
17193  pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity);
17194  } else if ((model == "user") &&
17195  (parameters.nelem() != Nparam)) // --------------------
17196  {
17197  ostringstream os;
17198  os << "Continuum model " << name << " requires " << Nparam << " input\n"
17199  << "parameters for the model " << model << ",\n"
17200  << "but you specified " << parameters.nelem() << " parameters.\n";
17201  throw runtime_error(os.str());
17202  } else if ((model != "user") &&
17203  (parameters.nelem() == 0)) // --------------------
17204  {
17205  out3 << "Continuum model " << name << " running with \n"
17206  << "the parameters for model " << model << ".\n";
17208  pxsec, 0.000, model, f_grid, abs_p, abs_t, vmr, verbosity);
17209  } else if ((model != "user") &&
17210  (parameters.nelem() != 0)) // --------------------
17211  {
17212  ostringstream os;
17213  os << "ERROR: continuum model " << name << " requires NO input\n"
17214  << "parameters for the model " << model << ",\n"
17215  << "but you specified " << parameters.nelem() << " parameters.\n"
17216  << "This ambiguity can not be solved by arts.\n"
17217  << "Please see the arts user guide chapter 3.\n";
17218  throw runtime_error(os.str());
17219  }
17220  }
17221 
17222  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17223 
17224  else if ("H2O-SelfContCKD24" == name) {
17225  // OUTPUT:
17226  // pxsec cross section (absorption/volume mixing ratio) of
17227  // H2O continuum according to CKD2.4 [1/m]
17228  // INPUT:
17229  // parameters[0] strength scaling factor [1]
17230  // model allows user defined input parameter set
17231  // (Cin) or choice of
17232  // pre-defined parameters of specific models (see note below).
17233  // f_grid predefined frequency grid [Hz]
17234  // abs_p predefined pressure grid [Pa]
17235  // abs_t predefined temperature grid [K]
17236  // abs_n2 N2 volume mixing ratio profile [1]
17237  // vmr H2O volume mixing ratio profile [1]
17238  //
17239  // WWW resource: ftp.aer.com/aer_contnm_ckd
17240 
17241  // abs_n2 needed here. check, whether this is valid.
17242  if (abs_n2.sum() < -1.) {
17243  ostringstream os;
17244  os << "Continuum/full model tag " << name
17245  << " requires N2-vmr, but no tag group contains N2!";
17246  throw runtime_error(os.str());
17247  }
17248 
17249  const int Nparam = 1;
17250  if ((model == "user") &&
17251  (parameters.nelem() == Nparam)) // -------------------------
17252  {
17253  out3 << "Continuum model " << name << " is running with \n"
17254  << "user defined parameters according to model " << model << ".\n";
17255  CKD24_H20(pxsec,
17256  0,
17257  parameters[0],
17258  model,
17259  f_grid,
17260  abs_p,
17261  abs_t,
17262  vmr,
17263  abs_n2,
17264  verbosity);
17265  } else if ((model == "user") &&
17266  (parameters.nelem() != Nparam)) // --------------------
17267  {
17268  ostringstream os;
17269  os << "Continuum model " << name << " requires " << Nparam << " input\n"
17270  << "parameters for the model " << model << ",\n"
17271  << "but you specified " << parameters.nelem() << " parameters.\n";
17272  throw runtime_error(os.str());
17273  } else if ((model != "user") &&
17274  (parameters.nelem() == 0)) // --------------------
17275  {
17276  out3 << "Continuum model " << name << " running with \n"
17277  << "the parameters for model " << model << ".\n";
17278  CKD24_H20(
17279  pxsec, 0, 0.000, model, f_grid, abs_p, abs_t, vmr, abs_n2, verbosity);
17280  } else if ((model != "user") &&
17281  (parameters.nelem() != 0)) // --------------------
17282  {
17283  ostringstream os;
17284  os << "ERROR: continuum model " << name << " requires NO input\n"
17285  << "parameters for the model " << model << ",\n"
17286  << "but you specified " << parameters.nelem() << " parameters.\n"
17287  << "This ambiguity can not be solved by arts.\n"
17288  << "Please see the arts user guide chapter 3.\n";
17289  throw runtime_error(os.str());
17290  }
17291  }
17292  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17293  else if ("H2O-ForeignContCKD24" == name) {
17294  // OUTPUT:
17295  // pxsec cross section (absorption/volume mixing ratio) of
17296  // H2O continuum according to CKD2.4 [1/m]
17297  // INPUT:
17298  // Cin strength scaling factor [1]
17299  // model allows user defined input parameter set
17300  // (Cin) or choice of
17301  // pre-defined parameters of specific models (see note below).
17302  // f_grid predefined frequency grid [Hz]
17303  // abs_p predefined pressure grid [Pa]
17304  // abs_t predefined temperature grid [K]
17305  // vmr H2O volume mixing ratio profile [1]
17306  // abs_n2 N2 volume mixing ratio profile [1]
17307  //
17308  // WWW resource: ftp.aer.com/aer_contnm_ckd
17309 
17310  if (abs_n2.sum() < -1.) {
17311  ostringstream os;
17312  os << "Continuum/full model tag " << name
17313  << " requires N2-vmr, but no tag group contains N2!";
17314  throw runtime_error(os.str());
17315  }
17316 
17317  const int Nparam = 1;
17318  if ((model == "user") &&
17319  (parameters.nelem() == Nparam)) // -------------------------
17320  {
17321  out3 << "Continuum model " << name << " is running with \n"
17322  << "user defined parameters according to model " << model << ".\n";
17323  CKD24_H20(pxsec,
17324  1,
17325  parameters[0],
17326  model,
17327  f_grid,
17328  abs_p,
17329  abs_t,
17330  vmr,
17331  abs_n2,
17332  verbosity);
17333  } else if ((model == "user") &&
17334  (parameters.nelem() != Nparam)) // --------------------
17335  {
17336  ostringstream os;
17337  os << "Continuum model " << name << " requires " << Nparam << " input\n"
17338  << "parameters for the model " << model << ",\n"
17339  << "but you specified " << parameters.nelem() << " parameters.\n";
17340  throw runtime_error(os.str());
17341  } else if ((model != "user") &&
17342  (parameters.nelem() == 0)) // --------------------
17343  {
17344  out3 << "Continuum model " << name << " running with \n"
17345  << "the parameters for model " << model << ".\n";
17346  CKD24_H20(
17347  pxsec, 1, 0, model, f_grid, abs_p, abs_t, vmr, abs_n2, verbosity);
17348  } else if ((model != "user") &&
17349  (parameters.nelem() != 0)) // --------------------
17350  {
17351  ostringstream os;
17352  os << "ERROR: continuum model " << name << " requires NO input\n"
17353  << "parameters for the model " << model << ",\n"
17354  << "but you specified " << parameters.nelem() << " parameters.\n"
17355  << "This ambiguity can not be solved by arts.\n"
17356  << "Please see the arts user guide chapter 3.\n";
17357  throw runtime_error(os.str());
17358  }
17359  }
17360  // ============= H2O full models ======================================================
17361  else if ("H2O-CP98" == name) {
17362  //
17363  // specific continuum parameters and units:
17364  // OUTPUT
17365  // pxsec : [1/m],
17366  // INPUT
17367  // parameters[0] : continuum scale factor (CC) [1]
17368  // parameters[1] : line strength scale factor (CL) [1]
17369  // parameters[2] : line broadening scale factor (CW) [1]
17370  // f_grid : [Hz]
17371  // abs_p : [Pa]
17372  // abs_t : [K]
17373  // vmr : [1]
17374  //
17375  const int Nparam = 3;
17376  if ((model == "user") &&
17377  (parameters.nelem() == Nparam)) // -------------------------
17378  {
17379  out3 << "Full model " << name << " is running with \n"
17380  << "user defined parameters according to model " << model << ".\n";
17381  CP98H2OAbsModel(pxsec,
17382  parameters[0],
17383  parameters[1],
17384  parameters[2],
17385  model,
17386  f_grid,
17387  abs_p,
17388  abs_t,
17389  vmr,
17390  verbosity);
17391  } else if ((model == "user") &&
17392  (parameters.nelem() != Nparam)) // --------------------
17393  {
17394  ostringstream os;
17395  os << "Full model " << name << " requires " << Nparam << " input\n"
17396  << "parameters for the model " << model << ",\n"
17397  << "but you specified " << parameters.nelem() << " parameters.\n";
17398  throw runtime_error(os.str());
17399  } else if ((model != "user") &&
17400  (parameters.nelem() == 0)) // --------------------
17401  {
17402  out3 << "Full model " << name << " running with \n"
17403  << "the parameters for model " << model << ".\n";
17405  pxsec, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity);
17406  } else if ((model != "user") &&
17407  (parameters.nelem() != 0)) // --------------------
17408  {
17409  ostringstream os;
17410  os << "ERROR: Full model " << name << " requires NO input\n"
17411  << "parameters for the model " << model << ",\n"
17412  << "but you specified " << parameters.nelem() << " parameters.\n"
17413  << "This ambiguity can not be solved by arts.\n"
17414  << "Please see the arts user guide chapter 3.\n";
17415  throw runtime_error(os.str());
17416  }
17417  }
17418  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17419  else if ("H2O-MPM87" == name) {
17420  //
17421  // specific continuum parameters and units:
17422  // a) output
17423  // pxsec : [1/m],
17424  // b) input
17425  // parameters[0] : continuum scale factor (CC) [1]
17426  // parameters[1] : line strength scale factor (CL) [1]
17427  // parameters[2] : line broadening scale factor (CW) [1]
17428  // f_grid : [Hz]
17429  // abs_p : [Pa]
17430  // abs_t : [K]
17431  // vmr : [1]
17432  //
17433  const int Nparam = 3;
17434  if ((model == "user") &&
17435  (parameters.nelem() == Nparam)) // -------------------------
17436  {
17437  out3 << "Full model " << name << " is running with \n"
17438  << "user defined parameters according to model " << model << ".\n";
17439  MPM87H2OAbsModel(pxsec,
17440  parameters[0],
17441  parameters[1],
17442  parameters[2],
17443  model,
17444  f_grid,
17445  abs_p,
17446  abs_t,
17447  vmr,
17448  verbosity);
17449  } else if ((model == "user") &&
17450  (parameters.nelem() != Nparam)) // --------------------
17451  {
17452  ostringstream os;
17453  os << "Full model " << name << " requires " << Nparam << " input\n"
17454  << "parameters for the model " << model << ",\n"
17455  << "but you specified " << parameters.nelem() << " parameters.\n";
17456  throw runtime_error(os.str());
17457  } else if ((model != "user") &&
17458  (parameters.nelem() == 0)) // --------------------
17459  {
17460  out3 << "Full model " << name << " running with \n"
17461  << "the parameters for model " << model << ".\n";
17463  pxsec, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity);
17464  } else if ((model != "user") &&
17465  (parameters.nelem() != 0)) // --------------------
17466  {
17467  ostringstream os;
17468  os << "ERROR: Full model " << name << " requires NO input\n"
17469  << "parameters for the model " << model << ",\n"
17470  << "but you specified " << parameters.nelem() << " parameters.\n"
17471  << "This ambiguity can not be solved by arts.\n"
17472  << "Please see the arts user guide chapter 3.\n";
17473  throw runtime_error(os.str());
17474  }
17475  }
17476  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17477  else if ("H2O-MPM89" == name) {
17478  //
17479  // specific continuum parameters and units:
17480  // a) output
17481  // pxsec : [1/m],
17482  // b) input
17483  // parameters[0] : continuum scale factor (CC) [1]
17484  // parameters[1] : line strength scale factor (CL) [1]
17485  // parameters[2] : line broadening scale factor (CW [1]
17486  // f_grid : [Hz]
17487  // abs_p : [Pa]
17488  // abs_t : [K]
17489  // vmr : [1]
17490  //
17491  const int Nparam = 3;
17492  if ((model == "user") &&
17493  (parameters.nelem() == Nparam)) // -------------------------
17494  {
17495  out3 << "Full model " << name << " is running with \n"
17496  << "user defined parameters according to model " << model << ".\n";
17497  MPM89H2OAbsModel(pxsec,
17498  parameters[0],
17499  parameters[1],
17500  parameters[2],
17501  model,
17502  f_grid,
17503  abs_p,
17504  abs_t,
17505  vmr,
17506  verbosity);
17507  } else if ((model == "user") &&
17508  (parameters.nelem() != Nparam)) // --------------------
17509  {
17510  ostringstream os;
17511  os << "Full model " << name << " requires " << Nparam << " input\n"
17512  << "parameters for the model " << model << ",\n"
17513  << "but you specified " << parameters.nelem() << " parameters.\n";
17514  throw runtime_error(os.str());
17515  } else if ((model != "user") &&
17516  (parameters.nelem() == 0)) // --------------------
17517  {
17518  out3 << "Full model " << name << " running with \n"
17519  << "the parameters for model " << model << ".\n";
17521  pxsec, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity);
17522  } else if ((model != "user") &&
17523  (parameters.nelem() != 0)) // --------------------
17524  {
17525  ostringstream os;
17526  os << "ERROR: Full model " << name << " requires NO input\n"
17527  << "parameters for the model " << model << ",\n"
17528  << "but you specified " << parameters.nelem() << " parameters.\n"
17529  << "This ambiguity can not be solved by arts.\n"
17530  << "Please see the arts user guide chapter 3.\n";
17531  throw runtime_error(os.str());
17532  }
17533  }
17534  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17535  else if ("H2O-MPM93" == name) {
17536  //
17537  // specific continuum parameters and units:
17538  // OUTPUT
17539  // pxsec : [1/m],
17540  // INPUT
17541  // parameters[0] : continuum scale factor (CC) [1]
17542  // parameters[1] : line strength scale factor (CL) [1]
17543  // parameters[2] : line broadening scale factor (CW) [1]
17544  // f_grid : [Hz]
17545  // abs_p : [Pa]
17546  // abs_t : [K]
17547  // vmr : [1]
17548  //
17549  const int Nparam = 3;
17550  if ((model == "user") &&
17551  (parameters.nelem() == Nparam)) // -------------------------
17552  {
17553  out3 << "Full model " << name << " is running with \n"
17554  << "user defined parameters according to model " << model << ".\n";
17555  MPM93H2OAbsModel(pxsec,
17556  parameters[0],
17557  parameters[1],
17558  parameters[2],
17559  model,
17560  f_grid,
17561  abs_p,
17562  abs_t,
17563  vmr,
17564  verbosity);
17565  } else if ((model == "user") &&
17566  (parameters.nelem() != Nparam)) // --------------------
17567  {
17568  ostringstream os;
17569  os << "Full model " << name << " requires " << Nparam << " input\n"
17570  << "parameters for the model " << model << ",\n"
17571  << "but you specified " << parameters.nelem() << " parameters.\n";
17572  throw runtime_error(os.str());
17573  } else if ((model != "user") &&
17574  (parameters.nelem() == 0)) // --------------------
17575  {
17576  out3 << "Full model " << name << " running with \n"
17577  << "the parameters for model " << model << ".\n";
17579  pxsec, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity);
17580  } else if ((model != "user") &&
17581  (parameters.nelem() != 0)) // --------------------
17582  {
17583  ostringstream os;
17584  os << "ERROR: Full model " << name << " requires NO input\n"
17585  << "parameters for the model " << model << ",\n"
17586  << "but you specified " << parameters.nelem() << " parameters.\n"
17587  << "This ambiguity can not be solved by arts.\n"
17588  << "Please see the arts user guide chapter 3.\n";
17589  throw runtime_error(os.str());
17590  }
17591  }
17592  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17593  else if ("H2O-PWR98" == name) {
17594  // specific continuum parameters and units:
17595  // OUTPUT
17596  // pxsec : [1/m],
17597  // INPUT
17598  // parameters[0] : continuum scale factor (CC) [1]
17599  // parameters[1] : line strength scale factor (CL) [1]
17600  // parameters[2] : line broadening scale factor (CW) [1]
17601  // f_grid : [Hz]
17602  // abs_p : [Pa]
17603  // abs_t : [K]
17604  // vmr : [1]
17605  //
17606  const int Nparam = 3;
17607  if ((model == "user") &&
17608  (parameters.nelem() == Nparam)) // -------------------------
17609  {
17610  out3 << "Full model " << name << " is running with \n"
17611  << "user defined parameters according to model " << model << ".\n";
17612  PWR98H2OAbsModel(pxsec,
17613  parameters[0],
17614  parameters[1],
17615  parameters[2],
17616  model,
17617  f_grid,
17618  abs_p,
17619  abs_t,
17620  vmr,
17621  verbosity);
17622  } else if ((model == "user") &&
17623  (parameters.nelem() != Nparam)) // --------------------
17624  {
17625  ostringstream os;
17626  os << "Full model " << name << " requires " << Nparam << " input\n"
17627  << "parameters for the model " << model << ",\n"
17628  << "but you specified " << parameters.nelem() << " parameters.\n";
17629  throw runtime_error(os.str());
17630  } else if ((model != "user") &&
17631  (parameters.nelem() == 0)) // --------------------
17632  {
17633  out3 << "Full model " << name << " running with \n"
17634  << "the parameters for model " << model << ".\n";
17636  pxsec, 0.00, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity);
17637  } else if ((model != "user") &&
17638  (parameters.nelem() != 0)) // --------------------
17639  {
17640  ostringstream os;
17641  os << "ERROR: Full model " << name << " requires NO input\n"
17642  << "parameters for the model " << model << ",\n"
17643  << "but you specified " << parameters.nelem() << " parameters.\n"
17644  << "This ambiguity can not be solved by arts.\n"
17645  << "Please see the arts user guide chapter 3.\n";
17646  throw runtime_error(os.str());
17647  }
17648  }
17649  // ============= O2 continuum =========================================================
17650  else if ("O2-CIAfunCKDMT100" == name) {
17651  // Model reference:
17652  // F. Thibault, V. Menoux, R. Le Doucen, L. Rosenman,
17653  // J.-M. Hartmann, Ch. Boulet,
17654  // "Infrared collision-induced absorption by O2 near 6.4 microns for
17655  // atmospheric applications: measurements and emprirical modeling",
17656  // Appl. Optics, 35, 5911-5917, (1996).
17657  //
17658  // specific continuum parameters and units:
17659  // OUTPUT
17660  // pxsec : [1/m],
17661  // INPUT
17662  // parameters[0] : continuum scaling
17663  // model : model option ("CKD" or "user")
17664  // f_grid : [Hz]
17665  // abs_p : [Pa]
17666  // abs_t : [K]
17667  // vmr : [1]
17668  //
17669  const int Nparam = 1;
17670  if ((model == "user") &&
17671  (parameters.nelem() == Nparam)) // -------------------------
17672  {
17673  out3 << "Continuum model " << name << " is running with \n"
17674  << "user defined parameters according to model " << model << ".\n";
17676  pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity);
17677  } else if ((model == "user") &&
17678  (parameters.nelem() != Nparam)) // --------------------
17679  {
17680  ostringstream os;
17681  os << "Continuum model " << name << " requires " << Nparam << " input\n"
17682  << "parameters for the model " << model << ",\n"
17683  << "but you specified " << parameters.nelem() << " parameters.\n";
17684  throw runtime_error(os.str());
17685  } else if ((model != "user") &&
17686  (parameters.nelem() == 0)) // --------------------
17687  {
17688  out3 << "Continuum model " << name << " running with \n"
17689  << "the parameters for model " << model << ".\n";
17691  pxsec, 0.00e0, model, f_grid, abs_p, abs_t, vmr, verbosity);
17692  } else if ((model != "user") &&
17693  (parameters.nelem() != 0)) // --------------------
17694  {
17695  ostringstream os;
17696  os << "ERROR: Continuum model " << name << " requires NO input\n"
17697  << "parameters for the model " << model << ",\n"
17698  << "but you specified " << parameters.nelem() << " parameters.\n"
17699  << "This ambiguity can not be solved by arts.\n"
17700  << "Please see the arts user guide chapter 3.\n";
17701  throw runtime_error(os.str());
17702  }
17703  }
17704  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17705  else if ("O2-v0v0CKDMT100" == name) {
17706  // Model reference:
17707  // B. Mate, C. Lugez, G.T. Fraser, W.J. Lafferty,
17708  // "Absolute Intensities for the O2 1.27 micron
17709  // continuum absorption",
17710  // J. Geophys. Res., 104, 30,585-30,590, 1999.
17711  //
17712  // specific continuum parameters and units:
17713  // OUTPUT
17714  // pxsec : [1/m],
17715  // INPUT
17716  // parameters[0] : continuum scaling
17717  // model : model option ("CKD" or "user")
17718  // f_grid : [Hz]
17719  // abs_p : [Pa]
17720  // abs_t : [K]
17721  // vmr : [1]
17722  // abs_n2 : [1]
17723  //
17724 
17725  if (abs_n2.sum() < -1.) {
17726  ostringstream os;
17727  os << "Continuum/full model tag " << name
17728  << " requires N2-vmr, but no tag group contains N2!";
17729  throw runtime_error(os.str());
17730  }
17731 
17732  const int Nparam = 1;
17733  if ((model == "user") &&
17734  (parameters.nelem() == Nparam)) // -------------------------
17735  {
17736  out3 << "Continuum model " << name << " is running with \n"
17737  << "user defined parameters according to model " << model << ".\n";
17738  CKD_mt_v0v0_o2(pxsec,
17739  parameters[0],
17740  model,
17741  f_grid,
17742  abs_p,
17743  abs_t,
17744  vmr,
17745  abs_n2,
17746  verbosity);
17747  } else if ((model == "user") &&
17748  (parameters.nelem() != Nparam)) // --------------------
17749  {
17750  ostringstream os;
17751  os << "Continuum model " << name << " requires " << Nparam << " input\n"
17752  << "parameters for the model " << model << ",\n"
17753  << "but you specified " << parameters.nelem() << " parameters.\n";
17754  throw runtime_error(os.str());
17755  } else if ((model != "user") &&
17756  (parameters.nelem() == 0)) // --------------------
17757  {
17758  out3 << "Continuum model " << name << " running with \n"
17759  << "the parameters for model " << model << ".\n";
17761  pxsec, 0.0e0, model, f_grid, abs_p, abs_t, vmr, abs_n2, verbosity);
17762  } else if ((model != "user") &&
17763  (parameters.nelem() != 0)) // --------------------
17764  {
17765  ostringstream os;
17766  os << "ERROR: Continuum model " << name << " requires NO input\n"
17767  << "parameters for the model " << model << ",\n"
17768  << "but you specified " << parameters.nelem() << " parameters.\n"
17769  << "This ambiguity can not be solved by arts.\n"
17770  << "Please see the arts user guide chapter 3.\n";
17771  throw runtime_error(os.str());
17772  }
17773  }
17774  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17775  else if ("O2-v1v0CKDMT100" == name) {
17776  // Model reference:
17777  // Mlawer, Clough, Brown, Stephen, Landry, Goldman, Murcray,
17778  // "Observed Atmospheric Collision Induced Absorption in Near Infrared Oxygen Bands",
17779  // Journal of Geophysical Research, vol 103, no. D4, pp. 3859-3863, 1998.
17780  //
17781  // specific continuum parameters and units:
17782  // OUTPUT
17783  // pxsec : [1/m],
17784  // INPUT
17785  // parameters[0] : continuum scaling
17786  // model : model option ("CKD" or "user")
17787  // f_grid : [Hz]
17788  // abs_p : [Pa]
17789  // abs_t : [K]
17790  // vmr : [1]
17791  //
17792  const int Nparam = 1;
17793  if ((model == "user") &&
17794  (parameters.nelem() == Nparam)) // -------------------------
17795  {
17796  out3 << "Continuum model " << name << " is running with \n"
17797  << "user defined parameters according to model " << model << ".\n";
17799  pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity);
17800  } else if ((model == "user") &&
17801  (parameters.nelem() != Nparam)) // --------------------
17802  {
17803  ostringstream os;
17804  os << "Continuum model " << name << " requires " << Nparam << " input\n"
17805  << "parameters for the model " << model << ",\n"
17806  << "but you specified " << parameters.nelem() << " parameters.\n";
17807  throw runtime_error(os.str());
17808  } else if ((model != "user") &&
17809  (parameters.nelem() == 0)) // --------------------
17810  {
17811  out3 << "Continuum model " << name << " running with \n"
17812  << "the parameters for model " << model << ".\n";
17813  CKD_mt_v1v0_o2(pxsec, 0.0e0, model, f_grid, abs_p, abs_t, vmr, verbosity);
17814  } else if ((model != "user") &&
17815  (parameters.nelem() != 0)) // --------------------
17816  {
17817  ostringstream os;
17818  os << "ERROR: Continuum model " << name << " requires NO input\n"
17819  << "parameters for the model " << model << ",\n"
17820  << "but you specified " << parameters.nelem() << " parameters.\n"
17821  << "This ambiguity can not be solved by arts.\n"
17822  << "Please see the ARTS User Guide.\n";
17823  throw runtime_error(os.str());
17824  }
17825  }
17826 
17827  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17828  else if ("O2-visCKDMT252" == name) {
17829  // Model reference:
17830  // O2 continuum formulated by Greenblatt et al. over the spectral region
17831  // 8797-29870 cm-1: "Absorption Coefficients of Oxygen Between
17832  // 330 and 1140 nm, G.D. Green blatt, J.J. Orlando, J.B. Burkholder,
17833  // and A.R. Ravishabkara, J. Geophys. Res., 95, 18577-18582, 1990.
17834  //
17835  // specific continuum parameters and units:
17836  // OUTPUT
17837  // pxsec : [1/m],
17838  // INPUT
17839  // parameters[0] : continuum scaling
17840  // model : model option ("CKD" or "user")
17841  // f_grid : [Hz]
17842  // abs_p : [Pa]
17843  // abs_t : [K]
17844  // vmr : [1]
17845  //
17846  const int Nparam = 1;
17847  if ((model == "user") &&
17848  (parameters.nelem() == Nparam)) // -------------------------
17849  {
17850  out3 << "Continuum model " << name << " is running with \n"
17851  << "user defined parameters according to model " << model << ".\n";
17853  pxsec, parameters[0], model, f_grid, abs_p, abs_t, vmr, verbosity);
17854  } else if ((model == "user") &&
17855  (parameters.nelem() != Nparam)) // --------------------
17856  {
17857  ostringstream os;
17858  os << "Continuum model " << name << " requires " << Nparam << " input\n"
17859  << "parameters for the model " << model << ",\n"
17860  << "but you specified " << parameters.nelem() << " parameters.\n";
17861  throw runtime_error(os.str());
17862  } else if ((model != "user") &&
17863  (parameters.nelem() == 0)) // --------------------
17864  {
17865  out3 << "Continuum model " << name << " running with \n"
17866  << "the parameters for model " << model << ".\n";
17868  pxsec, 0.0e0, model, f_grid, abs_p, abs_t, vmr, verbosity);
17869  } else if ((model != "user") &&
17870  (parameters.nelem() != 0)) // --------------------
17871  {
17872  ostringstream os;
17873  os << "ERROR: Continuum model " << name << " requires NO input\n"
17874  << "parameters for the model " << model << ",\n"
17875  << "but you specified " << parameters.nelem() << " parameters.\n"
17876  << "This ambiguity can not be solved by arts.\n"
17877  << "Please see the arts user guide chapter 3.\n";
17878  throw runtime_error(os.str());
17879  }
17880  }
17881 
17882  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17883 
17884  else if ("O2-SelfContStandardType" == name) {
17885  // MPM93, Rosenkranz 1993 O2 continuum:
17886  // see publication side of National Telecommunications and Information Administration
17887  // http://www.its.bldrdoc.gov/pub/all_pubs/all_pubs.html
17888  // and ftp side for downloading the MPM93 original source code:
17889  // ftp://ftp.its.bldrdoc.gov/pub/mpm93/
17890  //
17891  // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen,
17892  // "Atmospheric Remote Sensing by Microwave Radiometry",
17893  // John Wiley & Sons, Inc., 1993, ISBN 0-471-62891-3
17894  // (see also JQSRT, Vol.48, No.5/6 pp.629-643, 1992)
17895  //
17896  // specific continuum parameters and units:
17897  // OUTPUT
17898  // pxsec : [1/m],
17899  // INPUT
17900  // parameters[0] : continuum coefficient (C) [1/m*1/Hz*1/Pa]
17901  // parameters[1] : frequency coefficient (G0) [Hz/Pa]
17902  // parameters[3] : line width parameter (G0A) [1]
17903  // parameters[3] : line width parameter (G0B) [1]
17904  // parameters[2] : temperature exponent (XG0d) [1]
17905  // parameters[2] : temperature exponent (x_s) [1]
17906  // parameters[5] : continuum coefficient (XG0w) [1]
17907  // model : model option ("MPM93", "Rosenkranz", or "user")
17908  // f_grid : [Hz]
17909  // abs_p : [Pa]
17910  // abs_t : [K]
17911  // abs_h2o : [1]
17912  // vmr : [1]
17913  //
17914 
17915  if (abs_h2o.sum() < -1.) {
17916  ostringstream os;
17917  os << "Continuum/full model tag " << name
17918  << " requires H2O-vmr, but no tag group contains H2O!";
17919  throw runtime_error(os.str());
17920  }
17921 
17922  const int Nparam = 6;
17923  if ((model == "user") &&
17924  (parameters.nelem() == Nparam)) // -------------------------
17925  {
17926  out3 << "Continuum model " << name << " is running with \n"
17927  << "user defined parameters according to model " << model << ".\n";
17928  Standard_O2_continuum(pxsec,
17929  parameters[0],
17930  parameters[1],
17931  parameters[2],
17932  parameters[3],
17933  parameters[4],
17934  parameters[5],
17935  model,
17936  f_grid,
17937  abs_p,
17938  abs_t,
17939  abs_h2o,
17940  vmr,
17941  verbosity);
17942  } else if ((model == "user") &&
17943  (parameters.nelem() != Nparam)) // --------------------
17944  {
17945  ostringstream os;
17946  os << "Continuum model " << name << " requires " << Nparam << " input\n"
17947  << "parameters for the model " << model << ",\n"
17948  << "but you specified " << parameters.nelem() << " parameters.\n";
17949  throw runtime_error(os.str());
17950  } else if ((model != "user") &&
17951  (parameters.nelem() == 0)) // --------------------
17952  {
17953  out3 << "Continuum model " << name << " running with \n"
17954  << "the parameters for model " << model << ".\n";
17955  Standard_O2_continuum(pxsec,
17956  0.00,
17957  0.00,
17958  0.00,
17959  0.00,
17960  0.00,
17961  0.00,
17962  model,
17963  f_grid,
17964  abs_p,
17965  abs_t,
17966  abs_h2o,
17967  vmr,
17968  verbosity);
17969  } else if ((model != "user") &&
17970  (parameters.nelem() != 0)) // --------------------
17971  {
17972  ostringstream os;
17973  os << "ERROR: Continuum model " << name << " requires NO input\n"
17974  << "parameters for the model " << model << ",\n"
17975  << "but you specified " << parameters.nelem() << " parameters.\n"
17976  << "This ambiguity can not be solved by arts.\n"
17977  << "Please see the arts user guide chapter 3.\n";
17978  throw runtime_error(os.str());
17979  }
17980  }
17981  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17982  else if ("O2-SelfContMPM93" == name) {
17983  // MPM93 O2 continuum:
17984  // see publication side of National Telecommunications and Information Administration
17985  // http://www.its.bldrdoc.gov/pub/all_pubs/all_pubs.html
17986  // and ftp side for downloading the MPM93 original source code:
17987  // ftp://ftp.its.bldrdoc.gov/pub/mpm93/
17988 
17989  //
17990  // specific continuum parameters and units:
17991  // OUTPUT
17992  // pxsec : [1/m],
17993  // INPUT
17994  // parameters[0] : continuum coefficient (C) [1/m / (Hz²*Pa²)]
17995  // parameters[1] : temperature exponent (x_s) [1]
17996  // f_grid : [Hz]
17997  // abs_p : [Pa]
17998  // abs_t : [K]
17999  // abs_h2o : [1]
18000  // vmr : [1]
18001  //
18002 
18003  if (abs_h2o.sum() < -1.) {
18004  ostringstream os;
18005  os << "Continuum/full model tag " << name
18006  << " requires H2O-vmr, but no tag group contains H2O!";
18007  throw runtime_error(os.str());
18008  }
18009 
18010  const int Nparam = 4;
18011  if ((model == "user") &&
18012  (parameters.nelem() == Nparam)) // -------------------------
18013  {
18014  out3 << "Continuum model " << name << " is running with \n"
18015  << "user defined parameters according to model " << model << ".\n";
18016  MPM93_O2_continuum(pxsec,
18017  parameters[0],
18018  parameters[1],
18019  parameters[2],
18020  parameters[3],
18021  model,
18022  f_grid,
18023  abs_p,
18024  abs_t,
18025  abs_h2o,
18026  vmr,
18027  verbosity);
18028  } else if ((model == "user") &&
18029  (parameters.nelem() != Nparam)) // --------------------
18030  {
18031  ostringstream os;
18032  os << "Continuum model " << name << " requires " << Nparam << " input\n"
18033  << "parameters for the model " << model << ",\n"
18034  << "but you specified " << parameters.nelem() << " parameters.\n";
18035  throw runtime_error(os.str());
18036  } else if ((model != "user") &&
18037  (parameters.nelem() == 0)) // --------------------
18038  {
18039  out3 << "Continuum model " << name << " running with \n"
18040  << "the parameters for model " << model << ".\n";
18041  MPM93_O2_continuum(pxsec,
18042  0.00,
18043  0.00,
18044  0.00,
18045  0.00,
18046  model,
18047  f_grid,
18048  abs_p,
18049  abs_t,
18050  abs_h2o,
18051  vmr,
18052  verbosity);
18053  } else if ((model != "user") &&
18054  (parameters.nelem() != 0)) // --------------------
18055  {
18056  ostringstream os;
18057  os << "ERROR: Continuum model " << name << " requires NO input\n"
18058  << "parameters for the model " << model << ",\n"
18059  << "but you specified " << parameters.nelem() << " parameters.\n"
18060  << "This ambiguity can not be solved by arts.\n"
18061  << "Please see the arts user guide chapter 3.\n";
18062  throw runtime_error(os.str());
18063  }
18064  }
18065  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18066  else if ("O2-SelfContPWR93" == name) {
18067  // data information about this continuum:
18068  // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen,
18069  // "Atmospheric Remote Sensing by Microwave Radiometry",
18070  // John Wiley & Sons, Inc., 1993, ISBN 0-471-62891-3
18071  // (see also JQSRT, Vol.48, No.5/6 pp.629-643, 1992)
18072  //
18073  // specific continuum parameters and units:
18074  // OUTPUT
18075  // pxsec : [1/m],
18076  // INPUT
18077  // parameters[0] : continuum coefficient (C) [K²/(Hz*Pa*m)]
18078  // parameters[1] : temperature exponent (x) [1]
18079  // f_grid : [Hz]
18080  // abs_p : [Pa]
18081  // abs_t : [K]
18082  // vmr : [1]
18083  //
18084 
18085  if (abs_h2o.sum() < -1.) {
18086  ostringstream os;
18087  os << "Continuum/full model tag " << name
18088  << " requires H2O-vmr, but no tag group contains H2O!";
18089  throw runtime_error(os.str());
18090  }
18091 
18092  const int Nparam = 4;
18093  if ((model == "user") &&
18094  (parameters.nelem() == Nparam)) // -------------------------
18095  {
18096  out3 << "Continuum model " << name << " is running with \n"
18097  << "user defined parameters according to model " << model << ".\n";
18099  parameters[0],
18100  parameters[1],
18101  parameters[2],
18102  parameters[3],
18103  model,
18104  f_grid,
18105  abs_p,
18106  abs_t,
18107  abs_h2o,
18108  vmr,
18109  verbosity);
18110  } else if ((model == "user") &&
18111  (parameters.nelem() != Nparam)) // --------------------
18112  {
18113  ostringstream os;
18114  os << "Continuum model " << name << " requires " << Nparam << " input\n"
18115  << "parameters for the model " << model << ",\n"
18116  << "but you specified " << parameters.nelem() << " parameters.\n";
18117  throw runtime_error(os.str());
18118  } else if ((model != "user") &&
18119  (parameters.nelem() == 0)) // --------------------
18120  {
18121  out3 << "Continuum model " << name << " running with \n"
18122  << "the parameters for model " << model << ".\n";
18124  0.00,
18125  0.00,
18126  0.00,
18127  0.00,
18128  model,
18129  f_grid,
18130  abs_p,
18131  abs_t,
18132  abs_h2o,
18133  vmr,
18134  verbosity);
18135  } else if ((model != "user") &&
18136  (parameters.nelem() != 0)) // --------------------
18137  {
18138  ostringstream os;
18139  os << "ERROR: Continuum model " << name << " requires NO input\n"
18140  << "parameters for the model " << model << ",\n"
18141  << "but you specified " << parameters.nelem() << " parameters.\n"
18142  << "This ambiguity can not be solved by arts.\n"
18143  << "Please see the arts user guide chapter 3.\n";
18144  throw runtime_error(os.str());
18145  }
18146  }
18147  // ============= O2 full model ========================================================
18148  else if ("O2-PWR88" == name) {
18149  // REFERENCE FOR EQUATIONS AND COEFFICIENTS:
18150  // P.W. ROSENKRANZ, CHAP. 2 AND APPENDIX, IN ATMOSPHERIC REMOTE SENSING
18151  // BY MICROWAVE RADIOMETRY (M.A. JANSSEN, ED. 1993)
18152  // AND
18153  // H.J. LIEBE ET AL, JQSRT V.48, PP.629-643 (1992)
18154  // (EXCEPT: SUBMILLIMETER LINE INTENSITIES FROM HITRAN92)
18155  // AND
18156  // P. W. ROSENKRANZ, INTERFERENCE COEFFICIENTS FOR THE
18157  // OVERLAPPING OXYGEN LINES IN AIR, JQSRT, 1988, VOLUME 39, 287-297.
18158  //
18159  // the only difference to the 1993 version is the line mixing
18160  // parameter Y, which is taken from the above reference JQSRT, 1988.
18161  //
18162  // specific continuum parameters and units:
18163  // OUTPUT
18164  // pxsec : [1/m],
18165  // INPUT
18166  // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
18167  // parameters[1] : line strength scale factor, default CL = 1.000 [1]
18168  // parameters[1] : line broadening scale factor, default CW = 1.000 [1]
18169  // parameters[1] : line coupling scale factor, default CO = 1.000 [1]
18170  // f_grid : [Hz]
18171  // abs_p : [Pa]
18172  // abs_t : [K]
18173  // abs_h2o, : [1]
18174  // vmr : [1]
18175  //
18176 
18177  if (abs_h2o.sum() < -1.) {
18178  ostringstream os;
18179  os << "Continuum/full model tag " << name
18180  << " requires H2O-vmr, but no tag group contains H2O!";
18181  throw runtime_error(os.str());
18182  }
18183 
18184  const int Nparam = 4;
18185  const char *version = "PWR88";
18186  if ((model == "user") &&
18187  (parameters.nelem() == Nparam)) // -------------------------
18188  {
18189  out3 << "Full model " << name << " is running with \n"
18190  << "user defined parameters according to model " << model << ".\n";
18191  PWR93O2AbsModel(pxsec,
18192  parameters[0], // continuum term scale factor
18193  parameters[1], // line strength scale factor
18194  parameters[2], // line broadening scale factor
18195  parameters[3], // line coupling scale factor
18196  model,
18197  version,
18198  f_grid,
18199  abs_p,
18200  abs_t,
18201  abs_h2o,
18202  vmr,
18203  verbosity);
18204  } else if ((model == "user") &&
18205  (parameters.nelem() != Nparam)) // --------------------
18206  {
18207  ostringstream os;
18208  os << "Full model " << name << " requires " << Nparam << " input\n"
18209  << "parameters for the model " << model << ",\n"
18210  << "but you specified " << parameters.nelem() << " parameters.\n";
18211  throw runtime_error(os.str());
18212  } else if ((model != "user") &&
18213  (parameters.nelem() == 0)) // --------------------
18214  {
18215  out3 << "Full model " << name << " running with \n"
18216  << "the parameters for model " << model << ".\n";
18217  PWR93O2AbsModel(pxsec,
18218  0.00,
18219  0.00,
18220  0.00,
18221  0.00,
18222  model,
18223  version,
18224  f_grid,
18225  abs_p,
18226  abs_t,
18227  abs_h2o,
18228  vmr,
18229  verbosity);
18230  } else if ((model != "user") &&
18231  (parameters.nelem() != 0)) // --------------------
18232  {
18233  ostringstream os;
18234  os << "ERROR: Full model " << name << " requires NO input\n"
18235  << "parameters for the model " << model << ",\n"
18236  << "but you specified " << parameters.nelem() << " parameters.\n"
18237  << "This ambiguity can not be solved by arts.\n"
18238  << "Please see the arts user guide chapter 3.\n";
18239  throw runtime_error(os.str());
18240  }
18241  }
18242  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18243  else if ("O2-PWR93" == name) {
18244  // REFERENCE FOR EQUATIONS AND COEFFICIENTS:
18245  // P.W. ROSENKRANZ, CHAP. 2 AND APPENDIX, IN ATMOSPHERIC REMOTE SENSING
18246  // BY MICROWAVE RADIOMETRY (M.A. JANSSEN, ED. 1993)
18247  // AND H.J. LIEBE ET AL, JQSRT V.48, PP.629-643 (1992)
18248  // (EXCEPT: SUBMILLIMETER LINE INTENSITIES FROM HITRAN92)
18249  //
18250  // specific continuum parameters and units:
18251  // OUTPUT
18252  // pxsec : [1/m],
18253  // INPUT
18254  // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
18255  // parameters[1] : line strength scale factor, default CL = 1.000 [1]
18256  // parameters[1] : line broadening scale factor, default CW = 1.000 [1]
18257  // parameters[1] : line coupling scale factor, default CO = 1.000 [1]
18258  // f_grid : [Hz]
18259  // abs_p : [Pa]
18260  // abs_t : [K]
18261  // abs_h2o, : [1]
18262  // vmr : [1]
18263  //
18264 
18265  if (abs_h2o.sum() < -1.) {
18266  ostringstream os;
18267  os << "Continuum/full model tag " << name
18268  << " requires H2O-vmr, but no tag group contains H2O!";
18269  throw runtime_error(os.str());
18270  }
18271 
18272  const int Nparam = 4;
18273  const char *version = "PWR93";
18274  if ((model == "user") &&
18275  (parameters.nelem() == Nparam)) // -------------------------
18276  {
18277  out3 << "Full model " << name << " is running with \n"
18278  << "user defined parameters according to model " << model << ".\n";
18279  PWR93O2AbsModel(pxsec,
18280  parameters[0], // continuum term scale factor
18281  parameters[1], // line strength scale factor
18282  parameters[2], // line broadening scale factor
18283  parameters[3], // line coupling scale factor
18284  model,
18285  version,
18286  f_grid,
18287  abs_p,
18288  abs_t,
18289  abs_h2o,
18290  vmr,
18291  verbosity);
18292  } else if ((model == "user") &&
18293  (parameters.nelem() != Nparam)) // --------------------
18294  {
18295  ostringstream os;
18296  os << "Full model " << name << " requires " << Nparam << " input\n"
18297  << "parameters for the model " << model << ",\n"
18298  << "but you specified " << parameters.nelem() << " parameters.\n";
18299  throw runtime_error(os.str());
18300  } else if ((model != "user") &&
18301  (parameters.nelem() == 0)) // --------------------
18302  {
18303  out3 << "Full model " << name << " running with \n"
18304  << "the parameters for model " << model << ".\n";
18305  PWR93O2AbsModel(pxsec,
18306  0.00,
18307  0.00,
18308  0.00,
18309  0.00,
18310  model,
18311  version,
18312  f_grid,
18313  abs_p,
18314  abs_t,
18315  abs_h2o,
18316  vmr,
18317  verbosity);
18318  } else if ((model != "user") &&
18319  (parameters.nelem() != 0)) // --------------------
18320  {
18321  ostringstream os;
18322  os << "ERROR: Full model " << name << " requires NO input\n"
18323  << "parameters for the model " << model << ",\n"
18324  << "but you specified " << parameters.nelem() << " parameters.\n"
18325  << "This ambiguity can not be solved by arts.\n"
18326  << "Please see the arts user guide chapter 3.\n";
18327  throw runtime_error(os.str());
18328  }
18329  }
18330  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18331  else if ("O2-PWR98" == name) {
18332  // REFERENCES FOR EQUATIONS AND COEFFICIENTS:
18333  // P.W. Rosenkranz, CHAP. 2 and appendix, in ATMOSPHERIC REMOTE SENSING
18334  // BY MICROWAVE RADIOMETRY (M.A. Janssen, ed., 1993).
18335  // H.J. Liebe et al, JQSRT V.48, PP.629-643 (1992).
18336  // M.J. Schwartz, Ph.D. thesis, M.I.T. (1997).
18337  // SUBMILLIMETER LINE INTENSITIES FROM HITRAN96.
18338  // This version differs from Liebe's MPM92 in two significant respects:
18339  // 1. It uses the modification of the 1- line width temperature dependence
18340  // recommended by Schwartz: (1/T).
18341  // 2. It uses the same temperature dependence (X) for submillimeter
18342  // line widths as in the 60 GHz band: (1/T)**0.8
18343  //
18344  // specific continuum parameters and units:
18345  // OUTPUT
18346  // pxsec : [1/m],
18347  // INPUT
18348  // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
18349  // parameters[1] : line strength scale factor, default CL = 1.000 [1]
18350  // parameters[1] : line broadening scale factor, default CW = 1.000 [1]
18351  // parameters[1] : line coupling scale factor, default CO = 1.000 [1]
18352  // f_grid : [Hz]
18353  // abs_p : [Pa]
18354  // abs_t : [K]
18355  // abs_h2o, : [1]
18356  // vmr : [1]
18357  //
18358 
18359  // abs_h2o needed here. check, whether this is valid.
18360  if (abs_h2o.sum() < -1.) {
18361  ostringstream os;
18362  os << "Continuum/full model tag " << name
18363  << " requires H2O-vmr, but no tag group contains H2O!";
18364  throw runtime_error(os.str());
18365  }
18366 
18367  const int Nparam = 4;
18368  const char *version = "PWR98";
18369  if ((model == "user") &&
18370  (parameters.nelem() == Nparam)) // -------------------------
18371  {
18372  out3 << "Full model " << name << " is running with \n"
18373  << "user defined parameters according to model " << model << ".\n";
18374  PWR93O2AbsModel(pxsec,
18375  parameters[0], // continuum term scale factor
18376  parameters[1], // line strength scale factor
18377  parameters[2], // line broadening scale factor
18378  parameters[3], // line coupling scale factor
18379  model,
18380  version,
18381  f_grid,
18382  abs_p,
18383  abs_t,
18384  abs_h2o,
18385  vmr,
18386  verbosity);
18387  } else if ((model == "user") &&
18388  (parameters.nelem() != Nparam)) // --------------------
18389  {
18390  ostringstream os;
18391  os << "Full model " << name << " requires " << Nparam << " input\n"
18392  << "parameters for the model " << model << ",\n"
18393  << "but you specified " << parameters.nelem() << " parameters.\n";
18394  throw runtime_error(os.str());
18395  } else if ((model != "user") &&
18396  (parameters.nelem() == 0)) // --------------------
18397  {
18398  out3 << "Full model " << name << " running with \n"
18399  << "the parameters for model " << model << ".\n";
18400  PWR93O2AbsModel(pxsec,
18401  0.00,
18402  0.00,
18403  0.00,
18404  0.00,
18405  model,
18406  version,
18407  f_grid,
18408  abs_p,
18409  abs_t,
18410  abs_h2o,
18411  vmr,
18412  verbosity);
18413  } else if ((model != "user") &&
18414  (parameters.nelem() != 0)) // --------------------
18415  {
18416  ostringstream os;
18417  os << "ERROR: Full model " << name << " requires NO input\n"
18418  << "parameters for the model " << model << ",\n"
18419  << "but you specified " << parameters.nelem() << " parameters.\n"
18420  << "This ambiguity can not be solved by arts.\n"
18421  << "Please see the arts user guide chapter 3.\n";
18422  throw runtime_error(os.str());
18423  }
18424  }
18425  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18426  else if ("O2-MPM93" == name) {
18427  // H. J. Liebe and G. A. Hufford and M. G. Cotton,
18428  // "Propagation modeling of moist air and suspended water/ice
18429  // particles at frequencies below 1000 GHz",
18430  // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
18431  // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21
18432  //
18433  // specific continuum parameters and units:
18434  // OUTPUT
18435  // pxsec : [1/m],
18436  // INPUT
18437  // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
18438  // parameters[1] : line strength scale factor, default CL = 1.000 [1]
18439  // parameters[2] : line broadening scale factor, default CW = 1.000 [1]
18440  // parameters[3] : line coupling scale factor, default CO = 1.000 [1]
18441  // f_grid : [Hz]
18442  // abs_p : [Pa]
18443  // abs_t : [K]
18444  // abs_h2o, : [1]
18445  // vmr : [1]
18446  //
18447 
18448  if (abs_h2o.sum() < -1.) {
18449  ostringstream os;
18450  os << "Continuum/full model tag " << name
18451  << " requires H2O-vmr, but no tag group contains H2O!";
18452  throw runtime_error(os.str());
18453  }
18454 
18455  const int Nparam = 4;
18456  if ((model == "user") &&
18457  (parameters.nelem() == Nparam)) // -------------------------
18458  {
18459  out3 << "Full model " << name << " is running with \n"
18460  << "user defined parameters according to model " << model << ".\n";
18461  MPM93O2AbsModel(pxsec,
18462  parameters[0], // continuum term scale factor
18463  parameters[1], // line strength scale factor
18464  parameters[2], // line broadening scale factor
18465  parameters[3], // line coupling scale factor
18466  model,
18467  f_grid,
18468  abs_p,
18469  abs_t,
18470  abs_h2o,
18471  vmr,
18472  verbosity);
18473  } else if ((model == "user") &&
18474  (parameters.nelem() != Nparam)) // --------------------
18475  {
18476  ostringstream os;
18477  os << "Full model " << name << " requires " << Nparam << " input\n"
18478  << "parameters for the model " << model << ",\n"
18479  << "but you specified " << parameters.nelem() << " parameters.\n";
18480  throw runtime_error(os.str());
18481  } else if ((model != "user") &&
18482  (parameters.nelem() == 0)) // --------------------
18483  {
18484  out3 << "Full model " << name << " running with \n"
18485  << "the parameters for model " << model << ".\n";
18486  MPM93O2AbsModel(pxsec,
18487  0.00,
18488  0.00,
18489  0.00,
18490  0.00,
18491  model,
18492  f_grid,
18493  abs_p,
18494  abs_t,
18495  abs_h2o,
18496  vmr,
18497  verbosity);
18498  } else if ((model != "user") &&
18499  (parameters.nelem() != 0)) // --------------------
18500  {
18501  ostringstream os;
18502  os << "ERROR: Full model " << name << " requires NO input\n"
18503  << "parameters for the model " << model << ",\n"
18504  << "but you specified " << parameters.nelem() << " parameters.\n"
18505  << "This ambiguity can not be solved by arts.\n"
18506  << "Please see the arts user guide chapter 3.\n";
18507  throw runtime_error(os.str());
18508  }
18509  }
18510  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18511  else if ("O2-TRE05" == name) {
18512  // H. J. Liebe and G. A. Hufford and M. G. Cotton,
18513  // "Propagation modeling of moist air and suspended water/ice
18514  // particles at frequencies below 1000 GHz",
18515  // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
18516  // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21
18517  //
18518  // specific continuum parameters and units:
18519  // OUTPUT
18520  // pxsec : [1/m],
18521  // INPUT
18522  // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
18523  // parameters[1] : line strength scale factor, default CL = 1.000 [1]
18524  // parameters[2] : line broadening scale factor, default CW = 1.000 [1]
18525  // parameters[3] : line coupling scale factor, default CO = 1.000 [1]
18526  // f_grid : [Hz]
18527  // abs_p : [Pa]
18528  // abs_t : [K]
18529  // abs_h2o, : [1]
18530  // vmr : [1]
18531  //
18532 
18533  if (abs_h2o.sum() < -1.) {
18534  ostringstream os;
18535  os << "Continuum/full model tag " << name
18536  << " requires H2O-vmr, but no tag group contains H2O!";
18537  throw runtime_error(os.str());
18538  }
18539 
18540  const int Nparam = 4;
18541  if ((model == "user") &&
18542  (parameters.nelem() == Nparam)) // -------------------------
18543  {
18544  out3 << "Full model " << name << " is running with \n"
18545  << "user defined parameters according to model " << model << ".\n";
18546  TRE05O2AbsModel(pxsec,
18547  parameters[0], // continuum term scale factor
18548  parameters[1], // line strength scale factor
18549  parameters[2], // line broadening scale factor
18550  parameters[3], // line coupling scale factor
18551  model,
18552  f_grid,
18553  abs_p,
18554  abs_t,
18555  abs_h2o,
18556  vmr,
18557  verbosity);
18558  } else if ((model == "user") &&
18559  (parameters.nelem() != Nparam)) // --------------------
18560  {
18561  ostringstream os;
18562  os << "Full model " << name << " requires " << Nparam << " input\n"
18563  << "parameters for the model " << model << ",\n"
18564  << "but you specified " << parameters.nelem() << " parameters.\n";
18565  throw runtime_error(os.str());
18566  } else if ((model != "user") &&
18567  (parameters.nelem() == 0)) // --------------------
18568  {
18569  out3 << "Full model " << name << " running with \n"
18570  << "the parameters for model " << model << ".\n";
18571  TRE05O2AbsModel(pxsec,
18572  0.00,
18573  0.00,
18574  0.00,
18575  0.00,
18576  model,
18577  f_grid,
18578  abs_p,
18579  abs_t,
18580  abs_h2o,
18581  vmr,
18582  verbosity);
18583  } else if ((model != "user") &&
18584  (parameters.nelem() != 0)) // --------------------
18585  {
18586  ostringstream os;
18587  os << "ERROR: Full model " << name << " requires NO input\n"
18588  << "parameters for the model " << model << ",\n"
18589  << "but you specified " << parameters.nelem() << " parameters.\n"
18590  << "This ambiguity can not be solved by arts.\n"
18591  << "Please see the arts user guide chapter 3.\n";
18592  throw runtime_error(os.str());
18593  }
18594  }
18595  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18596  else if ("O2-MPM92" == name) {
18597  // H. J. Liebe, P. W. Rosenkranz and G. A. Hufford,
18598  // Atmospheric 60-GHz Oxygen Spectrum: New Laboratory
18599  // Measurements and Line Parameters
18600  // JQSRT, Vol 48, pp. 629-643, 1992
18601  //
18602  // specific continuum parameters and units:
18603  // OUTPUT
18604  // pxsec : [1/m],
18605  // INPUT
18606  // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
18607  // parameters[1] : line strength scale factor, default CL = 1.000 [1]
18608  // parameters[2] : line broadening scale factor, default CW = 1.000 [1]
18609  // parameters[3] : line coupling scale factor, default CO = 1.000 [1]
18610  // f_grid : [Hz]
18611  // abs_p : [Pa]
18612  // abs_t : [K]
18613  // abs_h2o, : [1]
18614  // vmr : [1]
18615  //
18616 
18617  if (abs_h2o.sum() < -1.) {
18618  ostringstream os;
18619  os << "Continuum/full model tag " << name
18620  << " requires H2O-vmr, but no tag group contains H2O!";
18621  throw runtime_error(os.str());
18622  }
18623 
18624  const int Nparam = 4;
18625  if ((model == "user") &&
18626  (parameters.nelem() == Nparam)) // -------------------------
18627  {
18628  out3 << "Full model " << name << " is running with \n"
18629  << "user defined parameters according to model " << model << ".\n";
18630  MPM92O2AbsModel(pxsec,
18631  parameters[0], // continuum term scale factor
18632  parameters[1], // line strength scale factor
18633  parameters[2], // line broadening scale factor
18634  parameters[3], // line coupling scale factor
18635  model,
18636  f_grid,
18637  abs_p,
18638  abs_t,
18639  abs_h2o,
18640  vmr,
18641  verbosity);
18642  } else if ((model == "user") &&
18643  (parameters.nelem() != Nparam)) // --------------------
18644  {
18645  ostringstream os;
18646  os << "Full model " << name << " requires " << Nparam << " input\n"
18647  << "parameters for the model " << model << ",\n"
18648  << "but you specified " << parameters.nelem() << " parameters.\n";
18649  throw runtime_error(os.str());
18650  } else if ((model != "user") &&
18651  (parameters.nelem() == 0)) // --------------------
18652  {
18653  out3 << "Full model " << name << " running with \n"
18654  << "the parameters for model " << model << ".\n";
18655  MPM92O2AbsModel(pxsec,
18656  0.00,
18657  0.00,
18658  0.00,
18659  0.00,
18660  model,
18661  f_grid,
18662  abs_p,
18663  abs_t,
18664  abs_h2o,
18665  vmr,
18666  verbosity);
18667  } else if ((model != "user") &&
18668  (parameters.nelem() != 0)) // --------------------
18669  {
18670  ostringstream os;
18671  os << "ERROR: Full model " << name << " requires NO input\n"
18672  << "parameters for the model " << model << ",\n"
18673  << "but you specified " << parameters.nelem() << " parameters.\n"
18674  << "This ambiguity can not be solved by arts.\n"
18675  << "Please see the arts user guide chapter 3.\n";
18676  throw runtime_error(os.str());
18677  }
18678  }
18679  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18680  else if ("O2-MPM89" == name) {
18681  // H. J. Liebe,
18682  // MPM - an atmospheric millimeter-wave propagation model,
18683  // Int. J. Infrared and Mill. Waves, Vol 10, pp. 631-650, 1989.
18684  //
18685  // specific continuum parameters and units:
18686  // OUTPUT
18687  // pxsec : [1/m],
18688  // INPUT
18689  // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
18690  // parameters[1] : line strength scale factor, default CL = 1.000 [1]
18691  // parameters[2] : line broadening scale factor, default CW = 1.000 [1]
18692  // parameters[3] : line coupling scale factor, default CO = 1.000 [1]
18693  // f_grid : [Hz]
18694  // abs_p : [Pa]
18695  // abs_t : [K]
18696  // abs_h2o, : [1]
18697  // vmr : [1]
18698  //
18699 
18700  if (abs_h2o.sum() < -1.) {
18701  ostringstream os;
18702  os << "Continuum/full model tag " << name
18703  << " requires H2O-vmr, but no tag group contains H2O!";
18704  throw runtime_error(os.str());
18705  }
18706 
18707  const int Nparam = 4;
18708  if ((model == "user") &&
18709  (parameters.nelem() == Nparam)) // -------------------------
18710  {
18711  out3 << "Full model " << name << " is running with \n"
18712  << "user defined parameters according to model " << model << ".\n";
18713  MPM89O2AbsModel(pxsec,
18714  parameters[0], // continuum term scale factor
18715  parameters[1], // line strength scale factor
18716  parameters[2], // line broadening scale factor
18717  parameters[3], // line coupling scale factor
18718  model,
18719  f_grid,
18720  abs_p,
18721  abs_t,
18722  abs_h2o,
18723  vmr,
18724  verbosity);
18725  } else if ((model == "user") &&
18726  (parameters.nelem() != Nparam)) // --------------------
18727  {
18728  ostringstream os;
18729  os << "Full model " << name << " requires " << Nparam << " input\n"
18730  << "parameters for the model " << model << ",\n"
18731  << "but you specified " << parameters.nelem() << " parameters.\n";
18732  throw runtime_error(os.str());
18733  } else if ((model != "user") &&
18734  (parameters.nelem() == 0)) // --------------------
18735  {
18736  out3 << "Full model " << name << " running with \n"
18737  << "the parameters for model " << model << ".\n";
18738  MPM89O2AbsModel(pxsec,
18739  0.00,
18740  0.00,
18741  0.00,
18742  0.00,
18743  model,
18744  f_grid,
18745  abs_p,
18746  abs_t,
18747  abs_h2o,
18748  vmr,
18749  verbosity);
18750  } else if ((model != "user") &&
18751  (parameters.nelem() != 0)) // --------------------
18752  {
18753  ostringstream os;
18754  os << "ERROR: Full model " << name << " requires NO input\n"
18755  << "parameters for the model " << model << ",\n"
18756  << "but you specified " << parameters.nelem() << " parameters.\n"
18757  << "This ambiguity can not be solved by arts.\n"
18758  << "Please see the arts user guide chapter 3.\n";
18759  throw runtime_error(os.str());
18760  }
18761  }
18762  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18763  else if ("O2-MPM87" == name) {
18764  // H. J. Liebe and D. H. Layton,
18765  // Millimeter-wave properties of the atmosphere:
18766  // Laboratory studies and propagation modelling,
18767  // NITA Report 87-224,
18768  // U.S. Dept. of Commerce, National Telecommunications and Information
18769  // Administration, Institute for Communication Sciences, rep. 87-224,
18770  // 325 Broadway, Boulder, CO 80303-3328
18771  //
18772  // specific continuum parameters and units:
18773  // OUTPUT
18774  // pxsec : [1/m],
18775  // INPUT
18776  // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
18777  // parameters[1] : line strength scale factor, default CL = 1.000 [1]
18778  // parameters[2] : line broadening scale factor, default CW = 1.000 [1]
18779  // parameters[3] : line coupling scale factor, default CO = 1.000 [1]
18780  // f_grid : [Hz]
18781  // abs_p : [Pa]
18782  // abs_t : [K]
18783  // abs_h2o, : [1]
18784  // vmr : [1]
18785  //
18786 
18787  if (abs_h2o.sum() < -1.) {
18788  ostringstream os;
18789  os << "Continuum/full model tag " << name
18790  << " requires H2O-vmr, but no tag group contains H2O!";
18791  throw runtime_error(os.str());
18792  }
18793 
18794  const int Nparam = 4;
18795  if ((model == "user") &&
18796  (parameters.nelem() == Nparam)) // -------------------------
18797  {
18798  out3 << "Full model " << name << " is running with \n"
18799  << "user defined parameters according to model " << model << ".\n";
18800  MPM87O2AbsModel(pxsec,
18801  parameters[0], // continuum term scale factor
18802  parameters[1], // line strength scale factor
18803  parameters[2], // line broadening scale factor
18804  parameters[3], // line coupling scale factor
18805  model,
18806  f_grid,
18807  abs_p,
18808  abs_t,
18809  abs_h2o,
18810  vmr,
18811  verbosity);
18812  } else if ((model == "user") &&
18813  (parameters.nelem() != Nparam)) // --------------------
18814  {
18815  ostringstream os;
18816  os << "Full model " << name << " requires " << Nparam << " input\n"
18817  << "parameters for the model " << model << ",\n"
18818  << "but you specified " << parameters.nelem() << " parameters.\n";
18819  throw runtime_error(os.str());
18820  } else if ((model != "user") &&
18821  (parameters.nelem() == 0)) // --------------------
18822  {
18823  out3 << "Full model " << name << " running with \n"
18824  << "the parameters for model " << model << ".\n";
18825  MPM87O2AbsModel(pxsec,
18826  0.00,
18827  0.00,
18828  0.00,
18829  0.00,
18830  model,
18831  f_grid,
18832  abs_p,
18833  abs_t,
18834  abs_h2o,
18835  vmr,
18836  verbosity);
18837  } else if ((model != "user") &&
18838  (parameters.nelem() != 0)) // --------------------
18839  {
18840  ostringstream os;
18841  os << "ERROR: Full model " << name << " requires NO input\n"
18842  << "parameters for the model " << model << ",\n"
18843  << "but you specified " << parameters.nelem() << " parameters.\n"
18844  << "This ambiguity can not be solved by arts.\n"
18845  << "Please see the arts user guide chapter 3.\n";
18846  throw runtime_error(os.str());
18847  }
18848  }
18849  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18850  else if ("O2-MPM85" == name) {
18851  // H. J. Liebe and D. H. Layton,
18852  // An updated model for millimeter wave propagation in moist air
18853  // Radio Science, vol. 20, pp. 1069-1089, 1985
18854  //
18855  // specific continuum parameters and units:
18856  // OUTPUT
18857  // pxsec : [1/m],
18858  // INPUT
18859  // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
18860  // parameters[1] : line strength scale factor, default CL = 1.000 [1]
18861  // parameters[2] : line broadening scale factor, default CW = 1.000 [1]
18862  // parameters[3] : line coupling scale factor, default CO = 1.000 [1]
18863  // f_grid : [Hz]
18864  // abs_p : [Pa]
18865  // abs_t : [K]
18866  // abs_h2o, : [1]
18867  // vmr : [1]
18868  //
18869 
18870  if (abs_h2o.sum() < -1.) {
18871  ostringstream os;
18872  os << "Continuum/full model tag " << name
18873  << " requires H2O-vmr, but no tag group contains H2O!";
18874  throw runtime_error(os.str());
18875  }
18876 
18877  const int Nparam = 4;
18878  if ((model == "user") &&
18879  (parameters.nelem() == Nparam)) // -------------------------
18880  {
18881  out3 << "Full model " << name << " is running with \n"
18882  << "user defined parameters according to model " << model << ".\n";
18883  MPM85O2AbsModel(pxsec,
18884  parameters[0], // continuum term scale factor
18885  parameters[1], // line strength scale factor
18886  parameters[2], // line broadening scale factor
18887  parameters[3], // line coupling scale factor
18888  model,
18889  f_grid,
18890  abs_p,
18891  abs_t,
18892  abs_h2o,
18893  vmr,
18894  verbosity);
18895  } else if ((model == "user") &&
18896  (parameters.nelem() != Nparam)) // --------------------
18897  {
18898  ostringstream os;
18899  os << "Full model " << name << " requires " << Nparam << " input\n"
18900  << "parameters for the model " << model << ",\n"
18901  << "but you specified " << parameters.nelem() << " parameters.\n";
18902  throw runtime_error(os.str());
18903  } else if ((model != "user") &&
18904  (parameters.nelem() == 0)) // --------------------
18905  {
18906  out3 << "Full model " << name << " running with \n"
18907  << "the parameters for model " << model << ".\n";
18908  MPM85O2AbsModel(pxsec,
18909  0.00,
18910  0.00,
18911  0.00,
18912  0.00,
18913  model,
18914  f_grid,
18915  abs_p,
18916  abs_t,
18917  abs_h2o,
18918  vmr,
18919  verbosity);
18920  } else if ((model != "user") &&
18921  (parameters.nelem() != 0)) // --------------------
18922  {
18923  ostringstream os;
18924  os << "ERROR: Full model " << name << " requires NO input\n"
18925  << "parameters for the model " << model << ",\n"
18926  << "but you specified " << parameters.nelem() << " parameters.\n"
18927  << "This ambiguity can not be solved by arts.\n"
18928  << "Please see the arts user guide chapter 3.\n";
18929  throw runtime_error(os.str());
18930  }
18931  }
18932  // ============= N2 continuum =========================================================
18933  else if ("N2-SelfContMPM93" == name) {
18934  // MPM93 N2 continuum:
18935  // see publication side of National Telecommunications and Information Administration
18936  // http://www.its.bldrdoc.gov/pub/all_pubs/all_pubs.html
18937  // and ftp side for downloading the MPM93 original source code:
18938  // ftp://ftp.its.bldrdoc.gov/pub/mpm93/
18939  //
18940  // specific continuum parameters and units:
18941  // OUTPUT
18942  // pxsec : [1/m],
18943  // INPUT
18944  // parameters[0] : strength parameter [1/m * 1/(Hz²*Pa²)]
18945  // parameters[1] : broadening parameter [1]
18946  // parameters[2] : temperature exponent [1]
18947  // parameters[3] : frequency exponent [1]
18948  // f_grid : [Hz]
18949  // abs_p : [Pa]
18950  // abs_t : [K]
18951  // abs_h2o : [1]
18952  // vmr : [1]
18953  //
18954 
18955  if (abs_h2o.sum() < -1.) {
18956  ostringstream os;
18957  os << "Continuum/full model tag " << name
18958  << " requires H2O-vmr, but no tag group contains H2O!";
18959  throw runtime_error(os.str());
18960  }
18961 
18962  const int Nparam = 4;
18963  if ((model == "user") &&
18964  (parameters.nelem() == Nparam)) // -------------------------
18965  {
18966  out3 << "Continuum model " << name << " is running with \n"
18967  << "user defined parameters according to model " << model << ".\n";
18968  MPM93_N2_continuum(pxsec,
18969  parameters[0],
18970  parameters[1],
18971  parameters[2],
18972  parameters[3],
18973  model,
18974  f_grid,
18975  abs_p,
18976  abs_t,
18977  abs_h2o,
18978  vmr,
18979  verbosity);
18980  } else if ((model == "user") &&
18981  (parameters.nelem() != Nparam)) // --------------------
18982  {
18983  ostringstream os;
18984  os << "Continuum model " << name << " requires " << Nparam << " input\n"
18985  << "parameters for the model " << model << ",\n"
18986  << "but you specified " << parameters.nelem() << " parameters.\n";
18987  throw runtime_error(os.str());
18988  } else if ((model == "MPM93Scale") &&
18989  (parameters.nelem() == 1)) // --------------------
18990  {
18991  out3 << "Continuum model " << name << " running with \n"
18992  << "the parameters for model " << model << ".\n";
18993  MPM93_N2_continuum(pxsec,
18994  parameters[0],
18995  0.00,
18996  0.00,
18997  0.00,
18998  model,
18999  f_grid,
19000  abs_p,
19001  abs_t,
19002  abs_h2o,
19003  vmr,
19004  verbosity);
19005  } else if ((model == "MPM93Scale") &&
19006  (parameters.nelem() != 1)) // --------------------
19007  {
19008  ostringstream os;
19009  os << "Continuum model " << name << " requires 1 scaling input\n"
19010  << "parameters for the model " << model << ",\n"
19011  << "but you specified " << parameters.nelem() << " parameters.\n";
19012  throw runtime_error(os.str());
19013  } else if ((model != "user") && (model != "MPM93Scale") &&
19014  (parameters.nelem() == 0)) // --
19015  {
19016  out3 << "Continuum model " << name << " running with \n"
19017  << "the parameters for model " << model << ".\n";
19018  MPM93_N2_continuum(pxsec,
19019  0.00,
19020  0.00,
19021  0.00,
19022  0.00,
19023  model,
19024  f_grid,
19025  abs_p,
19026  abs_t,
19027  abs_h2o,
19028  vmr,
19029  verbosity);
19030  }
19031  /* --------------------------------------------------------------------------
19032  else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19033  {
19034  ostringstream os;
19035  os << "ERROR: Continuum model " << name << " requires NO input\n"
19036  << "parameters for the model " << model << ",\n"
19037  << "but you specified " << parameters.nelem() << " parameters.\n"
19038  << "This ambiguity can not be solved by arts.\n"
19039  << "Please see the arts user guide chapter 3.\n";
19040  throw runtime_error(os.str());
19041  }
19042  ----------------------------------------------------------------------*/
19043  }
19044  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19045  else if ("N2-DryContATM01" == name) {
19046  // data information about this continuum:
19047  // Pardo et al. model model (IEEE, Trans. Ant. Prop.,
19048  // Vol 49, No 12, pp. 1683-1694, 2001)
19049  //
19050  // specific continuum parameters and units:
19051  // a) output
19052  // pxsec : [1/m],
19053  // b) input
19054  // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
19055  // f_grid : [Hz]
19056  // abs_p : [Pa]
19057  // abs_t : [K]
19058  // vmr : [1] N2 vmr
19059  // abs_h2o : [1] H2O vmr
19060  //
19061 
19062  if (abs_h2o.sum() < -1.) {
19063  ostringstream os;
19064  os << "Continuum/full model tag " << name
19065  << " requires H2O-vmr, but no tag group contains H2O!";
19066  throw runtime_error(os.str());
19067  }
19068 
19069  const int Nparam = 1;
19070  if ((model == "user") &&
19071  (parameters.nelem() == Nparam)) // -------------------------
19072  {
19073  out3 << "Continuum model " << name << " is running with \n"
19074  << "user defined parameters according to model " << model << ".\n";
19076  parameters[0], // coefficient
19077  model,
19078  f_grid,
19079  abs_p,
19080  abs_t,
19081  vmr,
19082  abs_h2o,
19083  verbosity);
19084  } else if ((model == "user") &&
19085  (parameters.nelem() != Nparam)) // --------------------
19086  {
19087  ostringstream os;
19088  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19089  << "parameters for the model " << model << ",\n"
19090  << "but you specified " << parameters.nelem() << " parameters.\n";
19091  throw runtime_error(os.str());
19092  } else if ((model != "user") &&
19093  (parameters.nelem() == 0)) // --------------------
19094  {
19095  out3 << "Continuum model " << name << " running with \n"
19096  << "the parameters for model " << model << ".\n";
19098  0.000, // coefficient
19099  model,
19100  f_grid,
19101  abs_p,
19102  abs_t,
19103  vmr,
19104  abs_h2o,
19105  verbosity);
19106  } else if ((model != "user") &&
19107  (parameters.nelem() != 0)) // --------------------
19108  {
19109  ostringstream os;
19110  os << "ERROR: Continuum model " << name << " requires NO input\n"
19111  << "parameters for the model " << model << ",\n"
19112  << "but you specified " << parameters.nelem() << " parameters.\n"
19113  << "This ambiguity can not be solved by arts.\n"
19114  << "Please see the arts user guide chapter 3.\n";
19115  throw runtime_error(os.str());
19116  }
19117  }
19118  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19119  else if ("N2-SelfContPWR93" == name) {
19120  // data information about this continuum:
19121  // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen,
19122  // "Atmospheric Remote Sensing by Microwave Radiometry",
19123  // John Wiley & Sons, Inc., 1993, ISBN 0-471-62891-3
19124  //
19125  // specific continuum parameters and units:
19126  // a) output
19127  // pxsec : [1/m],
19128  // b) input
19129  // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
19130  // parameters[1] : continuum temperature exponent [1]
19131  // f_grid : [Hz]
19132  // abs_p : [Pa]
19133  // abs_t : [K]
19134  // vmr : [1]
19135  //
19136  const int Nparam = 2;
19137  if ((model == "user") &&
19138  (parameters.nelem() == Nparam)) // -------------------------
19139  {
19140  out3 << "Continuum model " << name << " is running with \n"
19141  << "user defined parameters according to model " << model << ".\n";
19143  parameters[0], // coefficient
19144  parameters[1], // temp. exponent
19145  model,
19146  f_grid,
19147  abs_p,
19148  abs_t,
19149  vmr,
19150  verbosity);
19151  } else if ((model == "user") &&
19152  (parameters.nelem() != Nparam)) // --------------------
19153  {
19154  ostringstream os;
19155  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19156  << "parameters for the model " << model << ",\n"
19157  << "but you specified " << parameters.nelem() << " parameters.\n";
19158  throw runtime_error(os.str());
19159  } else if ((model != "user") &&
19160  (parameters.nelem() == 0)) // --------------------
19161  {
19162  out3 << "Continuum model " << name << " running with \n"
19163  << "the parameters for model " << model << ".\n";
19165  pxsec, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity);
19166  } else if ((model != "user") &&
19167  (parameters.nelem() != 0)) // --------------------
19168  {
19169  ostringstream os;
19170  os << "ERROR: Continuum model " << name << " requires NO input\n"
19171  << "parameters for the model " << model << ",\n"
19172  << "but you specified " << parameters.nelem() << " parameters.\n"
19173  << "This ambiguity can not be solved by arts.\n"
19174  << "Please see the arts user guide chapter 3.\n";
19175  throw runtime_error(os.str());
19176  }
19177  }
19178  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19179  else if ("N2-SelfContStandardType" == name) {
19180  // data information about this continuum:
19181  // A completely general expression for the N2 continuum
19182  //
19183  // specific continuum parameters and units:
19184  // OUTPUT
19185  // pxsec : [1/m],
19186  // INPUT
19187  // parameters[0] : continuum coefficient (C) [1/m * 1/(Hz*Pa)²]
19188  // parameters[1] : frequency exponent (xf) [1]
19189  // parameters[2] : temperature exponent (xt) [1]
19190  // parameters[3] : pressure exponent (xp) [1]
19191  // f_grid : [Hz]
19192  // abs_p : [Pa]
19193  // abs_t : [K]
19194  // vmr : [1]
19195  const int Nparam = 4;
19196  if ((model == "user") &&
19197  (parameters.nelem() == Nparam)) // -------------------------
19198  {
19199  out3 << "Continuum model " << name << " is running with \n"
19200  << "user defined parameters according to model " << model << ".\n";
19202  parameters[0],
19203  parameters[1],
19204  parameters[2],
19205  parameters[3],
19206  model,
19207  f_grid,
19208  abs_p,
19209  abs_t,
19210  vmr,
19211  verbosity);
19212  } else if ((model == "user") &&
19213  (parameters.nelem() != Nparam)) // --------------------
19214  {
19215  ostringstream os;
19216  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19217  << "parameters for the model " << model << ",\n"
19218  << "but you specified " << parameters.nelem() << " parameters.\n";
19219  throw runtime_error(os.str());
19220  } else if ((model != "user") &&
19221  (parameters.nelem() == 0)) // --------------------
19222  {
19223  out3 << "Continuum model " << name << " running with \n"
19224  << "the parameters for model " << model << ".\n";
19226  0.000,
19227  0.000,
19228  0.000,
19229  0.000,
19230  model,
19231  f_grid,
19232  abs_p,
19233  abs_t,
19234  vmr,
19235  verbosity);
19236  } else if ((model != "user") &&
19237  (parameters.nelem() != 0)) // --------------------
19238  {
19239  ostringstream os;
19240  os << "ERROR: Continuum model " << name << " requires NO input\n"
19241  << "parameters for the model " << model << ",\n"
19242  << "but you specified " << parameters.nelem() << " parameters.\n"
19243  << "This ambiguity can not be solved by arts.\n"
19244  << "Please see the arts user guide chapter 3.\n";
19245  throw runtime_error(os.str());
19246  }
19247  }
19248  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19249  else if ("N2-SelfContBorysow" == name) {
19250  // data information about this continuum:
19251  // A. Borysow and L. Frommhold, The Astrophysical Journal,
19252  // Vol. 311, pp.1043-1057, 1986
19253  const int Nparam = 1;
19254  if ((model == "user") &&
19255  (parameters.nelem() == Nparam)) // -------------------------
19256  {
19257  out3 << "Continuum model " << name << " is running with \n"
19258  << "user defined parameters according to model " << model << ".\n";
19259  BF86_CIA_N2(pxsec,
19260  parameters[0], // scaling factor
19261  model,
19262  f_grid,
19263  abs_p,
19264  abs_t,
19265  vmr,
19266  verbosity);
19267  } else if ((model == "user") &&
19268  (parameters.nelem() != Nparam)) // --------------------
19269  {
19270  ostringstream os;
19271  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19272  << "parameters for the model " << model << ",\n"
19273  << "but you specified " << parameters.nelem() << " parameters.\n";
19274  throw runtime_error(os.str());
19275  } else if ((model != "user") &&
19276  (parameters.nelem() == 0)) // --------------------
19277  {
19278  out3 << "Continuum model " << name << " running with \n"
19279  << "the parameters for model " << model << ".\n";
19280  BF86_CIA_N2(pxsec, 0.0, model, f_grid, abs_p, abs_t, vmr, verbosity);
19281  } else if ((model != "user") &&
19282  (parameters.nelem() != 0)) // --------------------
19283  {
19284  ostringstream os;
19285  os << "ERROR: Continuum model " << name << " requires NO input\n"
19286  << "parameters for the model " << model << ",\n"
19287  << "but you specified " << parameters.nelem() << " parameters. "
19288  << "\n"
19289  << "This ambiguity can not be solved by arts.\n"
19290  << "Please see the arts user guide chapter 3.\n";
19291  throw runtime_error(os.str());
19292  }
19293  }
19294  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19295  else if ("N2-CIArotCKDMT100" == name) {
19296  // data information about this continuum:
19297  // A. Borysow and L. Frommhold, The Astrophysical Journal,
19298  // Vol. 311, pp.1043-1057, 1986
19299  const int Nparam = 1;
19300  if ((model == "user") &&
19301  (parameters.nelem() == Nparam)) // -------------------------
19302  {
19303  out3 << "Continuum model " << name << " is running with \n"
19304  << "user defined parameters according to model " << model << ".\n";
19305  CKD_mt_CIArot_n2(pxsec,
19306  parameters[0], // scaling factor
19307  model,
19308  f_grid,
19309  abs_p,
19310  abs_t,
19311  vmr,
19312  verbosity);
19313  } else if ((model == "user") &&
19314  (parameters.nelem() != Nparam)) // --------------------
19315  {
19316  ostringstream os;
19317  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19318  << "parameters for the model " << model << ",\n"
19319  << "but you specified " << parameters.nelem() << " parameters.\n";
19320  throw runtime_error(os.str());
19321  } else if ((model != "user") &&
19322  (parameters.nelem() == 0)) // --------------------
19323  {
19324  out3 << "Continuum model " << name << " running with \n"
19325  << "the parameters for model " << model << ".\n";
19326  CKD_mt_CIArot_n2(pxsec, 0.0, model, f_grid, abs_p, abs_t, vmr, verbosity);
19327  } else if ((model != "user") &&
19328  (parameters.nelem() != 0)) // --------------------
19329  {
19330  ostringstream os;
19331  os << "ERROR: Continuum model " << name << " requires NO input\n"
19332  << "parameters for the model " << model << ",\n"
19333  << "but you specified " << parameters.nelem() << " parameters. "
19334  << "\n"
19335  << "This ambiguity can not be solved by arts.\n"
19336  << "Please see the arts user guide chapter 3.\n";
19337  throw runtime_error(os.str());
19338  }
19339  }
19340  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19341  else if ("N2-CIAfunCKDMT100" == name) {
19342  // data information about this continuum:
19343  // Lafferty, W.J., A.M. Solodov,A. Weber, W.B. Olson and J._M. Hartmann,
19344  // Infrared collision-induced absorption by
19345  // N2 near 4.3 microns for atmospheric applications:
19346  // Measurements and emprirical modeling,
19347  // Appl. Optics, 35, 5911-5917, (1996)
19348 
19349  const int Nparam = 1;
19350  if ((model == "user") &&
19351  (parameters.nelem() == Nparam)) // -------------------------
19352  {
19353  out3 << "Continuum model " << name << " is running with \n"
19354  << "user defined parameters according to model " << model << ".\n";
19355  CKD_mt_CIAfun_n2(pxsec,
19356  parameters[0], // scaling factor
19357  model,
19358  f_grid,
19359  abs_p,
19360  abs_t,
19361  vmr,
19362  verbosity);
19363  } else if ((model == "user") &&
19364  (parameters.nelem() != Nparam)) // --------------------
19365  {
19366  ostringstream os;
19367  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19368  << "parameters for the model " << model << ",\n"
19369  << "but you specified " << parameters.nelem() << " parameters.\n";
19370  throw runtime_error(os.str());
19371  } else if ((model != "user") &&
19372  (parameters.nelem() == 0)) // --------------------
19373  {
19374  out3 << "Continuum model " << name << " running with \n"
19375  << "the parameters for model " << model << ".\n";
19376  CKD_mt_CIAfun_n2(pxsec, 0.0, model, f_grid, abs_p, abs_t, vmr, verbosity);
19377  } else if ((model != "user") &&
19378  (parameters.nelem() != 0)) // --------------------
19379  {
19380  ostringstream os;
19381  os << "ERROR: Continuum model " << name << " requires NO input\n"
19382  << "parameters for the model " << model << ",\n"
19383  << "but you specified " << parameters.nelem() << " parameters. "
19384  << "\n"
19385  << "This ambiguity can not be solved by arts.\n"
19386  << "Please see the arts user guide chapter 3.\n";
19387  throw runtime_error(os.str());
19388  }
19389  }
19390  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19391  else if ("N2-CIArotCKDMT252" == name) {
19392  // data information about this continuum:
19393  // A. Borysow and L. Frommhold, The Astrophysical Journal,
19394  // Vol. 311, pp.1043-1057, 1986
19395 
19396  if (abs_o2.sum() < -1.) {
19397  ostringstream os;
19398  os << "Continuum/full model tag " << name
19399  << " requires O2-vmr, but no tag group contains O2!";
19400  throw runtime_error(os.str());
19401  }
19402 
19403  if (abs_h2o.sum() < -1.) {
19404  ostringstream os;
19405  os << "Continuum/full model tag " << name
19406  << " requires H2O-vmr, but no tag group contains H2O!";
19407  throw runtime_error(os.str());
19408  }
19409 
19410  const int Nparam = 1;
19411  if ((model == "user") &&
19412  (parameters.nelem() == Nparam)) // -------------------------
19413  {
19414  out3 << "Continuum model " << name << " is running with \n"
19415  << "user defined parameters according to model " << model << ".\n";
19416  CKD_mt_250_CIArot_n2(pxsec,
19417  parameters[0], // scaling factor
19418  model,
19419  f_grid,
19420  abs_p,
19421  abs_t,
19422  vmr,
19423  abs_h2o,
19424  abs_o2,
19425  verbosity);
19426  } else if ((model == "user") &&
19427  (parameters.nelem() != Nparam)) // --------------------
19428  {
19429  ostringstream os;
19430  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19431  << "parameters for the model " << model << ",\n"
19432  << "but you specified " << parameters.nelem() << " parameters.\n";
19433  throw runtime_error(os.str());
19434  } else if ((model != "user") &&
19435  (parameters.nelem() == 0)) // --------------------
19436  {
19437  out3 << "Continuum model " << name << " running with \n"
19438  << "the parameters for model " << model << ".\n";
19439  CKD_mt_250_CIArot_n2(pxsec,
19440  0.0,
19441  model,
19442  f_grid,
19443  abs_p,
19444  abs_t,
19445  vmr,
19446  abs_h2o,
19447  abs_o2,
19448  verbosity);
19449  } else if ((model != "user") &&
19450  (parameters.nelem() != 0)) // --------------------
19451  {
19452  ostringstream os;
19453  os << "ERROR: Continuum model " << name << " requires NO input\n"
19454  << "parameters for the model " << model << ",\n"
19455  << "but you specified " << parameters.nelem() << " parameters. "
19456  << "\n"
19457  << "This ambiguity can not be solved by arts.\n"
19458  << "Please see the arts user guide chapter 3.\n";
19459  throw runtime_error(os.str());
19460  }
19461  }
19462  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19463  else if ("N2-CIAfunCKDMT252" == name) {
19464  // data information about this continuum:
19465  // Lafferty, W.J., A.M. Solodov,A. Weber, W.B. Olson and J._M. Hartmann,
19466  // Infrared collision-induced absorption by
19467  // N2 near 4.3 microns for atmospheric applications:
19468  // Measurements and emprirical modeling,
19469  // Appl. Optics, 35, 5911-5917, (1996)
19470 
19471  if (abs_o2.sum() < -1.) {
19472  ostringstream os;
19473  os << "Continuum/full model tag " << name
19474  << " requires O2-vmr, but no tag group contains O2!";
19475  throw runtime_error(os.str());
19476  }
19477 
19478  if (abs_h2o.sum() < -1.) {
19479  ostringstream os;
19480  os << "Continuum/full model tag " << name
19481  << " requires H2O-vmr, but no tag group contains H2O!";
19482  throw runtime_error(os.str());
19483  }
19484 
19485  const int Nparam = 1;
19486  if ((model == "user") &&
19487  (parameters.nelem() == Nparam)) // -------------------------
19488  {
19489  out3 << "Continuum model " << name << " is running with \n"
19490  << "user defined parameters according to model " << model << ".\n";
19491  CKD_mt_250_CIAfun_n2(pxsec,
19492  parameters[0], // scaling factor
19493  model,
19494  f_grid,
19495  abs_p,
19496  abs_t,
19497  vmr,
19498  abs_h2o,
19499  abs_o2,
19500  verbosity);
19501  } else if ((model == "user") &&
19502  (parameters.nelem() != Nparam)) // --------------------
19503  {
19504  ostringstream os;
19505  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19506  << "parameters for the model " << model << ",\n"
19507  << "but you specified " << parameters.nelem() << " parameters.\n";
19508  throw runtime_error(os.str());
19509  } else if ((model != "user") &&
19510  (parameters.nelem() == 0)) // --------------------
19511  {
19512  out3 << "Continuum model " << name << " running with \n"
19513  << "the parameters for model " << model << ".\n";
19514  CKD_mt_250_CIAfun_n2(pxsec,
19515  0.0,
19516  model,
19517  f_grid,
19518  abs_p,
19519  abs_t,
19520  vmr,
19521  abs_h2o,
19522  abs_o2,
19523  verbosity);
19524  } else if ((model != "user") &&
19525  (parameters.nelem() != 0)) // --------------------
19526  {
19527  ostringstream os;
19528  os << "ERROR: Continuum model " << name << " requires NO input\n"
19529  << "parameters for the model " << model << ",\n"
19530  << "but you specified " << parameters.nelem() << " parameters. "
19531  << "\n"
19532  << "This ambiguity can not be solved by arts.\n"
19533  << "Please see the arts user guide chapter 3.\n";
19534  throw runtime_error(os.str());
19535  }
19536  }
19537 
19538  // ============= CO2 continuum ========================================================
19539  else if ("CO2-CKD241" == name) {
19540  // data information about this continuum:
19541  // CKDv2.4.1 model at http://www.rtweb.aer.com/continuum_frame.html
19542  // This continuum accounts for the far wings of the many COS lines/bands since
19543  // the line is used with a cutoff in the line shape with +/- 25 cm^-1.
19544  //
19545  // specific continuum parameters and units:
19546  // OUTPUT
19547  // pxsec : [1/m],
19548  // INPUT
19549  // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
19550  // parameters[1] : continuum temperature exponent [1]
19551  // f_grid : [Hz]
19552  // abs_p : [Pa]
19553  // abs_t : [K]
19554  // vmr : [1]
19555  //
19556  const int Nparam = 1;
19557  if ((model == "user") &&
19558  (parameters.nelem() == Nparam)) // -------------------------
19559  {
19560  out3 << "Continuum model " << name << " is running with \n"
19561  << "user defined parameters according to model " << model << ".\n";
19562  CKD_241_co2(pxsec,
19563  parameters[0], // abs. scaling
19564  model,
19565  f_grid,
19566  abs_p,
19567  abs_t,
19568  vmr,
19569  verbosity);
19570  } else if ((model == "user") &&
19571  (parameters.nelem() != Nparam)) // --------------------
19572  {
19573  ostringstream os;
19574  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19575  << "parameters for the model " << model << ",\n"
19576  << "but you specified " << parameters.nelem() << " parameters.\n";
19577  throw runtime_error(os.str());
19578  } else if ((model != "user") &&
19579  (parameters.nelem() == 0)) // --------------------
19580  {
19581  out3 << "Continuum model " << name << " running with \n"
19582  << "the parameters for model " << model << ".\n";
19583  CKD_241_co2(pxsec, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity);
19584  } else if ((model != "user") &&
19585  (parameters.nelem() != 0)) // --------------------
19586  {
19587  ostringstream os;
19588  os << "ERROR: Continuum model " << name << " requires NO input\n"
19589  << "parameters for the model " << model << ",\n"
19590  << "but you specified " << parameters.nelem() << " parameters. "
19591  << "\n"
19592  << "This ambiguity can not be solved by arts.\n"
19593  << "Please see the arts user guide chapter 3.\n";
19594  throw runtime_error(os.str());
19595  }
19596  }
19597  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19598  else if ("CO2-CKDMT100" == name) {
19599  // data information about this continuum:
19600  // CKD model at http://www.rtweb.aer.com/continuum_frame.html
19601  // This continuum accounts for the far wings of the many COS lines/bands since
19602  // the line is used with a cutoff in the line shape with +/- 25 cm^-1.
19603  //
19604  // specific continuum parameters and units:
19605  // OUTPUT
19606  // pxsec : [1/m],
19607  // INPUT
19608  // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
19609  // parameters[1] : continuum temperature exponent [1]
19610  // f_grid : [Hz]
19611  // abs_p : [Pa]
19612  // abs_t : [K]
19613  // vmr : [1]
19614  //
19615  const int Nparam = 1;
19616  if ((model == "user") &&
19617  (parameters.nelem() == Nparam)) // -------------------------
19618  {
19619  out3 << "Continuum model " << name << " is running with \n"
19620  << "user defined parameters according to model " << model << ".\n";
19621  CKD_mt_co2(pxsec,
19622  parameters[0], // abs. scaling
19623  model,
19624  f_grid,
19625  abs_p,
19626  abs_t,
19627  vmr,
19628  verbosity);
19629  } else if ((model == "user") &&
19630  (parameters.nelem() != Nparam)) // --------------------
19631  {
19632  ostringstream os;
19633  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19634  << "parameters for the model " << model << ",\n"
19635  << "but you specified " << parameters.nelem() << " parameters.\n";
19636  throw runtime_error(os.str());
19637  } else if ((model != "user") &&
19638  (parameters.nelem() == 0)) // --------------------
19639  {
19640  out3 << "Continuum model " << name << " running with \n"
19641  << "the parameters for model " << model << ".\n";
19642  CKD_mt_co2(pxsec, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity);
19643  } else if ((model != "user") &&
19644  (parameters.nelem() != 0)) // --------------------
19645  {
19646  ostringstream os;
19647  os << "ERROR: Continuum model " << name << " requires NO input\n"
19648  << "parameters for the model " << model << ",\n"
19649  << "but you specified " << parameters.nelem() << " parameters. "
19650  << "\n"
19651  << "This ambiguity can not be solved by arts.\n"
19652  << "Please see the arts user guide chapter 3.\n";
19653  throw runtime_error(os.str());
19654  }
19655  }
19656  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19657  else if ("CO2-CKDMT252" == name) {
19658  // data information about this continuum:
19659  // CKD model at http://www.rtweb.aer.com/continuum_frame.html
19660  // This continuum accounts for the far wings of the many COS lines/bands since
19661  // the line is used with a cutoff in the line shape with +/- 25 cm^-1.
19662  //
19663  // specific continuum parameters and units:
19664  // OUTPUT
19665  // pxsec : [1/m],
19666  // INPUT
19667  // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
19668  // parameters[1] : continuum temperature exponent [1]
19669  // f_grid : [Hz]
19670  // abs_p : [Pa]
19671  // abs_t : [K]
19672  // vmr : [1]
19673  //
19674  const int Nparam = 1;
19675  if ((model == "user") &&
19676  (parameters.nelem() == Nparam)) // -------------------------
19677  {
19678  out3 << "Continuum model " << name << " is running with \n"
19679  << "user defined parameters according to model " << model << ".\n";
19680  CKD_mt_250_co2(pxsec,
19681  parameters[0], // abs. scaling
19682  model,
19683  f_grid,
19684  abs_p,
19685  abs_t,
19686  vmr,
19687  verbosity);
19688  } else if ((model == "user") &&
19689  (parameters.nelem() != Nparam)) // --------------------
19690  {
19691  ostringstream os;
19692  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19693  << "parameters for the model " << model << ",\n"
19694  << "but you specified " << parameters.nelem() << " parameters.\n";
19695  throw runtime_error(os.str());
19696  } else if ((model != "user") &&
19697  (parameters.nelem() == 0)) // --------------------
19698  {
19699  out3 << "Continuum model " << name << " running with \n"
19700  << "the parameters for model " << model << ".\n";
19701  CKD_mt_250_co2(pxsec, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity);
19702  } else if ((model != "user") &&
19703  (parameters.nelem() != 0)) // --------------------
19704  {
19705  ostringstream os;
19706  os << "ERROR: Continuum model " << name << " requires NO input\n"
19707  << "parameters for the model " << model << ",\n"
19708  << "but you specified " << parameters.nelem() << " parameters. "
19709  << "\n"
19710  << "This ambiguity can not be solved by arts.\n"
19711  << "Please see the arts user guide chapter 3.\n";
19712  throw runtime_error(os.str());
19713  }
19714  }
19715 
19716  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19717  else if ("CO2-SelfContPWR93" == name) {
19718  // data information about this continuum:
19719  // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen,
19720  // "Atmospheric Remote Sensing by Microwave Radiometry",
19721  // John Wiley & Sons, Inc., 1993, ISBN 0-471-62891-3
19722  //
19723  // specific continuum parameters and units:
19724  // OUTPUT
19725  // pxsec : [1/m],
19726  // INPUT
19727  // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
19728  // parameters[1] : continuum temperature exponent [1]
19729  // f_grid : [Hz]
19730  // abs_p : [Pa]
19731  // abs_t : [K]
19732  // vmr : [1]
19733  //
19734  const int Nparam = 2;
19735  if ((model == "user") &&
19736  (parameters.nelem() == Nparam)) // -------------------------
19737  {
19738  out3 << "Continuum model " << name << " is running with \n"
19739  << "user defined parameters according to model " << model << ".\n";
19741  parameters[0], // coefficient
19742  parameters[1], // temp. exponent
19743  model,
19744  f_grid,
19745  abs_p,
19746  abs_t,
19747  vmr,
19748  verbosity);
19749  } else if ((model == "user") &&
19750  (parameters.nelem() != Nparam)) // --------------------
19751  {
19752  ostringstream os;
19753  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19754  << "parameters for the model " << model << ",\n"
19755  << "but you specified " << parameters.nelem() << " parameters.\n";
19756  throw runtime_error(os.str());
19757  } else if ((model != "user") &&
19758  (parameters.nelem() == 0)) // --------------------
19759  {
19760  out3 << "Continuum model " << name << " running with \n"
19761  << "the parameters for model " << model << ".\n";
19763  pxsec, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity);
19764  } else if ((model != "user") &&
19765  (parameters.nelem() != 0)) // --------------------
19766  {
19767  ostringstream os;
19768  os << "ERROR: Continuum model " << name << " requires NO input\n"
19769  << "parameters for the model " << model << ",\n"
19770  << "but you specified " << parameters.nelem() << " parameters. "
19771  << "\n"
19772  << "This ambiguity can not be solved by arts.\n"
19773  << "Please see the arts user guide chapter 3.\n";
19774  throw runtime_error(os.str());
19775  }
19776  }
19777  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19778  else if ("CO2-ForeignContPWR93" == name) {
19779  // data information about this continuum:
19780  // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen,
19781  // "Atmospheric Remote Sensing by Microwave Radiometry",
19782  // John Wiley & Sons, Inc., 1993, ISBN 0-471-62891-3
19783  //
19784  // specific continuum parameters and units:
19785  // OUTPUT
19786  // pxsec : [1/m],
19787  // INPUT
19788  // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
19789  // parameters[1] : continuum temperature exponent [1]
19790  // f_grid : [Hz]
19791  // abs_p : [Pa]
19792  // abs_t : [K]
19793  // abs_n2 : [1]
19794  // vmr : [1]
19795  //
19796 
19797  if (abs_n2.sum() < -1.) {
19798  ostringstream os;
19799  os << "Continuum/full model tag " << name
19800  << " requires N2-vmr, but no tag group contains N2!";
19801  throw runtime_error(os.str());
19802  }
19803 
19804  const int Nparam = 2;
19805  if ((model == "user") &&
19806  (parameters.nelem() == Nparam)) // -------------------------
19807  {
19808  out3 << "Continuum model " << name << " is running with \n"
19809  << "user defined parameters according to model " << model << ".\n";
19811  parameters[0],
19812  parameters[1],
19813  model,
19814  f_grid,
19815  abs_p,
19816  abs_t,
19817  abs_n2,
19818  vmr,
19819  verbosity);
19820  } else if ((model == "user") &&
19821  (parameters.nelem() != Nparam)) // --------------------
19822  {
19823  ostringstream os;
19824  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19825  << "parameters for the model " << model << ",\n"
19826  << "but you specified " << parameters.nelem() << " parameters.\n";
19827  throw runtime_error(os.str());
19828  } else if ((model != "user") &&
19829  (parameters.nelem() == 0)) // --------------------
19830  {
19831  out3 << "Continuum model " << name << " running with \n"
19832  << "the parameters for model " << model << ".\n";
19834  0.00,
19835  0.00,
19836  model,
19837  f_grid,
19838  abs_p,
19839  abs_t,
19840  abs_n2,
19841  vmr,
19842  verbosity);
19843  } else if ((model != "user") &&
19844  (parameters.nelem() != 0)) // --------------------
19845  {
19846  ostringstream os;
19847  os << "ERROR: Continuum model " << name << " requires NO input\n"
19848  << "parameters for the model " << model << ",\n"
19849  << "but you specified " << parameters.nelem() << " parameters. "
19850  << "\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-SelfContHo66" == name) {
19858  // data information about this continuum:
19859  // Reference: Ho, Kaufman and Thaddeus, "Laboratory measurements of
19860  // microwave absorption in models of the atmosphere of Venus", JGR, 1966.
19861  //
19862  // specific continuum parameters and units:
19863  // OUTPUT
19864  // pxsec : [1/m],
19865  // INPUT
19866  // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
19867  // parameters[1] : continuum temperature exponent [1]
19868  // f_grid : [Hz]
19869  // abs_p : [Pa]
19870  // abs_t : [K]
19871  // vmr : [1]
19872  //
19873  const int Nparam = 2;
19874  if ((model == "user") &&
19875  (parameters.nelem() == Nparam)) // -------------------------
19876  {
19877  out3 << "Continuum model " << name << " is running with \n"
19878  << "user defined parameters according to model " << model << ".\n";
19880  parameters[0], // coefficient
19881  parameters[1], // temp. exponent
19882  model,
19883  f_grid,
19884  abs_p,
19885  abs_t,
19886  vmr,
19887  verbosity);
19888  } else if ((model == "user") &&
19889  (parameters.nelem() != Nparam)) // --------------------
19890  {
19891  ostringstream os;
19892  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19893  << "parameters for the model " << model << ",\n"
19894  << "but you specified " << parameters.nelem() << " parameters.\n";
19895  throw runtime_error(os.str());
19896  } else if ((model != "user") &&
19897  (parameters.nelem() == 0)) // --------------------
19898  {
19899  out3 << "Continuum model " << name << " running with \n"
19900  << "the parameters for model " << model << ".\n";
19902  pxsec, 0.00, 0.00, model, f_grid, abs_p, abs_t, vmr, verbosity);
19903  } else if ((model != "user") &&
19904  (parameters.nelem() != 0)) // --------------------
19905  {
19906  ostringstream os;
19907  os << "ERROR: Continuum model " << name << " requires NO input\n"
19908  << "parameters for the model " << model << ",\n"
19909  << "but you specified " << parameters.nelem() << " parameters. "
19910  << "\n"
19911  << "This ambiguity can not be solved by arts.\n"
19912  << "Please see the arts user guide chapter 3.\n";
19913  throw runtime_error(os.str());
19914  }
19915  }
19916  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19917  else if ("CO2-ForeignContHo66" == name) {
19918  // data information about this continuum:
19919  // Reference: Ho, Kaufman and Thaddeus, "Laboratory measurements of
19920  // microwave absorption in models of the atmosphere of Venus", JGR, 1966.
19921  //
19922  // specific continuum parameters and units:
19923  // OUTPUT
19924  // pxsec : [1/m],
19925  // INPUT
19926  // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
19927  // parameters[1] : continuum temperature exponent [1]
19928  // f_grid : [Hz]
19929  // abs_p : [Pa]
19930  // abs_t : [K]
19931  // abs_n2 : [1]
19932  // vmr : [1]
19933  //
19934 
19935  if (abs_n2.sum() < -1.) {
19936  ostringstream os;
19937  os << "Continuum/full model tag " << name
19938  << " requires N2-vmr, but no tag group contains N2!";
19939  throw runtime_error(os.str());
19940  }
19941 
19942  const int Nparam = 2;
19943  if ((model == "user") &&
19944  (parameters.nelem() == Nparam)) // -------------------------
19945  {
19946  out3 << "Continuum model " << name << " is running with \n"
19947  << "user defined parameters according to model " << model << ".\n";
19949  parameters[0],
19950  parameters[1],
19951  model,
19952  f_grid,
19953  abs_p,
19954  abs_t,
19955  abs_n2,
19956  vmr,
19957  verbosity);
19958  } else if ((model == "user") &&
19959  (parameters.nelem() != Nparam)) // --------------------
19960  {
19961  ostringstream os;
19962  os << "Continuum model " << name << " requires " << Nparam << " input\n"
19963  << "parameters for the model " << model << ",\n"
19964  << "but you specified " << parameters.nelem() << " parameters.\n";
19965  throw runtime_error(os.str());
19966  } else if ((model != "user") &&
19967  (parameters.nelem() == 0)) // --------------------
19968  {
19969  out3 << "Continuum model " << name << " running with \n"
19970  << "the parameters for model " << model << ".\n";
19972  0.00,
19973  0.00,
19974  model,
19975  f_grid,
19976  abs_p,
19977  abs_t,
19978  abs_n2,
19979  vmr,
19980  verbosity);
19981  } else if ((model != "user") &&
19982  (parameters.nelem() != 0)) // --------------------
19983  {
19984  ostringstream os;
19985  os << "ERROR: Continuum model " << name << " requires NO input\n"
19986  << "parameters for the model " << model << ",\n"
19987  << "but you specified " << parameters.nelem() << " parameters. "
19988  << "\n"
19989  << "This ambiguity can not be solved by arts.\n"
19990  << "Please see the arts user guide chapter 3.\n";
19991  throw runtime_error(os.str());
19992  }
19993  }
19994  // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19995  // ============= cloud and fog absorption from MPM93 ==================================
19996  else if ("liquidcloud-MPM93" == name) {
19997  // Suspended water droplet absorption parameterization from MPM93 model
19998  // H. J. Liebe and G. A. Hufford and M. G. Cotton,
19999  // "Propagation modeling of moist air and suspended water/ice
20000  // particles at frequencies below 1000 GHz",
20001  // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
20002  // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21
20003  //
20004  // specific continuum parameters and units:
20005  // OUTPUT
20006  // pxsec : [1/m],
20007  // INPUT
20008  // parameters[0] : [1]
20009  // parameters[1] : [1]
20010  // parameters[2] : [1]
20011  // model : [1]
20012  // f_grid : [Hz]
20013  // abs_p : [Pa]
20014  // abs_t : [K]
20015  // vmr : [1]
20016  //
20017  // liquid water droplet parameters:
20018  // suspended water droplet density range: 0-5 g/m³ // // valid atmospheric condition: // temperature : 210 to 373 K // for (Index s = 0; s < f_grid.nelem(); ++s) { if (f_grid[s] > 1e12) { ostringstream os; os << "Liquid cloud absorption model MPM93 only valid at\n" "frequencies up to 1THz. Yours are above."; throw runtime_error(os.str()); } } for (Index s = 0; s < abs_t.nelem(); ++s) { if ((abs_t[s] < 210. || abs_t[s] > 373.) && abs(vmr[s]) > LIQUID_AND_ICE_TREAT_AS_ZERO) { ostringstream os; os << "Liquid cloud absorption model MPM93 only valid at\n" << "temperatures between 210 and 373K.\n" << "LWC values outside this temperature range must be < " << LIQUID_AND_ICE_TREAT_AS_ZERO << " kg/m3.\n" << "Your value at " << abs_t[s] << "K is: " << vmr[s] << " kg/m3."; throw runtime_error(os.str()); } } const int Nparam = 3; if ((model == "user") && (parameters.nelem() == Nparam)) // -------------------- { MPM93WaterDropletAbs(pxsec, parameters[0], // scaling factror parameters[1], // scaling factror parameters[2], // scaling factror model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "MPM93 liquid water cloud absorption model " << name << " requires\n" << Nparam << " input parameter for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "MPM93 liquid water cloud absorption model " << name << " running with \n" << "the parameter for model " << model << ".\n"; MPM93WaterDropletAbs(pxsec, 0.000, // scaling factror 0.000, // scaling factror 0.000, // scaling factror model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: MPM93 liquid water cloud absorption model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 4.\n"; throw runtime_error(os.str()); } } // ============= cloud and fog absorption from ELL07 ================================ else if ("liquidcloud-ELL07" == name) { // Suspended water droplet absorption parameterization from ELL07 model // W. J. Ellison // "Permittivity of Pure Water, at Standard Atmospheric Pressure, over the // Frequency Range 0-25 THz and Temperature Range 0-100C" // J. Phys. Chem. Ref. Data, Vol. 36, No. 1, 2007 // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // model : [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // // liquid water droplet parameters: // suspended water droplet density range: 0-5 g/m³ // // valid atmospheric condition: // temperature : 210 to 373 K // for (Index s = 0; s < f_grid.nelem(); ++s) { if (f_grid[s] > 25e12) { ostringstream os; os << "Liquid cloud absorption model ELL07 only valid at\n" "frequencies up to 25THz. Yours are above."; throw runtime_error(os.str()); } } for (Index s = 0; s < abs_t.nelem(); ++s) { if ((abs_t[s] < 210. || abs_t[s] > 373.) && abs(vmr[s]) > LIQUID_AND_ICE_TREAT_AS_ZERO) { ostringstream os; os << "Liquid cloud absorption model ELL07 only valid at\n" << "temperatures between 210 and 373K.\n" << "LWC values outside this temperature range must be < " << LIQUID_AND_ICE_TREAT_AS_ZERO << " kg/m3.\n" << "Your value at " << abs_t[s] << "K is: " << vmr[s] << " kg/m3."; throw runtime_error(os.str()); } } if ((model == "ELL07") && (parameters.nelem() == 0)) // -------------------- { ELL07WaterDropletAbs(pxsec, model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "ELL07") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: ELL07 liquid water cloud absorption model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 4."; throw runtime_error(os.str()); } else { ostringstream os; os << "ERROR: ELL07 liquid water cloud absorption model " << name << " has no model " << model; throw runtime_error(os.str()); } } // ============= ice particle absorption from MPM93 =================================== else if ("icecloud-MPM93" == name) { // Ice particle absorption parameterization from MPM93 model // H. J. Liebe and G. A. Hufford and M. G. Cotton, // "Propagation modeling of moist air and suspended water/ice // particles at frequencies below 1000 GHz", // AGARD 52nd Specialists Meeting of the Electromagnetic Wave // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21 // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : [1] // parameters[1] : [1] // parameters[2] : [1] // model : [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // // ice crystal parameters: // suspended water droplet density range: 0-10 g/m³ // specific droplet weight value: 1 g/cm³ // // valid atmospheric condition: // temperature : 233 to 323 K // relative humidity: 1 to 100 % // for (Index s = 0; s < f_grid.nelem(); ++s) { if (f_grid[s] > 1e12) { ostringstream os; os << "Ice cloud absorption model MPM93 only valid at\n" "frequencies up to 1THz. Yours are above."; throw runtime_error(os.str()); } } const int Nparam = 3; if ((model == "user") && (parameters.nelem() == Nparam)) // --------------------- { MPM93IceCrystalAbs(pxsec, parameters[0], // scaling factror parameters[1], // scaling factror parameters[2], // scaling factror model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // ---------------- { ostringstream os; os << "MPM93 ice water cloud absorption model " << name << " requires \n" << Nparam << " input parameter for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { MPM93IceCrystalAbs(pxsec, 0.000, // scaling factror 0.000, // scaling factror 0.000, // scaling factror model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: MPM93 ice water cloud absorption model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 4.\n"; throw runtime_error(os.str()); } } // ============= rain extinction from MPM93 =========================================== else if ("rain-MPM93" == name) { // Rain extinction parameterization from MPM93 model, described in // H. J. Liebe, // "MPM - An Atmospheric Millimeter-Wave Propagation Model", // Int. J. Infrared and Millimeter Waves, vol. 10(6), // pp. 631-650, 1989 // and based on // Olsen, R.L., D.V. Rogers, and D. B. Hodge, "The aR^b relation in the // calculation of rain attenuation", IEEE Trans. Antennas Propagat., // vol. AP-26, pp. 318-329, 1978. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : [1] // parameters[1] : [1] // parameters[2] : [1] // model : [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [kg/m2/s] // // rain parameters: // rain rate range: 0-150 mm/h (=0-0.42 kg/m2/s) // // valid atmospheric condition: // temperature : (preferably above 273 K...) // for (Index s = 0; s < f_grid.nelem(); ++s) { if (f_grid[s] > 1e12) { ostringstream os; os << "Rain absorption model MPM93 only valid at\n" "frequencies up to 1THz. Yours is above."; throw runtime_error(os.str()); } } const int Nparam = 3; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "MPM93 rain extinction model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM93RainExt(pxsec, parameters[0], // scaling factor parameters[1], // scaling factor parameters[2], // scaling factor model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "MPM93 rain extinction model " << name << " requires \n" << Nparam << " input parameter for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "MPM93 rain extinction model " << name << " running with \n" << "the parameter for model " << model << ".\n"; MPM93RainExt(pxsec, 0.000, // scaling factor 0.000, // scaling factor 0.000, // scaling factor model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: MPM93 rain extinction model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 4.\n"; throw runtime_error(os.str()); } } else // ----------------------------------------------------------------------- { // none of the continuum or full model tags were selected -> error message. ostringstream os; os << "ERROR: Continuum/ full model tag `" << name << "' not yet implemented in arts!"; throw runtime_error(os.str()); } // We have to divide the result from the internal continuum model by // the number density n to convert it from pseudo cross section to a // true cross section. // Boltzmann constant extern const Numeric BOLTZMAN_CONST; // Loop all pressures: for (Index i = 0; i < abs_p.nelem(); ++i) { const Numeric p_i = abs_p[i]; const Numeric t_i = abs_t[i]; // Calculate total number density from pressure and temperature. // n = n0*T0/p0 * p/T or n = p/kB/t, ideal gas law const Numeric n = p_i / BOLTZMAN_CONST / t_i; // We add to the output variable xsec here, previous content is // not overwritten! pxsec(joker, i) /= n; xsec(joker, i) += pxsec(joker, i); } } // ################################################################################# /** An auxiliary functions that checks if a given continuum model is listed in species_data.cc. This is just in order to verify that this really represents a valid continuum model. The given name should be something like 'H2O-ContStandardSelf'. The function simply checks if there is a species H2O with an isotopologue ContStandardSelf. For user-friendliness, the function also compiles a list of allowed continuum models and gives this as an error message if the model is not found. The function has no return value, since, if the name does not match a valid model an error is thrown anyway. \param name The name of the continuum model to check. \throw runtime_error The model does not exist. \author Stefan Buehler \date 2001-03-12 */ void check_continuum_model(const String &name) { // The species lookup data: using global_data::species_data; // For the list of valid continuum models: ArrayOfString valid_models; bool found = false; // Loop all species: for (Array<SpeciesRecord>::const_iterator i = species_data.begin(); i < species_data.end(); ++i) { String specnam = i->Name(); // Loop all isotopologues: for (Array<IsotopologueRecord>::const_iterator j = i->Isotopologue().begin(); j < i->Isotopologue().end(); ++j) { String isonam = j->Name(); // The specified name consists of a species part and an // isotopologue part, e.g., H2O-ContStandardSelf. We need to // construct a similar String from the species lookup data // by concatenating species name and isotopologue name. String fullnam = specnam + "-" + isonam; // cout << fullnam << "\n"; // See if this is a continuum tag, so that we can add it to // the list: if (j->isContinuum()) { valid_models.push_back(fullnam); } if (name == fullnam) { found = true; } } } // ---------------------------------------------------------------------- // Have we found it? if (!found) { ostringstream os; os << "The String `" << name << "' matches none of the known\n" << "continuum models. Known continuum models are:"; for (ArrayOfString::const_iterator i = valid_models.begin(); i < valid_models.end(); ++i) { os << "\n" << *i; } throw runtime_error(os.str()); } } // // // ################################################################################# // ############################# f2c code implementation ########################### // ################################################################################# // // // ------------------- begin of f2c.h file -------------------------------- // /* f2c.h -- Standard Fortran to C header file */ #ifndef F2C_INCLUDE #define F2C_INCLUDE typedef long int integer; typedef unsigned long int uinteger; typedef char *address; typedef short int shortint; typedef float real_t; typedef double doublereal; typedef struct { real_t r, i; } complex_t; typedef struct { doublereal r, i; } doublecomplex; typedef long int logical; typedef short int shortlogical; typedef char logical1; typedef char integer1; #ifdef INTEGER_STAR_8 /* Adjust for integer*8. */ typedef long long longint; /* system-dependent */ typedef unsigned long long ulongint; /* system-dependent */ #define qbit_clear(a, b) ((a) & ~((ulongint)1 << (b))) #define qbit_set(a, b) ((a) | ((ulongint)1 << (b))) #endif #define TRUE_ (1) #define FALSE_ (0) /* Extern is for use with -E */ #ifndef Extern #define Extern extern #endif /* I/O stuff */ #ifdef f2c_i2 /* for -i2 */ typedef short flag; typedef short ftnlen; typedef short ftnint; #else typedef long int flag; typedef long int ftnlen; typedef long int ftnint; #endif /*external read, write*/ typedef struct { flag cierr; ftnint ciunit; flag ciend; char *cifmt; ftnint cirec; } cilist; /*internal read, write*/ typedef struct { flag icierr; char *iciunit; flag iciend; char *icifmt; ftnint icirlen; ftnint icirnum; } icilist; /*open*/ typedef struct { flag oerr; ftnint ounit; char *ofnm; ftnlen ofnmlen; char *osta; char *oacc; char *ofm; ftnint orl; char *oblnk; } olist; /*close*/ typedef struct { flag cerr; ftnint cunit; char *csta; } cllist; /*rewind, backspace, endfile*/ typedef struct { flag aerr; ftnint aunit; } alist; /* inquire */ typedef struct { flag inerr; ftnint inunit; char *infile; ftnlen infilen; ftnint *inex; /*parameters in standard's order*/ ftnint *inopen; ftnint *innum; ftnint *innamed; char *inname; ftnlen innamlen; char *inacc; ftnlen inacclen; char *inseq; ftnlen inseqlen; char *indir; ftnlen indirlen; char *infmt; ftnlen infmtlen; char *inform; ftnint informlen; char *inunf; ftnlen inunflen; ftnint *inrecl; ftnint *innrec; char *inblank; ftnlen inblanklen; } inlist; #define VOID void union Multitype { /* for multiple entry points */ integer1 g; shortint h; integer i; /* longint j; */ real_t r; doublereal d; complex_t c; doublecomplex z; }; typedef union Multitype Multitype; /*typedef long int Long;*/ /* No longer used; formerly in Namelist */ struct Vardesc { /* for Namelist */ char *name; char *addr; ftnlen *dims; int type; }; typedef struct Vardesc Vardesc; struct Namelist { char *name; Vardesc **vars; int nvars; }; typedef struct Namelist Namelist; #define abs(x) ((x) >= 0 ? (x) : -(x)) #define dabs(x) (doublereal) abs(x) #define min(a, b) ((a) <= (b) ? (a) : (b)) #define max(a, b) ((a) >= (b) ? (a) : (b)) #define dmin(a, b) (doublereal) min(a, b) #define dmax(a, b) (doublereal) max(a, b) #define bit_test(a, b) ((a) >> (b)&1) #define bit_clear(a, b) ((a) & ~((uinteger)1 << (b))) #define bit_set(a, b) ((a) | ((uinteger)1 << (b))) /* procedure parameter types for -A and -C++ */ #define F2C_proc_par_types 1 #ifdef __cplusplus typedef int /* Unknown procedure type */ (*U_fp)(...); typedef shortint (*J_fp)(...); typedef integer (*I_fp)(...); typedef real_t (*R_fp)(...); typedef doublereal (*D_fp)(...), (*E_fp)(...); typedef /* Complex */ VOID (*C_fp)(...); typedef /* Double Complex */ VOID (*Z_fp)(...); typedef logical (*L_fp)(...); typedef shortlogical (*K_fp)(...); typedef /* Character */ VOID (*H_fp)(...); typedef /* Subroutine */ int (*S_fp)(...); #else typedef int /* Unknown procedure type */ (*U_fp)(); typedef shortint (*J_fp)(); typedef integer (*I_fp)(); typedef real_t (*R_fp)(); typedef doublereal (*D_fp)(), (*E_fp)(); typedef /* Complex */ VOID (*C_fp)(); typedef /* Double Complex */ VOID (*Z_fp)(); typedef logical (*L_fp)(); typedef shortlogical (*K_fp)(); typedef /* Character */ VOID (*H_fp)(); typedef /* Subroutine */ int (*S_fp)(); #endif /* E_fp is for real functions when -R is not specified */ typedef VOID C_f; /* complex function */ typedef VOID H_f; /* character function */ typedef VOID Z_f; /* double complex function */ typedef doublereal E_f; /* real function with -R not specified */ /* undef any lower-case symbols that your C compiler predefines, e.g.: */ #ifndef Skip_f2c_Undefs #undef cray #undef gcos #undef mc68010 #undef mc68020 #undef mips #undef pdp11 #undef sgi #undef sparc #undef sun #undef sun2 #undef sun3 #undef sun4 #undef u370 #undef u3b #undef u3b2 #undef u3b5 #undef unix #undef vax #endif #endif // ------------------- end of f2c.h file -------------------------------- // ------------------ begin of Borysow N2N2 F77 code -------------------- /* n2n2tks.f -- translated by f2c (version 20010821). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ /* Common Block Declarations */ struct s_blockin_ { double temp, fnumin, fnumax, dnu; } blockin_; #define blockin_1 blockin_ struct s_app3a_ { double slit, dx, wnrmax3; } app3a_; #define app3a_1 app3a_ struct s_app3b_ { int nsri, ns, nsriup; } app3b_; #define app3b_1 app3b_ struct s_rsilo_ { double rsilo[201]; } rsilo_; #define rsilo_1 rsilo_ struct s_bou43_ { int initb; } bou43_; #define bou43_1 bou43_ union u_bba_ { struct s_m_1 { double omeg[201], rsi[201], rsigg[201], alfa; } m_1; struct s_m_2 { double omeg[201], rsi[201], rsigg[201], beta; } m_2; } bba_; #define bba_1 (bba_.m_1) #define bba_2 (bba_.m_2) struct s_bbc_ { int nsol; } bbc_; #define bbc_1 bbc_ struct s_bf_ { double g0bf, delbf, om0; } bf_; #define bf_1 bf_ struct like_1_ { int like; char lgas[5]; }; #define like_1 (*(struct like_1_ *)&like_) struct s_k1k0_ { int ik1k0; } k1k0_; #define k1k0_1 k1k0_ struct s_bbb_ { int ibound; } bbb_; #define bbb_1 bbb_ struct energ_1_ { double eb[246] /* was [41][6] */; int niv[6]; }; #define energ_1 (*(struct energ_1_ *)&energ_) struct s_dimer_ { int nlines; } dimer_; #define dimer_1 dimer_ struct n2part_1_ { double q1, wn2[2], b01, d01; int jrange2; }; struct n2part_2_ { double q, wn2[2], b0, d0; int jrange1; }; #define n2part_1 (*(struct n2part_1_ *)&n2part_) #define n2part_2 (*(struct n2part_2_ *)&n2part_) union u_bl3_ { struct s_m_1 { double rsi[401]; } m_1; struct s_m_2 { double rsibb[401]; } m_2; } bl3_; #define bl3_1 (bl3_.m_1) #define bl3_2 (bl3_.m_2) union u_bbbb_ { struct s_m_1 { int idelv, iv, ivp, idell, il, ilp; } m_1; struct s_m_2 { int ldelvi, ivi, ivip, ldelel, ll, llp; } m_2; } bbbb_; #define bbbb_1 (bbbb_.m_1) #define bbbb_2 (bbbb_.m_2) /* Initialized data */ struct s_energe_ { double e_1[246]; int e_2[6]; } energ_ = {{-54.99996, -54.86228, -54.58697, -54.17413, -53.62391, -52.93648, -52.11211, -51.15108, -50.05374, -48.82049, -47.45179, -45.94815, -44.31014, -42.53841, -40.63365, -38.59665, -36.42824, -34.12937, -31.70105, -29.14439, -26.46061, -23.65103, -20.71709, -17.66041, -14.48271, -11.18593, -7.77221, -4.24393, -.60374, 3.14531, 6.99978, 10.95566, 15.00818, 19.15136, 23.37787, 27.67681, 32.03237, 36.42278, 40.83668, 45.29436, 49.79246, -31.89437, -31.77215, -31.52779, -31.16143, -30.67334, -30.06382, -29.33328, -28.48222, -27.51123, -26.42099, -25.21229, -23.88603, -22.44322, -20.88502, -19.21272, -17.42777, -15.53182, -13.52669, -11.41446, -9.1975, -6.87848, -4.46049, -1.94714, .65736, 3.34788, 6.11816, 8.95978, 11.8613, 14.80383, 17.75924, 20.71774, 23.71589, 0., 0., 0., 0., 0., 0., 0., 0., 0., -16.05019, -15.9464, -15.73896, -15.42815, -15.0144, -14.4983, -13.88057, -13.16213, -12.34407, -11.42771, -10.41455, -9.30639, -8.10531, -6.81376, -5.43459, -3.97121, -2.42768, -.80899, .87859, 2.62689, 4.42334, 6.24733, 8.06983, 9.90464, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -6.49343, -6.41131, -6.24732, -6.00202, -5.67623, -5.27111, -4.78813, -4.22919, -3.59665, -2.89345, -2.12325, -1.29074, -.40202, .5345, 1.50455, 2.48212, 3.46665, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -1.76583, -1.70887, -1.59552, -1.427, -1.20523, -.93302, -.61434, -.25504, .13641, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -.17133, -.14341, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}, {41, 32, 24, 17, 9, 2}}; struct s_n2part_ { double fill_1[1]; double e_2[4]; int fill_3[1]; } n2part_ = {{0}, {2., 1., 1.98957, 5.8e-6}, {0}}; struct s_like_ { int fill_1[1]; char e_2[5]; } like_ = {{0}, "N2N2"}; /* Table of constant values */ // FIXME static integer c__9 = 9; // FIXME static integer c__1 = 1; // FIXME static integer c__5 = 5; static int cs__1 = 1; static int cs__0 = 0; static double c_b24 = 2.9723; static double c_b25 = -.99569; static double c_b26 = .09464; static double c_b27 = 1.2962e-12; static double c_b28 = -.13048; static double c_b29 = -.03128; static double c_b30 = 3.7969e-14; static double c_b31 = 1.03681; static double c_b32 = -.14336; static int cs__2 = 2; static int cs__3 = 3; static double c_b43 = .180926; static double c_b44 = -1.69153; static double c_b45 = .18605; static double c_b46 = .3; static double c_b47 = 0.; static double c_b49 = 6.6017e-16; static double c_b50 = 2.59982; static double c_b51 = -.31831; static double c_b52 = 1.2481e-12; static double c_b53 = -.57028; static double c_b54 = .05983; static double c_b55 = 5.2681e-13; static double c_b56 = -.24719; static double c_b57 = .00519; static double c_b58 = 2.7518e15; static double c_b59 = -25.38969; static double c_b60 = 2.46542; static int cs__4 = 4; static int cs__5 = 5; // FIXME static integer c__2 = 2; static double c_b78 = .0825299; static double c_b79 = -1.25562; static double c_b80 = .12981; static double c_b84 = 3.6611e-15; static double c_b85 = 1.47688; static double c_b86 = -.16537; static double c_b87 = 6.1264e-10; static double c_b88 = -2.25011; static double c_b89 = .15289; static double c_b90 = 7.982e-10; static double c_b91 = -2.76152; static double c_b92 = .21847; static double c_b93 = 5.2868e-22; static double c_b94 = 7.66253; static double c_b95 = -.77527; static double c_b112 = 119.261; static double c_b113 = -3.78587; static double c_b114 = .34024; static double c_b115 = 9.3777e-12; static double c_b116 = -.66548; static double c_b117 = .0033; static double c_b118 = 3.0395e-13; static double c_b119 = .24728; static double c_b120 = -.06607; static double c_b183 = 1e-6; static double c_b186 = 1.5; #define temp (blockin_1.temp) #define fnumin (blockin_1.fnumin) #define fnumax (blockin_1.fnumax) #define dnu (blockin_1.dnu) #define slit (app3a_1.slit) #define dx (app3a_1.dx) #define rsilo (rsilo_1.rsilo) #define omeg (bba_1.omeg) #define rsi (bba_1.rsi) #define rsigg (bba_1.rsigg) #define nsol (bbc_1.nsol) #define like (like_1.like) #define ik1k0 (k1k0_1.ik1k0) #define ibound (bbb_1.ibound) /* TKS ****** SUBROUTINE N2N2TKS(T, F) ***************************************/ Numeric n2n2tks_(double t, double f) { /* System generated locals */ int s__1; double ret_val; /* Local variables */ //double hexa[10], quad[10]; double freq[10], e; int i__; double s, x, t1, t2, t3, t4; int ij, nf, jj; double rslow1, si; int nr; double ss[1], tt[2]; extern /* Subroutine */ int bound32_(double *, double *, int *), bound54_(double *, double *, int *); //double tksabs[5]; extern /* Subroutine */ int spline_(int *, int *, int *, double *, double *, double *, double *, double *, double *, int *, double *); double abscoef[10]; //double dtrans[10]; extern /* Subroutine */ int addspec_(double *, double *, double *, double *, double *, double *, double *, int *, double *, double *, int *, int *, int *, int *, int *, int *); double eps, alfatot[10]; extern /* Subroutine */ int partsum_(double *); /* ========================================= */ /* Copyright (C) Aleksandra Borysow, 1987) */ /* ==================================================================== */ /* PROGRAM PREPARED BY ALEKSANDRA BORYSOW (APRIL'1987) */ /* (UNIVERSITY OF TEXAS AT AUSTIN, PHYSICS DEPARTMENT) */ /* ORIGINAL VERSION: WRITTEN ON CYBER */ /* PROGRAM GENERATES N2-N2 COLLISION-INDUCED SPECTRA AT */ /* TEMPERATURES BETWEEN 50 TO 300 K. */ /* CIA SPECTRA MODELED AFTER PAPER (*) */ /* ALEKSANDRA BORYSOW AND LOTHAR FROMMHOLD, */ /* ASTROPHYSICAL JOURNAL, VOL. 311, PAGES 1043-1057, (1986) */ /* REVISED BY GLENN ORTON (1989) - TO WORK ON SUN WORKSTATIONS */ /* AND ON THE VAX MACHINES (FORTRAN-77) */ /* PASSES STANDARD TEST ON SUN, AT 200K (JULY 1992) */ /* ==================================================================== */ /* ALSO IN REVISION: DOUBLE PRECISION FOR ALL F.P. VARIABLES */ /* ==================================================================== */ /* HISTORY: */ /* 2001-02-28 THOMAS KUHN: */ /* CHANGE OF LINES */ /* RSILO(I)=DLOG(RSI(I)*1.E80) */ /* TO */ /* RSILO(I)=(DLOG(RSI(I))+80.0D0*DLOG(10.0D0)) */ /* BECAUSE OF OVERFLOW PROBLEMS. */ /* COSMETICS FOR THE CODE TO BE FASTER READABLE. */ /* CHANGE OF OUTPUT FILE NAME. */ /* CHANGE OF OUTPUT FILE CONTENT */ /* ==================================================================== */ /* TKS* IMPLICIT REAL*8 (A-H,O-Z) */ /* TKS INPUT/OUTPUT VARIABLES */ /* REAL T, F */ //ret_val = 0.; /* TEMP = TEMPERATURE IN KELVIN, SHOULD BE BETWEEN 50. AND 300. */ /* FNUMIN = LOWEST FREQUENCY IN CM-1, FOR LISTING OF ALPHA(FNU) */ /* FNUMAX = HIGHEST FREQUENCY IN CM-1, FOR LISTING OF ALPHA(FNU) */ /* LINE SHAPE MODELLING WILL BE MOST ACCURATE WITHIN RANGE OF */ /* R-T SPECTRAL INTENSITIES AS 1:100. */ /* DNU = FREQUENCY INCREMENT IN CM-1. DNU SHOULD BE CHOSEN SO */ /* THAT NOT MORE THAN 10 STEPS ARE NEEDED TO GO FROM */ /* FNUMIN TO FNUMAX (ELSE ARRAY DIMENSIONS OF FREQ,ABSCOEF */ /* MUST BE ADJUSTED IN ADDEM). */ /* USER: */ /* ----- */ /* EDIT ONLY HERE: TEMP (K), MIN. FREQ. (CM^-1)= FNUMIN, */ /* MAX. FREQ. = FNUMAX, STEP = DNU, SLITWIDTH (CM^-1)=SLIT */ /* (SLIT=4.3 IS EQUIVALENT TO THAT OF VOYAGER SPECTRA, ONLY BOUND BOUND */ /* SPECTRA ARE CONVOLUTED WITH THIS SLITWIDTH, THE FREE FREE SPECTRA */ /* ARE FAR TOO BROAD FOR THE SLITWIDTH FUNCTION TO MATTER, */ /* LEAVE LIKE = 1 (FOR LIKE PAIRS, AS N2-N2) */ /* THE PROGRAM WILL ASSUME EQUILIBRIUM N2, */ /* ALLOWED TEMPERATURE RANGE: 50-300K (DO NOT EXTEND IT BEYOND THESE LIMITS!) */ /* IF QUESTIONS: CONTACT ABORYSOW@NBI.DK */ /* TKS* NF=INT((FNUMAX-FNUMIN)/DNU+0.5)+1 */ /* TKS* IF (NF.GT.10) NF=10 */ /* TKS* FNUMAX=FNUMIN+FLOAT(NF-1)*DNU */ /* TKS INPUT TEMPERATURE (K) CHECK OF RANGE */ if (t < 50. || t > 300.) { ostringstream os; os << "out of T range ( 50<T<300)! return without calc.!" << "\n"; throw runtime_error(os.str()); goto L999; } temp = t; /* *********************** INPUT DATA FROM USER *********************** */ /* FNUMIN = MINIMUM FREQENCY [CM^-1] */ fnumin = f / 29979245800.; /* FNUMAX = MAXIMUM FREQENCY [CM^-1] */ fnumax = fnumin; /* ONLY ONE FREQUENCY PER CALL */ nf = 1; /* DEFAULT VALUE OF FREQUENCY STEP [CM^-1] */ dnu = 10.; /* DEFAULT VALUE */ like = 1; /* SLIT = SLITWIDTH [CM^-1] */ /* SLIT=4.3 IS EQUIVALENT TO THAT OF VOYAGER SPECTRA, ONLY BOUND BOUND */ /* SPECTRA ARE CONVOLUTED WITH THIS SLITWIDTH, THE FREE FREE SPECTRA */ /* ARE FAR TOO BROAD FOR THE SLITWIDTH FUNCTION TO MATTER. */ slit = 4.3; /* ******************************************************************** */ /* TKS* WRITE (6,14) LGAS,TEMP,FNUMIN,FNUMAX,DNU,NF-1 */ /* TKS*14 FORMAT(' ABSORPTION SPECTRA OF ',A5,' AT',F8.1,' K'/ */ /* TKS* $ 1X,43(1H=),/ */ /* TKS* 1' MIN.FREQ.=',F8.1,' CM-1',10X,'MAX.FREQ.=',F8.1,' CM-1',10X, */ /* TKS* 2'FREQ.INCREMENT=',F8.2,' CM-1',5X,'IN',I5,' STEPS'//) */ partsum_(&temp); /* THE N2-N2 SPECTRA FOR 50-300K */ /* ================================ */ x = log(temp); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { /* FREQ(I)=FNUMIN+FLOAT(I-1)*DNU */ freq[i__ - 1] = fnumin; alfatot[i__ - 1] = 0.; /* L10: */ abscoef[i__ - 1] = 0.; } /* ==================================================================== */ jj = 1; L442: /* L1023: */ ++jj; if (jj == 42) { goto L444; } goto L442; /* EB(JJ,IV) JJ-ROTATIONAL LEVEL "L", IV- VIBRATIONAL LEVEL "V"; */ L444: /* ==================================================================== */ /* QUADRUPOLAR INDUCTION: (50-300K) LAMBDA1,LAMBDA2,LAMBDA,L=2023&0223 */ /* ------------------------------------------------------------------- */ eps = 1e-5; tt[0] = 10.; bound32_(&temp, rsi, &nsol); ij = 0; rslow1 = 0.; s__1 = nsol; for (i__ = 1; i__ <= s__1; ++i__) { ++ij; /* MOD CAN BE ONLY 0 OR 1 OR 2 */ if (ij % 3 == 0) { rslow1 = 1.5e-60; } if (ij % 3 == 1) { rslow1 = 1.7e-60; } if (ij % 3 == 2) { rslow1 = 1.6e-60; } if (rsi[i__ - 1] < 1e-60) { rsi[i__ - 1] = rslow1; } /* TKS* RSILO(I)=DLOG(RSI(I)*1.D80) */ rsilo[i__ - 1] = log(rsi[i__ - 1]) + log(10.) * 80.; omeg[i__ - 1] = (double)(i__ - 1) * dx; /* L88: */ } /* L9991: */ spline_(&nsol, &cs__1, &cs__0, &eps, omeg, rsilo, tt, ss, &si, &nr, rsigg); ik1k0 = 1; ibound = 1; /* B-C LINESHAPE HERE */ /* THESE VALUES (S,T1,T2) REPLACE VALUES GIVEN IN PAPER (*): */ /* PUBLISHED IN AN ERRATUM, ASTROPHYSICAL JOURNAL, VOL.320, P.437 */ /* (1987) */ s = c_b24 * exp((c_b26 * x + c_b25) * x); t1 = c_b27 * exp((c_b29 * x + c_b28) * x); t2 = c_b30 * exp((c_b32 * x + c_b31) * x); e = 0.; t3 = 0.; t4 = 0.; addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &like, &cs__2, &cs__0, &cs__2, &cs__3); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { //quad[i__ - 1] = abscoef[i__ - 1]; /* L20: */ alfatot[i__ - 1] = abscoef[i__ - 1] + alfatot[i__ - 1]; } /* ==================================================================== */ /* HEXADECAPOLE COMPONENTS: LAMBDA1,LAMBDA2,LAMBDA,L=4045&0445 */ /* ----------------------------------------------------------- */ bound54_(&temp, rsi, &nsol); ij = 0; s__1 = nsol; for (i__ = 1; i__ <= s__1; ++i__) { ++ij; /* MOD CAN BE ONLY 0 OR 1 OR 2 */ if (ij % 3 == 0) { rslow1 = 1.5e-60; } if (ij % 3 == 1) { rslow1 = 1.7e-60; } if (ij % 3 == 2) { rslow1 = 1.6e-60; } if (rsi[i__ - 1] < 1e-60) { rsi[i__ - 1] = rslow1; } /* TKS RSILO(I)=DLOG(RSI(I)*1.E80) */ rsilo[i__ - 1] = log(rsi[i__ - 1]) + log(10.) * 80.; /* L111: */ omeg[i__ - 1] = (double)(i__ - 1) * dx; } spline_(&nsol, &cs__1, &cs__0, &eps, omeg, rsilo, tt, ss, &si, &nr, rsigg); /* --------------------------- */ /* TEMPERATURES 50-140K */ /* --------------------------- */ if (temp >= 140.) { goto L333; } s = c_b43 * exp((c_b45 * x + c_b44) * x); e = c_b46 * exp((c_b47 * x + c_b47) * x); t1 = c_b49 * exp((c_b51 * x + c_b50) * x); t2 = c_b52 * exp((c_b54 * x + c_b53) * x); t3 = c_b55 * exp((c_b57 * x + c_b56) * x); t4 = c_b58 * exp((c_b60 * x + c_b59) * x); ik1k0 = 0; ibound = 1; addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &like, &cs__4, &cs__0, &cs__4, &cs__5); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { //hexa[i__ - 1] = abscoef[i__ - 1]; /* s_wsle(&io___25); do_lio(&c__9, &c__1, " T=50-140K: HEXA(", (ftnlen)17); do_lio(&c__2, &c__1, (char *)&i__, (ftnlen)sizeof(int)); do_lio(&c__9, &c__1, ") =", (ftnlen)3); do_lio(&c__5, &c__1, (char *)&abscoef[i__ - 1], (ftnlen)sizeof( double)); e_wsle(); */ /* L50: */ alfatot[i__ - 1] += abscoef[i__ - 1]; } goto L334; /* --------------------------- */ /* TEMPERATURES 140-300K */ /* --------------------------- */ L333: ik1k0 = 0; ibound = 1; s = c_b78 * exp((c_b80 * x + c_b79) * x); e = c_b46 * exp((c_b47 * x + c_b47) * x); t1 = c_b84 * exp((c_b86 * x + c_b85) * x); t2 = c_b87 * exp((c_b89 * x + c_b88) * x); t3 = c_b90 * exp((c_b92 * x + c_b91) * x); t4 = c_b93 * exp((c_b95 * x + c_b94) * x); addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &like, &cs__4, &cs__0, &cs__4, &cs__5); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { //hexa[i__ - 1] = abscoef[i__ - 1]; /* s_wsle(&io___26); do_lio(&c__9, &c__1, " T=140-300K: HEXA(", (ftnlen)18); do_lio(&c__2, &c__1, (char *)&i__, (ftnlen)sizeof(int)); do_lio(&c__9, &c__1, ") =", (ftnlen)3); do_lio(&c__5, &c__1, (char *)&abscoef[i__ - 1], (ftnlen)sizeof( double)); e_wsle(); */ /* L550: */ alfatot[i__ - 1] += abscoef[i__ - 1]; } /* ==================================================================== */ /* DOUBLE TRANSITIONS: LAMBDA1,LAMBDA2,LAMBDA,L=2,2,3,3 */ /* ---------------------------------------------------- */ /* --------------------------- */ /* TEMPERATURES 50-300K */ /* --------------------------- */ L334: ik1k0 = 1; ibound = 0; /* X S=Y(X,1.19261D-58, -3.78587,0.34024) */ s = c_b112 * exp((c_b114 * x + c_b113) * x); t1 = c_b115 * exp((c_b117 * x + c_b116) * x); t2 = c_b118 * exp((c_b120 * x + c_b119) * x); t3 = 0.; t4 = 0.; addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &like, &cs__2, &cs__2, &cs__3, &cs__3); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { //dtrans[i__ - 1] = abscoef[i__ - 1]; /* L650: */ alfatot[i__ - 1] += abscoef[i__ - 1]; } /* ==================================================================== */ /* ANISOTROPIC OVERLAP NEGLECTED (LAMBDA1,LAMBDA2,LAMBDA,L=0212) */ /* SINCE THIS TERM IS EXTREMELY SMALL */ /* ==================================================================== */ /* TKS* PRINT 154, FREQ(1),FREQ(NF),FREQ(2)-FREQ(1),TEMP */ /* TKS* PRINT 156, (ALFATOT(I),I=1,NF) */ /* TKS*154 FORMAT(///' ABSORPTION COEFFICIENT ALPHA(FNU), FROM ',F5.1, */ /* TKS* $' CM-1 TO',F7.1,' CM-1, AT',F6.2,' CM-1 INCREMENTS, AT T=', */ /* TKS* $F7.2,' K, IN UNITS OF CM-1 AMAGAT-2'/) */ /* TKS*156 FORMAT(' ',10D13.5) */ /* TKS* OPEN(UNIT=10, FILE='OUT', STATUS='UNKNOWN') */ /* TKS* WRITE(10, 2929) (FREQ(I), ALFATOT(I), I=1, NF) */ /* TKS*C WRITE(10, 2929) (FREQ(I), QUAD(I), HEXA(I) ALFATOT(I), I=1, NF) */ /* TKS*2929 FORMAT(F10.3, E12.4) */ /* TKS* STOP */ /* TKS FILL OUTPUT VARIABLE */ // tksabs[0] = quad[0]; // tksabs[1] = hexa[0]; // tksabs[2] = dtrans[0]; // tksabs[3] = alfatot[0]; ret_val = alfatot[0]; /* TKS print*,'QUAD(1),HEXA(1),DTRANS(1)=',QUAD(1),HEXA(1),DTRANS(1) */ L999: return ret_val; } /* n2n2tks_ */ #undef temp #undef fnumin #undef fnumax #undef dnu #undef slit #undef dx #undef rsilo #undef omeg #undef rsi #undef rsigg #undef nsol #undef like #undef ik1k0 #undef ibound #define wnrmax3 (app3a_1.wnrmax3) #define rsilo (rsilo_1.rsilo) #define omeg (bba_2.omeg) #define rsigg (bba_2.rsigg) #define beta (bba_2.beta) #define nsol (bbc_1.nsol) #define ibound (bbb_1.ibound) #define q1 (n2part_1.q1) #define wn2 (n2part_1.wn2) #define b01 (n2part_1.b01) #define d01 (n2part_1.d01) #define jrange2 (n2part_1.jrange2) /* ########################################################################## */ /* Subroutine */ int addspec_(double *g0, double *ep, double *tau1, double *tau2, double *tau5, double *tau6, double *temp, int *nf, double *freq, double *abscoef, int * /* mp */, int *like, int *lambda1, int *lambda2, int *lambda, int * /* lvalue */) { /* Initialized data */ static double closchm = 2.68675484e19; static double boltzwn = .6950304; static double hbar = 1.054588757e-27; static double pi = 3.1415926535898; static double clight = 2.997925e10; /* Format strings */ /* static char fmt_20[] = "(/\002 LAMBDA1,LAMBDA2, LAMBDA,LVALUE=\002,2i3,2" "x,2i3,\002 COMPONENT.\002/15x,\002LINE SHAPE PARAMETERS:\002,6d1" "2.3,5x,\002G(0)=\002,d12.3/)"; */ /* System generated locals */ int s__1, s__2, s__3, s__4, s__5, s__6; double d__1, d__2; /* Builtin functions */ /* integer s_wsfe(cilist *), do_fio(integer *, char *, ftnlen), e_wsfe(void), s_wsle(cilist *), do_lio(integer *, integer *, char *, ftnlen), e_wsle(void); */ /* Local variables */ int list, jsum = 0; extern double bgama_( double *, double *, double *, double *, double *, double *, double *); int i__, j; double calib, p; int i1, j1, i2, j2; double p1, p2, omega1, omega2; int ip, jp, iq; double twopic; int jplusl, ip1, jp1, ip2, jp2; double fac, cgs, xbg, wkf, frq, wki; extern double specfct_( double *, double *, double *, double *, int *, d
20019  //
20020  // valid atmospheric condition:
20021  // temperature : 210 to 373 K
20022  //
20023  for (Index s = 0; s < f_grid.nelem(); ++s) {
20024  if (f_grid[s] > 1e12) {
20025  ostringstream os;
20026  os << "Liquid cloud absorption model MPM93 only valid at\n"
20027  "frequencies up to 1THz. Yours are above.";
20028  throw runtime_error(os.str());
20029  }
20030  }
20031  for (Index s = 0; s < abs_t.nelem(); ++s) {
20032  if ((abs_t[s] < 210. || abs_t[s] > 373.) &&
20033  abs(vmr[s]) > LIQUID_AND_ICE_TREAT_AS_ZERO) {
20034  ostringstream os;
20035  os << "Liquid cloud absorption model MPM93 only valid at\n"
20036  << "temperatures between 210 and 373K.\n"
20037  << "LWC values outside this temperature range must be < "
20038  << LIQUID_AND_ICE_TREAT_AS_ZERO << " kg/m3.\n"
20039  << "Your value at " << abs_t[s] << "K is: " << vmr[s] << " kg/m3.";
20040  throw runtime_error(os.str());
20041  }
20042  }
20043 
20044  const int Nparam = 3;
20045  if ((model == "user") &&
20046  (parameters.nelem() == Nparam)) // --------------------
20047  {
20048  MPM93WaterDropletAbs(pxsec,
20049  parameters[0], // scaling factror
20050  parameters[1], // scaling factror
20051  parameters[2], // scaling factror
20052  model, // model option
20053  f_grid,
20054  abs_p,
20055  abs_t,
20056  vmr,
20057  verbosity);
20058  } else if ((model == "user") &&
20059  (parameters.nelem() != Nparam)) // --------------------
20060  {
20061  ostringstream os;
20062  os << "MPM93 liquid water cloud absorption model " << name
20063  << " requires\n"
20064  << Nparam << " input parameter for the model " << model << ",\n"
20065  << "but you specified " << parameters.nelem() << " parameters.\n";
20066  throw runtime_error(os.str());
20067  } else if ((model != "user") &&
20068  (parameters.nelem() == 0)) // --------------------
20069  {
20070  out3 << "MPM93 liquid water cloud absorption model " << name
20071  << " running with \n"
20072  << "the parameter for model " << model << ".\n";
20073  MPM93WaterDropletAbs(pxsec,
20074  0.000, // scaling factror
20075  0.000, // scaling factror
20076  0.000, // scaling factror
20077  model, // model option
20078  f_grid,
20079  abs_p,
20080  abs_t,
20081  vmr,
20082  verbosity);
20083  } else if ((model != "user") &&
20084  (parameters.nelem() != 0)) // --------------------
20085  {
20086  ostringstream os;
20087  os << "ERROR: MPM93 liquid water cloud absorption model " << name
20088  << " requires NO input\n"
20089  << "parameters for the model " << model << ",\n"
20090  << "but you specified " << parameters.nelem() << " parameters.\n"
20091  << "This ambiguity can not be solved by arts.\n"
20092  << "Please see the arts user guide chapter 4.\n";
20093  throw runtime_error(os.str());
20094  }
20095  }
20096 
20097  // ============= cloud and fog absorption from ELL07 ================================
20098  else if ("liquidcloud-ELL07" == name) {
20099  // Suspended water droplet absorption parameterization from ELL07 model
20100  // W. J. Ellison
20101  // "Permittivity of Pure Water, at Standard Atmospheric Pressure, over the
20102  // Frequency Range 0-25 THz and Temperature Range 0-100C"
20103  // J. Phys. Chem. Ref. Data, Vol. 36, No. 1, 2007
20104 
20105  // specific continuum parameters and units:
20106  // OUTPUT
20107  // pxsec : [1/m],
20108  // INPUT
20109  // model : [1]
20110  // f_grid : [Hz]
20111  // abs_p : [Pa]
20112  // abs_t : [K]
20113  // vmr : [1]
20114  //
20115  // liquid water droplet parameters:
20116  // suspended water droplet density range: 0-5 g/m³ // // valid atmospheric condition: // temperature : 210 to 373 K // for (Index s = 0; s < f_grid.nelem(); ++s) { if (f_grid[s] > 25e12) { ostringstream os; os << "Liquid cloud absorption model ELL07 only valid at\n" "frequencies up to 25THz. Yours are above."; throw runtime_error(os.str()); } } for (Index s = 0; s < abs_t.nelem(); ++s) { if ((abs_t[s] < 210. || abs_t[s] > 373.) && abs(vmr[s]) > LIQUID_AND_ICE_TREAT_AS_ZERO) { ostringstream os; os << "Liquid cloud absorption model ELL07 only valid at\n" << "temperatures between 210 and 373K.\n" << "LWC values outside this temperature range must be < " << LIQUID_AND_ICE_TREAT_AS_ZERO << " kg/m3.\n" << "Your value at " << abs_t[s] << "K is: " << vmr[s] << " kg/m3."; throw runtime_error(os.str()); } } if ((model == "ELL07") && (parameters.nelem() == 0)) // -------------------- { ELL07WaterDropletAbs(pxsec, model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "ELL07") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: ELL07 liquid water cloud absorption model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 4."; throw runtime_error(os.str()); } else { ostringstream os; os << "ERROR: ELL07 liquid water cloud absorption model " << name << " has no model " << model; throw runtime_error(os.str()); } } // ============= ice particle absorption from MPM93 =================================== else if ("icecloud-MPM93" == name) { // Ice particle absorption parameterization from MPM93 model // H. J. Liebe and G. A. Hufford and M. G. Cotton, // "Propagation modeling of moist air and suspended water/ice // particles at frequencies below 1000 GHz", // AGARD 52nd Specialists Meeting of the Electromagnetic Wave // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21 // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : [1] // parameters[1] : [1] // parameters[2] : [1] // model : [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [1] // // ice crystal parameters: // suspended water droplet density range: 0-10 g/m³ // specific droplet weight value: 1 g/cm³ // // valid atmospheric condition: // temperature : 233 to 323 K // relative humidity: 1 to 100 % // for (Index s = 0; s < f_grid.nelem(); ++s) { if (f_grid[s] > 1e12) { ostringstream os; os << "Ice cloud absorption model MPM93 only valid at\n" "frequencies up to 1THz. Yours are above."; throw runtime_error(os.str()); } } const int Nparam = 3; if ((model == "user") && (parameters.nelem() == Nparam)) // --------------------- { MPM93IceCrystalAbs(pxsec, parameters[0], // scaling factror parameters[1], // scaling factror parameters[2], // scaling factror model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // ---------------- { ostringstream os; os << "MPM93 ice water cloud absorption model " << name << " requires \n" << Nparam << " input parameter for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { MPM93IceCrystalAbs(pxsec, 0.000, // scaling factror 0.000, // scaling factror 0.000, // scaling factror model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: MPM93 ice water cloud absorption model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 4.\n"; throw runtime_error(os.str()); } } // ============= rain extinction from MPM93 =========================================== else if ("rain-MPM93" == name) { // Rain extinction parameterization from MPM93 model, described in // H. J. Liebe, // "MPM - An Atmospheric Millimeter-Wave Propagation Model", // Int. J. Infrared and Millimeter Waves, vol. 10(6), // pp. 631-650, 1989 // and based on // Olsen, R.L., D.V. Rogers, and D. B. Hodge, "The aR^b relation in the // calculation of rain attenuation", IEEE Trans. Antennas Propagat., // vol. AP-26, pp. 318-329, 1978. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : [1] // parameters[1] : [1] // parameters[2] : [1] // model : [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [kg/m2/s] // // rain parameters: // rain rate range: 0-150 mm/h (=0-0.42 kg/m2/s) // // valid atmospheric condition: // temperature : (preferably above 273 K...) // for (Index s = 0; s < f_grid.nelem(); ++s) { if (f_grid[s] > 1e12) { ostringstream os; os << "Rain absorption model MPM93 only valid at\n" "frequencies up to 1THz. Yours is above."; throw runtime_error(os.str()); } } const int Nparam = 3; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "MPM93 rain extinction model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM93RainExt(pxsec, parameters[0], // scaling factor parameters[1], // scaling factor parameters[2], // scaling factor model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "MPM93 rain extinction model " << name << " requires \n" << Nparam << " input parameter for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "MPM93 rain extinction model " << name << " running with \n" << "the parameter for model " << model << ".\n"; MPM93RainExt(pxsec, 0.000, // scaling factor 0.000, // scaling factor 0.000, // scaling factor model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: MPM93 rain extinction model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 4.\n"; throw runtime_error(os.str()); } } else // ----------------------------------------------------------------------- { // none of the continuum or full model tags were selected -> error message. ostringstream os; os << "ERROR: Continuum/ full model tag `" << name << "' not yet implemented in arts!"; throw runtime_error(os.str()); } // We have to divide the result from the internal continuum model by // the number density n to convert it from pseudo cross section to a // true cross section. // Boltzmann constant extern const Numeric BOLTZMAN_CONST; // Loop all pressures: for (Index i = 0; i < abs_p.nelem(); ++i) { const Numeric p_i = abs_p[i]; const Numeric t_i = abs_t[i]; // Calculate total number density from pressure and temperature. // n = n0*T0/p0 * p/T or n = p/kB/t, ideal gas law const Numeric n = p_i / BOLTZMAN_CONST / t_i; // We add to the output variable xsec here, previous content is // not overwritten! pxsec(joker, i) /= n; xsec(joker, i) += pxsec(joker, i); } } // ################################################################################# /** An auxiliary functions that checks if a given continuum model is listed in species_data.cc. This is just in order to verify that this really represents a valid continuum model. The given name should be something like 'H2O-ContStandardSelf'. The function simply checks if there is a species H2O with an isotopologue ContStandardSelf. For user-friendliness, the function also compiles a list of allowed continuum models and gives this as an error message if the model is not found. The function has no return value, since, if the name does not match a valid model an error is thrown anyway. \param name The name of the continuum model to check. \throw runtime_error The model does not exist. \author Stefan Buehler \date 2001-03-12 */ void check_continuum_model(const String &name) { // The species lookup data: using global_data::species_data; // For the list of valid continuum models: ArrayOfString valid_models; bool found = false; // Loop all species: for (Array<SpeciesRecord>::const_iterator i = species_data.begin(); i < species_data.end(); ++i) { String specnam = i->Name(); // Loop all isotopologues: for (Array<IsotopologueRecord>::const_iterator j = i->Isotopologue().begin(); j < i->Isotopologue().end(); ++j) { String isonam = j->Name(); // The specified name consists of a species part and an // isotopologue part, e.g., H2O-ContStandardSelf. We need to // construct a similar String from the species lookup data // by concatenating species name and isotopologue name. String fullnam = specnam + "-" + isonam; // cout << fullnam << "\n"; // See if this is a continuum tag, so that we can add it to // the list: if (j->isContinuum()) { valid_models.push_back(fullnam); } if (name == fullnam) { found = true; } } } // ---------------------------------------------------------------------- // Have we found it? if (!found) { ostringstream os; os << "The String `" << name << "' matches none of the known\n" << "continuum models. Known continuum models are:"; for (ArrayOfString::const_iterator i = valid_models.begin(); i < valid_models.end(); ++i) { os << "\n" << *i; } throw runtime_error(os.str()); } } // // // ################################################################################# // ############################# f2c code implementation ########################### // ################################################################################# // // // ------------------- begin of f2c.h file -------------------------------- // /* f2c.h -- Standard Fortran to C header file */ #ifndef F2C_INCLUDE #define F2C_INCLUDE typedef long int integer; typedef unsigned long int uinteger; typedef char *address; typedef short int shortint; typedef float real_t; typedef double doublereal; typedef struct { real_t r, i; } complex_t; typedef struct { doublereal r, i; } doublecomplex; typedef long int logical; typedef short int shortlogical; typedef char logical1; typedef char integer1; #ifdef INTEGER_STAR_8 /* Adjust for integer*8. */ typedef long long longint; /* system-dependent */ typedef unsigned long long ulongint; /* system-dependent */ #define qbit_clear(a, b) ((a) & ~((ulongint)1 << (b))) #define qbit_set(a, b) ((a) | ((ulongint)1 << (b))) #endif #define TRUE_ (1) #define FALSE_ (0) /* Extern is for use with -E */ #ifndef Extern #define Extern extern #endif /* I/O stuff */ #ifdef f2c_i2 /* for -i2 */ typedef short flag; typedef short ftnlen; typedef short ftnint; #else typedef long int flag; typedef long int ftnlen; typedef long int ftnint; #endif /*external read, write*/ typedef struct { flag cierr; ftnint ciunit; flag ciend; char *cifmt; ftnint cirec; } cilist; /*internal read, write*/ typedef struct { flag icierr; char *iciunit; flag iciend; char *icifmt; ftnint icirlen; ftnint icirnum; } icilist; /*open*/ typedef struct { flag oerr; ftnint ounit; char *ofnm; ftnlen ofnmlen; char *osta; char *oacc; char *ofm; ftnint orl; char *oblnk; } olist; /*close*/ typedef struct { flag cerr; ftnint cunit; char *csta; } cllist; /*rewind, backspace, endfile*/ typedef struct { flag aerr; ftnint aunit; } alist; /* inquire */ typedef struct { flag inerr; ftnint inunit; char *infile; ftnlen infilen; ftnint *inex; /*parameters in standard's order*/ ftnint *inopen; ftnint *innum; ftnint *innamed; char *inname; ftnlen innamlen; char *inacc; ftnlen inacclen; char *inseq; ftnlen inseqlen; char *indir; ftnlen indirlen; char *infmt; ftnlen infmtlen; char *inform; ftnint informlen; char *inunf; ftnlen inunflen; ftnint *inrecl; ftnint *innrec; char *inblank; ftnlen inblanklen; } inlist; #define VOID void union Multitype { /* for multiple entry points */ integer1 g; shortint h; integer i; /* longint j; */ real_t r; doublereal d; complex_t c; doublecomplex z; }; typedef union Multitype Multitype; /*typedef long int Long;*/ /* No longer used; formerly in Namelist */ struct Vardesc { /* for Namelist */ char *name; char *addr; ftnlen *dims; int type; }; typedef struct Vardesc Vardesc; struct Namelist { char *name; Vardesc **vars; int nvars; }; typedef struct Namelist Namelist; #define abs(x) ((x) >= 0 ? (x) : -(x)) #define dabs(x) (doublereal) abs(x) #define min(a, b) ((a) <= (b) ? (a) : (b)) #define max(a, b) ((a) >= (b) ? (a) : (b)) #define dmin(a, b) (doublereal) min(a, b) #define dmax(a, b) (doublereal) max(a, b) #define bit_test(a, b) ((a) >> (b)&1) #define bit_clear(a, b) ((a) & ~((uinteger)1 << (b))) #define bit_set(a, b) ((a) | ((uinteger)1 << (b))) /* procedure parameter types for -A and -C++ */ #define F2C_proc_par_types 1 #ifdef __cplusplus typedef int /* Unknown procedure type */ (*U_fp)(...); typedef shortint (*J_fp)(...); typedef integer (*I_fp)(...); typedef real_t (*R_fp)(...); typedef doublereal (*D_fp)(...), (*E_fp)(...); typedef /* Complex */ VOID (*C_fp)(...); typedef /* Double Complex */ VOID (*Z_fp)(...); typedef logical (*L_fp)(...); typedef shortlogical (*K_fp)(...); typedef /* Character */ VOID (*H_fp)(...); typedef /* Subroutine */ int (*S_fp)(...); #else typedef int /* Unknown procedure type */ (*U_fp)(); typedef shortint (*J_fp)(); typedef integer (*I_fp)(); typedef real_t (*R_fp)(); typedef doublereal (*D_fp)(), (*E_fp)(); typedef /* Complex */ VOID (*C_fp)(); typedef /* Double Complex */ VOID (*Z_fp)(); typedef logical (*L_fp)(); typedef shortlogical (*K_fp)(); typedef /* Character */ VOID (*H_fp)(); typedef /* Subroutine */ int (*S_fp)(); #endif /* E_fp is for real functions when -R is not specified */ typedef VOID C_f; /* complex function */ typedef VOID H_f; /* character function */ typedef VOID Z_f; /* double complex function */ typedef doublereal E_f; /* real function with -R not specified */ /* undef any lower-case symbols that your C compiler predefines, e.g.: */ #ifndef Skip_f2c_Undefs #undef cray #undef gcos #undef mc68010 #undef mc68020 #undef mips #undef pdp11 #undef sgi #undef sparc #undef sun #undef sun2 #undef sun3 #undef sun4 #undef u370 #undef u3b #undef u3b2 #undef u3b5 #undef unix #undef vax #endif #endif // ------------------- end of f2c.h file -------------------------------- // ------------------ begin of Borysow N2N2 F77 code -------------------- /* n2n2tks.f -- translated by f2c (version 20010821). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ /* Common Block Declarations */ struct s_blockin_ { double temp, fnumin, fnumax, dnu; } blockin_; #define blockin_1 blockin_ struct s_app3a_ { double slit, dx, wnrmax3; } app3a_; #define app3a_1 app3a_ struct s_app3b_ { int nsri, ns, nsriup; } app3b_; #define app3b_1 app3b_ struct s_rsilo_ { double rsilo[201]; } rsilo_; #define rsilo_1 rsilo_ struct s_bou43_ { int initb; } bou43_; #define bou43_1 bou43_ union u_bba_ { struct s_m_1 { double omeg[201], rsi[201], rsigg[201], alfa; } m_1; struct s_m_2 { double omeg[201], rsi[201], rsigg[201], beta; } m_2; } bba_; #define bba_1 (bba_.m_1) #define bba_2 (bba_.m_2) struct s_bbc_ { int nsol; } bbc_; #define bbc_1 bbc_ struct s_bf_ { double g0bf, delbf, om0; } bf_; #define bf_1 bf_ struct like_1_ { int like; char lgas[5]; }; #define like_1 (*(struct like_1_ *)&like_) struct s_k1k0_ { int ik1k0; } k1k0_; #define k1k0_1 k1k0_ struct s_bbb_ { int ibound; } bbb_; #define bbb_1 bbb_ struct energ_1_ { double eb[246] /* was [41][6] */; int niv[6]; }; #define energ_1 (*(struct energ_1_ *)&energ_) struct s_dimer_ { int nlines; } dimer_; #define dimer_1 dimer_ struct n2part_1_ { double q1, wn2[2], b01, d01; int jrange2; }; struct n2part_2_ { double q, wn2[2], b0, d0; int jrange1; }; #define n2part_1 (*(struct n2part_1_ *)&n2part_) #define n2part_2 (*(struct n2part_2_ *)&n2part_) union u_bl3_ { struct s_m_1 { double rsi[401]; } m_1; struct s_m_2 { double rsibb[401]; } m_2; } bl3_; #define bl3_1 (bl3_.m_1) #define bl3_2 (bl3_.m_2) union u_bbbb_ { struct s_m_1 { int idelv, iv, ivp, idell, il, ilp; } m_1; struct s_m_2 { int ldelvi, ivi, ivip, ldelel, ll, llp; } m_2; } bbbb_; #define bbbb_1 (bbbb_.m_1) #define bbbb_2 (bbbb_.m_2) /* Initialized data */ struct s_energe_ { double e_1[246]; int e_2[6]; } energ_ = {{-54.99996, -54.86228, -54.58697, -54.17413, -53.62391, -52.93648, -52.11211, -51.15108, -50.05374, -48.82049, -47.45179, -45.94815, -44.31014, -42.53841, -40.63365, -38.59665, -36.42824, -34.12937, -31.70105, -29.14439, -26.46061, -23.65103, -20.71709, -17.66041, -14.48271, -11.18593, -7.77221, -4.24393, -.60374, 3.14531, 6.99978, 10.95566, 15.00818, 19.15136, 23.37787, 27.67681, 32.03237, 36.42278, 40.83668, 45.29436, 49.79246, -31.89437, -31.77215, -31.52779, -31.16143, -30.67334, -30.06382, -29.33328, -28.48222, -27.51123, -26.42099, -25.21229, -23.88603, -22.44322, -20.88502, -19.21272, -17.42777, -15.53182, -13.52669, -11.41446, -9.1975, -6.87848, -4.46049, -1.94714, .65736, 3.34788, 6.11816, 8.95978, 11.8613, 14.80383, 17.75924, 20.71774, 23.71589, 0., 0., 0., 0., 0., 0., 0., 0., 0., -16.05019, -15.9464, -15.73896, -15.42815, -15.0144, -14.4983, -13.88057, -13.16213, -12.34407, -11.42771, -10.41455, -9.30639, -8.10531, -6.81376, -5.43459, -3.97121, -2.42768, -.80899, .87859, 2.62689, 4.42334, 6.24733, 8.06983, 9.90464, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -6.49343, -6.41131, -6.24732, -6.00202, -5.67623, -5.27111, -4.78813, -4.22919, -3.59665, -2.89345, -2.12325, -1.29074, -.40202, .5345, 1.50455, 2.48212, 3.46665, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -1.76583, -1.70887, -1.59552, -1.427, -1.20523, -.93302, -.61434, -.25504, .13641, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -.17133, -.14341, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}, {41, 32, 24, 17, 9, 2}}; struct s_n2part_ { double fill_1[1]; double e_2[4]; int fill_3[1]; } n2part_ = {{0}, {2., 1., 1.98957, 5.8e-6}, {0}}; struct s_like_ { int fill_1[1]; char e_2[5]; } like_ = {{0}, "N2N2"}; /* Table of constant values */ // FIXME static integer c__9 = 9; // FIXME static integer c__1 = 1; // FIXME static integer c__5 = 5; static int cs__1 = 1; static int cs__0 = 0; static double c_b24 = 2.9723; static double c_b25 = -.99569; static double c_b26 = .09464; static double c_b27 = 1.2962e-12; static double c_b28 = -.13048; static double c_b29 = -.03128; static double c_b30 = 3.7969e-14; static double c_b31 = 1.03681; static double c_b32 = -.14336; static int cs__2 = 2; static int cs__3 = 3; static double c_b43 = .180926; static double c_b44 = -1.69153; static double c_b45 = .18605; static double c_b46 = .3; static double c_b47 = 0.; static double c_b49 = 6.6017e-16; static double c_b50 = 2.59982; static double c_b51 = -.31831; static double c_b52 = 1.2481e-12; static double c_b53 = -.57028; static double c_b54 = .05983; static double c_b55 = 5.2681e-13; static double c_b56 = -.24719; static double c_b57 = .00519; static double c_b58 = 2.7518e15; static double c_b59 = -25.38969; static double c_b60 = 2.46542; static int cs__4 = 4; static int cs__5 = 5; // FIXME static integer c__2 = 2; static double c_b78 = .0825299; static double c_b79 = -1.25562; static double c_b80 = .12981; static double c_b84 = 3.6611e-15; static double c_b85 = 1.47688; static double c_b86 = -.16537; static double c_b87 = 6.1264e-10; static double c_b88 = -2.25011; static double c_b89 = .15289; static double c_b90 = 7.982e-10; static double c_b91 = -2.76152; static double c_b92 = .21847; static double c_b93 = 5.2868e-22; static double c_b94 = 7.66253; static double c_b95 = -.77527; static double c_b112 = 119.261; static double c_b113 = -3.78587; static double c_b114 = .34024; static double c_b115 = 9.3777e-12; static double c_b116 = -.66548; static double c_b117 = .0033; static double c_b118 = 3.0395e-13; static double c_b119 = .24728; static double c_b120 = -.06607; static double c_b183 = 1e-6; static double c_b186 = 1.5; #define temp (blockin_1.temp) #define fnumin (blockin_1.fnumin) #define fnumax (blockin_1.fnumax) #define dnu (blockin_1.dnu) #define slit (app3a_1.slit) #define dx (app3a_1.dx) #define rsilo (rsilo_1.rsilo) #define omeg (bba_1.omeg) #define rsi (bba_1.rsi) #define rsigg (bba_1.rsigg) #define nsol (bbc_1.nsol) #define like (like_1.like) #define ik1k0 (k1k0_1.ik1k0) #define ibound (bbb_1.ibound) /* TKS ****** SUBROUTINE N2N2TKS(T, F) ***************************************/ Numeric n2n2tks_(double t, double f) { /* System generated locals */ int s__1; double ret_val; /* Local variables */ //double hexa[10], quad[10]; double freq[10], e; int i__; double s, x, t1, t2, t3, t4; int ij, nf, jj; double rslow1, si; int nr; double ss[1], tt[2]; extern /* Subroutine */ int bound32_(double *, double *, int *), bound54_(double *, double *, int *); //double tksabs[5]; extern /* Subroutine */ int spline_(int *, int *, int *, double *, double *, double *, double *, double *, double *, int *, double *); double abscoef[10]; //double dtrans[10]; extern /* Subroutine */ int addspec_(double *, double *, double *, double *, double *, double *, double *, int *, double *, double *, int *, int *, int *, int *, int *, int *); double eps, alfatot[10]; extern /* Subroutine */ int partsum_(double *); /* ========================================= */ /* Copyright (C) Aleksandra Borysow, 1987) */ /* ==================================================================== */ /* PROGRAM PREPARED BY ALEKSANDRA BORYSOW (APRIL'1987) */ /* (UNIVERSITY OF TEXAS AT AUSTIN, PHYSICS DEPARTMENT) */ /* ORIGINAL VERSION: WRITTEN ON CYBER */ /* PROGRAM GENERATES N2-N2 COLLISION-INDUCED SPECTRA AT */ /* TEMPERATURES BETWEEN 50 TO 300 K. */ /* CIA SPECTRA MODELED AFTER PAPER (*) */ /* ALEKSANDRA BORYSOW AND LOTHAR FROMMHOLD, */ /* ASTROPHYSICAL JOURNAL, VOL. 311, PAGES 1043-1057, (1986) */ /* REVISED BY GLENN ORTON (1989) - TO WORK ON SUN WORKSTATIONS */ /* AND ON THE VAX MACHINES (FORTRAN-77) */ /* PASSES STANDARD TEST ON SUN, AT 200K (JULY 1992) */ /* ==================================================================== */ /* ALSO IN REVISION: DOUBLE PRECISION FOR ALL F.P. VARIABLES */ /* ==================================================================== */ /* HISTORY: */ /* 2001-02-28 THOMAS KUHN: */ /* CHANGE OF LINES */ /* RSILO(I)=DLOG(RSI(I)*1.E80) */ /* TO */ /* RSILO(I)=(DLOG(RSI(I))+80.0D0*DLOG(10.0D0)) */ /* BECAUSE OF OVERFLOW PROBLEMS. */ /* COSMETICS FOR THE CODE TO BE FASTER READABLE. */ /* CHANGE OF OUTPUT FILE NAME. */ /* CHANGE OF OUTPUT FILE CONTENT */ /* ==================================================================== */ /* TKS* IMPLICIT REAL*8 (A-H,O-Z) */ /* TKS INPUT/OUTPUT VARIABLES */ /* REAL T, F */ //ret_val = 0.; /* TEMP = TEMPERATURE IN KELVIN, SHOULD BE BETWEEN 50. AND 300. */ /* FNUMIN = LOWEST FREQUENCY IN CM-1, FOR LISTING OF ALPHA(FNU) */ /* FNUMAX = HIGHEST FREQUENCY IN CM-1, FOR LISTING OF ALPHA(FNU) */ /* LINE SHAPE MODELLING WILL BE MOST ACCURATE WITHIN RANGE OF */ /* R-T SPECTRAL INTENSITIES AS 1:100. */ /* DNU = FREQUENCY INCREMENT IN CM-1. DNU SHOULD BE CHOSEN SO */ /* THAT NOT MORE THAN 10 STEPS ARE NEEDED TO GO FROM */ /* FNUMIN TO FNUMAX (ELSE ARRAY DIMENSIONS OF FREQ,ABSCOEF */ /* MUST BE ADJUSTED IN ADDEM). */ /* USER: */ /* ----- */ /* EDIT ONLY HERE: TEMP (K), MIN. FREQ. (CM^-1)= FNUMIN, */ /* MAX. FREQ. = FNUMAX, STEP = DNU, SLITWIDTH (CM^-1)=SLIT */ /* (SLIT=4.3 IS EQUIVALENT TO THAT OF VOYAGER SPECTRA, ONLY BOUND BOUND */ /* SPECTRA ARE CONVOLUTED WITH THIS SLITWIDTH, THE FREE FREE SPECTRA */ /* ARE FAR TOO BROAD FOR THE SLITWIDTH FUNCTION TO MATTER, */ /* LEAVE LIKE = 1 (FOR LIKE PAIRS, AS N2-N2) */ /* THE PROGRAM WILL ASSUME EQUILIBRIUM N2, */ /* ALLOWED TEMPERATURE RANGE: 50-300K (DO NOT EXTEND IT BEYOND THESE LIMITS!) */ /* IF QUESTIONS: CONTACT ABORYSOW@NBI.DK */ /* TKS* NF=INT((FNUMAX-FNUMIN)/DNU+0.5)+1 */ /* TKS* IF (NF.GT.10) NF=10 */ /* TKS* FNUMAX=FNUMIN+FLOAT(NF-1)*DNU */ /* TKS INPUT TEMPERATURE (K) CHECK OF RANGE */ if (t < 50. || t > 300.) { ostringstream os; os << "out of T range ( 50<T<300)! return without calc.!" << "\n"; throw runtime_error(os.str()); goto L999; } temp = t; /* *********************** INPUT DATA FROM USER *********************** */ /* FNUMIN = MINIMUM FREQENCY [CM^-1] */ fnumin = f / 29979245800.; /* FNUMAX = MAXIMUM FREQENCY [CM^-1] */ fnumax = fnumin; /* ONLY ONE FREQUENCY PER CALL */ nf = 1; /* DEFAULT VALUE OF FREQUENCY STEP [CM^-1] */ dnu = 10.; /* DEFAULT VALUE */ like = 1; /* SLIT = SLITWIDTH [CM^-1] */ /* SLIT=4.3 IS EQUIVALENT TO THAT OF VOYAGER SPECTRA, ONLY BOUND BOUND */ /* SPECTRA ARE CONVOLUTED WITH THIS SLITWIDTH, THE FREE FREE SPECTRA */ /* ARE FAR TOO BROAD FOR THE SLITWIDTH FUNCTION TO MATTER. */ slit = 4.3; /* ******************************************************************** */ /* TKS* WRITE (6,14) LGAS,TEMP,FNUMIN,FNUMAX,DNU,NF-1 */ /* TKS*14 FORMAT(' ABSORPTION SPECTRA OF ',A5,' AT',F8.1,' K'/ */ /* TKS* $ 1X,43(1H=),/ */ /* TKS* 1' MIN.FREQ.=',F8.1,' CM-1',10X,'MAX.FREQ.=',F8.1,' CM-1',10X, */ /* TKS* 2'FREQ.INCREMENT=',F8.2,' CM-1',5X,'IN',I5,' STEPS'//) */ partsum_(&temp); /* THE N2-N2 SPECTRA FOR 50-300K */ /* ================================ */ x = log(temp); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { /* FREQ(I)=FNUMIN+FLOAT(I-1)*DNU */ freq[i__ - 1] = fnumin; alfatot[i__ - 1] = 0.; /* L10: */ abscoef[i__ - 1] = 0.; } /* ==================================================================== */ jj = 1; L442: /* L1023: */ ++jj; if (jj == 42) { goto L444; } goto L442; /* EB(JJ,IV) JJ-ROTATIONAL LEVEL "L", IV- VIBRATIONAL LEVEL "V"; */ L444: /* ==================================================================== */ /* QUADRUPOLAR INDUCTION: (50-300K) LAMBDA1,LAMBDA2,LAMBDA,L=2023&0223 */ /* ------------------------------------------------------------------- */ eps = 1e-5; tt[0] = 10.; bound32_(&temp, rsi, &nsol); ij = 0; rslow1 = 0.; s__1 = nsol; for (i__ = 1; i__ <= s__1; ++i__) { ++ij; /* MOD CAN BE ONLY 0 OR 1 OR 2 */ if (ij % 3 == 0) { rslow1 = 1.5e-60; } if (ij % 3 == 1) { rslow1 = 1.7e-60; } if (ij % 3 == 2) { rslow1 = 1.6e-60; } if (rsi[i__ - 1] < 1e-60) { rsi[i__ - 1] = rslow1; } /* TKS* RSILO(I)=DLOG(RSI(I)*1.D80) */ rsilo[i__ - 1] = log(rsi[i__ - 1]) + log(10.) * 80.; omeg[i__ - 1] = (double)(i__ - 1) * dx; /* L88: */ } /* L9991: */ spline_(&nsol, &cs__1, &cs__0, &eps, omeg, rsilo, tt, ss, &si, &nr, rsigg); ik1k0 = 1; ibound = 1; /* B-C LINESHAPE HERE */ /* THESE VALUES (S,T1,T2) REPLACE VALUES GIVEN IN PAPER (*): */ /* PUBLISHED IN AN ERRATUM, ASTROPHYSICAL JOURNAL, VOL.320, P.437 */ /* (1987) */ s = c_b24 * exp((c_b26 * x + c_b25) * x); t1 = c_b27 * exp((c_b29 * x + c_b28) * x); t2 = c_b30 * exp((c_b32 * x + c_b31) * x); e = 0.; t3 = 0.; t4 = 0.; addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &like, &cs__2, &cs__0, &cs__2, &cs__3); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { //quad[i__ - 1] = abscoef[i__ - 1]; /* L20: */ alfatot[i__ - 1] = abscoef[i__ - 1] + alfatot[i__ - 1]; } /* ==================================================================== */ /* HEXADECAPOLE COMPONENTS: LAMBDA1,LAMBDA2,LAMBDA,L=4045&0445 */ /* ----------------------------------------------------------- */ bound54_(&temp, rsi, &nsol); ij = 0; s__1 = nsol; for (i__ = 1; i__ <= s__1; ++i__) { ++ij; /* MOD CAN BE ONLY 0 OR 1 OR 2 */ if (ij % 3 == 0) { rslow1 = 1.5e-60; } if (ij % 3 == 1) { rslow1 = 1.7e-60; } if (ij % 3 == 2) { rslow1 = 1.6e-60; } if (rsi[i__ - 1] < 1e-60) { rsi[i__ - 1] = rslow1; } /* TKS RSILO(I)=DLOG(RSI(I)*1.E80) */ rsilo[i__ - 1] = log(rsi[i__ - 1]) + log(10.) * 80.; /* L111: */ omeg[i__ - 1] = (double)(i__ - 1) * dx; } spline_(&nsol, &cs__1, &cs__0, &eps, omeg, rsilo, tt, ss, &si, &nr, rsigg); /* --------------------------- */ /* TEMPERATURES 50-140K */ /* --------------------------- */ if (temp >= 140.) { goto L333; } s = c_b43 * exp((c_b45 * x + c_b44) * x); e = c_b46 * exp((c_b47 * x + c_b47) * x); t1 = c_b49 * exp((c_b51 * x + c_b50) * x); t2 = c_b52 * exp((c_b54 * x + c_b53) * x); t3 = c_b55 * exp((c_b57 * x + c_b56) * x); t4 = c_b58 * exp((c_b60 * x + c_b59) * x); ik1k0 = 0; ibound = 1; addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &like, &cs__4, &cs__0, &cs__4, &cs__5); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { //hexa[i__ - 1] = abscoef[i__ - 1]; /* s_wsle(&io___25); do_lio(&c__9, &c__1, " T=50-140K: HEXA(", (ftnlen)17); do_lio(&c__2, &c__1, (char *)&i__, (ftnlen)sizeof(int)); do_lio(&c__9, &c__1, ") =", (ftnlen)3); do_lio(&c__5, &c__1, (char *)&abscoef[i__ - 1], (ftnlen)sizeof( double)); e_wsle(); */ /* L50: */ alfatot[i__ - 1] += abscoef[i__ - 1]; } goto L334; /* --------------------------- */ /* TEMPERATURES 140-300K */ /* --------------------------- */ L333: ik1k0 = 0; ibound = 1; s = c_b78 * exp((c_b80 * x + c_b79) * x); e = c_b46 * exp((c_b47 * x + c_b47) * x); t1 = c_b84 * exp((c_b86 * x + c_b85) * x); t2 = c_b87 * exp((c_b89 * x + c_b88) * x); t3 = c_b90 * exp((c_b92 * x + c_b91) * x); t4 = c_b93 * exp((c_b95 * x + c_b94) * x); addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &like, &cs__4, &cs__0, &cs__4, &cs__5); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { //hexa[i__ - 1] = abscoef[i__ - 1]; /* s_wsle(&io___26); do_lio(&c__9, &c__1, " T=140-300K: HEXA(", (ftnlen)18); do_lio(&c__2, &c__1, (char *)&i__, (ftnlen)sizeof(int)); do_lio(&c__9, &c__1, ") =", (ftnlen)3); do_lio(&c__5, &c__1, (char *)&abscoef[i__ - 1], (ftnlen)sizeof( double)); e_wsle(); */ /* L550: */ alfatot[i__ - 1] += abscoef[i__ - 1]; } /* ==================================================================== */ /* DOUBLE TRANSITIONS: LAMBDA1,LAMBDA2,LAMBDA,L=2,2,3,3 */ /* ---------------------------------------------------- */ /* --------------------------- */ /* TEMPERATURES 50-300K */ /* --------------------------- */ L334: ik1k0 = 1; ibound = 0; /* X S=Y(X,1.19261D-58, -3.78587,0.34024) */ s = c_b112 * exp((c_b114 * x + c_b113) * x); t1 = c_b115 * exp((c_b117 * x + c_b116) * x); t2 = c_b118 * exp((c_b120 * x + c_b119) * x); t3 = 0.; t4 = 0.; addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &like, &cs__2, &cs__2, &cs__3, &cs__3); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { //dtrans[i__ - 1] = abscoef[i__ - 1]; /* L650: */ alfatot[i__ - 1] += abscoef[i__ - 1]; } /* ==================================================================== */ /* ANISOTROPIC OVERLAP NEGLECTED (LAMBDA1,LAMBDA2,LAMBDA,L=0212) */ /* SINCE THIS TERM IS EXTREMELY SMALL */ /* ==================================================================== */ /* TKS* PRINT 154, FREQ(1),FREQ(NF),FREQ(2)-FREQ(1),TEMP */ /* TKS* PRINT 156, (ALFATOT(I),I=1,NF) */ /* TKS*154 FORMAT(///' ABSORPTION COEFFICIENT ALPHA(FNU), FROM ',F5.1, */ /* TKS* $' CM-1 TO',F7.1,' CM-1, AT',F6.2,' CM-1 INCREMENTS, AT T=', */ /* TKS* $F7.2,' K, IN UNITS OF CM-1 AMAGAT-2'/) */ /* TKS*156 FORMAT(' ',10D13.5) */ /* TKS* OPEN(UNIT=10, FILE='OUT', STATUS='UNKNOWN') */ /* TKS* WRITE(10, 2929) (FREQ(I), ALFATOT(I), I=1, NF) */ /* TKS*C WRITE(10, 2929) (FREQ(I), QUAD(I), HEXA(I) ALFATOT(I), I=1, NF) */ /* TKS*2929 FORMAT(F10.3, E12.4) */ /* TKS* STOP */ /* TKS FILL OUTPUT VARIABLE */ // tksabs[0] = quad[0]; // tksabs[1] = hexa[0]; // tksabs[2] = dtrans[0]; // tksabs[3] = alfatot[0]; ret_val = alfatot[0]; /* TKS print*,'QUAD(1),HEXA(1),DTRANS(1)=',QUAD(1),HEXA(1),DTRANS(1) */ L999: return ret_val; } /* n2n2tks_ */ #undef temp #undef fnumin #undef fnumax #undef dnu #undef slit #undef dx #undef rsilo #undef omeg #undef rsi #undef rsigg #undef nsol #undef like #undef ik1k0 #undef ibound #define wnrmax3 (app3a_1.wnrmax3) #define rsilo (rsilo_1.rsilo) #define omeg (bba_2.omeg) #define rsigg (bba_2.rsigg) #define beta (bba_2.beta) #define nsol (bbc_1.nsol) #define ibound (bbb_1.ibound) #define q1 (n2part_1.q1) #define wn2 (n2part_1.wn2) #define b01 (n2part_1.b01) #define d01 (n2part_1.d01) #define jrange2 (n2part_1.jrange2) /* ########################################################################## */ /* Subroutine */ int addspec_(double *g0, double *ep, double *tau1, double *tau2, double *tau5, double *tau6, double *temp, int *nf, double *freq, double *abscoef, int * /* mp */, int *like, int *lambda1, int *lambda2, int *lambda, int * /* lvalue */) { /* Initialized data */ static double closchm = 2.68675484e19; static double boltzwn = .6950304; static double hbar = 1.054588757e-27; static double pi = 3.1415926535898; static double clight = 2.997925e10; /* Format strings */ /* static char fmt_20[] = "(/\002 LAMBDA1,LAMBDA2, LAMBDA,LVALUE=\002,2i3,2" "x,2i3,\002 COMPONENT.\002/15x,\002LINE SHAPE PARAMETERS:\002,6d1" "2.3,5x,\002G(0)=\002,d12.3/)"; */ /* System generated locals */ int s__1, s__2, s__3, s__4, s__5, s__6; double d__1, d__2; /* Builtin functions */ /* integer s_wsfe(cilist *), do_fio(integer *, char *, ftnlen), e_wsfe(void), s_wsle(cilist *), do_lio(integer *, integer *, char *, ftnlen), e_wsle(void); */ /* Local variables */ int list, jsum = 0; extern double bgama_( double *, double *, double *, double *, double *, double *, double *); int i__, j; double calib, p; int i1, j1, i2, j2; double p1, p2, omega1, omega2; int ip, jp, iq; double twopic; int jplusl, ip1, jp1, ip2, jp2; double fac, cgs, xbg, wkf, frq, wki; extern double specfct_( double *, double *, double *, double *, int *, d
20117  //
20118  // valid atmospheric condition:
20119  // temperature : 210 to 373 K
20120  //
20121  for (Index s = 0; s < f_grid.nelem(); ++s) {
20122  if (f_grid[s] > 25e12) {
20123  ostringstream os;
20124  os << "Liquid cloud absorption model ELL07 only valid at\n"
20125  "frequencies up to 25THz. Yours are above.";
20126  throw runtime_error(os.str());
20127  }
20128  }
20129  for (Index s = 0; s < abs_t.nelem(); ++s) {
20130  if ((abs_t[s] < 210. || abs_t[s] > 373.) &&
20131  abs(vmr[s]) > LIQUID_AND_ICE_TREAT_AS_ZERO) {
20132  ostringstream os;
20133  os << "Liquid cloud absorption model ELL07 only valid at\n"
20134  << "temperatures between 210 and 373K.\n"
20135  << "LWC values outside this temperature range must be < "
20136  << LIQUID_AND_ICE_TREAT_AS_ZERO << " kg/m3.\n"
20137  << "Your value at " << abs_t[s] << "K is: " << vmr[s] << " kg/m3.";
20138  throw runtime_error(os.str());
20139  }
20140  }
20141 
20142  if ((model == "ELL07") &&
20143  (parameters.nelem() == 0)) // --------------------
20144  {
20145  ELL07WaterDropletAbs(pxsec,
20146  model, // model option
20147  f_grid,
20148  abs_p,
20149  abs_t,
20150  vmr,
20151  verbosity);
20152  } else if ((model == "ELL07") &&
20153  (parameters.nelem() != 0)) // --------------------
20154  {
20155  ostringstream os;
20156  os << "ERROR: ELL07 liquid water cloud absorption model " << name
20157  << " requires NO input\n"
20158  << "parameters for the model " << model << ",\n"
20159  << "but you specified " << parameters.nelem() << " parameters.\n"
20160  << "This ambiguity can not be solved by arts.\n"
20161  << "Please see the arts user guide chapter 4.";
20162  throw runtime_error(os.str());
20163  } else {
20164  ostringstream os;
20165  os << "ERROR: ELL07 liquid water cloud absorption model " << name
20166  << " has no model " << model;
20167  throw runtime_error(os.str());
20168  }
20169  }
20170 
20171  // ============= ice particle absorption from MPM93 ===================================
20172  else if ("icecloud-MPM93" == name) {
20173  // Ice particle absorption parameterization from MPM93 model
20174  // H. J. Liebe and G. A. Hufford and M. G. Cotton,
20175  // "Propagation modeling of moist air and suspended water/ice
20176  // particles at frequencies below 1000 GHz",
20177  // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
20178  // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21
20179  //
20180  // specific continuum parameters and units:
20181  // OUTPUT
20182  // pxsec : [1/m],
20183  // INPUT
20184  // parameters[0] : [1]
20185  // parameters[1] : [1]
20186  // parameters[2] : [1]
20187  // model : [1]
20188  // f_grid : [Hz]
20189  // abs_p : [Pa]
20190  // abs_t : [K]
20191  // vmr : [1]
20192  //
20193  // ice crystal parameters:
20194  // suspended water droplet density range: 0-10 g/m³ // specific droplet weight value: 1 g/cm³ // // valid atmospheric condition: // temperature : 233 to 323 K // relative humidity: 1 to 100 % // for (Index s = 0; s < f_grid.nelem(); ++s) { if (f_grid[s] > 1e12) { ostringstream os; os << "Ice cloud absorption model MPM93 only valid at\n" "frequencies up to 1THz. Yours are above."; throw runtime_error(os.str()); } } const int Nparam = 3; if ((model == "user") && (parameters.nelem() == Nparam)) // --------------------- { MPM93IceCrystalAbs(pxsec, parameters[0], // scaling factror parameters[1], // scaling factror parameters[2], // scaling factror model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // ---------------- { ostringstream os; os << "MPM93 ice water cloud absorption model " << name << " requires \n" << Nparam << " input parameter for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { MPM93IceCrystalAbs(pxsec, 0.000, // scaling factror 0.000, // scaling factror 0.000, // scaling factror model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: MPM93 ice water cloud absorption model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 4.\n"; throw runtime_error(os.str()); } } // ============= rain extinction from MPM93 =========================================== else if ("rain-MPM93" == name) { // Rain extinction parameterization from MPM93 model, described in // H. J. Liebe, // "MPM - An Atmospheric Millimeter-Wave Propagation Model", // Int. J. Infrared and Millimeter Waves, vol. 10(6), // pp. 631-650, 1989 // and based on // Olsen, R.L., D.V. Rogers, and D. B. Hodge, "The aR^b relation in the // calculation of rain attenuation", IEEE Trans. Antennas Propagat., // vol. AP-26, pp. 318-329, 1978. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : [1] // parameters[1] : [1] // parameters[2] : [1] // model : [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [kg/m2/s] // // rain parameters: // rain rate range: 0-150 mm/h (=0-0.42 kg/m2/s) // // valid atmospheric condition: // temperature : (preferably above 273 K...) // for (Index s = 0; s < f_grid.nelem(); ++s) { if (f_grid[s] > 1e12) { ostringstream os; os << "Rain absorption model MPM93 only valid at\n" "frequencies up to 1THz. Yours is above."; throw runtime_error(os.str()); } } const int Nparam = 3; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "MPM93 rain extinction model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM93RainExt(pxsec, parameters[0], // scaling factor parameters[1], // scaling factor parameters[2], // scaling factor model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "MPM93 rain extinction model " << name << " requires \n" << Nparam << " input parameter for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "MPM93 rain extinction model " << name << " running with \n" << "the parameter for model " << model << ".\n"; MPM93RainExt(pxsec, 0.000, // scaling factor 0.000, // scaling factor 0.000, // scaling factor model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: MPM93 rain extinction model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 4.\n"; throw runtime_error(os.str()); } } else // ----------------------------------------------------------------------- { // none of the continuum or full model tags were selected -> error message. ostringstream os; os << "ERROR: Continuum/ full model tag `" << name << "' not yet implemented in arts!"; throw runtime_error(os.str()); } // We have to divide the result from the internal continuum model by // the number density n to convert it from pseudo cross section to a // true cross section. // Boltzmann constant extern const Numeric BOLTZMAN_CONST; // Loop all pressures: for (Index i = 0; i < abs_p.nelem(); ++i) { const Numeric p_i = abs_p[i]; const Numeric t_i = abs_t[i]; // Calculate total number density from pressure and temperature. // n = n0*T0/p0 * p/T or n = p/kB/t, ideal gas law const Numeric n = p_i / BOLTZMAN_CONST / t_i; // We add to the output variable xsec here, previous content is // not overwritten! pxsec(joker, i) /= n; xsec(joker, i) += pxsec(joker, i); } } // ################################################################################# /** An auxiliary functions that checks if a given continuum model is listed in species_data.cc. This is just in order to verify that this really represents a valid continuum model. The given name should be something like 'H2O-ContStandardSelf'. The function simply checks if there is a species H2O with an isotopologue ContStandardSelf. For user-friendliness, the function also compiles a list of allowed continuum models and gives this as an error message if the model is not found. The function has no return value, since, if the name does not match a valid model an error is thrown anyway. \param name The name of the continuum model to check. \throw runtime_error The model does not exist. \author Stefan Buehler \date 2001-03-12 */ void check_continuum_model(const String &name) { // The species lookup data: using global_data::species_data; // For the list of valid continuum models: ArrayOfString valid_models; bool found = false; // Loop all species: for (Array<SpeciesRecord>::const_iterator i = species_data.begin(); i < species_data.end(); ++i) { String specnam = i->Name(); // Loop all isotopologues: for (Array<IsotopologueRecord>::const_iterator j = i->Isotopologue().begin(); j < i->Isotopologue().end(); ++j) { String isonam = j->Name(); // The specified name consists of a species part and an // isotopologue part, e.g., H2O-ContStandardSelf. We need to // construct a similar String from the species lookup data // by concatenating species name and isotopologue name. String fullnam = specnam + "-" + isonam; // cout << fullnam << "\n"; // See if this is a continuum tag, so that we can add it to // the list: if (j->isContinuum()) { valid_models.push_back(fullnam); } if (name == fullnam) { found = true; } } } // ---------------------------------------------------------------------- // Have we found it? if (!found) { ostringstream os; os << "The String `" << name << "' matches none of the known\n" << "continuum models. Known continuum models are:"; for (ArrayOfString::const_iterator i = valid_models.begin(); i < valid_models.end(); ++i) { os << "\n" << *i; } throw runtime_error(os.str()); } } // // // ################################################################################# // ############################# f2c code implementation ########################### // ################################################################################# // // // ------------------- begin of f2c.h file -------------------------------- // /* f2c.h -- Standard Fortran to C header file */ #ifndef F2C_INCLUDE #define F2C_INCLUDE typedef long int integer; typedef unsigned long int uinteger; typedef char *address; typedef short int shortint; typedef float real_t; typedef double doublereal; typedef struct { real_t r, i; } complex_t; typedef struct { doublereal r, i; } doublecomplex; typedef long int logical; typedef short int shortlogical; typedef char logical1; typedef char integer1; #ifdef INTEGER_STAR_8 /* Adjust for integer*8. */ typedef long long longint; /* system-dependent */ typedef unsigned long long ulongint; /* system-dependent */ #define qbit_clear(a, b) ((a) & ~((ulongint)1 << (b))) #define qbit_set(a, b) ((a) | ((ulongint)1 << (b))) #endif #define TRUE_ (1) #define FALSE_ (0) /* Extern is for use with -E */ #ifndef Extern #define Extern extern #endif /* I/O stuff */ #ifdef f2c_i2 /* for -i2 */ typedef short flag; typedef short ftnlen; typedef short ftnint; #else typedef long int flag; typedef long int ftnlen; typedef long int ftnint; #endif /*external read, write*/ typedef struct { flag cierr; ftnint ciunit; flag ciend; char *cifmt; ftnint cirec; } cilist; /*internal read, write*/ typedef struct { flag icierr; char *iciunit; flag iciend; char *icifmt; ftnint icirlen; ftnint icirnum; } icilist; /*open*/ typedef struct { flag oerr; ftnint ounit; char *ofnm; ftnlen ofnmlen; char *osta; char *oacc; char *ofm; ftnint orl; char *oblnk; } olist; /*close*/ typedef struct { flag cerr; ftnint cunit; char *csta; } cllist; /*rewind, backspace, endfile*/ typedef struct { flag aerr; ftnint aunit; } alist; /* inquire */ typedef struct { flag inerr; ftnint inunit; char *infile; ftnlen infilen; ftnint *inex; /*parameters in standard's order*/ ftnint *inopen; ftnint *innum; ftnint *innamed; char *inname; ftnlen innamlen; char *inacc; ftnlen inacclen; char *inseq; ftnlen inseqlen; char *indir; ftnlen indirlen; char *infmt; ftnlen infmtlen; char *inform; ftnint informlen; char *inunf; ftnlen inunflen; ftnint *inrecl; ftnint *innrec; char *inblank; ftnlen inblanklen; } inlist; #define VOID void union Multitype { /* for multiple entry points */ integer1 g; shortint h; integer i; /* longint j; */ real_t r; doublereal d; complex_t c; doublecomplex z; }; typedef union Multitype Multitype; /*typedef long int Long;*/ /* No longer used; formerly in Namelist */ struct Vardesc { /* for Namelist */ char *name; char *addr; ftnlen *dims; int type; }; typedef struct Vardesc Vardesc; struct Namelist { char *name; Vardesc **vars; int nvars; }; typedef struct Namelist Namelist; #define abs(x) ((x) >= 0 ? (x) : -(x)) #define dabs(x) (doublereal) abs(x) #define min(a, b) ((a) <= (b) ? (a) : (b)) #define max(a, b) ((a) >= (b) ? (a) : (b)) #define dmin(a, b) (doublereal) min(a, b) #define dmax(a, b) (doublereal) max(a, b) #define bit_test(a, b) ((a) >> (b)&1) #define bit_clear(a, b) ((a) & ~((uinteger)1 << (b))) #define bit_set(a, b) ((a) | ((uinteger)1 << (b))) /* procedure parameter types for -A and -C++ */ #define F2C_proc_par_types 1 #ifdef __cplusplus typedef int /* Unknown procedure type */ (*U_fp)(...); typedef shortint (*J_fp)(...); typedef integer (*I_fp)(...); typedef real_t (*R_fp)(...); typedef doublereal (*D_fp)(...), (*E_fp)(...); typedef /* Complex */ VOID (*C_fp)(...); typedef /* Double Complex */ VOID (*Z_fp)(...); typedef logical (*L_fp)(...); typedef shortlogical (*K_fp)(...); typedef /* Character */ VOID (*H_fp)(...); typedef /* Subroutine */ int (*S_fp)(...); #else typedef int /* Unknown procedure type */ (*U_fp)(); typedef shortint (*J_fp)(); typedef integer (*I_fp)(); typedef real_t (*R_fp)(); typedef doublereal (*D_fp)(), (*E_fp)(); typedef /* Complex */ VOID (*C_fp)(); typedef /* Double Complex */ VOID (*Z_fp)(); typedef logical (*L_fp)(); typedef shortlogical (*K_fp)(); typedef /* Character */ VOID (*H_fp)(); typedef /* Subroutine */ int (*S_fp)(); #endif /* E_fp is for real functions when -R is not specified */ typedef VOID C_f; /* complex function */ typedef VOID H_f; /* character function */ typedef VOID Z_f; /* double complex function */ typedef doublereal E_f; /* real function with -R not specified */ /* undef any lower-case symbols that your C compiler predefines, e.g.: */ #ifndef Skip_f2c_Undefs #undef cray #undef gcos #undef mc68010 #undef mc68020 #undef mips #undef pdp11 #undef sgi #undef sparc #undef sun #undef sun2 #undef sun3 #undef sun4 #undef u370 #undef u3b #undef u3b2 #undef u3b5 #undef unix #undef vax #endif #endif // ------------------- end of f2c.h file -------------------------------- // ------------------ begin of Borysow N2N2 F77 code -------------------- /* n2n2tks.f -- translated by f2c (version 20010821). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ /* Common Block Declarations */ struct s_blockin_ { double temp, fnumin, fnumax, dnu; } blockin_; #define blockin_1 blockin_ struct s_app3a_ { double slit, dx, wnrmax3; } app3a_; #define app3a_1 app3a_ struct s_app3b_ { int nsri, ns, nsriup; } app3b_; #define app3b_1 app3b_ struct s_rsilo_ { double rsilo[201]; } rsilo_; #define rsilo_1 rsilo_ struct s_bou43_ { int initb; } bou43_; #define bou43_1 bou43_ union u_bba_ { struct s_m_1 { double omeg[201], rsi[201], rsigg[201], alfa; } m_1; struct s_m_2 { double omeg[201], rsi[201], rsigg[201], beta; } m_2; } bba_; #define bba_1 (bba_.m_1) #define bba_2 (bba_.m_2) struct s_bbc_ { int nsol; } bbc_; #define bbc_1 bbc_ struct s_bf_ { double g0bf, delbf, om0; } bf_; #define bf_1 bf_ struct like_1_ { int like; char lgas[5]; }; #define like_1 (*(struct like_1_ *)&like_) struct s_k1k0_ { int ik1k0; } k1k0_; #define k1k0_1 k1k0_ struct s_bbb_ { int ibound; } bbb_; #define bbb_1 bbb_ struct energ_1_ { double eb[246] /* was [41][6] */; int niv[6]; }; #define energ_1 (*(struct energ_1_ *)&energ_) struct s_dimer_ { int nlines; } dimer_; #define dimer_1 dimer_ struct n2part_1_ { double q1, wn2[2], b01, d01; int jrange2; }; struct n2part_2_ { double q, wn2[2], b0, d0; int jrange1; }; #define n2part_1 (*(struct n2part_1_ *)&n2part_) #define n2part_2 (*(struct n2part_2_ *)&n2part_) union u_bl3_ { struct s_m_1 { double rsi[401]; } m_1; struct s_m_2 { double rsibb[401]; } m_2; } bl3_; #define bl3_1 (bl3_.m_1) #define bl3_2 (bl3_.m_2) union u_bbbb_ { struct s_m_1 { int idelv, iv, ivp, idell, il, ilp; } m_1; struct s_m_2 { int ldelvi, ivi, ivip, ldelel, ll, llp; } m_2; } bbbb_; #define bbbb_1 (bbbb_.m_1) #define bbbb_2 (bbbb_.m_2) /* Initialized data */ struct s_energe_ { double e_1[246]; int e_2[6]; } energ_ = {{-54.99996, -54.86228, -54.58697, -54.17413, -53.62391, -52.93648, -52.11211, -51.15108, -50.05374, -48.82049, -47.45179, -45.94815, -44.31014, -42.53841, -40.63365, -38.59665, -36.42824, -34.12937, -31.70105, -29.14439, -26.46061, -23.65103, -20.71709, -17.66041, -14.48271, -11.18593, -7.77221, -4.24393, -.60374, 3.14531, 6.99978, 10.95566, 15.00818, 19.15136, 23.37787, 27.67681, 32.03237, 36.42278, 40.83668, 45.29436, 49.79246, -31.89437, -31.77215, -31.52779, -31.16143, -30.67334, -30.06382, -29.33328, -28.48222, -27.51123, -26.42099, -25.21229, -23.88603, -22.44322, -20.88502, -19.21272, -17.42777, -15.53182, -13.52669, -11.41446, -9.1975, -6.87848, -4.46049, -1.94714, .65736, 3.34788, 6.11816, 8.95978, 11.8613, 14.80383, 17.75924, 20.71774, 23.71589, 0., 0., 0., 0., 0., 0., 0., 0., 0., -16.05019, -15.9464, -15.73896, -15.42815, -15.0144, -14.4983, -13.88057, -13.16213, -12.34407, -11.42771, -10.41455, -9.30639, -8.10531, -6.81376, -5.43459, -3.97121, -2.42768, -.80899, .87859, 2.62689, 4.42334, 6.24733, 8.06983, 9.90464, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -6.49343, -6.41131, -6.24732, -6.00202, -5.67623, -5.27111, -4.78813, -4.22919, -3.59665, -2.89345, -2.12325, -1.29074, -.40202, .5345, 1.50455, 2.48212, 3.46665, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -1.76583, -1.70887, -1.59552, -1.427, -1.20523, -.93302, -.61434, -.25504, .13641, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -.17133, -.14341, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}, {41, 32, 24, 17, 9, 2}}; struct s_n2part_ { double fill_1[1]; double e_2[4]; int fill_3[1]; } n2part_ = {{0}, {2., 1., 1.98957, 5.8e-6}, {0}}; struct s_like_ { int fill_1[1]; char e_2[5]; } like_ = {{0}, "N2N2"}; /* Table of constant values */ // FIXME static integer c__9 = 9; // FIXME static integer c__1 = 1; // FIXME static integer c__5 = 5; static int cs__1 = 1; static int cs__0 = 0; static double c_b24 = 2.9723; static double c_b25 = -.99569; static double c_b26 = .09464; static double c_b27 = 1.2962e-12; static double c_b28 = -.13048; static double c_b29 = -.03128; static double c_b30 = 3.7969e-14; static double c_b31 = 1.03681; static double c_b32 = -.14336; static int cs__2 = 2; static int cs__3 = 3; static double c_b43 = .180926; static double c_b44 = -1.69153; static double c_b45 = .18605; static double c_b46 = .3; static double c_b47 = 0.; static double c_b49 = 6.6017e-16; static double c_b50 = 2.59982; static double c_b51 = -.31831; static double c_b52 = 1.2481e-12; static double c_b53 = -.57028; static double c_b54 = .05983; static double c_b55 = 5.2681e-13; static double c_b56 = -.24719; static double c_b57 = .00519; static double c_b58 = 2.7518e15; static double c_b59 = -25.38969; static double c_b60 = 2.46542; static int cs__4 = 4; static int cs__5 = 5; // FIXME static integer c__2 = 2; static double c_b78 = .0825299; static double c_b79 = -1.25562; static double c_b80 = .12981; static double c_b84 = 3.6611e-15; static double c_b85 = 1.47688; static double c_b86 = -.16537; static double c_b87 = 6.1264e-10; static double c_b88 = -2.25011; static double c_b89 = .15289; static double c_b90 = 7.982e-10; static double c_b91 = -2.76152; static double c_b92 = .21847; static double c_b93 = 5.2868e-22; static double c_b94 = 7.66253; static double c_b95 = -.77527; static double c_b112 = 119.261; static double c_b113 = -3.78587; static double c_b114 = .34024; static double c_b115 = 9.3777e-12; static double c_b116 = -.66548; static double c_b117 = .0033; static double c_b118 = 3.0395e-13; static double c_b119 = .24728; static double c_b120 = -.06607; static double c_b183 = 1e-6; static double c_b186 = 1.5; #define temp (blockin_1.temp) #define fnumin (blockin_1.fnumin) #define fnumax (blockin_1.fnumax) #define dnu (blockin_1.dnu) #define slit (app3a_1.slit) #define dx (app3a_1.dx) #define rsilo (rsilo_1.rsilo) #define omeg (bba_1.omeg) #define rsi (bba_1.rsi) #define rsigg (bba_1.rsigg) #define nsol (bbc_1.nsol) #define like (like_1.like) #define ik1k0 (k1k0_1.ik1k0) #define ibound (bbb_1.ibound) /* TKS ****** SUBROUTINE N2N2TKS(T, F) ***************************************/ Numeric n2n2tks_(double t, double f) { /* System generated locals */ int s__1; double ret_val; /* Local variables */ //double hexa[10], quad[10]; double freq[10], e; int i__; double s, x, t1, t2, t3, t4; int ij, nf, jj; double rslow1, si; int nr; double ss[1], tt[2]; extern /* Subroutine */ int bound32_(double *, double *, int *), bound54_(double *, double *, int *); //double tksabs[5]; extern /* Subroutine */ int spline_(int *, int *, int *, double *, double *, double *, double *, double *, double *, int *, double *); double abscoef[10]; //double dtrans[10]; extern /* Subroutine */ int addspec_(double *, double *, double *, double *, double *, double *, double *, int *, double *, double *, int *, int *, int *, int *, int *, int *); double eps, alfatot[10]; extern /* Subroutine */ int partsum_(double *); /* ========================================= */ /* Copyright (C) Aleksandra Borysow, 1987) */ /* ==================================================================== */ /* PROGRAM PREPARED BY ALEKSANDRA BORYSOW (APRIL'1987) */ /* (UNIVERSITY OF TEXAS AT AUSTIN, PHYSICS DEPARTMENT) */ /* ORIGINAL VERSION: WRITTEN ON CYBER */ /* PROGRAM GENERATES N2-N2 COLLISION-INDUCED SPECTRA AT */ /* TEMPERATURES BETWEEN 50 TO 300 K. */ /* CIA SPECTRA MODELED AFTER PAPER (*) */ /* ALEKSANDRA BORYSOW AND LOTHAR FROMMHOLD, */ /* ASTROPHYSICAL JOURNAL, VOL. 311, PAGES 1043-1057, (1986) */ /* REVISED BY GLENN ORTON (1989) - TO WORK ON SUN WORKSTATIONS */ /* AND ON THE VAX MACHINES (FORTRAN-77) */ /* PASSES STANDARD TEST ON SUN, AT 200K (JULY 1992) */ /* ==================================================================== */ /* ALSO IN REVISION: DOUBLE PRECISION FOR ALL F.P. VARIABLES */ /* ==================================================================== */ /* HISTORY: */ /* 2001-02-28 THOMAS KUHN: */ /* CHANGE OF LINES */ /* RSILO(I)=DLOG(RSI(I)*1.E80) */ /* TO */ /* RSILO(I)=(DLOG(RSI(I))+80.0D0*DLOG(10.0D0)) */ /* BECAUSE OF OVERFLOW PROBLEMS. */ /* COSMETICS FOR THE CODE TO BE FASTER READABLE. */ /* CHANGE OF OUTPUT FILE NAME. */ /* CHANGE OF OUTPUT FILE CONTENT */ /* ==================================================================== */ /* TKS* IMPLICIT REAL*8 (A-H,O-Z) */ /* TKS INPUT/OUTPUT VARIABLES */ /* REAL T, F */ //ret_val = 0.; /* TEMP = TEMPERATURE IN KELVIN, SHOULD BE BETWEEN 50. AND 300. */ /* FNUMIN = LOWEST FREQUENCY IN CM-1, FOR LISTING OF ALPHA(FNU) */ /* FNUMAX = HIGHEST FREQUENCY IN CM-1, FOR LISTING OF ALPHA(FNU) */ /* LINE SHAPE MODELLING WILL BE MOST ACCURATE WITHIN RANGE OF */ /* R-T SPECTRAL INTENSITIES AS 1:100. */ /* DNU = FREQUENCY INCREMENT IN CM-1. DNU SHOULD BE CHOSEN SO */ /* THAT NOT MORE THAN 10 STEPS ARE NEEDED TO GO FROM */ /* FNUMIN TO FNUMAX (ELSE ARRAY DIMENSIONS OF FREQ,ABSCOEF */ /* MUST BE ADJUSTED IN ADDEM). */ /* USER: */ /* ----- */ /* EDIT ONLY HERE: TEMP (K), MIN. FREQ. (CM^-1)= FNUMIN, */ /* MAX. FREQ. = FNUMAX, STEP = DNU, SLITWIDTH (CM^-1)=SLIT */ /* (SLIT=4.3 IS EQUIVALENT TO THAT OF VOYAGER SPECTRA, ONLY BOUND BOUND */ /* SPECTRA ARE CONVOLUTED WITH THIS SLITWIDTH, THE FREE FREE SPECTRA */ /* ARE FAR TOO BROAD FOR THE SLITWIDTH FUNCTION TO MATTER, */ /* LEAVE LIKE = 1 (FOR LIKE PAIRS, AS N2-N2) */ /* THE PROGRAM WILL ASSUME EQUILIBRIUM N2, */ /* ALLOWED TEMPERATURE RANGE: 50-300K (DO NOT EXTEND IT BEYOND THESE LIMITS!) */ /* IF QUESTIONS: CONTACT ABORYSOW@NBI.DK */ /* TKS* NF=INT((FNUMAX-FNUMIN)/DNU+0.5)+1 */ /* TKS* IF (NF.GT.10) NF=10 */ /* TKS* FNUMAX=FNUMIN+FLOAT(NF-1)*DNU */ /* TKS INPUT TEMPERATURE (K) CHECK OF RANGE */ if (t < 50. || t > 300.) { ostringstream os; os << "out of T range ( 50<T<300)! return without calc.!" << "\n"; throw runtime_error(os.str()); goto L999; } temp = t; /* *********************** INPUT DATA FROM USER *********************** */ /* FNUMIN = MINIMUM FREQENCY [CM^-1] */ fnumin = f / 29979245800.; /* FNUMAX = MAXIMUM FREQENCY [CM^-1] */ fnumax = fnumin; /* ONLY ONE FREQUENCY PER CALL */ nf = 1; /* DEFAULT VALUE OF FREQUENCY STEP [CM^-1] */ dnu = 10.; /* DEFAULT VALUE */ like = 1; /* SLIT = SLITWIDTH [CM^-1] */ /* SLIT=4.3 IS EQUIVALENT TO THAT OF VOYAGER SPECTRA, ONLY BOUND BOUND */ /* SPECTRA ARE CONVOLUTED WITH THIS SLITWIDTH, THE FREE FREE SPECTRA */ /* ARE FAR TOO BROAD FOR THE SLITWIDTH FUNCTION TO MATTER. */ slit = 4.3; /* ******************************************************************** */ /* TKS* WRITE (6,14) LGAS,TEMP,FNUMIN,FNUMAX,DNU,NF-1 */ /* TKS*14 FORMAT(' ABSORPTION SPECTRA OF ',A5,' AT',F8.1,' K'/ */ /* TKS* $ 1X,43(1H=),/ */ /* TKS* 1' MIN.FREQ.=',F8.1,' CM-1',10X,'MAX.FREQ.=',F8.1,' CM-1',10X, */ /* TKS* 2'FREQ.INCREMENT=',F8.2,' CM-1',5X,'IN',I5,' STEPS'//) */ partsum_(&temp); /* THE N2-N2 SPECTRA FOR 50-300K */ /* ================================ */ x = log(temp); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { /* FREQ(I)=FNUMIN+FLOAT(I-1)*DNU */ freq[i__ - 1] = fnumin; alfatot[i__ - 1] = 0.; /* L10: */ abscoef[i__ - 1] = 0.; } /* ==================================================================== */ jj = 1; L442: /* L1023: */ ++jj; if (jj == 42) { goto L444; } goto L442; /* EB(JJ,IV) JJ-ROTATIONAL LEVEL "L", IV- VIBRATIONAL LEVEL "V"; */ L444: /* ==================================================================== */ /* QUADRUPOLAR INDUCTION: (50-300K) LAMBDA1,LAMBDA2,LAMBDA,L=2023&0223 */ /* ------------------------------------------------------------------- */ eps = 1e-5; tt[0] = 10.; bound32_(&temp, rsi, &nsol); ij = 0; rslow1 = 0.; s__1 = nsol; for (i__ = 1; i__ <= s__1; ++i__) { ++ij; /* MOD CAN BE ONLY 0 OR 1 OR 2 */ if (ij % 3 == 0) { rslow1 = 1.5e-60; } if (ij % 3 == 1) { rslow1 = 1.7e-60; } if (ij % 3 == 2) { rslow1 = 1.6e-60; } if (rsi[i__ - 1] < 1e-60) { rsi[i__ - 1] = rslow1; } /* TKS* RSILO(I)=DLOG(RSI(I)*1.D80) */ rsilo[i__ - 1] = log(rsi[i__ - 1]) + log(10.) * 80.; omeg[i__ - 1] = (double)(i__ - 1) * dx; /* L88: */ } /* L9991: */ spline_(&nsol, &cs__1, &cs__0, &eps, omeg, rsilo, tt, ss, &si, &nr, rsigg); ik1k0 = 1; ibound = 1; /* B-C LINESHAPE HERE */ /* THESE VALUES (S,T1,T2) REPLACE VALUES GIVEN IN PAPER (*): */ /* PUBLISHED IN AN ERRATUM, ASTROPHYSICAL JOURNAL, VOL.320, P.437 */ /* (1987) */ s = c_b24 * exp((c_b26 * x + c_b25) * x); t1 = c_b27 * exp((c_b29 * x + c_b28) * x); t2 = c_b30 * exp((c_b32 * x + c_b31) * x); e = 0.; t3 = 0.; t4 = 0.; addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &like, &cs__2, &cs__0, &cs__2, &cs__3); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { //quad[i__ - 1] = abscoef[i__ - 1]; /* L20: */ alfatot[i__ - 1] = abscoef[i__ - 1] + alfatot[i__ - 1]; } /* ==================================================================== */ /* HEXADECAPOLE COMPONENTS: LAMBDA1,LAMBDA2,LAMBDA,L=4045&0445 */ /* ----------------------------------------------------------- */ bound54_(&temp, rsi, &nsol); ij = 0; s__1 = nsol; for (i__ = 1; i__ <= s__1; ++i__) { ++ij; /* MOD CAN BE ONLY 0 OR 1 OR 2 */ if (ij % 3 == 0) { rslow1 = 1.5e-60; } if (ij % 3 == 1) { rslow1 = 1.7e-60; } if (ij % 3 == 2) { rslow1 = 1.6e-60; } if (rsi[i__ - 1] < 1e-60) { rsi[i__ - 1] = rslow1; } /* TKS RSILO(I)=DLOG(RSI(I)*1.E80) */ rsilo[i__ - 1] = log(rsi[i__ - 1]) + log(10.) * 80.; /* L111: */ omeg[i__ - 1] = (double)(i__ - 1) * dx; } spline_(&nsol, &cs__1, &cs__0, &eps, omeg, rsilo, tt, ss, &si, &nr, rsigg); /* --------------------------- */ /* TEMPERATURES 50-140K */ /* --------------------------- */ if (temp >= 140.) { goto L333; } s = c_b43 * exp((c_b45 * x + c_b44) * x); e = c_b46 * exp((c_b47 * x + c_b47) * x); t1 = c_b49 * exp((c_b51 * x + c_b50) * x); t2 = c_b52 * exp((c_b54 * x + c_b53) * x); t3 = c_b55 * exp((c_b57 * x + c_b56) * x); t4 = c_b58 * exp((c_b60 * x + c_b59) * x); ik1k0 = 0; ibound = 1; addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &like, &cs__4, &cs__0, &cs__4, &cs__5); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { //hexa[i__ - 1] = abscoef[i__ - 1]; /* s_wsle(&io___25); do_lio(&c__9, &c__1, " T=50-140K: HEXA(", (ftnlen)17); do_lio(&c__2, &c__1, (char *)&i__, (ftnlen)sizeof(int)); do_lio(&c__9, &c__1, ") =", (ftnlen)3); do_lio(&c__5, &c__1, (char *)&abscoef[i__ - 1], (ftnlen)sizeof( double)); e_wsle(); */ /* L50: */ alfatot[i__ - 1] += abscoef[i__ - 1]; } goto L334; /* --------------------------- */ /* TEMPERATURES 140-300K */ /* --------------------------- */ L333: ik1k0 = 0; ibound = 1; s = c_b78 * exp((c_b80 * x + c_b79) * x); e = c_b46 * exp((c_b47 * x + c_b47) * x); t1 = c_b84 * exp((c_b86 * x + c_b85) * x); t2 = c_b87 * exp((c_b89 * x + c_b88) * x); t3 = c_b90 * exp((c_b92 * x + c_b91) * x); t4 = c_b93 * exp((c_b95 * x + c_b94) * x); addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &like, &cs__4, &cs__0, &cs__4, &cs__5); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { //hexa[i__ - 1] = abscoef[i__ - 1]; /* s_wsle(&io___26); do_lio(&c__9, &c__1, " T=140-300K: HEXA(", (ftnlen)18); do_lio(&c__2, &c__1, (char *)&i__, (ftnlen)sizeof(int)); do_lio(&c__9, &c__1, ") =", (ftnlen)3); do_lio(&c__5, &c__1, (char *)&abscoef[i__ - 1], (ftnlen)sizeof( double)); e_wsle(); */ /* L550: */ alfatot[i__ - 1] += abscoef[i__ - 1]; } /* ==================================================================== */ /* DOUBLE TRANSITIONS: LAMBDA1,LAMBDA2,LAMBDA,L=2,2,3,3 */ /* ---------------------------------------------------- */ /* --------------------------- */ /* TEMPERATURES 50-300K */ /* --------------------------- */ L334: ik1k0 = 1; ibound = 0; /* X S=Y(X,1.19261D-58, -3.78587,0.34024) */ s = c_b112 * exp((c_b114 * x + c_b113) * x); t1 = c_b115 * exp((c_b117 * x + c_b116) * x); t2 = c_b118 * exp((c_b120 * x + c_b119) * x); t3 = 0.; t4 = 0.; addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &like, &cs__2, &cs__2, &cs__3, &cs__3); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { //dtrans[i__ - 1] = abscoef[i__ - 1]; /* L650: */ alfatot[i__ - 1] += abscoef[i__ - 1]; } /* ==================================================================== */ /* ANISOTROPIC OVERLAP NEGLECTED (LAMBDA1,LAMBDA2,LAMBDA,L=0212) */ /* SINCE THIS TERM IS EXTREMELY SMALL */ /* ==================================================================== */ /* TKS* PRINT 154, FREQ(1),FREQ(NF),FREQ(2)-FREQ(1),TEMP */ /* TKS* PRINT 156, (ALFATOT(I),I=1,NF) */ /* TKS*154 FORMAT(///' ABSORPTION COEFFICIENT ALPHA(FNU), FROM ',F5.1, */ /* TKS* $' CM-1 TO',F7.1,' CM-1, AT',F6.2,' CM-1 INCREMENTS, AT T=', */ /* TKS* $F7.2,' K, IN UNITS OF CM-1 AMAGAT-2'/) */ /* TKS*156 FORMAT(' ',10D13.5) */ /* TKS* OPEN(UNIT=10, FILE='OUT', STATUS='UNKNOWN') */ /* TKS* WRITE(10, 2929) (FREQ(I), ALFATOT(I), I=1, NF) */ /* TKS*C WRITE(10, 2929) (FREQ(I), QUAD(I), HEXA(I) ALFATOT(I), I=1, NF) */ /* TKS*2929 FORMAT(F10.3, E12.4) */ /* TKS* STOP */ /* TKS FILL OUTPUT VARIABLE */ // tksabs[0] = quad[0]; // tksabs[1] = hexa[0]; // tksabs[2] = dtrans[0]; // tksabs[3] = alfatot[0]; ret_val = alfatot[0]; /* TKS print*,'QUAD(1),HEXA(1),DTRANS(1)=',QUAD(1),HEXA(1),DTRANS(1) */ L999: return ret_val; } /* n2n2tks_ */ #undef temp #undef fnumin #undef fnumax #undef dnu #undef slit #undef dx #undef rsilo #undef omeg #undef rsi #undef rsigg #undef nsol #undef like #undef ik1k0 #undef ibound #define wnrmax3 (app3a_1.wnrmax3) #define rsilo (rsilo_1.rsilo) #define omeg (bba_2.omeg) #define rsigg (bba_2.rsigg) #define beta (bba_2.beta) #define nsol (bbc_1.nsol) #define ibound (bbb_1.ibound) #define q1 (n2part_1.q1) #define wn2 (n2part_1.wn2) #define b01 (n2part_1.b01) #define d01 (n2part_1.d01) #define jrange2 (n2part_1.jrange2) /* ########################################################################## */ /* Subroutine */ int addspec_(double *g0, double *ep, double *tau1, double *tau2, double *tau5, double *tau6, double *temp, int *nf, double *freq, double *abscoef, int * /* mp */, int *like, int *lambda1, int *lambda2, int *lambda, int * /* lvalue */) { /* Initialized data */ static double closchm = 2.68675484e19; static double boltzwn = .6950304; static double hbar = 1.054588757e-27; static double pi = 3.1415926535898; static double clight = 2.997925e10; /* Format strings */ /* static char fmt_20[] = "(/\002 LAMBDA1,LAMBDA2, LAMBDA,LVALUE=\002,2i3,2" "x,2i3,\002 COMPONENT.\002/15x,\002LINE SHAPE PARAMETERS:\002,6d1" "2.3,5x,\002G(0)=\002,d12.3/)"; */ /* System generated locals */ int s__1, s__2, s__3, s__4, s__5, s__6; double d__1, d__2; /* Builtin functions */ /* integer s_wsfe(cilist *), do_fio(integer *, char *, ftnlen), e_wsfe(void), s_wsle(cilist *), do_lio(integer *, integer *, char *, ftnlen), e_wsle(void); */ /* Local variables */ int list, jsum = 0; extern double bgama_( double *, double *, double *, double *, double *, double *, double *); int i__, j; double calib, p; int i1, j1, i2, j2; double p1, p2, omega1, omega2; int ip, jp, iq; double twopic; int jplusl, ip1, jp1, ip2, jp2; double fac, cgs, xbg, wkf, frq, wki; extern double specfct_( double *, double *, double *, double *, int *, d
20195  // specific droplet weight value: 1 g/cm³ // // valid atmospheric condition: // temperature : 233 to 323 K // relative humidity: 1 to 100 % // for (Index s = 0; s < f_grid.nelem(); ++s) { if (f_grid[s] > 1e12) { ostringstream os; os << "Ice cloud absorption model MPM93 only valid at\n" "frequencies up to 1THz. Yours are above."; throw runtime_error(os.str()); } } const int Nparam = 3; if ((model == "user") && (parameters.nelem() == Nparam)) // --------------------- { MPM93IceCrystalAbs(pxsec, parameters[0], // scaling factror parameters[1], // scaling factror parameters[2], // scaling factror model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // ---------------- { ostringstream os; os << "MPM93 ice water cloud absorption model " << name << " requires \n" << Nparam << " input parameter for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { MPM93IceCrystalAbs(pxsec, 0.000, // scaling factror 0.000, // scaling factror 0.000, // scaling factror model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: MPM93 ice water cloud absorption model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 4.\n"; throw runtime_error(os.str()); } } // ============= rain extinction from MPM93 =========================================== else if ("rain-MPM93" == name) { // Rain extinction parameterization from MPM93 model, described in // H. J. Liebe, // "MPM - An Atmospheric Millimeter-Wave Propagation Model", // Int. J. Infrared and Millimeter Waves, vol. 10(6), // pp. 631-650, 1989 // and based on // Olsen, R.L., D.V. Rogers, and D. B. Hodge, "The aR^b relation in the // calculation of rain attenuation", IEEE Trans. Antennas Propagat., // vol. AP-26, pp. 318-329, 1978. // // specific continuum parameters and units: // OUTPUT // pxsec : [1/m], // INPUT // parameters[0] : [1] // parameters[1] : [1] // parameters[2] : [1] // model : [1] // f_grid : [Hz] // abs_p : [Pa] // abs_t : [K] // vmr : [kg/m2/s] // // rain parameters: // rain rate range: 0-150 mm/h (=0-0.42 kg/m2/s) // // valid atmospheric condition: // temperature : (preferably above 273 K...) // for (Index s = 0; s < f_grid.nelem(); ++s) { if (f_grid[s] > 1e12) { ostringstream os; os << "Rain absorption model MPM93 only valid at\n" "frequencies up to 1THz. Yours is above."; throw runtime_error(os.str()); } } const int Nparam = 3; if ((model == "user") && (parameters.nelem() == Nparam)) // ------------------------- { out3 << "MPM93 rain extinction model " << name << " is running with \n" << "user defined parameters according to model " << model << ".\n"; MPM93RainExt(pxsec, parameters[0], // scaling factor parameters[1], // scaling factor parameters[2], // scaling factor model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model == "user") && (parameters.nelem() != Nparam)) // -------------------- { ostringstream os; os << "MPM93 rain extinction model " << name << " requires \n" << Nparam << " input parameter for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n"; throw runtime_error(os.str()); } else if ((model != "user") && (parameters.nelem() == 0)) // -------------------- { out3 << "MPM93 rain extinction model " << name << " running with \n" << "the parameter for model " << model << ".\n"; MPM93RainExt(pxsec, 0.000, // scaling factor 0.000, // scaling factor 0.000, // scaling factor model, // model option f_grid, abs_p, abs_t, vmr, verbosity); } else if ((model != "user") && (parameters.nelem() != 0)) // -------------------- { ostringstream os; os << "ERROR: MPM93 rain extinction model " << name << " requires NO input\n" << "parameters for the model " << model << ",\n" << "but you specified " << parameters.nelem() << " parameters.\n" << "This ambiguity can not be solved by arts.\n" << "Please see the arts user guide chapter 4.\n"; throw runtime_error(os.str()); } } else // ----------------------------------------------------------------------- { // none of the continuum or full model tags were selected -> error message. ostringstream os; os << "ERROR: Continuum/ full model tag `" << name << "' not yet implemented in arts!"; throw runtime_error(os.str()); } // We have to divide the result from the internal continuum model by // the number density n to convert it from pseudo cross section to a // true cross section. // Boltzmann constant extern const Numeric BOLTZMAN_CONST; // Loop all pressures: for (Index i = 0; i < abs_p.nelem(); ++i) { const Numeric p_i = abs_p[i]; const Numeric t_i = abs_t[i]; // Calculate total number density from pressure and temperature. // n = n0*T0/p0 * p/T or n = p/kB/t, ideal gas law const Numeric n = p_i / BOLTZMAN_CONST / t_i; // We add to the output variable xsec here, previous content is // not overwritten! pxsec(joker, i) /= n; xsec(joker, i) += pxsec(joker, i); } } // ################################################################################# /** An auxiliary functions that checks if a given continuum model is listed in species_data.cc. This is just in order to verify that this really represents a valid continuum model. The given name should be something like 'H2O-ContStandardSelf'. The function simply checks if there is a species H2O with an isotopologue ContStandardSelf. For user-friendliness, the function also compiles a list of allowed continuum models and gives this as an error message if the model is not found. The function has no return value, since, if the name does not match a valid model an error is thrown anyway. \param name The name of the continuum model to check. \throw runtime_error The model does not exist. \author Stefan Buehler \date 2001-03-12 */ void check_continuum_model(const String &name) { // The species lookup data: using global_data::species_data; // For the list of valid continuum models: ArrayOfString valid_models; bool found = false; // Loop all species: for (Array<SpeciesRecord>::const_iterator i = species_data.begin(); i < species_data.end(); ++i) { String specnam = i->Name(); // Loop all isotopologues: for (Array<IsotopologueRecord>::const_iterator j = i->Isotopologue().begin(); j < i->Isotopologue().end(); ++j) { String isonam = j->Name(); // The specified name consists of a species part and an // isotopologue part, e.g., H2O-ContStandardSelf. We need to // construct a similar String from the species lookup data // by concatenating species name and isotopologue name. String fullnam = specnam + "-" + isonam; // cout << fullnam << "\n"; // See if this is a continuum tag, so that we can add it to // the list: if (j->isContinuum()) { valid_models.push_back(fullnam); } if (name == fullnam) { found = true; } } } // ---------------------------------------------------------------------- // Have we found it? if (!found) { ostringstream os; os << "The String `" << name << "' matches none of the known\n" << "continuum models. Known continuum models are:"; for (ArrayOfString::const_iterator i = valid_models.begin(); i < valid_models.end(); ++i) { os << "\n" << *i; } throw runtime_error(os.str()); } } // // // ################################################################################# // ############################# f2c code implementation ########################### // ################################################################################# // // // ------------------- begin of f2c.h file -------------------------------- // /* f2c.h -- Standard Fortran to C header file */ #ifndef F2C_INCLUDE #define F2C_INCLUDE typedef long int integer; typedef unsigned long int uinteger; typedef char *address; typedef short int shortint; typedef float real_t; typedef double doublereal; typedef struct { real_t r, i; } complex_t; typedef struct { doublereal r, i; } doublecomplex; typedef long int logical; typedef short int shortlogical; typedef char logical1; typedef char integer1; #ifdef INTEGER_STAR_8 /* Adjust for integer*8. */ typedef long long longint; /* system-dependent */ typedef unsigned long long ulongint; /* system-dependent */ #define qbit_clear(a, b) ((a) & ~((ulongint)1 << (b))) #define qbit_set(a, b) ((a) | ((ulongint)1 << (b))) #endif #define TRUE_ (1) #define FALSE_ (0) /* Extern is for use with -E */ #ifndef Extern #define Extern extern #endif /* I/O stuff */ #ifdef f2c_i2 /* for -i2 */ typedef short flag; typedef short ftnlen; typedef short ftnint; #else typedef long int flag; typedef long int ftnlen; typedef long int ftnint; #endif /*external read, write*/ typedef struct { flag cierr; ftnint ciunit; flag ciend; char *cifmt; ftnint cirec; } cilist; /*internal read, write*/ typedef struct { flag icierr; char *iciunit; flag iciend; char *icifmt; ftnint icirlen; ftnint icirnum; } icilist; /*open*/ typedef struct { flag oerr; ftnint ounit; char *ofnm; ftnlen ofnmlen; char *osta; char *oacc; char *ofm; ftnint orl; char *oblnk; } olist; /*close*/ typedef struct { flag cerr; ftnint cunit; char *csta; } cllist; /*rewind, backspace, endfile*/ typedef struct { flag aerr; ftnint aunit; } alist; /* inquire */ typedef struct { flag inerr; ftnint inunit; char *infile; ftnlen infilen; ftnint *inex; /*parameters in standard's order*/ ftnint *inopen; ftnint *innum; ftnint *innamed; char *inname; ftnlen innamlen; char *inacc; ftnlen inacclen; char *inseq; ftnlen inseqlen; char *indir; ftnlen indirlen; char *infmt; ftnlen infmtlen; char *inform; ftnint informlen; char *inunf; ftnlen inunflen; ftnint *inrecl; ftnint *innrec; char *inblank; ftnlen inblanklen; } inlist; #define VOID void union Multitype { /* for multiple entry points */ integer1 g; shortint h; integer i; /* longint j; */ real_t r; doublereal d; complex_t c; doublecomplex z; }; typedef union Multitype Multitype; /*typedef long int Long;*/ /* No longer used; formerly in Namelist */ struct Vardesc { /* for Namelist */ char *name; char *addr; ftnlen *dims; int type; }; typedef struct Vardesc Vardesc; struct Namelist { char *name; Vardesc **vars; int nvars; }; typedef struct Namelist Namelist; #define abs(x) ((x) >= 0 ? (x) : -(x)) #define dabs(x) (doublereal) abs(x) #define min(a, b) ((a) <= (b) ? (a) : (b)) #define max(a, b) ((a) >= (b) ? (a) : (b)) #define dmin(a, b) (doublereal) min(a, b) #define dmax(a, b) (doublereal) max(a, b) #define bit_test(a, b) ((a) >> (b)&1) #define bit_clear(a, b) ((a) & ~((uinteger)1 << (b))) #define bit_set(a, b) ((a) | ((uinteger)1 << (b))) /* procedure parameter types for -A and -C++ */ #define F2C_proc_par_types 1 #ifdef __cplusplus typedef int /* Unknown procedure type */ (*U_fp)(...); typedef shortint (*J_fp)(...); typedef integer (*I_fp)(...); typedef real_t (*R_fp)(...); typedef doublereal (*D_fp)(...), (*E_fp)(...); typedef /* Complex */ VOID (*C_fp)(...); typedef /* Double Complex */ VOID (*Z_fp)(...); typedef logical (*L_fp)(...); typedef shortlogical (*K_fp)(...); typedef /* Character */ VOID (*H_fp)(...); typedef /* Subroutine */ int (*S_fp)(...); #else typedef int /* Unknown procedure type */ (*U_fp)(); typedef shortint (*J_fp)(); typedef integer (*I_fp)(); typedef real_t (*R_fp)(); typedef doublereal (*D_fp)(), (*E_fp)(); typedef /* Complex */ VOID (*C_fp)(); typedef /* Double Complex */ VOID (*Z_fp)(); typedef logical (*L_fp)(); typedef shortlogical (*K_fp)(); typedef /* Character */ VOID (*H_fp)(); typedef /* Subroutine */ int (*S_fp)(); #endif /* E_fp is for real functions when -R is not specified */ typedef VOID C_f; /* complex function */ typedef VOID H_f; /* character function */ typedef VOID Z_f; /* double complex function */ typedef doublereal E_f; /* real function with -R not specified */ /* undef any lower-case symbols that your C compiler predefines, e.g.: */ #ifndef Skip_f2c_Undefs #undef cray #undef gcos #undef mc68010 #undef mc68020 #undef mips #undef pdp11 #undef sgi #undef sparc #undef sun #undef sun2 #undef sun3 #undef sun4 #undef u370 #undef u3b #undef u3b2 #undef u3b5 #undef unix #undef vax #endif #endif // ------------------- end of f2c.h file -------------------------------- // ------------------ begin of Borysow N2N2 F77 code -------------------- /* n2n2tks.f -- translated by f2c (version 20010821). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ /* Common Block Declarations */ struct s_blockin_ { double temp, fnumin, fnumax, dnu; } blockin_; #define blockin_1 blockin_ struct s_app3a_ { double slit, dx, wnrmax3; } app3a_; #define app3a_1 app3a_ struct s_app3b_ { int nsri, ns, nsriup; } app3b_; #define app3b_1 app3b_ struct s_rsilo_ { double rsilo[201]; } rsilo_; #define rsilo_1 rsilo_ struct s_bou43_ { int initb; } bou43_; #define bou43_1 bou43_ union u_bba_ { struct s_m_1 { double omeg[201], rsi[201], rsigg[201], alfa; } m_1; struct s_m_2 { double omeg[201], rsi[201], rsigg[201], beta; } m_2; } bba_; #define bba_1 (bba_.m_1) #define bba_2 (bba_.m_2) struct s_bbc_ { int nsol; } bbc_; #define bbc_1 bbc_ struct s_bf_ { double g0bf, delbf, om0; } bf_; #define bf_1 bf_ struct like_1_ { int like; char lgas[5]; }; #define like_1 (*(struct like_1_ *)&like_) struct s_k1k0_ { int ik1k0; } k1k0_; #define k1k0_1 k1k0_ struct s_bbb_ { int ibound; } bbb_; #define bbb_1 bbb_ struct energ_1_ { double eb[246] /* was [41][6] */; int niv[6]; }; #define energ_1 (*(struct energ_1_ *)&energ_) struct s_dimer_ { int nlines; } dimer_; #define dimer_1 dimer_ struct n2part_1_ { double q1, wn2[2], b01, d01; int jrange2; }; struct n2part_2_ { double q, wn2[2], b0, d0; int jrange1; }; #define n2part_1 (*(struct n2part_1_ *)&n2part_) #define n2part_2 (*(struct n2part_2_ *)&n2part_) union u_bl3_ { struct s_m_1 { double rsi[401]; } m_1; struct s_m_2 { double rsibb[401]; } m_2; } bl3_; #define bl3_1 (bl3_.m_1) #define bl3_2 (bl3_.m_2) union u_bbbb_ { struct s_m_1 { int idelv, iv, ivp, idell, il, ilp; } m_1; struct s_m_2 { int ldelvi, ivi, ivip, ldelel, ll, llp; } m_2; } bbbb_; #define bbbb_1 (bbbb_.m_1) #define bbbb_2 (bbbb_.m_2) /* Initialized data */ struct s_energe_ { double e_1[246]; int e_2[6]; } energ_ = {{-54.99996, -54.86228, -54.58697, -54.17413, -53.62391, -52.93648, -52.11211, -51.15108, -50.05374, -48.82049, -47.45179, -45.94815, -44.31014, -42.53841, -40.63365, -38.59665, -36.42824, -34.12937, -31.70105, -29.14439, -26.46061, -23.65103, -20.71709, -17.66041, -14.48271, -11.18593, -7.77221, -4.24393, -.60374, 3.14531, 6.99978, 10.95566, 15.00818, 19.15136, 23.37787, 27.67681, 32.03237, 36.42278, 40.83668, 45.29436, 49.79246, -31.89437, -31.77215, -31.52779, -31.16143, -30.67334, -30.06382, -29.33328, -28.48222, -27.51123, -26.42099, -25.21229, -23.88603, -22.44322, -20.88502, -19.21272, -17.42777, -15.53182, -13.52669, -11.41446, -9.1975, -6.87848, -4.46049, -1.94714, .65736, 3.34788, 6.11816, 8.95978, 11.8613, 14.80383, 17.75924, 20.71774, 23.71589, 0., 0., 0., 0., 0., 0., 0., 0., 0., -16.05019, -15.9464, -15.73896, -15.42815, -15.0144, -14.4983, -13.88057, -13.16213, -12.34407, -11.42771, -10.41455, -9.30639, -8.10531, -6.81376, -5.43459, -3.97121, -2.42768, -.80899, .87859, 2.62689, 4.42334, 6.24733, 8.06983, 9.90464, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -6.49343, -6.41131, -6.24732, -6.00202, -5.67623, -5.27111, -4.78813, -4.22919, -3.59665, -2.89345, -2.12325, -1.29074, -.40202, .5345, 1.50455, 2.48212, 3.46665, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -1.76583, -1.70887, -1.59552, -1.427, -1.20523, -.93302, -.61434, -.25504, .13641, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -.17133, -.14341, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}, {41, 32, 24, 17, 9, 2}}; struct s_n2part_ { double fill_1[1]; double e_2[4]; int fill_3[1]; } n2part_ = {{0}, {2., 1., 1.98957, 5.8e-6}, {0}}; struct s_like_ { int fill_1[1]; char e_2[5]; } like_ = {{0}, "N2N2"}; /* Table of constant values */ // FIXME static integer c__9 = 9; // FIXME static integer c__1 = 1; // FIXME static integer c__5 = 5; static int cs__1 = 1; static int cs__0 = 0; static double c_b24 = 2.9723; static double c_b25 = -.99569; static double c_b26 = .09464; static double c_b27 = 1.2962e-12; static double c_b28 = -.13048; static double c_b29 = -.03128; static double c_b30 = 3.7969e-14; static double c_b31 = 1.03681; static double c_b32 = -.14336; static int cs__2 = 2; static int cs__3 = 3; static double c_b43 = .180926; static double c_b44 = -1.69153; static double c_b45 = .18605; static double c_b46 = .3; static double c_b47 = 0.; static double c_b49 = 6.6017e-16; static double c_b50 = 2.59982; static double c_b51 = -.31831; static double c_b52 = 1.2481e-12; static double c_b53 = -.57028; static double c_b54 = .05983; static double c_b55 = 5.2681e-13; static double c_b56 = -.24719; static double c_b57 = .00519; static double c_b58 = 2.7518e15; static double c_b59 = -25.38969; static double c_b60 = 2.46542; static int cs__4 = 4; static int cs__5 = 5; // FIXME static integer c__2 = 2; static double c_b78 = .0825299; static double c_b79 = -1.25562; static double c_b80 = .12981; static double c_b84 = 3.6611e-15; static double c_b85 = 1.47688; static double c_b86 = -.16537; static double c_b87 = 6.1264e-10; static double c_b88 = -2.25011; static double c_b89 = .15289; static double c_b90 = 7.982e-10; static double c_b91 = -2.76152; static double c_b92 = .21847; static double c_b93 = 5.2868e-22; static double c_b94 = 7.66253; static double c_b95 = -.77527; static double c_b112 = 119.261; static double c_b113 = -3.78587; static double c_b114 = .34024; static double c_b115 = 9.3777e-12; static double c_b116 = -.66548; static double c_b117 = .0033; static double c_b118 = 3.0395e-13; static double c_b119 = .24728; static double c_b120 = -.06607; static double c_b183 = 1e-6; static double c_b186 = 1.5; #define temp (blockin_1.temp) #define fnumin (blockin_1.fnumin) #define fnumax (blockin_1.fnumax) #define dnu (blockin_1.dnu) #define slit (app3a_1.slit) #define dx (app3a_1.dx) #define rsilo (rsilo_1.rsilo) #define omeg (bba_1.omeg) #define rsi (bba_1.rsi) #define rsigg (bba_1.rsigg) #define nsol (bbc_1.nsol) #define like (like_1.like) #define ik1k0 (k1k0_1.ik1k0) #define ibound (bbb_1.ibound) /* TKS ****** SUBROUTINE N2N2TKS(T, F) ***************************************/ Numeric n2n2tks_(double t, double f) { /* System generated locals */ int s__1; double ret_val; /* Local variables */ //double hexa[10], quad[10]; double freq[10], e; int i__; double s, x, t1, t2, t3, t4; int ij, nf, jj; double rslow1, si; int nr; double ss[1], tt[2]; extern /* Subroutine */ int bound32_(double *, double *, int *), bound54_(double *, double *, int *); //double tksabs[5]; extern /* Subroutine */ int spline_(int *, int *, int *, double *, double *, double *, double *, double *, double *, int *, double *); double abscoef[10]; //double dtrans[10]; extern /* Subroutine */ int addspec_(double *, double *, double *, double *, double *, double *, double *, int *, double *, double *, int *, int *, int *, int *, int *, int *); double eps, alfatot[10]; extern /* Subroutine */ int partsum_(double *); /* ========================================= */ /* Copyright (C) Aleksandra Borysow, 1987) */ /* ==================================================================== */ /* PROGRAM PREPARED BY ALEKSANDRA BORYSOW (APRIL'1987) */ /* (UNIVERSITY OF TEXAS AT AUSTIN, PHYSICS DEPARTMENT) */ /* ORIGINAL VERSION: WRITTEN ON CYBER */ /* PROGRAM GENERATES N2-N2 COLLISION-INDUCED SPECTRA AT */ /* TEMPERATURES BETWEEN 50 TO 300 K. */ /* CIA SPECTRA MODELED AFTER PAPER (*) */ /* ALEKSANDRA BORYSOW AND LOTHAR FROMMHOLD, */ /* ASTROPHYSICAL JOURNAL, VOL. 311, PAGES 1043-1057, (1986) */ /* REVISED BY GLENN ORTON (1989) - TO WORK ON SUN WORKSTATIONS */ /* AND ON THE VAX MACHINES (FORTRAN-77) */ /* PASSES STANDARD TEST ON SUN, AT 200K (JULY 1992) */ /* ==================================================================== */ /* ALSO IN REVISION: DOUBLE PRECISION FOR ALL F.P. VARIABLES */ /* ==================================================================== */ /* HISTORY: */ /* 2001-02-28 THOMAS KUHN: */ /* CHANGE OF LINES */ /* RSILO(I)=DLOG(RSI(I)*1.E80) */ /* TO */ /* RSILO(I)=(DLOG(RSI(I))+80.0D0*DLOG(10.0D0)) */ /* BECAUSE OF OVERFLOW PROBLEMS. */ /* COSMETICS FOR THE CODE TO BE FASTER READABLE. */ /* CHANGE OF OUTPUT FILE NAME. */ /* CHANGE OF OUTPUT FILE CONTENT */ /* ==================================================================== */ /* TKS* IMPLICIT REAL*8 (A-H,O-Z) */ /* TKS INPUT/OUTPUT VARIABLES */ /* REAL T, F */ //ret_val = 0.; /* TEMP = TEMPERATURE IN KELVIN, SHOULD BE BETWEEN 50. AND 300. */ /* FNUMIN = LOWEST FREQUENCY IN CM-1, FOR LISTING OF ALPHA(FNU) */ /* FNUMAX = HIGHEST FREQUENCY IN CM-1, FOR LISTING OF ALPHA(FNU) */ /* LINE SHAPE MODELLING WILL BE MOST ACCURATE WITHIN RANGE OF */ /* R-T SPECTRAL INTENSITIES AS 1:100. */ /* DNU = FREQUENCY INCREMENT IN CM-1. DNU SHOULD BE CHOSEN SO */ /* THAT NOT MORE THAN 10 STEPS ARE NEEDED TO GO FROM */ /* FNUMIN TO FNUMAX (ELSE ARRAY DIMENSIONS OF FREQ,ABSCOEF */ /* MUST BE ADJUSTED IN ADDEM). */ /* USER: */ /* ----- */ /* EDIT ONLY HERE: TEMP (K), MIN. FREQ. (CM^-1)= FNUMIN, */ /* MAX. FREQ. = FNUMAX, STEP = DNU, SLITWIDTH (CM^-1)=SLIT */ /* (SLIT=4.3 IS EQUIVALENT TO THAT OF VOYAGER SPECTRA, ONLY BOUND BOUND */ /* SPECTRA ARE CONVOLUTED WITH THIS SLITWIDTH, THE FREE FREE SPECTRA */ /* ARE FAR TOO BROAD FOR THE SLITWIDTH FUNCTION TO MATTER, */ /* LEAVE LIKE = 1 (FOR LIKE PAIRS, AS N2-N2) */ /* THE PROGRAM WILL ASSUME EQUILIBRIUM N2, */ /* ALLOWED TEMPERATURE RANGE: 50-300K (DO NOT EXTEND IT BEYOND THESE LIMITS!) */ /* IF QUESTIONS: CONTACT ABORYSOW@NBI.DK */ /* TKS* NF=INT((FNUMAX-FNUMIN)/DNU+0.5)+1 */ /* TKS* IF (NF.GT.10) NF=10 */ /* TKS* FNUMAX=FNUMIN+FLOAT(NF-1)*DNU */ /* TKS INPUT TEMPERATURE (K) CHECK OF RANGE */ if (t < 50. || t > 300.) { ostringstream os; os << "out of T range ( 50<T<300)! return without calc.!" << "\n"; throw runtime_error(os.str()); goto L999; } temp = t; /* *********************** INPUT DATA FROM USER *********************** */ /* FNUMIN = MINIMUM FREQENCY [CM^-1] */ fnumin = f / 29979245800.; /* FNUMAX = MAXIMUM FREQENCY [CM^-1] */ fnumax = fnumin; /* ONLY ONE FREQUENCY PER CALL */ nf = 1; /* DEFAULT VALUE OF FREQUENCY STEP [CM^-1] */ dnu = 10.; /* DEFAULT VALUE */ like = 1; /* SLIT = SLITWIDTH [CM^-1] */ /* SLIT=4.3 IS EQUIVALENT TO THAT OF VOYAGER SPECTRA, ONLY BOUND BOUND */ /* SPECTRA ARE CONVOLUTED WITH THIS SLITWIDTH, THE FREE FREE SPECTRA */ /* ARE FAR TOO BROAD FOR THE SLITWIDTH FUNCTION TO MATTER. */ slit = 4.3; /* ******************************************************************** */ /* TKS* WRITE (6,14) LGAS,TEMP,FNUMIN,FNUMAX,DNU,NF-1 */ /* TKS*14 FORMAT(' ABSORPTION SPECTRA OF ',A5,' AT',F8.1,' K'/ */ /* TKS* $ 1X,43(1H=),/ */ /* TKS* 1' MIN.FREQ.=',F8.1,' CM-1',10X,'MAX.FREQ.=',F8.1,' CM-1',10X, */ /* TKS* 2'FREQ.INCREMENT=',F8.2,' CM-1',5X,'IN',I5,' STEPS'//) */ partsum_(&temp); /* THE N2-N2 SPECTRA FOR 50-300K */ /* ================================ */ x = log(temp); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { /* FREQ(I)=FNUMIN+FLOAT(I-1)*DNU */ freq[i__ - 1] = fnumin; alfatot[i__ - 1] = 0.; /* L10: */ abscoef[i__ - 1] = 0.; } /* ==================================================================== */ jj = 1; L442: /* L1023: */ ++jj; if (jj == 42) { goto L444; } goto L442; /* EB(JJ,IV) JJ-ROTATIONAL LEVEL "L", IV- VIBRATIONAL LEVEL "V"; */ L444: /* ==================================================================== */ /* QUADRUPOLAR INDUCTION: (50-300K) LAMBDA1,LAMBDA2,LAMBDA,L=2023&0223 */ /* ------------------------------------------------------------------- */ eps = 1e-5; tt[0] = 10.; bound32_(&temp, rsi, &nsol); ij = 0; rslow1 = 0.; s__1 = nsol; for (i__ = 1; i__ <= s__1; ++i__) { ++ij; /* MOD CAN BE ONLY 0 OR 1 OR 2 */ if (ij % 3 == 0) { rslow1 = 1.5e-60; } if (ij % 3 == 1) { rslow1 = 1.7e-60; } if (ij % 3 == 2) { rslow1 = 1.6e-60; } if (rsi[i__ - 1] < 1e-60) { rsi[i__ - 1] = rslow1; } /* TKS* RSILO(I)=DLOG(RSI(I)*1.D80) */ rsilo[i__ - 1] = log(rsi[i__ - 1]) + log(10.) * 80.; omeg[i__ - 1] = (double)(i__ - 1) * dx; /* L88: */ } /* L9991: */ spline_(&nsol, &cs__1, &cs__0, &eps, omeg, rsilo, tt, ss, &si, &nr, rsigg); ik1k0 = 1; ibound = 1; /* B-C LINESHAPE HERE */ /* THESE VALUES (S,T1,T2) REPLACE VALUES GIVEN IN PAPER (*): */ /* PUBLISHED IN AN ERRATUM, ASTROPHYSICAL JOURNAL, VOL.320, P.437 */ /* (1987) */ s = c_b24 * exp((c_b26 * x + c_b25) * x); t1 = c_b27 * exp((c_b29 * x + c_b28) * x); t2 = c_b30 * exp((c_b32 * x + c_b31) * x); e = 0.; t3 = 0.; t4 = 0.; addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &like, &cs__2, &cs__0, &cs__2, &cs__3); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { //quad[i__ - 1] = abscoef[i__ - 1]; /* L20: */ alfatot[i__ - 1] = abscoef[i__ - 1] + alfatot[i__ - 1]; } /* ==================================================================== */ /* HEXADECAPOLE COMPONENTS: LAMBDA1,LAMBDA2,LAMBDA,L=4045&0445 */ /* ----------------------------------------------------------- */ bound54_(&temp, rsi, &nsol); ij = 0; s__1 = nsol; for (i__ = 1; i__ <= s__1; ++i__) { ++ij; /* MOD CAN BE ONLY 0 OR 1 OR 2 */ if (ij % 3 == 0) { rslow1 = 1.5e-60; } if (ij % 3 == 1) { rslow1 = 1.7e-60; } if (ij % 3 == 2) { rslow1 = 1.6e-60; } if (rsi[i__ - 1] < 1e-60) { rsi[i__ - 1] = rslow1; } /* TKS RSILO(I)=DLOG(RSI(I)*1.E80) */ rsilo[i__ - 1] = log(rsi[i__ - 1]) + log(10.) * 80.; /* L111: */ omeg[i__ - 1] = (double)(i__ - 1) * dx; } spline_(&nsol, &cs__1, &cs__0, &eps, omeg, rsilo, tt, ss, &si, &nr, rsigg); /* --------------------------- */ /* TEMPERATURES 50-140K */ /* --------------------------- */ if (temp >= 140.) { goto L333; } s = c_b43 * exp((c_b45 * x + c_b44) * x); e = c_b46 * exp((c_b47 * x + c_b47) * x); t1 = c_b49 * exp((c_b51 * x + c_b50) * x); t2 = c_b52 * exp((c_b54 * x + c_b53) * x); t3 = c_b55 * exp((c_b57 * x + c_b56) * x); t4 = c_b58 * exp((c_b60 * x + c_b59) * x); ik1k0 = 0; ibound = 1; addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &like, &cs__4, &cs__0, &cs__4, &cs__5); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { //hexa[i__ - 1] = abscoef[i__ - 1]; /* s_wsle(&io___25); do_lio(&c__9, &c__1, " T=50-140K: HEXA(", (ftnlen)17); do_lio(&c__2, &c__1, (char *)&i__, (ftnlen)sizeof(int)); do_lio(&c__9, &c__1, ") =", (ftnlen)3); do_lio(&c__5, &c__1, (char *)&abscoef[i__ - 1], (ftnlen)sizeof( double)); e_wsle(); */ /* L50: */ alfatot[i__ - 1] += abscoef[i__ - 1]; } goto L334; /* --------------------------- */ /* TEMPERATURES 140-300K */ /* --------------------------- */ L333: ik1k0 = 0; ibound = 1; s = c_b78 * exp((c_b80 * x + c_b79) * x); e = c_b46 * exp((c_b47 * x + c_b47) * x); t1 = c_b84 * exp((c_b86 * x + c_b85) * x); t2 = c_b87 * exp((c_b89 * x + c_b88) * x); t3 = c_b90 * exp((c_b92 * x + c_b91) * x); t4 = c_b93 * exp((c_b95 * x + c_b94) * x); addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &like, &cs__4, &cs__0, &cs__4, &cs__5); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { //hexa[i__ - 1] = abscoef[i__ - 1]; /* s_wsle(&io___26); do_lio(&c__9, &c__1, " T=140-300K: HEXA(", (ftnlen)18); do_lio(&c__2, &c__1, (char *)&i__, (ftnlen)sizeof(int)); do_lio(&c__9, &c__1, ") =", (ftnlen)3); do_lio(&c__5, &c__1, (char *)&abscoef[i__ - 1], (ftnlen)sizeof( double)); e_wsle(); */ /* L550: */ alfatot[i__ - 1] += abscoef[i__ - 1]; } /* ==================================================================== */ /* DOUBLE TRANSITIONS: LAMBDA1,LAMBDA2,LAMBDA,L=2,2,3,3 */ /* ---------------------------------------------------- */ /* --------------------------- */ /* TEMPERATURES 50-300K */ /* --------------------------- */ L334: ik1k0 = 1; ibound = 0; /* X S=Y(X,1.19261D-58, -3.78587,0.34024) */ s = c_b112 * exp((c_b114 * x + c_b113) * x); t1 = c_b115 * exp((c_b117 * x + c_b116) * x); t2 = c_b118 * exp((c_b120 * x + c_b119) * x); t3 = 0.; t4 = 0.; addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &like, &cs__2, &cs__2, &cs__3, &cs__3); s__1 = nf; for (i__ = 1; i__ <= s__1; ++i__) { //dtrans[i__ - 1] = abscoef[i__ - 1]; /* L650: */ alfatot[i__ - 1] += abscoef[i__ - 1]; } /* ==================================================================== */ /* ANISOTROPIC OVERLAP NEGLECTED (LAMBDA1,LAMBDA2,LAMBDA,L=0212) */ /* SINCE THIS TERM IS EXTREMELY SMALL */ /* ==================================================================== */ /* TKS* PRINT 154, FREQ(1),FREQ(NF),FREQ(2)-FREQ(1),TEMP */ /* TKS* PRINT 156, (ALFATOT(I),I=1,NF) */ /* TKS*154 FORMAT(///' ABSORPTION COEFFICIENT ALPHA(FNU), FROM ',F5.1, */ /* TKS* $' CM-1 TO',F7.1,' CM-1, AT',F6.2,' CM-1 INCREMENTS, AT T=', */ /* TKS* $F7.2,' K, IN UNITS OF CM-1 AMAGAT-2'/) */ /* TKS*156 FORMAT(' ',10D13.5) */ /* TKS* OPEN(UNIT=10, FILE='OUT', STATUS='UNKNOWN') */ /* TKS* WRITE(10, 2929) (FREQ(I), ALFATOT(I), I=1, NF) */ /* TKS*C WRITE(10, 2929) (FREQ(I), QUAD(I), HEXA(I) ALFATOT(I), I=1, NF) */ /* TKS*2929 FORMAT(F10.3, E12.4) */ /* TKS* STOP */ /* TKS FILL OUTPUT VARIABLE */ // tksabs[0] = quad[0]; // tksabs[1] = hexa[0]; // tksabs[2] = dtrans[0]; // tksabs[3] = alfatot[0]; ret_val = alfatot[0]; /* TKS print*,'QUAD(1),HEXA(1),DTRANS(1)=',QUAD(1),HEXA(1),DTRANS(1) */ L999: return ret_val; } /* n2n2tks_ */ #undef temp #undef fnumin #undef fnumax #undef dnu #undef slit #undef dx #undef rsilo #undef omeg #undef rsi #undef rsigg #undef nsol #undef like #undef ik1k0 #undef ibound #define wnrmax3 (app3a_1.wnrmax3) #define rsilo (rsilo_1.rsilo) #define omeg (bba_2.omeg) #define rsigg (bba_2.rsigg) #define beta (bba_2.beta) #define nsol (bbc_1.nsol) #define ibound (bbb_1.ibound) #define q1 (n2part_1.q1) #define wn2 (n2part_1.wn2) #define b01 (n2part_1.b01) #define d01 (n2part_1.d01) #define jrange2 (n2part_1.jrange2) /* ########################################################################## */ /* Subroutine */ int addspec_(double *g0, double *ep, double *tau1, double *tau2, double *tau5, double *tau6, double *temp, int *nf, double *freq, double *abscoef, int * /* mp */, int *like, int *lambda1, int *lambda2, int *lambda, int * /* lvalue */) { /* Initialized data */ static double closchm = 2.68675484e19; static double boltzwn = .6950304; static double hbar = 1.054588757e-27; static double pi = 3.1415926535898; static double clight = 2.997925e10; /* Format strings */ /* static char fmt_20[] = "(/\002 LAMBDA1,LAMBDA2, LAMBDA,LVALUE=\002,2i3,2" "x,2i3,\002 COMPONENT.\002/15x,\002LINE SHAPE PARAMETERS:\002,6d1" "2.3,5x,\002G(0)=\002,d12.3/)"; */ /* System generated locals */ int s__1, s__2, s__3, s__4, s__5, s__6; double d__1, d__2; /* Builtin functions */ /* integer s_wsfe(cilist *), do_fio(integer *, char *, ftnlen), e_wsfe(void), s_wsle(cilist *), do_lio(integer *, integer *, char *, ftnlen), e_wsle(void); */ /* Local variables */ int list, jsum = 0; extern double bgama_( double *, double *, double *, double *, double *, double *, double *); int i__, j; double calib, p; int i1, j1, i2, j2; double p1, p2, omega1, omega2; int ip, jp, iq; double twopic; int jplusl, ip1, jp1, ip2, jp2; double fac, cgs, xbg, wkf, frq, wki; extern double specfct_( double *, double *, double *, double *, int *, d
20196  //
20197  // valid atmospheric condition:
20198  // temperature : 233 to 323 K
20199  // relative humidity: 1 to 100 %
20200  //
20201  for (Index s = 0; s < f_grid.nelem(); ++s) {
20202  if (f_grid[s] > 1e12) {
20203  ostringstream os;
20204  os << "Ice cloud absorption model MPM93 only valid at\n"
20205  "frequencies up to 1THz. Yours are above.";
20206  throw runtime_error(os.str());
20207  }
20208  }
20209 
20210  const int Nparam = 3;
20211  if ((model == "user") &&
20212  (parameters.nelem() == Nparam)) // ---------------------
20213  {
20214  MPM93IceCrystalAbs(pxsec,
20215  parameters[0], // scaling factror
20216  parameters[1], // scaling factror
20217  parameters[2], // scaling factror
20218  model, // model option
20219  f_grid,
20220  abs_p,
20221  abs_t,
20222  vmr,
20223  verbosity);
20224  } else if ((model == "user") &&
20225  (parameters.nelem() != Nparam)) // ----------------
20226  {
20227  ostringstream os;
20228  os << "MPM93 ice water cloud absorption model " << name << " requires \n"
20229  << Nparam << " input parameter for the model " << model << ",\n"
20230  << "but you specified " << parameters.nelem() << " parameters.\n";
20231  throw runtime_error(os.str());
20232  } else if ((model != "user") &&
20233  (parameters.nelem() == 0)) // --------------------
20234  {
20235  MPM93IceCrystalAbs(pxsec,
20236  0.000, // scaling factror
20237  0.000, // scaling factror
20238  0.000, // scaling factror
20239  model, // model option
20240  f_grid,
20241  abs_p,
20242  abs_t,
20243  vmr,
20244  verbosity);
20245  } else if ((model != "user") &&
20246  (parameters.nelem() != 0)) // --------------------
20247  {
20248  ostringstream os;
20249  os << "ERROR: MPM93 ice water cloud absorption model " << name
20250  << " requires NO input\n"
20251  << "parameters for the model " << model << ",\n"
20252  << "but you specified " << parameters.nelem() << " parameters.\n"
20253  << "This ambiguity can not be solved by arts.\n"
20254  << "Please see the arts user guide chapter 4.\n";
20255  throw runtime_error(os.str());
20256  }
20257  }
20258 
20259  // ============= rain extinction from MPM93 ===========================================
20260  else if ("rain-MPM93" == name) {
20261  // Rain extinction parameterization from MPM93 model, described in
20262  // H. J. Liebe,
20263  // "MPM - An Atmospheric Millimeter-Wave Propagation Model",
20264  // Int. J. Infrared and Millimeter Waves, vol. 10(6),
20265  // pp. 631-650, 1989
20266  // and based on
20267  // Olsen, R.L., D.V. Rogers, and D. B. Hodge, "The aR^b relation in the
20268  // calculation of rain attenuation", IEEE Trans. Antennas Propagat.,
20269  // vol. AP-26, pp. 318-329, 1978.
20270  //
20271  // specific continuum parameters and units:
20272  // OUTPUT
20273  // pxsec : [1/m],
20274  // INPUT
20275  // parameters[0] : [1]
20276  // parameters[1] : [1]
20277  // parameters[2] : [1]
20278  // model : [1]
20279  // f_grid : [Hz]
20280  // abs_p : [Pa]
20281  // abs_t : [K]
20282  // vmr : [kg/m2/s]
20283  //
20284  // rain parameters:
20285  // rain rate range: 0-150 mm/h (=0-0.42 kg/m2/s)
20286  //
20287  // valid atmospheric condition:
20288  // temperature : (preferably above 273 K...)
20289  //
20290  for (Index s = 0; s < f_grid.nelem(); ++s) {
20291  if (f_grid[s] > 1e12) {
20292  ostringstream os;
20293  os << "Rain absorption model MPM93 only valid at\n"
20294  "frequencies up to 1THz. Yours is above.";
20295  throw runtime_error(os.str());
20296  }
20297  }
20298  const int Nparam = 3;
20299  if ((model == "user") &&
20300  (parameters.nelem() == Nparam)) // -------------------------
20301  {
20302  out3 << "MPM93 rain extinction model " << name << " is running with \n"
20303  << "user defined parameters according to model " << model << ".\n";
20304  MPM93RainExt(pxsec,
20305  parameters[0], // scaling factor
20306  parameters[1], // scaling factor
20307  parameters[2], // scaling factor
20308  model, // model option
20309  f_grid,
20310  abs_p,
20311  abs_t,
20312  vmr,
20313  verbosity);
20314  } else if ((model == "user") &&
20315  (parameters.nelem() != Nparam)) // --------------------
20316  {
20317  ostringstream os;
20318  os << "MPM93 rain extinction model " << name << " requires \n"
20319  << Nparam << " input parameter for the model " << model << ",\n"
20320  << "but you specified " << parameters.nelem() << " parameters.\n";
20321  throw runtime_error(os.str());
20322  } else if ((model != "user") &&
20323  (parameters.nelem() == 0)) // --------------------
20324  {
20325  out3 << "MPM93 rain extinction model " << name << " running with \n"
20326  << "the parameter for model " << model << ".\n";
20327  MPM93RainExt(pxsec,
20328  0.000, // scaling factor
20329  0.000, // scaling factor
20330  0.000, // scaling factor
20331  model, // model option
20332  f_grid,
20333  abs_p,
20334  abs_t,
20335  vmr,
20336  verbosity);
20337  } else if ((model != "user") &&
20338  (parameters.nelem() != 0)) // --------------------
20339  {
20340  ostringstream os;
20341  os << "ERROR: MPM93 rain extinction model " << name
20342  << " requires NO input\n"
20343  << "parameters for the model " << model << ",\n"
20344  << "but you specified " << parameters.nelem() << " parameters.\n"
20345  << "This ambiguity can not be solved by arts.\n"
20346  << "Please see the arts user guide chapter 4.\n";
20347  throw runtime_error(os.str());
20348  }
20349  } else // -----------------------------------------------------------------------
20350  {
20351  // none of the continuum or full model tags were selected -> error message.
20352  ostringstream os;
20353  os << "ERROR: Continuum/ full model tag `" << name
20354  << "' not yet implemented in arts!";
20355  throw runtime_error(os.str());
20356  }
20357 
20358  // We have to divide the result from the internal continuum model by
20359  // the number density n to convert it from pseudo cross section to a
20360  // true cross section.
20361 
20362  // Boltzmann constant
20363  extern const Numeric BOLTZMAN_CONST;
20364 
20365  // Loop all pressures:
20366  for (Index i = 0; i < abs_p.nelem(); ++i) {
20367  const Numeric p_i = abs_p[i];
20368  const Numeric t_i = abs_t[i];
20369 
20370  // Calculate total number density from pressure and temperature.
20371  // n = n0*T0/p0 * p/T or n = p/kB/t, ideal gas law
20372  const Numeric n = p_i / BOLTZMAN_CONST / t_i;
20373 
20374  // We add to the output variable xsec here, previous content is
20375  // not overwritten!
20376  pxsec(joker, i) /= n;
20377  xsec(joker, i) += pxsec(joker, i);
20378  }
20379 }
20380 
20381 // #################################################################################
20382 
20406 void check_continuum_model(const String &name) {
20407  // The species lookup data:
20409 
20410  // For the list of valid continuum models:
20411  ArrayOfString valid_models;
20412 
20413  bool found = false;
20414 
20415  // Loop all species:
20417  i < species_data.end();
20418  ++i) {
20419  String specnam = i->Name();
20420 
20421  // Loop all isotopologues:
20423  i->Isotopologue().begin();
20424  j < i->Isotopologue().end();
20425  ++j) {
20426  String isonam = j->Name();
20427 
20428  // The specified name consists of a species part and an
20429  // isotopologue part, e.g., H2O-ContStandardSelf. We need to
20430  // construct a similar String from the species lookup data
20431  // by concatenating species name and isotopologue name.
20432 
20433  String fullnam = specnam + "-" + isonam;
20434  // cout << fullnam << "\n";
20435 
20436  // See if this is a continuum tag, so that we can add it to
20437  // the list:
20438  if (j->isContinuum()) {
20439  valid_models.push_back(fullnam);
20440  }
20441 
20442  if (name == fullnam) {
20443  found = true;
20444  }
20445  }
20446  }
20447 
20448  // ----------------------------------------------------------------------
20449  // Have we found it?
20450  if (!found) {
20451  ostringstream os;
20452  os << "The String `" << name << "' matches none of the known\n"
20453  << "continuum models. Known continuum models are:";
20454  for (ArrayOfString::const_iterator i = valid_models.begin();
20455  i < valid_models.end();
20456  ++i) {
20457  os << "\n" << *i;
20458  }
20459  throw runtime_error(os.str());
20460  }
20461 }
20462 //
20463 //
20464 // #################################################################################
20465 // ############################# f2c code implementation ###########################
20466 // #################################################################################
20467 //
20468 //
20469 // ------------------- begin of f2c.h file --------------------------------
20470 //
20471 /* f2c.h -- Standard Fortran to C header file */
20472 #ifndef F2C_INCLUDE
20473 #define F2C_INCLUDE
20474 
20475 typedef long int integer;
20476 typedef unsigned long int uinteger;
20477 typedef char *address;
20478 typedef short int shortint;
20479 typedef float real_t;
20480 typedef double doublereal;
20481 typedef struct {
20482  real_t r, i;
20483 } complex_t;
20484 typedef struct {
20485  doublereal r, i;
20486 } doublecomplex;
20487 typedef long int logical;
20488 typedef short int shortlogical;
20489 typedef char logical1;
20490 typedef char integer1;
20491 #ifdef INTEGER_STAR_8 /* Adjust for integer*8. */
20492 typedef long long longint; /* system-dependent */
20493 typedef unsigned long long ulongint; /* system-dependent */
20494 #define qbit_clear(a, b) ((a) & ~((ulongint)1 << (b)))
20495 #define qbit_set(a, b) ((a) | ((ulongint)1 << (b)))
20496 #endif
20497 
20498 #define TRUE_ (1)
20499 #define FALSE_ (0)
20500 
20501 /* Extern is for use with -E */
20502 #ifndef Extern
20503 #define Extern extern
20504 #endif
20505 
20506 /* I/O stuff */
20507 
20508 #ifdef f2c_i2
20509 /* for -i2 */
20510 typedef short flag;
20511 typedef short ftnlen;
20512 typedef short ftnint;
20513 #else
20514 typedef long int flag;
20515 typedef long int ftnlen;
20516 typedef long int ftnint;
20517 #endif
20518 
20519 /*external read, write*/
20520 typedef struct {
20521  flag cierr;
20522  ftnint ciunit;
20523  flag ciend;
20524  char *cifmt;
20525  ftnint cirec;
20526 } cilist;
20527 
20528 /*internal read, write*/
20529 typedef struct {
20530  flag icierr;
20531  char *iciunit;
20532  flag iciend;
20533  char *icifmt;
20534  ftnint icirlen;
20535  ftnint icirnum;
20536 } icilist;
20537 
20538 /*open*/
20539 typedef struct {
20540  flag oerr;
20541  ftnint ounit;
20542  char *ofnm;
20543  ftnlen ofnmlen;
20544  char *osta;
20545  char *oacc;
20546  char *ofm;
20547  ftnint orl;
20548  char *oblnk;
20549 } olist;
20550 
20551 /*close*/
20552 typedef struct {
20553  flag cerr;
20554  ftnint cunit;
20555  char *csta;
20556 } cllist;
20557 
20558 /*rewind, backspace, endfile*/
20559 typedef struct {
20560  flag aerr;
20561  ftnint aunit;
20562 } alist;
20563 
20564 /* inquire */
20565 typedef struct {
20566  flag inerr;
20567  ftnint inunit;
20568  char *infile;
20569  ftnlen infilen;
20570  ftnint *inex; /*parameters in standard's order*/
20571  ftnint *inopen;
20572  ftnint *innum;
20573  ftnint *innamed;
20574  char *inname;
20575  ftnlen innamlen;
20576  char *inacc;
20577  ftnlen inacclen;
20578  char *inseq;
20579  ftnlen inseqlen;
20580  char *indir;
20581  ftnlen indirlen;
20582  char *infmt;
20583  ftnlen infmtlen;
20584  char *inform;
20585  ftnint informlen;
20586  char *inunf;
20587  ftnlen inunflen;
20588  ftnint *inrecl;
20589  ftnint *innrec;
20590  char *inblank;
20591  ftnlen inblanklen;
20592 } inlist;
20593 
20594 #define VOID void
20595 
20596 union Multitype { /* for multiple entry points */
20597  integer1 g;
20598  shortint h;
20599  integer i;
20600  /* longint j; */
20601  real_t r;
20602  doublereal d;
20605 };
20606 
20607 typedef union Multitype Multitype;
20608 
20609 /*typedef long int Long;*/ /* No longer used; formerly in Namelist */
20610 
20611 struct Vardesc { /* for Namelist */
20612  char *name;
20613  char *addr;
20614  ftnlen *dims;
20615  int type;
20616 };
20617 typedef struct Vardesc Vardesc;
20618 
20619 struct Namelist {
20620  char *name;
20622  int nvars;
20623 };
20624 typedef struct Namelist Namelist;
20625 
20626 #define abs(x) ((x) >= 0 ? (x) : -(x))
20627 #define dabs(x) (doublereal) abs(x)
20628 #define min(a, b) ((a) <= (b) ? (a) : (b))
20629 #define max(a, b) ((a) >= (b) ? (a) : (b))
20630 #define dmin(a, b) (doublereal) min(a, b)
20631 #define dmax(a, b) (doublereal) max(a, b)
20632 #define bit_test(a, b) ((a) >> (b)&1)
20633 #define bit_clear(a, b) ((a) & ~((uinteger)1 << (b)))
20634 #define bit_set(a, b) ((a) | ((uinteger)1 << (b)))
20635 
20636 /* procedure parameter types for -A and -C++ */
20637 
20638 #define F2C_proc_par_types 1
20639 #ifdef __cplusplus
20640 typedef int /* Unknown procedure type */ (*U_fp)(...);
20641 typedef shortint (*J_fp)(...);
20642 typedef integer (*I_fp)(...);
20643 typedef real_t (*R_fp)(...);
20644 typedef doublereal (*D_fp)(...), (*E_fp)(...);
20645 typedef /* Complex */ VOID (*C_fp)(...);
20646 typedef /* Double Complex */ VOID (*Z_fp)(...);
20647 typedef logical (*L_fp)(...);
20648 typedef shortlogical (*K_fp)(...);
20649 typedef /* Character */ VOID (*H_fp)(...);
20650 typedef /* Subroutine */ int (*S_fp)(...);
20651 #else
20652 typedef int /* Unknown procedure type */ (*U_fp)();
20653 typedef shortint (*J_fp)();
20654 typedef integer (*I_fp)();
20655 typedef real_t (*R_fp)();
20656 typedef doublereal (*D_fp)(), (*E_fp)();
20657 typedef /* Complex */ VOID (*C_fp)();
20658 typedef /* Double Complex */ VOID (*Z_fp)();
20659 typedef logical (*L_fp)();
20660 typedef shortlogical (*K_fp)();
20661 typedef /* Character */ VOID (*H_fp)();
20662 typedef /* Subroutine */ int (*S_fp)();
20663 #endif
20664 /* E_fp is for real functions when -R is not specified */
20665 typedef VOID C_f; /* complex function */
20666 typedef VOID H_f; /* character function */
20667 typedef VOID Z_f; /* double complex function */
20668 typedef doublereal E_f; /* real function with -R not specified */
20669 
20670 /* undef any lower-case symbols that your C compiler predefines, e.g.: */
20671 
20672 #ifndef Skip_f2c_Undefs
20673 #undef cray
20674 #undef gcos
20675 #undef mc68010
20676 #undef mc68020
20677 #undef mips
20678 #undef pdp11
20679 #undef sgi
20680 #undef sparc
20681 #undef sun
20682 #undef sun2
20683 #undef sun3
20684 #undef sun4
20685 #undef u370
20686 #undef u3b
20687 #undef u3b2
20688 #undef u3b5
20689 #undef unix
20690 #undef vax
20691 #endif
20692 #endif
20693 
20694 // ------------------- end of f2c.h file --------------------------------
20695 
20696 // ------------------ begin of Borysow N2N2 F77 code --------------------
20697 
20698 /* n2n2tks.f -- translated by f2c (version 20010821).
20699  You must link the resulting object file with the libraries:
20700  -lf2c -lm (in that order)
20701 */
20702 
20703 /* Common Block Declarations */
20704 
20705 struct s_blockin_ {
20706  double temp, fnumin, fnumax, dnu;
20707 } blockin_;
20708 
20709 #define blockin_1 blockin_
20710 
20711 struct s_app3a_ {
20712  double slit, dx, wnrmax3;
20713 } app3a_;
20714 
20715 #define app3a_1 app3a_
20716 
20717 struct s_app3b_ {
20718  int nsri, ns, nsriup;
20719 } app3b_;
20720 
20721 #define app3b_1 app3b_
20722 
20723 struct s_rsilo_ {
20724  double rsilo[201];
20725 } rsilo_;
20726 
20727 #define rsilo_1 rsilo_
20728 
20729 struct s_bou43_ {
20730  int initb;
20731 } bou43_;
20732 
20733 #define bou43_1 bou43_
20734 
20735 union u_bba_ {
20736  struct s_m_1 {
20737  double omeg[201], rsi[201], rsigg[201], alfa;
20738  } m_1;
20739  struct s_m_2 {
20740  double omeg[201], rsi[201], rsigg[201], beta;
20741  } m_2;
20742 } bba_;
20743 
20744 #define bba_1 (bba_.m_1)
20745 #define bba_2 (bba_.m_2)
20746 
20747 struct s_bbc_ {
20748  int nsol;
20749 } bbc_;
20750 
20751 #define bbc_1 bbc_
20752 
20753 struct s_bf_ {
20754  double g0bf, delbf, om0;
20755 } bf_;
20756 
20757 #define bf_1 bf_
20758 
20759 struct like_1_ {
20760  int like;
20761  char lgas[5];
20762 };
20763 
20764 #define like_1 (*(struct like_1_ *)&like_)
20765 
20766 struct s_k1k0_ {
20767  int ik1k0;
20768 } k1k0_;
20769 
20770 #define k1k0_1 k1k0_
20771 
20772 struct s_bbb_ {
20773  int ibound;
20774 } bbb_;
20775 
20776 #define bbb_1 bbb_
20777 
20778 struct energ_1_ {
20779  double eb[246] /* was [41][6] */;
20780  int niv[6];
20781 };
20782 
20783 #define energ_1 (*(struct energ_1_ *)&energ_)
20784 
20785 struct s_dimer_ {
20786  int nlines;
20787 } dimer_;
20788 
20789 #define dimer_1 dimer_
20790 
20791 struct n2part_1_ {
20792  double q1, wn2[2], b01, d01;
20793  int jrange2;
20794 };
20795 struct n2part_2_ {
20796  double q, wn2[2], b0, d0;
20797  int jrange1;
20798 };
20799 
20800 #define n2part_1 (*(struct n2part_1_ *)&n2part_)
20801 #define n2part_2 (*(struct n2part_2_ *)&n2part_)
20802 
20803 union u_bl3_ {
20804  struct s_m_1 {
20805  double rsi[401];
20806  } m_1;
20807  struct s_m_2 {
20808  double rsibb[401];
20809  } m_2;
20810 } bl3_;
20811 
20812 #define bl3_1 (bl3_.m_1)
20813 #define bl3_2 (bl3_.m_2)
20814 
20815 union u_bbbb_ {
20816  struct s_m_1 {
20817  int idelv, iv, ivp, idell, il, ilp;
20818  } m_1;
20819  struct s_m_2 {
20821  } m_2;
20822 } bbbb_;
20823 
20824 #define bbbb_1 (bbbb_.m_1)
20825 #define bbbb_2 (bbbb_.m_2)
20826 
20827 /* Initialized data */
20828 
20829 struct s_energe_ {
20830  double e_1[246];
20831  int e_2[6];
20832 } energ_ = {{-54.99996, -54.86228, -54.58697, -54.17413, -53.62391, -52.93648,
20833  -52.11211, -51.15108, -50.05374, -48.82049, -47.45179, -45.94815,
20834  -44.31014, -42.53841, -40.63365, -38.59665, -36.42824, -34.12937,
20835  -31.70105, -29.14439, -26.46061, -23.65103, -20.71709, -17.66041,
20836  -14.48271, -11.18593, -7.77221, -4.24393, -.60374, 3.14531,
20837  6.99978, 10.95566, 15.00818, 19.15136, 23.37787, 27.67681,
20838  32.03237, 36.42278, 40.83668, 45.29436, 49.79246, -31.89437,
20839  -31.77215, -31.52779, -31.16143, -30.67334, -30.06382, -29.33328,
20840  -28.48222, -27.51123, -26.42099, -25.21229, -23.88603, -22.44322,
20841  -20.88502, -19.21272, -17.42777, -15.53182, -13.52669, -11.41446,
20842  -9.1975, -6.87848, -4.46049, -1.94714, .65736, 3.34788,
20843  6.11816, 8.95978, 11.8613, 14.80383, 17.75924, 20.71774,
20844  23.71589, 0., 0., 0., 0., 0.,
20845  0., 0., 0., 0., -16.05019, -15.9464,
20846  -15.73896, -15.42815, -15.0144, -14.4983, -13.88057, -13.16213,
20847  -12.34407, -11.42771, -10.41455, -9.30639, -8.10531, -6.81376,
20848  -5.43459, -3.97121, -2.42768, -.80899, .87859, 2.62689,
20849  4.42334, 6.24733, 8.06983, 9.90464, 0., 0.,
20850  0., 0., 0., 0., 0., 0.,
20851  0., 0., 0., 0., 0., 0.,
20852  0., 0., 0., -6.49343, -6.41131, -6.24732,
20853  -6.00202, -5.67623, -5.27111, -4.78813, -4.22919, -3.59665,
20854  -2.89345, -2.12325, -1.29074, -.40202, .5345, 1.50455,
20855  2.48212, 3.46665, 0., 0., 0., 0.,
20856  0., 0., 0., 0., 0., 0.,
20857  0., 0., 0., 0., 0., 0.,
20858  0., 0., 0., 0., 0., 0.,
20859  0., 0., -1.76583, -1.70887, -1.59552, -1.427,
20860  -1.20523, -.93302, -.61434, -.25504, .13641, 0.,
20861  0., 0., 0., 0., 0., 0.,
20862  0., 0., 0., 0., 0., 0.,
20863  0., 0., 0., 0., 0., 0.,
20864  0., 0., 0., 0., 0., 0.,
20865  0., 0., 0., 0., 0., 0.,
20866  0., -.17133, -.14341, 0., 0., 0.,
20867  0., 0., 0., 0., 0., 0.,
20868  0., 0., 0., 0., 0., 0.,
20869  0., 0., 0., 0., 0., 0.,
20870  0., 0., 0., 0., 0., 0.,
20871  0., 0., 0., 0., 0., 0.,
20872  0., 0., 0., 0., 0., 0.},
20873  {41, 32, 24, 17, 9, 2}};
20874 
20875 struct s_n2part_ {
20876  double fill_1[1];
20877  double e_2[4];
20878  int fill_3[1];
20879 } n2part_ = {{0}, {2., 1., 1.98957, 5.8e-6}, {0}};
20880 
20881 struct s_like_ {
20882  int fill_1[1];
20883  char e_2[5];
20884 } like_ = {{0}, "N2N2"};
20885 
20886 /* Table of constant values */
20887 
20888 // FIXME static integer c__9 = 9;
20889 // FIXME static integer c__1 = 1;
20890 // FIXME static integer c__5 = 5;
20891 static int cs__1 = 1;
20892 static int cs__0 = 0;
20893 static double c_b24 = 2.9723;
20894 static double c_b25 = -.99569;
20895 static double c_b26 = .09464;
20896 static double c_b27 = 1.2962e-12;
20897 static double c_b28 = -.13048;
20898 static double c_b29 = -.03128;
20899 static double c_b30 = 3.7969e-14;
20900 static double c_b31 = 1.03681;
20901 static double c_b32 = -.14336;
20902 static int cs__2 = 2;
20903 static int cs__3 = 3;
20904 static double c_b43 = .180926;
20905 static double c_b44 = -1.69153;
20906 static double c_b45 = .18605;
20907 static double c_b46 = .3;
20908 static double c_b47 = 0.;
20909 static double c_b49 = 6.6017e-16;
20910 static double c_b50 = 2.59982;
20911 static double c_b51 = -.31831;
20912 static double c_b52 = 1.2481e-12;
20913 static double c_b53 = -.57028;
20914 static double c_b54 = .05983;
20915 static double c_b55 = 5.2681e-13;
20916 static double c_b56 = -.24719;
20917 static double c_b57 = .00519;
20918 static double c_b58 = 2.7518e15;
20919 static double c_b59 = -25.38969;
20920 static double c_b60 = 2.46542;
20921 static int cs__4 = 4;
20922 static int cs__5 = 5;
20923 // FIXME static integer c__2 = 2;
20924 static double c_b78 = .0825299;
20925 static double c_b79 = -1.25562;
20926 static double c_b80 = .12981;
20927 static double c_b84 = 3.6611e-15;
20928 static double c_b85 = 1.47688;
20929 static double c_b86 = -.16537;
20930 static double c_b87 = 6.1264e-10;
20931 static double c_b88 = -2.25011;
20932 static double c_b89 = .15289;
20933 static double c_b90 = 7.982e-10;
20934 static double c_b91 = -2.76152;
20935 static double c_b92 = .21847;
20936 static double c_b93 = 5.2868e-22;
20937 static double c_b94 = 7.66253;
20938 static double c_b95 = -.77527;
20939 static double c_b112 = 119.261;
20940 static double c_b113 = -3.78587;
20941 static double c_b114 = .34024;
20942 static double c_b115 = 9.3777e-12;
20943 static double c_b116 = -.66548;
20944 static double c_b117 = .0033;
20945 static double c_b118 = 3.0395e-13;
20946 static double c_b119 = .24728;
20947 static double c_b120 = -.06607;
20948 static double c_b183 = 1e-6;
20949 static double c_b186 = 1.5;
20950 
20951 #define temp (blockin_1.temp)
20952 #define fnumin (blockin_1.fnumin)
20953 #define fnumax (blockin_1.fnumax)
20954 #define dnu (blockin_1.dnu)
20955 #define slit (app3a_1.slit)
20956 #define dx (app3a_1.dx)
20957 #define rsilo (rsilo_1.rsilo)
20958 #define omeg (bba_1.omeg)
20959 #define rsi (bba_1.rsi)
20960 #define rsigg (bba_1.rsigg)
20961 #define nsol (bbc_1.nsol)
20962 #define like (like_1.like)
20963 #define ik1k0 (k1k0_1.ik1k0)
20964 #define ibound (bbb_1.ibound)
20965 
20966 /* TKS ****** SUBROUTINE N2N2TKS(T, F) ***************************************/
20967 Numeric n2n2tks_(double t, double f) {
20968  /* System generated locals */
20969  int s__1;
20970  double ret_val;
20971 
20972  /* Local variables */
20973  //double hexa[10], quad[10];
20974  double freq[10], e;
20975  int i__;
20976  double s, x, t1, t2, t3, t4;
20977  int ij, nf, jj;
20978  double rslow1, si;
20979  int nr;
20980  double ss[1], tt[2];
20981  extern /* Subroutine */ int bound32_(double *, double *, int *),
20982  bound54_(double *, double *, int *);
20983  //double tksabs[5];
20984  extern /* Subroutine */ int spline_(int *,
20985  int *,
20986  int *,
20987  double *,
20988  double *,
20989  double *,
20990  double *,
20991  double *,
20992  double *,
20993  int *,
20994  double *);
20995  double abscoef[10];
20996  //double dtrans[10];
20997  extern /* Subroutine */ int addspec_(double *,
20998  double *,
20999  double *,
21000  double *,
21001  double *,
21002  double *,
21003  double *,
21004  int *,
21005  double *,
21006  double *,
21007  int *,
21008  int *,
21009  int *,
21010  int *,
21011  int *,
21012  int *);
21013  double eps, alfatot[10];
21014  extern /* Subroutine */ int partsum_(double *);
21015 
21016  /* ========================================= */
21017  /* Copyright (C) Aleksandra Borysow, 1987) */
21018  /* ==================================================================== */
21019  /* PROGRAM PREPARED BY ALEKSANDRA BORYSOW (APRIL'1987) */
21020  /* (UNIVERSITY OF TEXAS AT AUSTIN, PHYSICS DEPARTMENT) */
21021  /* ORIGINAL VERSION: WRITTEN ON CYBER */
21022 
21023  /* PROGRAM GENERATES N2-N2 COLLISION-INDUCED SPECTRA AT */
21024  /* TEMPERATURES BETWEEN 50 TO 300 K. */
21025  /* CIA SPECTRA MODELED AFTER PAPER (*) */
21026  /* ALEKSANDRA BORYSOW AND LOTHAR FROMMHOLD, */
21027  /* ASTROPHYSICAL JOURNAL, VOL. 311, PAGES 1043-1057, (1986) */
21028 
21029  /* REVISED BY GLENN ORTON (1989) - TO WORK ON SUN WORKSTATIONS */
21030  /* AND ON THE VAX MACHINES (FORTRAN-77) */
21031  /* PASSES STANDARD TEST ON SUN, AT 200K (JULY 1992) */
21032  /* ==================================================================== */
21033 
21034  /* ALSO IN REVISION: DOUBLE PRECISION FOR ALL F.P. VARIABLES */
21035 
21036  /* ==================================================================== */
21037 
21038  /* HISTORY: */
21039 
21040  /* 2001-02-28 THOMAS KUHN: */
21041  /* CHANGE OF LINES */
21042  /* RSILO(I)=DLOG(RSI(I)*1.E80) */
21043  /* TO */
21044  /* RSILO(I)=(DLOG(RSI(I))+80.0D0*DLOG(10.0D0)) */
21045  /* BECAUSE OF OVERFLOW PROBLEMS. */
21046  /* COSMETICS FOR THE CODE TO BE FASTER READABLE. */
21047  /* CHANGE OF OUTPUT FILE NAME. */
21048  /* CHANGE OF OUTPUT FILE CONTENT */
21049 
21050  /* ==================================================================== */
21051 
21052  /* TKS* IMPLICIT REAL*8 (A-H,O-Z) */
21053 
21054  /* TKS INPUT/OUTPUT VARIABLES */
21055  /* REAL T, F */
21056 
21057  //ret_val = 0.;
21058 
21059  /* TEMP = TEMPERATURE IN KELVIN, SHOULD BE BETWEEN 50. AND 300. */
21060  /* FNUMIN = LOWEST FREQUENCY IN CM-1, FOR LISTING OF ALPHA(FNU) */
21061  /* FNUMAX = HIGHEST FREQUENCY IN CM-1, FOR LISTING OF ALPHA(FNU) */
21062  /* LINE SHAPE MODELLING WILL BE MOST ACCURATE WITHIN RANGE OF */
21063  /* R-T SPECTRAL INTENSITIES AS 1:100. */
21064  /* DNU = FREQUENCY INCREMENT IN CM-1. DNU SHOULD BE CHOSEN SO */
21065  /* THAT NOT MORE THAN 10 STEPS ARE NEEDED TO GO FROM */
21066  /* FNUMIN TO FNUMAX (ELSE ARRAY DIMENSIONS OF FREQ,ABSCOEF */
21067  /* MUST BE ADJUSTED IN ADDEM). */
21068 
21069  /* USER: */
21070  /* ----- */
21071  /* EDIT ONLY HERE: TEMP (K), MIN. FREQ. (CM^-1)= FNUMIN, */
21072  /* MAX. FREQ. = FNUMAX, STEP = DNU, SLITWIDTH (CM^-1)=SLIT */
21073  /* (SLIT=4.3 IS EQUIVALENT TO THAT OF VOYAGER SPECTRA, ONLY BOUND BOUND */
21074  /* SPECTRA ARE CONVOLUTED WITH THIS SLITWIDTH, THE FREE FREE SPECTRA */
21075  /* ARE FAR TOO BROAD FOR THE SLITWIDTH FUNCTION TO MATTER, */
21076  /* LEAVE LIKE = 1 (FOR LIKE PAIRS, AS N2-N2) */
21077  /* THE PROGRAM WILL ASSUME EQUILIBRIUM N2, */
21078  /* ALLOWED TEMPERATURE RANGE: 50-300K (DO NOT EXTEND IT BEYOND THESE LIMITS!) */
21079  /* IF QUESTIONS: CONTACT ABORYSOW@NBI.DK */
21080  /* TKS* NF=INT((FNUMAX-FNUMIN)/DNU+0.5)+1 */
21081  /* TKS* IF (NF.GT.10) NF=10 */
21082  /* TKS* FNUMAX=FNUMIN+FLOAT(NF-1)*DNU */
21083 
21084  /* TKS INPUT TEMPERATURE (K) CHECK OF RANGE */
21085  if (t < 50. || t > 300.) {
21086  ostringstream os;
21087  os << "out of T range ( 50<T<300)! return without calc.!"
21088  << "\n";
21089  throw runtime_error(os.str());
21090  goto L999;
21091  }
21092  temp = t;
21093 
21094  /* *********************** INPUT DATA FROM USER *********************** */
21095  /* FNUMIN = MINIMUM FREQENCY [CM^-1] */
21096  fnumin = f / 29979245800.;
21097  /* FNUMAX = MAXIMUM FREQENCY [CM^-1] */
21098  fnumax = fnumin;
21099  /* ONLY ONE FREQUENCY PER CALL */
21100  nf = 1;
21101  /* DEFAULT VALUE OF FREQUENCY STEP [CM^-1] */
21102  dnu = 10.;
21103  /* DEFAULT VALUE */
21104  like = 1;
21105  /* SLIT = SLITWIDTH [CM^-1] */
21106  /* SLIT=4.3 IS EQUIVALENT TO THAT OF VOYAGER SPECTRA, ONLY BOUND BOUND */
21107  /* SPECTRA ARE CONVOLUTED WITH THIS SLITWIDTH, THE FREE FREE SPECTRA */
21108  /* ARE FAR TOO BROAD FOR THE SLITWIDTH FUNCTION TO MATTER. */
21109  slit = 4.3;
21110  /* ******************************************************************** */
21111 
21112  /* TKS* WRITE (6,14) LGAS,TEMP,FNUMIN,FNUMAX,DNU,NF-1 */
21113  /* TKS*14 FORMAT(' ABSORPTION SPECTRA OF ',A5,' AT',F8.1,' K'/ */
21114  /* TKS* $ 1X,43(1H=),/ */
21115  /* TKS* 1' MIN.FREQ.=',F8.1,' CM-1',10X,'MAX.FREQ.=',F8.1,' CM-1',10X, */
21116  /* TKS* 2'FREQ.INCREMENT=',F8.2,' CM-1',5X,'IN',I5,' STEPS'//) */
21117 
21118  partsum_(&temp);
21119 
21120  /* THE N2-N2 SPECTRA FOR 50-300K */
21121  /* ================================ */
21122 
21123  x = log(temp);
21124  s__1 = nf;
21125  for (i__ = 1; i__ <= s__1; ++i__) {
21126  /* FREQ(I)=FNUMIN+FLOAT(I-1)*DNU */
21127  freq[i__ - 1] = fnumin;
21128  alfatot[i__ - 1] = 0.;
21129  /* L10: */
21130  abscoef[i__ - 1] = 0.;
21131  }
21132 
21133  /* ==================================================================== */
21134 
21135  jj = 1;
21136 L442:
21137  /* L1023: */
21138  ++jj;
21139  if (jj == 42) {
21140  goto L444;
21141  }
21142  goto L442;
21143 /* EB(JJ,IV) JJ-ROTATIONAL LEVEL "L", IV- VIBRATIONAL LEVEL "V"; */
21144 L444:
21145 
21146  /* ==================================================================== */
21147 
21148  /* QUADRUPOLAR INDUCTION: (50-300K) LAMBDA1,LAMBDA2,LAMBDA,L=2023&0223 */
21149  /* ------------------------------------------------------------------- */
21150 
21151  eps = 1e-5;
21152  tt[0] = 10.;
21153  bound32_(&temp, rsi, &nsol);
21154  ij = 0;
21155  rslow1 = 0.;
21156  s__1 = nsol;
21157  for (i__ = 1; i__ <= s__1; ++i__) {
21158  ++ij;
21159  /* MOD CAN BE ONLY 0 OR 1 OR 2 */
21160  if (ij % 3 == 0) {
21161  rslow1 = 1.5e-60;
21162  }
21163  if (ij % 3 == 1) {
21164  rslow1 = 1.7e-60;
21165  }
21166  if (ij % 3 == 2) {
21167  rslow1 = 1.6e-60;
21168  }
21169  if (rsi[i__ - 1] < 1e-60) {
21170  rsi[i__ - 1] = rslow1;
21171  }
21172  /* TKS* RSILO(I)=DLOG(RSI(I)*1.D80) */
21173  rsilo[i__ - 1] = log(rsi[i__ - 1]) + log(10.) * 80.;
21174  omeg[i__ - 1] = (double)(i__ - 1) * dx;
21175  /* L88: */
21176  }
21177 
21178  /* L9991: */
21179 
21180  spline_(&nsol, &cs__1, &cs__0, &eps, omeg, rsilo, tt, ss, &si, &nr, rsigg);
21181 
21182  ik1k0 = 1;
21183  ibound = 1;
21184  /* B-C LINESHAPE HERE */
21185  /* THESE VALUES (S,T1,T2) REPLACE VALUES GIVEN IN PAPER (*): */
21186  /* PUBLISHED IN AN ERRATUM, ASTROPHYSICAL JOURNAL, VOL.320, P.437 */
21187  /* (1987) */
21188  s = c_b24 * exp((c_b26 * x + c_b25) * x);
21189  t1 = c_b27 * exp((c_b29 * x + c_b28) * x);
21190  t2 = c_b30 * exp((c_b32 * x + c_b31) * x);
21191  e = 0.;
21192  t3 = 0.;
21193  t4 = 0.;
21194 
21195  addspec_(&s,
21196  &e,
21197  &t1,
21198  &t2,
21199  &t3,
21200  &t4,
21201  &temp,
21202  &nf,
21203  freq,
21204  abscoef,
21205  &cs__0,
21206  &like,
21207  &cs__2,
21208  &cs__0,
21209  &cs__2,
21210  &cs__3);
21211  s__1 = nf;
21212  for (i__ = 1; i__ <= s__1; ++i__) {
21213  //quad[i__ - 1] = abscoef[i__ - 1];
21214  /* L20: */
21215  alfatot[i__ - 1] = abscoef[i__ - 1] + alfatot[i__ - 1];
21216  }
21217 
21218  /* ==================================================================== */
21219 
21220  /* HEXADECAPOLE COMPONENTS: LAMBDA1,LAMBDA2,LAMBDA,L=4045&0445 */
21221  /* ----------------------------------------------------------- */
21222 
21223  bound54_(&temp, rsi, &nsol);
21224  ij = 0;
21225  s__1 = nsol;
21226  for (i__ = 1; i__ <= s__1; ++i__) {
21227  ++ij;
21228  /* MOD CAN BE ONLY 0 OR 1 OR 2 */
21229  if (ij % 3 == 0) {
21230  rslow1 = 1.5e-60;
21231  }
21232  if (ij % 3 == 1) {
21233  rslow1 = 1.7e-60;
21234  }
21235  if (ij % 3 == 2) {
21236  rslow1 = 1.6e-60;
21237  }
21238  if (rsi[i__ - 1] < 1e-60) {
21239  rsi[i__ - 1] = rslow1;
21240  }
21241  /* TKS RSILO(I)=DLOG(RSI(I)*1.E80) */
21242  rsilo[i__ - 1] = log(rsi[i__ - 1]) + log(10.) * 80.;
21243  /* L111: */
21244  omeg[i__ - 1] = (double)(i__ - 1) * dx;
21245  }
21246  spline_(&nsol, &cs__1, &cs__0, &eps, omeg, rsilo, tt, ss, &si, &nr, rsigg);
21247 
21248  /* --------------------------- */
21249  /* TEMPERATURES 50-140K */
21250  /* --------------------------- */
21251 
21252  if (temp >= 140.) {
21253  goto L333;
21254  }
21255 
21256  s = c_b43 * exp((c_b45 * x + c_b44) * x);
21257  e = c_b46 * exp((c_b47 * x + c_b47) * x);
21258  t1 = c_b49 * exp((c_b51 * x + c_b50) * x);
21259  t2 = c_b52 * exp((c_b54 * x + c_b53) * x);
21260  t3 = c_b55 * exp((c_b57 * x + c_b56) * x);
21261  t4 = c_b58 * exp((c_b60 * x + c_b59) * x);
21262 
21263  ik1k0 = 0;
21264  ibound = 1;
21265  addspec_(&s,
21266  &e,
21267  &t1,
21268  &t2,
21269  &t3,
21270  &t4,
21271  &temp,
21272  &nf,
21273  freq,
21274  abscoef,
21275  &cs__0,
21276  &like,
21277  &cs__4,
21278  &cs__0,
21279  &cs__4,
21280  &cs__5);
21281  s__1 = nf;
21282  for (i__ = 1; i__ <= s__1; ++i__) {
21283  //hexa[i__ - 1] = abscoef[i__ - 1];
21284  /*
21285  s_wsle(&io___25);
21286  do_lio(&c__9, &c__1, " T=50-140K: HEXA(", (ftnlen)17);
21287  do_lio(&c__2, &c__1, (char *)&i__, (ftnlen)sizeof(int));
21288  do_lio(&c__9, &c__1, ") =", (ftnlen)3);
21289  do_lio(&c__5, &c__1, (char *)&abscoef[i__ - 1], (ftnlen)sizeof(
21290  double));
21291  e_wsle();
21292  */
21293  /* L50: */
21294  alfatot[i__ - 1] += abscoef[i__ - 1];
21295  }
21296  goto L334;
21297 
21298  /* --------------------------- */
21299  /* TEMPERATURES 140-300K */
21300  /* --------------------------- */
21301 
21302 L333:
21303  ik1k0 = 0;
21304  ibound = 1;
21305  s = c_b78 * exp((c_b80 * x + c_b79) * x);
21306  e = c_b46 * exp((c_b47 * x + c_b47) * x);
21307  t1 = c_b84 * exp((c_b86 * x + c_b85) * x);
21308  t2 = c_b87 * exp((c_b89 * x + c_b88) * x);
21309  t3 = c_b90 * exp((c_b92 * x + c_b91) * x);
21310  t4 = c_b93 * exp((c_b95 * x + c_b94) * x);
21311 
21312  addspec_(&s,
21313  &e,
21314  &t1,
21315  &t2,
21316  &t3,
21317  &t4,
21318  &temp,
21319  &nf,
21320  freq,
21321  abscoef,
21322  &cs__0,
21323  &like,
21324  &cs__4,
21325  &cs__0,
21326  &cs__4,
21327  &cs__5);
21328  s__1 = nf;
21329  for (i__ = 1; i__ <= s__1; ++i__) {
21330  //hexa[i__ - 1] = abscoef[i__ - 1];
21331  /*
21332  s_wsle(&io___26);
21333  do_lio(&c__9, &c__1, " T=140-300K: HEXA(", (ftnlen)18);
21334  do_lio(&c__2, &c__1, (char *)&i__, (ftnlen)sizeof(int));
21335  do_lio(&c__9, &c__1, ") =", (ftnlen)3);
21336  do_lio(&c__5, &c__1, (char *)&abscoef[i__ - 1], (ftnlen)sizeof(
21337  double));
21338  e_wsle();
21339  */
21340  /* L550: */
21341  alfatot[i__ - 1] += abscoef[i__ - 1];
21342  }
21343 
21344  /* ==================================================================== */
21345 
21346  /* DOUBLE TRANSITIONS: LAMBDA1,LAMBDA2,LAMBDA,L=2,2,3,3 */
21347  /* ---------------------------------------------------- */
21348 
21349  /* --------------------------- */
21350  /* TEMPERATURES 50-300K */
21351  /* --------------------------- */
21352 
21353 L334:
21354  ik1k0 = 1;
21355  ibound = 0;
21356  /* X S=Y(X,1.19261D-58, -3.78587,0.34024) */
21357  s = c_b112 * exp((c_b114 * x + c_b113) * x);
21358  t1 = c_b115 * exp((c_b117 * x + c_b116) * x);
21359  t2 = c_b118 * exp((c_b120 * x + c_b119) * x);
21360  t3 = 0.;
21361  t4 = 0.;
21362  addspec_(&s,
21363  &e,
21364  &t1,
21365  &t2,
21366  &t3,
21367  &t4,
21368  &temp,
21369  &nf,
21370  freq,
21371  abscoef,
21372  &cs__0,
21373  &like,
21374  &cs__2,
21375  &cs__2,
21376  &cs__3,
21377  &cs__3);
21378  s__1 = nf;
21379  for (i__ = 1; i__ <= s__1; ++i__) {
21380  //dtrans[i__ - 1] = abscoef[i__ - 1];
21381  /* L650: */
21382  alfatot[i__ - 1] += abscoef[i__ - 1];
21383  }
21384 
21385  /* ==================================================================== */
21386 
21387  /* ANISOTROPIC OVERLAP NEGLECTED (LAMBDA1,LAMBDA2,LAMBDA,L=0212) */
21388  /* SINCE THIS TERM IS EXTREMELY SMALL */
21389 
21390  /* ==================================================================== */
21391 
21392  /* TKS* PRINT 154, FREQ(1),FREQ(NF),FREQ(2)-FREQ(1),TEMP */
21393  /* TKS* PRINT 156, (ALFATOT(I),I=1,NF) */
21394  /* TKS*154 FORMAT(///' ABSORPTION COEFFICIENT ALPHA(FNU), FROM ',F5.1, */
21395  /* TKS* $' CM-1 TO',F7.1,' CM-1, AT',F6.2,' CM-1 INCREMENTS, AT T=', */
21396  /* TKS* $F7.2,' K, IN UNITS OF CM-1 AMAGAT-2'/) */
21397  /* TKS*156 FORMAT(' ',10D13.5) */
21398  /* TKS* OPEN(UNIT=10, FILE='OUT', STATUS='UNKNOWN') */
21399  /* TKS* WRITE(10, 2929) (FREQ(I), ALFATOT(I), I=1, NF) */
21400  /* TKS*C WRITE(10, 2929) (FREQ(I), QUAD(I), HEXA(I) ALFATOT(I), I=1, NF) */
21401  /* TKS*2929 FORMAT(F10.3, E12.4) */
21402 
21403  /* TKS* STOP */
21404 
21405  /* TKS FILL OUTPUT VARIABLE */
21406  // tksabs[0] = quad[0];
21407  // tksabs[1] = hexa[0];
21408  // tksabs[2] = dtrans[0];
21409  // tksabs[3] = alfatot[0];
21410  ret_val = alfatot[0];
21411 /* TKS print*,'QUAD(1),HEXA(1),DTRANS(1)=',QUAD(1),HEXA(1),DTRANS(1) */
21412 L999:
21413  return ret_val;
21414 } /* n2n2tks_ */
21415 
21416 #undef temp
21417 #undef fnumin
21418 #undef fnumax
21419 #undef dnu
21420 #undef slit
21421 #undef dx
21422 #undef rsilo
21423 #undef omeg
21424 #undef rsi
21425 #undef rsigg
21426 #undef nsol
21427 #undef like
21428 #undef ik1k0
21429 #undef ibound
21430 
21431 #define wnrmax3 (app3a_1.wnrmax3)
21432 #define rsilo (rsilo_1.rsilo)
21433 #define omeg (bba_2.omeg)
21434 #define rsigg (bba_2.rsigg)
21435 #define beta (bba_2.beta)
21436 #define nsol (bbc_1.nsol)
21437 #define ibound (bbb_1.ibound)
21438 #define q1 (n2part_1.q1)
21439 #define wn2 (n2part_1.wn2)
21440 #define b01 (n2part_1.b01)
21441 #define d01 (n2part_1.d01)
21442 #define jrange2 (n2part_1.jrange2)
21443 
21444 /* ########################################################################## */
21445 
21446 /* Subroutine */ int addspec_(double *g0,
21447  double *ep,
21448  double *tau1,
21449  double *tau2,
21450  double *tau5,
21451  double *tau6,
21452  double *temp,
21453  int *nf,
21454  double *freq,
21455  double *abscoef,
21456  int * /* mp */,
21457  int *like,
21458  int *lambda1,
21459  int *lambda2,
21460  int *lambda,
21461  int * /* lvalue */) {
21462  /* Initialized data */
21463 
21464  static double closchm = 2.68675484e19;
21465  static double boltzwn = .6950304;
21466  static double hbar = 1.054588757e-27;
21467  static double pi = 3.1415926535898;
21468  static double clight = 2.997925e10;
21469 
21470  /* Format strings */
21471  /*
21472  static char fmt_20[] = "(/\002 LAMBDA1,LAMBDA2, LAMBDA,LVALUE=\002,2i3,2"
21473  "x,2i3,\002 COMPONENT.\002/15x,\002LINE SHAPE PARAMETERS:\002,6d1"
21474  "2.3,5x,\002G(0)=\002,d12.3/)";
21475  */
21476 
21477  /* System generated locals */
21478  int s__1, s__2, s__3, s__4, s__5, s__6;
21479  double d__1, d__2;
21480 
21481  /* Builtin functions */
21482  /*
21483  integer s_wsfe(cilist *), do_fio(integer *, char *, ftnlen), e_wsfe(void),
21484  s_wsle(cilist *), do_lio(integer *, integer *, char *, ftnlen),
21485  e_wsle(void);
21486  */
21487 
21488  /* Local variables */
21489  int list, jsum = 0;
21490  extern double bgama_(
21491  double *, double *, double *, double *, double *, double *, double *);
21492  int i__, j;
21493  double calib, p;
21494  int i1, j1, i2, j2;
21495  double p1, p2, omega1, omega2;
21496  int ip, jp, iq;
21497  double twopic;
21498  int jplusl, ip1, jp1, ip2, jp2;
21499  double fac, cgs, xbg, wkf, frq, wki;
21500  extern double specfct_(
21501  double *, double *, double *, double *, int *, double *),
21502  clebsqr_(int *, int *, int *);
21503  double cg1s, cg2s;
21504 
21505  /* Fortran I/O blocks */
21506  /*
21507  static cilist io___38 = { 0, 6, 0, fmt_20, 0 };
21508  static cilist io___40 = { 0, 6, 0, 0, 0 };
21509  */
21510 
21511  /* THIS PROGRAM GENERATES LISTING OF R-T CIA ALFA(OMEGA) */
21512  /* IF EITHER LAMBDA1 OR LAMBDA2 EQUAL TO ZERO - SINGLE TRANSITIONS; */
21513  /* DOUBLE TRANSITIONS ARE ASSUMED OTHERWISE. */
21514  /* LIKE=1 FOR LIKE SYSTEMS (AS H2-H2), SET LIKE=0 ELSE. */
21515 
21516  /* COMMON/BB/OMEG(201),RSI(201),RSIGG(201),NSOL,BETA */
21517  /* COMMON/APP3/SLIT,DX,NSRI,WNRMAX3,NS,NSRIUP */
21518  /* DIMENSION ABSCOEF(NF),FREQ(NF) */
21519  /* Parameter adjustments */
21520  --abscoef;
21521  --freq;
21522 
21523  /* Function Body */
21524 
21525  twopic = 2. * pi * clight;
21526  if (*like != 1) {
21527  *like = 0;
21528  }
21529  /* TAKE CARE OF FACTOR OF 1.E-60 HERE. */
21530  /* Computing 2nd power */
21531  d__1 = pi;
21532  /* Computing 2nd power */
21533  d__2 = closchm * 1e-30;
21534  calib = twopic * (d__1 * d__1 * 4. / (hbar * 3. * clight)) * (d__2 * d__2);
21535  calib /= (double)(*like + 1);
21536  beta = 1. / (boltzwn * *temp);
21537  list = *nf;
21538  s__1 = list;
21539  for (i__ = 1; i__ <= s__1; ++i__) {
21540  /* L88: */
21541  abscoef[i__] = 0.;
21542  }
21543 
21544  /* ROTATIONAL SPECTRUM FOR THE DETAILED LISTING ******************* */
21545  /*
21546  s_wsfe(&io___38);
21547  do_fio(&c__1, (char *)&(*lambda1), (ftnlen)sizeof(int));
21548  do_fio(&c__1, (char *)&(*lambda2), (ftnlen)sizeof(int));
21549  do_fio(&c__1, (char *)&(*lambda), (ftnlen)sizeof(int));
21550  do_fio(&c__1, (char *)&(*lvalue), (ftnlen)sizeof(int));
21551  do_fio(&c__1, (char *)&(*g0), (ftnlen)sizeof(double));
21552  do_fio(&c__1, (char *)&(*ep), (ftnlen)sizeof(double));
21553  do_fio(&c__1, (char *)&(*tau1), (ftnlen)sizeof(double));
21554  do_fio(&c__1, (char *)&(*tau2), (ftnlen)sizeof(double));
21555  do_fio(&c__1, (char *)&(*tau5), (ftnlen)sizeof(double));
21556  do_fio(&c__1, (char *)&(*tau6), (ftnlen)sizeof(double));
21557  d__1 = *g0 * bgama_(&c_b47, tau1, tau2, ep, tau5, tau6, temp);
21558  do_fio(&c__1, (char *)&d__1, (ftnlen)sizeof(double));
21559  e_wsfe();
21560  */
21561  if (*lambda1 == 0 || *lambda2 == 0) {
21562  goto L152;
21563  }
21564  jplusl = jrange2 + max(*lambda1, *lambda2);
21565 
21566  /*
21567  s_wsle(&io___40);
21568  do_lio(&c__9, &c__1, "LAMBDA1,LAMBDA2,ABSCOEF(1)=", (ftnlen)27);
21569  do_lio(&c__2, &c__1, (char *)&(*lambda1), (ftnlen)sizeof(int));
21570  do_lio(&c__2, &c__1, (char *)&(*lambda2), (ftnlen)sizeof(int));
21571  do_lio(&c__5, &c__1, (char *)&abscoef[1], (ftnlen)sizeof(double));
21572  e_wsle();
21573  */
21574  jsum = 0;
21575  s__1 = jrange2;
21576  for (i1 = 1; i1 <= s__1; ++i1) {
21577  j1 = i1 - 1;
21578  s__2 = jplusl;
21579  for (ip1 = 1; ip1 <= s__2; ++ip1) {
21580  jp1 = ip1 - 1;
21581  cg1s = clebsqr_(&j1, lambda1, &jp1);
21582  if (cg1s <= 0.) {
21583  goto L150;
21584  } else {
21585  goto L130;
21586  }
21587  L130:
21588  s__3 = j1 * (j1 + 1);
21589  p1 = (double)(2 * j1 + 1) * wn2[1 + j1 % 2 - 1] *
21590  exp(-1.4387859 / *temp *
21591  ((b01 - (double)s__3 * d01) * (double)s__3)) /
21592  q1;
21593  ++jsum;
21594  s__3 = jp1 * ip1;
21595  s__4 = j1 * i1;
21596  omega1 = (b01 - (double)s__3 * d01) * (double)s__3 -
21597  (b01 - (double)s__4 * d01) * (double)s__4;
21598  s__3 = jrange2;
21599  for (i2 = 1; i2 <= s__3; ++i2) {
21600  j2 = i2 - 1;
21601  s__4 = jplusl;
21602  for (ip2 = 1; ip2 <= s__4; ++ip2) {
21603  jp2 = ip2 - 1;
21604  cg2s = clebsqr_(&j2, lambda2, &jp2);
21605  if (cg2s <= 0.) {
21606  goto L148;
21607  } else {
21608  goto L132;
21609  }
21610  L132:
21611  s__5 = j2 * (j2 + 1);
21612  p2 = (double)(2 * j2 + 1) * wn2[1 + j2 % 2 - 1] *
21613  exp(-1.4387859 / *temp *
21614  ((b01 - (double)s__5 * d01) * (double)s__5)) /
21615  q1;
21616  s__5 = jp2 * ip2;
21617  s__6 = j2 * i2;
21618  omega2 = (b01 - (double)s__5 * d01) * (double)s__5 -
21619  (b01 - (double)s__6 * d01) * (double)s__6;
21620  fac = calib * p1 * p2 * cg1s * cg2s;
21621  s__5 = list;
21622  for (i__ = 1; i__ <= s__5; ++i__) {
21623  frq = freq[i__] - omega1 - omega2;
21624  wki = freq[i__] * (1. - exp(-beta * freq[i__]));
21625  wkf = wki * fac;
21626  xbg = *g0 * bgama_(&frq, tau1, tau2, ep, tau5, tau6, temp);
21627  if (ibound == 0) {
21628  goto L555;
21629  }
21630  if (abs(frq) <= wnrmax3) {
21631  xbg += specfct_(&frq, omeg, rsilo, rsigg, &nsol, &beta);
21632  }
21633  L555:
21634  abscoef[i__] += xbg * wkf;
21635  /* L146: */
21636  }
21637  L148:;
21638  }
21639  }
21640  L150:;
21641  }
21642  }
21643  goto L2222;
21644 /* SINGLE TRANSITIONS AT NITROGEN'S ROTATIONAL FREQUENCIES */
21645 /* ======================================================= */
21646 L152:
21647  jplusl = jrange2 + *lambda;
21648  s__2 = jrange2;
21649  for (i__ = 1; i__ <= s__2; ++i__) {
21650  j = i__ - 1;
21651  s__1 = jplusl;
21652  for (ip = 1; ip <= s__1; ++ip) {
21653  jp = ip - 1;
21654  cgs = clebsqr_(&j, lambda, &jp);
21655  if (cgs <= 0.) {
21656  goto L200;
21657  } else {
21658  goto L210;
21659  }
21660  L210:
21661  s__4 = j * (j + 1);
21662  p = (double)(2 * j + 1) * wn2[1 + j % 2 - 1] *
21663  exp(-1.4387859 / *temp *
21664  ((b01 - (double)s__4 * d01) * (double)s__4)) /
21665  q1;
21666  ++jsum;
21667  s__4 = jp * ip;
21668  s__3 = j * i__;
21669  omega1 = (b01 - (double)s__4 * d01) * (double)s__4 -
21670  (b01 - (double)s__3 * d01) * (double)s__3;
21671  fac = calib * p * cgs;
21672  s__4 = list;
21673  for (iq = 1; iq <= s__4; ++iq) {
21674  frq = freq[iq] - omega1;
21675  /* XWKI=FREQ(IQ)*(1.-EXP(-BETA*FREQ(IQ))) */
21676  wki = freq[iq] * (1. - exp(-beta * freq[iq]));
21677  wkf = wki * fac;
21678  xbg = *g0 * bgama_(&frq, tau1, tau2, ep, tau5, tau6, temp);
21679  if (ibound == 0) {
21680  goto L444;
21681  }
21682  if (abs(frq) <= wnrmax3) {
21683  xbg += specfct_(&frq, omeg, rsilo, rsigg, &nsol, &beta);
21684  }
21685  L444:
21686  abscoef[iq] += xbg * wkf;
21687  /* L199: */
21688  }
21689  L200:;
21690  }
21691  }
21692 
21693 L2222:
21694  /* TKS 2222 PRINT 44,(ABSCOEF(I),I=1,LIST) */
21695  /* L44: */
21696  return 0;
21697 } /* addspec_ */
21698 
21699 #undef wnrmax3
21700 #undef rsilo
21701 #undef omeg
21702 #undef rsigg
21703 #undef beta
21704 #undef nsol
21705 #undef ibound
21706 #undef q1
21707 #undef wn2
21708 #undef b01
21709 #undef d01
21710 #undef jrange2
21711 
21712 #define q (n2part_2.q)
21713 #define wn2 (n2part_2.wn2)
21714 #define b0 (n2part_2.b0)
21715 #define d0 (n2part_2.d0)
21716 #define jrange1 (n2part_2.jrange1)
21717 
21718 /* Subroutine */ int partsum_(double *temp) {
21719  /* System generated locals */
21720  int s__1;
21721 
21722  /* Local variables */
21723  int j;
21724  double dq;
21725 
21726  /* N2 ROTATIONAL PARTITION SUM Q = Q(T). */
21727 
21728  /* Q,B0,D0,WN2 - PARTITION FCT., ROT.CONSTANTS, WEIGHTS FOR N2 */
21729  q = 0.;
21730  j = 0;
21731 L50:
21732  s__1 = j * (j + 1);
21733  dq = (double)(2 * j + 1) * wn2[1 + j % 2 - 1] *
21734  exp(-1.4387859 * ((b0 - (double)s__1 * d0) * (double)s__1) / *temp);
21735  q += dq;
21736  ++j;
21737  if (dq > q / 900.) {
21738  goto L50;
21739  }
21740  jrange1 = j;
21741  /* TKS PRINT 30, Q, JRANGE1 */
21742 
21743  /* L30: */
21744  return 0;
21745 } /* partsum_ */
21746 
21747 #undef q
21748 #undef wn2
21749 #undef b0
21750 #undef d0
21751 #undef jrange1
21752 
21753 #define slit (app3a_1.slit)
21754 #define dx (app3a_1.dx)
21755 #define wnrmax3 (app3a_1.wnrmax3)
21756 #define nsri (app3b_1.nsri)
21757 #define ns (app3b_1.ns)
21758 #define nsriup (app3b_1.nsriup)
21759 #define rsi (bl3_1.rsi)
21760 
21761 /* Subroutine */ int profile_(double *x, double *y) {
21762  /* System generated locals */
21763  int s__1;
21764 
21765  /* Local variables */
21766  int i__;
21767  double slope;
21768  int n1;
21769  double x0;
21770  int nc;
21771  double dr;
21772  int no;
21773  double xi;
21774  int nu;
21775 
21776  /* A TRIANGULAR SLIT FUNCTION IS USED. */
21777 
21778  /* COMMON/APP3/SLIT,DX,NSRI,WNRMAX3,NS,NSRIUP */
21779 
21780  if (*y < 0.) {
21781  goto L105;
21782  } else if (*y == 0) {
21783  goto L106;
21784  } else {
21785  goto L1;
21786  }
21787 L1:
21788  x0 = nsri + 1. + *x / dx;
21789  nc = (int)x0;
21790  n1 = nc + 1;
21791  slope = *y / slit;
21792  nu = (int)(x0 - ns);
21793  if (nu < 1) {
21794  nu = 1;
21795  }
21796  if (nu > nsriup) {
21797  return 0;
21798  }
21799  no = (int)(x0 + ns);
21800  if (no > nsriup) {
21801  no = nsriup;
21802  }
21803  if (no < 1) {
21804  return 0;
21805  }
21806  if (nc > nsriup) {
21807  nc = nsriup;
21808  }
21809  if (nc <= 1) {
21810  goto L101;
21811  }
21812  s__1 = nc;
21813  for (i__ = nu; i__ <= s__1; ++i__) {
21814  xi = (i__ - 1.) * dx - wnrmax3;
21815  dr = slope * (xi - (*x - slit));
21816  if (dr <= 0.) {
21817  goto L100;
21818  }
21819  rsi[i__ - 1] += dr;
21820  L100:;
21821  }
21822 L101:
21823 
21824  if (nc >= nsriup) {
21825  return 0;
21826  }
21827  if (n1 < 1) {
21828  n1 = 1;
21829  }
21830  s__1 = no;
21831  for (i__ = n1; i__ <= s__1; ++i__) {
21832  xi = (i__ - 1.) * dx - wnrmax3;
21833  dr = *y - slope * (xi - *x);
21834  if (dr <= 0.) {
21835  goto L102;
21836  }
21837  rsi[i__ - 1] += dr;
21838  L102:;
21839  }
21840  return 0;
21841 L105:
21842 /* TKS 105 PRINT 10,SLIT */
21843 /* TKS 10 FORMAT(/' A TRIANGULAR SLIT FUNCTION OF',F6.3,' CM-1 HALFWIDTH IS */
21844 /* TKS ' USED'/) */
21845 L106:
21846  return 0;
21847 } /* profile_ */
21848 
21849 #undef slit
21850 #undef dx
21851 #undef wnrmax3
21852 #undef nsri
21853 #undef ns
21854 #undef nsriup
21855 #undef rsi
21856 
21857 /* X FUNCTION SPECFCT(FREQ,OMEGA,PHI,PHI2,N,RTEMP) */
21858 
21859 double specfct_(double *freq,
21860  double *omega,
21861  double *phi,
21862  double *phi2,
21863  int *n,
21864  double *rtemp) {
21865  /* System generated locals */
21866  double ret_val;
21867 
21868  /* Local variables */
21869  double tfac, f, gp, si;
21870  int nr;
21871  extern /* Subroutine */ int ixpolat_(int *,
21872  int *,
21873  int *,
21874  double *,
21875  double *,
21876  double *,
21877  double *,
21878  double *,
21879  double *,
21880  int *,
21881  double *);
21882 
21883  /* THIS INTERPOLATES THE SPECTRAL FUNCTION PHI(FREQ) DEFINED AT */
21884  /* OMEGA(N) AS PHI(N). PHI2 IS THE SECOND DERIVATIVE AT OMEGA */
21885  /* WHICH MUST BE OBTAINED FIRST (USE SPLINE FOR THAT PURPOSE). */
21886  /* RTEMP IS THE RECIPROCAL TEMPERATURE IN CM-1 UNITS. */
21887  /* NOTE THAT WE INTERPOLATE 1.E80 TIMES THE LOGARITHM OF PHI(OMEGA) */
21888  /* NOTE THAT IN GSO'S REVISION, THIS FACTOR IS REMOVED. */
21889  /* (REVISION MODIFIED) */
21890 
21891  /* PRINT*,'FREQ =',FREQ */
21892  /* PRINT*,'OMEGA=',OMEGA */
21893  /* PRINT*,'RTEMP=',RTEMP */
21894  /* PRINT*,'PHI =',PHI */
21895  /* PRINT*,'PHI2 =',PHI2 */
21896  /* Parameter adjustments */
21897  --phi2;
21898  --phi;
21899  --omega;
21900 
21901  /* Function Body */
21902  tfac = 0.;
21903  f = *freq;
21904  if (f >= 0.) {
21905  goto L20;
21906  } else {
21907  goto L10;
21908  }
21909 L10:
21910  f = abs(f);
21911  tfac = -(*rtemp) * f;
21912 L20:
21913  if (f <= omega[*n]) {
21914  goto L30;
21915  }
21916  ret_val = exp(-(phi[*n - 1] - phi[*n]) * (f - omega[*n]) /
21917  (omega[*n] - omega[*n - 1]) +
21918  phi[*n] + tfac) *
21919  1e-80;
21920  /* print*,' (A) SPECFCT=',SPECFCT */
21921  /* X SPECFCT=DEXP(-(PHI(N-1)-PHI(N))*(F-OMEGA(N))/ */
21922  /* X $(OMEGA(N)-OMEGA(N-1))+PHI(N)+TFAC) */
21923  return ret_val;
21924 /* 30 PRINT*,'SI,NR,PHI2=', */
21925 /* & SI,NR,PHI2 */
21926 /* CALL IXPOLAT(N,1,0,1.D-6,OMEGA,PHI,F,GP,SI,NR,PHI2) */
21927 L30:
21928  ixpolat_(n,
21929  &cs__1,
21930  &cs__0,
21931  &c_b183,
21932  &omega[1],
21933  &phi[1],
21934  &f,
21935  &gp,
21936  &si,
21937  &nr,
21938  &phi2[1]);
21939  ret_val = exp(tfac + gp) * 1e-80;
21940  /* X SPECFCT=DEXP(TFAC+GP) */
21941  /* print*,' (B) GP,SPECFCT=',GP,SPECFCT */
21942 
21943  return ret_val;
21944 } /* specfct_ */
21945 #define slit (app3a_1.slit)
21946 #define dx (app3a_1.dx)
21947 #define wnrmax3 (app3a_1.wnrmax3)
21948 #define nsri (app3b_1.nsri)
21949 #define ns (app3b_1.ns)
21950 #define nsriup (app3b_1.nsriup)
21951 #define eb (energ_1.eb)
21952 #define niv (energ_1.niv)
21953 #define nlines (dimer_1.nlines)
21954 #define rsibb (bl3_2.rsibb)
21955 #define ldelvi (bbbb_2.ldelvi)
21956 #define ivi (bbbb_2.ivi)
21957 #define ivip (bbbb_2.ivip)
21958 #define ldelel (bbbb_2.ldelel)
21959 #define ll (bbbb_2.ll)
21960 #define llp (bbbb_2.llp)
21961 
21962 /* Subroutine */ int bound32_(double *temp, double *rsi, int *nsol) {
21963  /* Initialized data */
21964 
21965  static int ldelvis[63] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
21966  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
21967  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3,
21968  3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4};
21969  static int ivis[63] = {0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 0, 0, 0, 0, 1, 1,
21970  1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 0, 0, 0, 0, 1, 1,
21971  1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 0, 1, 2, 0, 1, 2,
21972  0, 1, 0, 1, 0, 1, 2, 0, 1, 0, 1, 0, 1, 0, 1};
21973  static int ivips[63] = {0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 1, 1, 1, 1, 2, 2,
21974  2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 2, 2, 2, 2, 3, 3,
21975  3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 3, 4, 5, 3, 4, 5,
21976  3, 4, 3, 4, 3, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5};
21977  static int ldelels[63] = {1, 3, 1, 3, 1, 3, 1, 3, 1, 3, -3, -1, 1,
21978  3, -3, -1, 1, 3, -3, -1, 1, 3, 3, 1, -1, -3,
21979  -3, -1, 1, 3, -3, -1, 1, 3, -3, -1, 1, 3, -1,
21980  -3, 1, 3, 1, 1, 1, -1, -1, -1, -3, -3, 3, 3,
21981  -3, -3, -3, -3, -3, 3, 3, 1, 1, -1, -1};
21982  static double as[63] = {
21983  4.4844e-40, 4.4356e-40, 2.9345e-40, 2.885e-40, 1.6441e-40, 1.5899e-40,
21984  7.2882e-41, 6.7748e-41, 1.0378e-41, 1.3041e-42, 1.5006e-41, 1.537e-41,
21985  1.6139e-41, 1.7143e-41, 1.9985e-41, 2.0169e-41, 2.0994e-41, 2.2094e-41,
21986  1.636e-41, 1.6281e-41, 1.6714e-41, 1.7326e-41, 8.0425e-42, 8.0862e-42,
21987  8.0093e-42, 8.1366e-42, 2.4471e-42, 2.5406e-42, 2.6629e-42, 2.8064e-42,
21988  4.6227e-42, 4.715e-42, 4.8513e-42, 5.0133e-42, 3.9968e-42, 3.984e-42,
21989  3.981e-42, 3.9687e-42, 1.1806e-42, 1.3458e-42, 3.8746e-42, 3.9219e-42,
21990  7.3334e-43, 1.339e-42, 1.3041e-42, 7.1401e-43, 1.3461e-42, 6.5776e-43,
21991  6.9847e-43, 1.3517e-42, 7.5545e-43, 1.3268e-42, 6.9847e-43, 1.3517e-42,
21992  7.464e-43, 2.1322e-43, 2.6037e-43, 2.0823e-43, 2.0632e-43, 2.1067e-43,
21993  2.0531e-43, 2.1218e-43, 2.3006e-43};
21994  static double bs[63] = {
21995  4.3e-4, 4.6e-4, 8.3e-4, 8.9e-4, .0017, .00186, .0041, .00457,
21996  0., 0., 9.99e-4, 5.23e-4, 1.49e-4, -1.68e-4, .001837, .001153,
21997  6.6e-4, 2.54e-4, .003603, .002677, .002101, .001738, .00595, .006843,
21998  0., .007035, .001025, 6.42e-4, 2.54e-4, -1.64e-4, .002342, .001975,
21999  .00164, .001328, .004943, .004999, .005461, .006839, 0., .010993,
22000  0., 0., .001367, .005262, 0., .001601, .00451, 0.,
22001  .001828, .004175, .04816, .007033, .001828, .004175, .009338, .003733,
22002  .008508, .006979, 0., .005035, 0., .004169, 0.};
22003  static double twopic = 1.88365183e11;
22004  static double pi = 3.141592654;
22005 
22006  /* System generated locals */
22007  int s__1;
22008  double d__1;
22009 
22010  /* Local variables */
22011  double alfa;
22012  int nnii;
22013  //int nsol2;
22014  double a, b;
22015  int i__, l, n;
22016  double stoke, stoki, am, pf;
22017  int lp;
22018  double rm;
22019  int nr, iv;
22020  double stokip;
22021  int ivp;
22022  extern double clebsqr_(int *, int *, int *);
22023  extern /* Subroutine */ int profile_(double *, double *);
22024 
22025 #define eb_ref(a_1, a_2) eb[(a_2)*41 + a_1 - 42]
22026 
22027  /* COMMON/APP3/SLIT,DX,NSRI,WNRMAX3,NS,NSRIUP */
22028 
22029  /* STORED VALUES */
22030  /* Parameter adjustments */
22031  --rsi;
22032 
22033  /* Function Body */
22034 
22035  /* EB(I,K) - BOUND ENERGIES */
22036  /* AM = (MTX.EL. (L,BETA,L') )**2 */
22037  /* M(L,L',V,V') OF PAPER (*) ARE TO BE CORRECTED: */
22038  /* M(L,L',V,V') = AM * (2L+1) * C(L,3,L')**2 */
22039  /* NSRI - HOW MANY POINTS FOR B-B SPECTRAL FUNCTION TO BE GIVEN */
22040  /* WNRMAX3 - THE FREQUENCY RANGE OF B-B CONTRIBUTION */
22041  /* SLIT- THE HALFWIDTH OF THE SPECTRAL PROFILE CONVOLUTED WITH */
22042  /* B-B SPECTRUM, IN [CM-1]. */
22043  /* A,B, COEFFICIENTS , EQ. 7, A.BORYSOW, L.FROMMHOLD, */
22044  /* AP. J. VOL.311, 1043-1057, (1986) */
22045 
22046  nsri = 190;
22047  wnrmax3 = 45.;
22048  nsriup = (nsri << 1) + 1;
22049  dx = wnrmax3 / (double)nsri;
22050  ns = (int)(slit / dx);
22051 
22052  for (i__ = 1; i__ <= 401; ++i__) {
22053  /* L300: */
22054  rsibb[i__ - 1] = 0.;
22055  }
22056 
22057  alfa = 1. / (*temp * .69519);
22058  rm = 2.32498211e-23;
22059  /* RM - REDUCED MASS FOR N2-N2 */
22060 
22061  d__1 = rm * 1.380662e-16 * *temp * 2. * pi / 4.3906208382975998e-53;
22062  pf = pow(d__1, c_b186);
22063  /* SCALE DOWN BY 1.D60 */
22064  pf *= 1e-60;
22065 
22066  nr = 0;
22067 L555:
22068  ++nr;
22069  ldelvi = ldelvis[nr - 1];
22070  ivi = ivis[nr - 1];
22071  ivip = ivips[nr - 1];
22072  ldelel = ldelels[nr - 1];
22073  a = as[nr - 1];
22074  b = bs[nr - 1];
22075  /* WRITE (6,334) LDELVI,IVI,IVIP, LDELEL,A,B */
22076  /* L334: */
22077 
22078  /* LDELVI=DELTA(V)=V'-V */
22079  /* IVI = V; IVIP = V' */
22080  /* LDELEL = DELTA(L) = L'-L */
22081 
22082  iv = ivi + 1;
22083  ivp = ivip + 1;
22084  /* THESE ARE ENERGY COLUMNS (V, V') */
22085 
22086  nnii = niv[iv - 1];
22087 
22088  s__1 = nnii;
22089  for (l = 1; l <= s__1; ++l) {
22090  /* LOOP OVER INITIAL L-VALUES... */
22091 
22092  am = a * exp(-b * (double)((l - 1) * l));
22093  /* L - NUMBER OF ROW, (L-1) - ROTATIONAL LEVEL */
22094  lp = l + ldelel;
22095  ll = l - 1;
22096  llp = lp - 1;
22097  /* LL,LLP ARE INITIAL L AND FINAL L' ANGULAR MOMENTUM QUANTUM NUMBERS */
22098 
22099  if (lp > niv[ivp - 1] || lp < 1) {
22100  goto L20;
22101  }
22102  if (eb_ref(lp, ivp) == 0.) {
22103  goto L20;
22104  }
22105  if (eb_ref(l, iv) == 0.) {
22106  goto L20;
22107  }
22108  stoke = eb_ref(lp, ivp) - eb_ref(l, iv);
22109 
22110  stoki = am * exp(-alfa * eb_ref(l, iv)) / pf * (double)((ll << 1) + 1) *
22111  clebsqr_(&ll, &cs__3, &llp);
22112 
22113  profile_(&stoke, &stoki);
22114  if (stoki > 0.) {
22115  ++nlines;
22116  }
22117 
22118  stokip = am * exp(-alfa * eb_ref(lp, ivp)) / pf * (double)((llp << 1) + 1) *
22119  clebsqr_(&llp, &cs__3, &ll);
22120 
22121  d__1 = -stoke;
22122  profile_(&d__1, &stokip);
22123  if (stokip > 0.) {
22124  ++nlines;
22125  }
22126 
22127  L20:;
22128  }
22129  if (nr == 63) {
22130  goto L56;
22131  }
22132  goto L555;
22133 L56:
22134 
22135  /* 32 ENTRIES FOR (3220)+(3202) IN TABLE 6, 63 IN ALL: */
22136  /* DATA EXPANDED AND INCLUDE NOW ALL POSSIBLE B-B TRANSITIONS */
22137 
22138  s__1 = nsriup;
22139  for (n = 1; n <= s__1; ++n) {
22140  /* L90: */
22141  rsibb[n - 1] = rsibb[n - 1] / twopic / slit;
22142  }
22143 
22144  *nsol = nsri + 1;
22145  //nsol2 = *nsol + 1;
22146  /* RSI - CONTRIBUTION FOR POSITIVE FREQUENCY SHIFTS */
22147 
22148  s__1 = *nsol;
22149  for (i__ = 1; i__ <= s__1; ++i__) {
22150  /* L22: */
22151  rsi[i__] = rsibb[*nsol - 1 + i__ - 1];
22152  }
22153 
22154  /* PRINT 999, (RSI(I),I=1,NSOL) */
22155  /* L999: */
22156 
22157  return 0;
22158 } /* bound32_ */
22159 
22160 #undef slit
22161 #undef dx
22162 #undef wnrmax3
22163 #undef nsri
22164 #undef ns
22165 #undef nsriup
22166 #undef eb
22167 #undef niv
22168 #undef nlines
22169 #undef rsibb
22170 #undef ldelvi
22171 #undef ivi
22172 #undef ivip
22173 #undef ldelel
22174 #undef ll
22175 #undef llp
22176 
22177 #undef eb_ref
22178 
22179 #define slit (app3a_1.slit)
22180 #define dx (app3a_1.dx)
22181 #define wnrmax3 (app3a_1.wnrmax3)
22182 #define nsri (app3b_1.nsri)
22183 #define ns (app3b_1.ns)
22184 #define nsriup (app3b_1.nsriup)
22185 #define eb (energ_1.eb)
22186 #define niv (energ_1.niv)
22187 #define nlines (dimer_1.nlines)
22188 #define rsibb (bl3_2.rsibb)
22189 
22190 /* Subroutine */ int bound54_(double *temp, double *rsi, int *nsol) {
22191  /* Initialized data */
22192 
22193  // 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,
22194  // 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
22195  // };
22196  static int ivis[54] = {0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 0, 0, 0, 0, 0, 0,
22197  1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3,
22198  0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2};
22199  static int ivips[54] = {0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 1, 1, 1, 1, 1, 1,
22200  2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4,
22201  2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4};
22202  static int ldelels[54] = {
22203  1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, -5, -3, -1, 1, 3, 5,
22204  -5, -3, -1, 1, 3, 5, -5, -3, -1, 1, 3, 5, -5, -3, -1, 1, 3, 5,
22205  -5, -3, -1, 1, 3, 5, -5, -3, -1, 1, 3, 5, -5, -3, -1, 1, 3, 5};
22206  static double as[54] = {
22207  7.9332e-42, 7.8207e-42, 7.7235e-42, 4.5815e-42, 4.4834e-42, 4.4059e-42,
22208  2.173e-42, 2.0824e-42, 2.025e-42, 7.7222e-43, 7.0351e-43, 6.6815e-43,
22209  4.9611e-43, 5.2232e-43, 5.2979e-43, 5.4652e-43, 5.6827e-43, 5.9277e-43,
22210  5.733e-43, 6.062e-43, 6.0862e-43, 6.2104e-43, 6.3809e-43, 6.5698e-43,
22211  3.9501e-43, 4.1599e-43, 4.1033e-43, 4.1097e-43, 4.1339e-43, 4.153e-43,
22212  1.5858e-43, 1.5976e-43, 1.5478e-43, 1.5066e-43, 1.4554e-43, 1.3848e-43,
22213  9.9241e-44, 1.0109e-43, 1.0396e-43, 1.0758e-43, 1.1176e-43, 1.1636e-43,
22214  1.646e-43, 1.647e-43, 1.6617e-43, 1.6837e-43, 1.7085e-43, 1.7327e-43,
22215  1.1797e-43, 1.1593e-43, 1.1405e-43, 1.1174e-43, 1.0853e-43, 1.0401e-43};
22216  static double bs[54] = {
22217  6.12e-4, 6.35e-4, 6.77e-4, .001137, .001201, .001341, .00229, .002449,
22218  .00287, .005426, .005876, .00745, .001, 8.83e-4, 6.09e-4, 3.92e-4,
22219  2.07e-4, 3.7e-5, .001625, .001624, .001305, .001084, 9.27e-4, 8.21e-4,
22220  .002978, .003273, .002994, .002954, .003153, .003668, .005799, .006423,
22221  .006733, .00796, .010937, .019179, .001229, 9.93e-4, 7.67e-4, 5.43e-4,
22222  3.09e-4, 5.1e-5, .002456, .0023, .00221, .002193, .002273, .002506,
22223  .004556, .004825, .005454, .006725, .009431, .016672};
22224  static double twopic = 1.88365183e11;
22225  static double pi = 3.141592654;
22226 
22227  /* System generated locals */
22228  int s__1;
22229  double d__1;
22230 
22231  /* Local variables */
22232  double alfa;
22233  int nnii, ivip;
22234  //int nsol2;
22235  double a, b;
22236  int i__, l, n;
22237  double stoke, stoki, am, pf;
22238  int ll, lp;
22239  double rm;
22240  int nr, ldelel, iv;
22241  //int ldelvi;
22242  double stokip;
22243  int ivi, llp, ivp;
22244  extern double clebsqr_(int *, int *, int *);
22245  extern /* Subroutine */ int profile_(double *, double *);
22246 
22247 #define eb_ref(a_1, a_2) eb[(a_2)*41 + a_1 - 42]
22248 
22249  /* COMMON/APP3/SLIT,DX,NSRI,WNRMAX3,NS,NSRIUP */
22250  /* STORED VALUES */
22251 
22252  /* TKS THIS DATA STRUCTURE HAS 55 ENTRIES AND NOT 54!! */
22253  /* TKS DATA LDELVIS /0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1, */
22254  /* TKS & 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2, */
22255  /* TKS & 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2/ */
22256  /* TKS WE HAVE SSKIPPED THE LAST "2" IN THIS DATA STATEMENT */
22257  /* Parameter adjustments */
22258  --rsi;
22259 
22260  /* Function Body */
22261 
22262  nsri = 190;
22263  wnrmax3 = 47.;
22264  nsriup = (nsri << 1) + 1;
22265  dx = wnrmax3 / (double)nsri;
22266  ns = (int)(slit / dx);
22267 
22268  for (i__ = 1; i__ <= 401; ++i__) {
22269  /* L300: */
22270  rsibb[i__ - 1] = 0.;
22271  }
22272  alfa = 1. / (*temp * .69519);
22273  rm = 2.32498211e-23;
22274  /* RM - REDUCED MASS FOR N2-N2 */
22275 
22276  d__1 = rm * 1.380662e-16 * *temp * 2. * pi / 4.3906208382975998e-53;
22277  pf = pow(d__1, c_b186);
22278  /* SCALE DOWNWARD BY 1.D60 */
22279  pf *= 1e-60;
22280 
22281  nr = 0;
22282 L555:
22283  ++nr;
22284  //ldelvi = ldelvis[nr - 1];
22285  ivi = ivis[nr - 1];
22286  ivip = ivips[nr - 1];
22287  ldelel = ldelels[nr - 1];
22288  a = as[nr - 1];
22289  b = bs[nr - 1];
22290  /* WRITE (6,334) LDELVI,IVI,IVIP, LDELEL,A,B */
22291  /* L334: */
22292  /* LDELVI=DELTA(V)=V'-V */
22293  /* IVI = V */
22294  /* LDELEL = DELTA(L) = L'-L */
22295 
22296  iv = ivi + 1;
22297  ivp = ivip + 1;
22298  nnii = niv[iv - 1];
22299  s__1 = nnii;
22300  for (l = 1; l <= s__1; ++l) {
22301  am = a * exp(-b * (double)(l * (l + 1)));
22302  lp = l + ldelel;
22303  ll = l - 1;
22304  llp = lp - 1;
22305  if (lp > niv[ivp - 1] || lp < 1) {
22306  goto L20;
22307  }
22308  if (eb_ref(lp, ivp) == 0.) {
22309  goto L20;
22310  }
22311  if (eb_ref(l, iv) == 0.) {
22312  goto L20;
22313  }
22314 
22315  stoke = eb_ref(lp, ivp) - eb_ref(l, iv);
22316  stoki = am * exp(-alfa * eb_ref(l, iv)) / pf * (double)((ll << 1) + 1) *
22317  clebsqr_(&ll, &cs__5, &llp);
22318  profile_(&stoke, &stoki);
22319  if (stoki > 0.) {
22320  ++nlines;
22321  }
22322  stokip = am * exp(-alfa * eb_ref(lp, ivp)) / pf * (double)((llp << 1) + 1) *
22323  clebsqr_(&llp, &cs__5, &ll);
22324  d__1 = -stoke;
22325  profile_(&d__1, &stokip);
22326  if (stokip > 0.) {
22327  ++nlines;
22328  }
22329  L20:;
22330  }
22331  if (nr == 54) {
22332  goto L56;
22333  }
22334 
22335  goto L555;
22336 L56:
22337  /* 54 ENTRIES FOR (5440)=(5404) IN TABLE 6 */
22338 
22339  s__1 = nsriup;
22340  for (n = 1; n <= s__1; ++n) {
22341  /* L90: */
22342  rsibb[n - 1] = rsibb[n - 1] / twopic / slit;
22343  }
22344 
22345  *nsol = nsri + 1;
22346  //nsol2 = *nsol + 1;
22347 
22348  s__1 = *nsol;
22349  for (i__ = 1; i__ <= s__1; ++i__) {
22350  /* L22: */
22351  rsi[i__] = rsibb[*nsol - 1 + i__ - 1];
22352  }
22353 
22354  /* PRINT 999, (RSI(I),I=1,NSOL) */
22355  /* L999: */
22356 
22357  return 0;
22358 } /* bound54_ */
22359 
22360 #undef slit
22361 #undef dx
22362 #undef wnrmax3
22363 #undef nsri
22364 #undef ns
22365 #undef nsriup
22366 #undef eb
22367 #undef niv
22368 #undef nlines
22369 #undef rsibb
22370 
22371 #undef eb_ref
22372 
22373 double clebsqr_0_(int n__, int *l, int *lambda, int *lp) {
22374  /* System generated locals */
22375  int s__1, s__2;
22376  double ret_val, d__1;
22377 
22378  /* Local variables */
22379  extern double fctl_(int *);
22380  double f;
22381  int i__;
22382  double p;
22383  int i0, i1;
22384  double fc;
22385 
22386  /* SQUARE OF CLEBSCH-GORDAN COEFFICIENT (L,LAMBDA,0,0;LP,0) */
22387  /* FOR INTEGER ARGUMENTS ONLY */
22388  /* NOTE THAT LAMBDA SHOULD BE SMALL, MAYBE @10 OR SO. */
22389 
22390  switch (n__) {
22391  case 1:
22392  goto L_threej2;
22393  }
22394 
22395  fc = (double)((*lp << 1) + 1);
22396  goto L2;
22397 
22398 L_threej2:
22399  /* THIS ENTRY RETURNS THE SQUARED 3-J SYMBOL L LAMBDA LP */
22400  /* 0 0 0 */
22401  /* INSTEAD OF THE CLEBSCH-GORDAN COEFFICIENT */
22402  /* (LIMITATION TO INTEGER ARGUMENTS ONLY) */
22403 
22404  /* NOTE THAT THE THREE-J SYMBOLS ARE COMPLETELY SYMMETRIC IN THE */
22405  /* ARGUMENTS. IT WOULD BE ADVANTAGEOUS TO REORDER THE INPUT ARGUMENT */
22406  /* LIST SO THAT LAMBDA BECOMES THE SMALLEST OF THE 3 ARGUMENTS. */
22407  fc = 1.;
22408 L2:
22409  ret_val = 0.;
22410  if (*l + *lambda < *lp || *lambda + *lp < *l || *l + *lp < *lambda) {
22411  return ret_val;
22412  }
22413  if ((*l + *lp + *lambda) % 2 != 0) {
22414  return ret_val;
22415  }
22416  if (*l < 0 || *lp < 0 || *lambda < 0) {
22417  return ret_val;
22418  }
22419  f = 1. / (double)(*l + *lp + 1 - *lambda);
22420  if (*lambda == 0) {
22421  goto L22;
22422  }
22423  i1 = (*l + *lp + *lambda) / 2;
22424  i0 = (*l + *lp - *lambda) / 2 + 1;
22425  s__1 = i1;
22426  for (i__ = i0; i__ <= s__1; ++i__) {
22427  /* L20: */
22428  f = f * (double)i__ / (double)(((i__ << 1) + 1) << 1);
22429  }
22430 L22:
22431  s__1 = *lambda + *l - *lp;
22432  s__2 = *lambda + *lp - *l;
22433  p = fc * f * fctl_(&s__1) * fctl_(&s__2);
22434  s__1 = (*lambda + *l - *lp) / 2;
22435  s__2 = (*lambda + *lp - *l) / 2;
22436  /* Computing 2nd power */
22437  d__1 = fctl_(&s__1) * fctl_(&s__2);
22438  ret_val = p / (d__1 * d__1);
22439  return ret_val;
22440 } /* clebsqr_ */
22441 
22442 double clebsqr_(int *l, int *lambda, int *lp) {
22443  return clebsqr_0_(0, l, lambda, lp);
22444 }
22445 
22446 double fctl_(int *n) {
22447  /* System generated locals */
22448  int s__1;
22449  double ret_val, d__1;
22450 
22451  /* Local variables */
22452  int i__, j;
22453  double z__;
22454 
22455  ret_val = 1.;
22456  if (*n <= 1) {
22457  return ret_val;
22458  }
22459  if (*n > 15) {
22460  goto L20;
22461  }
22462  j = 1;
22463  s__1 = *n;
22464  for (i__ = 2; i__ <= s__1; ++i__) {
22465  /* L10: */
22466  j *= i__;
22467  }
22468  ret_val = (double)j;
22469  return ret_val;
22470 L20:
22471  z__ = (double)(*n + 1);
22472  d__1 = z__ - .5;
22473  ret_val =
22474  exp(-z__) * pow(z__, d__1) *
22475  ((((-2.294720936e-4 / z__ - .00268132716) / z__ + .003472222222) / z__ +
22476  .08333333333) /
22477  z__ +
22478  1.) *
22479  2.506628274631;
22480  return ret_val;
22481 } /* fctl_ */
22482 #define ik1k0 (k1k0_1.ik1k0)
22483 
22484 double bgama_(double *fnu,
22485  double *t1,
22486  double *t2,
22487  double *eps,
22488  double *t3,
22489  double *t4,
22490  double *temp) {
22491  /* Initialized data */
22492 
22493  static double pi = 3.1415926535898;
22494  static double clight = 29979245800.;
22495  static double hbar = 1.0545887e-27;
22496  static double boltz = 1.380662e-16;
22497 
22498  /* System generated locals */
22499  double ret_val, d__1, d__2, d__3, d__4;
22500 
22501  /* Local variables */
22502  double omega, z__, k0, t0, bgambc, zp, xk1;
22503 
22504  /* SPECTRAL FUNCTION "EBC", FOR REFERENCE: */
22505  /* SEE "PHENOMENA INDUCED BY INTERMOLECULAR INTERACTIONS", */
22506  /* ED. G. BIRNBAUM; J. BORYSOW AND L. FROMMHOLD, P.67, (1985) */
22507  /* ============================================ */
22508 
22509  /* IF IK1K0=1 ONLY B-C; EBC OTHERWISE */
22510 
22511  omega = 2. * pi * clight * *fnu;
22512  t0 = hbar / (boltz * 2. * *temp);
22513  /* Computing 2nd power */
22514  d__1 = omega * *t1;
22515  z__ = sqrt((d__1 * d__1 + 1.) * (*t2 * *t2 + t0 * t0)) / *t1;
22516  if (z__ - 2. <= 0.) {
22517  goto L10;
22518  } else {
22519  goto L12;
22520  }
22521 L10:
22522  /* Computing 2nd power */
22523  d__2 = z__ / 3.75;
22524  d__1 = d__2 * d__2;
22525  /* Computing 2nd power */
22526  d__4 = z__ / 2.;
22527  d__3 = d__4 * d__4;
22528  xk1 = z__ * z__ * log(z__ / 2.) *
22529  ((((((3.2411e-4 * d__1 + .00301532) * d__1 + .02658733) * d__1 +
22530  .15084934) *
22531  d__1 +
22532  .51498869) *
22533  d__1 +
22534  .87890594) *
22535  d__1 +
22536  .5) +
22537  ((((((-4.686e-5 * d__3 - .00110404) * d__3 - .01919402) * d__3 -
22538  .18156897) *
22539  d__3 -
22540  .67278579) *
22541  d__3 +
22542  .15443144) *
22543  d__3 +
22544  1.);
22545  goto L20;
22546 L12:
22547  d__1 = 2. / z__;
22548  xk1 = sqrt(z__) * exp(-z__) *
22549  ((((((-6.8245e-4 * d__1 + .00325614) * d__1 - .00780353) * d__1 +
22550  .01504268) *
22551  d__1 -
22552  .0365562) *
22553  d__1 +
22554  .23498619) *
22555  d__1 +
22556  1.25331414);
22557 L20:
22558  /* Computing 2nd power */
22559  d__1 = *t1 * omega;
22560  bgambc = *t1 / pi * exp(*t2 / *t1 + t0 * omega) * xk1 / (d__1 * d__1 + 1.);
22561  if (ik1k0 == 1) {
22562  goto L55;
22563  }
22564  /* Computing 2nd power */
22565  d__1 = omega * *t4;
22566  zp = sqrt((d__1 * d__1 + 1.) * (*t3 * *t3 + t0 * t0)) / *t4;
22567  if (zp - 2. <= 0.) {
22568  goto L22;
22569  } else {
22570  goto L24;
22571  }
22572 L22:
22573  /* Computing 2nd power */
22574  d__2 = zp / 3.75;
22575  d__1 = d__2 * d__2;
22576  /* Computing 2nd power */
22577  d__4 = zp / 2.;
22578  d__3 = d__4 * d__4;
22579  k0 = -log(zp / 2.) *
22580  ((((((.0045813 * d__1 + .0360768) * d__1 + .2659732) * d__1 +
22581  1.2067492) *
22582  d__1 +
22583  3.0899424) *
22584  d__1 +
22585  3.5156229) *
22586  d__1 +
22587  1.) +
22588  ((((((7.4e-6 * d__3 + 1.075e-4) * d__3 + .00262698) * d__3 + .0348859) *
22589  d__3 +
22590  .23069756) *
22591  d__3 +
22592  .4227842) *
22593  d__3 -
22594  .57721566);
22595  goto L30;
22596 L24:
22597  d__1 = 2. / zp;
22598  k0 = exp(-zp) *
22599  ((((((5.3208e-4 * d__1 - .0025154) * d__1 + .00587872) * d__1 -
22600  .01062446) *
22601  d__1 +
22602  .02189568) *
22603  d__1 -
22604  .07832358) *
22605  d__1 +
22606  1.25331414) /
22607  sqrt(zp);
22608 L30:
22609  ret_val = (bgambc + *eps * (*t3 / pi) * exp(*t3 / *t4 + t0 * omega) * k0) /
22610  (*eps + 1.);
22611  goto L66;
22612 L55:
22613  ret_val = bgambc;
22614 L66:
22615  return ret_val;
22616 } /* bgama_ */
22617 
22618 #undef ik1k0
22619 
22620 /* Subroutine */ int spline_0_(int n__,
22621  int *l,
22622  int *m,
22623  int *k,
22624  double *eps,
22625  double *x,
22626  double *y,
22627  double *t,
22628  double *ss,
22629  double *si,
22630  int *nr,
22631  double *s2) {
22632  /* System generated locals */
22633  int s__1, s__2;
22634  double d__1, d__2;
22635 
22636  /* Local variables */
22637  double epsi, prod, h__;
22638  int i__, j, n;
22639  double w, omega;
22640  int n1;
22641  double s3;
22642  int ic;
22643  double sm, delsqs, ht1, ht2, ss2, yp1, eta, ypn;
22644 
22645  /* SPLINE INTERPOLATION AND QUADRATURE, THIRD ORDER AFTER GREVILLE. */
22646  /* INPUT ARGUMENTS L...Y, OUTPUT SS...NR. */
22647  /* L DATA POINTS X(1), Y(1) ... X(L),Y(L) */
22648  /* EPS=ERROR CRITERION, TYPICALLY EPS=1.D-5 FOR 5 DECI. PLACES ACCURA */
22649  /* M ARGUMENTS T(1)..T(M) FOR WHICH FUNCTION VALUES SS(1)..SS(M), FOR */
22650  /* K=0; OR FIRST OR SECOND DERIVATIVE FOR K=1 OR -1, RESPECTIVELY. */
22651  /* NOTE THAT M HAS TO BE AT LEAST EQUAL TO 1. */
22652  /* SI=INTEGRAL (OVER WHOLE INTERVAL) FOR K=2 ONLY. */
22653  /* FOR 'NATURAL' SPLINE FUNCTIONS, S2(1)=S2(L)=0. MUST BE INPUT*NOTE* */
22654  /* N0 INDICATES THE NUMBER OF OUT-OF-RANGE CALLS. X(1)<T(I)<X(L) */
22655  /* EXTRAPOLATE WITH CAUTION. (ASSUMPTION D2Y/DX2 = 0.) */
22656  /* S2(I) IS THE 2ND DERIVATIVE AT X=X(I) AND IS COMPUTED INTERNALLY. */
22657  /* DIMENSION X(L),Y(L),T(M),SS(M),S2(L) */
22658 
22659  /* Parameter adjustments */
22660  --x;
22661  --y;
22662  --t;
22663  --ss;
22664  --s2;
22665 
22666  /* Function Body */
22667  switch (n__) {
22668  case 1:
22669  goto L_ixpolat;
22670  }
22671 
22672  n = *l;
22673  n1 = n - 1;
22674  *nr = 0;
22675  /* L4: */
22676  s__1 = n1;
22677  for (i__ = 2; i__ <= s__1; ++i__) {
22678  /* L52: */
22679  s__2 = i__ - 1;
22680  s2[i__] = 3. *
22681  ((y[i__ + 1] - y[i__]) / (x[i__ + 1] - x[i__]) -
22682  (y[s__2 + 1] - y[s__2]) / (x[s__2 + 1] - x[s__2])) /
22683  (x[i__ + 1] - x[i__ - 1]) / 1.5;
22684  }
22685  omega = 1.0717968;
22686  ic = 0;
22687  /* 'NATURAL' SPLINE FUNCTIONS OF THIRD ORDER. */
22688  s2[1] = 0.;
22689  s2[n] = 0.;
22690 L5:
22691  eta = 0.;
22692  ++ic;
22693  sm = abs(s2[1]);
22694  s__2 = n;
22695  for (i__ = 2; i__ <= s__2; ++i__) {
22696  if ((d__1 = s2[i__], abs(d__1)) > sm) {
22697  sm = (d__2 = s2[i__], abs(d__2));
22698  }
22699  /* L25: */
22700  }
22701  epsi = *eps * sm;
22702  /* L6: */
22703  s__2 = n1;
22704  for (i__ = 2; i__ <= s__2; ++i__) {
22705  /* L7: */
22706  s__1 = i__ - 1;
22707  w = (3. *
22708  ((y[i__ + 1] - y[i__]) / (x[i__ + 1] - x[i__]) -
22709  (y[s__1 + 1] - y[s__1]) / (x[s__1 + 1] - x[s__1])) /
22710  (x[i__ + 1] - x[i__ - 1]) -
22711  (x[i__] - x[i__ - 1]) * .5 / (x[i__ + 1] - x[i__ - 1]) * s2[i__ - 1] -
22712  (.5 - (x[i__] - x[i__ - 1]) * .5 / (x[i__ + 1] - x[i__ - 1])) *
22713  s2[i__ + 1] -
22714  s2[i__]) *
22715  omega;
22716  /* L8: */
22717  if (abs(w) - eta <= 0.) {
22718  goto L10;
22719  } else {
22720  goto L9;
22721  }
22722  L9:
22723  eta = abs(w);
22724  L10:
22725  s2[i__] += w;
22726  }
22727  /* L13: */
22728  if (eta - epsi >= 0.) {
22729  goto L5;
22730  } else {
22731  goto L14;
22732  }
22733  /* ENTRY IXPOLAT */
22734 
22735 L_ixpolat:
22736  /* THIS ENTRY USEFUL WHEN ITERATION PREVIOUSLY COMPLETED */
22737 
22738  n = *l;
22739  n1 = n - 1;
22740  *nr = 0;
22741  ic = -1;
22742 L14:
22743  if (*k - 2 != 0) {
22744  goto L15;
22745  } else {
22746  goto L20;
22747  }
22748 L15:
22749  s__2 = *m;
22750  for (j = 1; j <= s__2; ++j) {
22751  /* L16: */
22752  i__ = 1;
22753  /* L54: */
22754  if ((d__1 = t[j] - x[1]) < 0.) {
22755  goto L58;
22756  } else if (d__1 == 0) {
22757  goto L17;
22758  } else {
22759  goto L55;
22760  }
22761  L55:
22762  if ((d__1 = t[j] - x[n]) < 0.) {
22763  goto L57;
22764  } else if (d__1 == 0) {
22765  goto L59;
22766  } else {
22767  goto L158;
22768  }
22769  L56:
22770  if ((d__1 = t[j] - x[i__]) < 0.) {
22771  goto L60;
22772  } else if (d__1 == 0) {
22773  goto L17;
22774  } else {
22775  goto L57;
22776  }
22777  L57:
22778  ++i__;
22779  goto L56;
22780 
22781  L58:
22782  ++(*nr);
22783  ht1 = t[j] - x[1];
22784  //ht2 = t[j] - x[2];
22785  yp1 = (y[cs__1 + 1] - y[cs__1]) / (x[cs__1 + 1] - x[cs__1]) +
22786  (x[1] - x[2]) * (s2[1] * 2. + s2[2]) / 6.;
22787  if (*k < 0) {
22788  goto L72;
22789  } else if (*k == 0) {
22790  goto L70;
22791  } else {
22792  goto L71;
22793  }
22794  L71:
22795  ss[j] = yp1 + ht1 * s2[1];
22796  goto L61;
22797  L70:
22798  ss[j] = y[1] + yp1 * ht1 + s2[1] * ht1 * ht1 / 2.;
22799  goto L61;
22800  L72:
22801  ss[j] = s2[i__];
22802  goto L61;
22803  L158:
22804  ht2 = t[j] - x[n];
22805  //ht1 = t[j] - x[n1];
22806  ++(*nr);
22807  ypn = (y[n1 + 1] - y[n1]) / (x[n1 + 1] - x[n1]) +
22808  (x[n] - x[n1]) * (s2[n1] + s2[n] * 2.) / 6.;
22809  if (*k < 0) {
22810  goto L82;
22811  } else if (*k == 0) {
22812  goto L80;
22813  } else {
22814  goto L81;
22815  }
22816  L81:
22817  ss[j] = ypn + ht2 * s2[n];
22818  goto L61;
22819  L80:
22820  ss[j] = y[n] + ypn * ht2 + s2[n] * ht2 * ht2 / 2.;
22821  goto L61;
22822  L82:
22823  ss[j] = s2[n];
22824  goto L61;
22825 
22826  L59:
22827  i__ = n;
22828  L60:
22829  --i__;
22830  L17:
22831  ht1 = t[j] - x[i__];
22832  ht2 = t[j] - x[i__ + 1];
22833  prod = ht1 * ht2;
22834  s3 = (s2[i__ + 1] - s2[i__]) / (x[i__ + 1] - x[i__]);
22835  ss2 = s2[i__] + ht1 * s3;
22836  delsqs = (s2[i__] + s2[i__ + 1] + ss2) / 6.;
22837 
22838  if (*k < 0) {
22839  goto L43;
22840  } else if (*k == 0) {
22841  goto L41;
22842  } else {
22843  goto L42;
22844  }
22845  L41:
22846  ss[j] = y[i__] + ht1 * ((y[i__ + 1] - y[i__]) / (x[i__ + 1] - x[i__])) +
22847  prod * delsqs;
22848  goto L61;
22849  L42:
22850  ss[j] = (y[i__ + 1] - y[i__]) / (x[i__ + 1] - x[i__]) +
22851  (ht1 + ht2) * delsqs + prod * s3 / 6.;
22852  goto L61;
22853  L43:
22854  ss[j] = ss2;
22855  L61:;
22856  }
22857 L20:
22858  *si = 0.;
22859 
22860  s__2 = n1;
22861  for (i__ = 1; i__ <= s__2; ++i__) {
22862  h__ = x[i__ + 1] - x[i__];
22863  /* L62: */
22864  /* Computing 3rd power */
22865  d__1 = h__;
22866  *si = *si + h__ * .5 * (y[i__] + y[i__ + 1]) -
22867  d__1 * (d__1 * d__1) * (s2[i__] + s2[i__ + 1]) / 24.;
22868  }
22869 
22870  if (*k == 2) {
22871  *nr = ic;
22872  }
22873 
22874  return 0;
22875 } /* spline_ */
22876 
22877 /* Subroutine */ int spline_(int *l,
22878  int *m,
22879  int *k,
22880  double *eps,
22881  double *x,
22882  double *y,
22883  double *t,
22884  double *ss,
22885  double *si,
22886  int *nr,
22887  double *s2) {
22888  return spline_0_(0, l, m, k, eps, x, y, t, ss, si, nr, s2);
22889 }
22890 
22891 /* Subroutine */ int ixpolat_(int *l,
22892  int *m,
22893  int *k,
22894  double *eps,
22895  double *x,
22896  double *y,
22897  double *t,
22898  double *ss,
22899  double *si,
22900  int *nr,
22901  double *s2) {
22902  return spline_0_(1, l, m, k, eps, x, y, t, ss, si, nr, s2);
22903 }
22904 
22905 // ---------------------- end of Borysow N2N2 F77 code -------------------------
22906 
22907 // ---------------------- begin of monortm CKD F77 code -------------------------
22908 
22909 /* Common Block Declarations */
22910 
22911 struct fh2oa_1_ {
22912  double fh2o[2003];
22913 };
22914 
22915 #define fh2oa_1 (*(struct fh2oa_1_ *)&fh2oa_)
22916 
22917 struct fh2ob_1_ {
22918  double v1, v2, dv;
22919  int nptfh2o;
22920 };
22921 struct fh2ob_2_ {
22922  double v1, v2, dv;
22923  int npts;
22924 };
22925 
22926 #define fh2ob_1 (*(struct fh2ob_1_ *)&fh2ob_)
22927 #define fh2ob_2 (*(struct fh2ob_2_ *)&fh2ob_)
22928 
22929 struct sh2oa_1_ {
22930  double swv296[2003];
22931 };
22932 
22933 #define sh2oa_1 (*(struct sh2oa_1_ *)&sh2oa_)
22934 
22935 struct sh2ob_1_ {
22936  double v1, v2, dv;
22938 };
22939 struct sh2ob_2_ {
22940  double v1, v2, dv;
22941  int npts;
22942 };
22943 
22944 #define sh2ob_1 (*(struct sh2ob_1_ *)&sh2ob_)
22945 #define sh2ob_2 (*(struct sh2ob_2_ *)&sh2ob_)
22946 
22947 struct s260a_1_ {
22948  double swv260[2003];
22949 };
22950 
22951 #define s260a_1 (*(struct s260a_1_ *)&s260a_)
22952 
22953 struct s260b_1_ {
22954  double v1___, v2___, dv___;
22956 };
22957 struct s260b_2_ {
22958  double v1, v2, dv;
22959  int npts;
22960 };
22961 
22962 #define s260b_1 (*(struct s260b_1_ *)&s260b_)
22963 #define s260b_2 (*(struct s260b_2_ *)&s260b_)
22964 
22965 struct consts_1_ {
22967 };
22968 
22969 #define consts_1 (*(struct consts_1_ *)&consts_)
22970 
22971 /* Initialized data */
22972 
22973 struct s_fh2oa_ {
22974  double e_1[2003];
22975 } fh2oa_ = {
22976  {.012859, .011715, .011038, .011715, .012859, .015326,
22977  .016999, .018321, .019402, .01957, .019432, .017572,
22978  .01676, .01548, .013984, .012266, .010467, .0094526,
22979  .0080485, .0069484, .0061416, .0050941, .0044836, .0038133,
22980  .0034608, .0031487, .0024555, .0020977, .0017266, .001492,
22981  .0012709, 9.8081e-4, 8.5063e-4, 6.8822e-4, 5.3809e-4, 4.4679e-4,
22982  3.3774e-4, 2.7979e-4, 2.1047e-4, 1.6511e-4, 1.2993e-4, 9.3033e-5,
22983  7.436e-5, 5.6428e-5, 4.5442e-5, 3.4575e-5, 2.7903e-5, 2.1374e-5,
22984  1.6075e-5, 1.3022e-5, 1.0962e-5, 8.5959e-6, 6.9125e-6, 5.3808e-6,
22985  4.3586e-6, 3.6394e-6, 2.9552e-6, 2.3547e-6, 1.8463e-6, 1.6036e-6,
22986  1.3483e-6, 1.1968e-6, 1.0333e-6, 8.4484e-7, 6.7195e-7, 5.0947e-7,
22987  4.2343e-7, 3.4453e-7, 2.783e-7, 2.3063e-7, 1.9951e-7, 1.7087e-7,
22988  1.4393e-7, 1.2575e-7, 1.075e-7, 8.2325e-8, 5.7524e-8, 4.4482e-8,
22989  3.8106e-8, 3.4315e-8, 2.9422e-8, 2.5069e-8, 2.2402e-8, 1.9349e-8,
22990  1.6152e-8, 1.2208e-8, 8.966e-9, 7.1322e-9, 6.1028e-9, 5.2938e-9,
22991  4.535e-9, 3.4977e-9, 2.9511e-9, 2.4734e-9, 2.0508e-9, 1.8507e-9,
22992  1.6373e-9, 1.5171e-9, 1.3071e-9, 1.2462e-9, 1.2148e-9, 1.259e-9,
22993  1.3153e-9, 1.3301e-9, 1.4483e-9, 1.6944e-9, 2.0559e-9, 2.2954e-9,
22994  2.6221e-9, 3.2606e-9, 4.2392e-9, 5.2171e-9, 6.2553e-9, 8.2548e-9,
22995  9.5842e-9, 1.128e-8, 1.3628e-8, 1.7635e-8, 2.1576e-8, 2.4835e-8,
22996  3.0014e-8, 3.8485e-8, 4.744e-8, 5.5202e-8, 7.0897e-8, 9.6578e-8,
22997  1.3976e-7, 1.8391e-7, 2.3207e-7, 2.996e-7, 4.0408e-7, 5.926e-7,
22998  7.8487e-7, 1.0947e-6, 1.4676e-6, 1.9325e-6, 2.6587e-6, 3.4534e-6,
22999  4.4376e-6, 5.8061e-6, 7.0141e-6, 8.4937e-6, 1.0186e-5, 1.2034e-5,
23000  1.3837e-5, 1.6595e-5, 1.9259e-5, 2.162e-5, 2.3681e-5, 2.7064e-5,
23001  3.251e-5, 3.546e-5, 3.9109e-5, 4.2891e-5, 4.7757e-5, 5.0981e-5,
23002  5.0527e-5, 4.8618e-5, 4.4001e-5, 3.7982e-5, 3.2667e-5, 2.7794e-5,
23003  2.491e-5, 2.4375e-5, 2.7316e-5, 3.2579e-5, 3.5499e-5, 3.801e-5,
23004  4.1353e-5, 4.3323e-5, 4.3004e-5, 3.979e-5, 3.7718e-5, 3.636e-5,
23005  3.2386e-5, 2.7409e-5, 2.3626e-5, 2.0631e-5, 1.8371e-5, 1.5445e-5,
23006  1.2989e-5, 1.1098e-5, 9.6552e-6, 8.0649e-6, 7.2365e-6, 5.9137e-6,
23007  5.2759e-6, 4.886e-6, 4.1321e-6, 3.5918e-6, 2.764e-6, 2.4892e-6,
23008  2.1018e-6, 1.7848e-6, 1.5855e-6, 1.3569e-6, 1.1986e-6, 9.4693e-7,
23009  7.4097e-7, 6.3443e-7, 4.8131e-7, 4.0942e-7, 3.3316e-7, 2.8488e-7,
23010  2.3461e-7, 1.7397e-7, 1.4684e-7, 1.0953e-7, 8.5396e-8, 6.9261e-8,
23011  5.4001e-8, 4.543e-8, 3.2791e-8, 2.5995e-8, 2.0225e-8, 1.571e-8,
23012  1.3027e-8, 1.0229e-8, 8.5277e-9, 6.5249e-9, 5.0117e-9, 3.9906e-9,
23013  3.2332e-9, 2.7847e-9, 2.457e-9, 2.3359e-9, 2.0599e-9, 1.8436e-9,
23014  1.6559e-9, 1.491e-9, 1.2794e-9, 9.8229e-10, 8.0054e-10, 6.0769e-10,
23015  4.5646e-10, 3.3111e-10, 2.4428e-10, 1.8007e-10, 1.3291e-10, 9.7974e-11,
23016  7.8271e-11, 6.3833e-11, 5.4425e-11, 4.6471e-11, 4.0209e-11, 3.5227e-11,
23017  3.1212e-11, 2.884e-11, 2.7762e-11, 2.7935e-11, 3.2012e-11, 3.9525e-11,
23018  5.0303e-11, 6.8027e-11, 9.3954e-11, 1.2986e-10, 1.8478e-10, 2.5331e-10,
23019  3.4827e-10, 4.6968e-10, 6.238e-10, 7.9106e-10, 1.0026e-9, 1.2102e-9,
23020  1.4146e-9, 1.6154e-9, 1.751e-9, 1.8575e-9, 1.8742e-9, 1.87e-9,
23021  1.8582e-9, 1.9657e-9, 2.1204e-9, 2.0381e-9, 2.0122e-9, 2.0436e-9,
23022  2.1213e-9, 2.0742e-9, 1.987e-9, 2.0465e-9, 2.1556e-9, 2.2222e-9,
23023  2.1977e-9, 2.1047e-9, 1.9334e-9, 1.7357e-9, 1.5754e-9, 1.4398e-9,
23024  1.4018e-9, 1.5459e-9, 1.7576e-9, 2.1645e-9, 2.948e-9, 4.4439e-9,
23025  5.8341e-9, 8.0757e-9, 1.1658e-8, 1.6793e-8, 2.2694e-8, 2.9468e-8,
23026  3.9278e-8, 5.2145e-8, 6.4378e-8, 7.7947e-8, 8.5321e-8, 9.7848e-8,
23027  1.0999e-7, 1.1489e-7, 1.2082e-7, 1.2822e-7, 1.4053e-7, 1.5238e-7,
23028  1.5454e-7, 1.5018e-7, 1.4048e-7, 1.2359e-7, 1.0858e-7, 9.3486e-8,
23029  8.1638e-8, 7.769e-8, 8.4625e-8, 1.0114e-7, 1.143e-7, 1.2263e-7,
23030  1.3084e-7, 1.338e-7, 1.3573e-7, 1.3441e-7, 1.2962e-7, 1.2638e-7,
23031  1.1934e-7, 1.1371e-7, 1.0871e-7, 9.8843e-8, 9.1877e-8, 9.105e-8,
23032  9.3213e-8, 9.2929e-8, 1.0155e-7, 1.1263e-7, 1.237e-7, 1.3636e-7,
23033  1.54e-7, 1.7656e-7, 2.1329e-7, 2.3045e-7, 2.5811e-7, 2.9261e-7,
23034  3.4259e-7, 4.077e-7, 4.8771e-7, 5.8081e-7, 7.2895e-7, 8.7482e-7,
23035  1.0795e-6, 1.3384e-6, 1.7208e-6, 2.0677e-6, 2.5294e-6, 3.1123e-6,
23036  3.79e-6, 4.7752e-6, 5.6891e-6, 6.6261e-6, 7.6246e-6, 8.773e-6,
23037  9.6672e-6, 1.098e-5, 1.1287e-5, 1.167e-5, 1.1635e-5, 1.1768e-5,
23038  1.2039e-5, 1.2253e-5, 1.3294e-5, 1.4005e-5, 1.3854e-5, 1.342e-5,
23039  1.3003e-5, 1.2645e-5, 1.1715e-5, 1.1258e-5, 1.1516e-5, 1.2494e-5,
23040  1.3655e-5, 1.4931e-5, 1.4649e-5, 1.3857e-5, 1.312e-5, 1.1791e-5,
23041  1.0637e-5, 8.276e-6, 6.5821e-6, 5.1959e-6, 4.0158e-6, 3.0131e-6,
23042  2.0462e-6, 1.4853e-6, 1.0365e-6, 7.3938e-7, 4.9752e-7, 3.4148e-7,
23043  2.4992e-7, 1.8363e-7, 1.4591e-7, 1.138e-7, 9.0588e-8, 7.3697e-8,
23044  6.0252e-8, 5.1868e-8, 4.266e-8, 3.6163e-8, 3.2512e-8, 2.9258e-8,
23045  2.4238e-8, 2.1209e-8, 1.6362e-8, 1.3871e-8, 1.2355e-8, 9.694e-9,
23046  7.7735e-9, 6.2278e-9, 5.2282e-9, 4.3799e-9, 3.5545e-9, 2.7527e-9,
23047  2.095e-9, 1.6344e-9, 1.2689e-9, 1.0403e-9, 8.488e-10, 6.3461e-10,
23048  4.7657e-10, 3.522e-10, 2.7879e-10, 2.3021e-10, 1.6167e-10, 1.1732e-10,
23049  8.9206e-11, 7.0596e-11, 5.831e-11, 4.4084e-11, 3.1534e-11, 2.5068e-11,
23050  2.2088e-11, 2.2579e-11, 2.2637e-11, 2.5705e-11, 3.2415e-11, 4.6116e-11,
23051  6.5346e-11, 9.4842e-11, 1.2809e-10, 1.8211e-10, 2.4052e-10, 3.027e-10,
23052  3.5531e-10, 4.2402e-10, 4.673e-10, 4.7942e-10, 4.6813e-10, 4.5997e-10,
23053  4.5788e-10, 4.0311e-10, 3.7367e-10, 3.3149e-10, 2.9281e-10, 2.5231e-10,
23054  2.1152e-10, 1.9799e-10, 1.8636e-10, 1.9085e-10, 2.0786e-10, 2.2464e-10,
23055  2.3785e-10, 2.5684e-10, 2.7499e-10, 2.6962e-10, 2.6378e-10, 2.6297e-10,
23056  2.6903e-10, 2.7035e-10, 2.5394e-10, 2.5655e-10, 2.7184e-10, 2.9013e-10,
23057  3.0585e-10, 3.0791e-10, 3.1667e-10, 3.4343e-10, 3.7365e-10, 4.0269e-10,
23058  4.726e-10, 5.6584e-10, 6.9791e-10, 8.6569e-10, 1.0393e-9, 1.2067e-9,
23059  1.5047e-9, 1.8583e-9, 2.2357e-9, 2.6498e-9, 3.2483e-9, 3.9927e-9,
23060  4.6618e-9, 5.5555e-9, 6.6609e-9, 8.2139e-9, 1.0285e-8, 1.3919e-8,
23061  1.8786e-8, 2.515e-8, 3.313e-8, 4.5442e-8, 6.337e-8, 9.0628e-8,
23062  1.2118e-7, 1.5927e-7, 2.1358e-7, 2.7825e-7, 3.7671e-7, 4.4894e-7,
23063  5.4442e-7, 6.224e-7, 7.3004e-7, 8.3384e-7, 8.7933e-7, 8.808e-7,
23064  8.6939e-7, 8.6541e-7, 8.2055e-7, 7.7278e-7, 7.5989e-7, 8.6909e-7,
23065  9.7945e-7, 1.0394e-6, 1.0646e-6, 1.1509e-6, 1.2017e-6, 1.1915e-6,
23066  1.1259e-6, 1.1549e-6, 1.1938e-6, 1.2356e-6, 1.2404e-6, 1.1716e-6,
23067  1.1149e-6, 1.0073e-6, 8.9845e-7, 7.6639e-7, 6.1517e-7, 5.0887e-7,
23068  4.1269e-7, 3.2474e-7, 2.5698e-7, 1.8893e-7, 1.4009e-7, 1.034e-7,
23069  7.7724e-8, 5.7302e-8, 4.2178e-8, 2.9603e-8, 2.1945e-8, 1.6301e-8,
23070  1.2806e-8, 1.0048e-8, 7.897e-9, 6.1133e-9, 4.9054e-9, 4.1985e-9,
23071  3.6944e-9, 3.2586e-9, 2.7362e-9, 2.3647e-9, 2.1249e-9, 1.8172e-9,
23072  1.6224e-9, 1.5158e-9, 1.2361e-9, 1.0682e-9, 9.2312e-10, 7.922e-10,
23073  6.8174e-10, 5.6147e-10, 4.8268e-10, 4.1534e-10, 3.3106e-10, 2.8275e-10,
23074  2.4584e-10, 2.0742e-10, 1.784e-10, 1.4664e-10, 1.239e-10, 1.0497e-10,
23075  8.5038e-11, 6.7008e-11, 5.6355e-11, 4.3323e-11, 3.6914e-11, 3.2262e-11,
23076  3.0749e-11, 3.0318e-11, 2.9447e-11, 2.9918e-11, 3.0668e-11, 3.1315e-11,
23077  3.0329e-11, 2.8259e-11, 2.6065e-11, 2.3578e-11, 2.0469e-11, 1.6908e-11,
23078  1.4912e-11, 1.1867e-11, 9.973e-12, 8.1014e-12, 6.7528e-12, 6.3133e-12,
23079  5.8599e-12, 6.0145e-12, 6.5105e-12, 7.0537e-12, 7.4973e-12, 7.8519e-12,
23080  8.5039e-12, 9.1995e-12, 1.0694e-11, 1.1659e-11, 1.2685e-11, 1.3087e-11,
23081  1.3222e-11, 1.2634e-11, 1.1077e-11, 9.6259e-12, 8.3202e-12, 7.4857e-12,
23082  6.8069e-12, 6.7496e-12, 7.3116e-12, 8.0171e-12, 8.6394e-12, 9.2659e-12,
23083  1.0048e-11, 1.0941e-11, 1.2226e-11, 1.3058e-11, 1.5193e-11, 1.8923e-11,
23084  2.3334e-11, 2.8787e-11, 3.6693e-11, 4.8295e-11, 6.426e-11, 8.8269e-11,
23085  1.1865e-10, 1.5961e-10, 2.0605e-10, 2.7349e-10, 3.7193e-10, 4.8216e-10,
23086  6.1966e-10, 7.715e-10, 1.0195e-9, 1.2859e-9, 1.6535e-9, 2.0316e-9,
23087  2.3913e-9, 3.0114e-9, 3.7495e-9, 4.6504e-9, 5.9145e-9, 7.684e-9,
23088  1.0304e-8, 1.301e-8, 1.6441e-8, 2.1475e-8, 2.5892e-8, 2.9788e-8,
23089  3.382e-8, 4.0007e-8, 4.4888e-8, 4.5765e-8, 4.6131e-8, 4.6239e-8,
23090  4.4849e-8, 4.0729e-8, 3.6856e-8, 3.6164e-8, 3.7606e-8, 4.1457e-8,
23091  4.375e-8, 5.115e-8, 5.6054e-8, 6.1586e-8, 6.4521e-8, 6.6494e-8,
23092  6.9024e-8, 6.8893e-8, 7.0901e-8, 6.976e-8, 7.1485e-8, 7.074e-8,
23093  7.3764e-8, 7.6618e-8, 8.4182e-8, 9.3838e-8, 1.0761e-7, 1.2851e-7,
23094  1.4748e-7, 1.8407e-7, 2.2109e-7, 2.6392e-7, 2.9887e-7, 3.4493e-7,
23095  4.0336e-7, 4.3551e-7, 4.9231e-7, 5.0728e-7, 5.3781e-7, 5.3285e-7,
23096  5.4496e-7, 5.5707e-7, 5.6944e-7, 6.1123e-7, 6.4317e-7, 6.4581e-7,
23097  6.1999e-7, 6.0191e-7, 5.7762e-7, 5.7241e-7, 5.7013e-7, 6.016e-7,
23098  6.6905e-7, 7.4095e-7, 8.2121e-7, 8.0947e-7, 7.6145e-7, 7.2193e-7,
23099  6.3722e-7, 5.4316e-7, 4.2186e-7, 3.2528e-7, 2.5207e-7, 1.8213e-7,
23100  1.2658e-7, 8.6746e-8, 6.0216e-8, 4.1122e-8, 2.8899e-8, 2.174e-8,
23101  1.799e-8, 1.5593e-8, 1.397e-8, 1.2238e-8, 1.0539e-8, 9.2386e-9,
23102  7.8481e-9, 6.8704e-9, 5.7615e-9, 5.0434e-9, 4.6886e-9, 4.377e-9,
23103  3.9768e-9, 3.5202e-9, 3.1854e-9, 2.9009e-9, 2.5763e-9, 2.2135e-9,
23104  1.9455e-9, 1.6248e-9, 1.3368e-9, 1.0842e-9, 8.4254e-10, 6.7414e-10,
23105  5.4667e-10, 4.5005e-10, 3.4932e-10, 2.6745e-10, 2.2053e-10, 1.8162e-10,
23106  1.4935e-10, 1.1618e-10, 9.1888e-11, 8.0672e-11, 6.8746e-11, 6.2668e-11,
23107  5.5715e-11, 4.5074e-11, 3.7669e-11, 3.2082e-11, 2.8085e-11, 2.4838e-11,
23108  1.9791e-11, 1.6964e-11, 1.3887e-11, 1.1179e-11, 9.7499e-12, 7.8255e-12,
23109  6.3698e-12, 5.3265e-12, 4.6588e-12, 4.4498e-12, 3.9984e-12, 3.7513e-12,
23110  3.7176e-12, 3.9148e-12, 4.2702e-12, 5.009e-12, 6.5801e-12, 8.7787e-12,
23111  1.2718e-11, 1.8375e-11, 2.5304e-11, 3.5403e-11, 4.8842e-11, 6.484e-11,
23112  8.0911e-11, 1.0136e-10, 1.2311e-10, 1.4203e-10, 1.5869e-10, 1.8093e-10,
23113  2.137e-10, 2.5228e-10, 2.8816e-10, 3.4556e-10, 3.986e-10, 4.435e-10,
23114  4.776e-10, 5.2357e-10, 6.0827e-10, 6.3635e-10, 6.5886e-10, 6.8753e-10,
23115  7.2349e-10, 7.2789e-10, 6.8232e-10, 6.6081e-10, 6.4232e-10, 6.3485e-10,
23116  6.4311e-10, 7.2235e-10, 7.7263e-10, 8.1668e-10, 9.0324e-10, 9.7643e-10,
23117  1.0535e-9, 1.0195e-9, 1.0194e-9, 1.0156e-9, 9.6792e-10, 9.2725e-10,
23118  8.7347e-10, 8.4484e-10, 8.2647e-10, 8.4363e-10, 9.1261e-10, 1.0051e-9,
23119  1.1511e-9, 1.4037e-9, 1.8066e-9, 2.4483e-9, 3.2739e-9, 4.3194e-9,
23120  5.6902e-9, 7.7924e-9, 9.7376e-9, 1.2055e-8, 1.4303e-8, 1.6956e-8,
23121  1.9542e-8, 2.2233e-8, 2.5186e-8, 2.7777e-8, 2.8943e-8, 2.8873e-8,
23122  2.9417e-8, 2.7954e-8, 2.7524e-8, 2.704e-8, 3.1254e-8, 3.6843e-8,
23123  3.7797e-8, 3.8713e-8, 4.0135e-8, 4.2824e-8, 4.3004e-8, 4.0279e-8,
23124  4.2781e-8, 4.522e-8, 4.8948e-8, 5.0172e-8, 4.8499e-8, 4.7182e-8,
23125  4.2204e-8, 3.7701e-8, 3.0972e-8, 2.4654e-8, 1.9543e-8, 1.4609e-8,
23126  1.1171e-8, 8.3367e-9, 6.3791e-9, 5.079e-9, 4.0655e-9, 3.3658e-9,
23127  2.7882e-9, 2.4749e-9, 2.2287e-9, 2.0217e-9, 1.8191e-9, 1.5897e-9,
23128  1.4191e-9, 1.2448e-9, 1.0884e-9, 9.3585e-10, 7.9429e-10, 7.3214e-10,
23129  6.5008e-10, 5.7549e-10, 5.43e-10, 4.7251e-10, 4.3451e-10, 3.8446e-10,
23130  3.5589e-10, 3.4432e-10, 2.8209e-10, 2.462e-10, 2.1278e-10, 1.8406e-10,
23131  1.6314e-10, 1.3261e-10, 1.1696e-10, 9.6865e-11, 7.6814e-11, 6.6411e-11,
23132  5.0903e-11, 4.0827e-11, 3.0476e-11, 2.323e-11, 1.7707e-11, 1.3548e-11,
23133  1.0719e-11, 9.3026e-12, 8.7967e-12, 8.3136e-12, 7.3918e-12, 6.5293e-12,
23134  5.9243e-12, 5.3595e-12, 3.5266e-12, 2.2571e-12, 1.615e-12, 1.1413e-12,
23135  8.4998e-13, 7.0803e-13, 5.1747e-13, 4.0694e-13, 3.6528e-13, 3.367e-13,
23136  3.1341e-13, 2.939e-13, 2.868e-13, 3.1283e-13, 3.7294e-13, 5.0194e-13,
23137  6.7919e-13, 1.0455e-12, 1.523e-12, 2.3932e-12, 3.4231e-12, 5.0515e-12,
23138  7.3193e-12, 9.9406e-12, 1.2193e-11, 1.4742e-11, 1.9269e-11, 2.1816e-11,
23139  2.275e-11, 2.2902e-11, 2.3888e-11, 2.4902e-11, 2.216e-11, 2.0381e-11,
23140  1.9903e-11, 2.0086e-11, 1.9304e-11, 2.0023e-11, 2.2244e-11, 2.545e-11,
23141  3.1228e-11, 3.456e-11, 3.6923e-11, 3.7486e-11, 3.8124e-11, 3.8317e-11,
23142  3.4737e-11, 3.3037e-11, 3.1724e-11, 2.984e-11, 2.8301e-11, 2.5857e-11,
23143  2.3708e-11, 1.9452e-11, 1.6232e-11, 1.5174e-11, 1.4206e-11, 1.4408e-11,
23144  1.5483e-11, 1.8642e-11, 2.3664e-11, 3.0181e-11, 4.016e-11, 5.2287e-11,
23145  7.2754e-11, 1.0511e-10, 1.4531e-10, 2.0998e-10, 2.6883e-10, 3.3082e-10,
23146  4.2638e-10, 5.3132e-10, 6.3617e-10, 7.1413e-10, 8.5953e-10, 9.9715e-10,
23147  1.0796e-9, 1.0978e-9, 1.1052e-9, 1.1095e-9, 1.0641e-9, 9.7881e-10,
23148  9.659e-10, 1.0332e-9, 1.1974e-9, 1.3612e-9, 1.5829e-9, 1.8655e-9,
23149  2.1465e-9, 2.4779e-9, 2.737e-9, 2.9915e-9, 3.3037e-9, 3.6347e-9,
23150  3.9587e-9, 4.4701e-9, 5.0122e-9, 5.8044e-9, 6.1916e-9, 6.9613e-9,
23151  7.7863e-9, 8.282e-9, 9.4359e-9, 9.7387e-9, 1.0656e-8, 1.0746e-8,
23152  1.121e-8, 1.1905e-8, 1.2194e-8, 1.3145e-8, 1.3738e-8, 1.3634e-8,
23153  1.3011e-8, 1.2511e-8, 1.1805e-8, 1.2159e-8, 1.239e-8, 1.3625e-8,
23154  1.5678e-8, 1.7886e-8, 1.9933e-8, 1.9865e-8, 1.9e-8, 1.7812e-8,
23155  1.5521e-8, 1.2593e-8, 9.5635e-9, 7.2987e-9, 5.2489e-9, 3.5673e-9,
23156  2.4206e-9, 1.6977e-9, 1.2456e-9, 9.3744e-10, 7.8379e-10, 6.996e-10,
23157  6.6451e-10, 6.8521e-10, 7.4234e-10, 8.6658e-10, 9.4972e-10, 1.0791e-9,
23158  1.2359e-9, 1.3363e-9, 1.5025e-9, 1.5368e-9, 1.6152e-9, 1.6184e-9,
23159  1.6557e-9, 1.7035e-9, 1.6916e-9, 1.7237e-9, 1.7175e-9, 1.6475e-9,
23160  1.5335e-9, 1.4272e-9, 1.3282e-9, 1.3459e-9, 1.4028e-9, 1.5192e-9,
23161  1.7068e-9, 1.9085e-9, 2.1318e-9, 2.102e-9, 1.9942e-9, 1.8654e-9,
23162  1.6391e-9, 1.3552e-9, 1.0186e-9, 7.854e-10, 5.7022e-10, 3.9247e-10,
23163  2.5441e-10, 1.6699e-10, 1.1132e-10, 6.8989e-11, 4.5255e-11, 3.1106e-11,
23164  2.3161e-11, 1.7618e-11, 1.438e-11, 1.1601e-11, 9.7148e-12, 8.4519e-12,
23165  6.5392e-12, 5.4113e-12, 4.7624e-12, 4.0617e-12, 3.6173e-12, 2.8608e-12,
23166  2.2724e-12, 1.7436e-12, 1.3424e-12, 1.0358e-12, 7.3064e-13, 5.45e-13,
23167  4.0551e-13, 2.8642e-13, 2.1831e-13, 1.686e-13, 1.2086e-13, 1.015e-13,
23168  9.355e-14, 8.4105e-14, 7.3051e-14, 6.9796e-14, 7.9949e-14, 1.0742e-13,
23169  1.5639e-13, 2.1308e-13, 3.1226e-13, 4.6853e-13, 6.6917e-13, 1.0088e-12,
23170  1.4824e-12, 2.2763e-12, 3.3917e-12, 4.4585e-12, 6.3187e-12, 8.4189e-12,
23171  1.1302e-11, 1.3431e-11, 1.5679e-11, 1.9044e-11, 2.2463e-11, 2.3605e-11,
23172  2.3619e-11, 2.3505e-11, 2.3805e-11, 2.2549e-11, 1.9304e-11, 1.8382e-11,
23173  1.7795e-11, 1.8439e-11, 1.9146e-11, 2.1966e-11, 2.6109e-11, 3.1883e-11,
23174  3.7872e-11, 4.3966e-11, 4.8789e-11, 5.3264e-11, 5.9705e-11, 6.3744e-11,
23175  7.0163e-11, 7.9114e-11, 8.8287e-11, 9.9726e-11, 1.1498e-10, 1.37e-10,
23176  1.6145e-10, 1.9913e-10, 2.2778e-10, 2.6216e-10, 2.977e-10, 3.3405e-10,
23177  3.7821e-10, 3.9552e-10, 4.1322e-10, 4.0293e-10, 4.0259e-10, 3.8853e-10,
23178  3.7842e-10, 3.8551e-10, 4.4618e-10, 5.0527e-10, 5.0695e-10, 5.1216e-10,
23179  5.193e-10, 5.5794e-10, 5.332e-10, 5.2008e-10, 5.6888e-10, 6.1883e-10,
23180  6.9006e-10, 6.9505e-10, 6.6768e-10, 6.329e-10, 5.6753e-10, 5.0327e-10,
23181  3.983e-10, 3.1147e-10, 2.4416e-10, 1.886e-10, 1.3908e-10, 9.9156e-11,
23182  7.3779e-11, 5.6048e-11, 4.2457e-11, 3.4505e-11, 2.9881e-11, 2.7865e-11,
23183  2.8471e-11, 3.1065e-11, 3.4204e-11, 3.914e-11, 4.3606e-11, 4.9075e-11,
23184  5.3069e-11, 5.5236e-11, 5.5309e-11, 5.3832e-11, 5.3183e-11, 5.1783e-11,
23185  5.2042e-11, 5.4422e-11, 5.5656e-11, 5.4409e-11, 5.2659e-11, 5.1696e-11,
23186  5.1726e-11, 4.9003e-11, 4.905e-11, 5.17e-11, 5.6818e-11, 6.3129e-11,
23187  6.6542e-11, 6.4367e-11, 5.9908e-11, 5.447e-11, 4.7903e-11, 3.9669e-11,
23188  2.9651e-11, 2.2286e-11, 1.6742e-11, 1.1827e-11, 7.7739e-12, 4.8805e-12,
23189  3.1747e-12, 2.0057e-12, 1.255e-12, 8.7434e-13, 6.2755e-13, 4.9752e-13,
23190  4.0047e-13, 3.5602e-13, 3.093e-13, 2.4903e-13, 1.9316e-13, 1.4995e-13,
23191  1.2059e-13, 8.7242e-14, 6.4511e-14, 5.33e-14, 4.3741e-14, 3.4916e-14,
23192  2.656e-14, 1.6923e-14, 1.1816e-14, 6.7071e-15, 3.6474e-15, 2.0686e-15,
23193  1.1925e-15, 6.8948e-16, 3.9661e-16, 2.2576e-16, 1.2669e-16, 6.9908e-17,
23194  3.7896e-17, 2.028e-17, 1.1016e-17, 6.7816e-18, 6.0958e-18, 8.9913e-18,
23195  1.7201e-17, 3.4964e-17, 7.0722e-17, 1.402e-16, 2.7167e-16, 5.1478e-16,
23196  9.55e-16, 1.7376e-15, 3.1074e-15, 5.4789e-15, 9.564e-15, 1.6635e-14,
23197  2.9145e-14, 5.2179e-14, 8.8554e-14, 1.4764e-13, 2.3331e-13, 3.5996e-13,
23198  5.2132e-13, 6.3519e-13, 7.3174e-13, 8.3752e-13, 9.8916e-13, 1.1515e-12,
23199  1.4034e-12, 1.6594e-12, 2.1021e-12, 2.7416e-12, 3.4135e-12, 4.5517e-12,
23200  5.5832e-12, 7.2303e-12, 9.9484e-12, 1.2724e-11, 1.6478e-11, 2.0588e-11,
23201  2.5543e-11, 3.3625e-11, 4.1788e-11, 5.0081e-11, 6.0144e-11, 6.9599e-11,
23202  8.4408e-11, 9.7143e-11, 1.0805e-10, 1.1713e-10, 1.2711e-10, 1.3727e-10,
23203  1.4539e-10, 1.6049e-10, 1.768e-10, 2.0557e-10, 2.4967e-10, 3.0096e-10,
23204  3.5816e-10, 4.0851e-10, 4.6111e-10, 5.2197e-10, 5.5043e-10, 6.0324e-10,
23205  6.4983e-10, 6.7498e-10, 7.0545e-10, 7.068e-10, 7.5218e-10, 7.5723e-10,
23206  7.784e-10, 8.0081e-10, 8.0223e-10, 7.7271e-10, 7.1676e-10, 6.7819e-10,
23207  6.4753e-10, 6.5844e-10, 7.0163e-10, 7.7503e-10, 8.8152e-10, 9.9022e-10,
23208  1.0229e-9, 9.9296e-10, 8.9911e-10, 7.7813e-10, 6.3785e-10, 4.7491e-10,
23209  3.528e-10, 2.4349e-10, 1.6502e-10, 1.1622e-10, 8.6715e-11, 6.736e-11,
23210  5.391e-11, 4.5554e-11, 4.13e-11, 3.9728e-11, 3.9e-11, 3.9803e-11,
23211  4.1514e-11, 4.3374e-11, 4.6831e-11, 4.8921e-11, 5.1995e-11, 5.7242e-11,
23212  6.2759e-11, 7.0801e-11, 7.4555e-11, 7.9754e-11, 8.7616e-11, 9.1171e-11,
23213  1.0349e-10, 1.1047e-10, 1.2024e-10, 1.299e-10, 1.3725e-10, 1.5005e-10,
23214  1.5268e-10, 1.5535e-10, 1.5623e-10, 1.5009e-10, 1.4034e-10, 1.3002e-10,
23215  1.2225e-10, 1.1989e-10, 1.2411e-10, 1.3612e-10, 1.5225e-10, 1.7202e-10,
23216  1.9471e-10, 1.9931e-10, 1.9079e-10, 1.7478e-10, 1.5259e-10, 1.2625e-10,
23217  9.3332e-11, 6.8796e-11, 4.6466e-11, 2.9723e-11, 1.8508e-11, 1.2106e-11,
23218  8.0142e-12, 5.4066e-12, 3.9329e-12, 3.1665e-12, 2.742e-12, 2.3996e-12,
23219  2.3804e-12, 2.3242e-12, 2.4476e-12, 2.5331e-12, 2.3595e-12, 2.2575e-12,
23220  2.1298e-12, 2.0088e-12, 1.8263e-12, 1.6114e-12, 1.4422e-12, 1.2946e-12,
23221  1.0837e-12, 9.1282e-13, 7.2359e-13, 5.3307e-13, 3.8837e-13, 2.6678e-13,
23222  1.6769e-13, 1.0826e-13, 7.2364e-14, 4.5201e-14, 3.0808e-14, 2.2377e-14,
23223  1.704e-14, 9.2181e-15, 5.2934e-15, 3.5774e-15, 3.1431e-15, 3.7647e-15,
23224  5.6428e-15, 9.5139e-15, 1.7322e-14, 2.8829e-14, 4.7708e-14, 6.9789e-14,
23225  9.7267e-14, 1.4662e-13, 1.9429e-13, 2.5998e-13, 3.6636e-13, 4.796e-13,
23226  6.5129e-13, 7.7638e-13, 9.3774e-13, 1.1467e-12, 1.3547e-12, 1.5686e-12,
23227  1.6893e-12, 1.9069e-12, 2.1352e-12, 2.3071e-12, 2.4759e-12, 2.8247e-12,
23228  3.4365e-12, 4.3181e-12, 5.6107e-12, 7.0017e-12, 8.6408e-12, 1.0974e-11,
23229  1.3742e-11, 1.6337e-11, 2.0157e-11, 2.3441e-11, 2.6733e-11, 3.0247e-11,
23230  3.3737e-11, 3.8618e-11, 4.1343e-11, 4.387e-11, 4.4685e-11, 4.4881e-11,
23231  4.5526e-11, 4.3628e-11, 4.4268e-11, 4.6865e-11, 5.3426e-11, 5.402e-11,
23232  5.3218e-11, 5.4587e-11, 5.636e-11, 5.774e-11, 5.6426e-11, 6.0399e-11,
23233  6.6981e-11, 7.4319e-11, 7.7977e-11, 7.5539e-11, 7.161e-11, 6.4606e-11,
23234  5.5498e-11, 4.3944e-11, 3.3769e-11, 2.5771e-11, 1.9162e-11, 1.3698e-11,
23235  1.0173e-11, 7.8925e-12, 6.1938e-12, 4.7962e-12, 4.0811e-12, 3.3912e-12,
23236  2.8625e-12, 2.4504e-12, 2.2188e-12, 2.2139e-12, 2.2499e-12, 2.2766e-12,
23237  2.3985e-12, 2.5459e-12, 2.9295e-12, 3.4196e-12, 3.6155e-12, 4.0733e-12,
23238  4.461e-12, 4.9372e-12, 5.4372e-12, 5.7304e-12, 6.164e-12, 6.1278e-12,
23239  6.294e-12, 6.4947e-12, 6.8174e-12, 7.519e-12, 8.2608e-12, 8.4971e-12,
23240  8.3484e-12, 8.1888e-12, 7.8552e-12, 7.8468e-12, 7.5943e-12, 7.9096e-12,
23241  8.6869e-12, 9.1303e-12, 9.2547e-12, 8.9322e-12, 8.2177e-12, 7.3408e-12,
23242  5.7956e-12, 4.447e-12, 3.5881e-12, 2.6748e-12, 1.7074e-12, 9.67e-13,
23243  5.2645e-13, 2.9943e-13, 1.7316e-13, 1.0039e-13, 5.7859e-14, 3.2968e-14,
23244  1.8499e-14, 1.0192e-14, 5.5015e-15, 2.904e-15, 1.4968e-15, 7.5244e-16,
23245  3.6852e-16, 1.7568e-16, 8.1464e-17, 3.6717e-17, 1.6076e-17, 6.8341e-18,
23246  2.8195e-18, 1.1286e-18, 0., 0., 0., 0.,
23247  0., 0., 0., 0., 0., 1.407e-18,
23248  3.0405e-18, 6.4059e-18, 1.3169e-17, 2.6443e-17, 5.1917e-17, 9.9785e-17,
23249  1.8802e-16, 3.4788e-16, 6.3328e-16, 1.137e-15, 2.0198e-15, 3.5665e-15,
23250  6.3053e-15, 1.1309e-14, 2.1206e-14, 3.2858e-14, 5.5165e-14, 8.6231e-14,
23251  1.2776e-13, 1.778e-13, 2.5266e-13, 3.6254e-13, 5.1398e-13, 6.8289e-13,
23252  8.7481e-13, 1.1914e-12, 1.6086e-12, 2.0469e-12, 2.5761e-12, 3.4964e-12,
23253  4.498e-12, 5.5356e-12, 6.7963e-12, 8.572e-12, 1.07e-11, 1.2983e-11,
23254  1.627e-11, 1.9609e-11, 2.2668e-11, 2.5963e-11, 3.0918e-11, 3.493e-11,
23255  3.933e-11, 4.4208e-11, 4.6431e-11, 5.1141e-11, 5.4108e-11, 5.8077e-11,
23256  6.505e-11, 7.2126e-11, 8.1064e-11, 8.1973e-11, 8.1694e-11, 8.3081e-11,
23257  8.024e-11, 7.9225e-11, 7.6256e-11, 7.8468e-11, 8.0041e-11, 8.1585e-11,
23258  8.3485e-11, 8.3774e-11, 8.587e-11, 8.6104e-11, 8.8516e-11, 9.0814e-11,
23259  9.2522e-11, 8.8913e-11, 7.8381e-11, 6.8568e-11, 5.6797e-11, 4.4163e-11,
23260  3.2369e-11, 2.3259e-11, 1.6835e-11, 1.1733e-11, 8.5273e-12, 6.3805e-12,
23261  4.8983e-12, 3.8831e-12, 3.261e-12, 2.8577e-12, 2.521e-12, 2.2913e-12,
23262  2.0341e-12, 1.8167e-12, 1.6395e-12, 1.489e-12, 1.3516e-12, 1.2542e-12,
23263  1.291e-12, 1.3471e-12, 1.4689e-12, 1.5889e-12, 1.6989e-12, 1.8843e-12,
23264  2.0902e-12, 2.3874e-12, 2.7294e-12, 3.3353e-12, 4.0186e-12, 4.5868e-12,
23265  5.2212e-12, 5.8856e-12, 6.5991e-12, 7.2505e-12, 7.6637e-12, 8.5113e-12,
23266  9.4832e-12, 9.9678e-12, 1.0723e-11, 1.0749e-11, 1.138e-11, 1.1774e-11,
23267  1.1743e-11, 1.2493e-11, 1.2559e-11, 1.2332e-11, 1.1782e-11, 1.1086e-11,
23268  1.0945e-11, 1.1178e-11, 1.2083e-11, 1.3037e-11, 1.473e-11, 1.645e-11,
23269  1.7403e-11, 1.7004e-11, 1.5117e-11, 1.3339e-11, 1.0844e-11, 8.0915e-12,
23270  5.6615e-12, 3.7196e-12, 2.5194e-12, 1.6569e-12, 1.1201e-12, 8.2335e-13,
23271  6.027e-13, 4.8205e-13, 4.1313e-13, 3.6243e-13, 3.2575e-13, 2.773e-13,
23272  2.5292e-13, 2.3062e-13, 2.1126e-13, 2.1556e-13, 2.1213e-13, 2.2103e-13,
23273  2.1927e-13, 2.0794e-13, 1.9533e-13, 1.6592e-13, 1.4521e-13, 1.1393e-13,
23274  8.3772e-14, 6.2077e-14, 4.3337e-14, 2.7165e-14, 1.6821e-14, 9.5407e-15,
23275  5.3093e-15, 3.032e-15, 1.7429e-15, 9.9828e-16, 5.6622e-16, 3.1672e-16,
23276  1.7419e-16, 9.3985e-17, 4.9656e-17, 2.5652e-17, 1.2942e-17, 6.3695e-18,
23277  3.0554e-18, 1.4273e-18, -0., -0., -0., -0.,
23278  -0., 0., 0., 0., 0., 0.,
23279  0., 0., 0., 0., 0., 0.,
23280  0., 0., 0., 0., 0., 0.,
23281  0., 0., 0., 0., 0., 0.,
23282  0., 0., 0., 0., 0., 0.,
23283  0., 0., 0., 0., 0., 0.,
23284  0., 0., 0., 0., 0., 0.,
23285  0., 0., 0., 0., 0., 0.,
23286  0., 0., 0., 0., 0., 0.,
23287  0., 0., 0., 0., 0., 0.,
23288  0., 0., 0., 0., 0., 0.,
23289  0., 0., 0., 0., 0., 0.,
23290  0., 0., 0., 0., 0., 0.,
23291  0., 0., 0., 0., 0., 0.,
23292  0., 0., 0., 0., 0., 0.,
23293  0., 0., 0., 0., 0., 0.,
23294  0., 0., 0., 0., 0., 0.,
23295  0., 0., 0., 0., 0., 0.,
23296  0., 0., 0., 0., 0., 0.,
23297  0., 0., 0., 0., 0., 0.,
23298  0., 0., 0., 0., 0., 0.,
23299  0., 0., 0., 0., 0., 0.,
23300  0., 0., 0., 0., 0., 0.,
23301  0., 0., 0., 0., 0., 0.,
23302  0., 0., 0., 0., 0., 0.,
23303  0., 0., 0., 0., 0., 0.,
23304  0., 0., 0., 0., 0., 0.,
23305  0., 0., 0., 0., 0., 0.,
23306  0., 0., 0., 0., 0., 0.,
23307  0., 0., 0., 0., 0., 0.,
23308  0., 0., 0., 0., 0., 0.,
23309  0., 0., 0., 0., 0.}};
23310 
23311 struct s_fh2ob_ {
23312  double e_1[3];
23313  int e_2;
23314 } fh2ob_ = {{-20., 2e4, 10.}, 2003};
23315 
23316 struct s_sh2oa_ {
23317  double e_1[2003];
23318 } sh2oa_ = {
23319  {.11109, .10573, .10162, .10573, .11109, .12574,
23320  .13499, .14327, .15065, .15164, .15022, .13677,
23321  .13115, .12253, .11271, .1007, .087495, .080118,
23322  .06994, .062034, .056051, .047663, .04245, .03669,
23323  .033441, .030711, .025205, .022113, .01888, .016653,
23324  .014626, .012065, .010709, .0091783, .0077274, .0067302,
23325  .0056164, .0049089, .0041497, .0035823, .0031124, .0026414,
23326  .0023167, .0020156, .0017829, .0015666, .0013928, .0012338,
23327  .0010932, 9.7939e-4, 8.8241e-4, 7.9173e-4, 7.1296e-4, 6.4179e-4,
23328  5.8031e-4, 5.2647e-4, 4.7762e-4, 4.3349e-4, 3.9355e-4, 3.5887e-4,
23329  3.2723e-4, 2.9919e-4, 2.7363e-4, 2.5013e-4, 2.2876e-4, 2.0924e-4,
23330  1.9193e-4, 1.7618e-4, 1.6188e-4, 1.4891e-4, 1.3717e-4, 1.2647e-4,
23331  1.1671e-4, 1.0786e-4, 9.9785e-5, 9.235e-5, 8.5539e-5, 7.9377e-5,
23332  7.3781e-5, 6.8677e-5, 6.3993e-5, 5.9705e-5, 5.5788e-5, 5.2196e-5,
23333  4.8899e-5, 4.5865e-5, 4.3079e-5, 4.0526e-5, 3.8182e-5, 3.6025e-5,
23334  3.4038e-5, 3.2203e-5, 3.0511e-5, 2.8949e-5, 2.7505e-5, 2.617e-5,
23335  2.4933e-5, 2.3786e-5, 2.2722e-5, 2.1736e-5, 2.0819e-5, 1.9968e-5,
23336  1.9178e-5, 1.8442e-5, 1.776e-5, 1.7127e-5, 1.6541e-5, 1.5997e-5,
23337  1.5495e-5, 1.5034e-5, 1.4614e-5, 1.423e-5, 1.3883e-5, 1.3578e-5,
23338  1.3304e-5, 1.3069e-5, 1.2876e-5, 1.2732e-5, 1.2626e-5, 1.2556e-5,
23339  1.2544e-5, 1.2604e-5, 1.2719e-5, 1.2883e-5, 1.3164e-5, 1.3581e-5,
23340  1.4187e-5, 1.4866e-5, 1.5669e-5, 1.6717e-5, 1.8148e-5, 2.0268e-5,
23341  2.2456e-5, 2.5582e-5, 2.9183e-5, 3.3612e-5, 3.9996e-5, 4.6829e-5,
23342  5.5055e-5, 6.5897e-5, 7.536e-5, 8.7213e-5, 1.0046e-4, 1.1496e-4,
23343  1.2943e-4, 1.5049e-4, 1.6973e-4, 1.8711e-4, 2.0286e-4, 2.2823e-4,
23344  2.678e-4, 2.8766e-4, 3.1164e-4, 3.364e-4, 3.6884e-4, 3.9159e-4,
23345  3.8712e-4, 3.7433e-4, 3.4503e-4, 3.1003e-4, 2.8027e-4, 2.5253e-4,
23346  2.3408e-4, 2.2836e-4, 2.4442e-4, 2.7521e-4, 2.9048e-4, 3.0489e-4,
23347  3.2646e-4, 3.388e-4, 3.3492e-4, 3.0987e-4, 2.9482e-4, 2.8711e-4,
23348  2.6068e-4, 2.2683e-4, 1.9996e-4, 1.7788e-4, 1.6101e-4, 1.3911e-4,
23349  1.2013e-4, 1.0544e-4, 9.4224e-5, 8.1256e-5, 7.3667e-5, 6.2233e-5,
23350  5.5906e-5, 5.1619e-5, 4.514e-5, 4.0273e-5, 3.3268e-5, 3.0258e-5,
23351  2.644e-5, 2.3103e-5, 2.0749e-5, 1.8258e-5, 1.6459e-5, 1.4097e-5,
23352  1.2052e-5, 1.0759e-5, 9.14e-6, 8.1432e-6, 7.146e-6, 6.4006e-6,
23353  5.6995e-6, 4.9372e-6, 4.4455e-6, 3.9033e-6, 3.474e-6, 3.1269e-6,
23354  2.8059e-6, 2.5558e-6, 2.2919e-6, 2.0846e-6, 1.8983e-6, 1.7329e-6,
23355  1.5929e-6, 1.4631e-6, 1.3513e-6, 1.2461e-6, 1.1519e-6, 1.0682e-6,
23356  9.9256e-7, 9.2505e-7, 8.6367e-7, 8.0857e-7, 7.5674e-7, 7.0934e-7,
23357  6.658e-7, 6.258e-7, 5.8853e-7, 5.5333e-7, 5.2143e-7, 4.9169e-7,
23358  4.6431e-7, 4.3898e-7, 4.1564e-7, 3.9405e-7, 3.7403e-7, 3.5544e-7,
23359  3.3819e-7, 3.2212e-7, 3.0714e-7, 2.9313e-7, 2.8003e-7, 2.6777e-7,
23360  2.5628e-7, 2.4551e-7, 2.354e-7, 2.2591e-7, 2.1701e-7, 2.0866e-7,
23361  2.0082e-7, 1.9349e-7, 1.8665e-7, 1.8027e-7, 1.7439e-7, 1.6894e-7,
23362  1.64e-7, 1.5953e-7, 1.5557e-7, 1.5195e-7, 1.4888e-7, 1.4603e-7,
23363  1.4337e-7, 1.4093e-7, 1.3828e-7, 1.3569e-7, 1.327e-7, 1.2984e-7,
23364  1.2714e-7, 1.2541e-7, 1.2399e-7, 1.2102e-7, 1.1878e-7, 1.1728e-7,
23365  1.1644e-7, 1.1491e-7, 1.1305e-7, 1.1235e-7, 1.1228e-7, 1.1224e-7,
23366  1.1191e-7, 1.1151e-7, 1.1098e-7, 1.1068e-7, 1.1109e-7, 1.1213e-7,
23367  1.1431e-7, 1.1826e-7, 1.2322e-7, 1.3025e-7, 1.4066e-7, 1.5657e-7,
23368  1.7214e-7, 1.9449e-7, 2.2662e-7, 2.6953e-7, 3.1723e-7, 3.7028e-7,
23369  4.4482e-7, 5.3852e-7, 6.2639e-7, 7.2175e-7, 7.7626e-7, 8.7248e-7,
23370  9.6759e-7, 1.0102e-6, 1.062e-6, 1.1201e-6, 1.2107e-6, 1.2998e-6,
23371  1.313e-6, 1.2856e-6, 1.235e-6, 1.1489e-6, 1.0819e-6, 1.012e-6,
23372  9.4795e-7, 9.2858e-7, 9.806e-7, 1.0999e-6, 1.1967e-6, 1.2672e-6,
23373  1.3418e-6, 1.3864e-6, 1.433e-6, 1.4592e-6, 1.4598e-6, 1.4774e-6,
23374  1.4726e-6, 1.482e-6, 1.505e-6, 1.4984e-6, 1.5181e-6, 1.5888e-6,
23375  1.685e-6, 1.769e-6, 1.9277e-6, 2.1107e-6, 2.3068e-6, 2.5347e-6,
23376  2.8069e-6, 3.1345e-6, 3.5822e-6, 3.9051e-6, 4.3422e-6, 4.8704e-6,
23377  5.5351e-6, 6.3454e-6, 7.269e-6, 8.2974e-6, 9.7609e-6, 1.1237e-5,
23378  1.3187e-5, 1.5548e-5, 1.8784e-5, 2.1694e-5, 2.5487e-5, 3.0092e-5,
23379  3.5385e-5, 4.2764e-5, 4.9313e-5, 5.58e-5, 6.2968e-5, 7.106e-5,
23380  7.7699e-5, 8.7216e-5, 8.9335e-5, 9.2151e-5, 9.2779e-5, 9.4643e-5,
23381  9.7978e-5, 1.0008e-4, 1.0702e-4, 1.1026e-4, 1.0828e-4, 1.055e-4,
23382  1.0432e-4, 1.0428e-4, 9.898e-5, 9.4992e-5, 9.5159e-5, 1.0058e-4,
23383  1.0738e-4, 1.155e-4, 1.1229e-4, 1.0596e-4, 1.0062e-4, 9.1742e-5,
23384  8.4492e-5, 6.8099e-5, 5.6295e-5, 4.6502e-5, 3.8071e-5, 3.0721e-5,
23385  2.3297e-5, 1.8688e-5, 1.483e-5, 1.2049e-5, 9.6754e-6, 7.9192e-6,
23386  6.6673e-6, 5.6468e-6, 4.8904e-6, 4.2289e-6, 3.688e-6, 3.2396e-6,
23387  2.8525e-6, 2.5363e-6, 2.2431e-6, 1.9949e-6, 1.7931e-6, 1.6164e-6,
23388  1.4431e-6, 1.2997e-6, 1.1559e-6, 1.0404e-6, 9.43e-7, 8.4597e-7,
23389  7.6133e-7, 6.8623e-7, 6.2137e-7, 5.6345e-7, 5.1076e-7, 4.6246e-7,
23390  4.1906e-7, 3.8063e-7, 3.461e-7, 3.1554e-7, 2.8795e-7, 2.6252e-7,
23391  2.3967e-7, 2.1901e-7, 2.0052e-7, 1.8384e-7, 1.6847e-7, 1.5459e-7,
23392  1.4204e-7, 1.3068e-7, 1.2036e-7, 1.1095e-7, 1.0237e-7, 9.4592e-8,
23393  8.753e-8, 8.1121e-8, 7.5282e-8, 6.9985e-8, 6.5189e-8, 6.0874e-8,
23394  5.6989e-8, 5.353e-8, 5.0418e-8, 4.7745e-8, 4.5367e-8, 4.3253e-8,
23395  4.1309e-8, 3.9695e-8, 3.8094e-8, 3.6482e-8, 3.4897e-8, 3.35e-8,
23396  3.2302e-8, 3.0854e-8, 2.9698e-8, 2.8567e-8, 2.76e-8, 2.6746e-8,
23397  2.5982e-8, 2.551e-8, 2.5121e-8, 2.4922e-8, 2.4909e-8, 2.5013e-8,
23398  2.5216e-8, 2.5589e-8, 2.6049e-8, 2.6451e-8, 2.6978e-8, 2.7687e-8,
23399  2.86e-8, 2.9643e-8, 3.0701e-8, 3.2058e-8, 3.3695e-8, 3.5558e-8,
23400  3.7634e-8, 3.9875e-8, 4.2458e-8, 4.548e-8, 4.8858e-8, 5.2599e-8,
23401  5.703e-8, 6.2067e-8, 6.7911e-8, 7.4579e-8, 8.1902e-8, 8.9978e-8,
23402  9.987e-8, 1.1102e-7, 1.2343e-7, 1.3732e-7, 1.5394e-7, 1.7318e-7,
23403  1.9383e-7, 2.1819e-7, 2.4666e-7, 2.8109e-7, 3.2236e-7, 3.776e-7,
23404  4.4417e-7, 5.2422e-7, 6.1941e-7, 7.4897e-7, 9.2041e-7, 1.1574e-6,
23405  1.4126e-6, 1.7197e-6, 2.1399e-6, 2.6266e-6, 3.3424e-6, 3.8418e-6,
23406  4.514e-6, 5.0653e-6, 5.8485e-6, 6.5856e-6, 6.8937e-6, 6.9121e-6,
23407  6.9005e-6, 6.9861e-6, 6.82e-6, 6.6089e-6, 6.5809e-6, 7.3496e-6,
23408  8.0311e-6, 8.3186e-6, 8.426e-6, 9.0644e-6, 9.4965e-6, 9.4909e-6,
23409  9.016e-6, 9.1494e-6, 9.3629e-6, 9.5944e-6, 9.5459e-6, 8.9919e-6,
23410  8.604e-6, 7.8613e-6, 7.1567e-6, 6.2677e-6, 5.1899e-6, 4.4188e-6,
23411  3.7167e-6, 3.0636e-6, 2.5573e-6, 2.0317e-6, 1.6371e-6, 1.3257e-6,
23412  1.0928e-6, 8.9986e-7, 7.4653e-7, 6.1111e-7, 5.1395e-7, 4.35e-7,
23413  3.7584e-7, 3.2633e-7, 2.8413e-7, 2.4723e-7, 2.1709e-7, 1.9294e-7,
23414  1.7258e-7, 1.5492e-7, 1.382e-7, 1.2389e-7, 1.1189e-7, 1.0046e-7,
23415  9.0832e-8, 8.2764e-8, 7.4191e-8, 6.7085e-8, 6.0708e-8, 5.4963e-8,
23416  4.9851e-8, 4.5044e-8, 4.0916e-8, 3.722e-8, 3.3678e-8, 3.0663e-8,
23417  2.7979e-8, 2.5495e-8, 2.3286e-8, 2.1233e-8, 1.9409e-8, 1.777e-8,
23418  1.626e-8, 1.4885e-8, 1.3674e-8, 1.2543e-8, 1.1551e-8, 1.0655e-8,
23419  9.8585e-9, 9.1398e-9, 8.4806e-9, 7.8899e-9, 7.3547e-9, 6.867e-9,
23420  6.4131e-9, 5.993e-9, 5.6096e-9, 5.2592e-9, 4.9352e-9, 4.6354e-9,
23421  4.3722e-9, 4.125e-9, 3.9081e-9, 3.7118e-9, 3.5372e-9, 3.3862e-9,
23422  3.2499e-9, 3.1324e-9, 3.0313e-9, 2.9438e-9, 2.8686e-9, 2.805e-9,
23423  2.7545e-9, 2.7149e-9, 2.6907e-9, 2.6724e-9, 2.6649e-9, 2.6642e-9,
23424  2.6725e-9, 2.6871e-9, 2.7056e-9, 2.7357e-9, 2.7781e-9, 2.8358e-9,
23425  2.9067e-9, 2.9952e-9, 3.102e-9, 3.2253e-9, 3.3647e-9, 3.5232e-9,
23426  3.7037e-9, 3.9076e-9, 4.1385e-9, 4.3927e-9, 4.6861e-9, 5.0238e-9,
23427  5.4027e-9, 5.8303e-9, 6.3208e-9, 6.8878e-9, 7.5419e-9, 8.313e-9,
23428  9.1952e-9, 1.0228e-8, 1.1386e-8, 1.2792e-8, 1.4521e-8, 1.6437e-8,
23429  1.8674e-8, 2.116e-8, 2.4506e-8, 2.8113e-8, 3.2636e-8, 3.7355e-8,
23430  4.2234e-8, 4.9282e-8, 5.7358e-8, 6.6743e-8, 7.8821e-8, 9.4264e-8,
23431  1.1542e-7, 1.3684e-7, 1.6337e-7, 2.0056e-7, 2.3252e-7, 2.6127e-7,
23432  2.9211e-7, 3.3804e-7, 3.7397e-7, 3.8205e-7, 3.881e-7, 3.9499e-7,
23433  3.9508e-7, 3.7652e-7, 3.5859e-7, 3.6198e-7, 3.7871e-7, 4.0925e-7,
23434  4.2717e-7, 4.8241e-7, 5.2008e-7, 5.653e-7, 5.9531e-7, 6.1994e-7,
23435  6.508e-7, 6.6355e-7, 6.9193e-7, 6.993e-7, 7.3058e-7, 7.4678e-7,
23436  7.9193e-7, 8.3627e-7, 9.1267e-7, 1.0021e-6, 1.1218e-6, 1.2899e-6,
23437  1.4447e-6, 1.7268e-6, 2.0025e-6, 2.3139e-6, 2.5599e-6, 2.892e-6,
23438  3.3059e-6, 3.5425e-6, 3.9522e-6, 4.0551e-6, 4.2818e-6, 4.2892e-6,
23439  4.421e-6, 4.5614e-6, 4.6739e-6, 4.9482e-6, 5.1118e-6, 5.0986e-6,
23440  4.9417e-6, 4.9022e-6, 4.8449e-6, 4.8694e-6, 4.8111e-6, 4.9378e-6,
23441  5.3231e-6, 5.7362e-6, 6.235e-6, 6.0951e-6, 5.7281e-6, 5.4585e-6,
23442  4.9032e-6, 4.3009e-6, 3.4776e-6, 2.8108e-6, 2.2993e-6, 1.7999e-6,
23443  1.387e-6, 1.075e-6, 8.5191e-7, 6.7951e-7, 5.5336e-7, 4.6439e-7,
23444  4.0243e-7, 3.5368e-7, 3.1427e-7, 2.7775e-7, 2.4486e-7, 2.1788e-7,
23445  1.9249e-7, 1.7162e-7, 1.5115e-7, 1.3478e-7, 1.2236e-7, 1.1139e-7,
23446  1.0092e-7, 9.0795e-8, 8.2214e-8, 7.4691e-8, 6.7486e-8, 6.0414e-8,
23447  5.4584e-8, 4.8754e-8, 4.3501e-8, 3.8767e-8, 3.4363e-8, 3.0703e-8,
23448  2.7562e-8, 2.4831e-8, 2.2241e-8, 1.9939e-8, 1.8049e-8, 1.6368e-8,
23449  1.4863e-8, 1.346e-8, 1.2212e-8, 1.1155e-8, 1.0185e-8, 9.3417e-9,
23450  8.5671e-9, 7.8292e-9, 7.1749e-9, 6.5856e-9, 6.0588e-9, 5.5835e-9,
23451  5.135e-9, 4.7395e-9, 4.3771e-9, 4.0476e-9, 3.756e-9, 3.4861e-9,
23452  3.2427e-9, 3.024e-9, 2.8278e-9, 2.6531e-9, 2.4937e-9, 2.3511e-9,
23453  2.2245e-9, 2.1133e-9, 2.0159e-9, 1.933e-9, 1.8669e-9, 1.8152e-9,
23454  1.7852e-9, 1.7752e-9, 1.7823e-9, 1.8194e-9, 1.8866e-9, 1.9759e-9,
23455  2.0736e-9, 2.2083e-9, 2.3587e-9, 2.4984e-9, 2.6333e-9, 2.816e-9,
23456  3.0759e-9, 3.372e-9, 3.6457e-9, 4.0668e-9, 4.4541e-9, 4.7976e-9,
23457  5.0908e-9, 5.4811e-9, 6.1394e-9, 6.3669e-9, 6.5714e-9, 6.8384e-9,
23458  7.1918e-9, 7.3741e-9, 7.2079e-9, 7.2172e-9, 7.2572e-9, 7.3912e-9,
23459  7.6188e-9, 8.3291e-9, 8.7885e-9, 9.2412e-9, 1.0021e-8, 1.0752e-8,
23460  1.1546e-8, 1.1607e-8, 1.1949e-8, 1.2346e-8, 1.2516e-8, 1.2826e-8,
23461  1.3053e-8, 1.3556e-8, 1.4221e-8, 1.5201e-8, 1.6661e-8, 1.8385e-8,
23462  2.0585e-8, 2.3674e-8, 2.7928e-8, 3.3901e-8, 4.1017e-8, 4.9595e-8,
23463  6.0432e-8, 7.6304e-8, 9.0764e-8, 1.0798e-7, 1.2442e-7, 1.4404e-7,
23464  1.6331e-7, 1.8339e-7, 2.0445e-7, 2.2288e-7, 2.3083e-7, 2.3196e-7,
23465  2.3919e-7, 2.3339e-7, 2.3502e-7, 2.3444e-7, 2.6395e-7, 2.9928e-7,
23466  3.0025e-7, 3.0496e-7, 3.1777e-7, 3.4198e-7, 3.4739e-7, 3.2696e-7,
23467  3.41e-7, 3.5405e-7, 3.7774e-7, 3.8285e-7, 3.6797e-7, 3.58e-7,
23468  3.2283e-7, 2.9361e-7, 2.4881e-7, 2.0599e-7, 1.7121e-7, 1.3641e-7,
23469  1.1111e-7, 8.9413e-8, 7.3455e-8, 6.2078e-8, 5.2538e-8, 4.5325e-8,
23470  3.9005e-8, 3.4772e-8, 3.1203e-8, 2.8132e-8, 2.525e-8, 2.2371e-8,
23471  2.0131e-8, 1.7992e-8, 1.6076e-8, 1.4222e-8, 1.249e-8, 1.1401e-8,
23472  1.0249e-8, 9.2279e-9, 8.5654e-9, 7.6227e-9, 6.9648e-9, 6.2466e-9,
23473  5.7252e-9, 5.38e-9, 4.696e-9, 4.2194e-9, 3.7746e-9, 3.3813e-9,
23474  3.0656e-9, 2.6885e-9, 2.4311e-9, 2.1572e-9, 1.8892e-9, 1.7038e-9,
23475  1.4914e-9, 1.3277e-9, 1.1694e-9, 1.0391e-9, 9.2779e-10, 8.3123e-10,
23476  7.4968e-10, 6.8385e-10, 6.2915e-10, 5.7784e-10, 5.2838e-10, 4.8382e-10,
23477  4.4543e-10, 4.1155e-10, 3.7158e-10, 3.3731e-10, 3.0969e-10, 2.8535e-10,
23478  2.6416e-10, 2.4583e-10, 2.2878e-10, 2.1379e-10, 2.0073e-10, 1.8907e-10,
23479  1.7866e-10, 1.6936e-10, 1.6119e-10, 1.5424e-10, 1.4847e-10, 1.4401e-10,
23480  1.4068e-10, 1.3937e-10, 1.3943e-10, 1.4281e-10, 1.4766e-10, 1.5701e-10,
23481  1.7079e-10, 1.8691e-10, 2.0081e-10, 2.174e-10, 2.4847e-10, 2.6463e-10,
23482  2.7087e-10, 2.7313e-10, 2.8352e-10, 2.9511e-10, 2.8058e-10, 2.7227e-10,
23483  2.7356e-10, 2.8012e-10, 2.8034e-10, 2.9031e-10, 3.103e-10, 3.3745e-10,
23484  3.8152e-10, 4.0622e-10, 4.2673e-10, 4.3879e-10, 4.5488e-10, 4.7179e-10,
23485  4.614e-10, 4.6339e-10, 4.6716e-10, 4.7024e-10, 4.7931e-10, 4.8503e-10,
23486  4.9589e-10, 4.9499e-10, 5.0363e-10, 5.3184e-10, 5.6451e-10, 6.0932e-10,
23487  6.6469e-10, 7.4076e-10, 8.3605e-10, 9.4898e-10, 1.0935e-9, 1.2593e-9,
23488  1.4913e-9, 1.8099e-9, 2.1842e-9, 2.7284e-9, 3.2159e-9, 3.7426e-9,
23489  4.5226e-9, 5.3512e-9, 6.1787e-9, 6.8237e-9, 7.9421e-9, 9.0002e-9,
23490  9.6841e-9, 9.9558e-9, 1.0232e-8, 1.0591e-8, 1.0657e-8, 1.0441e-8,
23491  1.0719e-8, 1.1526e-8, 1.2962e-8, 1.4336e-8, 1.615e-8, 1.8417e-8,
23492  2.0725e-8, 2.3426e-8, 2.5619e-8, 2.7828e-8, 3.0563e-8, 3.3438e-8,
23493  3.6317e-8, 4.04e-8, 4.4556e-8, 5.0397e-8, 5.3315e-8, 5.9185e-8,
23494  6.5311e-8, 6.9188e-8, 7.7728e-8, 7.9789e-8, 8.6598e-8, 8.7768e-8,
23495  9.1773e-8, 9.7533e-8, 1.0007e-7, 1.065e-7, 1.0992e-7, 1.0864e-7,
23496  1.0494e-7, 1.0303e-7, 1.0031e-7, 1.0436e-7, 1.0537e-7, 1.1184e-7,
23497  1.2364e-7, 1.3651e-7, 1.4881e-7, 1.4723e-7, 1.4118e-7, 1.3371e-7,
23498  1.1902e-7, 1.0007e-7, 7.9628e-8, 6.4362e-8, 5.0243e-8, 3.8133e-8,
23499  2.94e-8, 2.3443e-8, 1.9319e-8, 1.6196e-8, 1.4221e-8, 1.2817e-8,
23500  1.1863e-8, 1.1383e-8, 1.1221e-8, 1.1574e-8, 1.1661e-8, 1.2157e-8,
23501  1.2883e-8, 1.3295e-8, 1.4243e-8, 1.424e-8, 1.4614e-8, 1.4529e-8,
23502  1.4685e-8, 1.4974e-8, 1.479e-8, 1.489e-8, 1.4704e-8, 1.4142e-8,
23503  1.3374e-8, 1.2746e-8, 1.2172e-8, 1.2336e-8, 1.2546e-8, 1.3065e-8,
23504  1.409e-8, 1.5215e-8, 1.654e-8, 1.6144e-8, 1.5282e-8, 1.4358e-8,
23505  1.2849e-8, 1.0998e-8, 8.6956e-9, 7.0881e-9, 5.5767e-9, 4.2792e-9,
23506  3.2233e-9, 2.502e-9, 1.9985e-9, 1.5834e-9, 1.3015e-9, 1.0948e-9,
23507  9.4141e-10, 8.1465e-10, 7.1517e-10, 6.2906e-10, 5.5756e-10, 4.9805e-10,
23508  4.3961e-10, 3.9181e-10, 3.5227e-10, 3.167e-10, 2.8667e-10, 2.5745e-10,
23509  2.3212e-10, 2.0948e-10, 1.897e-10, 1.7239e-10, 1.5659e-10, 1.4301e-10,
23510  1.3104e-10, 1.2031e-10, 1.1095e-10, 1.0262e-10, 9.513e-11, 8.8595e-11,
23511  8.2842e-11, 7.7727e-11, 7.3199e-11, 6.9286e-11, 6.5994e-11, 6.3316e-11,
23512  6.1244e-11, 5.9669e-11, 5.8843e-11, 5.8832e-11, 5.9547e-11, 6.1635e-11,
23513  6.4926e-11, 7.0745e-11, 7.8802e-11, 8.6724e-11, 1.0052e-10, 1.1575e-10,
23514  1.3626e-10, 1.5126e-10, 1.6751e-10, 1.9239e-10, 2.1748e-10, 2.2654e-10,
23515  2.2902e-10, 2.324e-10, 2.4081e-10, 2.393e-10, 2.2378e-10, 2.2476e-10,
23516  2.2791e-10, 2.4047e-10, 2.5305e-10, 2.8073e-10, 3.1741e-10, 3.6592e-10,
23517  4.1495e-10, 4.6565e-10, 5.099e-10, 5.5607e-10, 6.1928e-10, 6.6779e-10,
23518  7.335e-10, 8.1434e-10, 8.9635e-10, 9.9678e-10, 1.1256e-9, 1.2999e-9,
23519  1.4888e-9, 1.7642e-9, 1.9606e-9, 2.2066e-9, 2.4601e-9, 2.7218e-9,
23520  3.0375e-9, 3.1591e-9, 3.2852e-9, 3.2464e-9, 3.3046e-9, 3.271e-9,
23521  3.2601e-9, 3.3398e-9, 3.7446e-9, 4.0795e-9, 4.0284e-9, 4.0584e-9,
23522  4.1677e-9, 4.5358e-9, 4.4097e-9, 4.2744e-9, 4.5449e-9, 4.8147e-9,
23523  5.2656e-9, 5.2476e-9, 5.0275e-9, 4.7968e-9, 4.3654e-9, 3.953e-9,
23524  3.2447e-9, 2.6489e-9, 2.1795e-9, 1.788e-9, 1.4309e-9, 1.1256e-9,
23525  9.1903e-10, 7.6533e-10, 6.3989e-10, 5.5496e-10, 4.9581e-10, 4.5722e-10,
23526  4.3898e-10, 4.3505e-10, 4.3671e-10, 4.5329e-10, 4.6827e-10, 4.9394e-10,
23527  5.1122e-10, 5.1649e-10, 5.0965e-10, 4.9551e-10, 4.8928e-10, 4.7947e-10,
23528  4.7989e-10, 4.9071e-10, 4.8867e-10, 4.726e-10, 4.5756e-10, 4.54e-10,
23529  4.5993e-10, 4.4042e-10, 4.3309e-10, 4.4182e-10, 4.6735e-10, 5.0378e-10,
23530  5.2204e-10, 5.0166e-10, 4.6799e-10, 4.3119e-10, 3.8803e-10, 3.3291e-10,
23531  2.6289e-10, 2.1029e-10, 1.7011e-10, 1.3345e-10, 1.0224e-10, 7.8207e-11,
23532  6.2451e-11, 5.0481e-11, 4.1507e-11, 3.5419e-11, 3.0582e-11, 2.69e-11,
23533  2.3778e-11, 2.1343e-11, 1.9182e-11, 1.7162e-11, 1.5391e-11, 1.3877e-11,
23534  1.2619e-11, 1.145e-11, 1.0461e-11, 9.6578e-12, 8.9579e-12, 8.3463e-12,
23535  7.8127e-12, 7.3322e-12, 6.9414e-12, 6.6037e-12, 6.3285e-12, 6.1095e-12,
23536  5.9387e-12, 5.8118e-12, 5.726e-12, 5.6794e-12, 5.6711e-12, 5.7003e-12,
23537  5.767e-12, 5.8717e-12, 6.0151e-12, 6.1984e-12, 6.4232e-12, 6.6918e-12,
23538  7.0065e-12, 7.3705e-12, 7.7873e-12, 8.2612e-12, 8.7972e-12, 9.4009e-12,
23539  1.0079e-11, 1.084e-11, 1.1692e-11, 1.2648e-11, 1.3723e-11, 1.4935e-11,
23540  1.6313e-11, 1.7905e-11, 1.974e-11, 2.1898e-11, 2.4419e-11, 2.7426e-11,
23541  3.0869e-11, 3.4235e-11, 3.7841e-11, 4.1929e-11, 4.6776e-11, 5.2123e-11,
23542  5.8497e-11, 6.5294e-11, 7.4038e-11, 8.4793e-11, 9.6453e-11, 1.1223e-10,
23543  1.2786e-10, 1.4882e-10, 1.7799e-10, 2.0766e-10, 2.4523e-10, 2.8591e-10,
23544  3.3386e-10, 4.0531e-10, 4.7663e-10, 5.4858e-10, 6.3377e-10, 7.1688e-10,
23545  8.4184e-10, 9.5144e-10, 1.0481e-9, 1.1356e-9, 1.2339e-9, 1.3396e-9,
23546  1.4375e-9, 1.5831e-9, 1.7323e-9, 1.9671e-9, 2.2976e-9, 2.6679e-9,
23547  3.0777e-9, 3.4321e-9, 3.8192e-9, 4.2711e-9, 4.4903e-9, 4.8931e-9,
23548  5.2253e-9, 5.404e-9, 5.6387e-9, 5.6704e-9, 6.0345e-9, 6.1079e-9,
23549  6.2576e-9, 6.4039e-9, 6.3776e-9, 6.1878e-9, 5.8616e-9, 5.7036e-9,
23550  5.584e-9, 5.6905e-9, 5.8931e-9, 6.2478e-9, 6.8291e-9, 7.4528e-9,
23551  7.6078e-9, 7.3898e-9, 6.7573e-9, 5.9827e-9, 5.0927e-9, 4.0099e-9,
23552  3.1933e-9, 2.4296e-9, 1.8485e-9, 1.4595e-9, 1.2017e-9, 1.0164e-9,
23553  8.7433e-10, 7.7108e-10, 7.0049e-10, 6.5291e-10, 6.1477e-10, 5.9254e-10,
23554  5.815e-10, 5.7591e-10, 5.849e-10, 5.8587e-10, 5.9636e-10, 6.2408e-10,
23555  6.5479e-10, 7.048e-10, 7.2313e-10, 7.5524e-10, 8.0863e-10, 8.3386e-10,
23556  9.2342e-10, 9.6754e-10, 1.0293e-9, 1.0895e-9, 1.133e-9, 1.221e-9,
23557  1.2413e-9, 1.2613e-9, 1.2671e-9, 1.2225e-9, 1.1609e-9, 1.0991e-9,
23558  1.06e-9, 1.057e-9, 1.0818e-9, 1.1421e-9, 1.227e-9, 1.337e-9,
23559  1.4742e-9, 1.4946e-9, 1.4322e-9, 1.321e-9, 1.1749e-9, 1.0051e-9,
23560  7.8387e-10, 6.1844e-10, 4.6288e-10, 3.4164e-10, 2.5412e-10, 1.9857e-10,
23561  1.5876e-10, 1.2966e-10, 1.092e-10, 9.4811e-11, 8.3733e-11, 7.3906e-11,
23562  6.7259e-11, 6.1146e-11, 5.7119e-11, 5.3546e-11, 4.8625e-11, 4.4749e-11,
23563  4.1089e-11, 3.7825e-11, 3.4465e-11, 3.1018e-11, 2.8109e-11, 2.561e-11,
23564  2.2859e-11, 2.049e-11, 1.8133e-11, 1.5835e-11, 1.3949e-11, 1.2295e-11,
23565  1.0799e-11, 9.6544e-12, 8.7597e-12, 7.999e-12, 7.3973e-12, 6.9035e-12,
23566  6.4935e-12, 6.1195e-12, 5.8235e-12, 5.5928e-12, 5.4191e-12, 5.2993e-12,
23567  5.2338e-12, 5.2272e-12, 5.2923e-12, 5.4252e-12, 5.6523e-12, 5.9433e-12,
23568  6.3197e-12, 6.9016e-12, 7.5016e-12, 8.2885e-12, 9.405e-12, 1.0605e-11,
23569  1.2257e-11, 1.3622e-11, 1.5353e-11, 1.7543e-11, 1.9809e-11, 2.2197e-11,
23570  2.4065e-11, 2.6777e-11, 2.9751e-11, 3.2543e-11, 3.5536e-11, 3.9942e-11,
23571  4.6283e-11, 5.4556e-11, 6.549e-11, 7.6803e-11, 9.0053e-11, 1.0852e-10,
23572  1.2946e-10, 1.4916e-10, 1.7748e-10, 2.0073e-10, 2.2485e-10, 2.5114e-10,
23573  2.7715e-10, 3.1319e-10, 3.3305e-10, 3.5059e-10, 3.5746e-10, 3.6311e-10,
23574  3.7344e-10, 3.6574e-10, 3.7539e-10, 3.9434e-10, 4.351e-10, 4.334e-10,
23575  4.2588e-10, 4.3977e-10, 4.6062e-10, 4.7687e-10, 4.6457e-10, 4.8578e-10,
23576  5.2344e-10, 5.6752e-10, 5.8702e-10, 5.6603e-10, 5.3784e-10, 4.9181e-10,
23577  4.3272e-10, 3.5681e-10, 2.8814e-10, 2.332e-10, 1.8631e-10, 1.4587e-10,
23578  1.1782e-10, 9.8132e-11, 8.2528e-11, 6.9174e-11, 6.1056e-11, 5.3459e-11,
23579  4.7116e-11, 4.1878e-11, 3.8125e-11, 3.6347e-11, 3.5071e-11, 3.3897e-11,
23580  3.3541e-11, 3.3563e-11, 3.5469e-11, 3.8111e-11, 3.8675e-11, 4.1333e-11,
23581  4.3475e-11, 4.6476e-11, 4.9761e-11, 5.138e-11, 5.4135e-11, 5.3802e-11,
23582  5.5158e-11, 5.6864e-11, 5.9311e-11, 6.3827e-11, 6.7893e-11, 6.823e-11,
23583  6.6694e-11, 6.6018e-11, 6.4863e-11, 6.5893e-11, 6.3813e-11, 6.4741e-11,
23584  6.863e-11, 7.0255e-11, 7.0667e-11, 6.881e-11, 6.4104e-11, 5.8136e-11,
23585  4.7242e-11, 3.7625e-11, 3.1742e-11, 2.5581e-11, 1.8824e-11, 1.3303e-11,
23586  9.6919e-12, 7.5353e-12, 6.0986e-12, 5.0742e-12, 4.3094e-12, 3.719e-12,
23587  3.252e-12, 2.8756e-12, 2.568e-12, 2.3139e-12, 2.1025e-12, 1.9257e-12,
23588  1.7777e-12, 1.6539e-12, 1.5508e-12, 1.4657e-12, 1.3966e-12, 1.3417e-12,
23589  1.2998e-12, 1.27e-12, 1.2514e-12, 1.2437e-12, 1.2463e-12, 1.2592e-12,
23590  1.2823e-12, 1.3157e-12, 1.3596e-12, 1.4144e-12, 1.4806e-12, 1.5588e-12,
23591  1.6497e-12, 1.7544e-12, 1.8738e-12, 2.0094e-12, 2.1626e-12, 2.3354e-12,
23592  2.5297e-12, 2.7483e-12, 2.9941e-12, 3.2708e-12, 3.5833e-12, 3.9374e-12,
23593  4.3415e-12, 4.8079e-12, 5.3602e-12, 5.9816e-12, 6.7436e-12, 7.6368e-12,
23594  8.6812e-12, 9.8747e-12, 1.135e-11, 1.3181e-11, 1.5406e-11, 1.7868e-11,
23595  2.0651e-11, 2.4504e-11, 2.9184e-11, 3.4159e-11, 3.9979e-11, 4.8704e-11,
23596  5.7856e-11, 6.7576e-11, 7.9103e-11, 9.437e-11, 1.1224e-10, 1.3112e-10,
23597  1.5674e-10, 1.8206e-10, 2.0576e-10, 2.3187e-10, 2.7005e-10, 3.0055e-10,
23598  3.3423e-10, 3.6956e-10, 3.8737e-10, 4.263e-10, 4.5154e-10, 4.8383e-10,
23599  5.3582e-10, 5.8109e-10, 6.3741e-10, 6.3874e-10, 6.387e-10, 6.5818e-10,
23600  6.5056e-10, 6.5291e-10, 6.3159e-10, 6.3984e-10, 6.4549e-10, 6.5444e-10,
23601  6.7035e-10, 6.7665e-10, 6.9124e-10, 6.8451e-10, 6.9255e-10, 6.9923e-10,
23602  7.0396e-10, 6.7715e-10, 6.0371e-10, 5.3774e-10, 4.6043e-10, 3.7635e-10,
23603  2.9484e-10, 2.2968e-10, 1.8185e-10, 1.4191e-10, 1.1471e-10, 9.479e-11,
23604  7.9613e-11, 6.7989e-11, 5.9391e-11, 5.281e-11, 4.7136e-11, 4.2618e-11,
23605  3.8313e-11, 3.4686e-11, 3.1669e-11, 2.911e-11, 2.6871e-11, 2.5074e-11,
23606  2.4368e-11, 2.3925e-11, 2.4067e-11, 2.4336e-11, 2.4704e-11, 2.5823e-11,
23607  2.7177e-11, 2.9227e-11, 3.1593e-11, 3.573e-11, 4.0221e-11, 4.3994e-11,
23608  4.8448e-11, 5.3191e-11, 5.8552e-11, 6.3458e-11, 6.6335e-11, 7.2457e-11,
23609  7.9091e-11, 8.2234e-11, 8.7668e-11, 8.7951e-11, 9.2952e-11, 9.6157e-11,
23610  9.5926e-11, 1.012e-10, 1.0115e-10, 9.9577e-11, 9.6633e-11, 9.2891e-11,
23611  9.3315e-11, 9.5584e-11, 1.0064e-10, 1.0509e-10, 1.1455e-10, 1.2443e-10,
23612  1.2963e-10, 1.2632e-10, 1.1308e-10, 1.0186e-10, 8.588e-11, 6.7863e-11,
23613  5.1521e-11, 3.778e-11, 2.8842e-11, 2.2052e-11, 1.7402e-11, 1.4406e-11,
23614  1.1934e-11, 1.0223e-11, 8.9544e-12, 7.9088e-12, 7.0675e-12, 6.2222e-12,
23615  5.6051e-12, 5.0502e-12, 4.5578e-12, 4.2636e-12, 3.9461e-12, 3.7599e-12,
23616  3.5215e-12, 3.2467e-12, 3.0018e-12, 2.6558e-12, 2.3928e-12, 2.0707e-12,
23617  1.7575e-12, 1.5114e-12, 1.2941e-12, 1.1004e-12, 9.5175e-13, 8.2894e-13,
23618  7.3253e-13, 6.5551e-13, 5.9098e-13, 5.3548e-13, 4.8697e-13, 4.4413e-13,
23619  4.06e-13, 3.7188e-13, 3.4121e-13, 3.1356e-13, 2.8856e-13, 2.659e-13,
23620  2.4533e-13, 2.2663e-13, 2.096e-13, 1.9407e-13, 1.799e-13, 1.6695e-13,
23621  1.5512e-13, 1.4429e-13, 1.3437e-13, 1.2527e-13, 1.1693e-13, 1.0927e-13,
23622  1.0224e-13, 9.5767e-14, 8.9816e-14, 8.4335e-14, 7.9285e-14, 7.4626e-14,
23623  7.0325e-14, 6.6352e-14, 6.2676e-14, 5.9274e-14, 5.6121e-14, 5.3195e-14,
23624  5.0479e-14, 4.7953e-14, 4.5602e-14, 4.3411e-14, 4.1367e-14, 3.9456e-14,
23625  3.767e-14, 3.5996e-14, 3.4427e-14, 3.2952e-14, 3.1566e-14, 3.0261e-14,
23626  2.903e-14, 2.7868e-14, 2.677e-14, 2.573e-14, 2.4745e-14, 2.3809e-14,
23627  2.2921e-14, 2.2076e-14, 2.1271e-14, 2.0504e-14, 1.9772e-14, 1.9073e-14,
23628  1.8404e-14, 1.7764e-14, 1.7151e-14, 1.6564e-14, 1.6e-14, 1.5459e-14,
23629  1.4939e-14, 1.4439e-14, 1.3958e-14, 1.3495e-14, 1.3049e-14, 1.262e-14,
23630  1.2206e-14, 1.1807e-14, 1.1422e-14, 1.105e-14, 1.0691e-14, 1.0345e-14,
23631  1.001e-14, 9.687e-15, 9.3747e-15, 9.0727e-15, 8.7808e-15, 8.4986e-15,
23632  8.2257e-15, 7.9617e-15, 7.7064e-15, 7.4594e-15, 7.2204e-15, 6.9891e-15,
23633  6.7653e-15, 6.5488e-15, 6.3392e-15, 6.1363e-15, 5.9399e-15, 5.7499e-15,
23634  5.5659e-15, 5.3878e-15, 5.2153e-15, 5.0484e-15, 4.8868e-15, 4.7303e-15,
23635  4.5788e-15, 4.4322e-15, 4.2902e-15, 4.1527e-15, 4.0196e-15, 3.8907e-15,
23636  3.7659e-15, 3.6451e-15, 3.5281e-15, 3.4149e-15, 3.3052e-15, 3.1991e-15,
23637  3.0963e-15, 2.9967e-15, 2.9004e-15, 2.8071e-15, 2.7167e-15, 2.6293e-15,
23638  2.5446e-15, 2.4626e-15, 2.3833e-15, 2.3064e-15, 2.232e-15, 2.16e-15,
23639  2.0903e-15, 2.0228e-15, 1.9574e-15, 1.8942e-15, 1.8329e-15, 1.7736e-15,
23640  1.7163e-15, 1.6607e-15, 1.6069e-15, 1.5548e-15, 1.5044e-15, 1.4557e-15,
23641  1.4084e-15, 1.3627e-15, 1.3185e-15, 1.2757e-15, 1.2342e-15, 1.1941e-15,
23642  1.1552e-15, 1.1177e-15, 1.0813e-15, 1.0461e-15, 1.012e-15, 9.79e-16,
23643  9.4707e-16, 9.1618e-16, 8.8628e-16, 8.5734e-16, 8.2933e-16, 8.0223e-16,
23644  7.76e-16, 7.5062e-16, 7.2606e-16, 7.0229e-16, 6.7929e-16, 6.5703e-16,
23645  6.355e-16, 6.1466e-16, 5.9449e-16, 5.7498e-16, 5.561e-16, 5.3783e-16,
23646  5.2015e-16, 5.0305e-16, 4.865e-16, 4.7049e-16, 4.55e-16, 4.4002e-16,
23647  4.2552e-16, 4.1149e-16, 3.9792e-16, 3.8479e-16, 3.7209e-16, 3.5981e-16,
23648  3.4792e-16, 3.3642e-16, 3.253e-16, 3.1454e-16, 3.0413e-16, 2.9406e-16,
23649  2.8432e-16, 2.749e-16, 2.6579e-16, 2.5697e-16, 2.4845e-16, 2.402e-16,
23650  2.3223e-16, 2.2451e-16, 2.1705e-16, 2.0984e-16, 2.0286e-16, 1.9611e-16,
23651  1.8958e-16, 1.8327e-16, 1.7716e-16, 1.7126e-16, 1.6555e-16, 1.6003e-16,
23652  1.5469e-16, 1.4952e-16, 1.4453e-16, 1.397e-16, 1.3503e-16}};
23653 
23654 struct s_sh2ob_ {
23655  double e_1[3];
23656  int e_2;
23657 } sh2ob_ = {{-20., 2e4, 10.}, 2003};
23658 
23659 struct s_s260a_ {
23660  double e_1[2003];
23661 } s260a_ = {
23662  {.1775, .17045, .16457, .17045, .1775, .20036,
23663  .21347, .22454, .23428, .23399, .23022, .20724,
23664  .19712, .18317, .16724, .1478, .12757, .11626,
23665  .10098, .089033, .07977, .067416, .059588, .051117,
23666  .046218, .042179, .034372, .029863, .025252, .022075,
23667  .019209, .015816, .013932, .011943, .010079, .0087667,
23668  .0074094, .0064967, .0055711, .0048444, .0042552, .0036953,
23669  .0032824, .0029124, .0026102, .002337, .00211, .0019008,
23670  .0017145, .0015573, .0014206, .0012931, .0011803, .0010774,
23671  9.8616e-4, 9.0496e-4, 8.3071e-4, 7.6319e-4, 7.0149e-4, 6.4637e-4,
23672  5.9566e-4, 5.4987e-4, 5.0768e-4, 4.688e-4, 4.3317e-4, 4.0037e-4,
23673  3.7064e-4, 3.4325e-4, 3.1809e-4, 2.9501e-4, 2.7382e-4, 2.543e-4,
23674  2.363e-4, 2.1977e-4, 2.0452e-4, 1.9042e-4, 1.774e-4, 1.6544e-4,
23675  1.5442e-4, 1.4425e-4, 1.3486e-4, 1.2618e-4, 1.1817e-4, 1.1076e-4,
23676  1.0391e-4, 9.7563e-5, 9.1696e-5, 8.6272e-5, 8.1253e-5, 7.6607e-5,
23677  7.2302e-5, 6.8311e-5, 6.4613e-5, 6.1183e-5, 5.8001e-5, 5.5048e-5,
23678  5.2307e-5, 4.9761e-5, 4.7395e-5, 4.5197e-5, 4.3155e-5, 4.1256e-5,
23679  3.9491e-5, 3.7849e-5, 3.6324e-5, 3.4908e-5, 3.3594e-5, 3.2374e-5,
23680  3.1244e-5, 3.0201e-5, 2.924e-5, 2.8356e-5, 2.7547e-5, 2.6814e-5,
23681  2.6147e-5, 2.5551e-5, 2.5029e-5, 2.4582e-5, 2.4203e-5, 2.3891e-5,
23682  2.3663e-5, 2.3531e-5, 2.3483e-5, 2.3516e-5, 2.3694e-5, 2.4032e-5,
23683  2.4579e-5, 2.5234e-5, 2.6032e-5, 2.7119e-5, 2.8631e-5, 3.0848e-5,
23684  3.3262e-5, 3.6635e-5, 4.0732e-5, 4.5923e-5, 5.3373e-5, 6.1875e-5,
23685  7.2031e-5, 8.598e-5, 9.8642e-5, 1.1469e-4, 1.3327e-4, 1.539e-4,
23686  1.7513e-4, 2.0665e-4, 2.3609e-4, 2.622e-4, 2.8677e-4, 3.259e-4,
23687  3.8624e-4, 4.157e-4, 4.5207e-4, 4.9336e-4, 5.45e-4, 5.8258e-4,
23688  5.8086e-4, 5.6977e-4, 5.3085e-4, 4.802e-4, 4.3915e-4, 4.0343e-4,
23689  3.7853e-4, 3.7025e-4, 3.9637e-4, 4.4675e-4, 4.7072e-4, 4.9022e-4,
23690  5.2076e-4, 5.3676e-4, 5.2755e-4, 4.8244e-4, 4.5473e-4, 4.3952e-4,
23691  3.9614e-4, 3.4086e-4, 2.9733e-4, 2.6367e-4, 2.3767e-4, 2.0427e-4,
23692  1.7595e-4, 1.5493e-4, 1.3851e-4, 1.1874e-4, 1.0735e-4, 9.049e-5,
23693  8.1149e-5, 7.4788e-5, 6.5438e-5, 5.8248e-5, 4.8076e-5, 4.3488e-5,
23694  3.7856e-5, 3.3034e-5, 2.9592e-5, 2.6088e-5, 2.3497e-5, 2.0279e-5,
23695  1.7526e-5, 1.5714e-5, 1.3553e-5, 1.2145e-5, 1.0802e-5, 9.7681e-6,
23696  8.8196e-6, 7.8291e-6, 7.1335e-6, 6.4234e-6, 5.8391e-6, 5.3532e-6,
23697  4.9079e-6, 4.5378e-6, 4.1716e-6, 3.8649e-6, 3.5893e-6, 3.3406e-6,
23698  3.1199e-6, 2.9172e-6, 2.7348e-6, 2.5644e-6, 2.4086e-6, 2.2664e-6,
23699  2.1359e-6, 2.0159e-6, 1.9051e-6, 1.8031e-6, 1.7074e-6, 1.6185e-6,
23700  1.5356e-6, 1.4584e-6, 1.3861e-6, 1.3179e-6, 1.2545e-6, 1.1951e-6,
23701  1.1395e-6, 1.0873e-6, 1.0384e-6, 9.925e-7, 9.4935e-7, 9.0873e-7,
23702  8.705e-7, 8.3446e-7, 8.0046e-7, 7.6834e-7, 7.38e-7, 7.0931e-7,
23703  6.8217e-7, 6.5648e-7, 6.3214e-7, 6.0909e-7, 5.8725e-7, 5.6655e-7,
23704  5.4693e-7, 5.2835e-7, 5.1077e-7, 4.9416e-7, 4.7853e-7, 4.6381e-7,
23705  4.5007e-7, 4.3728e-7, 4.255e-7, 4.145e-7, 4.0459e-7, 3.9532e-7,
23706  3.8662e-7, 3.7855e-7, 3.7041e-7, 3.6254e-7, 3.542e-7, 3.4617e-7,
23707  3.3838e-7, 3.3212e-7, 3.2655e-7, 3.1865e-7, 3.1203e-7, 3.067e-7,
23708  3.0252e-7, 2.9749e-7, 2.9184e-7, 2.8795e-7, 2.8501e-7, 2.8202e-7,
23709  2.7856e-7, 2.7509e-7, 2.7152e-7, 2.6844e-7, 2.6642e-7, 2.6548e-7,
23710  2.6617e-7, 2.6916e-7, 2.7372e-7, 2.8094e-7, 2.9236e-7, 3.1035e-7,
23711  3.2854e-7, 3.5481e-7, 3.9377e-7, 4.4692e-7, 5.0761e-7, 5.7715e-7,
23712  6.7725e-7, 8.0668e-7, 9.3716e-7, 1.0797e-6, 1.1689e-6, 1.3217e-6,
23713  1.4814e-6, 1.5627e-6, 1.6519e-6, 1.7601e-6, 1.906e-6, 2.0474e-6,
23714  2.0716e-6, 2.0433e-6, 1.9752e-6, 1.8466e-6, 1.7526e-6, 1.6657e-6,
23715  1.587e-6, 1.5633e-6, 1.652e-6, 1.8471e-6, 1.9953e-6, 2.0975e-6,
23716  2.2016e-6, 2.2542e-6, 2.3081e-6, 2.3209e-6, 2.2998e-6, 2.3056e-6,
23717  2.2757e-6, 2.2685e-6, 2.2779e-6, 2.2348e-6, 2.2445e-6, 2.3174e-6,
23718  2.4284e-6, 2.529e-6, 2.734e-6, 2.972e-6, 3.2332e-6, 3.5392e-6,
23719  3.9013e-6, 4.3334e-6, 4.9088e-6, 5.3428e-6, 5.9142e-6, 6.6106e-6,
23720  7.4709e-6, 8.5019e-6, 9.6835e-6, 1.0984e-5, 1.2831e-5, 1.4664e-5,
23721  1.708e-5, 2.0103e-5, 2.4148e-5, 2.7948e-5, 3.2855e-5, 3.9046e-5,
23722  4.6429e-5, 5.6633e-5, 6.6305e-5, 7.6048e-5, 8.7398e-5, 1.0034e-4,
23723  1.1169e-4, 1.2813e-4, 1.3354e-4, 1.3952e-4, 1.4204e-4, 1.4615e-4,
23724  1.5144e-4, 1.5475e-4, 1.6561e-4, 1.7135e-4, 1.6831e-4, 1.6429e-4,
23725  1.6353e-4, 1.6543e-4, 1.5944e-4, 1.5404e-4, 1.5458e-4, 1.6287e-4,
23726  1.7277e-4, 1.8387e-4, 1.7622e-4, 1.636e-4, 1.5273e-4, 1.3667e-4,
23727  1.2364e-4, 9.7576e-5, 7.914e-5, 6.4241e-5, 5.1826e-5, 4.1415e-5,
23728  3.1347e-5, 2.5125e-5, 2.0027e-5, 1.6362e-5, 1.3364e-5, 1.1117e-5,
23729  9.4992e-6, 8.1581e-6, 7.1512e-6, 6.2692e-6, 5.5285e-6, 4.9e-6,
23730  4.3447e-6, 3.8906e-6, 3.4679e-6, 3.1089e-6, 2.8115e-6, 2.5496e-6,
23731  2.2982e-6, 2.0861e-6, 1.8763e-6, 1.7035e-6, 1.5548e-6, 1.4107e-6,
23732  1.2839e-6, 1.1706e-6, 1.0709e-6, 9.8099e-7, 8.9901e-7, 8.2394e-7,
23733  7.5567e-7, 6.9434e-7, 6.3867e-7, 5.8845e-7, 5.4263e-7, 5.0033e-7,
23734  4.6181e-7, 4.2652e-7, 3.9437e-7, 3.6497e-7, 3.3781e-7, 3.1292e-7,
23735  2.9011e-7, 2.6915e-7, 2.4989e-7, 2.3215e-7, 2.1582e-7, 2.0081e-7,
23736  1.87e-7, 1.7432e-7, 1.6264e-7, 1.5191e-7, 1.4207e-7, 1.3306e-7,
23737  1.2484e-7, 1.1737e-7, 1.1056e-7, 1.0451e-7, 9.906e-8, 9.4135e-8,
23738  8.9608e-8, 8.5697e-8, 8.1945e-8, 7.8308e-8, 7.4808e-8, 7.1686e-8,
23739  6.8923e-8, 6.5869e-8, 6.3308e-8, 6.084e-8, 5.8676e-8, 5.6744e-8,
23740  5.5016e-8, 5.3813e-8, 5.2792e-8, 5.2097e-8, 5.1737e-8, 5.1603e-8,
23741  5.1656e-8, 5.1989e-8, 5.2467e-8, 5.2918e-8, 5.3589e-8, 5.456e-8,
23742  5.5869e-8, 5.7403e-8, 5.8968e-8, 6.0973e-8, 6.3432e-8, 6.6245e-8,
23743  6.9353e-8, 7.2686e-8, 7.6541e-8, 8.0991e-8, 8.595e-8, 9.1429e-8,
23744  9.7851e-8, 1.0516e-7, 1.1349e-7, 1.2295e-7, 1.3335e-7, 1.4488e-7,
23745  1.5864e-7, 1.7412e-7, 1.914e-7, 2.1078e-7, 2.3369e-7, 2.5996e-7,
23746  2.8848e-7, 3.2169e-7, 3.5991e-7, 4.0566e-7, 4.5969e-7, 5.3094e-7,
23747  6.1458e-7, 7.1155e-7, 8.3045e-7, 9.9021e-7, 1.2042e-6, 1.4914e-6,
23748  1.8145e-6, 2.221e-6, 2.7831e-6, 3.4533e-6, 4.4446e-6, 5.1989e-6,
23749  6.2289e-6, 7.1167e-6, 8.3949e-6, 9.6417e-6, 1.0313e-5, 1.0485e-5,
23750  1.0641e-5, 1.0898e-5, 1.0763e-5, 1.0506e-5, 1.0497e-5, 1.1696e-5,
23751  1.2654e-5, 1.3029e-5, 1.3175e-5, 1.4264e-5, 1.4985e-5, 1.4999e-5,
23752  1.4317e-5, 1.4616e-5, 1.4963e-5, 1.5208e-5, 1.4942e-5, 1.3879e-5,
23753  1.3087e-5, 1.1727e-5, 1.0515e-5, 9.0073e-6, 7.3133e-6, 6.1181e-6,
23754  5.0623e-6, 4.1105e-6, 3.3915e-6, 2.6711e-6, 2.1464e-6, 1.7335e-6,
23755  1.4302e-6, 1.1847e-6, 9.9434e-7, 8.2689e-7, 7.0589e-7, 6.075e-7,
23756  5.3176e-7, 4.6936e-7, 4.1541e-7, 3.6625e-7, 3.2509e-7, 2.9156e-7,
23757  2.6308e-7, 2.3819e-7, 2.1421e-7, 1.9366e-7, 1.7626e-7, 1.5982e-7,
23758  1.4567e-7, 1.3354e-7, 1.2097e-7, 1.1029e-7, 1.0063e-7, 9.2003e-8,
23759  8.4245e-8, 7.7004e-8, 7.0636e-8, 6.4923e-8, 5.9503e-8, 5.4742e-8,
23760  5.045e-8, 4.647e-8, 4.2881e-8, 3.955e-8, 3.6541e-8, 3.3803e-8,
23761  3.1279e-8, 2.8955e-8, 2.6858e-8, 2.4905e-8, 2.3146e-8, 2.1539e-8,
23762  2.0079e-8, 1.8746e-8, 1.7517e-8, 1.6396e-8, 1.5369e-8, 1.4426e-8,
23763  1.3543e-8, 1.2724e-8, 1.1965e-8, 1.1267e-8, 1.0617e-8, 1.001e-8,
23764  9.4662e-9, 8.9553e-9, 8.4988e-9, 8.0807e-9, 7.7043e-9, 7.3721e-9,
23765  7.0707e-9, 6.8047e-9, 6.5702e-9, 6.3634e-9, 6.1817e-9, 6.0239e-9,
23766  5.8922e-9, 5.7824e-9, 5.7019e-9, 5.6368e-9, 5.594e-9, 5.5669e-9,
23767  5.5583e-9, 5.5653e-9, 5.5837e-9, 5.6243e-9, 5.6883e-9, 5.78e-9,
23768  5.8964e-9, 6.0429e-9, 6.2211e-9, 6.4282e-9, 6.6634e-9, 6.9306e-9,
23769  7.2336e-9, 7.5739e-9, 7.9562e-9, 8.3779e-9, 8.8575e-9, 9.3992e-9,
23770  1.0004e-8, 1.0684e-8, 1.145e-8, 1.232e-8, 1.3311e-8, 1.4455e-8,
23771  1.5758e-8, 1.7254e-8, 1.8927e-8, 2.093e-8, 2.3348e-8, 2.6074e-8,
23772  2.9221e-8, 3.277e-8, 3.7485e-8, 4.2569e-8, 4.8981e-8, 5.5606e-8,
23773  6.2393e-8, 7.1901e-8, 8.2921e-8, 9.5513e-8, 1.1111e-7, 1.3143e-7,
23774  1.5971e-7, 1.8927e-7, 2.2643e-7, 2.786e-7, 3.2591e-7, 3.7024e-7,
23775  4.2059e-7, 4.9432e-7, 5.5543e-7, 5.7498e-7, 5.921e-7, 6.1005e-7,
23776  6.1577e-7, 5.9193e-7, 5.6602e-7, 5.7403e-7, 6.005e-7, 6.4723e-7,
23777  6.7073e-7, 7.5415e-7, 8.0982e-7, 8.7658e-7, 9.143e-7, 9.4459e-7,
23778  9.8347e-7, 9.8768e-7, 1.0153e-6, 1.0066e-6, 1.0353e-6, 1.0353e-6,
23779  1.0722e-6, 1.1138e-6, 1.1923e-6, 1.2947e-6, 1.4431e-6, 1.6537e-6,
23780  1.8662e-6, 2.2473e-6, 2.6464e-6, 3.1041e-6, 3.4858e-6, 4.0167e-6,
23781  4.6675e-6, 5.0983e-6, 5.7997e-6, 6.0503e-6, 6.4687e-6, 6.5396e-6,
23782  6.7986e-6, 7.0244e-6, 7.2305e-6, 7.6732e-6, 7.9783e-6, 7.9846e-6,
23783  7.7617e-6, 7.7657e-6, 7.7411e-6, 7.8816e-6, 7.8136e-6, 8.0051e-6,
23784  8.5799e-6, 9.1659e-6, 9.8646e-6, 9.492e-6, 8.767e-6, 8.2034e-6,
23785  7.2297e-6, 6.2324e-6, 4.9315e-6, 3.9128e-6, 3.1517e-6, 2.4469e-6,
23786  1.8815e-6, 1.4627e-6, 1.1698e-6, 9.4686e-7, 7.8486e-7, 6.697e-7,
23787  5.8811e-7, 5.2198e-7, 4.6809e-7, 4.1671e-7, 3.7006e-7, 3.3066e-7,
23788  2.9387e-7, 2.6415e-7, 2.3409e-7, 2.0991e-7, 1.9132e-7, 1.7519e-7,
23789  1.5939e-7, 1.4368e-7, 1.305e-7, 1.1883e-7, 1.0772e-7, 9.6884e-8,
23790  8.7888e-8, 7.8956e-8, 7.1024e-8, 6.3824e-8, 5.7256e-8, 5.1769e-8,
23791  4.7037e-8, 4.2901e-8, 3.897e-8, 3.5467e-8, 3.2502e-8, 2.9827e-8,
23792  2.7389e-8, 2.5111e-8, 2.3056e-8, 2.1267e-8, 1.961e-8, 1.8133e-8,
23793  1.6775e-8, 1.5491e-8, 1.4329e-8, 1.3265e-8, 1.23e-8, 1.142e-8,
23794  1.0593e-8, 9.8475e-9, 9.1585e-9, 8.5256e-9, 7.9525e-9, 7.4226e-9,
23795  6.9379e-9, 6.495e-9, 6.0911e-9, 5.7242e-9, 5.3877e-9, 5.0821e-9,
23796  4.8051e-9, 4.5554e-9, 4.3315e-9, 4.1336e-9, 3.9632e-9, 3.8185e-9,
23797  3.708e-9, 3.6296e-9, 3.5804e-9, 3.5776e-9, 3.6253e-9, 3.7115e-9,
23798  3.8151e-9, 3.9804e-9, 4.1742e-9, 4.3581e-9, 4.5306e-9, 4.7736e-9,
23799  5.1297e-9, 5.5291e-9, 5.9125e-9, 6.4956e-9, 7.0362e-9, 7.5318e-9,
23800  7.9947e-9, 8.6438e-9, 9.7227e-9, 1.013e-8, 1.0549e-8, 1.1064e-8,
23801  1.1702e-8, 1.2043e-8, 1.1781e-8, 1.1838e-8, 1.1917e-8, 1.2131e-8,
23802  1.2476e-8, 1.3611e-8, 1.436e-8, 1.5057e-8, 1.6247e-8, 1.7284e-8,
23803  1.842e-8, 1.8352e-8, 1.8722e-8, 1.9112e-8, 1.9092e-8, 1.9311e-8,
23804  1.9411e-8, 1.9884e-8, 2.0508e-8, 2.151e-8, 2.3143e-8, 2.505e-8,
23805  2.7596e-8, 3.1231e-8, 3.626e-8, 4.341e-8, 5.224e-8, 6.3236e-8,
23806  7.7522e-8, 9.8688e-8, 1.1859e-7, 1.4341e-7, 1.6798e-7, 1.9825e-7,
23807  2.2898e-7, 2.6257e-7, 2.9884e-7, 3.3247e-7, 3.4936e-7, 3.5583e-7,
23808  3.715e-7, 3.658e-7, 3.7124e-7, 3.703e-7, 4.1536e-7, 4.6656e-7,
23809  4.6677e-7, 4.7507e-7, 4.9653e-7, 5.3795e-7, 5.4957e-7, 5.2238e-7,
23810  5.469e-7, 5.6569e-7, 5.9844e-7, 5.9835e-7, 5.6522e-7, 5.4123e-7,
23811  4.7904e-7, 4.2851e-7, 3.5603e-7, 2.8932e-7, 2.3655e-7, 1.8592e-7,
23812  1.4943e-7, 1.1971e-7, 9.8482e-8, 8.3675e-8, 7.127e-8, 6.2496e-8,
23813  5.4999e-8, 4.9821e-8, 4.5387e-8, 4.134e-8, 3.7453e-8, 3.3298e-8,
23814  3.012e-8, 2.7032e-8, 2.4236e-8, 2.15e-8, 1.8988e-8, 1.7414e-8,
23815  1.5706e-8, 1.4192e-8, 1.3204e-8, 1.1759e-8, 1.0737e-8, 9.6309e-9,
23816  8.8179e-9, 8.2619e-9, 7.2264e-9, 6.4856e-9, 5.8037e-9, 5.2093e-9,
23817  4.7205e-9, 4.1749e-9, 3.7852e-9, 3.3915e-9, 3.0089e-9, 2.7335e-9,
23818  2.4398e-9, 2.2031e-9, 1.9786e-9, 1.789e-9, 1.6266e-9, 1.483e-9,
23819  1.3576e-9, 1.2518e-9, 1.1587e-9, 1.0726e-9, 9.9106e-10, 9.1673e-10,
23820  8.5084e-10, 7.9147e-10, 7.2882e-10, 6.7342e-10, 6.2593e-10, 5.8294e-10,
23821  5.4435e-10, 5.0997e-10, 4.7806e-10, 4.4931e-10, 4.2357e-10, 4.0023e-10,
23822  3.7909e-10, 3.5999e-10, 3.4285e-10, 3.2776e-10, 3.1468e-10, 3.0377e-10,
23823  2.9479e-10, 2.8877e-10, 2.8512e-10, 2.8617e-10, 2.8976e-10, 3.0001e-10,
23824  3.1718e-10, 3.3898e-10, 3.5857e-10, 3.8358e-10, 4.3131e-10, 4.5741e-10,
23825  4.6948e-10, 4.7594e-10, 4.9529e-10, 5.1563e-10, 4.9475e-10, 4.8369e-10,
23826  4.8829e-10, 5.0047e-10, 5.0203e-10, 5.1954e-10, 5.5352e-10, 5.9928e-10,
23827  6.7148e-10, 7.1121e-10, 7.4317e-10, 7.6039e-10, 7.8313e-10, 8.0684e-10,
23828  7.8553e-10, 7.8312e-10, 7.8537e-10, 7.8872e-10, 8.0185e-10, 8.1004e-10,
23829  8.2608e-10, 8.2525e-10, 8.3857e-10, 8.792e-10, 9.2451e-10, 9.8661e-10,
23830  1.0629e-9, 1.1659e-9, 1.2922e-9, 1.4387e-9, 1.6254e-9, 1.8425e-9,
23831  2.1428e-9, 2.5477e-9, 3.0379e-9, 3.757e-9, 4.4354e-9, 5.1802e-9,
23832  6.2769e-9, 7.4894e-9, 8.7474e-9, 9.8037e-9, 1.1582e-8, 1.3293e-8,
23833  1.4471e-8, 1.5025e-8, 1.558e-8, 1.6228e-8, 1.6413e-8, 1.602e-8,
23834  1.6393e-8, 1.7545e-8, 1.959e-8, 2.1449e-8, 2.3856e-8, 2.705e-8,
23835  3.0214e-8, 3.3733e-8, 3.6487e-8, 3.9353e-8, 4.266e-8, 4.6385e-8,
23836  4.9955e-8, 5.5313e-8, 6.0923e-8, 6.8948e-8, 7.3649e-8, 8.2602e-8,
23837  9.2212e-8, 9.908e-8, 1.1319e-7, 1.179e-7, 1.2941e-7, 1.3199e-7,
23838  1.3914e-7, 1.4843e-7, 1.53e-7, 1.6419e-7, 1.7095e-7, 1.6988e-7,
23839  1.6494e-7, 1.6327e-7, 1.6067e-7, 1.6909e-7, 1.7118e-7, 1.8106e-7,
23840  1.9857e-7, 2.1696e-7, 2.3385e-7, 2.2776e-7, 2.1402e-7, 1.9882e-7,
23841  1.7362e-7, 1.4308e-7, 1.1158e-7, 8.8781e-8, 6.8689e-8, 5.2062e-8,
23842  4.0427e-8, 3.2669e-8, 2.7354e-8, 2.32e-8, 2.058e-8, 1.8676e-8,
23843  1.7329e-8, 1.6621e-8, 1.6433e-8, 1.6953e-8, 1.7134e-8, 1.7948e-8,
23844  1.9107e-8, 1.9875e-8, 2.1416e-8, 2.1556e-8, 2.2265e-8, 2.2171e-8,
23845  2.2534e-8, 2.3029e-8, 2.2828e-8, 2.3143e-8, 2.2965e-8, 2.2223e-8,
23846  2.1108e-8, 2.0265e-8, 1.9516e-8, 1.9941e-8, 2.0312e-8, 2.108e-8,
23847  2.2611e-8, 2.421e-8, 2.6069e-8, 2.5097e-8, 2.3318e-8, 2.1543e-8,
23848  1.8942e-8, 1.596e-8, 1.2386e-8, 9.934e-9, 7.7502e-9, 5.9462e-9,
23849  4.5113e-9, 3.5523e-9, 2.8844e-9, 2.3394e-9, 1.9584e-9, 1.6749e-9,
23850  1.4624e-9, 1.2809e-9, 1.1359e-9, 1.0087e-9, 9.0166e-10, 8.1079e-10,
23851  7.2219e-10, 6.4922e-10, 5.8803e-10, 5.329e-10, 4.859e-10, 4.4111e-10,
23852  4.0184e-10, 3.6644e-10, 3.3529e-10, 3.0789e-10, 2.8286e-10, 2.6089e-10,
23853  2.4125e-10, 2.2355e-10, 2.0783e-10, 1.937e-10, 1.8088e-10, 1.6948e-10,
23854  1.5929e-10, 1.5013e-10, 1.4193e-10, 1.347e-10, 1.2841e-10, 1.2307e-10,
23855  1.1865e-10, 1.1502e-10, 1.1243e-10, 1.1099e-10, 1.1066e-10, 1.1216e-10,
23856  1.1529e-10, 1.2171e-10, 1.3128e-10, 1.4153e-10, 1.5962e-10, 1.8048e-10,
23857  2.0936e-10, 2.3165e-10, 2.5746e-10, 2.96e-10, 3.3707e-10, 3.5267e-10,
23858  3.5953e-10, 3.6822e-10, 3.8363e-10, 3.8286e-10, 3.5883e-10, 3.6154e-10,
23859  3.6653e-10, 3.8507e-10, 4.025e-10, 4.4435e-10, 4.9889e-10, 5.6932e-10,
23860  6.3599e-10, 7.0281e-10, 7.5777e-10, 8.1279e-10, 8.891e-10, 9.34e-10,
23861  1.0076e-9, 1.0945e-9, 1.1898e-9, 1.3108e-9, 1.4725e-9, 1.7028e-9,
23862  1.9619e-9, 2.3527e-9, 2.6488e-9, 3.0327e-9, 3.4396e-9, 3.8797e-9,
23863  4.4115e-9, 4.6853e-9, 4.9553e-9, 4.9551e-9, 5.1062e-9, 5.0996e-9,
23864  5.1119e-9, 5.2283e-9, 5.8297e-9, 6.3439e-9, 6.2675e-9, 6.3296e-9,
23865  6.5173e-9, 7.1685e-9, 7.0528e-9, 6.8856e-9, 7.3182e-9, 7.699e-9,
23866  8.3461e-9, 8.1946e-9, 7.7153e-9, 7.2411e-9, 6.4511e-9, 5.7336e-9,
23867  4.6105e-9, 3.6962e-9, 2.9944e-9, 2.4317e-9, 1.9399e-9, 1.5331e-9,
23868  1.2633e-9, 1.0613e-9, 9.0136e-10, 7.9313e-10, 7.1543e-10, 6.6485e-10,
23869  6.4225e-10, 6.398e-10, 6.4598e-10, 6.7428e-10, 7.027e-10, 7.4694e-10,
23870  7.7946e-10, 7.9395e-10, 7.8716e-10, 7.6933e-10, 7.622e-10, 7.4825e-10,
23871  7.4805e-10, 7.6511e-10, 7.6492e-10, 7.4103e-10, 7.1979e-10, 7.1686e-10,
23872  7.3403e-10, 7.1142e-10, 7.0212e-10, 7.1548e-10, 7.5253e-10, 8.0444e-10,
23873  8.2378e-10, 7.8004e-10, 7.1712e-10, 6.4978e-10, 5.7573e-10, 4.8675e-10,
23874  3.7945e-10, 3.0118e-10, 2.4241e-10, 1.91e-10, 1.4816e-10, 1.1567e-10,
23875  9.4183e-11, 7.766e-11, 6.527e-11, 5.6616e-11, 4.9576e-11, 4.4137e-11,
23876  3.9459e-11, 3.5759e-11, 3.2478e-11, 2.9419e-11, 2.6703e-11, 2.4365e-11,
23877  2.2412e-11, 2.0606e-11, 1.9067e-11, 1.78e-11, 1.6695e-11, 1.5729e-11,
23878  1.4887e-11, 1.4135e-11, 1.3519e-11, 1.2992e-11, 1.2563e-11, 1.2223e-11,
23879  1.1962e-11, 1.1775e-11, 1.1657e-11, 1.1605e-11, 1.1619e-11, 1.1697e-11,
23880  1.1839e-11, 1.2046e-11, 1.2319e-11, 1.2659e-11, 1.307e-11, 1.3553e-11,
23881  1.4113e-11, 1.4754e-11, 1.548e-11, 1.6298e-11, 1.7214e-11, 1.8236e-11,
23882  1.9372e-11, 2.0635e-11, 2.2036e-11, 2.359e-11, 2.5317e-11, 2.7242e-11,
23883  2.94e-11, 3.1849e-11, 3.4654e-11, 3.7923e-11, 4.1695e-11, 4.6055e-11,
23884  5.094e-11, 5.5624e-11, 6.0667e-11, 6.6261e-11, 7.2692e-11, 7.9711e-11,
23885  8.7976e-11, 9.6884e-11, 1.0775e-10, 1.2093e-10, 1.3531e-10, 1.5404e-10,
23886  1.7315e-10, 1.9862e-10, 2.3341e-10, 2.7014e-10, 3.1716e-10, 3.6957e-10,
23887  4.3233e-10, 5.2566e-10, 6.2251e-10, 7.2149e-10, 8.3958e-10, 9.5931e-10,
23888  1.1388e-9, 1.2973e-9, 1.4442e-9, 1.5638e-9, 1.6974e-9, 1.8489e-9,
23889  1.983e-9, 2.172e-9, 2.3662e-9, 2.6987e-9, 3.1697e-9, 3.6907e-9,
23890  4.2625e-9, 4.7946e-9, 5.3848e-9, 6.0897e-9, 6.473e-9, 7.1483e-9,
23891  7.7432e-9, 8.0851e-9, 8.5013e-9, 8.5909e-9, 9.189e-9, 9.3124e-9,
23892  9.5936e-9, 9.8787e-9, 9.9036e-9, 9.6712e-9, 9.2036e-9, 9.0466e-9,
23893  8.938e-9, 9.1815e-9, 9.5092e-9, 1.0027e-8, 1.0876e-8, 1.1744e-8,
23894  1.1853e-8, 1.1296e-8, 1.0134e-8, 8.8245e-9, 7.393e-9, 5.715e-9,
23895  4.4884e-9, 3.4027e-9, 2.6054e-9, 2.079e-9, 1.7267e-9, 1.4724e-9,
23896  1.2722e-9, 1.1234e-9, 1.0186e-9, 9.468e-10, 8.8854e-10, 8.5127e-10,
23897  8.3157e-10, 8.2226e-10, 8.3395e-10, 8.3294e-10, 8.4725e-10, 8.8814e-10,
23898  9.3697e-10, 1.0112e-9, 1.0412e-9, 1.0948e-9, 1.181e-9, 1.2267e-9,
23899  1.369e-9, 1.4512e-9, 1.5568e-9, 1.6552e-9, 1.7321e-9, 1.8797e-9,
23900  1.921e-9, 1.9686e-9, 1.9917e-9, 1.9357e-9, 1.8486e-9, 1.7575e-9,
23901  1.7113e-9, 1.7163e-9, 1.7623e-9, 1.8536e-9, 1.9765e-9, 2.1334e-9,
23902  2.3237e-9, 2.3259e-9, 2.1833e-9, 1.9785e-9, 1.7308e-9, 1.4596e-9,
23903  1.1198e-9, 8.7375e-10, 6.5381e-10, 4.8677e-10, 3.6756e-10, 2.9155e-10,
23904  2.3735e-10, 1.959e-10, 1.6638e-10, 1.4549e-10, 1.2947e-10, 1.1511e-10,
23905  1.0548e-10, 9.6511e-11, 9.0469e-11, 8.517e-11, 7.7804e-11, 7.1971e-11,
23906  6.6213e-11, 6.1063e-11, 5.5881e-11, 5.0508e-11, 4.5932e-11, 4.1997e-11,
23907  3.7672e-11, 3.3972e-11, 3.0318e-11, 2.6769e-11, 2.3874e-11, 2.1336e-11,
23908  1.9073e-11, 1.7313e-11, 1.5904e-11, 1.4684e-11, 1.3698e-11, 1.2873e-11,
23909  1.2175e-11, 1.1542e-11, 1.1024e-11, 1.0602e-11, 1.0267e-11, 1.0012e-11,
23910  9.8379e-12, 9.7482e-12, 9.7564e-12, 9.8613e-12, 1.0092e-11, 1.0418e-11,
23911  1.0868e-11, 1.1585e-11, 1.2351e-11, 1.3372e-11, 1.4841e-11, 1.6457e-11,
23912  1.8681e-11, 2.055e-11, 2.2912e-11, 2.5958e-11, 2.9137e-11, 3.2368e-11,
23913  3.4848e-11, 3.8462e-11, 4.219e-11, 4.5629e-11, 4.9022e-11, 5.4232e-11,
23914  6.19e-11, 7.1953e-11, 8.5368e-11, 9.9699e-11, 1.1734e-10, 1.4185e-10,
23915  1.7017e-10, 1.9813e-10, 2.3859e-10, 2.7304e-10, 3.0971e-10, 3.5129e-10,
23916  3.9405e-10, 4.5194e-10, 4.8932e-10, 5.2436e-10, 5.4098e-10, 5.5542e-10,
23917  5.7794e-10, 5.6992e-10, 5.879e-10, 6.1526e-10, 6.8034e-10, 6.7956e-10,
23918  6.6864e-10, 6.9329e-10, 7.2971e-10, 7.6546e-10, 7.5078e-10, 7.8406e-10,
23919  8.3896e-10, 9.0111e-10, 9.1994e-10, 8.7189e-10, 8.1426e-10, 7.3097e-10,
23920  6.3357e-10, 5.1371e-10, 4.0936e-10, 3.2918e-10, 2.6255e-10, 2.0724e-10,
23921  1.6879e-10, 1.4165e-10, 1.1989e-10, 1.0125e-10, 8.9629e-11, 7.8458e-11,
23922  6.8826e-11, 6.0935e-11, 5.5208e-11, 5.2262e-11, 5.026e-11, 4.8457e-11,
23923  4.7888e-11, 4.8032e-11, 5.0838e-11, 5.4668e-11, 5.579e-11, 6.0056e-11,
23924  6.3811e-11, 6.8848e-11, 7.459e-11, 7.8249e-11, 8.3371e-11, 8.3641e-11,
23925  8.6591e-11, 8.9599e-11, 9.3487e-11, 1.0066e-10, 1.0765e-10, 1.0851e-10,
23926  1.0619e-10, 1.0557e-10, 1.046e-10, 1.0796e-10, 1.0523e-10, 1.0674e-10,
23927  1.1261e-10, 1.1431e-10, 1.1408e-10, 1.0901e-10, 9.9105e-11, 8.8077e-11,
23928  6.9928e-11, 5.4595e-11, 4.5401e-11, 3.6313e-11, 2.6986e-11, 1.9463e-11,
23929  1.4577e-11, 1.1583e-11, 9.5492e-12, 8.077e-12, 6.9642e-12, 6.0966e-12,
23930  5.4046e-12, 4.8431e-12, 4.3815e-12, 3.9987e-12, 3.679e-12, 3.4113e-12,
23931  3.1868e-12, 2.9992e-12, 2.8434e-12, 2.7153e-12, 2.612e-12, 2.5311e-12,
23932  2.4705e-12, 2.429e-12, 2.4053e-12, 2.3988e-12, 2.4087e-12, 2.4349e-12,
23933  2.4771e-12, 2.5355e-12, 2.6103e-12, 2.7019e-12, 2.811e-12, 2.9383e-12,
23934  3.0848e-12, 3.2518e-12, 3.4405e-12, 3.6527e-12, 3.8902e-12, 4.1555e-12,
23935  4.451e-12, 4.7801e-12, 5.1462e-12, 5.5539e-12, 6.0086e-12, 6.5171e-12,
23936  7.0884e-12, 7.7357e-12, 8.4831e-12, 9.3096e-12, 1.0282e-11, 1.1407e-11,
23937  1.269e-11, 1.4148e-11, 1.5888e-11, 1.7992e-11, 2.0523e-11, 2.3342e-11,
23938  2.6578e-11, 3.0909e-11, 3.6228e-11, 4.2053e-11, 4.9059e-11, 5.9273e-11,
23939  7.0166e-11, 8.2298e-11, 9.7071e-11, 1.1673e-10, 1.401e-10, 1.6621e-10,
23940  2.0127e-10, 2.3586e-10, 2.705e-10, 3.095e-10, 3.6584e-10, 4.1278e-10,
23941  4.6591e-10, 5.222e-10, 5.5246e-10, 6.15e-10, 6.5878e-10, 7.1167e-10,
23942  7.9372e-10, 8.6975e-10, 9.6459e-10, 9.7368e-10, 9.8142e-10, 1.0202e-9,
23943  1.02e-9, 1.0356e-9, 1.0092e-9, 1.0269e-9, 1.0366e-9, 1.049e-9,
23944  1.0717e-9, 1.0792e-9, 1.1016e-9, 1.0849e-9, 1.0929e-9, 1.0971e-9,
23945  1.0969e-9, 1.046e-9, 9.2026e-10, 8.1113e-10, 6.8635e-10, 5.5369e-10,
23946  4.2908e-10, 3.3384e-10, 2.648e-10, 2.081e-10, 1.6915e-10, 1.4051e-10,
23947  1.1867e-10, 1.0158e-10, 8.899e-11, 7.9175e-11, 7.044e-11, 6.3453e-11,
23948  5.7009e-11, 5.1662e-11, 4.7219e-11, 4.3454e-11, 4.0229e-11, 3.7689e-11,
23949  3.6567e-11, 3.5865e-11, 3.5955e-11, 3.5928e-11, 3.6298e-11, 3.7629e-11,
23950  3.93e-11, 4.1829e-11, 4.4806e-11, 5.0534e-11, 5.6672e-11, 6.2138e-11,
23951  6.8678e-11, 7.6111e-11, 8.4591e-11, 9.2634e-11, 9.8085e-11, 1.083e-10,
23952  1.1949e-10, 1.2511e-10, 1.3394e-10, 1.3505e-10, 1.4342e-10, 1.4874e-10,
23953  1.492e-10, 1.5872e-10, 1.5972e-10, 1.5821e-10, 1.5425e-10, 1.4937e-10,
23954  1.5089e-10, 1.5521e-10, 1.6325e-10, 1.6924e-10, 1.8265e-10, 1.9612e-10,
23955  2.0176e-10, 1.9359e-10, 1.7085e-10, 1.5197e-10, 1.2646e-10, 9.8552e-11,
23956  7.453e-11, 5.5052e-11, 4.2315e-11, 3.2736e-11, 2.6171e-11, 2.1909e-11,
23957  1.8286e-11, 1.5752e-11, 1.3859e-11, 1.2288e-11, 1.1002e-11, 9.7534e-12,
23958  8.8412e-12, 8.0169e-12, 7.2855e-12, 6.8734e-12, 6.4121e-12, 6.1471e-12,
23959  5.778e-12, 5.3478e-12, 4.9652e-12, 4.4043e-12, 3.9862e-12, 3.4684e-12,
23960  2.9681e-12, 2.5791e-12, 2.2339e-12, 1.9247e-12, 1.6849e-12, 1.4863e-12,
23961  1.3291e-12, 1.2021e-12, 1.0947e-12, 1.0015e-12, 9.1935e-13, 8.4612e-13,
23962  7.8036e-13, 7.21e-13, 6.6718e-13, 6.1821e-13, 5.7353e-13, 5.3269e-13,
23963  4.9526e-13, 4.6093e-13, 4.2937e-13, 4.0034e-13, 3.7361e-13, 3.4895e-13,
23964  3.2621e-13, 3.052e-13, 2.8578e-13, 2.6782e-13, 2.512e-13, 2.3581e-13,
23965  2.2154e-13, 2.0832e-13, 1.9605e-13, 1.8466e-13, 1.7408e-13, 1.6425e-13,
23966  1.5511e-13, 1.4661e-13, 1.3869e-13, 1.3131e-13, 1.2444e-13, 1.1803e-13,
23967  1.1205e-13, 1.0646e-13, 1.0124e-13, 9.6358e-14, 9.1789e-14, 8.7509e-14,
23968  8.3498e-14, 7.9735e-14, 7.6202e-14, 7.2882e-14, 6.976e-14, 6.6822e-14,
23969  6.4053e-14, 6.1442e-14, 5.8978e-14, 5.665e-14, 5.4448e-14, 5.2364e-14,
23970  5.0389e-14, 4.8516e-14, 4.6738e-14, 4.5048e-14, 4.3441e-14, 4.1911e-14,
23971  4.0453e-14, 3.9063e-14, 3.7735e-14, 3.6467e-14, 3.5254e-14, 3.4093e-14,
23972  3.298e-14, 3.1914e-14, 3.0891e-14, 2.9909e-14, 2.8965e-14, 2.8058e-14,
23973  2.7185e-14, 2.6344e-14, 2.5535e-14, 2.4755e-14, 2.4002e-14, 2.3276e-14,
23974  2.2576e-14, 2.1899e-14, 2.1245e-14, 2.0613e-14, 2.0002e-14, 1.9411e-14,
23975  1.8839e-14, 1.8285e-14, 1.7749e-14, 1.723e-14, 1.6727e-14, 1.624e-14,
23976  1.5768e-14, 1.531e-14, 1.4867e-14, 1.4436e-14, 1.4019e-14, 1.3614e-14,
23977  1.3221e-14, 1.284e-14, 1.2471e-14, 1.2112e-14, 1.1764e-14, 1.1425e-14,
23978  1.1097e-14, 1.0779e-14, 1.0469e-14, 1.0169e-14, 9.8775e-15, 9.5943e-15,
23979  9.3193e-15, 9.0522e-15, 8.7928e-15, 8.5409e-15, 8.2962e-15, 8.0586e-15,
23980  7.8278e-15, 7.6036e-15, 7.3858e-15, 7.1742e-15, 6.9687e-15, 6.7691e-15,
23981  6.5752e-15, 6.3868e-15, 6.2038e-15, 6.026e-15, 5.8533e-15, 5.6856e-15,
23982  5.5226e-15, 5.3642e-15, 5.2104e-15, 5.061e-15, 4.9158e-15, 4.7748e-15,
23983  4.6378e-15, 4.5047e-15, 4.3753e-15, 4.2497e-15, 4.1277e-15, 4.0091e-15,
23984  3.8939e-15, 3.782e-15, 3.6733e-15, 3.5677e-15, 3.4651e-15, 3.3655e-15,
23985  3.2686e-15, 3.1746e-15, 3.0832e-15, 2.9944e-15, 2.9082e-15, 2.8244e-15,
23986  2.7431e-15, 2.664e-15, 2.5872e-15, 2.5126e-15, 2.4401e-15, 2.3697e-15,
23987  2.3014e-15, 2.2349e-15, 2.1704e-15, 2.1077e-15, 2.0468e-15, 1.9877e-15,
23988  1.9302e-15, 1.8744e-15, 1.8202e-15, 1.7675e-15, 1.7164e-15, 1.6667e-15,
23989  1.6184e-15, 1.5716e-15, 1.526e-15, 1.4818e-15, 1.4389e-15, 1.3971e-15,
23990  1.3566e-15, 1.3172e-15, 1.279e-15, 1.2419e-15, 1.2058e-15, 1.1708e-15,
23991  1.1368e-15, 1.1037e-15, 1.0716e-15, 1.0405e-15, 1.0102e-15, 9.8079e-16,
23992  9.5224e-16, 9.2451e-16, 8.9758e-16, 8.7142e-16, 8.4602e-16, 8.2136e-16,
23993  7.974e-16, 7.7414e-16, 7.5154e-16, 7.2961e-16, 7.083e-16, 6.8761e-16,
23994  6.6752e-16, 6.4801e-16, 6.2906e-16, 6.1066e-16, 5.928e-16, 5.7545e-16,
23995  5.586e-16, 5.4224e-16, 5.2636e-16, 5.1094e-16, 4.9596e-16}};
23996 
23997 struct s_s260b_ {
23998  double e_1[3];
23999  int e_2;
24000 } s260b_ = {{-20., 2e4, 10.}, 2003};
24001 
24002 struct s_consts_ {
24003  double e_1[9];
24004 } consts_ = {{3.1415927410125732,
24005  6.62606876e-27,
24006  1.3806503e-16,
24007  29979245800.,
24008  6.02214199e23,
24009  2.6867775e19,
24010  83144720.,
24011  1.191042722e-12,
24012  1.4387752}};
24013 
24014 /* Table of constant values */
24015 
24016 /*
24017 static integer c__9 = 9;
24018 static integer c__1 = 1;
24019 static integer c__2 = 2;
24020 static integer c__5 = 5;
24021 static int cs__0 = 0;
24022 */
24023 // FIXME static double c_b125 = 0.;
24024 
24025 /* ############################################################################ */
24026 /* path: $Source: /srv/svn/cvs/cvsroot/arts/src/continua.cc,v $ */
24027 /* author: $Author $ */
24028 /* revision: $Revision: 1.39 $ */
24029 /* created: $Date: 2006/06/30 08:35:33 $ */
24030 /* ############################################################################ */
24031 
24032 /* CKD2.4 TEST */
24033 /* TKS, 2002-02-28 */
24034 /* CALL : g77 -c testckd.f ; g77 testckd.o -o testckd */
24035 
24036 /* ############################################################################ */
24037 /* ----------------------------------------------------------------------------- */
24038 
24039 /* INPUT PARAMETERS: */
24040 /* P [hPa] TOTAL PRESSURE */
24041 /* T [K] TEMPERATURE */
24042 /* VMRH2O [1] H2O VOLUME MIXING RATIO */
24043 /* VMRN2 [1] N2 VOLUME MIXING RATIO */
24044 /* VMRO2 [1] O2 VOLUME MIXING RATIO */
24045 /* FREQ [Hz] FREQUENCY OF ABSORPTION CALCULATION */
24046 
24047 /* OUTPUT PARAMETER: */
24048 /* artsckd_ [1/m] ABSORPTION COEFFICIENT */
24049 
24050 /* ----------------------------------------------------------------------------- */
24051 
24052 double artsckd_(double p,
24053  double t,
24054  double vmrh2o,
24055  double vmrn2,
24056  double vmro2,
24057  double freq,
24058  int ivc) {
24059  /* Initialized data */
24060 
24061  static double xslf = 1.;
24062  static double xfrg = 1.;
24063  static double xcn2 = 1.;
24064 
24065  /* System generated locals */
24066  double ret_val = 0.0e0;
24067  // FIXME double d__1, d__2, d__3, d__4;
24068 
24069  /* Local variables */
24070  // FIXME int iosa;
24071  double w_wv__, oc_n2, radct;
24072  double w_other__, w_n2__, w_o2__;
24073  double of_wv, os_wv, p0, xn_wv__, t0, rhofac, wn, xn, xn0, tksvpt, rft;
24074 
24075  extern int initi_(double,
24076  double,
24077  double *,
24078  double *,
24079  double *,
24080  double *,
24081  double *,
24082  double *,
24083  double *,
24084  double *,
24085  double *,
24086  double *,
24087  double *);
24088  extern double fwv_(
24089  int, double, double *, double *, double *, double *, double *, double *);
24090  extern double swv_(int,
24091  double,
24092  double,
24093  double *,
24094  double *,
24095  double *,
24096  double *,
24097  double *,
24098  double *,
24099  double *);
24100  extern double conti_n2__(
24101  double, double, double *, double *, double *, double *, double *);
24102 
24103  /* PROGRAM: MODM */
24104  /* ------- */
24105 
24106  /* AUTHOR: Sid-Ahmed Boukabara */
24107  /* ------ */
24108 
24109  /* AFFILIATION: ATMOSPHERIC AND ENVIRONMENTAL RESEARCH INC. */
24110  /* ----------- */
24111 
24112  /* DATE OF CREATION : October 1998 */
24113  /* ---------------- */
24114 
24115  /* AIM: This program is aimed at the calculation of the */
24116  /* --- atmospheric optical depths. The spectral validity depends */
24117  /* only on the region covered by the file:"spectral_lines.dat" */
24118  /* The components treated here are the water vapor, the */
24119  /* oxygen, the ozone, the nitrogen and nitrogen dioxide. */
24120 
24121  /* - IVC : Flag of contin. vers.: CKD2.4(if=2) MPMf87/s93 (if=3) */
24122  /* - ICP : Flag to take(if =1) or not (if=0) the line coupling */
24123  /* - NWN : Number of wavenumbers to be treated */
24124  /* - WN : Vector of NWN wavenumbers [in cm-1], one should note that */
24125  /* this input could be a scalar (associated with NWN=1) */
24126  /* - NLAY : Number of layers to be treated. */
24127  /* - P : Vector of NLAY pressures (in mbar), one should note that */
24128  /* this input could be a scalar (associated with NLAY=1) */
24129  /* - T : Vector of NLAY temperatures [in Kelvin] */
24130  /* - W_WV : Vector of NLAY water vapor column amounts [in molecules/cm2] */
24131  /* - W_O2 : Vector of NLAY oxygen column amounts [in molecules/cm2] */
24132  /* - W_N2 : Vector of NLAY nitrogen column amounts [in molecules/cm2] */
24133  /* - W_OTHER : Vector of NLAY of other species column amounts [in molecules/cm2] */
24134  /* - CLW : Vector of NLAY Cloud Liquid Water amounts [in kg/m2 or mm] */
24135  /* When Cloud is present, the frequency must be consistent */
24136  /* with Rayleigh absorption (no scattering performed in */
24137  /* monortm). */
24138  /* - XSLF : Scaling factor of the self WV continuum (usually XSLF=1) */
24139  /* - XFRG : Scaling factor of the foreign WV continuum (usually XFRG=1) */
24140  /* - XCN2 : Scaling factor of the N2 continuum (usually XCN2=1) */
24141  /* - O : An array of NWNxNLAY elts containing the total optical depths */
24142  /* due to all the active species [in nepers] */
24143  /* - OS_WV : An array of NWNxNLAY elts containing the water vapor optical */
24144  /* depth (due to self continuum), [in Nepers] */
24145  /* - OF_WV : An array of NWNxNLAY elts containing the water vapor optical */
24146  /* depth (due to foreign continuum), [in Nepers] */
24147  /* - OC_N2 : An array of NWNxNLAY elts containing the nitrogen optical */
24148  /* depth (due to continuum), [in Nepers] */
24149  /* - O_CLW : An array of NWNxNLAY elts containing the CLW optical */
24150  /* depth , [in Nepers] */
24151 
24152  /* History of the modifications: */
24153  /* ***************************** */
24154  /* - written in 1999 by Sid Ahmed Boukabara, Ross Hoffman */
24155  /* and Tony Clough. */
24156  /* - validated against ARM sondes in the */
24157  /* microwave spectrum (23.8 and 31.4 GHz). SAB, 2000. */
24158  /* - extended to more species by Sid Ahmed Boukabara in 03/2000. */
24159  /* - cleaned up and commented in 2001 for first public release. */
24160  /* Also put under CVS configuration management. SAB. */
24161  /* - Extended O2 lines to submillimeter. Extensive validation */
24162  /* by comparison to Rosenkranz model and MWR data. */
24163  /* Update of the LBLATM module (accepts inputs at pressure */
24164  /* grid, along with altitude grid). */
24165  /* Fixed the handling of N2 amount coming from LBLATM (which */
24166  /* depends on the number of molecules NMOL). */
24167  /* Adopted accurate constants values. */
24168  /* Sid Ahmed Boukabara. Dec 14th 2001. */
24169  /* - Updated on January 7th 2002. ARM option (INP=2) updated and */
24170  /* made more efficient after Jim's comments. (INP=3) option optimized. */
24171  /* WV line intensities modified in the microwave (see Tony's email). */
24172 
24173  /* Comments should be forwarded to Sid Ahmed Boukabara (sboukaba@aer.com) */
24174  /* or Tony Clough (clough@aer.com). */
24175 
24176  /* ============================================================================ */
24177 
24178  /* TKS functions: */
24179 
24180  /* scaling factor (SLF cont) */
24181  /* scaling factor (FRG cont) */
24182  /* scaling factor (N2 cont) */
24183 
24184  w_wv__ = 0.0e0;
24185  w_o2__ = 0.0e0;
24186  w_n2__ = 0.0e0;
24187  w_other__ = 0.0e0;
24188  ret_val = 0.0e0;
24189  rft = 0.0e0;
24190  //os_wv = 0.0e0;
24191  //of_wv = 0.0e0;
24192  //oc_n2 = 0.0e0;
24193 
24194  /* ---INPUTS & GENERAL CONTROL PARAMETERS */
24195 
24196  /* set H2O, O2 and N2 number density to column amount [molec/cm2] */
24197  /* TKSVPT = P[Pa] / T[K] */
24198  tksvpt = (p * 100.0) / t;
24199  /* 7.242923e16 = k_B [J/K] * 1.0e-6 [m^3/cm^3] */
24200  w_wv__ = vmrh2o * 7.242923e16 * tksvpt;
24201  w_o2__ = vmro2 * 7.242923e16 * tksvpt;
24202  w_n2__ = vmrn2 * 7.242923e16 * tksvpt;
24203  w_other__ = (1.0000E0 - vmrh2o - vmro2 - vmrn2) * 7.242923e16 * tksvpt;
24204 
24205  /* frequency [Hz] to wave number [cm-1] */
24206  wn = freq / 29979245800.0;
24207  //cout << "CKD2.4 H2O column amounts [molec/cm2] =" << w_wv__ << "\n";
24208  //cout << "CKD2.4 O2 column amounts [molec/cm2] =" << w_o2__ << "\n";
24209  //cout << "CKD2.4 H2O column amounts [molec/cm2] =" << w_n2__ << "\n";
24210  //cout << "CKD2.4 others column amounts [molec/cm2] =" << w_other__ << "\n";
24211  //cout << "freq=" << freq << " Hz, wave num=" << wn << " cm-1\n";
24212 
24213  /* ---------------------------------------------------------------------------- */
24214 
24215  /* --- INITIALIZATION ----------------------------------------- */
24216  initi_(p,
24217  t,
24218  &radct,
24219  &t0,
24220  &p0,
24221  &w_wv__,
24222  &w_o2__,
24223  &w_n2__,
24224  &w_other__,
24225  &xn0,
24226  &xn,
24227  &xn_wv__,
24228  &rhofac);
24229  //cout << "CKD2.4 t0=" << t0 << " p0=" << p0 << "\n";
24230  //cout << "radct =" << radct << "\n";
24231  //cout << "xn0 =" << xn0 << "\n";
24232  //cout << "xn =" << xn << "\n";
24233  //cout << "xn_wv__ =" << xn_wv__ << "\n";
24234  //cout << "rhofac =" << rhofac << "\n";
24235 
24236  /* --- RAD_FIELD_TERM ----------------------------------------- */
24237  rft = wn * tanh(radct * wn / (t * 2));
24238  //cout << "rft =" << rft << "\n";
24239 
24240  /* --- H2O CONTINUUM TERM ------------------------------------- */
24241 
24242  if (ivc == 21) {
24243  /* CKD2.4 CONT_SELF_WV [Np/m] */
24244  os_wv = 1.0000e2 *
24245  swv_(2, wn, t, &t0, &w_wv__, &rft, &xn, &xn_wv__, &xn0, &xslf);
24246  //cout << "CKD2.4 ivc=21, H2O self cont [in Np/m] =" << os_wv << "\n";
24247  return os_wv;
24248  }
24249  if (ivc == 31) {
24250  /* MPMf87/s93 CONT_SELF_WV [Np/m] */
24251  os_wv = 1.0000e2 *
24252  swv_(3, wn, t, &t0, &w_wv__, &rft, &xn, &xn_wv__, &xn0, &xslf);
24253  //cout << "CKD2.4 ivc=31, H2O self cont [in Np/m] =" << os_wv << "\n";
24254  return os_wv;
24255  }
24256  if (ivc == 22) {
24257  /* CKD2.4 CONT_FRGN_WV [Np/m] */
24258  of_wv = 1.0000e2 * fwv_(2, wn, &w_wv__, &rft, &xn, &xn_wv__, &xn0, &xfrg);
24259  //cout << "CKD2.4 ivc=22, H2O foreign cont [in Np/m] =" << of_wv << "\n";
24260  return of_wv;
24261  }
24262  if (ivc == 32) {
24263  /* MPMf87/s93 CONT_FRGN_WV [Np/m] */
24264  of_wv = 1.0000e2 * fwv_(3, wn, &w_wv__, &rft, &xn, &xn_wv__, &xn0, &xfrg);
24265  //cout << "CKD2.4 ivc=32, H2O foreign cont [in Np/m] =" << of_wv << "\n";
24266  return of_wv;
24267  }
24268 
24269  /* --- N2 CONTINUUM TERM [Np/m] ----------------------------------- */
24270  if (ivc == 1) {
24271  oc_n2 = 1.0000e2 * conti_n2__(wn, t, &t0, &w_n2__, &rft, &rhofac, &xcn2);
24272  //cout << "CKD2.4 ivc=1, N2 cont [in Np/m] =" << oc_n2 << "\n";
24273  return oc_n2;
24274  }
24275 
24276  /* --- TOTAL ABSORPTION IN [in Np/m] --------------------------- */
24277  // cout << "CKD2.4 H2O s+f cont [in Np/m] =" << ((os_wv+of_wv) * 1.0000e2) << "\n";
24278  //ret_val = ((os_wv + of_wv + oc_n2) * 1.0000e2);
24279 
24280  // FIXME L999:
24281 
24282  return ret_val; // [Np/m]
24283 } /* artsckd_ */
24284 
24285 /* ############################################################################ */
24286 /* foreign continuum functions -------------------------------------------- */
24287 double fwv_(int ivc,
24288  double wn,
24289  double *w_wv__,
24290  double *rft,
24291  double *xn,
24292  double *xn_wv__,
24293  double *xn0,
24294  double *xfrg) {
24295  /* System generated locals */
24296  double ret_val = 0.0e0;
24297 
24298  /* Local variables */
24299  extern double fwv24_(
24300  double, double *, double *, double *, double *, double *, double *),
24302  double, double *, double *, double *, double *, double *, double *);
24303 
24304  ret_val = 0.0e0;
24305 
24306  /* --- CKD2.4 CONTINUUM ------------------------------------- */
24307  if (ivc == 2 && *w_wv__ > 0.) {
24308  ret_val = fwv24_(wn, w_wv__, rft, xn, xn_wv__, xn0, xfrg);
24309  }
24310 
24311  /* --- MPMf87s93 CONTINUUM ---------------------------------- */
24312  if (ivc == 3 && *w_wv__ > 0.) {
24313  ret_val = fwv_mpmf87s93__(wn, w_wv__, rft, xn, xn_wv__, xn0, xfrg);
24314  }
24315 
24316  return ret_val;
24317 } /* fwv_ */
24318 
24319 double fwv_mpmf87s93__(double wn,
24320  double *w_wv__,
24321  double *rft,
24322  double *xn,
24323  double *xn_wv__,
24324  double *xn0,
24325  double *xfrg) {
24326  /* System generated locals */
24327  double ret_val = 0.0e0;
24328 
24329  /* Local variables */
24330  extern double xlgr_(double *, double *);
24331  int i__, j;
24332  double x[4], fscal, xf;
24333 
24334  j = (int)((wn - fh2ob_1.v1) / fh2ob_1.dv) + 1;
24335 
24336  for (i__ = 1; i__ <= 4; ++i__) {
24337  x[i__ - 1] = fh2oa_1.fh2o[j + i__ - 3];
24338  }
24339 
24340  xf = (wn - (fh2ob_1.v1 + fh2ob_1.dv * (double)(j - 1))) / fh2ob_1.dv;
24341  fscal = .8;
24342  ret_val = xlgr_(&xf, x) * 1e-20 *
24343  (*w_wv__ * *rft * ((*xn - *xn_wv__) / *xn0)) * fscal * *xfrg;
24344 
24345  /* L999: */
24346  return ret_val;
24347 } /* fwv_mpmf87s93__ */
24348 
24349 double fwv24_(double wn,
24350  double *w_wv__,
24351  double *rft,
24352  double *xn,
24353  double *xn_wv__,
24354  double *xn0,
24355  double *xfrg) {
24356  /* Initialized data */
24357 
24358  static double v0f1 = 350.;
24359  static double hwsqf1 = 4e4;
24360  static double betaf1 = 5e-9;
24361  static double factrf1 = -.7;
24362  static double v0f1a = 630.;
24363  static double hwsqf1a = 4225.;
24364  static double betaf1a = 2e-8;
24365  static double factrf1a = .75;
24366  static double v0f2 = 1130.;
24367  static double hwsqf2 = 108900.;
24368  static double betaf2 = 8e-11;
24369  static double factrf2 = -.97;
24370  static double v0f3 = 1975.;
24371  static double hwsqf3 = 62500.;
24372  static double betaf3 = 5e-6;
24373  static double factrf3 = -.65;
24374 
24375  /* System generated locals */
24376  double ret_val = 0.0e0;
24377  double d__1;
24378 
24379  /* Local variables */
24380  extern double xlgr_(double *, double *);
24381  int i__, j;
24382  double x[4], fscal, xf, vf2, vf4, vf6;
24383 
24384  j = (int)((wn - fh2ob_1.v1) / fh2ob_1.dv) + 1;
24385  for (i__ = 1; i__ <= 4; ++i__) {
24386  x[i__ - 1] = fh2oa_1.fh2o[j + i__ - 3];
24387  }
24388 
24389  xf = (wn - (fh2ob_1.v1 + fh2ob_1.dv * (double)(j - 1))) / fh2ob_1.dv;
24390 
24391  /* ---added correction to the forgn continuum */
24392  /* Computing 2nd power */
24393  d__1 = wn - v0f1;
24394  vf2 = d__1 * d__1;
24395  vf6 = vf2 * vf2 * vf2;
24396  fscal = factrf1 * (hwsqf1 / (vf2 + betaf1 * vf6 + hwsqf1)) + 1.;
24397  /* Computing 2nd power */
24398  d__1 = wn - v0f1a;
24399  vf2 = d__1 * d__1;
24400  vf6 = vf2 * vf2 * vf2;
24401  fscal *= factrf1a * (hwsqf1a / (vf2 + betaf1a * vf6 + hwsqf1a)) + 1.;
24402  /* Computing 2nd power */
24403  d__1 = wn - v0f2;
24404  vf2 = d__1 * d__1;
24405  vf6 = vf2 * vf2 * vf2;
24406  fscal *= factrf2 * (hwsqf2 / (vf2 + betaf2 * vf6 + hwsqf2)) + 1.;
24407  /* Computing 2nd power */
24408  d__1 = wn - v0f3;
24409  vf2 = d__1 * d__1;
24410  vf4 = vf2 * vf2;
24411  fscal *= factrf3 * (hwsqf3 / (vf2 + betaf3 * vf4 + hwsqf3)) + 1.;
24412  ret_val = xlgr_(&xf, x) * 1e-20 *
24413  (*w_wv__ * *rft * ((*xn - *xn_wv__) / *xn0)) * fscal * *xfrg;
24414 
24415  /* L999: */
24416  return ret_val;
24417 } /* fwv24_ */
24418 
24419 /* self continuum function ------------------------------------------------ */
24420 double swv_(int ivc,
24421  double wn,
24422  double t,
24423  double *t0,
24424  double *w_wv__,
24425  double *rft,
24426  double *xn,
24427  double *xn_wv__,
24428  double *xn0,
24429  double *xslf) {
24430  /* System generated locals */
24431  double ret_val;
24432 
24433  /* Local variables */
24434  extern double swv_mpmf87s93__(double,
24435  double,
24436  double *,
24437  double *,
24438  double *,
24439  double *,
24440  double *,
24441  double *,
24442  double *);
24443  extern double swv24_(double,
24444  double,
24445  double *,
24446  double *,
24447  double *,
24448  double *,
24449  double *,
24450  double *,
24451  double *);
24452 
24453  ret_val = 0.;
24454 
24455  /* CKD2.4 CONTINUUM */
24456  if (ivc == 2 && *w_wv__ > 0.) {
24457  /* CNT_SLF_WV CKD2.4 */
24458  ret_val = swv24_(wn, t, t0, w_wv__, rft, xn, xn_wv__, xn0, xslf);
24459  }
24460 
24461  if (ivc == 3 && *w_wv__ > 0.) {
24462  /* MPMf87s93 CKD2.4 CONT. */
24463  /* CNT_SLF_WV */
24464  ret_val = swv_mpmf87s93__(wn, t, t0, w_wv__, rft, xn, xn_wv__, xn0, xslf);
24465  }
24466 
24467  return ret_val;
24468 } /* swv_ */
24469 
24470 double swv24_(double wn,
24471  double t,
24472  double *t0,
24473  double *w_wv__,
24474  double *rft,
24475  double * /* xn */,
24476  double *xn_wv__,
24477  double *xn0,
24478  double *xslf) {
24479  /* Initialized data */
24480 
24481  static double v0s1 = 0.;
24482  static double hwsq1 = 1e4;
24483  static double betas1 = 1e-4;
24484  static double factrs1 = .688;
24485  static double v0s2 = 1050.;
24486  static double hwsq2 = 4e4;
24487  static double factrs2 = -.2333;
24488  static double v0s3 = 1310.;
24489  static double hwsq3 = 14400.;
24490  static double betas3 = 5e-6;
24491  static double factrs3 = -.15;
24492 
24493  /* System generated locals */
24494  double ret_val, d__1, d__2;
24495 
24496  /* Local variables */
24497  double sfac;
24498  extern double xlgr_(double *, double *);
24499  int j;
24500  double x[4], xf, vs2, vs4;
24501 
24502  /* ---UNITS(CM**3/MOL)*1.E-20 */
24503 
24504  j = (int)((wn - sh2ob_1.v1) / sh2ob_1.dv) + 1;
24505  d__1 = s260a_1.swv260[j - 2] / sh2oa_1.swv296[j - 2];
24506  d__2 = (t - *t0) / (260. - *t0);
24507  x[0] = sh2oa_1.swv296[j - 2] * pow(d__1, d__2);
24508  d__1 = s260a_1.swv260[j - 1] / sh2oa_1.swv296[j - 1];
24509  d__2 = (t - *t0) / (260. - *t0);
24510  x[1] = sh2oa_1.swv296[j - 1] * pow(d__1, d__2);
24511  d__1 = s260a_1.swv260[j] / sh2oa_1.swv296[j];
24512  d__2 = (t - *t0) / (260. - *t0);
24513  x[2] = sh2oa_1.swv296[j] * pow(d__1, d__2);
24514  d__1 = s260a_1.swv260[j + 1] / sh2oa_1.swv296[j + 1];
24515  d__2 = (t - *t0) / (260. - *t0);
24516  x[3] = sh2oa_1.swv296[j + 1] * pow(d__1, d__2);
24517  xf = (wn - (sh2ob_1.v1 + sh2ob_1.dv * (double)(j - 1))) / sh2ob_1.dv;
24518  sfac = 1.;
24519  /* Computing 2nd power */
24520  d__1 = wn - v0s1;
24521  vs2 = d__1 * d__1;
24522  vs4 = vs2 * vs2;
24523  /* Computing 2nd power */
24524  d__1 = wn;
24525  sfac *= factrs1 * (hwsq1 / (d__1 * d__1 + betas1 * vs4 + hwsq1)) + 1.;
24526  /* Computing 2nd power */
24527  d__1 = wn - v0s2;
24528  vs2 = d__1 * d__1;
24529  sfac *= factrs2 * (hwsq2 / (vs2 + hwsq2)) + 1.;
24530  /* Computing 2nd power */
24531  d__1 = wn - v0s3;
24532  vs2 = d__1 * d__1;
24533  vs4 = vs2 * vs2;
24534  sfac *= factrs3 * (hwsq3 / (vs2 + betas3 * vs4 + hwsq3)) + 1.;
24535  ret_val =
24536  *w_wv__ * *rft * (*xn_wv__ / *xn0) * xlgr_(&xf, x) * 1e-20 * sfac * *xslf;
24537 
24538  return ret_val;
24539 } /* swv24_ */
24540 
24541 double swv_mpmf87s93__(double wn,
24542  double t,
24543  double *t0,
24544  double *w_wv__,
24545  double *rft,
24546  double * /* xn */,
24547  double *xn_wv__,
24548  double *xn0,
24549  double *xslf) {
24550  /* System generated locals */
24551  double ret_val, d__1, d__2;
24552 
24553  /* Local variables */
24554  double sfac;
24555  extern double xlgr_(double *, double *);
24556  int j;
24557  double x[4], xf;
24558 
24559  /* ---UNITS(CM**3/MOL)*1.E-20 */
24560 
24561  j = (int)((wn - sh2ob_1.v1) / sh2ob_1.dv) + 1;
24562  d__1 = s260a_1.swv260[j - 2] / sh2oa_1.swv296[j - 2];
24563  d__2 = (t - *t0) / (260. - *t0);
24564  x[0] = sh2oa_1.swv296[j - 2] * pow(d__1, d__2);
24565  d__1 = s260a_1.swv260[j - 1] / sh2oa_1.swv296[j - 1];
24566  d__2 = (t - *t0) / (260. - *t0);
24567  x[1] = sh2oa_1.swv296[j - 1] * pow(d__1, d__2);
24568  d__1 = s260a_1.swv260[j] / sh2oa_1.swv296[j];
24569  d__2 = (t - *t0) / (260. - *t0);
24570  x[2] = sh2oa_1.swv296[j] * pow(d__1, d__2);
24571  d__1 = s260a_1.swv260[j + 1] / sh2oa_1.swv296[j + 1];
24572  d__2 = (t - *t0) / (260. - *t0);
24573  x[3] = sh2oa_1.swv296[j + 1] * pow(d__1, d__2);
24574  xf = (wn - (sh2ob_1.v1 + sh2ob_1.dv * (double)(j - 1))) / sh2ob_1.dv;
24575  sfac = 3.;
24576  ret_val =
24577  *w_wv__ * *rft * (*xn_wv__ / *xn0) * xlgr_(&xf, x) * 1e-20 * sfac * *xslf;
24578 
24579  /* L999: */
24580  return ret_val;
24581 } /* swv_mpmf87s93__ */
24582 
24583 /* --- N2 continuum ------------------------------------------------------- */
24584 double conti_n2__(double wn,
24585  double t,
24586  double *t0,
24587  double *w_n2__,
24588  double *rft,
24589  double *rhofac,
24590  double *xcn2) {
24591  /* Initialized data */
24592 
24593  static double v1 = -10.;
24594  static double dv = 5.;
24595  static double ct296[73] = {
24596  4.303e-7, 4.85e-7, 4.979e-7, 4.85e-7, 4.303e-7, 3.715e-7,
24597  3.292e-7, 3.086e-7, 2.92e-7, 2.813e-7, 2.804e-7, 2.738e-7,
24598  2.726e-7, 2.724e-7, 2.635e-7, 2.621e-7, 2.547e-7, 2.428e-7,
24599  2.371e-7, 2.228e-7, 2.1e-7, 1.991e-7, 1.822e-7, 1.697e-7,
24600  1.555e-7, 1.398e-7, 1.281e-7, 1.138e-7, 1.012e-7, 9.078e-8,
24601  7.879e-8, 6.944e-8, 6.084e-8, 5.207e-8, 4.54e-8, 3.897e-8,
24602  3.313e-8, 2.852e-8, 2.413e-8, 2.045e-8, 1.737e-8, 1.458e-8,
24603  1.231e-8, 1.031e-8, 8.586e-9, 7.162e-9, 5.963e-9, 4.999e-9,
24604  4.226e-9, 3.607e-9, 3.09e-9, 2.669e-9, 2.325e-9, 2.024e-9,
24605  1.783e-9, 1.574e-9, 1.387e-9, 1.236e-9, 1.098e-9, 9.777e-10,
24606  8.765e-10, 7.833e-10, 7.022e-10, 6.317e-10, 5.65e-10, 5.1e-10,
24607  4.572e-10, 4.115e-10, 3.721e-10, 3.339e-10, 3.005e-10, 2.715e-10,
24608  2.428e-10};
24609  static double ct220[73] = {
24610  4.946e-7, 5.756e-7, 5.964e-7, 5.756e-7, 4.946e-7, 4.145e-7,
24611  3.641e-7, 3.482e-7, 3.34e-7, 3.252e-7, 3.299e-7, 3.206e-7,
24612  3.184e-7, 3.167e-7, 2.994e-7, 2.943e-7, 2.794e-7, 2.582e-7,
24613  2.468e-7, 2.237e-7, 2.038e-7, 1.873e-7, 1.641e-7, 1.474e-7,
24614  1.297e-7, 1.114e-7, 9.813e-8, 8.309e-8, 7.059e-8, 6.068e-8,
24615  5.008e-8, 4.221e-8, 3.537e-8, 2.885e-8, 2.407e-8, 1.977e-8,
24616  1.605e-8, 1.313e-8, 1.057e-8, 8.482e-9, 6.844e-9, 5.595e-9,
24617  4.616e-9, 3.854e-9, 3.257e-9, 2.757e-9, 2.372e-9, 2.039e-9,
24618  1.767e-9, 1.548e-9, 1.346e-9, 1.181e-9, 1.043e-9, 9.11e-10,
24619  8.103e-10, 7.189e-10, 6.314e-10, 5.635e-10, 4.976e-10, 4.401e-10,
24620  3.926e-10, 3.477e-10, 3.085e-10, 2.745e-10, 2.416e-10, 2.155e-10,
24621  1.895e-10, 1.678e-10, 1.493e-10, 1.31e-10, 1.154e-10, 1.019e-10,
24622  8.855e-11};
24623 
24624  /* System generated locals */
24625  double ret_val, d__1, d__2;
24626 
24627  /* Local variables */
24628  extern double xlgr_(double *, double *);
24629  int j;
24630  double x[4], xf;
24631 
24632  /* TKS INTEGER NPTCONTN2 */
24633  /* TKS INTEGER NPTCONTN2B */
24634  /* TKS & V1B,V2B,DVB */
24635  /* TKS DATA V2 / 350.0 / */
24636  /* TKS DATA NPTCONTN2 / 73 / */
24637  /* TKS DATA V1B, V2B, DVB, NPTCONTN2B / -10., 350., 5.0, 73 / */
24638 
24639  /* TKS -- begin implementation of TKS */
24640  if (wn <= 0.) {
24641  ret_val = 0.;
24642  return ret_val;
24643  }
24644  if (wn > 350.) {
24645  ret_val = 0.;
24646  return ret_val;
24647  }
24648  /* TKS -- end implementation of TKS */
24649 
24650  if (*w_n2__ == 0.) {
24651  ret_val = 0.;
24652  return ret_val;
24653  }
24654 
24655  j = (int)((wn - v1) / dv) + 1;
24656  d__1 = ct296[j - 2] / ct220[j - 2];
24657  d__2 = (t - *t0) / (220. - *t0);
24658  x[0] = ct296[j - 2] * pow(d__1, d__2);
24659  d__1 = ct296[j - 1] / ct220[j - 1];
24660  d__2 = (t - *t0) / (220. - *t0);
24661  x[1] = ct296[j - 1] * pow(d__1, d__2);
24662  d__1 = ct296[j] / ct220[j];
24663  d__2 = (t - *t0) / (220. - *t0);
24664  x[2] = ct296[j] * pow(d__1, d__2);
24665  d__1 = ct296[j + 1] / ct220[j + 1];
24666  d__2 = (t - *t0) / (220. - *t0);
24667  x[3] = ct296[j + 1] * pow(d__1, d__2);
24668  xf = (wn - (v1 + dv * (double)(j - 1))) / dv;
24669  ret_val =
24670  xlgr_(&xf, x) * 1e-20 * (*w_n2__ / .26867775 * *rft * *rhofac) * *xcn2;
24671 
24672  return ret_val;
24673 } /* conti_n2__ */
24674 
24675 /* --- 4 points Lagrange interpolation ----------------------------------- */
24676 double xlgr_(double *xf, double *x) {
24677  /* System generated locals */
24678  double ret_val;
24679 
24680  /* Local variables */
24681  double a[4], b;
24682 
24683  /* with continous derivatives */
24684  /* Parameter adjustments */
24685  --x;
24686 
24687  /* Function Body */
24688  b = *xf * .5 * (1. - *xf);
24689  a[0] = -b * (1. - *xf);
24690  a[1] = 1. - (3. - *xf * 2.) * *xf * *xf + b * *xf;
24691  a[2] = (3. - *xf * 2.) * *xf * *xf + b * (1. - *xf);
24692  a[3] = -(b * *xf);
24693  ret_val = a[0] * x[1] + a[1] * x[2] + a[2] * x[3] + a[3] * x[4];
24694 
24695  /* L999: */
24696  return ret_val;
24697 } /* xlgr_ */
24698 
24699 /* --- initializations ---------------------------------------------------- */
24700 int initi_(double p,
24701  double t,
24702  double *radct,
24703  double *t0,
24704  double *p0,
24705  double *w_wv__,
24706  double *w_o2__,
24707  double *w_n2__,
24708  double *w_other__,
24709  double *xn0,
24710  double *xn,
24711  double *xn_wv__,
24712  double *rhofac) {
24713  /* Initialized data */
24714 
24715  static double wvmolmass = 18.016;
24716  static double drymolmass = 28.97;
24717 
24718  double wdry, ratiomix, wvpress;
24719 
24720  /* [K] */
24721  *t0 = 296.;
24722  /* [hPa] */
24723  *p0 = 1013.25;
24724 
24725  /* [K/cm-1] */
24726  *radct = consts_1.planck * consts_1.clight / consts_1.boltz;
24727  *xn0 = *p0 / (consts_1.boltz * *t0) * 1e3;
24728  *xn = p / (consts_1.boltz * t) * 1e3;
24729  wdry = *w_o2__ + *w_n2__ + *w_other__;
24730  ratiomix = *w_wv__ * wvmolmass / (wdry * drymolmass);
24731  wvpress = ratiomix / (ratiomix + wvmolmass / drymolmass) * p;
24732  *xn_wv__ = wvpress / (consts_1.boltz * t) * 1e3;
24733  *rhofac = *w_n2__ / (wdry + *w_wv__) * (p / *p0) * (273.15 / t);
24734 
24735  /* L999: */
24736  return 0;
24737 } /* initi_ */
24738 
24739 /* ############################################################################ */
24740 /* ---Block data to be consistent with LBLRTM/LBLATM */
24741 /* Subroutine */ int phys_consts__(void) { return 0; } /* phys_consts__ */
24742 
24743 /* Pi was obtained from PI = 2.*ASIN(1.) */
24744 /* --------------------------------------------- */
24745 /* Constants from NIST 01/11/2002 */
24746 /* --------------------------------------------- */
24747 /* --------------------------------------------- */
24748 /* units are generally cgs */
24749 /* The first and second radiation constants are taken from NIST. */
24750 /* They were previously obtained from the relations: */
24751 /* RADCN1 = 2.*PLANCK*CLIGHT*CLIGHT*1.E-07 */
24752 /* RADCN2 = PLANCK*CLIGHT/BOLTZ */
24753 /* --------------------------------------------- */
24754 
24755 /* ############################################################################ */
24756 /* Subroutine */ int bsa296_(void) { return 0; } /* bsa296_ */
24757 
24758 /* Subroutine */ int bsb296_(void) { return 0; } /* bsb296_ */
24759 
24760 /* ---------------------------------------------------------------------------- */
24761 
24762 /* Subroutine */ int bs260a_(void) { return 0; } /* bs260a_ */
24763 
24764 /* Subroutine */ int bs260b_(void) { return 0; } /* bs260b_ */
24765 
24766 /* ---------------------------------------------------------------------------- */
24767 
24768 /* Subroutine */ int bfh2oa_(void) { return 0; } /* bfh2oa_ */
24769 
24770 /* Subroutine */ int bfh2ob_(void) { return 0; } /* bfh2ob_ */
24771 
24772 // ---------------------- end of monortm CKD F77 code --------------------------
#define jrange1
Definition: continua.cc:21716
union u_bba_ bba_
double b0
Definition: continua.cc:20796
double v1
Definition: continua.cc:22918
INDEX Index
The type to use for all integer numbers and indices.
Definition: matpack.h:39
doublereal d
Definition: continua.cc:20602
int(* S_fp)()
Definition: continua.cc:20662
double e_1[3]
Definition: continua.cc:23998
#define rsibb
Definition: continua.cc:22188
const double O2O2_O2Fo_ckd_mt_100[O2O2_O2F_ckd_mt_100_npt+addF77fields]
Definition: continua.cc:5078
ftnint icirnum
Definition: continua.cc:20535
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:5845
double rsi[401]
Definition: continua.cc:20805
const int N2N2_CT220_ckd_mt_100_npt
Definition: continua.cc:4921
#define ik1k0
Definition: continua.cc:22482
struct u_bl3_::s_m_1 m_1
shortint h
Definition: continua.cc:20598
char * oblnk
Definition: continua.cc:20548
double v1
Definition: continua.cc:22940
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:12430
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:6610
#define fnumin
Definition: continua.cc:20952
int type
Definition: continua.cc:20615
const int SL296_ckd_mt_100_npt
Definition: continua.cc:1753
doublereal(* D_fp)()
Definition: continua.cc:20656
int phys_consts__(void)
Definition: continua.cc:24741
const Numeric SL260_ckd_0_v1
Definition: continua.cc:1310
const Numeric SL260_ckd_mt_100_dv
Definition: continua.cc:2048
const double FH2O_ckd_mt_100[FH2O_ckd_mt_100_npt+addF77fields]
Definition: continua.cc:2346
int bs260a_(void)
Definition: continua.cc:24762
constexpr Numeric gamma
Definition: linemixing.h:121
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:11922
Index ncols() const
Returns the number of columns.
Definition: matpackI.cc:521
const Numeric Pa_to_hPa
Definition: continua.cc:437
char e_2[5]
Definition: continua.cc:20883
char * inblank
Definition: continua.cc:20590
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 &)
MPM93RainExt.
Definition: continua.cc:15977
const int O2_vis_ckd_mt_250_npt
Definition: continua.cc:5228
#define eb_ref(a_1, a_2)
ftnint * inrecl
Definition: continua.cc:20588
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:12693
double fwv_(int ivc, double wn, double *w_wv__, double *rft, double *xn, double *xn_wv__, double *xn0, double *xfrg)
Definition: continua.cc:24287
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:8369
const Numeric SL296_ckd_mt_320_v2
Definition: continua.cc:2672
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:15261
char * inacc
Definition: continua.cc:20576
ftnlen inacclen
Definition: continua.cc:20577
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:7181
double e_1[2003]
Definition: continua.cc:23317
ftnlen inunflen
Definition: continua.cc:20587
char * icifmt
Definition: continua.cc:20533
const Numeric O2O2_O2F_ckd_mt_100_v1
Definition: continua.cc:5074
ftnlen infilen
Definition: continua.cc:20569
char * iciunit
Definition: continua.cc:20531
struct u_bl3_::s_m_2 m_2
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:7641
const Numeric BOLTZMAN_CONST
Global constant, the Boltzmann constant [J/K].
#define rsilo
Definition: continua.cc:21432
#define x0
#define consts_1
Definition: continua.cc:22969
double e_1[3]
Definition: continua.cc:23312
#define q
Definition: continua.cc:21712
const Numeric FH2O_ckd_mt_100_v2
Definition: continua.cc:2343
char logical1
Definition: continua.cc:20489
const Numeric O2_00_ckd_mt_100_v1
Definition: continua.cc:5130
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:14242
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:13479
double boltz
Definition: continua.cc:22966
char * address
Definition: continua.cc:20477
Index nrows() const
Returns the number of rows.
Definition: matpackI.cc:518
char * name
Definition: continua.cc:20620
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:14865
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:12033
#define rsi
Definition: continua.cc:21759
double swv296[2003]
Definition: continua.cc:22930
The Vector class.
Definition: matpackI.h:782
ftnint icirlen
Definition: continua.cc:20534
doublereal(*)(* E_fp)()
Definition: continua.cc:20656
The MatrixView class.
Definition: matpackI.h:1014
double rsibb[401]
Definition: continua.cc:20808
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:14098
double dv
Definition: continua.cc:22958
char * infmt
Definition: continua.cc:20582
double q
Definition: continua.cc:20796
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:12950
double v1
Definition: continua.cc:22958
Numeric fac(const Index n)
fac
Definition: math_funcs.cc:63
double e_1[246]
Definition: continua.cc:20830
const Numeric FCO2_ckd_mt_100_v2
Definition: continua.cc:3943
ftnint ounit
Definition: continua.cc:20541
double dv
Definition: continua.cc:22936
real_t r
Definition: continua.cc:20601
struct s_dimer_ dimer_
flag icierr
Definition: continua.cc:20530
double conti_n2__(double wn, double t, double *t0, double *w_n2__, double *rft, double *rhofac, double *xcn2)
Definition: continua.cc:24584
Numeric sum() const
The sum of all elements of a Vector.
Definition: matpackI.cc:142
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:24541
const Numeric LOG10_EULER_NUMBER
char * infile
Definition: continua.cc:20568
double dv___
Definition: continua.cc:22954
const Numeric FH2O_ckd_mt_320_dv
Definition: continua.cc:3531
const Numeric N2N2_CT220_ckd_mt_100_v2
Definition: continua.cc:4919
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:12160
#define nsriup
Definition: continua.cc:22184
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:8133
int ik1k0
Definition: continua.cc:20767
VOID Z_f
Definition: continua.cc:20667
struct s_app3a_ app3a_
const Numeric O2O2_O2F_ckd_mt_100_dv
Definition: continua.cc:5076
double pi
Definition: continua.cc:22966
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:14363
double bgama_(double *fnu, double *t1, double *t2, double *eps, double *t3, double *t4, double *temp)
Definition: continua.cc:22484
Index nelem() const
Returns the number of elements.
Definition: matpackI.cc:140
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 &)
MPM93WaterDropletAbs.
Definition: continua.cc:15455
#define rsigg
Definition: continua.cc:21434
const Numeric SL296_ckd_mt_100_dv
Definition: continua.cc:1752
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:9850
const Numeric VMRCalcLimit
Definition: continua.cc:454
ftnlen ofnmlen
Definition: continua.cc:20543
const Numeric N2N2_CT220_ckd_mt_100_v1
Definition: continua.cc:4918
const Numeric FH2O_ckd_mt_100_dv
Definition: continua.cc:2344
ftnint cirec
Definition: continua.cc:20525
ftnint * innum
Definition: continua.cc:20572
const Numeric N2N2_N2F_ckd_mt_100_v2
Definition: continua.cc:4954
const Numeric N2N2_CT296_ckd_mt_100_v2
Definition: continua.cc:4882
double dv
Definition: continua.cc:22940
int bsa296_(void)
Definition: continua.cc:24756
constexpr Numeric lambda
Definition: linemixing.h:117
ftnint * innamed
Definition: continua.cc:20573
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:22891
const Numeric NAT_LOG_TEN
double alosmt
Definition: continua.cc:22966
const Numeric DENSITY_OF_WATER
int nsol
Definition: continua.cc:20748
struct s_sh2ob_ sh2ob_
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:15354
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:6329
double v2
Definition: continua.cc:22918
flag ciend
Definition: continua.cc:20523
const Numeric SPEED_OF_LIGHT
Numeric RADFN_FUN(const Numeric VI, const Numeric XKT)
Definition: continua.cc:7105
const Numeric SL296_ckd_0_v1
Definition: continua.cc:488
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:6095
char * csta
Definition: continua.cc:20555
VOID(* H_fp)()
Definition: continua.cc:20661
flag oerr
Definition: continua.cc:20540
Numeric XINT_FUN(const Numeric V1A, const Numeric, const Numeric DVA, ConstVectorView A, const Numeric VI)
Definition: continua.cc:7022
const double SL260_ckd_0[SL260_ckd_0_npt+addF77fields]
Definition: continua.cc:1314
const Numeric FH2O_ckd_mt_320_v1
Definition: continua.cc:3529
const double O2_vis_ckd_mt_250[O2_vis_ckd_mt_250_npt+addF77fields]
Definition: continua.cc:5229
struct s_fh2ob_ fh2ob_
char * ofm
Definition: continua.cc:20546
const Numeric FCO2_ckd_mt_250_dv
Definition: continua.cc:4155
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:24420
const Numeric EULER_NUMBER
const Numeric FCO2_ckd_mt_100_dv
Definition: continua.cc:3944
struct u_bbbb_::s_m_1 m_1
complex_t c
Definition: continua.cc:20603
double specfct_(double *freq, double *omega, double *phi, double *phi2, int *n, double *rtemp)
Definition: continua.cc:21859
const Numeric SL296_ckd_mt_100_v1
Definition: continua.cc:1750
ftnlen indirlen
Definition: continua.cc:20581
int bound54_(double *temp, double *rsi, int *nsol)
Definition: continua.cc:22190
short int shortint
Definition: continua.cc:20478
doublereal r
Definition: continua.cc:20485
const Numeric O2_10_ckd_mt_100_v2
Definition: continua.cc:5222
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:8817
double radcn1
Definition: continua.cc:22966
const double FCO2_ckd_mt_100[FCO2_ckd_mt_100_npt+addF77fields]
Definition: continua.cc:3946
ftnint inunit
Definition: continua.cc:20567
const Array< SpeciesRecord > species_data
Species Data.
const Numeric N2N2_N2F_ckd_mt_100_v1
Definition: continua.cc:4953
#define b2
Definition: complex.h:58
struct s_bbc_ bbc_
#define ivi
Definition: continua.cc:21956
double swv260[2003]
Definition: continua.cc:22948
double v2
Definition: continua.cc:22958
const int FCO2_ckd_mt_100_npt
Definition: continua.cc:3945
double dnu
Definition: continua.cc:20706
#define b01
Definition: continua.cc:21440
double fctl_(int *n)
Definition: continua.cc:22446
unsigned long int uinteger
Definition: continua.cc:20476
This file contains the definition of Array.
const Numeric N2N2_N2F_ckd_mt_250_v1
Definition: continua.cc:5007
double delbf
Definition: continua.cc:20754
char * oacc
Definition: continua.cc:20545
VOID(* Z_fp)()
Definition: continua.cc:20658
#define fh2oa_1
Definition: continua.cc:22915
flag cerr
Definition: continua.cc:20553
double q1
Definition: continua.cc:20792
The implementation for String, the ARTS string class.
Definition: mystring.h:55
const double N2N2_sf_296_ckd_mt_100[N2N2_CT296_ckd_mt_100_npt+addF77fields]
Definition: continua.cc:4900
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:21446
const Numeric FH2O_ckd_0_v1
Definition: continua.cc:899
const Numeric N2N2_N2F_ckd_mt_100_dv
Definition: continua.cc:4955
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:13217
shortlogical(* K_fp)()
Definition: continua.cc:20660
double fnumin
Definition: continua.cc:20706
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:22620
int niv[6]
Definition: continua.cc:20780
#define wn2
Definition: continua.cc:21713
#define d01
Definition: continua.cc:21441
The global header file for ARTS.
long int flag
Definition: continua.cc:20514
const int SL296_ckd_mt_320_npt
Definition: continua.cc:2674
flag cierr
Definition: continua.cc:20521
const double N2N2_N2Ft_ckd_mt_250[N2N2_N2F_ckd_mt_250_npt+addF77fields]
Definition: continua.cc:5040
real_t r
Definition: continua.cc:20482
const Numeric O2_vis_ckd_mt_250_dv
Definition: continua.cc:5227
#define DEBUG_ONLY(...)
Definition: debug.h:36
float real_t
Definition: continua.cc:20479
struct u_bba_::s_m_2 m_2
double e_1[9]
Definition: continua.cc:24003
const double FCO2_ckd_mt_250[FCO2_ckd_mt_250_npt+addF77fields]
Definition: continua.cc:4157
ftnlen innamlen
Definition: continua.cc:20575
double radcn2
Definition: continua.cc:22966
double e_1[2003]
Definition: continua.cc:23660
doublereal E_f
Definition: continua.cc:20668
const Numeric O2_00_ckd_mt_100_dv
Definition: continua.cc:5132
const double N2N2_N2F_ckd_mt_100[N2N2_N2F_ckd_mt_100_npt+addF77fields]
Definition: continua.cc:4957
const double N2N2_N2Ft_ckd_mt_100[N2N2_N2F_ckd_mt_100_npt+addF77fields]
Definition: continua.cc:4980
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:14766
#define sh2ob_1
Definition: continua.cc:22944
Parameters parameters
Holds the command line parameters.
Definition: parameters.cc:41
const double FH2O_ckd_mt_320[FH2O_ckd_mt_320_npt+addF77fields]
Definition: continua.cc:3535
#define dnu
Definition: continua.cc:20954
int bfh2ob_(void)
Definition: continua.cc:24770
const double O2O2_O2Ft_ckd_mt_100[O2O2_O2F_ckd_mt_100_npt+addF77fields]
Definition: continua.cc:5095
void CKD_mt_320_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 3.20 H2O foreign continuum absorption model.
Definition: continua.cc:9292
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:6839
double dv
Definition: continua.cc:22922
#define omeg
Definition: continua.cc:21433
struct s_s260a_ s260a_
double clebsqr_(int *l, int *lambda, int *lp)
Definition: continua.cc:22442
const Numeric SL260_ckd_0_dv
Definition: continua.cc:1312
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:14964
real_t(* R_fp)()
Definition: continua.cc:20655
flag iciend
Definition: continua.cc:20532
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:13762
const Numeric O2_vis_ckd_mt_250_v2
Definition: continua.cc:5226
#define nsol
Definition: continua.cc:21436
char * inname
Definition: continua.cc:20574
#define max(a, b)
Definition: continua.cc:20629
#define b0
Definition: continua.cc:21714
const Numeric SL296_ckd_mt_100_v2
Definition: continua.cc:1751
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:9678
double v1___
Definition: continua.cc:22954
Numeric n2n2tks_(double t, double f)
Definition: continua.cc:20967
const double O2_00_ckd_mt_100[O2_00_ckd_mt_100_npt+addF77fields]
Definition: continua.cc:5134
const int FH2O_ckd_mt_100_npt
Definition: continua.cc:2345
struct u_bba_::s_m_1 m_1
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:8553
const Numeric FCO2_ckd_mt_250_v1
Definition: continua.cc:4153
const Numeric N2N2_CT220_ckd_mt_100_dv
Definition: continua.cc:4920
double v2
Definition: continua.cc:22922
const Numeric FH2O_ckd_0_v2
Definition: continua.cc:900
const Numeric SL296_ckd_mt_320_dv
Definition: continua.cc:2673
long int ftnint
Definition: continua.cc:20516
struct s_bou43_ bou43_
const Numeric SL296_ckd_0_dv
Definition: continua.cc:490
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:11157
char * cifmt
Definition: continua.cc:20524
const double N2N2_N2F_ckd_mt_250[N2N2_N2F_ckd_mt_250_npt+addF77fields]
Definition: continua.cc:5011
const double SL296_ckd_mt_320[SL296_ckd_mt_320_npt+addF77fields]
Definition: continua.cc:2675
const int addF77fields
Definition: continua.cc:461
NormalizingSolver< Matrix, invlib::ConjugateGradient<>> CG
The invlib CG solver.
Definition: oem.h:166
Vardesc ** vars
Definition: continua.cc:20621
const Numeric LIQUID_AND_ICE_TREAT_AS_ZERO
Definition: continua.cc:418
const Numeric O2_10_ckd_mt_100_dv
Definition: continua.cc:5223
int bound32_(double *temp, double *rsi, int *nsol)
Definition: continua.cc:21962
char * ofnm
Definition: continua.cc:20542
double rsilo[201]
Definition: continua.cc:20724
struct s_like_ like_
double fnumax
Definition: continua.cc:20706
double fh2o[2003]
Definition: continua.cc:22912
char lgas[5]
Definition: continua.cc:20761
#define ldelel
Definition: continua.cc:21958
double v2___
Definition: continua.cc:22954
const Numeric N2N2_CT296_ckd_mt_100_v1
Definition: continua.cc:4881
double swv24_(double wn, double t, double *t0, double *w_wv__, double *rft, double *, double *xn_wv__, double *xn0, double *xslf)
Definition: continua.cc:24470
char * inform
Definition: continua.cc:20584
double fill_1[1]
Definition: continua.cc:20876
const Numeric O2_10_ckd_mt_100_v1
Definition: continua.cc:5221
const double SL260_ckd_mt_100[SL260_ckd_mt_100_npt+addF77fields]
Definition: continua.cc:2050
#define slit
Definition: continua.cc:22179
char * indir
Definition: continua.cc:20580
void CKD_mt_250_o2_vis(MatrixView pxsec, const Numeric Cin, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView DEBUG_ONLY(vmr), const Verbosity &verbosity)
CKD version MT 2.50 O2.
Definition: continua.cc:11555
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:16340
int partsum_(double *temp)
Definition: continua.cc:21718
struct s_blockin_ blockin_
double e_2[4]
Definition: continua.cc:20877
#define jrange2
Definition: continua.cc:21442
#define abs(x)
Definition: continua.cc:20626
const Numeric dB_km_to_1_m
Definition: continua.cc:450
#define a1
Definition: complex.h:55
const Numeric N2N2_CT296_ckd_mt_100_dv
Definition: continua.cc:4883
struct s_app3b_ app3b_
const Joker joker
const int N2N2_N2F_ckd_mt_100_npt
Definition: continua.cc:4956
ftnint * inopen
Definition: continua.cc:20571
ftnlen inseqlen
Definition: continua.cc:20579
double clight
Definition: continua.cc:22966
int ibound
Definition: continua.cc:20773
char * inunf
Definition: continua.cc:20586
NUMERIC Numeric
The type to use for all floating point numbers.
Definition: matpack.h:33
const double FH2O_ckd_0[FH2O_ckd_0_npt+addF77fields]
Definition: continua.cc:903
int nptslfwv
Definition: continua.cc:22937
#define dx
Definition: continua.cc:22180
struct s_bbb_ bbb_
const Numeric FH2O_ckd_mt_320_v2
Definition: continua.cc:3530
The Matrix class.
Definition: matpackI.h:1113
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:11344
const Numeric FH2O_ckd_0_dv
Definition: continua.cc:901
Declarations required for the calculation of absorption coefficients.
double temp
Definition: continua.cc:20706
#define nsri
Definition: continua.cc:22182
const Numeric FH2O_ckd_mt_100_v1
Definition: continua.cc:2342
struct s_sh2oa_ sh2oa_
long int ftnlen
Definition: continua.cc:20515
ftnint * inex
Definition: continua.cc:20570
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:14640
VOID C_f
Definition: continua.cc:20665
#define sh2oa_1
Definition: continua.cc:22933
struct u_bbbb_::s_m_2 m_2
const Numeric SL296_ckd_mt_320_v1
Definition: continua.cc:2671
int nptslfwv___
Definition: continua.cc:22955
Implementation of Matrix, Vector, and such stuff.
int nsriup
Definition: continua.cc:20718
int nlines
Definition: continua.cc:20786
const int N2N2_CT296_ckd_mt_100_npt
Definition: continua.cc:4884
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:9506
#define like
Definition: continua.cc:20962
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:11744
#define q1
Definition: continua.cc:21438
#define ibound
Definition: continua.cc:21437
#define VOID
Definition: continua.cc:20594
VOID(* C_fp)()
Definition: continua.cc:20657
#define llp
Definition: continua.cc:21960
double d0
Definition: continua.cc:20796
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:15168
double artsckd_(double p, double t, double vmrh2o, double vmrn2, double vmro2, double freq, int ivc)
Definition: continua.cc:24052
long int logical
Definition: continua.cc:20487
ftnint informlen
Definition: continua.cc:20585
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:10762
const Numeric Pa_to_kPa
Definition: continua.cc:433
char integer1
Definition: continua.cc:20490
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:15073
ftnint * innrec
Definition: continua.cc:20589
ftnlen infmtlen
Definition: continua.cc:20583
#define fnumax
Definition: continua.cc:20953
#define d0
Definition: continua.cc:21715
logical(* L_fp)()
Definition: continua.cc:20659
char * addr
Definition: continua.cc:20613
This can be used to make arrays out of anything.
Definition: array.h:39
double wn2[2]
Definition: continua.cc:20796
void CKD_mt_320_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 3.20 H2O self continuum absorption model.
Definition: continua.cc:9019
double b01
Definition: continua.cc:20792
const Numeric SL260_ckd_mt_100_v1
Definition: continua.cc:2046
const Numeric SL260_ckd_mt_320_v2
Definition: continua.cc:3016
ftnlen inblanklen
Definition: continua.cc:20591
double omeg[201]
Definition: continua.cc:20740
ftnint cunit
Definition: continua.cc:20554
#define ldelvi
Definition: continua.cc:21955
struct s_s260b_ s260b_
const double SL296_ckd_0[SL296_ckd_0_npt+addF77fields]
Definition: continua.cc:492
VOID H_f
Definition: continua.cc:20666
double om0
Definition: continua.cc:20754
const Numeric SL260_ckd_mt_320_v1
Definition: continua.cc:3015
const Numeric SL260_ckd_0_v2
Definition: continua.cc:1311
doublecomplex z
Definition: continua.cc:20604
struct s_k1k0_ k1k0_
double dv
Definition: continua.cc:22918
#define ns
Definition: continua.cc:22183
integer1 g
Definition: continua.cc:20597
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:10332
const Numeric Hz_to_GHz
Definition: continua.cc:429
const int FH2O_ckd_0_npt
Definition: continua.cc:902
double eb[246]
Definition: continua.cc:20779
const Numeric O2O2_O2F_ckd_mt_100_v2
Definition: continua.cc:5075
Complex w(Complex z) noexcept
The Faddeeva function.
const int N2N2_N2F_ckd_mt_250_npt
Definition: continua.cc:5010
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:10113
const double N2N2_CT296_ckd_mt_100[N2N2_CT296_ckd_mt_100_npt+addF77fields]
Definition: continua.cc:4885
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 &)
MPM93IceCrystalAbs.
Definition: continua.cc:15832
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:7437
struct s_bf_ bf_
A constant view of a Vector.
Definition: matpackI.h:400
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:14522
#define s260a_1
Definition: continua.cc:22951
ftnint aunit
Definition: continua.cc:20561
const int O2O2_O2F_ckd_mt_100_npt
Definition: continua.cc:5077
char * osta
Definition: continua.cc:20544
const int SL260_ckd_mt_320_npt
Definition: continua.cc:3018
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:6730
Numeric MPMLineShapeO2Function(const Numeric gamma, const Numeric fl, const Numeric f, const Numeric delta)
Definition: continua.cc:16262
#define nlines
Definition: continua.cc:22187
#define a2
Definition: complex.h:57
double e_1[2003]
Definition: continua.cc:22974
double rsi[201]
Definition: continua.cc:20740
integer i
Definition: continua.cc:20599
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:6950
#define temp
Definition: continua.cc:20951
double fwv_mpmf87s93__(double wn, double *w_wv__, double *rft, double *xn, double *xn_wv__, double *xn0, double *xfrg)
Definition: continua.cc:24319
#define ivip
Definition: continua.cc:21957
integer(* I_fp)()
Definition: continua.cc:20654
const Numeric SL260_ckd_mt_320_dv
Definition: continua.cc:3017
short int shortlogical
Definition: continua.cc:20488
#define _U_
Definition: config.h:183
const Numeric N2N2_N2F_ckd_mt_250_dv
Definition: continua.cc:5009
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:20406
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:7909
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:10525
double e_1[3]
Definition: continua.cc:23655
int bs260b_(void)
Definition: continua.cc:24764
#define wnrmax3
Definition: continua.cc:22181
#define beta
Definition: continua.cc:21435
#define CREATE_OUT3
Definition: messages.h:207
Numeric sqrt(Rational r)
Square root.
Definition: rational.h:517
int profile_(double *x, double *y)
Definition: continua.cc:21761
double rsigg[201]
Definition: continua.cc:20740
constexpr Numeric B
Definition: linemixing.h:113
double avogad
Definition: continua.cc:22966
double fwv24_(double wn, double *w_wv__, double *rft, double *xn, double *xn_wv__, double *xn0, double *xfrg)
Definition: continua.cc:24349
const Numeric O2_vis_ckd_mt_250_v1
Definition: continua.cc:5225
double omeg[201]
Definition: continua.cc:20737
struct s_consts_ consts_
const int O2_00_ckd_mt_100_npt
Definition: continua.cc:5133
const Numeric SL296_ckd_0_v2
Definition: continua.cc:489
flag aerr
Definition: continua.cc:20560
ftnint ciunit
Definition: continua.cc:20522
ftnlen * dims
Definition: continua.cc:20614
double rsigg[201]
Definition: continua.cc:20737
double wnrmax3
Definition: continua.cc:20712
const double SL296_ckd_mt_100[SL296_ckd_mt_100_npt+addF77fields]
Definition: continua.cc:1754
const double N2N2_CT220_ckd_mt_100[N2N2_CT220_ckd_mt_100_npt+addF77fields]
Definition: continua.cc:4922
double wn2[2]
Definition: continua.cc:20792
#define b1
Definition: complex.h:56
double doublereal
Definition: continua.cc:20480
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:22877
double gascon
Definition: continua.cc:22966
const Numeric PI
#define ll
Definition: continua.cc:21959
#define fh2ob_1
Definition: continua.cc:22926
const int SL296_ckd_0_npt
Definition: continua.cc:491
int bfh2oa_(void)
Definition: continua.cc:24768
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:5482
int fill_1[1]
Definition: continua.cc:20882
const Numeric FCO2_ckd_mt_100_v1
Definition: continua.cc:3942
void ELL07WaterDropletAbs(MatrixView pxsec, const String &model, ConstVectorView f_grid, ConstVectorView abs_p, ConstVectorView abs_t, ConstVectorView vmr, const Verbosity &)
ELL07WaterDropletAbs.
Definition: continua.cc:15608
const Numeric N2N2_N2F_ckd_mt_250_v2
Definition: continua.cc:5008
Numeric MPMLineShapeFunction(const Numeric gamma, const Numeric fl, const Numeric f)
Definition: continua.cc:16206
double g0bf
Definition: continua.cc:20754
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:10958
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:24700
char * name
Definition: continua.cc:20612
int e_2[6]
Definition: continua.cc:20831
double v2
Definition: continua.cc:22940
long int integer
Definition: continua.cc:20475
double xlgr_(double *xf, double *x)
Definition: continua.cc:24676
flag inerr
Definition: continua.cc:20566
const int FCO2_ckd_mt_250_npt
Definition: continua.cc:4156
double clebsqr_0_(int n__, int *l, int *lambda, int *lp)
Definition: continua.cc:22373
double v1
Definition: continua.cc:22936
double v1
Definition: continua.cc:22922
int bsb296_(void)
Definition: continua.cc:24758
double slit
Definition: continua.cc:20712
const Numeric FCO2_ckd_mt_250_v2
Definition: continua.cc:4154
const double SL260_ckd_mt_320[SL260_ckd_mt_320_npt+addF77fields]
Definition: continua.cc:3021
shortint(* J_fp)()
Definition: continua.cc:20653
double rsi[201]
Definition: continua.cc:20737
int nptfh2o
Definition: continua.cc:22919
double d01
Definition: continua.cc:20792
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:5654
int like
Definition: continua.cc:20760
union u_bbbb_ bbbb_
ftnint orl
Definition: continua.cc:20547
const Numeric SL260_ckd_mt_100_v2
Definition: continua.cc:2047
double planck
Definition: continua.cc:22966
struct s_n2part_ n2part_
struct s_rsilo_ rsilo_
const double N2N2_sf_220_ckd_mt_100[N2N2_CT220_ckd_mt_100_npt+addF77fields]
Definition: continua.cc:4937
int fill_3[1]
Definition: continua.cc:20878
double dx
Definition: continua.cc:20712
#define niv
Definition: continua.cc:22186
const Numeric O2_00_ckd_mt_100_v2
Definition: continua.cc:5131
const int SL260_ckd_mt_100_npt
Definition: continua.cc:2049
Numeric pow(Rational base, Rational exp)
Power of.
Definition: rational.h:525
const int FH2O_ckd_mt_320_npt
Definition: continua.cc:3532
char * inseq
Definition: continua.cc:20578
const int SL260_ckd_0_npt
Definition: continua.cc:1313
double v2
Definition: continua.cc:22936