60 #include <boost/archive/iterators/base64_from_binary.hpp>
61 #include <boost/archive/iterators/binary_from_base64.hpp>
62 #include <boost/archive/iterators/transform_width.hpp>
63 #include <boost/iostreams/copy.hpp>
64 #include <boost/iostreams/filter/zlib.hpp>
65 #include <boost/iostreams/filtering_stream.hpp>
69 namespace SpatialDomains
86 unsigned int meshDimension,
87 unsigned int spaceDimension) :
88 m_meshDimension(meshDimension),
89 m_spaceDimension(spaceDimension),
123 boost::shared_ptr<MeshGraph> returnval;
127 TiXmlElement* geometry_tag = pSession->GetElement(
"NEKTAR/GEOMETRY");
128 TiXmlAttribute *attr = geometry_tag->FirstAttribute();
132 std::string attrName(attr->Name());
133 if (attrName ==
"DIM")
135 int err = attr->QueryIntValue(&meshDim);
136 ASSERTL0(err==TIXML_SUCCESS,
"Unable to read mesh dimension.");
141 std::string errstr(
"Unknown attribute: ");
167 std::string err =
"Invalid mesh dimension: ";
168 std::stringstream strstrm;
170 err += strstrm.str();
181 const std::string& infilename,
182 bool pReadExpansions)
184 boost::shared_ptr<MeshGraph> returnval;
206 std::string err =
"Invalid mesh dimension: ";
207 std::stringstream strstrm;
209 err += strstrm.str();
215 returnval->ReadGeometry(infilename);
216 returnval->ReadGeometryInfo(infilename);
219 returnval->ReadExpansions(infilename);
232 TiXmlDocument doc(infilename);
233 bool loadOkay = doc.LoadFile();
235 std::stringstream errstr;
236 errstr <<
"Unable to load file: " << infilename <<
" (";
237 errstr << doc.ErrorDesc() <<
", line " << doc.ErrorRow()
238 <<
", column " << doc.ErrorCol() <<
")";
250 TiXmlHandle docHandle(&doc);
251 TiXmlElement* mesh = NULL;
252 TiXmlElement* master = NULL;
256 master = doc.FirstChildElement(
"NEKTAR");
257 ASSERTL0(master,
"Unable to find NEKTAR tag in file.");
260 mesh = master->FirstChildElement(
"GEOMETRY");
262 ASSERTL0(mesh,
"Unable to find GEOMETRY tag in file.");
263 TiXmlAttribute *attr = mesh->FirstAttribute();
274 std::string attrName(attr->Name());
275 if (attrName ==
"DIM")
278 ASSERTL1(err==TIXML_SUCCESS,
"Unable to read mesh dimension.");
280 else if (attrName ==
"SPACE")
283 ASSERTL1(err==TIXML_SUCCESS,
"Unable to read space dimension.");
285 else if (attrName ==
"PARTITION")
288 ASSERTL1(err==TIXML_SUCCESS,
"Unable to read partition.");
293 std::string errstr(
"Unknown attribute: ");
305 TiXmlElement* element = mesh->FirstChildElement(
"VERTEX");
306 ASSERTL0(element,
"Unable to find mesh VERTEX tag in file.");
314 const char *xscal = element->Attribute(
"XSCALE");
321 std::string xscalstr = xscal;
323 xscale = expEvaluator.
Evaluate(expr_id);
326 const char *yscal = element->Attribute(
"YSCALE");
333 std::string yscalstr = yscal;
335 yscale = expEvaluator.
Evaluate(expr_id);
338 const char *zscal = element->Attribute(
"ZSCALE");
345 std::string zscalstr = zscal;
347 zscale = expEvaluator.
Evaluate(expr_id);
357 const char *xmov = element->Attribute(
"XMOVE");
364 std::string xmovstr = xmov;
366 xmove = expEvaluator.
Evaluate(expr_id);
369 const char *ymov = element->Attribute(
"YMOVE");
376 std::string ymovstr = ymov;
378 ymove = expEvaluator.
Evaluate(expr_id);
381 const char *zmov = element->Attribute(
"ZMOVE");
388 std::string zmovstr = zmov;
390 zmove = expEvaluator.
Evaluate(expr_id);
393 TiXmlElement *vertex = element->FirstChildElement(
"V");
396 int nextVertexNumber = -1;
402 TiXmlAttribute *vertexAttr = vertex->FirstAttribute();
403 std::string attrName(vertexAttr->Name());
405 ASSERTL0(attrName ==
"ID", (std::string(
"Unknown attribute name: ") + attrName).c_str());
407 err = vertexAttr->QueryIntValue(&indx);
408 ASSERTL0(err == TIXML_SUCCESS,
"Unable to read attribute ID.");
411 std::string vertexBodyStr;
413 TiXmlNode *vertexBody = vertex->FirstChild();
418 if (vertexBody->Type() == TiXmlNode::TINYXML_TEXT)
420 vertexBodyStr += vertexBody->ToText()->Value();
421 vertexBodyStr +=
" ";
424 vertexBody = vertexBody->NextSibling();
427 ASSERTL0(!vertexBodyStr.empty(),
"Vertex definitions must contain vertex data.");
431 std::istringstream vertexDataStrm(vertexBodyStr.c_str());
435 while(!vertexDataStrm.fail())
437 vertexDataStrm >> xval >> yval >> zval;
439 xval = xval*xscale + xmove;
440 yval = yval*yscale + ymove;
441 zval = zval*zscale + zmove;
446 if (!vertexDataStrm.fail())
449 vert->SetGlobalID(indx);
456 ASSERTL0(
false,
"Unable to read VERTEX data.");
459 vertex = vertex->NextSiblingElement(
"V");
472 TiXmlDocument doc(infilename);
473 bool loadOkay = doc.LoadFile();
475 std::stringstream errstr;
476 errstr <<
"Unable to load file: " << infilename << std::endl;
477 errstr <<
"Reason: " << doc.ErrorDesc() << std::endl;
478 errstr <<
"Position: Line " << doc.ErrorRow() <<
", Column " << doc.ErrorCol() << std::endl;
493 TiXmlElement *master = doc.FirstChildElement(
"NEKTAR");
494 ASSERTL0(master,
"Unable to find NEKTAR tag in file.");
497 TiXmlElement *geomTag = master->FirstChildElement(
"GEOMETRY");
498 ASSERTL0(geomTag,
"Unable to find GEOMETRY tag in file.");
501 TiXmlElement *geomInfoTag = geomTag->FirstChildElement(
"GEOMINFO");
502 if (!geomInfoTag)
return;
504 TiXmlElement *infoItem = geomInfoTag->FirstChildElement(
"I");
510 std::string geomProperty = infoItem->Attribute(
"PROPERTY");
511 std::string geomValue = infoItem->Attribute(
"VALUE");
515 "Property " + geomProperty +
" already specified.");
517 infoItem = infoItem->NextSiblingElement(
"I");
527 TiXmlDocument doc(infilename);
528 bool loadOkay = doc.LoadFile();
530 std::stringstream errstr;
531 errstr <<
"Unable to load file: " << infilename << std::endl;
532 errstr <<
"Reason: " << doc.ErrorDesc() << std::endl;
533 errstr <<
"Position: Line " << doc.ErrorRow() <<
", Column " << doc.ErrorCol() << std::endl;
545 TiXmlElement *master = doc.FirstChildElement(
"NEKTAR");
546 ASSERTL0(master,
"Unable to find NEKTAR tag in file.");
549 TiXmlElement *expansionTypes = master->FirstChildElement(
"EXPANSIONS");
550 ASSERTL0(expansionTypes,
"Unable to find EXPANSIONS tag in file.");
555 TiXmlElement *expansion = expansionTypes->FirstChildElement();
556 std::string expType = expansion->Value();
576 const char *fStr = expansion->Attribute(
"FIELDS");
577 std::vector<std::string> fieldStrings;
581 std::string fieldStr = fStr;
583 ASSERTL0(valid,
"Unable to correctly parse the field string in ExpansionTypes.");
597 for(i = 0; i < fieldStrings.size(); ++i)
605 if(fieldStrings.size())
617 for(i = 0; i < fieldStrings.size(); ++i)
625 ASSERTL0(
false,
"Expansion vector for this field is already setup");
638 std::string compositeStr = expansion->Attribute(
"COMPOSITE");
639 ASSERTL0(compositeStr.length() > 3,
"COMPOSITE must be specified in expansion definition");
640 int beg = compositeStr.find_first_of(
"[");
641 int end = compositeStr.find_first_of(
"]");
642 std::string compositeListStr = compositeStr.substr(beg+1,end-beg-1);
647 bool useExpansionType =
false;
652 const char * tStr = expansion->Attribute(
"TYPE");
656 std::string typeStr = tStr;
659 const std::string* expStr =
std::find(begStr, endStr, typeStr);
661 ASSERTL0(expStr != endStr,
"Invalid expansion type.");
672 const char *nStr = expansion->Attribute(
"NUMMODES");
673 ASSERTL0(nStr,
"NUMMODES was not defined in EXPANSION section of input");
674 std::string nummodesStr = nStr;
680 num_modes = (int) nummodesEqn.
Evaluate();
684 num_modes = boost::lexical_cast<
int>(nummodesStr);
687 useExpansionType =
true;
692 const char *bTypeStr = expansion->Attribute(
"BASISTYPE");
693 ASSERTL0(bTypeStr,
"TYPE or BASISTYPE was not defined in EXPANSION section of input");
694 std::string basisTypeStr = bTypeStr;
697 std::vector<std::string> basisStrings;
698 std::vector<LibUtilities::BasisType> basis;
700 ASSERTL0(valid,
"Unable to correctly parse the basis types.");
701 for (vector<std::string>::size_type i = 0; i < basisStrings.size(); i++)
713 ASSERTL0(valid, std::string(
"Unable to correctly parse the basis type: ").append(basisStrings[i]).c_str());
715 const char *nModesStr = expansion->Attribute(
"NUMMODES");
716 ASSERTL0(nModesStr,
"NUMMODES was not defined in EXPANSION section of input");
718 std::string numModesStr = nModesStr;
719 std::vector<unsigned int> numModes;
721 ASSERTL0(valid,
"Unable to correctly parse the number of modes.");
722 ASSERTL0(numModes.size() == basis.size(),
"information for num modes does not match the number of basis");
724 const char *pTypeStr = expansion->Attribute(
"POINTSTYPE");
725 ASSERTL0(pTypeStr,
"POINTSTYPE was not defined in EXPANSION section of input");
726 std::string pointsTypeStr = pTypeStr;
728 std::vector<std::string> pointsStrings;
729 std::vector<LibUtilities::PointsType> points;
731 ASSERTL0(valid,
"Unable to correctly parse the points types.");
732 for (vector<std::string>::size_type i = 0; i < pointsStrings.size(); i++)
744 ASSERTL0(valid, std::string(
"Unable to correctly parse the points type: ").append(pointsStrings[i]).c_str());
747 const char *nPointsStr = expansion->Attribute(
"NUMPOINTS");
748 ASSERTL0(nPointsStr,
"NUMPOINTS was not defined in EXPANSION section of input");
749 std::string numPointsStr = nPointsStr;
750 std::vector<unsigned int> numPoints;
752 ASSERTL0(valid,
"Unable to correctly parse the number of points.");
753 ASSERTL0(numPoints.size() == numPoints.size(),
"information for num points does not match the number of basis");
755 for(
int i = 0; i < basis.size(); ++i)
768 for (compVecIter = compositeVector.begin(); compVecIter != compositeVector.end(); ++compVecIter)
771 for (geomVecIter = (compVecIter->second)->begin(); geomVecIter != (compVecIter->second)->end(); ++geomVecIter)
774 ASSERTL0(x != expansionMap->end(),
"Expansion not found!!");
781 ASSERTL0((*geomVecIter)->GetShapeDim() == basiskeyvec.size(),
" There is an incompatible expansion dimension with geometry dimension");
782 (x->second)->m_basisKeyVector = basiskeyvec;
787 expansion = expansion->NextSiblingElement(
"E");
790 else if(expType ==
"H")
798 const char *fStr = expansion->Attribute(
"FIELDS");
799 std::vector<std::string> fieldStrings;
803 std::string fieldStr = fStr;
805 ASSERTL0(valid,
"Unable to correctly parse the field string in ExpansionTypes.");
819 for(i = 0; i < fieldStrings.size(); ++i)
827 if(fieldStrings.size())
839 for(i = 0; i < fieldStrings.size(); ++i)
847 ASSERTL0(
false,
"Expansion vector for this field is already setup");
860 std::string compositeStr = expansion->Attribute(
"COMPOSITE");
861 ASSERTL0(compositeStr.length() > 3,
"COMPOSITE must be specified in expansion definition");
862 int beg = compositeStr.find_first_of(
"[");
863 int end = compositeStr.find_first_of(
"]");
864 std::string compositeListStr = compositeStr.substr(beg+1,end-beg-1);
878 const char * tStr_x = expansion->Attribute(
"TYPE-X");
882 std::string typeStr = tStr_x;
885 const std::string* expStr =
std::find(begStr, endStr, typeStr);
887 ASSERTL0(expStr != endStr,
"Invalid expansion type.");
890 const char *nStr = expansion->Attribute(
"NUMMODES-X");
891 ASSERTL0(nStr,
"NUMMODES-X was not defined in EXPANSION section of input");
892 std::string nummodesStr = nStr;
899 num_modes_x = (int) nummodesEqn.
Evaluate();
903 num_modes_x = boost::lexical_cast<
int>(nummodesStr);
908 const char * tStr_y = expansion->Attribute(
"TYPE-Y");
912 std::string typeStr = tStr_y;
915 const std::string* expStr =
std::find(begStr, endStr, typeStr);
917 ASSERTL0(expStr != endStr,
"Invalid expansion type.");
920 const char *nStr = expansion->Attribute(
"NUMMODES-Y");
921 ASSERTL0(nStr,
"NUMMODES-Y was not defined in EXPANSION section of input");
922 std::string nummodesStr = nStr;
928 num_modes_y = (int) nummodesEqn.
Evaluate();
932 num_modes_y = boost::lexical_cast<
int>(nummodesStr);
937 const char * tStr_z = expansion->Attribute(
"TYPE-Z");
941 std::string typeStr = tStr_z;
944 const std::string* expStr =
std::find(begStr, endStr, typeStr);
946 ASSERTL0(expStr != endStr,
"Invalid expansion type.");
949 const char *nStr = expansion->Attribute(
"NUMMODES-Z");
950 ASSERTL0(nStr,
"NUMMODES-Z was not defined in EXPANSION section of input");
951 std::string nummodesStr = nStr;
957 num_modes_z = (int) nummodesEqn.
Evaluate();
961 num_modes_z = boost::lexical_cast<
int>(nummodesStr);
967 for (compVecIter = compositeVector.begin(); compVecIter != compositeVector.end(); ++compVecIter)
970 for (geomVecIter = (compVecIter->second)->begin(); geomVecIter != (compVecIter->second)->end(); ++geomVecIter)
973 for (expVecIter = expansionMap->begin(); expVecIter != expansionMap->end(); ++expVecIter)
987 expansion = expansion->NextSiblingElement(
"H");
990 else if(expType ==
"ELEMENTS")
992 std::vector<LibUtilities::FieldDefinitionsSharedPtr> fielddefs;
995 cout <<
" Number of elements: " << fielddefs.size() << endl;
1000 ASSERTL0(
false,
"Expansion type not defined");
1011 TiXmlHandle docHandle(&doc);
1013 TiXmlElement* mesh = docHandle.FirstChildElement(
"NEKTAR").FirstChildElement(
"GEOMETRY").Element();
1014 TiXmlElement* domain = NULL;
1016 ASSERTL0(mesh,
"Unable to find GEOMETRY tag in file.");
1019 domain = mesh->FirstChildElement(
"DOMAIN");
1021 ASSERTL0(domain,
"Unable to find DOMAIN tag in file.");
1025 TiXmlElement *multidomains = domain->FirstChildElement(
"D");
1029 int nextDomainNumber = 0;
1030 while (multidomains)
1033 int err = multidomains->QueryIntAttribute(
"ID", &indx);
1035 "Unable to read attribute ID in Domain.");
1038 TiXmlNode* elementChild = multidomains->FirstChild();
1039 while(elementChild && elementChild->Type() != TiXmlNode::TINYXML_TEXT)
1041 elementChild = elementChild->NextSibling();
1044 ASSERTL0(elementChild,
"Unable to read DOMAIN body.");
1045 std::string elementStr = elementChild->ToText()->ValueStr();
1047 elementStr = elementStr.substr(elementStr.find_first_not_of(
" "));
1049 std::string::size_type indxBeg = elementStr.find_first_of(
'[') + 1;
1050 std::string::size_type indxEnd = elementStr.find_last_of(
']') - 1;
1051 std::string indxStr = elementStr.substr(indxBeg, indxEnd - indxBeg + 1);
1053 ASSERTL0(!indxStr.empty(),
"Unable to read domain's composite index (index missing?).");
1061 ASSERTL0(!
m_domain[nextDomainNumber++].empty(), (std::string(
"Unable to obtain domain's referenced composite: ") + indxStr).c_str());
1064 multidomains = multidomains->NextSiblingElement(
"D");
1072 TiXmlNode* elementChild = domain->FirstChild();
1073 while(elementChild && elementChild->Type() != TiXmlNode::TINYXML_TEXT)
1075 elementChild = elementChild->NextSibling();
1078 ASSERTL0(elementChild,
"Unable to read DOMAIN body.");
1079 std::string elementStr = elementChild->ToText()->ValueStr();
1081 elementStr = elementStr.substr(elementStr.find_first_not_of(
" "));
1083 std::string::size_type indxBeg = elementStr.find_first_of(
'[') + 1;
1084 std::string::size_type indxEnd = elementStr.find_last_of(
']') - 1;
1085 std::string indxStr = elementStr.substr(indxBeg, indxEnd - indxBeg + 1);
1087 ASSERTL0(!indxStr.empty(),
"Unable to read domain's composite index (index missing?).");
1095 ASSERTL0(!
m_domain[0].empty(), (std::string(
"Unable to obtain domain's referenced composite: ") + indxStr).c_str());
1106 TiXmlHandle docHandle(&doc);
1107 TiXmlElement* mesh = docHandle.FirstChildElement(
"NEKTAR").FirstChildElement(
"GEOMETRY").Element();
1108 TiXmlElement* field = NULL;
1112 TiXmlElement* element = mesh->FirstChildElement(
"VERTEX");
1113 ASSERTL0(element,
"Unable to find mesh VERTEX tag in file.");
1118 const char *xscal = element->Attribute(
"XSCALE");
1125 std::string xscalstr = xscal;
1127 xscale = expEvaluator.
Evaluate(expr_id);
1130 const char *yscal = element->Attribute(
"YSCALE");
1137 std::string yscalstr = yscal;
1139 yscale = expEvaluator.
Evaluate(expr_id);
1142 const char *zscal = element->Attribute(
"ZSCALE");
1149 std::string zscalstr = zscal;
1151 zscale = expEvaluator.
Evaluate(expr_id);
1160 const char *xmov = element->Attribute(
"XMOVE");
1167 std::string xmovstr = xmov;
1169 xmove = expEvaluator.
Evaluate(expr_id);
1172 const char *ymov = element->Attribute(
"YMOVE");
1179 std::string ymovstr = ymov;
1181 ymove = expEvaluator.
Evaluate(expr_id);
1184 const char *zmov = element->Attribute(
"ZMOVE");
1191 std::string zmovstr = zmov;
1193 zmove = expEvaluator.
Evaluate(expr_id);
1199 field = mesh->FirstChildElement(
"CURVED");
1210 TiXmlElement *edgelement = field->FirstChildElement(
"E");
1212 int edgeindx, edgeid;
1213 int nextEdgeNumber = -1;
1220 std::string edge(edgelement->ValueStr());
1221 ASSERTL0(edge ==
"E", (std::string(
"Unknown 3D curve type:") + edge).c_str());
1224 err = edgelement->QueryIntAttribute(
"ID", &edgeindx);
1225 ASSERTL0(err == TIXML_SUCCESS,
"Unable to read curve attribute ID.");
1228 err = edgelement->QueryIntAttribute(
"EDGEID", &edgeid);
1229 ASSERTL0(err == TIXML_SUCCESS,
"Unable to read curve attribute EDGEID.");
1232 std::string elementStr;
1233 TiXmlNode* elementChild = edgelement->FirstChild();
1238 if (elementChild->Type() == TiXmlNode::TINYXML_TEXT)
1240 elementStr += elementChild->ToText()->ValueStr();
1243 elementChild = elementChild->NextSibling();
1246 ASSERTL0(!elementStr.empty(),
"Unable to read curve description body.");
1253 std::string typeStr = edgelement->Attribute(
"TYPE");
1254 ASSERTL0(!typeStr.empty(),
"TYPE must be specified in " "points definition");
1259 const std::string* ptsStr =
std::find(begStr, endStr, typeStr);
1261 ASSERTL0(ptsStr != endStr,
"Invalid points type.");
1265 err = edgelement->QueryIntAttribute(
"NUMPOINTS", &numPts);
1266 ASSERTL0(err == TIXML_SUCCESS,
"Unable to read curve attribute NUMPOINTS.");
1271 std::istringstream elementDataStrm(elementStr.c_str());
1274 while(!elementDataStrm.fail())
1276 elementDataStrm >> xval >> yval >> zval;
1278 xval = xval*xscale + xmove;
1279 yval = yval*yscale + ymove;
1280 zval = zval*zscale + zmove;
1285 if (!elementDataStrm.fail())
1289 curve->m_points.push_back(vert);
1297 (std::string(
"Unable to read curve data for EDGE: ") + elementStr).c_str());
1301 ASSERTL0(curve->m_points.size() == numPts,
"Number of points specificed by attribute NUMPOINTS is different from number of points in list");
1305 edgelement = edgelement->NextSiblingElement(
"E");
1312 TiXmlElement *facelement = field->FirstChildElement(
"F");
1313 int faceindx, faceid;
1317 std::string face(facelement->ValueStr());
1318 ASSERTL0(face ==
"F", (std::string(
"Unknown 3D curve type: ") + face).c_str());
1321 err = facelement->QueryIntAttribute(
"ID", &faceindx);
1322 ASSERTL0(err == TIXML_SUCCESS,
"Unable to read curve attribute ID.");
1325 err = facelement->QueryIntAttribute(
"FACEID", &faceid);
1326 ASSERTL0(err == TIXML_SUCCESS,
"Unable to read curve attribute FACEID.");
1329 std::string elementStr;
1330 TiXmlNode* elementChild = facelement->FirstChild();
1335 if (elementChild->Type() == TiXmlNode::TINYXML_TEXT)
1337 elementStr += elementChild->ToText()->ValueStr();
1340 elementChild = elementChild->NextSibling();
1343 ASSERTL0(!elementStr.empty(),
"Unable to read curve description body.");
1348 std::string typeStr = facelement->Attribute(
"TYPE");
1349 ASSERTL0(!typeStr.empty(),
"TYPE must be specified in " "points definition");
1353 const std::string* ptsStr =
std::find(begStr, endStr, typeStr);
1355 ASSERTL0(ptsStr != endStr,
"Invalid points type.");
1358 std::string numptsStr = facelement->Attribute(
"NUMPOINTS");
1359 ASSERTL0(!numptsStr.empty(),
"NUMPOINTS must be specified in points definition");
1361 std::stringstream s;
1367 ASSERTL0(numPts >= 3,
"NUMPOINTS for face must be greater than 2");
1371 ASSERTL0(ptsStr != endStr,
"Invalid points type.");
1376 std::istringstream elementDataStrm(elementStr.c_str());
1379 while(!elementDataStrm.fail())
1381 elementDataStrm >> xval >> yval >> zval;
1385 if (!elementDataStrm.fail())
1388 curve->m_points.push_back(vert);
1395 (std::string(
"Unable to read curve data for FACE: ")
1396 + elementStr).c_str());
1400 facelement = facelement->NextSiblingElement(
"F");
1412 TiXmlDocument doc(infilename);
1413 bool loadOkay = doc.LoadFile();
1415 std::stringstream errstr;
1416 errstr <<
"Unable to load file: " << infilename << std::endl;
1417 errstr <<
"Reason: " << doc.ErrorDesc() << std::endl;
1418 errstr <<
"Position: Line " << doc.ErrorRow() <<
", Column " << doc.ErrorCol() << std::endl;
1435 TiXmlElement *root = doc.FirstChildElement(
"NEKTAR");
1436 TiXmlElement *geomTag;
1441 root =
new TiXmlElement(
"NEKTAR");
1442 doc.LinkEndChild(root);
1444 geomTag =
new TiXmlElement(
"GEOMETRY");
1445 root->LinkEndChild(geomTag);
1450 geomTag = root->FirstChildElement(
"GEOMETRY");
1454 geomTag =
new TiXmlElement(
"GEOMETRY");
1455 root->LinkEndChild(geomTag);
1467 TiXmlElement *vertTag =
new TiXmlElement(
"VERTEX");
1473 s << scientific << setprecision(8)
1474 << (*pIt->second)(0) <<
" " << (*pIt->second)(1) <<
" "
1475 << (*pIt->second)(2);
1476 TiXmlElement * v =
new TiXmlElement(
"V");
1477 v->SetAttribute(
"ID", pIt->second->GetVid());
1478 v->LinkEndChild(
new TiXmlText(s.str()));
1479 vertTag->LinkEndChild(v);
1482 geomTag->LinkEndChild(vertTag);
1485 TiXmlElement *edgeTag =
new TiXmlElement(
1494 s << seg->GetVid(0) <<
" " << seg->GetVid(1);
1495 TiXmlElement *e =
new TiXmlElement(tag);
1496 e->SetAttribute(
"ID", sIt->first);
1497 e->LinkEndChild(
new TiXmlText(s.str()));
1498 edgeTag->LinkEndChild(e);
1501 geomTag->LinkEndChild(edgeTag);
1506 TiXmlElement *faceTag =
new TiXmlElement(
1516 s << tri->GetEid(0) <<
" " << tri->GetEid(1) <<
" "
1518 TiXmlElement *t =
new TiXmlElement(tag);
1519 t->SetAttribute(
"ID", tIt->first);
1520 t->LinkEndChild(
new TiXmlText(s.str()));
1521 faceTag->LinkEndChild(t);
1531 s << quad->GetEid(0) <<
" " << quad->GetEid(1) <<
" "
1532 << quad->GetEid(2) <<
" " << quad->GetEid(3);
1533 TiXmlElement *q =
new TiXmlElement(tag);
1534 q->SetAttribute(
"ID", qIt->first);
1535 q->LinkEndChild(
new TiXmlText(s.str()));
1536 faceTag->LinkEndChild(q);
1539 geomTag->LinkEndChild(faceTag);
1544 TiXmlElement *elmtTag =
new TiXmlElement(
"ELEMENT");
1553 s << hex->GetFid(0) <<
" " << hex->GetFid(1) <<
" "
1554 << hex->GetFid(2) <<
" " << hex->GetFid(3) <<
" "
1555 << hex->GetFid(4) <<
" " << hex->GetFid(5) <<
" ";
1556 TiXmlElement *h =
new TiXmlElement(tag);
1557 h->SetAttribute(
"ID", hIt->first);
1558 h->LinkEndChild(
new TiXmlText(s.str()));
1559 elmtTag->LinkEndChild(h);
1569 s << prism->GetFid(0) <<
" " << prism->GetFid(1) <<
" "
1570 << prism->GetFid(2) <<
" " << prism->GetFid(3) <<
" "
1571 << prism->GetFid(4) <<
" ";
1572 TiXmlElement *p =
new TiXmlElement(tag);
1573 p->SetAttribute(
"ID", rIt->first);
1574 p->LinkEndChild(
new TiXmlText(s.str()));
1575 elmtTag->LinkEndChild(p);
1585 s << pyr->GetFid(0) <<
" " << pyr->GetFid(1) <<
" "
1586 << pyr->GetFid(2) <<
" " << pyr->GetFid(3) <<
" "
1587 << pyr->GetFid(4) <<
" ";
1588 TiXmlElement *p =
new TiXmlElement(tag);
1589 p->SetAttribute(
"ID", pIt->first);
1590 p->LinkEndChild(
new TiXmlText(s.str()));
1591 elmtTag->LinkEndChild(p);
1601 s << tet->GetFid(0) <<
" " << tet->GetFid(1) <<
" "
1602 << tet->GetFid(2) <<
" " << tet->GetFid(3) <<
" ";
1603 TiXmlElement *t =
new TiXmlElement(tag);
1604 t->SetAttribute(
"ID", tIt->first);
1605 t->LinkEndChild(
new TiXmlText(s.str()));
1606 elmtTag->LinkEndChild(t);
1609 geomTag->LinkEndChild(elmtTag);
1613 TiXmlElement *curveTag =
new TiXmlElement(
"CURVED");
1621 TiXmlElement *c =
new TiXmlElement(
"E");
1625 for (
int j = 0; j < curve->m_points.size(); ++j)
1628 s << scientific << (*p)(0) <<
" " << (*p)(1) <<
" " << (*p)(2) <<
" ";
1631 c->SetAttribute(
"ID", curveId++);
1632 c->SetAttribute(
"EDGEID", curve->m_curveID);
1633 c->SetAttribute(
"NUMPOINTS", curve->m_points.size());
1635 c->LinkEndChild(
new TiXmlText(s.str()));
1636 curveTag->LinkEndChild(c);
1643 TiXmlElement *c =
new TiXmlElement(
"F");
1647 for (
int j = 0; j < curve->m_points.size(); ++j)
1650 s << scientific << (*p)(0) <<
" " << (*p)(1) <<
" " << (*p)(2) <<
" ";
1653 c->SetAttribute(
"ID", curveId++);
1654 c->SetAttribute(
"FACEID", curve->m_curveID);
1655 c->SetAttribute(
"NUMPOINTS", curve->m_points.size());
1657 c->LinkEndChild(
new TiXmlText(s.str()));
1658 curveTag->LinkEndChild(c);
1661 geomTag->LinkEndChild(curveTag);
1664 TiXmlElement *compTag =
new TiXmlElement(
"COMPOSITE");
1669 map<LibUtilities::ShapeType, pair<string, string> > compMap;
1681 TiXmlElement *c =
new TiXmlElement(
"C");
1684 int shapeDim = firstGeom->GetShapeDim();
1686 compMap[firstGeom->GetShapeType()].second :
1687 compMap[firstGeom->GetShapeType()].first;
1689 int vId = firstGeom->GetGlobalID();
1691 s <<
" " << tag <<
"[" << vId;
1693 for (
int i = 1; i < cIt->second->size(); ++i)
1697 vId = (*cIt->second)[i]->GetGlobalID();
1700 if (prevId > -1 && vId == prevId + 1)
1705 if (i == cIt->second->size() - 1)
1727 c->SetAttribute(
"ID", cIt->first);
1728 c->LinkEndChild(
new TiXmlText(s.str()));
1729 compTag->LinkEndChild(c);
1732 geomTag->LinkEndChild(compTag);
1735 TiXmlElement *domTag =
new TiXmlElement(
"DOMAIN");
1736 stringstream domString;
1745 domString << cIt->first;
1753 domTag->LinkEndChild(
new TiXmlText(domString.str()));
1754 geomTag->LinkEndChild(domTag);
1765 TiXmlDeclaration* decl =
new TiXmlDeclaration(
"1.0",
"utf-8",
"");
1766 doc.LinkEndChild(decl);
1772 doc.SaveFile(outfilename);
1815 bool returnval =
true;
1827 for(
int i = 0; i < nverts; ++i)
1830 if(xval < m_domainRange->m_xmin)
1844 if((ncnt_up == nverts)||(ncnt_low == nverts))
1855 for(
int i = 0; i < nverts; ++i)
1858 if(yval < m_domainRange->m_ymin)
1872 if((ncnt_up == nverts)||(ncnt_low == nverts))
1886 for(
int i = 0; i < nverts; ++i)
1890 if(zval < m_domainRange->m_zmin)
1904 if((ncnt_up == nverts)||(ncnt_low == nverts))
1918 bool returnval =
true;
1929 for(
int i = 0; i < nverts; ++i)
1932 if(xval < m_domainRange->m_xmin)
1946 if((ncnt_up == nverts)||(ncnt_low == nverts))
1956 for(
int i = 0; i < nverts; ++i)
1959 if(yval < m_domainRange->m_ymin)
1973 if((ncnt_up == nverts)||(ncnt_low == nverts))
1983 for(
int i = 0; i < nverts; ++i)
1987 if(zval < m_domainRange->m_zmin)
2001 if((ncnt_up == nverts)||(ncnt_low == nverts))
2030 if (whichItem >= 0 && whichItem <
int(
m_meshComposites[whichComposite]->size()))
2046 std::ostringstream errStream;
2047 errStream <<
"Unable to access composite item [" << whichComposite <<
"][" << whichItem <<
"].";
2049 std::string testStr = errStream.str();
2064 typedef vector<unsigned int> SeqVector;
2065 SeqVector seqVector;
2068 ASSERTL0(parseGood && !seqVector.empty(), (std::string(
"Unable to read composite index range: ") + compositeStr).c_str());
2070 SeqVector addedVector;
2076 if (
std::find(addedVector.begin(), addedVector.end(), *iter) == addedVector.end())
2087 addedVector.push_back(*iter);
2092 compositeVector[*iter] = composite;
2097 ::sprintf(str,
"%d", *iter);
2143 for (iter = expansionMap->begin(); iter!=expansionMap->end(); ++iter)
2145 if ((iter->second)->m_geomShPtr == geom)
2147 returnval = iter->second;
2159 std::vector<LibUtilities::FieldDefinitionsSharedPtr> &fielddef)
2161 int i, j, k, cnt, id;
2168 for(i = 0; i < fielddef.size(); ++i)
2170 for(j = 0; j < fielddef[i]->m_fields.size(); ++j)
2172 std::string field = fielddef[i]->m_fields[j];
2189 for(
int d = 0; d <
m_domain.size(); ++d)
2191 CompositeMap::const_iterator compIter;
2193 for (compIter =
m_domain[d].begin();
2194 compIter !=
m_domain[d].end(); ++compIter)
2196 GeometryVector::const_iterator x;
2197 for (x = compIter->second->begin();
2198 x != compIter->second->end(); ++x)
2203 int id = (*x)->GetGlobalID();
2204 (*expansionMap)[id] = expansionElementShPtr;
2213 for(i = 0; i < fielddef.size(); ++i)
2216 std::vector<std::string> fields = fielddef[i]->m_fields;
2217 std::vector<unsigned int> nmodes = fielddef[i]->m_numModes;
2218 std::vector<LibUtilities::BasisType> basis = fielddef[i]->m_basis;
2219 bool pointDef = fielddef[i]->m_pointsDef;
2220 bool numPointDef = fielddef[i]->m_numPointsDef;
2223 std::vector<unsigned int> npoints = fielddef[i]->m_numPoints;
2224 std::vector<LibUtilities::PointsType> points = fielddef[i]->m_points;
2226 bool UniOrder = fielddef[i]->m_uniOrder;
2229 for (j=0; j< basis.size(); ++j)
2248 if (check==basis.size())
2250 for (j = 0; j < fielddef[i]->m_elementIDs.size(); ++j)
2254 id = fielddef[i]->m_elementIDs[j];
2256 switch (fielddef[i]->m_shapeType)
2260 if(
m_segGeoms.count(fielddef[i]->m_elementIDs[j]) == 0)
2265 geom =
m_segGeoms[fielddef[i]->m_elementIDs[j]];
2269 if(numPointDef&&pointDef)
2274 else if(!numPointDef&&pointDef)
2279 else if(numPointDef&&!pointDef)
2291 bkeyvec.push_back(bkey);
2296 if(
m_triGeoms.count(fielddef[i]->m_elementIDs[j]) == 0)
2301 geom =
m_triGeoms[fielddef[i]->m_elementIDs[j]];
2304 if(numPointDef&&pointDef)
2309 else if(!numPointDef&&pointDef)
2314 else if(numPointDef&&!pointDef)
2321 bkeyvec.push_back(bkey);
2324 if(numPointDef&&pointDef)
2329 else if(!numPointDef&&pointDef)
2334 else if(numPointDef&&!pointDef)
2340 bkeyvec.push_back(bkey1);
2350 if(
m_quadGeoms.count(fielddef[i]->m_elementIDs[j]) == 0)
2358 for(
int b = 0; b < 2; ++b)
2362 if(numPointDef&&pointDef)
2367 else if(!numPointDef&&pointDef)
2372 else if(numPointDef&&!pointDef)
2378 bkeyvec.push_back(bkey);
2390 k = fielddef[i]->m_elementIDs[j];
2404 if(numPointDef&&pointDef)
2409 else if(!numPointDef&&pointDef)
2414 else if(numPointDef&&!pointDef)
2422 bkeyvec.push_back(bkey);
2427 if(numPointDef&&pointDef)
2432 else if(!numPointDef&&pointDef)
2437 else if(numPointDef&&!pointDef)
2445 bkeyvec.push_back(bkey);
2451 if(numPointDef&&pointDef)
2456 else if(!numPointDef&&pointDef)
2461 else if(numPointDef&&!pointDef)
2469 bkeyvec.push_back(bkey);
2480 k = fielddef[i]->m_elementIDs[j];
2487 for(
int b = 0; b < 2; ++b)
2491 if(numPointDef&&pointDef)
2496 else if(!numPointDef&&pointDef)
2501 else if(numPointDef&&!pointDef)
2508 bkeyvec.push_back(bkey);
2514 if(numPointDef&&pointDef)
2519 else if(!numPointDef&&pointDef)
2524 else if(numPointDef&&!pointDef)
2531 bkeyvec.push_back(bkey);
2542 k = fielddef[i]->m_elementIDs[j];
2544 "Failed to find geometry with same global id");
2548 for(
int b = 0; b < 2; ++b)
2552 if(numPointDef&&pointDef)
2557 else if(!numPointDef&&pointDef)
2562 else if(numPointDef&&!pointDef)
2569 bkeyvec.push_back(bkey);
2575 if(numPointDef&&pointDef)
2580 else if(!numPointDef&&pointDef)
2585 else if(numPointDef&&!pointDef)
2592 bkeyvec.push_back(bkey);
2603 k = fielddef[i]->m_elementIDs[j];
2611 for(
int b = 0; b < 3; ++b)
2615 if(numPointDef&&pointDef)
2620 else if(!numPointDef&&pointDef)
2625 else if(numPointDef&&!pointDef)
2632 bkeyvec.push_back(bkey);
2642 ASSERTL0(
false,
"Need to set up for pyramid and prism 3D Expansions");
2646 for(k = 0; k < fields.size(); ++k)
2649 if((*expansionMap).find(
id) != (*expansionMap).end())
2651 (*expansionMap)[id]->m_geomShPtr = geom;
2652 (*expansionMap)[id]->m_basisKeyVector = bkeyvec;
2659 ASSERTL0(
false,
"Need to set up for non Modified basis");
2669 std::vector<LibUtilities::FieldDefinitionsSharedPtr> &fielddef,
2670 std::vector< std::vector<LibUtilities::PointsType> > &pointstype)
2672 int i,j,k,g,h,cnt,id;
2679 for(i = 0; i < fielddef.size(); ++i)
2681 for(j = 0; j < fielddef[i]->m_fields.size(); ++j)
2683 std::string field = fielddef[i]->m_fields[j];
2696 for(k = 0; k < fielddef.size(); ++k)
2698 for(h = 0; h < fielddef[k]->m_fields.size(); ++h)
2700 if(fielddef[k]->m_fields[h] == field)
2705 for(g = 0; g < fielddef[k]->m_elementIDs.size(); ++g)
2709 (*expansionMap)[fielddef[k]->m_elementIDs[g]] = tmpexp;
2721 for(i = 0; i < fielddef.size(); ++i)
2724 std::vector<std::string> fields = fielddef[i]->m_fields;
2725 std::vector<unsigned int> nmodes = fielddef[i]->m_numModes;
2726 std::vector<LibUtilities::BasisType> basis = fielddef[i]->m_basis;
2727 bool UniOrder = fielddef[i]->m_uniOrder;
2729 for(j = 0; j < fielddef[i]->m_elementIDs.size(); ++j)
2733 id = fielddef[i]->m_elementIDs[j];
2735 switch(fielddef[i]->m_shapeType)
2739 k = fielddef[i]->m_elementIDs[j];
2741 "Failed to find geometry with same global id.");
2750 bkeyvec.push_back(bkey);
2755 k = fielddef[i]->m_elementIDs[j];
2757 "Failed to find geometry with same global id.");
2759 for(
int b = 0; b < 2; ++b)
2763 bkeyvec.push_back(bkey);
2774 k = fielddef[i]->m_elementIDs[j];
2776 "Failed to find geometry with same global id");
2779 for(
int b = 0; b < 2; ++b)
2783 bkeyvec.push_back(bkey);
2794 k = fielddef[i]->m_elementIDs[j];
2796 "Failed to find geometry with same global id");
2799 for(
int b = 0; b < 3; ++b)
2803 bkeyvec.push_back(bkey);
2814 k = fielddef[i]->m_elementIDs[j];
2816 "Failed to find geometry with same global id");
2819 for(
int b = 0; b < 3; ++b)
2823 bkeyvec.push_back(bkey);
2834 k = fielddef[i]->m_elementIDs[j];
2836 "Failed to find geometry with same global id");
2839 for(
int b = 0; b < 3; ++b)
2843 bkeyvec.push_back(bkey);
2854 k = fielddef[i]->m_elementIDs[j];
2856 "Failed to find geometry with same global id");
2859 for(
int b = 0; b < 3; ++b)
2863 bkeyvec.push_back(bkey);
2873 ASSERTL0(
false,
"Need to set up for pyramid and prism 3D Expansions");
2877 for(k = 0; k < fields.size(); ++k)
2880 if((*expansionMap).find(
id) != (*expansionMap).end())
2882 (*expansionMap)[id]->m_geomShPtr = geom;
2883 (*expansionMap)[id]->m_basisKeyVector = bkeyvec;
2904 for(expIt = it->second->begin(); expIt != it->second->end(); ++expIt)
2906 for(
int i = 0; i < expIt->second->m_basisKeyVector.size(); ++i)
2924 expIt->second->m_basisKeyVector[i] = bkeynew;
2946 for(expIt = it->second->begin(); expIt != it->second->end(); ++expIt)
2948 for(
int i = 0; i < expIt->second->m_basisKeyVector.size(); ++i)
2956 expIt->second->m_basisKeyVector[i] = bkeynew;
2983 for (elemIter = expansionMap->begin(); elemIter != expansionMap->end(); ++elemIter)
2985 if ((elemIter->second)->m_geomShPtr->GetShapeType() == shape)
2987 (elemIter->second)->m_basisKeyVector = keys;
3033 returnval.push_back(bkey);
3040 returnval.push_back(bkey);
3041 returnval.push_back(bkey);
3048 returnval.push_back(bkey);
3049 returnval.push_back(bkey);
3050 returnval.push_back(bkey);
3057 returnval.push_back(bkey);
3062 returnval.push_back(bkey1);
3069 returnval.push_back(bkey);
3073 returnval.push_back(bkey1);
3077 returnval.push_back(bkey2);
3084 returnval.push_back(bkey);
3085 returnval.push_back(bkey);
3089 returnval.push_back(bkey1);
3096 returnval.push_back(bkey);
3097 returnval.push_back(bkey);
3101 returnval.push_back(bkey1);
3107 ASSERTL0(
false,
"Expansion not defined in switch for this shape");
3122 returnval.push_back(bkey);
3129 returnval.push_back(bkey);
3130 returnval.push_back(bkey);
3138 returnval.push_back(bkey);
3142 returnval.push_back(bkey1);
3150 returnval.push_back(bkey);
3151 returnval.push_back(bkey);
3152 returnval.push_back(bkey);
3157 ASSERTL0(
false,
"Expansion not defined in switch for this shape");
3173 returnval.push_back(bkey);
3181 returnval.push_back(bkey);
3182 returnval.push_back(bkey);
3190 returnval.push_back(bkey);
3191 returnval.push_back(bkey);
3192 returnval.push_back(bkey);
3197 ASSERTL0(
false,
"Expansion not defined in switch for this shape");
3213 returnval.push_back(bkey);
3221 returnval.push_back(bkey);
3226 returnval.push_back(bkey1);
3234 returnval.push_back(bkey);
3235 returnval.push_back(bkey);
3243 returnval.push_back(bkey);
3248 returnval.push_back(bkey1);
3256 ASSERTL0(
false,
"Expansion not defined in switch for this shape");
3272 returnval.push_back(bkey);
3280 returnval.push_back(bkey);
3281 returnval.push_back(bkey);
3289 returnval.push_back(bkey);
3290 returnval.push_back(bkey);
3291 returnval.push_back(bkey);
3296 ASSERTL0(
false,
"Expansion not defined in switch for this shape");
3312 returnval.push_back(bkey);
3319 returnval.push_back(bkey);
3320 returnval.push_back(bkey);
3327 returnval.push_back(bkey);
3328 returnval.push_back(bkey);
3329 returnval.push_back(bkey);
3334 ASSERTL0(
false,
"Expansion not defined in switch for this shape");
3350 returnval.push_back(bkey);
3357 returnval.push_back(bkey);
3358 returnval.push_back(bkey);
3365 returnval.push_back(bkey);
3366 returnval.push_back(bkey);
3367 returnval.push_back(bkey);
3372 ASSERTL0(
false,
"Expansion not defined in switch for this shape");
3387 returnval.push_back(bkey);
3394 returnval.push_back(bkey);
3395 returnval.push_back(bkey);
3402 returnval.push_back(bkey);
3403 returnval.push_back(bkey);
3404 returnval.push_back(bkey);
3409 ASSERTL0(
false,
"Expansion not defined in switch for this shape");
3424 returnval.push_back(bkey);
3431 returnval.push_back(bkey);
3432 returnval.push_back(bkey);
3439 returnval.push_back(bkey);
3440 returnval.push_back(bkey);
3441 returnval.push_back(bkey);
3446 ASSERTL0(
false,
"Expansion not defined in switch for this shape");
3461 returnval.push_back(bkey);
3468 returnval.push_back(bkey);
3469 returnval.push_back(bkey);
3476 returnval.push_back(bkey);
3477 returnval.push_back(bkey);
3478 returnval.push_back(bkey);
3483 ASSERTL0(
false,
"Expansion not defined in switch for this shape");
3498 returnval.push_back(bkey);
3502 returnval.push_back(bkey1);
3507 ASSERTL0(
false,
"Expansion not defined in switch for this shape");
3522 returnval.push_back(bkey1);
3526 returnval.push_back(bkey);
3531 ASSERTL0(
false,
"Expansion not defined in switch for this shape");
3546 returnval.push_back(bkey);
3550 returnval.push_back(bkey1);
3555 ASSERTL0(
false,
"Expansion not defined in switch for this shape");
3564 ASSERTL0(
false,
"Expansion type not defined");
3582 const int nummodes_x,
3583 const int nummodes_y,
3584 const int nummodes_z)
3594 ASSERTL0(
false,
"Homogeneous expansion not defined for this shape");
3600 ASSERTL0(
false,
"Homogeneous expansion not defined for this shape");
3612 returnval.push_back(bkey1);
3620 returnval.push_back(bkey1);
3628 returnval.push_back(bkey1);
3636 returnval.push_back(bkey1);
3645 returnval.push_back(bkey1);
3653 ASSERTL0(
false,
"Homogeneous expansion can be of Fourier or Chebyshev type only");
3665 returnval.push_back(bkey2);
3674 returnval.push_back(bkey2);
3682 returnval.push_back(bkey2);
3690 returnval.push_back(bkey2);
3698 returnval.push_back(bkey2);
3704 ASSERTL0(
false,
"Homogeneous expansion can be of Fourier or Chebyshev type only");
3715 returnval.push_back(bkey3);
3723 returnval.push_back(bkey3);
3731 returnval.push_back(bkey3);
3739 returnval.push_back(bkey3);
3747 returnval.push_back(bkey3);
3753 ASSERTL0(
false,
"Homogeneous expansion can be of Fourier or Chebyshev type only");
3762 ASSERTL0(
false,
"Homogeneous expansion not defined for this shape");
3768 ASSERTL0(
false,
"Homogeneous expansion not defined for this shape");
3773 ASSERTL0(
false,
"Expansion not defined in switch for this shape");
3786 unsigned int nextId =
m_vertSet.rbegin()->first + 1;
3802 if( curveDefinition )
3822 trigeom->SetGlobalID(indx);
3837 quadgeom->SetGlobalID(indx);
3854 prismgeom->SetGlobalID(index);
3866 unsigned int index =
m_tetGeoms.rbegin()->first + 1;
3868 tetgeom->SetGlobalID(index);
3882 unsigned int index =
m_pyrGeoms.rbegin()->first + 1;
3885 pyrgeom->SetGlobalID(index);
3897 unsigned int index =
m_hexGeoms.rbegin()->first + 1;
3899 hexgeom->SetGlobalID(index);
3917 for(
int d = 0; d <
m_domain.size(); ++d)
3919 CompositeMap::const_iterator compIter;
3921 for (compIter =
m_domain[d].begin(); compIter !=
m_domain[d].end(); ++compIter)
3923 GeometryVector::const_iterator x;
3924 for (x = compIter->second->begin(); x != compIter->second->end(); ++x)
3929 int id = (*x)->GetGlobalID();
3930 (*returnval)[id] = expansionElementShPtr;
void SetExpansions(std::vector< LibUtilities::FieldDefinitionsSharedPtr > &fielddef)
Sets expansions given field definitions.
boost::shared_ptr< PyrGeom > PyrGeomSharedPtr
#define ASSERTL0(condition, msg)
static bool GenerateOrderedStringVector(const char *const str, std::vector< std::string > &vec)
LibUtilities::SessionReaderSharedPtr m_session
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mod...
void ImportFieldDefs(TiXmlDocument &doc, std::vector< FieldDefinitionsSharedPtr > &fielddefs, bool expChild)
Imports the definition of the fields.
Principle Modified Functions .
static bool GenerateOrderedVector(const char *const str, std::vector< unsigned int > &vec)
void SetExpansionsToPolyOrder(int nmodes)
Reset expansion to have specified polynomial order nmodes.
PrismGeomMap m_prismGeoms
static boost::shared_ptr< MeshGraph > Read(const LibUtilities::SessionReaderSharedPtr &pSession, DomainRangeShPtr &rng=NullDomainRangeShPtr)
static boost::shared_ptr< DataType > AllocateSharedPtr()
Allocate a shared pointer from the memory pool.
const char *const BasisTypeMap[]
void ReadCurves(TiXmlDocument &doc)
PrismGeomSharedPtr AddPrism(TriGeomSharedPtr tfaces[PrismGeom::kNtfaces], QuadGeomSharedPtr qfaces[PrismGeom::kNqfaces])
General purpose memory allocation routines with the ability to allocate from thread specific memory p...
const std::string kPointsTypeStr[]
CompositeMap m_meshComposites
BasisType GetBasisType() const
Return type of expansion basis.
boost::shared_ptr< QuadGeom > QuadGeomSharedPtr
int GetMeshDimension() const
Dimension of the mesh (can be a 1D curve in 3D space).
Principle Modified Functions .
Lagrange Polynomials using the Gauss points .
NekDouble Evaluate(const int AnalyticExpression_id)
Evaluation method for expressions depending on parameters only.
PointsType GetPointsType() const
Return type of quadrature.
static const int kNtfaces
boost::shared_ptr< HexGeom > HexGeomSharedPtr
PointGeomSharedPtr AddVertex(NekDouble x, NekDouble y, NekDouble z)
Adds a vertex to the with the next available ID.
QuadGeomSharedPtr AddQuadrilateral(SegGeomSharedPtr edges[], StdRegions::Orientation orient[])
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.
boost::shared_ptr< Curve > CurveSharedPtr
const ExpansionMap & GetExpansions()
1D Gauss-Gauss-Legendre quadrature points
Gauss Radau pinned at x=-1, .
static LibUtilities::BasisKeyVector DefineBasisKeyFromExpansionType(GeometrySharedPtr in, ExpansionType type, const int order)
std::vector< GeometrySharedPtr >::iterator GeometryVectorIter
Principle Orthogonal Functions .
1D Evenly-spaced points using Lagrange polynomial
TriGeomSharedPtr AddTriangle(SegGeomSharedPtr edges[], StdRegions::Orientation orient[])
DomainRangeShPtr m_domainRange
1D Evenly-spaced points using Fourier Fit
Fourier Modified expansions with just the real part of the first mode .
void WriteGeometry(std::string &outfilename)
Write out an XML file containing the GEOMETRY block representing this MeshGraph instance inside a NEK...
GeometrySharedPtr GetCompositeItem(int whichComposite, int whichItem)
boost::shared_ptr< ExpansionMap > ExpansionMapShPtr
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.
static const int kNqfaces
Composite GetComposite(int whichComposite) const
boost::shared_ptr< SegGeom > SegGeomSharedPtr
Principle Modified Functions .
std::map< std::string, ExpansionMapShPtr >::iterator ExpansionMapShPtrMapIter
NekDouble Evaluate() const
int GetNumPoints() const
Return points order at which basis is defined.
boost::shared_ptr< DomainRange > DomainRangeShPtr
PyrGeomSharedPtr AddPyramid(TriGeomSharedPtr tfaces[PyrGeom::kNtfaces], QuadGeomSharedPtr qfaces[PyrGeom::kNqfaces])
Principle Orthogonal Functions .
std::map< int, Composite >::iterator CompositeMapIter
Principle Orthogonal Functions .
1D Gauss-Gauss-Chebyshev quadrature points
Defines a specification for a set of points.
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)
std::vector< BasisKey > BasisKeyVector
Name for a vector of BasisKeys.
boost::shared_ptr< GeometryVector > Composite
static const NekDouble kNekUnsetDouble
This class defines evaluator of analytic (symbolic) mathematical expressions. Expressions are allowed...
PointGeomSharedPtr GetVertex(int i) const
std::map< int, Composite > CompositeMap
Fourier Modified expansions with just the imaginary part of the first mode .
static const int kNtfaces
boost::shared_ptr< Geometry2D > Geometry2DSharedPtr
void ReadGeometryInfo(const std::string &infilename)
Read geometric information from a file.
StandardMatrixTag boost::call_traits< LhsDataType >::const_reference rhs typedef NekMatrix< LhsDataType, StandardMatrixTag >::iterator iterator
int DefineFunction(const std::string &vlist, const std::string &function)
This function allows one to define a function to evaluate. The first argument (vlist) is a list of va...
static const int kNqfaces
std::vector< CompositeMap > m_domain
void GetCompositeList(const std::string &compositeStr, CompositeMap &compositeVector) const
static DomainRangeShPtr NullDomainRangeShPtr
boost::shared_ptr< Expansion > ExpansionShPtr
ExpansionMapShPtrMap m_expansionMapShPtrMap
Fourier ModifiedExpansion with just the first mode .
Base class for a spectral/hp element mesh.
void ReadDomain(TiXmlDocument &doc)
boost::shared_ptr< PrismGeom > PrismGeomSharedPtr
void SetDomainRange(NekDouble xmin, NekDouble xmax, NekDouble ymin=NekConstants::kNekUnsetDouble, NekDouble ymax=NekConstants::kNekUnsetDouble, NekDouble zmin=NekConstants::kNekUnsetDouble, NekDouble zmax=NekConstants::kNekUnsetDouble)
1D Non Evenly-spaced points for Single Mode analysis
bool CheckRange(Geometry2D &geom)
Check if goemetry is in range definition if activated.
Gauss Radau pinned at x=-1, .
void SetBasisKey(LibUtilities::ShapeType shape, LibUtilities::BasisKeyVector &keys, std::string var="DefaultVar")
Sets the basis key for all expansions of the given shape.
ExpansionShPtr GetExpansion(GeometrySharedPtr geom, const std::string variable="DefaultVar")
boost::shared_ptr< TetGeom > TetGeomSharedPtr
boost::shared_ptr< TriGeom > TriGeomSharedPtr
Class for operating on FLD files.
HexGeomSharedPtr AddHexahedron(QuadGeomSharedPtr qfaces[HexGeom::kNqfaces])
InputIterator find(InputIterator first, InputIterator last, InputIterator startingpoint, const EqualityComparable &value)
ExpansionMapShPtr SetUpExpansionMap(void)
void ReadExpansions(const std::string &infilename)
Read the expansions given the XML file path.
static const int kNqfaces
int GetNumModes() const
Returns the order of the basis.
const std::string kExpansionTypeStr[]
static const int kNtfaces
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
boost::shared_ptr< Geometry > GeometrySharedPtr
void SetExpansionsToEvenlySpacedPoints(int npoints=0)
Sets expansions to have equispaced points.
Describes the specification for a Basis.
LibUtilities::ShapeType GetShapeType(void)
boost::shared_ptr< PointGeom > PointGeomSharedPtr
1D Gauss-Lobatto-Legendre quadrature points
std::map< int, ExpansionShPtr > ExpansionMap
TetGeomSharedPtr AddTetrahedron(TriGeomSharedPtr tfaces[TetGeom::kNtfaces])
std::map< int, ExpansionShPtr >::iterator ExpansionMapIter