Nektar++
Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Static Private Attributes | List of all members
Nektar::NekMeshUtils::Pyramid Class Reference

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

#include <Pyramid.h>

Inheritance diagram for Nektar::NekMeshUtils::Pyramid:
[legend]

Public Member Functions

NEKMESHUTILS_EXPORT Pyramid (ElmtConfig pConf, std::vector< NodeSharedPtr > pNodeList, std::vector< int > pTagList)
 Create a pyramidic element. More...
 
NEKMESHUTILS_EXPORT Pyramid (const Pyramid &pSrc)
 
virtual NEKMESHUTILS_EXPORT ~Pyramid ()
 
virtual NEKMESHUTILS_EXPORT SpatialDomains::GeometrySharedPtr GetGeom (int coordDim)
 Generate a Nektar++ geometry object for this element. More...
 
virtual NEKMESHUTILS_EXPORT int GetFaceVertex (int i, int j)
 Returns the local index of vertex j of face i. More...
 
- Public Member Functions inherited from Nektar::NekMeshUtils::Element
NEKMESHUTILS_EXPORT Element (ElmtConfig pConf, unsigned int pNumNodes, unsigned int pGotNodes)
 
NEKMESHUTILS_EXPORT unsigned int GetId () const
 Returns the ID of the element (or associated edge or face for boundary elements). More...
 
NEKMESHUTILS_EXPORT unsigned int GetDim () const
 Returns the expansion dimension of the element. More...
 
NEKMESHUTILS_EXPORT ElmtConfig GetConf () const
 Returns the configuration of the element. More...
 
NEKMESHUTILS_EXPORT LibUtilities::ShapeType GetShapeType () const
 returns the shapetype More...
 
NEKMESHUTILS_EXPORT std::string GetTag () const
 Returns the tag which defines the element shape. More...
 
NEKMESHUTILS_EXPORT NodeSharedPtr GetVertex (unsigned int i) const
 Access a vertex node. More...
 
NEKMESHUTILS_EXPORT EdgeSharedPtr GetEdge (unsigned int i) const
 Access an edge. More...
 
NEKMESHUTILS_EXPORT FaceSharedPtr GetFace (unsigned int i) const
 Access a face. More...
 
NEKMESHUTILS_EXPORT std::vector< NodeSharedPtrGetVertexList () const
 Access the list of vertex nodes. More...
 
NEKMESHUTILS_EXPORT std::vector< EdgeSharedPtrGetEdgeList () const
 Access the list of edges. More...
 
NEKMESHUTILS_EXPORT std::vector< FaceSharedPtrGetFaceList () const
 Access the list of faces. More...
 
NEKMESHUTILS_EXPORT std::vector< NodeSharedPtrGetVolumeNodes () const
 Access the list of volume nodes. More...
 
NEKMESHUTILS_EXPORT void SetVolumeNodes (std::vector< NodeSharedPtr > &nodes)
 
NEKMESHUTILS_EXPORT LibUtilities::PointsType GetCurveType () const
 
NEKMESHUTILS_EXPORT void SetCurveType (LibUtilities::PointsType cT)
 
NEKMESHUTILS_EXPORT unsigned int GetNodeCount ()
 Returns the total number of nodes (vertices, edge nodes and face nodes and volume nodes). More...
 
NEKMESHUTILS_EXPORT std::vector< int > GetTagList () const
 Access the list of tags associated with this element. More...
 
NEKMESHUTILS_EXPORT unsigned int GetVertexCount () const
 Returns the number of vertices. More...
 
NEKMESHUTILS_EXPORT unsigned int GetEdgeCount () const
 Returns the number of edges. More...
 
NEKMESHUTILS_EXPORT unsigned int GetFaceCount () const
 Returns the number of faces. More...
 
NEKMESHUTILS_EXPORT void SetId (unsigned int p)
 Change the ID of the element. More...
 
NEKMESHUTILS_EXPORT void SetVertex (unsigned int p, NodeSharedPtr pNew, bool descend=true)
 Replace a vertex in the element. More...
 
NEKMESHUTILS_EXPORT void SetEdge (unsigned int p, EdgeSharedPtr pNew, bool descend=true)
 Replace an edge in the element. More...
 
NEKMESHUTILS_EXPORT void SetFace (unsigned int p, FaceSharedPtr pNew)
 Replace a face in the element. More...
 
NEKMESHUTILS_EXPORT void SetEdgeLink (EdgeSharedPtr pLink)
 Set a correspondence between this element and an edge (2D boundary element). More...
 
