Thermal-FIST 1.6.1
Package for hadron resonance gas model applications
Loading...
Searching...
No Matches
ThermalModelBase.h
Go to the documentation of this file.
1/*
2 * Thermal-FIST package
3 *
4 * Copyright (c) 2014-2019 Volodymyr Vovchenko
5 *
6 * GNU General Public License (GPLv3 or later)
7 */
8#ifndef THERMALMODELBASE_H
9#define THERMALMODELBASE_H
10
11#include <string>
12
14#include "HRGBase/xMath.h"
15#include "HRGBase/Broyden.h"
16
17
18namespace thermalfist {
19
29 {
30 public:
36 GCE = 0,
37 CE = 1,
38 SCE = 2,
39 CCE = 3
40 };
41
54
62
63 virtual ~ThermalModelBase(void) { }
64
66 int ComponentsNumber() const { return static_cast<int>(m_densities.size()); }
67
79 virtual void FillVirial(const std::vector<double> & ri = std::vector<double>(0));
80
82 bool UseWidth() const { return m_UseWidth; }
83
92 void SetUseWidth(bool useWidth);
93
100
102
107 void SetNormBratio(bool normBratio);
108 bool NormBratio() const { return m_NormBratio; }
110
112 void SetOMP(bool openMP) { m_useOpenMP = openMP; }
113
115
120 virtual void SetParameters(const ThermalModelParameters& params);
121 const ThermalModelParameters& Parameters() const { return m_Parameters; }
123
128 void UpdateParameters() { SetParameters(m_Parameters); }
129
135 virtual void SetTemperature(double T);
136
142 virtual void SetBaryonChemicalPotential(double muB);
143
149 virtual void SetElectricChemicalPotential(double muQ);
150
156 virtual void SetStrangenessChemicalPotential(double muS);
157
163 virtual void SetCharmChemicalPotential(double muC);
164
170 virtual void SetGammaq(double gammaq);
171
177 virtual void SetGammaS(double gammaS);
178
184 virtual void SetGammaC(double gammaC);
185
191 virtual void SetBaryonCharge(int B);
192
198 virtual void SetElectricCharge(int Q);
199
205 virtual void SetStrangeness(int S);
206
212 virtual void SetCharm(int C);
213
219 virtual void SetRadius(double /*rad*/) { }
220
227 virtual void SetRadius(int /*i*/, double /*rad*/) { }
228
239 virtual void SetVirial(int /*i*/, int /*j*/, double /*b*/) { }
240
242 virtual void SetRepulsion(int i, int j, double b) { SetVirial(i,j,b); }
243
251 virtual void SetAttraction(int /*i*/, int /*j*/, double /*a*/) { }
252
254
256 virtual void DisableMesonMesonVirial();
259
262 virtual void DisableMesonMesonAttraction();
263
265
267 virtual void DisableMesonBaryonVirial();
270
273 virtual void DisableMesonBaryonAttraction();
274
276
278 virtual void DisableBaryonBaryonVirial();
281
284 virtual void DisableBaryonBaryonAttraction();
285
287
289 virtual void DisableBaryonAntiBaryonVirial();
292
296
304 virtual void ReadInteractionParameters(const std::string & /*filename*/) { }
305
313 virtual void WriteInteractionParameters(const std::string & /*filename*/) { }
314
320 virtual void ChangeTPS(ThermalParticleSystem *TPS);
321
323
333 virtual double VirialCoefficient(int /*i*/, int /*j*/) const { return 0.; }
334 double RepulsionCoefficient(int i, int j) const { return VirialCoefficient(i,j); }
336
344 virtual double AttractionCoefficient(int /*i*/, int /*j*/) const { return 0.; }
345
348 bool QuantumStatistics() const { return m_QuantumStats; }
349
352 virtual void SetStatistics(bool stats);
353
360 virtual void SetCalculationType(IdealGasFunctions::QStatsCalculationType type) { m_TPS->SetCalculationType(type); }
361
372 virtual void SetClusterExpansionOrder(int order) { m_TPS->SetClusterExpansionOrder(order); }
373
383 void SetResonanceWidthShape(ThermalParticle::ResonanceWidthShape shape) { m_TPS->SetResonanceWidthShape(shape); }
384
392 void SetResonanceWidthIntegrationType(ThermalParticle::ResonanceWidthIntegration type);// { m_TPS->SetResonanceWidthIntegrationType(type); }
393
401 virtual void FillChemicalPotentials();
402
411 virtual void SetChemicalPotentials(const std::vector<double> & chem = std::vector<double>(0));
412
418 const std::vector<double>& ChemicalPotentials() const { return m_Chem; }
419
426 double ChemicalPotential(int i) const;
427
435 virtual void SetChemicalPotential(int i, double chem);
436
445 virtual double FullIdealChemicalPotential(int i) const;
446
447
450 bool ConstrainMuB() const { return m_ConstrainMuB; }
451
454 void ConstrainMuB(bool constrain) { m_ConstrainMuB = constrain; }
455
458 bool ConstrainMuQ() const { return m_ConstrainMuQ; }
459
462 void ConstrainMuQ(bool constrain) { m_ConstrainMuQ = constrain; }
463
466 bool ConstrainMuS() const { return m_ConstrainMuS; }
467
470 void ConstrainMuS(bool constrain) { m_ConstrainMuS = constrain; }
471
474 bool ConstrainMuC() const { return m_ConstrainMuC; }
475
478 void ConstrainMuC(bool constrain) { m_ConstrainMuC = constrain; }
479
482 bool ConstrainGammaC() const { return m_ConstrainGammaC; }
483
485 void ConstrainGammaC(bool constrain) { m_ConstrainGammaC = constrain; }
486
488
496 void SetNccbar(double Nccbar) { m_NccbarGoal = Nccbar; }
497 double NccbarGoal() const { return m_NccbarGoal; }
499
501 void UsePartialChemicalEquilibrium(bool usePCE) { m_PCE = usePCE; }
502
504 bool UsePartialChemicalEquilibrium() { return m_PCE; }
505
507
514 void SetSoverB(double SB) { m_SBgoal = SB; }
515 double SoverB() const { return m_SBgoal; }
517
519
526 void SetQoverB(double QB) { m_QBgoal = QB; }
527 double QoverB() const { return m_QBgoal; }
529
535 void SetVolume(double Volume) { m_Volume = Volume; m_Parameters.V = Volume; }
537 double Volume() const { return m_Parameters.V; }
538
547 void SetVolumeRadius(double R) { m_Volume = 4. / 3.*xMath::Pi() * R * R * R; m_Parameters.V = m_Volume; }
548
550 double CanonicalVolume() const { return m_Parameters.SVc; }
556
557 void SetCanonicalVolume(double Volume) { m_Parameters.SVc = Volume; }
558
567 void SetCanonicalVolumeRadius(double Rc) { m_Parameters.SVc = 4. / 3. * xMath::Pi() * Rc * Rc * Rc; }
568
569
570 //double StrangenessCanonicalVolume() const { return CanonicalVolume(); }
571 //void SetStrangenessCanonicalVolume(double Volume) { SetCanonicalVolume(Volume); }
572 //void SetStrangenessCanonicalVolumeRadius(double Radius) { SetCanonicalVolumeRadius(Radius); }
573
574 // Same as FixParameters but with a more clear name on what is actually does
590 void ConstrainChemicalPotentials(bool resetInitialValues = true);
591
592
598 virtual void FixParameters();
599
605 virtual void FixParametersNoReset();
606
634 virtual bool SolveChemicalPotentials(double totB = 0., double totQ = 0., double totS = 0., double totC = 0.,
635 double muBinit = 0., double muQinit = 0., double muSinit = 0., double muCinit = 0.,
636 bool ConstrMuB = true, bool ConstrMuQ = true, bool ConstrMuS = true, bool ConstrMuC = true);
637
664 virtual bool FixChemicalPotentialsThroughDensities(double rhoB = 0., double rhoQ = 0., double rhoS = 0., double rhoC = 0.,
665 double muBinit = 0., double muQinit = 0., double muSinit = 0., double muCinit = 0.,
666 bool ConstrMuB = true, bool ConstrMuQ = true, bool ConstrMuS = true, bool ConstrMuC = true);
667
674
680 virtual void CalculateDensities();
681
688 virtual void ValidateCalculation();
689
696 std::string ValidityCheckLog() const { return m_ValidityLog; }
697
704 virtual void CalculateDensitiesGCE() { CalculateDensities(); m_GCECalculated = true; }
705
713 virtual void CalculateFeeddown();
714
723 virtual void CalculateFluctuations();
724
729 virtual void CalculateTemperatureDerivatives();
730
741
760
768 virtual void ApplyBaryonAnnihilation(double gammaBbar);
769
775 virtual double TwoParticleSusceptibilityPrimordial(int i, int j) const;
776
782 virtual double TwoParticleSusceptibilityPrimordialByPdg(long long id1, long long id2);
783
789 virtual double TwoParticleSusceptibilityTemperatureDerivativePrimordial(int i, int j) const;
790
796 virtual double TwoParticleSusceptibilityTemperatureDerivativePrimordialByPdg(long long id1, long long id2);
797
803 virtual double NetParticleSusceptibilityPrimordialByPdg(long long id1, long long id2);
804
810 virtual double TwoParticleSusceptibilityFinal(int i, int j) const;
811
817 virtual double TwoParticleSusceptibilityFinalByPdg(long long id1, long long id2);
818
824 virtual double NetParticleSusceptibilityFinalByPdg(long long id1, long long id2);
825
831 virtual double PrimordialParticleChargeSusceptibility(int i, ConservedCharge::Name chg) const;
832
839
846
847
853 virtual double FinalParticleChargeSusceptibility(int i, ConservedCharge::Name chg) const;
854
860 virtual double FinalParticleChargeSusceptibilityByPdg(long long id1, ConservedCharge::Name chg);
861
867 virtual double FinalNetParticleChargeSusceptibilityByPdg(long long id1, ConservedCharge::Name chg);
868
869
880
896 virtual void CalculateSusceptibilityMatrix();
897
913
923
943 virtual std::vector<double> CalculateChargeFluctuations(const std::vector<double> &chgs, int order = 4, bool dimensionfull = false);
944
962 virtual std::vector<double> CalculateGeneralizedSusceptibilities(const std::vector<std::vector<double>> &chgs);
963
971 virtual void SetMultipleSolutionsMode(bool search) { }
972
979 virtual bool UseMultipleSolutionsMode() const { return false; }
980
981
982 //virtual double GetParticlePrimordialDensity(unsigned int);
983 //virtual double GetParticleTotalDensity(unsigned int);
984
985 // Equation of state etc.
986
988 double Pressure() { return CalculatePressure(); }
989
991 double EnergyDensity() { return CalculateEnergyDensity(); }
992
994 double EntropyDensity() { return CalculateEntropyDensity(); }
995
997 double HadronDensity() { return CalculateHadronDensity(); }
998
1000 double BaryonDensity() { return CalculateBaryonDensity(); }
1001
1003 double ElectricChargeDensity() { return CalculateChargeDensity(); }
1004
1006 double StrangenessDensity() { return CalculateStrangenessDensity(); }
1007
1009 double CharmDensity() { return CalculateCharmDensity(); }
1010
1012 double AbsoluteBaryonDensity() { return CalculateAbsoluteBaryonDensity(); }
1013
1015 double AbsoluteElectricChargeDensity() { return CalculateAbsoluteChargeDensity(); }
1016
1018 double AbsoluteStrangenessDensity() { return CalculateAbsoluteStrangenessDensity(); }
1019
1021 double AbsoluteCharmDensity() { return CalculateAbsoluteCharmDensity(); }
1022
1024 double GetNccbar() { return AbsoluteCharmDensity() * Volume() / 2.0; }
1025
1027 double HeatCapacityMu() { return CalculateHeatCapacityMu(); }
1028
1030 [[deprecated("Use HeatCapacityMu() instead")]]
1031 double SpecificHeatChem() { return CalculateHeatCapacityMu(); }
1032
1046 double cs2(bool rhoBconst = true, bool rhoQconst = true, bool rhoSconst = true, bool rhoCconst = true) {
1047 return CalculateAdiabaticSpeedOfSoundSquared(rhoBconst, rhoQconst, rhoSconst, rhoCconst);
1048 }
1049
1063 double cT2(bool rhoBconst = true, bool rhoQconst = true, bool rhoSconst = true, bool rhoCconst = true) {
1064 return CalculateIsothermalSpeedOfSoundSquared(rhoBconst, rhoQconst, rhoSconst, rhoCconst);
1065 }
1066
1074 double HeatCapacity(bool rhoBconst = true, bool rhoQconst = true, bool rhoSconst = true, bool rhoCconst = true) {
1075 return CalculateHeatCapacity(rhoBconst, rhoQconst, rhoSconst, rhoCconst);
1076 }
1077
1099 std::vector<std::vector<double>> PressureHessian();
1100
1109 bool IsThermodynamicallyStable();
1110
1112
1113 virtual double CalculatePressure() = 0;
1114 virtual double CalculateEnergyDensity() = 0;
1115 virtual double CalculateEntropyDensity() = 0;
1116 virtual double CalculateHadronDensity();
1117 virtual double CalculateBaryonDensity();
1118 virtual double CalculateChargeDensity();
1119 virtual double CalculateStrangenessDensity();
1120 virtual double CalculateCharmDensity();
1121 virtual double CalculateAbsoluteBaryonDensity();
1122 virtual double CalculateAbsoluteChargeDensity();
1123 virtual double CalculateAbsoluteStrangenessDensity();
1124 virtual double CalculateAbsoluteCharmDensity();
1125 virtual double CalculateAbsoluteStrangenessDensityModulo();
1126 virtual double CalculateAbsoluteCharmDensityModulo();
1127 virtual double CalculateEnergyDensityDerivativeT() = 0;
1128 virtual double CalculateEntropyDensityDerivativeT() = 0;
1129 virtual double CalculateHeatCapacityMu();
1130 virtual double CalculateAdiabaticSpeedOfSoundSquared(bool rhoBconst = true, bool rhoQconst = true, bool rhoSconst = true, bool rhoCconst = true);
1131 virtual double CalculateIsothermalSpeedOfSoundSquared(bool rhoBconst = true, bool rhoQconst = true, bool rhoSconst = true, bool rhoCconst = true);
1132 virtual double CalculateHeatCapacity(bool rhoBconst = true, bool rhoQconst = true, bool rhoSconst = true, bool rhoCconst = true);
1134
1136 virtual double CalculateArbitraryChargeDensity();
1137
1139 virtual double CalculateBaryonMatterEntropyDensity() { return 0.; }
1140
1142 virtual double CalculateMesonMatterEntropyDensity() { return 0.; }
1143
1145 virtual double ParticleScaledVariance(int) { return 1.; }
1146
1148 virtual double ParticleSkewness(int) { return 1.; }
1149
1151 virtual double ParticleKurtosis(int) { return 1.; }
1152
1155 virtual double CalculateEigenvolumeFraction() { return 0.; }
1156
1158 virtual double ParticleScalarDensity(int i) = 0;
1159
1160 virtual double GetMaxDiff() const { return m_MaxDiff; }
1161
1165 virtual bool IsLastSolutionOK() const { return m_LastCalculationSuccessFlag; }
1166
1171 double GetdndT(int i) const;
1172
1178 double GetDensity(long long PDGID, int feeddown) { return GetDensity(PDGID, static_cast<Feeddown::Type>(feeddown)); }
1179
1188 double GetDensity(long long PDGID, Feeddown::Type feeddown);
1189
1198 double GetYield(long long PDGID, Feeddown::Type feeddown) { return GetDensity(PDGID, feeddown) * Volume(); }
1199
1200 std::vector<double> GetIdealGasDensities() const;
1201
1204 ThermalParticleSystem* TPS() { return m_TPS; }
1205
1210 const std::vector<double>& Densities() const { return m_densities; }
1211 std::vector<double>& Densities() { return m_densities; }
1212
1219 const std::vector<double>& TotalDensities() const { return m_densitiestotal; }
1220
1224 const std::vector< std::vector<double> >& AllDensities() const { return m_densitiesbyfeeddown; }
1225
1231 void SetTAG(const std::string & tag) { m_TAG = tag; }
1232
1234 const std::string& TAG() const { return m_TAG; }
1235
1237 int PdgToId(long long pdgid) const { return m_TPS->PdgToId(pdgid); }
1238
1240 virtual void ResetCalculatedFlags();
1241
1244 bool IsCalculated() const { return m_Calculated; }
1245
1248 bool IsTwoParticleCorrelationsCalculated() const { return m_TwoParticleCorrelationsCalculated; }
1249
1252 const std::vector<std::vector<double>>& PrimCorrel() const { return m_PrimCorrel; }
1253
1256 bool IsFluctuationsCalculated() const { return m_FluctuationsCalculated; }
1257
1260 bool IsSusceptibilitiesCalculated() const { return m_SusceptibilitiesCalculated; }
1261
1264 bool IsTemperatureDerivativesCalculated() const { return m_TemperatureDerivativesCalculated; }
1265
1268 bool IsGCECalculated() const { return m_GCECalculated; }
1269
1277 double ScaledVariancePrimordial(int id) const { return (id >= 0 && id < static_cast<int>(m_wprim.size())) ? m_wprim[id] : 1.; }
1278
1289 double ScaledVarianceTotal(int id) const { return (id >= 0 && id < static_cast<int>(m_wtot.size())) ? m_wtot[id] : 1.; }
1290
1298 double SkewnessPrimordial(int id) const { return (id >= 0 && id < static_cast<int>(m_skewprim.size())) ? m_skewprim[id] : 1.; }
1299
1310 double SkewnessTotal(int id) const { return (id >= 0 && id < static_cast<int>(m_skewtot.size())) ? m_skewtot[id] : 1.; }
1311
1319 double KurtosisPrimordial(int id) const { return (id >= 0 && id < static_cast<int>(m_kurtprim.size())) ? m_kurtprim[id] : 1.; }
1320
1331 double KurtosisTotal(int id) const { return (id >= 0 && id < static_cast<int>(m_kurttot.size())) ? m_kurttot[id] : 1.; }
1332
1341 double ConservedChargeDensity(ConservedCharge::Name chg);
1342
1351 double AbsoluteConservedChargeDensity(ConservedCharge::Name chg);
1352
1361 double ConservedChargeDensitydT(ConservedCharge::Name chg);
1362
1372 double Susc(ConservedCharge::Name i, ConservedCharge::Name j) const;// { return m_Susc[i][j]; }
1373
1383 double dSuscdT(ConservedCharge::Name i, ConservedCharge::Name j) const;
1384
1400 double ProxySusc(ConservedCharge::Name i, ConservedCharge::Name j) const;// { return m_ProxySusc[i][j]; }
1401
1412 double ChargedMultiplicity(int type = 0);
1413
1424 double ChargedScaledVariance(int type = 0);
1425
1433 double ChargedMultiplicityFinal(int type = 0);
1434
1442 double ChargedScaledVarianceFinal(int type = 0);
1443
1449 ThermalModelEnsemble Ensemble() { return m_Ensemble; }
1450
1451
1455 virtual bool IsConservedChargeCanonical(ConservedCharge::Name charge) const { return 0; }
1456
1462 ThermalModelInteraction InteractionModel() { return m_InteractionModel; }
1463
1464
1468 void SetDensityModelForParticleSpecies(int i, GeneralizedDensity* density_model = NULL);
1469
1473 void SetDensityModelForParticleSpeciesByPdg(long long PDGID, GeneralizedDensity* density_model = NULL);
1474
1478 void ClearDensityModels();
1479
1480 const IdealGasFunctions::IdealGasFunctionsExtraConfig& GetIdealGasFunctionsExtraConfig() const { return m_IGFExtraConfig; }
1481
1482
1490 void SetMagneticField(double B = 0.0, int lmax = -1);
1496 void RecomputeThresholdsDueToMagneticField();
1497
1504 std::vector<double> PartialPressures();
1505
1507 void ClearMagneticField();
1508
1509 protected:
1510 ThermalModelParameters m_Parameters;
1511 ThermalParticleSystem* m_TPS;
1512
1514 IdealGasFunctions::IdealGasFunctionsExtraConfig m_IGFExtraConfig;
1515
1516 bool m_LastCalculationSuccessFlag;
1517 double m_MaxDiff;
1518
1519 bool m_Calculated;
1520 bool m_FeeddownCalculated;
1521 bool m_TwoParticleCorrelationsCalculated;
1522 bool m_FluctuationsCalculated;
1523 bool m_SusceptibilitiesCalculated;
1524 bool m_GCECalculated;
1525 bool m_UseWidth;
1526 bool m_NormBratio;
1527 bool m_QuantumStats;
1528 double m_QBgoal;
1529 double m_SBgoal;
1530 double m_Volume;
1531
1532 bool m_ConstrainMuB;
1533 bool m_ConstrainMuQ;
1534 bool m_ConstrainMuS;
1535 bool m_ConstrainMuC;
1536
1537 bool m_ConstrainGammaC;
1538 double m_NccbarGoal;
1539
1540 bool m_PCE;
1541
1542 bool m_useOpenMP;
1543
1544 std::vector<double> m_densities;
1545 std::vector<double> m_densitiestotal;
1546 //std::vector<double> m_densitiestotalweak;
1547 std::vector< std::vector<double> > m_densitiesbyfeeddown;
1548 std::vector<double> m_Chem;
1549
1550 // Scaled variance
1551 std::vector<double> m_wprim;
1552 std::vector<double> m_wtot;
1553
1554 // Skewness
1555 std::vector<double> m_skewprim;
1556 std::vector<double> m_skewtot;
1557
1558 // Kurtosis
1559 std::vector<double> m_kurtprim;
1560 std::vector<double> m_kurttot;
1561
1562 // 2nd order correlations of primordial and total numbers
1563 std::vector< std::vector<double> > m_PrimCorrel;
1564 std::vector< std::vector<double> > m_TotalCorrel;
1565
1566 // Shifted chemical potential derivatives
1567 std::vector< std::vector<double> > m_dmusdmu;
1568
1569
1570 // Particle number-conserved charge correlators
1571 std::vector< std::vector<double> > m_PrimChargesCorrel;
1572 std::vector< std::vector<double> > m_FinalChargesCorrel;
1573
1574 // Conserved charges susceptibility matrix
1575 std::vector< std::vector<double> > m_Susc;
1576
1577 // Temperature derivative of the conserved charges susceptibility matrix (GeV^-1)
1578 std::vector< std::vector<double> > m_dSuscdT;
1579
1580 // Susceptibility matrix of net-p, net-Q, and net-K
1581 std::vector< std::vector<double> > m_ProxySusc;
1582
1583 // Temperature derivatives
1584 bool m_TemperatureDerivativesCalculated;
1585 // Densities
1586 std::vector<double> m_dndT;
1587 // (Shifted) chemical potentials
1588 std::vector<double> m_dmusdT;
1589 // Primordial mixed susceptibilities
1590 std::vector< std::vector<double> > m_PrimChi2sdT; // GeV^-1
1591
1592 // Cumulants of arbitrary charge calculation
1593 //std::vector< std::vector<double> > m_chi;
1594
1595 // Contains log of possible errors when checking the calculation
1596 std::string m_ValidityLog;
1597
1598 double m_wnSum;
1599
1600 std::string m_TAG;
1601
1602 ThermalModelEnsemble m_Ensemble;
1603 ThermalModelInteraction m_InteractionModel;
1604
1606 virtual double MuShift(int /*id*/) const { return 0.; }
1607
1610 void ConstrainGammaCFromNccbar();
1611
1612 private:
1613 void ResetChemicalPotentials();
1614
1615 double GetDensity(long long PDGID, const std::vector<double> *dens);
1616
1617 class BroydenEquationsChem : public BroydenEquations
1618 {
1619 public:
1620 BroydenEquationsChem(ThermalModelBase *model) : BroydenEquations(), m_THM(model) { m_N = 2; }
1621 std::vector<double> Equations(const std::vector<double> &x);
1622 private:
1623 ThermalModelBase *m_THM;
1624 };
1625
1626 class BroydenJacobianChem : public BroydenJacobian
1627 {
1628 public:
1629 BroydenJacobianChem(ThermalModelBase *model) : BroydenJacobian(), m_THM(model) { }
1630 std::vector<double> Jacobian(const std::vector<double> &x);
1631 private:
1632 ThermalModelBase *m_THM;
1633 };
1634
1635 class BroydenChem : public Broyden
1636 {
1637 public:
1638 BroydenChem(ThermalModelBase *THM, BroydenEquations *eqs = NULL, BroydenJacobian *jaco = NULL) : Broyden(eqs, jaco) { m_THM = THM; }
1639 ~BroydenChem(void) { }
1640 std::vector<double> Solve(const std::vector<double> &x0, BroydenSolutionCriterium *solcrit = NULL, int max_iterations = MAX_ITERS);
1641 private:
1642 ThermalModelBase *m_THM;
1643 };
1644
1645
1646 class BroydenEquationsChemTotals : public BroydenEquations
1647 {
1648 public:
1649 BroydenEquationsChemTotals(const std::vector<int> & vConstr, const std::vector<int> & vType, const std::vector<double> & vTotals, ThermalModelBase *model);// : BroydenEquations(), m_THM(model) { m_N = 3; }
1650 std::vector<double> Equations(const std::vector<double> &x);
1651 private:
1652 std::vector<int> m_Constr;
1653 std::vector<int> m_Type;
1654 std::vector<double> m_Totals;
1655 ThermalModelBase *m_THM;
1656 };
1657
1658 class BroydenJacobianChemTotals : public BroydenJacobian
1659 {
1660 public:
1661 BroydenJacobianChemTotals(const std::vector<int> & vConstr, const std::vector<int> & vType, const std::vector<double> & vTotals, ThermalModelBase *model) : BroydenJacobian(), m_Constr(vConstr), m_Type(vType), m_Totals(vTotals), m_THM(model) { }
1662 std::vector<double> Jacobian(const std::vector<double> &x);
1663 private:
1664 std::vector<int> m_Constr;
1665 std::vector<int> m_Type;
1666 std::vector<double> m_Totals;
1667 ThermalModelBase *m_THM;
1668 };
1669 };
1670
1671} // namespace thermalfist
1672
1673#endif // THERMALMODELBASE_H
Implementation of the generic Broyden's method routines.
map< string, double > params
virtual void CalculateSusceptibilityMatrix()
Calculates the conserved charges susceptibility matrix.
virtual double FullIdealChemicalPotential(int i) const
Chemical potential entering the ideal gas expressions of particle species i.
virtual void FixParametersNoReset()
Method which actually implements ConstrainChemicalPotentialsNoReset() (for backward compatibility).
void SetSoverB(double SB)
The entropy per baryon ratio to be used to constrain the baryon chemical potential.
virtual void CalculateDensitiesGCE()
Calculates the particle densities in a grand-canonical ensemble.
virtual void ChangeTPS(ThermalParticleSystem *TPS)
Change the particle list.
virtual void SetGammaC(double gammaC)
Set the charm quark fugacity factor.
virtual void CalculateParticleChargeCorrelationMatrix()
Calculates the matrix of correlators between primordial (and also final) particle numbers and conserv...
virtual void SetTemperature(double T)
Set the temperature.
virtual void CalculateFluctuations()
Computes the fluctuation observables.
bool UsePartialChemicalEquilibrium()
Whether partial chemical equilibrium with additional chemical potentials is used.
void SetQoverB(double QB)
The electric-to-baryon charge ratio to be used to constrain the electric chemical potential.
virtual void SetRepulsion(int i, int j, double b)
Same as SetVirial() but with a more clear name on what is actually does.
virtual bool SolveChemicalPotentials(double totB=0., double totQ=0., double totS=0., double totC=0., double muBinit=0., double muQinit=0., double muSinit=0., double muCinit=0., bool ConstrMuB=true, bool ConstrMuQ=true, bool ConstrMuS=true, bool ConstrMuC=true)
The procedure which calculates the chemical potentials which reproduce the specified total baryon,...
virtual double TwoParticleSusceptibilityPrimordialByPdg(long long id1, long long id2)
Returns the computed primordial particle number (cross-)susceptibility for particles with pdg codes ...
void SetCanonicalVolumeRadius(double Rc)
Set the canonical correlation system radius.
double RepulsionCoefficient(int i, int j) const
void ConstrainMuB(bool constrain)
virtual std::vector< double > CalculateChargeFluctuations(const std::vector< double > &chgs, int order=4, bool dimensionfull=false)
Calculates fluctuations (diagonal susceptibilities) of an arbitrary "conserved" charge.
virtual void SetVirial(int, int, double)
Set the excluded volume coefficient .
virtual void FillChemicalPotentials()
Sets the chemical potentials of all particles.
virtual void CalculateTemperatureDerivatives()
Computes the temperature derivatives of densities, shifted chemical potentials, and primordial hadron...
virtual void WriteInteractionParameters(const std::string &)
Write the QvdW interaction parameters to a file.
void ConstrainMuC(bool constrain)
void ConstrainChemicalPotentials(bool resetInitialValues=true)
Constrains the chemical potentials by the conservation laws imposed.
virtual void FixParameters()
Method which actually implements ConstrainChemicalPotentials() (for backward compatibility).
virtual double TwoParticleSusceptibilityFinalByPdg(long long id1, long long id2)
Returns the computed final particle number (cross-)susceptibility for particles with pdg codes id1 a...
virtual double TwoParticleSusceptibilityFinal(int i, int j) const
Returns the computed final particle number (cross-)susceptibility for particles with ids i and j....
virtual void SetGammaS(double gammaS)
Set the strange quark fugacity factor.
virtual void SetCharm(int C)
Set the total charm (for canonical ensemble only)
ThermalModelInteraction
Type of interactions included in the HRG model.
@ QvdW
Quantum van der Waals model.
@ MeanField
Mean field model. Not yet fully implemented.
@ DiagonalEV
Diagonal excluded volume model.
@ CrosstermsEV
Crossterms excluded volume model.
virtual double FinalNetParticleChargeSusceptibilityByPdg(long long id1, ConservedCharge::Name chg)
Returns the computed final (after decays) net particle vs conserved charge (cross-)susceptibility fo...
void ConstrainMuQ(bool constrain)
void SetResonanceWidthIntegrationType(ThermalParticle::ResonanceWidthIntegration type)
Set the ThermalParticle::ResonanceWidthIntegration scheme for all particles. Calls the corresponding ...
virtual void CalculateFeeddown()
Calculates the total densities which include feeddown contributions.
virtual double TwoParticleSusceptibilityTemperatureDerivativePrimordial(int i, int j) const
Returns the computed temperature derivative of the primordial particle number (cross-)susceptibility ...
virtual void ReadInteractionParameters(const std::string &)
Reads the QvdW interaction parameters from a file.
void SetUseWidth(bool useWidth)
Sets whether finite resonance widths are used. Deprecated.
virtual double AttractionCoefficient(int, int) const
QvdW mean field attraction coefficient .
virtual double FinalParticleChargeSusceptibilityByPdg(long long id1, ConservedCharge::Name chg)
Returns the computed final (after decays) particle vs conserved charge (cross-)susceptibility for pa...
virtual void DisableBaryonAntiBaryonAttraction()
void UsePartialChemicalEquilibrium(bool usePCE)
Sets whether partial chemical equilibrium with additional chemical potentials is used.
virtual double FinalParticleChargeSusceptibility(int i, ConservedCharge::Name chg) const
Returns the computed final (after decays) particle vs conserved charge (cross-)susceptibility for pa...
virtual void SetChemicalPotentials(const std::vector< double > &chem=std::vector< double >(0))
Sets the chemical potentials of all particles.
void SetOMP(bool openMP)
OpenMP support. Currently not used.
double ChemicalPotential(int i) const
Chemical potential of particle species i.
virtual void SetElectricCharge(int Q)
Set the total electric charge (for canonical ensemble only)
virtual void SetBaryonChemicalPotential(double muB)
Set the baryon chemical potential.
virtual void CalculateTwoParticleCorrelations()
Computes the fluctuations and correlations of the primordial particle numbers.
void ConstrainGammaC(bool constrain)
Sets whether gammaC is constrained from target Nccbar.
virtual double SusceptibilityDimensionfull(ConservedCharge::Name i, ConservedCharge::Name j) const
A 2nd order susceptibility of conserved charges.
void SetNormBratio(bool normBratio)
Whether branching ratios are renormalized to 100%.
void UpdateParameters()
Calls SetParameters() with current m_Parameters.
virtual void SetParameters(const ThermalModelParameters &params)
The thermal parameters.
void SetNccbar(double Nccbar)
The target number of cc-bar pairs to be used to constrain gammaC.
virtual void SetRadius(double)
Set the same excluded volume radius parameter for all species.
virtual void SetElectricChemicalPotential(double muQ)
Set the electric chemical potential.
virtual double PrimordialNetParticleChargeSusceptibilityByPdg(long long id1, ConservedCharge::Name chg)
Returns the computed primordial net particle vs conserved charge (cross-)susceptibility for particle...
virtual double TwoParticleSusceptibilityTemperatureDerivativePrimordialByPdg(long long id1, long long id2)
Returns the computed temperature derivative of the primordial particle number (cross-)susceptibility ...
virtual double NetParticleSusceptibilityFinalByPdg(long long id1, long long id2)
Returns the computed (cross-)susceptibility between final net-particle numbers for pdg codes id1 and...
virtual void SetChemicalPotential(int i, double chem)
Sets the chemical potential of particle species i.
std::string ValidityCheckLog() const
All messaged which occured during the validation procedure in the ValidateCalculation() method.
virtual bool FixChemicalPotentialsThroughDensities(double rhoB=0., double rhoQ=0., double rhoS=0., double rhoC=0., double muBinit=0., double muQinit=0., double muSinit=0., double muCinit=0., bool ConstrMuB=true, bool ConstrMuQ=true, bool ConstrMuS=true, bool ConstrMuC=true)
The procedure which calculates the chemical potentials which reproduce the specified baryon,...
void SetVolume(double Volume)
Sets the system volume.
virtual void ValidateCalculation()
Checks whether issues have occured during the calculation of particle densities in the CalculateDensi...
void SetResonanceWidthShape(ThermalParticle::ResonanceWidthShape shape)
Set the ThermalParticle::ResonanceWidthShape for all particles. Calls the corresponding method in TPS...
int ComponentsNumber() const
Number of different particle species in the list.
virtual void SetBaryonCharge(int B)
Set the total baryon number (for canonical ensemble only)
virtual double VirialCoefficient(int, int) const
Excluded volume coefficient .
virtual void CalculateProxySusceptibilityMatrix()
Calculates the susceptibility matrix of conserved charges proxies.
ThermalModelBase(ThermalParticleSystem *TPS, const ThermalModelParameters &params=ThermalModelParameters())
Construct a new ThermalModelBase object.
virtual double PrimordialParticleChargeSusceptibility(int i, ConservedCharge::Name chg) const
Returns the computed primordial particle vs conserved charge (cross-)susceptibility for particle wit...
virtual void CalculatePrimordialDensities()=0
Calculates the primordial densities of all species.
void SetCanonicalVolume(double Volume)
Set the canonical correlation volume V .
virtual void SetStrangenessChemicalPotential(double muS)
Set the strangeness chemical potential.
bool UseWidth() const
Whether finite resonance widths are considered.
void ConstrainMuS(bool constrain)
virtual double TwoParticleSusceptibilityPrimordial(int i, int j) const
Returns the computed primordial particle number (cross-)susceptibility for particles with ids i and ...
virtual void SetClusterExpansionOrder(int order)
Set the number of terms in the cluster expansion method. Calls the corresponding method in TPS().
virtual void CalculateDensities()
Calculates the primordial and total (after decays) densities of all species.
virtual void SetCalculationType(IdealGasFunctions::QStatsCalculationType type)
Sets the CalculationType() method to evaluate quantum statistics. Calls the corresponding method in T...
virtual void FillVirial(const std::vector< double > &ri=std::vector< double >(0))
Fills the excluded volume coefficients based on the provided radii parameters for all species.
const std::vector< double > & ChemicalPotentials() const
A vector of chemical potentials of all particles.
virtual void SetGammaq(double gammaq)
Set the light quark fugacity factor.
virtual void SetStrangeness(int S)
Set the total strangeness (for canonical ensemble only)
virtual void SetAttraction(int, int, double)
Set the vdW mean field attraction coefficient .
virtual double PrimordialParticleChargeSusceptibilityByPdg(long long id1, ConservedCharge::Name chg)
Returns the computed primordial particle vs conserved charge (cross-)susceptibility for particle wit...
const ThermalModelParameters & Parameters() const
virtual double NetParticleSusceptibilityPrimordialByPdg(long long id1, long long id2)
Returns the computed (cross-)susceptibility between primordial net-particle numbers for pdg codes id...
virtual void SetCharmChemicalPotential(double muC)
Set the charm chemical potential.
virtual void ApplyBaryonAnnihilation(double gammaBbar)
[EXPERIMENTAL] Applies a baryon annihilation toy model to baryon yields and susceptibilities with the...
virtual void SetStatistics(bool stats)
double Volume() const
System volume (fm )
virtual void SetRadius(int, double)
Set the radius parameter for particle species i.
ThermalModelEnsemble
The list of statistical ensembles.
@ SCE
Strangeness-canonical ensemble.
@ GCE
Grand canonical ensemble.
@ CCE
Charm-canonical ensemble.
virtual void CalculateTwoParticleFluctuationsDecays()
Computes particle number correlations and fluctuations for all final-state particles which are marked...
double CanonicalVolume() const
The canonical correlation volume V (fm )
void SetVolumeRadius(double R)
Sets the system radius.
ResonanceWidthIntegration
Treatment of finite resonance widths.
ResonanceWidthShape
Relativistic vs non-relativistic Breit-Wigner shape.
Class containing the particle list.
QStatsCalculationType
Identifies whether quantum statistics are to be computed using the cluster expansion or numerical int...
constexpr double Pi()
Pi constant.
Definition xMath.h:23
The main namespace where all classes and functions of the Thermal-FIST library reside.
Definition CosmicEoS.h:9
Name
Set of all conserved charges considered.
Structure containing all thermal parameters of the model.
Contains some extra mathematical functions used in the code.