40 #include <boost/tuple/tuple.hpp>
53 namespace LibUtilities
134 const int dir,
const int mode) = 0;
191 const int dir,
const int mode);
202 return 2.0 * sqrt(2.0);
217 typedef boost::tuple<int, int, int>
Mode;
240 const int dir,
const int mode);
251 return 8.0 * sqrt(2.0) / 3.0;
266 typedef boost::tuple<int, int, int>
Mode;
289 const int dir,
const int mode);
300 return 4.0 * sqrt(2.0);
330 const int dir,
const int mode);
355 typedef boost::tuple<int, int, int>
Mode;
374 const int dir,
const int mode);
std::vector< Mode > m_ordering
Mapping from the indexing of the basis to a continuous ordering.
virtual NekDouble v_ModeZeroIntegral()
Return the value of the integral of the zero-th mode for this element.
virtual boost::shared_ptr< NodalUtil > v_CreateUtil(Array< OneD, Array< OneD, NekDouble > > &xi)
Construct a NodalUtil object of the appropriate element type for a given set of points.
virtual NekVector< NekDouble > v_OrthoBasisDeriv(const int dir, const int mode)
Return the value of the derivative of the modal functions for the tetrahedral element at the nodal po...
virtual ~NodalUtilPrism()
static boost::shared_ptr< DataType > AllocateSharedPtr()
Allocate a shared pointer from the memory pool.
virtual int v_NumModes()
Calculate the number of degrees of freedom for this element.
A class to assist in the construction of nodal simplex and hybrid elements in two and three dimension...
virtual NekVector< NekDouble > v_OrthoBasis(const int mode)
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 triangular elements.
boost::tuple< int, int, int > Mode
virtual NekDouble v_ModeZeroIntegral()
Return the value of the integral of the zero-th mode for this element.
NodalUtilPrism(int degree, Array< OneD, NekDouble > r, Array< OneD, NekDouble > s, Array< OneD, NekDouble > t)
Construct the nodal utility class for a prism.
Array< OneD, Array< OneD, NekDouble > > m_eta
Collapsed coordinates of the nodal points.
virtual boost::shared_ptr< NodalUtil > v_CreateUtil(Array< OneD, Array< OneD, NekDouble > > &xi)
Construct a NodalUtil object of the appropriate element type for a given set of points.
Array< OneD, Array< OneD, NekDouble > > m_eta
Collapsed coordinates of the nodal points.
SharedMatrix GetVandermondeForDeriv(int dir)
Return the Vandermonde matrix of the derivative of the basis functions for the nodal distribution...
SharedMatrix GetInterpolationMatrix(Array< OneD, Array< OneD, NekDouble > > &xi)
Construct the interpolation matrix used to evaluate the basis at the points xi inside the element...
boost::tuple< int, int, int > Mode
virtual NekDouble v_ModeZeroIntegral()
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.
int m_degree
Degree of the nodal element.
boost::shared_ptr< NekMatrix< NekDouble > > SharedMatrix
virtual ~NodalUtilTetrahedron()
virtual NekVector< NekDouble > v_OrthoBasis(const int mode)
Return the value of the modal functions for the triangular element at the nodal points m_xi for a giv...
#define LIB_UTILITIES_EXPORT
Specialisation of the NodalUtil class to support nodal hex elements.
virtual NekDouble v_ModeZeroIntegral()
Return the value of the integral of the zero-th mode for this element.
Array< OneD, Array< OneD, NekDouble > > m_eta
Collapsed coordinates of the nodal points.
SharedMatrix GetDerivMatrix(int dir)
Return the derivative matrix for the nodal distribution.
std::vector< Mode > m_ordering
Mapping from the indexing of the basis to a continuous ordering.
virtual int v_NumModes()
Calculate the number of degrees of freedom for this element.
NodalUtil(int degree, int dim)
Set up the NodalUtil object.
NekVector< NekDouble > GetWeights()
Obtain the integration weights for the given nodal distribution.
virtual boost::shared_ptr< NodalUtil > v_CreateUtil(Array< OneD, Array< OneD, NekDouble > > &xi)
Construct a NodalUtil object of the appropriate element type for a given set of points.
virtual int v_NumModes()
Calculate the number of degrees of freedom for this element.
virtual ~NodalUtilTriangle()
Specialisation of the NodalUtil class to support nodal prismatic elements.
virtual int v_NumModes()
Calculate the number of degrees of freedom for this element.
virtual boost::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.
virtual NekVector< NekDouble > v_OrthoBasisDeriv(const int dir, const int mode)
Return the value of the derivative of the modal functions for the quadrilateral element at the nodal ...
virtual NekVector< NekDouble > v_OrthoBasis(const int mode)
Return the value of the modal functions for the prismatic element at the nodal points m_xi for a give...
SharedMatrix GetVandermonde()
Return the Vandermonde matrix for the nodal distribution.
NodalUtilHex(int degree, Array< OneD, NekDouble > r, Array< OneD, NekDouble > s, Array< OneD, NekDouble > t)
Construct the nodal utility class for a hexahedron.
NodalUtilQuad(int degree, Array< OneD, NekDouble > r, Array< OneD, NekDouble > s)
Construct the nodal utility class for a quadrilateral.
virtual boost::shared_ptr< NodalUtil > v_CreateUtil(Array< OneD, Array< OneD, NekDouble > > &xi)
Construct a NodalUtil object of the appropriate element type for a given set of points.
Array< OneD, Array< OneD, NekDouble > > m_xi
Coordinates of the nodal points defining the basis.
virtual NekVector< NekDouble > v_OrthoBasisDeriv(const int dir, const int mode)
Return the values of the derivative of the orthogonal basis at the nodal points for a given mode...
std::vector< Mode > m_ordering
Mapping from the indexing of the basis to a continuous ordering.
virtual NekVector< NekDouble > v_OrthoBasis(const int mode)=0
Return the values of the orthogonal basis at the nodal points for a given mode.
virtual int v_NumModes()
Calculate the number of degrees of freedom for this element.
Specialisation of the NodalUtil class to support nodal quad elements.
virtual NekVector< NekDouble > v_OrthoBasisDeriv(const int dir, const int mode)
Return the value of the derivative of the modal functions for the prismatic element at the nodal poin...
int m_numPoints
Total number of nodal points.
NodalUtilTriangle(int degree, Array< OneD, NekDouble > r, Array< OneD, NekDouble > s)
Construct the nodal utility class for a triangle.
virtual NekVector< NekDouble > v_OrthoBasis(const int mode)
Return the value of the modal functions for the hex element at the nodal points m_xi for a given mode...
boost::tuple< int, int, int > Mode
std::vector< std::pair< int, int > > m_ordering
Mapping from the indexing of the basis to a continuous ordering.
virtual int v_NumModes()=0
Calculate the number of degrees of freedom for this element.
virtual NekVector< NekDouble > v_OrthoBasisDeriv(const int dir, const int mode)
Return the value of the derivative of the modal functions for the triangular element at the nodal poi...
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...
virtual NekDouble v_ModeZeroIntegral()
Return the value of the integral of the zero-th mode for this element.
virtual NekVector< NekDouble > v_OrthoBasis(const int mode)
Return the value of the modal functions for the tetrahedral element at the nodal points m_xi for a gi...
virtual NekDouble v_ModeZeroIntegral()=0
Return the value of the integral of the zero-th mode for this element.
int m_dim
Dimension of the nodal element.
NodalUtilTetrahedron(int degree, Array< OneD, NekDouble > r, Array< OneD, NekDouble > s, Array< OneD, NekDouble > t)
Construct the nodal utility class for a tetrahedron.
Specialisation of the NodalUtil class to support nodal tetrahedral elements.
virtual boost::shared_ptr< NodalUtil > v_CreateUtil(Array< OneD, Array< OneD, NekDouble > > &xi)
Construct a NodalUtil object of the appropriate element type for a given set of points.