Nektar++
Public Member Functions | Protected Member Functions | List of all members
Nektar::SpatialDomains::MeshGraph2D Class Reference

#include <MeshGraph2D.h>

Inheritance diagram for Nektar::SpatialDomains::MeshGraph2D:
Inheritance graph
[legend]
Collaboration diagram for Nektar::SpatialDomains::MeshGraph2D:
Collaboration graph
[legend]

Public Member Functions

 MeshGraph2D ()
 
 MeshGraph2D (const LibUtilities::SessionReaderSharedPtr &pSession, const DomainRangeShPtr &rng=NullDomainRangeShPtr)
 
virtual ~MeshGraph2D ()
 
void ReadGeometry (const std::string &infilename)
 Read will read the meshgraph vertices given a filename. More...
 
void ReadGeometry (TiXmlDocument &doc)
 Read will read the meshgraph vertices given a TiXmlDocument. More...
 
SegGeomSharedPtr GetSegGeom (int eID)
 
int GetCoordim (void)
 
const TriGeomMapGetTrigeoms (void) const
 
const QuadGeomMapGetQuadgeoms (void) const
 
void GenXGeoFac ()
 
int GetNseggeoms () const
 
int GetVidFromElmt (LibUtilities::ShapeType shape, const int vert, const int elmt) const
 
int GetEidFromElmt (LibUtilities::ShapeType shape, const int edge, const int elmt) const
 
StdRegions::Orientation GetEorientFromElmt (LibUtilities::ShapeType shape, const int edge, const int elmt) const
 
StdRegions::Orientation GetCartesianEorientFromElmt (LibUtilities::ShapeType shape, const int edge, const int elmt) const
 
int GetNumComposites (void)
 
int GetNumCompositeItems (int whichComposite)
 
ElementEdgeVectorSharedPtr GetElementsFromEdge (SegGeomSharedPtr edge)
 Return the elements (shared ptrs) that have this edge. More...
 
ElementEdgeVectorSharedPtr GetElementsFromEdge (Geometry1DSharedPtr edge)
 
LibUtilities::BasisKey GetEdgeBasisKey (SegGeomSharedPtr edge, const std::string variable="DefaultVar")
 Return the BasisKey corresponding to an edge of an element If the expansion is a triangle the Modified_B direction is modified to be one-dimensional Modified_A,GaussLobattoLegendre. More...
 
- Public Member Functions inherited from Nektar::SpatialDomains::MeshGraph
 MeshGraph ()
 
 MeshGraph (unsigned int meshDimension, unsigned int spaceDimension)
 
 MeshGraph (const LibUtilities::SessionReaderSharedPtr &pSession, const DomainRangeShPtr &rng=NullDomainRangeShPtr)
 
virtual ~MeshGraph ()
 
void ReadGeometryInfo (const std::string &infilename)
 Read geometric information from a file. More...
 
void ReadGeometryInfo (TiXmlDocument &doc)
 Read geometric information from an XML document. More...
 
void ReadExpansions (const std::string &infilename)
 Read the expansions given the XML file path. More...
 
void ReadExpansions (TiXmlDocument &doc)
 Read the expansions given the XML document reference. More...
 
void ReadDomain (TiXmlDocument &doc)
 
void ReadCurves (TiXmlDocument &doc)
 
void ReadCurves (std::string &infilename)
 
void WriteGeometry (std::string &outfilename)
 Write out an XML file containing the GEOMETRY block representing this MeshGraph instance inside a NEKTAR tag. More...
 
void WriteGeometry (TiXmlDocument &doc)
 Populate a TinyXML document with a GEOMETRY tag inside the NEKTAR tag. More...
 
int GetMeshDimension () const
 Dimension of the mesh (can be a 1D curve in 3D space). More...
 
int GetSpaceDimension () const
 Dimension of the space (can be a 1D curve in 3D space). More...
 
void SetDomainRange (NekDouble xmin, NekDouble xmax, NekDouble ymin=NekConstants::kNekUnsetDouble, NekDouble ymax=NekConstants::kNekUnsetDouble, NekDouble zmin=NekConstants::kNekUnsetDouble, NekDouble zmax=NekConstants::kNekUnsetDouble)
 
bool CheckRange (Geometry2D &geom)
 Check if goemetry is in range definition if activated. More...
 
bool CheckRange (Geometry3D &geom)
 Check if goemetry is in range definition if activated. More...
 
Composite GetComposite (int whichComposite) const
 
GeometrySharedPtr GetCompositeItem (int whichComposite, int whichItem)
 
void GetCompositeList (const std::string &compositeStr, CompositeMap &compositeVector) const
 
const CompositeMapGetComposites () const
 
const std::vector< CompositeMap > & GetDomain (void) const
 
const CompositeMapGetDomain (int domain) const
 
const ExpansionMapGetExpansions ()
 
const ExpansionMapGetExpansions (const std::string variable)
 
ExpansionShPtr GetExpansion (GeometrySharedPtr geom, const std::string variable="DefaultVar")
 
void SetExpansions (std::vector< LibUtilities::FieldDefinitionsSharedPtr > &fielddef)
 Sets expansions given field definitions. More...
 
void SetExpansions (std::vector< LibUtilities::FieldDefinitionsSharedPtr > &fielddef, std::vector< std::vector< LibUtilities::PointsType > > &pointstype)
 Sets expansions given field definition, quadrature points. More...
 
void SetExpansionsToEvenlySpacedPoints (int npoints=0)
 Sets expansions to have equispaced points. More...
 
void SetExpansionsToPolyOrder (int nmodes)
 Reset expansion to have specified polynomial order nmodes. More...
 
void SetExpansions (const std::string variable, ExpansionMapShPtr &exp)
 This function sets the expansion #exp in map with entry #variable. More...
 
void SetBasisKey (LibUtilities::ShapeType shape, LibUtilities::BasisKeyVector &keys, std::string var="DefaultVar")
 Sets the basis key for all expansions of the given shape. More...
 
bool SameExpansions (const std::string var1, const std::string var2)
 
bool CheckForGeomInfo (std::string parameter)
 
const std::string GetGeomInfo (std::string parameter)
 
LibUtilities::BasisKeyVector DefineBasisKeyFromExpansionTypeHomo (GeometrySharedPtr in, ExpansionType type_x, ExpansionType type_y, ExpansionType type_z, const int nummodes_x, const int nummodes_y, const int nummodes_z)
 
int GetNvertices () const
 
PointGeomSharedPtr GetVertex (int id)
 
PointGeomSharedPtr AddVertex (NekDouble x, NekDouble y, NekDouble z)
 Adds a vertex to the with the next available ID. More...
 
SegGeomSharedPtr AddEdge (PointGeomSharedPtr v0, PointGeomSharedPtr v1, CurveSharedPtr curveDefinition=CurveSharedPtr())
 Adds an edge between two points. If curveDefinition is null, then the edge is straight, otherwise it is curved according to the curveDefinition. More...
 
SegGeomSharedPtr GetEdge (unsigned int id)
 