NEKMESHUTILS_EXPORT EdgeSharedPtr GetEdgeLink ()
 Get correspondence between this element and an edge. More...
 
NEKMESHUTILS_EXPORT void SetFaceLink (FaceSharedPtr pLink)
 Set a correspondence between this element and a face (3D boundary element). More...
 
NEKMESHUTILS_EXPORT FaceSharedPtr GetFaceLink ()
 Get correspondence between this element and a face. More...
 
NEKMESHUTILS_EXPORT void SetBoundaryLink (int i, int j)
 Set a correspondence between edge or face i and its representative boundary element m->element[expDim-1][j]. More...
 
NEKMESHUTILS_EXPORT int GetBoundaryLink (int i)
 Get the location of the boundary face/edge i for this element. More...
 
NEKMESHUTILS_EXPORT bool HasBoundaryLinks ()
 Is this element connected to a boundary. More...
 
NEKMESHUTILS_EXPORT void SetTagList (const std::vector< int > &tags)
 Set the list of tags associated with this element. More...
 
virtual NEKMESHUTILS_EXPORT std::string GetXmlString ()
 Generate a list of vertices (1D), edges (2D), or faces (3D). More...
 
virtual NEKMESHUTILS_EXPORT void GetCurvedNodes (std::vector< NodeSharedPtr > &nodeList) const
 get list of volume interior nodes More...
 
NEKMESHUTILS_EXPORT std::string GetXmlCurveString ()
 Generates a string listing the coordinates of all nodes associated with this element. More...
 
NEKMESHUTILS_EXPORT int GetMaxOrder ()
 Obtain the order of an element by looking at edges. More...
 
NEKMESHUTILS_EXPORT bool IsDeformed ()
 Determines whether an element is deformed by inspecting whether there are any edge, face or volume interior nodes. More...
 
NEKMESHUTILS_EXPORT std::pair< Node, NodeGetBoundingBox ()
 Returns the approximate bounding box of this element based on the coordinates of all vertices, edges and faces of the element. Note that this does not robustly take into account the curvature of the element. More...
 
virtual NEKMESHUTILS_EXPORT void MakeOrder (int order, SpatialDomains::GeometrySharedPtr geom, LibUtilities::PointsType edgeType, int coordDim, int &id, bool justConfig=false)
 Insert interior (i.e. volume) points into this element to make the geometry an order order representation. More...
 
virtual NEKMESHUTILS_EXPORT StdRegions::Orientation GetEdgeOrient (int edgeId, EdgeSharedPtr edge)
 Get the edge orientation of edge with respect to the local element, which lies at edge index edgeId. More...
 
NEKMESHUTILS_EXPORT void Print ()
 
virtual NEKMESHUTILS_EXPORT Array< OneD, NekDoubleNormal (bool inward=false)
 returns the normal to the element More...
 

Static Public Member Functions

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

Public Attributes

int orientationMap [5]
 
- Public Attributes inherited from Nektar::NekMeshUtils::Element
CADObjectSharedPtr m_parentCAD
 

Static Public Attributes

static LibUtilities::ShapeType type
 Element type. More...
 

Static Private Attributes

static int m_faceIds [5][4]
 Vertex IDs that make up pyramid faces. More...
 

Additional Inherited Members

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

Detailed Description

A 3-dimensional square-based pyramidic element.

Definition at line 48 of file Pyramid.h.

Constructor & Destructor Documentation

◆ Pyramid() [1/2]

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

Create a pyramidic element.

Definition at line 57 of file Pyramid.cpp.

