44 namespace SpatialDomains
64 TiXmlDocument doc(infilename);
65 bool loadOkay = doc.LoadFile();
67 std::stringstream errstr;
68 errstr <<
"Unable to load file: " << infilename <<
"\n";
69 errstr << doc.ErrorDesc() <<
" (Line " << doc.ErrorRow()
70 <<
", Column " << doc.ErrorCol() <<
")";
81 TiXmlHandle docHandle(&doc);
83 TiXmlElement* mesh = NULL;
86 mesh = docHandle.FirstChildElement(
"NEKTAR").FirstChildElement(
"GEOMETRY").Element();
88 ASSERTL0(mesh,
"Unable to find GEOMETRY tag in file.");
101 TiXmlHandle docHandle(&doc);
102 TiXmlElement* mesh = docHandle.FirstChildElement(
"NEKTAR").FirstChildElement(
"GEOMETRY").Element();
103 TiXmlElement* field = NULL;
108 field = mesh->FirstChildElement(
"EDGE");
110 ASSERTL0(field,
"Unable to find EDGE tag in file.");
113 field->QueryStringAttribute(
"COMPRESSED",&IsCompressed);
115 if(IsCompressed.size())
117 ASSERTL0(boost::iequals(IsCompressed,
119 "Compressed formats do not match. Expected :"
121 +
" but got " + std::string(IsCompressed));
123 TiXmlNode* edgeChild = field->FirstChild();
124 ASSERTL0(edgeChild,
"Unable to extract the data from "
125 "the compressed edge tag.");
128 if (edgeChild->Type() == TiXmlNode::TINYXML_TEXT)
130 edgeStr += edgeChild->ToText()->ValueStr();
133 std::vector<LibUtilities::MeshEdge> edgeData;
138 for(
int i = 0; i < edgeData.size(); ++i)
140 indx = edgeData[i].id;
168 TiXmlElement *edge = field->FirstChildElement(
"E");
180 int err = edge->QueryIntAttribute(
"ID",&indx);
181 ASSERTL0(err == TIXML_SUCCESS,
"Unable to read edge attribute ID.");
183 TiXmlNode *child = edge->FirstChild();
185 if (child->Type() == TiXmlNode::TINYXML_TEXT)
187 edgeStr += child->ToText()->ValueStr();
191 int vertex1, vertex2;
192 std::istringstream edgeDataStrm(edgeStr.c_str());
196 while (!edgeDataStrm.fail())
198 edgeDataStrm >> vertex1 >> vertex2;
205 if (!edgeDataStrm.fail())
229 edge = edge->NextSiblingElement(
"E");
237 TiXmlHandle docHandle(&doc);
238 TiXmlElement* mesh = docHandle.FirstChildElement(
"NEKTAR").FirstChildElement(
"GEOMETRY").Element();
239 TiXmlElement* field = NULL;
242 field = mesh->FirstChildElement(
"FACE");
244 ASSERTL0(field,
"Unable to find FACE tag in file.");
250 TiXmlElement *element = field->FirstChildElement();
255 std::string elementType(element->ValueStr());
257 ASSERTL0(elementType ==
"Q" || elementType ==
"T",
258 (std::string(
"Unknown 3D face type: ") + elementType).c_str());
262 element->QueryStringAttribute(
"COMPRESSED",&IsCompressed);
264 if(IsCompressed.size())
266 ASSERTL0(boost::iequals(IsCompressed,
268 "Compressed formats do not match. Expected :"
270 +
" but got "+ std::string(IsCompressed));
273 TiXmlNode* faceChild = element->FirstChild();
274 ASSERTL0(faceChild,
"Unable to extract the data from "
275 "the compressed face tag.");
278 if (faceChild->Type() == TiXmlNode::TINYXML_TEXT)
280 faceStr += faceChild->ToText()->ValueStr();
284 if(elementType ==
"T")
286 std::vector<LibUtilities::MeshTri> faceData;
290 for(
int i = 0; i < faceData.size(); ++i)
292 indx = faceData[i].id;
317 indx, edges, edgeorient);
323 indx, edges, edgeorient,
326 trigeom->SetGlobalID(indx);
330 else if (elementType ==
"Q")
332 std::vector<LibUtilities::MeshQuad> faceData;
336 for(
int i = 0; i < faceData.size(); ++i)
338 indx = faceData[i].id;
364 indx, edges, edgeorient);
370 indx, edges, edgeorient,
373 quadgeom->SetGlobalID(indx);
382 int err = element->QueryIntAttribute(
"ID", &indx);
383 ASSERTL0(err == TIXML_SUCCESS,
"Unable to read face attribute ID.");
389 TiXmlNode* elementChild = element->FirstChild();
390 std::string elementStr;
393 if (elementChild->Type() == TiXmlNode::TINYXML_TEXT)
395 elementStr += elementChild->ToText()->ValueStr();
397 elementChild = elementChild->NextSibling();
400 ASSERTL0(!elementStr.empty(),
"Unable to read face description body.");
403 if (elementType ==
"T")
406 int edge1, edge2, edge3;
407 std::istringstream elementDataStrm(elementStr.c_str());
411 elementDataStrm >> edge1;
412 elementDataStrm >> edge2;
413 elementDataStrm >> edge3;
415 ASSERTL0(!elementDataStrm.fail(), (std::string(
"Unable to read face data for TRIANGLE: ") + elementStr).c_str());
443 trigeom->SetGlobalID(indx);
450 (std::string(
"Unable to read face data for TRIANGLE: ") + elementStr).c_str());
453 else if (elementType ==
"Q")
456 int edge1, edge2, edge3, edge4;
457 std::istringstream elementDataStrm(elementStr.c_str());
461 elementDataStrm >> edge1;
462 elementDataStrm >> edge2;
463 elementDataStrm >> edge3;
464 elementDataStrm >> edge4;
466 ASSERTL0(!elementDataStrm.fail(), (std::string(
"Unable to read face data for QUAD: ") + elementStr).c_str());
491 quadgeom->SetGlobalID(indx);
503 element = element->NextSiblingElement();
510 TiXmlHandle docHandle(&doc);
511 TiXmlElement* mesh = docHandle.FirstChildElement(
"NEKTAR").FirstChildElement(
"GEOMETRY").Element();
512 TiXmlElement* field = NULL;
515 field = mesh->FirstChildElement(
"ELEMENT");
517 ASSERTL0(field,
"Unable to find ELEMENT tag in file.");
522 TiXmlElement *element = field->FirstChildElement();
526 std::string elementType(element->ValueStr());
529 ASSERTL0(elementType ==
"A" || elementType ==
"P" || elementType ==
"R" || elementType ==
"H",
530 (std::string(
"Unknown 3D element type: ") + elementType).c_str());
534 element->QueryStringAttribute(
"COMPRESSED",&IsCompressed);
536 if(IsCompressed.size())
538 ASSERTL0(boost::iequals(IsCompressed,
540 "Compressed formats do not match. Expected :"
542 +
" but got " + std::string(IsCompressed));
545 TiXmlNode* child = element->FirstChild();
546 ASSERTL0(child,
"Unable to extract the data from "
547 "the compressed face tag.");
550 if (child->Type() == TiXmlNode::TINYXML_TEXT)
552 str += child->ToText()->ValueStr();
556 if(elementType ==
"A")
558 std::vector<LibUtilities::MeshTet> data;
562 for(
int i = 0; i < data.size(); ++i)
565 for(
int j = 0; j < 4; ++j)
570 boost::static_pointer_cast<
TriGeom>(face);
574 ::AllocateSharedPtr(tfaces));
575 tetgeom->SetGlobalID(indx);
580 else if (elementType ==
"P")
582 std::vector<LibUtilities::MeshPyr> data;
586 for(
int i = 0; i < data.size(); ++i)
591 for(
int j = 0; j < 5; ++j)
597 (face->GetShapeType() !=
599 face->GetShapeType() !=
602 std::stringstream errorstring;
603 errorstring <<
"Element " << indx
604 <<
" has invalid face: " << j;
605 ASSERTL0(
false, errorstring.str().c_str());
607 else if (face->GetShapeType() ==
611 ::static_pointer_cast<
TriGeom>(face);
614 else if (face->GetShapeType() ==
618 ::static_pointer_cast<
QuadGeom>(face);
622 ASSERTL0((Ntfaces == 4) && (Nqfaces = 1),
623 "Did not identify the correct number of "
624 "triangular and quadrilateral faces for a "
628 ::AllocateSharedPtr(faces));
629 pyrgeom->SetGlobalID(indx);
634 else if (elementType ==
"R")
636 std::vector<LibUtilities::MeshPrism> data;
640 for(
int i = 0; i < data.size(); ++i)
645 for(
int j = 0; j < 5; ++j)
650 (face->GetShapeType() !=
652 face->GetShapeType() !=
655 std::stringstream errorstring;
656 errorstring <<
"Element " << indx
657 <<
" has invalid face: " << j;
658 ASSERTL0(
false, errorstring.str().c_str());
660 else if (face->GetShapeType() ==
664 ::static_pointer_cast<
TriGeom>(face);
667 else if (face->GetShapeType() ==
671 ::static_pointer_cast<
QuadGeom>(face);
675 ASSERTL0((Ntfaces == 2) && (Nqfaces = 3),
676 "Did not identify the correct number of "
677 "triangular and quadrilateral faces for a "
682 ::AllocateSharedPtr(faces));
683 prismgeom->SetGlobalID(indx);
688 else if (elementType ==
"H")
690 std::vector<LibUtilities::MeshHex> data;
695 for(
int i = 0; i < data.size(); ++i)
698 for(
int j = 0; j < 6; ++j)
703 ::static_pointer_cast<
QuadGeom>(face);
707 ::AllocateSharedPtr(faces));
708 hexgeom->SetGlobalID(indx);
718 int err = element->QueryIntAttribute(
"ID", &indx);
719 ASSERTL0(err == TIXML_SUCCESS,
"Unable to read element attribute ID.");
722 TiXmlNode* elementChild = element->FirstChild();
723 std::string elementStr;
726 if (elementChild->Type() == TiXmlNode::TINYXML_TEXT)
728 elementStr += elementChild->ToText()->ValueStr();
730 elementChild = elementChild->NextSibling();
733 ASSERTL0(!elementStr.empty(),
"Unable to read element description body.");
735 std::istringstream elementDataStrm(elementStr.c_str());
740 if (elementType ==
"A")
753 std::stringstream errorstring;
754 errorstring <<
"Element " << indx <<
" must have " << kNtfaces <<
" triangle face(s), and " << kNqfaces <<
" quadrilateral face(s).";
755 for (
int i = 0; i < kNfaces; i++)
758 elementDataStrm >> faceID;
763 std::stringstream errorstring;
764 errorstring <<
"Element " << indx <<
" has invalid face: " << faceID;
765 ASSERTL0(
false, errorstring.str().c_str());
769 ASSERTL0(Ntfaces < kNtfaces, errorstring.str().c_str());
770 tfaces[Ntfaces++] = boost::static_pointer_cast<
TriGeom>(face);
774 ASSERTL0(Nqfaces < kNqfaces, errorstring.str().c_str());
779 ASSERTL0(!elementDataStrm.fail(), (std::string(
"Unable to read element data for TETRAHEDRON: ") + elementStr).c_str());
780 ASSERTL0(Ntfaces == kNtfaces, errorstring.str().c_str());
781 ASSERTL0(Nqfaces == kNqfaces, errorstring.str().c_str());
784 tetgeom->SetGlobalID(indx);
792 (std::string(
"Unable to read element data for TETRAHEDRON: ") + elementStr).c_str());
796 else if (elementType ==
"P")
810 std::stringstream errorstring;
811 errorstring <<
"Element " << indx <<
" must have " << kNtfaces <<
" triangle face(s), and " << kNqfaces <<
" quadrilateral face(s).";
812 for (
int i = 0; i < kNfaces; i++)
815 elementDataStrm >> faceID;
820 std::stringstream errorstring;
821 errorstring <<
"Element " << indx <<
" has invalid face: " << faceID;
822 ASSERTL0(
false, errorstring.str().c_str());
826 ASSERTL0(Ntfaces < kNtfaces, errorstring.str().c_str());
827 faces[Nfaces++] = boost::static_pointer_cast<
TriGeom>(face);
832 ASSERTL0(Nqfaces < kNqfaces, errorstring.str().c_str());
833 faces[Nfaces++] = boost::static_pointer_cast<
QuadGeom>(face);
839 ASSERTL0(!elementDataStrm.fail(), (std::string(
"Unable to read element data for PYRAMID: ") + elementStr).c_str());
840 ASSERTL0(Ntfaces == kNtfaces, errorstring.str().c_str());
841 ASSERTL0(Nqfaces == kNqfaces, errorstring.str().c_str());
844 pyrgeom->SetGlobalID(indx);
852 (std::string(
"Unable to read element data for PYRAMID: ") + elementStr).c_str());
856 else if (elementType ==
"R")
870 std::stringstream errorstring;
871 errorstring <<
"Element " << indx <<
" must have "
872 << kNtfaces <<
" triangle face(s), and "
873 << kNqfaces <<
" quadrilateral face(s).";
875 for (
int i = 0; i < kNfaces; i++)
878 elementDataStrm >> faceID;
883 std::stringstream errorstring;
884 errorstring <<
"Element " << indx <<
" has invalid face: " << faceID;
885 ASSERTL0(
false, errorstring.str().c_str());
889 ASSERTL0(Ntfaces < kNtfaces, errorstring.str().c_str());
890 faces[Nfaces++] = boost::static_pointer_cast<
TriGeom>(face);
895 ASSERTL0(Nqfaces < kNqfaces, errorstring.str().c_str());
896 faces[Nfaces++] = boost::static_pointer_cast<
QuadGeom>(face);
902 ASSERTL0(!elementDataStrm.fail(), (std::string(
"Unable to read element data for PRISM: ") + elementStr).c_str());
903 ASSERTL0(Ntfaces == kNtfaces, errorstring.str().c_str());
904 ASSERTL0(Nqfaces == kNqfaces, errorstring.str().c_str());
907 prismgeom->SetGlobalID(indx);
915 (std::string(
"Unable to read element data for PRISM: ") + elementStr).c_str());
919 else if (elementType ==
"H")
933 std::stringstream errorstring;
934 errorstring <<
"Element " << indx <<
" must have " << kNtfaces <<
" triangle face(s), and " << kNqfaces <<
" quadrilateral face(s).";
935 for (
int i = 0; i < kNfaces; i++)
938 elementDataStrm >> faceID;
943 std::stringstream errorstring;
944 errorstring <<
"Element " << indx <<
" has invalid face: " << faceID;
945 ASSERTL0(
false, errorstring.str().c_str());
949 ASSERTL0(Ntfaces < kNtfaces, errorstring.str().c_str());
954 ASSERTL0(Nqfaces < kNqfaces, errorstring.str().c_str());
955 qfaces[Nqfaces++] = boost::static_pointer_cast<
QuadGeom>(face);
960 ASSERTL0(!elementDataStrm.fail(), (std::string(
"Unable to read element data for HEXAHEDRAL: ") + elementStr).c_str());
961 ASSERTL0(Ntfaces == kNtfaces, errorstring.str().c_str());
962 ASSERTL0(Nqfaces == kNqfaces, errorstring.str().c_str());
965 hexgeom->SetGlobalID(indx);
973 (std::string(
"Unable to read element data for HEXAHEDRAL: ") + elementStr).c_str());
978 element = element->NextSiblingElement();
984 TiXmlHandle docHandle(&doc);
987 TiXmlElement* mesh = docHandle.FirstChildElement(
"NEKTAR").FirstChildElement(
"GEOMETRY").Element();
988 TiXmlElement* field = NULL;
990 ASSERTL0(mesh,
"Unable to find GEOMETRY tag in file.");
993 field = mesh->FirstChildElement(
"COMPOSITE");
995 ASSERTL0(field,
"Unable to find COMPOSITE tag in file.");
997 int nextCompositeNumber = -1;
1002 TiXmlElement *composite = field->FirstChildElement(
"C");
1006 nextCompositeNumber++;
1009 int err = composite->QueryIntAttribute(
"ID", &indx);
1010 ASSERTL0(err == TIXML_SUCCESS,
"Unable to read attribute ID.");
1014 err = composite->QueryStringAttribute(
"LABEL", &labelstr);
1015 if(err == TIXML_SUCCESS)
1020 TiXmlNode* compositeChild = composite->FirstChild();
1025 while(compositeChild && compositeChild->Type() != TiXmlNode::TINYXML_TEXT)
1027 compositeChild = compositeChild->NextSibling();
1030 ASSERTL0(compositeChild,
"Unable to read composite definition body.");
1031 std::string compositeStr = compositeChild->ToText()->ValueStr();
1035 std::istringstream compositeDataStrm(compositeStr.c_str());
1040 std::string prevCompositeElementStr;
1042 while (!compositeDataStrm.fail())
1044 std::string compositeElementStr;
1045 compositeDataStrm >> compositeElementStr;
1047 if (!compositeDataStrm.fail())
1057 if (compositeElementStr.length() > 0)
1061 prevCompositeElementStr = compositeElementStr;
1068 (std::string(
"Unable to read COMPOSITE data for composite: ") + compositeStr).c_str());
1072 composite = composite->NextSiblingElement(
"C");
1082 + boost::lexical_cast<
string>(eID) +
" not found.");
1113 std::istringstream tokenStream(token);
1114 std::istringstream prevTokenStream(prevToken);
1119 tokenStream >> type;
1121 std::string::size_type indxBeg = token.find_first_of(
'[') + 1;
1122 std::string::size_type indxEnd = token.find_last_of(
']') - 1;
1124 ASSERTL0(indxBeg <= indxEnd, (std::string(
"Error reading index definition:") + token).c_str());
1126 std::string indxStr = token.substr(indxBeg, indxEnd - indxBeg + 1);
1128 std::vector<unsigned int> seqVector;
1133 ASSERTL0(err, (std::string(
"Error reading composite elements: ") + indxStr).c_str());
1135 prevTokenStream >> prevType;
1138 map<char, int> typeMap;
1149 bool validSequence = (prevToken.empty() || (typeMap[type] == typeMap[prevType]));
1151 ASSERTL0(validSequence, (std::string(
"Invalid combination of composite items: ")
1152 + type +
" and " + prevType +
".").c_str());
1157 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1161 char errStr[16] =
"";
1162 ::sprintf(errStr,
"%d", *seqIter);
1167 composite->push_back(
m_vertSet[*seqIter]);
1173 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1177 char errStr[16] =
"";
1178 ::sprintf(errStr,
"%d", *seqIter);
1189 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1194 char errStr[16] =
"";
1195 ::sprintf(errStr,
"%d", *seqIter);
1202 composite->push_back(face);
1209 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1213 char errStr[16] =
"";
1214 ::sprintf(errStr,
"%d", *seqIter);
1228 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1232 char errStr[16] =
"";
1233 ::sprintf(errStr,
"%d", *seqIter);
1248 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1252 char errStr[16] =
"";
1253 ::sprintf(errStr,
"%d", *seqIter);
1268 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1272 char errStr[16] =
"";
1273 ::sprintf(errStr,
"%d", *seqIter);
1288 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1292 char errStr[16] =
"";
1293 ::sprintf(errStr,
"%d", *seqIter);
1308 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1312 char errStr[16] =
"";
1313 ::sprintf(errStr,
"%d", *seqIter);
1356 const std::string variable)
1362 ASSERTL0(elements->size() > 0,
"No elements for the given face."
1363 " Check all elements belong to the domain composite.");
1375 ASSERTL0(expansion,
"Could not find expansion connected to face "+
1376 boost::lexical_cast<string>(face->GetGlobalID()));
1381 expansion->m_geomShPtr);
1386 int dir = geom3d->
GetDir((*elements)[0]->m_FaceIndx, facedir);
1388 if(face->GetNumVerts() == 3)
1391 expansion->m_basisKeyVector[dir].GetBasisType(),
1392 expansion->m_basisKeyVector[dir].GetNumPoints(),
1393 expansion->m_basisKeyVector[dir].GetNumModes());
1398 expansion->m_basisKeyVector[dir].GetBasisType(),
1399 expansion->m_basisKeyVector[dir].GetNumPoints(),
1400 expansion->m_basisKeyVector[dir].GetNumModes());
1420 for (
int i = 0; i < kNfaces; ++i)
1422 int faceId = element->GetFace(i)->GetGlobalID();
1426 elementFace->m_Element = element;
1427 elementFace->m_FaceIndx = i;
1437 tmp->push_back(elementFace);
1443 tmp->push_back(elementFace);
boost::shared_ptr< PyrGeom > PyrGeomSharedPtr
#define ASSERTL0(condition, msg)
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mod...
boost::shared_ptr< ElementFaceVector > ElementFaceVectorSharedPtr
PrismGeomMap m_prismGeoms
static boost::shared_ptr< DataType > AllocateSharedPtr()
Allocate a shared pointer from the memory pool.
void ReadCurves(TiXmlDocument &doc)
int GetDir(const int faceidx, const int facedir) const
Returns the element coordinate direction corresponding to a given face coordinate direction...
void ReadFaces(TiXmlDocument &doc)
General purpose memory allocation routines with the ability to allocate from thread specific memory p...
static const int kNtfaces
CompositeMap m_meshComposites
void PopulateFaceToElMap(Geometry3DSharedPtr element, int kNfaces)
Given a 3D geometry object #element, populate the face to element map m_faceToElMap which maps faces ...
void ReadGeometry(const std::string &infilename)
Read will read the meshgraph vertices given a filename.
boost::shared_ptr< QuadGeom > QuadGeomSharedPtr
LibUtilities::BasisKey EvaluateTriFaceBasisKey(const int facedir, const LibUtilities::BasisType faceDirBasisType, const int numpoints, const int nummodes)
PointGeomSharedPtr GetVertex(int id)
boost::unordered_map< int, ElementFaceVectorSharedPtr > m_faceToElMap
std::map< int, QuadGeomSharedPtr >::iterator QuadGeomMapIter
static const int kNtfaces
boost::shared_ptr< HexGeom > HexGeomSharedPtr
Geometry2DSharedPtr GetGeometry2D(int gID)
void ResolveGeomRef(const std::string &prevToken, const std::string &token, Composite &composite)
SegGeomSharedPtr GetSegGeom(int eID)
boost::shared_ptr< SessionReader > SessionReaderSharedPtr
static bool GenerateSeqVector(const char *const str, std::vector< unsigned int > &vec)
virtual void ReadGeometry(const std::string &infilename)
Read will read the meshgraph vertices given a filename.
static StdRegions::Orientation GetEdgeOrientation(const SegGeom &edge1, const SegGeom &edge2)
Get the orientation of edge1.
std::map< int, TriGeomSharedPtr >::iterator TriGeomMapIter
std::string GetCompressString(void)
ElementFaceVectorSharedPtr GetElementsFromFace(Geometry2DSharedPtr face)
Return the elements (shared ptrs) that have this face.
void ReadComposites(TiXmlDocument &doc)
LibUtilities::BasisKey EvaluateQuadFaceBasisKey(const int facedir, const LibUtilities::BasisType faceDirBasisType, const int numpoints, const int nummodes)
static const int kNqfaces
boost::shared_ptr< SegGeom > SegGeomSharedPtr
boost::shared_ptr< DomainRange > DomainRangeShPtr
void ReadElements(TiXmlDocument &doc)
boost::shared_ptr< GeometryVector > Composite
boost::shared_ptr< ElementFace > ElementFaceSharedPtr
map< int, string > m_compositesLabels
static const int kNqfaces
static const int kNedges
Get the orientation of face1.
static const int kNtfaces
boost::shared_ptr< Geometry2D > Geometry2DSharedPtr
StandardMatrixTag boost::call_traits< LhsDataType >::const_reference rhs typedef NekMatrix< LhsDataType, StandardMatrixTag >::iterator iterator
LibUtilities::BasisKey GetFaceBasisKey(Geometry2DSharedPtr face, const int flag, const std::string variable="DefaultVar")
Return the BasisKey corresponding to a face of an element.
void ReadEdges(TiXmlDocument &doc)
static const int kNqfaces
boost::shared_ptr< Expansion > ExpansionShPtr
Base class for a spectral/hp element mesh.
void ReadDomain(TiXmlDocument &doc)
boost::shared_ptr< PrismGeom > PrismGeomSharedPtr
bool CheckRange(Geometry2D &geom)
Check if goemetry is in range definition if activated.
ExpansionShPtr GetExpansion(GeometrySharedPtr geom, const std::string variable="DefaultVar")
boost::shared_ptr< TetGeom > TetGeomSharedPtr
boost::shared_ptr< TriGeom > TriGeomSharedPtr
static const BasisKey NullBasisKey(eNoBasisType, 0, NullPointsKey)
Defines a null basis with no type or points.
void ReadExpansions(const std::string &infilename)
Read the expansions given the XML file path.
static const int kNqfaces
static const int kNtfaces
Describes the specification for a Basis.
boost::shared_ptr< PointGeom > PointGeomSharedPtr
int ZlibDecodeFromBase64Str(std::string &in64, std::vector< T > &out)
boost::shared_ptr< Geometry3D > Geometry3DSharedPtr