6 #include "CdmathException.hxx"
8 /*! \class Fluide Fluide.hxx "Fluide.hxx"
9 * \brief Fluid thermodynamics properties
10 * \details Provides pressure, density, temperature, internal energy, enthalpy, viscosity and conductivity
17 double _mu, _lambda,_Cv, _Cp,_Tref,_gamma, _p0, _q,_dragCoeff;
19 Fluide(){_mu=0; _lambda=0;_Cv=0;_Cp=0;_Tref=0;_dragCoeff=0;_gamma=0; _p0=0; _q=0;}
22 //Stiffened gas equation of state
23 double getPressure(double rhoe,const double rho) {
24 return (_gamma - 1) * (rhoe - rho*_q) - _gamma*_p0;
26 double getPressureFromEnthalpy(double h,const double rho) {
27 return (_gamma - 1)/_gamma * rho * (h - _q) - _p0;
29 /*For the newton scheme in the IsothermalTwoFluid model */
30 double getPressureDerivativeRhoE() { return _gamma - 1; }
31 double getDensityFromEnthalpy(double p, double h)
33 return _gamma*(p+_p0)/((_gamma-1)*(h-_q));
35 double vitesseSonEnthalpie(double h) { return sqrt((_gamma-1)*h); };
36 double vitesseSonTemperature(const double T, const double rho)
38 double h= getEnthalpy(T,rho);
39 return vitesseSonEnthalpie(h);
42 double getViscosity(double T) {return _mu;};
43 double getConductivity(double T) {return _lambda;};
44 double getDragCoeffs(double T) { return _dragCoeff;};
45 void setViscosity(double mu) { _mu=mu;};
46 void setConductivity(double lambda) { _lambda= lambda;};
47 void setDragCoeffs(double dragCoeff) {_dragCoeff=dragCoeff;};
48 //return constants gamma, cp, cv, p0, q
49 double constante(string name)
53 else if (name == "cv"||name == "Cv")
55 else if (name == "cp"||name == "Cp")
62 throw CdmathException("Unknown constant: "+name);
64 virtual double getDensity(double p, double T)=0;
65 virtual double getTemperatureFromPressure(const double p, const double rho)=0;
66 virtual double getTemperatureFromEnthalpy(const double h, const double rho)=0;
67 virtual double getInternalEnergy(double T, double rho)=0;
68 virtual double getEnthalpy(double T, double rho)=0;
72 // A standard stiffened gas class
74 /*! \class StiffenedGas Fluide.hxx "Fluide.hxx"
75 * \brief Class implementing a standard stiffened gas law between pressure, density and internal energy
78 class StiffenedGas:public Fluide{
80 double _e_ref;//Stiffened gas law : P=(gamma - 1) * rho e(T) - _gamma*_p0
82 StiffenedGas():Fluide(){_e_ref=0;};
84 StiffenedGas( double gamma, double cv, double T_ref, double e_ref);
85 //Stiffened gas law fitting reference pressure, density and sound speed
86 StiffenedGas(double rho_ref, double p_ref, double T_ref, double e_ref, double soundSpeed_ref, double heatCap_ref);
88 double getInternalEnergy(double T, double rho=0);
89 double getEnthalpy(double T, double rho);
90 double getTemperatureFromPressure(double p, double rho);
91 double getTemperatureFromEnthalpy(const double h, const double rho);
92 double getDensity(double p, double T);
94 // Functions used to compute the Roe matrix for the five equation model (Kieu)
95 /* get differential of the density rho = rho(P,e)
96 * wrt the pressure (const e) wrt the internal energy (const P) */
97 double getJumpDensPress(const double e_l, const double e_r);
98 double getJumpDensInternalEnergy(const double p_l,const double p_r,const double e_l,const double e_r);
99 double getJumpInternalEnergyTemperature();
100 double getDiffDensPress(const double e);
101 double getDiffDensInternalEnergy(const double p,const double e);
102 double getDiffInternalEnergyTemperature();
103 /* get differential of the density rho = rho(P,h)
104 * wrt the pressure (const h) wrt the enthalpy (const P) */
105 double getDiffDensEnthalpyPressconstant(const double p, const double h);
106 double getDiffDensPressEnthalpyconstant(const double h);
109 // S. Dellacherie stiffened gas class
111 /*! \class StiffenedGasDellacherie Fluide.hxx "Fluide.hxx"
112 * \brief Class implementing a particular stiffened gas law including saturation properties
115 class StiffenedGasDellacherie:public Fluide{
117 double _h_ref;//Stiffened gas law according to S. Dellacherie : P=(gamma - 1) * rho (e(T)-q) - _gamma*_p0
119 StiffenedGasDellacherie():Fluide(){_h_ref=0;};
120 /* Loi des gaz raidis avec coefficients imposés suivant S. Dellacherie*/
121 StiffenedGasDellacherie( double gamma, double p0, double q, double cv);
123 double getInternalEnergy(double T, double rho);
124 double getEnthalpy(double T, double rho=0);
125 double getTemperatureFromPressure(double p, double rho);
126 double getTemperatureFromEnthalpy(const double h, const double rho=0);
127 double getDensity(double p, double T);