59 std::array<SpatialDomains::PointGeom *, 5> v,
60 std::array<SpatialDomains::SegGeomUniquePtr, 8> &segVec,
61 std::array<SpatialDomains::TriGeomUniquePtr, 4> &triVec,
62 std::array<SpatialDomains::QuadGeomUniquePtr, 1> &quadVec)
64 std::array<std::array<int, 2>, 8> edgeVerts = {{{{0, 1}},
72 std::array<std::array<int, 4>, 5> faceEdges = {{{{0, 1, 2, 3}},
79 for (
int i = 0; i < 8; ++i)
81 segVec[i] =
CreateSegGeom(i, v[edgeVerts[i][0]], v[edgeVerts[i][1]]);
85 std::array<SpatialDomains::Geometry2D *, 5> faces;
86 for (
int i = 0; i < 5; ++i)
91 std::array<SpatialDomains::SegGeom *, 4> face;
92 for (
int j = 0; j < 4; ++j)
94 face[j] = segVec[faceEdges[i][j]].get();
98 faces[i] = quadVec[0].get();
103 std::array<SpatialDomains::SegGeom *, 3> face;
104 for (
int j = 0; j < 3; ++j)
106 face[j] = segVec[faceEdges[i][j]].get();
110 faces[i] = triVec[i - 1].get();
132 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
133 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
134 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
135 std::array<SpatialDomains::PointGeom *, 5> v = {
136 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
157 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
166 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
170 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
171 for (
int i = 0; i < nelmts; ++i)
173 CollExp.push_back(Exp);
184 for (
int i = 0; i < coeffs.size(); ++i)
191 for (
int i = 0; i < nelmts; ++i)
193 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
194 tmp = phys1 + i * Exp->GetTotPoints());
203 double epsilon = 1.0e-8;
204 for (
int i = 0; i < phys1.size(); ++i)
206 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
223 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
224 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
225 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
226 std::array<SpatialDomains::PointGeom *, 5> v = {
227 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
248 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
257 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
261 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
262 for (
int i = 0; i < nelmts; ++i)
264 CollExp.push_back(Exp);
275 for (
int i = 0; i < coeffs.size(); ++i)
283 for (
int i = 0; i < nelmts; ++i)
285 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
286 tmp = phys1 + i * Exp->GetTotPoints());
290 double epsilon = 1.0e-8;
291 for (
int i = 0; i < phys1.size(); ++i)
293 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
310 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
311 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
312 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
313 std::array<SpatialDomains::PointGeom *, 5> v = {
314 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
335 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
344 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
348 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
349 for (
int i = 0; i < nelmts; ++i)
351 CollExp.push_back(Exp);
363 for (
int i = 0; i < coeffs.size(); ++i)
371 for (
int i = 0; i < nelmts; ++i)
373 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
374 tmp = phys1 + i * Exp->GetTotPoints());
383 double epsilon = 1.0e-8;
384 for (
int i = 0; i < phys1.size(); ++i)
386 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
403 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
404 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
405 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
406 std::array<SpatialDomains::PointGeom *, 5> v = {
407 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
428 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
437 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
440 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
441 for (
int i = 0; i < nelmts; ++i)
443 CollExp.push_back(Exp);
454 for (
int i = 0; i < coeffs.size(); ++i)
462 for (
int i = 0; i < nelmts; ++i)
464 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
465 tmp = phys1 + i * Exp->GetTotPoints());
469 double epsilon = 1.0e-8;
470 for (
int i = 0; i < phys1.size(); ++i)
472 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
489 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
490 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
491 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
492 std::array<SpatialDomains::PointGeom *, 5> v = {
493 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
514 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
523 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
527 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
528 for (
int i = 0; i < nelmts; ++i)
530 CollExp.push_back(Exp);
541 for (
int i = 0; i < coeffs.size(); ++i)
549 for (
int i = 0; i < nelmts; ++i)
551 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
552 tmp = phys1 + i * Exp->GetTotPoints());
556 double epsilon = 1.0e-8;
557 for (
int i = 0; i < phys1.size(); ++i)
559 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
576 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
577 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
578 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
579 std::array<SpatialDomains::PointGeom *, 5> v = {
580 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
610 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
614 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
615 for (
int i = 0; i < nelmts; ++i)
617 CollExp.push_back(Exp);
629 for (
int i = 0; i < coeffs.size(); ++i)
637 for (
int i = 0; i < nelmts; ++i)
639 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
640 tmp = phys1 + i * Exp->GetTotPoints());
644 double epsilon = 1.0e-8;
645 for (
int i = 0; i < phys1.size(); ++i)
647 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
664 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
665 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
666 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
667 std::array<SpatialDomains::PointGeom *, 5> v = {
668 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
689 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
698 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
701 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
702 for (
int i = 0; i < nelmts; ++i)
704 CollExp.push_back(Exp);
714 const int nq = Exp->GetTotPoints();
720 Exp->GetCoords(xc, yc, zc);
722 for (
int i = 0; i < nq; ++i)
724 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
726 Exp->PhysDeriv(phys, diff1, tmp1 = diff1 + (nelmts)*nq,
727 tmp2 = diff1 + (2 * nelmts) * nq);
729 for (
int i = 1; i < nelmts; ++i)
732 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
733 tmp1 = diff1 + (nelmts + i) * nq,
734 tmp2 = diff1 + (2 * nelmts + i) * nq);
740 tmp = diff2 + nelmts * nq, tmp2 = diff2 + 2 * nelmts * nq);
744 double epsilon = 1.0e-8;
745 for (
int i = 0; i < diff1.size(); ++i)
747 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
764 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
765 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
766 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
767 std::array<SpatialDomains::PointGeom *, 5> v = {
768 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
789 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
798 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
802 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
803 for (
int i = 0; i < nelmts; ++i)
805 CollExp.push_back(Exp);
815 const int nq = Exp->GetTotPoints();
821 Exp->GetCoords(xc, yc, zc);
823 for (
int i = 0; i < nq; ++i)
825 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
827 Exp->PhysDeriv(phys, diff1, tmp1 = diff1 + (nelmts)*nq,
828 tmp2 = diff1 + (2 * nelmts) * nq);
830 for (
int i = 1; i < nelmts; ++i)
833 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
834 tmp1 = diff1 + (nelmts + i) * nq,
835 tmp2 = diff1 + (2 * nelmts + i) * nq);
839 tmp = diff2 + nelmts * nq, tmp2 = diff2 + 2 * nelmts * nq);
841 double epsilon = 1.0e-8;
842 for (
int i = 0; i < diff1.size(); ++i)
845 diff1[i] = (fabs(diff1[i]) < 1e-14) ? 0.0 : diff1[i];
846 diff2[i] = (fabs(diff2[i]) < 1e-14) ? 0.0 : diff2[i];
847 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
864 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
865 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
866 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
867 std::array<SpatialDomains::PointGeom *, 5> v = {
868 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
889 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
898 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
901 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
902 for (
int i = 0; i < nelmts; ++i)
904 CollExp.push_back(Exp);
915 const int nq = Exp->GetTotPoints();
921 Exp->GetCoords(xc, yc, zc);
923 for (
int i = 0; i < nq; ++i)
925 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
927 Exp->PhysDeriv(phys, diff1, tmp1 = diff1 + (nelmts)*nq,
928 tmp2 = diff1 + (2 * nelmts) * nq);
930 for (
int i = 1; i < nelmts; ++i)
933 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
934 tmp1 = diff1 + (nelmts + i) * nq,
935 tmp2 = diff1 + (2 * nelmts + i) * nq);
941 tmp = diff2 + nelmts * nq, tmp2 = diff2 + 2 * nelmts * nq);
945 double epsilon = 1.0e-8;
946 for (
int i = 0; i < diff1.size(); ++i)
949 diff1[i] = (fabs(diff1[i]) < 1e-14) ? 0.0 : diff1[i];
950 diff2[i] = (fabs(diff2[i]) < 1e-14) ? 0.0 : diff2[i];
951 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
968 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
969 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
970 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
971 std::array<SpatialDomains::PointGeom *, 5> v = {
972 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
993 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1002 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
1006 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1007 for (
int i = 0; i < nelmts; ++i)
1009 CollExp.push_back(Exp);
1019 const int nq = Exp->GetTotPoints();
1025 Exp->GetCoords(xc, yc, zc);
1027 for (
int i = 0; i < nq; ++i)
1029 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1031 Exp->PhysDeriv(phys, diff1, tmp1 = diff1 + (nelmts)*nq,
1032 tmp2 = diff1 + (2 * nelmts) * nq);
1034 for (
int i = 1; i < nelmts; ++i)
1037 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
1038 tmp1 = diff1 + (nelmts + i) * nq,
1039 tmp2 = diff1 + (2 * nelmts + i) * nq);
1043 tmp = diff2 + nelmts * nq, tmp2 = diff2 + 2 * nelmts * nq);
1045 double epsilon = 1.0e-8;
1046 for (
int i = 0; i < diff1.size(); ++i)
1049 diff1[i] = (fabs(diff1[i]) < 1e-14) ? 0.0 : diff1[i];
1050 diff2[i] = (fabs(diff2[i]) < 1e-14) ? 0.0 : diff2[i];
1051 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1068 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
1069 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
1070 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
1071 std::array<SpatialDomains::PointGeom *, 5> v = {
1072 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
1093 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1102 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
1106 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1107 for (
int i = 0; i < nelmts; ++i)
1109 CollExp.push_back(Exp);
1121 const int nq = Exp->GetTotPoints();
1127 Exp->GetCoords(xc, yc, zc);
1129 for (
int i = 0; i < nq; ++i)
1131 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1133 Exp->PhysDeriv(phys, tmp = diff1, tmp1 = diff1 + (nelmts)*nq,
1134 tmp2 = diff1 + (2 * nelmts) * nq);
1135 for (
int i = 1; i < nelmts; ++i)
1138 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
1139 tmp1 = diff1 + (nelmts + i) * nq,
1140 tmp2 = diff1 + (2 * nelmts + i) * nq);
1144 tmp = diff2 + nelmts * nq, tmp2 = diff2 + 2 * nelmts * nq);
1146 double epsilon = 1.0e-8;
1147 for (
int i = 0; i < diff1.size(); ++i)
1150 diff1[i] = (fabs(diff1[i]) < 1e-14) ? 0.0 : diff1[i];
1151 diff2[i] = (fabs(diff2[i]) < 1e-14) ? 0.0 : diff2[i];
1152 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1169 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
1170 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
1171 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
1172 std::array<SpatialDomains::PointGeom *, 5> v = {
1173 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
1177 unsigned int numQuadPoints = 5;
1178 unsigned int numModes = 2;
1199 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1209 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
1213 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1214 for (
int i = 0; i < nelmts; ++i)
1216 CollExp.push_back(Exp);
1228 const int nq = Exp->GetTotPoints();
1234 Exp->GetCoords(xc, yc, zc);
1236 for (
int i = 0; i < nq; ++i)
1238 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1240 Exp->PhysDeriv(phys, diff1, tmp1 = diff1 + (nelmts)*nq,
1241 tmp2 = diff1 + (2 * nelmts) * nq);
1243 for (
int i = 1; i < nelmts; ++i)
1246 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
1247 tmp1 = diff1 + (nelmts + i) * nq,
1248 tmp2 = diff1 + (2 * nelmts + i) * nq);
1254 tmp = diff2 + nelmts * nq, tmp2 = diff2 + 2 * nelmts * nq);
1258 double epsilon = 1.0e-8;
1259 for (
int i = 0; i < diff1.size(); ++i)
1262 diff1[i] = (fabs(diff1[i]) < 1e-14) ? 0.0 : diff1[i];
1263 diff2[i] = (fabs(diff2[i]) < 1e-14) ? 0.0 : diff2[i];
1264 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1281 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
1282 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
1283 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
1284 std::array<SpatialDomains::PointGeom *, 5> v = {
1285 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
1306 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1315 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
1319 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1320 for (
int i = 0; i < nelmts; ++i)
1322 CollExp.push_back(Exp);
1332 const int nq = Exp->GetTotPoints();
1339 Exp->GetCoords(xc, yc, zc);
1341 for (
int i = 0; i < nq; ++i)
1343 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1345 Exp->IProductWRTBase(phys, coeffs1);
1347 for (
int i = 1; i < nelmts; ++i)
1350 Exp->IProductWRTBase(phys + i * nq,
1351 tmp = coeffs1 + i * Exp->GetNcoeffs());
1360 double epsilon = 1.0e-8;
1361 for (
int i = 0; i < coeffs1.size(); ++i)
1364 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1365 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1366 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1383 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
1384 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
1385 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
1386 std::array<SpatialDomains::PointGeom *, 5> v = {
1387 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
1408 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1417 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
1421 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1422 for (
int i = 0; i < nelmts; ++i)
1424 CollExp.push_back(Exp);
1434 const int nq = Exp->GetTotPoints();
1441 Exp->GetCoords(xc, yc, zc);
1443 for (
int i = 0; i < nq; ++i)
1445 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1447 Exp->IProductWRTBase(phys, coeffs1);
1449 for (
int i = 1; i < nelmts; ++i)
1452 Exp->IProductWRTBase(phys + i * nq,
1453 tmp = coeffs1 + i * Exp->GetNcoeffs());
1458 double epsilon = 1.0e-8;
1459 for (
int i = 0; i < coeffs1.size(); ++i)
1462 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1463 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1464 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1481 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
1482 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
1483 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
1484 std::array<SpatialDomains::PointGeom *, 5> v = {
1485 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
1506 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1515 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
1519 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1520 for (
int i = 0; i < nelmts; ++i)
1522 CollExp.push_back(Exp);
1533 const int nq = Exp->GetTotPoints();
1540 Exp->GetCoords(xc, yc, zc);
1542 for (
int i = 0; i < nq; ++i)
1544 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1546 Exp->IProductWRTBase(phys, coeffs1);
1548 for (
int i = 1; i < nelmts; ++i)
1551 Exp->IProductWRTBase(phys + i * nq,
1552 tmp = coeffs1 + i * Exp->GetNcoeffs());
1561 double epsilon = 1.0e-8;
1562 for (
int i = 0; i < coeffs1.size(); ++i)
1565 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1566 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1567 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1584 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
1585 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
1586 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
1587 std::array<SpatialDomains::PointGeom *, 5> v = {
1588 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
1609 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1618 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
1622 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1623 for (
int i = 0; i < nelmts; ++i)
1625 CollExp.push_back(Exp);
1635 const int nq = Exp->GetTotPoints();
1642 Exp->GetCoords(xc, yc, zc);
1644 for (
int i = 0; i < nq; ++i)
1646 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1648 Exp->IProductWRTBase(phys, coeffs1);
1650 for (
int i = 1; i < nelmts; ++i)
1653 Exp->IProductWRTBase(phys + i * nq,
1654 tmp = coeffs1 + i * Exp->GetNcoeffs());
1659 double epsilon = 1.0e-8;
1660 for (
int i = 0; i < coeffs1.size(); ++i)
1663 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1664 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1665 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1682 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
1683 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
1684 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
1685 std::array<SpatialDomains::PointGeom *, 5> v = {
1686 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
1707 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1716 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
1720 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1721 for (
int i = 0; i < nelmts; ++i)
1723 CollExp.push_back(Exp);
1733 const int nq = Exp->GetTotPoints();
1740 Exp->GetCoords(xc, yc, zc);
1742 for (
int i = 0; i < nq; ++i)
1744 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1746 Exp->IProductWRTBase(phys, coeffs1);
1748 for (
int i = 1; i < nelmts; ++i)
1751 Exp->IProductWRTBase(phys + i * nq,
1752 tmp = coeffs1 + i * Exp->GetNcoeffs());
1757 double epsilon = 1.0e-8;
1758 for (
int i = 0; i < coeffs1.size(); ++i)
1761 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1762 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1763 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1780 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
1781 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
1782 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
1783 std::array<SpatialDomains::PointGeom *, 5> v = {
1784 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
1805 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1814 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
1818 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1819 for (
int i = 0; i < nelmts; ++i)
1821 CollExp.push_back(Exp);
1832 const int nq = Exp->GetTotPoints();
1839 Exp->GetCoords(xc, yc, zc);
1841 for (
int i = 0; i < nq; ++i)
1843 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1845 Exp->IProductWRTBase(phys, coeffs1);
1847 for (
int i = 1; i < nelmts; ++i)
1850 Exp->IProductWRTBase(phys + i * nq,
1851 tmp = coeffs1 + i * Exp->GetNcoeffs());
1856 double epsilon = 1.0e-8;
1857 for (
int i = 0; i < coeffs1.size(); ++i)
1860 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1861 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1862 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1879 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
1880 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
1881 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
1882 std::array<SpatialDomains::PointGeom *, 5> v = {
1883 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
1887 unsigned int numQuadPoints = 5;
1888 unsigned int numModes = 4;
1909 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1919 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
1923 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1924 for (
int i = 0; i < nelmts; ++i)
1926 CollExp.push_back(Exp);
1937 const int nq = Exp->GetTotPoints();
1944 Exp->GetCoords(xc, yc, zc);
1946 for (
int i = 0; i < nq; ++i)
1948 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1950 Exp->IProductWRTBase(phys, coeffs1);
1952 for (
int i = 1; i < nelmts; ++i)
1955 Exp->IProductWRTBase(phys + i * nq,
1956 tmp = coeffs1 + i * Exp->GetNcoeffs());
1965 double epsilon = 1.0e-8;
1966 for (
int i = 0; i < coeffs1.size(); ++i)
1969 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1970 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1971 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1988 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
1989 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
1990 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
1991 std::array<SpatialDomains::PointGeom *, 5> v = {
1992 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
1996 unsigned int numQuadPoints = 5;
1997 unsigned int numModes = 4;
2018 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2028 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
2032 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2033 for (
int i = 0; i < nelmts; ++i)
2035 CollExp.push_back(Exp);
2047 const int nq = Exp->GetTotPoints();
2054 Exp->GetCoords(xc, yc, zc);
2056 for (
int i = 0; i < nq; ++i)
2058 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2060 Exp->IProductWRTBase(phys, coeffs1);
2062 for (
int i = 1; i < nelmts; ++i)
2065 Exp->IProductWRTBase(phys + i * nq,
2066 tmp = coeffs1 + i * Exp->GetNcoeffs());
2071 double epsilon = 1.0e-8;
2072 for (
int i = 0; i < coeffs1.size(); ++i)
2075 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2076 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2077 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2094 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
2095 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
2096 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
2097 std::array<SpatialDomains::PointGeom *, 5> v = {
2098 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
2119 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2128 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
2132 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2133 for (
int i = 0; i < nelmts; ++i)
2135 CollExp.push_back(Exp);
2145 const int nq = Exp->GetTotPoints();
2146 const int nm = Exp->GetNcoeffs();
2155 Exp->GetCoords(xc, yc, zc);
2157 for (
int i = 0; i < nq; ++i)
2159 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2160 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
2161 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
2163 for (
int i = 1; i < nelmts; ++i)
2171 for (
int i = 0; i < nelmts; ++i)
2173 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
2174 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs2 + i * nm);
2175 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2176 tmp = coeffs1 + i * nm, 1);
2177 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs2 + i * nm);
2178 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2179 tmp = coeffs1 + i * nm, 1);
2189 double epsilon = 1.0e-8;
2190 for (
int i = 0; i < coeffs1.size(); ++i)
2192 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2193 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2194 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2211 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
2212 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
2213 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
2214 std::array<SpatialDomains::PointGeom *, 5> v = {
2215 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
2236 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2245 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
2249 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2250 for (
int i = 0; i < nelmts; ++i)
2252 CollExp.push_back(Exp);
2262 const int nq = Exp->GetTotPoints();
2263 const int nm = Exp->GetNcoeffs();
2272 Exp->GetCoords(xc, yc, zc);
2274 for (
int i = 0; i < nq; ++i)
2276 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2277 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
2278 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
2280 for (
int i = 1; i < nelmts; ++i)
2288 for (
int i = 0; i < nelmts; ++i)
2290 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
2291 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs2 + i * nm);
2292 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2293 tmp = coeffs1 + i * nm, 1);
2294 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs2 + i * nm);
2295 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2296 tmp = coeffs1 + i * nm, 1);
2302 double epsilon = 1.0e-8;
2303 for (
int i = 0; i < coeffs1.size(); ++i)
2305 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2306 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2307 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2324 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
2325 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
2326 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
2327 std::array<SpatialDomains::PointGeom *, 5> v = {
2328 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
2349 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2358 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
2362 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2363 for (
int i = 0; i < nelmts; ++i)
2365 CollExp.push_back(Exp);
2375 const int nq = Exp->GetTotPoints();
2376 const int nm = Exp->GetNcoeffs();
2385 Exp->GetCoords(xc, yc, zc);
2387 for (
int i = 0; i < nq; ++i)
2389 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2390 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
2391 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
2393 for (
int i = 1; i < nelmts; ++i)
2401 for (
int i = 0; i < nelmts; ++i)
2403 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
2404 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs2 + i * nm);
2405 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2406 tmp = coeffs1 + i * nm, 1);
2407 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs2 + i * nm);
2408 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2409 tmp = coeffs1 + i * nm, 1);
2419 double epsilon = 1.0e-8;
2420 for (
int i = 0; i < coeffs1.size(); ++i)
2422 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2423 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2424 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2441 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
2442 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
2443 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
2444 std::array<SpatialDomains::PointGeom *, 5> v = {
2445 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
2466 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2475 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
2479 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2480 for (
int i = 0; i < nelmts; ++i)
2482 CollExp.push_back(Exp);
2492 const int nq = Exp->GetTotPoints();
2493 const int nm = Exp->GetNcoeffs();
2502 Exp->GetCoords(xc, yc, zc);
2504 for (
int i = 0; i < nq; ++i)
2506 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2507 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
2508 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
2510 for (
int i = 1; i < nelmts; ++i)
2518 for (
int i = 0; i < nelmts; ++i)
2520 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
2521 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs2 + i * nm);
2522 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2523 tmp = coeffs1 + i * nm, 1);
2524 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs2 + i * nm);
2525 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2526 tmp = coeffs1 + i * nm, 1);
2532 double epsilon = 1.0e-8;
2533 for (
int i = 0; i < coeffs1.size(); ++i)
2535 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2536 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2537 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2554 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
2555 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
2556 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
2557 std::array<SpatialDomains::PointGeom *, 5> v = {
2558 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
2562 unsigned int numQuadPoints = 5;
2563 unsigned int numModes = 4;
2584 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2594 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
2598 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2599 for (
int i = 0; i < nelmts; ++i)
2601 CollExp.push_back(Exp);
2611 const int nq = Exp->GetTotPoints();
2612 const int nm = Exp->GetNcoeffs();
2620 Exp->GetCoords(xc, yc, zc);
2622 for (
int i = 0; i < nq; ++i)
2624 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2625 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
2626 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
2628 for (
int i = 1; i < nelmts; ++i)
2636 for (
int i = 0; i < nelmts; ++i)
2638 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
2639 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs2 + i * nm);
2640 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2641 tmp = coeffs1 + i * nm, 1);
2642 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs2 + i * nm);
2643 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2644 tmp = coeffs1 + i * nm, 1);
2654 double epsilon = 1.0e-8;
2655 for (
int i = 0; i < coeffs1.size(); ++i)
2657 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2658 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2659 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2663 TestPyrIProductWRTDerivBase_MatrixFree_Deformed_MultiElmt_OverInt)
2676 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
2677 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
2678 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
2679 std::array<SpatialDomains::PointGeom *, 5> v = {
2680 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
2684 unsigned int numQuadPoints = 8;
2685 unsigned int numModes = 4;
2706 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2716 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
2720 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2721 for (
int i = 0; i < nelmts; ++i)
2723 CollExp.push_back(Exp);
2733 const int nq = Exp->GetTotPoints();
2734 const int nm = Exp->GetNcoeffs();
2742 Exp->GetCoords(xc, yc, zc);
2744 for (
int i = 0; i < nq; ++i)
2746 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2747 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
2748 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
2750 for (
int i = 1; i < nelmts; ++i)
2758 for (
int i = 0; i < nelmts; ++i)
2760 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
2761 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs2 + i * nm);
2762 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2763 tmp = coeffs1 + i * nm, 1);
2764 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs2 + i * nm);
2765 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2766 tmp = coeffs1 + i * nm, 1);
2772 double epsilon = 1.0e-8;
2773 for (
int i = 0; i < coeffs1.size(); ++i)
2775 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2776 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2777 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2794 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
2795 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
2796 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
2797 std::array<SpatialDomains::PointGeom *, 5> v = {
2798 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
2802 unsigned int numQuadPoints = 5;
2803 unsigned int numModes = 4;
2824 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2834 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
2836 unsigned int nelmts =
NELMTS;
2838 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2839 for (
unsigned int i = 0; i < nelmts; ++i)
2841 CollExp.push_back(Exp);
2855 for (
int i = 0; i < coeffs.size(); ++i)
2863 for (
unsigned int i = 0; i < nelmts; ++i)
2865 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
2866 tmp = physRef + i * Exp->GetTotPoints());
2874 double epsilon = 1.0e-8;
2875 for (
unsigned int i = 0; i < physRef.size(); ++i)
2877 BOOST_CHECK_CLOSE(physRef[i], phys[i], epsilon);
2894 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
2895 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
2896 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
2897 std::array<SpatialDomains::PointGeom *, 5> v = {
2898 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
2902 unsigned int numQuadPoints = 8;
2903 unsigned int numModes = 4;
2924 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2934 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
2936 unsigned int nelmts = 10;
2938 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2939 for (
unsigned int i = 0; i < nelmts; ++i)
2941 CollExp.push_back(Exp);
2955 for (
int i = 0; i < coeffs.size(); ++i)
2963 for (
unsigned int i = 0; i < nelmts; ++i)
2965 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
2966 tmp = physRef + i * Exp->GetTotPoints());
2970 double epsilon = 1.0e-8;
2971 for (
unsigned int i = 0; i < physRef.size(); ++i)
2973 BOOST_CHECK_CLOSE(physRef[i], phys[i], epsilon);
2990 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
2991 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
2992 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
2993 std::array<SpatialDomains::PointGeom *, 5> v = {
2994 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
3015 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3024 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
3028 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3029 for (
int i = 0; i < nelmts; ++i)
3031 CollExp.push_back(Exp);
3041 const int nq = Exp->GetTotPoints();
3042 const int nm = Exp->GetNcoeffs();
3051 Exp->GetCoords(xc, yc, zc);
3053 for (
int i = 0; i < nq; ++i)
3055 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
3056 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
3057 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
3059 for (
int i = 1; i < nelmts; ++i)
3067 for (
int i = 0; i < nelmts; ++i)
3069 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
3070 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs2 + i * nm);
3071 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
3072 tmp = coeffs1 + i * nm, 1);
3073 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs2 + i * nm);
3074 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
3075 tmp = coeffs1 + i * nm, 1);
3081 double epsilon = 1.0e-8;
3082 for (
int i = 0; i < coeffs1.size(); ++i)
3084 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
3085 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
3086 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
3103 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
3104 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
3105 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
3106 std::array<SpatialDomains::PointGeom *, 5> v = {
3107 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
3128 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3137 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
3141 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3142 for (
int i = 0; i < nelmts; ++i)
3144 CollExp.push_back(Exp);
3154 const int nq = Exp->GetTotPoints();
3155 const int nm = Exp->GetNcoeffs();
3164 Exp->GetCoords(xc, yc, zc);
3166 for (
int i = 0; i < nq; ++i)
3168 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
3169 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
3170 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
3172 for (
int i = 1; i < nelmts; ++i)
3180 for (
int i = 0; i < nelmts; ++i)
3182 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
3183 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs2 + i * nm);
3184 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
3185 tmp = coeffs1 + i * nm, 1);
3186 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs2 + i * nm);
3187 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
3188 tmp = coeffs1 + i * nm, 1);
3194 double epsilon = 1.0e-8;
3195 for (
int i = 0; i < coeffs1.size(); ++i)
3197 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
3198 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
3199 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
3216 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
3217 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
3218 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
3219 std::array<SpatialDomains::PointGeom *, 5> v = {
3220 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
3224 unsigned int numQuadPoints = 5;
3225 unsigned int numModes = 4;
3246 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3256 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
3260 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3261 for (
int i = 0; i < nelmts; ++i)
3263 CollExp.push_back(Exp);
3282 const int nm = Exp->GetNcoeffs();
3287 for (
int i = 0; i < coeffsIn.size(); ++i)
3289 coeffsIn[i] = i + 1.0;
3295 for (
int i = 0; i < nelmts; ++i)
3298 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3303 double epsilon = 1.0e-8;
3304 for (
int i = 0; i < coeffsRef.size(); ++i)
3306 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3307 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3308 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3325 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
3326 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
3327 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
3328 std::array<SpatialDomains::PointGeom *, 5> v = {
3329 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
3333 unsigned int numQuadPoints = 5;
3334 unsigned int numModes = 4;
3355 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3365 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
3369 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3370 for (
int i = 0; i < nelmts; ++i)
3372 CollExp.push_back(Exp);
3385 const int nm = Exp->GetNcoeffs();
3390 for (
int i = 0; i < coeffsIn.size(); ++i)
3392 coeffsIn[i] = i + 1.0;
3398 for (
int i = 0; i < nelmts; ++i)
3401 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3406 double epsilon = 1.0e-8;
3407 for (
int i = 0; i < coeffsRef.size(); ++i)
3409 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3410 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3411 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3428 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
3429 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
3430 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
3431 std::array<SpatialDomains::PointGeom *, 5> v = {
3432 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
3436 unsigned int numQuadPoints = 8;
3437 unsigned int numModes = 4;
3458 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3468 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
3472 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3473 for (
int i = 0; i < nelmts; ++i)
3475 CollExp.push_back(Exp);
3488 const int nm = Exp->GetNcoeffs();
3493 for (
int i = 0; i < coeffsIn.size(); ++i)
3495 coeffsIn[i] = i + 1.0;
3501 for (
int i = 0; i < nelmts; ++i)
3504 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3509 double epsilon = 1.0e-8;
3510 for (
int i = 0; i < coeffsRef.size(); ++i)
3512 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3513 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3514 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3531 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
3532 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
3533 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
3534 std::array<SpatialDomains::PointGeom *, 5> v = {
3535 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
3539 unsigned int numQuadPoints = 5;
3540 unsigned int numModes = 4;
3561 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3571 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
3575 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3576 for (
int i = 0; i < nelmts; ++i)
3578 CollExp.push_back(Exp);
3597 const int nm = Exp->GetNcoeffs();
3602 for (
int i = 0; i < coeffsIn.size(); ++i)
3604 coeffsIn[i] = i + 1.0;
3610 for (
int i = 0; i < nelmts; ++i)
3613 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3618 double epsilon = 1.0e-8;
3619 for (
int i = 0; i < coeffsRef.size(); ++i)
3621 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3622 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3623 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3640 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
3641 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
3642 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
3643 std::array<SpatialDomains::PointGeom *, 5> v = {
3644 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
3665 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3674 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
3678 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3679 for (
int i = 0; i < nelmts; ++i)
3681 CollExp.push_back(Exp);
3693 const int nq = Exp->GetTotPoints();
3697 Exp->GetCoords(xc, yc, zc);
3699 for (
int i = 0; i < nq; ++i)
3701 phys[i] = pow(xc[i], 3) + pow(yc[i], 3) + pow(zc[i], 3);
3715 double epsilon = 2.0e-8;
3716 for (
int i = 0; i < nq1; ++i)
3718 NekDouble exact = pow(xc1[i], 3) + pow(yc1[i], 3) + pow(zc1[i], 3);
3719 phys1[i] = (fabs(phys1[i]) < 1e-14) ? 0.0 : phys1[i];
3720 exact = (fabs(exact) < 1e-14) ? 0.0 : exact;
3721 BOOST_CHECK_CLOSE(phys1[i], exact, epsilon);
3738 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
3739 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
3740 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
3741 std::array<SpatialDomains::PointGeom *, 5> v = {
3742 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
3763 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3772 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
3776 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3777 for (
int i = 0; i < nelmts; ++i)
3779 CollExp.push_back(Exp);
3791 const int nq = Exp->GetTotPoints();
3795 Exp->GetCoords(xc, yc, zc);
3797 for (
int i = 0; i < nq; ++i)
3799 phys[i] = pow(xc[i], 3) + pow(yc[i], 3) + pow(zc[i], 3);
3813 double epsilon = 2.0e-8;
3814 for (
int i = 0; i < nq1; ++i)
3816 NekDouble exact = pow(xc1[i], 3) + pow(yc1[i], 3) + pow(zc1[i], 3);
3817 phys1[i] = (fabs(phys1[i]) < 1e-14) ? 0.0 : phys1[i];
3818 exact = (fabs(exact) < 1e-14) ? 0.0 : exact;
3819 BOOST_CHECK_CLOSE(phys1[i], exact, epsilon);
3824 TestPyrLinearAdvectionDiffusionReaction_IterPerExp_UniformP_ConstVarDiff)
3837 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
3838 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
3839 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
3840 std::array<SpatialDomains::PointGeom *, 5> v = {
3841 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
3845 unsigned int numQuadPoints = 5;
3846 unsigned int numModes = 4;
3867 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3877 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
3881 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3882 for (
int i = 0; i < nelmts; ++i)
3884 CollExp.push_back(Exp);
3898 int npoints = Exp->GetTotPoints() * nelmts;
3903 for (
int i = 0; i < Exp->GetShapeDimension(); i++)
3910 const int nm = Exp->GetNcoeffs();
3915 for (
int i = 0; i < coeffsIn.size(); ++i)
3917 coeffsIn[i] = i + 1.0;
3921 Exp->DetShapeType(), *Exp, factors,
3924 for (
int i = 0; i < nelmts; ++i)
3927 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3933 double epsilon = 1.0e-8;
3934 for (
int i = 0; i < coeffsRef.size(); ++i)
3936 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3937 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3938 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3943 TestPyrLinearAdvectionDiffusionReaction_MatrixFree_UniformP)
3956 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
3957 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
3958 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
3959 std::array<SpatialDomains::PointGeom *, 5> v = {
3960 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
3964 unsigned int numQuadPoints = 5;
3965 unsigned int numModes = 4;
3986 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3996 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
4000 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
4001 for (
int i = 0; i < nelmts; ++i)
4003 CollExp.push_back(Exp);
4017 int npoints = Exp->GetTotPoints() * nelmts;
4022 for (
int i = 0; i < Exp->GetShapeDimension(); i++)
4029 const int nm = Exp->GetNcoeffs();
4034 for (
int i = 0; i < coeffsIn.size(); ++i)
4036 coeffsIn[i] = i + 1.0;
4040 Exp->DetShapeType(), *Exp, factors,
4043 for (
int i = 0; i < nelmts; ++i)
4046 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
4052 double epsilon = 1.0e-8;
4053 for (
int i = 0; i < coeffsRef.size(); ++i)
4055 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
4056 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
4057 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
4062 TestPyrLinearAdvectionDiffusionReaction_MatrixFree_Deformed_overInt)
4075 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
4076 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
4077 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
4078 std::array<SpatialDomains::PointGeom *, 5> v = {
4079 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
4083 unsigned int numQuadPoints = 8;
4084 unsigned int numModes = 4;
4105 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
4115 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
4119 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
4120 for (
int i = 0; i < nelmts; ++i)
4122 CollExp.push_back(Exp);
4136 int npoints = Exp->GetTotPoints() * nelmts;
4141 for (
int i = 0; i < Exp->GetShapeDimension(); i++)
4148 const int nm = Exp->GetNcoeffs();
4153 for (
int i = 0; i < coeffsIn.size(); ++i)
4155 coeffsIn[i] = i + 1.0;
4159 Exp->DetShapeType(), *Exp, factors,
4162 for (
int i = 0; i < nelmts; ++i)
4165 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
4171 double epsilon = 1.0e-8;
4172 for (
int i = 0; i < coeffsRef.size(); ++i)
4174 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
4175 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
4176 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);