47 #include <boost/archive/iterators/base64_from_binary.hpp>    48 #include <boost/archive/iterators/binary_from_base64.hpp>    49 #include <boost/archive/iterators/transform_width.hpp>    50 #include <boost/algorithm/string/predicate.hpp>    51 #include <boost/format.hpp>    52 #include <boost/iostreams/copy.hpp>    53 #include <boost/iostreams/filter/zlib.hpp>    54 #include <boost/iostreams/filtering_stream.hpp>    55 #include <boost/make_shared.hpp>    62 namespace SpatialDomains
    65 std::string MeshGraphXmlCompressed::className =
    67         "XmlCompressed", MeshGraphXmlCompressed::create,
    68         "IO with Xml geometry");
    70 void MeshGraphXmlCompressed::ReadVertices()
    73     TiXmlElement *element = m_xmlGeom->FirstChildElement(
"VERTEX");
    74     ASSERTL0(element, 
"Unable to find mesh VERTEX tag in file.");
    81     const char *xscal = element->Attribute(
"XSCALE");
    88         std::string xscalstr = xscal;
    90         xscale               = expEvaluator.
Evaluate(expr_id);
    93     const char *yscal = element->Attribute(
"YSCALE");
   100         std::string yscalstr = yscal;
   102         yscale               = expEvaluator.
Evaluate(expr_id);
   105     const char *zscal = element->Attribute(
"ZSCALE");
   112         std::string zscalstr = zscal;
   114         zscale               = expEvaluator.
Evaluate(expr_id);
   122     const char *xmov = element->Attribute(
"XMOVE");
   129         std::string xmovstr = xmov;
   131         xmove               = expEvaluator.
Evaluate(expr_id);
   134     const char *ymov = element->Attribute(
"YMOVE");
   141         std::string ymovstr = ymov;
   143         ymove               = expEvaluator.
Evaluate(expr_id);
   146     const char *zmov = element->Attribute(
"ZMOVE");
   153         std::string zmovstr = zmov;
   155         zmove               = expEvaluator.
