All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | List of all members
Nektar::Utilities::Pyramid Class Reference

A 3-dimensional square-based pyramidic element. More...

#include <MeshElements.h>

Inheritance diagram for Nektar::Utilities::Pyramid:
Inheritance graph
Collaboration diagram for Nektar::Utilities::Pyramid:
Collaboration graph

Public Member Functions

 Pyramid (ElmtConfig pConf, std::vector< NodeSharedPtr > pNodeList, std::vector< int > pTagList)
 Create a pyramidic element.
 Pyramid (const Pyramid &pSrc)
virtual ~Pyramid ()
GetGeom (int coordDim)
 Generate a Nektar++ geometry object for this element.
- Public Member Functions inherited from Nektar::Utilities::Element
 Element (ElmtConfig pConf, unsigned int pNumNodes, unsigned int pGotNodes)
unsigned int GetId () const
 Returns the ID of the element (or associated edge or face for boundary elements).
unsigned int GetDim () const
 Returns the expansion dimension of the element.
ElmtConfig GetConf () const
 Returns the configuration of the element.
std::string GetTag () const
 Returns the tag which defines the element shape.
NodeSharedPtr GetVertex (unsigned int i) const
 Access a vertex node.
EdgeSharedPtr GetEdge (unsigned int i) const
 Access an edge.
FaceSharedPtr GetFace (unsigned int i) const
 Access a face.
std::vector< NodeSharedPtrGetVertexList () const
 Access the list of vertex nodes.
std::vector< EdgeSharedPtrGetEdgeList () const
 Access the list of edges.
std::vector< FaceSharedPtrGetFaceList () const
 Access the list of faces.
std::vector< NodeSharedPtrGetVolumeNodes () const
 Access the list of volume nodes.
void SetVolumeNodes (std::vector< NodeSharedPtr > &nodes)
LibUtilities::PointsType GetCurveType () const
void SetCurveType (LibUtilities::PointsType cT)
unsigned int GetNodeCount () const
 Returns the total number of nodes (vertices, edge nodes and face nodes and volume nodes).
std::vector< int > GetTagList () const
 Access the list of tags associated with this element.
unsigned int GetVertexCount () const
 Returns the number of vertices.
unsigned int GetEdgeCount () const
 Returns the number of edges.
unsigned int GetFaceCount () const
 Returns the number of faces.
void SetId (unsigned int p)
 Change the ID of the element.
void SetVertex (unsigned int p, NodeSharedPtr pNew)
 Replace a vertex with another vertex object.
void SetEdge (unsigned int p, EdgeSharedPtr pNew)
 Replace an edge with another edge object.
void SetFace (unsigned int p, FaceSharedPtr pNew)
 Replace a face with another face object.
void SetEdgeLink (EdgeSharedPtr pLink)
 Set a correspondence between this element and an edge (2D boundary element).
EdgeSharedPtr GetEdgeLink ()
 Get correspondence between this element and an edge.
void SetFaceLink (FaceSharedPtr pLink)
 Set a correspondence between this element and a face (3D boundary element).
FaceSharedPtr GetFaceLink ()
 Get correspondence between this element and a face.
void SetBoundaryLink (int i, int j)
 Set a correspondence between edge or face i and its representative boundary element m->element[expDim-1][j].
int GetBoundaryLink (int i)
 Get the location of the boundary face/edge i for this element.
void SetTagList (const std::vector< int > &tags)
 Set the list of tags associated with this element.
virtual std::string GetXmlString () const
 Generate a list of vertices (1D), edges (2D), or faces (3D).
std::vector< NodeSharedPtrtensorNodeOrdering (const std::vector< NodeSharedPtr > &nodes, int n) const
 Reorders Gmsh ordered nodes into a row-by-row ordering required for Nektar++ curve tags.
std::string GetXmlCurveString () const
 Generates a string listing the coordinates of all nodes associated with this element.
int GetMaxOrder ()
 Obtain the order of an element by looking at edges.
virtual void Complete (int order)
 Complete this object.
void Print ()

Static Public Member Functions

