35 #ifndef NEKTAR_SOLVERS_COMPRESSIBLEFLOWSOLVER_RIEMANNSOLVER_ROESOLVER
36 #define NEKTAR_SOLVERS_COMPRESSIBLEFLOWSOLVER_RIEMANNSOLVER_ROESOLVER
65 ND &rhof,
ND &rhouf,
ND &rhovf,
ND &rhowf,
ND &Ef)
final;
73 template <
class T,
typename =
typename std::enable_if
75 std::is_floating_point<T>::value ||
80 T& rhoL, T& rhouL, T& rhovL, T& rhowL, T& EL,
81 T& rhoR, T& rhouR, T& rhovR, T& rhowR, T& ER,
82 T& rhof, T& rhouf, T& rhovf, T& rhowf, T& Ef,
94 T pL = (gamma - 1.0) *
95 (EL - 0.5 * (rhouL * uL + rhovL * vL + rhowL * wL));
96 T pR = (gamma - 1.0) *
97 (ER - 0.5 * (rhouR * uR + rhovR * vR + rhowR * wR));
100 T hL = (EL + pL) / rhoL;
101 T hR = (ER + pR) / rhoR;
109 T uRoe = (srL * uL + srR * uR) / srLR;
110 T vRoe = (srL * vL + srR * vR) / srLR;
111 T wRoe = (srL * wL + srR * wR) / srLR;
112 T hRoe = (srL * hL + srR * hR) / srLR;
113 T URoe = (uRoe * uRoe + vRoe * vRoe + wRoe * wRoe);
114 T cRoe =
sqrt((gamma - 1.0)*(hRoe - 0.5 * URoe));
118 {1., uRoe - cRoe, vRoe, wRoe, hRoe - uRoe * cRoe},
119 {1., uRoe, vRoe, wRoe, 0.5 * URoe},
120 {0., 0., 1., 0., vRoe},
121 {0., 0., 0., 1., wRoe},
122 {1., uRoe+cRoe, vRoe, wRoe, hRoe + uRoe*cRoe}
135 T jumpbar = jump[4] - (jump[2]-vRoe*jump[0])*vRoe -
136 (jump[3]-wRoe*jump[0])*wRoe;
140 alpha[1] = (gamma-1.0)*(jump[0]*(hRoe - uRoe*uRoe) + uRoe*jump[1] -
141 jumpbar)/(cRoe*cRoe);
142 alpha[0] = (jump[0]*(uRoe + cRoe) - jump[1] - cRoe*alpha[1])/(2.0*cRoe);
143 alpha[4] = jump[0] - (alpha[0] + alpha[1]);
144 alpha[2] = jump[2] - vRoe * jump[0];
145 alpha[3] = jump[3] - wRoe * jump[0];
148 rhof = 0.5*(rhoL*uL + rhoR*uR);
149 rhouf = 0.5*(pL + rhoL*uL*uL + pR + rhoR*uR*uR);
150 rhovf = 0.5*(rhoL*uL*vL + rhoR*uR*vR);
151 rhowf = 0.5*(rhoL*uL*wL + rhoR*uR*wR);
152 Ef = 0.5*(uL*(EL + pL) + uR*(ER + pR));
158 T uRoeAbs =
abs(uRoe);
168 for (
size_t i = 0; i < 5; ++i)
170 uRoeAbs = 0.5*alpha[i]*lambda[i];
172 rhof -= uRoeAbs*k[i][0];
173 rhouf -= uRoeAbs*k[i][1];
174 rhovf -= uRoeAbs*k[i][2];
175 rhowf -= uRoeAbs*k[i][3];
176 Ef -= uRoeAbs*k[i][4];
void v_PointSolve(ND rhoL, ND rhouL, ND rhovL, ND rhowL, ND EL, ND rhoR, ND rhouR, ND rhovR, ND rhowR, ND ER, ND &rhof, ND &rhouf, ND &rhovf, ND &rhowf, ND &Ef) final
Roe Riemann solver.
void v_ArraySolve(const Array< OneD, const Array< OneD, ND > > &Fwd, const Array< OneD, const Array< OneD, ND > > &Bwd, Array< OneD, Array< OneD, ND > > &flux) final
RoeSolver()
programmatic ctor
static RiemannSolverSharedPtr create(const LibUtilities::SessionReaderSharedPtr &pSession)
static std::string solverName
std::shared_ptr< SessionReader > SessionReaderSharedPtr
std::shared_ptr< RiemannSolver > RiemannSolverSharedPtr
A shared pointer to an EquationSystem object.
The above copyright notice and this permission notice shall be included.
void RoeKernel(T &rhoL, T &rhouL, T &rhovL, T &rhowL, T &EL, T &rhoR, T &rhouR, T &rhovR, T &rhowR, T &ER, T &rhof, T &rhouf, T &rhovf, T &rhowf, T &Ef, NekDouble gamma)
scalarT< T > abs(scalarT< T > in)
scalarT< T > sqrt(scalarT< T > in)