42 #include "../MeshElements.h"
52 "Reads Nektar++ xml file.");
79 vector<string> filename;
80 filename.push_back(
m_config[
"infile"].as<string>());
87 m_mesh->m_expDim = graph->GetMeshDimension ();
88 m_mesh->m_spaceDim = graph->GetSpaceDimension();
91 map<int, NodeSharedPtr> vIdMap;
92 int nVerts = graph->GetNvertices();
93 for (
int i = 0; i < nVerts; ++i)
98 (*vert)(0), (*vert)(1), (*vert)(2)));
99 m_mesh->m_vertexSet.insert(n);
100 vIdMap[vert->GetVid()] = n;
103 map<int, EdgeSharedPtr> eIdMap;
105 map<int, FaceSharedPtr> fIdMap;
113 pair<EdgeSet::iterator,bool> testIns;
116 for (it = tmp.begin(); it != tmp.end(); ++it)
118 pair<int, SpatialDomains::GeometrySharedPtr> tmp2(
119 it->first, boost::dynamic_pointer_cast<
123 vector<NodeSharedPtr> curve;
124 int id0 = it->second->GetVid(0);
125 int id1 = it->second->GetVid(1);
130 testIns =
m_mesh->m_edgeSet.insert(ed);
131 (*(testIns.first))->m_id = it->second->GetEid();
132 eIdMap[it->second->GetEid()] = ed;
142 pair<FaceSet::iterator,bool> testIns;
145 for (it = tmp.begin(); it != tmp.end(); ++it)
147 pair<int, SpatialDomains::GeometrySharedPtr> tmp2(
148 it->first, boost::dynamic_pointer_cast<
151 vector<NodeSharedPtr> faceVertices;
152 vector<EdgeSharedPtr> faceEdges;
153 vector<NodeSharedPtr> faceNodes;
155 for(
int i = 0; i < 3; ++i)
157 faceVertices.push_back(vIdMap[it->second->GetVid(i)]);
158 faceEdges.push_back(eIdMap[it->second->GetEid(i)]);
163 testIns =
m_mesh->m_faceSet.insert(fac);
164 (*(testIns.first))->m_id = it->second->GetFid();
165 fIdMap[it->second->GetFid()] = fac;
171 for (it2 = tmp3.begin(); it2 != tmp3.end(); ++it2)
173 pair<int, SpatialDomains::GeometrySharedPtr> tmp2(
174 it2->first, boost::dynamic_pointer_cast<
177 vector<NodeSharedPtr> faceVertices;
178 vector<EdgeSharedPtr> faceEdges;
179 vector<NodeSharedPtr> faceNodes;
181 for(
int i = 0; i < 4; ++i)
183 faceVertices.push_back(vIdMap[it2->second->GetVid(i)]);
184 faceEdges.push_back(eIdMap[it2->second->GetEid(i)]);
189 testIns =
m_mesh->m_faceSet.insert(fac);
190 (*(testIns.first))->m_id = it2->second->GetFid();
191 fIdMap[it2->second->GetFid()] = fac;
201 for (it = curvedEdges.begin(); it != curvedEdges.end(); ++it)
204 int id = curve->m_curveID;
205 ASSERTL1(eIdMap.find(
id) != eIdMap.end(),
206 "Failed to find curved edge");
208 edg->m_curveType = curve->m_ptype;
209 for(
int j = 0; j < curve->m_points.size()-2; ++j)
212 (*curve->m_points[j+1])(1),
213 (*curve->m_points[j+1])(2)));
214 edg->m_edgeNodes.push_back(n);
220 for (it = curvedFaces.begin(); it != curvedFaces.end(); ++it)
223 int id = curve->m_curveID;
224 ASSERTL1(fIdMap.find(
id) != fIdMap.end(),
225 "Failed to find curved edge");
227 fac->m_curveType = curve->m_ptype;
228 int Ntot = curve->m_points.size();
234 int N = ((int)sqrt(8.0*Ntot+1.0)-1)/2;
235 for(
int j = 3+3*(N-2); j < Ntot; ++j)
238 (*curve->m_points[j])(1),
239 (*curve->m_points[j])(2)));
240 fac->m_faceNodes.push_back(n);
245 int N = (int)sqrt((
double)Ntot);
246 for(
int j = 1; j < N-1; ++j)
248 for(
int k = 1; k < N-1; ++k)
251 (*curve->m_points[j*N+k])(0),
252 (*curve->m_points[j*N+k])(1),
253 (*curve->m_points[j*N+k])(2)));
254 fac->m_faceNodes.push_back(n);
273 for(compIt = GraphComps.begin(); compIt != GraphComps.end(); ++compIt)
276 int dim = (*compIt->second)[0]->GetShapeDim();
278 if(dim ==
m_mesh->m_expDim)
280 nel += (*compIt->second).size();
286 for(compIt = GraphComps.begin(); compIt != GraphComps.end(); ++compIt)
289 int dim = (*compIt->second)[0]->GetShapeDim();
292 for(geomIt = (*compIt->second).begin();
293 geomIt != (*compIt->second).end();
296 ElmtConfig conf((*geomIt)->GetShapeType(),1,
true,
true);
299 vector<NodeSharedPtr> nodeList;
300 for (
int i = 0; i < (*geomIt)->GetNumVerts(); ++i)
302 nodeList.push_back(vIdMap[(*geomIt)->GetVid(i)]);
306 tags.push_back(compIt->first);
309 CreateInstance((*geomIt)->GetShapeType(),conf,nodeList,tags);
311 E->SetId((*geomIt)->GetGlobalID());
313 if(dim ==
m_mesh->m_expDim)
315 m_mesh->m_element[dim][(*geomIt)->GetGlobalID()] = E;
319 m_mesh->m_element[dim].push_back(E);
325 for (
int i = 0; i < (*geomIt)->GetNumEdges(); ++i)
330 edg->m_elLink.push_back(pair<ElementSharedPtr,int>(E,i));
337 for (
int i = 0; i < (*geomIt)->GetNumFaces(); ++i)
342 fac->m_elLink.push_back(pair<ElementSharedPtr,int>(E,i));
pair< ModuleType, string > ModuleKey
Base class for shape geometry information.
static boost::shared_ptr< MeshGraph > Read(const LibUtilities::SessionReaderSharedPtr &pSession, DomainRangeShPtr &rng=NullDomainRangeShPtr)
Represents an edge which joins two points.
boost::shared_ptr< Edge > EdgeSharedPtr
Shared pointer to an edge.
map< string, ConfigOption > m_config
List of configuration values.
MeshSharedPtr m_mesh
Mesh object.
boost::shared_ptr< Face > FaceSharedPtr
Shared pointer to a face.
boost::shared_ptr< Node > NodeSharedPtr
Shared pointer to a Node.
boost::shared_ptr< SessionReader > SessionReaderSharedPtr
boost::shared_ptr< Curve > CurveSharedPtr
virtual void ProcessEdges(bool ReprocessEdges=true)
Extract element edges.
boost::shared_ptr< Element > ElementSharedPtr
Shared pointer to an element.
std::vector< GeometrySharedPtr >::iterator GeometryVectorIter
std::map< int, TriGeomSharedPtr > TriGeomMap
1D Evenly-spaced points using Lagrange polynomial
static SessionReaderSharedPtr CreateInstance(int argc, char *argv[])
Creates an instance of the SessionReader class.
std::map< int, SegGeomSharedPtr > SegGeomMap
std::map< int, Composite >::iterator CompositeMapIter
boost::shared_ptr< Mesh > MeshSharedPtr
Shared pointer to a mesh.
Basic information about an element.
virtual void ProcessComposites()
Generate composites.
Represents a point in the domain.
std::map< int, Composite > CompositeMap
2D Nodal Fekete Points on a Triangle
StandardMatrixTag boost::call_traits< LhsDataType >::const_reference rhs typedef NekMatrix< LhsDataType, StandardMatrixTag >::iterator iterator
std::map< int, QuadGeomSharedPtr > QuadGeomMap
virtual void ProcessFaces(bool ReprocessFaces=true)
Extract element faces.
boost::unordered_map< int, CurveSharedPtr > CurveMap
2D Evenly-spaced points on a Triangle
Represents a face comprised of three or more edges.
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
boost::shared_ptr< MeshGraph > MeshGraphSharedPtr
ElementFactory & GetElementFactory()
boost::shared_ptr< PointGeom > PointGeomSharedPtr
2D Nodal Electrostatic Points on a Triangle
ModuleFactory & GetModuleFactory()
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, tDescription pDesc="")
Register a class with the factory.