static ElementSharedPtr create (ElmtConfig pConf, std::vector< NodeSharedPtr > pNodeList, std::vector< int > pTagList)
 Creates an instance of this class.
static unsigned int GetNumNodes (ElmtConfig pConf)
 Return the number of nodes defining a pyramid.

Public Attributes

int orientationMap [5]

Static Public Attributes

static LibUtilities::ShapeType type
 Element type.

Additional Inherited Members

- Protected Attributes inherited from Nektar::Utilities::Element
unsigned int m_id
 ID of the element.
unsigned int m_dim
 Dimension of the element.
ElmtConfig m_conf
 Contains configuration of the element.
std::string m_tag
 Tag character describing the element.
std::vector< int > m_taglist
 List of integers specifying properties of the element.
std::vector< NodeSharedPtrm_vertex
 List of element vertex nodes.
std::vector< EdgeSharedPtrm_edge
 List of element edges.
std::vector< FaceSharedPtrm_face
 List of element faces.
std::vector< NodeSharedPtrm_volumeNodes
 List of element volume nodes.
LibUtilities::PointsType m_curveType
 Volume curve type.
EdgeSharedPtr m_edgeLink
 Pointer to the corresponding edge if element is a 2D boundary.
FaceSharedPtr m_faceLink
 Pointer to the corresponding face if element is a 3D boundary.
std::map< int, int > m_boundaryLinks
 Array mapping faces/edges to the location of the appropriate boundary elements in m->element.
SpatialDomains::GeometrySharedPtr m_geom
 Nektar++ geometry object for this element.

Detailed Description

A 3-dimensional square-based pyramidic element.

Definition at line 1383 of file MeshElements.h.

Constructor & Destructor Documentation

