Nektar++
Public Member Functions | Static Public Member Functions | Static Public Attributes | List of all members
Nektar::Utilities::ProcessExtractTetPrismInterface Class Reference

Module to extract interface between prismatic and tetrahedral elements. More...

#include <ProcessExtractTetPrismInterface.h>

Inheritance diagram for Nektar::Utilities::ProcessExtractTetPrismInterface:
[legend]

Public Member Functions

 ProcessExtractTetPrismInterface (NekMeshUtils::MeshSharedPtr m)
 
virtual ~ProcessExtractTetPrismInterface ()
 
virtual void Process ()
 Write mesh to output file. More...
 
- 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 (NekMeshUtils::MeshSharedPtr m)
 Creates an instance of this class. More...
 

Static Public Attributes

static NekMeshUtils::ModuleKey className
 

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

Module to extract interface between prismatic and tetrahedral elements.

Definition at line 50 of file ProcessExtractTetPrismInterface.h.

Constructor & Destructor Documentation

◆ ProcessExtractTetPrismInterface()

Nektar::Utilities::ProcessExtractTetPrismInterface::ProcessExtractTetPrismInterface ( NekMeshUtils::MeshSharedPtr  m)

Definition at line 58 of file ProcessExtractTetPrismInterface.cpp.

60  : ProcessModule(m)
61 {
62 }
NEKMESHUTILS_EXPORT ProcessModule(MeshSharedPtr p_m)

◆ ~ProcessExtractTetPrismInterface()

Nektar::Utilities::ProcessExtractTetPrismInterface::~ProcessExtractTetPrismInterface ( )
virtual

Definition at line 64 of file ProcessExtractTetPrismInterface.cpp.

65 {
66 }

Member Function Documentation

◆ create()

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

Creates an instance of this class.

Definition at line 54 of file ProcessExtractTetPrismInterface.h.

55  {
56  return MemoryManager<
57  ProcessExtractTetPrismInterface>::AllocateSharedPtr(m);
58  }

◆ Process()

void Nektar::Utilities::ProcessExtractTetPrismInterface::Process ( )
virtual

Write mesh to output file.

Implements Nektar::NekMeshUtils::Module.

Definition at line 68 of file ProcessExtractTetPrismInterface.cpp.

References ASSERTL0, Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::CreateInstance(), Nektar::LibUtilities::ePrism, Nektar::LibUtilities::eTetrahedron, Nektar::LibUtilities::eTriangle, Nektar::NekMeshUtils::GetElementFactory(), Nektar::NekMeshUtils::Module::m_mesh, Nektar::NekMeshUtils::Module::ProcessComposites(), Nektar::NekMeshUtils::Module::ProcessEdges(), Nektar::NekMeshUtils::Module::ProcessElements(), Nektar::NekMeshUtils::Module::ProcessFaces(), and Nektar::NekMeshUtils::Module::ProcessVertices().

69 {
70  if (m_mesh->m_verbose)
71  {
72  cout << "ProcessExtractTetPrismInterface: Extracting tet-prism "
73  << "interface... " << endl;
74  }
75 
76  ASSERTL0(m_mesh->m_expDim == 3,
77  "The prism-tet interface module"
78  " only works for three-dimensional meshes.");
79 
80  // Copy 3D elements and 2D boundary elements and clear existing.
81  vector<ElementSharedPtr> el = m_mesh->m_element[m_mesh->m_expDim];
82  vector<ElementSharedPtr> bndEl = m_mesh->m_element[m_mesh->m_expDim - 1];
83  m_mesh->m_element[m_mesh->m_expDim].clear();
84  m_mesh->m_element[m_mesh->m_expDim - 1].clear();
85 
86  // Extract prismatic elements.
87  for (int i = 0; i < el.size(); ++i)
88  {
89  ElementSharedPtr elmt = el[i];
90 
91  if (elmt->GetConf().m_e == LibUtilities::ePrism)
92  {
93  m_mesh->m_element[m_mesh->m_expDim].push_back(elmt);
94  }
95  }
96 
97  ASSERTL0(m_mesh->m_element[m_mesh->m_expDim].size() > 0,
98  "Mesh does not contain any prismatic elements!");
99 
100  // Extract boundary region already associated with prisms
101  // (i.e. outer wall of the computational domain)
102  for (auto &face : m_mesh->m_faceSet)
103  {
104  if (face->m_elLink.size() == 1)
105  {
106  ElementSharedPtr el = face->m_elLink[0].first;
107 
108  if (el->GetConf().m_e != LibUtilities::eTetrahedron)
109  {
110  m_mesh->m_element[m_mesh->m_expDim - 1].push_back(
111  bndEl[el->GetBoundaryLink(face->m_elLink[0].second)]);
112  }
113  }
114  }
115 
116  // Now extract prismatic faces that are not connected to any other
117  // elements, which denotes the prism/tet boundary.
118  for (auto &face : m_mesh->m_faceSet)
119  {
120  if (face->m_elLink.size() != 1)
121  {
122  ElementSharedPtr el1 = face->m_elLink[0].first;
123  ElementSharedPtr el2 = face->m_elLink[1].first;
124 
125  if ((el1->GetConf().m_e == LibUtilities::ePrism &&
126  el2->GetConf().m_e == LibUtilities::eTetrahedron) ||
127  (el2->GetConf().m_e == LibUtilities::ePrism &&
128  el1->GetConf().m_e == LibUtilities::eTetrahedron))
129  {
130  // Create a new linear triangle from face for boundary.
131  vector<NodeSharedPtr> nodeList(3);
132  vector<int> tags(1);
133  tags[0] = m_mesh->m_composite.size();
134 
135  nodeList = face->m_vertexList;
136  ElmtConfig conf(
137  LibUtilities::eTriangle, 1, false, false, false);
139  LibUtilities::eTriangle, conf, nodeList, tags);
140 
141  m_mesh->m_element[m_mesh->m_expDim - 1].push_back(tri);
142  }
143  }
144  }
145 
146  ProcessVertices();
147  ProcessEdges();
148  ProcessFaces();
149  ProcessElements();
151 }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:216
Basic information about an element.
Definition: ElementConfig.h:49
ElementFactory & GetElementFactory()
Definition: Element.cpp:44
tBaseSharedPtr CreateInstance(tKey idKey, tParam... args)
Create an instance of the class referred to by idKey.
Definition: NekFactory.hpp:144
virtual NEKMESHUTILS_EXPORT void ProcessFaces(bool ReprocessFaces=true)
Extract element faces.
std::shared_ptr< Element > ElementSharedPtr
Definition: Edge.h:49
virtual NEKMESHUTILS_EXPORT void ProcessElements()
Generate element IDs.
virtual NEKMESHUTILS_EXPORT void ProcessVertices()
Extract element vertices.
virtual NEKMESHUTILS_EXPORT void ProcessEdges(bool ReprocessEdges=true)
Extract element edges.
virtual NEKMESHUTILS_EXPORT void ProcessComposites()
Generate composites.

Member Data Documentation

◆ className

ModuleKey Nektar::Utilities::ProcessExtractTetPrismInterface::className
static
Initial value:
=
ModuleKey(eProcessModule, "extracttetprism"),
"Process elements to extract the faces between "
"tets and prisms.")

Definition at line 59 of file ProcessExtractTetPrismInterface.h.