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

class containing all surface meshing routines methods and classes More...

#include <SurfaceMesh.h>

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

Public Member Functions

 SurfaceMesh (MeshSharedPtr m)
 
virtual ~SurfaceMesh ()
 
virtual void Process ()
 
- Public Member Functions inherited from Nektar::NekMeshUtils::ProcessModule
NEKMESHUTILS_EXPORT ProcessModule (MeshSharedPtr p_m)
 
- Public Member Functions inherited from Nektar::NekMeshUtils::Module
NEKMESHUTILS_EXPORT Module (MeshSharedPtr p_m)
 
NEKMESHUTILS_EXPORT void RegisterConfig (std::string key, std::string value=std::string())
 Register a configuration option with a module. More...
 
NEKMESHUTILS_EXPORT void PrintConfig ()
 Print out all configuration options for a module. More...
 
NEKMESHUTILS_EXPORT void SetDefaults ()
 Sets default configuration options for those which have not been set. More...
 
NEKMESHUTILS_EXPORT MeshSharedPtr GetMesh ()
 
virtual NEKMESHUTILS_EXPORT void ProcessVertices ()
 Extract element vertices. More...
 
virtual NEKMESHUTILS_EXPORT void ProcessEdges (bool ReprocessEdges=true)
 Extract element edges. More...
 
virtual NEKMESHUTILS_EXPORT void ProcessFaces (bool ReprocessFaces=true)
 Extract element faces. More...
 
virtual NEKMESHUTILS_EXPORT void ProcessElements ()
 Generate element IDs. More...
 
virtual NEKMESHUTILS_EXPORT void ProcessComposites ()
 Generate composites. More...
 
virtual NEKMESHUTILS_EXPORT void ClearElementLinks ()
 

Static Public Member Functions

static std::shared_ptr< Modulecreate (MeshSharedPtr m)
 Creates an instance of this class. More...
 

Static Public Attributes

static ModuleKey className
 

Private Member Functions

void Report ()
 

Private Attributes

std::map< int, FaceMeshSharedPtrm_facemeshes
 map of individual surface meshes from parametric surfaces More...
 
std::map< int, CurveMeshSharedPtrm_curvemeshes
 map of individual curve meshes of the curves in the domain More...
 

Additional Inherited Members

- Protected Member Functions inherited from Nektar::NekMeshUtils::Module
NEKMESHUTILS_EXPORT void ReorderPrisms (PerMap &perFaces)
 Reorder node IDs so that prisms and tetrahedra are aligned correctly. More...
 
NEKMESHUTILS_EXPORT void PrismLines (int prism, PerMap &perFaces, std::set< int > &prismsDone, std::vector< ElementSharedPtr > &line)
 
- Protected Attributes inherited from Nektar::NekMeshUtils::Module
MeshSharedPtr m_mesh
 Mesh object. More...
 
std::map< std::string, ConfigOptionm_config
 List of configuration values. More...
 

Detailed Description

class containing all surface meshing routines methods and classes

Definition at line 50 of file SurfaceMesh.h.

Constructor & Destructor Documentation

◆ SurfaceMesh()

Nektar::NekMeshUtils::SurfaceMesh::SurfaceMesh ( MeshSharedPtr  m)

Definition at line 51 of file SurfaceMesh.cpp.

51  : ProcessModule(m)
52 {
53 
54 }
NEKMESHUTILS_EXPORT ProcessModule(MeshSharedPtr p_m)

◆ ~SurfaceMesh()

Nektar::NekMeshUtils::SurfaceMesh::~SurfaceMesh ( )
virtual

Definition at line 56 of file SurfaceMesh.cpp.

57 {
58 }

Member Function Documentation

◆ create()

static std::shared_ptr<Module> Nektar::NekMeshUtils::SurfaceMesh::create ( MeshSharedPtr  m)
inlinestatic

Creates an instance of this class.

Definition at line 55 of file SurfaceMesh.h.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr().

56  {
58  }
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.

◆ Process()

void Nektar::NekMeshUtils::SurfaceMesh::Process ( )
virtual

Implements Nektar::NekMeshUtils::Module.

Definition at line 60 of file SurfaceMesh.cpp.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), ASSERTL0, m_curvemeshes, m_facemeshes, Nektar::NekMeshUtils::Module::m_mesh, Nektar::LibUtilities::PrintProgressbar(), Nektar::NekMeshUtils::Module::ProcessComposites(), Nektar::NekMeshUtils::Module::ProcessEdges(), Nektar::NekMeshUtils::Module::ProcessElements(), Nektar::NekMeshUtils::Module::ProcessFaces(), Nektar::NekMeshUtils::Module::ProcessVertices(), and Report().

