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) {
203 ret += sign * cfug /
static_cast<double>(i) /
static_cast<double>(i) /
static_cast<double>(i);
207 if (signchange) sign = -sign;
210 double prefactor = 1.;
222 bool signchange =
true;
225 else if (statistics == -1)
239 for(
double sz : spins) {
242 double e0 = sqrt(m*m + Qmod*extraConfig.
MagneticField.
B*(2.*l + 1. - 2.*sz));
245 double tfug = exp((mu - e0) / T);
246 double EoverT = e0 / T;
249 for (
int i = 1; i <= order; ++i) {
250 ret += e0 * sign *
xMath::BesselKexp(1, i*EoverT) * cfug * T /
static_cast<double>(i);
252 if (signchange) sign = -sign;
260 double tfug = exp((mu - m) / T);
262 double moverT = m / T;
265 for (
int i = 1; i <= order; ++i) {
267 ret += sign * cfug /
static_cast<double>(i) /
static_cast<double>(i) /
static_cast<double>(i) /
static_cast<double>(i);
269 ret += sign *
xMath::BesselKexp(2, i*moverT) * cfug /
static_cast<double>(i) /
static_cast<double>(i);
271 if (signchange) sign = -sign;
274 double prefactor = 1.;
286 bool signchange =
true;
289 else if (statistics == -1)
303 for(
double sz : spins) {
306 double e0 = sqrt(m*m + Qmod*extraConfig.
MagneticField.
B*(2.*l + 1. - 2.*sz));
309 double tfug = exp((mu - e0) / T);
310 double EoverT = e0 / T;
313 for (
int i = 1; i <= order; ++i) {
314 ret += sign * e0 * T /
static_cast<double>(i) *
xMath::BesselKexp(1, i*EoverT) * cfug;
317 if (signchange) sign = -sign;
326 double tfug = exp((mu - m) / T);
328 double moverT = m / T;
331 for (
int i = 1; i <= order; ++i) {
333 ret += sign * cfug /
static_cast<double>(i) /
static_cast<double>(i) /
static_cast<double>(i) /
static_cast<double>(i);
337 if (signchange) sign = -sign;
340 double prefactor = 1.;
365 bool signchange =
true;
368 else if (statistics == -1)
382 for(
double sz : spins) {
385 double e0 = sqrt(m*m + Qmod*extraConfig.
MagneticField.
B*(2.*l + 1. - 2.*sz));
388 double tfug = exp((mu - e0) / T);
389 double EoverT = e0 / T;
392 for (
int i = 1; i <= order; ++i) {
395 if (signchange) sign = -sign;
403 double tfug = exp((mu - m) / T);
405 double moverT = m / T;
412 for (
int i = 1; i <= order; ++i) {
415 if (signchange) sign = -sign;
424 bool signchange =
true;
427 else if (statistics == -1)
440 for(
double sz : spins) {
443 double e0 = sqrt(m*m + Qmod*extraConfig.
MagneticField.
B*(2.*l + 1. - 2.*sz));
446 double tfug = exp((mu - e0) / T);
447 double EoverT = e0 / T;
450 for (
int i = 1; i <= order; ++i) {
451 ret += e0 * sign *
xMath::BesselKexp(1, i*EoverT) * cfug * pow(
static_cast<double>(i), N);
453 if (signchange) sign = -sign;
461 double tfug = exp((mu - m) / T);
463 double moverT = m / T;
466 for (
int i = 1; i <= order; ++i) {
468 ret += sign * cfug * pow(
static_cast<double>(i), N - 3);
470 ret += sign *
xMath::BesselKexp(2, i*moverT) * cfug * pow(
static_cast<double>(i), N - 1);
472 if (signchange) sign = -sign;
475 double prefactor = 1.;
510 if (statistics == 1 && T == 0.)
return FermiZeroTDensity(mu, m, deg, extraConfig);
512 if (statistics == -1 && mu > m) {
513 std::cerr <<
"**WARNING** QuantumNumericalIntegrationDensity: Bose-Einstein condensation, mass = " << m <<
", mu = " << mu << std::endl;
518 if (statistics == -1 && T == 0.)
return 0.;
528 for(
double sz : spins) {
533 double moverT = m / T;
534 double muoverT = mu / T;
536 for (
int i = 0; i < 32; i++) {
538 double EoverT = sqrt(tx*tx + moverT*moverT + Qmod*BoverT2*(2.*l + 1. - 2.*sz));
539 ret +=
lagw32[i] * T / (exp(EoverT - muoverT) + statistics);
548 double moverT = m / T;
549 double muoverT = mu / T;
550 for (
int i = 0; i < 32; i++) {
552 ret +=
lagw32[i] * T * tx * T * tx * T / (exp(sqrt(tx*tx + moverT * moverT) - muoverT) + statistics);
566 if (statistics == -1 && mu > m) {
567 std::cerr <<
"**WARNING** QuantumNumericalIntegrationPressure: Bose-Einstein condensation" << std::endl;
572 if (statistics == -1 && T == 0.)
return 0.;
582 for(
double sz : spins) {
587 double moverT = m / T;
588 double muoverT = mu / T;
590 for (
int i = 0; i < 32; i++) {
592 double x2 = tx * T * tx * T;
593 double EoverT = sqrt(tx*tx + moverT*moverT + Qmod*BoverT2*(2.*l + 1. - 2.*sz));
594 ret +=
lagw32[i] * T * x2 / EoverT / T / (exp(EoverT - muoverT) + statistics);
603 double moverT = m / T;
604 double muoverT = mu / T;
605 for (
int i = 0; i < 32; i++) {
607 double x2 = tx * T * tx * T;
608 double E = sqrt(tx*tx + moverT * moverT);
609 ret +=
lagw32[i] * T * x2 * x2 / E / T / (exp(E - muoverT) + statistics);
623 if (statistics == -1 && mu > m) {
624 std::cerr <<
"**WARNING** QuantumNumericalIntegrationEnergyDensity: Bose-Einstein condensation" << std::endl;
629 if (statistics == -1 && T == 0.)
return 0.;
639 for(
double sz : spins) {
644 double moverT = m / T;
645 double muoverT = mu / T;
647 for (
int i = 0; i < 32; i++) {
649 double EoverT = sqrt(tx*tx + moverT*moverT + Qmod*BoverT2*(2.*l + 1. - 2.*sz));
650 ret +=
lagw32[i] * T * EoverT * T / (exp(EoverT - muoverT) + statistics);
660 double moverT = m / T;
661 double muoverT = mu / T;
662 for (
int i = 0; i < 32; i++) {
664 ret +=
lagw32[i] * T * tx * T * tx * T * sqrt(tx*tx + moverT * moverT) * T / (exp(sqrt(tx*tx + moverT * moverT) - muoverT) + statistics);
678 if (statistics == -1 && mu > m) {
679 std::cerr <<
"**WARNING** QuantumNumericalIntegrationEntropyDensity: Bose-Einstein condensation" << std::endl;
686 if (statistics == 1 && mu > m)
705 if (statistics == -1 && mu > m) {
706 std::cerr <<
"**WARNING** QuantumNumericalIntegrationScalarDensity: Bose-Einstein condensation" << std::endl;
711 if (statistics == -1 && T == 0.)
return 0.;
721 for(
double sz : spins) {
726 double moverT = m / T;
727 double muoverT = mu / T;
729 for (
int i = 0; i < 32; i++) {
731 double EoverT = sqrt(tx*tx + moverT*moverT + Qmod*BoverT2*(2.*l + 1. - 2.*sz));
732 ret +=
lagw32[i] * T * moverT / EoverT / (exp(EoverT - muoverT) + statistics);
741 double moverT = m / T;
742 double muoverT = mu / T;
743 for (
int i = 0; i < 32; i++) {
745 ret +=
lagw32[i] * T * tx * T * tx * T * moverT / sqrt(tx*tx + moverT * moverT) / (exp(sqrt(tx*tx + moverT * moverT) - muoverT) + statistics);
756 if (statistics == 0)
return BoltzmannTdndmu(1, T, mu, m, deg, extraConfig);
757 if (statistics == 1 && T == 0.)
return 0.;
759 if (statistics == -1 && mu > m) {
760 std::cerr <<
"**WARNING** QuantumNumericalIntegrationT1dn1dmu1: Bose-Einstein condensation" << std::endl;
765 if (statistics == -1 && T == 0.)
return 0.;
775 for(
double sz : spins) {
780 double moverT = m / T;
781 double muoverT = mu / T;
783 for (
int i = 0; i < 32; i++) {
785 double EoverT = sqrt(tx*tx + moverT*moverT + Qmod*BoverT2*(2.*l + 1. - 2.*sz));
786 double Eexp = exp(EoverT - muoverT);
787 ret +=
lagw32[i] * T * 1. / (1. + statistics / Eexp) / (Eexp + statistics);
796 double moverT = m / T;
797 double muoverT = mu / T;
798 for (
int i = 0; i < 32; i++) {
800 double Eexp = exp(sqrt(tx*tx + moverT * moverT) - muoverT);
801 ret +=
lagw32[i] * T * tx * T * tx * T * 1. / (1. + statistics / Eexp) / (Eexp + statistics);
812 if (statistics == 0)
return BoltzmannTdndmu(2, T, mu, m, deg, extraConfig);
813 if (statistics == 1 && T == 0.)
return 0.;
815 if (statistics == -1 && mu > m) {
816 std::cerr <<
"**WARNING** QuantumNumericalIntegrationT2dn2dmu2: Bose-Einstein condensation" << std::endl;
821 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. - 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. - statistics / Eexp) / (1. + statistics / Eexp) / (1. + statistics / Eexp) / (Eexp + statistics);
869 if (statistics == 0)
return BoltzmannTdndmu(3, T, mu, m, deg, extraConfig);
870 if (statistics == 1 && T == 0.)
return 0.;
872 if (statistics == -1 && mu > m) {
873 std::cerr <<
"**WARNING** QuantumNumericalIntegrationT3dn3dmu3: Bose-Einstein condensation" << std::endl;
878 if (statistics == -1 && T == 0.)
return 0.;
889 for(
double sz : spins) {
894 double moverT = m / T;
895 double muoverT = mu / T;
897 for (
int i = 0; i < 32; i++) {
899 double EoverT = sqrt(tx*tx + moverT*moverT + Qmod*BoverT2*(2.*l + 1. - 2.*sz));
900 double Eexp = exp(EoverT - muoverT);
901 ret +=
lagw32[i] * T * (1. - 4.*statistics / Eexp + statistics * statistics / Eexp / Eexp) / (1. + statistics / Eexp) / (1. + statistics / Eexp) / (1. + statistics / Eexp) / (Eexp + statistics);
910 double moverT = m / T;
911 double muoverT = mu / T;
912 for (
int i = 0; i < 32; i++) {
914 double Eexp = exp(sqrt(tx*tx + moverT * moverT) - muoverT);
916 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);
930 std::cerr <<
"**WARNING** QuantumNumericalIntegrationTdndmu: N must be between 0 and 3!" << std::endl;
955 if (statistics == 1 && T == 0.0)
957 if (statistics == -1 && T == 0.0) {
959 std::cerr <<
"**WARNING** QuantumNumericalIntegrationChiNDimensionfull: Bose-Einstein condensation" << std::endl;
972 double tmpsqrt = sqrt(1. + x2);
973 return (1. + x2 / 2.) * tmpsqrt - x2 * x2 / 2. * log((1. + tmpsqrt) / x);
981 double tmpsqrt = sqrt(1. + x2);
982 return 2. * tmpsqrt + 2. * x2 * log((1. + tmpsqrt) / x);
997 double& p,
double& dpds)
999 double alpha = pf * pf / (mu * T);
1000 if (alpha < 1.e-6) {
1006 double expmAlpha = exp(-alpha);
1007 double beta = 1. - expmAlpha;
1009 double oneMinusBetaT = 1. - beta * t;
1010 double u = -log(oneMinusBetaT);
1011 p = pf * (1. - u / alpha);
1012 dpds = pf / alpha * beta / oneMinusBetaT;
1023 double pf = sqrt(mu*mu - m * m);
1025 for (
int i = 0; i < 32; i++) {
1028 ret1 += -
legw32[i] * dpds * p * p / (exp(-(sqrt(p * p + m * m) - mu) / T) + 1.);
1031 double moverT = m / T;
1032 double muoverT = mu / T;
1033 for (
int i = 0; i < 32; i++) {
1034 double tx = pf / T +
lagx32[i];
1035 ret1 +=
lagw32[i] * T * tx * T * tx * T / (exp(sqrt(tx*tx + moverT * moverT) - muoverT) + 1.);
1056 double pf = sqrt(mu*mu - m * m);
1058 for (
int i = 0; i < 32; i++) {
1062 double E = sqrt(p2 + m * m);
1063 ret1 += -
legw32[i] * dpds * p2 * p2 / E / (exp(-(E - mu) / T) + 1.);
1066 double moverT = m / T;
1067 double muoverT = mu / T;
1068 for (
int i = 0; i < 32; i++) {
1069 double tx = pf / T +
lagx32[i];
1070 double x2 = tx * T * tx * T;
1071 double E = sqrt(tx*tx + moverT * moverT);
1072 ret1 +=
lagw32[i] * T * x2 * x2 / E / T / (exp(E - muoverT) + 1.);
1078 ret2 += mu * pf * pf * pf;
1079 ret2 += -3. / 4. * pf * pf * pf * pf *
psi(m / pf);
1093 double pf = sqrt(mu*mu - m * m);
1095 for (
int i = 0; i < 32; i++) {
1098 double E = sqrt(p * p + m * m);
1099 ret1 += -
legw32[i] * dpds * p * p * E / (exp(-(E - mu) / T) + 1.);
1102 double moverT = m / T;
1103 double muoverT = mu / T;
1104 for (
int i = 0; i < 32; i++) {
1105 double tx = pf / T +
lagx32[i];
1106 ret1 +=
lagw32[i] * T * tx * T * tx * T * sqrt(tx*tx + moverT * moverT) * T / (exp(sqrt(tx*tx + moverT * moverT) - muoverT) + 1.);
1123 double ax = std::abs(x);
1124 return log(1. + exp(-ax)) + ax / (exp(ax) + 1.);
1135 double pf = sqrt(mu * mu - m * m);
1139 for (
int i = 0; i < 32; i++) {
1142 double E = sqrt(p * p + m * m);
1143 double x = (E - mu) / T;
1148 double moverT = m / T;
1149 double muoverT = mu / T;
1150 for (
int i = 0; i < 32; i++) {
1151 double tx = pf / T +
lagx32[i];
1152 double E = sqrt(tx * tx + moverT * moverT);
1153 double x = E - muoverT;
1171 double pf = sqrt(mu*mu - m * m);
1173 for (
int i = 0; i < 32; i++) {
1176 double E = sqrt(p * p + m * m);
1177 ret1 += -
legw32[i] * dpds * p * p * m / E / (exp(-(E - mu) / T) + 1.);
1180 double moverT = m / T;
1181 double muoverT = mu / T;
1182 for (
int i = 0; i < 32; i++) {
1183 double tx = pf / T +
lagx32[i];
1184 ret1 +=
lagw32[i] * T * tx * T * tx * T * moverT / sqrt(tx*tx + moverT * moverT) / (exp(sqrt(tx*tx + moverT * moverT) - muoverT) + 1.);
1203 double pf = sqrt(mu*mu - m * m);
1220 for (
int i = 0; i < 32; i++) {
1223 double E = sqrt(p * p + m2);
1224 ret1 += -
legw32[i] * dpds * (2. * E - m2 / E) / (exp(-(E - mu) / T) + 1.);
1227 double moverT = m / T;
1228 double muoverT = mu / T;
1229 double moverT2 = moverT * moverT;
1230 for (
int i = 0; i < 32; i++) {
1231 double tx = pf / T +
lagx32[i];
1232 double EoverT = sqrt(tx * tx + moverT2);
1233 ret1 +=
lagw32[i] * T * T * (2. * tx * tx + moverT2) / EoverT / (exp(EoverT - muoverT) + 1.);
1240 return T * (ret1 + ret2);
1251 double pf = sqrt(mu*mu - m * m);
1277 for (
int i = 0; i < 32; i++) {
1280 double E = sqrt(p * p + m2);
1281 double x = (E - mu) / T;
1284 double ff1mf = ex / ((1. + ex) * (1. + ex));
1285 quad +=
legw32[i] * dpds * (2. * p * p + m2) / E * ff1mf;
1288 double moverT = m / T;
1289 double muoverT = mu / T;
1290 double moverT2 = moverT * moverT;
1291 for (
int i = 0; i < 32; i++) {
1292 double tx = pf / T +
lagx32[i];
1293 double EoverT = sqrt(tx * tx + moverT2);
1294 double x = EoverT - muoverT;
1296 double emx = exp(-x);
1297 double ff1mf = emx / ((1. + emx) * (1. + emx));
1298 quad +=
lagw32[i] * T * T * (2. * tx * tx + moverT2) / EoverT * ff1mf;
1303 double ret2 = (mu * mu + pf * pf) / pf;
1304 double ret1 = quad / T - ret2;
1317 double pf = sqrt(mu*mu - m * m);
1333 for (
int i = 0; i < 32; i++) {
1336 double E = sqrt(p * p + m2);
1337 double x = (E - mu) / T;
1340 double f = 1. / (ex + 1.);
1341 double ff1mf = ex / ((1. + ex) * (1. + ex));
1342 double ff1mf_1m2f = ff1mf * (1. - 2. * f);
1343 quad +=
legw32[i] * dpds * (2. * p * p + m2) / E * ff1mf_1m2f;
1346 double moverT = m / T;
1347 double muoverT = mu / T;
1348 double moverT2 = moverT * moverT;
1349 for (
int i = 0; i < 32; i++) {
1350 double tx = pf / T +
lagx32[i];
1351 double EoverT = sqrt(tx * tx + moverT2);
1352 double x = EoverT - muoverT;
1354 double emx = exp(-x);
1355 double f = emx / (1. + emx);
1356 double ff1mf = emx / ((1. + emx) * (1. + emx));
1357 double ff1mf_1m2f = ff1mf * (1. - 2. * f);
1358 quad +=
lagw32[i] * T * T * (2. * tx * tx + moverT2) / EoverT * ff1mf_1m2f;
1363 double ret2 = mu * (3. * pf * pf - mu * mu) / (pf * pf * pf);
1364 double ret1 = quad / (T * T) - ret2;
1373 throw std::runtime_error(
"**ERROR** FermiNumericalIntegrationLargeMuTdndmu: N < 0 or N > 3");
1404 double pf = sqrt(mu * mu - m * m);
1414 double pf = sqrt(mu * mu - m * m);
1421 mu * pf * (2. * mu * mu - 5. * m2)
1422 - 3. * m2 * m2 * log(m / (mu + pf))
1432 double pf = sqrt(mu * mu - m * m);
1439 mu * pf * (2. * mu * mu - m2)
1440 + m2 * m2 * log(m / (mu + pf))
1457 double pf = sqrt(mu * mu - m * m);
1467 double pf = sqrt(mu * mu - m * m);
1475 + m2 * log(m / (mu + pf))
1485 double pf = sqrt(mu * mu - m * m);
1495 double pf = sqrt(mu * mu - m * m);
1505 double pf = sqrt(mu * mu - m * m);
1513 throw std::runtime_error(
"**ERROR** FermiNumericalIntegrationLargeMuTdndmu: N < 0 or N > 3");
1530 throw std::runtime_error(
"**ERROR** FermiZeroTChiN: This quantity is infinite by definition at T = 0!");
1543 if (statistics == 0) {
1554 if (quantity ==
chi2)
1556 if (quantity ==
chi3)
1558 if (quantity ==
chi4)
1567 if (quantity ==
dndT)
1571 if (quantity ==
dedT)
1573 if (quantity ==
dedmu)
1577 if (quantity ==
dsdT)
1592 if (quantity ==
chi2)
1594 if (quantity ==
chi3)
1596 if (quantity ==
chi4)
1605 if (quantity ==
dndT)
1609 if (quantity ==
dedT)
1611 if (quantity ==
dedmu)
1615 if (quantity ==
dsdT)
1629 if (quantity ==
chi2)
1631 if (quantity ==
chi3)
1633 if (quantity ==
chi4)
1642 if (quantity ==
dndT)
1646 if (quantity ==
dedT)
1648 if (quantity ==
dedmu)
1652 if (quantity ==
dsdT)
1656 std::cerr <<
"**WARNING** IdealGasFunctions::IdealGasQuantity: Unknown quantity" << std::endl;
1668 for(
double sz : spins) {
1671 double e0 = sqrt(m*m + Qmod*extraConfig.
MagneticField.
B*(2.*l + 1. - 2.*sz));
1674 ) * exp((mu - e0) / T);
1687 bool signchange =
true;
1688 if (statistics == 1)
1690 else if (statistics == -1)
1704 for(
double sz : spins) {
1707 double e0 = sqrt(m*m + Qmod*extraConfig.
MagneticField.
B*(2.*l + 1. - 2.*sz));
1710 double tfug = exp((mu - e0) / T);
1711 double EoverT = e0 / T;
1714 for (
int i = 1; i <= order; ++i) {
1720 if (signchange) sign = -sign;
1736 if (statistics == -1 && mu > m) {
1737 std::cerr <<
"**WARNING** QuantumNumericalIntegrationScalarDensity: Bose-Einstein condensation" << std::endl;
1742 if (statistics == -1 && T == 0.)
return 0.;
1752 for(
double sz : spins) {
1757 double moverT = m / T;
1758 double muoverT = mu / T;
1760 for (
int i = 0; i < 32; i++) {
1762 double EoverT = sqrt(tx*tx + moverT*moverT + Qmod*BoverT2*(2.*l + 1. - 2.*sz));
1763 ret +=
lagw32[i] * T * (tx * T * tx - Qmod * BoverT2 * T * (l + 0.5 - sz) ) / EoverT / (exp(EoverT - muoverT) + statistics);
1812 * m * (m * (m * m + mu * mu - 4. * mu * T + 6. * T * T) *
xMath::BesselKexp(0, m / T)
1813 + (m * m * (3. * T - 2. * mu) + 2. * T * (mu * mu - 4. * mu * T + 6. * T * T)) *
xMath::BesselKexp(1, m / T))
1845 * exp((mu - m) / T);
1854 bool signchange =
true;
1855 if (statistics == 1)
1857 else if (statistics == -1)
1866 double tfug = exp((mu - m) / T);
1867 double moverT = m / T;
1871 for (
int i = 1; i <= order; ++i) {
1874 - (mu - 3. * T/
static_cast<double>(i)) /
static_cast<double>(i) /
static_cast<double>(i)
1884 if (signchange) sign = -sign;
1886 double prefactor = 1.;
1897 bool signchange =
true;
1898 if (statistics == 1)
1900 else if (statistics == -1)
1909 double tfug = exp((mu - m) / T);
1910 double moverT = m / T;
1914 for (
int i = 1; i <= order; ++i) {
1915 double k =
static_cast<double>(i);
1917 ret += sign * 2. * T * (mu * mu - 4. * mu * T / k + 6. * T / k * T / k) / k * cfug;
1920 (m * (m * m + mu * mu - 4. * mu * T / k + 6. * T * T / k / k) *
xMath::BesselKexp(0, i*moverT)
1921 + (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))
1925 if (signchange) sign = -sign;
1927 double prefactor = 1.;
1938 bool signchange =
true;
1939 if (statistics == 1)
1941 else if (statistics == -1)
1950 double tfug = exp((mu - m) / T);
1951 double moverT = m / T;
1955 for (
int i = 1; i <= order; ++i) {
1956 double k =
static_cast<double>(i);
1958 ret += sign * 6. * T / k * T / k * (4. * T / k - mu) / k * cfug;
1966 if (signchange) sign = -sign;
1968 double prefactor = 1.;
1979 bool signchange =
true;
1980 if (statistics == 1)
1982 else if (statistics == -1)
1991 double tfug = exp((mu - m) / T);
1993 double moverT = m / T;
1996 for (
int i = 1; i <= order; ++i) {
1998 ret += sign * 3. /
static_cast<double>(i) /
static_cast<double>(i) /
static_cast<double>(i) * cfug / T;
2003 if (signchange) sign = -sign;
2005 double prefactor = 1.;
2017 bool signchange =
true;
2018 if (statistics == 1)
2020 else if (statistics == -1)
2029 double tfug = exp((mu - m) / T);
2030 double moverT = m / T;
2034 for (
int i = 1; i <= order; ++i) {
2035 double k =
static_cast<double>(i);
2037 ret += sign * k * (-mu / k / k) * cfug;
2046 if (signchange) sign = -sign;
2048 double prefactor = 1.;
2054 return ret * prefactor;
2065 if (statistics == 0)
return BoltzmanndndT(T, mu, m, deg, extraConfig);
2066 if (statistics == 1 && T == 0.)
return 0.;
2068 if (statistics == -1 && mu > m) {
2069 std::cerr <<
"**WARNING** QuantumNumericalIntegrationDensity: Bose-Einstein condensation, mass = " << m <<
", mu = " << mu << std::endl;
2074 if (statistics == -1 && T == 0.)
return 0.;
2081 double moverT = m / T;
2082 double muoverT = mu / T;
2083 for (
int i = 0; i < 32; i++) {
2085 double EoverT = sqrt(tx*tx + moverT * moverT);
2086 double Eexp = exp(EoverT - muoverT);
2087 double f = 1. / (Eexp + statistics);
2088 ret +=
lagw32[i] * T * tx * T * tx * T * f * (EoverT - muoverT) * (1. - statistics * f);
2098 if (statistics == 0)
return Boltzmannd2ndT2(T, mu, m, deg, extraConfig);
2099 if (statistics == 1 && T == 0.)
return 0.;
2101 if (statistics == -1 && mu > m) {
2102 std::cerr <<
"**WARNING** QuantumNumericalIntegrationDensity: Bose-Einstein condensation, mass = " << m <<
", mu = " << mu << std::endl;
2107 if (statistics == -1 && T == 0.)
return 0.;
2114 double moverT = m / T;
2115 double muoverT = mu / T;
2116 for (
int i = 0; i < 32; i++) {
2118 double EoverT = sqrt(tx*tx + moverT * moverT);
2119 double Eexp = exp(EoverT - muoverT);
2120 double f = 1. / (Eexp + statistics);
2121 ret +=
lagw32[i] * T * tx * T * tx * T * f
2122 * (EoverT - muoverT) * (1. - statistics * f)
2123 * ((EoverT - muoverT) * (1. - 2. * statistics * f) - 2.);
2133 if (statistics == 0)
return BoltzmanndedT(T, mu, m, deg, extraConfig);
2134 if (statistics == 1 && T == 0.)
return 0.;
2136 if (statistics == -1 && mu > m) {
2137 std::cerr <<
"**WARNING** QuantumNumericalIntegrationDensity: Bose-Einstein condensation, mass = " << m <<
", mu = " << mu << std::endl;
2142 if (statistics == -1 && T == 0.)
return 0.;
2146 double moverT = m / T;
2147 double muoverT = mu / T;
2148 for (
int i = 0; i < 32; i++) {
2150 double EoverT = sqrt(tx*tx + moverT * moverT);
2151 double Eexp = exp(EoverT - muoverT);
2152 double f = 1. / (Eexp + statistics);
2153 ret +=
lagw32[i] * T * tx * T * tx * T * EoverT * f * (EoverT - muoverT) * (1. - statistics * f);
2163 if (statistics == 0)
return BoltzmanndedT(T, mu, m, deg, extraConfig);
2164 if (statistics == 1 && T == 0.)
return 0.;
2166 if (statistics == -1 && mu > m) {
2167 std::cerr <<
"**WARNING** QuantumNumericalIntegrationDensity: Bose-Einstein condensation, mass = " << m <<
", mu = " << mu << std::endl;
2172 if (statistics == -1 && T == 0.)
return 0.;
2176 double moverT = m / T;
2177 double muoverT = mu / T;
2178 for (
int i = 0; i < 32; i++) {
2180 double EoverT = sqrt(tx*tx + moverT * moverT);
2181 double Eexp = exp(EoverT - muoverT);
2182 double f = 1. / (Eexp + statistics);
2183 ret +=
lagw32[i] * T * tx * T * tx * T * EoverT * f * (1. - statistics * f);
2194 if (statistics == 1 && T == 0.)
return 0.;
2196 if (statistics == -1 && mu > m) {
2197 std::cerr <<
"**WARNING** QuantumNumericalIntegrationDensity: Bose-Einstein condensation, mass = " << m <<
", mu = " << mu << std::endl;
2202 if (statistics == -1 && T == 0.)
return 0.;
2209 double moverT = m / T;
2210 double muoverT = mu / T;
2211 for (
int i = 0; i < 32; i++) {
2213 double EoverT = sqrt(tx*tx + moverT * moverT);
2214 double Eexp = exp(EoverT - muoverT);
2215 double f = 1. / (Eexp + statistics);
2216 ret +=
lagw32[i] * T * tx * T * tx * T * f
2217 * (1. - statistics * f)
2218 * ((EoverT - muoverT) * (1. - 2. * statistics * f) - 3.);
2228 if (statistics == 0)
return BoltzmanndsdT(T, mu, m, deg, extraConfig);
2229 if (statistics == 1 && T == 0.)
return FermiZeroTdsdT(mu, m, deg, extraConfig);
2231 if (statistics == -1 && mu > m) {
2232 std::cerr <<
"**WARNING** QuantumNumericalIntegrationdsdT: Bose-Einstein condensation, mass = " << m <<
", mu = " << mu << std::endl;
2236 if (statistics == -1 && T == 0.)
return 0.;
2242 double moverT = m / T;
2243 double muoverT = mu / T;
2244 for (
int i = 0; i < 32; i++) {
2246 double EoverT = sqrt(tx*tx + moverT * moverT);
2247 double Eexp = exp(EoverT - muoverT);
2248 double f = 1. / (Eexp + statistics);
2249 double xval = EoverT - muoverT;
2250 ret +=
lagw32[i] * T * tx * T * tx * T * xval * xval * f * (1. - statistics * f);
2265 double pf = sqrt(mu*mu - m * m);
2267 for (
int i = 0; i < 32; i++) {
2270 double en = sqrt(p * p + m * m);
2271 double fbar = 1. / (exp(-(en - mu) / T) + 1.);
2272 ret1 += -
legw32[i] * dpds * p * p * (mu - en) / T / T * fbar * (1. - fbar);
2275 double moverT = m / T;
2276 double muoverT = mu / T;
2277 for (
int i = 0; i < 32; i++) {
2278 double tx = pf / T +
lagx32[i];
2279 double EoverT = sqrt(tx*tx + moverT * moverT);
2280 double f = 1. / (exp(EoverT - muoverT) + 1.);
2281 ret1 +=
lagw32[i] * T * tx * T * tx * T * (EoverT - muoverT) / T * f * (1. - f);
2296 double pf = sqrt(mu*mu - m * m);
2298 for (
int i = 0; i < 32; i++) {
2301 double en = sqrt(p * p + m * m);
2302 double fbar = 1. / (exp(-(en - mu) / T) + 1.);
2303 ret1 += -
legw32[i] * dpds * p * p * (mu - en) / T / T / T
2304 * fbar * (1. - fbar) * ((mu - en) / T * (1.-2.*fbar) - 2.);
2307 double moverT = m / T;
2308 double muoverT = mu / T;
2309 for (
int i = 0; i < 32; i++) {
2310 double tx = pf / T +
lagx32[i];
2311 double EoverT = sqrt(tx*tx + moverT * moverT);
2312 double f = 1. / (exp(EoverT - muoverT) + 1.);
2313 ret1 +=
lagw32[i] * T * tx * T * tx * T * (EoverT - muoverT) / T / T
2314 * f * (1. - f) * ((EoverT - muoverT) * (1. - 2. * f) - 2.);
2329 double pf = sqrt(mu*mu - m * m);
2331 for (
int i = 0; i < 32; i++) {
2334 double en = sqrt(p * p + m * m);
2335 double fbar = 1. / (exp(-(en - mu) / T) + 1.);
2336 ret1 += -
legw32[i] * dpds * p * p * en * (mu - en) / T / T * fbar * (1. - fbar);
2339 double moverT = m / T;
2340 double muoverT = mu / T;
2341 for (
int i = 0; i < 32; i++) {
2342 double tx = pf / T +
lagx32[i];
2343 double EoverT = sqrt(tx*tx + moverT * moverT);
2344 double f = 1. / (exp(EoverT - muoverT) + 1.);
2345 ret1 +=
lagw32[i] * T * tx * T * tx * T * EoverT * T * (EoverT - muoverT) / T * f * (1. - f);
2360 double pf = sqrt(mu*mu - m * m);
2362 for (
int i = 0; i < 32; i++) {
2365 double en = sqrt(p * p + m * m);
2366 double Eexp = exp(-(en - mu) / T);
2367 ret1 +=
legw32[i] * dpds * p * p * en * 1. / (1. + 1./Eexp) / (Eexp + 1.);
2370 double moverT = m / T;
2371 double muoverT = mu / T;
2372 for (
int i = 0; i < 32; i++) {
2373 double tx = pf / T +
lagx32[i];
2374 double EoverT = sqrt(tx*tx + moverT * moverT);
2375 double Eexp = exp(EoverT - muoverT);
2376 ret1 +=
lagw32[i] * T * tx * T * tx * T * EoverT * T * 1. / (1. + 1. / Eexp) / (Eexp + 1.);
2391 double pf = sqrt(mu*mu - m * m);
2393 for (
int i = 0; i < 32; i++) {
2396 double en = sqrt(p * p + m * m);
2397 double fbar = 1. / (exp(-(en - mu) / T) + 1.);
2398 ret1 +=
legw32[i] * dpds * p * p
2399 * fbar * (1. - fbar) * ((mu - en) / T * (1. - 2. * fbar) - 3.);
2402 double moverT = m / T;
2403 double muoverT = mu / T;
2404 for (
int i = 0; i < 32; i++) {
2405 double tx = pf / T +
lagx32[i];
2406 double EoverT = sqrt(tx*tx + moverT * moverT);
2407 double f = 1. / (exp(EoverT - muoverT) + 1.);
2408 ret1 +=
lagw32[i] * T * tx * T * tx * T
2409 * f * (1. - f) * ((EoverT - muoverT) * (1. - 2. * f) - 3.);
2423 double pf = sqrt(mu*mu - m * m);
2443 for (
int i = 0; i < 32; i++) {
2446 double E = sqrt(p * p + m2);
2447 double x = (E - mu) / T;
2448 double H = (E - mu) * (2. * p * p + m2) / E + p * p;
2453 double moverT = m / T;
2454 double muoverT = mu / T;
2455 double moverT2 = moverT * moverT;
2456 for (
int i = 0; i < 32; i++) {
2457 double tx = pf / T +
lagx32[i];
2459 double EoverT = sqrt(tx * tx + moverT2);
2460 double ET = EoverT * T;
2461 double eps = ET - mu;
2462 double H = eps * (2. * pT * pT + m2) / ET + pT * pT;
2463 double x = EoverT - muoverT;
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 BoltzmanndsdT(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the derivative of entropy density wrt T at constant mu for a Maxwell-Boltzmann gas.
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())
void SommerfeldLegendreMap(double s, double pf, double mu, double T, double &p, double &dpds)
Sommerfeld-inspired variable substitution for the Legendre part of the large-mu Fermi integrals.
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 QuantumNumericalIntegrationdsdT(int statistics, double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the derivative of entropy density wrt T at constant mu using numerical integration.
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.
double FermiZeroTdsdT(double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the scalar density of a Fermi-Dirac ideal gas at zero temperature.
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())
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 FermiNumericalIntegrationLargeMudsdT(double T, double mu, double m, double deg, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the derivative of entropy density wrt T at constant mu using Sommerfeld-Legendre + Laguerre ...
double QuantumClusterExpansiondsdT(int statistics, double T, double mu, double m, double deg, int order=1, const IdealGasFunctionsExtraConfig &extraConfig=IdealGasFunctionsExtraConfig())
Computes the derivative of entropy density wrt T at constant mu using the cluster expansion.
double FermiEntropySigma(double x)
Entropy integrand per mode: sigma(x) = -f*ln(f) - (1-f)*ln(1-f) where f = 1/(e^x + 1) and x = (E - mu...
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.