ECOGEN 4.0
Evolutive, Compressible, Open, Genuine, Easy, N-phase
Loading...
Searching...
No Matches
Mixture.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 MIXTURE_H
32#define MIXTURE_H
33
34#include <vector>
35
36class Mixture;
37
38#include "../AdditionalPhysics/QuantitiesAddPhys.h"
39
43{
44 public:
45 Mixture();
46 virtual ~Mixture();
49 void printMixture(std::ofstream& fileStream) const;
50
57 //virtual double computeTsat(const Eos* eosLiq, const Eos* eosVap, const double& pressure, double* dTsat=0) { Errors::errorMessage("computeTsat not available for requested mixture"); return 0.; };
58 double computeTsat(const Eos* eosLiq, const Eos* eosVap, const double& pressure, double* dTsat = 0);
64 double computePsat(const Eos* eosLiq, const Eos* eosVap, const double& temp);
65
69 double computeCriticalPressure(const Eos* eosLiq, const Eos* eosVap);
70
73 virtual void allocateAndCopyMixture(Mixture** /*mixture*/) { Errors::errorMessage("allocateAndCopyMixture not available for requested mixture"); };
76 virtual void copyMixture(Mixture& /*mixture*/) { Errors::errorMessage("copyMixture not available for requested mixture"); };
81 virtual double computeDensity(const double* /*alphak*/, const double* /*rhok*/) { Errors::errorMessage("computeDensity not available for requested mixture"); return 0.; };
86 virtual double computePressure(const double* /*alphak*/, const double* /*pk*/) { Errors::errorMessage("computePressure not available for requested mixture"); return 0.; };
87 virtual double computePressure(double* /*masses*/, const double& /*mixInternalEnerg*/, Phase** /*phases*/) { Errors::errorMessage("computePressure not available for requested mixture"); return 0.; };
88 virtual double computePressure(double /*mass*/, const double& /*internalEnergy*/, Phase** /*phases*/, Mixture* /*mixture*/, const int& /*liq*/, const int& /*vap*/) { Errors::errorMessage("computePressure not available for requested mixture"); return 0.; };
89 virtual double computeTemperature(double* /*masses*/, const double& /*pressure*/, Phase** /*phases*/) { Errors::errorMessage("computeTemperature not available for requested mixture"); return 0.; };
94 virtual double computeInternalEnergy(const double* /*Yk*/, const double* /*ek*/) { Errors::errorMessage("computeInternalEnergy not available for requested mixture"); return 0.; };
99 virtual double computeFrozenSoundSpeed(const double* /*Yk*/, const double* /*ck*/) { Errors::errorMessage("computeFrozenSoundSpeed not available for requested mixture"); return 0.; };
100
108 virtual double computeTemperatureIsentrope(const double* /*Yk*/, const double& /*p0*/, const double& /*T0*/, const double& /*p*/, double* /*dTdp*/ = 0) { Errors::errorMessage("computeTemperatureIsentrope not available for requested mixture"); return 0.; };
116 virtual double computeEnthalpyIsentrope(const double* /*Yk*/, const double& /*p0*/, const double& /*T0*/, const double& /*p*/, double* /*dhdp*/ = 0) { Errors::errorMessage("computeEnthalpyIsentrope not available for requested mixture"); return 0.; };
124 virtual double computeVolumeIsentrope(const double* /*Yk*/, const double& /*p0*/, const double& /*T0*/, const double& /*p*/, double* /*dvdp*/ = 0) { Errors::errorMessage("computeVolumeIsentrope not available for requested mixture"); return 0.; };
125
128 virtual void computeMixtureVariables(Phase** /*vecPhase*/) { Errors::errorMessage("computeMixtureVariables not available for requested mixture"); };
131 virtual void computeTotalEnergy(std::vector<QuantitiesAddPhys*>& /*vecGPA*/) { Errors::errorMessage("internalEnergyToTotalEnergy not available for requested mixture"); };
134 virtual void totalEnergyToInternalEnergy(std::vector<QuantitiesAddPhys*>& /*vecGPA*/) { Errors::errorMessage("totalEnergyToInternalEnergy not available for requested mixture"); };
135
140 virtual void localProjection(const Coord& /*normal*/, const Coord& /*tangent*/, const Coord& /*binormal*/) { Errors::errorMessage("localProjection not available for requested mixture"); };
145 virtual void reverseProjection(const Coord& /*normal*/, const Coord& /*tangent*/, const Coord& /*binormal*/) { Errors::errorMessage("reverseProjection not available for requested mixture"); };
146
147 //Specific methods for data printing
148 //----------------------------------
149 virtual int getNumberScalars() const { Errors::errorMessage("getNumberScalars not available for requested mixture"); return 0; };
150 virtual int getNumberVectors() const { Errors::errorMessage("getNumberVectors not available for requested mixture"); return 0; };
151 virtual double returnScalar(const int& /*numVar*/) const { Errors::errorMessage("returnScalar not available for requested mixture"); return 0.; };
152 virtual Coord returnVector(const int& /*numVar*/) const { Errors::errorMessage("returnVector not available for requested mixture"); return 0; };
153 virtual std::string returnNameScalar(const int& /*numVar*/) const { Errors::errorMessage("returnNameScalar not available for requested mixture"); return 0; };
154 virtual std::string returnNameVector(const int& /*numVar*/) const { Errors::errorMessage("returnNameVector not available for requested mixture"); return 0; };
155
156 //Specific method for reading from file
157 //-------------------------------------
158 virtual void setScalar(const int& /*numVar*/, const double& /*value*/) { Errors::errorMessage("setScalar not available for requested mixture type"); };
159 virtual void setVector(const int& /*numVar*/, const Coord& /*value*/) { Errors::errorMessage("setVector not available for requested mixture type"); };
160
161 //Specific methods for parallel computing
162 //---------------------------------------
163 virtual int numberOfTransmittedVariables() const { Errors::errorMessage("numberOfTransmittedVariables not available for requested mixture type"); return 0; };
164 virtual void fillBuffer(double* /*buffer*/, int& /*counter*/) const { Errors::errorMessage("fillBuffer not available for requested mixture type"); };
165 virtual void fillBuffer(std::vector<double>& /*dataToSend*/) const { Errors::errorMessage("fillBuffer not available for requested mixture type"); };
166 virtual void getBuffer(double* /*buffer*/, int& /*counter*/) { Errors::errorMessage("getBuffer not available for requested mixture type"); };
167 virtual void getBuffer(std::vector<double>& /*dataToReceive*/, int& /*counter*/) { Errors::errorMessage("getBuffer not available for requested mixture type"); };
168
169 //Specific methods for second order
170 //---------------------------------
171 virtual void computeSlopesMixture(const Mixture& /*sLeft*/, const Mixture& /*sRight*/, const double& /*distance*/) { Errors::errorMessage("computeSlopesMixture non implemente pour mixture utilise"); };
172 virtual void setToZero() { Errors::errorMessage("setToZero not available for requested mixture type"); };
173 virtual void setToMax() { Errors::errorMessage("setToMax not available for requested mixture type"); };
174 virtual void extrapolate(const Mixture& /*slope*/, const double& /*distance*/) { Errors::errorMessage("extrapolate non implemente pour mixture utilise"); };
175 virtual void limitSlopes(const Mixture& /*slopeGauche*/, const Mixture& /*slopeDroite*/, Limiter& /*globalLimiter*/) { Errors::errorMessage("limitSlopes non implemente pour mixture utilise"); };
176 virtual void setMin(const Mixture& /*mixture1*/, const Mixture& /*mixture2*/) { Errors::errorMessage("setMin not available for requested mixture type"); };
177 virtual void setMax(const Mixture& /*mixture1*/, const Mixture& /*mixture2*/) { Errors::errorMessage("setMax not available for requested mixture type"); };
178 virtual void computeGradientLimiter(const Limiter& /*globalLimiter*/, const Mixture& /*mixture*/, const Mixture& /*mixtureMin*/, const Mixture& /*mixtureMax*/, const Mixture& /*slope*/) { Errors::errorMessage("computeGradientLimiter not available for requested mixture type"); };
179
180 //Specific methods for parallele computing at second order
181 //--------------------------------------------------------
182 virtual int numberOfTransmittedSlopes() const { Errors::errorMessage("numberOfTransmittedSlopes not available for requested mixture"); return 0; };
183 virtual void fillBufferSlopes(double* /*buffer*/, int& /*counter*/) const { Errors::errorMessage("fillBufferSlopes not available for requested mixture"); };
184 virtual void getBufferSlopes(double* /*buffer*/, int& /*counter*/) { Errors::errorMessage("getBufferSlopes not available for requested mixture"); };
185
186 //Accessors
187 //---------
188 virtual const double& getDensity() const { Errors::errorMessage("getDensity not available for requested mixture"); return Errors::defaultDouble; };
189 virtual const double& getPressure() const { Errors::errorMessage("getPressure not available for requested mixture"); return Errors::defaultDouble; };
190 virtual const double& getTemperature() const { Errors::errorMessage("getTemperature not available for requested mixture"); return Errors::defaultDouble; };
191 virtual const double& getU() const { Errors::errorMessage("getU not available for requested mixture"); return Errors::defaultDouble; };
192 virtual const double& getV() const { Errors::errorMessage("getV not available for requested mixture"); return Errors::defaultDouble; };
193 virtual const double& getW() const { Errors::errorMessage("getW not available for requested mixture"); return Errors::defaultDouble; };
194 virtual const Coord& getVelocity() const { Errors::errorMessage("getVelocity not available for requested mixture"); return Coord::defaultCoord; };
195 virtual Coord& getVelocity() { Errors::errorMessage("getVelocity not available for requested mixture"); return Coord::defaultCoordNonConst; };
196 virtual const double& getEnergy() const { Errors::errorMessage("getEnergy not available for requested mixture"); return Errors::defaultDouble; };
197 virtual const double& getTotalEnergy() const { Errors::errorMessage("getTotalEnergy not available for requested mixture"); return Errors::defaultDouble; };
198 virtual const double& getFrozenSoundSpeed() const { Errors::errorMessage("getFrozenSoundSpeed not available for requested mixture"); return Errors::defaultDouble; };
199 virtual const double& getWoodSoundSpeed() const { Errors::errorMessage("getWoodSoundSpeed not available for requested mixture"); return Errors::defaultDouble; };
200 virtual const double& getMixSoundSpeed() const { Errors::errorMessage("getMixSoundSpeed not available for requested mixture"); return Errors::defaultDouble; };
201 virtual const double& getEnergyCompaction() const { Errors::errorMessage("getEnergyCompaction not available for requested mixture"); return Errors::defaultDouble; };
202 virtual const double& getEnergyElastic() const { Errors::errorMessage("getEnergyElastic not available for requested mixture"); return Errors::defaultDouble; };
203 virtual const Tensor& getStressTensor() const { Errors::errorMessage("getStressTensor not available for requested mixture"); return Tensor::defaultTensor; };
204 virtual Tensor& getStressTensor() { Errors::errorMessage("getStressTensor not available for requested mixture"); return Tensor::defaultTensorNonConst; };
205
206 virtual void setPressure(const double& /*p*/) { Errors::errorMessage("setPressure not available for requested mixture"); };
207 virtual void setTemperature(const double& /*T*/) { Errors::errorMessage("setTemperature not available for requested mixture"); }
208 virtual void setVelocity(const double& /*u*/, const double& /*v*/, const double& /*w*/) { Errors::errorMessage("setVelocity not available for requested mixture"); };
209 virtual void setVelocity(const Coord& /*vit*/) { Errors::errorMessage("setVelocity not available for requested mixture"); };
210 virtual void setU(const double& /*u*/) { Errors::errorMessage("setU not available for requested mixture"); };
211 virtual void setV(const double& /*v*/) { Errors::errorMessage("setV not available for requested mixture"); };
212 virtual void setW(const double& /*w*/) { Errors::errorMessage("setW not available for requested mixture"); };
213 virtual void setTotalEnergy(double& /*totalEnergy*/) { Errors::errorMessage("setTotalEnergy not available for requested mixture"); };
214 virtual void setEnergyCompaction(const double& /*energyCompaction*/) { Errors::errorMessage("setEnergyCompaction not available for requested mixture"); };
215 virtual void setEnergyElastic(const double& /*energyElastic*/) { Errors::errorMessage("setEnergyElastic not available for requested mixture"); };
216 virtual void setStressTensor(const Tensor& /*stressTensor*/) { Errors::errorMessage("setStressTensor not available for requested mixture"); };
217
218 //Operators
219 //---------
220 virtual void changeSign() { Errors::errorMessage("changeSign not available for requested mixture"); };
221 virtual void multiplyAndAdd(const Mixture& /*slopesMixtureTemp*/, const double& /*coeff*/) { Errors::errorMessage("multiplyAndAdd not available for requested mixture"); };
222 virtual void divide(const double& /*coeff*/) { Errors::errorMessage("divide not available for requested mixture"); };
223
224 protected:
225 private:
226
227};
228
229extern int numberScalarsMixture;
230
231#endif // MIXTURE_H
int numberScalarsMixture
Definition Mixture.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:54
static void errorMessage(const std::string &message)
Definition Errors.cpp:56
static constexpr double defaultDouble
Definition Errors.h:93
Definition Limiter.h:38
Abstract class for mixture variables.
Definition Mixture.h:43
virtual void computeGradientLimiter(const Limiter &, const Mixture &, const Mixture &, const Mixture &, const Mixture &)
Definition Mixture.h:178
void printMixture(std::ofstream &fileStream) const
Print mixture variables in file stream.
Definition Mixture.cpp:45
virtual const double & getTotalEnergy() const
Definition Mixture.h:197
virtual std::string returnNameVector(const int &) const
Definition Mixture.h:154
virtual const double & getDensity() const
Definition Mixture.h:188
virtual double computeDensity(const double *, const double *)
Compute mixture density.
Definition Mixture.h:81
virtual void extrapolate(const Mixture &, const double &)
Definition Mixture.h:174
virtual std::string returnNameScalar(const int &) const
Definition Mixture.h:153
virtual void setTemperature(const double &)
Definition Mixture.h:207
virtual void getBuffer(double *, int &)
Definition Mixture.h:166
virtual const double & getW() const
Definition Mixture.h:193
virtual void fillBufferSlopes(double *, int &) const
Definition Mixture.h:183
virtual const double & getMixSoundSpeed() const
Definition Mixture.h:200
virtual int numberOfTransmittedSlopes() const
Definition Mixture.h:182
Mixture()
Definition Mixture.cpp:37
virtual double computePressure(double, const double &, Phase **, Mixture *, const int &, const int &)
Definition Mixture.h:88
virtual void setV(const double &)
Definition Mixture.h:211
virtual double computeFrozenSoundSpeed(const double *, const double *)
Compute mixture frozen speed of sound.
Definition Mixture.h:99
virtual void limitSlopes(const Mixture &, const Mixture &, Limiter &)
Definition Mixture.h:175
virtual int getNumberScalars() const
Definition Mixture.h:149
virtual double computeTemperature(double *, const double &, Phase **)
Definition Mixture.h:89
virtual void setEnergyCompaction(const double &)
Definition Mixture.h:214
virtual Coord & getVelocity()
Definition Mixture.h:195
virtual void setW(const double &)
Definition Mixture.h:212
virtual void setPressure(const double &)
Definition Mixture.h:206
double computePsat(const Eos *eosLiq, const Eos *eosVap, const double &temp)
Compute saturation pressure for a liq/vapor couple of fluid at given pressure.
Definition Mixture.cpp:104
virtual const double & getFrozenSoundSpeed() const
Definition Mixture.h:198
virtual const double & getPressure() const
Definition Mixture.h:189
virtual void copyMixture(Mixture &)
Copy mixture in mixture attributes.
Definition Mixture.h:76
virtual void setU(const double &)
Definition Mixture.h:210
virtual void changeSign()
Definition Mixture.h:220
virtual void setMax(const Mixture &, const Mixture &)
Definition Mixture.h:177
virtual void setVelocity(const double &, const double &, const double &)
Definition Mixture.h:208
virtual const Tensor & getStressTensor() const
Definition Mixture.h:203
virtual void setVector(const int &, const Coord &)
Definition Mixture.h:159
virtual void computeTotalEnergy(std::vector< QuantitiesAddPhys * > &)
Compute mixture total specific energy from internal one taking account for energies associated to ext...
Definition Mixture.h:131
virtual double computeVolumeIsentrope(const double *, const double &, const double &, const double &, double *=0)
Compute mixture specific volume for a mixture evolving at thermal equilibrium along mixture isentropi...
Definition Mixture.h:124
double computeTsat(const Eos *eosLiq, const Eos *eosVap, const double &pressure, double *dTsat=0)
Compute saturation temperature for a liq/vapor couple of fluid at given pressure.
Definition Mixture.cpp:59
virtual void computeMixtureVariables(Phase **)
Fills some mixture attributes from a phase array.
Definition Mixture.h:128
virtual const double & getEnergyElastic() const
Definition Mixture.h:202
virtual void allocateAndCopyMixture(Mixture **)
Copy mixture attributes in mixture.
Definition Mixture.h:73
virtual void reverseProjection(const Coord &, const Coord &, const Coord &)
velocity vector reverse projection in the absolute Cartesian coordinate system
Definition Mixture.h:145
virtual void setToMax()
Definition Mixture.h:173
virtual void setVelocity(const Coord &)
Definition Mixture.h:209
virtual const double & getWoodSoundSpeed() const
Definition Mixture.h:199
virtual double computeEnthalpyIsentrope(const double *, const double &, const double &, const double &, double *=0)
Compute mixture enthalpy for a mixture evolving at thermal equilibrium along mixture isentropic path.
Definition Mixture.h:116
virtual void setMin(const Mixture &, const Mixture &)
Definition Mixture.h:176
virtual void getBuffer(std::vector< double > &, int &)
Definition Mixture.h:167
double computeCriticalPressure(const Eos *eosLiq, const Eos *eosVap)
Compute the theoritical critical pressure.
Definition Mixture.cpp:146
virtual const double & getTemperature() const
Definition Mixture.h:190
virtual double computeInternalEnergy(const double *, const double *)
Compute mixture specific internal energy.
Definition Mixture.h:94
virtual void multiplyAndAdd(const Mixture &, const double &)
Definition Mixture.h:221
virtual void fillBuffer(double *, int &) const
Definition Mixture.h:164
virtual void setEnergyElastic(const double &)
Definition Mixture.h:215
virtual const double & getEnergy() const
Definition Mixture.h:196
virtual const double & getEnergyCompaction() const
Definition Mixture.h:201
virtual const double & getU() const
Definition Mixture.h:191
virtual void fillBuffer(std::vector< double > &) const
Definition Mixture.h:165
virtual Tensor & getStressTensor()
Definition Mixture.h:204
virtual ~Mixture()
Definition Mixture.cpp:41
virtual void setScalar(const int &, const double &)
Definition Mixture.h:158
virtual const Coord & getVelocity() const
Definition Mixture.h:194
virtual Coord returnVector(const int &) const
Definition Mixture.h:152
virtual int getNumberVectors() const
Definition Mixture.h:150
virtual void setTotalEnergy(double &)
Definition Mixture.h:213
virtual void getBufferSlopes(double *, int &)
Definition Mixture.h:184
virtual void localProjection(const Coord &, const Coord &, const Coord &)
velocity vector projection in a local Cartesian coordinate system
Definition Mixture.h:140
virtual double computeTemperatureIsentrope(const double *, const double &, const double &, const double &, double *=0)
Compute temperature for a mixture evolving at thermal equilibrium along mixture isentropic path.
Definition Mixture.h:108
virtual void setToZero()
Definition Mixture.h:172
virtual double returnScalar(const int &) const
Definition Mixture.h:151
virtual void computeSlopesMixture(const Mixture &, const Mixture &, const double &)
Definition Mixture.h:171
virtual int numberOfTransmittedVariables() const
Definition Mixture.h:163
virtual double computePressure(double *, const double &, Phase **)
Definition Mixture.h:87
virtual void setStressTensor(const Tensor &)
Definition Mixture.h:216
virtual void divide(const double &)
Definition Mixture.h:222
virtual const double & getV() const
Definition Mixture.h:192
virtual double computePressure(const double *, const double *)
Compute mixture pressure.
Definition Mixture.h:86
virtual void totalEnergyToInternalEnergy(std::vector< QuantitiesAddPhys * > &)
Compute mixture internal specific energy from total one taking account for energies associated to ext...
Definition Mixture.h:134
Abstract class for a phase.
Definition Phase.h:47
Class for a matrix 3x3 system object.
Definition Tensor.h:46
static const Tensor defaultTensor
Default Tensor object (const version)
Definition Tensor.h:56
static Tensor defaultTensorNonConst
Default Tensor object (non-const version)
Definition Tensor.h:59