35 #ifndef NEKTAR_SOLVERS_COMPRESSIBLEFLOWSOLVER_RIEMANNSOLVER_ROESOLVER 
   36 #define NEKTAR_SOLVERS_COMPRESSIBLEFLOWSOLVER_RIEMANNSOLVER_ROESOLVER 
   63                               ND &rhof, 
ND &rhouf, 
ND &rhovf, 
ND &rhowf,
 
   64                               ND &Ef) 
override final;
 
   72 template <
class T, 
typename = 
typename std::enable_if<
 
   73                        std::is_floating_point<T>::value ||
 
   75 inline void RoeKernel(T &rhoL, T &rhouL, T &rhovL, T &rhowL, T &EL, T &rhoR,
 
   76                       T &rhouR, T &rhovR, T &rhowR, T &ER, T &rhof, T &rhouf,
 
   77                       T &rhovf, T &rhowf, T &Ef, 
NekDouble gamma)
 
   88     T pL = (gamma - 1.0) * (EL - 0.5 * (rhouL * uL + rhovL * vL + rhowL * wL));
 
   89     T pR = (gamma - 1.0) * (ER - 0.5 * (rhouR * uR + rhovR * vR + rhowR * wR));
 
   92     T hL = (EL + pL) / rhoL;
 
   93     T hR = (ER + pR) / rhoR;
 
  101     T uRoe = (srL * uL + srR * uR) / srLR;
 
  102     T vRoe = (srL * vL + srR * vR) / srLR;
 
  103     T wRoe = (srL * wL + srR * wR) / srLR;
 
  104     T hRoe = (srL * hL + srR * hR) / srLR;
 
  105     T URoe = (uRoe * uRoe + vRoe * vRoe + wRoe * wRoe);
 
  106     T cRoe = 
sqrt((gamma - 1.0) * (hRoe - 0.5 * URoe));
 
  109     T k[5][5] = {{1., uRoe - cRoe, vRoe, wRoe, hRoe - uRoe * cRoe},
 
  110                  {1., uRoe, vRoe, wRoe, 0.5 * URoe},
 
  111                  {0., 0., 1., 0., vRoe},
 
  112                  {0., 0., 0., 1., wRoe},
 
  113                  {1., uRoe + cRoe, vRoe, wRoe, hRoe + uRoe * cRoe}};
 
  116     T jump[5] = {rhoR - rhoL, rhouR - rhouL, rhovR - rhovL, rhowR - rhowL,
 
  120     T jumpbar = jump[4] - (jump[2] - vRoe * jump[0]) * vRoe -
 
  121                 (jump[3] - wRoe * jump[0]) * wRoe;
 
  125     alpha[1] = (gamma - 1.0) *
 
  126                (jump[0] * (hRoe - uRoe * uRoe) + uRoe * jump[1] - jumpbar) /
 
  129         (jump[0] * (uRoe + cRoe) - jump[1] - cRoe * alpha[1]) / (2.0 * cRoe);
 
  130     alpha[4] = jump[0] - (alpha[0] + alpha[1]);
 
  131     alpha[2] = jump[2] - vRoe * jump[0];
 
  132     alpha[3] = jump[3] - wRoe * jump[0];
 
  135     rhof  = 0.5 * (rhoL * uL + rhoR * uR);
 
  136     rhouf = 0.5 * (pL + rhoL * uL * uL + pR + rhoR * uR * uR);
 
  137     rhovf = 0.5 * (rhoL * uL * vL + rhoR * uR * vR);
 
  138     rhowf = 0.5 * (rhoL * uL * wL + rhoR * uR * wR);
 
  139     Ef    = 0.5 * (uL * (EL + pL) + uR * (ER + pR));
 
  145     T uRoeAbs   = 
abs(uRoe);
 
  146     T lambda[5] = {
abs(uRoe - cRoe), uRoeAbs, uRoeAbs, uRoeAbs,
 
  150     for (
size_t i = 0; i < 5; ++i)
 
  152         uRoeAbs = 0.5 * alpha[i] * lambda[i];
 
  154         rhof -= uRoeAbs * k[i][0];
 
  155         rhouf -= uRoeAbs * k[i][1];
 
  156         rhovf -= uRoeAbs * k[i][2];
 
  157         rhowf -= uRoeAbs * k[i][3];
 
  158         Ef -= uRoeAbs * k[i][4];
 
virtual 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) override final
Roe Riemann solver.
RoeSolver()
programmatic ctor
virtual 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) override final
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)