Nektar++
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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:
Inheritance graph
[legend]
Collaboration diagram for Nektar::NekMeshUtils::Pyramid:
Collaboration graph
[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< NodeSharedPtr
GetVertexList () const
 Access the list of vertex nodes. More...
 
NEKMESHUTILS_EXPORT
std::vector< EdgeSharedPtr
GetEdgeList () const
 Access the list of edges. More...
 
NEKMESHUTILS_EXPORT
std::vector< FaceSharedPtr
GetFaceList () const
 Access the list of faces. More...
 
NEKMESHUTILS_EXPORT
std::vector< NodeSharedPtr
GetVolumeNodes () 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 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...
 
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, NekDouble
Normal (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 49 of file Pyramid.h.

Constructor & Destructor Documentation

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

Create a pyramidic element.

Definition at line 58 of file Pyramid.cpp.

References Nektar::iterator, 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.

Referenced by create().

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

Definition at line 67 of file Pyramid.h.

68  {
69  }

Member Function Documentation

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 53 of file Pyramid.h.

References Pyramid().

56  {
57  return boost::shared_ptr<Element>(
58  new Pyramid(pConf, pNodeList, pTagList));
59  }
NEKMESHUTILS_EXPORT Pyramid(ElmtConfig pConf, std::vector< NodeSharedPtr > pNodeList, std::vector< int > pTagList)
Create a pyramidic element.
Definition: Pyramid.cpp:58
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 74 of file Pyramid.h.

References m_faceIds.

75  {
76  return m_faceIds[i][j];
77  }
static int m_faceIds[5][4]
Vertex IDs that make up pyramid faces.
Definition: Pyramid.h:85
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 158 of file Pyramid.cpp.

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

159 {
161 
162  for (int i = 0; i < 5; ++i)
163  {
164  faces[i] = m_face[i]->GetGeom(coordDim);
165  }
166 
168 
169  return m_geom;
170 }
static boost::shared_ptr< DataType > AllocateSharedPtr()
Allocate a shared pointer from the memory pool.
boost::shared_ptr< Geometry2D > Geometry2DSharedPtr
Definition: Geometry2D.h:59
SpatialDomains::GeometrySharedPtr m_geom
Nektar++ geometry object for this element.
Definition: Element.h:403
std::vector< FaceSharedPtr > m_face
List of element faces.
Definition: Element.h:390
unsigned int Nektar::NekMeshUtils::Pyramid::GetNumNodes ( ElmtConfig  pConf)
static

Return the number of nodes defining a pyramid.

Definition at line 175 of file Pyramid.cpp.

References Nektar::NekMeshUtils::ElmtConfig::m_order.

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

176 {
177  int n = pConf.m_order;
178  return 5 + 8 * (n - 1);
179 }

Member Data Documentation

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 85 of file Pyramid.h.

Referenced by GetFaceVertex(), and Pyramid().

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

Orientation of pyramid.

Definition at line 82 of file Pyramid.h.

LibUtilities::ShapeType Nektar::NekMeshUtils::Pyramid::type
static
Initial value:

Element type.

Definition at line 61 of file Pyramid.h.