30 assert(abs(degSpin - round(degSpin)) < 1.e-6);
31 int spinDegeneracy = round(degSpin);
32 std::vector<double> ret;
33 for(
int isz = 0; isz < spinDegeneracy; ++isz) {
34 ret.push_back(-(spinDegeneracy - 1.)/2. + isz);
50 for(
double sz : spins) {
53 double e0 = sqrt(m*m + Qmod*extraConfig.
MagneticField.
B*(2.*l + 1. - 2.*sz));
81 for(
double sz : spins) {
84 double e0 = sqrt(m*m + Qmod*extraConfig.
MagneticField.
B*(2.*l + 1. - 2.*sz));
120 for(
double sz : spins) {
123 double e0 = sqrt(m*m + Qmod*extraConfig.
MagneticField.
B*(2.*l + 1. - 2.*sz));
158 bool signchange =
true;
161 else if (statistics == -1)
175 for(
double sz : spins) {
178 double e0 = sqrt(m*m + Qmod*extraConfig.
MagneticField.
B*(2.*l + 1. - 2.*sz));
181 double tfug = exp((mu - e0) / T);
182 double EoverT = e0 / T;
185 for (
int i = 1; i <= order; ++i) {
188 if (signchange) sign = -sign;
196 double tfug = exp((mu - m) / T);
197 double moverT = m / T;
201 for (
int i = 1; i <= order; ++i) {
204 if (signchange) sign = -sign;
213 bool signchange =
true;
216 else if (statistics == -1)
230 for(
double sz : spins) {
233 double e0 = sqrt(m*m + Qmod*extraConfig.
MagneticField.
B*(2.*l + 1. - 2.*sz));
236 double tfug = exp((mu - e0) / T);
237 double EoverT = e0 / T;
240 for (
int i = 1; i <= order; ++i) {
241 ret += e0 * sign *
xMath::BesselKexp(1, i*EoverT) * cfug * T /
static_cast<double>(i);
243 if (signchange) sign = -sign;
251 double tfug = exp((mu - m) / T);
253 double moverT = m / T;
256 for (
int i = 1; i <= order; ++i) {
257 ret += sign *
xMath::BesselKexp(2, i*moverT) * cfug /
static_cast<double>(i) /
static_cast<double>(i);
259 if (signchange) sign = -sign;
268 bool signchange =
true;
271 else if (statistics == -1)
285 for(
double sz : spins) {
288 double e0 = sqrt(m*m + Qmod*extraConfig.
MagneticField.
B*(2.*l + 1. - 2.*sz));
291 double tfug = exp((mu - e0) / T);
292 double EoverT = e0 / T;
295 for (
int i = 1; i <= order; ++i) {
296 ret += sign * e0 * T /
static_cast<double>(i) *
xMath::BesselKexp(1, i*EoverT) * cfug;
299 if (signchange) sign = -sign;
308 double tfug = exp((mu - m) / T);
310 double moverT = m / T;
313 for (
int i = 1; i <= order; ++i) {
316 if (signchange) sign = -sign;
338 bool signchange =
true;
341 else if (statistics == -1)
355 for(
double sz : spins) {
358 double e0 = sqrt(m*m + Qmod*extraConfig.
MagneticField.
B*(2.*l + 1. - 2.*sz));
361 double tfug = exp((mu - e0) / T);
362 double EoverT = e0 / T;
365 for (
int i = 1; i <= order; ++i) {
368 if (signchange) sign = -sign;
376 double tfug = exp((mu - m) / T);
378 double moverT = m / T;
381 for (
int i = 1; i <= order; ++i) {
384 if (signchange) sign = -sign;
393 bool signchange =
true;
396 else if (statistics == -1)
409 for(
double sz : spins) {
412 double e0 = sqrt(m*m + Qmod*extraConfig.
MagneticField.
B*(2.*l + 1. - 2.*sz));
415 double tfug = exp((mu - e0) / T);
416 double EoverT = e0 / T;
419 for (
int i = 1; i <= order; ++i) {
420 ret += e0 * sign *
xMath::BesselKexp(1, i*EoverT) * cfug * pow(
static_cast<double>(i), N);
422 if (signchange) sign = -sign;
430 double tfug = exp((mu - m) / T);
432 double moverT = m / T;
435 for (
int i = 1; i <= order; ++i) {
436 ret += sign *
xMath::BesselKexp(2, i*moverT) * cfug * pow(
static_cast<double>(i), N - 1);
438 if (signchange) sign = -sign;
470 if (statistics == 1 && T == 0.)
return FermiZeroTDensity(mu, m, deg, extraConfig);
472 if (statistics == -1 && mu > m) {
473 std::cerr <<
"**WARNING** QuantumNumericalIntegrationDensity: Bose-Einstein condensation, mass = " << m <<
", mu = " << mu << std::endl;
477 if (statistics == -1 && T == 0.)
return 0.;
487 for(
double sz : spins) {
492 double moverT = m / T;
493 double muoverT = mu / T;
495 for (
int i = 0; i < 32; i++) {
497 double EoverT = sqrt(tx*tx + moverT*moverT + Qmod*BoverT2*(2.*l + 1. - 2.*sz));
498 ret +=
lagw32[i] * T / (exp(EoverT - muoverT) + statistics);
507 double moverT = m / T;
508 double muoverT = mu / T;
509 for (
int i = 0; i < 32; i++) {
511 ret +=
lagw32[i] * T * tx * T * tx * T / (exp(sqrt(tx*tx + moverT * moverT) - muoverT) + statistics);
525 if (statistics == -1 && mu > m) {
526 std::cerr <<
"**WARNING** QuantumNumericalIntegrationPressure: Bose-Einstein condensation" << std::endl;
530 if (statistics == -1 && T == 0.)
return 0.;
540 for(
double sz : spins) {
545 double moverT = m / T;
546 double muoverT = mu / T;
548 for (
int i = 0; i < 32; i++) {
550 double x2 = tx * T * tx * T;
551 double EoverT = sqrt(tx*tx + moverT*moverT + Qmod*BoverT2*(2.*l + 1. - 2.*sz));
552 ret +=
lagw32[i] * T * x2 / EoverT / T / (exp(EoverT - muoverT) + statistics);
561 double moverT = m / T;
562 double muoverT = mu / T;
563 for (
int i = 0; i < 32; i++) {
565 double x2 = tx * T * tx * T;
566 double E = sqrt(tx*tx + moverT * moverT);
567 ret +=
lagw32[i] * T * x2 * x2 / E / T / (exp(E - muoverT) + statistics);
581 if (statistics == -1 && mu > m) {
582 std::cerr <<
"**WARNING** QuantumNumericalIntegrationEnergyDensity: Bose-Einstein condensation" << std::endl;
586 if (statistics == -1 && T == 0.)
return 0.;
596 for(
double sz : spins) {
601 double moverT = m / T;
602 double muoverT = mu / T;
604 for (
int i = 0; i < 32; i++) {
606 double EoverT = sqrt(tx*tx + moverT*moverT + Qmod*BoverT2*(2.*l + 1. - 2.*sz));
607 ret +=
lagw32[i] * T * EoverT * T / (exp(EoverT - muoverT) + statistics);
617 double moverT = m / T;
618 double muoverT = mu / T;
619 for (
int i = 0; i < 32; i++) {
621 ret +=
lagw32[i] * T * tx * T * tx * T * sqrt(tx*tx + moverT * moverT) * T / (exp(sqrt(tx*tx + moverT * moverT) - muoverT) + statistics);
651 if (statistics == -1 && mu > m) {
652 std::cerr <<
"**WARNING** QuantumNumericalIntegrationScalarDensity: Bose-Einstein condensation" << std::endl;
656 if (statistics == -1 && T == 0.)
return 0.;
666 for(
double sz : spins) {
671 double moverT = m / T;
672 double muoverT = mu / T;
674 for (
int i = 0; i < 32; i++) {
676 double EoverT = sqrt(tx*tx + moverT*moverT + Qmod*BoverT2*(2.*l + 1. - 2.*sz));
677 ret +=
lagw32[i] * T * moverT / EoverT / (exp(EoverT - muoverT) + statistics);
686 double moverT = m / T;
687 double muoverT = mu / T;
688 for (
int i = 0; i < 32; i++) {
690 ret +=
lagw32[i] * T * tx * T * tx * T * moverT / sqrt(tx*tx + moverT * moverT) / (exp(sqrt(tx*tx + moverT * moverT) - muoverT) + statistics);
701 if (statistics == 0)
return BoltzmannTdndmu(1, T, mu, m, deg, extraConfig);
702 if (statistics == 1 && T == 0.)
return 0.;
704 if (statistics == -1 && mu > m) {
705 std::cerr <<
"**WARNING** QuantumNumericalIntegrationT1dn1dmu1: Bose-Einstein condensation" << std::endl;
709 if (statistics == -1 && T == 0.)
return 0.;
719 for(
double sz : spins) {
724 double moverT = m / T;
725 double muoverT = mu / T;
727 for (
int i = 0; i < 32; i++) {
729 double EoverT = sqrt(tx*tx + moverT*moverT + Qmod*BoverT2*(2.*l + 1. - 2.*sz));
730 double Eexp = exp(EoverT - muoverT);
731 ret +=
lagw32[i] * T * 1. / (1. + statistics / Eexp) / (Eexp + statistics);
740 double moverT = m / T;
741 double muoverT = mu / T;
742 for (
int i = 0; i < 32; i++) {
744 double Eexp = exp(sqrt(tx*tx + moverT * moverT) - muoverT);
745 ret +=
lagw32[i] * T * tx * T * tx * T * 1. / (1. + statistics / Eexp) / (Eexp + statistics);
756 if (statistics == 0)
return BoltzmannTdndmu(2, T, mu, m, deg, extraConfig);
757 if (statistics == 1 && T == 0.)
return 0.;
759 if (statistics == -1 && mu > m) {
760 std::cerr <<
"**WARNING** QuantumNumericalIntegrationT2dn2dmu2: Bose-Einstein condensation" << std::endl;
764 if (statistics == -1 && T == 0.)
return 0.;
774 for(
double sz : spins) {
779 double moverT = m / T;
780 double muoverT = mu / T;
782 for (
int i = 0; i < 32; i++) {
784 double EoverT = sqrt(tx*tx + moverT*moverT + Qmod*BoverT2*(2.*l + 1. - 2.*sz));
785 double Eexp = exp(EoverT - muoverT);
786 ret +=
lagw32[i] * T * (1. - statistics / Eexp) / (1. + statistics / Eexp) / (1. + statistics / Eexp) / (Eexp + statistics);
795 double moverT = m / T;
796 double muoverT = mu / T;
797 for (
int i = 0; i < 32; i++) {
799 double Eexp = exp(sqrt(tx*tx + moverT * moverT) - muoverT);
801 ret +=
lagw32[i] * T * tx * T * tx * T * (1. - statistics / Eexp) / (1. + statistics / Eexp) / (1. + statistics / Eexp) / (Eexp + statistics);
812 if (statistics == 0)
return BoltzmannTdndmu(3, T, mu, m, deg, extraConfig);
813 if (statistics == 1 && T == 0.)
return 0.;
815 if (statistics == -1 && mu > m) {
816 std::cerr <<
"**WARNING** QuantumNumericalIntegrationT3dn3dmu3: Bose-Einstein condensation" << std::endl;
820 if (statistics == -1 && T == 0.)
return 0.;
831 for(
double sz : spins) {
836 double moverT = m / T;
837 double muoverT = mu / T;
839 for (
int i = 0; i < 32; i++) {
841 double EoverT = sqrt(tx*tx + moverT*moverT + Qmod*BoverT2*(2.*l + 1. - 2.*sz));
842 double Eexp = exp(EoverT - muoverT);
843 ret +=
lagw32[i] * T * (1. - 4.*statistics / Eexp + statistics * statistics / Eexp / Eexp) / (1. + statistics / Eexp) / (1. + statistics / Eexp) / (1. + statistics / Eexp) / (Eexp + statistics);
852 double moverT = m / T;
853 double muoverT = mu / T;
854 for (
int i = 0; i < 32; i++) {
856 double Eexp = exp(sqrt(tx*tx + moverT * moverT) - muoverT);
858 ret +=
lagw32[i] * T * tx * T * tx * T * (1. - 4.*statistics / Eexp + statistics * statistics / Eexp / Eexp) / (1. + statistics / Eexp) / (1. + statistics / Eexp) / (1. + statistics / Eexp) / (Eexp + statistics);
872 std::cerr <<
"**WARNING** QuantumNumericalIntegrationTdndmu: N must be between 0 and 3!" << std::endl;
897 if (statistics == 1 && T == 0.0)
899 if (statistics == -1 && T == 0.0) {
901 std::cerr <<
"**WARNING** QuantumNumericalIntegrationChiNDimensionfull: Bose-Einstein condensation" << std::endl;
914 double tmpsqrt = sqrt(1. + x2);
915 return (1. + x2 / 2.) * tmpsqrt - x2 * x2 / 2. * log((1. + tmpsqrt) / x);
923 double tmpsqrt = sqrt(1. + x2);
924 return 2. * tmpsqrt + 2. * x2 * log((1. + tmpsqrt) / x);
935 double pf = sqrt(mu*mu - m * m);
937 for (
int i = 0; i < 32; i++) {
941 double moverT = m / T;
942 double muoverT = mu / T;
943 for (
int i = 0; i < 32; i++) {
944 double tx = pf / T +
lagx32[i];
945 ret1 +=
lagw32[i] * T * tx * T * tx * T / (exp(sqrt(tx*tx + moverT * moverT) - muoverT) + 1.);
966 double pf = sqrt(mu*mu - m * m);
968 for (
int i = 0; i < 32; i++) {
971 ret1 += -
legw32[i] * pf * x2 * x2 / E / (exp(-(E - mu) / T) + 1.);
974 double moverT = m / T;
975 double muoverT = mu / T;
976 for (
int i = 0; i < 32; i++) {
977 double tx = pf / T +
lagx32[i];
978 double x2 = tx * T * tx * T;
979 double E = sqrt(tx*tx + moverT * moverT);
980 ret1 +=
lagw32[i] * T * x2 * x2 / E / T / (exp(E - muoverT) + 1.);
986 ret2 += mu * pf * pf * pf;
987 ret2 += -3. / 4. * pf * pf * pf * pf *
psi(m / pf);
1001 double pf = sqrt(mu*mu - m * m);
1003 for (
int i = 0; i < 32; i++) {
1007 double moverT = m / T;
1008 double muoverT = mu / T;
1009 for (
int i = 0; i < 32; i++) {
1010 double tx = pf / T +
lagx32[i];
1011 ret1 +=
lagw32[i] * T * tx * T * tx * T * sqrt(tx*tx + moverT * moverT) * T / (exp(sqrt(tx*tx + moverT * moverT) - muoverT) + 1.);
1043 double pf = sqrt(mu*mu - m * m);
1045 for (
int i = 0; i < 32; i++) {
1049 double moverT = m / T;
1050 double muoverT = mu / T;
1051 for (
int i = 0; i < 32; i++) {
1052 double tx = pf / T +
lagx32[i];
1053 ret1 +=
lagw32[i] * T * tx * T * tx * T * moverT / sqrt(tx*tx + moverT * moverT) / (exp(sqrt(tx*tx + moverT * moverT) - muoverT) + 1.);
1072 double pf = sqrt(mu*mu - m * m);
1074 for (
int i = 0; i < 32; i++) {
1075 double Eexp = exp(-(sqrt(
legx32[i] *
legx32[i] * pf*pf + m * m) - mu) / T);
1076 ret1 +=
legw32[i] * pf *
legx32[i] * pf *
legx32[i] * pf * 1. / (1. + 1./Eexp) / (Eexp + 1.);
1080 double moverT = m / T;
1081 double muoverT = mu / T;
1082 for (
int i = 0; i < 32; i++) {
1083 double tx = pf / T +
lagx32[i];
1084 double Eexp = exp(sqrt(tx*tx + moverT * moverT) - muoverT);
1085 ret1 +=
lagw32[i] * T * tx * T * tx * T * 1. / (1. + 1. / Eexp) / (Eexp + 1.);
1104 double pf = sqrt(mu*mu - m * m);
1106 for (
int i = 0; i < 32; i++) {
1107 double Eexp = exp(-(sqrt(
legx32[i] *
legx32[i] * pf*pf + m * m) - mu) / T);
1108 ret1 += -
legw32[i] * pf *
legx32[i] * pf *
legx32[i] * pf * (1. - 1. / Eexp) / (1. + 1. / Eexp) / (1. + 1. / Eexp) / (Eexp + 1.);
1112 double moverT = m / T;
1113 double muoverT = mu / T;
1114 for (
int i = 0; i < 32; i++) {
1115 double tx = pf / T +
lagx32[i];
1116 double Eexp = exp(sqrt(tx*tx + moverT * moverT) - muoverT);
1117 ret1 +=
lagw32[i] * T * tx * T * tx * T * (1. - 1. / Eexp) / (1. + 1. / Eexp) / (1. + 1. / Eexp) / (Eexp + 1.);
1134 double pf = sqrt(mu*mu - m * m);
1136 for (
int i = 0; i < 32; i++) {
1137 double Eexp = exp(-(sqrt(
legx32[i] *
legx32[i] * pf*pf + m * m) - mu) / T);
1138 ret1 +=
legw32[i] * pf *
legx32[i] * pf *
legx32[i] * pf * (1. - 4./Eexp + 1./Eexp / Eexp) / (1. + 1. / Eexp) / (1. + 1. / Eexp) / (1. + 1. / Eexp) / (Eexp + 1.);
1142 double moverT = m / T;
1143 double muoverT = mu / T;
1144 for (
int i = 0; i < 32; i++) {
1145 double tx = pf / T +
lagx32[i];
1146 double Eexp = exp(sqrt(tx*tx + moverT * moverT) - muoverT);
1147 ret1 +=
lagw32[i] * T * tx * T * tx * T * (1. - 4. / Eexp + 1. / Eexp / Eexp) / (1. + 1. / Eexp) / (1. + 1. / Eexp) / (1. + 1. / Eexp) / (Eexp + 1.);
1160 throw std::runtime_error(
"**ERROR** FermiNumericalIntegrationLargeMuTdndmu: N < 0 or N > 3");
1191 double pf = sqrt(mu * mu - m * m);
1201 double pf = sqrt(mu * mu - m * m);
1208 mu * pf * (2. * mu * mu - 5. * m2)
1209 - 3. * m2 * m2 * log(m / (mu + pf))
1219 double pf = sqrt(mu * mu - m * m);
1226 mu * pf * (2. * mu * mu - m2)
1227 + m2 * m2 * log(m / (mu + pf))
1243 double pf = sqrt(mu * mu - m * m);
1251 + m2 * log(m / (mu + pf))
1261 double pf = sqrt(mu * mu - m * m);
1271 double pf = sqrt(mu * mu - m * m);
1281 double pf = sqrt(mu * mu - m * m);
1289 throw std::runtime_error(
"**ERROR** FermiNumericalIntegrationLargeMuTdndmu: N < 0 or N > 3");
1306 throw std::runtime_error(
"**ERROR** FermiZeroTChiN: This quantity is infinite by definition at T = 0!");
1319 if (statistics == 0) {
1330 if (quantity ==
chi2)
1332 if (quantity ==
chi3)
1334 if (quantity ==
chi4)
1343 if (quantity ==
dndT)
1347 if (quantity ==
dedT)
1349 if (quantity ==
dedmu)
1366 if (quantity ==
chi2)
1368 if (quantity ==
chi3)
1370 if (quantity ==
chi4)
1379 if (quantity ==
dndT)
1383 if (quantity ==
dedT)
1385 if (quantity ==
dedmu)
1401 if (quantity ==
chi2)
1403 if (quantity ==
chi3)
1405 if (quantity ==
chi4)
1414 if (quantity ==
dndT)
1418 if (quantity ==
dedT)
1420 if (quantity ==
dedmu)
1426 std::cerr <<
"**WARNING** IdealGasFunctions::IdealGasQuantity: Unknown quantity" << std::endl;
1438 for(
double sz : spins) {
1441 double e0 = sqrt(m*m + Qmod*extraConfig.
MagneticField.
B*(2.*l + 1. - 2.*sz));
1444 ) * exp((mu - e0) / T);
1457 bool signchange =
true;
1458 if (statistics == 1)
1460 else if (statistics == -1)
1474 for(
double sz : spins) {
1477 double e0 = sqrt(m*m + Qmod*extraConfig.
MagneticField.
B*(2.*l + 1. - 2.*sz));
1480 double tfug = exp((mu - e0) / T);
1481 double EoverT = e0 / T;
1484 for (
int i = 1; i <= order; ++i) {
1490 if (signchange) sign = -sign;
1506 if (statistics == -1 && mu > m) {
1507 std::cerr <<
"**WARNING** QuantumNumericalIntegrationScalarDensity: Bose-Einstein condensation" << std::endl;
1511 if (statistics == -1 && T == 0.)
return 0.;
1521 for(
double sz : spins) {
1526 double moverT = m / T;
1527 double muoverT = mu / T;
1529 for (
int i = 0; i < 32; i++) {
1531 double EoverT = sqrt(tx*tx + moverT*moverT + Qmod*BoverT2*(2.*l + 1. - 2.*sz));
1532 ret +=
lagw32[i] * T * (tx * T * tx - Qmod * BoverT2 * T * (l + 0.5 - sz) ) / EoverT / (exp(EoverT - muoverT) + statistics);
1581 * m * (m * (m * m + mu * mu - 4. * mu * T + 6. * T * T) *
xMath::BesselKexp(0, m / T)
1582 + (m * m * (3. * T - 2. * mu) + 2. * T * (mu * mu - 4. * mu * T + 6. * T * T)) *
xMath::BesselKexp(1, m / T))
1612 * exp((mu - m) / T);
1617 bool signchange =
true;
1618 if (statistics == 1)
1620 else if (statistics == -1)
1629 double tfug = exp((mu - m) / T);
1630 double moverT = m / T;
1634 for (
int i = 1; i <= order; ++i) {
1640 if (signchange) sign = -sign;
1648 bool signchange =
true;
1649 if (statistics == 1)
1651 else if (statistics == -1)
1660 double tfug = exp((mu - m) / T);
1661 double moverT = m / T;
1665 for (
int i = 1; i <= order; ++i) {
1666 double k =
static_cast<double>(i);
1668 (m * (m * m + mu * mu - 4. * mu * T / k + 6. * T * T / k / k) *
xMath::BesselKexp(0, i*moverT)
1669 + (m * m * (3. * T / k - 2. * mu) + 2. * T / k * (mu * mu - 4. * mu * T / k + 6. * T / k * T / k)) *
xMath::BesselKexp(1, i*moverT))
1672 if (signchange) sign = -sign;
1680 bool signchange =
true;
1681 if (statistics == 1)
1683 else if (statistics == -1)
1692 double tfug = exp((mu - m) / T);
1693 double moverT = m / T;
1697 for (
int i = 1; i <= order; ++i) {
1698 double k =
static_cast<double>(i);
1704 if (signchange) sign = -sign;
1712 bool signchange =
true;
1713 if (statistics == 1)
1715 else if (statistics == -1)
1724 double tfug = exp((mu - m) / T);
1726 double moverT = m / T;
1729 for (
int i = 1; i <= order; ++i) {
1732 if (signchange) sign = -sign;
1741 bool signchange =
true;
1742 if (statistics == 1)
1744 else if (statistics == -1)
1753 double tfug = exp((mu - m) / T);
1754 double moverT = m / T;
1758 for (
int i = 1; i <= order; ++i) {
1759 double k =
static_cast<double>(i);
1765 if (signchange) sign = -sign;
1773 if (statistics == 0)
return BoltzmanndndT(T, mu, m, deg, extraConfig);
1774 if (statistics == 1 && T == 0.)
return 0.;
1776 if (statistics == -1 && mu > m) {
1777 std::cerr <<
"**WARNING** QuantumNumericalIntegrationDensity: Bose-Einstein condensation, mass = " << m <<
", mu = " << mu << std::endl;
1781 if (statistics == -1 && T == 0.)
return 0.;
1788 double moverT = m / T;
1789 double muoverT = mu / T;
1790 for (
int i = 0; i < 32; i++) {
1792 double EoverT = sqrt(tx*tx + moverT * moverT);
1793 double Eexp = exp(EoverT - muoverT);
1794 double f = 1. / (Eexp + statistics);
1795 ret +=
lagw32[i] * T * tx * T * tx * T * f * (EoverT - muoverT) * (1. - statistics * f);
1805 if (statistics == 0)
return Boltzmannd2ndT2(T, mu, m, deg, extraConfig);
1806 if (statistics == 1 && T == 0.)
return 0.;
1808 if (statistics == -1 && mu > m) {
1809 std::cerr <<
"**WARNING** QuantumNumericalIntegrationDensity: Bose-Einstein condensation, mass = " << m <<
", mu = " << mu << std::endl;
1813 if (statistics == -1 && T == 0.)
return 0.;
1820 double moverT = m / T;
1821 double muoverT = mu / T;
1822 for (
int i = 0; i < 32; i++) {
1824 double EoverT = sqrt(tx*tx + moverT * moverT);
1825 double Eexp = exp(EoverT - muoverT);
1826 double f = 1. / (Eexp + statistics);
1827 ret +=
lagw32[i] * T * tx * T * tx * T * f
1828 * (EoverT - muoverT) * (1. - statistics * f)
1829 * ((EoverT - muoverT) * (1. - 2. * statistics * f) - 2.);
1839 if (statistics == 0)
return BoltzmanndedT(T, mu, m, deg, extraConfig);
1840 if (statistics == 1 && T == 0.)
return 0.;
1842 if (statistics == -1 && mu > m) {
1843 std::cerr <<
"**WARNING** QuantumNumericalIntegrationDensity: Bose-Einstein condensation, mass = " << m <<
", mu = " << mu << std::endl;
1847 if (statistics == -1 && T == 0.)
return 0.;
1851 double moverT = m / T;
1852 double muoverT = mu / T;
1853 for (
int i = 0; i < 32; i++) {
1855 double EoverT = sqrt(tx*tx + moverT * moverT);
1856 double Eexp = exp(EoverT - muoverT);
1857 double f = 1. / (Eexp + statistics);
1858 ret +=
lagw32[i] * T * tx * T * tx * T * EoverT * f * (EoverT - muoverT) * (1. - statistics * f);
1868 if (statistics == 0)
return BoltzmanndedT(T, mu, m, deg, extraConfig);
1869 if (statistics == 1 && T == 0.)
return 0.;
1871 if (statistics == -1 && mu > m) {
1872 std::cerr <<
"**WARNING** QuantumNumericalIntegrationDensity: Bose-Einstein condensation, mass = " << m <<
", mu = " << mu << std::endl;
1876 if (statistics == -1 && T == 0.)
return 0.;
1880 double moverT = m / T;
1881 double muoverT = mu / T;
1882 for (
int i = 0; i < 32; i++) {
1884 double EoverT = sqrt(tx*tx + moverT * moverT);
1885 double Eexp = exp(EoverT - muoverT);
1886 double f = 1. / (Eexp + statistics);
1887 ret +=
lagw32[i] * T * tx * T * tx * T * EoverT * f * (1. - statistics * f);
1898 if (statistics == 1 && T == 0.)
return 0.;
1900 if (statistics == -1 && mu > m) {
1901 std::cerr <<
"**WARNING** QuantumNumericalIntegrationDensity: Bose-Einstein condensation, mass = " << m <<
", mu = " << mu << std::endl;
1905 if (statistics == -1 && T == 0.)
return 0.;
1912 double moverT = m / T;
1913 double muoverT = mu / T;
1914 for (
int i = 0; i < 32; i++) {
1916 double EoverT = sqrt(tx*tx + moverT * moverT);
1917 double Eexp = exp(EoverT - muoverT);
1918 double f = 1. / (Eexp + statistics);
1919 ret +=
lagw32[i] * T * tx * T * tx * T * f
1920 * (1. - statistics * f)
1921 * ((EoverT - muoverT) * (1. - 2. * statistics * f) - 3.);
1936 double pf = sqrt(mu*mu - m * m);
1938 for (
int i = 0; i < 32; i++) {
1939 double en = sqrt(
legx32[i] *
legx32[i] * pf * pf + m * m);
1940 double fbar = 1. / (exp(-(en - mu) / T) + 1.);
1941 ret1 += -
legw32[i] * pf *
legx32[i] * pf *
legx32[i] * pf * (mu - en) / T / T * fbar * (1. - fbar);
1944 double moverT = m / T;
1945 double muoverT = mu / T;
1946 for (
int i = 0; i < 32; i++) {
1947 double tx = pf / T +
lagx32[i];
1948 double EoverT = sqrt(tx*tx + moverT * moverT);
1949 double f = 1. / (exp(EoverT - muoverT) + 1.);
1950 ret1 +=
lagw32[i] * T * tx * T * tx * T * (EoverT - muoverT) / T * f * (1. - f);
1965 double pf = sqrt(mu*mu - m * m);
1967 for (
int i = 0; i < 32; i++) {
1968 double en = sqrt(
legx32[i] *
legx32[i] * pf * pf + m * m);
1969 double fbar = 1. / (exp(-(en - mu) / T) + 1.);
1971 * fbar * (1. - fbar) * ((mu - en) / T * (1.-2.*fbar) - 2.);
1974 double moverT = m / T;
1975 double muoverT = mu / T;
1976 for (
int i = 0; i < 32; i++) {
1977 double tx = pf / T +
lagx32[i];
1978 double EoverT = sqrt(tx*tx + moverT * moverT);
1979 double f = 1. / (exp(EoverT - muoverT) + 1.);
1980 ret1 +=
lagw32[i] * T * tx * T * tx * T * (EoverT - muoverT) / T / T
1981 * f * (1. - f) * ((EoverT - muoverT) * (1. - 2. * f) - 2.);
1996 double pf = sqrt(mu*mu - m * m);
1998 for (
int i = 0; i < 32; i++) {
1999 double en = sqrt(
legx32[i] *
legx32[i] * pf * pf + m * m);
2000 double fbar = 1. / (exp(-(en - mu) / T) + 1.);
2001 ret1 += -
legw32[i] * pf *
legx32[i] * pf *
legx32[i] * pf * en * (mu - en) / T / T * fbar * (1. - fbar);
2004 double moverT = m / T;
2005 double muoverT = mu / T;
2006 for (
int i = 0; i < 32; i++) {
2007 double tx = pf / T +
lagx32[i];
2008 double EoverT = sqrt(tx*tx + moverT * moverT);
2009 double f = 1. / (exp(EoverT - muoverT) + 1.);
2010 ret1 +=
lagw32[i] * T * tx * T * tx * T * EoverT * T * (EoverT - muoverT) / T * f * (1. - f);
2025 double pf = sqrt(mu*mu - m * m);
2027 for (
int i = 0; i < 32; i++) {
2028 double en = sqrt(
legx32[i] *
legx32[i] * pf * pf + m * m);
2029 double Eexp = exp(-(en - mu) / T);
2030 ret1 +=
legw32[i] * pf *
legx32[i] * pf *
legx32[i] * pf * en * 1. / (1. + 1./Eexp) / (Eexp + 1.);
2034 double moverT = m / T;
2035 double muoverT = mu / T;
2036 for (
int i = 0; i < 32; i++) {
2037 double tx = pf / T +
lagx32[i];
2038 double EoverT = sqrt(tx*tx + moverT * moverT);
2039 double Eexp = exp(EoverT - muoverT);
2040 ret1 +=
lagw32[i] * T * tx * T * tx * T * EoverT * T * 1. / (1. + 1. / Eexp) / (Eexp + 1.);
2056 double pf = sqrt(mu*mu - m * m);
2058 for (
int i = 0; i < 32; i++) {
2059 double en = sqrt(
legx32[i] *
legx32[i] * pf * pf + m * m);
2060 double fbar = 1. / (exp(-(en - mu) / T) + 1.);
2062 * fbar * (1. - fbar) * ((mu - en) / T * (1. - 2. * fbar) - 3.);
2065 double moverT = m / T;
2066 double muoverT = mu / T;
2067 for (
int i = 0; i < 32; i++) {
2068 double tx = pf / T +
lagx32[i];
2069 double EoverT = sqrt(tx*tx + moverT * moverT);
2070 double f = 1. / (exp(EoverT - muoverT) + 1.);
2071 ret1 +=
lagw32[i] * T * tx * T * tx * T
2072 * f * (1. - f) * ((EoverT - muoverT) * (1. - 2. * f) - 3.);
Contains implementation of the thermodynamic functions corresponding to an ideal gas of particles in ...
double FermiNumericalIntegrationLargeMuChiNDimensionfull(int N, double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the n-th order dimensionfull susceptibility for a Fermi-Dirac ideal gas at mu > m.
double FermiNumericalIntegrationLargeMudndT(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the derivative of particle number density wrt T at constant mu for a Maxwell-Boltzmann gas.
double FermiNumericalIntegrationLargeMud2ndT2(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the second derivative of particle number density wrt T at constant mu for a Maxwell-Boltzman...
double FermiZeroTChiN(int N, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the n-th order susceptibility for a Fermi-Dirac ideal gas at zero temperature.
double FermiNumericalIntegrationLargeMuScalarDensity(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the scalar density of a Fermi-Dirac ideal gas at mu > m.
double FermiZeroTdn3dmu3(double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
double FermiNumericalIntegrationLargeMuDensity(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the particle number density of a Fermi-Dirac ideal gas at mu > m.
double QuantumClusterExpansionEntropyDensity(int statistics, double T, double mu, double m, double deg, int order=1, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the entropy density of a quantum ideal gas using cluster expansion.
double QuantumClusterExpansiondedT(int statistics, double T, double mu, double m, double deg, int order=1, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the derivative of energy density wrt T at constant mu for a Maxwell-Boltzmann gas.
double FermiNumericalIntegrationLargeMuPressure(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the pressure of a Fermi-Dirac ideal gas at mu > m.
double BoltzmannTdndmu(int N, double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the chemical potential derivative of density for a Maxwell-Boltzmann gas.
double QuantumNumericalIntegrationMagnetization(int statistics, double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the magnetization of a quantum ideal gas using 32-point Gauss-Laguerre quadratures.
double FermiZeroTdn2dmu2(double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
double QuantumClusterExpansionMagnetization(int statistics, double T, double mu, double m, double deg, int order=1, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the thermal part of the magnetization of a Maxwell-Boltzmann gas, m_B = dP/dB.
double QuantumNumericalIntegrationChiN(int N, int statistics, double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the n-th order dimensionless susceptibility for a quantum ideal gas using 32-point Gauss-Lag...
double QuantumClusterExpansionChiNDimensionfull(int N, int statistics, double T, double mu, double m, double deg, int order=1, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the n-th order dimensionfull susceptibility for a quantum ideal gas using cluster expansion.
double FermiNumericalIntegrationLargeMuTdndmu(int N, double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
double psi(double x)
Auxiliary function.
QStatsCalculationType
Identifies whether quantum statistics are to be computed using the cluster expansion or numerical int...
double BoltzmannDensity(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the particle number density of a Maxwell-Boltzmann gas.
double BoltzmanndedT(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the derivative of energy density wrt T at constant mu for a Maxwell-Boltzmann gas.
double QuantumNumericalIntegrationdedmu(int statistics, double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the derivative of energy density wrt mu at constant T for a Maxwell-Boltzmann gas.
double BoltzmannChiNDimensionfull(int N, double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the n-th order dimensionfull susceptibility for a Maxwell-Boltzmann gas.
double FermiZeroTEntropyDensity(double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the entropy density of a Fermi-Dirac ideal gas at zero temperature.
std::vector< double > GetSpins(double degSpin)
Calculate all the spin values -S, S+1,...,S-1,S.
double FermiNumericalIntegrationLargeMudedmu(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the derivative of energy density wrt mu at constant T for a Maxwell-Boltzmann gas.
double FermiNumericalIntegrationLargeMuT3dn3dmu3(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
double IdealGasQuantity(Quantity quantity, QStatsCalculationType calctype, int statistics, double T, double mu, double m, double deg, int order=1, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Calculation of a generic ideal gas function.
double QuantumClusterExpansionScalarDensity(int statistics, double T, double mu, double m, double deg, int order=1, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the scalar density of a quantum ideal gas using cluster expansion.
bool calculationHadBECIssue
Whether \mu > m Bose-Einstein condensation issue was encountered for a Bose gas.
double BoltzmannEntropyDensity(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the entropy density of a Maxwell-Boltzmann gas.
double QuantumNumericalIntegrationdndT(int statistics, double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the derivative of particle number density wrt T at constant mu for a Maxwell-Boltzmann gas.
double QuantumNumericalIntegrationScalarDensity(int statistics, double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the scalar density of a quantum ideal gas using 32-point Gauss-Laguerre quadratures.
double FermiNumericalIntegrationLargeMudchi2dT(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the derivative of the susceptibility wrt T at constant mu for a Maxwell-Boltzmann gas.
double FermiZeroTEnergyDensity(double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the energy density of a Fermi-Dirac ideal gas at zero temperature.
double FermiNumericalIntegrationLargeMuMagnetization(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
double FermiNumericalIntegrationLargeMuChiN(int N, double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the n-th order dimensionless susceptibility for a Fermi-Dirac ideal gas at mu > m.
double Boltzmanndchi2dT(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the derivative of the susceptibility wrt T at constant mu for a Maxwell-Boltzmann gas.
double QuantumNumericalIntegrationT3dn3dmu3(int statistics, double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
double FermiNumericalIntegrationLargeMuT1dn1dmu1(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
double Boltzmanndedmu(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the derivative of energy density wrt mu at constant T for a Maxwell-Boltzmann gas.
double psi2(double x)
Auxiliary function.
double QuantumClusterExpansiondedmu(int statistics, double T, double mu, double m, double deg, int order=1, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the derivative of energy density wrt mu at constant T for a Maxwell-Boltzmann gas.
double FermiNumericalIntegrationLargeMuT2dn2dmu2(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
double FermiZeroTMagnetization(double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
double QuantumNumericalIntegrationdchi2dT(int statistics, double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the derivative of the susceptibility wrt T at constant mu for a Maxwell-Boltzmann gas.
double QuantumNumericalIntegrationTdndmu(int N, int statistics, double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
double FermiZeroTScalarDensity(double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the scalar density of a Fermi-Dirac ideal gas at zero temperature.
double QuantumNumericalIntegrationEnergyDensity(int statistics, double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the energy density of a quantum ideal gas using 32-point Gauss-Laguerre quadratures.
double QuantumClusterExpansionChiN(int N, int statistics, double T, double mu, double m, double deg, int order=1, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the n-th order dimensionless susceptibility for a quantum ideal gas using cluster expansion.
double Boltzmannd2ndT2(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the 2nd derivative of particle number density wrt T at constant mu for a Maxwell-Boltzmann g...
double FermiNumericalIntegrationLargeMudedT(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the derivative of energy density wrt T at constant mu for a Maxwell-Boltzmann gas.
double QuantumClusterExpansiond2ndT2(int statistics, double T, double mu, double m, double deg, int order=1, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the 2nd derivative of particle number density wrt T at constant mu for a Maxwell-Boltzmann g...
double FermiNumericalIntegrationLargeMuEnergyDensity(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the energy density of a Fermi-Dirac ideal gas at mu > m.
double BoltzmannScalarDensity(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the scalar density of a Maxwell-Boltzmann gas.
double QuantumClusterExpansionDensity(int statistics, double T, double mu, double m, double deg, int order=1, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the particle number density of a quantum ideal gas using cluster expansion.
double BoltzmannMagnetization(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the thermal part of the magnetization of a Maxwell-Boltzmann gas, m_B = dP/dB.
double BoltzmannChiN(int N, double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the n-th order dimensionless susceptibility for a Maxwell-Boltzmann gas.
double QuantumNumericalIntegrationT2dn2dmu2(int statistics, double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
double QuantumClusterExpansionEnergyDensity(int statistics, double T, double mu, double m, double deg, int order=1, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the energy density of a quantum ideal gas using cluster expansion.
double FermiZeroTdn1dmu1(double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
double FermiZeroTPressure(double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the pressure of a Fermi-Dirac ideal gas at zero temperature.
double BoltzmannPressure(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the pressure of a Maxwell-Boltzmann gas.
double QuantumClusterExpansionPressure(int statistics, double T, double mu, double m, double deg, int order=1, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the pressure of a quantum ideal gas using cluster expansion.
double QuantumNumericalIntegrationEntropyDensity(int statistics, double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the entropy density of a quantum ideal gas using 32-point Gauss-Laguerre quadratures.
Quantity
Identifies the thermodynamic function.
double QuantumNumericalIntegrationd2ndT2(int statistics, double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the 2nd derivative of particle number density wrt T at constant mu for a Maxwell-Boltzmann g...
double QuantumNumericalIntegrationT1dn1dmu1(int statistics, double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
double BoltzmanndndT(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Temperature derivatives.
double QuantumNumericalIntegrationDensity(int statistics, double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the particle number density of a quantum ideal gas using 32-point Gauss-Laguerre quadratures...
double QuantumClusterExpansiondndT(int statistics, double T, double mu, double m, double deg, int order=1, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the derivative of particle number density wrt T at constant mu for a Maxwell-Boltzmann gas.
double QuantumNumericalIntegrationdedT(int statistics, double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the derivative of energy density wrt T at constant mu for a Maxwell-Boltzmann gas.
double FermiZeroTdndmu(int N, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
double FermiNumericalIntegrationLargeMuEntropyDensity(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the entropy density of a Fermi-Dirac ideal gas at mu > m.
double QuantumClusterExpansiondchi2dT(int statistics, double T, double mu, double m, double deg, int order=1, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the derivative of the susceptibility wrt T at constant mu for a Maxwell-Boltzmann gas.
double QuantumNumericalIntegrationChiNDimensionfull(int N, int statistics, double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the n-th order dimensionfull susceptibility for a quantum ideal gas using 32-point Gauss-Lag...
double QuantumClusterExpansionTdndmu(int N, int statistics, double T, double mu, double m, double deg, int order=1, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the chemical potential derivative of density for a quantum ideal gas using cluster expansion...
double FermiZeroTDensity(double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the particle number density of a Fermi-Dirac ideal gas at zero temperature.
double QuantumNumericalIntegrationPressure(int statistics, double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the pressure of a quantum ideal gas using 32-point Gauss-Laguerre quadratures.
double FermiZeroTChiNDimensionfull(int N, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the n-th order susceptibility scaled by T^n for a Fermi-Dirac ideal gas at zero temperature.
double BoltzmannEnergyDensity(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the energy density of a Maxwell-Boltzmann gas.
const double coefficients_xleg32_zeroone[32]
Nodes of the 32-point Gauss-Legendre quadrature in the interval [0,1].
const double coefficients_wlag32[32]
Weights of the 32-point Gauss-Laguerre quadrature.
const double coefficients_wleg32_zeroone[32]
Weights of the 32-point Gauss-Legendre quadrature in the interval [0,1].
const double coefficients_xlag32[32]
Nodes of the 32-point Gauss-Laguerre quadrature.
constexpr double Pi()
Pi constant.
double BesselKexp(int n, double x)
Modified Bessel function K_n(x), divided by exponential factor.
double BesselK1exp(double x)
Modified Bessel function K_1(x), divided by exponential factor.
constexpr double GeVtoifm3()
A constant to transform GeV into fm .
The main namespace where all classes and functions of the Thermal-FIST library reside.
double B
Magnetic field strength [GeV^2].
int lmax
Number of the Landau levels.
double Q
Particle's electric charge [e].
double degSpin
Particle's spin degeneracy.
Contains some extra mathematical functions used in the code.