ECOGEN 6.0
Evolutive, Compressible, Open, Genuine, Easy, N-phase
Loading...
Searching...
No Matches
Phase.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 PHASE_H
32#define PHASE_H
33
34#include <fstream>
35#include "../Errors.h"
36#include "../Eos/Eos.h"
37#include "../Maths/Coord.h"
38#include "../Maths/Tensor.h"
41#include "../Tools.h"
42
46class Phase
47{
48 public:
49 Phase();
50 virtual ~Phase();
53 void printPhase(std::ofstream& fileStream) const;
56 virtual void allocateAndCopyPhase(Phase** /*vecPhase*/) { Errors::errorMessage("allocateAndCopyPhase not available for requested phase type"); };
59 virtual void copyPhase(Phase& /*phase*/) { Errors::errorMessage("copyPhase not available for requested phase type"); };
63 virtual void extendedCalculusPhase(const Coord& /*velocity*/ = Errors::defaultDouble)
64 {
65 Errors::errorMessage("extendedCalculusPhase not available for requested phase type");
66 };
67
68 virtual void computeMassFraction(const double& /*density*/)
69 {
70 Errors::errorMessage("computeMassFraction not available for requested phase type");
71 };
72
73 virtual void localProjection(const Coord& /*normal*/, const Coord& /*tangent*/, const Coord& /*binormal*/)
74 {
75 Errors::errorMessage("projection not available for requested phase type");
76 };
77 virtual void reverseProjection(const Coord& /*normal*/, const Coord& /*tangent*/, const Coord& /*binormal*/)
78 {
79 Errors::errorMessage("reverseProjection not available for requested phase type");
80 };
81
82 //Specific methods for data printing
83 //----------------------------------
84 virtual int getNumberScalars() const
85 {
86 Errors::errorMessage("getNumberScalars not available for requested phase type");
87 return 0;
88 };
89 virtual int getNumberVectors() const
90 {
91 Errors::errorMessage("getNumberVectors not available for requested phase type");
92 return 0;
93 };
94 virtual double returnScalar(const int& /*numVar*/) const
95 {
96 Errors::errorMessage("returnScalar not available for requested phase type");
97 return 0.;
98 };
99 virtual Coord returnVector(const int& /*numVar*/) const
100 {
101 Errors::errorMessage("returnVector not available for requested phase type");
102 return 0;
103 };
104 virtual std::string returnNameScalar(const int& /*numVar*/) const
105 {
106 Errors::errorMessage("returnNameScalar not available for requested phase type");
107 return std::string("");
108 };
109 virtual std::string returnNameVector(const int& /*numVar*/) const
110 {
111 Errors::errorMessage("returnNameVector not available for requested phase type");
112 return std::string("");
113 };
114
115 //Specific method for reading from file
116 //-------------------------------------
117 virtual void setScalar(const int& /*numVar*/, const double& /*value*/)
118 {
119 Errors::errorMessage("setScalar not available for requested phase type");
120 };
121 virtual void setVector(const int& /*numVar*/, const Coord& /*value*/)
122 {
123 Errors::errorMessage("setVector not available for requested phase type");
124 };
125
126 //Specific methods for parallel computing
127 //---------------------------------------
129 {
130 Errors::errorMessage("numberOfTransmittedVariables not available for requested phase type");
131 return 0;
132 };
133 virtual void fillBuffer(double* /*buffer*/, int& /*counter*/) const
134 {
135 Errors::errorMessage("fillBuffer not available for requested phase type");
136 };
137 virtual void fillBuffer(std::vector<double>& /*dataToSend*/) const { Errors::errorMessage("fillBuffer not available for requested phase type"); };
138 virtual void getBuffer(double* /*buffer*/, int& /*counter*/, Eos** /*eos*/)
139 {
140 Errors::errorMessage("getBuffer not available for requested phase type");
141 };
142 virtual void getBuffer(std::vector<double>& /*dataToReceive*/, int& /*counter*/, Eos** /*eos*/)
143 {
144 Errors::errorMessage("getBuffer not available for requested phase type");
145 };
146
147 //Specific methods for second order
148 //---------------------------------
149 virtual void computeSlopesPhase(const Phase& /*sLeft*/, const Phase& /*sRight*/, const double& /*distance*/)
150 {
151 Errors::errorMessage("computeSlopesPhase not available for requested phase type");
152 };
153 virtual void setToZero() { Errors::errorMessage("setToZero not available for requested phase type"); };
154 virtual void setToMax() { Errors::errorMessage("setToMax not available for requested phase type"); };
155 virtual void extrapolate(const Phase& /*slope*/, const double& /*distance*/)
156 {
157 Errors::errorMessage("extrapolate not available for requested phase type");
158 };
159 virtual void
160 limitSlopes(const Phase& /*slopeGauche*/, const Phase& /*slopeDroite*/, Limiter& /*globalLimiter*/, Limiter& /*volumeFractionLimiter*/)
161 {
162 Errors::errorMessage("limitSlopes not available for requested phase type");
163 };
164 virtual void setMin(const Phase& /*phase1*/, const Phase& /*phase2*/) { Errors::errorMessage("setMin not available for requested phase type"); };
165 virtual void setMax(const Phase& /*phase1*/, const Phase& /*phase2*/) { Errors::errorMessage("setMax not available for requested phase type"); };
167 const Limiter& /*globalLimiter*/, const Phase& /*phase*/, const Phase& /*phaseMin*/, const Phase& /*phaseMax*/, const Phase& /*slope*/)
168 {
169 Errors::errorMessage("computeGradientLimiter not available for requested phase type");
170 };
171
172 //Specific methods for parallele computing at second order
173 //--------------------------------------------------------
174 virtual int numberOfTransmittedSlopes() const
175 {
176 Errors::errorMessage("numberOfTransmittedSlopes not available for requested phase type");
177 return 0;
178 };
179 virtual void fillBufferSlopes(double* /*buffer*/, int& /*counter*/) const
180 {
181 Errors::errorMessage("fillBufferSlopes not available for requested phase type");
182 };
183 virtual void getBufferSlopes(double* /*buffer*/, int& /*counter*/)
184 {
185 Errors::errorMessage("getBufferSlopes not available for requested phase type");
186 };
187
188 //Specific methods for solids
189 //---------------------------
190 virtual double getSquareLongitudinalWaveSpeed() const
191 {
192 Errors::errorMessage("getSquareLongitudinalWaveSpeed not available for requested phase type");
194 };
195
196 //Verifications
197 //-------------
198 virtual void verifyPhase(const std::string& /*message*/ = "") const
199 {
200 Errors::errorMessage("verifyPhase not available for requested phase type");
201 };
202 virtual void verifyAndCorrectPhase() { Errors::errorMessage("verifyAndCorrectPhase not available for requested phase type"); };
203 virtual void verifyAndCorrectDensityMax(const double& /*mass*/)
204 {
205 Errors::errorMessage("verifyAndCorrectDensityMax not available for requested phase type");
206 };
207 virtual void verifyAndCorrectDensityMax() { Errors::errorMessage("verifyAndCorrectDensityMax not available for requested phase type"); };
208
209 //Accessors
210 //---------
211 virtual const double& getAlpha() const
212 {
213 Errors::errorMessage("getAlpha not available for requested phase type");
215 };
216 virtual const double& getMassFraction() const
217 {
218 Errors::errorMessage("getMassFraction not available for requested phase type");
220 };
221 virtual const double& getDensity() const
222 {
223 Errors::errorMessage("getDensity not available for requested phase type");
225 };
226 virtual const double& getOmega() const
227 {
228 Errors::errorMessage("getOmega not available for requested phase type");
230 };
231 virtual const double& getDensitySurEta() const
232 {
233 Errors::errorMessage("getDensitySurEta not available for requested phase type");
235 };
236 virtual const double& getPressure() const
237 {
238 Errors::errorMessage("getPressure not available for requested phase type");
240 };
241 virtual const double& getY() const
242 {
243 Errors::errorMessage("getY not available for requested phase type");
245 };
246 virtual const double& getU() const
247 {
248 Errors::errorMessage("getU not available for requested phase type");
250 };
251 virtual const double& getV() const
252 {
253 Errors::errorMessage("getV not available for requested phase type");
255 };
256 virtual const double& getW() const
257 {
258 Errors::errorMessage("getW not available for requested phase type");
260 };
262 {
263 Errors::errorMessage("getVelocity not available for requested phase type");
265 };
266 virtual const Coord& getVelocity() const
267 {
268 Errors::errorMessage("getVelocity not available for requested phase type");
269 return Coord::defaultCoord;
270 };
271 virtual const double& getVectorPX() const
272 {
273 Errors::errorMessage("getVectorPX not available for requested phase type");
275 };
276 virtual const double& getVectorPY() const
277 {
278 Errors::errorMessage("getVectorPY not available for requested phase type");
280 };
281 virtual const double& getVectorPZ() const
282 {
283 Errors::errorMessage("getVectorPZ not available for requested phase type");
285 };
286 virtual Coord& getVectorP()
287 {
288 Errors::errorMessage("getVectorP not available for requested phase type");
290 };
291 virtual const Coord& getVectorP() const
292 {
293 Errors::errorMessage("getVectorP not available for requested phase type");
295 };
296 virtual Eos* getEos() const
297 {
298 Errors::errorMessage("EOS not available for requested phase type");
299 return 0;
300 };
301 virtual const double& getEnergy() const
302 {
303 Errors::errorMessage("getEnergy impossible avec type de phase demande");
305 };
306 virtual const double& getEntropy() const
307 {
308 Errors::errorMessage("getEntropy impossible avec type de phase demande");
310 };
311 virtual const double& getSoundSpeed() const
312 {
313 Errors::errorMessage("getSoundSpeed impossible avec type de phase demande");
315 };
316 virtual const double& getSquareSoundSpeed() const
317 {
318 Errors::errorMessage("getSquareSoundSpeed impossible avec type de phase demande");
320 };
321 virtual const double& getTotalEnergy() const
322 {
323 Errors::errorMessage("getTotalEnergy impossible avec type de phase demande");
325 };
326 virtual double getTemperature() const
327 {
328 Errors::errorMessage("getT impossible avec type de phase demande");
329 return 0.;
330 };
331 virtual const double& getLambda() const
332 {
333 Errors::errorMessage("getLambda not available for requested phase type");
335 };
336 virtual const double& getEnergyCompaction() const
337 {
338 Errors::errorMessage("getEnergyCompaction not available for requested phase type");
340 };
341 virtual const Tensor& getCobase() const
342 {
343 Errors::errorMessage("getCobase not available for requested phase type");
345 };
346 virtual Tensor& getCobase()
347 {
348 Errors::errorMessage("getCobase not available for requested phase type");
350 };
351 virtual const double& getEnergyElastic() const
352 {
353 Errors::errorMessage("getEnergyElastic not available for requested phase type");
355 };
356 virtual const Tensor& getStressTensor() const
357 {
358 Errors::errorMessage("getStressTensor not available for requested phase type");
360 };
362 {
363 Errors::errorMessage("getStressTensor not available for requested phase type");
365 };
366
367 virtual void setAlpha(double /*alpha*/) { Errors::errorMessage("setAlpha not available for requested phase type"); };
368 virtual void setDensity(double /*density*/) { Errors::errorMessage("setDensity not available for requested phase type"); };
369 virtual void setOmega(const double& /*omega*/) { Errors::errorMessage("setOmega not available for requested phase type"); };
370 virtual void setDensitySurEta(const double& /*densitySurEta*/)
371 {
372 Errors::errorMessage("setDensitySurEta not available for requested phase type");
373 };
374 virtual void setPressure(double /*pressure*/) { Errors::errorMessage("setPressure not available for requested phase type"); };
375 virtual void setVelocity(const double& /*u*/, const double& /*v*/, const double& /*w*/)
376 {
377 Errors::errorMessage("setVelocity not available for requested phase type");
378 };
379 virtual void setVelocity(const Coord& /*vit*/) { Errors::errorMessage("setVelocity not available for requested phase type"); };
380 virtual void setU(const double& /*u*/) { Errors::errorMessage("setU not available for requested phase type"); };
381 virtual void setV(const double& /*v*/) { Errors::errorMessage("setV not available for requested phase type"); };
382 virtual void setW(const double& /*w*/) { Errors::errorMessage("setW not available for requested phase type"); };
383 virtual void setVectorP(const double& /*x*/, const double& /*y*/, const double& /*z*/)
384 {
385 Errors::errorMessage("setVector not available for requested phase type");
386 };
387 virtual void setVectorP(const Coord& /*vit*/) { Errors::errorMessage("setVectorP not available for requested phase type"); };
388 virtual void setX(const double& /*x*/) { Errors::errorMessage("setX not available for requested phase type"); };
389 virtual void setY(const double& /*y*/) { Errors::errorMessage("setY not available for requested phase type"); };
390 virtual void setZ(const double& /*z*/) { Errors::errorMessage("setZ not available for requested phase type"); };
391 virtual void setEos(Eos* /*eos*/) { Errors::errorMessage("impossible to associate EOS to the requested phase type"); };
392 virtual void setEnergy(double /*energy*/) { Errors::errorMessage("setEnergy not available for requested phase type"); };
393 virtual void setEntropy(double /*entropy*/) { Errors::errorMessage("setEntropy not available for requested phase type"); };
394 virtual void setSoundSpeed(double /*soundSpeed*/) { Errors::errorMessage("setSoundSpeed not available for requested phase type"); };
395 virtual void setSquareSoundSpeed(double /*squareSoundSpeed*/)
396 {
397 Errors::errorMessage("setSquareSoundSpeed not available for requested phase type");
398 };
399 virtual void setTotalEnergy(double /*totalEnergy*/) { Errors::errorMessage("setTotalEnergy not available for requested phase type"); };
400 virtual void setTotalEnergy(const double& /*energy*/, const Coord& /*vel*/)
401 {
402 Errors::errorMessage("setTotalEnergy not available for requested phase type");
403 };
404 virtual void setTemperature(double /*temperature*/) { Errors::errorMessage("setTemperature not available for requested phase type"); };
405 virtual void setLambda(double /*lambda*/) { Errors::errorMessage("setLambda not available for requested phase type"); };
406 virtual void setEnergyCompaction(double /*energyCompaction*/)
407 {
408 Errors::errorMessage("setEnergyCompaction not available for requested phase type");
409 };
410 virtual void setCobase(const Tensor& /*cobase*/) { Errors::errorMessage("setCobase not available for requested phase type"); };
411 virtual void setEnergyElastic(double /*energyElastic*/) { Errors::errorMessage("setEnergyElastic not available for requested phase type"); };
412 virtual void setStressTensor(const Tensor& /*stressTensor*/) { Errors::errorMessage("setStressTensor not available for requested phase type"); };
413
414 //Operators
415 //---------
416 virtual void changeSign() { Errors::errorMessage("changeSign not available for requested phase type"); };
417 virtual void multiplyAndAdd(const Phase& /*slopesPhasesTemp*/, const double& /*coeff*/)
418 {
419 Errors::errorMessage("multiplyAndAdd not available for requested phase type");
420 };
421 virtual void divide(const double& /*coeff*/) { Errors::errorMessage("divide not available for requested phase type"); };
422
423 protected:
424};
425
426extern int numberScalarsPhase;
427
428#endif // PHASE_H
int numberScalarsPhase
Definition Phase.cpp:33
Class for a coordinate system object such as coordinates of the vertex or a vector.
Definition Coord.h:43
static Coord defaultCoordNonConst
Default Coord object (non-const version).
Definition Coord.h:58
static const Coord defaultCoord
Default Coord object (const version).
Definition Coord.h:55
General class for Equation of State (EOS).
Definition Eos.h:62
static void errorMessage(const std::string &message_)
Definition Errors.cpp:56
static constexpr double defaultDouble
Definition Errors.h:99
Definition Limiter.h:38
virtual void fillBufferSlopes(double *, int &) const
Definition Phase.h:179
virtual int numberOfTransmittedSlopes() const
Definition Phase.h:174
virtual void setOmega(const double &)
Definition Phase.h:369
virtual const double & getVectorPX() const
Definition Phase.h:271
virtual void setToMax()
Definition Phase.h:154
virtual void setToZero()
Definition Phase.h:153
virtual void setAlpha(double)
Definition Phase.h:367
virtual std::string returnNameScalar(const int &) const
Definition Phase.h:104
virtual void setPressure(double)
Definition Phase.h:374
virtual const double & getPressure() const
Definition Phase.h:236
virtual void setMin(const Phase &, const Phase &)
Definition Phase.h:164
virtual const Tensor & getStressTensor() const
Definition Phase.h:356
virtual void setSquareSoundSpeed(double)
Definition Phase.h:395
virtual void setEnergyElastic(double)
Definition Phase.h:411
virtual void changeSign()
Definition Phase.h:416
virtual const double & getDensitySurEta() const
Definition Phase.h:231
virtual void verifyPhase(const std::string &="") const
Definition Phase.h:198
Phase()
Definition Phase.cpp:37
virtual const double & getV() const
Definition Phase.h:251
virtual const double & getY() const
Definition Phase.h:241
virtual const double & getDensity() const
Definition Phase.h:221
virtual const double & getTotalEnergy() const
Definition Phase.h:321
virtual const double & getAlpha() const
Definition Phase.h:211
virtual void setVelocity(const Coord &)
Definition Phase.h:379
virtual std::string returnNameVector(const int &) const
Definition Phase.h:109
virtual void setVectorP(const double &, const double &, const double &)
Definition Phase.h:383
void printPhase(std::ofstream &fileStream) const
Print phase variables in file stream.
Definition Phase.cpp:45
virtual const Coord & getVelocity() const
Definition Phase.h:266
virtual void setZ(const double &)
Definition Phase.h:390
virtual void computeMassFraction(const double &)
Definition Phase.h:68
virtual const double & getLambda() const
Definition Phase.h:331
virtual void getBuffer(double *, int &, Eos **)
Definition Phase.h:138
virtual void getBufferSlopes(double *, int &)
Definition Phase.h:183
virtual double returnScalar(const int &) const
Definition Phase.h:94
virtual Tensor & getCobase()
Definition Phase.h:346
virtual void reverseProjection(const Coord &, const Coord &, const Coord &)
Definition Phase.h:77
virtual void localProjection(const Coord &, const Coord &, const Coord &)
Definition Phase.h:73
virtual double getSquareLongitudinalWaveSpeed() const
Definition Phase.h:190
virtual void copyPhase(Phase &)
Copy phase in phase attributes.
Definition Phase.h:59
virtual const double & getSquareSoundSpeed() const
Definition Phase.h:316
virtual void verifyAndCorrectPhase()
Definition Phase.h:202
virtual void setTotalEnergy(const double &, const Coord &)
Definition Phase.h:400
virtual void setEos(Eos *)
Definition Phase.h:391
virtual void fillBuffer(std::vector< double > &) const
Definition Phase.h:137
virtual void fillBuffer(double *, int &) const
Definition Phase.h:133
virtual void computeGradientLimiter(const Limiter &, const Phase &, const Phase &, const Phase &, const Phase &)
Definition Phase.h:166
virtual const double & getW() const
Definition Phase.h:256
virtual void setSoundSpeed(double)
Definition Phase.h:394
virtual const Tensor & getCobase() const
Definition Phase.h:341
virtual const double & getVectorPY() const
Definition Phase.h:276
virtual void computeSlopesPhase(const Phase &, const Phase &, const double &)
Definition Phase.h:149
virtual void setDensitySurEta(const double &)
Definition Phase.h:370
virtual const double & getOmega() const
Definition Phase.h:226
virtual const Coord & getVectorP() const
Definition Phase.h:291
virtual void setMax(const Phase &, const Phase &)
Definition Phase.h:165
virtual void setVectorP(const Coord &)
Definition Phase.h:387
virtual const double & getVectorPZ() const
Definition Phase.h:281
virtual void setX(const double &)
Definition Phase.h:388
virtual const double & getEnergy() const
Definition Phase.h:301
virtual void setTemperature(double)
Definition Phase.h:404
virtual void setU(const double &)
Definition Phase.h:380
virtual ~Phase()
Definition Phase.cpp:41
virtual void setDensity(double)
Definition Phase.h:368
virtual const double & getEntropy() const
Definition Phase.h:306
virtual Coord & getVelocity()
Definition Phase.h:261
virtual void verifyAndCorrectDensityMax()
Definition Phase.h:207
virtual Coord returnVector(const int &) const
Definition Phase.h:99
virtual const double & getMassFraction() const
Definition Phase.h:216
virtual void extendedCalculusPhase(const Coord &=Errors::defaultDouble)
Compute extra thermodynammical variables.
Definition Phase.h:63
virtual void allocateAndCopyPhase(Phase **)
Copy phase attributes in phase.
Definition Phase.h:56
virtual const double & getSoundSpeed() const
Definition Phase.h:311
virtual int getNumberScalars() const
Definition Phase.h:84
virtual void divide(const double &)
Definition Phase.h:421
virtual void limitSlopes(const Phase &, const Phase &, Limiter &, Limiter &)
Definition Phase.h:160
virtual const double & getU() const
Definition Phase.h:246
virtual void extrapolate(const Phase &, const double &)
Definition Phase.h:155
virtual void setVector(const int &, const Coord &)
Definition Phase.h:121
virtual void setEnergy(double)
Definition Phase.h:392
virtual int numberOfTransmittedVariables() const
Definition Phase.h:128
virtual void setCobase(const Tensor &)
Definition Phase.h:410
virtual void setTotalEnergy(double)
Definition Phase.h:399
virtual const double & getEnergyElastic() const
Definition Phase.h:351
virtual void setW(const double &)
Definition Phase.h:382
virtual double getTemperature() const
Definition Phase.h:326
virtual void setY(const double &)
Definition Phase.h:389
virtual void setV(const double &)
Definition Phase.h:381
virtual void setEntropy(double)
Definition Phase.h:393
virtual void setScalar(const int &, const double &)
Definition Phase.h:117
virtual void setEnergyCompaction(double)
Definition Phase.h:406
virtual Eos * getEos() const
Definition Phase.h:296
virtual void multiplyAndAdd(const Phase &, const double &)
Definition Phase.h:417
virtual Coord & getVectorP()
Definition Phase.h:286
virtual void getBuffer(std::vector< double > &, int &, Eos **)
Definition Phase.h:142
virtual int getNumberVectors() const
Definition Phase.h:89
virtual const double & getEnergyCompaction() const
Definition Phase.h:336
virtual void setLambda(double)
Definition Phase.h:405
virtual Tensor & getStressTensor()
Definition Phase.h:361
virtual void verifyAndCorrectDensityMax(const double &)
Definition Phase.h:203
virtual void setStressTensor(const Tensor &)
Definition Phase.h:412
virtual void setVelocity(const double &, const double &, const double &)
Definition Phase.h:375
Class for a matrix 3x3 system object.
Definition Tensor.h:57
static const Tensor defaultTensor
Default Tensor object (const version).
Definition Tensor.h:75
static Tensor defaultTensorNonConst
Default Tensor object (non-const version).
Definition Tensor.h:78