35 #include <boost/test/tools/floating_point_comparison.hpp> 
   36 #include <boost/test/unit_test.hpp> 
   39 #include "../RoeSolver.h" 
   40 #include "../RoeSolverSIMD.h" 
   44 namespace RiemannTests
 
   57     riemannSolver.SetParam(
"gamma",
 
   58                            [&gamma]() -> 
NekDouble & { 
return gamma; });
 
   66     for (
size_t i = 0; i < spaceDim; ++i)
 
   68         vecLocs[0][i] = 1 + i;
 
   70     riemannSolver.SetAuxVec(
 
   78     for (
size_t i = 0; i < spaceDim; ++i)
 
   82     riemannSolver.SetVector(
 
   87     size_t nFields = spaceDim + 2;
 
   89         flx(nFields), flxRef(nFields);
 
   90     for (
size_t i = 0; i < nFields; ++i)
 
  101     for (
size_t i = 0; i < npts; ++i)
 
  123             rhoe + 0.5 * (rhou * rhou + rhov * rhov + rhow * rhow) / rho;
 
  124         fwd[nFields - 1][i] = E;
 
  125         bwd[nFields - 1][i] = E;
 
  130         flxRef[1][i]           = rhou * rhou / rho + 
p;
 
  131         flxRef[2][i]           = rhou * rhov / rho;
 
  132         flxRef[3][i]           = rhou * rhow / rho;
 
  133         flxRef[nFields - 1][i] = (E + 
p) * rhou / rho;
 
  136     riemannSolver.Solve(spaceDim, fwd, bwd, flx);
 
  139     for (
size_t i = 0; i < npts; ++i)
 
  141         BOOST_CHECK_CLOSE(flxRef[0][i], flx[0][i], 1e-10);
 
  142         BOOST_CHECK_CLOSE(flxRef[1][i], flx[1][i], 1e-10);
 
  143         BOOST_CHECK_CLOSE(flxRef[2][i], flx[2][i], 1e-10);
 
  144         BOOST_CHECK_CLOSE(flxRef[3][i], flx[3][i], 1e-10);
 
  145         BOOST_CHECK_CLOSE(flxRef[4][i], flx[4][i], 1e-10);
 
  160     riemannSolver.SetParam(
"gamma",
 
  161                            [&gamma]() -> 
NekDouble & { 
return gamma; });
 
  169     for (
size_t i = 0; i < spaceDim; ++i)
 
  171         vecLocs[0][i] = 1 + i;
 
  173     riemannSolver.SetAuxVec(
 
  181     for (
size_t i = 0; i < spaceDim; ++i)
 
  185     riemannSolver.SetVector(
 
  190     size_t nFields = spaceDim + 2;
 
  192         flx(nFields), flxRef(nFields);
 
  193     for (
size_t i = 0; i < nFields; ++i)
 
  223     NekDouble E = rhoe + 0.5 * (rhou * rhou + rhov * rhov + rhow * rhow) / rho;
 
  224     fwd[nFields - 1][0] = E;
 
  225     bwd[nFields - 1][0] = E;
 
  230     flxRef[1][0]           = rhov * rhou / rho;
 
  231     flxRef[2][0]           = rhov * rhov / rho + 
p;
 
  232     flxRef[3][0]           = rhov * rhow / rho;
 
  233     flxRef[nFields - 1][0] = (E + 
p) * rhov / rho;
 
  235     riemannSolver.Solve(spaceDim, fwd, bwd, flx);
 
  238     BOOST_CHECK_CLOSE(flxRef[0][0], flx[0][0], 1e-10);
 
  239     BOOST_CHECK_CLOSE(flxRef[1][0], flx[1][0], 1e-10);
 
  240     BOOST_CHECK_CLOSE(flxRef[2][0], flx[2][0], 1e-10);
 
  241     BOOST_CHECK_CLOSE(flxRef[3][0], flx[3][0], 1e-10);
 
  242     BOOST_CHECK_CLOSE(flxRef[4][0], flx[4][0], 1e-10);
 
  256     riemannSolver.SetParam(
"gamma",
 
  257                            [&gamma]() -> 
NekDouble & { 
return gamma; });
 
  265     for (
size_t i = 0; i < spaceDim; ++i)
 
  267         vecLocs[0][i] = 1 + i;
 
  269     riemannSolver.SetAuxVec(
 
  277     for (
size_t i = 0; i < spaceDim; ++i)
 
  281     riemannSolver.SetVector(
 
  286     size_t nFields = spaceDim + 2;
 
  288         flx(nFields), flxRef(nFields);
 
  289     for (
size_t i = 0; i < nFields; ++i)
 
  319     NekDouble E = rhoe + 0.5 * (rhou * rhou + rhov * rhov + rhow * rhow) / rho;
 
  320     fwd[nFields - 1][0] = E;
 
  321     bwd[nFields - 1][0] = E;
 
  326     flxRef[1][0]           = rhow * rhou / rho;
 
  327     flxRef[2][0]           = rhow * rhov / rho;
 
  328     flxRef[3][0]           = rhow * rhow / rho + 
p;
 
  329     flxRef[nFields - 1][0] = (E + 
p) * rhow / rho;
 
  331     riemannSolver.Solve(spaceDim, fwd, bwd, flx);
 
  334     BOOST_CHECK_CLOSE(flxRef[0][0], flx[0][0], 1e-10);
 
  335     BOOST_CHECK_CLOSE(flxRef[1][0], flx[1][0], 1e-10);
 
  336     BOOST_CHECK_CLOSE(flxRef[2][0], flx[2][0], 1e-10);
 
  337     BOOST_CHECK_CLOSE(flxRef[3][0], flx[3][0], 1e-10);
 
  338     BOOST_CHECK_CLOSE(flxRef[4][0], flx[4][0], 1e-10);
 
  352     riemannSolver.SetParam(
"gamma",
 
  353                            [&gamma]() -> 
NekDouble & { 
return gamma; });
 
  361     for (
size_t i = 0; i < spaceDim; ++i)
 
  363         vecLocs[0][i] = 1 + i;
 
  365     riemannSolver.SetAuxVec(
 
  373     for (
size_t i = 0; i < spaceDim; ++i)
 
  377     riemannSolver.SetVector(
 
  382     size_t nFields = spaceDim + 2;
 
  384         flx(nFields), flxRef(nFields);
 
  385     for (
size_t i = 0; i < nFields; ++i)
 
  396     for (
size_t i = 0; i < npts; ++i)
 
  419             rhoe + 0.5 * (rhou * rhou + rhov * rhov + rhow * rhow) / rhoL;
 
  421             rhoe + 0.5 * (rhou * rhou + rhov * rhov + rhow * rhow) / rhoR;
 
  422         fwd[nFields - 1][i] = EL;
 
  423         bwd[nFields - 1][i] = ER;
 
  427         flxRef[0][i]           = 0.87858599768171342;
 
  428         flxRef[1][i]           = 2.0449028304431223;
 
  429         flxRef[2][i]           = 1.8282946712594808;
 
  430         flxRef[3][i]           = 2.7424420068892208;
 
  431         flxRef[nFields - 1][i] = 9.8154698039903128;
 
  434     riemannSolver.Solve(spaceDim, fwd, bwd, flx);
 
  437     for (
size_t i = 0; i < npts; ++i)
 
  439         BOOST_CHECK_CLOSE(flxRef[0][i], flx[0][i], 1e-10);
 
  440         BOOST_CHECK_CLOSE(flxRef[1][i], flx[1][i], 1e-10);
 
  441         BOOST_CHECK_CLOSE(flxRef[2][i], flx[2][i], 1e-10);
 
  442         BOOST_CHECK_CLOSE(flxRef[3][i], flx[3][i], 1e-10);
 
  443         BOOST_CHECK_CLOSE(flxRef[4][i], flx[4][i], 1e-10);
 
BOOST_AUTO_TEST_CASE(RoeAlongXconstSolution)
 
The above copyright notice and this permission notice shall be included.