47 namespace SpatialDomains
67 TiXmlDocument doc(infilename);
68 bool loadOkay = doc.LoadFile();
70 std::stringstream errstr;
71 errstr <<
"Unable to load file: " << infilename <<
"\n";
72 errstr << doc.ErrorDesc() <<
" (Line " << doc.ErrorRow()
73 <<
", Column " << doc.ErrorCol() <<
")";
84 TiXmlHandle docHandle(&doc);
86 TiXmlElement* mesh = NULL;
89 mesh = docHandle.FirstChildElement(
"NEKTAR").FirstChildElement(
"GEOMETRY").Element();
91 ASSERTL0(mesh,
"Unable to find GEOMETRY tag in file.");
104 TiXmlHandle docHandle(&doc);
105 TiXmlElement* mesh = docHandle.FirstChildElement(
"NEKTAR").FirstChildElement(
"GEOMETRY").Element();
106 TiXmlElement* field = NULL;
111 field = mesh->FirstChildElement(
"EDGE");
113 ASSERTL0(field,
"Unable to find EDGE tag in file.");
116 field->QueryStringAttribute(
"COMPRESSED",&IsCompressed);
118 if(IsCompressed.size())
120 ASSERTL0(boost::iequals(IsCompressed,
122 "Compressed formats do not match. Expected :"
124 +
" but got " + std::string(IsCompressed));
126 TiXmlNode* edgeChild = field->FirstChild();
127 ASSERTL0(edgeChild,
"Unable to extract the data from "
128 "the compressed edge tag.");
131 if (edgeChild->Type() == TiXmlNode::TINYXML_TEXT)
133 edgeStr += edgeChild->ToText()->ValueStr();
136 std::vector<LibUtilities::MeshEdge> edgeData;
141 for(
int i = 0; i < edgeData.size(); ++i)
143 indx = edgeData[i].id;
171 TiXmlElement *edge = field->FirstChildElement(
"E");
183 int err = edge->QueryIntAttribute(
"ID",&indx);
184 ASSERTL0(err == TIXML_SUCCESS,
"Unable to read edge attribute ID.");
186 TiXmlNode *child = edge->FirstChild();
188 if (child->Type() == TiXmlNode::TINYXML_TEXT)
190 edgeStr += child->ToText()->ValueStr();
194 int vertex1, vertex2;
195 std::istringstream edgeDataStrm(edgeStr.c_str());
199 while (!edgeDataStrm.fail())
201 edgeDataStrm >> vertex1 >> vertex2;
208 if (!edgeDataStrm.fail())
232 edge = edge->NextSiblingElement(
"E");
240 TiXmlHandle docHandle(&doc);
241 TiXmlElement* mesh = docHandle.FirstChildElement(
"NEKTAR").FirstChildElement(
"GEOMETRY").Element();
242 TiXmlElement* field = NULL;
245 field = mesh->FirstChildElement(
"FACE");
247 ASSERTL0(field,
"Unable to find FACE tag in file.");
253 TiXmlElement *element = field->FirstChildElement();
258 std::string elementType(element->ValueStr());
260 ASSERTL0(elementType ==
"Q" || elementType ==
"T",
261 (std::string(
"Unknown 3D face type: ") + elementType).c_str());
265 element->QueryStringAttribute(
"COMPRESSED",&IsCompressed);
267 if(IsCompressed.size())
269 ASSERTL0(boost::iequals(IsCompressed,
271 "Compressed formats do not match. Expected :"
273 +
" but got "+ std::string(IsCompressed));
276 TiXmlNode* faceChild = element->FirstChild();
277 ASSERTL0(faceChild,
"Unable to extract the data from "
278 "the compressed face tag.");
281 if (faceChild->Type() == TiXmlNode::TINYXML_TEXT)
283 faceStr += faceChild->ToText()->ValueStr();
287 if(elementType ==
"T")
289 std::vector<LibUtilities::MeshTri> faceData;
293 for(
int i = 0; i < faceData.size(); ++i)
295 indx = faceData[i].id;
320 indx, edges, edgeorient);
326 indx, edges, edgeorient,
329 trigeom->SetGlobalID(indx);
333 else if (elementType ==
"Q")
335 std::vector<LibUtilities::MeshQuad> faceData;
339 for(
int i = 0; i < faceData.size(); ++i)
341 indx = faceData[i].id;
367 indx, edges, edgeorient);
373 indx, edges, edgeorient,
376 quadgeom->SetGlobalID(indx);
385 int err = element->QueryIntAttribute(
"ID", &indx);
386 ASSERTL0(err == TIXML_SUCCESS,
"Unable to read face attribute ID.");
392 TiXmlNode* elementChild = element->FirstChild();
393 std::string elementStr;
396 if (elementChild->Type() == TiXmlNode::TINYXML_TEXT)
398 elementStr += elementChild->ToText()->ValueStr();
400 elementChild = elementChild->NextSibling();
403 ASSERTL0(!elementStr.empty(),
"Unable to read face description body.");
406 if (elementType ==
"T")
409 int edge1, edge2, edge3;
410 std::istringstream elementDataStrm(elementStr.c_str());
414 elementDataStrm >> edge1;
415 elementDataStrm >> edge2;
416 elementDataStrm >> edge3;
418 ASSERTL0(!elementDataStrm.fail(), (std::string(
"Unable to read face data for TRIANGLE: ") + elementStr).c_str());
446 trigeom->SetGlobalID(indx);
453 (std::string(
"Unable to read face data for TRIANGLE: ") + elementStr).c_str());
456 else if (elementType ==
"Q")
459 int edge1, edge2, edge3, edge4;
460 std::istringstream elementDataStrm(elementStr.c_str());
464 elementDataStrm >> edge1;
465 elementDataStrm >> edge2;
466 elementDataStrm >> edge3;
467 elementDataStrm >> edge4;
469 ASSERTL0(!elementDataStrm.fail(), (std::string(
"Unable to read face data for QUAD: ") + elementStr).c_str());
494 quadgeom->SetGlobalID(indx);
506 element = element->NextSiblingElement();
513 TiXmlHandle docHandle(&doc);
514 TiXmlElement* mesh = docHandle.FirstChildElement(
"NEKTAR").FirstChildElement(
"GEOMETRY").Element();
515 TiXmlElement* field = NULL;
518 field = mesh->FirstChildElement(
"ELEMENT");
520 ASSERTL0(field,
"Unable to find ELEMENT tag in file.");
525 TiXmlElement *element = field->FirstChildElement();
529 std::string elementType(element->ValueStr());
532 ASSERTL0(elementType ==
"A" || elementType ==
"P" || elementType ==
"R" || elementType ==
"H",
533 (std::string(
"Unknown 3D element type: ") + elementType).c_str());
537 element->QueryStringAttribute(
"COMPRESSED",&IsCompressed);
539 if(IsCompressed.size())
541 ASSERTL0(boost::iequals(IsCompressed,
543 "Compressed formats do not match. Expected :"
545 +
" but got " + std::string(IsCompressed));
548 TiXmlNode* child = element->FirstChild();
549 ASSERTL0(child,
"Unable to extract the data from "
550 "the compressed face tag.");
553 if (child->Type() == TiXmlNode::TINYXML_TEXT)
555 str += child->ToText()->ValueStr();
559 if(elementType ==
"A")
561 std::vector<LibUtilities::MeshTet> data;
565 for(
int i = 0; i < data.size(); ++i)
568 for(
int j = 0; j < 4; ++j)
573 boost::static_pointer_cast<
TriGeom>(face);
577 ::AllocateSharedPtr(tfaces));
578 tetgeom->SetGlobalID(indx);
583 else if (elementType ==
"P")
585 std::vector<LibUtilities::MeshPyr> data;
589 for(
int i = 0; i < data.size(); ++i)
594 for(
int j = 0; j < 5; ++j)
600 (face->GetShapeType() !=
602 face->GetShapeType() !=
605 std::stringstream errorstring;
606 errorstring <<
"Element " << indx
607 <<
" has invalid face: " << j;
608 ASSERTL0(
false, errorstring.str().c_str());
610 else if (face->GetShapeType() ==
614 ::static_pointer_cast<
TriGeom>(face);
617 else if (face->GetShapeType() ==
621 ::static_pointer_cast<
QuadGeom>(face);
625 ASSERTL0((Ntfaces == 4) && (Nqfaces = 1),
626 "Did not identify the correct number of "
627 "triangular and quadrilateral faces for a "
631 ::AllocateSharedPtr(faces));
632 pyrgeom->SetGlobalID(indx);
637 else if (elementType ==
"R")
639 std::vector<LibUtilities::MeshPrism> data;
643 for(
int i = 0; i < data.size(); ++i)
648 for(
int j = 0; j < 5; ++j)
653 (face->GetShapeType() !=
655 face->GetShapeType() !=
658 std::stringstream errorstring;
659 errorstring <<
"Element " << indx
660 <<
" has invalid face: " << j;
661 ASSERTL0(
false, errorstring.str().c_str());
663 else if (face->GetShapeType() ==
667 ::static_pointer_cast<
TriGeom>(face);
670 else if (face->GetShapeType() ==
674 ::static_pointer_cast<
QuadGeom>(face);
678 ASSERTL0((Ntfaces == 2) && (Nqfaces = 3),
679 "Did not identify the correct number of "
680 "triangular and quadrilateral faces for a "
685 ::AllocateSharedPtr(faces));
686 prismgeom->SetGlobalID(indx);
691 else if (elementType ==
"H")
693 std::vector<LibUtilities::MeshHex> data;
698 for(
int i = 0; i < data.size(); ++i)
701 for(
int j = 0; j < 6; ++j)
706 ::static_pointer_cast<
QuadGeom>(face);
710 ::AllocateSharedPtr(faces));
711 hexgeom->SetGlobalID(indx);
721 int err = element->QueryIntAttribute(
"ID", &indx);
722 ASSERTL0(err == TIXML_SUCCESS,
"Unable to read element attribute ID.");
725 TiXmlNode* elementChild = element->FirstChild();
726 std::string elementStr;
729 if (elementChild->Type() == TiXmlNode::TINYXML_TEXT)
731 elementStr += elementChild->ToText()->ValueStr();
733 elementChild = elementChild->NextSibling();
736 ASSERTL0(!elementStr.empty(),
"Unable to read element description body.");
738 std::istringstream elementDataStrm(elementStr.c_str());
743 if (elementType ==
"A")
756 std::stringstream errorstring;
757 errorstring <<
"Element " << indx <<
" must have " << kNtfaces <<
" triangle face(s), and " << kNqfaces <<
" quadrilateral face(s).";
758 for (
int i = 0; i < kNfaces; i++)
761 elementDataStrm >> faceID;
766 std::stringstream errorstring;
767 errorstring <<
"Element " << indx <<
" has invalid face: " << faceID;
768 ASSERTL0(
false, errorstring.str().c_str());
772 ASSERTL0(Ntfaces < kNtfaces, errorstring.str().c_str());
773 tfaces[Ntfaces++] = boost::static_pointer_cast<
TriGeom>(face);
777 ASSERTL0(Nqfaces < kNqfaces, errorstring.str().c_str());
782 ASSERTL0(!elementDataStrm.fail(), (std::string(
"Unable to read element data for TETRAHEDRON: ") + elementStr).c_str());
783 ASSERTL0(Ntfaces == kNtfaces, errorstring.str().c_str());
784 ASSERTL0(Nqfaces == kNqfaces, errorstring.str().c_str());
787 tetgeom->SetGlobalID(indx);
795 (std::string(
"Unable to read element data for TETRAHEDRON: ") + elementStr).c_str());
799 else if (elementType ==
"P")
813 std::stringstream errorstring;
814 errorstring <<
"Element " << indx <<
" must have " << kNtfaces <<
" triangle face(s), and " << kNqfaces <<
" quadrilateral face(s).";
815 for (
int i = 0; i < kNfaces; i++)
818 elementDataStrm >> faceID;
823 std::stringstream errorstring;
824 errorstring <<
"Element " << indx <<
" has invalid face: " << faceID;
825 ASSERTL0(
false, errorstring.str().c_str());
829 ASSERTL0(Ntfaces < kNtfaces, errorstring.str().c_str());
830 faces[Nfaces++] = boost::static_pointer_cast<
TriGeom>(face);
835 ASSERTL0(Nqfaces < kNqfaces, errorstring.str().c_str());
836 faces[Nfaces++] = boost::static_pointer_cast<
QuadGeom>(face);
842 ASSERTL0(!elementDataStrm.fail(), (std::string(
"Unable to read element data for PYRAMID: ") + elementStr).c_str());
843 ASSERTL0(Ntfaces == kNtfaces, errorstring.str().c_str());
844 ASSERTL0(Nqfaces == kNqfaces, errorstring.str().c_str());
847 pyrgeom->SetGlobalID(indx);
855 (std::string(
"Unable to read element data for PYRAMID: ") + elementStr).c_str());
859 else if (elementType ==
"R")
873 std::stringstream errorstring;
874 errorstring <<
"Element " << indx <<
" must have "
875 << kNtfaces <<
" triangle face(s), and "
876 << kNqfaces <<
" quadrilateral face(s).";
878 for (
int i = 0; i < kNfaces; i++)
881 elementDataStrm >> faceID;
886 std::stringstream errorstring;
887 errorstring <<
"Element " << indx <<
" has invalid face: " << faceID;
888 ASSERTL0(
false, errorstring.str().c_str());
892 ASSERTL0(Ntfaces < kNtfaces, errorstring.str().c_str());
893 faces[Nfaces++] = boost::static_pointer_cast<
TriGeom>(face);
898 ASSERTL0(Nqfaces < kNqfaces, errorstring.str().c_str());
899 faces[Nfaces++] = boost::static_pointer_cast<
QuadGeom>(face);
905 ASSERTL0(!elementDataStrm.fail(), (std::string(
"Unable to read element data for PRISM: ") + elementStr).c_str());
906 ASSERTL0(Ntfaces == kNtfaces, errorstring.str().c_str());
907 ASSERTL0(Nqfaces == kNqfaces, errorstring.str().c_str());
910 prismgeom->SetGlobalID(indx);
918 (std::string(
"Unable to read element data for PRISM: ") + elementStr).c_str());
922 else if (elementType ==
"H")
936 std::stringstream errorstring;
937 errorstring <<
"Element " << indx <<
" must have " << kNtfaces <<
" triangle face(s), and " << kNqfaces <<
" quadrilateral face(s).";
938 for (
int i = 0; i < kNfaces; i++)
941 elementDataStrm >> faceID;
946 std::stringstream errorstring;
947 errorstring <<
"Element " << indx <<
" has invalid face: " << faceID;
948 ASSERTL0(
false, errorstring.str().c_str());
952 ASSERTL0(Ntfaces < kNtfaces, errorstring.str().c_str());
957 ASSERTL0(Nqfaces < kNqfaces, errorstring.str().c_str());
958 qfaces[Nqfaces++] = boost::static_pointer_cast<
QuadGeom>(face);
963 ASSERTL0(!elementDataStrm.fail(), (std::string(
"Unable to read element data for HEXAHEDRAL: ") + elementStr).c_str());
964 ASSERTL0(Ntfaces == kNtfaces, errorstring.str().c_str());
965 ASSERTL0(Nqfaces == kNqfaces, errorstring.str().c_str());
968 hexgeom->SetGlobalID(indx);
976 (std::string(
"Unable to read element data for HEXAHEDRAL: ") + elementStr).c_str());
981 element = element->NextSiblingElement();
987 TiXmlHandle docHandle(&doc);
990 TiXmlElement* mesh = docHandle.FirstChildElement(
"NEKTAR").FirstChildElement(
"GEOMETRY").Element();
991 TiXmlElement* field = NULL;
993 ASSERTL0(mesh,
"Unable to find GEOMETRY tag in file.");
996 field = mesh->FirstChildElement(
"COMPOSITE");
998 ASSERTL0(field,
"Unable to find COMPOSITE tag in file.");
1000 int nextCompositeNumber = -1;
1005 TiXmlElement *composite = field->FirstChildElement(
"C");
1009 nextCompositeNumber++;
1012 int err = composite->QueryIntAttribute(
"ID", &indx);
1013 ASSERTL0(err == TIXML_SUCCESS,
"Unable to read attribute ID.");
1017 err = composite->QueryStringAttribute(
"LABEL", &labelstr);
1018 if(err == TIXML_SUCCESS)
1023 TiXmlNode* compositeChild = composite->FirstChild();
1028 while(compositeChild && compositeChild->Type() != TiXmlNode::TINYXML_TEXT)
1030 compositeChild = compositeChild->NextSibling();
1033 ASSERTL0(compositeChild,
"Unable to read composite definition body.");
1034 std::string compositeStr = compositeChild->ToText()->ValueStr();
1038 std::istringstream compositeDataStrm(compositeStr.c_str());
1043 std::string prevCompositeElementStr;
1045 while (!compositeDataStrm.fail())
1047 std::string compositeElementStr;
1048 compositeDataStrm >> compositeElementStr;
1050 if (!compositeDataStrm.fail())
1060 if (compositeElementStr.length() > 0)
1064 prevCompositeElementStr = compositeElementStr;
1071 (std::string(
"Unable to read COMPOSITE data for composite: ") + compositeStr).c_str());
1075 composite = composite->NextSiblingElement(
"C");
1085 + boost::lexical_cast<
string>(eID) +
" not found.");
1116 std::istringstream tokenStream(token);
1117 std::istringstream prevTokenStream(prevToken);
1122 tokenStream >> type;
1124 std::string::size_type indxBeg = token.find_first_of(
'[') + 1;
1125 std::string::size_type indxEnd = token.find_last_of(
']') - 1;
1127 ASSERTL0(indxBeg <= indxEnd, (std::string(
"Error reading index definition:") + token).c_str());
1129 std::string indxStr = token.substr(indxBeg, indxEnd - indxBeg + 1);
1131 std::vector<unsigned int> seqVector;
1136 ASSERTL0(err, (std::string(
"Error reading composite elements: ") + indxStr).c_str());
1138 prevTokenStream >> prevType;
1141 map<char, int> typeMap;
1152 bool validSequence = (prevToken.empty() || (typeMap[type] == typeMap[prevType]));
1154 ASSERTL0(validSequence, (std::string(
"Invalid combination of composite items: ")
1155 + type +
" and " + prevType +
".").c_str());
1160 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1164 char errStr[16] =
"";
1165 ::sprintf(errStr,
"%d", *seqIter);
1170 composite->push_back(
m_vertSet[*seqIter]);
1176 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1180 char errStr[16] =
"";
1181 ::sprintf(errStr,
"%d", *seqIter);
1192 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1197 char errStr[16] =
"";
1198 ::sprintf(errStr,
"%d", *seqIter);
1205 composite->push_back(face);
1212 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1216 char errStr[16] =
"";
1217 ::sprintf(errStr,
"%d", *seqIter);
1231 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1235 char errStr[16] =
"";
1236 ::sprintf(errStr,
"%d", *seqIter);
1251 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1255 char errStr[16] =
"";
1256 ::sprintf(errStr,
"%d", *seqIter);
1271 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1275 char errStr[16] =
"";
1276 ::sprintf(errStr,
"%d", *seqIter);
1291 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1295 char errStr[16] =
"";
1296 ::sprintf(errStr,
"%d", *seqIter);
1311 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1315 char errStr[16] =
"";
1316 ::sprintf(errStr,
"%d", *seqIter);
1359 const std::string variable)
1365 ASSERTL0(elements->size() > 0,
"No elements for the given face."
1366 " Check all elements belong to the domain composite.");
1378 ASSERTL0(expansion,
"Could not find expansion connected to face "+
1379 boost::lexical_cast<string>(face->GetGlobalID()));
1384 expansion->m_geomShPtr);
1389 int dir = geom3d->
GetDir((*elements)[0]->m_FaceIndx, facedir);
1391 if(face->GetNumVerts() == 3)
1394 expansion->m_basisKeyVector[dir].GetBasisType(),
1395 expansion->m_basisKeyVector[dir].GetNumPoints(),
1396 expansion->m_basisKeyVector[dir].GetNumModes());
1401 expansion->m_basisKeyVector[dir].GetBasisType(),
1402 expansion->m_basisKeyVector[dir].GetNumPoints(),
1403 expansion->m_basisKeyVector[dir].GetNumModes());
1423 for (
int i = 0; i < kNfaces; ++i)
1425 int faceId = element->GetFace(i)->GetGlobalID();
1429 elementFace->m_Element = element;
1430 elementFace->m_FaceIndx = i;
1440 tmp->push_back(elementFace);
1446 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
std::map< int, std::string > m_compositesLabels
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
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