ECOGEN 4.0
Evolutive, Compressible, Open, Genuine, Easy, N-phase
Loading...
Searching...
No Matches
PhaseEulerKorteweg.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 PHASEEULERKORTEWEG_H
32#define PHASEEULERKORTEWEG_H
33
34#include "../Phase.h"
35#include "../../Eos/Eos.h"
36#include <fstream>
37
41{
42 public:
52 PhaseEulerKorteweg(tinyxml2::XMLElement* material, Eos* eos, std::string fileName);
53 virtual ~PhaseEulerKorteweg();
54
55 virtual void allocateAndCopyPhase(Phase** vecPhase);
56 virtual void copyPhase(Phase& vecPhase);
57 virtual void extendedCalculusPhase(const Coord& /*velocity*/) {};
58
59 virtual void localProjection(const Coord& normal, const Coord& tangent, const Coord& binormal);
60 virtual void reverseProjection(const Coord& normal, const Coord& tangent, const Coord& binormal);
61
62 //Specific methods for data printing
63 //----------------------------------
64 virtual int getNumberScalars() const { return 4; };
65 virtual int getNumberVectors() const { return 2; };
66 virtual double returnScalar(const int& numVar) const;
67 virtual Coord returnVector(const int& numVar) const;
68 virtual std::string returnNameScalar(const int& numVar) const;
69 virtual std::string returnNameVector(const int& numVar) const;
70
71 //Specific method for reading from file
72 //-------------------------------------
73 virtual void setScalar(const int& numVar, const double& value);
74 virtual void setVector(const int& numVar, const Coord& value);
75
76 //Specific methods for parallel computing
77 //---------------------------------------
78 virtual int numberOfTransmittedVariables() const;
79 virtual void fillBuffer(double* buffer, int& counter) const;
80 virtual void fillBuffer(std::vector<double>& dataToSend) const;
81 virtual void getBuffer(double* buffer, int& counter, Eos** eos);
82 virtual void getBuffer(std::vector<double>& dataToReceive, int& counter, Eos** eos);
83
84 //Specific methods for second order
85 //---------------------------------
86 virtual void computeSlopesPhase(const Phase& sLeft, const Phase& sRight, const double& distance);
87 virtual void setToZero();
88 virtual void extrapolate(const Phase& slope, const double& distance);
89 virtual void limitSlopes(const Phase& slopeGauche, const Phase& slopeDroite, Limiter& globalLimiter, Limiter& /*volumeFractionLimiter*/);
90
91 //Specific methods for parallele computing at second order
92 //--------------------------------------------------------
93 virtual int numberOfTransmittedSlopes() const;
94 virtual void fillBufferSlopes(double* buffer, int& counter) const;
95 virtual void getBufferSlopes(double* buffer, int& counter);
96
97 //Verifications
98 //-------------
99 virtual void verifyPhase(const std::string& message = "") const;
100 virtual void verifyAndCorrectPhase();
101 virtual void verifyAndCorrectDensityMax();
102
103 //Accessors
104 //---------
105 virtual const double& getAlpha() const { return Errors::defaultDouble; };
106 virtual const double& getDensity() const { return m_density; };
107 virtual const double& getOmega() const { return m_omega; };
108 virtual const double& getEta() const { return m_eta; };
109 virtual const double& getPressure() const { return m_pressure; };
110 virtual const double& getU() const { return m_velocity.getX(); };
111 virtual const double& getV() const { return m_velocity.getY(); };
112 virtual const double& getW() const { return m_velocity.getZ(); };
113 virtual Coord& getVelocity() { return m_velocity; };
114 virtual const Coord& getVelocity() const { return m_velocity; };
115 virtual const double& getVectorPX() const { return m_vectorP.getX(); };
116 virtual const double& getVectorPY() const { return m_vectorP.getY(); };
117 virtual const double& getVectorPZ() const { return m_vectorP.getZ(); };
118 virtual Coord& getVectorP() { return m_vectorP; };
119 virtual const Coord& getVectorP() const { return m_vectorP; };
120 virtual Eos* getEos() const { return m_eos; };
121
122 virtual void setDensity(double density);
123 virtual void setOmega(const double& omega);
124 virtual void setEta(const double& eta);
125 virtual void setPressure(double pressure);
126 virtual void setVelocity(const double& u, const double& v, const double& w);
127 virtual void setVelocity(const Coord& vit);
128 virtual void setU(const double& u);
129 virtual void setV(const double& v);
130 virtual void setW(const double& w);
131 virtual void setVectorP(const double& Px, const double& Py, const double& Pz);
132 virtual void setVectorP(const Coord& vecP);
133 virtual void setVectorPX(const double& Px);
134 virtual void setVectorPY(const double& Py);
135 virtual void setVectorPZ(const double& Pz);
136 virtual void setEos(Eos* eos);
137
138 //Operators
139 //---------
140 virtual void changeSign();
141 virtual void multiplyAndAdd(const Phase& slopesPhasesTemp, const double& coeff);
142 virtual void divide(const double& coeff);
143
144 protected:
145 double m_density;
146 double m_omega;
147 double m_eta;
148 double m_pressure;
152};
153
154#endif // PHASEEULERKORTEWEG_H
Class for a coordinate system object such as coordinates of the vertex or a vector.
Definition Coord.h:43
const double & getX() const
Return the value in the x-direction of the Coord object.
Definition Coord.h:75
const double & getY() const
Return the value in the y-direction of the Coord object.
Definition Coord.h:77
const double & getZ() const
Return the value in the z-direction of the Coord object.
Definition Coord.h:79
General class for Equation of State (EOS).
Definition Eos.h:54
static constexpr double defaultDouble
Definition Errors.h:93
Definition Limiter.h:38
Phase variables for Augmented Euler–Korteweg equations (single phase)
Definition PhaseEulerKorteweg.h:41
virtual void setToZero()
Definition PhaseEulerKorteweg.cpp:322
virtual int numberOfTransmittedSlopes() const
Definition PhaseEulerKorteweg.cpp:367
virtual void allocateAndCopyPhase(Phase **vecPhase)
Copy phase attributes in phase.
Definition PhaseEulerKorteweg.cpp:76
virtual void verifyAndCorrectDensityMax()
Definition PhaseEulerKorteweg.cpp:424
virtual void setEta(const double &eta)
Definition PhaseEulerKorteweg.cpp:441
virtual double returnScalar(const int &numVar) const
Definition PhaseEulerKorteweg.cpp:113
virtual Eos * getEos() const
Definition PhaseEulerKorteweg.h:120
virtual Coord & getVectorP()
Definition PhaseEulerKorteweg.h:118
virtual int getNumberScalars() const
Definition PhaseEulerKorteweg.h:64
virtual void extrapolate(const Phase &slope, const double &distance)
Definition PhaseEulerKorteweg.cpp:331
virtual void computeSlopesPhase(const Phase &sLeft, const Phase &sRight, const double &distance)
Definition PhaseEulerKorteweg.cpp:305
virtual ~PhaseEulerKorteweg()
Definition PhaseEulerKorteweg.cpp:72
virtual const double & getOmega() const
Definition PhaseEulerKorteweg.h:107
virtual void changeSign()
Definition PhaseEulerKorteweg.cpp:495
virtual std::string returnNameScalar(const int &numVar) const
Definition PhaseEulerKorteweg.cpp:147
virtual void setVelocity(const double &u, const double &v, const double &w)
Definition PhaseEulerKorteweg.cpp:449
virtual void verifyAndCorrectPhase()
Definition PhaseEulerKorteweg.cpp:417
virtual void setEos(Eos *eos)
Definition PhaseEulerKorteweg.cpp:489
virtual void setVectorP(const double &Px, const double &Py, const double &Pz)
Definition PhaseEulerKorteweg.cpp:469
virtual const Coord & getVectorP() const
Definition PhaseEulerKorteweg.h:119
double m_pressure
Pressure, so far it is only for information.
Definition PhaseEulerKorteweg.h:148
virtual void localProjection(const Coord &normal, const Coord &tangent, const Coord &binormal)
Definition PhaseEulerKorteweg.cpp:95
virtual Coord returnVector(const int &numVar) const
Definition PhaseEulerKorteweg.cpp:132
virtual void limitSlopes(const Phase &slopeGauche, const Phase &slopeDroite, Limiter &globalLimiter, Limiter &)
Definition PhaseEulerKorteweg.cpp:348
Eos * m_eos
Pointer to equation of state.
Definition PhaseEulerKorteweg.h:151
virtual void setScalar(const int &numVar, const double &value)
Definition PhaseEulerKorteweg.cpp:183
virtual const double & getVectorPY() const
Definition PhaseEulerKorteweg.h:116
virtual Coord & getVelocity()
Definition PhaseEulerKorteweg.h:113
double m_eta
Analogue of density.
Definition PhaseEulerKorteweg.h:147
virtual void setVectorPY(const double &Py)
Definition PhaseEulerKorteweg.cpp:481
Coord m_vectorP
Gradient of eta.
Definition PhaseEulerKorteweg.h:150
virtual const double & getVectorPX() const
Definition PhaseEulerKorteweg.h:115
virtual void setVectorPX(const double &Px)
Definition PhaseEulerKorteweg.cpp:477
virtual void getBufferSlopes(double *buffer, int &counter)
Definition PhaseEulerKorteweg.cpp:391
Coord m_velocity
Velocity.
Definition PhaseEulerKorteweg.h:149
virtual void setVector(const int &numVar, const Coord &value)
Definition PhaseEulerKorteweg.cpp:202
virtual const double & getV() const
Definition PhaseEulerKorteweg.h:111
virtual void verifyPhase(const std::string &message="") const
Definition PhaseEulerKorteweg.cpp:410
virtual const double & getU() const
Definition PhaseEulerKorteweg.h:110
virtual void setDensity(double density)
Definition PhaseEulerKorteweg.cpp:433
virtual void divide(const double &coeff)
Definition PhaseEulerKorteweg.cpp:517
virtual void extendedCalculusPhase(const Coord &)
Compute extra thermodynammical variables.
Definition PhaseEulerKorteweg.h:57
virtual int getNumberVectors() const
Definition PhaseEulerKorteweg.h:65
virtual void reverseProjection(const Coord &normal, const Coord &tangent, const Coord &binormal)
Definition PhaseEulerKorteweg.cpp:103
virtual void fillBufferSlopes(double *buffer, int &counter) const
Definition PhaseEulerKorteweg.cpp:374
virtual const double & getPressure() const
Definition PhaseEulerKorteweg.h:109
virtual const double & getVectorPZ() const
Definition PhaseEulerKorteweg.h:117
PhaseEulerKorteweg()
Definition PhaseEulerKorteweg.cpp:38
virtual void setW(const double &w)
Definition PhaseEulerKorteweg.cpp:465
virtual void getBuffer(double *buffer, int &counter, Eos **eos)
Definition PhaseEulerKorteweg.cpp:265
virtual const double & getAlpha() const
Definition PhaseEulerKorteweg.h:105
virtual const Coord & getVelocity() const
Definition PhaseEulerKorteweg.h:114
virtual void setOmega(const double &omega)
Definition PhaseEulerKorteweg.cpp:437
double m_density
Specific mass.
Definition PhaseEulerKorteweg.h:145
virtual const double & getW() const
Definition PhaseEulerKorteweg.h:112
virtual void multiplyAndAdd(const Phase &slopesPhasesTemp, const double &coeff)
Definition PhaseEulerKorteweg.cpp:506
virtual void setU(const double &u)
Definition PhaseEulerKorteweg.cpp:457
virtual void setVectorPZ(const double &Pz)
Definition PhaseEulerKorteweg.cpp:485
double m_omega
Time derivative of eta.
Definition PhaseEulerKorteweg.h:146
virtual std::string returnNameVector(const int &numVar) const
Definition PhaseEulerKorteweg.cpp:166
virtual void setV(const double &v)
Definition PhaseEulerKorteweg.cpp:461
virtual int numberOfTransmittedVariables() const
Definition PhaseEulerKorteweg.cpp:219
virtual const double & getEta() const
Definition PhaseEulerKorteweg.h:108
virtual void fillBuffer(double *buffer, int &counter) const
Definition PhaseEulerKorteweg.cpp:227
virtual const double & getDensity() const
Definition PhaseEulerKorteweg.h:106
virtual void setPressure(double pressure)
Definition PhaseEulerKorteweg.cpp:445
virtual void copyPhase(Phase &vecPhase)
Copy phase in phase attributes.
Definition PhaseEulerKorteweg.cpp:83
Abstract class for a phase.
Definition Phase.h:47
Definition tinyxml2.h:1149