ECOGEN 6.0
Evolutive, Compressible, Open, Genuine, Easy, N-phase
Loading...
Searching...
No Matches
Eos.h
Go to the documentation of this file.
1//
2// ,---. ,--, .---. ,--, ,---. .-. .-.
3// | .-' .' .') / .-. ) .' .' | .-' | \| |
4// | `-. | |(_) | | |(_) | | __ | `-. | | |
5// | .-' \ \ | | | | \ \ ( _) | .-' | |\ |
6// | `--. \ `-. \ `-' / \ `-) ) | `--. | | |)|
7// /( __.' \____\ )---' )\____/ /( __.' /( (_)
8// (__) (_) (__) (__) (__)
9// Official webSite: https://code-mphi.github.io/ECOGEN/
10//
11// This file is part of ECOGEN.
12//
13// ECOGEN is the legal property of its developers, whose names
14// are listed in the copyright file included with this source
15// distribution.
16//
17// ECOGEN is free software: you can redistribute it and/or modify
18// it under the terms of the GNU General Public License as published
19// by the Free Software Foundation, either version 3 of the License,
20// or (at your option) any later version.
21//
22// ECOGEN is distributed in the hope that it will be useful,
23// but WITHOUT ANY WARRANTY; without even the implied warranty of
24// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25// GNU General Public License for more details.
26//
27// You should have received a copy of the GNU General Public License
28// along with ECOGEN (file LICENSE).
29// If not, see <http://www.gnu.org/licenses/>.
30
31#ifndef EOS_H
32#define EOS_H
33
34#include "../Maths/Coord.h"
35#include "../Maths/Tensor.h"
36#include "../Errors.h"
38
49
50class Eos; //Predeclaration of class to include following .h
51
52#include "../Tools.h"
53
61class Eos
62{
63 public:
64 Eos(int& number);
65 virtual ~Eos();
66
67 //Constant methods
68 const std::string& getName() const { return m_name; };
70 virtual TypeEOS getType() const { return TypeEOS::IG; };
73 const int& getNumber() const { return m_number; };
74
78
83 double computeEnthalpy(const double& density, const double& pressure) const;
90 double
91 computeTotalEnthalpy(const double& density, const double& pressure, const double& velX, const double& velY = 0., const double& velZ = 0.) const;
98 double computeTotalEnthalpy(const double& density, const double& pressure, const Coord& velocity) const;
101 const double& getMu() const { return m_mu; };
104 const double& getLambda() const { return m_lambda; };
107 void assignEpsilonForAlphaNull(bool alphaNull) const;
108
109 //Gereral methods for all EOS
110
111 //Virtual methods for child classes
113 virtual void assignParametersEos(std::string name, std::vector<double> parametersEos) = 0;
115 virtual double computeTemperature(const double& /*density*/, const double& /*pressure or energy*/) const
116 {
117 Errors::errorMessage("computeTemperature not yet programmed for EOS : " + m_name);
118 return 0.;
119 };
120
121 virtual double computeEnergy(const double& /*density*/, const double& /*pressure or temperature*/) const
122 {
123 Errors::errorMessage("computeEnergy not yet programmed for EOS : " + m_name);
124 return 0.;
125 };
126
127 virtual double computeEnergyFromDensityAndTemperature(const double& /*density*/, const double& /*temperature*/) const
128 {
129 Errors::errorMessage("computeEnergyFromDensityAndTemperature not yet programmed for EOS : " + m_name);
130 return 0.;
131 };
132
133 virtual double computePressure(const double& /*density*/, const double& /*energy or temperature*/) const
134 {
135 Errors::errorMessage("computePressure not yet programmed for EOS : " + m_name);
136 return 0.;
137 };
138
139 virtual double computeDensity(const double& /*pressure*/, const double& /*temperature*/) const
140 {
141 Errors::errorMessage("computeDensity not yet programmed for EOS : " + m_name);
142 return 0.;
143 };
144
145 virtual double computeSoundSpeed(const double& /*density*/, const double& /*pressure*/) const
146 {
147 Errors::errorMessage("computeSoundSpeed not yet programmed for EOS : " + m_name);
148 return 0.;
149 };
150
151 virtual double computeSquareSoundSpeed(const double& /*density*/, const double& /*entropy or energy*/) const
152 {
153 Errors::errorMessage("computeSquareSoundSpeed not yet programmed for EOS : " + m_name);
154 return 0.;
155 };
156
157 virtual double computeInterfaceSoundSpeed(const double& /*density*/, const double& /*interfacePressure*/, const double& /*pressure*/) const
158 {
159 Errors::errorMessage("computeInterfaceSoundSpeed not yet programmed for EOS : " + m_name);
160 return 0.;
161 };
162
163 virtual double computeAcousticImpedance(const double& /*density*/, const double& /*pressure*/) const
164 {
165 Errors::errorMessage("computeAcousticImpedance not yet programmed for EOS : " + m_name);
166 return 0.;
167 };
168
169 virtual double
170 computeDensityTimesInterfaceSoundSpeedSquare(const double& /*density*/, const double& /*interfacePressure*/, const double& /*pressure*/) const
171 {
172 Errors::errorMessage("computeDensityTimesInterfaceSoundSpeedSquare not yet programmed for EOS : " + m_name);
173 return 0.;
174 };
175
176 virtual double computeEntropy(const double& /*temperature*/, const double& /*pressure*/) const
177 {
178 Errors::errorMessage("computeEntropy not yet programmed for EOS : " + m_name);
179 return 0.;
180 };
181
182 virtual double computeEntropyFromDensityAndEnergy(const double& /*density*/, const double& /*energy*/) const
183 {
184 Errors::errorMessage("computeEntropyFromDensityAndEnergy not yet programmed for EOS : " + m_name);
185 return 0.;
186 };
187
188 virtual double computeEntropyFromDensityAndPressure(const double& /*density*/, const double& /*pressure*/) const
189 {
190 Errors::errorMessage("computeEntropyFromDensityAndPressure not yet programmed for EOS : " + m_name);
191 return 0.;
192 };
193
194 virtual double computeEntropyFromDensityAndTemperature(const double& /*density*/, const double& /*temperature*/) const
195 {
196 Errors::errorMessage("computeEntropyFromDensityAndTemperature not yet programmed for EOS : " + m_name);
197 return 0.;
198 };
199
200 virtual double computePressureFromDensityAndEntropy(const double& /*density*/, const double& /*entropy*/) const
201 {
202 Errors::errorMessage("computePressureFromDensityAndEntropy not yet programmed for EOS : " + m_name);
203 return 0.;
204 };
205
206 virtual double computePressureFromDensityAndTemperature(const double& /*density*/, const double& /*temperature*/) const
207 {
208 Errors::errorMessage("computePressureFromDensityAndTemperature not yet programmed for EOS : " + m_name);
209 return 0.;
210 };
211
212 virtual double computePressureIsentropic(const double& /*initialPressure*/, const double& /*initialDensity*/, const double& /*finalDensity*/) const
213 {
214 Errors::errorMessage("computePressureIsentropic not yet programmed for EOS : " + m_name);
215 return 0.;
216 };
217
218 virtual double computePressureHugoniot(const double& /*initialPressure*/, const double& /*initialDensity*/, const double& /*finalDensity*/) const
219 {
220 Errors::errorMessage("computePressureHugoniot not yet programmed for EOS : " + m_name);
221 return 0.;
222 };
223
224 virtual double computeDensityIsentropic(const double& /*initialPressure*/,
225 const double& /*initialDensity*/,
226 const double& /*finalPressure*/,
227 double* /*drhodp*/ = 0) const
228 {
229 Errors::errorMessage("computeDensityIsentropic not yet programmed for EOS : " + m_name);
230 return 0.;
231 };
232
233 virtual double computeDensityHugoniot(const double& /*initialPressure*/,
234 const double& /*initialDensity*/,
235 const double& /*finalPressure*/,
236 double* /*drhodp*/ = 0) const
237 {
238 Errors::errorMessage("computeDensityHugoniot not yet programmed for EOS : " + m_name);
239 return 0.;
240 };
241
242 virtual double computeDensityPfinal(const double& /*initialPressure*/,
243 const double& /*initialDensity*/,
244 const double& /*finalPressure*/,
245 double* /*drhodp*/ = 0) const
246 {
247 Errors::errorMessage("computeDensityPfinal not yet programmed for EOS : " + m_name);
248 return 0.;
249 };
250
252 virtual double computeEnthalpyIsentropic(const double& /*initialPressure*/,
253 const double& /*initialDensity*/,
254 const double& /*finalPressure*/,
255 double* /*dhdp*/ = 0) const
256 {
257 Errors::errorMessage("computeEnthalpyIsentropic not yet programmed for EOS : " + m_name);
258 return 0.;
259 };
260
261 virtual double
262 computeDensitySaturation(const double& /*pressure*/, const double& /*Tsat*/, const double& /*dTsatdP*/, double* /*drhodp*/ = 0) const
263 {
264 Errors::errorMessage("computeDensitySaturation not yet programmed for EOS : " + m_name);
265 return 0.;
266 };
267
268 virtual double
269 computeDensityEnergySaturation(const double& /*pressure*/, const double& /*rho*/, const double& /*drhodp*/, double* /*drhoedp*/ = 0) const
270 {
271 Errors::errorMessage("computeDensityEnergySaturation not available for EOS : " + m_name);
272 return 0.;
273 };
274
275 virtual void
276 sendSpecialMixtureEos(double& /*gamPinfOverGamMinusOne*/, double& /*eRef*/, double& /*oneOverGamMinusOne*/, double& /*covolume*/) const
277 {
278 Errors::errorMessage("sendSpecialMixtureEos not yet programmed for EOS : " + m_name);
279 };
280
281 virtual double vfpfh(const double& /*pressure*/, const double& /*enthalpy*/) const
282 {
283 Errors::errorMessage("vfpfh not yet programmed for EOS : " + m_name);
284 return 0.;
285 };
286
287 //Partial derivatives
289 virtual double dvdpch(const double& /*pressure*/, const double& /*enthalpy*/) const
290 {
291 Errors::errorMessage("dvdpch not yet programmed for EOS : " + m_name);
292 return 0.;
293 };
294
295 virtual double dvdhcp(const double& /*pressure*/) const
296 {
297 Errors::errorMessage("dvdhcp not yet programmed for EOS : " + m_name);
298 return 0.;
299 };
300
301 virtual double drhodpcT(const double& /*pressure*/, const double& /*temperature*/) const
302 {
303 Errors::errorMessage("drhodpcT not yet programmed for EOS : " + m_name);
304 return 0.;
305 };
306
307 virtual double dedrho(const double& /*density*/, const double& /*temperature*/) const
308 {
309 Errors::errorMessage("dedrho not yet programmed for EOS : " + m_name);
310 return 0.;
311 };
312
313 virtual double dedrhoSecond(const double& /*density*/, const double& /*temperature*/) const
314 {
315 Errors::errorMessage("dedrhoSecond not yet programmed for EOS : " + m_name);
316 return 0.;
317 };
318
319 virtual double kappa(const double& /*density*/) const
320 {
321 Errors::errorMessage("kappa not yet programmed for EOS : " + m_name);
322 return 0.;
323 };
324
325 virtual double kappaPrime(const double& /*density*/) const
326 {
327 Errors::errorMessage("kappaPrime not yet programmed for EOS : " + m_name);
328 return 0.;
329 };
330
331 virtual double kappaSecond(const double& /*density*/) const
332 {
333 Errors::errorMessage("kappaSecond not yet programmed for EOS : " + m_name);
334 return 0.;
335 };
336
337 //Checking..
338 virtual void verifyPressure(const double& /*pressure*/, const std::string& /*message*/ = " ") const
339 {
340 Errors::errorMessage("verifyPressure not yet programmed Eos : " + m_name);
341 };
342
343 virtual void verifyAndModifyPressure(double& /*pressure*/) const
344 {
345 Errors::errorMessage("verifyAndModifyPressure not yet programmed Eos : " + m_name);
346 };
347
348 virtual void verifyAndCorrectDensityMax(const double& /*mass*/, double& /*alpha*/, double& /*density*/) const
349 {
350 Errors::errorMessage("verifyAndCorrectDensityMax not yet programmed Eos : " + m_name);
351 };
352
353 virtual void verifyAndCorrectDensityMax(double& /*density*/) const
354 {
355 Errors::errorMessage("verifyAndCorrectDensityMax not yet programmed Eos : " + m_name);
356 };
357
358 //Get
360 virtual const double& getGamma() const { return Errors::defaultDouble; };
362 virtual const double& getPInf() const { return Errors::defaultDouble; };
364 virtual const double& getCv() const { return Errors::defaultDouble; };
366 virtual const double& getERef() const { return Errors::defaultDouble; };
368 virtual const double& getSRef() const { return Errors::defaultDouble; };
369
370 protected:
372 std::string m_name;
373
374 double m_mu;
375 double m_lambda;
376};
377
378extern double
380
381#endif // EOS_H
Coord velocity
Definition Coord.cpp:34
double epsilonAlphaNull
Epsilon value to avoid division by 0 when alpha = 0 is activated. If alpha = 0 desactivated,...
Definition Eos.cpp:35
TypeEOS
Enumeration for the type of EOS (IG: ideal gas, SG: stiffened gas, NASG: Noble-Abel stiffened gas,...
Definition Eos.h:41
@ NASG
Definition Eos.h:44
@ Polynomial
Definition Eos.h:46
@ VDW
Definition Eos.h:45
@ NLS
Definition Eos.h:47
@ SG
Definition Eos.h:43
@ IG
Definition Eos.h:42
@ density
Definition Tools.h:166
@ pressure
Definition Tools.h:165
Class for a coordinate system object such as coordinates of the vertex or a vector.
Definition Coord.h:43
General class for Equation of State (EOS).
Definition Eos.h:62
Eos(int &number)
Definition Eos.cpp:39
virtual double computeDensityHugoniot(const double &, const double &, const double &, double *=0) const
See derived classes.
Definition Eos.h:233
double computeTotalEnthalpy(const double &density, const double &pressure, const double &velX, const double &velY=0., const double &velZ=0.) const
Compute the total enthalpy of the phase.
Definition Eos.cpp:70
virtual const double & getPInf() const
See derived classes.
Definition Eos.h:362
virtual double computeEntropyFromDensityAndEnergy(const double &, const double &) const
See derived classes.
Definition Eos.h:182
virtual const double & getCv() const
See derived classes.
Definition Eos.h:364
virtual double dedrho(const double &, const double &) const
See derived classes.
Definition Eos.h:307
const double & getLambda() const
get the thermal conductivity of the fluid return (Unit: W/(m.K)).
Definition Eos.h:104
const std::string & getName() const
Definition Eos.h:68
virtual double kappaPrime(const double &) const
See derived classes.
Definition Eos.h:325
virtual double computePressureIsentropic(const double &, const double &, const double &) const
See derived classes.
Definition Eos.h:212
virtual double computeDensityPfinal(const double &, const double &, const double &, double *=0) const
See derived classes.
Definition Eos.h:242
virtual double computeEntropyFromDensityAndTemperature(const double &, const double &) const
See derived classes.
Definition Eos.h:194
void assignEpsilonForAlphaNull(bool alphaNull) const
Assign the epsilonAlphaNull value for alphaNull option (alpha = 0 => epsilonAlphaNull !...
Definition Eos.cpp:84
virtual const double & getSRef() const
See derived classes.
Definition Eos.h:368
virtual double computeEnergyFromDensityAndTemperature(const double &, const double &) const
See derived classes.
Definition Eos.h:127
virtual double dvdpch(const double &, const double &) const
See derived classes.
Definition Eos.h:289
virtual double computeEnergy(const double &, const double &) const
See derived classes.
Definition Eos.h:121
virtual void assignParametersEos(std::string name, std::vector< double > parametersEos)=0
See derived classes.
virtual double computeDensityIsentropic(const double &, const double &, const double &, double *=0) const
See derived classes.
Definition Eos.h:224
double m_lambda
Thermal conductivity (W/(m.K)).
Definition Eos.h:375
virtual const double & getGamma() const
See derived classes.
Definition Eos.h:360
virtual double dvdhcp(const double &) const
See derived classes.
Definition Eos.h:295
virtual double computePressureFromDensityAndTemperature(const double &, const double &) const
See derived classes.
Definition Eos.h:206
const double & getMu() const
Return the dynamic viscosity of the fluid return (Unit: Pa.s).
Definition Eos.h:101
virtual double computeDensityTimesInterfaceSoundSpeedSquare(const double &, const double &, const double &) const
See derived classes.
Definition Eos.h:170
virtual ~Eos()
Definition Eos.cpp:43
std::string m_name
Name of the equation of state.
Definition Eos.h:372
virtual double computeSoundSpeed(const double &, const double &) const
See derived classes.
Definition Eos.h:145
virtual double computeSquareSoundSpeed(const double &, const double &) const
See derived classes.
Definition Eos.h:151
int m_number
Corresponding number of the equation of state.
Definition Eos.h:371
virtual void verifyPressure(const double &, const std::string &=" ") const
Definition Eos.h:338
virtual double kappaSecond(const double &) const
See derived classes.
Definition Eos.h:331
virtual void verifyAndModifyPressure(double &) const
See derived classes.
Definition Eos.h:343
virtual void verifyAndCorrectDensityMax(const double &, double &, double &) const
See derived classes.
Definition Eos.h:348
void readPhysicalParameters(tinyxml2::XMLNode *element)
Read physical parameters (viscosity, thermal conductivity....).
Definition Eos.cpp:47
virtual double computeTemperature(const double &, const double &) const
See derived classes.
Definition Eos.h:115
virtual const double & getERef() const
See derived classes.
Definition Eos.h:366
double m_mu
Dynamic viscosity (kg/m/s or Pa.s).
Definition Eos.h:374
virtual double computePressure(const double &, const double &) const
See derived classes.
Definition Eos.h:133
virtual double computeInterfaceSoundSpeed(const double &, const double &, const double &) const
See derived classes.
Definition Eos.h:157
virtual double computeEntropyFromDensityAndPressure(const double &, const double &) const
See derived classes.
Definition Eos.h:188
virtual double computeDensityEnergySaturation(const double &, const double &, const double &, double *=0) const
See derived classes.
Definition Eos.h:269
virtual double computeAcousticImpedance(const double &, const double &) const
See derived classes.
Definition Eos.h:163
double computeEnthalpy(const double &density, const double &pressure) const
Compute the enthalpy of the phase.
Definition Eos.cpp:63
virtual void sendSpecialMixtureEos(double &, double &, double &, double &) const
See derived classes.
Definition Eos.h:276
const int & getNumber() const
Return the number associated to the EOS.
Definition Eos.h:73
virtual double computePressureFromDensityAndEntropy(const double &, const double &) const
See derived classes.
Definition Eos.h:200
virtual double dedrhoSecond(const double &, const double &) const
See derived classes.
Definition Eos.h:313
virtual double vfpfh(const double &, const double &) const
See derived classes.
Definition Eos.h:281
virtual void verifyAndCorrectDensityMax(double &) const
See derived classes.
Definition Eos.h:353
virtual double computeEnthalpyIsentropic(const double &, const double &, const double &, double *=0) const
See derived classes.
Definition Eos.h:252
virtual double computePressureHugoniot(const double &, const double &, const double &) const
See derived classes.
Definition Eos.h:218
virtual double computeEntropy(const double &, const double &) const
See derived classes.
Definition Eos.h:176
virtual double computeDensity(const double &, const double &) const
See derived classes.
Definition Eos.h:139
virtual TypeEOS getType() const
See derived classes.
Definition Eos.h:70
virtual double kappa(const double &) const
See derived classes.
Definition Eos.h:319
virtual double drhodpcT(const double &, const double &) const
See derived classes.
Definition Eos.h:301
virtual double computeDensitySaturation(const double &, const double &, const double &, double *=0) const
See derived classes.
Definition Eos.h:262
static void errorMessage(const std::string &message_)
Definition Errors.cpp:56
static constexpr double defaultDouble
Definition Errors.h:99
Definition tinyxml2.h:636