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>
68namespace bg = boost::geometry;
75 typedef bg::model::point<NekDouble, 3, bg::cs::cartesian>
BgPoint;
76 typedef bg::model::box<BgPoint>
BgBox;
79 bg::index::rtree<BgRtreeValue, bg::index::rstar<16, 4>>
m_bgTree;
83 std::array<NekDouble, 6> minMax = geom->GetBoundingBox();
84 BgPoint ptMin(minMax[0], minMax[1], minMax[2]);
85 BgPoint ptMax(minMax[3], minMax[4], minMax[5]);
87 std::make_pair(
BgBox(ptMin, ptMax), geom->GetGlobalID()));
241 std::vector<GeomRTree::BgRtreeValue> matches;
243 p->GetCoords(x, y,
z);
249 std::back_inserter(matches));
251 std::vector<int> vals(matches.size());
253 for (
int i = 0; i < matches.size(); ++i)
255 vals[i] = matches[i].second;
287 bool returnval =
true;
299 for (
int i = 0; i < nverts; ++i)
302 if (xval < m_domainRange->m_xmin)
316 if ((ncnt_up == nverts) || (ncnt_low == nverts))
327 for (
int i = 0; i < nverts; ++i)
330 if (yval < m_domainRange->m_ymin)
344 if ((ncnt_up == nverts) || (ncnt_low == nverts))
358 for (
int i = 0; i < nverts; ++i)
362 if (zval < m_domainRange->m_zmin)
376 if ((ncnt_up == nverts) || (ncnt_low == nverts))
389 bool returnval =
true;
400 for (
int i = 0; i < nverts; ++i)
403 if (xval < m_domainRange->m_xmin)
417 if ((ncnt_up == nverts) || (ncnt_low == nverts))
427 for (
int i = 0; i < nverts; ++i)
430 if (yval < m_domainRange->m_ymin)
444 if ((ncnt_up == nverts) || (ncnt_low == nverts))
454 for (
int i = 0; i < nverts; ++i)
458 if (zval < m_domainRange->m_zmin)
472 if ((ncnt_up == nverts) || (ncnt_low == nverts))
500 if (whichItem >= 0 &&
517 std::ostringstream errStream;
518 errStream <<
"Unable to access composite item [" << whichComposite
519 <<
"][" << whichItem <<
"].";
521 std::string testStr = errStream.str();
536 std::vector<unsigned int> seqVector;
541 parseGood && !seqVector.empty(),
542 (std::string(
"Unable to read composite index range: ") + compositeStr)
545 std::vector<unsigned int> addedVector;
547 for (
auto iter = seqVector.begin(); iter != seqVector.end(); ++iter)
552 if (
std::find(addedVector.begin(), addedVector.end(), *iter) ==
564 addedVector.push_back(*iter);
566 "Composite not found.");
571 compositeVector[*iter] = composite;
576 (
"Undefined composite: " + std::to_string(*iter)));
600 "Unable to find expansion vector definition for field: ") +
610 "Using Default variable expansion definition for field: ") +
622 const std::string variable)
627 auto iter = expansionMap->find(geom->GetGlobalID());
628 ASSERTL1(iter != expansionMap->end(),
629 "Could not find expansion " + std::to_string(geom->GetGlobalID()) +
630 " in expansion for variable " + variable);
638 std::vector<LibUtilities::FieldDefinitionsSharedPtr> &fielddef)
640 int i, j, k, cnt, id;
647 for (i = 0; i < fielddef.size(); ++i)
649 for (j = 0; j < fielddef[i]->m_fields.size(); ++j)
651 std::string
field = fielddef[i]->m_fields[j];
669 for (i = 0; i < fielddef.size(); ++i)
672 std::vector<std::string> fields = fielddef[i]->m_fields;
673 std::vector<unsigned int> nmodes = fielddef[i]->m_numModes;
674 std::vector<LibUtilities::BasisType> basis = fielddef[i]->m_basis;
675 bool pointDef = fielddef[i]->m_pointsDef;
676 bool numPointDef = fielddef[i]->m_numPointsDef;
679 std::vector<unsigned int> npoints = fielddef[i]->m_numPoints;
680 std::vector<LibUtilities::PointsType> points = fielddef[i]->m_points;
682 bool UniOrder = fielddef[i]->m_uniOrder;
684 for (j = 0; j < fielddef[i]->m_elementIDs.size(); ++j)
688 id = fielddef[i]->m_elementIDs[j];
690 switch (fielddef[i]->m_shapeType)
694 if (
m_segGeoms.count(fielddef[i]->m_elementIDs[j]) == 0)
700 cnt += fielddef[i]->m_numHomogeneousDir;
704 geom =
m_segGeoms[fielddef[i]->m_elementIDs[j]];
709 if (numPointDef && pointDef)
715 else if (!numPointDef && pointDef)
721 else if (numPointDef && !pointDef)
733 cnt += fielddef[i]->m_numHomogeneousDir;
735 bkeyvec.push_back(bkey);
740 if (
m_triGeoms.count(fielddef[i]->m_elementIDs[j]) == 0)
746 cnt += fielddef[i]->m_numHomogeneousDir;
750 geom =
m_triGeoms[fielddef[i]->m_elementIDs[j]];
754 if (numPointDef && pointDef)
760 else if (!numPointDef && pointDef)
766 else if (numPointDef && !pointDef)
774 bkeyvec.push_back(bkey);
777 nmodes[cnt + 1], LibUtilities::eGaussRadauMAlpha1Beta0);
778 if (numPointDef && pointDef)
784 else if (!numPointDef && pointDef)
790 else if (numPointDef && !pointDef)
794 LibUtilities::eGaussRadauMAlpha1Beta0);
799 bkeyvec.push_back(bkey1);
804 cnt += fielddef[i]->m_numHomogeneousDir;
810 if (
m_quadGeoms.count(fielddef[i]->m_elementIDs[j]) == 0)
816 cnt += fielddef[i]->m_numHomogeneousDir;
823 for (
int b = 0; b < 2; ++b)
829 if (numPointDef && pointDef)
832 npoints[cnt + b], points[b]);
835 else if (!numPointDef && pointDef)
838 nmodes[cnt + b] + 1, points[b]);
841 else if (numPointDef && !pointDef)
850 bkeyvec.push_back(bkey);
856 cnt += fielddef[i]->m_numHomogeneousDir;
863 k = fielddef[i]->m_elementIDs[j];
883 if (numPointDef && pointDef)
889 else if (!numPointDef && pointDef)
895 else if (numPointDef && !pointDef)
906 bkeyvec.push_back(bkey);
911 LibUtilities::eGaussRadauMAlpha1Beta0);
913 if (numPointDef && pointDef)
916 npoints[cnt + 1], points[1]);
919 else if (!numPointDef && pointDef)
922 nmodes[cnt + 1] + 1, points[1]);
925 else if (numPointDef && !pointDef)
929 LibUtilities::eGaussRadauMAlpha1Beta0);
936 bkeyvec.push_back(bkey);
942 LibUtilities::eGaussRadauMAlpha2Beta0);
944 if (numPointDef && pointDef)
947 npoints[cnt + 2], points[2]);
950 else if (!numPointDef && pointDef)
953 nmodes[cnt + 2] + 1, points[2]);
956 else if (numPointDef && !pointDef)
960 LibUtilities::eGaussRadauMAlpha1Beta0);
967 bkeyvec.push_back(bkey);
978 k = fielddef[i]->m_elementIDs[j];
989 for (
int b = 0; b < 2; ++b)
995 if (numPointDef && pointDef)
998 npoints[cnt + b], points[b]);
1001 else if (!numPointDef && pointDef)
1004 nmodes[cnt + b] + 1, points[b]);
1007 else if (numPointDef && !pointDef)
1017 bkeyvec.push_back(bkey);
1023 LibUtilities::eGaussRadauMAlpha1Beta0);
1025 if (numPointDef && pointDef)
1028 npoints[cnt + 2], points[2]);
1031 else if (!numPointDef && pointDef)
1034 nmodes[cnt + 2] + 1, points[2]);
1037 else if (numPointDef && !pointDef)
1047 bkeyvec.push_back(bkey);
1058 k = fielddef[i]->m_elementIDs[j];
1060 "Failed to find geometry with same global id");
1063 for (
int b = 0; b < 2; ++b)
1066 nmodes[cnt + b] + 1,
1069 if (numPointDef && pointDef)
1072 npoints[cnt + b], points[b]);
1075 else if (!numPointDef && pointDef)
1078 nmodes[cnt + b] + 1, points[b]);
1081 else if (numPointDef && !pointDef)
1091 bkeyvec.push_back(bkey);
1097 LibUtilities::eGaussRadauMAlpha2Beta0);
1099 if (numPointDef && pointDef)
1102 npoints[cnt + 2], points[2]);
1105 else if (!numPointDef && pointDef)
1108 nmodes[cnt + 2] + 1, points[2]);
1111 else if (numPointDef && !pointDef)
1121 bkeyvec.push_back(bkey);
1132 k = fielddef[i]->m_elementIDs[j];
1144 for (
int b = 0; b < 3; ++b)
1150 if (numPointDef && pointDef)
1153 npoints[cnt + b], points[b]);
1156 else if (!numPointDef && pointDef)
1159 nmodes[cnt + b] + 1, points[b]);
1162 else if (numPointDef && !pointDef)
1172 bkeyvec.push_back(bkey);
1182 ASSERTL0(
false,
"Need to set up for pyramid and prism 3D "
1187 for (k = 0; k < fields.size(); ++k)
1190 if ((*expansionMap).find(
id) != (*expansionMap).end())
1192 (*expansionMap)[id]->m_geomShPtr = geom;
1193 (*expansionMap)[id]->m_basisKeyVector = bkeyvec;
1204 std::vector<LibUtilities::FieldDefinitionsSharedPtr> &fielddef,
1205 std::vector<std::vector<LibUtilities::PointsType>> &pointstype)
1207 int i, j, k, cnt, id;
1214 for (i = 0; i < fielddef.size(); ++i)
1216 for (j = 0; j < fielddef[i]->m_fields.size(); ++j)
1218 std::string
field = fielddef[i]->m_fields[j];
1236 for (i = 0; i < fielddef.size(); ++i)
1239 std::vector<std::string> fields = fielddef[i]->m_fields;
1240 std::vector<unsigned int> nmodes = fielddef[i]->m_numModes;
1241 std::vector<LibUtilities::BasisType> basis = fielddef[i]->m_basis;
1242 bool UniOrder = fielddef[i]->m_uniOrder;
1244 for (j = 0; j < fielddef[i]->m_elementIDs.size(); ++j)
1247 id = fielddef[i]->m_elementIDs[j];
1249 switch (fielddef[i]->m_shapeType)
1253 k = fielddef[i]->m_elementIDs[j];
1255 "Failed to find geometry with same global id.");
1264 cnt += fielddef[i]->m_numHomogeneousDir;
1266 bkeyvec.push_back(bkey);
1271 k = fielddef[i]->m_elementIDs[j];
1273 "Failed to find geometry with same global id.");
1275 for (
int b = 0; b < 2; ++b)
1281 bkeyvec.push_back(bkey);
1287 cnt += fielddef[i]->m_numHomogeneousDir;
1293 k = fielddef[i]->m_elementIDs[j];
1295 "Failed to find geometry with same global id");
1298 for (
int b = 0; b < 2; ++b)
1304 bkeyvec.push_back(bkey);
1310 cnt += fielddef[i]->m_numHomogeneousDir;
1316 k = fielddef[i]->m_elementIDs[j];
1318 "Failed to find geometry with same global id");
1321 for (
int b = 0; b < 3; ++b)
1327 bkeyvec.push_back(bkey);
1338 k = fielddef[i]->m_elementIDs[j];
1340 "Failed to find geometry with same global id");
1343 for (
int b = 0; b < 3; ++b)
1349 bkeyvec.push_back(bkey);
1360 k = fielddef[i]->m_elementIDs[j];
1362 "Failed to find geometry with same global id");
1365 for (
int b = 0; b < 3; ++b)
1371 bkeyvec.push_back(bkey);
1382 k = fielddef[i]->m_elementIDs[j];
1384 "Failed to find geometry with same global id");
1387 for (
int b = 0; b < 3; ++b)
1393 bkeyvec.push_back(bkey);
1403 ASSERTL0(
false,
"Need to set up for pyramid and prism 3D "
1408 for (k = 0; k < fields.size(); ++k)
1411 if ((*expansionMap).find(
id) != (*expansionMap).end())
1413 (*expansionMap)[id]->m_geomShPtr = geom;
1414 (*expansionMap)[id]->m_basisKeyVector = bkeyvec;
1432 for (
auto expIt = it->second->begin(); expIt != it->second->end();
1435 for (
int i = 0; i < expIt->second->m_basisKeyVector.size(); ++i)
1438 expIt->second->m_basisKeyVector[i];
1450 npts = std::max(npts, 2);
1456 expIt->second->m_basisKeyVector[i] = bkeynew;
1474 for (
auto expIt = it->second->begin(); expIt != it->second->end();
1477 for (
int i = 0; i < expIt->second->m_basisKeyVector.size(); ++i)
1480 expIt->second->m_basisKeyVector[i];
1489 expIt->second->m_basisKeyVector[i] = bkeynew;
1507 for (
auto expIt = it->second->begin(); expIt != it->second->end();
1510 for (
int i = 0; i < expIt->second->m_basisKeyVector.size(); ++i)
1513 expIt->second->m_basisKeyVector[i];
1520 expIt->second->m_basisKeyVector[i] = bkeynew;
1550 for (
auto elemIter = expansionMap->begin(); elemIter != expansionMap->end();
1553 if ((elemIter->second)->m_geomShPtr->GetShapeType() == shape)
1555 (elemIter->second)->m_basisKeyVector = keys;
1599 nummodes + quadoffset,
1603 returnval.push_back(bkey);
1609 nummodes + quadoffset,
1613 returnval.push_back(bkey);
1614 returnval.push_back(bkey);
1620 nummodes + quadoffset,
1624 returnval.push_back(bkey);
1625 returnval.push_back(bkey);
1626 returnval.push_back(bkey);
1632 nummodes + quadoffset,
1636 returnval.push_back(bkey);
1639 nummodes + quadoffset - 1,
1640 LibUtilities::eGaussRadauMAlpha1Beta0);
1644 returnval.push_back(bkey1);
1650 nummodes + quadoffset,
1654 returnval.push_back(bkey);
1657 nummodes + quadoffset - 1,
1658 LibUtilities::eGaussRadauMAlpha1Beta0);
1661 returnval.push_back(bkey1);
1666 nummodes + quadoffset - 1,
1667 LibUtilities::eGaussRadauMAlpha1Beta0);
1670 returnval.push_back(bkey2);
1675 nummodes + quadoffset - 1,
1676 LibUtilities::eGaussRadauMAlpha2Beta0);
1679 returnval.push_back(bkey2);
1686 nummodes + quadoffset,
1690 returnval.push_back(bkey);
1691 returnval.push_back(bkey);
1694 nummodes + quadoffset,
1695 LibUtilities::eGaussRadauMAlpha2Beta0);
1698 returnval.push_back(bkey1);
1704 nummodes + quadoffset,
1708 returnval.push_back(bkey);
1709 returnval.push_back(bkey);
1712 nummodes + quadoffset - 1,
1713 LibUtilities::eGaussRadauMAlpha1Beta0);
1716 returnval.push_back(bkey1);
1722 "Expansion not defined in switch for this shape");
1739 returnval.push_back(bkey);
1748 returnval.push_back(bkey);
1749 returnval.push_back(bkey);
1759 returnval.push_back(bkey);
1762 nummodes, LibUtilities::eGaussRadauMAlpha1Beta0);
1765 returnval.push_back(bkey1);
1775 returnval.push_back(bkey);
1776 returnval.push_back(bkey);
1777 returnval.push_back(bkey);
1783 "Expansion not defined in switch for this shape");
1801 returnval.push_back(bkey);
1811 returnval.push_back(bkey);
1812 returnval.push_back(bkey);
1822 returnval.push_back(bkey);
1823 returnval.push_back(bkey);
1824 returnval.push_back(bkey);
1830 "Expansion not defined in switch for this shape");
1848 returnval.push_back(bkey);
1858 returnval.push_back(bkey);
1861 nummodes, LibUtilities::eGaussRadauMAlpha1Beta0);
1865 returnval.push_back(bkey1);
1875 returnval.push_back(bkey);
1876 returnval.push_back(bkey);
1886 returnval.push_back(bkey);
1889 nummodes, LibUtilities::eGaussRadauMAlpha1Beta0);
1893 returnval.push_back(bkey1);
1896 nummodes, LibUtilities::eGaussRadauMAlpha2Beta0);
1904 "Expansion not defined in switch for this shape");
1922 returnval.push_back(bkey);
1932 returnval.push_back(bkey);
1933 returnval.push_back(bkey);
1943 returnval.push_back(bkey);
1944 returnval.push_back(bkey);
1945 returnval.push_back(bkey);
1951 "Expansion not defined in switch for this shape");
1968 returnval.push_back(bkey);
1977 returnval.push_back(bkey);
1978 returnval.push_back(bkey);
1987 returnval.push_back(bkey);
1988 returnval.push_back(bkey);
1989 returnval.push_back(bkey);
1995 "Expansion not defined in switch for this shape");
2012 returnval.push_back(bkey);
2021 returnval.push_back(bkey);
2022 returnval.push_back(bkey);
2031 returnval.push_back(bkey);
2032 returnval.push_back(bkey);
2033 returnval.push_back(bkey);
2039 "Expansion not defined in switch for this shape");
2056 returnval.push_back(bkey);
2065 returnval.push_back(bkey);
2066 returnval.push_back(bkey);
2075 returnval.push_back(bkey);
2076 returnval.push_back(bkey);
2077 returnval.push_back(bkey);
2083 "Expansion not defined in switch for this shape");
2100 returnval.push_back(bkey);
2109 returnval.push_back(bkey);
2110 returnval.push_back(bkey);
2119 returnval.push_back(bkey);
2120 returnval.push_back(bkey);
2121 returnval.push_back(bkey);
2127 "Expansion not defined in switch for this shape");
2144 returnval.push_back(bkey);
2153 returnval.push_back(bkey);
2154 returnval.push_back(bkey);
2163 returnval.push_back(bkey);
2164 returnval.push_back(bkey);
2165 returnval.push_back(bkey);
2171 "Expansion not defined in switch for this shape");
2188 returnval.push_back(bkey);
2194 returnval.push_back(bkey1);
2200 "Expansion not defined in switch for this shape");
2217 returnval.push_back(bkey1);
2223 returnval.push_back(bkey);
2229 "Expansion not defined in switch for this shape");
2246 returnval.push_back(bkey);
2252 returnval.push_back(bkey1);
2258 "Expansion not defined in switch for this shape");
2267 ASSERTL0(
false,
"Expansion type not defined");
2280 ExpansionType type_z,
const int nummodes_x,
const int nummodes_y,
2281 const int nummodes_z)
2291 ASSERTL0(
false,
"Homogeneous expansion not defined for this shape");
2297 ASSERTL0(
false,
"Homogeneous expansion not defined for this shape");
2311 returnval.push_back(bkey1);
2321 returnval.push_back(bkey1);
2331 returnval.push_back(bkey1);
2341 returnval.push_back(bkey1);
2351 returnval.push_back(bkey1);
2357 ASSERTL0(
false,
"Homogeneous expansion can be of Fourier "
2358 "or Chebyshev type only");
2371 returnval.push_back(bkey2);
2381 returnval.push_back(bkey2);
2391 returnval.push_back(bkey2);
2401 returnval.push_back(bkey2);
2411 returnval.push_back(bkey2);
2417 ASSERTL0(
false,
"Homogeneous expansion can be of Fourier "
2418 "or Chebyshev type only");
2431 returnval.push_back(bkey3);
2441 returnval.push_back(bkey3);
2451 returnval.push_back(bkey3);
2461 returnval.push_back(bkey3);
2471 returnval.push_back(bkey3);
2477 ASSERTL0(
false,
"Homogeneous expansion can be of Fourier "
2478 "or Chebyshev type only");
2487 ASSERTL0(
false,
"Homogeneous expansion not defined for this shape");
2493 ASSERTL0(
false,
"Homogeneous expansion not defined for this shape");
2498 ASSERTL0(
false,
"Expansion not defined in switch for this shape");
2519 for (
auto &compIter :
d.second)
2522 for (
auto &x : compIter.second->m_geomVec)
2524 if (x->GetGeomFactors()->GetGtype() !=
2530 int id = x->GetGlobalID();
2531 (*returnval)[id] = expansionElementShPtr;
2535 for (
auto &x : compIter.second->m_geomVec)
2537 if (x->GetGeomFactors()->GetGtype() ==
2543 int id = x->GetGlobalID();
2544 (*returnval)[id] = expansionElementShPtr;
2558 if (comp->m_geomVec.size() == 0)
2565 std::map<LibUtilities::ShapeType, std::pair<std::string, std::string>>
2576 std::stringstream s;
2579 int shapeDim = firstGeom->GetShapeDim();
2581 ? compMap[firstGeom->GetShapeType()].second
2582 : compMap[firstGeom->GetShapeType()].first;
2584 std::vector<unsigned int> idxList;
2585 std::transform(comp->m_geomVec.begin(), comp->m_geomVec.end(),
2586 std::back_inserter(idxList),
2606 bool updateExpansion =
false;
2609 for (
int i = 0; i < geomVecIter->GetNumVerts(); ++i)
2612 geomVecIter->GetVertex(i)->GetCoords(coords);
2613 updateExpansion = region->
v_Contains(coords);
2617 if (updateExpansion)
2620 auto expInfoID = expansionMap->find(geomVecIter->GetGlobalID());
2623 std::vector<unsigned int> nModes = region->
GetNumModes();
2624 (expInfoID->second)->m_basisKeyVector =
2628 ->m_basisKeyVector.begin()
2636 std::vector<unsigned int> nModes = region->
GetNumModes();
2637 std::vector<unsigned int> nPoints = region->
GetNumPoints();
2638 for (
auto basis = expInfoID->second->m_basisKeyVector.begin();
2639 basis != expInfoID->second->m_basisKeyVector.end();
2644 basis->GetPointsType());
2646 basis->GetBasisType(), nModes[cnt], pkey));
2649 (expInfoID->second)->m_basisKeyVector = updatedBasisKey;
2651 updateExpansion =
false;
2672 for (
auto compVecIter = pRefinement->second.begin();
2673 compVecIter != pRefinement->second.end(); ++compVecIter)
2675 for (
auto geomVecIter = compVecIter->second->m_geomVec.begin();
2676 geomVecIter != compVecIter->second->m_geomVec.end();
2687 if (region->first == pRefinement->first)
2709 TiXmlElement *refinementTypes =
m_session->GetElement(
"NEKTAR/REFINEMENTS");
2711 if (refinementTypes)
2713 TiXmlElement *refinement = refinementTypes->FirstChildElement();
2714 ASSERTL0(refinement,
"Unable to find entries in REFINEMENTS tag "
2716 std::string refType = refinement->Value();
2722 std::vector<NekDouble> coord1Vector, coord2Vector;
2723 std::vector<unsigned int> nModesVector, nPointsVector;
2726 const char *idStr = refinement->Attribute(
"REF");
2727 ASSERTL0(idStr,
"REF was not defined in REFINEMENT section "
2730 unsigned id = std::stoul(idStr);
2733 const char *radiusStr = refinement->Attribute(
"RADIUS");
2734 ASSERTL0(radiusStr,
"RADIUS was not defined in REFINEMENT "
2735 "section of input");
2737 NekDouble radius = std::stod(radiusStr);
2740 const char *c1Str = refinement->Attribute(
"COORDINATE1");
2741 ASSERTL0(c1Str,
"COORDINATE1 was not defined in REFINEMENT"
2742 "section of input");
2744 std::string coord1String = c1Str;
2747 ASSERTL0(valid,
"Unable to correctly parse the axes "
2748 "values for COORDINATE1");
2751 "Number of coordinates do not match the space "
2752 "dimension for COORDINATE1");
2755 const char *rType = refinement->Attribute(
"TYPE");
2756 ASSERTL0(rType,
"TYPE was not defined in REFINEMENT "
2757 "section of input");
2760 const char *c2Str = refinement->Attribute(
"COORDINATE2");
2762 if (strcmp(rType,
"STANDARD") == 0)
2764 ASSERTL0(c2Str,
"COORDINATE2 was not defined in REFINEMENT "
2765 "section of input");
2767 std::string coord2String = c2Str;
2770 ASSERTL0(valid,
"Unable to correctly parse the axes "
2771 "values for COORDINATE2");
2773 "Number of coordinates do not match the space "
2774 "dimension for COORDINATE2");
2780 "The mesh dimension must match the space dimension");
2782 else if (strcmp(rType,
"SPHERE") == 0)
2785 ASSERTL0(!c2Str,
"COORDINATE2 should not be defined in "
2786 "REFINEMENT section of input for the "
2789 coord2Vector.clear();
2794 "Invalid refinement type");
2801 const char *nModesStr = refinement->Attribute(
"NUMMODES");
2802 ASSERTL0(nModesStr,
"NUMMODES was not defined in "
2803 "Refinement section of input");
2805 std::string numModesStr = nModesStr;
2809 "Unable to correctly parse the number of modes");
2812 const char *nPointsStr = refinement->Attribute(
"NUMPOINTS");
2813 ASSERTL0(nPointsStr,
"NUMPOINTS was not defined in "
2814 "Refinement section of input");
2816 std::string numPointsStr = nPointsStr;
2820 "Unable to correctly parse the number of modes");
2824 const char *nModesStr = refinement->Attribute(
"NUMMODES");
2826 "NUMMODES was not defined in Refinement "
2827 "section of input");
2829 std::string numModesStr = nModesStr;
2834 m_session->GetInterpreter(), numModesStr);
2835 n_modesRef = (int)nummodesEqn.
Evaluate();
2839 n_modesRef = std::stoi(numModesStr);
2841 nModesVector.push_back(n_modesRef);
2842 nPointsVector.clear();
2846 if (strcmp(rType,
"STANDARD") == 0)
2856 coord2Vector, nModesVector, nPointsVector);
2865 coord2Vector, nModesVector, nPointsVector);
2873 coord2Vector, nModesVector, nPointsVector);
2883 nModesVector, nPointsVector);
2887 refinement = refinement->NextSiblingElement(
"R");
2894 "Unable to find REFINEMENTS tag in file");
2901 TiXmlElement *expansionTypes =
m_session->GetElement(
"NEKTAR/EXPANSIONS");
2903 expansionTypes,
m_session->GetTimeLevel());
2905 ASSERTL0(expansionTypes,
"Unable to find EXPANSIONS tag in file.");
2910 TiXmlElement *expansion = expansionTypes->FirstChildElement();
2911 ASSERTL0(expansion,
"Unable to find entries in EXPANSIONS tag in "
2913 std::string expType = expansion->Value();
2914 std::vector<std::string> vars =
m_session->GetVariables();
2935 std::map<int, bool> domainCompList;
2938 for (
auto &c :
d.second)
2940 domainCompList[c.first] =
false;
2943 std::map<std::string, std::map<int, bool>> fieldDomainCompList;
2948 std::string compositeStr = expansion->Attribute(
"COMPOSITE");
2949 ASSERTL0(compositeStr.length() > 3,
2950 "COMPOSITE must be specified in expansion definition");
2951 int beg = compositeStr.find_first_of(
"[");
2952 int end = compositeStr.find_first_of(
"]");
2953 std::string compositeListStr =
2954 compositeStr.substr(beg + 1, end - beg - 1);
2956 std::map<int, CompositeSharedPtr> compositeVector;
2960 const char *fStr = expansion->Attribute(
"FIELDS");
2961 std::vector<std::string> fieldStrings;
2965 std::string fieldStr = fStr;
2968 ASSERTL0(valid,
"Unable to correctly parse the field "
2969 "string in ExpansionTypes.");
2985 for (i = 0; i < fieldStrings.size(); ++i)
2987 if (vars.size() && std::count(vars.begin(), vars.end(),
2988 fieldStrings[i]) == 0)
2990 ASSERTL0(
false,
"Variable '" + fieldStrings[i] +
2991 "' defined in EXPANSIONS is not"
2992 " defined in VARIABLES.");
3002 fieldDomainCompList[fieldStrings[i]] =
3004 for (
auto c = compositeVector.begin();
3005 c != compositeVector.end(); ++c)
3007 fieldDomainCompList.find(fieldStrings[i])
3008 ->second.find(c->first)
3014 for (
auto c = compositeVector.begin();
3015 c != compositeVector.end(); ++c)
3017 if (fieldDomainCompList.find(fieldStrings[i])
3018 ->second.find(c->first)
3021 fieldDomainCompList.find(fieldStrings[i])
3022 ->second.find(c->first)
3028 "Expansion vector for "
3031 "' is already setup for C[" +
3032 std::to_string(c->first) +
3049 fieldDomainCompList[
"DefaultVar"] = domainCompList;
3050 for (
auto c = compositeVector.begin();
3051 c != compositeVector.end(); ++c)
3053 fieldDomainCompList.find(
"DefaultVar")
3054 ->second.find(c->first)
3060 for (
auto c = compositeVector.begin();
3061 c != compositeVector.end(); ++c)
3063 if (fieldDomainCompList.find(
"DefaultVar")
3064 ->second.find(c->first)
3067 fieldDomainCompList.find(
"DefaultVar")
3068 ->second.find(c->first)
3073 ASSERTL0(
false,
"Default expansion already "
3075 std::to_string(c->first) +
3090 const char *tStr = expansion->Attribute(
"TYPE");
3094 std::string typeStr = tStr;
3096 const std::string *endStr =
3098 const std::string *expStr =
3101 ASSERTL0(expStr != endStr,
"Invalid expansion type.");
3116 const char *nStr = expansion->Attribute(
"NUMMODES");
3117 ASSERTL0(nStr,
"NUMMODES was not defined in EXPANSION "
3118 "section of input");
3119 std::string nummodesStr = nStr;
3126 m_session->GetInterpreter(), nummodesStr);
3127 num_modes = (int)nummodesEqn.
Evaluate();
3131 num_modes = std::stoi(nummodesStr);
3139 const char *bTypeStr = expansion->Attribute(
"BASISTYPE");
3140 ASSERTL0(bTypeStr,
"TYPE or BASISTYPE was not defined in "
3141 "EXPANSION section of input");
3142 std::string basisTypeStr = bTypeStr;
3145 std::vector<std::string> basisStrings;
3146 std::vector<LibUtilities::BasisType> basis;
3148 basisTypeStr.c_str(), basisStrings);
3150 "Unable to correctly parse the basis types.");
3151 for (std::vector<std::string>::size_type i = 0;
3152 i < basisStrings.size(); i++)
3155 for (
unsigned int j = 0;
3169 "Unable to correctly parse the basis type: ")
3170 .append(basisStrings[i])
3173 const char *nModesStr = expansion->Attribute(
"NUMMODES");
3174 ASSERTL0(nModesStr,
"NUMMODES was not defined in EXPANSION "
3175 "section of input");
3177 std::string numModesStr = nModesStr;
3178 std::vector<unsigned int> numModes;
3182 "Unable to correctly parse the number of modes.");
3183 ASSERTL0(numModes.size() == basis.size(),
3184 "information for num modes does not match the "
3187 const char *pTypeStr = expansion->Attribute(
"POINTSTYPE");
3188 ASSERTL0(pTypeStr,
"POINTSTYPE was not defined in "
3189 "EXPANSION section of input");
3190 std::string pointsTypeStr = pTypeStr;
3192 std::vector<std::string> pointsStrings;
3193 std::vector<LibUtilities::PointsType> points;
3197 "Unable to correctly parse the points types.");
3198 for (std::vector<std::string>::size_type i = 0;
3199 i < pointsStrings.size(); i++)
3202 for (
unsigned int j = 0;
3216 "Unable to correctly parse the points type: ")
3217 .append(pointsStrings[i])
3221 const char *nPointsStr = expansion->Attribute(
"NUMPOINTS");
3222 ASSERTL0(nPointsStr,
"NUMPOINTS was not defined in "
3223 "EXPANSION section of input");
3224 std::string numPointsStr = nPointsStr;
3225 std::vector<unsigned int> numPoints;
3229 "Unable to correctly parse the number of points.");
3230 ASSERTL0(numPoints.size() == numPoints.size(),
3231 "information for num points does not match the "
3234 for (
int i = 0; i < basis.size(); ++i)
3240 basis[i], numModes[i], pkey));
3245 const char *refIDsStr = expansion->Attribute(
"REFIDS");
3248 std::vector<NekDouble> refIDsVector;
3249 std::string refIDsString = refIDsStr;
3252 ASSERTL0(valid,
"Unable to correctly parse the ids "
3256 for (
auto iter = refIDsVector.begin();
3257 iter != refIDsVector.end(); ++iter)
3268 for (
auto compVecIter = compositeVector.begin();
3269 compVecIter != compositeVector.end(); ++compVecIter)
3271 for (
auto geomVecIter =
3272 compVecIter->second->m_geomVec.begin();
3273 geomVecIter != compVecIter->second->m_geomVec.end();
3277 expansionMap->find((*geomVecIter)->GetGlobalID());
3279 x != expansionMap->end(),
3281 std::to_string((*geomVecIter)->GetGlobalID()) +
3285 (x->second)->m_basisKeyVector =
3287 *geomVecIter, expansion_type, num_modes);
3291 ASSERTL0((*geomVecIter)->GetShapeDim() ==
3293 " There is an incompatible expansion "
3294 "dimension with geometry dimension");
3295 (x->second)->m_basisKeyVector = basiskeyvec;
3300 expansion = expansion->NextSiblingElement(
"E");
3306 for (
auto f = fieldDomainCompList.begin();
3307 f != fieldDomainCompList.end(); ++f)
3309 if (f->first !=
"DefaultVar")
3311 for (
auto c = f->second.begin(); c != f->second.end(); ++c)
3313 if (c->second ==
false &&
3314 fieldDomainCompList.find(
"DefaultVar")
3315 ->second.find(c->first)
3320 for (
auto geomVecIter =
3322 ->second->m_geomVec.begin();
3324 ->second->m_geomVec.end();
3330 (*geomVecIter)->GetGlobalID());
3335 (*geomVecIter)->GetGlobalID());
3337 (xField->second)->m_basisKeyVector =
3338 (xDefaultVar->second)->m_basisKeyVector;
3344 "Using Default expansion definition for "
3349 std::to_string(c->first) +
"].")
3352 ASSERTL0(c->second,
"There is no expansion defined for "
3354 f->first +
"' in C[" +
3355 std::to_string(c->first) +
3362 for (i = 0; i < vars.size(); ++i)
3375 "Using Default expansion definition for field "
3382 ASSERTL0(
false,
"Variable '" + vars[i] +
3384 " in FIELDS attribute of EXPANSIONS"
3414 else if (expType ==
"H")
3422 std::map<int, bool> domainCompList;
3425 for (
auto &c :
d.second)
3427 domainCompList[c.first] =
false;
3430 std::map<std::string, std::map<int, bool>> fieldDomainCompList;
3435 std::string compositeStr = expansion->Attribute(
"COMPOSITE");
3436 ASSERTL0(compositeStr.length() > 3,
3437 "COMPOSITE must be specified in expansion definition");
3438 int beg = compositeStr.find_first_of(
"[");
3439 int end = compositeStr.find_first_of(
"]");
3440 std::string compositeListStr =
3441 compositeStr.substr(beg + 1, end - beg - 1);
3443 std::map<int, CompositeSharedPtr> compositeVector;
3447 const char *fStr = expansion->Attribute(
"FIELDS");
3448 std::vector<std::string> fieldStrings;
3452 std::string fieldStr = fStr;
3455 ASSERTL0(valid,
"Unable to correctly parse the field "
3456 "string in ExpansionTypes.");
3472 for (i = 0; i < fieldStrings.size(); ++i)
3474 if (vars.size() && std::count(vars.begin(), vars.end(),
3475 fieldStrings[i]) == 0)
3477 ASSERTL0(
false,
"Variable '" + fieldStrings[i] +
3478 "' defined in EXPANSIONS is not"
3479 " defined in VARIABLES.");
3489 fieldDomainCompList[fieldStrings[i]] =
3491 for (
auto c = compositeVector.begin();
3492 c != compositeVector.end(); ++c)
3494 fieldDomainCompList.find(fieldStrings[i])
3495 ->second.find(c->first)
3501 for (
auto c = compositeVector.begin();
3502 c != compositeVector.end(); ++c)
3504 if (fieldDomainCompList.find(fieldStrings[i])
3505 ->second.find(c->first)
3508 fieldDomainCompList.find(fieldStrings[i])
3509 ->second.find(c->first)
3515 "Expansion vector for "
3518 "' is already setup for C[" +
3519 std::to_string(c->first) +
3536 fieldDomainCompList[
"DefaultVar"] = domainCompList;
3537 for (
auto c = compositeVector.begin();
3538 c != compositeVector.end(); ++c)
3540 fieldDomainCompList.find(
"DefaultVar")
3541 ->second.find(c->first)
3547 for (
auto c = compositeVector.begin();
3548 c != compositeVector.end(); ++c)
3550 if (fieldDomainCompList.find(
"DefaultVar")
3551 ->second.find(c->first)
3554 fieldDomainCompList.find(
"DefaultVar")
3555 ->second.find(c->first)
3560 ASSERTL0(
false,
"Default expansion already "
3562 std::to_string(c->first) +
3575 int num_modes_x = 0;
3576 int num_modes_y = 0;
3577 int num_modes_z = 0;
3581 const char *tStr_x = expansion->Attribute(
"TYPE-X");
3585 std::string typeStr = tStr_x;
3587 const std::string *endStr =
3589 const std::string *expStr =
3592 ASSERTL0(expStr != endStr,
"Invalid expansion type.");
3595 const char *nStr = expansion->Attribute(
"NUMMODES-X");
3596 ASSERTL0(nStr,
"NUMMODES-X was not defined in EXPANSION "
3597 "section of input");
3598 std::string nummodesStr = nStr;
3606 m_session->GetInterpreter(), nummodesStr);
3607 num_modes_x = (int)nummodesEqn.
Evaluate();
3611 num_modes_x = std::stoi(nummodesStr);
3615 const char *tStr_y = expansion->Attribute(
"TYPE-Y");
3619 std::string typeStr = tStr_y;
3621 const std::string *endStr =
3623 const std::string *expStr =
3626 ASSERTL0(expStr != endStr,
"Invalid expansion type.");
3629 const char *nStr = expansion->Attribute(
"NUMMODES-Y");
3630 ASSERTL0(nStr,
"NUMMODES-Y was not defined in EXPANSION "
3631 "section of input");
3632 std::string nummodesStr = nStr;
3639 m_session->GetInterpreter(), nummodesStr);
3640 num_modes_y = (int)nummodesEqn.
Evaluate();
3644 num_modes_y = std::stoi(nummodesStr);
3648 const char *tStr_z = expansion->Attribute(
"TYPE-Z");
3652 std::string typeStr = tStr_z;
3654 const std::string *endStr =
3656 const std::string *expStr =
3659 ASSERTL0(expStr != endStr,
"Invalid expansion type.");
3662 const char *nStr = expansion->Attribute(
"NUMMODES-Z");
3663 ASSERTL0(nStr,
"NUMMODES-Z was not defined in EXPANSION "
3664 "section of input");
3665 std::string nummodesStr = nStr;
3672 m_session->GetInterpreter(), nummodesStr);
3673 num_modes_z = (int)nummodesEqn.
Evaluate();
3677 num_modes_z = std::stoi(nummodesStr);
3681 for (
auto compVecIter = compositeVector.begin();
3682 compVecIter != compositeVector.end(); ++compVecIter)
3684 for (
auto geomVecIter =
3685 compVecIter->second->m_geomVec.begin();
3686 geomVecIter != compVecIter->second->m_geomVec.end();
3689 for (
auto expVecIter = expansionMap->begin();
3690 expVecIter != expansionMap->end(); ++expVecIter)
3693 (expVecIter->second)->m_basisKeyVector =
3695 *geomVecIter, expansion_type_x,
3696 expansion_type_y, expansion_type_z,
3697 num_modes_x, num_modes_y, num_modes_z);
3702 expansion = expansion->NextSiblingElement(
"H");
3708 for (
auto f = fieldDomainCompList.begin();
3709 f != fieldDomainCompList.end(); ++f)
3711 if (f->first !=
"DefaultVar")
3713 for (
auto c = f->second.begin(); c != f->second.end(); ++c)
3715 if (c->second ==
false &&
3716 fieldDomainCompList.find(
"DefaultVar")
3717 ->second.find(c->first)
3722 for (
auto geomVecIter =
3724 ->second->m_geomVec.begin();
3726 ->second->m_geomVec.end();
3732 (*geomVecIter)->GetGlobalID());
3737 (*geomVecIter)->GetGlobalID());
3739 (xField->second)->m_basisKeyVector =
3740 (xDefaultVar->second)->m_basisKeyVector;
3746 "Using Default expansion definition for "
3751 std::to_string(c->first) +
"].")
3754 ASSERTL0(c->second,
"There is no expansion defined for "
3756 f->first +
"' in C[" +
3757 std::to_string(c->first) +
3764 for (i = 0; i < vars.size(); ++i)
3777 "Using Default expansion definition for field "
3784 ASSERTL0(
false,
"Variable '" + vars[i] +
3786 " in FIELDS attribute of EXPANSIONS"
3807 std::vector<LibUtilities::FieldDefinitionsSharedPtr> fielddefs;
3811 std::shared_ptr<LibUtilities::FieldIOXml> f =
3812 std::make_shared<LibUtilities::FieldIOXml>(
m_session->GetComm(),
3817 std::cout <<
" Number of elements: " << fielddefs.size()
3821 else if (expType ==
"F")
3823 ASSERTL0(expansion->Attribute(
"FILE"),
3824 "Attribute FILE expected for type F expansion");
3825 std::string filenameStr = expansion->Attribute(
"FILE");
3827 "A filename must be specified for the FILE "
3828 "attribute of expansion");
3830 std::vector<LibUtilities::FieldDefinitionsSharedPtr> fielddefs;
3833 f->Import(filenameStr, fielddefs);
3838 ASSERTL0(
false,
"Expansion type not defined");
3850 new std::vector<std::pair<GeometrySharedPtr, int>>);
3857 for (
auto &compIter :
d.second)
3859 for (
auto &geomIter : compIter.second->m_geomVec)
3861 triGeomShPtr = std::dynamic_pointer_cast<TriGeom>(geomIter);
3862 quadGeomShPtr = std::dynamic_pointer_cast<QuadGeom>(geomIter);
3864 if (triGeomShPtr || quadGeomShPtr)
3868 for (
int i = 0; i < triGeomShPtr->GetNumEdges(); i++)
3870 if (triGeomShPtr->GetEdge(i)->GetGlobalID() ==
3871 edge->GetGlobalID())
3873 ret->push_back(std::make_pair(triGeomShPtr, i));
3878 else if (quadGeomShPtr)
3880 for (
int i = 0; i < quadGeomShPtr->GetNumEdges(); i++)
3882 if (quadGeomShPtr->GetEdge(i)->GetGlobalID() ==
3883 edge->GetGlobalID())
3886 std::make_pair(quadGeomShPtr, i));
3920 for (
int i = 0; i < kNfaces; ++i)
3922 int faceId = element->GetFace(i)->GetGlobalID();
3930 new std::vector<std::pair<GeometrySharedPtr, int>>);
3931 tmp->push_back(std::make_pair(element, i));
3936 it->second->push_back(std::make_pair(element, i));
3950 std::map<int, MeshEntity> elements;
3959 e.
list.push_back(i.second->GetVertex(0)->GetGlobalID());
3960 e.
list.push_back(i.second->GetVertex(1)->GetGlobalID());
3972 e.
list.push_back(i.second->GetEdge(0)->GetGlobalID());
3973 e.
list.push_back(i.second->GetEdge(1)->GetGlobalID());
3974 e.
list.push_back(i.second->GetEdge(2)->GetGlobalID());
3982 e.
list.push_back(i.second->GetEdge(0)->GetGlobalID());
3983 e.
list.push_back(i.second->GetEdge(1)->GetGlobalID());
3984 e.
list.push_back(i.second->GetEdge(2)->GetGlobalID());
3985 e.
list.push_back(i.second->GetEdge(3)->GetGlobalID());
3997 e.
list.push_back(i.second->GetFace(0)->GetGlobalID());
3998 e.
list.push_back(i.second->GetFace(1)->GetGlobalID());
3999 e.
list.push_back(i.second->GetFace(2)->GetGlobalID());
4000 e.
list.push_back(i.second->GetFace(3)->GetGlobalID());
4008 e.
list.push_back(i.second->GetFace(0)->GetGlobalID());
4009 e.
list.push_back(i.second->GetFace(1)->GetGlobalID());
4010 e.
list.push_back(i.second->GetFace(2)->GetGlobalID());
4011 e.
list.push_back(i.second->GetFace(3)->GetGlobalID());
4012 e.
list.push_back(i.second->GetFace(4)->GetGlobalID());
4020 e.
list.push_back(i.second->GetFace(0)->GetGlobalID());
4021 e.
list.push_back(i.second->GetFace(1)->GetGlobalID());
4022 e.
list.push_back(i.second->GetFace(2)->GetGlobalID());
4023 e.
list.push_back(i.second->GetFace(3)->GetGlobalID());
4024 e.
list.push_back(i.second->GetFace(4)->GetGlobalID());
4032 e.
list.push_back(i.second->GetFace(0)->GetGlobalID());
4033 e.
list.push_back(i.second->GetFace(1)->GetGlobalID());
4034 e.
list.push_back(i.second->GetFace(2)->GetGlobalID());
4035 e.
list.push_back(i.second->GetFace(3)->GetGlobalID());
4036 e.
list.push_back(i.second->GetFace(4)->GetGlobalID());
4037 e.
list.push_back(i.second->GetFace(5)->GetGlobalID());
4054 std::pair<LibUtilities::ShapeType, std::vector<int>> tmp;
4055 tmp.first = comp.second->m_geomVec[0]->GetShapeType();
4057 tmp.second.resize(comp.second->m_geomVec.size());
4058 for (
size_t i = 0; i < tmp.second.size(); ++i)
4060 tmp.second[i] = comp.second->m_geomVec[i]->GetGlobalID();
4063 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.
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::map< int, std::string > m_compositesLabels
std::vector< int > GetElementsContainingPoint(PointGeomSharedPtr p)
static LibUtilities::BasisKeyVector DefineBasisKeyFromExpansionType(GeometrySharedPtr in, ExpansionType type, const int order)
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< 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
@ 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