Evaluate(expr_id);
   159     element->QueryStringAttribute(
"COMPRESSED", &IsCompressed);
   161     if (boost::iequals(IsCompressed,
   165         TiXmlNode *vertexChild = element->FirstChild();
   166         ASSERTL0(vertexChild, 
"Unable to extract the data from the compressed "   169         std::string vertexStr;
   170         if (vertexChild->Type() == TiXmlNode::TINYXML_TEXT)
   172             vertexStr += vertexChild->ToText()->ValueStr();
   175         std::vector<SpatialDomains::MeshVertex> vertData;
   181         for (
int i = 0; i < vertData.size(); ++i)
   183             indx = vertData[i].id;
   184             xval = vertData[i].x;
   185             yval = vertData[i].y;
   186             zval = vertData[i].z;
   188             xval = xval * xscale + xmove;
   189             yval = yval * yscale + ymove;
   190             zval = zval * zscale + zmove;
   193                 m_spaceDimension, indx, xval, yval, zval));
   195             vert->SetGlobalID(indx);
   196             m_vertSet[indx] = vert;
   201         ASSERTL0(
false, 
"Compressed formats do not match. Expected :" +
   203                             " but got " + std::string(IsCompressed));
   207 void MeshGraphXmlCompressed::ReadCurves()
   211     TiXmlElement *element = m_xmlGeom->FirstChildElement(
"VERTEX");
   212     ASSERTL0(element, 
"Unable to find mesh VERTEX tag in file.");
   217     const char *xscal = element->Attribute(
"XSCALE");
   224         std::string xscalstr = xscal;
   226         xscale               = expEvaluator.
Evaluate(expr_id);
   229     const char *yscal = element->Attribute(
"YSCALE");
   236         std::string yscalstr = yscal;
   238         yscale               = expEvaluator.
Evaluate(expr_id);
   241     const char *zscal = element->Attribute(
"ZSCALE");
   248         std::string zscalstr = zscal;
   250         zscale               = expEvaluator.
Evaluate(expr_id);
   258     const char *xmov = element->Attribute(
"XMOVE");
   265         std::string xmovstr = xmov;
   267         xmove               = expEvaluator.
Evaluate(expr_id);
   270     const char *ymov = element->Attribute(
"YMOVE");
   277         std::string ymovstr = ymov;
   279         ymove               = expEvaluator.
Evaluate(expr_id);
   282     const char *zmov = element->Attribute(
"ZMOVE");
   289         std::string zmovstr = zmov;
   291         zmove               = expEvaluator.
Evaluate(expr_id);
   295     TiXmlElement *field = m_xmlGeom->FirstChildElement(
"CURVED");
   303     field->QueryStringAttribute(
"COMPRESSED", &IsCompressed);
   305     if (IsCompressed.size() == 0)
   312     ASSERTL0(boost::iequals(IsCompressed,
   314              "Compressed formats do not match. Expected :" +
   316                  boost::lexical_cast<std::string>(IsCompressed));
   318     std::vector<SpatialDomains::MeshCurvedInfo> edginfo;
   319     std::vector<SpatialDomains::MeshCurvedInfo> facinfo;
   323     TiXmlElement *x = field->FirstChildElement();
   326         const char *entitytype = x->Value();
   328         if (boost::iequals(entitytype, 
"E"))
   332             TiXmlNode *child = x->FirstChild();
   334             if (child->Type() == TiXmlNode::TINYXML_TEXT)
   336                 elmtStr += child->ToText()->ValueStr();
   342         else if (boost::iequals(entitytype, 
"F"))
   346             TiXmlNode *child = x->FirstChild();
   348             if (child->Type() == TiXmlNode::TINYXML_TEXT)
   350                 elmtStr += child->ToText()->ValueStr();
   356         else if (boost::iequals(entitytype, 
"DATAPOINTS"))
   360                      "Failed to get ID from PTS section");
   366             TiXmlElement *DataIdx = x->FirstChildElement(
"INDEX");
   367             ASSERTL0(DataIdx, 
"Cannot read data index tag in compressed "   370             TiXmlNode *child = DataIdx->FirstChild();
   371             if (child->Type() == TiXmlNode::TINYXML_TEXT)
   373                 elmtStr = child->ToText()->ValueStr();
   379             TiXmlElement *DataPts = x->FirstChildElement(
"POINTS");
   380             ASSERTL0(DataPts, 
"Cannot read data pts tag in compressed "   383             child = DataPts->FirstChild();
   384             if (child->Type() == TiXmlNode::TINYXML_TEXT)
   386                 elmtStr = child->ToText()->ValueStr();
   394             ASSERTL0(
false, 
"Unknown tag in curved section");
   396         x = x->NextSiblingElement();
   400     for (
int i = 0; i < cpts.
pts.size(); ++i)
   402         cpts.
pts[i].x = xscale * cpts.
pts[i].x + xmove;
   403         cpts.
pts[i].y = yscale * cpts.
pts[i].y + ymove;
   404         cpts.
pts[i].z = zscale * cpts.
pts[i].z + zmove;
   407     for (
int i = 0; i < edginfo.size(); ++i)
   409         int edgeid = edginfo[i].entityid;
   416         int offset = edginfo[i].ptoffset;
   417         for (
int j = 0; j < edginfo[i].npoints; ++j)
   419             int idx = cpts.
index[offset + j];
   422                 m_spaceDimension, edginfo[i].
id, cpts.
pts[idx].x,
   423                 cpts.
pts[idx].y, cpts.
pts[idx].z));
   424             curve->m_points.push_back(vert);
   427         m_curvedEdges[edgeid] = curve;
   430     for (
int i = 0; i < facinfo.size(); ++i)
   432         int faceid = facinfo[i].entityid;
   438         int offset = facinfo[i].ptoffset;
   439         for (
int j = 0; j < facinfo[i].npoints; ++j)
   441             int idx = cpts.
index[offset + j];
   444                 m_spaceDimension, facinfo[i].
id, cpts.
pts[idx].x,
   445                 cpts.
pts[idx].y, cpts.
pts[idx].z));
   446             curve->m_points.push_back(vert);
   449         m_curvedFaces[faceid] = curve;
   453 void MeshGraphXmlCompressed::ReadEdges()
   455     CurveMap::iterator it;
   458     TiXmlElement *field = m_xmlGeom->FirstChildElement(
"EDGE");
   460     ASSERTL0(field, 
"Unable to find EDGE tag in file.");
   463     field->QueryStringAttribute(
"COMPRESSED", &IsCompressed);
   465     ASSERTL0(boost::iequals(IsCompressed,
   467              "Compressed formats do not match. Expected :" +
   469                  std::string(IsCompressed));
   471     TiXmlNode *edgeChild = field->FirstChild();
   472     ASSERTL0(edgeChild, 
"Unable to extract the data from "   473                         "the compressed edge tag.");
   476     if (edgeChild->Type() == TiXmlNode::TINYXML_TEXT)
   478         edgeStr += edgeChild->ToText()->ValueStr();
   481     std::vector<SpatialDomains::MeshEdge> edgeData;
   485     for (
int i = 0; i < edgeData.size(); ++i)
   487         indx                           = edgeData[i].id;
   489                                           GetVertex(edgeData[i].v1)};
   492         it = m_curvedEdges.find(indx);
   493         if (it == m_curvedEdges.end())
   496                 indx, m_spaceDimension, vertices);
   501                 indx, m_spaceDimension, vertices, it->second);
   503         m_segGeoms[indx] = edge;
   507 void MeshGraphXmlCompressed::ReadFaces()
   510     TiXmlElement *field = m_xmlGeom->FirstChildElement(
"FACE");
   512     ASSERTL0(field, 
"Unable to find FACE tag in file.");
   518     TiXmlElement *element = field->FirstChildElement();
   519     CurveMap::iterator it;
   523         std::string elementType(element->ValueStr());
   525         ASSERTL0(elementType == 
"Q" || elementType == 
"T",
   526                  (std::string(
"Unknown 3D face type: ") + elementType).c_str());
   529         element->QueryStringAttribute(
"COMPRESSED", &IsCompressed);
   532             boost::iequals(IsCompressed,
   534             "Compressed formats do not match. Expected :" +
   536                 std::string(IsCompressed));
   539         TiXmlNode *faceChild = element->FirstChild();
   540         ASSERTL0(faceChild, 
"Unable to extract the data from "   541                             "the compressed face tag.");
   544         if (faceChild->Type() == TiXmlNode::TINYXML_TEXT)
   546             faceStr += faceChild->ToText()->ValueStr();
   550         if (elementType == 
"T")
   552             std::vector<SpatialDomains::MeshTri> faceData;
   556             for (
int i = 0; i < faceData.size(); ++i)
   558                 indx = faceData[i].id;
   561                 it = m_curvedFaces.find(indx);
   565                     GetSegGeom(faceData[i].e[0]), GetSegGeom(faceData[i].e[1]),
   566                     GetSegGeom(faceData[i].e[2])};
   569                 if (it == m_curvedFaces.end())
   577                         indx, edges, it->second);
   579                 trigeom->SetGlobalID(indx);
   580                 m_triGeoms[indx] = trigeom;
   583         else if (elementType == 
"Q")
   585             std::vector<SpatialDomains::MeshQuad> faceData;
   589             for (
int i = 0; i < faceData.size(); ++i)
   591                 indx = faceData[i].id;
   594                 it = m_curvedFaces.find(indx);
   598                     GetSegGeom(faceData[i].e[0]), GetSegGeom(faceData[i].e[1]),
   599                     GetSegGeom(faceData[i].e[2]), GetSegGeom(faceData[i].e[3])};
   602                 if (it == m_curvedFaces.end())
   610                         indx, edges, it->second);
   612                 quadgeom->SetGlobalID(indx);
   613                 m_quadGeoms[indx] = quadgeom;
   617         element = element->NextSiblingElement();
   621 void MeshGraphXmlCompressed::ReadElements1D()
   623     TiXmlElement *field = NULL;
   626     field = m_xmlGeom->FirstChildElement(
"ELEMENT");
   628     ASSERTL0(field, 
"Unable to find ELEMENT tag in file.");
   633     TiXmlElement *segment = field->FirstChildElement(
"S");
   634     CurveMap::iterator it;
   639         segment->QueryStringAttribute(
"COMPRESSED", &IsCompressed);
   641             boost::iequals(IsCompressed,
   643             "Compressed formats do not match. Expected :" +
   645                 std::string(IsCompressed));
   648         TiXmlNode *child = segment->FirstChild();
   649         ASSERTL0(child, 
"Unable to extract the data from "   650                         "the compressed face tag.");
   653         if (child->Type() == TiXmlNode::TINYXML_TEXT)
   655             str += child->ToText()->ValueStr();
   660         std::vector<SpatialDomains::MeshEdge> data;
   663         for (
int i = 0; i < data.size(); ++i)
   668             it = m_curvedEdges.find(indx);
   671                                               GetVertex(data[i].v1)};
   674             if (it == m_curvedEdges.end())
   677                     indx, m_spaceDimension, vertices);
   678                 seg->SetGlobalID(indx); 
   683                     indx, m_spaceDimension, vertices, it->second);
   684                 seg->SetGlobalID(indx); 
   686             seg->SetGlobalID(indx);
   687             m_segGeoms[indx] = seg;
   690         segment = segment->NextSiblingElement(
"S");
   694 void MeshGraphXmlCompressed::ReadElements2D()
   697     TiXmlElement *field = m_xmlGeom->FirstChildElement(
"ELEMENT");
   699     ASSERTL0(field, 
"Unable to find ELEMENT tag in file.");
   702     CurveMap::iterator it;
   707     TiXmlElement *element = field->FirstChildElement();
   711         std::string elementType(element->ValueStr());
   714             elementType == 