TriGeomSharedPtr AddTriangle (SegGeomSharedPtr edges[], StdRegions::Orientation orient[])
 
QuadGeomSharedPtr AddQuadrilateral (SegGeomSharedPtr edges[], StdRegions::Orientation orient[])
 
TetGeomSharedPtr AddTetrahedron (TriGeomSharedPtr tfaces[TetGeom::kNtfaces])
 
PyrGeomSharedPtr AddPyramid (TriGeomSharedPtr tfaces[PyrGeom::kNtfaces], QuadGeomSharedPtr qfaces[PyrGeom::kNqfaces])
 
PrismGeomSharedPtr AddPrism (TriGeomSharedPtr tfaces[PrismGeom::kNtfaces], QuadGeomSharedPtr qfaces[PrismGeom::kNqfaces])
 
HexGeomSharedPtr AddHexahedron (QuadGeomSharedPtr qfaces[HexGeom::kNqfaces])
 
const PointGeomMapGetVertSet () const
 
CurveMapGetCurvedEdges ()
 
CurveMapGetCurvedFaces ()
 
const SegGeomMapGetAllSegGeoms () const
 
const TriGeomMapGetAllTriGeoms () const
 
const QuadGeomMapGetAllQuadGeoms () const
 
const TetGeomMapGetAllTetGeoms () const
 
const PyrGeomMapGetAllPyrGeoms () const
 
const PrismGeomMapGetAllPrismGeoms () const
 
const HexGeomMapGetAllHexGeoms () const
 
template<typename ElementType >
const std::map< int, boost::shared_ptr< ElementType > > & GetAllElementsOfType () const
 Convenience method for ElVis. More...
 
template<>
const std::map< int, boost::shared_ptr< HexGeom > > & GetAllElementsOfType () const
 
template<>
const std::map< int, boost::shared_ptr< PrismGeom > > & GetAllElementsOfType () const
 
template<>
const std::map< int, boost::shared_ptr< TetGeom > > & GetAllElementsOfType () const
 
template<>
const std::map< int, boost::shared_ptr< PyrGeom > > & GetAllElementsOfType () const
 

Protected Member Functions

void ReadEdges (TiXmlDocument &doc)
 
void ReadElements (TiXmlDocument &doc)
 
void ReadComposites (TiXmlDocument &doc)
 
void ResolveGeomRef (const std::string &prevToken, const std::string &token, Composite &composite)
 
- Protected Member Functions inherited from Nektar::SpatialDomains::MeshGraph
ExpansionMapShPtr SetUpExpansionMap (void)
 

Additional Inherited Members

- Static Public Member Functions inherited from Nektar::SpatialDomains::MeshGraph
static boost::shared_ptr< MeshGraphRead (const LibUtilities::SessionReaderSharedPtr &pSession, DomainRangeShPtr &rng=NullDomainRangeShPtr)
 
static boost::shared_ptr< MeshGraphRead (const std::string &infilename, bool pReadExpansions=true)
 
static LibUtilities::BasisKeyVector DefineBasisKeyFromExpansionType (GeometrySharedPtr in, ExpansionType type, const int order)
 
- Protected Attributes inherited from Nektar::SpatialDomains::MeshGraph
LibUtilities::SessionReaderSharedPtr m_session
 
PointGeomMap m_vertSet
 
InterfaceCompList m_iComps
 
CurveMap m_curvedEdges
 
CurveMap m_curvedFaces
 
SegGeomMap m_segGeoms
 
TriGeomMap m_triGeoms
 
QuadGeomMap m_quadGeoms
 
TetGeomMap m_tetGeoms
 
PyrGeomMap m_pyrGeoms
 
PrismGeomMap m_prismGeoms
 
HexGeomMap m_hexGeoms
 
int m_meshDimension
 
int m_spaceDimension
 
int m_partition
 
bool m_meshPartitioned
 
CompositeMap m_meshComposites
 
std::vector< CompositeMapm_domain
 
DomainRangeShPtr m_domainRange
 
ExpansionMapShPtrMap m_expansionMapShPtrMap
 
GeomInfoMap m_geomInfo
 

Detailed Description

Definition at line 54 of file MeshGraph2D.h.

Constructor & Destructor Documentation

Nektar::SpatialDomains::MeshGraph2D::MeshGraph2D ( )

Definition at line 46 of file MeshGraph2D.cpp.

47  {
48  }
Nektar::SpatialDomains::MeshGraph2D::MeshGraph2D ( const LibUtilities::SessionReaderSharedPtr pSession,
const DomainRangeShPtr rng = NullDomainRangeShPtr 
)

Definition at line 54 of file MeshGraph2D.cpp.

References Nektar::SpatialDomains::MeshGraph::ReadExpansions(), and ReadGeometry().

56  : MeshGraph(pSession,rng)
57  {
58  ReadGeometry(pSession->GetDocument());
59  ReadExpansions(pSession->GetDocument());
60  }
void ReadGeometry(const std::string &infilename)
Read will read the meshgraph vertices given a filename.
Definition: MeshGraph2D.cpp:62
void ReadExpansions(const std::string &infilename)
Read the expansions given the XML file path.
Definition: MeshGraph.cpp:525
Nektar::SpatialDomains::MeshGraph2D::~MeshGraph2D ( )
virtual

Definition at line 50 of file MeshGraph2D.cpp.

51  {
52  }

Member Function Documentation

void Nektar::SpatialDomains::MeshGraph2D::GenXGeoFac ( )
StdRegions::Orientation Nektar::SpatialDomains::MeshGraph2D::GetCartesianEorientFromElmt ( LibUtilities::ShapeType  shape,
const int  edge,
const int  elmt 
) const
inline

Definition at line 154 of file MeshGraph2D.h.

References ASSERTL2, Nektar::StdRegions::eBackwards, Nektar::StdRegions::eForwards, Nektar::LibUtilities::eTriangle, Nektar::SpatialDomains::MeshGraph::m_quadGeoms, and Nektar::SpatialDomains::MeshGraph::m_triGeoms.

155  {
156  StdRegions::Orientation returnval;
157 
158  if(shape == LibUtilities::eTriangle)
159  {
160  ASSERTL2(m_triGeoms.find(elmt) != m_triGeoms.end(),
161  "eid is out of range");
162 
163  returnval = m_triGeoms.find(elmt)->second->GetEorient(edge);
164  }
165  else
166  {
167  ASSERTL2(m_quadGeoms.find(elmt) != m_quadGeoms.end(),
168  "eid is out of range");
169 
170  returnval = m_quadGeoms.find(elmt)->second->GetEorient(edge);
171  }
172 
173  // swap orientation if on edge 2 & 3 (if quad)
174  if(edge >= 2)
175  {
176  if(returnval == StdRegions::eForwards)
177  {
178  returnval = StdRegions::eBackwards;
179  }
180  else
181  {
182  returnval = StdRegions::eForwards;
183  }
184  }
185  return returnval;
186  }
#define ASSERTL2(condition, msg)
Assert Level 2 – Debugging which is used FULLDEBUG compilation mode. This level assert is designed t...
Definition: ErrorUtil.hpp:213
int Nektar::SpatialDomains::MeshGraph2D::GetCoordim ( void  )
inline

