64 static auto gamma =
m_params[
"gamma"]();
65 static auto nVars = fwd.size();
66 static auto spaceDim = nVars - 2;
69 ASSERTL0(spaceDim == 3,
"SIMD Roe implemented only for 3D case...");
76 size_t sizeScalar = fwd[0].size();
77 size_t sizeVec = (sizeScalar / vec_t::width) * vec_t::width;
98 for (; i < sizeVec; i += vec_t::width)
101 vec_t rhoL, rhoR, ER, EL;
108 vec_t tmpIn[3], tmpOut[3];
115 for (
size_t j = 0; j < 9; ++j)
123 vec_t rhouL = tmpOut[0];
124 vec_t rhovL = tmpOut[1];
125 vec_t rhowL = tmpOut[2];
135 vec_t rhouR = tmpOut[0];
136 vec_t rhovR = tmpOut[1];
137 vec_t rhowR = tmpOut[2];
141 RoeKernel(rhoL, rhouL, rhovL, rhowL, EL, rhoR, rhouR, rhovR, rhowR, ER,
142 rhof, tmpIn[0], tmpIn[1], tmpIn[2], Ef, gamma);
158 for (; i < sizeScalar; ++i)
169 tmpIn[0] = fwd[1][i];
170 tmpIn[1] = fwd[2][i];
171 tmpIn[2] = fwd[3][i];
175 for (
size_t j = 0; j < 9; ++j)
188 tmpIn[0] = bwd[1][i];
189 tmpIn[1] = bwd[2][i];
190 tmpIn[2] = bwd[3][i];
201 RoeKernel(rhoL, rhouL, rhovL, rhowL, EL, rhoR, rhouR, rhovR, rhowR, ER,
202 rhof, tmpIn[0], tmpIn[1], tmpIn[2], Ef, gamma);
209 flux[nVars - 1][i] = Ef;
212 flux[1][i] = tmpOut[0];
213 flux[2][i] = tmpOut[1];
214 flux[3][i] = tmpOut[2];
#define ASSERTL0(condition, msg)
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
void v_Solve(const int nDim, const Array< OneD, const Array< OneD, ND >> &Fwd, const Array< OneD, const Array< OneD, ND >> &Bwd, Array< OneD, Array< OneD, ND >> &flux) final
static RiemannSolverSharedPtr create(const LibUtilities::SessionReaderSharedPtr &pSession)
static std::string solverName
RoeSolverSIMD()
programmatic ctor
bool m_requiresRotation
Indicates whether the Riemann solver requires a rotation to be applied to the velocity fields.
SOLVER_UTILS_EXPORT void GenerateRotationMatrices(const Array< OneD, const Array< OneD, NekDouble >> &normals)
Generate rotation matrices for 3D expansions.
Array< OneD, Array< OneD, NekDouble > > m_rotMat
Rotation matrices for each trace quadrature point.
std::map< std::string, RSVecFuncType > m_vectors
Map of vector function types.
SOLVER_UTILS_EXPORT bool CheckVectors(std::string name)
Determine whether a vector has been defined in m_vectors.
std::map< std::string, RSParamFuncType > m_params
Map of parameter function types.
std::shared_ptr< SessionReader > SessionReaderSharedPtr
void rotateFromNormalKernel(T *in, T *rotMat, T *out)
void rotateToNormalKernel(T *in, T *rotMat, T *out)
RiemannSolverFactory & GetRiemannSolverFactory()
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)
tinysimd::simd< NekDouble > vec_t
static constexpr struct tinysimd::is_not_aligned_t is_not_aligned
typename abi< ScalarType, width >::type simd