56 std::array<SpatialDomains::PointGeom *, 4> v,
57 std::array<SpatialDomains::SegGeomUniquePtr, 6> &segVec,
58 std::array<SpatialDomains::TriGeomUniquePtr, 4> &faceVec)
60 std::array<std::array<int, 2>, 6> edgeVerts = {
61 {{{0, 1}}, {{1, 2}}, {{0, 2}}, {{0, 3}}, {{1, 3}}, {{2, 3}}}};
62 std::array<std::array<int, 3>, 4> faceEdges = {
63 {{{0, 1, 2}}, {{0, 4, 3}}, {{1, 5, 4}}, {{2, 5, 3}}}};
66 for (
int i = 0; i < 6; ++i)
68 segVec[i] =
CreateSegGeom(i, v[edgeVerts[i][0]], v[edgeVerts[i][1]]);
72 std::array<SpatialDomains::TriGeom *, 4> faces;
73 for (
int i = 0; i < 4; ++i)
75 std::array<SpatialDomains::SegGeom *, 3> face;
76 for (
int j = 0; j < 3; ++j)
78 face[j] = segVec[faceEdges[i][j]].get();
82 faces[i] = faceVec[i].get();
101 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
103 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
104 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
117 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
126 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
136 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
138 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
139 CollExp.push_back(Exp);
149 for (
int i = 0; i < coeffs.size(); ++i)
156 Exp->BwdTrans(coeffs, phys1);
159 double epsilon = 1.0e-8;
160 for (
int i = 0; i < phys1.size(); ++i)
162 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
177 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
179 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
180 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
193 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
202 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
212 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
216 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
217 for (
int i = 0; i < nelmts; ++i)
219 CollExp.push_back(Exp);
230 for (
int i = 0; i < coeffs.size(); ++i)
237 for (
int i = 0; i < nelmts; ++i)
239 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
240 tmp = phys1 + i * Exp->GetTotPoints());
245 double epsilon = 1.0e-8;
246 for (
int i = 0; i < phys1.size(); ++i)
248 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
263 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
265 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
266 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
279 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
288 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
298 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
300 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
301 CollExp.push_back(Exp);
310 const int nq = Exp->GetTotPoints();
317 Exp->GetCoords(xc, yc, zc);
319 for (
int i = 0; i < nq; ++i)
321 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
324 Exp->IProductWRTBase(phys, coeffs1);
327 double epsilon = 1.0e-8;
328 for (
int i = 0; i < coeffs1.size(); ++i)
330 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
345 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
347 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
348 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
361 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
372 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
382 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
386 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
387 for (
int i = 0; i < nelmts; ++i)
389 CollExp.push_back(Exp);
399 const int nq = Exp->GetTotPoints();
406 Exp->GetCoords(xc, yc, zc);
408 for (
int i = 0; i < nq; ++i)
410 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
412 Exp->IProductWRTBase(phys, coeffs1);
414 for (
int i = 1; i < nelmts; ++i)
417 Exp->IProductWRTBase(phys + i * nq,
418 tmp = coeffs1 + i * Exp->GetNcoeffs());
422 double epsilon = 1.0e-4;
423 for (
int i = 0; i < coeffs1.size(); ++i)
426 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
427 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
428 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
443 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
445 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
446 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
459 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
468 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
478 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
480 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
481 CollExp.push_back(Exp);
491 for (
int i = 0; i < coeffs.size(); ++i)
498 Exp->BwdTrans(coeffs, phys1);
501 double epsilon = 1.0e-8;
502 for (
int i = 0; i < phys1.size(); ++i)
504 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
519 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
521 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
522 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
535 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
544 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
554 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
558 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
559 for (
int i = 0; i < nelmts; ++i)
561 CollExp.push_back(Exp);
572 for (
int i = 0; i < coeffs.size(); ++i)
579 for (
int i = 0; i < nelmts; ++i)
581 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
582 tmp = phys1 + i * Exp->GetTotPoints());
587 double epsilon = 1.0e-8;
588 for (
int i = 0; i < phys1.size(); ++i)
590 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
605 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
607 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
608 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
621 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
630 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
640 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
642 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
643 CollExp.push_back(Exp);
653 for (
int i = 0; i < coeffs.size(); ++i)
660 Exp->BwdTrans(coeffs, phys1);
663 double epsilon = 1.0e-8;
664 for (
int i = 0; i < phys1.size(); ++i)
666 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
681 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
683 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
684 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
697 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
706 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
716 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
720 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
721 for (
int i = 0; i < nelmts; ++i)
723 CollExp.push_back(Exp);
734 for (
int i = 0; i < coeffs.size(); ++i)
741 for (
int i = 0; i < nelmts; ++i)
743 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
744 tmp = phys1 + i * Exp->GetTotPoints());
749 double epsilon = 1.0e-8;
750 for (
int i = 0; i < phys1.size(); ++i)
752 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
767 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
769 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
770 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
783 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
792 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
802 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
806 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
807 for (
int i = 0; i < nelmts; ++i)
809 CollExp.push_back(Exp);
820 for (
int i = 0; i < coeffs.size(); ++i)
827 for (
int i = 0; i < nelmts; ++i)
829 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
830 tmp = phys1 + i * Exp->GetTotPoints());
835 double epsilon = 1.0e-8;
836 for (
int i = 0; i < phys1.size(); ++i)
838 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
853 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
855 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
856 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
859 unsigned int numQuadPoints = 5;
860 unsigned int numModes = 4;
872 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
881 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
891 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
893 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
894 CollExp.push_back(Exp);
906 for (
int i = 0; i < coeffs.size(); ++i)
913 Exp->BwdTrans(coeffs, physRef);
916 double epsilon = 1.0e-8;
917 for (
int i = 0; i < physRef.size(); ++i)
919 BOOST_CHECK_CLOSE(physRef[i], phys[i], epsilon);
934 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
936 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
937 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
940 unsigned int numQuadPoints = 8;
941 unsigned int numModes = 4;
953 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
962 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
972 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
974 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
975 CollExp.push_back(Exp);
987 for (
int i = 0; i < coeffs.size(); ++i)
994 Exp->BwdTrans(coeffs, physRef);
997 double epsilon = 1.0e-8;
998 for (
int i = 0; i < physRef.size(); ++i)
1000 BOOST_CHECK_CLOSE(physRef[i], phys[i], epsilon);
1015 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1016 v2.get(), v3.get()};
1017 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
1018 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
1031 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1040 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1050 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
1052 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1053 CollExp.push_back(Exp);
1062 const int nq = Exp->GetTotPoints();
1069 Exp->GetCoords(xc, yc, zc);
1071 for (
int i = 0; i < nq; ++i)
1073 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1076 Exp->IProductWRTBase(phys, coeffs1);
1079 double epsilon = 1.0e-8;
1080 for (
int i = 0; i < coeffs1.size(); ++i)
1082 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1097 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1098 v2.get(), v3.get()};
1099 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
1100 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
1113 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1122 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1132 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
1136 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1137 for (
int i = 0; i < nelmts; ++i)
1139 CollExp.push_back(Exp);
1149 const int nq = Exp->GetTotPoints();
1156 Exp->GetCoords(xc, yc, zc);
1158 for (
int i = 0; i < nq; ++i)
1160 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1162 Exp->IProductWRTBase(phys, coeffs1);
1164 for (
int i = 1; i < nelmts; ++i)
1167 Exp->IProductWRTBase(phys + i * nq,
1168 tmp = coeffs1 + i * Exp->GetNcoeffs());
1172 double epsilon = 1.0e-4;
1173 for (
int i = 0; i < coeffs1.size(); ++i)
1176 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1177 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1178 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1193 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1194 v2.get(), v3.get()};
1195 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
1196 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
1209 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1218 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1228 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
1230 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1231 CollExp.push_back(Exp);
1240 const int nq = Exp->GetTotPoints();
1247 Exp->GetCoords(xc, yc, zc);
1249 for (
int i = 0; i < nq; ++i)
1251 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1254 Exp->IProductWRTBase(phys, coeffs1);
1257 double epsilon = 1.0e-8;
1258 for (
int i = 0; i < coeffs1.size(); ++i)
1260 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1275 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1276 v2.get(), v3.get()};
1277 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
1278 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
1291 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1302 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1312 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
1316 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1317 for (
int i = 0; i < nelmts; ++i)
1319 CollExp.push_back(Exp);
1329 const int nq = Exp->GetTotPoints();
1336 Exp->GetCoords(xc, yc, zc);
1338 for (
int i = 0; i < nq; ++i)
1340 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1342 Exp->IProductWRTBase(phys, coeffs1);
1344 for (
int i = 1; i < nelmts; ++i)
1347 Exp->IProductWRTBase(phys + i * nq,
1348 tmp = coeffs1 + i * Exp->GetNcoeffs());
1352 double epsilon = 1.0e-4;
1353 for (
int i = 0; i < coeffs1.size(); ++i)
1356 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1357 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1358 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1373 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1374 v2.get(), v3.get()};
1375 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
1376 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
1379 unsigned int numQuadPoints = 5;
1380 unsigned int numModes = 4;
1392 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1401 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1411 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
1413 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1414 CollExp.push_back(Exp);
1425 const int nq = Exp->GetTotPoints();
1432 Exp->GetCoords(xc, yc, zc);
1434 for (
int i = 0; i < nq; ++i)
1436 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1439 Exp->IProductWRTBase(phys, coeffsRef);
1442 double epsilon = 1.0e-8;
1443 for (
int i = 0; i < coeffsRef.size(); ++i)
1445 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
1460 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1461 v2.get(), v3.get()};
1462 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
1463 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
1466 unsigned int numQuadPoints = 5;
1467 unsigned int numModes = 4;
1479 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1488 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1498 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
1500 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1501 CollExp.push_back(Exp);
1512 const int nq = Exp->GetTotPoints();
1519 Exp->GetCoords(xc, yc, zc);
1521 for (
int i = 0; i < nq; ++i)
1523 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1526 Exp->IProductWRTBase(phys, coeffsRef);
1529 double epsilon = 1.0e-8;
1530 for (
int i = 0; i < coeffsRef.size(); ++i)
1532 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
1537 TestTetIProductWRTBase_MatrixFree_UniformP_Deformed_OverInt)
1548 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1549 v2.get(), v3.get()};
1550 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
1551 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
1554 unsigned int numQuadPoints = 8;
1555 unsigned int numModes = 4;
1567 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1576 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1586 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
1588 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1589 CollExp.push_back(Exp);
1600 const int nq = Exp->GetTotPoints();
1607 Exp->GetCoords(xc, yc, zc);
1609 for (
int i = 0; i < nq; ++i)
1611 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1614 Exp->IProductWRTBase(phys, coeffsRef);
1617 double epsilon = 1.0e-8;
1618 for (
int i = 0; i < coeffsRef.size(); ++i)
1620 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
1635 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1636 v2.get(), v3.get()};
1637 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
1638 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
1651 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1660 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1670 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
1672 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1673 CollExp.push_back(Exp);
1682 const int nq = Exp->GetTotPoints();
1688 Exp->GetCoords(xc, yc, zc);
1690 for (
int i = 0; i < nq; ++i)
1692 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1695 Exp->PhysDeriv(phys, diff1, tmp = diff1 + nq, tmp1 = diff1 + 2 * nq);
1697 tmp2 = diff2 + 2 * nq);
1699 double epsilon = 1.0e-8;
1700 for (
int i = 0; i < diff1.size(); ++i)
1702 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1717 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1718 v2.get(), v3.get()};
1719 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
1720 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
1733 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1742 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1752 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
1756 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1757 for (
int i = 0; i < nelmts; ++i)
1759 CollExp.push_back(Exp);
1769 const int nq = Exp->GetTotPoints();
1775 Exp->GetCoords(xc, yc, zc);
1777 for (
int i = 0; i < nq; ++i)
1779 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1781 Exp->PhysDeriv(phys, diff1, tmp1 = diff1 + (nelmts)*nq,
1782 tmp2 = diff1 + (2 * nelmts) * nq);
1784 for (
int i = 1; i < nelmts; ++i)
1787 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
1788 tmp1 = diff1 + (nelmts + i) * nq,
1789 tmp2 = diff1 + (2 * nelmts + i) * nq);
1793 tmp = diff2 + nelmts * nq, tmp2 = diff2 + 2 * nelmts * nq);
1795 double epsilon = 1.0e-8;
1796 for (
int i = 0; i < diff1.size(); ++i)
1798 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1813 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1814 v2.get(), v3.get()};
1815 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
1816 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
1829 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1838 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1848 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
1850 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1851 CollExp.push_back(Exp);
1860 const int nq = Exp->GetTotPoints();
1866 Exp->GetCoords(xc, yc, zc);
1868 for (
int i = 0; i < nq; ++i)
1870 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1873 Exp->PhysDeriv(phys, diff1, tmp = diff1 + nq, tmp1 = diff1 + 2 * nq);
1875 tmp2 = diff2 + 2 * nq);
1877 double epsilon = 1.0e-8;
1878 for (
int i = 0; i < diff1.size(); ++i)
1880 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1895 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1896 v2.get(), v3.get()};
1897 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
1898 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
1911 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1920 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1930 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
1934 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1935 for (
int i = 0; i < nelmts; ++i)
1937 CollExp.push_back(Exp);
1947 const int nq = Exp->GetTotPoints();
1953 Exp->GetCoords(xc, yc, zc);
1955 for (
int i = 0; i < nq; ++i)
1957 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1959 Exp->PhysDeriv(phys, diff1, tmp1 = diff1 + (nelmts)*nq,
1960 tmp2 = diff1 + (2 * nelmts) * nq);
1962 for (
int i = 1; i < nelmts; ++i)
1965 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
1966 tmp1 = diff1 + (nelmts + i) * nq,
1967 tmp2 = diff1 + (2 * nelmts + i) * nq);
1971 tmp = diff2 + nelmts * nq, tmp2 = diff2 + 2 * nelmts * nq);
1973 double epsilon = 1.0e-8;
1974 for (
int i = 0; i < diff1.size(); ++i)
1976 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1991 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1992 v2.get(), v3.get()};
1993 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
1994 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
2007 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2016 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2026 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
2028 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2029 CollExp.push_back(Exp);
2038 const int nq = Exp->GetTotPoints();
2044 Exp->GetCoords(xc, yc, zc);
2046 for (
int i = 0; i < nq; ++i)
2048 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2051 Exp->PhysDeriv(phys, diff1, tmp = diff1 + nq, tmp1 = diff1 + 2 * nq);
2053 tmp2 = diff2 + 2 * nq);
2055 double epsilon = 1.0e-8;
2056 for (
int i = 0; i < diff1.size(); ++i)
2058 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
2073 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2074 v2.get(), v3.get()};
2075 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
2076 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
2089 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2098 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2108 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
2112 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2113 for (
int i = 0; i < nelmts; ++i)
2115 CollExp.push_back(Exp);
2125 const int nq = Exp->GetTotPoints();
2131 Exp->GetCoords(xc, yc, zc);
2133 for (
int i = 0; i < nq; ++i)
2135 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2137 Exp->PhysDeriv(phys, diff1, tmp1 = diff1 + (nelmts)*nq,
2138 tmp2 = diff1 + (2 * nelmts) * nq);
2140 for (
int i = 1; i < nelmts; ++i)
2143 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
2144 tmp1 = diff1 + (nelmts + i) * nq,
2145 tmp2 = diff1 + (2 * nelmts + i) * nq);
2149 tmp = diff2 + nelmts * nq, tmp2 = diff2 + 2 * nelmts * nq);
2151 double epsilon = 1.0e-8;
2152 for (
int i = 0; i < diff1.size(); ++i)
2154 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
2169 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2170 v2.get(), v3.get()};
2171 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
2172 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
2175 unsigned int numQuadPoints = 5;
2176 unsigned int numModes = 4;
2188 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2197 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2207 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
2209 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2210 CollExp.push_back(Exp);
2221 const int nq = Exp->GetTotPoints();
2227 Exp->GetCoords(xc, yc, zc);
2229 for (
int i = 0; i < nq; ++i)
2231 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2234 Exp->PhysDeriv(phys, diffRef, tmp = diffRef + nq, tmp1 = diffRef + 2 * nq);
2236 tmp2 = diff + 2 * nq);
2238 double epsilon = 1.0e-8;
2239 for (
int i = 0; i < diffRef.size(); ++i)
2241 BOOST_CHECK_CLOSE(diffRef[i], diff[i], epsilon);
2256 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2257 v2.get(), v3.get()};
2258 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
2259 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
2272 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2281 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2291 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
2293 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2294 CollExp.push_back(Exp);
2303 const int nq = Exp->GetTotPoints();
2304 const int nm = Exp->GetNcoeffs();
2313 Exp->GetCoords(xc, yc, zc);
2315 for (
int i = 0; i < nq; ++i)
2317 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2318 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
2319 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
2323 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
2324 Exp->IProductWRTDerivBase(1, phys2, coeffs2);
2325 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
2326 Exp->IProductWRTDerivBase(2, phys3, coeffs2);
2327 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
2332 double epsilon = 1.0e-8;
2333 for (
int i = 0; i < coeffs1.size(); ++i)
2335 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2336 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2337 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2352 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2353 v2.get(), v3.get()};
2354 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
2355 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
2368 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2379 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2389 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
2393 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2394 for (
int i = 0; i < nelmts; ++i)
2396 CollExp.push_back(Exp);
2406 const int nq = Exp->GetTotPoints();
2407 const int nm = Exp->GetNcoeffs();
2416 Exp->GetCoords(xc, yc, zc);
2418 for (
int i = 0; i < nq; ++i)
2420 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2421 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
2422 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
2424 for (
int i = 1; i < nelmts; ++i)
2432 for (
int i = 0; i < nelmts; ++i)
2434 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
2435 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs2 + i * nm);
2436 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2437 tmp = coeffs1 + i * nm, 1);
2438 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs2 + i * nm);
2439 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2440 tmp = coeffs1 + i * nm, 1);
2446 double epsilon = 1.0e-8;
2447 for (
int i = 0; i < coeffs1.size(); ++i)
2449 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2450 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2451 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2466 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2467 v2.get(), v3.get()};
2468 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
2469 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
2482 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2491 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2501 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
2503 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2504 CollExp.push_back(Exp);
2513 const int nq = Exp->GetTotPoints();
2514 const int nm = Exp->GetNcoeffs();
2523 Exp->GetCoords(xc, yc, zc);
2525 for (
int i = 0; i < nq; ++i)
2527 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2528 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
2529 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
2533 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
2534 Exp->IProductWRTDerivBase(1, phys2, coeffs2);
2535 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
2536 Exp->IProductWRTDerivBase(2, phys3, coeffs2);
2537 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
2542 double epsilon = 1.0e-8;
2543 for (
int i = 0; i < coeffs1.size(); ++i)
2545 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2546 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2547 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2562 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2563 v2.get(), v3.get()};
2564 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
2565 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
2578 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2589 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2599 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
2603 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2604 for (
int i = 0; i < nelmts; ++i)
2606 CollExp.push_back(Exp);
2616 const int nq = Exp->GetTotPoints();
2617 const int nm = Exp->GetNcoeffs();
2626 Exp->GetCoords(xc, yc, zc);
2628 for (
int i = 0; i < nq; ++i)
2630 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2631 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
2632 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
2634 for (
int i = 1; i < nelmts; ++i)
2642 for (
int i = 0; i < nelmts; ++i)
2644 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
2645 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs2 + i * nm);
2646 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2647 tmp = coeffs1 + i * nm, 1);
2648 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs2 + i * nm);
2649 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2650 tmp = coeffs1 + i * nm, 1);
2656 double epsilon = 1.0e-8;
2657 for (
int i = 0; i < coeffs1.size(); ++i)
2659 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2660 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2661 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2676 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2677 v2.get(), v3.get()};
2678 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
2679 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
2692 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2701 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2711 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
2713 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2714 CollExp.push_back(Exp);
2723 const int nq = Exp->GetTotPoints();
2724 const int nm = Exp->GetNcoeffs();
2733 Exp->GetCoords(xc, yc, zc);
2735 for (
int i = 0; i < nq; ++i)
2737 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2738 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
2739 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
2743 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
2744 Exp->IProductWRTDerivBase(1, phys2, coeffs2);
2745 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
2746 Exp->IProductWRTDerivBase(2, phys3, coeffs2);
2747 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
2752 double epsilon = 1.0e-7;
2753 for (
int i = 0; i < coeffs1.size(); ++i)
2755 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2756 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2757 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2772 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2773 v2.get(), v3.get()};
2774 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
2775 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
2788 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2799 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2809 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
2813 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2814 for (
int i = 0; i < nelmts; ++i)
2816 CollExp.push_back(Exp);
2826 const int nq = Exp->GetTotPoints();
2827 const int nm = Exp->GetNcoeffs();
2836 Exp->GetCoords(xc, yc, zc);
2838 for (
int i = 0; i < nq; ++i)
2840 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2841 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
2842 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
2844 for (
int i = 1; i < nelmts; ++i)
2852 for (
int i = 0; i < nelmts; ++i)
2854 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
2855 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs2 + i * nm);
2856 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2857 tmp = coeffs1 + i * nm, 1);
2858 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs2 + i * nm);
2859 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2860 tmp = coeffs1 + i * nm, 1);
2866 double epsilon = 1.0e-7;
2867 for (
int i = 0; i < coeffs1.size(); ++i)
2869 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2870 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2871 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2886 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2887 v2.get(), v3.get()};
2888 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
2889 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
2892 unsigned int numQuadPoints = 5;
2893 unsigned int numModes = 4;
2905 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2914 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2924 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
2928 basisKeyDir1, basisKeyDir2, basisKeyDir3);
2932 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2933 for (
int i = 0; i < nelmts; ++i)
2935 CollExp.push_back(Exp);
2954 const int nm = Exp->GetNcoeffs();
2959 for (
int i = 0; i < nm; ++i)
2961 coeffsIn[i] = 1.0 + i;
2964 for (
int i = 1; i < nelmts; ++i)
2966 Vmath::Vcopy(nm, coeffsIn, 1, tmp = coeffsIn + i * nm, 1);
2972 for (
int i = 0; i < nelmts; ++i)
2975 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
2980 double epsilon = 1.0e-8;
2981 for (
int i = 0; i < coeffsRef.size(); ++i)
2983 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
2984 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
2985 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3000 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3001 v2.get(), v3.get()};
3002 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
3003 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
3006 unsigned int numQuadPoints = 5;
3007 unsigned int numModes = 4;
3019 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3028 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3038 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
3042 basisKeyDir1, basisKeyDir2, basisKeyDir3);
3046 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3047 for (
int i = 0; i < nelmts; ++i)
3049 CollExp.push_back(Exp);
3062 const int nm = Exp->GetNcoeffs();
3067 for (
int i = 0; i < nm; ++i)
3069 coeffsIn[i] = 1.0 + i;
3072 for (
int i = 1; i < nelmts; ++i)
3074 Vmath::Vcopy(nm, coeffsIn, 1, tmp = coeffsIn + i * nm, 1);
3080 for (
int i = 0; i < nelmts; ++i)
3083 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3088 double epsilon = 1.0e-8;
3089 for (
int i = 0; i < coeffsRef.size(); ++i)
3091 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3092 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3093 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3108 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3109 v2.get(), v3.get()};
3110 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
3111 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
3114 unsigned int numQuadPoints = 8;
3115 unsigned int numModes = 4;
3127 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3136 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3146 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
3150 basisKeyDir1, basisKeyDir2, basisKeyDir3);
3154 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3155 for (
int i = 0; i < nelmts; ++i)
3157 CollExp.push_back(Exp);
3170 const int nm = Exp->GetNcoeffs();
3175 for (
int i = 0; i < nm; ++i)
3177 coeffsIn[i] = 1.0 + i;
3180 for (
int i = 1; i < nelmts; ++i)
3182 Vmath::Vcopy(nm, coeffsIn, 1, tmp = coeffsIn + i * nm, 1);
3188 for (
int i = 0; i < nelmts; ++i)
3191 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3196 double epsilon = 1.0e-8;
3197 for (
int i = 0; i < coeffsRef.size(); ++i)
3199 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3200 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3201 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3216 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3217 v2.get(), v3.get()};
3218 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
3219 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
3222 unsigned int numQuadPoints = 5;
3223 unsigned int numModes = 4;
3235 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3244 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3254 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
3256 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3257 CollExp.push_back(Exp);
3268 const int nq = Exp->GetTotPoints();
3269 const int nm = Exp->GetNcoeffs();
3278 Exp->GetCoords(xc, yc, zc);
3280 for (
int i = 0; i < nq; ++i)
3282 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
3283 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
3284 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
3288 Exp->IProductWRTDerivBase(0, phys1, coeffsRef);
3289 Exp->IProductWRTDerivBase(1, phys2, coeffs);
3290 Vmath::Vadd(nm, coeffsRef, 1, coeffs, 1, coeffsRef, 1);
3291 Exp->IProductWRTDerivBase(2, phys3, coeffs);
3292 Vmath::Vadd(nm, coeffsRef, 1, coeffs, 1, coeffsRef, 1);
3297 double epsilon = 1.0e-7;
3298 for (
int i = 0; i < coeffsRef.size(); ++i)
3300 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3301 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3302 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3317 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3318 v2.get(), v3.get()};
3319 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
3320 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
3323 unsigned int numQuadPoints = 5;
3324 unsigned int numModes = 4;
3336 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3345 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3355 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
3359 basisKeyDir1, basisKeyDir2, basisKeyDir3);
3363 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3364 for (
int i = 0; i < nelmts; ++i)
3366 CollExp.push_back(Exp);
3385 const int nm = Exp->GetNcoeffs();
3390 for (
int i = 0; i < nm; ++i)
3392 coeffsIn[i] = 1.0 + i;
3395 for (
int i = 1; i < nelmts; ++i)
3397 Vmath::Vcopy(nm, coeffsIn, 1, tmp = coeffsIn + i * nm, 1);
3403 for (
int i = 0; i < nelmts; ++i)
3406 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3411 double epsilon = 1.0e-8;
3412 for (
int i = 0; i < coeffsRef.size(); ++i)
3414 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3415 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3416 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3432 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3433 v2.get(), v3.get()};
3434 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
3435 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
3438 unsigned int numQuadPoints = 5;
3439 unsigned int numModes = 4;
3451 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3460 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3470 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
3472 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3473 CollExp.push_back(Exp);
3485 const int nq = Exp->GetTotPoints();
3490 Exp->GetCoords(xc, yc, zc);
3492 for (
int i = 0; i < nq; ++i)
3494 phys[i] = pow(xc[i], 3) + pow(yc[i], 3) + pow(zc[i], 3);
3508 double epsilon = 1.0e-8;
3510 for (
int i = 0; i < nq1; ++i)
3512 NekDouble exact = pow(xc1[i], 3) + pow(yc1[i], 3) + pow(zc1[i], 3);
3513 phys1[i] = (fabs(phys1[i]) < 1e-14) ? 0.0 : phys1[i];
3514 exact = (fabs(exact) < 1e-14) ? 0.0 : exact;
3515 BOOST_CHECK_CLOSE(phys1[i], exact, epsilon);
3531 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3532 v2.get(), v3.get()};
3533 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
3534 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
3537 unsigned int numQuadPoints = 5;
3538 unsigned int numModes = 4;
3550 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3559 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3569 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
3571 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3572 CollExp.push_back(Exp);
3584 const int nq = Exp->GetTotPoints();
3589 Exp->GetCoords(xc, yc, zc);
3591 for (
int i = 0; i < nq; ++i)
3593 phys[i] = pow(xc[i], 3) + pow(yc[i], 3) + pow(zc[i], 3);
3607 double epsilon = 1.0e-8;
3609 for (
int i = 0; i < nq1; ++i)
3611 NekDouble exact = pow(xc1[i], 3) + pow(yc1[i], 3) + pow(zc1[i], 3);
3612 phys1[i] = (fabs(phys1[i]) < 1e-14) ? 0.0 : phys1[i];
3613 exact = (fabs(exact) < 1e-14) ? 0.0 : exact;
3614 BOOST_CHECK_CLOSE(phys1[i], exact, epsilon);