Definition at line 69 of file MeshGraph2D.h.

References Nektar::SpatialDomains::MeshGraph::GetSpaceDimension().

69  {
70  return GetSpaceDimension();
71  }
int GetSpaceDimension() const
Dimension of the space (can be a 1D curve in 3D space).
Definition: MeshGraph.h:447
LibUtilities::BasisKey Nektar::SpatialDomains::MeshGraph2D::GetEdgeBasisKey ( SegGeomSharedPtr  edge,
const std::string  variable = "DefaultVar" 
)

Return the BasisKey corresponding to an edge of an element If the expansion is a triangle the Modified_B direction is modified to be one-dimensional Modified_A,GaussLobattoLegendre.

Definition at line 643 of file MeshGraph2D.cpp.

References ASSERTL0, Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::LibUtilities::eGaussRadauMAlpha1Beta0, Nektar::LibUtilities::eGLL_Lagrange, Nektar::LibUtilities::eModified_A, Nektar::LibUtilities::eModified_B, Nektar::LibUtilities::eOrtho_B, Nektar::LibUtilities::eTriangle, GetElementsFromEdge(), Nektar::SpatialDomains::MeshGraph::GetExpansion(), and Nektar::LibUtilities::NullBasisKey().

644  {
646  // Perhaps, a check should be done here to ensure that
647  // in case elements->size!=1, all elements to which
648  // the edge belongs have the same type and order of
649  // expansion such that no confusion can arise.
650  ExpansionShPtr expansion = GetExpansion((*elements)[0]->m_Element, variable);
651 
652  int edge_id = (*elements)[0]->m_EdgeIndx;
653 
654  if((*elements)[0]->m_Element->GetShapeType() == LibUtilities::eTriangle)
655  {
656  edge_id = (edge_id)? 1:0;
657  }
658  else
659  {
660  edge_id = edge_id%2;
661  }
662 
663  int nummodes = expansion->m_basisKeyVector[edge_id].GetNumModes();
664  int numpoints = expansion->m_basisKeyVector[edge_id].GetNumPoints();
665 
666  if((*elements)[0]->m_Element->GetShapeType() == LibUtilities::eTriangle)
667  {
668  // Use edge 0 to define basis of order relevant to edge
669  switch(expansion->m_basisKeyVector[edge_id].GetBasisType())
670  {
672  {
673  switch(expansion->m_basisKeyVector[edge_id].GetPointsType())
674  {
676  {
677  const LibUtilities::PointsKey pkey(numpoints,LibUtilities::eGaussLobattoLegendre);
678  return LibUtilities::BasisKey(expansion->m_basisKeyVector[0].GetBasisType(),nummodes,pkey);
679  }
680  break;
681 
682  default:
683  ASSERTL0(false,"Unexpected points distribution");
684 
685  // It doesn't matter what we return
686  // here since the ASSERT will stop
687  // execution. Just return something
688  // to prevent warnings messages.
689  const LibUtilities::PointsKey pkey(numpoints,LibUtilities::eGaussLobattoLegendre);
690  return LibUtilities::BasisKey(expansion->m_basisKeyVector[0].GetBasisType(),nummodes,pkey);
691  break;
692  }
693  }
694  break;
695  case LibUtilities::eOrtho_B: // Assume this is called from nodal triangular basis
696  {
697  switch(expansion->m_basisKeyVector[edge_id].GetPointsType())
698  {
700  {
701  const LibUtilities::PointsKey pkey(numpoints+1,LibUtilities::eGaussLobattoLegendre);
702  return LibUtilities::BasisKey(LibUtilities::eGLL_Lagrange,nummodes,pkey);
703  }
704  break;
705 
706  default:
707  ASSERTL0(false,"Unexpected points distribution");
708 
709  // It doesn't matter what we return
710  // here since the ASSERT will stop
711  // execution. Just return something
712  // to prevent warnings messages.
713  const LibUtilities::PointsKey pkey(numpoints+1,LibUtilities::eGaussLobattoLegendre);
714  return LibUtilities::BasisKey(expansion->m_basisKeyVector[0].GetBasisType(),nummodes,pkey);
715  break;
716  }
717  }
718  break;
720  {
721  switch(expansion->m_basisKeyVector[edge_id].GetPointsType())
722  {
724  {
725  const LibUtilities::PointsKey pkey(numpoints+1,LibUtilities::eGaussLobattoLegendre);
726  return LibUtilities::BasisKey(expansion->m_basisKeyVector[0].GetBasisType(),nummodes,pkey);
727  }
728  break;
730  {
731  const LibUtilities::PointsKey pkey(numpoints,LibUtilities::eGaussLobattoLegendre);
732  return LibUtilities::BasisKey(expansion->m_basisKeyVector[0].GetBasisType(),nummodes,pkey);
733  }
734  break;
735 
736  default:
737  ASSERTL0(false,"Unexpected points distribution");
738 
739  // It doesn't matter what we return
740  // here since the ASSERT will stop
741  // execution. Just return something
742  // to prevent warnings messages.
743  const LibUtilities::PointsKey pkey(numpoints+1,LibUtilities::eGaussLobattoLegendre);
744  return LibUtilities::BasisKey(expansion->m_basisKeyVector[0].GetBasisType(),nummodes,pkey);
745  break;
746  }
747  }
748  break;
750  {
751  switch(expansion->m_basisKeyVector[edge_id].GetPointsType())
752  {
754  {
755  const LibUtilities::PointsKey pkey(numpoints,LibUtilities::eGaussLobattoLegendre);
756  return LibUtilities::BasisKey(expansion->m_basisKeyVector[0].GetBasisType(),nummodes,pkey);
757  }
758  break;
759  default:
760  ASSERTL0(false,"Unexpected points distribution");
761  // It doesn't matter what we return here
762  // since the ASSERT will stop execution.
763  // Just return something to prevent
764  // warnings messages.
765  const LibUtilities::PointsKey pkey(numpoints,LibUtilities::eGaussLobattoLegendre);
766  return LibUtilities::BasisKey(expansion->m_basisKeyVector[0].GetBasisType(),nummodes,pkey);
767  break;
768  }
769  }
770  break;
771 
772  default:
773  ASSERTL0(false,"Unexpected basis distribution");
774  // It doesn't matter what we return here since the
775  // ASSERT will stop execution. Just return
776  // something to prevent warnings messages.
777  const LibUtilities::PointsKey pkey(numpoints+1,LibUtilities::eGaussLobattoLegendre);
778  return LibUtilities::BasisKey(expansion->m_basisKeyVector[0].GetBasisType(),nummodes,pkey);
779  }
780  }
781  else
782  {
783  // Quadrilateral
784  const LibUtilities::PointsKey pkey(numpoints,expansion->m_basisKeyVector[edge_id].GetPointsType());
785  return LibUtilities::BasisKey(expansion->m_basisKeyVector[edge_id].GetBasisType(),nummodes,pkey);
786  }
787 
788  ASSERTL0(false, "Unable to determine edge points type.");
790  }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:161
Principle Modified Functions .
Definition: BasisType.h:49
Gauss Radau pinned at x=-1, .
Definition: PointsType.h:57
Principle Orthogonal Functions .
Definition: BasisType.h:47
Principle Modified Functions .
Definition: BasisType.h:50
ElementEdgeVectorSharedPtr GetElementsFromEdge(SegGeomSharedPtr edge)
Return the elements (shared ptrs) that have this edge.
boost::shared_ptr< ElementEdgeVector > ElementEdgeVectorSharedPtr
Definition: MeshGraph.h:131
boost::shared_ptr< Expansion > ExpansionShPtr
Definition: MeshGraph.h:170
ExpansionShPtr GetExpansion(GeometrySharedPtr geom, const std::string variable="DefaultVar")
Definition: MeshGraph.cpp:2136
static const BasisKey NullBasisKey(eNoBasisType, 0, NullPointsKey)
Defines a null basis with no type or points.
Lagrange for SEM basis .
Definition: BasisType.h:53
1D Gauss-Lobatto-Legendre quadrature points
Definition: PointsType.h:50
int Nektar::SpatialDomains::MeshGraph2D::GetEidFromElmt ( LibUtilities::ShapeType  shape,
const int  edge,
const int  elmt 
) const
inline