Nektar::Utilities::Pyramid::Pyramid ( ElmtConfig  pConf,
std::vector< NodeSharedPtr pNodeList,
std::vector< int >  pTagList 

Create a pyramidic element.

Definition at line 1216 of file MeshElements.cpp.

References Nektar::iterator, Nektar::Utilities::Element::m_conf, Nektar::Utilities::Element::m_dim, Nektar::Utilities::Element::m_edge, Nektar::Utilities::ElmtConfig::m_edgeCurveType, Nektar::Utilities::Element::m_face, Nektar::Utilities::ElmtConfig::m_faceCurveType, Nektar::Utilities::ElmtConfig::m_faceNodes, Nektar::Utilities::ElmtConfig::m_order, Nektar::Utilities::Element::m_tag, Nektar::Utilities::Element::m_taglist, and Nektar::Utilities::Element::m_vertex.

: Element(pConf, GetNumNodes(pConf), pNodeList.size())
m_tag = "P";
m_dim = 3;
m_taglist = pTagList;
int n = m_conf.m_order-1;
// This edge-node map is based on Nektar++ ordering.
map<pair<int,int>, int> edgeNodeMap;
map<pair<int,int>, int>::iterator it;
edgeNodeMap[pair<int,int>(1,2)] = 6;
edgeNodeMap[pair<int,int>(2,3)] = 6 + n;
edgeNodeMap[pair<int,int>(4,3)] = 6 + 2*n;
edgeNodeMap[pair<int,int>(1,4)] = 6 + 3*n;
edgeNodeMap[pair<int,int>(1,5)] = 6 + 4*n;
edgeNodeMap[pair<int,int>(2,5)] = 6 + 5*n;
edgeNodeMap[pair<int,int>(3,5)] = 6 + 6*n;
edgeNodeMap[pair<int,int>(4,5)] = 6 + 7*n;
// Add vertices
for (int i = 0; i < 5; ++i)
// Create edges (with corresponding set of edge points)
int eid = 0;
for (it = edgeNodeMap.begin(); it != edgeNodeMap.end(); ++it)
vector<NodeSharedPtr> edgeNodes;
if (m_conf.m_order > 1)
for (int j = it->second; j < it->second + n; ++j)
EdgeSharedPtr(new Edge(pNodeList[it->first.first-1],
m_edge.back()->m_id = eid++;
// Create faces
int face_ids[5][4] = {
{0,1,2,3}, {0,1,4,-1}, {1,2,4,-1}, {3,2,4,-1}, {0,3,4,-1}
int face_edges[5][4];
int faceoffset = 0;
for (int j = 0; j < 5; ++j)
vector<NodeSharedPtr> faceVertices;
vector<EdgeSharedPtr> faceEdges;
vector<NodeSharedPtr> faceNodes;
int nEdge = j > 0 ? 3 : 4;
for (int k = 0; k < nEdge; ++k)
NodeSharedPtr a = m_vertex[face_ids[j][k]];
NodeSharedPtr b = m_vertex[face_ids[j][(k+1) % nEdge]];
for (unsigned int i = 0; i < m_edge.size(); ++i)
if ((m_edge[i]->m_n1 == a && m_edge[i]->m_n2 == b) ||
(m_edge[i]->m_n1 == b && m_edge[i]->m_n2 == a))
face_edges[j][k] = i;
int facenodes = j == 0 ? n*n : n*(n-1)/2;
faceoffset += facenodes;
int N = 6 + 9*n + faceoffset;
for (int i = 0; i < facenodes; ++i)
new Face(faceVertices, faceNodes, faceEdges, m_conf.m_faceCurveType)));
vector<EdgeSharedPtr> tmp(8);
tmp[0] = m_edge[face_edges[0][0]];
tmp[1] = m_edge[face_edges[0][1]];
tmp[2] = m_edge[face_edges[0][2]];
tmp[3] = m_edge[face_edges[0][3]];
tmp[4] = m_edge[face_edges[1][2]];
tmp[5] = m_edge[face_edges[1][1]];
tmp[6] = m_edge[face_edges[3][1]];
tmp[7] = m_edge[face_edges[3][2]];
m_edge = tmp;
Nektar::Utilities::Pyramid::Pyramid ( const Pyramid pSrc)
virtual Nektar::Utilities::Pyramid::~Pyramid ( )

Definition at line 1407 of file MeshElements.h.


Member Function Documentation

static ElementSharedPtr Nektar::Utilities::Pyramid::create ( ElmtConfig  pConf,
std::vector< NodeSharedPtr pNodeList,
std::vector< int >  pTagList 

Creates an instance of this class.

Definition at line 1386 of file MeshElements.h.

References Nektar::Utilities::Element::GetFaceList().

ElementSharedPtr e = boost::shared_ptr<Element>(
new Pyramid(pConf, pNodeList, pTagList));
vector<FaceSharedPtr> faces = e->GetFaceList();
for (int i = 0; i < faces.size(); ++i)
faces[i]->m_elLink.push_back(pair<ElementSharedPtr, int>(e,i));
return e;
SpatialDomains::GeometrySharedPtr Nektar::Utilities::Pyramid::GetGeom ( int  coordDim)

Generate a Nektar++ geometry object for this element.

Reimplemented from Nektar::Utilities::Element.

Definition at line 1320 of file MeshElements.cpp.

References Nektar::Utilities::Element::m_face, and Nektar::Utilities::Element::m_geom.

for (int i = 0; i < 5; ++i)
faces[i] = m_face[i]->GetGeom(coordDim);
m_geom = MemoryManager<SpatialDomains::PyrGeom>::
return m_geom;
unsigned int Nektar::Utilities::Pyramid::GetNumNodes ( ElmtConfig  pConf)

Return the number of nodes defining a pyramid.

Definition at line 1338 of file MeshElements.cpp.

References Nektar::Utilities::ElmtConfig::m_order.

Referenced by Nektar::Utilities::InputGmsh::GetNnodes().

int n = pConf.m_order;
return 5 + 8*(n-1);

Member Data Documentation

int Nektar::Utilities::Pyramid::orientationMap[5]

Orientation of pyramid.

Definition at line 1415 of file MeshElements.h.

LibUtilities::ShapeType Nektar::Utilities::Pyramid::type
Initial value:
RegisterCreatorFunction(LibUtilities::ePyramid, Pyramid::create, "Pyramid")

Element type.

Definition at line 1401 of file MeshElements.h.