"Q" || elementType == 
"T",
   715             (std::string(
"Unknown 2D element type: ") + elementType).c_str());
   718         element->QueryStringAttribute(
"COMPRESSED", &IsCompressed);
   721             boost::iequals(IsCompressed,
   723             "Compressed formats do not match. Expected :" +
   725                 std::string(IsCompressed));
   728         TiXmlNode *faceChild = element->FirstChild();
   729         ASSERTL0(faceChild, 
"Unable to extract the data from "   730                             "the compressed face tag.");
   733         if (faceChild->Type() == TiXmlNode::TINYXML_TEXT)
   735             faceStr += faceChild->ToText()->ValueStr();
   739         if (elementType == 
"T")
   741             std::vector<SpatialDomains::MeshTri> faceData;
   745             for (
int i = 0; i < faceData.size(); ++i)
   747                 indx = faceData[i].id;
   750                 it = m_curvedFaces.find(indx);
   754                     GetSegGeom(faceData[i].e[0]), GetSegGeom(faceData[i].e[1]),
   755                     GetSegGeom(faceData[i].e[2])};
   758                 if (it == m_curvedFaces.end())
   766                         indx, edges, it->second);
   768                 trigeom->SetGlobalID(indx);
   769                 m_triGeoms[indx] = trigeom;
   772         else if (elementType == 
"Q")
   774             std::vector<SpatialDomains::MeshQuad> faceData;
   778             for (
int i = 0; i < faceData.size(); ++i)
   780                 indx = faceData[i].id;
   783                 it = m_curvedFaces.find(indx);
   787                     GetSegGeom(faceData[i].e[0]), GetSegGeom(faceData[i].e[1]),
   788                     GetSegGeom(faceData[i].e[2]), GetSegGeom(faceData[i].e[3])};
   791                 if (it == m_curvedFaces.end())
   799                         indx, edges, it->second);
   801                 quadgeom->SetGlobalID(indx);
   802                 m_quadGeoms[indx] = quadgeom;
   806         element = element->NextSiblingElement();
   810 void MeshGraphXmlCompressed::ReadElements3D()
   813     TiXmlElement *field = m_xmlGeom->FirstChildElement(
"ELEMENT");
   815     ASSERTL0(field, 
"Unable to find ELEMENT tag in file.");
   820     TiXmlElement *element = field->FirstChildElement();
   824         std::string elementType(element->ValueStr());
   828             elementType == 