Definition at line 116 of file MeshGraph2D.h.

References ASSERTL2, Nektar::LibUtilities::eTriangle, Nektar::SpatialDomains::MeshGraph::m_quadGeoms, and Nektar::SpatialDomains::MeshGraph::m_triGeoms.

118  {
119  if(shape == LibUtilities::eTriangle)
120  {
121  ASSERTL2(m_triGeoms.find(elmt) != m_triGeoms.end(),
122  "eid is out of range");
123 
124  return m_triGeoms.find(elmt)->second->GetEid(edge);
125  }
126  else
127  {
128  ASSERTL2(m_quadGeoms.find(elmt) != m_quadGeoms.end(),
129  "eid is out of range");
130 
131  return m_quadGeoms.find(elmt)->second->GetEid(edge);
132  }
133  }
#define ASSERTL2(condition, msg)
Assert Level 2 – Debugging which is used FULLDEBUG compilation mode. This level assert is designed t...
Definition: ErrorUtil.hpp:213
ElementEdgeVectorSharedPtr Nektar::SpatialDomains::MeshGraph2D::GetElementsFromEdge ( SegGeomSharedPtr  edge)

Return the elements (shared ptrs) that have this edge.

Definition at line 587 of file MeshGraph2D.cpp.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), and Nektar::SpatialDomains::MeshGraph::m_domain.

Referenced by GetEdgeBasisKey(), and GetElementsFromEdge().

588  {
589  // Search tris and quads
590  // Need to iterate through vectors because there may be multiple
591  // occurrences.
592  ElementEdgeSharedPtr elementEdge;
593  //TriGeomVectorIter triIter;
594 
596 
597  CompositeMapIter compIter;
598  TriGeomSharedPtr triGeomShPtr;
599  QuadGeomSharedPtr quadGeomShPtr;
600 
601  GeometryVectorIter geomIter;
602 
603  for(int d = 0; d < m_domain.size(); ++d)
604  {
605  for (compIter = m_domain[d].begin(); compIter != m_domain[d].end(); ++compIter)
606  {
607  for (geomIter = (compIter->second)->begin(); geomIter != (compIter->second)->end(); ++geomIter)
608  {
609  triGeomShPtr = boost::dynamic_pointer_cast<TriGeom>(*geomIter);
610  quadGeomShPtr = boost::dynamic_pointer_cast<QuadGeom>(*geomIter);
611 
612  if (triGeomShPtr || quadGeomShPtr)
613  {
614  int edgeNum;
615  if (triGeomShPtr)
616  {
617  if ((edgeNum = triGeomShPtr->WhichEdge(edge)) > -1)
618  {
620  elementEdge->m_Element = triGeomShPtr;
621  elementEdge->m_EdgeIndx = edgeNum;
622  returnval->push_back(elementEdge);
623  }
624  }
625  else if (quadGeomShPtr)
626  {
627  if ((edgeNum = quadGeomShPtr->WhichEdge(edge)) > -1)
628  {
630  elementEdge->m_Element = quadGeomShPtr;
631  elementEdge->m_EdgeIndx = edgeNum;
632  returnval->push_back(elementEdge);
633  }
634  }
635  }
636  }
637  }
638  }
639 
640  return returnval;
641  }
static boost::shared_ptr< DataType > AllocateSharedPtr()
Allocate a shared pointer from the memory pool.
boost::shared_ptr< QuadGeom > QuadGeomSharedPtr
Definition: QuadGeom.h:54
std::vector< GeometrySharedPtr >::iterator GeometryVectorIter
Definition: Geometry.h:58
boost::shared_ptr< ElementEdge > ElementEdgeSharedPtr
Definition: MeshGraph.h:129
std::map< int, Composite >::iterator CompositeMapIter
Definition: MeshGraph.h:113
boost::shared_ptr< ElementEdgeVector > ElementEdgeVectorSharedPtr
Definition: MeshGraph.h:131
std::vector< CompositeMap > m_domain
Definition: MeshGraph.h:422
boost::shared_ptr< TriGeom > TriGeomSharedPtr
Definition: TriGeom.h:58
ElementEdgeVectorSharedPtr Nektar::SpatialDomains::MeshGraph2D::GetElementsFromEdge ( Geometry1DSharedPtr  edge)

Definition at line 575 of file MeshGraph2D.cpp.

References ASSERTL0, and GetElementsFromEdge().

576  {
577  SegGeomSharedPtr Sedge;
578 
579  if(!(Sedge = boost::dynamic_pointer_cast<SegGeom>(edge)))
580  {
581  ASSERTL0(false,"Dynamics cast failed");
582 
583  }
584  return GetElementsFromEdge(Sedge);
585 
586  }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:161
boost::shared_ptr< SegGeom > SegGeomSharedPtr
Definition: Geometry2D.h:60
ElementEdgeVectorSharedPtr GetElementsFromEdge(SegGeomSharedPtr edge)
Return the elements (shared ptrs) that have this edge.
StdRegions::Orientation Nektar::SpatialDomains::MeshGraph2D::GetEorientFromElmt ( LibUtilities::ShapeType  shape,
const int  edge,
const int  elmt 
) const
inline

Definition at line 135 of file MeshGraph2D.h.

References ASSERTL2, Nektar::LibUtilities::eTriangle, Nektar::SpatialDomains::MeshGraph::m_quadGeoms, and Nektar::SpatialDomains::MeshGraph::m_triGeoms.

