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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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<StdRegions::StdExpansionSharedPtr> 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 < nm; ++i)
3292 for (
int i = 1; i < nelmts; ++i)
3294 Vmath::Vcopy(nm, coeffsIn, 1, tmp = coeffsIn + i * nm, 1);
3300 for (
int i = 0; i < nelmts; ++i)
3303 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3308 double epsilon = 1.0e-8;
3309 for (
int i = 0; i < coeffsRef.size(); ++i)
3311 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3312 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3313 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3330 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
3331 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
3332 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
3333 std::array<SpatialDomains::PointGeom *, 5> v = {
3334 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
3338 unsigned int numQuadPoints = 5;
3339 unsigned int numModes = 4;
3360 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3370 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
3374 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3375 for (
int i = 0; i < nelmts; ++i)
3377 CollExp.push_back(Exp);
3390 const int nm = Exp->GetNcoeffs();
3395 for (
int i = 0; i < nm; ++i)
3400 for (
int i = 1; i < nelmts; ++i)
3402 Vmath::Vcopy(nm, coeffsIn, 1, tmp = coeffsIn + i * nm, 1);
3408 for (
int i = 0; i < nelmts; ++i)
3411 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3416 double epsilon = 1.0e-8;
3417 for (
int i = 0; i < coeffsRef.size(); ++i)
3419 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3420 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3421 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3438 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
3439 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
3440 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
3441 std::array<SpatialDomains::PointGeom *, 5> v = {
3442 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
3446 unsigned int numQuadPoints = 8;
3447 unsigned int numModes = 4;
3468 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3478 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
3482 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3483 for (
int i = 0; i < nelmts; ++i)
3485 CollExp.push_back(Exp);
3498 const int nm = Exp->GetNcoeffs();
3503 for (
int i = 0; i < nm; ++i)
3508 for (
int i = 1; i < nelmts; ++i)
3510 Vmath::Vcopy(nm, coeffsIn, 1, tmp = coeffsIn + i * nm, 1);
3516 for (
int i = 0; i < nelmts; ++i)
3519 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3524 double epsilon = 1.0e-8;
3525 for (
int i = 0; i < coeffsRef.size(); ++i)
3527 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3528 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3529 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3546 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
3547 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
3548 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
3549 std::array<SpatialDomains::PointGeom *, 5> v = {
3550 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
3554 unsigned int numQuadPoints = 5;
3555 unsigned int numModes = 4;
3576 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3586 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
3590 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3591 for (
int i = 0; i < nelmts; ++i)
3593 CollExp.push_back(Exp);
3612 const int nm = Exp->GetNcoeffs();
3617 for (
int i = 0; i < nm; ++i)
3622 for (
int i = 1; i < nelmts; ++i)
3624 Vmath::Vcopy(nm, coeffsIn, 1, tmp = coeffsIn + i * nm, 1);
3630 for (
int i = 0; i < nelmts; ++i)
3633 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3638 double epsilon = 1.0e-8;
3639 for (
int i = 0; i < coeffsRef.size(); ++i)
3641 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3642 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3643 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3660 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
3661 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
3662 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
3663 std::array<SpatialDomains::PointGeom *, 5> v = {
3664 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
3685 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3694 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
3698 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3699 for (
int i = 0; i < nelmts; ++i)
3701 CollExp.push_back(Exp);
3713 const int nq = Exp->GetTotPoints();
3717 Exp->GetCoords(xc, yc, zc);
3719 for (
int i = 0; i < nq; ++i)
3721 phys[i] = pow(xc[i], 3) + pow(yc[i], 3) + pow(zc[i], 3);
3735 double epsilon = 2.0e-8;
3736 for (
int i = 0; i < nq1; ++i)
3738 NekDouble exact = pow(xc1[i], 3) + pow(yc1[i], 3) + pow(zc1[i], 3);
3739 phys1[i] = (fabs(phys1[i]) < 1e-14) ? 0.0 : phys1[i];
3740 exact = (fabs(exact) < 1e-14) ? 0.0 : exact;
3741 BOOST_CHECK_CLOSE(phys1[i], exact, epsilon);
3758 std::array<SpatialDomains::SegGeomUniquePtr, 8> segVec;
3759 std::array<SpatialDomains::QuadGeomUniquePtr, 1> quadVec;
3760 std::array<SpatialDomains::TriGeomUniquePtr, 4> triVec;
3761 std::array<SpatialDomains::PointGeom *, 5> v = {
3762 v0.get(), v1.get(), v2.get(), v3.get(), v4.get()};
3783 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3792 basisKeyDir1, basisKeyDir2, basisKeyDir3, pyrGeom.get());
3796 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3797 for (
int i = 0; i < nelmts; ++i)
3799 CollExp.push_back(Exp);
3811 const int nq = Exp->GetTotPoints();
3815 Exp->GetCoords(xc, yc, zc);
3817 for (
int i = 0; i < nq; ++i)
3819 phys[i] = pow(xc[i], 3) + pow(yc[i], 3) + pow(zc[i], 3);
3833 double epsilon = 2.0e-8;
3834 for (
int i = 0; i < nq1; ++i)
3836 NekDouble exact = pow(xc1[i], 3) + pow(yc1[i], 3) + pow(zc1[i], 3);
3837 phys1[i] = (fabs(phys1[i]) < 1e-14) ? 0.0 : phys1[i];
3838 exact = (fabs(exact) < 1e-14) ? 0.0 : exact;
3839 BOOST_CHECK_CLOSE(phys1[i], exact, epsilon);