Nektar++
Element.h
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////////////
2 //
3 // File: Element.h
4 //
5 // For more information, please see: http://www.nektar.info/
6 //
7 // The MIT License
8 //
9 // Copyright (c) 2006 Division of Applied Mathematics, Brown University (USA),
10 // Department of Aeronautics, Imperial College London (UK), and Scientific
11 // Computing and Imaging Institute, University of Utah (USA).
12 //
13 // Permission is hereby granted, free of charge, to any person obtaining a
14 // copy of this software and associated documentation files (the "Software"),
15 // to deal in the Software without restriction, including without limitation
16 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
17 // and/or sell copies of the Software, and to permit persons to whom the
18 // Software is furnished to do so, subject to the following conditions:
19 //
20 // The above copyright notice and this permission notice shall be included
21 // in all copies or substantial portions of the Software.
22 //
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
26 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
29 // DEALINGS IN THE SOFTWARE.
30 //
31 // Description: Mesh element.
32 //
33 ////////////////////////////////////////////////////////////////////////////////
34 
35 #ifndef NEKMESHUTILS_MESHELEMENTS_ELEMENT
36 #define NEKMESHUTILS_MESHELEMENTS_ELEMENT
37 
38 #include <boost/core/ignore_unused.hpp>
39 
43 
47 
48 namespace Nektar
49 {
50 namespace NekMeshUtils
51 {
52 
53 /**
54  * @brief Base class for element definitions.
55  *
56  * An element is defined by a list of vertices, edges and faces
57  * (depending on the dimension of the problem). This base class
58  * provides the underlying structure.
59  */
60 class Element
61 {
62 public:
64  ElmtConfig pConf, unsigned int pNumNodes, unsigned int pGotNodes);
65 
66  /// Returns the ID of the element (or associated edge or face for
67  /// boundary elements).
68  NEKMESHUTILS_EXPORT unsigned int GetId() const
69  {
70  if (m_faceLink.get() != 0)
71  return m_faceLink->m_id;
72  if (m_edgeLink.get() != 0)
73  return m_edgeLink->m_id;
74  return m_id;
75  }
76  /// Returns the expansion dimension of the element.
77  NEKMESHUTILS_EXPORT unsigned int GetDim() const
78  {
79  return m_dim;
80  }
81  /// Returns the configuration of the element.
83  {
84  return m_conf;
85  }
86  ///returns the shapetype
88  {
89  return m_conf.m_e;
90  }
91  /// Returns the tag which defines the element shape.
92  NEKMESHUTILS_EXPORT std::string GetTag() const
93  {
94  if (m_faceLink.get() != 0)
95  return "F";
96  if (m_edgeLink.get() != 0)
97  return "E";
98  return m_tag;
99  }
100  /// Access a vertex node.
102  {
103  return m_vertex[i];
104  }
105  /// Access an edge.
107  {
108  return m_edge[i];
109  }
110  /// Access a face.
112  {
113  return m_face[i];
114  }
115  /// Access the list of vertex nodes.
116  NEKMESHUTILS_EXPORT std::vector<NodeSharedPtr> GetVertexList() const
117  {
118  return m_vertex;
119  }
120  /// Access the list of edges.
121  NEKMESHUTILS_EXPORT std::vector<EdgeSharedPtr> GetEdgeList() const
122  {
123  return m_edge;
124  }
125  /// Access the list of faces.
126  NEKMESHUTILS_EXPORT std::vector<FaceSharedPtr> GetFaceList() const
127  {
128  return m_face;
129  }
130  /// Access the list of volume nodes.
131  NEKMESHUTILS_EXPORT std::vector<NodeSharedPtr> GetVolumeNodes() const
132  {
133  return m_volumeNodes;
134  }
135  NEKMESHUTILS_EXPORT void SetVolumeNodes(std::vector<NodeSharedPtr> &nodes)
136  {
137  m_volumeNodes = nodes;
138  }
140  {
141  return m_curveType;
142  }
144  {
145  m_curveType = cT;
146  }
147  /// Returns the total number of nodes (vertices, edge nodes and
148  /// face nodes and volume nodes).
149  NEKMESHUTILS_EXPORT unsigned int GetNodeCount();
150  /// Access the list of tags associated with this element.
151  NEKMESHUTILS_EXPORT std::vector<int> GetTagList() const
152  {
153  return m_taglist;
154  }
155  /// Returns the number of vertices.
156  NEKMESHUTILS_EXPORT unsigned int GetVertexCount() const
157  {
158  return m_vertex.size();
159  }
160  /// Returns the number of edges.
161  NEKMESHUTILS_EXPORT unsigned int GetEdgeCount() const
162  {
163  return m_edge.size();
164  }
165  /// Returns the number of faces.
166  NEKMESHUTILS_EXPORT unsigned int GetFaceCount() const
167  {
168  return m_face.size();
169  }
170  /// Change the ID of the element.
171  NEKMESHUTILS_EXPORT void SetId(unsigned int p)
172  {
173  m_id = p;
174  }
175  /**
176  * @brief Replace a vertex in the element.
177  *
178  * When a vertex is replaced, the element edges and faces are also
179  * searched and the corresponding edge/face nodes are updated to
180  * maintain consistency.
181  *
182  * @param p Index of the vertex to replace.
183  * @param pNew New vertex.
184  * @param descend If true, we loop over edges and faces and replace the
185  * corresponding vertices with @p pNew.
186  */
188  unsigned int p, NodeSharedPtr pNew, bool descend = true);
189  /**
190  * @brief Replace an edge in the element.
191  *
192  * When an edge is replaced, the element faces are also searched and
193  * the corresponding face edges are updated to maintain consistency.
194  *
195  * @param p Index of the edge to replace.
196  * @param pNew New edge.
197  * @param descend If true, we loop over faces and replace the corresponding
198  * face edge with @p pNew.
199  */
201  unsigned int p, EdgeSharedPtr pNew, bool descend = true);
202  /**
203  * @brief Replace a face in the element.
204  *
205  * When a face is replaced, no other consistency checks are required.
206  *
207  * @param p Index of the face to replace.
208  * @param pNew New face.
209  */
210  NEKMESHUTILS_EXPORT void SetFace(unsigned int p, FaceSharedPtr pNew);
211  /// Set a correspondence between this element and an edge
212  /// (2D boundary element).
214  {
215  m_edgeLink = pLink;
216  }
217  /// Get correspondence between this element and an edge.
219  {
220  return m_edgeLink;
221  }
222  /// Set a correspondence between this element and a face
223  /// (3D boundary element).
225  {
226  m_faceLink = pLink;
227  }
228  /// Get correspondence between this element and a face.
230  {
231  return m_faceLink;
232  }
233  /// Set a correspondence between edge or face i and its
234  /// representative boundary element m->element[expDim-1][j].
236  {
237  m_boundaryLinks[i] = j;
238  }
239  /// Get the location of the boundary face/edge i for this element.
241  {
242  std::map<int, int>::iterator it = m_boundaryLinks.find(i);
243  if (it == m_boundaryLinks.end())
244  {
245  return -1;
246  }
247  else
248  {
249  return it->second;
250  }
251  }
252  /// Is this element connected to a boundary
254  {
255  return m_boundaryLinks.size() > 0;
256  }
257  /// Set the list of tags associated with this element.
258  NEKMESHUTILS_EXPORT void SetTagList(const std::vector<int> &tags)
259  {
260  m_taglist = tags;
261  }
262  /// Generate a list of vertices (1D), edges (2D), or faces (3D).
263  NEKMESHUTILS_EXPORT virtual std::string GetXmlString();
264  /// get list of volume interior nodes
266  std::vector<NodeSharedPtr> &nodeList) const
267  {
268  boost::ignore_unused(nodeList);
270  "This function should be implemented at a shape level.");
271  }
272 
273  /// Generates a string listing the coordinates of all nodes
274  /// associated with this element.
276  /// Generate a Nektar++ geometry object for this element.
278  int coordDim)
279  {
280  boost::ignore_unused(coordDim);
282  "This function should be implemented at a shape level.");
283  return std::shared_ptr<SpatialDomains::Geometry>();
284  }
285 
286  /**
287  * @brief Obtain the order of an element by looking at edges.
288  */
290 
291  /**
292  * @brief Determines whether an element is deformed by inspecting whether
293  * there are any edge, face or volume interior nodes.
294  */
296  {
297  if (m_volumeNodes.size() > 0)
298  {
299  return true;
300  }
301 
302  for (auto &edge : m_edge)
303  {
304  if (edge->m_edgeNodes.size() > 0)
305  {
306  return true;
307  }
308  }
309 
310  for (auto &face : m_face)
311  {
312  if (face->m_faceNodes.size() > 0)
313  {
314  return true;
315  }
316  }
317 
318  return false;
319  }
320 
321  /**
322  * @brief Returns the approximate bounding box of this element based on the
323  * coordinates of all vertices, edges and faces of the element. Note that
324  * this does not robustly take into account the curvature of the element.
325  */
326  NEKMESHUTILS_EXPORT std::pair<Node, Node> GetBoundingBox()
327  {
328 #define SWAP_NODE(a) \
329  lower.m_x = std::min(lower.m_x, a->m_x); \
330  lower.m_y = std::min(lower.m_y, a->m_y); \
331  lower.m_z = std::min(lower.m_z, a->m_z); \
332  upper.m_x = std::max(upper.m_x, a->m_x); \
333  upper.m_y = std::max(upper.m_y, a->m_y); \
334  upper.m_z = std::max(upper.m_z, a->m_z);
335 
336  Node lower(*m_vertex[0]), upper(*m_vertex[0]);
337 
338  for (int i = 1; i < m_vertex.size(); ++i)
339  {
340  SWAP_NODE(m_vertex[i])
341  }
342  for (auto &edge : m_edge)
343  {
344  for (auto &edgeNode : edge->m_edgeNodes)
345  {
346  SWAP_NODE(edgeNode);
347  }
348  }
349  for (auto &face : m_face)
350  {
351  for (auto &faceNode : face->m_faceNodes)
352  {
353  SWAP_NODE(faceNode);
354  }
355  }
356 
357  return std::make_pair(lower, upper);
358 #undef SWAP_NODE
359  }
360 
361  /**
362  * @brief Insert interior (i.e. volume) points into this element to make the
363  * geometry an order @p order representation.
364  *
365  * @param order The desired polynomial order.
366  * @param geom The geometry object used to describe the curvature
367  * mapping.
368  * @param edgeType The points distribution to use on the volume.
369  * @param coordDim The coordinate (i.e. space) dimension.
370  * @param id Counter which should be incremented to supply
371  * consistent vertex IDs.
372  * @param justConfig If true, then the configuration Element::m_conf
373  * will be updated but no nodes will be
374  * generated. This is used when considering boundary
375  * elements, which just require copying of face or
376  * edge interior nodes.
377  */
379  int order,
381  LibUtilities::PointsType edgeType,
382  int coordDim,
383  int &id,
384  bool justConfig = false)
385  {
386  boost::ignore_unused(order, geom, edgeType, coordDim, id, justConfig);
388  "This function should be implemented at a shape level.");
389  }
390 
391  /**
392  * @brief Get the edge orientation of @p edge with respect to the local
393  * element, which lies at edge index @p edgeId.
394  */
396  int edgeId, EdgeSharedPtr edge)
397  {
398  boost::ignore_unused(edgeId, edge);
400  "This function should be implemented at a shape level.");
402  }
403 
404  /**
405  * @brief Returns the local index of vertex @p j of face @p i.
406  */
407  NEKMESHUTILS_EXPORT virtual int GetFaceVertex(int i, int j)
408  {
409  boost::ignore_unused(i, j);
411  "This function should be implemented at a shape level.");
412  return 0;
413  }
414 
416  {
417  int i, j;
418  for (i = 0; i < m_vertex.size(); ++i)
419  {
420  std::cout << m_vertex[i]->m_x << " " << m_vertex[i]->m_y << " "
421  << m_vertex[i]->m_z << std::endl;
422  }
423  for (i = 0; i < m_edge.size(); ++i)
424  {
425  for (j = 0; j < m_edge[i]->m_edgeNodes.size(); ++j)
426  {
427  NodeSharedPtr n = m_edge[i]->m_edgeNodes[j];
428  std::cout << n->m_x << " " << n->m_y << " " << n->m_z
429  << std::endl;
430  }
431  }
432  for (i = 0; i < m_face.size(); ++i)
433  {
434  for (j = 0; j < m_face[i]->m_faceNodes.size(); ++j)
435  {
436  NodeSharedPtr n = m_face[i]->m_faceNodes[j];
437  std::cout << n->m_x << " " << n->m_y << " " << n->m_z
438  << std::endl;
439  }
440  }
441  }
442 
443  /**
444  * @brief returns the normal to the element
445  */
446  NEKMESHUTILS_EXPORT virtual Array<OneD, NekDouble> Normal(bool inward = false)
447  {
448  boost::ignore_unused(inward);
450  "This function should be implemented at a shape level.");
451  return Array<OneD, NekDouble>();
452  }
453 
455 
456 protected:
457  /// ID of the element.
458  unsigned int m_id;
459  /// Dimension of the element.
460  unsigned int m_dim;
461  /// Contains configuration of the element.
463  /// Tag character describing the element.
464  std::string m_tag;
465  /// List of integers specifying properties of the element.
466  std::vector<int> m_taglist;
467  /// List of element vertex nodes.
468  std::vector<NodeSharedPtr> m_vertex;
469  /// List of element edges.
470  std::vector<EdgeSharedPtr> m_edge;
471  /// List of element faces.
472  std::vector<FaceSharedPtr> m_face;
473  /// List of element volume nodes.
474  std::vector<NodeSharedPtr> m_volumeNodes;
475  /// Volume curve type
477  /// Pointer to the corresponding edge if element is a 2D boundary.
479  /// Pointer to the corresponding face if element is a 3D boundary.
481  /// Array mapping faces/edges to the location of the appropriate
482  /// boundary elements in m->element.
483  std::map<int, int> m_boundaryLinks;
484  /// Nektar++ geometry object for this element.
486 };
487 
488 typedef std::shared_ptr<Element> ElementSharedPtr;
489 /// Container for elements; key is expansion dimension, value is
490 /// vector of elements of that dimension.
491 typedef std::map<unsigned int, std::vector<ElementSharedPtr> > ElementMap;
492 /// Element factory definition.
494  Element,
495  ElmtConfig,
496  std::vector<NodeSharedPtr>,
497  std::vector<int> > ElementFactory;
498 
499 NEKMESHUTILS_EXPORT ElementFactory &GetElementFactory();
500 
501 NEKMESHUTILS_EXPORT bool operator==(ElementSharedPtr const &e1,
502  ElementSharedPtr const &e2);
503 
504 /// Define element ordering based on ID.
506 {
507  typedef std::shared_ptr<Element> pT;
508  bool operator()(const pT a, const pT b) const
509  {
510  // check for 0
511  if (a.get() == 0)
512  {
513  // if b is also 0, then they are equal, hence a is not
514  // less than b
515  return b.get() != 0;
516  }
517  else if (b.get() == 0)
518  {
519  return false;
520  }
521  else
522  {
523  return a->GetId() < b->GetId();
524  }
525  }
526 };
527 }
528 }
529 
530 #endif
CADObjectSharedPtr m_parentCAD
Definition: Element.h:454
NEKMESHUTILS_EXPORT void SetEdge(unsigned int p, EdgeSharedPtr pNew, bool descend=true)
Replace an edge in the element.
Definition: Element.cpp:108
Basic information about an element.
Definition: ElementConfig.h:49
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mod...
Definition: ErrorUtil.hpp:209
NEKMESHUTILS_EXPORT LibUtilities::PointsType GetCurveType() const
Definition: Element.h:139
NEKMESHUTILS_EXPORT void SetFace(unsigned int p, FaceSharedPtr pNew)
Replace a face in the element.
Definition: Element.cpp:130
virtual NEKMESHUTILS_EXPORT SpatialDomains::GeometrySharedPtr GetGeom(int coordDim)
Generate a Nektar++ geometry object for this element.
Definition: Element.h:277
NEKMESHUTILS_EXPORT void SetBoundaryLink(int i, int j)
Set a correspondence between edge or face i and its representative boundary element m->element[expDim...
Definition: Element.h:235
bool operator()(const pT a, const pT b) const
Definition: Element.h:508
NEKMESHUTILS_EXPORT std::string GetTag() const
Returns the tag which defines the element shape.
Definition: Element.h:92
Define element ordering based on ID.
Definition: Element.h:505
NEKMESHUTILS_EXPORT std::vector< int > GetTagList() const
Access the list of tags associated with this element.
Definition: Element.h:151
NEKMESHUTILS_EXPORT bool IsDeformed()
Determines whether an element is deformed by inspecting whether there are any edge, face or volume interior nodes.
Definition: Element.h:295
NEKMESHUTILS_EXPORT LibUtilities::ShapeType GetShapeType() const
returns the shapetype
Definition: Element.h:87
NEKMESHUTILS_EXPORT unsigned int GetFaceCount() const
Returns the number of faces.
Definition: Element.h:166
NEKMESHUTILS_EXPORT FaceSharedPtr GetFace(unsigned int i) const
Access a face.
Definition: Element.h:111
NEKMESHUTILS_EXPORT void SetEdgeLink(EdgeSharedPtr pLink)
Set a correspondence between this element and an edge (2D boundary element).
Definition: Element.h:213
std::shared_ptr< Edge > EdgeSharedPtr
Shared pointer to an edge.
Definition: Edge.h:136
NEKMESHUTILS_EXPORT std::vector< NodeSharedPtr > GetVertexList() const
Access the list of vertex nodes.
Definition: Element.h:116
ElementFactory & GetElementFactory()
Definition: Element.cpp:44
ElmtConfig m_conf
Contains configuration of the element.
Definition: Element.h:462
FaceSharedPtr m_faceLink
Pointer to the corresponding face if element is a 3D boundary.
Definition: Element.h:480
Represents a point in the domain.
Definition: Node.h:62
std::shared_ptr< Node > NodeSharedPtr
Definition: CADVert.h:49
NEKMESHUTILS_EXPORT std::vector< EdgeSharedPtr > GetEdgeList() const
Access the list of edges.
Definition: Element.h:121
std::vector< int > m_taglist
List of integers specifying properties of the element.
Definition: Element.h:466
NEKMESHUTILS_EXPORT EdgeSharedPtr GetEdge(unsigned int i) const
Access an edge.
Definition: Element.h:106
bool operator==(ElmtConfig const &c1, ElmtConfig const &c2)
Compares two element config structs.
std::shared_ptr< Element > pT
Definition: Element.h:507
NEKMESHUTILS_EXPORT ElmtConfig GetConf() const
Returns the configuration of the element.
Definition: Element.h:82
std::shared_ptr< Face > FaceSharedPtr
Definition: Face.h:155
NEKMESHUTILS_EXPORT int GetMaxOrder()
Obtain the order of an element by looking at edges.
Definition: Element.cpp:135
std::map< int, int > m_boundaryLinks
Array mapping faces/edges to the location of the appropriate boundary elements in m->element...
Definition: Element.h:483
NEKMESHUTILS_EXPORT void SetCurveType(LibUtilities::PointsType cT)
Definition: Element.h:143
EdgeSharedPtr m_edgeLink
Pointer to the corresponding edge if element is a 2D boundary.
Definition: Element.h:478
NEKMESHUTILS_EXPORT void SetTagList(const std::vector< int > &tags)
Set the list of tags associated with this element.
Definition: Element.h:258
std::vector< NodeSharedPtr > m_vertex
List of element vertex nodes.
Definition: Element.h:468
unsigned int m_dim
Dimension of the element.
Definition: Element.h:460
NEKMESHUTILS_EXPORT std::string GetXmlCurveString()
Generates a string listing the coordinates of all nodes associated with this element.
Definition: Element.cpp:210
NEKMESHUTILS_EXPORT NodeSharedPtr GetVertex(unsigned int i) const
Access a vertex node.
Definition: Element.h:101
virtual NEKMESHUTILS_EXPORT Array< OneD, NekDouble > Normal(bool inward=false)
returns the normal to the element
Definition: Element.h:446
#define SWAP_NODE(a)
NEKMESHUTILS_EXPORT std::vector< NodeSharedPtr > GetVolumeNodes() const
Access the list of volume nodes.
Definition: Element.h:131
std::shared_ptr< Element > ElementSharedPtr
Definition: Edge.h:49
std::vector< EdgeSharedPtr > m_edge
List of element edges.
Definition: Element.h:470
std::shared_ptr< Geometry > GeometrySharedPtr
Definition: Geometry.h:53
virtual NEKMESHUTILS_EXPORT void GetCurvedNodes(std::vector< NodeSharedPtr > &nodeList) const
get list of volume interior nodes
Definition: Element.h:265
NEKMESHUTILS_EXPORT unsigned int GetEdgeCount() const
Returns the number of edges.
Definition: Element.h:161
NEKMESHUTILS_EXPORT int GetBoundaryLink(int i)
Get the location of the boundary face/edge i for this element.
Definition: Element.h:240
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...
Definition: Element.h:395
NEKMESHUTILS_EXPORT unsigned int GetDim() const
Returns the expansion dimension of the element.
Definition: Element.h:77
NEKMESHUTILS_EXPORT unsigned int GetId() const
Returns the ID of the element (or associated edge or face for boundary elements). ...
Definition: Element.h:68
std::vector< NodeSharedPtr > m_volumeNodes
List of element volume nodes.
Definition: Element.h:474
NEKMESHUTILS_EXPORT void SetVolumeNodes(std::vector< NodeSharedPtr > &nodes)
Definition: Element.h:135
NEKMESHUTILS_EXPORT bool HasBoundaryLinks()
Is this element connected to a boundary.
Definition: Element.h:253
NEKMESHUTILS_EXPORT std::pair< Node, Node > GetBoundingBox()
Returns the approximate bounding box of this element based on the coordinates of all vertices...
Definition: Element.h:326
std::string m_tag
Tag character describing the element.
Definition: Element.h:464
NEKMESHUTILS_EXPORT EdgeSharedPtr GetEdgeLink()
Get correspondence between this element and an edge.
Definition: Element.h:218
virtual NEKMESHUTILS_EXPORT std::string GetXmlString()
Generate a list of vertices (1D), edges (2D), or faces (3D).
Definition: Element.cpp:183
NEKMESHUTILS_EXPORT void SetVertex(unsigned int p, NodeSharedPtr pNew, bool descend=true)
Replace a vertex in the element.
Definition: Element.cpp:63
std::shared_ptr< CADObject > CADObjectSharedPtr
Definition: CADObject.h:133
NEKMESHUTILS_EXPORT Element(ElmtConfig pConf, unsigned int pNumNodes, unsigned int pGotNodes)
Definition: Element.cpp:50
SpatialDomains::GeometrySharedPtr m_geom
Nektar++ geometry object for this element.
Definition: Element.h:485
NEKMESHUTILS_EXPORT void SetFaceLink(FaceSharedPtr pLink)
Set a correspondence between this element and a face (3D boundary element).
Definition: Element.h:224
NEKMESHUTILS_EXPORT unsigned int GetVertexCount() const
Returns the number of vertices.
Definition: Element.h:156
unsigned int m_id
ID of the element.
Definition: Element.h:458
#define NEKMESHUTILS_EXPORT
std::map< unsigned int, std::vector< ElementSharedPtr > > ElementMap
Container for elements; key is expansion dimension, value is vector of elements of that dimension...
Definition: Element.h:491
NEKMESHUTILS_EXPORT void SetId(unsigned int p)
Change the ID of the element.
Definition: Element.h:171
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 representa...
Definition: Element.h:378
LibUtilities::PointsType m_curveType
Volume curve type.
Definition: Element.h:476
std::vector< FaceSharedPtr > m_face
List of element faces.
Definition: Element.h:472
NEKMESHUTILS_EXPORT void Print()
Definition: Element.h:415
NEKMESHUTILS_EXPORT std::vector< FaceSharedPtr > GetFaceList() const
Access the list of faces.
Definition: Element.h:126
Nektar::LibUtilities::NekFactory< LibUtilities::ShapeType, Element, ElmtConfig, std::vector< NodeSharedPtr >, std::vector< int > > ElementFactory
Element factory definition.
Definition: Element.h:497
NEKMESHUTILS_EXPORT FaceSharedPtr GetFaceLink()
Get correspondence between this element and a face.
Definition: Element.h:229
LibUtilities::ShapeType m_e
Element type (e.g. triangle, quad, etc).
Definition: ElementConfig.h:78
NEKMESHUTILS_EXPORT unsigned int GetNodeCount()
Returns the total number of nodes (vertices, edge nodes and face nodes and volume nodes)...
Definition: Element.cpp:151
virtual NEKMESHUTILS_EXPORT int GetFaceVertex(int i, int j)
Returns the local index of vertex j of face i.
Definition: Element.h:407
Base class for element definitions.
Definition: Element.h:60
Provides a generic Factory class.
Definition: NekFactory.hpp:103