136  {
137  if(shape == LibUtilities::eTriangle)
138  {
139  ASSERTL2(m_triGeoms.find(elmt) != m_triGeoms.end(),
140  "eid is out of range");
141 
142  return m_triGeoms.find(elmt)->second->GetEorient(edge);
143  }
144  else
145  {
146  ASSERTL2(m_quadGeoms.find(elmt) != m_quadGeoms.end(),
147  "eid is out of range");
148 
149  return m_quadGeoms.find(elmt)->second->GetEorient(edge);
150  }
151  }
#define ASSERTL2(condition, msg)
Assert Level 2 – Debugging which is used FULLDEBUG compilation mode. This level assert is designed t...
Definition: ErrorUtil.hpp:213
int Nektar::SpatialDomains::MeshGraph2D::GetNseggeoms ( ) const
inline

Definition at line 92 of file MeshGraph2D.h.

References Nektar::SpatialDomains::MeshGraph::m_segGeoms.

93  {
94  return int(m_segGeoms.size());
95  }
int Nektar::SpatialDomains::MeshGraph2D::GetNumCompositeItems ( int  whichComposite)
inline

Definition at line 193 of file MeshGraph2D.h.

References ErrorUtil::efatal, Nektar::SpatialDomains::MeshGraph::m_meshComposites, and NEKERROR.

194  {
195  int returnval = -1;
196 
197  try
198  {
199  returnval = int(m_meshComposites[whichComposite]->size());
200  }
201  catch(...)
202  {
203  std::ostringstream errStream;
204  errStream << "Unable to access composite item [" << whichComposite << "].";
205  NEKERROR(ErrorUtil::efatal, errStream.str());
206  }
207 
208  return returnval;
209  }
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mod...
Definition: ErrorUtil.hpp:158
int Nektar::SpatialDomains::MeshGraph2D::GetNumComposites ( void  )
inline

Definition at line 188 of file MeshGraph2D.h.

References Nektar::SpatialDomains::MeshGraph::m_meshComposites.

189  {
190  return int(m_meshComposites.size());
191  }
const QuadGeomMap& Nektar::SpatialDomains::MeshGraph2D::GetQuadgeoms ( void  ) const
inline

Definition at line 78 of file MeshGraph2D.h.

References Nektar::SpatialDomains::MeshGraph::m_quadGeoms.

79  {
80  return m_quadGeoms;
81  }
SegGeomSharedPtr Nektar::SpatialDomains::MeshGraph2D::GetSegGeom ( int  eID)

Definition at line 433 of file MeshGraph2D.cpp.

References ASSERTL0, Nektar::iterator, and Nektar::SpatialDomains::MeshGraph::m_segGeoms.

Referenced by ReadElements().

434  {
435  SegGeomSharedPtr returnval;
436  SegGeomMap::iterator x = m_segGeoms.find(eID);
437  ASSERTL0(x != m_segGeoms.end(), "Segment not found.");
438  return x->second;
439  };
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:161
boost::shared_ptr< SegGeom > SegGeomSharedPtr
Definition: Geometry2D.h:60
StandardMatrixTag boost::call_traits< LhsDataType >::const_reference rhs typedef NekMatrix< LhsDataType, StandardMatrixTag >::iterator iterator
const TriGeomMap& Nektar::SpatialDomains::MeshGraph2D::GetTrigeoms ( void  ) const
inline

Definition at line 73 of file MeshGraph2D.h.

References Nektar::SpatialDomains::MeshGraph::m_triGeoms.

74  {
75  return m_triGeoms;
76  }
int Nektar::SpatialDomains::MeshGraph2D::GetVidFromElmt ( LibUtilities::ShapeType  shape,
const int  vert,
const int  elmt 
) const
inline

Definition at line 97 of file MeshGraph2D.h.

References ASSERTL2, Nektar::LibUtilities::eTriangle, Nektar::SpatialDomains::MeshGraph::m_quadGeoms, and Nektar::SpatialDomains::MeshGraph::m_triGeoms.

99  {
100  if(shape == LibUtilities::eTriangle)
101  {
102  ASSERTL2(m_triGeoms.find(elmt) != m_triGeoms.end(),
103  "eid is out of range");
104 
105  return m_triGeoms.find(elmt)->second->GetVid(vert);
106  }
107  else
108  {
109  ASSERTL2(m_quadGeoms.find(elmt) != m_quadGeoms.end(),
110  "eid is out of range");
111 
112  return m_quadGeoms.find(elmt)->second->GetVid(vert);
113  }
114  }
#define ASSERTL2(condition, msg)
Assert Level 2 – Debugging which is used FULLDEBUG compilation mode. This level assert is designed t...
Definition: ErrorUtil.hpp:213
void Nektar::SpatialDomains::MeshGraph2D::ReadComposites ( TiXmlDocument &  doc)
protected

We know we have it since we made it this far.

Look for elements in ELEMENT block.

All elements are of the form: "<C ID = "N"> ... </C>". Read the ID field first.

Parse out the element components corresponding to type of element.

Keep looking

Definition at line 346 of file MeshGraph2D.cpp.

References ASSERTL0, ErrorUtil::efatal, Nektar::SpatialDomains::MeshGraph::m_meshComposites, NEKERROR, and ResolveGeomRef().

Referenced by ReadGeometry().

347  {
348  TiXmlHandle docHandle(&doc);
349 
350  /// We know we have it since we made it this far.
351  TiXmlElement* mesh = docHandle.FirstChildElement("NEKTAR").FirstChildElement("GEOMETRY").Element();
352  TiXmlElement* field = NULL;
353 
354  ASSERTL0(mesh, "Unable to find GEOMETRY tag in file.");
355 
356  /// Look for elements in ELEMENT block.
357  field = mesh->FirstChildElement("COMPOSITE");
358 
359  ASSERTL0(field, "Unable to find COMPOSITE tag in file.");
360 
361  int nextCompositeNumber = -1;
362 
363  /// All elements are of the form: "<C ID = "N"> ... </C>".
364  /// Read the ID field first.
365  TiXmlElement *composite = field->FirstChildElement("C");
366 
367  while (composite)
368  {
369  nextCompositeNumber++;
370 
371  int indx;
372  int err = composite->QueryIntAttribute("ID", &indx);
373  ASSERTL0(err == TIXML_SUCCESS, "Unable to read attribute ID.");
374 // ASSERTL0(indx == nextCompositeNumber, "Composite IDs must begin with zero and be sequential.");
375 
376  TiXmlNode* compositeChild = composite->FirstChild();
377  // This is primarily to skip comments that may be present.
378  // Comments appear as nodes just like elements.
379  // We are specifically looking for text in the body
380  // of the definition.
381  while(compositeChild && compositeChild->Type() != TiXmlNode::TINYXML_TEXT)
382  {
383  compositeChild = compositeChild->NextSibling();
384  }
385 
386  ASSERTL0(compositeChild, "Unable to read composite definition body.");
387  std::string compositeStr = compositeChild->ToText()->ValueStr();
388 
389  /// Parse out the element components corresponding to type of element.
390 
391  std::istringstream compositeDataStrm(compositeStr.c_str());
392 
393  try
394  {
395  bool first = true;
396  std::string prevCompositeElementStr;
397 
398  while (!compositeDataStrm.fail())
399  {
400  std::string compositeElementStr;
401  compositeDataStrm >> compositeElementStr;
402 
403  if (!compositeDataStrm.fail())
404  {
405  if (first)
406  {
407  first = false;
408 
409  Composite curVector(MemoryManager<GeometryVector>::AllocateSharedPtr());
410  m_meshComposites[indx] = curVector;
411  }
412 
413  if (compositeElementStr.length() > 0)
414  {
415  ResolveGeomRef(prevCompositeElementStr, compositeElementStr, m_meshComposites[indx]);
416  }
417  prevCompositeElementStr = compositeElementStr;
418  }
419  }
420  }
421  catch(...)
422  {
424  (std::string("Unable to read COMPOSITE data for composite: ") + compositeStr).c_str());
425  }
426 
427  /// Keep looking
428  composite = composite->NextSiblingElement("C");
429  }
430  }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:161
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mod...
Definition: ErrorUtil.hpp:158
boost::shared_ptr< GeometryVector > Composite
Definition: MeshGraph.h:111
void ResolveGeomRef(const std::string &prevToken, const std::string &token, Composite &composite)
void Nektar::SpatialDomains::MeshGraph2D::ReadEdges ( TiXmlDocument &  doc)
protected

