36 #include <boost/core/ignore_unused.hpp>
37 #include <boost/algorithm/string/predicate.hpp>
49 pSession->LoadSolverInfo(
"EquationOfState",
54 m_idealGas = boost::iequals(eosType,
"IdealGas");
66 int nvariables = Fwd.num_elements();
73 for (
int i = 0; i < Fwd[0].num_elements(); ++i)
76 Fwd [0][i], Fwd [1][i], 0.0, 0.0, Fwd [2][i],
77 Bwd [0][i], Bwd [1][i], 0.0, 0.0, Bwd [2][i],
78 flux[0][i], flux[1][i], rhouf, rhovf, flux[2][i]);
83 if (nvariables == expDim+2)
85 for (
int i = 0; i < Fwd[0].num_elements(); ++i)
88 Fwd [0][i], Fwd [1][i], Fwd [2][i], 0.0, Fwd [3][i],
89 Bwd [0][i], Bwd [1][i], Bwd [2][i], 0.0, Bwd [3][i],
90 flux[0][i], flux[1][i], flux[2][i], rhovf, flux[3][i]);
94 if (nvariables > expDim+2)
96 for (
int i = 0; i < Fwd[0].num_elements(); ++i)
99 Fwd [0][i], Fwd [1][i], Fwd [2][i], 0.0, Fwd [3][i], Fwd [4][i],
100 Bwd [0][i], Bwd [1][i], Bwd [2][i], 0.0, Bwd [3][i], Bwd [4][i],
101 flux[0][i], flux[1][i], flux[2][i], rhovf, flux[3][i], flux[4][i]);
106 else if (expDim == 3)
108 for (
int i = 0; i < Fwd[0].num_elements(); ++i)
111 Fwd [0][i], Fwd [1][i], Fwd [2][i], Fwd [3][i], Fwd [4][i],
112 Bwd [0][i], Bwd [1][i], Bwd [2][i], Bwd [3][i], Bwd [4][i],
113 flux[0][i], flux[1][i], flux[2][i], flux[3][i], flux[4][i]);
115 if (nvariables > expDim+2)
117 for (
int i = 0; i < Fwd[0].num_elements(); ++i)
120 Fwd [0][i], Fwd [1][i], Fwd [2][i], Fwd [3][i], Fwd [4][i], Fwd [5][i],
121 Bwd [0][i], Bwd [1][i], Bwd [2][i], Bwd [3][i], Bwd [4][i], Bwd [5][i],
122 flux[0][i], flux[1][i], flux[2][i], flux[3][i], flux[4][i], flux[5][i]);
138 boost::ignore_unused(HL, srL, HR, srR, srLR);
144 cRoe = sqrt((gamma - 1.0)*(HRoe - 0.5 * URoe2));
159 NekDouble chiL = dpdrhoL - eL / rhoL * dpdeL;
161 NekDouble chiR = dpdrhoR - eR / rhoR * dpdeR;
173 NekDouble avgKappa = 0.5 * (kappaL + kappaR);
174 NekDouble avgKappaH = 0.5 * (kappaL*hL + kappaR*hR);
182 NekDouble dP = deltaP - avgChi * deltaRho - avgKappa * deltaRhoe;
186 NekDouble D = (s*deltaRho)*(s*deltaRho) + deltaP*deltaP;
192 chiRoe = (D*avgChi + s*s*deltaRho*dP) / fac;
193 kappaRoe = D*avgKappa / fac;
201 cRoe = sqrt( chiRoe + kappaRoe*(HRoe - 0.5 * URoe2));
virtual void v_ArraySolve(const Array< OneD, const Array< OneD, NekDouble > > &Fwd, const Array< OneD, const Array< OneD, NekDouble > > &Bwd, Array< OneD, Array< OneD, NekDouble > > &flux)
virtual void v_PointSolve(NekDouble rhoL, NekDouble rhouL, NekDouble rhovL, NekDouble rhowL, NekDouble EL, NekDouble rhoR, NekDouble rhouR, NekDouble rhovR, NekDouble rhowR, NekDouble ER, NekDouble &rhof, NekDouble &rhouf, NekDouble &rhovf, NekDouble &rhowf, NekDouble &Ef)
NekDouble GetRoeSoundSpeed(NekDouble rhoL, NekDouble pL, NekDouble eL, NekDouble HL, NekDouble srL, NekDouble rhoR, NekDouble pR, NekDouble eR, NekDouble HR, NekDouble srR, NekDouble HRoe, NekDouble URoe2, NekDouble srLR)
CompressibleSolver(const LibUtilities::SessionReaderSharedPtr &pSession)
EquationOfStateSharedPtr m_eos
virtual void v_PointSolveVisc(NekDouble rhoL, NekDouble rhouL, NekDouble rhovL, NekDouble rhowL, NekDouble EL, NekDouble EpsL, NekDouble rhoR, NekDouble rhouR, NekDouble rhovR, NekDouble rhowR, NekDouble ER, NekDouble EpsR, NekDouble &rhof, NekDouble &rhouf, NekDouble &rhovf, NekDouble &rhowf, NekDouble &Ef, NekDouble &Epsf)
virtual void v_Solve(const int nDim, const Array< OneD, const Array< OneD, NekDouble > > &Fwd, const Array< OneD, const Array< OneD, NekDouble > > &Bwd, Array< OneD, Array< OneD, NekDouble > > &flux)
tBaseSharedPtr CreateInstance(tKey idKey, tParam... args)
Create an instance of the class referred to by idKey.
The RiemannSolver class provides an abstract interface under which solvers for various Riemann proble...
bool m_requiresRotation
Indicates whether the Riemann solver requires a rotation to be applied to the velocity fields.
std::map< std::string, RSParamFuncType > m_params
Map of parameter function types.
std::shared_ptr< SessionReader > SessionReaderSharedPtr
static const NekDouble kNekZeroTol
EquationOfStateFactory & GetEquationOfStateFactory()
Declaration of the equation of state factory singleton.