"A" || elementType == 
"P" || elementType == 
"R" ||
   830             (std::string(
"Unknown 3D element type: ") + elementType).c_str());
   833         element->QueryStringAttribute(
"COMPRESSED", &IsCompressed);
   836             boost::iequals(IsCompressed,
   838             "Compressed formats do not match. Expected :" +
   840                 std::string(IsCompressed));
   843         TiXmlNode *child = element->FirstChild();
   844         ASSERTL0(child, 
"Unable to extract the data from "   845                         "the compressed face tag.");
   848         if (child->Type() == TiXmlNode::TINYXML_TEXT)
   850             str += child->ToText()->ValueStr();
   854         if (elementType == 
"A")
   856             std::vector<SpatialDomains::MeshTet> data;
   859             for (
int i = 0; i < data.size(); ++i)
   862                 for (
int j = 0; j < 4; ++j)
   865                     tfaces[j] = static_pointer_cast<
TriGeom>(face);
   870                 m_tetGeoms[indx] = tetgeom;
   871                 PopulateFaceToElMap(tetgeom, 4);
   874         else if (elementType == 
"P")
   876             std::vector<SpatialDomains::MeshPyr> data;
   879             for (
int i = 0; i < data.size(); ++i)
   884                 for (
int j = 0; j < 5; ++j)
   892                         std::stringstream errorstring;
   893                         errorstring << 