We know we have it since we made it this far.

Look for elements in ELEMENT block.

All elements are of the form: "<E ID="#"> ... </E>", with ? being the element type. Read the ID field first.

Since all edge data is one big text block, we need to accumulate all TINYXML_TEXT data and then parse it. This approach effectively skips all comments or other node types since we only care about the edge list. We cannot handle missing edge numbers as we could with missing element numbers due to the text block format.

Now parse out the edges, three fields at a time.

Definition at line 97 of file MeshGraph2D.cpp.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), ASSERTL0, ErrorUtil::efatal, Nektar::SpatialDomains::MeshGraph::GetVertex(), Nektar::iterator, Nektar::SpatialDomains::MeshGraph::m_curvedEdges, Nektar::SpatialDomains::MeshGraph::m_segGeoms, Nektar::SpatialDomains::MeshGraph::m_spaceDimension, and NEKERROR.

Referenced by ReadGeometry().

98  {
99  /// We know we have it since we made it this far.
100  TiXmlHandle docHandle(&doc);
101  TiXmlElement* mesh = docHandle.FirstChildElement("NEKTAR").FirstChildElement("GEOMETRY").Element();
102  TiXmlElement* field = NULL;
103 
104  /// Look for elements in ELEMENT block.
105  field = mesh->FirstChildElement("EDGE");
106 
107  ASSERTL0(field, "Unable to find EDGE tag in file.");
108 
109  /// All elements are of the form: "<E ID="#"> ... </E>", with
110  /// ? being the element type.
111  /// Read the ID field first.
112  TiXmlElement *edge = field->FirstChildElement("E");
113 
114  /// Since all edge data is one big text block, we need to
115  /// accumulate all TINYXML_TEXT data and then parse it. This
116  /// approach effectively skips all comments or other node
117  /// types since we only care about the edge list. We
118  /// cannot handle missing edge numbers as we could with
119  /// missing element numbers due to the text block format.
120  std::string edgeStr;
121  int indx;
123 
124  while(edge)
125  {
126  int err = edge->QueryIntAttribute("ID",&indx);
127  ASSERTL0(err == TIXML_SUCCESS, "Unable to read edge attribute ID.");
128 
129  TiXmlNode *child = edge->FirstChild();
130  edgeStr.clear();
131  if (child->Type() == TiXmlNode::TINYXML_TEXT)
132  {
133  edgeStr += child->ToText()->ValueStr();
134  }
135 
136  /// Now parse out the edges, three fields at a time.
137  int vertex1, vertex2;
138  std::istringstream edgeDataStrm(edgeStr.c_str());
139 
140  try
141  {
142  while (!edgeDataStrm.fail())
143  {
144  edgeDataStrm >> vertex1 >> vertex2;
145 
146  // Must check after the read because we may be
147  // at the end and not know it. If we are at
148  // the end we will add a duplicate of the last
149  // entry if we don't check here.
150  if (!edgeDataStrm.fail())
151  {
152  PointGeomSharedPtr vertices[2] = {GetVertex(vertex1), GetVertex(vertex2)};
153 
154  SegGeomSharedPtr edge;
155 
156  it = m_curvedEdges.find(indx);
157 
158  if(it == m_curvedEdges.end())
159  {
161  edge->SetGlobalID(indx); // Set global mesh id
162  }
163  else
164  {
165  edge = MemoryManager<SegGeom>::AllocateSharedPtr(indx, m_spaceDimension, vertices, it->second);
166  edge->SetGlobalID(indx); //Set global mesh id
167  }
168 
169  m_segGeoms[indx] = edge;
170  }
171  }
172  }
173  catch(...)
174  {
175  NEKERROR(ErrorUtil::efatal, (std::string("Unable to read edge data: ") + edgeStr).c_str());
176  }
177 
178  edge = edge->NextSiblingElement("E");
179  }
180 
181  }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:161
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mod...
Definition: ErrorUtil.hpp:158
static boost::shared_ptr< DataType > AllocateSharedPtr()
Allocate a shared pointer from the memory pool.
PointGeomSharedPtr GetVertex(int id)
Definition: MeshGraph.h:567
boost::shared_ptr< SegGeom > SegGeomSharedPtr
Definition: Geometry2D.h:60
StandardMatrixTag boost::call_traits< LhsDataType >::const_reference rhs typedef NekMatrix< LhsDataType, StandardMatrixTag >::iterator iterator
boost::shared_ptr< PointGeom > PointGeomSharedPtr
Definition: Geometry.h:60
void Nektar::SpatialDomains::MeshGraph2D::ReadElements ( TiXmlDocument &  doc)
protected

We know we have it since we made it this far.

Look for elements in ELEMENT block.

All elements are of the form: "<? ID="#"> ... </?>", with ? being the element type.

Read id attribute.

Read text element description.

Parse out the element components corresponding to type of element.

Create a TriGeom to hold the new definition.

Create a QuadGeom to hold the new definition.

Keep looking

Definition at line 183 of file MeshGraph2D.cpp.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), ASSERTL0, ErrorUtil::efatal, Nektar::SpatialDomains::SegGeom::GetEdgeOrientation(), GetSegGeom(), Nektar::iterator, Nektar::SpatialDomains::TriGeom::kNedges, Nektar::SpatialDomains::QuadGeom::kNedges, Nektar::SpatialDomains::MeshGraph::m_curvedFaces, Nektar::SpatialDomains::MeshGraph::m_quadGeoms, Nektar::SpatialDomains::MeshGraph::m_triGeoms, and NEKERROR.

Referenced by ReadGeometry().

