Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:19:15

0001 #pragma once
0002 #include <cmath>
0003 #include <string>
0004 
0005 class TGraph;
0006 
0007 // NOTATIONS:
0008 //  e = energy density (local rest frame), [GeV/fm^3]
0009 //  p =  equilibrium pressure, [GeV/fm^3]
0010 // nb =   baryon charge density [1/fm^3]
0011 // nq = electric charge density [1/fm^3]
0012 // ns =  strange charge density [1/fm^3]
0013 // s  = entropy density [1/fm^3]
0014 // T  = temperature  [GeV]
0015 // mub = baryon chemical potential [GeV]
0016 // muq = electric chemical potential [GeV]
0017 // mus = strange chemical potential [GeV]
0018 
0019 // abstract EoS class.
0020 // actual EoSes are implemented in derived classes
0021 class EoS {
0022  public:
0023   virtual ~EoS() {}
0024   // eos() gets all EoS relations together:
0025   // {p,T,mu_b,mu_q,mu_s}={p,T,mu_b,mu_q,mu_s}(e,n_b,n_q,n_s)
0026   virtual void eos(double e, double nb, double nq, double ns, double &T,
0027                    double &mub, double &muq, double &mus, double &p) = 0;
0028   // gets only pressure : p=p(e,n_b,n_q,n_s)
0029   virtual double p(double e, double nb, double ns, double nq) = 0;
0030   // gets entropy density
0031   double s(double e, double nb, double nq, double ns);
0032   // speed of sound squared: this variant is only used in
0033   // HLLE solver, where the optimal value is 1/3
0034   inline double cs2(void) { return 1. / 3.; }
0035   inline double cs(void) { return sqrt(1. / 3.); }
0036   // speed of sound squared as a function of energy density
0037   virtual inline double cs2(double e) { return 1. / 3.; }
0038   ;
0039 };
0040 
0041 // EoS class implementing two variants:
0042 // 1) "SIMPLE": EoS for ultrarelativistic maseless gas
0043 // 2) "TABLE" : EoS p=p(e) from a table
0044 // each variant is enabled by compiling with -D SIMPLE / -D TABLE
0045 class EoSs : public EoS {
0046  private:
0047   TGraph *gp, *gT, *gmu;
0048 
0049  public:
0050   EoSs(std::string fname, int ncols);
0051   ~EoSs();
0052 
0053   virtual inline void eos(double e, double nb, double nq, double ns, double &T,
0054                           double &mub, double &muq, double &mus, double &_p) {
0055     _p = p(e);
0056     T = t(e);
0057     mub = muq = mus = 0.;
0058   }
0059   virtual inline double p(double e, double nb, double ns, double nq) {
0060     return p(e);
0061   }
0062 
0063   double p(double e);
0064   double dpe(double e);
0065   double t(double e);
0066   double mu(double e);
0067 
0068   virtual double cs2(double e) { return dpe(e); }
0069   // virtual double cs(double e) { return sqrt(dpe(e)) ; }
0070 };