71 cout << endl <<
"Volume meshing" << endl;
74 vector<unsigned int> blSurfs;
88 if (
m_mesh->m_cad->GetNumSurf() > 100)
104 vector<unsigned int> symsurfs = blmesh->GetSymSurfs();
105 vector<ElementSharedPtr> els =
m_mesh->m_element[2];
106 m_mesh->m_element[2].clear();
107 for (
int i = 0; i < els.size(); i++)
109 vector<unsigned int>::iterator f =
find(
110 symsurfs.begin(), symsurfs.end(), els[i]->m_parentCAD->GetId());
112 if (f == symsurfs.end())
114 m_mesh->m_element[2].push_back(els[i]);
119 vector<EdgeSharedPtr> es = els[i]->GetEdgeList();
120 for (
int j = 0; j < es.size(); j++)
122 vector<pair<ElementSharedPtr, int> > lk = es[j]->m_elLink;
123 es[j]->m_elLink.clear();
124 for (
int k = 0; k < lk.size(); k++)
126 if (lk[k].first == els[i])
130 es[j]->m_elLink.push_back(lk[k]);
136 for (
int i = 0; i < symsurfs.size(); i++)
139 vector<EdgeLoopSharedPtr> e =
140 m_mesh->m_cad->GetSurf(symsurfs[i])->GetEdges();
141 for (
int k = 0; k < e.size(); k++)
143 for (
int j = 0; j < e[k]->edges.size(); j++)
145 cIds.insert(e[k]->edges[j]->GetId());
150 map<int, vector<NodeSharedPtr> > curveNodeMap;
151 NodeSet::iterator it;
152 for (it =
m_mesh->m_vertexSet.begin();
153 it !=
m_mesh->m_vertexSet.end(); it++)
155 vector<CADCurveSharedPtr> cc = (*it)->GetCADCurves();
156 for (
int j = 0; j < cc.size(); j++)
158 set<int>::iterator f = cIds.find(cc[j]->GetId());
161 curveNodeMap[cc[j]->GetId()].push_back((*it));
167 map<int, vector<NodeSharedPtr> >::iterator cit;
168 for (cit = curveNodeMap.begin(); cit != curveNodeMap.end(); cit++)
170 vector<NekDouble> ts;
171 for (
int i = 0; i < cit->second.size(); i++)
173 ts.push_back(cit->second[i]->GetCADCurveInfo(cit->first));
179 for (
int i = 0; i < ts.size() - 1; i++)
181 if (ts[i] > ts[i + 1])
183 swap(ts[i], ts[i + 1]);
184 swap(cit->second[i], cit->second[i + 1]);
193 map<NodeSharedPtr, NodeSharedPtr> nmap = blmesh->GetSymNodes();
194 for (cit = curveNodeMap.begin(); cit != curveNodeMap.end(); cit++)
196 for (
int j = 0; j < cit->second.size() - 1; j++)
198 map<NodeSharedPtr, NodeSharedPtr>::iterator f1 =
199 nmap.find(cit->second[j]);
200 map<NodeSharedPtr, NodeSharedPtr>::iterator f2 =
201 nmap.find(cit->second[j + 1]);
203 if (f1 == nmap.end() || f2 == nmap.end())
211 vector<NodeSharedPtr> ns;
212 ns.push_back(cit->second[j]);
215 ns.push_back(cit->second[j + 1]);
221 tags.push_back(prefix * 2 + symsurfs[i]);
224 E->m_parentCAD =
m_mesh->m_cad->GetSurf(symsurfs[i]);
225 m_mesh->m_element[2].push_back(E);
228 for (
int k = 0; k < E->GetEdgeCount(); ++k)
230 pair<EdgeSet::iterator, bool> testIns;
232 testIns =
m_mesh->m_edgeSet.insert(ed);
237 ed2->m_elLink.push_back(
238 pair<ElementSharedPtr, int>(E, k));
244 e2->m_elLink.push_back(
245 pair<ElementSharedPtr, int>(E, k));
252 for (cit = curveNodeMap.begin(); cit != curveNodeMap.end(); cit++)
254 for (
int j = 0; j < cit->second.size(); j++)
256 map<NodeSharedPtr, NodeSharedPtr>::iterator f1 =
257 nmap.find(cit->second[j]);
258 if (f1 == nmap.end())
262 cit->second[j] = f1->second;
265 map<int, CurveMeshSharedPtr> cm;
266 for (cit = curveNodeMap.begin(); cit != curveNodeMap.end(); cit++)
269 cit->first,
m_mesh, cit->second);
273 symsurfs[i],
m_mesh, cm, symsurfs[i]);
277 vector<unsigned int> blsurfs = blmesh->GetBLSurfs();
280 vector<ElementSharedPtr> tetsurface = blmesh->GetPseudoSurface();
281 for (
int i = 0; i <
m_mesh->m_element[2].size(); i++)
283 if (
m_mesh->m_element[2][i]->GetConf().m_e ==
289 vector<unsigned int>::iterator f =
290 find(blsurfs.begin(), blsurfs.end(),
291 m_mesh->m_element[2][i]->m_parentCAD->GetId());
293 if (f == blsurfs.end())
295 tetsurface.push_back(
m_mesh->m_element[2][i]);
MeshSharedPtr m_mesh
Mesh object.
std::shared_ptr< Edge > EdgeSharedPtr
Shared pointer to an edge.
ElementFactory & GetElementFactory()
std::shared_ptr< Node > NodeSharedPtr
tBaseSharedPtr CreateInstance(tKey idKey, tParam... args)
Create an instance of the class referred to by idKey.
virtual NEKMESHUTILS_EXPORT void ProcessFaces(bool ReprocessFaces=true)
Extract element faces.
std::shared_ptr< Element > ElementSharedPtr
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.
std::map< std::string, ConfigOption > m_config
List of configuration values.
std::shared_ptr< TetMesh > TetMeshSharedPtr
virtual NEKMESHUTILS_EXPORT void ClearElementLinks()
virtual NEKMESHUTILS_EXPORT void ProcessVertices()
Extract element vertices.
std::shared_ptr< FaceMesh > FaceMeshSharedPtr
virtual NEKMESHUTILS_EXPORT void ProcessEdges(bool ReprocessEdges=true)
Extract element edges.
InputIterator find(InputIterator first, InputIterator last, InputIterator startingpoint, const EqualityComparable &value)
std::shared_ptr< BLMesh > BLMeshSharedPtr
virtual NEKMESHUTILS_EXPORT void ProcessComposites()
Generate composites.
static bool GenerateSeqVector(const std::string &str, std::vector< unsigned int > &out)
Takes a comma-separated compressed string and converts it to entries in a vector. ...