184  {
185  /// We know we have it since we made it this far.
186  TiXmlHandle docHandle(&doc);
187  TiXmlElement* mesh = docHandle.FirstChildElement("NEKTAR").FirstChildElement("GEOMETRY").Element();
188  TiXmlElement* field = NULL;
189 
190  /// Look for elements in ELEMENT block.
191  field = mesh->FirstChildElement("ELEMENT");
192 
193  ASSERTL0(field, "Unable to find ELEMENT tag in file.");
194 
195  // Set up curve map for curved elements on an embedded manifold.
197 
198  /// All elements are of the form: "<? ID="#"> ... </?>", with
199  /// ? being the element type.
200 
201  TiXmlElement *element = field->FirstChildElement();
202 
203  while (element)
204  {
205  std::string elementType(element->ValueStr());
206 
207  ASSERTL0(elementType == "Q" || elementType == "T",
208  (std::string("Unknown 2D element type: ") + elementType).c_str());
209 
210  /// Read id attribute.
211  int indx;
212  int err = element->QueryIntAttribute("ID", &indx);
213  ASSERTL0(err == TIXML_SUCCESS, "Unable to read element attribute ID.");
214 
215  it = m_curvedFaces.find(indx);
216 
217  /// Read text element description.
218  TiXmlNode* elementChild = element->FirstChild();
219  std::string elementStr;
220  while(elementChild)
221  {
222  if (elementChild->Type() == TiXmlNode::TINYXML_TEXT)
223  {
224  elementStr += elementChild->ToText()->ValueStr();
225  }
226  elementChild = elementChild->NextSibling();
227  }
228 
229  ASSERTL0(!elementStr.empty(), "Unable to read element description body.");
230 
231  /// Parse out the element components corresponding to type of element.
232  if (elementType == "T")
233  {
234  // Read three edge numbers
235  int edge1, edge2, edge3;
236  std::istringstream elementDataStrm(elementStr.c_str());
237 
238  try
239  {
240  elementDataStrm >> edge1;
241  elementDataStrm >> edge2;
242  elementDataStrm >> edge3;
243 
244  ASSERTL0(!elementDataStrm.fail(), (std::string("Unable to read element data for TRIANGLE: ") + elementStr).c_str());
245 
246  /// Create a TriGeom to hold the new definition.
248  {
249  GetSegGeom(edge1),
250  GetSegGeom(edge2),
251  GetSegGeom(edge3)
252  };
253 
255  {
256  SegGeom::GetEdgeOrientation(*edges[0], *edges[1]),
257  SegGeom::GetEdgeOrientation(*edges[1], *edges[2]),
258  SegGeom::GetEdgeOrientation(*edges[2], *edges[0])
259  };
260 
261  TriGeomSharedPtr trigeom;
262  if (it == m_curvedFaces.end())
263  {
264  trigeom = MemoryManager<TriGeom>
266  edges,
267  edgeorient);
268  }
269  else
270  {
271  trigeom = MemoryManager<TriGeom>
273  edges,
274  edgeorient,
275  it->second);
276  }
277  trigeom->SetGlobalID(indx);
278 
279  m_triGeoms[indx] = trigeom;
280  }
281  catch(...)
282  {
283  NEKERROR(ErrorUtil::efatal, (std::string("Unable to read element data for TRIANGLE: ") + elementStr).c_str());
284  }
285  }
286  else if (elementType == "Q")
287  {
288  // Read four edge numbers
289  int edge1, edge2, edge3, edge4;
290  std::istringstream elementDataStrm(elementStr.c_str());
291 
292  try
293  {
294  elementDataStrm >> edge1;
295  elementDataStrm >> edge2;
296  elementDataStrm >> edge3;
297  elementDataStrm >> edge4;
298 
299  ASSERTL0(!elementDataStrm.fail(), (std::string("Unable to read element data for QUAD: ") + elementStr).c_str());
300 
301  /// Create a QuadGeom to hold the new definition.
303  {GetSegGeom(edge1),GetSegGeom(edge2),
304  GetSegGeom(edge3),GetSegGeom(edge4)};
305 
307  {
308  SegGeom::GetEdgeOrientation(*edges[0], *edges[1]),
309  SegGeom::GetEdgeOrientation(*edges[1], *edges[2]),
310  SegGeom::GetEdgeOrientation(*edges[2], *edges[3]),
311  SegGeom::GetEdgeOrientation(*edges[3], *edges[0])
312  };
313 
314  QuadGeomSharedPtr quadgeom;
315  if (it == m_curvedFaces.end())
316  {
317  quadgeom = MemoryManager<QuadGeom>
319  edges,
320  edgeorient);
321  }
322  else
323  {
324  quadgeom = MemoryManager<QuadGeom>
326  edges,
327  edgeorient,
328  it->second);
329  }
330  quadgeom->SetGlobalID(indx);
331 
332  m_quadGeoms[indx] = quadgeom;
333 
334  }
335  catch(...)
336  {
337  NEKERROR(ErrorUtil::efatal,(std::string("Unable to read element data for QUAD: ") + elementStr).c_str());
338  }
339  }
340 
341  /// Keep looking
342  element = element->NextSiblingElement();
343  }
344  }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:161
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mod...
Definition: ErrorUtil.hpp:158
static boost::shared_ptr< DataType > AllocateSharedPtr()
Allocate a shared pointer from the memory pool.
boost::shared_ptr< QuadGeom > QuadGeomSharedPtr
Definition: QuadGeom.h:54
static StdRegions::Orientation GetEdgeOrientation(const SegGeom &edge1, const SegGeom &edge2)
Get the orientation of edge1.
Definition: SegGeom.cpp:293
boost::shared_ptr< SegGeom > SegGeomSharedPtr
Definition: Geometry2D.h:60
static const int kNedges
Get the orientation of face1.
Definition: TriGeom.h:98
StandardMatrixTag boost::call_traits< LhsDataType >::const_reference rhs typedef NekMatrix< LhsDataType, StandardMatrixTag >::iterator iterator
boost::shared_ptr< TriGeom > TriGeomSharedPtr
Definition: TriGeom.h:58
SegGeomSharedPtr GetSegGeom(int eID)
void Nektar::SpatialDomains::MeshGraph2D::ReadGeometry ( const std::string &  infilename)
virtual

Read will read the meshgraph vertices given a filename.

Reimplemented from Nektar::SpatialDomains::MeshGraph.

Definition at line 62 of file MeshGraph2D.cpp.

References ASSERTL0.

Referenced by MeshGraph2D().

63  {
64  TiXmlDocument doc(infilename);
65  bool loadOkay = doc.LoadFile();
66 
67  std::stringstream errstr;
68  errstr << "Unable to load file: " << infilename << "\n";
69  errstr << doc.ErrorDesc() << " (Line " << doc.ErrorRow()
70  << ", Column " << doc.ErrorCol() << ")";
71  ASSERTL0(loadOkay, errstr.str());
72 
73  ReadGeometry(doc);
74  }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:161
void ReadGeometry(const std::string &infilename)
Read will read the meshgraph vertices given a filename.
Definition: MeshGraph2D.cpp:62
void Nektar::SpatialDomains::MeshGraph2D::ReadGeometry ( TiXmlDocument &  doc)
virtual

