28#include <Faddeeva/Faddeeva.hh>
38 static constexpr Index nBmx=7'000;
39 static constexpr Index nLmx=700;
40 static constexpr Index Nlifmax=10;
41 static constexpr Index Jmax=131;
43 static constexpr Numeric Ct=1.4387686e0;
44 static constexpr Numeric T0=296;
45 static constexpr Numeric CtGamD=1.1325e-08;
46 static constexpr Numeric aMolAtm=7.33889e+21;
48 static constexpr auto aMass =
stdarrayify(44.e-3,45.e-3,46.e-3,45.e-3,47.e-3,46.e-3,48.e-3,47.e-3,46.e-3,49.e-3);
55 std::array<Index, parameters::nBmx>
Isot;
56 std::array<Index, parameters::nBmx>
nLines;
57 std::array<Index, parameters::nBmx>
li;
58 std::array<Index, parameters::nBmx>
lf;
63 Eigen::Matrix<Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>
Sig;
68 Eigen::Matrix<Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>
Dipo0;
73 Eigen::Matrix<Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>
E;
78 Eigen::Matrix<Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>
HWVT0AIR;
83 Eigen::Matrix<Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>
HWSDVT0AIR;
84 Eigen::Matrix<Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>
rHWT0AIR;
89 Eigen::Matrix<Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>
BHWAIR;
94 Eigen::Matrix<Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>
HWVT0SELF;
99 Eigen::Matrix<Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>
HWSDVT0SELF;
100 Eigen::Matrix<Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>
rHWT0SELF;
105 Eigen::Matrix<Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>
BHWSELF;
110 Eigen::Matrix<Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>
HWVT0H2O;
115 Eigen::Matrix<Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>
HWSDVT0H2O;
116 Eigen::Matrix<Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>
rHWT0H2O;
121 Eigen::Matrix<Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>
BHWH2O;
126 std::array<Numeric, parameters::nLmx>
HWT;
127 std::array<Numeric, parameters::nLmx>
HWSDV2T;
131 std::array<Numeric, parameters::nLmx>
shft;
135 Eigen::Matrix<Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>
shft0;
140 std::array<Numeric, parameters::nLmx>
PopuT;
144 Eigen::Matrix<Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>
PopuT0;
149 Eigen::Matrix<Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>
DipoT;
154 Eigen::Matrix<Index, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>
Ji;
159 Eigen::Matrix<Index, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>
Jf;
164 std::array<Complex, parameters::nLmx>
ZS;
173 Eigen::Matrix<Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>
W;
238 Eigen::Matrix<Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>
OpR;
243 Eigen::Matrix<Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>
OpI;
248 std::array<Numeric, parameters::nLmx>
YT;
252 Eigen::Matrix<Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>
intens;
253 Eigen::Matrix<Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>
eina;
254 std::array<Rational, parameters::nBmx>
iv1;
255 std::array<Rational, parameters::nBmx>
iv2;
256 std::array<Rational, parameters::nBmx>
il2;
257 std::array<Rational, parameters::nBmx>
iv3;
258 std::array<Rational, parameters::nBmx>
ir;
259 std::array<Rational, parameters::nBmx>
fv1;
260 std::array<Rational, parameters::nBmx>
fv2;
261 std::array<Rational, parameters::nBmx>
fl2;
262 std::array<Rational, parameters::nBmx>
fv3;
263 std::array<Rational, parameters::nBmx>
fr;
272 if (
b ==
' ' and
a ==
' ')
287 std::ifstream fortranfile;
289 fortranfile.open(fname.c_str());
291 if (fortranfile.is_open()) {
293 getline(fortranfile, line);
296 while (fortranfile.good()) {
301 char sDipoRigid[21], sPopTrf[21];
302 char iv11, iv12, iv21, iv22, il21, il22, iv31, iv32, ir1, fv11, fv12, fv21, fv22, fl21, fl22, fv31, fv32, fr1;
305 "%c%c" "%1" PRId64
"%12lf" "%10lf"
306 "%10lf" "%5lf" "%5lf" "%4lf"
307 "%5lf" "%5lf" "%4lf" "%10lf"
310 "%c%c" "%c%c" "%c%c" "%c%c" "%c"
312 "%c%c" "%c%c" "%c%c" "%c%c" "%c"
313 "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c"
314 "%c" "%3" PRId64
"%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c"
315 "%5lf" "%5lf" "%4lf" "%5lf"
333 &iv11, &iv12, &iv21, &iv22, &il21, &il22, &iv31, &iv32, &ir1, &fv32, &fr1,
335 &fv11, &fv12, &fv21, &fv22, &fl21, &fl22, &fv31,
336 &x,&x,&x,&x,&x,&x,&x,&x,&x,&x,&x,&x,&x,&x,&x,&x,&x,&x,&x,&x,
338 &cmn.
Jiln.
Ji(nliner, iband),
339 &x,&x,&x,&x,&x,&x,&x,&x,&x,&x,&x,&x,&x,&x,&x,&x,&x,&x,&x,&x,&x,
346 getline(fortranfile, line);
372 "Bad read, bands do not have the same global quantum numbers...");
375 String ssDipoRigid = sDipoRigid;
376 String ssPopTrf = sPopTrf;
377 std::replace(ssDipoRigid.begin(), ssDipoRigid.end(),
'D',
'E');
378 std::replace(ssPopTrf.begin(), ssPopTrf.end(),
'D',
'E');
387 cmn.
Jfln.
Jf(nliner, iband) = cmn.
Jiln.
Ji(nliner, iband) - 1;
388 else if (tpline ==
'Q')
389 cmn.
Jfln.
Jf(nliner, iband) = cmn.
Jiln.
Ji(nliner, iband);
391 cmn.
Jfln.
Jf(nliner, iband) = cmn.
Jiln.
Ji(nliner, iband) + 1;
408 const std::array<Numeric, NT>&
a,
409 const std::array<Numeric, NT>&
b)
411 for (
size_t i=1; i<NT; i++) {
413 if (i < 2 or i == NT) {
421 Numeric A0D1=
a[j-2]-
a[j-1];
if (A0D1 == 0) A0D1=0.0001;
422 Numeric A0D2=
a[j-2]-
a[j];
if (A0D2 == 0) A0D2=0.0001;
423 Numeric A1D1=
a[j-1]-
a[j-2];
if (A1D1 == 0) A1D1=0.0001;
424 Numeric A1D2=
a[j-1]-
a[j];
if (A1D2 == 0) A1D2=0.0001;
425 Numeric A2D1=
a[j]-
a[j-2];
if (A2D1 == 0) A2D1=0.0001;
426 Numeric A2D2=
a[j]-
a[j-1];
if (A2D2 == 0) A2D2=0.0001;
428 const Numeric A0=(aa-
a[j-1])*(aa-
a[j])/(A0D1*A0D2);
429 const Numeric A1=(aa-
a[j-2])*(aa-
a[j])/(A1D1*A1D2);
430 const Numeric A2=(aa-
a[j-2])*(aa-
a[j-1])/(A2D1*A2D2);
432 return A0*
b[j-2] + A1*
b[j-1] + A2*
b[j];
436 Numeric A0D1=
a[j-2]-
a[j-1];
if (A0D1 == 0) A0D1=0.0001;
437 Numeric A0D2=
a[j-2]-
a[j];
if (A0D2 == 0) A0D2=0.0001;
438 Numeric A0D3=
a[j-2]-
a[j+1];
if (A0D3 == 0) A0D3=0.0001;
439 Numeric A1D1=
a[j-1]-
a[j-2];
if (A1D1 == 0) A1D1=0.0001;
440 Numeric A1D2=
a[j-1]-
a[j];
if (A1D2 == 0) A1D2=0.0001;
441 Numeric A1D3=
a[j-1]-
a[j+1];
if (A1D3 == 0) A1D3=0.0001;
442 Numeric A2D1=
a[j]-
a[j-2];
if (A2D1 == 0) A2D1=0.0001;
443 Numeric A2D2=
a[j]-
a[j-1];
if (A2D2 == 0) A2D2=0.0001;
444 Numeric A2D3=
a[j]-
a[j+1];
if (A2D3 == 0) A2D3=0.0001;
445 Numeric A3D1=
a[j+1]-
a[j-2];
if (A3D1 == 0) A3D1=0.0001;
446 Numeric A3D2=
a[j+1]-
a[j-1];
if (A3D2 == 0) A3D2=0.0001;
447 Numeric A3D3=
a[j+1]-
a[j];
if (A3D3 == 0) A3D3=0.0001;
451 A0=A0/(A0D1*A0D2*A0D3);
453 A1=A1/(A1D1*A1D2*A1D3);
454 Numeric A2=(aa-
a[j-2])*(aa-
a[j-1])*(aa-
a[j+1]);
455 A2=A2/(A2D1*A2D2*A2D3);
457 A3=A3/(A3D1*A3D2*A3D3);
459 return A0*
b[j-2] + A1*
b[j-1] + A2*
b[j] + A3*
b[j+1];
463 return std::numeric_limits<Numeric>::quiet_NaN();
471 constexpr auto xgj =
stdarrayify(1.,2.,1.,6.,2.,12.,1.,6.,1.,2.,12.);
472 constexpr auto tdat =
stdarrayify(60., 85., 110., 135., 160., 185., 210., 235.,
473 260., 285., 310., 335., 360., 385., 410., 435., 460., 485.,
474 510., 535., 560., 585., 610., 635., 660., 685., 710., 735.,
475 760., 785., 810., 835., 860., 885., 910., 935., 960., 985.,
476 1010.,1035.,1060.,1085.,1110.,1135.,1160.,1185.,1210.,1235.,
477 1260.,1285.,1310.,1335.,1360.,1385.,1410.,1435.,1460.,1485.,
478 1510.,1535.,1560.,1585.,1610.,1635.,1660.,1685.,1710.,1735.,
479 1760.,1785.,1810.,1835.,1860.,1885.,1910.,1935.,1960.,1985.,
480 2010.,2035.,2060.,2085.,2110.,2135.,2160.,2185.,2210.,2235.,
481 2260.,2285.,2310.,2335.,2360.,2385.,2410.,2435.,2460.,2485.,
482 2510.,2535.,2560.,2585.,2610.,2635.,2660.,2685.,2710.,2735.,
483 2760.,2785.,2810.,2835.,2860.,2885.,2910.,2935.,2960.,2985.,
487 stdarrayify( 0.53642E+02, 0.75947E+02, 0.98292E+02,
488 + 0.12078E+03, 0.14364E+03, 0.16714E+03, 0.19160E+03, 0.21731E+03,
489 + 0.24454E+03, 0.27355E+03, 0.30456E+03, 0.33778E+03, 0.37343E+03,
490 + 0.41170E+03, 0.45280E+03, 0.49692E+03, 0.54427E+03, 0.59505E+03,
491 + 0.64948E+03, 0.70779E+03, 0.77019E+03, 0.83693E+03, 0.90825E+03,
492 + 0.98440E+03, 0.10656E+04, 0.11522E+04, 0.12445E+04, 0.13427E+04,
493 + 0.14471E+04, 0.15580E+04, 0.16759E+04, 0.18009E+04, 0.19334E+04,
494 + 0.20739E+04, 0.22225E+04, 0.23798E+04, 0.25462E+04, 0.27219E+04,
495 + 0.29074E+04, 0.31032E+04, 0.33097E+04, 0.35272E+04, 0.37564E+04,
496 + 0.39976E+04, 0.42514E+04, 0.45181E+04, 0.47985E+04, 0.50929E+04,
497 + 0.54019E+04, 0.57260E+04, 0.60659E+04, 0.64221E+04, 0.67952E+04,
498 + 0.71859E+04, 0.75946E+04, 0.80222E+04, 0.84691E+04, 0.89362E+04,
499 + 0.94241E+04, 0.99335E+04, 0.10465E+05, 0.11020E+05, 0.11598E+05,
500 + 0.12201E+05, 0.12828E+05, 0.13482E+05, 0.14163E+05, 0.14872E+05,
501 + 0.15609E+05, 0.16376E+05, 0.17173E+05, 0.18001E+05, 0.18861E+05,
502 + 0.19754E+05, 0.20682E+05, 0.21644E+05, 0.22643E+05, 0.23678E+05,
503 + 0.24752E+05, 0.25865E+05, 0.27018E+05, 0.28212E+05, 0.29449E+05,
504 + 0.30730E+05, 0.32055E+05, 0.33426E+05, 0.34845E+05, 0.36312E+05,
505 + 0.37828E+05, 0.39395E+05, 0.41015E+05, 0.42688E+05, 0.44416E+05,
506 + 0.46199E+05, 0.48041E+05, 0.49942E+05, 0.51902E+05, 0.53925E+05,
507 + 0.56011E+05, 0.58162E+05, 0.60379E+05, 0.62664E+05, 0.65019E+05,
508 + 0.67444E+05, 0.69942E+05, 0.72515E+05, 0.75163E+05, 0.77890E+05,
509 + 0.80695E+05, 0.83582E+05, 0.86551E+05, 0.89605E+05, 0.92746E+05,
510 + 0.95975E+05, 0.99294E+05, 0.10271E+06, 0.10621E+06, 0.10981E+06,
513 stdarrayify( 0.10728E+03, 0.15189E+03, 0.19659E+03,
514 + 0.24164E+03, 0.28753E+03, 0.33486E+03, 0.38429E+03, 0.43643E+03,
515 + 0.49184E+03, 0.55104E+03, 0.61449E+03, 0.68263E+03, 0.75589E+03,
516 + 0.83468E+03, 0.91943E+03, 0.10106E+04, 0.11085E+04, 0.12137E+04,
517 + 0.13266E+04, 0.14477E+04, 0.15774E+04, 0.17163E+04, 0.18649E+04,
518 + 0.20237E+04, 0.21933E+04, 0.23743E+04, 0.25673E+04, 0.27729E+04,
519 + 0.29917E+04, 0.32245E+04, 0.34718E+04, 0.37345E+04, 0.40132E+04,
520 + 0.43087E+04, 0.46218E+04, 0.49533E+04, 0.53041E+04, 0.56749E+04,
521 + 0.60668E+04, 0.64805E+04, 0.69171E+04, 0.73774E+04, 0.78626E+04,
522 + 0.83736E+04, 0.89114E+04, 0.94772E+04, 0.10072E+05, 0.10697E+05,
523 + 0.11353E+05, 0.12042E+05, 0.12765E+05, 0.13523E+05, 0.14317E+05,
524 + 0.15148E+05, 0.16019E+05, 0.16930E+05, 0.17883E+05, 0.18879E+05,
525 + 0.19920E+05, 0.21008E+05, 0.22143E+05, 0.23328E+05, 0.24563E+05,
526 + 0.25852E+05, 0.27195E+05, 0.28594E+05, 0.30051E+05, 0.31568E+05,
527 + 0.33146E+05, 0.34788E+05, 0.36496E+05, 0.38271E+05, 0.40115E+05,
528 + 0.42031E+05, 0.44021E+05, 0.46086E+05, 0.48230E+05, 0.50453E+05,
529 + 0.52759E+05, 0.55150E+05, 0.57628E+05, 0.60195E+05, 0.62854E+05,
530 + 0.65608E+05, 0.68459E+05, 0.71409E+05, 0.74461E+05, 0.77618E+05,
531 + 0.80883E+05, 0.84258E+05, 0.87746E+05, 0.91350E+05, 0.95073E+05,
532 + 0.98918E+05, 0.10289E+06, 0.10698E+06, 0.11121E+06, 0.11558E+06,
533 + 0.12008E+06, 0.12472E+06, 0.12950E+06, 0.13443E+06, 0.13952E+06,
534 + 0.14475E+06, 0.15015E+06, 0.15571E+06, 0.16143E+06, 0.16732E+06,
535 + 0.17338E+06, 0.17962E+06, 0.18604E+06, 0.19264E+06, 0.19943E+06,
536 + 0.20642E+06, 0.21360E+06, 0.22098E+06, 0.22856E+06, 0.23636E+06,
539 stdarrayify( 0.11368E+03, 0.16096E+03, 0.20833E+03,
540 + 0.25603E+03, 0.30452E+03, 0.35442E+03, 0.40640E+03, 0.46110E+03,
541 + 0.51910E+03, 0.58093E+03, 0.64709E+03, 0.71804E+03, 0.79422E+03,
542 + 0.87607E+03, 0.96402E+03, 0.10585E+04, 0.11600E+04, 0.12689E+04,
543 + 0.13857E+04, 0.15108E+04, 0.16449E+04, 0.17883E+04, 0.19416E+04,
544 + 0.21054E+04, 0.22803E+04, 0.24668E+04, 0.26655E+04, 0.28770E+04,
545 + 0.31021E+04, 0.33414E+04, 0.35956E+04, 0.38654E+04, 0.41516E+04,
546 + 0.44549E+04, 0.47761E+04, 0.51160E+04, 0.54755E+04, 0.58555E+04,
547 + 0.62568E+04, 0.66804E+04, 0.71273E+04, 0.75982E+04, 0.80944E+04,
548 + 0.86169E+04, 0.91666E+04, 0.97446E+04, 0.10352E+05, 0.10990E+05,
549 + 0.11660E+05, 0.12363E+05, 0.13101E+05, 0.13874E+05, 0.14683E+05,
550 + 0.15531E+05, 0.16418E+05, 0.17347E+05, 0.18317E+05, 0.19332E+05,
551 + 0.20392E+05, 0.21499E+05, 0.22654E+05, 0.23859E+05, 0.25116E+05,
552 + 0.26426E+05, 0.27792E+05, 0.29214E+05, 0.30695E+05, 0.32236E+05,
553 + 0.33840E+05, 0.35508E+05, 0.37242E+05, 0.39045E+05, 0.40917E+05,
554 + 0.42862E+05, 0.44881E+05, 0.46977E+05, 0.49152E+05, 0.51407E+05,
555 + 0.53746E+05, 0.56171E+05, 0.58683E+05, 0.61286E+05, 0.63981E+05,
556 + 0.66772E+05, 0.69661E+05, 0.72650E+05, 0.75742E+05, 0.78940E+05,
557 + 0.82246E+05, 0.85664E+05, 0.89196E+05, 0.92845E+05, 0.96613E+05,
558 + 0.10050E+06, 0.10452E+06, 0.10867E+06, 0.11295E+06, 0.11736E+06,
559 + 0.12191E+06, 0.12661E+06, 0.13145E+06, 0.13643E+06, 0.14157E+06,
560 + 0.14687E+06, 0.15232E+06, 0.15794E+06, 0.16372E+06, 0.16968E+06,
561 + 0.17580E+06, 0.18211E+06, 0.18859E+06, 0.19526E+06, 0.20213E+06,
562 + 0.20918E+06, 0.21643E+06, 0.22388E+06, 0.23154E+06, 0.23941E+06,
565 stdarrayify( 0.66338E+03, 0.93923E+03, 0.12156E+04,
566 + 0.14938E+04, 0.17766E+04, 0.20676E+04, 0.23705E+04, 0.26891E+04,
567 + 0.30267E+04, 0.33866E+04, 0.37714E+04, 0.41839E+04, 0.46267E+04,
568 + 0.51023E+04, 0.56132E+04, 0.61618E+04, 0.67508E+04, 0.73827E+04,
569 + 0.80603E+04, 0.87863E+04, 0.95636E+04, 0.10395E+05, 0.11284E+05,
570 + 0.12233E+05, 0.13246E+05, 0.14326E+05, 0.15477E+05, 0.16702E+05,
571 + 0.18005E+05, 0.19390E+05, 0.20861E+05, 0.22422E+05, 0.24077E+05,
572 + 0.25832E+05, 0.27689E+05, 0.29655E+05, 0.31734E+05, 0.33931E+05,
573 + 0.36250E+05, 0.38698E+05, 0.41280E+05, 0.44002E+05, 0.46869E+05,
574 + 0.49886E+05, 0.53062E+05, 0.56400E+05, 0.59909E+05, 0.63594E+05,
575 + 0.67462E+05, 0.71521E+05, 0.75777E+05, 0.80238E+05, 0.84911E+05,
576 + 0.89804E+05, 0.94925E+05, 0.10028E+06, 0.10588E+06, 0.11173E+06,
577 + 0.11785E+06, 0.12423E+06, 0.13090E+06, 0.13785E+06, 0.14510E+06,
578 + 0.15265E+06, 0.16053E+06, 0.16873E+06, 0.17727E+06, 0.18615E+06,
579 + 0.19540E+06, 0.20501E+06, 0.21501E+06, 0.22540E+06, 0.23619E+06,
580 + 0.24740E+06, 0.25904E+06, 0.27112E+06, 0.28365E+06, 0.29664E+06,
581 + 0.31012E+06, 0.32409E+06, 0.33856E+06, 0.35356E+06, 0.36908E+06,
582 + 0.38516E+06, 0.40180E+06, 0.41902E+06, 0.43683E+06, 0.45525E+06,
583 + 0.47429E+06, 0.49397E+06, 0.51431E+06, 0.53532E+06, 0.55702E+06,
584 + 0.57943E+06, 0.60256E+06, 0.62644E+06, 0.65107E+06, 0.67648E+06,
585 + 0.70269E+06, 0.72972E+06, 0.75758E+06, 0.78629E+06, 0.81588E+06,
586 + 0.84636E+06, 0.87775E+06, 0.91008E+06, 0.94337E+06, 0.97763E+06,
587 + 0.10129E+07, 0.10492E+07, 0.10865E+07, 0.11249E+07, 0.11644E+07,
588 + 0.12050E+07, 0.12467E+07, 0.12896E+07, 0.13337E+07, 0.13789E+07,
591 stdarrayify( 0.22737E+03, 0.32194E+03, 0.41671E+03,
592 + 0.51226E+03, 0.60963E+03, 0.71017E+03, 0.81528E+03, 0.92628E+03,
593 + 0.10444E+04, 0.11707E+04, 0.13061E+04, 0.14518E+04, 0.16085E+04,
594 + 0.17772E+04, 0.19588E+04, 0.21542E+04, 0.23644E+04, 0.25903E+04,
595 + 0.28330E+04, 0.30934E+04, 0.33726E+04, 0.36717E+04, 0.39918E+04,
596 + 0.43342E+04, 0.47001E+04, 0.50907E+04, 0.55074E+04, 0.59515E+04,
597 + 0.64244E+04, 0.69276E+04, 0.74626E+04, 0.80310E+04, 0.86344E+04,
598 + 0.92744E+04, 0.99528E+04, 0.10671E+05, 0.11432E+05, 0.12236E+05,
599 + 0.13086E+05, 0.13984E+05, 0.14932E+05, 0.15932E+05, 0.16985E+05,
600 + 0.18096E+05, 0.19265E+05, 0.20495E+05, 0.21788E+05, 0.23148E+05,
601 + 0.24576E+05, 0.26075E+05, 0.27648E+05, 0.29298E+05, 0.31027E+05,
602 + 0.32839E+05, 0.34736E+05, 0.36721E+05, 0.38798E+05, 0.40970E+05,
603 + 0.43240E+05, 0.45611E+05, 0.48087E+05, 0.50671E+05, 0.53368E+05,
604 + 0.56180E+05, 0.59111E+05, 0.62165E+05, 0.65347E+05, 0.68659E+05,
605 + 0.72107E+05, 0.75694E+05, 0.79425E+05, 0.83303E+05, 0.87334E+05,
606 + 0.91522E+05, 0.95872E+05, 0.10039E+06, 0.10507E+06, 0.10994E+06,
607 + 0.11498E+06, 0.12021E+06, 0.12563E+06, 0.13125E+06, 0.13707E+06,
608 + 0.14309E+06, 0.14933E+06, 0.15579E+06, 0.16247E+06, 0.16938E+06,
609 + 0.17653E+06, 0.18392E+06, 0.19156E+06, 0.19946E+06, 0.20761E+06,
610 + 0.21604E+06, 0.22473E+06, 0.23371E+06, 0.24298E+06, 0.25254E+06,
611 + 0.26240E+06, 0.27258E+06, 0.28307E+06, 0.29388E+06, 0.30502E+06,
612 + 0.31651E+06, 0.32834E+06, 0.34052E+06, 0.35307E+06, 0.36599E+06,
613 + 0.37929E+06, 0.39298E+06, 0.40706E+06, 0.42155E+06, 0.43645E+06,
614 + 0.45178E+06, 0.46753E+06, 0.48373E+06, 0.50038E+06, 0.51748E+06,
617 stdarrayify( 0.13267E+04, 0.18785E+04, 0.24314E+04,
618 + 0.29888E+04, 0.35566E+04, 0.41426E+04, 0.47550E+04, 0.54013E+04,
619 + 0.60886E+04, 0.68232E+04, 0.76109E+04, 0.84574E+04, 0.93678E+04,
620 + 0.10348E+05, 0.11402E+05, 0.12536E+05, 0.13755E+05, 0.15065E+05,
621 + 0.16471E+05, 0.17980E+05, 0.19598E+05, 0.21330E+05, 0.23184E+05,
622 + 0.25166E+05, 0.27283E+05, 0.29543E+05, 0.31953E+05, 0.34521E+05,
623 + 0.37256E+05, 0.40164E+05, 0.43256E+05, 0.46541E+05, 0.50026E+05,
624 + 0.53723E+05, 0.57641E+05, 0.61790E+05, 0.66180E+05, 0.70823E+05,
625 + 0.75729E+05, 0.80910E+05, 0.86378E+05, 0.92145E+05, 0.98224E+05,
626 + 0.10463E+06, 0.11137E+06, 0.11846E+06, 0.12592E+06, 0.13375E+06,
627 + 0.14198E+06, 0.15062E+06, 0.15969E+06, 0.16920E+06, 0.17916E+06,
628 + 0.18959E+06, 0.20052E+06, 0.21196E+06, 0.22392E+06, 0.23642E+06,
629 + 0.24949E+06, 0.26314E+06, 0.27740E+06, 0.29227E+06, 0.30779E+06,
630 + 0.32398E+06, 0.34085E+06, 0.35842E+06, 0.37673E+06, 0.39579E+06,
631 + 0.41563E+06, 0.43626E+06, 0.45772E+06, 0.48003E+06, 0.50322E+06,
632 + 0.52730E+06, 0.55232E+06, 0.57829E+06, 0.60524E+06, 0.63320E+06,
633 + 0.66219E+06, 0.69226E+06, 0.72342E+06, 0.75571E+06, 0.78916E+06,
634 + 0.82380E+06, 0.85966E+06, 0.89678E+06, 0.93518E+06, 0.97490E+06,
635 + 0.10160E+07, 0.10585E+07, 0.11023E+07, 0.11477E+07, 0.11946E+07,
636 + 0.12430E+07, 0.12929E+07, 0.13445E+07, 0.13977E+07, 0.14526E+07,
637 + 0.15093E+07, 0.15677E+07, 0.16280E+07, 0.16901E+07, 0.17541E+07,
638 + 0.18200E+07, 0.18880E+07, 0.19579E+07, 0.20300E+07, 0.21042E+07,
639 + 0.21805E+07, 0.22591E+07, 0.23400E+07, 0.24232E+07, 0.25087E+07,
640 + 0.25967E+07, 0.26871E+07, 0.27801E+07, 0.28757E+07, 0.29739E+07,
643 stdarrayify( 0.60334E+02, 0.85430E+02, 0.11058E+03,
644 + 0.13590E+03, 0.16167E+03, 0.18821E+03, 0.21588E+03, 0.24502E+03,
645 + 0.27595E+03, 0.30896E+03, 0.34431E+03, 0.38225E+03, 0.42301E+03,
646 + 0.46684E+03, 0.51397E+03, 0.56464E+03, 0.61907E+03, 0.67753E+03,
647 + 0.74027E+03, 0.80753E+03, 0.87961E+03, 0.95676E+03, 0.10393E+04,
648 + 0.11275E+04, 0.12217E+04, 0.13222E+04, 0.14293E+04, 0.15434E+04,
649 + 0.16648E+04, 0.17940E+04, 0.19312E+04, 0.20769E+04, 0.22315E+04,
650 + 0.23954E+04, 0.25691E+04, 0.27529E+04, 0.29474E+04, 0.31530E+04,
651 + 0.33702E+04, 0.35995E+04, 0.38414E+04, 0.40965E+04, 0.43654E+04,
652 + 0.46484E+04, 0.49464E+04, 0.52598E+04, 0.55892E+04, 0.59353E+04,
653 + 0.62988E+04, 0.66803E+04, 0.70804E+04, 0.74998E+04, 0.79394E+04,
654 + 0.83998E+04, 0.88817E+04, 0.93859E+04, 0.99132E+04, 0.10464E+05,
655 + 0.11040E+05, 0.11642E+05, 0.12270E+05, 0.12925E+05, 0.13609E+05,
656 + 0.14321E+05, 0.15064E+05, 0.15838E+05, 0.16643E+05, 0.17482E+05,
657 + 0.18355E+05, 0.19263E+05, 0.20207E+05, 0.21188E+05, 0.22208E+05,
658 + 0.23267E+05, 0.24366E+05, 0.25508E+05, 0.26692E+05, 0.27921E+05,
659 + 0.29195E+05, 0.30516E+05, 0.31886E+05, 0.33304E+05, 0.34773E+05,
660 + 0.36294E+05, 0.37869E+05, 0.39499E+05, 0.41185E+05, 0.42929E+05,
661 + 0.44732E+05, 0.46596E+05, 0.48522E+05, 0.50513E+05, 0.52569E+05,
662 + 0.54692E+05, 0.56884E+05, 0.59146E+05, 0.61481E+05, 0.63890E+05,
663 + 0.66375E+05, 0.68937E+05, 0.71578E+05, 0.74301E+05, 0.77107E+05,
664 + 0.79998E+05, 0.82976E+05, 0.86043E+05, 0.89201E+05, 0.92452E+05,
665 + 0.95799E+05, 0.99242E+05, 0.10278E+06, 0.10643E+06, 0.11018E+06,
666 + 0.11403E+06, 0.11799E+06, 0.12206E+06, 0.12625E+06, 0.13055E+06,
669 stdarrayify( 0.70354E+03, 0.99615E+03, 0.12893E+04,
670 + 0.15846E+04, 0.18848E+04, 0.21940E+04, 0.25162E+04, 0.28554E+04,
671 + 0.32152E+04, 0.35991E+04, 0.40099E+04, 0.44507E+04, 0.49242E+04,
672 + 0.54332E+04, 0.59802E+04, 0.65681E+04, 0.71996E+04, 0.78776E+04,
673 + 0.86050E+04, 0.93847E+04, 0.10220E+05, 0.11114E+05, 0.12070E+05,
674 + 0.13091E+05, 0.14182E+05, 0.15345E+05, 0.16585E+05, 0.17906E+05,
675 + 0.19311E+05, 0.20805E+05, 0.22393E+05, 0.24078E+05, 0.25865E+05,
676 + 0.27760E+05, 0.29768E+05, 0.31893E+05, 0.34140E+05, 0.36516E+05,
677 + 0.39025E+05, 0.41674E+05, 0.44469E+05, 0.47416E+05, 0.50520E+05,
678 + 0.53789E+05, 0.57229E+05, 0.60847E+05, 0.64650E+05, 0.68645E+05,
679 + 0.72840E+05, 0.77242E+05, 0.81859E+05, 0.86699E+05, 0.91770E+05,
680 + 0.97081E+05, 0.10264E+06, 0.10846E+06, 0.11454E+06, 0.12090E+06,
681 + 0.12754E+06, 0.13447E+06, 0.14171E+06, 0.14927E+06, 0.15715E+06,
682 + 0.16536E+06, 0.17392E+06, 0.18284E+06, 0.19213E+06, 0.20179E+06,
683 + 0.21185E+06, 0.22231E+06, 0.23319E+06, 0.24450E+06, 0.25625E+06,
684 + 0.26845E+06, 0.28112E+06, 0.29427E+06, 0.30791E+06, 0.32206E+06,
685 + 0.33674E+06, 0.35196E+06, 0.36772E+06, 0.38406E+06, 0.40098E+06,
686 + 0.41850E+06, 0.43663E+06, 0.45539E+06, 0.47480E+06, 0.49488E+06,
687 + 0.51564E+06, 0.53710E+06, 0.55928E+06, 0.58219E+06, 0.60586E+06,
688 + 0.63029E+06, 0.65553E+06, 0.68157E+06, 0.70844E+06, 0.73616E+06,
689 + 0.76476E+06, 0.79424E+06, 0.82464E+06, 0.85597E+06, 0.88826E+06,
690 + 0.92153E+06, 0.95580E+06, 0.99108E+06, 0.10274E+07, 0.10648E+07,
691 + 0.11033E+07, 0.11429E+07, 0.11837E+07, 0.12256E+07, 0.12687E+07,
692 + 0.13131E+07, 0.13586E+07, 0.14055E+07, 0.14536E+07, 0.15031E+07,
695 stdarrayify( 0.20518E+04, 0.29051E+04, 0.37601E+04,
696 + 0.46209E+04, 0.54961E+04, 0.63969E+04, 0.73353E+04, 0.83227E+04,
697 + 0.93698E+04, 0.10486E+05, 0.11681E+05, 0.12962E+05, 0.14337E+05,
698 + 0.15815E+05, 0.17403E+05, 0.19110E+05, 0.20942E+05, 0.22909E+05,
699 + 0.25018E+05, 0.27278E+05, 0.29699E+05, 0.32290E+05, 0.35060E+05,
700 + 0.38019E+05, 0.41177E+05, 0.44545E+05, 0.48135E+05, 0.51957E+05,
701 + 0.56023E+05, 0.60346E+05, 0.64938E+05, 0.69812E+05, 0.74981E+05,
702 + 0.80461E+05, 0.86264E+05, 0.92406E+05, 0.98902E+05, 0.10577E+06,
703 + 0.11302E+06, 0.12067E+06, 0.12875E+06, 0.13726E+06, 0.14622E+06,
704 + 0.15566E+06, 0.16559E+06, 0.17604E+06, 0.18702E+06, 0.19855E+06,
705 + 0.21066E+06, 0.22336E+06, 0.23669E+06, 0.25065E+06, 0.26528E+06,
706 + 0.28061E+06, 0.29664E+06, 0.31342E+06, 0.33096E+06, 0.34930E+06,
707 + 0.36845E+06, 0.38845E+06, 0.40933E+06, 0.43111E+06, 0.45383E+06,
708 + 0.47751E+06, 0.50219E+06, 0.52790E+06, 0.55466E+06, 0.58252E+06,
709 + 0.61151E+06, 0.64166E+06, 0.67300E+06, 0.70558E+06, 0.73943E+06,
710 + 0.77458E+06, 0.81108E+06, 0.84896E+06, 0.88827E+06, 0.92904E+06,
711 + 0.97131E+06, 0.10151E+07, 0.10605E+07, 0.11076E+07, 0.11563E+07,
712 + 0.12068E+07, 0.12590E+07, 0.13130E+07, 0.13689E+07, 0.14267E+07,
713 + 0.14865E+07, 0.15483E+07, 0.16121E+07, 0.16781E+07, 0.17462E+07,
714 + 0.18165E+07, 0.18892E+07, 0.19641E+07, 0.20415E+07, 0.21213E+07,
715 + 0.22036E+07, 0.22884E+07, 0.23759E+07, 0.24661E+07, 0.25590E+07,
716 + 0.26547E+07, 0.27533E+07, 0.28549E+07, 0.29594E+07, 0.30670E+07,
717 + 0.31778E+07, 0.32918E+07, 0.34090E+07, 0.35296E+07, 0.36536E+07,
718 + 0.37812E+07, 0.39123E+07, 0.40470E+07, 0.41855E+07, 0.43278E+07,
721 stdarrayify( 0.12066E+03, 0.17085E+03, 0.22116E+03,
722 + 0.27190E+03, 0.32364E+03, 0.37711E+03, 0.43305E+03, 0.49219E+03,
723 + 0.55516E+03, 0.62256E+03, 0.69492E+03, 0.77276E+03, 0.85657E+03,
724 + 0.94685E+03, 0.10441E+04, 0.11488E+04, 0.12614E+04, 0.13826E+04,
725 + 0.15127E+04, 0.16525E+04, 0.18024E+04, 0.19630E+04, 0.21351E+04,
726 + 0.23191E+04, 0.25158E+04, 0.27260E+04, 0.29502E+04, 0.31892E+04,
727 + 0.34438E+04, 0.37148E+04, 0.40031E+04, 0.43094E+04, 0.46346E+04,
728 + 0.49797E+04, 0.53455E+04, 0.57331E+04, 0.61434E+04, 0.65775E+04,
729 + 0.70364E+04, 0.75212E+04, 0.80330E+04, 0.85730E+04, 0.91424E+04,
730 + 0.97423E+04, 0.10374E+05, 0.11039E+05, 0.11738E+05, 0.12474E+05,
731 + 0.13246E+05, 0.14057E+05, 0.14908E+05, 0.15801E+05, 0.16737E+05,
732 + 0.17717E+05, 0.18744E+05, 0.19819E+05, 0.20944E+05, 0.22120E+05,
733 + 0.23349E+05, 0.24634E+05, 0.25975E+05, 0.27376E+05, 0.28837E+05,
734 + 0.30361E+05, 0.31950E+05, 0.33605E+05, 0.35330E+05, 0.37126E+05,
735 + 0.38996E+05, 0.40942E+05, 0.42965E+05, 0.45069E+05, 0.47256E+05,
736 + 0.49528E+05, 0.51888E+05, 0.54338E+05, 0.56882E+05, 0.59521E+05,
737 + 0.62259E+05, 0.65097E+05, 0.68040E+05, 0.71090E+05, 0.74249E+05,
738 + 0.77522E+05, 0.80910E+05, 0.84417E+05, 0.88046E+05, 0.91801E+05,
739 + 0.95684E+05, 0.99699E+05, 0.10385E+06, 0.10814E+06, 0.11257E+06,
740 + 0.11715E+06, 0.12187E+06, 0.12675E+06, 0.13179E+06, 0.13699E+06,
741 + 0.14235E+06, 0.14788E+06, 0.15358E+06, 0.15946E+06, 0.16552E+06,
742 + 0.17176E+06, 0.17819E+06, 0.18482E+06, 0.19164E+06, 0.19867E+06,
743 + 0.20590E+06, 0.21335E+06, 0.22101E+06, 0.22889E+06, 0.23699E+06,
744 + 0.24533E+06, 0.25390E+06, 0.26271E+06, 0.27177E+06, 0.28108E+06,
747 stdarrayify( 0.14071E+04, 0.19923E+04, 0.25789E+04,
748 + 0.31704E+04, 0.37733E+04, 0.43962E+04, 0.50477E+04, 0.57360E+04,
749 + 0.64687E+04, 0.72525E+04, 0.80938E+04, 0.89984E+04, 0.99723E+04,
750 + 0.11021E+05, 0.12150E+05, 0.13366E+05, 0.14673E+05, 0.16079E+05,
751 + 0.17589E+05, 0.19211E+05, 0.20949E+05, 0.22812E+05, 0.24807E+05,
752 + 0.26940E+05, 0.29221E+05, 0.31656E+05, 0.34254E+05, 0.37023E+05,
753 + 0.39972E+05, 0.43111E+05, 0.46449E+05, 0.49996E+05, 0.53762E+05,
754 + 0.57756E+05, 0.61991E+05, 0.66477E+05, 0.71226E+05, 0.76249E+05,
755 + 0.81558E+05, 0.87167E+05, 0.93088E+05, 0.99334E+05, 0.10592E+06,
756 + 0.11286E+06, 0.12016E+06, 0.12785E+06, 0.13594E+06, 0.14444E+06,
757 + 0.15337E+06, 0.16274E+06, 0.17258E+06, 0.18290E+06, 0.19371E+06,
758 + 0.20504E+06, 0.21691E+06, 0.22933E+06, 0.24233E+06, 0.25592E+06,
759 + 0.27012E+06, 0.28496E+06, 0.30046E+06, 0.31663E+06, 0.33351E+06,
760 + 0.35111E+06, 0.36946E+06, 0.38858E+06, 0.40850E+06, 0.42924E+06,
761 + 0.45083E+06, 0.47329E+06, 0.49666E+06, 0.52095E+06, 0.54620E+06,
762 + 0.57243E+06, 0.59967E+06, 0.62796E+06, 0.65732E+06, 0.68778E+06,
763 + 0.71938E+06, 0.75214E+06, 0.78611E+06, 0.82131E+06, 0.85777E+06,
764 + 0.89553E+06, 0.93463E+06, 0.97511E+06, 0.10170E+07, 0.10603E+07,
765 + 0.11051E+07, 0.11514E+07, 0.11993E+07, 0.12488E+07, 0.12999E+07,
766 + 0.13527E+07, 0.14073E+07, 0.14636E+07, 0.15217E+07, 0.15816E+07,
767 + 0.16435E+07, 0.17072E+07, 0.17730E+07, 0.18408E+07, 0.19107E+07,
768 + 0.19827E+07, 0.20569E+07, 0.21334E+07, 0.22121E+07, 0.22931E+07,
769 + 0.23765E+07, 0.24624E+07, 0.25507E+07, 0.26416E+07, 0.27351E+07,
770 + 0.28312E+07, 0.29301E+07, 0.30317E+07, 0.31361E+07, 0.32434E+07,
774 const auto&
q = qoft[iso-1];
776 if (t < 70 or t > 3000)
779 qt =
atob(t, tdat,
q);
787 for (
Index i=0; i<n; i++) {
789 for (
Index j=0; j<n; j++) {
795 for (
Index i=0; i<n; i++) {
802 for (
Index i=0; i<n; i++) {
806 for (
Index i=0; i<n; i++) {
807 for (
Index j=i+1; j<n; j++) {
826 const Numeric dlgt0t = std::log(parameters::T0 /
temp);
831 for (
Index i=0; i<n; i++) {
834 jji=cmn.
Jiln.
Ji(i, iband);
835 jjf=cmn.
Jfln.
Jf(i, iband);
837 jji=cmn.
Jfln.
Jf(i, iband);
838 jjf=cmn.
Jiln.
Ji(i, iband);
841 for (
Index j=0; j<n; j++) {
844 jjip=cmn.
Jiln.
Ji(j, iband);
845 jjfp=cmn.
Jfln.
Jf(j, iband);
847 jjip=cmn.
Jfln.
Jf(j, iband);
848 jjfp=cmn.
Jiln.
Ji(j, iband);
851 if (jjip > jji)
continue;
856 if (jji > jjf and jjip > jjfp) {
859 }
else if (jji > jjf and jjip == jjfp) {
862 }
else if (jji > jjf and jjip < jjfp) {
865 }
else if (jji < jjf and jjip > jjfp) {
868 }
else if (jji < jjf and jjip == jjfp) {
871 }
else if (jji < jjf and jjip < jjfp) {
874 }
else if (jji == jjf and jjip > jjfp) {
877 }
else if (jji == jjf and jjip == jjfp) {
880 }
else if (jji == jjf and jjip < jjfp) {
885 const Numeric ycal = std::exp(w0 -
b0*dlgt0t);
892 for (
Index i=0; i<n; i++) {
893 for (
Index j=0; j<n; j++) {
901 for (
Index i=0; i<n; i++) {
906 for (
Index i=0; i<n; i++) {
910 for (
Index j=0; j<n; j++) {
920 for (
Index j=i+1; j<n; j++) {
932 for (
Index i=0; i<n; i++) {
934 for (
Index j=0; j<n; j++) {
935 if (i == j)
continue;
940 if (
std::abs(deltasig) < 1e-4 ) deltasig = 1e-4 ;
945 cmn.
YLT.
YT[i] = sum0;
957 explicit ConvTPOut(
Index n=0) noexcept :
Y(n, 0),
hwt(n),
hwt2(n),
shft(n),
f0(n),
pop(n),
dip(n),
W(n, n, 0),
eqv(n) {}
967 std::vector<Rational>
Ji;
968 std::vector<Rational>
Ju;
991 std::vector<Rational> Ji(n), Jf(n);
992 for (
Index i=0; i<n; i++) {
993 Ji[i] = band.
lines[i].localquanta.val[QuantumNumberType::J].upp();
994 Jf[i] = band.
lines[i].localquanta.val[QuantumNumberType::J].low();
999 for (
Index i=0; i<n; i++) {
1001 s[i] = band.
lines[i].I0;
1007 for (
Index i=0; i<n; i++) {
1008 for (
Index j=i+1; j<n; j++) {
1027 return {dip0, Ji, Jf};
1035 const bool at_t0=
false) {
1052 const auto [dip0, Ji, Jf] =
sorter_calcw(out, band, at_t0);
1054 if (li > 8 or
abs(li - lf) > 1) {
1055 for (
Index i=0; i<n; i++) {
1059 const Numeric dlgt0t = std::log(band.
T0 / T);
1064 for (
Index i=0; i<n; i++) {
1074 for (
Index j=0; j<n; j++) {
1084 if (jjip > jji)
continue;
1091 (
abs(Ji[i] - Ji[j]) % 2) not_eq 0;
1096 if (jji > jjf and jjip > jjfp) {
1099 }
else if (jji > jjf and jjip == jjfp) {
1102 }
else if (jji > jjf and jjip < jjfp) {
1105 }
else if (jji < jjf and jjip > jjfp) {
1108 }
else if (jji < jjf and jjip == jjfp) {
1111 }
else if (jji < jjf and jjip < jjfp) {
1114 }
else if (jji == jjf and jjip > jjfp) {
1117 }
else if (jji == jjf and jjip == jjfp) {
1120 }
else if (jji == jjf and jjip < jjfp) {
1126 const Numeric ycal = std::exp(w0 -
b0*dlgt0t);
1128 W(i, j) = ycal * pop[i] / pop[j];
1133 for (
Index i=0; i<n; i++) {
1134 for (
Index j=0; j<n; j++) {
1142 for (
Index i=0; i<n; i++) {
1147 for (
Index i=0; i<n; i++) {
1151 for (
Index j=0; j<n; j++) {
1158 (
abs(Ji[i] - Ji[j]) % 2) not_eq 0;
1163 sumlw +=
std::abs(dip0[j]) * W(j, i);
1165 sumup +=
std::abs(dip0[j]) * W(j, i);
1169 for (
Index j=i+1; j<n; j++) {
1174 W(j, i) *= - sumup / sumlw;
1175 W(i, j) = W(j, i) * pop[i] / pop[j];
1181 for (
Index i=0; i<n; i++) {
1183 for (
Index j=0; j<n; j++) {
1184 if (i == j)
continue;
1191 (
abs(Ji[i] - Ji[j]) % 2) not_eq 0;
1195 Numeric deltasig = f0[i] - f0[j];
1215 for (
Index i=0; i<n; i++) {
1216 for (
Index j=0; j<n; j++) {
1223 inv(inv_zvec, zvec);
1229 for (
Index i=0; i<n; i++) {
1232 for (
Index j=0; j<n; j++) {
1256 for (
Index i=0; i<n; i++) {
1257 for (
Index j=0; j<n; j++) {
1258 out.
str[i] += dip[j] * zvec(j, i);
1263 auto& inv_zvec=zvec.
inv();
1264 for (
Index i=0; i<n; i++) {
1266 for (
Index j=0; j<n; j++) {
1267 z += pop[j] * dip[j] * inv_zvec(i, j);
1282 const Index& nlinec,
1293 Numeric qt0_co2, qtt_co2, gsi0, gsit;
1294 qt_co2(parameters::T0, isotc, gsi0, qt0_co2);
1296 const Numeric ratiopart = qt0_co2 / qtt_co2;
1302 for (
Index iline=0; iline<nlinec; iline++) {
1321 sigmoy += cmn.
LineSg.
Sig(iline,iband) * wgt;
1328 for (
Index iline=0; iline<nlinec; iline++) {
1331 cmn.
YLT.
YT[iline] *= ptot;
1332 const Numeric gamd = parameters::CtGamD * cmn.
LineSg.
Sig(iline, iband) * sqrtm;
1337 for (
Index iline=0; iline<nlinec; iline++) {
1338 for (
Index ilinep=0; ilinep<nlinec; ilinep++) {
1340 if (iline == ilinep) {
1348 eqvlines(cmn, iband, nlinec, sigmoy);
1362 const Numeric ratiopart = QT0 / QT;
1367 for (
Index i=0; i<n; i++) {
1374 out.
dip[i] =
std::sqrt(- band.
lines[i].I0/(pop0 * band.
lines[i].F0 * std::expm1(- (Constant::h * band.
lines[i].F0) / (Constant::k * band.
T0))));
1380 calcw(out, hitran, band, T);
1388 if (band.
population == Absorption::PopulationType::ByHITRANFullRelmat) {
1412 Complex x , y, csqrty, z1, z2, w1, w2, aterm;
1415 const Numeric cte = Constant::sqrt_ln_2 / gamd;
1416 const Numeric pi = Constant::pi;
1417 const Numeric rpi = Constant::sqrt_pi;
1422 const Complex c0t = (c0 - 1.5 * c2);
1425 if (
std::abs(c2t) == 0)
goto label110;
1426 x = (iz * (sg0 - sg) + c0t) / c2t;
1427 y = 1 /
pow2(2 * cte * c2t);
1428 csqrty = (gam2 - iz * shift2) / (2 * cte * (
pow2(gam2) +
pow2(shift2)));
1432 z2 = z1 + 2 * csqrty;
1441 aterm = rpi * cte * (w1 - w2);
1445 z1 = (iz*(sg0-sg)+c0t)*cte;
1450 aterm = rpi*cte* w1;
1455 z1 = (iz*(sg0-sg)+c0t)*cte;
1464 aterm = rpi * cte * (w1-w2);
1473 aterm = (2 * rpi / c2t) * (1 / rpi -
std::sqrt(x) * wb);
1475 aterm = (1 / c2t) * (1 / x - 1.5 /
pow2(x));
1480 const Complex ls_qsdv = (1 / pi) * aterm;
1482 ls_qsdv_r = ls_qsdv.real();
1483 ls_qsdv_i = ls_qsdv.imag();
1497 Complex x , y, csqrty, z1, z2, w1, w2, aterm;
1500 const Numeric cte = Constant::sqrt_ln_2 / gamd;
1501 const Numeric pi = Constant::pi;
1502 const Numeric rpi = Constant::sqrt_pi;
1507 const Complex c0t = (c0 - 1.5 * c2);
1510 if (
std::abs(c2t) == 0)
goto label110;
1511 x = (iz * (F0 - f) + c0t) / c2t;
1512 y = 1 /
pow2(2 * cte * c2t);
1513 csqrty = (gam2 - iz * shift2) / (2 * cte * (
pow2(gam2) +
pow2(shift2)));
1517 z2 = z1 + 2 * csqrty;
1526 aterm = rpi * cte * (w1 - w2);
1530 z1 = (iz*(F0 - f) + c0t)*cte;
1535 aterm = rpi*cte* w1;
1540 z1 = (iz*(F0 - f) + c0t)*cte;
1549 aterm = rpi * cte * (w1-w2);
1558 aterm = (2 * rpi / c2t) * (1 / rpi -
std::sqrt(x) * wb);
1560 aterm = (1 / c2t) * (1 / x - 1.5 /
pow2(x));
1565 return (1 / pi) * aterm;
1584 constexpr Numeric rdmult = 30;
1594 constexpr Numeric sq_ln2 = Constant::sqrt_ln_2;
1595 constexpr Numeric sq_ln2pi = sq_ln2 / Constant::sqrt_pi;
1596 const Numeric dens = xco2 * ptot * parameters::aMolAtm /
temp;
1597 constexpr Numeric u_pi = Constant::inv_pi;
1598 constexpr Numeric u_sqln2pi = 1 / sq_ln2pi;
1604 xh2o, xco2,
temp, ptot, sigmoy, gamdmx, mixfull, mixsdv);
1610 for (
Index isig=0; isig<nsig; isig++) {
1611 const Numeric sigc = invcm_grid[isig];
1615 const Numeric cte = sq_ln2 / gamd;
1621 absv[isig] += popudipo * u_sqln2pi * u_pi * cmn.
GamT.
HWT[iline] / (
pow2(cmn.
GamT.
HWT[iline]) +
pow2(dsigc));
1622 absy[isig] += popudipo * u_sqln2pi * u_pi * (cmn.
GamT.
HWT[iline] + cmn.
YLT.
YT[iline]*dsigc) / (
pow2(cmn.
GamT.
HWT[iline]) +
pow2(dsigc));
1633 absv[isig] += popudipo * u_sqln2pi * u_pi * order2r;
1635 absy[isig] += popudipo * u_sqln2pi * u_pi * (order2r + cmn.
YLT.
YT[iline]*order2i);
1642 absv[isig] += popudipo * wr * u_sqln2pi;
1644 absy[isig] += popudipo * u_sqln2pi * (wr - cmn.
YLT.
YT[iline] * wi);
1648 absv[isig] += popudipo * u_sqln2pi * u_pi * cmn.
GamT.
HWT[iline] / (
pow2(cmn.
GamT.
HWT[iline]) +
pow2(dsigc));
1650 absy[isig] += popudipo * u_sqln2pi * u_pi * (cmn.
GamT.
HWT[iline] + cmn.
YLT.
YT[iline] * dsigc) / (
pow2(cmn.
GamT.
HWT[iline]) +
pow2(dsigc));
1656 absv[isig] += popudipo *
w.real() / gamd;
1658 absy[isig] += popudipo * (
w.real() - cmn.
YLT.
YT[iline] *
w.imag()) / gamd;
1670 absw[isig] += u_sqln2pi * u_pi * (cmn.
Zss.
ZS[iline] / (sigc - cmn.
Zaa.
ZA[iline])).imag();
1676 for (
Index isig=0; isig<nsig; isig++) {
1677 const Numeric sigc = invcm_grid[isig];
1678 const Numeric fact = sigc * (1-std::exp(-parameters::Ct * sigc /
temp));
1679 absv[isig] *= fact * dens * sq_ln2pi;
1680 absy[isig] *= fact * dens * sq_ln2pi;
1681 absw[isig] *= fact * dens * sq_ln2pi;
1701 Vector absorption(nf, 0);
1703 constexpr Numeric sq_ln2 = Constant::sqrt_ln_2;
1704 constexpr Numeric sq_ln2pi = sq_ln2 / Constant::sqrt_pi;
1706 constexpr Numeric u_pi = Constant::inv_pi;
1707 constexpr Numeric u_sqln2pi = 1 / sq_ln2pi;
1709 for (
Index iband=0; iband<bands.
nelem(); iband++) {
1710 if (not bands[iband].DoLineMixing(P))
continue;
1712 const Numeric rat_isot = isotopologue_ratio[bands[iband].Isotopologue()];
1714 auto tp =
convtp(
vmrs, hitran, bands[iband], T, P);
1715 const Numeric GD_div_F0 = bands[iband].DopplerConstant(T);
1717 const bool sdvp = bands[iband].lineshapetype == LineShape::Type::SDVP;
1718 const bool vp = bands[iband].lineshapetype == LineShape::Type::VP;
1719 const bool rosenkranz = bands[iband].population == Absorption::PopulationType::ByHITRANRosenkranzRelmat;
1720 const bool full = bands[iband].population == Absorption::PopulationType::ByHITRANFullRelmat;
1722 for (
Index iv=0; iv<nf; iv++) {
1726 for (
Index iline=0; iline<bands[iband].NumLines(); iline++) {
1727 const Numeric gamd=GD_div_F0 * tp.f0[iline];
1728 const Numeric gamd_mod=GD_div_F0 * tp.eqv.val[iline].real();
1729 const Numeric cte = sq_ln2 / gamd;
1730 const Numeric cte_mod = sq_ln2 / gamd_mod;
1731 const Numeric popudipo = tp.pop[iline] *
pow2(tp.dip[iline]);
1733 if (rosenkranz and sdvp) {
1734 const Complex w =
qsdv_si(tp.f0[iline], gamd, tp.hwt[iline], tp.hwt2[iline], tp.shft[iline], 0, f);
1735 a += popudipo * u_sqln2pi * (
Complex(1, tp.Y[iline]) *
w).
real();
1736 }
else if (rosenkranz and vp) {
1737 const Numeric yy = tp.hwt[iline] * cte;
1738 const Numeric xx = (tp.f0[iline]+tp.shft[iline] - f) * cte;
1740 a += popudipo * (
Complex(1, tp.Y[iline]) *
w).
real() / gamd;
1741 }
else if (full and vp) {
1742 const Complex z = (tp.eqv.val[iline]-f) * cte_mod;
1744 a += (tp.eqv.str[iline] *
w).
real() / gamd_mod;
1746 a += u_sqln2pi * u_pi * (tp.eqv.str[iline] / (f - tp.eqv.val[iline])).imag();
1748 ARTS_USER_ERROR (
"Cannot understand the combination of calculations requested...");
1753 if (std::isnormal(
a) and
a > 0)
1754 absorption[iv] += rat_isot *
a;
1758 for (
Index iv=0; iv<nf; iv++) {
1760 const Numeric fact = - f * std::expm1(- (Constant::h * f) / (Constant::k * T));
1761 absorption[iv] *= fact * dens * sq_ln2pi;
1771 const String& basedir=
"data_new/")
1774 std::ifstream fortranfile;
1775 fortranfile.open(basedir +
"/BandInfo.dat");
1778 "Cannot read the file. Please make sure you point at BandInfo.dat basedir and have the right to read.");
1781 getline(fortranfile, line);
1782 while (fortranfile.good()) {
1784 Index isotr, lfr, lir, jmxp, jmxq, jmxr;
1785 char c11, c12, c21, c22, c31, c32, c41, c42, c51, c52, x;
1786 sscanf(line.c_str(),
1788 "%c%c" "%1" PRId64
"%c%c"
1789 "%c%c" "%1" PRId64
"%c%c"
1795 "%4" PRId64
"%4" PRId64
"%4" PRId64,
1797 &c11, &c12, &lfr, &c21, &c22,
1798 &c31, &c32, &lir, &c41, &c42,
1803 &x, &x, &x, &x, &x, &x, &x, &x,
1804 &jmxp, &jmxq, &jmxr);
1806 getline(fortranfile, line);
1810 if ((sgminr < sgmax) and (sgmaxr > sgmin)) {
1819 "S%" PRId64
"%c%c%" PRId64
"%c%c%c%c%" PRId64
"%c%c%c%c",
1839 fortranfile.close();
1845 for (
Index ideltal=0; ideltal<=1; ideltal++) {
1847 const Index llf =
l + ideltal;
1849 const String cr = std::to_string(lli) + std::to_string(llf);
1851 std::ifstream fortranfile;
1853 fortranfile.open(fname.c_str());
1856 getline(fortranfile, line);
1857 while (fortranfile.good()) {
1858 char sw0r[21], sb0r[21];
1860 Index jic, jfc, jipc, jfpc;
1861 sscanf(line.c_str(),
1864 "%4" PRId64
"%4" PRId64
"%4" PRId64
"%4" PRId64,
1865 sw0r, sb0r, &dmaxdt, &wtmax, &jic, &jfc, &jipc, &jfpc);
1867 std::replace(ssw0r.begin(), ssw0r.end(),
'D',
'E');
1868 const Numeric w0r = std::stod(ssw0r);
1870 std::replace(ssb0r.begin(), ssb0r.end(),
'D',
'E');
1871 const Numeric b0r = std::stod(ssb0r);
1873 getline(fortranfile, line);
1879 "Out of bounds in reading...");
1881 if (jic > jfc and jipc > jfpc) {
1884 }
else if(jic > jfc and jipc == jfpc) {
1887 }
else if(jic > jfc and jipc < jfpc) {
1890 }
else if(jic < jfc and jipc > jfpc) {
1893 }
else if(jic < jfc and jipc == jfpc) {
1896 }
else if(jic < jfc and jipc < jfpc) {
1899 }
else if(jic == jfc and jipc > jfpc) {
1902 }
else if(jic == jfc and jipc == jfpc) {
1905 }
else if(jic == jfc and jipc < jfpc) {
1923 detband(cmn, invcm_grid[0], invcm_grid[n-1], stotmax);
1931 compabs(cmn, t,p, xco2, xh2o, invcm_grid,
false,
true, absv, absy, absw);
1933 compabs(cmn, t,p, xco2, xh2o, invcm_grid,
true,
false, absv, absy, absw);
1935 compabs(cmn, t,p, xco2, xh2o, invcm_grid,
false,
false, absv, absy, absw);
1941 for (
Index i=0; i<n; i++)
1942 absorption[i] = absv[i];
1947 for (
Index i=0; i<n; i++)
1948 absorption[i] = absy[i];
1953 for (
Index i=0; i<n; i++)
1954 absorption[i] = absw[i];
1976 const Numeric linemixinglimit,
1980 const ModeOfLineMixing mode)
1982 String newbase = basedir;
1983 if (newbase.
nelem() == 0)
1988 readw(cmn, newbase);
1991 Numeric linemixinglimit_internal=0;
1993 case ModeOfLineMixing::VP:
1994 case ModeOfLineMixing::SDVP:
break;
1995 case ModeOfLineMixing::FullW:
1996 case ModeOfLineMixing::VP_W:
1997 case ModeOfLineMixing::VP_Y:
1998 case ModeOfLineMixing::SDVP_Y: linemixinglimit_internal=linemixinglimit;
break;
1999 case ModeOfLineMixing::FINAL:
ARTS_ASSERT(
true,
"Bad mode input. Must update function.");
2002 const auto lstype =
typeLP(mode) ?
2003 LineShape::Type::LP :
2005 LineShape::Type::VP :
2006 LineShape::Type::SDVP) ;
2007 const auto poptype =
typeFull(mode) ?
2008 Absorption::PopulationType::ByHITRANFullRelmat :
2009 Absorption::PopulationType::ByHITRANRosenkranzRelmat ;
2066 Absorption::CutoffType::None,
2067 Absorption::MirroringType::None,
2069 Absorption::NormalizationType::None,
2073 linemixinglimit_internal,
2075 {Species::fromShortName(
"CO2"), Species::fromShortName(
"H2O"), Species::fromShortName(
"AIR")}};
2077 const Numeric rat_isot = isotopologue_ratio[bands[i].Isotopologue()];
2118 const auto lsmodel = typeVP(mode) ?
2140 const Vector& temperatures,
2154 #pragma omp parallel for collapse(2) if (!arts_omp_in_parallel())
2155 for (
Index m=0; m<
M; m++) {
2156 for (
Index k=0; k<K; k++) {
2159 const Numeric T = temperatures[k];
2162 const Numeric ratiopart = QT0 / QT;
2164 for (
Index i=0; i<
N; i++) {
2167 calc.
f0[i] = band.
lines[i].F0;
2169 calc.
hwt[i] = P * band.
lines[i].lineshape[m].G0().at(T, band.
T0);
2170 calc.
shft[i] = P * band.
lines[i].lineshape[m].D0().at(T, band.
T0);
2171 calc.
dip[i] =
std::sqrt(- band.
lines[i].I0/(pop0 * band.
lines[i].F0 * std::expm1(- (Constant::h * band.
lines[i].F0) / (Constant::k * band.
T0))));
2172 calc.
hwt2[i] = P * band.
lines[i].lineshape[m].G2().at(T, band.
T0);
2176 calcw(calc, hitran, band, T,
true);
2179 if (Absorption::PopulationType::ByHITRANRosenkranzRelmat == band.
population) {
2183 if (calc.
f0[j] < calc.
f0[i]) {
2190 out(1,
joker, m, k) = calc.
Y;
2191 }
else if (Absorption::PopulationType::ByHITRANFullRelmat == band.
population) {
2197 calc.
W, calc.
pop, calc.
dip, band, fmean, T, P, QT, QT0, m);
2199 out(0,
joker, m, k) = eig.str.real();
2200 out(1,
joker, m, k) = eig.str.imag();
2201 out(2,
joker, m, k) = eig.val.real();
2202 out(3,
joker, m, k) = eig.val.imag();
2211 const Vector& temperatures,
2220 "The temperature list [", temperatures,
"] K\n"
2221 "must be fully sorted from low to high"
2226 temperatures, P0, ord)) {
2232 const Vector& temperatures,
2234 const Vector& pressures) {
constexpr std::array< T, 1+sizeof...(Ts)> stdarrayify(const T &first, const Ts &... the_rest)
Make a std::array of a list of variables (must be 1-long at least)
This can be used to make arrays out of anything.
Index nelem() const ARTS_NOEXCEPT
The ComplexMatrixView class.
ComplexVectorView diagonal()
ComplexMatrix diagonal as vector.
MatrixView imag()
Get a view of the imaginary parts of the matrix.
ComplexMatrix & inv(const lapack_help::Inverse< Complex > &help=lapack_help::Inverse< Complex >{0})
The ComplexVectorView class.
VectorView real()
Get a view of the real part of the vector.
A constant view of a ComplexMatrix.
Index ncols() const noexcept
Index nrows() const noexcept
Index nbooks() const noexcept
Index npages() const noexcept
A constant view of a Vector.
Index nelem() const noexcept
Returns the number of elements.
Index size() const noexcept
Main line shape model class.
Compute the line shape parameters for a single broadening species.
void set(Value v)
Sets the value if it exists or adds it otherwise.
Implements rational numbers to work with other ARTS types.
constexpr Index toIndex(int n=1) const noexcept
Converts the value to index by n-scaled division.
#define ARTS_ASSERT(condition,...)
#define ARTS_USER_ERROR(...)
#define ARTS_USER_ERROR_IF(condition,...)
void diagonalize(MatrixView P, VectorView WR, VectorView WI, ConstMatrixView A)
Matrix Diagonalization.
void inv(MatrixView Ainv, ConstMatrixView A)
Matrix Inverse.
Linear algebra functions.
Namespace and functions to deal with HITRAN linemixing.
Numeric boltzman_factor(Numeric T, Numeric E0)
Computes exp(- E0/kT)
Numeric boltzman_ratio(const Numeric &T, const Numeric &T0, const Numeric &E0)
Computes exp(E0/c (T - T0) / (T * T0))
Numeric single_partition_function(const Numeric &T, const Species::IsotopeRecord &ir)
Computes the partition function at one temperature.
bool is_sorted(ConstVectorView x)
Checks if a vector is sorted in ascending order.
NUMERIC Numeric
The type to use for all floating point numbers.
INDEX Index
The type to use for all integer numbers and indices.
ConstComplexMatrixView transpose(ConstComplexMatrixView m)
Const version of transpose.
void swap(ComplexVector &v1, ComplexVector &v2)
Swaps two objects.
std::complex< Numeric > Complex
constexpr Numeric real(Complex c) noexcept
real
my_basic_string< char > String
The String type for ARTS.
EquivalentLines eigenvalue_adaptation_of_relmat(const ComplexMatrix &W, const Vector &pop, const Vector &dip, const AbsorptionLines &band, const Numeric frenorm, const Numeric T, const Numeric P, const Numeric QT, const Numeric QT0, const Index broadener)
Adapts the relaxation matrix eigenvalues to a form where they represent additions towards the three R...
Index band_eigenvalue_adaptation(AbsorptionLines &band, const Tensor4 &tempdata, const Vector &temperatures, const Numeric P0, const Index ord)
Adapts the band to the temperature data.
Numeric reduced_rovibrational_dipole(Rational Jf, Rational Ji, Rational lf, Rational li, Rational k=Rational(1))
Compute the reduced rovibrational dipole moment.
constexpr auto pow2(T x) noexcept -> decltype(x *x)
power of two
constexpr auto pow3(T x) noexcept -> decltype(pow2(x) *x)
power of three
constexpr auto kaycm_per_atm2hz_per_pa(T x) noexcept -> decltype(x *kaycm2freq(pa2atm(1)))
Conversion from cm-1 per atmosphere to Hz per Pascal.
constexpr auto kaycm_per_cmsquared2hz_per_msquared(T x) noexcept -> decltype(x *kaycm2freq(1e-4))
Conversion from cm-1 per molecule per cm^2 to Hz per molecule per m^2.
constexpr auto kaycm2freq(T x) noexcept -> decltype(x *(100 *c))
Conversion from Kayser wavenumber to Hz.
constexpr auto kaycm2joule(T x) noexcept -> decltype(x *kaycm2freq(h))
Conversion from cm-1 to Joule.
constexpr auto hz_per_msquared2kaycm_per_cmsquared(T x) noexcept -> decltype(x *freq2kaycm(1e4))
Conversion from Hz per molecule per m^2 to cm-1 per molecule per cm^2.
constexpr auto freq2kaycm(T x) noexcept -> decltype(x/(100 *c))
Conversion from Hz to Kayser wavenumber.
constexpr Numeric l(const Index p0, const Index n, const Numeric x, const SortedVectorType &xi, const Index j, const std::pair< Numeric, Numeric > cycle={ -180, 180}) noexcept
Vector vmrs(const ConstVectorView &atmospheric_vmrs, const ArrayOfArrayOfSpeciesTag &atmospheric_species, const ArrayOfSpecies &lineshape_species) ARTS_NOEXCEPT
Returns a VMR vector for this model's main calculations.
void eqvlines(CommonBlock &cmn, const Index &iband, const Index &n, const Numeric &sigmoy)
void hitran_lm_eigenvalue_adaptation(AbsorptionLines &band, const Vector &temperatures, const HitranRelaxationMatrixData &hitran, const Numeric P0, const Index ord)
Complex qsdv_si(const Numeric F0, const Numeric gamd, const Numeric gam0, const Numeric gam2, const Numeric shift0, const Numeric shift2, const Numeric f)
void read(HitranRelaxationMatrixData &hitran, ArrayOfAbsorptionLines &bands, const SpeciesIsotopologueRatios &isotopologue_ratio, const String &basedir, const Numeric linemixinglimit, const Numeric fmin, const Numeric fmax, const Numeric stot, const ModeOfLineMixing mode)
Read from HITRAN online line mixing file.
void calcw(CommonBlock &cmn, const Index &n, const Index &iband, const Numeric &temp)
Tensor5 hitran_lm_eigenvalue_adaptation_test(const AbsorptionLines &band, const Vector &temperatures, const HitranRelaxationMatrixData &hitran, const Vector &pressures)
constexpr bool typeFull(ModeOfLineMixing x)
Sorter sorter_calcw(ConvTPOut &out, const AbsorptionLines &band, const bool at_t0)
void qt_co2(const Numeric &t, const Index &iso, Numeric &gsi, Numeric &qt)
Vector compute(const Numeric p, const Numeric t, const Numeric xco2, const Numeric xh2o, const ConstVectorView &invcm_grid, const Numeric stotmax, const calctype type)
void readw(CommonBlock &cmn, const String &basedir="data_new/")
void detband(CommonBlock &cmn, const Numeric &sgminr, const Numeric &sgmaxr, const Numeric &stotmax, const String &basedir="data_new/")
void compabs(CommonBlock &cmn, const Numeric &temp, const Numeric &ptot, const Numeric &xco2, const Numeric &xh2o, const ConstVectorView &invcm_grid, const bool mixsdv, const bool mixfull, VectorView absv, VectorView absy, VectorView absw)
Rational toRationalSum(char a, char b=' ')
Numeric atob(const Numeric &aa, const std::array< Numeric, NT > &a, const std::array< Numeric, NT > &b)
void convtp(CommonBlock &cmn, const Index &iband, const Index &isotc, const Index &nlinec, const Numeric &xh2o, const Numeric &xco2, const Numeric &temp, const Numeric &ptot, Numeric &sigmoy, Numeric &gamd_gam0_mx, const bool mixfull, const bool mixsdv)
void readlines(CommonBlock &cmn, const String &basedir="data_new/")
constexpr bool typeLP(ModeOfLineMixing x)
Tensor4 hitran_lm_eigenvalue_approximation(const AbsorptionLines &band, const Vector &temperatures, const HitranRelaxationMatrixData &hitran, const Numeric P)
void qsdv(const Numeric &sg0, const Numeric &gamd, const Numeric &gam0, const Numeric &gam2, const Numeric &shift0, const Numeric &shift2, const Numeric &sg, Numeric &ls_qsdv_r, Numeric &ls_qsdv_i)
invlib::Vector< ArtsVector > Vector
invlib wrapper type for ARTS vectors.
Parameters parameters
Holds the command line parameters.
This file contains declerations of functions of physical character.
constexpr Numeric number_density(Numeric p, Numeric t) noexcept
number_density
Numeric pow(const Rational base, Numeric exp)
Power of.
Numeric sqrt(const Rational r)
Square root.
Contains recomputed equivalent lines (sorting is unknown)
Numeric T0
Reference temperature for all parameters of the lines.
PopulationType population
Line population distribution.
Numeric F_mean(Numeric T=0) const noexcept
Mean frequency by weight of line strength.
Array< SingleLine > lines
A list of individual lines.
Index NumLines() const noexcept
Number of lines.
Index NumBroadeners() const noexcept
Number of broadening species.
Species::IsotopeRecord Isotopologue() const noexcept
Isotopologue Index.
QuantumIdentifier quantumidentity
Catalog ID.
Coefficients and temperature model for SingleSpeciesModel.
A logical struct for global quantum numbers with species identifiers.
A logical struct for local quantum numbers.
A complete quantum number value with type information.
std::string_view isotname
A custom name that is unique for this Species type.
std::array< Index, parameters::nBmx > lf
std::array< Index, parameters::nBmx > Isot
std::array< String, parameters::nBmx > BandFile
std::array< Index, parameters::nBmx > li
std::array< Index, parameters::nBmx > nLines
Eigen::Matrix< Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > BHWAIR
Eigen::Matrix< Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > BHWSELF
Eigen::Matrix< Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > BHWH2O
Eigen::Matrix< Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > OpI
Eigen::Matrix< Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > OpR
Eigen::Matrix< Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > Dipo0
Eigen::Matrix< Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > DipoT
Eigen::Matrix< Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > E
Eigen::Matrix< Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > HWSDVT0AIR
Eigen::Matrix< Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > rHWT0AIR
Eigen::Matrix< Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > rHWT0SELF
Eigen::Matrix< Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > HWSDVT0SELF
Eigen::Matrix< Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > HWSDVT0H2O
Eigen::Matrix< Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > rHWT0H2O
std::array< Numeric, parameters::nLmx > HWT
std::array< Numeric, parameters::nLmx > HWSDV2T
Eigen::Matrix< Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > HWVT0AIR
Eigen::Matrix< Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > HWVT0SELF
Eigen::Matrix< Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > HWVT0H2O
Eigen::Matrix< Index, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > Jf
Eigen::Matrix< Index, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > Ji
Eigen::Matrix< Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > Sig
Eigen::Matrix< Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > PopuT0
std::array< Numeric, parameters::nLmx > PopuT
Eigen::Matrix< Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > shft0
std::array< Numeric, parameters::nLmx > shft
std::array< Rational, parameters::nBmx > fl2
std::array< Rational, parameters::nBmx > fv1
std::array< Rational, parameters::nBmx > iv1
std::array< Rational, parameters::nBmx > iv2
std::array< Rational, parameters::nBmx > ir
std::array< Rational, parameters::nBmx > fv2
std::array< Rational, parameters::nBmx > iv3
Eigen::Matrix< Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > intens
std::array< Rational, parameters::nBmx > fr
std::array< Rational, parameters::nBmx > fv3
Eigen::Matrix< Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > eina
std::array< Rational, parameters::nBmx > il2
Eigen::Matrix< Numeric, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > W
std::array< Numeric, parameters::nLmx > YT
std::array< Complex, parameters::nLmx > ZS
struct lm_hitran_2017::CommonBlock::Zaa Zaa
struct lm_hitran_2017::CommonBlock::DTGAMAIR DTGAMAIR
struct lm_hitran_2017::CommonBlock::Wfittedp Wfittedp
struct lm_hitran_2017::CommonBlock::GamVT0CO2 GamVT0CO2
struct lm_hitran_2017::CommonBlock::Energy Energy
struct lm_hitran_2017::CommonBlock::GamSDVT0CO2 GamSDVT0CO2
struct lm_hitran_2017::CommonBlock::Wfittedr Wfittedr
struct lm_hitran_2017::CommonBlock::Bfittedq Bfittedq
struct lm_hitran_2017::CommonBlock::PopTrf PopTrf
struct lm_hitran_2017::CommonBlock::Bfittedr Bfittedr
struct lm_hitran_2017::CommonBlock::Wfittedq Wfittedq
struct lm_hitran_2017::CommonBlock::YLT YLT
struct lm_hitran_2017::CommonBlock::Bands Bands
struct lm_hitran_2017::CommonBlock::GamT GamT
struct lm_hitran_2017::CommonBlock::SHIFT0 SHIFT0
struct lm_hitran_2017::CommonBlock::DipoRigid DipoRigid
struct lm_hitran_2017::CommonBlock::DTGAMCO2 DTGAMCO2
struct lm_hitran_2017::CommonBlock::SHIFT SHIFT
struct lm_hitran_2017::CommonBlock::Wmatrix Wmatrix
struct lm_hitran_2017::CommonBlock::DiagnI DiagnI
struct lm_hitran_2017::CommonBlock::UnusedBandParams UnusedBandParams
struct lm_hitran_2017::CommonBlock::DipoTcm DipoTcm
struct lm_hitran_2017::CommonBlock::Jfln Jfln
struct lm_hitran_2017::CommonBlock::GamSDVT0AIR GamSDVT0AIR
struct lm_hitran_2017::CommonBlock::DiagnR DiagnR
struct lm_hitran_2017::CommonBlock::Bfittedp Bfittedp
struct lm_hitran_2017::CommonBlock::Zss Zss
struct lm_hitran_2017::CommonBlock::GamVT0H2O GamVT0H2O
struct lm_hitran_2017::CommonBlock::GamVT0AIR GamVT0AIR
struct lm_hitran_2017::CommonBlock::DTGAMH2O DTGAMH2O
struct lm_hitran_2017::CommonBlock::LineSg LineSg
struct lm_hitran_2017::CommonBlock::GamSDVT0H2O GamSDVT0H2O
struct lm_hitran_2017::CommonBlock::PopuT PopuT
struct lm_hitran_2017::CommonBlock::Jiln Jiln
ConvTPOut & operator=(ConvTPOut &&)=default
ConvTPOut(ConvTPOut &&)=default
ConvTPOut & operator=(const ConvTPOut &)=delete
ConvTPOut(Index n=0) noexcept
ConvTPOut(const ConvTPOut &)=delete
std::vector< Rational > Ju
std::vector< Rational > Ji