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));
CompressibleSolver(const LibUtilities::SessionReaderSharedPtr &pSession)
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)
tBaseSharedPtr CreateInstance(tKey idKey, tParam... args)
Create an instance of the class referred to by idKey.
static const NekDouble kNekZeroTol
EquationOfStateFactory & GetEquationOfStateFactory()
Declaration of the equation of state factory singleton.
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_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_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)
bool m_requiresRotation
Indicates whether the Riemann solver requires a rotation to be applied to the velocity fields...
The RiemannSolver class provides an abstract interface under which solvers for various Riemann proble...
std::map< std::string, RSParamFuncType > m_params
Map of parameter function types.
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)
EquationOfStateSharedPtr m_eos
std::shared_ptr< SessionReader > SessionReaderSharedPtr