"Element " << indx
   894                                     << 
" has invalid face: " << j;
   895                         ASSERTL0(
false, errorstring.str().c_str());
   899                         faces[j] = static_pointer_cast<
TriGeom>(face);
   902                     else if (face->GetShapeType() ==
   905                         faces[j] = static_pointer_cast<
QuadGeom>(face);
   909                 ASSERTL0((Ntfaces == 4) && (Nqfaces == 1),
   910                          "Did not identify the correct number of "   911                          "triangular and quadrilateral faces for a "   917                 m_pyrGeoms[indx] = pyrgeom;
   918                 PopulateFaceToElMap(pyrgeom, 5);
   921         else if (elementType == 
"R")
   923             std::vector<SpatialDomains::MeshPrism> data;
   926             for (
int i = 0; i < data.size(); ++i)
   931                 for (
int j = 0; j < 5; ++j)
   938                         std::stringstream errorstring;
   939                         errorstring << 
"Element " << indx
   940                                     << 
" has invalid face: " << j;
   941                         ASSERTL0(
false, errorstring.str().c_str());
   945                         faces[j] = static_pointer_cast<
TriGeom>(face);
   948                     else if (face->GetShapeType() ==
   951                         faces[j] = static_pointer_cast<
QuadGeom>(face);
   955                 ASSERTL0((Ntfaces == 2) && (Nqfaces == 3),
   956                          "Did not identify the correct number of "   957                          "triangular and quadrilateral faces for a "   963                 m_prismGeoms[indx] = prismgeom;
   964                 PopulateFaceToElMap(prismgeom, 5);
   967         else if (elementType == 
"H")
   969             std::vector<SpatialDomains::MeshHex> data;
   973             for (
int i = 0; i < data.size(); ++i)
   976                 for (
int j = 0; j < 6; ++j)
   979                     faces[j] = static_pointer_cast<
QuadGeom>(face);
   984                 m_hexGeoms[indx] = hexgeom;
   985                 PopulateFaceToElMap(hexgeom, 6);
   989         element = element->NextSiblingElement();
   993 void MeshGraphXmlCompressed::WriteVertices(TiXmlElement *geomTag,
   996     if (verts.size() == 0)
  1001     TiXmlElement *vertTag = 
new TiXmlElement(
"VERTEX");
  1003     vector<MeshVertex> vertInfo;
  1005     for (
auto &i : verts)
  1009         v.
x  = i.second->x();
  1010         v.
y  = i.second->y();
  1011         v.
z  = i.second->z();
  1012         vertInfo.push_back(v);
  1015     vertTag->SetAttribute(
"COMPRESSED",
  1017     vertTag->SetAttribute(
"BITSIZE",
  1023     vertTag->LinkEndChild(
new TiXmlText(vertStr));
  1025     geomTag->LinkEndChild(vertTag);
  1028 void MeshGraphXmlCompressed::WriteEdges(TiXmlElement *geomTag,
  1031     if (edges.size() == 0)
  1036     TiXmlElement *edgeTag =
  1037         new TiXmlElement(m_meshDimension == 1 ? 
"S" : 
"EDGE");
  1039     vector<MeshEdge> edgeInfo;
  1041     for (
auto &i : edges)
  1045         e.
v0 = i.second->GetVid(0);
  1046         e.
v1 = i.second->GetVid(1);
  1047         edgeInfo.push_back(e);
  1053     edgeTag->SetAttribute(
"COMPRESSED",
  1055     edgeTag->SetAttribute(
"BITSIZE",
  1058     edgeTag->LinkEndChild(
new TiXmlText(edgeStr));
  1060     if (m_meshDimension == 1)
  1062         TiXmlElement *tmp = 
new TiXmlElement(
"ELEMENT");
  1063         tmp->LinkEndChild(edgeTag);
  1064         geomTag->LinkEndChild(tmp);
  1068         geomTag->LinkEndChild(edgeTag);
  1072 void MeshGraphXmlCompressed::WriteTris(TiXmlElement *faceTag, 
TriGeomMap &tris)
  1074     if (tris.size() == 0)
  1081     vector<MeshTri> triInfo;
  1083     for (
auto &i : tris)
  1087         t.
e[0] = i.second->GetEid(0);
  1088         t.
e[1] = i.second->GetEid(1);
  1089         t.
e[2] = i.second->GetEid(2);
  1090         triInfo.push_back(t);
  1093     TiXmlElement *x = 
new TiXmlElement(tag);
  1097     x->SetAttribute(
"COMPRESSED",
  1101     x->LinkEndChild(
new TiXmlText(triStr));
  1103     faceTag->LinkEndChild(x);
  1106 void MeshGraphXmlCompressed::WriteQuads(TiXmlElement *faceTag,
  1109     if (quads.size() == 0)
  1116     vector<MeshQuad> quadInfo;
  1118     for (
auto &i : quads)
  1122         q.
e[0] = i.second->GetEid(0);
  1123         q.
e[1] = i.second->GetEid(1);
  1124         q.
e[2] = i.second->GetEid(2);
  1125         q.
e[3] = i.second->GetEid(3);
  1126         quadInfo.push_back(q);
  1129     TiXmlElement *x = 
new TiXmlElement(tag);
  1133     x->SetAttribute(
"COMPRESSED",
  1137     x->LinkEndChild(
new TiXmlText(quadStr));
  1139     faceTag->LinkEndChild(x);
  1142 void MeshGraphXmlCompressed::WriteHexs(TiXmlElement *elmtTag, 
HexGeomMap &hexs)
  1144     if (hexs.size() == 0)
  1151     vector<MeshHex> elementInfo;
  1153     for (
auto &i : hexs)
  1157         e.
f[0] = i.second->GetFid(0);
  1158         e.
f[1] = i.second->GetFid(1);
  1159         e.
f[2] = i.second->GetFid(2);
  1160         e.
f[3] = i.second->GetFid(3);
  1161         e.
f[4] = i.second->GetFid(4);
  1162         e.
f[5] = i.second->GetFid(5);
  1163         elementInfo.push_back(e);
  1166     TiXmlElement *x = 
new TiXmlElement(tag);
  1170     x->SetAttribute(
"COMPRESSED",
  1174     x->LinkEndChild(
new TiXmlText(elStr));
  1176     elmtTag->LinkEndChild(x);
  1179 void MeshGraphXmlCompressed::WritePrisms(TiXmlElement *elmtTag,
  1182     if (pris.size() == 0)
  1189     vector<MeshPrism> elementInfo;
  1191     for (
auto &i : pris)
  1195         e.
f[0] = i.second->GetFid(0);
  1196         e.
f[1] = i.second->GetFid(1);
  1197         e.
f[2] = i.second->GetFid(2);
  1198         e.
f[3] = i.second->GetFid(3);
  1199         e.
f[4] = i.second->GetFid(4);
  1200         elementInfo.push_back(e);
  1203     TiXmlElement *x = 
new TiXmlElement(tag);
  1207     x->SetAttribute(
"COMPRESSED",
  1211     x->LinkEndChild(
new TiXmlText(elStr));
  1213     elmtTag->LinkEndChild(x);
  1216 void MeshGraphXmlCompressed::WritePyrs(TiXmlElement *elmtTag, 
PyrGeomMap &pyrs)
  1218     if (pyrs.size() == 0)
  1225     vector<MeshPyr> elementInfo;
  1227     for (
auto &i : pyrs)
  1231         e.
f[0] = i.second->GetFid(0);
  1232         e.
f[1] = i.second->GetFid(1);
  1233         e.
f[2] = i.second->GetFid(2);
  1234         e.
f[3] = i.second->GetFid(3);
  1235         e.
f[4] = i.second->GetFid(4);
  1236         elementInfo.push_back(e);
  1239     TiXmlElement *x = 
new TiXmlElement(tag);
  1243     x->SetAttribute(
"COMPRESSED",
  1247     x->LinkEndChild(
new TiXmlText(elStr));
  1249     elmtTag->LinkEndChild(x);
  1252 void MeshGraphXmlCompressed::WriteTets(TiXmlElement *elmtTag, 
TetGeomMap &tets)
  1254     if (tets.size() == 0)
  1261     vector<MeshTet> elementInfo;
  1263     for (
auto &i : tets)
  1267         e.
f[0] = i.second->GetFid(0);
  1268         e.
f[1] = i.second->GetFid(1);
  1269         e.
f[2] = i.second->GetFid(2);
  1270         e.
f[3] = i.second->GetFid(3);
  1271         elementInfo.push_back(e);
  1274     TiXmlElement *x = 
new TiXmlElement(tag);
  1278     x->SetAttribute(
"COMPRESSED",
  1282     x->LinkEndChild(
new TiXmlText(elStr));
  1284     elmtTag->LinkEndChild(x);
  1287 void MeshGraphXmlCompressed::WriteCurves(TiXmlElement *geomTag, 
CurveMap &edges,
  1290     if (edges.size() == 0 && faces.size() == 0)
  1295     TiXmlElement *curveTag = 
new TiXmlElement(
"CURVED");
  1297     vector<MeshCurvedInfo> edgeInfo;
  1298     vector<MeshCurvedInfo> faceInfo;
  1306     for (
auto &i : edges)
  1309         cinfo.
id       = edgeCnt++;
  1311         cinfo.
npoints  = i.second->m_points.size();
  1312         cinfo.
ptype    = i.second->m_ptype;
  1316         edgeInfo.push_back(cinfo);
  1318         for (
int j = 0; j < i.second->m_points.size(); j++)
  1322             v.
x  = i.second->m_points[j]->x();
  1323             v.
y  = i.second->m_points[j]->y();
  1324             v.
z  = i.second->m_points[j]->z();
  1325             curvedPts.
pts.push_back(v);
  1326             curvedPts.
index.push_back(newIdx);
  1332     for (
auto &i : faces)
  1335         cinfo.
id       = faceCnt++;
  1337         cinfo.
npoints  = i.second->m_points.size();
  1338         cinfo.
ptype    = i.second->m_ptype;
  1342         faceInfo.push_back(cinfo);
  1344         for (
int j = 0; j < i.second->m_points.size(); j++)
  1348             v.
x  = i.second->m_points[j]->x();
  1349             v.
y  = i.second->m_points[j]->y();
  1350             v.
z  = i.second->m_points[j]->z();
  1351             curvedPts.
pts.push_back(v);
  1352             curvedPts.
index.push_back(newIdx);
  1358     curveTag->SetAttribute(
"COMPRESSED",
  1360     curveTag->SetAttribute(
"BITSIZE",
  1363     if (edgeInfo.size())
  1365         TiXmlElement *x = 
new TiXmlElement(
"E");
  1369         x->LinkEndChild(
new TiXmlText(dataStr));
  1370         curveTag->LinkEndChild(x);
  1373     if (faceInfo.size())
  1375         TiXmlElement *x = 
new TiXmlElement(
"F");
  1379         x->LinkEndChild(
new TiXmlText(dataStr));
  1380         curveTag->LinkEndChild(x);
  1383     if (edgeInfo.size() || faceInfo.size())
  1385         TiXmlElement *x = 
new TiXmlElement(
"DATAPOINTS");
  1386         x->SetAttribute(
"ID", curvedPts.
id);
  1387         TiXmlElement *subx = 
new TiXmlElement(
"INDEX");
  1391         subx->LinkEndChild(
new TiXmlText(dataStr));
  1392         x->LinkEndChild(subx);
  1394         subx = 
new TiXmlElement(
"POINTS");
  1397         subx->LinkEndChild(
new TiXmlText(dataStr));
  1398         x->LinkEndChild(subx);
  1399         curveTag->LinkEndChild(x);
  1402     geomTag->LinkEndChild(curveTag);
 
#define ASSERTL0(condition, msg)
std::vector< NekInt64 > index
id of this Point set 
int DefineFunction(const std::string &vlist, const std::string &expr)
Defines a function for the purposes of evaluation. 
std::shared_ptr< Geometry2D > Geometry2DSharedPtr
NekInt64 entityid
Id of this curved information. 
std::shared_ptr< TetGeom > TetGeomSharedPtr
std::unordered_map< int, CurveSharedPtr > CurveMap
General purpose memory allocation routines with the ability to allocate from thread specific memory p...
NekDouble Evaluate(const int id)
Evaluate a function which depends only on constants and/or parameters. 
std::shared_ptr< QuadGeom > QuadGeomSharedPtr
std::vector< MeshVertex > pts
mapping to access pts value. 
std::map< int, PrismGeomSharedPtr > PrismGeomMap
std::map< int, PyrGeomSharedPtr > PyrGeomMap
NekInt64 ptype
point offset of data entry for this curve 
std::string GetCompressString(void)
std::map< int, TetGeomSharedPtr > TetGeomMap
std::map< int, TriGeomSharedPtr > TriGeomMap
NekInt64 ptoffset
the id of point data map (currently always 0 since we are using just one set). 
std::shared_ptr< TriGeom > TriGeomSharedPtr
MeshGraphFactory & GetMeshGraphFactory()
std::map< int, SegGeomSharedPtr > SegGeomMap
std::shared_ptr< PointGeom > PointGeomSharedPtr
NekInt64 npoints
The entity id corresponding to the global edge/curve. 
Interpreter class for the evaluation of mathematical expressions. 
int ZlibEncodeToBase64Str(std::vector< T > &in, std::string &out64)
std::shared_ptr< PyrGeom > PyrGeomSharedPtr
std::string GetBitSizeStr(void)
NekInt64 ptid
The number of points in this curved entity. 
std::map< int, QuadGeomSharedPtr > QuadGeomMap
std::shared_ptr< HexGeom > HexGeomSharedPtr
std::shared_ptr< Curve > CurveSharedPtr
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory. 
std::shared_ptr< PrismGeom > PrismGeomSharedPtr
std::map< int, PointGeomSharedPtr > PointGeomMap
std::shared_ptr< SegGeom > SegGeomSharedPtr
std::map< int, HexGeomSharedPtr > HexGeomMap
int ZlibDecodeFromBase64Str(std::string &in64, std::vector< T > &out)