51 namespace LibUtilities
189 const int mode)
override;
200 return 2.0 *
sqrt(2.0);
215 typedef std::tuple<int, int, int>
Mode;
238 const int mode)
override;
249 return 8.0 *
sqrt(2.0) / 3.0;
264 typedef std::tuple<int, int, int>
Mode;
286 const int mode)
override;
297 return 4.0 *
sqrt(2.0);
326 const int mode)
override;
351 typedef std::tuple<int, int, int>
Mode;
369 const int mode)
override;
#define LIB_UTILITIES_EXPORT
Specialisation of the NodalUtil class to support nodal hex elements.
virtual NekVector< NekDouble > v_OrthoBasisDeriv(const int dir, const int mode) override
Return the values of the derivative of the orthogonal basis at the nodal points for a given mode.
virtual std::shared_ptr< NodalUtil > v_CreateUtil(Array< OneD, Array< OneD, NekDouble >> &xi) override
Construct a NodalUtil object of the appropriate element type for a given set of points.
virtual NekVector< NekDouble > v_OrthoBasis(const int mode) override
Return the value of the modal functions for the hex element at the nodal points m_xi for a given mode...
virtual int v_NumModes() override
Calculate the number of degrees of freedom for this element.
NodalUtilHex(int degree, Array< OneD, NekDouble > r, Array< OneD, NekDouble > s, Array< OneD, NekDouble > t)
Construct the nodal utility class for a hexahedron.
std::vector< Mode > m_ordering
Mapping from the indexing of the basis to a continuous ordering.
std::tuple< int, int, int > Mode
virtual NekDouble v_ModeZeroIntegral() override
Return the value of the integral of the zero-th mode for this element.
A class to assist in the construction of nodal simplex and hybrid elements in two and three dimension...
int m_degree
Degree of the nodal element.
virtual ~NodalUtil()=default
NodalUtil(int degree, int dim)
Set up the NodalUtil object.
virtual std::shared_ptr< NodalUtil > v_CreateUtil(Array< OneD, Array< OneD, NekDouble >> &xi)=0
Construct a NodalUtil object of the appropriate element type for a given set of points.
int m_numPoints
Total number of nodal points.
Array< OneD, Array< OneD, NekDouble > > m_xi
Coordinates of the nodal points defining the basis.
NekVector< NekDouble > GetWeights()
Obtain the integration weights for the given nodal distribution.
SharedMatrix GetVandermonde()
Return the Vandermonde matrix for the nodal distribution.
SharedMatrix GetVandermondeForDeriv(int dir)
Return the Vandermonde matrix of the derivative of the basis functions for the nodal distribution.
virtual int v_NumModes()=0
Calculate the number of degrees of freedom for this element.
SharedMatrix GetDerivMatrix(int dir)
Return the derivative matrix for the nodal distribution.
int m_dim
Dimension of the nodal element.
virtual NekDouble v_ModeZeroIntegral()=0
Return the value of the integral of the zero-th mode for this element.
virtual NekVector< NekDouble > v_OrthoBasisDeriv(const int dir, const int mode)=0
Return the values of the derivative of the orthogonal basis at the nodal points for a given mode.
SharedMatrix GetInterpolationMatrix(Array< OneD, Array< OneD, NekDouble >> &xi)
Construct the interpolation matrix used to evaluate the basis at the points xi inside the element.
virtual NekVector< NekDouble > v_OrthoBasis(const int mode)=0
Return the values of the orthogonal basis at the nodal points for a given mode.
Specialisation of the NodalUtil class to support nodal prismatic elements.
NodalUtilPrism(int degree, Array< OneD, NekDouble > r, Array< OneD, NekDouble > s, Array< OneD, NekDouble > t)
Construct the nodal utility class for a prism.
virtual NekVector< NekDouble > v_OrthoBasisDeriv(const int dir, const int mode) override
Return the value of the derivative of the modal functions for the prismatic element at the nodal poin...
virtual NekVector< NekDouble > v_OrthoBasis(const int mode) override
Return the value of the modal functions for the prismatic element at the nodal points m_xi for a give...
virtual int v_NumModes() override
Calculate the number of degrees of freedom for this element.
Array< OneD, Array< OneD, NekDouble > > m_eta
Collapsed coordinates of the nodal points.
virtual std::shared_ptr< NodalUtil > v_CreateUtil(Array< OneD, Array< OneD, NekDouble >> &xi) override
Construct a NodalUtil object of the appropriate element type for a given set of points.
std::vector< Mode > m_ordering
Mapping from the indexing of the basis to a continuous ordering.
virtual NekDouble v_ModeZeroIntegral() override
Return the value of the integral of the zero-th mode for this element.
virtual ~NodalUtilPrism()
std::tuple< int, int, int > Mode
Specialisation of the NodalUtil class to support nodal quad elements.
virtual NekVector< NekDouble > v_OrthoBasisDeriv(const int dir, const int mode) override
Return the value of the derivative of the modal functions for the quadrilateral element at the nodal ...
NodalUtilQuad(int degree, Array< OneD, NekDouble > r, Array< OneD, NekDouble > s)
Construct the nodal utility class for a quadrilateral.
virtual NekDouble v_ModeZeroIntegral() override
Return the value of the integral of the zero-th mode for this element.
virtual std::shared_ptr< NodalUtil > v_CreateUtil(Array< OneD, Array< OneD, NekDouble >> &xi) override
Construct a NodalUtil object of the appropriate element type for a given set of points.
virtual int v_NumModes() override
Calculate the number of degrees of freedom for this element.
std::vector< std::pair< int, int > > m_ordering
Mapping from the indexing of the basis to a continuous ordering.
virtual NekVector< NekDouble > v_OrthoBasis(const int mode) override
Return the value of the modal functions for the quad element at the nodal points m_xi for a given mod...
Specialisation of the NodalUtil class to support nodal tetrahedral elements.
virtual int v_NumModes() override
Calculate the number of degrees of freedom for this element.
virtual std::shared_ptr< NodalUtil > v_CreateUtil(Array< OneD, Array< OneD, NekDouble >> &xi) override
Construct a NodalUtil object of the appropriate element type for a given set of points.
std::tuple< int, int, int > Mode
virtual NekVector< NekDouble > v_OrthoBasisDeriv(const int dir, const int mode) override
Return the value of the derivative of the modal functions for the tetrahedral element at the nodal po...
Array< OneD, Array< OneD, NekDouble > > m_eta
Collapsed coordinates of the nodal points.
NodalUtilTetrahedron(int degree, Array< OneD, NekDouble > r, Array< OneD, NekDouble > s, Array< OneD, NekDouble > t)
Construct the nodal utility class for a tetrahedron.
std::vector< Mode > m_ordering
Mapping from the indexing of the basis to a continuous ordering.
virtual ~NodalUtilTetrahedron()
virtual NekVector< NekDouble > v_OrthoBasis(const int mode) override
Return the value of the modal functions for the tetrahedral element at the nodal points m_xi for a gi...
virtual NekDouble v_ModeZeroIntegral() override
Return the value of the integral of the zero-th mode for this element.
Specialisation of the NodalUtil class to support nodal triangular elements.
NodalUtilTriangle(int degree, Array< OneD, NekDouble > r, Array< OneD, NekDouble > s)
Construct the nodal utility class for a triangle.
virtual NekDouble v_ModeZeroIntegral() override
Return the value of the integral of the zero-th mode for this element.
std::vector< std::pair< int, int > > m_ordering
Mapping from the indexing of the basis to a continuous ordering.
virtual NekVector< NekDouble > v_OrthoBasisDeriv(const int dir, const int mode) override
Return the value of the derivative of the modal functions for the triangular element at the nodal poi...
virtual ~NodalUtilTriangle()
virtual NekVector< NekDouble > v_OrthoBasis(const int mode) override
Return the value of the modal functions for the triangular element at the nodal points m_xi for a giv...
virtual std::shared_ptr< NodalUtil > v_CreateUtil(Array< OneD, Array< OneD, NekDouble >> &xi) override
Construct a NodalUtil object of the appropriate element type for a given set of points.
virtual int v_NumModes() override
Calculate the number of degrees of freedom for this element.
Array< OneD, Array< OneD, NekDouble > > m_eta
Collapsed coordinates of the nodal points.
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
std::shared_ptr< NekMatrix< NekDouble > > SharedMatrix
The above copyright notice and this permission notice shall be included.
scalarT< T > sqrt(scalarT< T > in)