Read will read the meshgraph vertices given a TiXmlDocument.

Look for all geometry related data in GEOMETRY block.

Error value returned by TinyXML.

Reimplemented from Nektar::SpatialDomains::MeshGraph.

Definition at line 77 of file MeshGraph2D.cpp.

References ASSERTL0, ReadComposites(), Nektar::SpatialDomains::MeshGraph::ReadCurves(), Nektar::SpatialDomains::MeshGraph::ReadDomain(), ReadEdges(), ReadElements(), and Nektar::SpatialDomains::MeshGraph::ReadGeometry().

78  {
79  // Read mesh first
81  TiXmlHandle docHandle(&doc);
82 
83  TiXmlElement* mesh = NULL;
84 
85  /// Look for all geometry related data in GEOMETRY block.
86  mesh = docHandle.FirstChildElement("NEKTAR").FirstChildElement("GEOMETRY").Element();
87 
88  ASSERTL0(mesh, "Unable to find GEOMETRY tag in file.");
89 
90  ReadCurves(doc);
91  ReadEdges(doc);
92  ReadElements(doc);
93  ReadComposites(doc);
94  ReadDomain(doc);
95  }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:161
void ReadEdges(TiXmlDocument &doc)
Definition: MeshGraph2D.cpp:97
void ReadComposites(TiXmlDocument &doc)
void ReadCurves(TiXmlDocument &doc)
Definition: MeshGraph.cpp:1103
void ReadElements(TiXmlDocument &doc)
virtual void ReadGeometry(const std::string &infilename)
Read will read the meshgraph vertices given a filename.
Definition: MeshGraph.cpp:230
void ReadDomain(TiXmlDocument &doc)
Definition: MeshGraph.cpp:1009
void Nektar::SpatialDomains::MeshGraph2D::ResolveGeomRef ( const std::string &  prevToken,
const std::string &  token,
Composite composite 
)
protected

Definition at line 448 of file MeshGraph2D.cpp.

References ASSERTL0, Nektar::SpatialDomains::MeshGraph::CheckRange(), ErrorUtil::efatal, ErrorUtil::ewarning, Nektar::ParseUtils::GenerateSeqVector(), Nektar::iterator, Nektar::SpatialDomains::MeshGraph::m_quadGeoms, Nektar::SpatialDomains::MeshGraph::m_segGeoms, Nektar::SpatialDomains::MeshGraph::m_triGeoms, Nektar::SpatialDomains::MeshGraph::m_vertSet, and NEKERROR.

Referenced by ReadComposites().

450  {
451  try
452  {
453  std::istringstream tokenStream(token);
454  std::istringstream prevTokenStream(prevToken);
455 
456  char type;
457  char prevType;
458 
459  tokenStream >> type;
460 
461  std::string::size_type indxBeg = token.find_first_of('[') + 1;
462  std::string::size_type indxEnd = token.find_last_of(']') - 1;
463 
464  ASSERTL0(indxBeg <= indxEnd, (std::string("Error reading index definition:") + token).c_str());
465 
466  std::string indxStr = token.substr(indxBeg, indxEnd - indxBeg + 1);
467  std::vector<unsigned int> seqVector;
469 
470  bool err = ParseUtils::GenerateSeqVector(indxStr.c_str(), seqVector);
471 
472  ASSERTL0(err, (std::string("Error reading composite elements: ") + indxStr).c_str());
473 
474  prevTokenStream >> prevType;
475 
476  // All composites must be of the same dimension.
477  bool validSequence = (prevToken.empty() || // No previous, then current is just fine.
478  (type == 'V' && prevType == 'V') ||
479  (type == 'E' && prevType == 'E') ||
480  ((type == 'T' || type == 'Q') &&
481  (prevType == 'T' || prevType == 'Q')));
482 
483  ASSERTL0(validSequence, (std::string("Invalid combination of composite items: ")
484  + type + " and " + prevType + ".").c_str());
485 
486 
487  switch(type)
488  {
489  case 'E': // Edge
490  for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
491  {
492  if (m_segGeoms.find(*seqIter) == m_segGeoms.end())
493  {
494  char errStr[16] = "";
495  ::sprintf(errStr, "%d", *seqIter);
496  NEKERROR(ErrorUtil::ewarning, (std::string("Unknown edge index: ") + errStr).c_str());
497  }
498  else
499  {
500  composite->push_back(m_segGeoms[*seqIter]);
501  }
502  }
503  break;
504 
505  case 'T': // Triangle
506  {
507  for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
508  {
509  if (m_triGeoms.count(*seqIter) == 0 )
510  {
511  char errStr[16] = "";
512  ::sprintf(errStr, "%d", *seqIter);
513  NEKERROR(ErrorUtil::ewarning, (std::string("Unknown triangle index: ") + errStr).c_str());
514  }
515  else
516  {
517  if(CheckRange(*m_triGeoms[*seqIter]))
518  {
519  composite->push_back(m_triGeoms[*seqIter]);
520  }
521  }
522  }
523  }
524  break;
525 
526  case 'Q': // Quad
527  {
528  for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
529  {
530  if (m_quadGeoms.count(*seqIter) == 0)
531  {
532  char errStr[16] = "";
533  ::sprintf(errStr, "%d", *seqIter);
534  NEKERROR(ErrorUtil::ewarning, (std::string("Unknown quad index: ") + errStr +std::string(" in Composite section")).c_str());
535  }
536  else
537  {
538  if(CheckRange(*m_quadGeoms[*seqIter]))
539  {
540  composite->push_back(m_quadGeoms[*seqIter]);
541  }
542  }
543  }
544  }
545  break;
546 
547  case 'V': // Vertex
548  for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
549  {
550  if (*seqIter >= m_vertSet.size())
551  {
552  char errStr[16] = "";
553  ::sprintf(errStr, "%d", *seqIter);
554  NEKERROR(ErrorUtil::ewarning, (std::string("Unknown vertex index: ") + errStr).c_str());
555  }
556  else
557  {
558  composite->push_back(m_vertSet[*seqIter]);
559  }
560  }
561  break;
562 
563  default:
564  NEKERROR(ErrorUtil::efatal, (std::string("Unrecognized composite token: ") + token).c_str());
565  }
566  }
567  catch(...)
568  {
569  NEKERROR(ErrorUtil::efatal, (std::string("Problem processing composite token: ") + token).c_str());
570  }
571 
572  return;
573  }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:161
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mod...
Definition: ErrorUtil.hpp:158
static bool GenerateSeqVector(const char *const str, std::vector< unsigned int > &vec)
Definition: ParseUtils.hpp:78
StandardMatrixTag boost::call_traits< LhsDataType >::const_reference rhs typedef NekMatrix< LhsDataType, StandardMatrixTag >::iterator iterator
bool CheckRange(Geometry2D &geom)
Check if goemetry is in range definition if activated.
Definition: MeshGraph.cpp:1813