61 {
62  m_mesh->m_expDim--; //just to make it easier to surface mesh for now
63 
64  if (m_mesh->m_verbose)
65  cout << endl << "Surface meshing" << endl;
66 
67  if (m_mesh->m_verbose)
68  cout << endl << "\tCurve meshing:" << endl << endl;
69 
70  m_mesh->m_numNodes = m_mesh->m_cad->GetNumVerts();
71 
72  // linear mesh all curves
73  for (int i = 1; i <= m_mesh->m_cad->GetNumCurve(); i++)
74  {
75  if (m_mesh->m_verbose)
76  {
78  i, m_mesh->m_cad->GetNumCurve(), "Curve progress");
79  }
80 
82 
83  m_curvemeshes[i]->Mesh();
84  }
85 
86  if (m_mesh->m_verbose)
87  cout << endl << "\tFace meshing:" << endl << endl;
88 
89  bool validError = false;
90  for (int i = 1; i <= m_mesh->m_cad->GetNumSurf(); i++)
91  {
92  if (m_mesh->m_verbose)
93  {
95  i, m_mesh->m_cad->GetNumSurf(), "Validating curve meshes");
96  }
97  FaceMeshSharedPtr face =
99  m_curvemeshes, i);
100 
101  validError = validError ? true : face->ValidateCurves();
102 
103  face->ValidateLoops();
104  }
105 
106  ASSERTL0(!validError,"valdity error in curve meshes");
107 
108  // linear mesh all surfaces
109  for (int i = 1; i <= m_mesh->m_cad->GetNumSurf(); i++)
110  {
111  if (m_mesh->m_verbose)
112  {
114  i, m_mesh->m_cad->GetNumSurf(), "Face progress");
115  }
116  m_facemeshes[i] =
118  m_curvemeshes, i);
119 
120  m_facemeshes[i]->Mesh();
121  }
122 
123  ProcessVertices();
124  ProcessEdges();
125  ProcessFaces();
126  ProcessElements();
128 
129  Report();
130 
131  EdgeSet::iterator it;
132  for(it = m_mesh->m_edgeSet.begin(); it != m_mesh->m_edgeSet.end(); it++)
133  {
134  if((*it)->m_elLink.size() != 2)
135  {
136  ASSERTL0(false,"surface mesh connectivity error");
137  }
138  }
139 
140  m_mesh->m_expDim++; //revert dim
141 }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:216
int PrintProgressbar(const int position, const int goal, const std::string message, int lastprogress=-1)
Prints a progressbar.
Definition: Progressbar.hpp:67
virtual NEKMESHUTILS_EXPORT void ProcessFaces(bool ReprocessFaces=true)
Extract element faces.
std::map< int, CurveMeshSharedPtr > m_curvemeshes
map of individual curve meshes of the curves in the domain
Definition: SurfaceMesh.h:71
virtual NEKMESHUTILS_EXPORT void ProcessElements()
Generate element IDs.
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
virtual NEKMESHUTILS_EXPORT void ProcessVertices()
Extract element vertices.
std::shared_ptr< FaceMesh > FaceMeshSharedPtr
Definition: FaceMesh.h:165
virtual NEKMESHUTILS_EXPORT void ProcessEdges(bool ReprocessEdges=true)
Extract element edges.
std::map< int, FaceMeshSharedPtr > m_facemeshes
map of individual surface meshes from parametric surfaces
Definition: SurfaceMesh.h:69
virtual NEKMESHUTILS_EXPORT void ProcessComposites()
Generate composites.

◆ Report()

void Nektar::NekMeshUtils::SurfaceMesh::Report ( )
private

Definition at line 142 of file SurfaceMesh.cpp.

References Nektar::NekMeshUtils::Module::m_mesh.

Referenced by Process().

143 {
144  if (m_mesh->m_verbose)
145  {
146  int ns = m_mesh->m_vertexSet.size();
147  int es = m_mesh->m_edgeSet.size();
148  int ts = m_mesh->m_element[2].size();
149  int ep = ns - es + ts;
150  cout << endl << "\tSurface mesh statistics" << endl;
151  cout << "\t\tNodes: " << ns << endl;
152  cout << "\t\tEdges: " << es << endl;
153  cout << "\t\tTriangles " << ts << endl;
154  cout << "\t\tEuler-PoincarĂ© characteristic: " << ep << endl;
155  }
156 }

Member Data Documentation

◆ className

ModuleKey Nektar::NekMeshUtils::SurfaceMesh::className
static
Initial value:
ModuleKey(eProcessModule, "surfacemesh"),
"Generates a surface mesh")

Definition at line 59 of file SurfaceMesh.h.

◆ m_curvemeshes

std::map<int, CurveMeshSharedPtr> Nektar::NekMeshUtils::SurfaceMesh::m_curvemeshes
private

map of individual curve meshes of the curves in the domain

Definition at line 71 of file SurfaceMesh.h.

Referenced by Process().

◆ m_facemeshes

std::map<int, FaceMeshSharedPtr> Nektar::NekMeshUtils::SurfaceMesh::m_facemeshes
private

map of individual surface meshes from parametric surfaces

Definition at line 69 of file SurfaceMesh.h.

Referenced by Process().