60  : Element(pConf, GetNumNodes(pConf), pNodeList.size())
61 {
62  m_tag = "P";
63  m_dim = 3;
64  m_taglist = pTagList;
65  int n = m_conf.m_order - 1;
66 
67  // This edge-node map is based on Nektar++ ordering.
68  map<pair<int, int>, int> edgeNodeMap;
69  map<pair<int, int>, int>::iterator it;
70  edgeNodeMap[pair<int, int>(1, 2)] = 6;
71  edgeNodeMap[pair<int, int>(2, 3)] = 6 + n;
72  edgeNodeMap[pair<int, int>(4, 3)] = 6 + 2 * n;
73  edgeNodeMap[pair<int, int>(1, 4)] = 6 + 3 * n;
74  edgeNodeMap[pair<int, int>(1, 5)] = 6 + 4 * n;
75  edgeNodeMap[pair<int, int>(2, 5)] = 6 + 5 * n;
76  edgeNodeMap[pair<int, int>(3, 5)] = 6 + 6 * n;
77  edgeNodeMap[pair<int, int>(4, 5)] = 6 + 7 * n;
78 
79  // Add vertices
80  for (int i = 0; i < 5; ++i)
81  {
82  m_vertex.push_back(pNodeList[i]);
83  }
84 
85  // Create edges (with corresponding set of edge points)
86  int eid = 0;
87  for (it = edgeNodeMap.begin(); it != edgeNodeMap.end(); ++it)
88  {
89  vector<NodeSharedPtr> edgeNodes;
90  if (m_conf.m_order > 1)
91  {
92  for (int j = it->second; j < it->second + n; ++j)
93  {
94  edgeNodes.push_back(pNodeList[j - 1]);
95  }
96  }
97  m_edge.push_back(EdgeSharedPtr(new Edge(pNodeList[it->first.first - 1],
98  pNodeList[it->first.second - 1],
99  edgeNodes,
101  m_edge.back()->m_id = eid++;
102  }
103 
104  // Create faces
105  int face_edges[5][4];
106  int faceoffset = 5 + 8 * n;
107  for (int j = 0; j < 5; ++j)
108  {
109  vector<NodeSharedPtr> faceVertices;
110  vector<EdgeSharedPtr> faceEdges;
111  vector<NodeSharedPtr> faceNodes;
112  int nEdge = j > 0 ? 3 : 4;
113 
114  for (int k = 0; k < nEdge; ++k)
115  {
116  faceVertices.push_back(m_vertex[m_faceIds[j][k]]);
117  NodeSharedPtr a = m_vertex[m_faceIds[j][k]];
118  NodeSharedPtr b = m_vertex[m_faceIds[j][(k + 1) % nEdge]];
119  for (unsigned int i = 0; i < m_edge.size(); ++i)
120  {
121  if ((m_edge[i]->m_n1 == a && m_edge[i]->m_n2 == b) ||
122  (m_edge[i]->m_n1 == b && m_edge[i]->m_n2 == a))
123  {
124  faceEdges.push_back(m_edge[i]);
125  face_edges[j][k] = i;
126  break;
127  }
128  }
129  }
130 
131  if (m_conf.m_faceNodes)
132  {
133  int facenodes = j == 0 ? n * n : n * (n - 1) / 2;
134  for (int i = 0; i < facenodes; ++i)
135  {
136  faceNodes.push_back(pNodeList[faceoffset + i]);
137  }
138  faceoffset += facenodes;
139  }
140  m_face.push_back(FaceSharedPtr(new Face(
141  faceVertices, faceNodes, faceEdges, m_conf.m_faceCurveType)));
142  }
143 
144  // Reorder edges to align with Nektar++ order.
145  vector<EdgeSharedPtr> tmp(8);
146  tmp[0] = m_edge[face_edges[0][0]];
147  tmp[1] = m_edge[face_edges[0][1]];
148  tmp[2] = m_edge[face_edges[0][2]];
149  tmp[3] = m_edge[face_edges[0][3]];
150  tmp[4] = m_edge[face_edges[1][2]];
151  tmp[5] = m_edge[face_edges[1][1]];
152  tmp[6] = m_edge[face_edges[3][1]];
153  tmp[7] = m_edge[face_edges[3][2]];
154  m_edge = tmp;
155 }
std::string m_tag
Tag character describing the element.
Definition: Element.h:464
std::vector< NodeSharedPtr > m_vertex
List of element vertex nodes.
Definition: Element.h:468
std::vector< EdgeSharedPtr > m_edge
List of element edges.
Definition: Element.h:470
std::vector< int > m_taglist
List of integers specifying properties of the element.
Definition: Element.h:466
ElmtConfig m_conf
Contains configuration of the element.
Definition: Element.h:462
std::vector< FaceSharedPtr > m_face
List of element faces.
Definition: Element.h:472
NEKMESHUTILS_EXPORT Element(ElmtConfig pConf, unsigned int pNumNodes, unsigned int pGotNodes)
Definition: Element.cpp:50
unsigned int m_dim
Dimension of the element.
Definition: Element.h:460
static int m_faceIds[5][4]
Vertex IDs that make up pyramid faces.
Definition: Pyramid.h:83
static NEKMESHUTILS_EXPORT unsigned int GetNumNodes(ElmtConfig pConf)
Return the number of nodes defining a pyramid.
Definition: Pyramid.cpp:176
std::shared_ptr< Edge > EdgeSharedPtr
Shared pointer to an edge.
Definition: Edge.h:136
std::shared_ptr< Face > FaceSharedPtr
Definition: Face.h:155
std::shared_ptr< Node > NodeSharedPtr
Definition: CADVert.h:49
unsigned int m_order
Order of the element.
Definition: ElementConfig.h:88
LibUtilities::PointsType m_edgeCurveType
Distribution of points in edges.
Definition: ElementConfig.h:93
bool m_faceNodes
Denotes whether the element contains face nodes. For 2D elements, if this is true then the element co...
Definition: ElementConfig.h:81
LibUtilities::PointsType m_faceCurveType
Distribution of points in faces.
Definition: ElementConfig.h:95

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

◆ Pyramid() [2/2]

NEKMESHUTILS_EXPORT Nektar::NekMeshUtils::Pyramid::Pyramid ( const Pyramid pSrc)

◆ ~Pyramid()

virtual NEKMESHUTILS_EXPORT Nektar::NekMeshUtils::Pyramid::~Pyramid ( )
inlinevirtual

Definition at line 65 of file Pyramid.h.

66  {
67  }

Member Function Documentation

◆ create()

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

Creates an instance of this class.

Definition at line 52 of file Pyramid.h.

55  {
56  return std::make_shared<Pyramid>(pConf, pNodeList, pTagList);
57  }

◆ GetFaceVertex()

virtual NEKMESHUTILS_EXPORT int Nektar::NekMeshUtils::Pyramid::GetFaceVertex ( int  i,
int  j 
)
inlinevirtual

Returns the local index of vertex j of face i.

Reimplemented from Nektar::NekMeshUtils::Element.

Definition at line 72 of file Pyramid.h.

73  {
74  return m_faceIds[i][j];
75  }

References m_faceIds.

◆ GetGeom()

SpatialDomains::GeometrySharedPtr Nektar::NekMeshUtils::Pyramid::GetGeom ( int  coordDim)
virtual

Generate a Nektar++ geometry object for this element.

Reimplemented from Nektar::NekMeshUtils::Element.

Definition at line 157 of file Pyramid.cpp.

158 {
160 
161  for (int i = 0; i < 5; ++i)
162  {
163  faces[i] = m_face[i]->GetGeom(coordDim);
164  }
165 
167  m_id, faces);
168  m_geom->Setup();
169 
170  return m_geom;
171 }
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
unsigned int m_id
ID of the element.
Definition: Element.h:458
SpatialDomains::GeometrySharedPtr m_geom
Nektar++ geometry object for this element.
Definition: Element.h:485
std::shared_ptr< Geometry2D > Geometry2DSharedPtr
Definition: Geometry.h:65

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::NekMeshUtils::Element::m_face, Nektar::NekMeshUtils::Element::m_geom, and Nektar::NekMeshUtils::Element::m_id.

◆ GetNumNodes()

unsigned int Nektar::NekMeshUtils::Pyramid::GetNumNodes ( ElmtConfig  pConf)
static

Return the number of nodes defining a pyramid.

Definition at line 176 of file Pyramid.cpp.

177 {
178  int n = pConf.m_order;
179 
180  if (pConf.m_faceNodes)
181  {
182  // @todo currently only valid for 2nd order pyramids
183  return 5 + 8 * (n - 1) + (n - 1)*(n - 1);
184  }
185  else
186  {
187  return 5 + 8 * (n - 1);
188  }
189 }

References Nektar::NekMeshUtils::ElmtConfig::m_faceNodes, and Nektar::NekMeshUtils::ElmtConfig::m_order.

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

Member Data Documentation

◆ m_faceIds

int Nektar::NekMeshUtils::Pyramid::m_faceIds
staticprivate
Initial value:
= {
{0, 1, 2, 3}, {0, 1, 4, -1}, {1, 2, 4, -1}, {3, 2, 4, -1}, {0, 3, 4, -1}
}

Vertex IDs that make up pyramid faces.

Definition at line 83 of file Pyramid.h.

Referenced by GetFaceVertex(), and Pyramid().

◆ orientationMap

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

Orientation of pyramid.

Definition at line 80 of file Pyramid.h.

◆ type

LibUtilities::ShapeType Nektar::NekMeshUtils::Pyramid::type
static
Initial value:
=
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
Definition: NekFactory.hpp:199
static ElementSharedPtr create(ElmtConfig pConf, std::vector< NodeSharedPtr > pNodeList, std::vector< int > pTagList)
Creates an instance of this class.
Definition: Pyramid.h:52
ElementFactory & GetElementFactory()
Definition: Element.cpp:44

Element type.

Definition at line 59 of file Pyramid.h.