46 namespace SpatialDomains
66 TiXmlDocument doc(infilename);
67 bool loadOkay = doc.LoadFile();
69 std::stringstream errstr;
70 errstr <<
"Unable to load file: " << infilename <<
"\n";
71 errstr << doc.ErrorDesc() <<
" (Line " << doc.ErrorRow()
72 <<
", Column " << doc.ErrorCol() <<
")";
83 TiXmlHandle docHandle(&doc);
85 TiXmlElement* mesh = NULL;
88 mesh = docHandle.FirstChildElement(
"NEKTAR").FirstChildElement(
"GEOMETRY").Element();
90 ASSERTL0(mesh,
"Unable to find GEOMETRY tag in file.");
103 TiXmlHandle docHandle(&doc);
104 TiXmlElement* mesh = docHandle.FirstChildElement(
"NEKTAR").FirstChildElement(
"GEOMETRY").Element();
105 TiXmlElement* field = NULL;
110 field = mesh->FirstChildElement(
"EDGE");
112 ASSERTL0(field,
"Unable to find EDGE tag in file.");
115 field->QueryStringAttribute(
"COMPRESSED",&IsCompressed);
117 if(IsCompressed.size())
119 ASSERTL0(boost::iequals(IsCompressed,
121 "Compressed formats do not match. Expected :"
123 +
" but got " + std::string(IsCompressed));
125 TiXmlNode* edgeChild = field->FirstChild();
126 ASSERTL0(edgeChild,
"Unable to extract the data from "
127 "the compressed edge tag.");
130 if (edgeChild->Type() == TiXmlNode::TINYXML_TEXT)
132 edgeStr += edgeChild->ToText()->ValueStr();
135 std::vector<LibUtilities::MeshEdge> edgeData;
140 for(
int i = 0; i < edgeData.size(); ++i)
142 indx = edgeData[i].id;
170 TiXmlElement *edge = field->FirstChildElement(
"E");
182 int err = edge->QueryIntAttribute(
"ID",&indx);
183 ASSERTL0(err == TIXML_SUCCESS,
"Unable to read edge attribute ID.");
185 TiXmlNode *child = edge->FirstChild();
187 if (child->Type() == TiXmlNode::TINYXML_TEXT)
189 edgeStr += child->ToText()->ValueStr();
193 int vertex1, vertex2;
194 std::istringstream edgeDataStrm(edgeStr.c_str());
198 while (!edgeDataStrm.fail())
200 edgeDataStrm >> vertex1 >> vertex2;
207 if (!edgeDataStrm.fail())
231 edge = edge->NextSiblingElement(
"E");
239 TiXmlHandle docHandle(&doc);
240 TiXmlElement* mesh = docHandle.FirstChildElement(
"NEKTAR").FirstChildElement(
"GEOMETRY").Element();
241 TiXmlElement* field = NULL;
244 field = mesh->FirstChildElement(
"FACE");
246 ASSERTL0(field,
"Unable to find FACE tag in file.");
252 TiXmlElement *element = field->FirstChildElement();
257 std::string elementType(element->ValueStr());
259 ASSERTL0(elementType ==
"Q" || elementType ==
"T",
260 (std::string(
"Unknown 3D face type: ") + elementType).c_str());
264 element->QueryStringAttribute(
"COMPRESSED",&IsCompressed);
266 if(IsCompressed.size())
268 ASSERTL0(boost::iequals(IsCompressed,
270 "Compressed formats do not match. Expected :"
272 +
" but got "+ std::string(IsCompressed));
275 TiXmlNode* faceChild = element->FirstChild();
276 ASSERTL0(faceChild,
"Unable to extract the data from "
277 "the compressed face tag.");
280 if (faceChild->Type() == TiXmlNode::TINYXML_TEXT)
282 faceStr += faceChild->ToText()->ValueStr();
286 if(elementType ==
"T")
288 std::vector<LibUtilities::MeshTri> faceData;
292 for(
int i = 0; i < faceData.size(); ++i)
294 indx = faceData[i].id;
319 indx, edges, edgeorient);
325 indx, edges, edgeorient,
328 trigeom->SetGlobalID(indx);
332 else if (elementType ==
"Q")
334 std::vector<LibUtilities::MeshQuad> faceData;
338 for(
int i = 0; i < faceData.size(); ++i)
340 indx = faceData[i].id;
366 indx, edges, edgeorient);
372 indx, edges, edgeorient,
375 quadgeom->SetGlobalID(indx);
384 int err = element->QueryIntAttribute(
"ID", &indx);
385 ASSERTL0(err == TIXML_SUCCESS,
"Unable to read face attribute ID.");
391 TiXmlNode* elementChild = element->FirstChild();
392 std::string elementStr;
395 if (elementChild->Type() == TiXmlNode::TINYXML_TEXT)
397 elementStr += elementChild->ToText()->ValueStr();
399 elementChild = elementChild->NextSibling();
402 ASSERTL0(!elementStr.empty(),
"Unable to read face description body.");
405 if (elementType ==
"T")
408 int edge1, edge2, edge3;
409 std::istringstream elementDataStrm(elementStr.c_str());
413 elementDataStrm >> edge1;
414 elementDataStrm >> edge2;
415 elementDataStrm >> edge3;
417 ASSERTL0(!elementDataStrm.fail(), (std::string(
"Unable to read face data for TRIANGLE: ") + elementStr).c_str());
445 trigeom->SetGlobalID(indx);
452 (std::string(
"Unable to read face data for TRIANGLE: ") + elementStr).c_str());
455 else if (elementType ==
"Q")
458 int edge1, edge2, edge3, edge4;
459 std::istringstream elementDataStrm(elementStr.c_str());
463 elementDataStrm >> edge1;
464 elementDataStrm >> edge2;
465 elementDataStrm >> edge3;
466 elementDataStrm >> edge4;
468 ASSERTL0(!elementDataStrm.fail(), (std::string(
"Unable to read face data for QUAD: ") + elementStr).c_str());
493 quadgeom->SetGlobalID(indx);
505 element = element->NextSiblingElement();
512 TiXmlHandle docHandle(&doc);
513 TiXmlElement* mesh = docHandle.FirstChildElement(
"NEKTAR").FirstChildElement(
"GEOMETRY").Element();
514 TiXmlElement* field = NULL;
517 field = mesh->FirstChildElement(
"ELEMENT");
519 ASSERTL0(field,
"Unable to find ELEMENT tag in file.");
524 TiXmlElement *element = field->FirstChildElement();
528 std::string elementType(element->ValueStr());
531 ASSERTL0(elementType ==
"A" || elementType ==
"P" || elementType ==
"R" || elementType ==
"H",
532 (std::string(
"Unknown 3D element type: ") + elementType).c_str());
536 element->QueryStringAttribute(
"COMPRESSED",&IsCompressed);
538 if(IsCompressed.size())
540 ASSERTL0(boost::iequals(IsCompressed,
542 "Compressed formats do not match. Expected :"
544 +
" but got " + std::string(IsCompressed));
547 TiXmlNode* child = element->FirstChild();
548 ASSERTL0(child,
"Unable to extract the data from "
549 "the compressed face tag.");
552 if (child->Type() == TiXmlNode::TINYXML_TEXT)
554 str += child->ToText()->ValueStr();
558 if(elementType ==
"A")
560 std::vector<LibUtilities::MeshTet> data;
564 for(
int i = 0; i < data.size(); ++i)
567 for(
int j = 0; j < 4; ++j)
572 boost::static_pointer_cast<
TriGeom>(face);
576 ::AllocateSharedPtr(tfaces));
577 tetgeom->SetGlobalID(indx);
582 else if (elementType ==
"P")
584 std::vector<LibUtilities::MeshPyr> data;
588 for(
int i = 0; i < data.size(); ++i)
593 for(
int j = 0; j < 5; ++j)
599 (face->GetShapeType() !=
601 face->GetShapeType() !=
604 std::stringstream errorstring;
605 errorstring <<
"Element " << indx
606 <<
" has invalid face: " << j;
607 ASSERTL0(
false, errorstring.str().c_str());
609 else if (face->GetShapeType() ==
613 ::static_pointer_cast<
TriGeom>(face);
616 else if (face->GetShapeType() ==
620 ::static_pointer_cast<
QuadGeom>(face);
624 ASSERTL0((Ntfaces == 4) && (Nqfaces = 1),
625 "Did not identify the correct number of "
626 "triangular and quadrilateral faces for a "
630 ::AllocateSharedPtr(faces));
631 pyrgeom->SetGlobalID(indx);
636 else if (elementType ==
"R")
638 std::vector<LibUtilities::MeshPrism> data;
642 for(
int i = 0; i < data.size(); ++i)
647 for(
int j = 0; j < 5; ++j)
652 (face->GetShapeType() !=
654 face->GetShapeType() !=
657 std::stringstream errorstring;
658 errorstring <<
"Element " << indx
659 <<
" has invalid face: " << j;
660 ASSERTL0(
false, errorstring.str().c_str());
662 else if (face->GetShapeType() ==
666 ::static_pointer_cast<
TriGeom>(face);
669 else if (face->GetShapeType() ==
673 ::static_pointer_cast<
QuadGeom>(face);
677 ASSERTL0((Ntfaces == 2) && (Nqfaces = 3),
678 "Did not identify the correct number of "
679 "triangular and quadrilateral faces for a "
684 ::AllocateSharedPtr(faces));
685 prismgeom->SetGlobalID(indx);
690 else if (elementType ==
"H")
692 std::vector<LibUtilities::MeshHex> data;
697 for(
int i = 0; i < data.size(); ++i)
700 for(
int j = 0; j < 6; ++j)
705 ::static_pointer_cast<
QuadGeom>(face);
709 ::AllocateSharedPtr(faces));
710 hexgeom->SetGlobalID(indx);
720 int err = element->QueryIntAttribute(
"ID", &indx);
721 ASSERTL0(err == TIXML_SUCCESS,
"Unable to read element attribute ID.");
724 TiXmlNode* elementChild = element->FirstChild();
725 std::string elementStr;
728 if (elementChild->Type() == TiXmlNode::TINYXML_TEXT)
730 elementStr += elementChild->ToText()->ValueStr();
732 elementChild = elementChild->NextSibling();
735 ASSERTL0(!elementStr.empty(),
"Unable to read element description body.");
737 std::istringstream elementDataStrm(elementStr.c_str());
742 if (elementType ==
"A")
755 std::stringstream errorstring;
756 errorstring <<
"Element " << indx <<
" must have " << kNtfaces <<
" triangle face(s), and " << kNqfaces <<
" quadrilateral face(s).";
757 for (
int i = 0; i < kNfaces; i++)
760 elementDataStrm >> faceID;
765 std::stringstream errorstring;
766 errorstring <<
"Element " << indx <<
" has invalid face: " << faceID;
767 ASSERTL0(
false, errorstring.str().c_str());
771 ASSERTL0(Ntfaces < kNtfaces, errorstring.str().c_str());
772 tfaces[Ntfaces++] = boost::static_pointer_cast<
TriGeom>(face);
776 ASSERTL0(Nqfaces < kNqfaces, errorstring.str().c_str());
781 ASSERTL0(!elementDataStrm.fail(), (std::string(
"Unable to read element data for TETRAHEDRON: ") + elementStr).c_str());
782 ASSERTL0(Ntfaces == kNtfaces, errorstring.str().c_str());
783 ASSERTL0(Nqfaces == kNqfaces, errorstring.str().c_str());
786 tetgeom->SetGlobalID(indx);
794 (std::string(
"Unable to read element data for TETRAHEDRON: ") + elementStr).c_str());
798 else if (elementType ==
"P")
812 std::stringstream errorstring;
813 errorstring <<
"Element " << indx <<
" must have " << kNtfaces <<
" triangle face(s), and " << kNqfaces <<
" quadrilateral face(s).";
814 for (
int i = 0; i < kNfaces; i++)
817 elementDataStrm >> faceID;
822 std::stringstream errorstring;
823 errorstring <<
"Element " << indx <<
" has invalid face: " << faceID;
824 ASSERTL0(
false, errorstring.str().c_str());
828 ASSERTL0(Ntfaces < kNtfaces, errorstring.str().c_str());
829 faces[Nfaces++] = boost::static_pointer_cast<
TriGeom>(face);
834 ASSERTL0(Nqfaces < kNqfaces, errorstring.str().c_str());
835 faces[Nfaces++] = boost::static_pointer_cast<
QuadGeom>(face);
841 ASSERTL0(!elementDataStrm.fail(), (std::string(
"Unable to read element data for PYRAMID: ") + elementStr).c_str());
842 ASSERTL0(Ntfaces == kNtfaces, errorstring.str().c_str());
843 ASSERTL0(Nqfaces == kNqfaces, errorstring.str().c_str());
846 pyrgeom->SetGlobalID(indx);
854 (std::string(
"Unable to read element data for PYRAMID: ") + elementStr).c_str());
858 else if (elementType ==
"R")
872 std::stringstream errorstring;
873 errorstring <<
"Element " << indx <<
" must have "
874 << kNtfaces <<
" triangle face(s), and "
875 << kNqfaces <<
" quadrilateral face(s).";
877 for (
int i = 0; i < kNfaces; i++)
880 elementDataStrm >> faceID;
885 std::stringstream errorstring;
886 errorstring <<
"Element " << indx <<
" has invalid face: " << faceID;
887 ASSERTL0(
false, errorstring.str().c_str());
891 ASSERTL0(Ntfaces < kNtfaces, errorstring.str().c_str());
892 faces[Nfaces++] = boost::static_pointer_cast<
TriGeom>(face);
897 ASSERTL0(Nqfaces < kNqfaces, errorstring.str().c_str());
898 faces[Nfaces++] = boost::static_pointer_cast<
QuadGeom>(face);
904 ASSERTL0(!elementDataStrm.fail(), (std::string(
"Unable to read element data for PRISM: ") + elementStr).c_str());
905 ASSERTL0(Ntfaces == kNtfaces, errorstring.str().c_str());
906 ASSERTL0(Nqfaces == kNqfaces, errorstring.str().c_str());
909 prismgeom->SetGlobalID(indx);
917 (std::string(
"Unable to read element data for PRISM: ") + elementStr).c_str());
921 else if (elementType ==
"H")
935 std::stringstream errorstring;
936 errorstring <<
"Element " << indx <<
" must have " << kNtfaces <<
" triangle face(s), and " << kNqfaces <<
" quadrilateral face(s).";
937 for (
int i = 0; i < kNfaces; i++)
940 elementDataStrm >> faceID;
945 std::stringstream errorstring;
946 errorstring <<
"Element " << indx <<
" has invalid face: " << faceID;
947 ASSERTL0(
false, errorstring.str().c_str());
951 ASSERTL0(Ntfaces < kNtfaces, errorstring.str().c_str());
956 ASSERTL0(Nqfaces < kNqfaces, errorstring.str().c_str());
957 qfaces[Nqfaces++] = boost::static_pointer_cast<
QuadGeom>(face);
962 ASSERTL0(!elementDataStrm.fail(), (std::string(
"Unable to read element data for HEXAHEDRAL: ") + elementStr).c_str());
963 ASSERTL0(Ntfaces == kNtfaces, errorstring.str().c_str());
964 ASSERTL0(Nqfaces == kNqfaces, errorstring.str().c_str());
967 hexgeom->SetGlobalID(indx);
975 (std::string(
"Unable to read element data for HEXAHEDRAL: ") + elementStr).c_str());
980 element = element->NextSiblingElement();
986 TiXmlHandle docHandle(&doc);
989 TiXmlElement* mesh = docHandle.FirstChildElement(
"NEKTAR").FirstChildElement(
"GEOMETRY").Element();
990 TiXmlElement* field = NULL;
992 ASSERTL0(mesh,
"Unable to find GEOMETRY tag in file.");
995 field = mesh->FirstChildElement(
"COMPOSITE");
997 ASSERTL0(field,
"Unable to find COMPOSITE tag in file.");
999 int nextCompositeNumber = -1;
1004 TiXmlElement *composite = field->FirstChildElement(
"C");
1008 nextCompositeNumber++;
1011 int err = composite->QueryIntAttribute(
"ID", &indx);
1012 ASSERTL0(err == TIXML_SUCCESS,
"Unable to read attribute ID.");
1016 err = composite->QueryStringAttribute(
"LABEL", &labelstr);
1017 if(err == TIXML_SUCCESS)
1022 TiXmlNode* compositeChild = composite->FirstChild();
1027 while(compositeChild && compositeChild->Type() != TiXmlNode::TINYXML_TEXT)
1029 compositeChild = compositeChild->NextSibling();
1032 ASSERTL0(compositeChild,
"Unable to read composite definition body.");
1033 std::string compositeStr = compositeChild->ToText()->ValueStr();
1037 std::istringstream compositeDataStrm(compositeStr.c_str());
1042 std::string prevCompositeElementStr;
1044 while (!compositeDataStrm.fail())
1046 std::string compositeElementStr;
1047 compositeDataStrm >> compositeElementStr;
1049 if (!compositeDataStrm.fail())
1059 if (compositeElementStr.length() > 0)
1063 prevCompositeElementStr = compositeElementStr;
1070 (std::string(
"Unable to read COMPOSITE data for composite: ") + compositeStr).c_str());
1074 composite = composite->NextSiblingElement(
"C");
1084 + boost::lexical_cast<
string>(eID) +
" not found.");
1115 std::istringstream tokenStream(token);
1116 std::istringstream prevTokenStream(prevToken);
1121 tokenStream >> type;
1123 std::string::size_type indxBeg = token.find_first_of(
'[') + 1;
1124 std::string::size_type indxEnd = token.find_last_of(
']') - 1;
1126 ASSERTL0(indxBeg <= indxEnd, (std::string(
"Error reading index definition:") + token).c_str());
1128 std::string indxStr = token.substr(indxBeg, indxEnd - indxBeg + 1);
1130 std::vector<unsigned int> seqVector;
1135 ASSERTL0(err, (std::string(
"Error reading composite elements: ") + indxStr).c_str());
1137 prevTokenStream >> prevType;
1140 map<char, int> typeMap;
1151 bool validSequence = (prevToken.empty() || (typeMap[type] == typeMap[prevType]));
1153 ASSERTL0(validSequence, (std::string(
"Invalid combination of composite items: ")
1154 + type +
" and " + prevType +
".").c_str());
1159 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1163 char errStr[16] =
"";
1164 ::sprintf(errStr,
"%d", *seqIter);
1169 composite->push_back(
m_vertSet[*seqIter]);
1175 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1179 char errStr[16] =
"";
1180 ::sprintf(errStr,
"%d", *seqIter);
1191 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1196 char errStr[16] =
"";
1197 ::sprintf(errStr,
"%d", *seqIter);
1204 composite->push_back(face);
1211 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1215 char errStr[16] =
"";
1216 ::sprintf(errStr,
"%d", *seqIter);
1230 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1234 char errStr[16] =
"";
1235 ::sprintf(errStr,
"%d", *seqIter);
1250 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1254 char errStr[16] =
"";
1255 ::sprintf(errStr,
"%d", *seqIter);
1270 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1274 char errStr[16] =
"";
1275 ::sprintf(errStr,
"%d", *seqIter);
1290 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1294 char errStr[16] =
"";
1295 ::sprintf(errStr,
"%d", *seqIter);
1310 for (seqIter = seqVector.begin(); seqIter != seqVector.end(); ++seqIter)
1314 char errStr[16] =
"";
1315 ::sprintf(errStr,
"%d", *seqIter);
1358 const std::string variable)
1364 ASSERTL0(elements->size() > 0,
"No elements for the given face."
1365 " Check all elements belong to the domain composite.");
1377 ASSERTL0(expansion,
"Could not find expansion connected to face "+
1378 boost::lexical_cast<string>(face->GetGlobalID()));
1383 expansion->m_geomShPtr);
1388 int dir = geom3d->
GetDir((*elements)[0]->m_FaceIndx, facedir);
1390 if(face->GetNumVerts() == 3)
1393 expansion->m_basisKeyVector[dir].GetBasisType(),
1394 expansion->m_basisKeyVector[dir].GetNumPoints(),
1395 expansion->m_basisKeyVector[dir].GetNumModes());
1400 expansion->m_basisKeyVector[dir].GetBasisType(),
1401 expansion->m_basisKeyVector[dir].GetNumPoints(),
1402 expansion->m_basisKeyVector[dir].GetNumModes());
1422 for (
int i = 0; i < kNfaces; ++i)
1424 int faceId = element->GetFace(i)->GetGlobalID();
1428 elementFace->m_Element = element;
1429 elementFace->m_FaceIndx = i;
1439 tmp->push_back(elementFace);
1445 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