An example of calculating various thermodynamic quantities at fixed T and \(\mu_B\).
For each specified value of a \(T-\mu_B\) pair does the following.
#include <string.h>
#include <fstream>
#include <iostream>
#include <iomanip>
#include <ctime>
#include <cstdio>
#include "ThermalFISTConfig.h"
using namespace std;
#ifdef ThermalFIST_USENAMESPACE
#endif
int main(
int argc,
char *argv[])
{
int ModelType = 1;
if (argc > 1)
ModelType = atoi(argv[1]);
std::string prefix = "QvdW-HRG";
if (ModelType != 1)
prefix = "IdealHRG";
vector<double> Tvalues, muvalues;
Tvalues.push_back(0.100); muvalues.push_back(0.600);
Tvalues.push_back(0.130); muvalues.push_back(0.500);
Tvalues.push_back(0.160); muvalues.push_back(0.000);
if (ModelType == 1)
{
double a = 0.329;
double b = 3.42;
for (int i1 = 0; i1 < model->TPS()->Particles().size(); ++i1) {
for (int i2 = 0; i2 < model->TPS()->Particles().size(); ++i2) {
if (!(B1 * B2 > 0)) {
continue;
}
else {
}
}
}
}
else {
}
printf("%15s%15s%15s%15s%15s%15s%15s%15s%15s%15s%15s%15s%15s%15s%15s%15s%15s%15s\n",
"T[GeV]", "muB[GeV]",
"P[GeV/fm3]", "e[GeV/fm3]", "s[fm-3]",
"<K+>", "<pi+>", "<K+>/<pi+>",
"w[K+]", "w[pi+]",
"<N->", "w[N-]",
"chi3B/chi2B", "chi4B/chi2B",
"chi3Q/chi2Q", "chi4Q/chi2Q",
"chi3S/chi2S", "chi4S/chi2S");
std::string filename = prefix + ".CalculationTmu.dat";
FILE *f = fopen(filename.c_str(), "w");
fprintf(f, "%15s%15s%15s%15s%15s%15s%15s%15s%15s%15s%15s%15s%15s%15s%15s%15s%15s%15s\n",
"T[GeV]", "muB[GeV]",
"P[GeV/fm3]", "e[GeV/fm3]", "s[fm-3]",
"<K+>", "<pi+>", "<K+>/<pi+>",
"w[K+]", "w[pi+]",
"<N->", "w[N-]",
"chi3B/chi2B", "chi4B/chi2B",
"chi3Q/chi2Q", "chi4Q/chi2Q",
"chi3S/chi2S", "chi4S/chi2S");
for (int i = 0; i < Tvalues.size(); ++i) {
double T = Tvalues[i];
double muB = muvalues[i];
double p = model->CalculatePressure();
double e = model->CalculateEnergyDensity();
double s = model->CalculateEntropyDensity();
double wKplus = model->ScaledVarianceTotal( model->TPS()->PdgToId(321) );
double wpiplus = model->ScaledVarianceTotal( model->TPS()->PdgToId(211) );
double Nch = model->ChargedMultiplicityFinal(0);
double Nplus = model->ChargedMultiplicityFinal(1);
double Nminus = model->ChargedMultiplicityFinal(2);
double wNch = model->ChargedScaledVarianceFinal(0);
double wNplus = model->ChargedScaledVarianceFinal(1);
double wNminus = model->ChargedScaledVarianceFinal(2);
vector<double> chargesB(model->Densities().size()), chargesQ(model->Densities().size()), chargesS(model->Densities().size());
vector<double> chchis;
for (int i = 0; i < model->TPS()->Particles().size(); ++i) {
chargesB[i] = model->TPS()->Particles()[i].BaryonCharge();
}
double chi2B = chchis[1];
double chi3B = chchis[2];
double chi4B = chchis[3];
for (int i = 0; i < model->TPS()->Particles().size(); ++i) {
chargesQ[i] = model->TPS()->Particles()[i].ElectricCharge();
}
double chi2Q = chchis[1];
double chi3Q = chchis[2];
double chi4Q = chchis[3];
for (int i = 0; i < model->TPS()->Particles().size(); ++i) {
chargesS[i] = model->TPS()->Particles()[i].Strangeness();
}
double chi2S = chchis[1];
double chi3S = chchis[2];
double chi4S = chchis[3];
printf("%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf\n",
T,
muB,
p,
e,
s,
yieldKplus,
yieldpiplus,
yieldKplus/yieldpiplus,
wKplus,
wpiplus,
Nminus,
wNminus,
chi3B / chi2B,
chi4B / chi2B,
chi3Q / chi2Q,
chi4Q / chi2Q,
chi3S / chi2S,
chi4S / chi2S);
fprintf(f, "%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf%15lf\n",
T,
muB,
p,
e,
s,
yieldKplus,
yieldpiplus,
yieldKplus / yieldpiplus,
wKplus,
wpiplus,
Nminus,
wNminus,
chi3B / chi2B,
chi4B / chi2B,
chi3Q / chi2Q,
chi4Q / chi2Q,
chi3S / chi2S,
chi4S / chi2S);
}
fclose(f);
delete model;
return 0;
}
int main(int argc, char *argv[])
Abstract base class for an HRG model implementation.
virtual void SetTemperature(double T)
Set the temperature.
virtual void CalculateFluctuations()
Computes the fluctuation observables.
void SetQoverB(double QB)
The electric-to-baryon charge ratio to be used to constrain the electric chemical potential.
bool ConstrainMuS() const
bool ConstrainMuQ() const
virtual void SetVirial(int, int, double)
Set the excluded volume coefficient .
virtual void FixParameters()
Method which actually implements ConstrainChemicalPotentials() (for backward compatibility).
virtual void SetGammaS(double gammaS)
Set the strange quark fugacity factor.
void SetUseWidth(bool useWidth)
Sets whether finite resonance widths are used. Deprecated.
virtual std::vector< double > CalculateChargeFluctuations(const std::vector< double > &chgs, int order=4)
Calculates fluctuations (diagonal susceptibilities) of an arbitrary "conserved" charge.
virtual void SetBaryonChemicalPotential(double muB)
Set the baryon chemical potential.
virtual void CalculateDensities()
Calculates the primordial and total (after decays) densities of all species.
virtual void SetGammaq(double gammaq)
Set the light quark fugacity factor.
virtual void SetAttraction(int, int, double)
Set the vdW mean field attraction coefficient .
virtual void SetStatistics(bool stats)
double Volume() const
System volume (fm )
void SetVolumeRadius(double R)
Sets the system radius.
Class implementing the Ideal HRG model.
Class containing all information about a particle specie.
int BaryonCharge() const
Particle's baryon number.
Class containing the particle list.
The main namespace where all classes and functions of the Thermal-FIST library reside.
ThermalModelVDW ThermalModelVDWFull
For backward compatibility.
@ StabilityFlag
Feeddown from all particles marked as unstable.