48 {LineShape::TemperatureModel::None, NAN, NAN, NAN, NAN},
49 {LineShape::TemperatureModel::None, NAN, NAN, NAN, NAN},
50 {LineShape::TemperatureModel::None, NAN, NAN, NAN, NAN},
51 {LineShape::TemperatureModel::None, NAN, NAN, NAN, NAN},
52 {LineShape::TemperatureModel::None, NAN, NAN, NAN, NAN},
62 constexpr std::array<Numeric, nlines_mpm2020> g00 =
63 {1.685E+4, 1.703E+4, 1.513E+4, 1.495E+4, 1.433E+4,
64 1.408E+4, 1.353E+4, 1.353E+4, 1.303E+4, 1.319E+4,
65 1.262E+4, 1.265E+4, 1.238E+4, 1.217E+4, 1.207E+4,
66 1.207E+4, 1.137E+4, 1.137E+4, 1.101E+4, 1.101E+4,
67 1.037E+4, 1.038E+4, 9.96E+3, 9.96E+3, 9.55E+3,
68 9.55E+3, 9.06E+3, 9.06E+3, 8.58E+3, 8.58E+3,
69 8.11E+3, 8.11E+3, 7.64E+3, 7.64E+3, 7.17E+3,
70 7.17E+3, 6.69E+3, 6.69E+3, 1.64E+4, 1.64E+4,
71 1.60E+4, 1.60E+4, 1.62E+4, 1.47E+4,};
74 constexpr std::array<Numeric, nlines_mpm2020> y0 =
75 {-4.1E-7, 0.00000277, -0.00000372, 0.00000559, -0.00000573,
76 0.00000618, -0.00000366, 0.00000278, -8.9E-7, -2.1E-7,
77 6.0E-7, -0.00000152, 0.00000216, -0.00000293, 0.00000373,
78 -0.00000436, 0.00000491, -0.00000542, 0.00000571, -0.00000613,
79 0.00000636, -0.00000670, 0.00000690, -0.00000718, 0.00000740,
80 -0.00000763, 0.00000788, -0.00000807, 0.00000834, -0.00000849,
81 0.00000876, -0.00000887, 0.00000915, -0.00000922, 0.00000950,
82 -0.00000955, 0.00000987, -0.00000988, 0.00000, 0.00000,
83 0.00000, 0.00000, 0.00000, 0.00000,};
86 constexpr std::array<Numeric, nlines_mpm2020> y1 =
87 {0.00000, 0.00000124, -2E-8, 8E-8, 4.5E-7,
88 -9.3E-7, 0.00000264, -0.00000351, 0.00000359, -0.00000416,
89 0.00000326, -0.00000353, 0.00000484, -0.00000503, 0.00000579,
90 -0.00000590, 0.00000616, -0.00000619, 0.00000611, -0.00000609,
91 0.00000574, -0.00000568, 0.00000574, -0.00000566, 0.0000060,
92 -0.0000059, 0.0000063, -0.0000062, 0.0000064, -0.0000063,
93 0.0000065, -0.0000064, 0.0000065, -0.0000064, 0.0000065,
94 -0.0000064, 0.0000064, -0.0000062, 0.00000, 0.00000,
95 0.00000, 0.00000, 0.00000, 0.00000, };
98 constexpr std::array<Numeric, nlines_mpm2020>
g0 =
99 {-6.95E-14, -9.0E-12, -1.03E-11, -2.39E-11, -1.72E-11,
100 -1.71E-11, 2.8E-12, 1.50E-11, 1.32E-11, 1.70E-11,
101 8.7E-12, 6.9E-12, 8.3E-12, 6.7E-12, 7E-13,
102 1.6E-12, -2.1E-12, -6.6E-12, -9.5E-12, -1.15E-11,
103 -1.18E-11, -1.40E-11, -1.73E-11, -1.86E-11, -2.17E-11,
104 -2.27E-11, -2.34E-11, -2.42E-11, -2.66E-11, -2.72E-11,
105 -3.01E-11, -3.04E-11, -3.34E-11, -3.33E-11, -3.61E-11,
106 -3.58E-11, -3.48E-11, -3.44E-11, 0E-10, 0E-10,
107 0E-10, 0E-10, 0E-10, 0E-10,};
110 constexpr std::array<Numeric, nlines_mpm2020> g1 =
111 {0E-10, -4.5E-12, 7E-13, 3.3E-12, 8.1E-12,
112 1.62E-11, 1.79E-11, 2.25E-11, 5.4E-12, 3E-13,
113 4E-14, -4.7E-12, -3.4E-12, -7.1E-12, -1.80E-11,
114 -2.10E-11, -2.85E-11, -3.23E-11, -3.63E-11, -3.80E-11,
115 -3.78E-11, -3.87E-11, -3.92E-11, -3.94E-11, -4.24E-11,
116 -4.22E-11, -4.65E-11, -4.6E-11, -5.1E-11, -5.0E-11,
117 -5.5E-11, -5.4E-11, -5.8E-11, -5.6E-11, -6.2E-11,
118 -5.9E-11, -6.8E-11, -6.5E-11, 0E-10, 0E-10,
119 0E-10, 0E-10, 0E-10, 0E-10, };
122 constexpr std::array<Numeric, nlines_mpm2020> dv0 =
123 {-0.000028, 0.000597, -0.00195, 0.0032, -0.00475,
124 0.00541, -0.00232, 0.00154, 0.00007, -0.00084,
125 -0.00025, -0.00014, -0.00004, -0.00020, 0.0005,
126 -0.00066, 0.00072, -0.0008, 0.00064, -0.00070,
127 0.00056, -0.00060, 0.00047, -0.00049, 0.00040,
128 -0.00041, 0.00036, -0.00037, 0.00033, -0.00034,
129 0.00032, -0.00032, 0.00030, -0.00030, 0.00028,
130 -0.00029, 0.00029, -0.00029, 0.0, 0.0,
131 0.0, 0.0, 0.0, 0.0, };
134 constexpr std::array<Numeric, nlines_mpm2020> dv1 =
135 {-0.000039, 0.0009, -0.0012, 0.0016, -0.0027,
136 0.0029, 0.0006, -0.0015, 0.0010, -0.0014,
137 -0.0013, 0.0013, 0.0004, -0.0005, 0.0010,
138 -0.0010, 0.0010, -0.0011, 0.0008, -0.0009,
139 0.0003, -0.0003, 0.00009, -0.00009, 0.00017,
140 -0.00016, 0.00024, -0.00023, 0.00024, -0.00024,
141 0.00024, -0.00020, 0.00017, -0.00016, 0.00013,
142 -0.00012, 0.00005, -0.00004, 0.0, 0.0,
143 0.0, 0.0, 0.0, 0.0, };
204 constexpr std::array<Index, nlines_mpm2020> Np = {
205 1, 1, 3, 3, 5, 5, 7, 7, 9, 9,
206 11, 11, 13, 13, 15, 15, 17, 17,
207 19, 19, 21, 21, 23, 23, 25, 25,
208 27, 27, 29, 29, 31, 31, 33, 33,
209 35, 35, 37, 37, 1, 1, 1, 3, 3, 3};
212 constexpr std::array<Index, nlines_mpm2020> Npp = {
213 1, 1, 3, 3, 5, 5, 7, 7, 9, 9,
214 11, 11, 13, 13, 15, 15, 17, 17,
215 19, 19, 21, 21, 23, 23, 25, 25,
216 27, 27, 29, 29, 31, 31, 33, 33,
217 35, 35, 37, 37, 3, 3, 3, 5, 5, 5};
220 constexpr std::array<Index, nlines_mpm2020> Jp = {
221 1, 1, 3, 3, 5, 5, 7, 7, 9, 9,
222 11, 11, 13, 13, 15, 15, 17, 17,
223 19, 19, 21, 21, 23, 23, 25, 25,
224 27, 27, 29, 29, 31, 31, 33, 33,
225 35, 35, 37, 37, 1, 2, 2, 3, 4, 4};
228 constexpr std::array<Index, nlines_mpm2020> Jpp = {
229 0, 2, 2, 4, 4, 6, 6, 8, 8, 10,
230 10, 12, 12, 14, 14, 16, 16, 18,
231 18, 20, 20, 22, 22, 24, 24, 26,
232 26, 28, 28, 30, 30, 32, 32, 34,
233 34, 36, 36, 38, 2, 2, 3, 4, 4, 5};
292 using Constant::sqrt_pi;
293 using Constant::inv_sqrt_pi;
298 constexpr std::array<Numeric, nlines_mpm2020> f0 = {
299 1.18750334E+11, 5.6264774E+10, 6.2486253E+10, 5.8446588E+10, 6.0306056E+10,
300 5.9590983E+10, 5.9164204E+10, 6.0434778E+10, 5.8323877E+10, 6.1150562E+10,
301 5.7612486E+10, 6.1800158E+10, 5.6968211E+10, 6.2411220E+10, 5.6363399E+10,
302 6.2997984E+10, 5.5783815E+10, 6.3568526E+10, 5.5221384E+10, 6.4127775E+10,
303 5.4671180E+10, 6.4678910E+10, 5.4130025E+10, 6.5224078E+10, 5.3595775E+10,
304 6.5764779E+10, 5.3066934E+10, 6.6302096E+10, 5.2542418E+10, 6.6836834E+10,
305 5.2021429E+10, 6.7369601E+10, 5.1503360E+10, 6.7900868E+10, 5.0987745E+10,
306 6.8431006E+10, 5.0474214E+10, 6.8960312E+10, 3.68498246E+11, 4.24763020E+11,
307 4.87249273E+11, 7.15392902E+11, 7.73839490E+11, 8.34145546E+11, };
310 constexpr std::array<Numeric, nlines_mpm2020> intens = {
311 1.591521878E-21, 1.941172240E-21, 4.834543970E-21, 4.959264029E-21, 7.010386457E-21,
312 7.051673348E-21, 8.085012578E-21, 8.108262250E-21, 8.145673278E-21, 8.149757320E-21,
313 7.396406085E-21, 7.401923754E-21, 6.162286575E-21, 6.168475265E-21, 4.749226167E-21,
314 4.754435107E-21, 3.405982896E-21, 3.408455562E-21, 2.282498656E-21, 2.283934341E-21,
315 1.432692459E-21, 1.433513473E-21, 8.439995690E-22, 8.443521837E-22, 4.672706507E-22,
316 4.676049313E-22, 2.435008301E-22, 2.437304596E-22, 1.195038747E-22, 1.196873412E-22,
317 5.532759045E-23, 5.537261239E-23, 2.416832398E-23, 2.418989865E-23, 9.969285671E-24,
318 9.977543709E-24, 3.882541154E-24, 3.888101811E-24, 3.676253816E-23, 3.017524005E-22,
319 9.792882227E-23, 2.756166168E-23, 1.486462215E-22, 4.411918954E-23, };
322 constexpr std::array<Numeric, nlines_mpm2020>
a2 = {
323 0.01, 0.014, 0.083, 0.083, 0.207, 0.207, 0.387, 0.386,
324 0.621, 0.621, 0.910, 0.910, 1.255, 1.255, 1.654, 1.654,
325 2.109, 2.108, 2.618, 2.617, 3.182, 3.181, 3.800, 3.800,
326 4.474, 4.473, 5.201, 5.200, 5.983, 5.982, 6.819, 6.818,
327 7.709, 7.708, 8.653, 8.652, 9.651, 9.650, 0.048, 0.044,
328 0.049, 0.145, 0.141, 0.145};
338 const std::array<QuantumIdentifier, nlines_mpm2020> qids =
345 #pragma omp parallel for if (not arts_omp_in_parallel() and p.nelem() >= arts_omp_get_max_threads()) schedule(guided)
347 const Numeric theta = t0 / t[ip];
348 const Numeric theta_m1 = theta - 1;
353 const Numeric invGD = 1 / (GD_div_F0 * f0[i]);
355 const Numeric ST = theta_3 * p[ip] * intens[i] * std::exp(-
a2[i] * theta_m1);
362 const Numeric dST_dT = do_temp_deriv ? (
a2[i]*t0 - 3*t[ip]) /
pow2(t[ip]) * ST : 0;
379 xsec(j, ip) += ST *
pow2(f[j]) *
abs.real();
381 if (jacs_pos.
nelem()) {
386 const auto& deriv = jacs[jacs_pos[iq]];
388 if (deriv == JacPropMatType::Temperature) {
389 const Complex dFv =
dw * (invGD *
Complex(dDV_dT, dG0_dT) - dinvGD_dT) + Fv * dinvGD_dT;
391 dxsec[iq](j, ip) +=
pow2(f[j]) * (ST * std::real(
399 dxsec[iq](j, ip) += ST * (
pow2(f[j]) * std::real(
403 Complex(1 + G, -Y) * dFlm) + 2 *
abs.real() * f[j]);
404 }
else if (deriv.QuantumIdentity().In(qids[i])) {
405 if (deriv == JacPropMatType::LineShapeG0X0) {
406 dxsec[iq](j, ip) += ST *
pow2(f[j]) * std::real(
412 }
else if (deriv == JacPropMatType::LineShapeG0X1) {
413 dxsec[iq](j, ip) += ST *
pow2(f[j]) * std::real(
419 }
else if (deriv == JacPropMatType::LineShapeDVX0) {
422 dxsec[iq](j, ip) += ST *
pow2(f[j]) * std::real(
428 }
else if (deriv == JacPropMatType::LineShapeDVX1) {
431 dxsec[iq](j, ip) += ST *
pow2(f[j]) * std::real(
437 }
else if (deriv == JacPropMatType::LineShapeDVX2) {
440 dxsec[iq](j, ip) += ST *
pow2(f[j]) * std::real(
446 }
else if (deriv == JacPropMatType::LineShapeGX0) {
447 dxsec[iq](j, ip) += ST *
pow2(f[j]) * std::real(
453 }
else if (deriv == JacPropMatType::LineShapeYX0) {
454 dxsec[iq](j, ip) += ST *
pow2(f[j]) * std::real(
460 }
else if (deriv == JacPropMatType::LineShapeGX1) {
461 dxsec[iq](j, ip) += ST *
pow2(f[j]) * std::real(
467 }
else if (deriv == JacPropMatType::LineShapeYX1) {
468 dxsec[iq](j, ip) += ST *
pow2(f[j]) * std::real(
474 }
else if (deriv == JacPropMatType::LineShapeGX2) {
475 dxsec[iq](j, ip) += ST *
pow2(f[j]) * std::real(
481 }
else if (deriv == JacPropMatType::LineShapeYX2) {
482 dxsec[iq](j, ip) += ST *
pow2(f[j]) * std::real(
488 }
else if (deriv == JacPropMatType::LineCenter) {
489 const Complex dFv = Fv / f0[i] -
dw * invGD +
dw * z / f0[i];
491 dxsec[iq](j, ip) += ST *
pow2(f[j]) * std::real(
496 }
else if (deriv == JacPropMatType::LineStrength) {
497 dxsec[iq](j, ip) += theta_3 * p[ip] * std::exp(-
a2[i] * theta_m1) *
pow2(f[j]) *
abs.real();
498 }
else if (deriv == JacPropMatType::LineSpecialParameter1) {
499 dxsec[iq](j, ip) += -theta_m1 * ST *
pow2(f[j]) *
abs.real();
511 const Eigen::Ref<Eigen::ArrayXd> rho,
512 const Eigen::Ref<Eigen::ArrayXd> d)
522 for (
Index j=0; j<i; j++) {
524 W(i, j) = W(j, i) * (rho[i] / rho[j]);
531 auto norm = - std::imag(d[i] * W(i, i)) / std::imag(W.row(i) * d.abs().matrix() -
std::abs(d[i]) * W(i, i));
550 constexpr
auto T0 = 300;
553 constexpr std::array<Numeric, nlines_mpm2020> f0 = {
554 1.18750334E+11, 5.6264774E+10, 6.2486253E+10, 5.8446588E+10, 6.0306056E+10,
555 5.9590983E+10, 5.9164204E+10, 6.0434778E+10, 5.8323877E+10, 6.1150562E+10,
556 5.7612486E+10, 6.1800158E+10, 5.6968211E+10, 6.2411220E+10, 5.6363399E+10,
557 6.2997984E+10, 5.5783815E+10, 6.3568526E+10, 5.5221384E+10, 6.4127775E+10,
558 5.4671180E+10, 6.4678910E+10, 5.4130025E+10, 6.5224078E+10, 5.3595775E+10,
559 6.5764779E+10, 5.3066934E+10, 6.6302096E+10, 5.2542418E+10, 6.6836834E+10,
560 5.2021429E+10, 6.7369601E+10, 5.1503360E+10, 6.7900868E+10, 5.0987745E+10,
561 6.8431006E+10, 5.0474214E+10, 6.8960312E+10, 3.68498246E+11, 4.24763020E+11,
562 4.87249273E+11, 7.15392902E+11, 7.73839490E+11, 8.34145546E+11, };
565 constexpr std::array<Numeric, nlines_mpm2020> intens = {
566 1.591521878E-21, 1.941172240E-21, 4.834543970E-21, 4.959264029E-21, 7.010386457E-21,
567 7.051673348E-21, 8.085012578E-21, 8.108262250E-21, 8.145673278E-21, 8.149757320E-21,
568 7.396406085E-21, 7.401923754E-21, 6.162286575E-21, 6.168475265E-21, 4.749226167E-21,
569 4.754435107E-21, 3.405982896E-21, 3.408455562E-21, 2.282498656E-21, 2.283934341E-21,
570 1.432692459E-21, 1.433513473E-21, 8.439995690E-22, 8.443521837E-22, 4.672706507E-22,
571 4.676049313E-22, 2.435008301E-22, 2.437304596E-22, 1.195038747E-22, 1.196873412E-22,
572 5.532759045E-23, 5.537261239E-23, 2.416832398E-23, 2.418989865E-23, 9.969285671E-24,
573 9.977543709E-24, 3.882541154E-24, 3.888101811E-24, 3.676253816E-23, 3.017524005E-22,
574 9.792882227E-23, 2.756166168E-23, 1.486462215E-22, 4.411918954E-23, };
577 constexpr std::array<Numeric, nlines_mpm2020>
a2 = {
578 0.01, 0.014, 0.083, 0.083, 0.207, 0.207, 0.387, 0.386,
579 0.621, 0.621, 0.910, 0.910, 1.255, 1.255, 1.654, 1.654,
580 2.109, 2.108, 2.618, 2.617, 3.182, 3.181, 3.800, 3.800,
581 4.474, 4.473, 5.201, 5.200, 5.983, 5.982, 6.819, 6.818,
582 7.709, 7.708, 8.653, 8.652, 9.651, 9.650, 0.048, 0.044,
583 0.049, 0.145, 0.141, 0.145};
586 Eigen::Array<Numeric, necs2020, 1> d;
587 Eigen::Array<Numeric, necs2020, 1> rho;
588 Eigen::Matrix<Complex, necs2020, necs2020> W;
602 W(i, j) = 1i *
o2_ecs_wigner_symbol_tran(Ji, Jf, Ni, Nf, 1_rat, 1_rat, Ji_p, Jf_p, Ni_p, Nf_p, 1_rat, T);
610 o2_makarov2013_reduced_dipole (qns.UpperQuantumNumber(QuantumNumberType::J),
611 qns.LowerQuantumNumber(QuantumNumberType::J),
612 qns.UpperQuantumNumber(QuantumNumberType::N));});
641 boltzman_factor(T, o2_ecs_erot_jn_same(qns.LowerQuantumNumber(QuantumNumberType::J)));});
670 const Numeric theta_m1 = theta - 1;
673 const Numeric ST = pi * theta_3 * P * intens[i] * std::exp(-
a2[i] * theta_m1);
675 d[i] = sgn * f0[i] *
std::sqrt(ST / rho[i]);
688 const Eigen::ComplexEigenSolver<Eigen::Matrix<Complex, necs2020, necs2020>> eV(W,
true);
689 const auto& D = eV.eigenvalues();
690 const auto& V = eV.eigenvectors();
691 const auto& Vinv = W = eV.eigenvectors().inverse();
693 Eigen::Array<Complex, necs2020, 1> B; B *= 0;
697 B[m] += rho[i] * d[i] * d[j] * V(j, m) * Vinv(m, i);
710 I[iv] += (Constant::inv_sqrt_pi / (GD0 * D[i].real())) *
Faddeeva::w((f[iv] -
std::conj(D[i])) / (GD0 * D[i].real())) * B[i];