58#include <boost/archive/iterators/base64_from_binary.hpp>
59#include <boost/archive/iterators/binary_from_base64.hpp>
60#include <boost/archive/iterators/transform_width.hpp>
61#include <boost/iostreams/copy.hpp>
62#include <boost/iostreams/filter/zlib.hpp>
63#include <boost/iostreams/filtering_stream.hpp>
65#include <boost/geometry/geometry.hpp>
66#include <boost/geometry/index/rtree.hpp>
67namespace bg = boost::geometry;
73namespace SpatialDomains
87 typedef bg::model::point<NekDouble, 3, bg::cs::cartesian>
BgPoint;
88 typedef bg::model::box<BgPoint>
BgBox;
91 bg::index::rtree<BgRtreeValue, bg::index::rstar<16, 4>>
m_bgTree;
95 std::array<NekDouble, 6> minMax = geom->GetBoundingBox();
96 BgPoint ptMin(minMax[0], minMax[1], minMax[2]);
97 BgPoint ptMax(minMax[3], minMax[4], minMax[5]);
99 std::make_pair(
BgBox(ptMin, ptMax), geom->GetGlobalID()));
122 ASSERTL0(comm.get(),
"Communication not initialised.");
127 const bool isRoot = comm->TreatAsRankZero();
128 std::string geomType;
133 session->InitSession();
136 geomType = session->GetGeometryType();
139 std::vector<char> v(geomType.c_str(),
140 geomType.c_str() + geomType.length());
142 size_t length = v.size();
143 comm->Bcast(length, 0);
149 comm->Bcast(length, 0);
151 std::vector<char> v(length);
154 geomType = std::string(v.begin(), v.end());
167 if (partitionedGraph && geomType ==
"HDF5")
169 mesh->SetPartition(partitionedGraph);
172 mesh->PartitionMesh(session);
175 mesh->ReadGeometry(rng, fillGraph);
310 std::vector<GeomRTree::BgRtreeValue> matches;
312 p->GetCoords(x, y,
z);
318 std::back_inserter(matches));
320 std::vector<int> vals(matches.size());
322 for (
int i = 0; i < matches.size(); ++i)
324 vals[i] = matches[i].second;
356 bool returnval =
true;
368 for (
int i = 0; i < nverts; ++i)
371 if (xval < m_domainRange->m_xmin)
385 if ((ncnt_up == nverts) || (ncnt_low == nverts))
396 for (
int i = 0; i < nverts; ++i)
399 if (yval < m_domainRange->m_ymin)
413 if ((ncnt_up == nverts) || (ncnt_low == nverts))
427 for (
int i = 0; i < nverts; ++i)
431 if (zval < m_domainRange->m_zmin)
445 if ((ncnt_up == nverts) || (ncnt_low == nverts))
458 bool returnval =
true;
469 for (
int i = 0; i < nverts; ++i)
472 if (xval < m_domainRange->m_xmin)
486 if ((ncnt_up == nverts) || (ncnt_low == nverts))
496 for (
int i = 0; i < nverts; ++i)
499 if (yval < m_domainRange->m_ymin)
513 if ((ncnt_up == nverts) || (ncnt_low == nverts))
523 for (
int i = 0; i < nverts; ++i)
527 if (zval < m_domainRange->m_zmin)
541 if ((ncnt_up == nverts) || (ncnt_low == nverts))
569 if (whichItem >= 0 &&
586 std::ostringstream errStream;
587 errStream <<
"Unable to access composite item [" << whichComposite
588 <<
"][" << whichItem <<
"].";
590 std::string testStr = errStream.str();
605 vector<unsigned int> seqVector;
610 parseGood && !seqVector.empty(),
611 (std::string(
"Unable to read composite index range: ") + compositeStr)
614 vector<unsigned int> addedVector;
616 for (
auto iter = seqVector.begin(); iter != seqVector.end(); ++iter)
621 if (
std::find(addedVector.begin(), addedVector.end(), *iter) ==
633 addedVector.push_back(*iter);
635 "Composite not found.");
640 compositeVector[*iter] = composite;
645 (
"Undefined composite: " + std::to_string(*iter)));
669 "Unable to find expansion vector definition for field: ") +
679 "Using Default variable expansion definition for field: ") +
691 const std::string variable)
696 auto iter = expansionMap->find(geom->GetGlobalID());
697 ASSERTL1(iter != expansionMap->end(),
698 "Could not find expansion " +
699 boost::lexical_cast<string>(geom->GetGlobalID()) +
700 " in expansion for variable " + variable);
708 std::vector<LibUtilities::FieldDefinitionsSharedPtr> &fielddef)
710 int i, j, k, cnt, id;
717 for (i = 0; i < fielddef.size(); ++i)
719 for (j = 0; j < fielddef[i]->m_fields.size(); ++j)
721 std::string field = fielddef[i]->m_fields[j];
739 for (i = 0; i < fielddef.size(); ++i)
742 std::vector<std::string> fields = fielddef[i]->m_fields;
743 std::vector<unsigned int> nmodes = fielddef[i]->m_numModes;
744 std::vector<LibUtilities::BasisType> basis = fielddef[i]->m_basis;
745 bool pointDef = fielddef[i]->m_pointsDef;
746 bool numPointDef = fielddef[i]->m_numPointsDef;
749 std::vector<unsigned int> npoints = fielddef[i]->m_numPoints;
750 std::vector<LibUtilities::PointsType> points = fielddef[i]->m_points;
752 bool UniOrder = fielddef[i]->m_uniOrder;
754 for (j = 0; j < fielddef[i]->m_elementIDs.size(); ++j)
758 id = fielddef[i]->m_elementIDs[j];
760 switch (fielddef[i]->m_shapeType)
764 if (
m_segGeoms.count(fielddef[i]->m_elementIDs[j]) == 0)
770 cnt += fielddef[i]->m_numHomogeneousDir;
774 geom =
m_segGeoms[fielddef[i]->m_elementIDs[j]];
779 if (numPointDef && pointDef)
785 else if (!numPointDef && pointDef)
791 else if (numPointDef && !pointDef)
803 cnt += fielddef[i]->m_numHomogeneousDir;
805 bkeyvec.push_back(bkey);
810 if (
m_triGeoms.count(fielddef[i]->m_elementIDs[j]) == 0)
816 cnt += fielddef[i]->m_numHomogeneousDir;
820 geom =
m_triGeoms[fielddef[i]->m_elementIDs[j]];
824 if (numPointDef && pointDef)
830 else if (!numPointDef && pointDef)
836 else if (numPointDef && !pointDef)
844 bkeyvec.push_back(bkey);
847 nmodes[cnt + 1], LibUtilities::eGaussRadauMAlpha1Beta0);
848 if (numPointDef && pointDef)
854 else if (!numPointDef && pointDef)
860 else if (numPointDef && !pointDef)
864 LibUtilities::eGaussRadauMAlpha1Beta0);
869 bkeyvec.push_back(bkey1);
874 cnt += fielddef[i]->m_numHomogeneousDir;
880 if (
m_quadGeoms.count(fielddef[i]->m_elementIDs[j]) == 0)
886 cnt += fielddef[i]->m_numHomogeneousDir;
893 for (
int b = 0; b < 2; ++b)
899 if (numPointDef && pointDef)
902 npoints[cnt + b], points[b]);
905 else if (!numPointDef && pointDef)
908 nmodes[cnt + b] + 1, points[b]);
911 else if (numPointDef && !pointDef)
920 bkeyvec.push_back(bkey);
926 cnt += fielddef[i]->m_numHomogeneousDir;
933 k = fielddef[i]->m_elementIDs[j];
953 if (numPointDef && pointDef)
959 else if (!numPointDef && pointDef)
965 else if (numPointDef && !pointDef)
976 bkeyvec.push_back(bkey);
981 LibUtilities::eGaussRadauMAlpha1Beta0);
983 if (numPointDef && pointDef)
986 npoints[cnt + 1], points[1]);
989 else if (!numPointDef && pointDef)
992 nmodes[cnt + 1] + 1, points[1]);
995 else if (numPointDef && !pointDef)
999 LibUtilities::eGaussRadauMAlpha1Beta0);
1006 bkeyvec.push_back(bkey);
1012 LibUtilities::eGaussRadauMAlpha2Beta0);
1014 if (numPointDef && pointDef)
1017 npoints[cnt + 2], points[2]);
1020 else if (!numPointDef && pointDef)
1023 nmodes[cnt + 2] + 1, points[2]);
1026 else if (numPointDef && !pointDef)
1030 LibUtilities::eGaussRadauMAlpha1Beta0);
1037 bkeyvec.push_back(bkey);
1048 k = fielddef[i]->m_elementIDs[j];
1059 for (
int b = 0; b < 2; ++b)
1062 nmodes[cnt + b] + 1,
1065 if (numPointDef && pointDef)
1068 npoints[cnt + b], points[b]);
1071 else if (!numPointDef && pointDef)
1074 nmodes[cnt + b] + 1, points[b]);
1077 else if (numPointDef && !pointDef)
1087 bkeyvec.push_back(bkey);
1093 LibUtilities::eGaussRadauMAlpha1Beta0);
1095 if (numPointDef && pointDef)
1098 npoints[cnt + 2], points[2]);
1101 else if (!numPointDef && pointDef)
1104 nmodes[cnt + 2] + 1, points[2]);
1107 else if (numPointDef && !pointDef)
1117 bkeyvec.push_back(bkey);
1128 k = fielddef[i]->m_elementIDs[j];
1130 "Failed to find geometry with same global id");
1133 for (
int b = 0; b < 2; ++b)
1136 nmodes[cnt + b] + 1,
1139 if (numPointDef && pointDef)
1142 npoints[cnt + b], points[b]);
1145 else if (!numPointDef && pointDef)
1148 nmodes[cnt + b] + 1, points[b]);
1151 else if (numPointDef && !pointDef)
1161 bkeyvec.push_back(bkey);
1167 LibUtilities::eGaussRadauMAlpha2Beta0);
1169 if (numPointDef && pointDef)
1172 npoints[cnt + 2], points[2]);
1175 else if (!numPointDef && pointDef)
1178 nmodes[cnt + 2] + 1, points[2]);
1181 else if (numPointDef && !pointDef)
1191 bkeyvec.push_back(bkey);
1202 k = fielddef[i]->m_elementIDs[j];
1214 for (
int b = 0; b < 3; ++b)
1220 if (numPointDef && pointDef)
1223 npoints[cnt + b], points[b]);
1226 else if (!numPointDef && pointDef)
1229 nmodes[cnt + b] + 1, points[b]);
1232 else if (numPointDef && !pointDef)
1242 bkeyvec.push_back(bkey);
1252 ASSERTL0(
false,
"Need to set up for pyramid and prism 3D "
1257 for (k = 0; k < fields.size(); ++k)
1260 if ((*expansionMap).find(
id) != (*expansionMap).end())
1262 (*expansionMap)[id]->m_geomShPtr = geom;
1263 (*expansionMap)[id]->m_basisKeyVector = bkeyvec;
1274 std::vector<LibUtilities::FieldDefinitionsSharedPtr> &fielddef,
1275 std::vector<std::vector<LibUtilities::PointsType>> &pointstype)
1277 int i, j, k, cnt, id;
1284 for (i = 0; i < fielddef.size(); ++i)
1286 for (j = 0; j < fielddef[i]->m_fields.size(); ++j)
1288 std::string field = fielddef[i]->m_fields[j];
1306 for (i = 0; i < fielddef.size(); ++i)
1309 std::vector<std::string> fields = fielddef[i]->m_fields;
1310 std::vector<unsigned int> nmodes = fielddef[i]->m_numModes;
1311 std::vector<LibUtilities::BasisType> basis = fielddef[i]->m_basis;
1312 bool UniOrder = fielddef[i]->m_uniOrder;
1314 for (j = 0; j < fielddef[i]->m_elementIDs.size(); ++j)
1317 id = fielddef[i]->m_elementIDs[j];
1319 switch (fielddef[i]->m_shapeType)
1323 k = fielddef[i]->m_elementIDs[j];
1325 "Failed to find geometry with same global id.");
1334 cnt += fielddef[i]->m_numHomogeneousDir;
1336 bkeyvec.push_back(bkey);
1341 k = fielddef[i]->m_elementIDs[j];
1343 "Failed to find geometry with same global id.");
1345 for (
int b = 0; b < 2; ++b)
1351 bkeyvec.push_back(bkey);
1357 cnt += fielddef[i]->m_numHomogeneousDir;
1363 k = fielddef[i]->m_elementIDs[j];
1365 "Failed to find geometry with same global id");
1368 for (
int b = 0; b < 2; ++b)
1374 bkeyvec.push_back(bkey);
1380 cnt += fielddef[i]->m_numHomogeneousDir;
1386 k = fielddef[i]->m_elementIDs[j];
1388 "Failed to find geometry with same global id");
1391 for (
int b = 0; b < 3; ++b)
1397 bkeyvec.push_back(bkey);
1408 k = fielddef[i]->m_elementIDs[j];
1410 "Failed to find geometry with same global id");
1413 for (
int b = 0; b < 3; ++b)
1419 bkeyvec.push_back(bkey);
1430 k = fielddef[i]->m_elementIDs[j];
1432 "Failed to find geometry with same global id");
1435 for (
int b = 0; b < 3; ++b)
1441 bkeyvec.push_back(bkey);
1452 k = fielddef[i]->m_elementIDs[j];
1454 "Failed to find geometry with same global id");
1457 for (
int b = 0; b < 3; ++b)
1463 bkeyvec.push_back(bkey);
1473 ASSERTL0(
false,
"Need to set up for pyramid and prism 3D "
1478 for (k = 0; k < fields.size(); ++k)
1481 if ((*expansionMap).find(
id) != (*expansionMap).end())
1483 (*expansionMap)[id]->m_geomShPtr = geom;
1484 (*expansionMap)[id]->m_basisKeyVector = bkeyvec;
1502 for (
auto expIt = it->second->begin(); expIt != it->second->end();
1505 for (
int i = 0; i < expIt->second->m_basisKeyVector.size(); ++i)
1508 expIt->second->m_basisKeyVector[i];
1520 npts = max(npts, 2);
1526 expIt->second->m_basisKeyVector[i] = bkeynew;
1544 for (
auto expIt = it->second->begin(); expIt != it->second->end();
1547 for (
int i = 0; i < expIt->second->m_basisKeyVector.size(); ++i)
1550 expIt->second->m_basisKeyVector[i];
1559 expIt->second->m_basisKeyVector[i] = bkeynew;
1577 for (
auto expIt = it->second->begin(); expIt != it->second->end();
1580 for (
int i = 0; i < expIt->second->m_basisKeyVector.size(); ++i)
1583 expIt->second->m_basisKeyVector[i];
1590 expIt->second->m_basisKeyVector[i] = bkeynew;
1620 for (
auto elemIter = expansionMap->begin(); elemIter != expansionMap->end();
1623 if ((elemIter->second)->m_geomShPtr->GetShapeType() == shape)
1625 (elemIter->second)->m_basisKeyVector = keys;
1669 nummodes + quadoffset,
1673 returnval.push_back(bkey);
1679 nummodes + quadoffset,
1683 returnval.push_back(bkey);
1684 returnval.push_back(bkey);
1690 nummodes + quadoffset,
1694 returnval.push_back(bkey);
1695 returnval.push_back(bkey);
1696 returnval.push_back(bkey);
1702 nummodes + quadoffset,
1706 returnval.push_back(bkey);
1709 nummodes + quadoffset - 1,
1710 LibUtilities::eGaussRadauMAlpha1Beta0);
1714 returnval.push_back(bkey1);
1720 nummodes + quadoffset,
1724 returnval.push_back(bkey);
1727 nummodes + quadoffset - 1,
1728 LibUtilities::eGaussRadauMAlpha1Beta0);
1731 returnval.push_back(bkey1);
1736 nummodes + quadoffset - 1,
1737 LibUtilities::eGaussRadauMAlpha1Beta0);
1740 returnval.push_back(bkey2);
1745 nummodes + quadoffset - 1,
1746 LibUtilities::eGaussRadauMAlpha2Beta0);
1749 returnval.push_back(bkey2);
1756 nummodes + quadoffset,
1760 returnval.push_back(bkey);
1761 returnval.push_back(bkey);
1764 nummodes + quadoffset,
1765 LibUtilities::eGaussRadauMAlpha2Beta0);
1768 returnval.push_back(bkey1);
1774 nummodes + quadoffset,
1778 returnval.push_back(bkey);
1779 returnval.push_back(bkey);
1782 nummodes + quadoffset - 1,
1783 LibUtilities::eGaussRadauMAlpha1Beta0);
1786 returnval.push_back(bkey1);
1792 "Expansion not defined in switch for this shape");
1809 returnval.push_back(bkey);
1818 returnval.push_back(bkey);
1819 returnval.push_back(bkey);
1829 returnval.push_back(bkey);
1832 nummodes, LibUtilities::eGaussRadauMAlpha1Beta0);
1835 returnval.push_back(bkey1);
1845 returnval.push_back(bkey);
1846 returnval.push_back(bkey);
1847 returnval.push_back(bkey);
1853 "Expansion not defined in switch for this shape");
1871 returnval.push_back(bkey);
1881 returnval.push_back(bkey);
1882 returnval.push_back(bkey);
1892 returnval.push_back(bkey);
1893 returnval.push_back(bkey);
1894 returnval.push_back(bkey);
1900 "Expansion not defined in switch for this shape");
1918 returnval.push_back(bkey);
1928 returnval.push_back(bkey);
1931 nummodes, LibUtilities::eGaussRadauMAlpha1Beta0);
1935 returnval.push_back(bkey1);
1945 returnval.push_back(bkey);
1946 returnval.push_back(bkey);
1956 returnval.push_back(bkey);
1959 nummodes, LibUtilities::eGaussRadauMAlpha1Beta0);
1963 returnval.push_back(bkey1);
1966 nummodes, LibUtilities::eGaussRadauMAlpha2Beta0);
1974 "Expansion not defined in switch for this shape");
1992 returnval.push_back(bkey);
2002 returnval.push_back(bkey);
2003 returnval.push_back(bkey);
2013 returnval.push_back(bkey);
2014 returnval.push_back(bkey);
2015 returnval.push_back(bkey);
2021 "Expansion not defined in switch for this shape");
2038 returnval.push_back(bkey);
2047 returnval.push_back(bkey);
2048 returnval.push_back(bkey);
2057 returnval.push_back(bkey);
2058 returnval.push_back(bkey);
2059 returnval.push_back(bkey);
2065 "Expansion not defined in switch for this shape");
2082 returnval.push_back(bkey);
2091 returnval.push_back(bkey);
2092 returnval.push_back(bkey);
2101 returnval.push_back(bkey);
2102 returnval.push_back(bkey);
2103 returnval.push_back(bkey);
2109 "Expansion not defined in switch for this shape");
2126 returnval.push_back(bkey);
2135 returnval.push_back(bkey);
2136 returnval.push_back(bkey);
2145 returnval.push_back(bkey);
2146 returnval.push_back(bkey);
2147 returnval.push_back(bkey);
2153 "Expansion not defined in switch for this shape");
2170 returnval.push_back(bkey);
2179 returnval.push_back(bkey);
2180 returnval.push_back(bkey);
2189 returnval.push_back(bkey);
2190 returnval.push_back(bkey);
2191 returnval.push_back(bkey);
2197 "Expansion not defined in switch for this shape");
2214 returnval.push_back(bkey);
2223 returnval.push_back(bkey);
2224 returnval.push_back(bkey);
2233 returnval.push_back(bkey);
2234 returnval.push_back(bkey);
2235 returnval.push_back(bkey);
2241 "Expansion not defined in switch for this shape");
2258 returnval.push_back(bkey);
2264 returnval.push_back(bkey1);
2270 "Expansion not defined in switch for this shape");
2287 returnval.push_back(bkey1);
2293 returnval.push_back(bkey);
2299 "Expansion not defined in switch for this shape");
2316 returnval.push_back(bkey);
2322 returnval.push_back(bkey1);
2328 "Expansion not defined in switch for this shape");
2337 ASSERTL0(
false,
"Expansion type not defined");
2350 ExpansionType type_z,
const int nummodes_x,
const int nummodes_y,
2351 const int nummodes_z)
2361 ASSERTL0(
false,
"Homogeneous expansion not defined for this shape");
2367 ASSERTL0(
false,
"Homogeneous expansion not defined for this shape");
2381 returnval.push_back(bkey1);
2391 returnval.push_back(bkey1);
2401 returnval.push_back(bkey1);
2411 returnval.push_back(bkey1);
2421 returnval.push_back(bkey1);
2427 ASSERTL0(
false,
"Homogeneous expansion can be of Fourier "
2428 "or Chebyshev type only");
2441 returnval.push_back(bkey2);
2451 returnval.push_back(bkey2);
2461 returnval.push_back(bkey2);
2471 returnval.push_back(bkey2);
2481 returnval.push_back(bkey2);
2487 ASSERTL0(
false,
"Homogeneous expansion can be of Fourier "
2488 "or Chebyshev type only");
2501 returnval.push_back(bkey3);
2511 returnval.push_back(bkey3);
2521 returnval.push_back(bkey3);
2531 returnval.push_back(bkey3);
2541 returnval.push_back(bkey3);
2547 ASSERTL0(
false,
"Homogeneous expansion can be of Fourier "
2548 "or Chebyshev type only");
2557 ASSERTL0(
false,
"Homogeneous expansion not defined for this shape");
2563 ASSERTL0(
false,
"Homogeneous expansion not defined for this shape");
2568 ASSERTL0(
false,
"Expansion not defined in switch for this shape");
2589 for (
auto &compIter :
d.second)
2592 for (
auto &x : compIter.second->m_geomVec)
2594 if (x->GetGeomFactors()->GetGtype() !=
2600 int id = x->GetGlobalID();
2601 (*returnval)[id] = expansionElementShPtr;
2605 for (
auto &x : compIter.second->m_geomVec)
2607 if (x->GetGeomFactors()->GetGtype() ==
2613 int id = x->GetGlobalID();
2614 (*returnval)[id] = expansionElementShPtr;
2628 if (comp->m_geomVec.size() == 0)
2635 map<LibUtilities::ShapeType, pair<string, string>> compMap;
2648 int shapeDim = firstGeom->GetShapeDim();
2650 ? compMap[firstGeom->GetShapeType()].second
2651 : compMap[firstGeom->GetShapeType()].first;
2653 std::vector<unsigned int> idxList;
2654 std::transform(comp->m_geomVec.begin(), comp->m_geomVec.end(),
2655 std::back_inserter(idxList),
2675 bool updateExpansion =
false;
2678 for (
int i = 0; i < geomVecIter->GetNumVerts(); ++i)
2681 geomVecIter->GetVertex(i)->GetCoords(coords);
2682 updateExpansion = region->
v_Contains(coords);
2686 if (updateExpansion)
2689 auto expInfoID = expansionMap->find(geomVecIter->GetGlobalID());
2692 std::vector<unsigned int> nModes = region->
GetNumModes();
2693 (expInfoID->second)->m_basisKeyVector =
2697 ->m_basisKeyVector.begin()
2705 std::vector<unsigned int> nModes = region->
GetNumModes();
2706 std::vector<unsigned int> nPoints = region->
GetNumPoints();
2707 for (
auto basis = expInfoID->second->m_basisKeyVector.begin();
2708 basis != expInfoID->second->m_basisKeyVector.end();
2713 basis->GetPointsType());
2715 basis->GetBasisType(), nModes[cnt], pkey));
2718 (expInfoID->second)->m_basisKeyVector = updatedBasisKey;
2720 updateExpansion =
false;
2741 for (
auto compVecIter = pRefinement->second.begin();
2742 compVecIter != pRefinement->second.end(); ++compVecIter)
2744 for (
auto geomVecIter = compVecIter->second->m_geomVec.begin();
2745 geomVecIter != compVecIter->second->m_geomVec.end();
2756 if (region->first == pRefinement->first)
2778 TiXmlElement *refinementTypes =
m_session->GetElement(
"NEKTAR/REFINEMENTS");
2780 if (refinementTypes)
2782 TiXmlElement *refinement = refinementTypes->FirstChildElement();
2783 ASSERTL0(refinement,
"Unable to find entries in REFINEMENTS tag "
2785 std::string refType = refinement->Value();
2791 std::vector<NekDouble> coord1Vector, coord2Vector;
2792 std::vector<unsigned int> nModesVector, nPointsVector;
2795 const char *idStr = refinement->Attribute(
"REF");
2796 ASSERTL0(idStr,
"REF was not defined in REFINEMENT section "
2799 unsigned id = boost::lexical_cast<unsigned int>(idStr);
2802 const char *radiusStr = refinement->Attribute(
"RADIUS");
2803 ASSERTL0(radiusStr,
"RADIUS was not defined in REFINEMENT "
2804 "section of input");
2806 NekDouble radius = boost::lexical_cast<NekDouble>(radiusStr);
2809 const char *c1Str = refinement->Attribute(
"COORDINATE1");
2810 ASSERTL0(c1Str,
"COORDINATE1 was not defined in REFINEMENT"
2811 "section of input");
2813 std::string coord1String = c1Str;
2816 ASSERTL0(valid,
"Unable to correctly parse the axes "
2817 "values for COORDINATE1");
2820 "Number of coordinates do not match the space "
2821 "dimension for COORDINATE1");
2824 const char *rType = refinement->Attribute(
"TYPE");
2825 ASSERTL0(rType,
"TYPE was not defined in REFINEMENT "
2826 "section of input");
2829 const char *c2Str = refinement->Attribute(
"COORDINATE2");
2831 if (strcmp(rType,
"STANDARD") == 0)
2833 ASSERTL0(c2Str,
"COORDINATE2 was not defined in REFINEMENT "
2834 "section of input");
2836 std::string coord2String = c2Str;
2839 ASSERTL0(valid,
"Unable to correctly parse the axes "
2840 "values for COORDINATE2");
2842 "Number of coordinates do not match the space "
2843 "dimension for COORDINATE2");
2849 "The mesh dimension must match the space dimension");
2851 else if (strcmp(rType,
"SPHERE") == 0)
2854 ASSERTL0(!c2Str,
"COORDINATE2 should not be defined in "
2855 "REFINEMENT section of input for the "
2858 coord2Vector.empty();
2863 "Invalid refinement type");
2870 const char *nModesStr = refinement->Attribute(
"NUMMODES");
2871 ASSERTL0(nModesStr,
"NUMMODES was not defined in "
2872 "Refinement section of input");
2874 std::string numModesStr = nModesStr;
2878 "Unable to correctly parse the number of modes");
2881 const char *nPointsStr = refinement->Attribute(
"NUMPOINTS");
2882 ASSERTL0(nPointsStr,
"NUMPOINTS was not defined in "
2883 "Refinement section of input");
2885 std::string numPointsStr = nPointsStr;
2889 "Unable to correctly parse the number of modes");
2893 const char *nModesStr = refinement->Attribute(
"NUMMODES");
2895 "NUMMODES was not defined in Refinement "
2896 "section of input");
2898 std::string numModesStr = nModesStr;
2903 m_session->GetInterpreter(), numModesStr);
2904 n_modesRef = (int)nummodesEqn.
Evaluate();
2908 n_modesRef = boost::lexical_cast<int>(numModesStr);
2910 nModesVector.push_back(n_modesRef);
2911 nPointsVector.empty();
2915 if (strcmp(rType,
"STANDARD") == 0)
2925 coord2Vector, nModesVector, nPointsVector);
2934 coord2Vector, nModesVector, nPointsVector);
2942 coord2Vector, nModesVector, nPointsVector);
2952 nModesVector, nPointsVector);
2956 refinement = refinement->NextSiblingElement(
"R");
2963 "Unable to find REFINEMENTS tag in file");
2970 TiXmlElement *expansionTypes =
m_session->GetElement(
"NEKTAR/EXPANSIONS");
2972 expansionTypes,
m_session->GetTimeLevel());
2974 ASSERTL0(expansionTypes,
"Unable to find EXPANSIONS tag in file.");
2979 TiXmlElement *expansion = expansionTypes->FirstChildElement();
2980 ASSERTL0(expansion,
"Unable to find entries in EXPANSIONS tag in "
2982 std::string expType = expansion->Value();
2983 std::vector<std::string> vars =
m_session->GetVariables();
3004 map<int, bool> domainCompList;
3007 for (
auto &c :
d.second)
3009 domainCompList[c.first] =
false;
3012 map<std::string, map<int, bool>> fieldDomainCompList;
3017 std::string compositeStr = expansion->Attribute(
"COMPOSITE");
3018 ASSERTL0(compositeStr.length() > 3,
3019 "COMPOSITE must be specified in expansion definition");
3020 int beg = compositeStr.find_first_of(
"[");
3021 int end = compositeStr.find_first_of(
"]");
3022 std::string compositeListStr =
3023 compositeStr.substr(beg + 1, end - beg - 1);
3025 map<int, CompositeSharedPtr> compositeVector;
3029 const char *fStr = expansion->Attribute(
"FIELDS");
3030 std::vector<std::string> fieldStrings;
3034 std::string fieldStr = fStr;
3037 ASSERTL0(valid,
"Unable to correctly parse the field "
3038 "string in ExpansionTypes.");
3054 for (i = 0; i < fieldStrings.size(); ++i)
3056 if (vars.size() && std::count(vars.begin(), vars.end(),
3057 fieldStrings[i]) == 0)
3059 ASSERTL0(
false,
"Variable '" + fieldStrings[i] +
3060 "' defined in EXPANSIONS is not"
3061 " defined in VARIABLES.");
3071 fieldDomainCompList[fieldStrings[i]] =
3073 for (
auto c = compositeVector.begin();
3074 c != compositeVector.end(); ++c)
3076 fieldDomainCompList.find(fieldStrings[i])
3077 ->second.find(c->first)
3083 for (
auto c = compositeVector.begin();
3084 c != compositeVector.end(); ++c)
3086 if (fieldDomainCompList.find(fieldStrings[i])
3087 ->second.find(c->first)
3090 fieldDomainCompList.find(fieldStrings[i])
3091 ->second.find(c->first)
3097 "Expansion vector for "
3100 "' is already setup for C[" +
3101 to_string(c->first) +
"].");
3117 fieldDomainCompList[
"DefaultVar"] = domainCompList;
3118 for (
auto c = compositeVector.begin();
3119 c != compositeVector.end(); ++c)
3121 fieldDomainCompList.find(
"DefaultVar")
3122 ->second.find(c->first)
3128 for (
auto c = compositeVector.begin();
3129 c != compositeVector.end(); ++c)
3131 if (fieldDomainCompList.find(
"DefaultVar")
3132 ->second.find(c->first)
3135 fieldDomainCompList.find(
"DefaultVar")
3136 ->second.find(c->first)
3141 ASSERTL0(
false,
"Default expansion already "
3143 to_string(c->first) +
"].");
3157 const char *tStr = expansion->Attribute(
"TYPE");
3161 std::string typeStr = tStr;
3163 const std::string *endStr =
3165 const std::string *expStr =
3168 ASSERTL0(expStr != endStr,
"Invalid expansion type.");
3183 const char *nStr = expansion->Attribute(
"NUMMODES");
3184 ASSERTL0(nStr,
"NUMMODES was not defined in EXPANSION "
3185 "section of input");
3186 std::string nummodesStr = nStr;
3193 m_session->GetInterpreter(), nummodesStr);
3194 num_modes = (int)nummodesEqn.
Evaluate();
3198 num_modes = boost::lexical_cast<int>(nummodesStr);
3206 const char *bTypeStr = expansion->Attribute(
"BASISTYPE");
3207 ASSERTL0(bTypeStr,
"TYPE or BASISTYPE was not defined in "
3208 "EXPANSION section of input");
3209 std::string basisTypeStr = bTypeStr;
3212 std::vector<std::string> basisStrings;
3213 std::vector<LibUtilities::BasisType> basis;
3215 basisTypeStr.c_str(), basisStrings);
3217 "Unable to correctly parse the basis types.");
3218 for (vector<std::string>::size_type i = 0;
3219 i < basisStrings.size(); i++)
3222 for (
unsigned int j = 0;
3236 "Unable to correctly parse the basis type: ")
3237 .append(basisStrings[i])
3240 const char *nModesStr = expansion->Attribute(
"NUMMODES");
3241 ASSERTL0(nModesStr,
"NUMMODES was not defined in EXPANSION "
3242 "section of input");
3244 std::string numModesStr = nModesStr;
3245 std::vector<unsigned int> numModes;
3249 "Unable to correctly parse the number of modes.");
3250 ASSERTL0(numModes.size() == basis.size(),
3251 "information for num modes does not match the "
3254 const char *pTypeStr = expansion->Attribute(
"POINTSTYPE");
3255 ASSERTL0(pTypeStr,
"POINTSTYPE was not defined in "
3256 "EXPANSION section of input");
3257 std::string pointsTypeStr = pTypeStr;
3259 std::vector<std::string> pointsStrings;
3260 std::vector<LibUtilities::PointsType> points;
3264 "Unable to correctly parse the points types.");
3265 for (vector<std::string>::size_type i = 0;
3266 i < pointsStrings.size(); i++)
3269 for (
unsigned int j = 0;
3283 "Unable to correctly parse the points type: ")
3284 .append(pointsStrings[i])
3288 const char *nPointsStr = expansion->Attribute(
"NUMPOINTS");
3289 ASSERTL0(nPointsStr,
"NUMPOINTS was not defined in "
3290 "EXPANSION section of input");
3291 std::string numPointsStr = nPointsStr;
3292 std::vector<unsigned int> numPoints;
3296 "Unable to correctly parse the number of points.");
3297 ASSERTL0(numPoints.size() == numPoints.size(),
3298 "information for num points does not match the "
3301 for (
int i = 0; i < basis.size(); ++i)
3307 basis[i], numModes[i], pkey));
3312 const char *refIDsStr = expansion->Attribute(
"REFIDS");
3315 vector<NekDouble> refIDsVector;
3316 string refIDsString = refIDsStr;
3319 ASSERTL0(valid,
"Unable to correctly parse the ids "
3323 for (
auto iter = refIDsVector.begin();
3324 iter != refIDsVector.end(); ++iter)
3335 for (
auto compVecIter = compositeVector.begin();
3336 compVecIter != compositeVector.end(); ++compVecIter)
3338 for (
auto geomVecIter =
3339 compVecIter->second->m_geomVec.begin();
3340 geomVecIter != compVecIter->second->m_geomVec.end();
3344 expansionMap->find((*geomVecIter)->GetGlobalID());
3346 x != expansionMap->end(),
3348 std::to_string((*geomVecIter)->GetGlobalID()) +
3352 (x->second)->m_basisKeyVector =
3354 *geomVecIter, expansion_type, num_modes);
3358 ASSERTL0((*geomVecIter)->GetShapeDim() ==
3360 " There is an incompatible expansion "
3361 "dimension with geometry dimension");
3362 (x->second)->m_basisKeyVector = basiskeyvec;
3367 expansion = expansion->NextSiblingElement(
"E");
3373 for (
auto f = fieldDomainCompList.begin();
3374 f != fieldDomainCompList.end(); ++f)
3376 if (f->first !=
"DefaultVar")
3378 for (
auto c = f->second.begin(); c != f->second.end(); ++c)
3380 if (c->second ==
false &&
3381 fieldDomainCompList.find(
"DefaultVar")
3382 ->second.find(c->first)
3387 for (
auto geomVecIter =
3389 ->second->m_geomVec.begin();
3391 ->second->m_geomVec.end();
3397 (*geomVecIter)->GetGlobalID());
3402 (*geomVecIter)->GetGlobalID());
3404 (xField->second)->m_basisKeyVector =
3405 (xDefaultVar->second)->m_basisKeyVector;
3411 "Using Default expansion definition for "
3416 to_string(c->first) +
"].")
3419 ASSERTL0(c->second,
"There is no expansion defined for "
3421 f->first +
"' in C[" +
3422 to_string(c->first) +
"].");
3428 for (i = 0; i < vars.size(); ++i)
3441 "Using Default expansion definition for field "
3448 ASSERTL0(
false,
"Variable '" + vars[i] +
3450 " in FIELDS attribute of EXPANSIONS"
3480 else if (expType ==
"H")
3488 map<int, bool> domainCompList;
3491 for (
auto &c :
d.second)
3493 domainCompList[c.first] =
false;
3496 map<std::string, map<int, bool>> fieldDomainCompList;
3501 std::string compositeStr = expansion->Attribute(
"COMPOSITE");
3502 ASSERTL0(compositeStr.length() > 3,
3503 "COMPOSITE must be specified in expansion definition");
3504 int beg = compositeStr.find_first_of(
"[");
3505 int end = compositeStr.find_first_of(
"]");
3506 std::string compositeListStr =
3507 compositeStr.substr(beg + 1, end - beg - 1);
3509 map<int, CompositeSharedPtr> compositeVector;
3513 const char *fStr = expansion->Attribute(
"FIELDS");
3514 std::vector<std::string> fieldStrings;
3518 std::string fieldStr = fStr;
3521 ASSERTL0(valid,
"Unable to correctly parse the field "
3522 "string in ExpansionTypes.");
3538 for (i = 0; i < fieldStrings.size(); ++i)
3540 if (vars.size() && std::count(vars.begin(), vars.end(),
3541 fieldStrings[i]) == 0)
3543 ASSERTL0(
false,
"Variable '" + fieldStrings[i] +
3544 "' defined in EXPANSIONS is not"
3545 " defined in VARIABLES.");
3555 fieldDomainCompList[fieldStrings[i]] =
3557 for (
auto c = compositeVector.begin();
3558 c != compositeVector.end(); ++c)
3560 fieldDomainCompList.find(fieldStrings[i])
3561 ->second.find(c->first)
3567 for (
auto c = compositeVector.begin();
3568 c != compositeVector.end(); ++c)
3570 if (fieldDomainCompList.find(fieldStrings[i])
3571 ->second.find(c->first)
3574 fieldDomainCompList.find(fieldStrings[i])
3575 ->second.find(c->first)
3581 "Expansion vector for "
3584 "' is already setup for C[" +
3585 to_string(c->first) +
"].");
3601 fieldDomainCompList[
"DefaultVar"] = domainCompList;
3602 for (
auto c = compositeVector.begin();
3603 c != compositeVector.end(); ++c)
3605 fieldDomainCompList.find(
"DefaultVar")
3606 ->second.find(c->first)
3612 for (
auto c = compositeVector.begin();
3613 c != compositeVector.end(); ++c)
3615 if (fieldDomainCompList.find(
"DefaultVar")
3616 ->second.find(c->first)
3619 fieldDomainCompList.find(
"DefaultVar")
3620 ->second.find(c->first)
3625 ASSERTL0(
false,
"Default expansion already "
3627 to_string(c->first) +
"].");
3639 int num_modes_x = 0;
3640 int num_modes_y = 0;
3641 int num_modes_z = 0;
3645 const char *tStr_x = expansion->Attribute(
"TYPE-X");
3649 std::string typeStr = tStr_x;
3651 const std::string *endStr =
3653 const std::string *expStr =
3656 ASSERTL0(expStr != endStr,
"Invalid expansion type.");
3659 const char *nStr = expansion->Attribute(
"NUMMODES-X");
3660 ASSERTL0(nStr,
"NUMMODES-X was not defined in EXPANSION "
3661 "section of input");
3662 std::string nummodesStr = nStr;
3670 m_session->GetInterpreter(), nummodesStr);
3671 num_modes_x = (int)nummodesEqn.
Evaluate();
3675 num_modes_x = boost::lexical_cast<int>(nummodesStr);
3679 const char *tStr_y = expansion->Attribute(
"TYPE-Y");
3683 std::string typeStr = tStr_y;
3685 const std::string *endStr =
3687 const std::string *expStr =
3690 ASSERTL0(expStr != endStr,
"Invalid expansion type.");
3693 const char *nStr = expansion->Attribute(
"NUMMODES-Y");
3694 ASSERTL0(nStr,
"NUMMODES-Y was not defined in EXPANSION "
3695 "section of input");
3696 std::string nummodesStr = nStr;
3703 m_session->GetInterpreter(), nummodesStr);
3704 num_modes_y = (int)nummodesEqn.
Evaluate();
3708 num_modes_y = boost::lexical_cast<int>(nummodesStr);
3712 const char *tStr_z = expansion->Attribute(
"TYPE-Z");
3716 std::string typeStr = tStr_z;
3718 const std::string *endStr =
3720 const std::string *expStr =
3723 ASSERTL0(expStr != endStr,
"Invalid expansion type.");
3726 const char *nStr = expansion->Attribute(
"NUMMODES-Z");
3727 ASSERTL0(nStr,
"NUMMODES-Z was not defined in EXPANSION "
3728 "section of input");
3729 std::string nummodesStr = nStr;
3736 m_session->GetInterpreter(), nummodesStr);
3737 num_modes_z = (int)nummodesEqn.
Evaluate();
3741 num_modes_z = boost::lexical_cast<int>(nummodesStr);
3745 for (
auto compVecIter = compositeVector.begin();
3746 compVecIter != compositeVector.end(); ++compVecIter)
3748 for (
auto geomVecIter =
3749 compVecIter->second->m_geomVec.begin();
3750 geomVecIter != compVecIter->second->m_geomVec.end();
3753 for (
auto expVecIter = expansionMap->begin();
3754 expVecIter != expansionMap->end(); ++expVecIter)
3757 (expVecIter->second)->m_basisKeyVector =
3759 *geomVecIter, expansion_type_x,
3760 expansion_type_y, expansion_type_z,
3761 num_modes_x, num_modes_y, num_modes_z);
3766 expansion = expansion->NextSiblingElement(
"H");
3772 for (
auto f = fieldDomainCompList.begin();
3773 f != fieldDomainCompList.end(); ++f)
3775 if (f->first !=
"DefaultVar")
3777 for (
auto c = f->second.begin(); c != f->second.end(); ++c)
3779 if (c->second ==
false &&
3780 fieldDomainCompList.find(
"DefaultVar")
3781 ->second.find(c->first)
3786 for (
auto geomVecIter =
3788 ->second->m_geomVec.begin();
3790 ->second->m_geomVec.end();
3796 (*geomVecIter)->GetGlobalID());
3801 (*geomVecIter)->GetGlobalID());
3803 (xField->second)->m_basisKeyVector =
3804 (xDefaultVar->second)->m_basisKeyVector;
3810 "Using Default expansion definition for "
3815 to_string(c->first) +
"].")
3818 ASSERTL0(c->second,
"There is no expansion defined for "
3820 f->first +
"' in C[" +
3821 to_string(c->first) +
"].");
3827 for (i = 0; i < vars.size(); ++i)
3840 "Using Default expansion definition for field "
3847 ASSERTL0(
false,
"Variable '" + vars[i] +
3849 " in FIELDS attribute of EXPANSIONS"
3870 std::vector<LibUtilities::FieldDefinitionsSharedPtr> fielddefs;
3874 std::shared_ptr<LibUtilities::FieldIOXml> f =
3875 make_shared<LibUtilities::FieldIOXml>(
m_session->GetComm(),
3880 cout <<
" Number of elements: " << fielddefs.size() << endl;
3883 else if (expType ==
"F")
3885 ASSERTL0(expansion->Attribute(
"FILE"),
3886 "Attribute FILE expected for type F expansion");
3887 std::string filenameStr = expansion->Attribute(
"FILE");
3889 "A filename must be specified for the FILE "
3890 "attribute of expansion");
3892 std::vector<LibUtilities::FieldDefinitionsSharedPtr> fielddefs;
3895 f->Import(filenameStr, fielddefs);
3900 ASSERTL0(
false,
"Expansion type not defined");
3919 for (
auto &compIter :
d.second)
3921 for (
auto &geomIter : compIter.second->m_geomVec)
3923 triGeomShPtr = std::dynamic_pointer_cast<TriGeom>(geomIter);
3924 quadGeomShPtr = std::dynamic_pointer_cast<QuadGeom>(geomIter);
3926 if (triGeomShPtr || quadGeomShPtr)
3930 for (
int i = 0; i < triGeomShPtr->GetNumEdges(); i++)
3932 if (triGeomShPtr->GetEdge(i)->GetGlobalID() ==
3933 edge->GetGlobalID())
3935 ret->push_back(make_pair(triGeomShPtr, i));
3940 else if (quadGeomShPtr)
3942 for (
int i = 0; i < quadGeomShPtr->GetNumEdges(); i++)
3944 if (quadGeomShPtr->GetEdge(i)->GetGlobalID() ==
3945 edge->GetGlobalID())
3947 ret->push_back(make_pair(quadGeomShPtr, i));
3981 for (
int i = 0; i < kNfaces; ++i)
3983 int faceId = element->GetFace(i)->GetGlobalID();
3992 tmp->push_back(make_pair(element, i));
3997 it->second->push_back(make_pair(element, i));
4011 std::map<int, MeshEntity> elements;
4020 e.
list.push_back(i.second->GetVertex(0)->GetGlobalID());
4021 e.
list.push_back(i.second->GetVertex(1)->GetGlobalID());
4033 e.
list.push_back(i.second->GetEdge(0)->GetGlobalID());
4034 e.
list.push_back(i.second->GetEdge(1)->GetGlobalID());
4035 e.
list.push_back(i.second->GetEdge(2)->GetGlobalID());
4043 e.
list.push_back(i.second->GetEdge(0)->GetGlobalID());
4044 e.
list.push_back(i.second->GetEdge(1)->GetGlobalID());
4045 e.
list.push_back(i.second->GetEdge(2)->GetGlobalID());
4046 e.
list.push_back(i.second->GetEdge(3)->GetGlobalID());
4058 e.
list.push_back(i.second->GetFace(0)->GetGlobalID());
4059 e.
list.push_back(i.second->GetFace(1)->GetGlobalID());
4060 e.
list.push_back(i.second->GetFace(2)->GetGlobalID());
4061 e.
list.push_back(i.second->GetFace(3)->GetGlobalID());
4069 e.
list.push_back(i.second->GetFace(0)->GetGlobalID());
4070 e.
list.push_back(i.second->GetFace(1)->GetGlobalID());
4071 e.
list.push_back(i.second->GetFace(2)->GetGlobalID());
4072 e.
list.push_back(i.second->GetFace(3)->GetGlobalID());
4073 e.
list.push_back(i.second->GetFace(4)->GetGlobalID());
4081 e.
list.push_back(i.second->GetFace(0)->GetGlobalID());
4082 e.
list.push_back(i.second->GetFace(1)->GetGlobalID());
4083 e.
list.push_back(i.second->GetFace(2)->GetGlobalID());
4084 e.
list.push_back(i.second->GetFace(3)->GetGlobalID());
4085 e.
list.push_back(i.second->GetFace(4)->GetGlobalID());
4093 e.
list.push_back(i.second->GetFace(0)->GetGlobalID());
4094 e.
list.push_back(i.second->GetFace(1)->GetGlobalID());
4095 e.
list.push_back(i.second->GetFace(2)->GetGlobalID());
4096 e.
list.push_back(i.second->GetFace(3)->GetGlobalID());
4097 e.
list.push_back(i.second->GetFace(4)->GetGlobalID());
4098 e.
list.push_back(i.second->GetFace(5)->GetGlobalID());
4115 std::pair<LibUtilities::ShapeType, vector<int>> tmp;
4116 tmp.first = comp.second->m_geomVec[0]->GetShapeType();
4118 tmp.second.resize(comp.second->m_geomVec.size());
4119 for (
size_t i = 0; i < tmp.second.size(); ++i)
4121 tmp.second[i] = comp.second->m_geomVec[i]->GetGlobalID();
4124 ret[comp.first] = tmp;
#define ASSERTL0(condition, msg)
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mode...
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
Describes the specification for a Basis.
int GetNumPoints() const
Return points order at which basis is defined.
BasisType GetBasisType() const
Return type of expansion basis.
int GetNumModes() const
Returns the order of the basis.
PointsType GetPointsType() const
Return type of quadrature.
NekDouble Evaluate() const
static std::shared_ptr< FieldIO > CreateForFile(const LibUtilities::SessionReaderSharedPtr session, const std::string &filename)
Construct a FieldIO object for a given input filename.
Provides a generic Factory class.
tBaseSharedPtr CreateInstance(tKey idKey, tParam... args)
Create an instance of the class referred to by idKey.
Defines a specification for a set of points.
static void GetXMLElementTimeLevel(TiXmlElement *&element, const size_t timeLevel, const bool disableCheck=true)
Get XML elment time level (Parallel-in-Time)
static DataSourceSharedPtr create(const std::string &fn)
Create a new XML data source based on the filename.
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
static std::string GenerateSeqString(const std::vector< T > &v)
Generate a compressed comma-separated string representation of a vector of unsigned integers.
static bool GenerateVector(const std::string &str, std::vector< T > &out)
Takes a comma-separated string and converts it to entries in a vector.
static bool GenerateSeqVector(const std::string &str, std::vector< unsigned int > &out)
Takes a comma-separated compressed string and converts it to entries in a vector.
LibUtilities::ShapeType GetShapeType(void)
Get the geometric shape type of this object.
PointGeomSharedPtr GetVertex(int i) const
Returns vertex i of this object.
int GetCoordim() const
Return the coordinate dimension of this object (i.e. the dimension of the space in which this object ...
int GetNumVerts() const
Get the number of vertices of this object.
void SetDomainRange(NekDouble xmin, NekDouble xmax, NekDouble ymin=NekConstants::kNekUnsetDouble, NekDouble ymax=NekConstants::kNekUnsetDouble, NekDouble zmin=NekConstants::kNekUnsetDouble, NekDouble zmax=NekConstants::kNekUnsetDouble)
bool CheckRange(Geometry2D &geom)
Check if goemetry is in range definition if activated.
void FillBoundingBoxTree()
std::map< int, RefRegion * > m_refRegion
Link the refinement id with the surface region data.
PrismGeomMap m_prismGeoms
void PopulateFaceToElMap(Geometry3DSharedPtr element, int kNfaces)
Given a 3D geometry object #element, populate the face to element map m_faceToElMap which maps faces ...
void SetRefinementInfo(ExpansionInfoMapShPtr &expansionMap)
This function sets the expansion #exp in map with entry #variable.
void SetExpansionInfoToEvenlySpacedPoints(int npoints=0)
Sets expansions to have equispaced points.
LibUtilities::SessionReaderSharedPtr m_session
std::map< int, CompositeMap > m_domain
void SetPartition(SpatialDomains::MeshGraphSharedPtr graph)
std::unique_ptr< GeomRTree > m_boundingBoxTree
ExpansionInfoMapShPtr SetUpExpansionInfoMap()
void SetExpansionInfoToPointOrder(int npts)
Reset expansion to have specified point order npts.
std::map< int, CompositeMap > m_refComposite
Link the refinement id with the composites.
void GetCompositeList(const std::string &compositeStr, CompositeMap &compositeVector) const
CompositeMap m_meshComposites
const ExpansionInfoMap & GetExpansionInfo(const std::string variable="DefaultVar")
GeometryLinkSharedPtr GetElementsFromEdge(Geometry1DSharedPtr edge)
GeometrySharedPtr GetCompositeItem(int whichComposite, int whichItem)
ExpansionInfoMapShPtrMap m_expansionMapShPtrMap
void PRefinementElmts(ExpansionInfoMapShPtr &expansionMap, RefRegion *®ion, GeometrySharedPtr geomVecIter)
Perform the p-refinement in the selected elements.
MovementSharedPtr m_movement
std::string GetCompositeString(CompositeSharedPtr comp)
Returns a string representation of a composite.
void ResetExpansionInfoToBasisKey(ExpansionInfoMapShPtr &expansionMap, LibUtilities::ShapeType shape, LibUtilities::BasisKeyVector &keys)
void SetExpansionInfoToNumModes(int nmodes)
Reset expansion to have specified polynomial order nmodes.
std::unordered_map< int, GeometryLinkSharedPtr > m_faceToElMap
void SetExpansionInfo(std::vector< LibUtilities::FieldDefinitionsSharedPtr > &fielddef)
Sets expansions given field definitions.
std::map< int, MeshEntity > CreateMeshEntities()
Create mesh entities for this graph.
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)
CompositeDescriptor CreateCompositeDescriptor()
GeometryLinkSharedPtr GetElementsFromFace(Geometry2DSharedPtr face)
void ReadRefinementInfo()
Read refinement info.
void SetBasisKey(LibUtilities::ShapeType shape, LibUtilities::BasisKeyVector &keys, std::string var="DefaultVar")
Sets the basis key for all expansions of the given shape.
std::vector< int > GetElementsContainingPoint(PointGeomSharedPtr p)
static LibUtilities::BasisKeyVector DefineBasisKeyFromExpansionType(GeometrySharedPtr in, ExpansionType type, const int order)
static MeshGraphSharedPtr Read(const LibUtilities::SessionReaderSharedPtr pSession, LibUtilities::DomainRangeShPtr rng=LibUtilities::NullDomainRangeShPtr, bool fillGraph=true, SpatialDomains::MeshGraphSharedPtr partitionedGraph=nullptr)
LibUtilities::DomainRangeShPtr m_domainRange
Derived class for the refinement surface region.
Abstract base class for the refinement surface region.
virtual bool v_Contains(const Array< OneD, NekDouble > &coords)=0
Pure virtual fuction.
std::vector< unsigned int > GetNumPoints()
Get the number of quadrature points to update expansion.
std::vector< unsigned int > GetNumModes()
Get the number of modes to update expansion.
Derived class for the refinement surface region.
Derived class for the refinement surface region.
Derived class for the refinement surface region.
std::vector< BasisKey > BasisKeyVector
Name for a vector of BasisKeys.
const char *const BasisTypeMap[]
std::shared_ptr< FieldIO > FieldIOSharedPtr
const std::string kPointsTypeStr[]
std::shared_ptr< SessionReader > SessionReaderSharedPtr
std::shared_ptr< DomainRange > DomainRangeShPtr
static DomainRangeShPtr NullDomainRangeShPtr
@ SIZE_PointsType
Length of enum list.
@ eFourierEvenlySpaced
1D Evenly-spaced points using Fourier Fit
@ eGaussLobattoLegendre
1D Gauss-Lobatto-Legendre quadrature points
@ eGaussGaussChebyshev
1D Gauss-Gauss-Chebyshev quadrature points
@ ePolyEvenlySpaced
1D Evenly-spaced points using Lagrange polynomial
@ eGaussGaussLegendre
1D Gauss-Gauss-Legendre quadrature points
@ eFourierSingleModeSpaced
1D Non Evenly-spaced points for Single Mode analysis
std::shared_ptr< Comm > CommSharedPtr
Pointer to a Communicator object.
@ eModified_B
Principle Modified Functions .
@ eGauss_Lagrange
Lagrange Polynomials using the Gauss points.
@ eOrtho_A
Principle Orthogonal Functions .
@ eModified_C
Principle Modified Functions .
@ eGLL_Lagrange
Lagrange for SEM basis .
@ SIZE_BasisType
Length of enum list.
@ eFourierSingleMode
Fourier ModifiedExpansion with just the first mode .
@ eChebyshev
Chebyshev Polynomials.
@ eOrtho_C
Principle Orthogonal Functions .
@ eModifiedPyr_C
Principle Modified Functions.
@ eOrtho_B
Principle Orthogonal Functions .
@ eModified_A
Principle Modified Functions .
@ eFourierHalfModeIm
Fourier Modified expansions with just the imaginary part of the first mode .
@ eFourierHalfModeRe
Fourier Modified expansions with just the real part of the first mode .
@ eFourier
Fourier Expansion .
static const NekDouble kNekUnsetDouble
std::shared_ptr< QuadGeom > QuadGeomSharedPtr
std::map< int, std::pair< LibUtilities::ShapeType, std::vector< int > > > CompositeDescriptor
std::shared_ptr< std::vector< std::pair< GeometrySharedPtr, int > > > GeometryLinkSharedPtr
std::shared_ptr< Composite > CompositeSharedPtr
std::shared_ptr< ExpansionInfoMap > ExpansionInfoMapShPtr
@ eDeformed
Geometry is curved or has non-constant factors.
std::shared_ptr< ExpansionInfo > ExpansionInfoShPtr
const std::string kExpansionTypeStr[]
std::shared_ptr< MeshGraph > MeshGraphSharedPtr
std::shared_ptr< PointGeom > PointGeomSharedPtr
std::shared_ptr< Geometry2D > Geometry2DSharedPtr
std::shared_ptr< Geometry > GeometrySharedPtr
std::shared_ptr< TriGeom > TriGeomSharedPtr
MeshGraphFactory & GetMeshGraphFactory()
std::shared_ptr< Geometry1D > Geometry1DSharedPtr
std::map< int, ExpansionInfoShPtr > ExpansionInfoMap
std::shared_ptr< Geometry3D > Geometry3DSharedPtr
std::map< int, CompositeSharedPtr > CompositeMap
InputIterator find(InputIterator first, InputIterator last, InputIterator startingpoint, const EqualityComparable &value)
std::vector< double > z(NPUPPER)
std::vector< double > d(NPUPPER *NPUPPER)
The above copyright notice and this permission notice shall be included.
std::vector< unsigned int > list
bg::model::point< NekDouble, 3, bg::cs::cartesian > BgPoint
bg::model::box< BgPoint > BgBox
std::pair< BgBox, int > BgRtreeValue
void InsertGeom(GeometrySharedPtr const &geom)
bg::index::rtree< BgRtreeValue, bg::index::rstar< 16, 4 > > m_bgTree