This routine adds curvature points into a mesh so that the resulting elements are all of a uniform order order
and all high-order vertices are consistently ordered. It proceeds in a bottom-up fashion:
110 EdgeSet::iterator eit;
111 FaceSet::iterator fit;
113 std::unordered_map<int, EdgeSharedPtr> edgeCopies;
114 std::unordered_map<int, FaceSharedPtr> faceCopies;
118 std::map<LibUtilities::ShapeType, LibUtilities::PointsType> pTypes;
141 ASSERTL1(
false,
"Mesh::MakeOrder does not support this points type.");
153 for (
int i = 0; i < nElmt; ++i)
162 el->MakeOrder(order, geom, pTypes[el->GetConf().m_e],
m_spaceDim,
170 (*eit)->m_edgeNodes.clear();
180 for (
int i = 0; i < tmpFace->m_edgeList.size(); ++i)
182 tmpFace->m_edgeList[i] = edgeCopies[tmpFace->m_edgeList[i]->m_id];
185 faceCopies[(*fit)->m_id] = tmpFace;
186 (*fit)->m_faceNodes.clear();
189 std::unordered_set<int> processedEdges, processedFaces, processedVolumes;
202 "MakeOrder: Edges: ");
204 int edgeId = (*eit)->m_id;
206 if (processedEdges.find(edgeId) != processedEdges.end())
217 processedEdges.insert(edgeId);
228 "MakeOrder: Faces: ");
230 int faceId = (*fit)->m_id;
232 if (processedFaces.find(faceId) != processedFaces.end())
244 (*fit)->MakeOrder(order, geom, pTypes[type],
m_spaceDim,
id);
245 processedFaces.insert(faceId);
249 for (
int i = 0; i <
m_element[1].size(); ++i)
261 pTypes[el->GetConf().m_e],
m_spaceDim, id,
true);
262 el->SetVolumeNodes(edge->m_edgeNodes);
265 for (
int i = 0; i <
m_element[2].size(); ++i)
277 pTypes[el->GetConf().m_e],
m_spaceDim, id,
true);
278 el->SetVolumeNodes(face->m_faceNodes);
281 for (
int i = 0; i < nElmt; ++i)
284 for (
int j = 0; j < tmp.size(); ++j)
FaceSet m_faceSet
Set of element faces.
int PrintProgressbar(const int position, const int goal, const std::string message, int lastprogress=-1)
Prints a progressbar.
unsigned int m_spaceDim
Dimension of the space in which the mesh is defined.
std::shared_ptr< Edge > EdgeSharedPtr
Shared pointer to an edge.
unsigned int m_expDim
Dimension of the expansion.
std::shared_ptr< Face > FaceSharedPtr
1D Evenly-spaced points using Lagrange polynomial
ElementMap m_element
Map for elements.
NodeSet m_vertexSet
Set of element vertices.
std::shared_ptr< Element > ElementSharedPtr
3D Nodal Electrostatic Points on a Tetrahedron
std::shared_ptr< Geometry > GeometrySharedPtr
EdgeSet m_edgeSet
Set of element edges.
bool m_verbose
Verbose flag.
3D Evenly-spaced points on a Tetrahedron
3D Evenly-spaced points on a Prism
2D Evenly-spaced points on a Triangle
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
1D Gauss-Lobatto-Legendre quadrature points
2D Nodal Electrostatic Points on a Triangle
3D electrostatically spaced points on a Prism