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;
85 typedef bg::model::point<NekDouble, 3, bg::cs::cartesian>
BgPoint;
86 typedef bg::model::box<BgPoint>
BgBox;
89 bg::index::rtree<BgRtreeValue, bg::index::rstar<16, 4>>
m_bgTree;
93 std::array<NekDouble, 6> minMax = geom->GetBoundingBox();
94 BgPoint ptMin(minMax[0], minMax[1], minMax[2]);
95 BgPoint ptMax(minMax[3], minMax[4], minMax[5]);
97 std::make_pair(
BgBox(ptMin, ptMax), geom->GetGlobalID()));
121 ASSERTL0(comm.get(),
"Communication not initialised.");
126 const bool isRoot = comm->TreatAsRankZero();
127 std::string geomType;
132 session->InitSession();
135 geomType = session->GetGeometryType();
138 std::vector<char> v(geomType.c_str(),
139 geomType.c_str() + geomType.length());
141 size_t length = v.size();
142 comm->Bcast(length, 0);
148 comm->Bcast(length, 0);
150 std::vector<char> v(length);
153 geomType = std::string(v.begin(), v.end());
166 if (partitionedGraph && geomType ==
"HDF5")
168 mesh->SetPartition(partitionedGraph);
171 mesh->PartitionMesh(session);
174 mesh->ReadGeometry(rng, fillGraph);
309 std::vector<GeomRTree::BgRtreeValue> matches;
311 p->GetCoords(x, y,
z);
317 std::back_inserter(matches));
319 std::vector<int> vals(matches.size());
321 for (
int i = 0; i < matches.size(); ++i)
323 vals[i] = matches[i].second;
355 bool returnval =
true;
367 for (
int i = 0; i < nverts; ++i)
370 if (xval < m_domainRange->m_xmin)
384 if ((ncnt_up == nverts) || (ncnt_low == nverts))
395 for (
int i = 0; i < nverts; ++i)
398 if (yval < m_domainRange->m_ymin)
412 if ((ncnt_up == nverts) || (ncnt_low == nverts))
426 for (
int i = 0; i < nverts; ++i)
430 if (zval < m_domainRange->m_zmin)
444 if ((ncnt_up == nverts) || (ncnt_low == nverts))
457 bool returnval =
true;
468 for (
int i = 0; i < nverts; ++i)
471 if (xval < m_domainRange->m_xmin)
485 if ((ncnt_up == nverts) || (ncnt_low == nverts))
495 for (
int i = 0; i < nverts; ++i)
498 if (yval < m_domainRange->m_ymin)
512 if ((ncnt_up == nverts) || (ncnt_low == nverts))
522 for (
int i = 0; i < nverts; ++i)
526 if (zval < m_domainRange->m_zmin)
540 if ((ncnt_up == nverts) || (ncnt_low == nverts))
568 if (whichItem >= 0 &&
585 std::ostringstream errStream;
586 errStream <<
"Unable to access composite item [" << whichComposite
587 <<
"][" << whichItem <<
"].";
589 std::string testStr = errStream.str();
604 vector<unsigned int> seqVector;
609 parseGood && !seqVector.empty(),
610 (std::string(
"Unable to read composite index range: ") + compositeStr)
613 vector<unsigned int> addedVector;
615 for (
auto iter = seqVector.begin(); iter != seqVector.end(); ++iter)
620 if (
std::find(addedVector.begin(), addedVector.end(), *iter) ==
632 addedVector.push_back(*iter);
634 "Composite not found.");
639 compositeVector[*iter] = composite;
644 (
"Undefined composite: " + std::to_string(*iter)));
668 "Unable to find expansion vector definition for field: ") +
678 "Using Default variable expansion definition for field: ") +
690 const std::string variable)
695 auto iter = expansionMap->find(geom->GetGlobalID());
696 ASSERTL1(iter != expansionMap->end(),
697 "Could not find expansion " +
698 boost::lexical_cast<string>(geom->GetGlobalID()) +
699 " in expansion for variable " + variable);
707 std::vector<LibUtilities::FieldDefinitionsSharedPtr> &fielddef)
709 int i, j, k, cnt, id;
716 for (i = 0; i < fielddef.size(); ++i)
718 for (j = 0; j < fielddef[i]->m_fields.size(); ++j)
720 std::string
field = fielddef[i]->m_fields[j];
738 for (i = 0; i < fielddef.size(); ++i)
741 std::vector<std::string> fields = fielddef[i]->m_fields;
742 std::vector<unsigned int> nmodes = fielddef[i]->m_numModes;
743 std::vector<LibUtilities::BasisType> basis = fielddef[i]->m_basis;
744 bool pointDef = fielddef[i]->m_pointsDef;
745 bool numPointDef = fielddef[i]->m_numPointsDef;
748 std::vector<unsigned int> npoints = fielddef[i]->m_numPoints;
749 std::vector<LibUtilities::PointsType> points = fielddef[i]->m_points;
751 bool UniOrder = fielddef[i]->m_uniOrder;
753 for (j = 0; j < fielddef[i]->m_elementIDs.size(); ++j)
757 id = fielddef[i]->m_elementIDs[j];
759 switch (fielddef[i]->m_shapeType)
763 if (
m_segGeoms.count(fielddef[i]->m_elementIDs[j]) == 0)
769 cnt += fielddef[i]->m_numHomogeneousDir;
773 geom =
m_segGeoms[fielddef[i]->m_elementIDs[j]];
778 if (numPointDef && pointDef)
784 else if (!numPointDef && pointDef)
790 else if (numPointDef && !pointDef)
802 cnt += fielddef[i]->m_numHomogeneousDir;
804 bkeyvec.push_back(bkey);
809 if (
m_triGeoms.count(fielddef[i]->m_elementIDs[j]) == 0)
815 cnt += fielddef[i]->m_numHomogeneousDir;
819 geom =
m_triGeoms[fielddef[i]->m_elementIDs[j]];
823 if (numPointDef && pointDef)
829 else if (!numPointDef && pointDef)
835 else if (numPointDef && !pointDef)
843 bkeyvec.push_back(bkey);
846 nmodes[cnt + 1], LibUtilities::eGaussRadauMAlpha1Beta0);
847 if (numPointDef && pointDef)
853 else if (!numPointDef && pointDef)
859 else if (numPointDef && !pointDef)
863 LibUtilities::eGaussRadauMAlpha1Beta0);
868 bkeyvec.push_back(bkey1);
873 cnt += fielddef[i]->m_numHomogeneousDir;
879 if (
m_quadGeoms.count(fielddef[i]->m_elementIDs[j]) == 0)
885 cnt += fielddef[i]->m_numHomogeneousDir;
892 for (
int b = 0; b < 2; ++b)
898 if (numPointDef && pointDef)
901 npoints[cnt + b], points[b]);
904 else if (!numPointDef && pointDef)
907 nmodes[cnt + b] + 1, points[b]);
910 else if (numPointDef && !pointDef)
919 bkeyvec.push_back(bkey);
925 cnt += fielddef[i]->m_numHomogeneousDir;
932 k = fielddef[i]->m_elementIDs[j];
952 if (numPointDef && pointDef)
958 else if (!numPointDef && pointDef)
964 else if (numPointDef && !pointDef)
975 bkeyvec.push_back(bkey);
980 LibUtilities::eGaussRadauMAlpha1Beta0);
982 if (numPointDef && pointDef)
985 npoints[cnt + 1], points[1]);
988 else if (!numPointDef && pointDef)
991 nmodes[cnt + 1] + 1, points[1]);
994 else if (numPointDef && !pointDef)
998 LibUtilities::eGaussRadauMAlpha1Beta0);
1005 bkeyvec.push_back(bkey);
1011 LibUtilities::eGaussRadauMAlpha2Beta0);
1013 if (numPointDef && pointDef)
1016 npoints[cnt + 2], points[2]);
1019 else if (!numPointDef && pointDef)
1022 nmodes[cnt + 2] + 1, points[2]);
1025 else if (numPointDef && !pointDef)
1029 LibUtilities::eGaussRadauMAlpha1Beta0);
1036 bkeyvec.push_back(bkey);
1047 k = fielddef[i]->m_elementIDs[j];
1058 for (
int b = 0; b < 2; ++b)
1061 nmodes[cnt + b] + 1,
1064 if (numPointDef && pointDef)
1067 npoints[cnt + b], points[b]);
1070 else if (!numPointDef && pointDef)
1073 nmodes[cnt + b] + 1, points[b]);
1076 else if (numPointDef && !pointDef)
1086 bkeyvec.push_back(bkey);
1092 LibUtilities::eGaussRadauMAlpha1Beta0);
1094 if (numPointDef && pointDef)
1097 npoints[cnt + 2], points[2]);
1100 else if (!numPointDef && pointDef)
1103 nmodes[cnt + 2] + 1, points[2]);
1106 else if (numPointDef && !pointDef)
1116 bkeyvec.push_back(bkey);
1127 k = fielddef[i]->m_elementIDs[j];
1129 "Failed to find geometry with same global id");
1132 for (
int b = 0; b < 2; ++b)
1135 nmodes[cnt + b] + 1,
1138 if (numPointDef && pointDef)
1141 npoints[cnt + b], points[b]);
1144 else if (!numPointDef && pointDef)
1147 nmodes[cnt + b] + 1, points[b]);
1150 else if (numPointDef && !pointDef)
1160 bkeyvec.push_back(bkey);
1166 LibUtilities::eGaussRadauMAlpha2Beta0);
1168 if (numPointDef && pointDef)
1171 npoints[cnt + 2], points[2]);
1174 else if (!numPointDef && pointDef)
1177 nmodes[cnt + 2] + 1, points[2]);
1180 else if (numPointDef && !pointDef)
1190 bkeyvec.push_back(bkey);
1201 k = fielddef[i]->m_elementIDs[j];
1213 for (
int b = 0; b < 3; ++b)
1219 if (numPointDef && pointDef)
1222 npoints[cnt + b], points[b]);
1225 else if (!numPointDef && pointDef)
1228 nmodes[cnt + b] + 1, points[b]);
1231 else if (numPointDef && !pointDef)
1241 bkeyvec.push_back(bkey);
1251 ASSERTL0(
false,
"Need to set up for pyramid and prism 3D "
1256 for (k = 0; k < fields.size(); ++k)
1259 if ((*expansionMap).find(
id) != (*expansionMap).end())
1261 (*expansionMap)[id]->m_geomShPtr = geom;
1262 (*expansionMap)[id]->m_basisKeyVector = bkeyvec;
1273 std::vector<LibUtilities::FieldDefinitionsSharedPtr> &fielddef,
1274 std::vector<std::vector<LibUtilities::PointsType>> &pointstype)
1276 int i, j, k, cnt, id;
1283 for (i = 0; i < fielddef.size(); ++i)
1285 for (j = 0; j < fielddef[i]->m_fields.size(); ++j)
1287 std::string
field = fielddef[i]->m_fields[j];
1305 for (i = 0; i < fielddef.size(); ++i)
1308 std::vector<std::string> fields = fielddef[i]->m_fields;
1309 std::vector<unsigned int> nmodes = fielddef[i]->m_numModes;
1310 std::vector<LibUtilities::BasisType> basis = fielddef[i]->m_basis;
1311 bool UniOrder = fielddef[i]->m_uniOrder;
1313 for (j = 0; j < fielddef[i]->m_elementIDs.size(); ++j)
1316 id = fielddef[i]->m_elementIDs[j];
1318 switch (fielddef[i]->m_shapeType)
1322 k = fielddef[i]->m_elementIDs[j];
1324 "Failed to find geometry with same global id.");
1333 cnt += fielddef[i]->m_numHomogeneousDir;
1335 bkeyvec.push_back(bkey);
1340 k = fielddef[i]->m_elementIDs[j];
1342 "Failed to find geometry with same global id.");
1344 for (
int b = 0; b < 2; ++b)
1350 bkeyvec.push_back(bkey);
1356 cnt += fielddef[i]->m_numHomogeneousDir;
1362 k = fielddef[i]->m_elementIDs[j];
1364 "Failed to find geometry with same global id");
1367 for (
int b = 0; b < 2; ++b)
1373 bkeyvec.push_back(bkey);
1379 cnt += fielddef[i]->m_numHomogeneousDir;
1385 k = fielddef[i]->m_elementIDs[j];
1387 "Failed to find geometry with same global id");
1390 for (
int b = 0; b < 3; ++b)
1396 bkeyvec.push_back(bkey);
1407 k = fielddef[i]->m_elementIDs[j];
1409 "Failed to find geometry with same global id");
1412 for (
int b = 0; b < 3; ++b)
1418 bkeyvec.push_back(bkey);
1429 k = fielddef[i]->m_elementIDs[j];
1431 "Failed to find geometry with same global id");
1434 for (
int b = 0; b < 3; ++b)
1440 bkeyvec.push_back(bkey);
1451 k = fielddef[i]->m_elementIDs[j];
1453 "Failed to find geometry with same global id");
1456 for (
int b = 0; b < 3; ++b)
1462 bkeyvec.push_back(bkey);
1472 ASSERTL0(
false,
"Need to set up for pyramid and prism 3D "
1477 for (k = 0; k < fields.size(); ++k)
1480 if ((*expansionMap).find(
id) != (*expansionMap).end())
1482 (*expansionMap)[id]->m_geomShPtr = geom;
1483 (*expansionMap)[id]->m_basisKeyVector = bkeyvec;
1501 for (
auto expIt = it->second->begin(); expIt != it->second->end();
1504 for (
int i = 0; i < expIt->second->m_basisKeyVector.size(); ++i)
1507 expIt->second->m_basisKeyVector[i];
1519 npts = max(npts, 2);
1525 expIt->second->m_basisKeyVector[i] = bkeynew;
1543 for (
auto expIt = it->second->begin(); expIt != it->second->end();
1546 for (
int i = 0; i < expIt->second->m_basisKeyVector.size(); ++i)
1549 expIt->second->m_basisKeyVector[i];
1558 expIt->second->m_basisKeyVector[i] = bkeynew;
1576 for (
auto expIt = it->second->begin(); expIt != it->second->end();
1579 for (
int i = 0; i < expIt->second->m_basisKeyVector.size(); ++i)
1582 expIt->second->m_basisKeyVector[i];
1589 expIt->second->m_basisKeyVector[i] = bkeynew;
1619 for (
auto elemIter = expansionMap->begin(); elemIter != expansionMap->end();
1622 if ((elemIter->second)->m_geomShPtr->GetShapeType() == shape)
1624 (elemIter->second)->m_basisKeyVector = keys;
1668 nummodes + quadoffset,
1672 returnval.push_back(bkey);
1678 nummodes + quadoffset,
1682 returnval.push_back(bkey);
1683 returnval.push_back(bkey);
1689 nummodes + quadoffset,
1693 returnval.push_back(bkey);
1694 returnval.push_back(bkey);
1695 returnval.push_back(bkey);
1701 nummodes + quadoffset,
1705 returnval.push_back(bkey);
1708 nummodes + quadoffset - 1,
1709 LibUtilities::eGaussRadauMAlpha1Beta0);
1713 returnval.push_back(bkey1);
1719 nummodes + quadoffset,
1723 returnval.push_back(bkey);
1726 nummodes + quadoffset - 1,
1727 LibUtilities::eGaussRadauMAlpha1Beta0);
1730 returnval.push_back(bkey1);
1735 nummodes + quadoffset - 1,
1736 LibUtilities::eGaussRadauMAlpha1Beta0);
1739 returnval.push_back(bkey2);
1744 nummodes + quadoffset - 1,
1745 LibUtilities::eGaussRadauMAlpha2Beta0);
1748 returnval.push_back(bkey2);
1755 nummodes + quadoffset,
1759 returnval.push_back(bkey);
1760 returnval.push_back(bkey);
1763 nummodes + quadoffset,
1764 LibUtilities::eGaussRadauMAlpha2Beta0);
1767 returnval.push_back(bkey1);
1773 nummodes + quadoffset,
1777 returnval.push_back(bkey);
1778 returnval.push_back(bkey);
1781 nummodes + quadoffset - 1,
1782 LibUtilities::eGaussRadauMAlpha1Beta0);
1785 returnval.push_back(bkey1);
1791 "Expansion not defined in switch for this shape");
1808 returnval.push_back(bkey);
1817 returnval.push_back(bkey);
1818 returnval.push_back(bkey);
1828 returnval.push_back(bkey);
1831 nummodes, LibUtilities::eGaussRadauMAlpha1Beta0);
1834 returnval.push_back(bkey1);
1844 returnval.push_back(bkey);
1845 returnval.push_back(bkey);
1846 returnval.push_back(bkey);
1852 "Expansion not defined in switch for this shape");
1870 returnval.push_back(bkey);
1880 returnval.push_back(bkey);
1881 returnval.push_back(bkey);
1891 returnval.push_back(bkey);
1892 returnval.push_back(bkey);
1893 returnval.push_back(bkey);
1899 "Expansion not defined in switch for this shape");
1917 returnval.push_back(bkey);
1927 returnval.push_back(bkey);
1930 nummodes, LibUtilities::eGaussRadauMAlpha1Beta0);
1934 returnval.push_back(bkey1);
1944 returnval.push_back(bkey);
1945 returnval.push_back(bkey);
1955 returnval.push_back(bkey);
1958 nummodes, LibUtilities::eGaussRadauMAlpha1Beta0);
1962 returnval.push_back(bkey1);
1965 nummodes, LibUtilities::eGaussRadauMAlpha2Beta0);
1973 "Expansion not defined in switch for this shape");
1991 returnval.push_back(bkey);
2001 returnval.push_back(bkey);
2002 returnval.push_back(bkey);
2012 returnval.push_back(bkey);
2013 returnval.push_back(bkey);
2014 returnval.push_back(bkey);
2020 "Expansion not defined in switch for this shape");
2037 returnval.push_back(bkey);
2046 returnval.push_back(bkey);
2047 returnval.push_back(bkey);
2056 returnval.push_back(bkey);
2057 returnval.push_back(bkey);
2058 returnval.push_back(bkey);
2064 "Expansion not defined in switch for this shape");
2081 returnval.push_back(bkey);
2090 returnval.push_back(bkey);
2091 returnval.push_back(bkey);
2100 returnval.push_back(bkey);
2101 returnval.push_back(bkey);
2102 returnval.push_back(bkey);
2108 "Expansion not defined in switch for this shape");
2125 returnval.push_back(bkey);
2134 returnval.push_back(bkey);
2135 returnval.push_back(bkey);
2144 returnval.push_back(bkey);
2145 returnval.push_back(bkey);
2146 returnval.push_back(bkey);
2152 "Expansion not defined in switch for this shape");
2169 returnval.push_back(bkey);
2178 returnval.push_back(bkey);
2179 returnval.push_back(bkey);
2188 returnval.push_back(bkey);
2189 returnval.push_back(bkey);
2190 returnval.push_back(bkey);
2196 "Expansion not defined in switch for this shape");
2213 returnval.push_back(bkey);
2222 returnval.push_back(bkey);
2223 returnval.push_back(bkey);
2232 returnval.push_back(bkey);
2233 returnval.push_back(bkey);
2234 returnval.push_back(bkey);
2240 "Expansion not defined in switch for this shape");
2257 returnval.push_back(bkey);
2263 returnval.push_back(bkey1);
2269 "Expansion not defined in switch for this shape");
2286 returnval.push_back(bkey1);
2292 returnval.push_back(bkey);
2298 "Expansion not defined in switch for this shape");
2315 returnval.push_back(bkey);
2321 returnval.push_back(bkey1);
2327 "Expansion not defined in switch for this shape");
2336 ASSERTL0(
false,
"Expansion type not defined");
2349 ExpansionType type_z,
const int nummodes_x,
const int nummodes_y,
2350 const int nummodes_z)
2360 ASSERTL0(
false,
"Homogeneous expansion not defined for this shape");
2366 ASSERTL0(
false,
"Homogeneous expansion not defined for this shape");
2380 returnval.push_back(bkey1);
2390 returnval.push_back(bkey1);
2400 returnval.push_back(bkey1);
2410 returnval.push_back(bkey1);
2420 returnval.push_back(bkey1);
2426 ASSERTL0(
false,
"Homogeneous expansion can be of Fourier "
2427 "or Chebyshev type only");
2440 returnval.push_back(bkey2);
2450 returnval.push_back(bkey2);
2460 returnval.push_back(bkey2);
2470 returnval.push_back(bkey2);
2480 returnval.push_back(bkey2);
2486 ASSERTL0(
false,
"Homogeneous expansion can be of Fourier "
2487 "or Chebyshev type only");
2500 returnval.push_back(bkey3);
2510 returnval.push_back(bkey3);
2520 returnval.push_back(bkey3);
2530 returnval.push_back(bkey3);
2540 returnval.push_back(bkey3);
2546 ASSERTL0(
false,
"Homogeneous expansion can be of Fourier "
2547 "or Chebyshev type only");
2556 ASSERTL0(
false,
"Homogeneous expansion not defined for this shape");
2562 ASSERTL0(
false,
"Homogeneous expansion not defined for this shape");
2567 ASSERTL0(
false,
"Expansion not defined in switch for this shape");
2588 for (
auto &compIter :
d.second)
2591 for (
auto &x : compIter.second->m_geomVec)
2593 if (x->GetGeomFactors()->GetGtype() !=
2599 int id = x->GetGlobalID();
2600 (*returnval)[id] = expansionElementShPtr;
2604 for (
auto &x : compIter.second->m_geomVec)
2606 if (x->GetGeomFactors()->GetGtype() ==
2612 int id = x->GetGlobalID();
2613 (*returnval)[id] = expansionElementShPtr;
2627 if (comp->m_geomVec.size() == 0)
2634 map<LibUtilities::ShapeType, pair<string, string>> compMap;
2647 int shapeDim = firstGeom->GetShapeDim();
2649 ? compMap[firstGeom->GetShapeType()].second
2650 : compMap[firstGeom->GetShapeType()].first;
2652 std::vector<unsigned int> idxList;
2653 std::transform(comp->m_geomVec.begin(), comp->m_geomVec.end(),
2654 std::back_inserter(idxList),
2674 bool updateExpansion =
false;
2677 for (
int i = 0; i < geomVecIter->GetNumVerts(); ++i)
2680 geomVecIter->GetVertex(i)->GetCoords(coords);
2681 updateExpansion = region->
v_Contains(coords);
2685 if (updateExpansion)
2688 auto expInfoID = expansionMap->find(geomVecIter->GetGlobalID());
2691 std::vector<unsigned int> nModes = region->
GetNumModes();
2692 (expInfoID->second)->m_basisKeyVector =
2696 ->m_basisKeyVector.begin()
2704 std::vector<unsigned int> nModes = region->
GetNumModes();
2705 std::vector<unsigned int> nPoints = region->
GetNumPoints();
2706 for (
auto basis = expInfoID->second->m_basisKeyVector.begin();
2707 basis != expInfoID->second->m_basisKeyVector.end();
2712 basis->GetPointsType());
2714 basis->GetBasisType(), nModes[cnt], pkey));
2717 (expInfoID->second)->m_basisKeyVector = updatedBasisKey;
2719 updateExpansion =
false;
2740 for (
auto compVecIter = pRefinement->second.begin();
2741 compVecIter != pRefinement->second.end(); ++compVecIter)
2743 for (
auto geomVecIter = compVecIter->second->m_geomVec.begin();
2744 geomVecIter != compVecIter->second->m_geomVec.end();
2755 if (region->first == pRefinement->first)
2777 TiXmlElement *refinementTypes =
m_session->GetElement(
"NEKTAR/REFINEMENTS");
2779 if (refinementTypes)
2781 TiXmlElement *refinement = refinementTypes->FirstChildElement();
2782 ASSERTL0(refinement,
"Unable to find entries in REFINEMENTS tag "
2784 std::string refType = refinement->Value();
2790 std::vector<NekDouble> coord1Vector, coord2Vector;
2791 std::vector<unsigned int> nModesVector, nPointsVector;
2794 const char *idStr = refinement->Attribute(
"REF");
2795 ASSERTL0(idStr,
"REF was not defined in REFINEMENT section "
2798 unsigned id = boost::lexical_cast<unsigned int>(idStr);
2801 const char *radiusStr = refinement->Attribute(
"RADIUS");
2802 ASSERTL0(radiusStr,
"RADIUS was not defined in REFINEMENT "
2803 "section of input");
2805 NekDouble radius = boost::lexical_cast<NekDouble>(radiusStr);
2808 const char *c1Str = refinement->Attribute(
"COORDINATE1");
2809 ASSERTL0(c1Str,
"COORDINATE1 was not defined in REFINEMENT"
2810 "section of input");
2812 std::string coord1String = c1Str;
2815 ASSERTL0(valid,
"Unable to correctly parse the axes "
2816 "values for COORDINATE1");
2819 "Number of coordinates do not match the space "
2820 "dimension for COORDINATE1");
2823 const char *rType = refinement->Attribute(
"TYPE");
2824 ASSERTL0(rType,
"TYPE was not defined in REFINEMENT "
2825 "section of input");
2828 const char *c2Str = refinement->Attribute(
"COORDINATE2");
2830 if (strcmp(rType,
"STANDARD") == 0)
2832 ASSERTL0(c2Str,
"COORDINATE2 was not defined in REFINEMENT "
2833 "section of input");
2835 std::string coord2String = c2Str;
2838 ASSERTL0(valid,
"Unable to correctly parse the axes "
2839 "values for COORDINATE2");
2841 "Number of coordinates do not match the space "
2842 "dimension for COORDINATE2");
2848 "The mesh dimension must match the space dimension");
2850 else if (strcmp(rType,
"SPHERE") == 0)
2853 ASSERTL0(!c2Str,
"COORDINATE2 should not be defined in "
2854 "REFINEMENT section of input for the "
2857 coord2Vector.clear();
2862 "Invalid refinement type");
2869 const char *nModesStr = refinement->Attribute(
"NUMMODES");
2870 ASSERTL0(nModesStr,
"NUMMODES was not defined in "
2871 "Refinement section of input");
2873 std::string numModesStr = nModesStr;
2877 "Unable to correctly parse the number of modes");
2880 const char *nPointsStr = refinement->Attribute(
"NUMPOINTS");
2881 ASSERTL0(nPointsStr,
"NUMPOINTS was not defined in "
2882 "Refinement section of input");
2884 std::string numPointsStr = nPointsStr;
2888 "Unable to correctly parse the number of modes");
2892 const char *nModesStr = refinement->Attribute(
"NUMMODES");
2894 "NUMMODES was not defined in Refinement "
2895 "section of input");
2897 std::string numModesStr = nModesStr;
2902 m_session->GetInterpreter(), numModesStr);
2903 n_modesRef = (int)nummodesEqn.
Evaluate();
2907 n_modesRef = boost::lexical_cast<int>(numModesStr);
2909 nModesVector.push_back(n_modesRef);
2910 nPointsVector.clear();
2914 if (strcmp(rType,
"STANDARD") == 0)
2924 coord2Vector, nModesVector, nPointsVector);
2933 coord2Vector, nModesVector, nPointsVector);
2941 coord2Vector, nModesVector, nPointsVector);
2951 nModesVector, nPointsVector);
2955 refinement = refinement->NextSiblingElement(
"R");
2962 "Unable to find REFINEMENTS tag in file");
2969 TiXmlElement *expansionTypes =
m_session->GetElement(
"NEKTAR/EXPANSIONS");
2971 expansionTypes,
m_session->GetTimeLevel());
2973 ASSERTL0(expansionTypes,
"Unable to find EXPANSIONS tag in file.");
2978 TiXmlElement *expansion = expansionTypes->FirstChildElement();
2979 ASSERTL0(expansion,
"Unable to find entries in EXPANSIONS tag in "
2981 std::string expType = expansion->Value();
2982 std::vector<std::string> vars =
m_session->GetVariables();
3003 map<int, bool> domainCompList;
3006 for (
auto &c :
d.second)
3008 domainCompList[c.first] =
false;
3011 map<std::string, map<int, bool>> fieldDomainCompList;
3016 std::string compositeStr = expansion->Attribute(
"COMPOSITE");
3017 ASSERTL0(compositeStr.length() > 3,
3018 "COMPOSITE must be specified in expansion definition");
3019 int beg = compositeStr.find_first_of(
"[");
3020 int end = compositeStr.find_first_of(
"]");
3021 std::string compositeListStr =
3022 compositeStr.substr(beg + 1, end - beg - 1);
3024 map<int, CompositeSharedPtr> compositeVector;
3028 const char *fStr = expansion->Attribute(
"FIELDS");
3029 std::vector<std::string> fieldStrings;
3033 std::string fieldStr = fStr;
3036 ASSERTL0(valid,
"Unable to correctly parse the field "
3037 "string in ExpansionTypes.");
3053 for (i = 0; i < fieldStrings.size(); ++i)
3055 if (vars.size() && std::count(vars.begin(), vars.end(),
3056 fieldStrings[i]) == 0)
3058 ASSERTL0(
false,
"Variable '" + fieldStrings[i] +
3059 "' defined in EXPANSIONS is not"
3060 " defined in VARIABLES.");
3070 fieldDomainCompList[fieldStrings[i]] =
3072 for (
auto c = compositeVector.begin();
3073 c != compositeVector.end(); ++c)
3075 fieldDomainCompList.find(fieldStrings[i])
3076 ->second.find(c->first)
3082 for (
auto c = compositeVector.begin();
3083 c != compositeVector.end(); ++c)
3085 if (fieldDomainCompList.find(fieldStrings[i])
3086 ->second.find(c->first)
3089 fieldDomainCompList.find(fieldStrings[i])
3090 ->second.find(c->first)
3096 "Expansion vector for "
3099 "' is already setup for C[" +
3100 to_string(c->first) +
"].");
3116 fieldDomainCompList[
"DefaultVar"] = domainCompList;
3117 for (
auto c = compositeVector.begin();
3118 c != compositeVector.end(); ++c)
3120 fieldDomainCompList.find(
"DefaultVar")
3121 ->second.find(c->first)
3127 for (
auto c = compositeVector.begin();
3128 c != compositeVector.end(); ++c)
3130 if (fieldDomainCompList.find(
"DefaultVar")
3131 ->second.find(c->first)
3134 fieldDomainCompList.find(
"DefaultVar")
3135 ->second.find(c->first)
3140 ASSERTL0(
false,
"Default expansion already "
3142 to_string(c->first) +
"].");
3156 const char *tStr = expansion->Attribute(
"TYPE");
3160 std::string typeStr = tStr;
3162 const std::string *endStr =
3164 const std::string *expStr =
3167 ASSERTL0(expStr != endStr,
"Invalid expansion type.");
3182 const char *nStr = expansion->Attribute(
"NUMMODES");
3183 ASSERTL0(nStr,
"NUMMODES was not defined in EXPANSION "
3184 "section of input");
3185 std::string nummodesStr = nStr;
3192 m_session->GetInterpreter(), nummodesStr);
3193 num_modes = (int)nummodesEqn.
Evaluate();
3197 num_modes = boost::lexical_cast<int>(nummodesStr);
3205 const char *bTypeStr = expansion->Attribute(
"BASISTYPE");
3206 ASSERTL0(bTypeStr,
"TYPE or BASISTYPE was not defined in "
3207 "EXPANSION section of input");
3208 std::string basisTypeStr = bTypeStr;
3211 std::vector<std::string> basisStrings;
3212 std::vector<LibUtilities::BasisType> basis;
3214 basisTypeStr.c_str(), basisStrings);
3216 "Unable to correctly parse the basis types.");
3217 for (vector<std::string>::size_type i = 0;
3218 i < basisStrings.size(); i++)
3221 for (
unsigned int j = 0;
3235 "Unable to correctly parse the basis type: ")
3236 .append(basisStrings[i])
3239 const char *nModesStr = expansion->Attribute(
"NUMMODES");
3240 ASSERTL0(nModesStr,
"NUMMODES was not defined in EXPANSION "
3241 "section of input");
3243 std::string numModesStr = nModesStr;
3244 std::vector<unsigned int> numModes;
3248 "Unable to correctly parse the number of modes.");
3249 ASSERTL0(numModes.size() == basis.size(),
3250 "information for num modes does not match the "
3253 const char *pTypeStr = expansion->Attribute(
"POINTSTYPE");
3254 ASSERTL0(pTypeStr,
"POINTSTYPE was not defined in "
3255 "EXPANSION section of input");
3256 std::string pointsTypeStr = pTypeStr;
3258 std::vector<std::string> pointsStrings;
3259 std::vector<LibUtilities::PointsType> points;
3263 "Unable to correctly parse the points types.");
3264 for (vector<std::string>::size_type i = 0;
3265 i < pointsStrings.size(); i++)
3268 for (
unsigned int j = 0;
3282 "Unable to correctly parse the points type: ")
3283 .append(pointsStrings[i])
3287 const char *nPointsStr = expansion->Attribute(
"NUMPOINTS");
3288 ASSERTL0(nPointsStr,
"NUMPOINTS was not defined in "
3289 "EXPANSION section of input");
3290 std::string numPointsStr = nPointsStr;
3291 std::vector<unsigned int> numPoints;
3295 "Unable to correctly parse the number of points.");
3296 ASSERTL0(numPoints.size() == numPoints.size(),
3297 "information for num points does not match the "
3300 for (
int i = 0; i < basis.size(); ++i)
3306 basis[i], numModes[i], pkey));
3311 const char *refIDsStr = expansion->Attribute(
"REFIDS");
3314 vector<NekDouble> refIDsVector;
3315 string refIDsString = refIDsStr;
3318 ASSERTL0(valid,
"Unable to correctly parse the ids "
3322 for (
auto iter = refIDsVector.begin();
3323 iter != refIDsVector.end(); ++iter)
3334 for (
auto compVecIter = compositeVector.begin();
3335 compVecIter != compositeVector.end(); ++compVecIter)
3337 for (
auto geomVecIter =
3338 compVecIter->second->m_geomVec.begin();
3339 geomVecIter != compVecIter->second->m_geomVec.end();
3343 expansionMap->find((*geomVecIter)->GetGlobalID());
3345 x != expansionMap->end(),
3347 std::to_string((*geomVecIter)->GetGlobalID()) +
3351 (x->second)->m_basisKeyVector =
3353 *geomVecIter, expansion_type, num_modes);
3357 ASSERTL0((*geomVecIter)->GetShapeDim() ==
3359 " There is an incompatible expansion "
3360 "dimension with geometry dimension");
3361 (x->second)->m_basisKeyVector = basiskeyvec;
3366 expansion = expansion->NextSiblingElement(
"E");
3372 for (
auto f = fieldDomainCompList.begin();
3373 f != fieldDomainCompList.end(); ++f)
3375 if (f->first !=
"DefaultVar")
3377 for (
auto c = f->second.begin(); c != f->second.end(); ++c)
3379 if (c->second ==
false &&
3380 fieldDomainCompList.find(
"DefaultVar")
3381 ->second.find(c->first)
3386 for (
auto geomVecIter =
3388 ->second->m_geomVec.begin();
3390 ->second->m_geomVec.end();
3396 (*geomVecIter)->GetGlobalID());
3401 (*geomVecIter)->GetGlobalID());
3403 (xField->second)->m_basisKeyVector =
3404 (xDefaultVar->second)->m_basisKeyVector;
3410 "Using Default expansion definition for "
3415 to_string(c->first) +
"].")
3418 ASSERTL0(c->second,
"There is no expansion defined for "
3420 f->first +
"' in C[" +
3421 to_string(c->first) +
"].");
3427 for (i = 0; i < vars.size(); ++i)
3440 "Using Default expansion definition for field "
3447 ASSERTL0(
false,
"Variable '" + vars[i] +
3449 " in FIELDS attribute of EXPANSIONS"
3479 else if (expType ==
"H")
3487 map<int, bool> domainCompList;
3490 for (
auto &c :
d.second)
3492 domainCompList[c.first] =
false;
3495 map<std::string, map<int, bool>> fieldDomainCompList;
3500 std::string compositeStr = expansion->Attribute(
"COMPOSITE");
3501 ASSERTL0(compositeStr.length() > 3,
3502 "COMPOSITE must be specified in expansion definition");
3503 int beg = compositeStr.find_first_of(
"[");
3504 int end = compositeStr.find_first_of(
"]");
3505 std::string compositeListStr =
3506 compositeStr.substr(beg + 1, end - beg - 1);
3508 map<int, CompositeSharedPtr> compositeVector;
3512 const char *fStr = expansion->Attribute(
"FIELDS");
3513 std::vector<std::string> fieldStrings;
3517 std::string fieldStr = fStr;
3520 ASSERTL0(valid,
"Unable to correctly parse the field "
3521 "string in ExpansionTypes.");
3537 for (i = 0; i < fieldStrings.size(); ++i)
3539 if (vars.size() && std::count(vars.begin(), vars.end(),
3540 fieldStrings[i]) == 0)
3542 ASSERTL0(
false,
"Variable '" + fieldStrings[i] +
3543 "' defined in EXPANSIONS is not"
3544 " defined in VARIABLES.");
3554 fieldDomainCompList[fieldStrings[i]] =
3556 for (
auto c = compositeVector.begin();
3557 c != compositeVector.end(); ++c)
3559 fieldDomainCompList.find(fieldStrings[i])
3560 ->second.find(c->first)
3566 for (
auto c = compositeVector.begin();
3567 c != compositeVector.end(); ++c)
3569 if (fieldDomainCompList.find(fieldStrings[i])
3570 ->second.find(c->first)
3573 fieldDomainCompList.find(fieldStrings[i])
3574 ->second.find(c->first)
3580 "Expansion vector for "
3583 "' is already setup for C[" +
3584 to_string(c->first) +
"].");
3600 fieldDomainCompList[
"DefaultVar"] = domainCompList;
3601 for (
auto c = compositeVector.begin();
3602 c != compositeVector.end(); ++c)
3604 fieldDomainCompList.find(
"DefaultVar")
3605 ->second.find(c->first)
3611 for (
auto c = compositeVector.begin();
3612 c != compositeVector.end(); ++c)
3614 if (fieldDomainCompList.find(
"DefaultVar")
3615 ->second.find(c->first)
3618 fieldDomainCompList.find(
"DefaultVar")
3619 ->second.find(c->first)
3624 ASSERTL0(
false,
"Default expansion already "
3626 to_string(c->first) +
"].");
3638 int num_modes_x = 0;
3639 int num_modes_y = 0;
3640 int num_modes_z = 0;
3644 const char *tStr_x = expansion->Attribute(
"TYPE-X");
3648 std::string typeStr = tStr_x;
3650 const std::string *endStr =
3652 const std::string *expStr =
3655 ASSERTL0(expStr != endStr,
"Invalid expansion type.");
3658 const char *nStr = expansion->Attribute(
"NUMMODES-X");
3659 ASSERTL0(nStr,
"NUMMODES-X was not defined in EXPANSION "
3660 "section of input");
3661 std::string nummodesStr = nStr;
3669 m_session->GetInterpreter(), nummodesStr);
3670 num_modes_x = (int)nummodesEqn.
Evaluate();
3674 num_modes_x = boost::lexical_cast<int>(nummodesStr);
3678 const char *tStr_y = expansion->Attribute(
"TYPE-Y");
3682 std::string typeStr = tStr_y;
3684 const std::string *endStr =
3686 const std::string *expStr =
3689 ASSERTL0(expStr != endStr,
"Invalid expansion type.");
3692 const char *nStr = expansion->Attribute(
"NUMMODES-Y");
3693 ASSERTL0(nStr,
"NUMMODES-Y was not defined in EXPANSION "
3694 "section of input");
3695 std::string nummodesStr = nStr;
3702 m_session->GetInterpreter(), nummodesStr);
3703 num_modes_y = (int)nummodesEqn.
Evaluate();
3707 num_modes_y = boost::lexical_cast<int>(nummodesStr);
3711 const char *tStr_z = expansion->Attribute(
"TYPE-Z");
3715 std::string typeStr = tStr_z;
3717 const std::string *endStr =
3719 const std::string *expStr =
3722 ASSERTL0(expStr != endStr,
"Invalid expansion type.");
3725 const char *nStr = expansion->Attribute(
"NUMMODES-Z");
3726 ASSERTL0(nStr,
"NUMMODES-Z was not defined in EXPANSION "
3727 "section of input");
3728 std::string nummodesStr = nStr;
3735 m_session->GetInterpreter(), nummodesStr);
3736 num_modes_z = (int)nummodesEqn.
Evaluate();
3740 num_modes_z = boost::lexical_cast<int>(nummodesStr);
3744 for (
auto compVecIter = compositeVector.begin();
3745 compVecIter != compositeVector.end(); ++compVecIter)
3747 for (
auto geomVecIter =
3748 compVecIter->second->m_geomVec.begin();
3749 geomVecIter != compVecIter->second->m_geomVec.end();
3752 for (
auto expVecIter = expansionMap->begin();
3753 expVecIter != expansionMap->end(); ++expVecIter)
3756 (expVecIter->second)->m_basisKeyVector =
3758 *geomVecIter, expansion_type_x,
3759 expansion_type_y, expansion_type_z,
3760 num_modes_x, num_modes_y, num_modes_z);
3765 expansion = expansion->NextSiblingElement(
"H");
3771 for (
auto f = fieldDomainCompList.begin();
3772 f != fieldDomainCompList.end(); ++f)
3774 if (f->first !=
"DefaultVar")
3776 for (
auto c = f->second.begin(); c != f->second.end(); ++c)
3778 if (c->second ==
false &&
3779 fieldDomainCompList.find(
"DefaultVar")
3780 ->second.find(c->first)
3785 for (
auto geomVecIter =
3787 ->second->m_geomVec.begin();
3789 ->second->m_geomVec.end();
3795 (*geomVecIter)->GetGlobalID());
3800 (*geomVecIter)->GetGlobalID());
3802 (xField->second)->m_basisKeyVector =
3803 (xDefaultVar->second)->m_basisKeyVector;
3809 "Using Default expansion definition for "
3814 to_string(c->first) +
"].")
3817 ASSERTL0(c->second,
"There is no expansion defined for "
3819 f->first +
"' in C[" +
3820 to_string(c->first) +
"].");
3826 for (i = 0; i < vars.size(); ++i)
3839 "Using Default expansion definition for field "
3846 ASSERTL0(
false,
"Variable '" + vars[i] +
3848 " in FIELDS attribute of EXPANSIONS"
3869 std::vector<LibUtilities::FieldDefinitionsSharedPtr> fielddefs;
3873 std::shared_ptr<LibUtilities::FieldIOXml> f =
3874 make_shared<LibUtilities::FieldIOXml>(
m_session->GetComm(),
3879 cout <<
" Number of elements: " << fielddefs.size() << endl;
3882 else if (expType ==
"F")
3884 ASSERTL0(expansion->Attribute(
"FILE"),
3885 "Attribute FILE expected for type F expansion");
3886 std::string filenameStr = expansion->Attribute(
"FILE");
3888 "A filename must be specified for the FILE "
3889 "attribute of expansion");
3891 std::vector<LibUtilities::FieldDefinitionsSharedPtr> fielddefs;
3894 f->Import(filenameStr, fielddefs);
3899 ASSERTL0(
false,
"Expansion type not defined");
3918 for (
auto &compIter :
d.second)
3920 for (
auto &geomIter : compIter.second->m_geomVec)
3922 triGeomShPtr = std::dynamic_pointer_cast<TriGeom>(geomIter);
3923 quadGeomShPtr = std::dynamic_pointer_cast<QuadGeom>(geomIter);
3925 if (triGeomShPtr || quadGeomShPtr)
3929 for (
int i = 0; i < triGeomShPtr->GetNumEdges(); i++)
3931 if (triGeomShPtr->GetEdge(i)->GetGlobalID() ==
3932 edge->GetGlobalID())
3934 ret->push_back(make_pair(triGeomShPtr, i));
3939 else if (quadGeomShPtr)
3941 for (
int i = 0; i < quadGeomShPtr->GetNumEdges(); i++)
3943 if (quadGeomShPtr->GetEdge(i)->GetGlobalID() ==
3944 edge->GetGlobalID())
3946 ret->push_back(make_pair(quadGeomShPtr, i));
3980 for (
int i = 0; i < kNfaces; ++i)
3982 int faceId = element->GetFace(i)->GetGlobalID();
3991 tmp->push_back(make_pair(element, i));
3996 it->second->push_back(make_pair(element, i));
4010 std::map<int, MeshEntity> elements;
4019 e.
list.push_back(i.second->GetVertex(0)->GetGlobalID());
4020 e.
list.push_back(i.second->GetVertex(1)->GetGlobalID());
4032 e.
list.push_back(i.second->GetEdge(0)->GetGlobalID());
4033 e.
list.push_back(i.second->GetEdge(1)->GetGlobalID());
4034 e.
list.push_back(i.second->GetEdge(2)->GetGlobalID());
4042 e.
list.push_back(i.second->GetEdge(0)->GetGlobalID());
4043 e.
list.push_back(i.second->GetEdge(1)->GetGlobalID());
4044 e.
list.push_back(i.second->GetEdge(2)->GetGlobalID());
4045 e.
list.push_back(i.second->GetEdge(3)->GetGlobalID());
4057 e.
list.push_back(i.second->GetFace(0)->GetGlobalID());
4058 e.
list.push_back(i.second->GetFace(1)->GetGlobalID());
4059 e.
list.push_back(i.second->GetFace(2)->GetGlobalID());
4060 e.
list.push_back(i.second->GetFace(3)->GetGlobalID());
4068 e.
list.push_back(i.second->GetFace(0)->GetGlobalID());
4069 e.
list.push_back(i.second->GetFace(1)->GetGlobalID());
4070 e.
list.push_back(i.second->GetFace(2)->GetGlobalID());
4071 e.
list.push_back(i.second->GetFace(3)->GetGlobalID());
4072 e.
list.push_back(i.second->GetFace(4)->GetGlobalID());
4080 e.
list.push_back(i.second->GetFace(0)->GetGlobalID());
4081 e.
list.push_back(i.second->GetFace(1)->GetGlobalID());
4082 e.
list.push_back(i.second->GetFace(2)->GetGlobalID());
4083 e.
list.push_back(i.second->GetFace(3)->GetGlobalID());
4084 e.
list.push_back(i.second->GetFace(4)->GetGlobalID());
4092 e.
list.push_back(i.second->GetFace(0)->GetGlobalID());
4093 e.
list.push_back(i.second->GetFace(1)->GetGlobalID());
4094 e.
list.push_back(i.second->GetFace(2)->GetGlobalID());
4095 e.
list.push_back(i.second->GetFace(3)->GetGlobalID());
4096 e.
list.push_back(i.second->GetFace(4)->GetGlobalID());
4097 e.
list.push_back(i.second->GetFace(5)->GetGlobalID());
4114 std::pair<LibUtilities::ShapeType, vector<int>> tmp;
4115 tmp.first = comp.second->m_geomVec[0]->GetShapeType();
4117 tmp.second.resize(comp.second->m_geomVec.size());
4118 for (
size_t i = 0; i < tmp.second.size(); ++i)
4120 tmp.second[i] = comp.second->m_geomVec[i]->GetGlobalID();
4123 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 enableCheck=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)
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