55 std::array<SpatialDomains::PointGeom *, 4> v,
56 std::array<SpatialDomains::SegGeomUniquePtr, 6> &segVec,
57 std::array<SpatialDomains::TriGeomUniquePtr, 4> &faceVec)
59 std::array<std::array<int, 2>, 6> edgeVerts = {
60 {{{0, 1}}, {{1, 2}}, {{0, 2}}, {{0, 3}}, {{1, 3}}, {{2, 3}}}};
61 std::array<std::array<int, 3>, 4> faceEdges = {
62 {{{0, 1, 2}}, {{0, 4, 3}}, {{1, 5, 4}}, {{2, 5, 3}}}};
65 for (
int i = 0; i < 6; ++i)
67 segVec[i] =
CreateSegGeom(i, v[edgeVerts[i][0]], v[edgeVerts[i][1]]);
71 std::array<SpatialDomains::TriGeom *, 4> faces;
72 for (
int i = 0; i < 4; ++i)
74 std::array<SpatialDomains::SegGeom *, 3> face;
75 for (
int j = 0; j < 3; ++j)
77 face[j] = segVec[faceEdges[i][j]].get();
81 faces[i] = faceVec[i].get();
100 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
102 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
103 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
116 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
125 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
135 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
137 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
138 CollExp.push_back(Exp);
148 for (
int i = 0; i < coeffs.size(); ++i)
155 Exp->BwdTrans(coeffs, phys1);
158 double epsilon = 1.0e-8;
159 for (
int i = 0; i < phys1.size(); ++i)
161 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
176 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
178 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
179 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
192 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
201 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
211 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
215 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
216 for (
int i = 0; i < nelmts; ++i)
218 CollExp.push_back(Exp);
229 for (
int i = 0; i < coeffs.size(); ++i)
236 for (
int i = 0; i < nelmts; ++i)
238 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
239 tmp = phys1 + i * Exp->GetTotPoints());
244 double epsilon = 1.0e-8;
245 for (
int i = 0; i < phys1.size(); ++i)
247 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
262 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
264 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
265 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
278 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
287 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
297 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
299 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
300 CollExp.push_back(Exp);
309 const int nq = Exp->GetTotPoints();
316 Exp->GetCoords(xc, yc, zc);
318 for (
int i = 0; i < nq; ++i)
320 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
323 Exp->IProductWRTBase(phys, coeffs1);
326 double epsilon = 1.0e-8;
327 for (
int i = 0; i < coeffs1.size(); ++i)
329 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
344 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
346 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
347 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
360 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
371 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
381 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
385 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
386 for (
int i = 0; i < nelmts; ++i)
388 CollExp.push_back(Exp);
398 const int nq = Exp->GetTotPoints();
405 Exp->GetCoords(xc, yc, zc);
407 for (
int i = 0; i < nq; ++i)
409 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
411 Exp->IProductWRTBase(phys, coeffs1);
413 for (
int i = 1; i < nelmts; ++i)
416 Exp->IProductWRTBase(phys + i * nq,
417 tmp = coeffs1 + i * Exp->GetNcoeffs());
421 double epsilon = 1.0e-4;
422 for (
int i = 0; i < coeffs1.size(); ++i)
425 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
426 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
427 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
442 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
444 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
445 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
458 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
467 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
477 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
479 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
480 CollExp.push_back(Exp);
490 for (
int i = 0; i < coeffs.size(); ++i)
497 Exp->BwdTrans(coeffs, phys1);
500 double epsilon = 1.0e-8;
501 for (
int i = 0; i < phys1.size(); ++i)
503 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
518 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
520 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
521 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
534 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
543 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
553 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
557 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
558 for (
int i = 0; i < nelmts; ++i)
560 CollExp.push_back(Exp);
571 for (
int i = 0; i < coeffs.size(); ++i)
578 for (
int i = 0; i < nelmts; ++i)
580 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
581 tmp = phys1 + i * Exp->GetTotPoints());
586 double epsilon = 1.0e-8;
587 for (
int i = 0; i < phys1.size(); ++i)
589 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
604 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
606 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
607 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
620 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
629 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
639 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
641 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
642 CollExp.push_back(Exp);
652 for (
int i = 0; i < coeffs.size(); ++i)
659 Exp->BwdTrans(coeffs, phys1);
662 double epsilon = 1.0e-8;
663 for (
int i = 0; i < phys1.size(); ++i)
665 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
680 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
682 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
683 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
696 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
705 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
715 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
719 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
720 for (
int i = 0; i < nelmts; ++i)
722 CollExp.push_back(Exp);
733 for (
int i = 0; i < coeffs.size(); ++i)
740 for (
int i = 0; i < nelmts; ++i)
742 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
743 tmp = phys1 + i * Exp->GetTotPoints());
748 double epsilon = 1.0e-8;
749 for (
int i = 0; i < phys1.size(); ++i)
751 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
766 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
768 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
769 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
782 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
791 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
801 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
805 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
806 for (
int i = 0; i < nelmts; ++i)
808 CollExp.push_back(Exp);
819 for (
int i = 0; i < coeffs.size(); ++i)
826 for (
int i = 0; i < nelmts; ++i)
828 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
829 tmp = phys1 + i * Exp->GetTotPoints());
834 double epsilon = 1.0e-8;
835 for (
int i = 0; i < phys1.size(); ++i)
837 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
852 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
854 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
855 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
858 unsigned int numQuadPoints = 5;
859 unsigned int numModes = 4;
871 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
880 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
890 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
892 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
893 CollExp.push_back(Exp);
905 for (
int i = 0; i < coeffs.size(); ++i)
912 Exp->BwdTrans(coeffs, physRef);
915 double epsilon = 1.0e-8;
916 for (
int i = 0; i < physRef.size(); ++i)
918 BOOST_CHECK_CLOSE(physRef[i], phys[i], epsilon);
933 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
935 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
936 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
939 unsigned int numQuadPoints = 8;
940 unsigned int numModes = 4;
952 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
961 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
971 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
973 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
974 CollExp.push_back(Exp);
986 for (
int i = 0; i < coeffs.size(); ++i)
993 Exp->BwdTrans(coeffs, physRef);
996 double epsilon = 1.0e-8;
997 for (
int i = 0; i < physRef.size(); ++i)
999 BOOST_CHECK_CLOSE(physRef[i], phys[i], epsilon);
1014 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1015 v2.get(), v3.get()};
1016 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
1017 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
1030 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1039 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1049 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
1051 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1052 CollExp.push_back(Exp);
1061 const int nq = Exp->GetTotPoints();
1068 Exp->GetCoords(xc, yc, zc);
1070 for (
int i = 0; i < nq; ++i)
1072 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1075 Exp->IProductWRTBase(phys, coeffs1);
1078 double epsilon = 1.0e-8;
1079 for (
int i = 0; i < coeffs1.size(); ++i)
1081 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1096 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1097 v2.get(), v3.get()};
1098 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
1099 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
1112 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1121 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1131 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
1135 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1136 for (
int i = 0; i < nelmts; ++i)
1138 CollExp.push_back(Exp);
1148 const int nq = Exp->GetTotPoints();
1155 Exp->GetCoords(xc, yc, zc);
1157 for (
int i = 0; i < nq; ++i)
1159 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1161 Exp->IProductWRTBase(phys, coeffs1);
1163 for (
int i = 1; i < nelmts; ++i)
1166 Exp->IProductWRTBase(phys + i * nq,
1167 tmp = coeffs1 + i * Exp->GetNcoeffs());
1171 double epsilon = 1.0e-4;
1172 for (
int i = 0; i < coeffs1.size(); ++i)
1175 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1176 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1177 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1192 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1193 v2.get(), v3.get()};
1194 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
1195 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
1208 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1217 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1227 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
1229 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1230 CollExp.push_back(Exp);
1239 const int nq = Exp->GetTotPoints();
1246 Exp->GetCoords(xc, yc, zc);
1248 for (
int i = 0; i < nq; ++i)
1250 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1253 Exp->IProductWRTBase(phys, coeffs1);
1256 double epsilon = 1.0e-8;
1257 for (
int i = 0; i < coeffs1.size(); ++i)
1259 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1274 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1275 v2.get(), v3.get()};
1276 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
1277 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
1290 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1301 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1311 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
1315 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1316 for (
int i = 0; i < nelmts; ++i)
1318 CollExp.push_back(Exp);
1328 const int nq = Exp->GetTotPoints();
1335 Exp->GetCoords(xc, yc, zc);
1337 for (
int i = 0; i < nq; ++i)
1339 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1341 Exp->IProductWRTBase(phys, coeffs1);
1343 for (
int i = 1; i < nelmts; ++i)
1346 Exp->IProductWRTBase(phys + i * nq,
1347 tmp = coeffs1 + i * Exp->GetNcoeffs());
1351 double epsilon = 1.0e-4;
1352 for (
int i = 0; i < coeffs1.size(); ++i)
1355 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1356 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1357 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1372 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1373 v2.get(), v3.get()};
1374 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
1375 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
1378 unsigned int numQuadPoints = 5;
1379 unsigned int numModes = 4;
1391 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1400 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1410 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
1412 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1413 CollExp.push_back(Exp);
1424 const int nq = Exp->GetTotPoints();
1431 Exp->GetCoords(xc, yc, zc);
1433 for (
int i = 0; i < nq; ++i)
1435 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1438 Exp->IProductWRTBase(phys, coeffsRef);
1441 double epsilon = 1.0e-8;
1442 for (
int i = 0; i < coeffsRef.size(); ++i)
1444 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
1459 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1460 v2.get(), v3.get()};
1461 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
1462 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
1465 unsigned int numQuadPoints = 5;
1466 unsigned int numModes = 4;
1478 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1487 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1497 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
1499 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1500 CollExp.push_back(Exp);
1511 const int nq = Exp->GetTotPoints();
1518 Exp->GetCoords(xc, yc, zc);
1520 for (
int i = 0; i < nq; ++i)
1522 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1525 Exp->IProductWRTBase(phys, coeffsRef);
1528 double epsilon = 1.0e-8;
1529 for (
int i = 0; i < coeffsRef.size(); ++i)
1531 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
1536 TestTetIProductWRTBase_MatrixFree_UniformP_Deformed_OverInt)
1547 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1548 v2.get(), v3.get()};
1549 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
1550 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
1553 unsigned int numQuadPoints = 8;
1554 unsigned int numModes = 4;
1566 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1575 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1585 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
1587 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1588 CollExp.push_back(Exp);
1599 const int nq = Exp->GetTotPoints();
1606 Exp->GetCoords(xc, yc, zc);
1608 for (
int i = 0; i < nq; ++i)
1610 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1613 Exp->IProductWRTBase(phys, coeffsRef);
1616 double epsilon = 1.0e-8;
1617 for (
int i = 0; i < coeffsRef.size(); ++i)
1619 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
1634 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1635 v2.get(), v3.get()};
1636 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
1637 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
1650 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1659 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1669 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
1671 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1672 CollExp.push_back(Exp);
1681 const int nq = Exp->GetTotPoints();
1687 Exp->GetCoords(xc, yc, zc);
1689 for (
int i = 0; i < nq; ++i)
1691 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1694 Exp->PhysDeriv(phys, diff1, tmp = diff1 + nq, tmp1 = diff1 + 2 * nq);
1696 tmp2 = diff2 + 2 * nq);
1698 double epsilon = 1.0e-8;
1699 for (
int i = 0; i < diff1.size(); ++i)
1701 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1716 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1717 v2.get(), v3.get()};
1718 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
1719 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
1732 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1741 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1751 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
1755 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1756 for (
int i = 0; i < nelmts; ++i)
1758 CollExp.push_back(Exp);
1768 const int nq = Exp->GetTotPoints();
1774 Exp->GetCoords(xc, yc, zc);
1776 for (
int i = 0; i < nq; ++i)
1778 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1780 Exp->PhysDeriv(phys, diff1, tmp1 = diff1 + (nelmts)*nq,
1781 tmp2 = diff1 + (2 * nelmts) * nq);
1783 for (
int i = 1; i < nelmts; ++i)
1786 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
1787 tmp1 = diff1 + (nelmts + i) * nq,
1788 tmp2 = diff1 + (2 * nelmts + i) * nq);
1792 tmp = diff2 + nelmts * nq, tmp2 = diff2 + 2 * nelmts * nq);
1794 double epsilon = 1.0e-8;
1795 for (
int i = 0; i < diff1.size(); ++i)
1797 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1812 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1813 v2.get(), v3.get()};
1814 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
1815 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
1828 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1837 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1847 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
1849 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1850 CollExp.push_back(Exp);
1859 const int nq = Exp->GetTotPoints();
1865 Exp->GetCoords(xc, yc, zc);
1867 for (
int i = 0; i < nq; ++i)
1869 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1872 Exp->PhysDeriv(phys, diff1, tmp = diff1 + nq, tmp1 = diff1 + 2 * nq);
1874 tmp2 = diff2 + 2 * nq);
1876 double epsilon = 1.0e-8;
1877 for (
int i = 0; i < diff1.size(); ++i)
1879 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1894 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1895 v2.get(), v3.get()};
1896 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
1897 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
1910 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1919 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
1929 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
1933 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1934 for (
int i = 0; i < nelmts; ++i)
1936 CollExp.push_back(Exp);
1946 const int nq = Exp->GetTotPoints();
1952 Exp->GetCoords(xc, yc, zc);
1954 for (
int i = 0; i < nq; ++i)
1956 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1958 Exp->PhysDeriv(phys, diff1, tmp1 = diff1 + (nelmts)*nq,
1959 tmp2 = diff1 + (2 * nelmts) * nq);
1961 for (
int i = 1; i < nelmts; ++i)
1964 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
1965 tmp1 = diff1 + (nelmts + i) * nq,
1966 tmp2 = diff1 + (2 * nelmts + i) * nq);
1970 tmp = diff2 + nelmts * nq, tmp2 = diff2 + 2 * nelmts * nq);
1972 double epsilon = 1.0e-8;
1973 for (
int i = 0; i < diff1.size(); ++i)
1975 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1990 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1991 v2.get(), v3.get()};
1992 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
1993 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
2006 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2015 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2025 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
2027 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2028 CollExp.push_back(Exp);
2037 const int nq = Exp->GetTotPoints();
2043 Exp->GetCoords(xc, yc, zc);
2045 for (
int i = 0; i < nq; ++i)
2047 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2050 Exp->PhysDeriv(phys, diff1, tmp = diff1 + nq, tmp1 = diff1 + 2 * nq);
2052 tmp2 = diff2 + 2 * nq);
2054 double epsilon = 1.0e-8;
2055 for (
int i = 0; i < diff1.size(); ++i)
2057 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
2072 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2073 v2.get(), v3.get()};
2074 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
2075 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
2088 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2097 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2107 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
2111 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2112 for (
int i = 0; i < nelmts; ++i)
2114 CollExp.push_back(Exp);
2124 const int nq = Exp->GetTotPoints();
2130 Exp->GetCoords(xc, yc, zc);
2132 for (
int i = 0; i < nq; ++i)
2134 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2136 Exp->PhysDeriv(phys, diff1, tmp1 = diff1 + (nelmts)*nq,
2137 tmp2 = diff1 + (2 * nelmts) * nq);
2139 for (
int i = 1; i < nelmts; ++i)
2142 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
2143 tmp1 = diff1 + (nelmts + i) * nq,
2144 tmp2 = diff1 + (2 * nelmts + i) * nq);
2148 tmp = diff2 + nelmts * nq, tmp2 = diff2 + 2 * nelmts * nq);
2150 double epsilon = 1.0e-8;
2151 for (
int i = 0; i < diff1.size(); ++i)
2153 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
2168 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2169 v2.get(), v3.get()};
2170 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
2171 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
2174 unsigned int numQuadPoints = 5;
2175 unsigned int numModes = 4;
2187 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2196 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2206 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
2208 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2209 CollExp.push_back(Exp);
2220 const int nq = Exp->GetTotPoints();
2226 Exp->GetCoords(xc, yc, zc);
2228 for (
int i = 0; i < nq; ++i)
2230 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2233 Exp->PhysDeriv(phys, diffRef, tmp = diffRef + nq, tmp1 = diffRef + 2 * nq);
2235 tmp2 = diff + 2 * nq);
2237 double epsilon = 1.0e-8;
2238 for (
int i = 0; i < diffRef.size(); ++i)
2240 BOOST_CHECK_CLOSE(diffRef[i], diff[i], epsilon);
2255 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2256 v2.get(), v3.get()};
2257 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
2258 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
2271 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2280 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2290 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
2292 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2293 CollExp.push_back(Exp);
2302 const int nq = Exp->GetTotPoints();
2303 const int nm = Exp->GetNcoeffs();
2312 Exp->GetCoords(xc, yc, zc);
2314 for (
int i = 0; i < nq; ++i)
2316 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2317 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
2318 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
2322 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
2323 Exp->IProductWRTDerivBase(1, phys2, coeffs2);
2324 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
2325 Exp->IProductWRTDerivBase(2, phys3, coeffs2);
2326 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
2331 double epsilon = 1.0e-8;
2332 for (
int i = 0; i < coeffs1.size(); ++i)
2334 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2335 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2336 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2351 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2352 v2.get(), v3.get()};
2353 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
2354 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
2367 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2378 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2388 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
2392 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2393 for (
int i = 0; i < nelmts; ++i)
2395 CollExp.push_back(Exp);
2405 const int nq = Exp->GetTotPoints();
2406 const int nm = Exp->GetNcoeffs();
2415 Exp->GetCoords(xc, yc, zc);
2417 for (
int i = 0; i < nq; ++i)
2419 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2420 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
2421 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
2423 for (
int i = 1; i < nelmts; ++i)
2431 for (
int i = 0; i < nelmts; ++i)
2433 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
2434 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs2 + i * nm);
2435 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2436 tmp = coeffs1 + i * nm, 1);
2437 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs2 + i * nm);
2438 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2439 tmp = coeffs1 + i * nm, 1);
2445 double epsilon = 1.0e-8;
2446 for (
int i = 0; i < coeffs1.size(); ++i)
2448 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2449 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2450 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2465 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2466 v2.get(), v3.get()};
2467 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
2468 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
2481 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2490 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2500 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
2502 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2503 CollExp.push_back(Exp);
2512 const int nq = Exp->GetTotPoints();
2513 const int nm = Exp->GetNcoeffs();
2522 Exp->GetCoords(xc, yc, zc);
2524 for (
int i = 0; i < nq; ++i)
2526 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2527 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
2528 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
2532 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
2533 Exp->IProductWRTDerivBase(1, phys2, coeffs2);
2534 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
2535 Exp->IProductWRTDerivBase(2, phys3, coeffs2);
2536 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
2541 double epsilon = 1.0e-8;
2542 for (
int i = 0; i < coeffs1.size(); ++i)
2544 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2545 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2546 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2561 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2562 v2.get(), v3.get()};
2563 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
2564 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
2577 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2588 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2598 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
2602 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2603 for (
int i = 0; i < nelmts; ++i)
2605 CollExp.push_back(Exp);
2615 const int nq = Exp->GetTotPoints();
2616 const int nm = Exp->GetNcoeffs();
2625 Exp->GetCoords(xc, yc, zc);
2627 for (
int i = 0; i < nq; ++i)
2629 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2630 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
2631 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
2633 for (
int i = 1; i < nelmts; ++i)
2641 for (
int i = 0; i < nelmts; ++i)
2643 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
2644 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs2 + i * nm);
2645 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2646 tmp = coeffs1 + i * nm, 1);
2647 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs2 + i * nm);
2648 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2649 tmp = coeffs1 + i * nm, 1);
2655 double epsilon = 1.0e-8;
2656 for (
int i = 0; i < coeffs1.size(); ++i)
2658 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2659 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2660 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2675 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2676 v2.get(), v3.get()};
2677 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
2678 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
2691 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2700 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2710 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
2712 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2713 CollExp.push_back(Exp);
2722 const int nq = Exp->GetTotPoints();
2723 const int nm = Exp->GetNcoeffs();
2732 Exp->GetCoords(xc, yc, zc);
2734 for (
int i = 0; i < nq; ++i)
2736 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2737 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
2738 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
2742 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
2743 Exp->IProductWRTDerivBase(1, phys2, coeffs2);
2744 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
2745 Exp->IProductWRTDerivBase(2, phys3, coeffs2);
2746 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
2751 double epsilon = 1.0e-7;
2752 for (
int i = 0; i < coeffs1.size(); ++i)
2754 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2755 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2756 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2771 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2772 v2.get(), v3.get()};
2773 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
2774 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
2787 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2798 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2808 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
2812 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2813 for (
int i = 0; i < nelmts; ++i)
2815 CollExp.push_back(Exp);
2825 const int nq = Exp->GetTotPoints();
2826 const int nm = Exp->GetNcoeffs();
2835 Exp->GetCoords(xc, yc, zc);
2837 for (
int i = 0; i < nq; ++i)
2839 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2840 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
2841 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
2843 for (
int i = 1; i < nelmts; ++i)
2851 for (
int i = 0; i < nelmts; ++i)
2853 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
2854 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs2 + i * nm);
2855 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2856 tmp = coeffs1 + i * nm, 1);
2857 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs2 + i * nm);
2858 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2859 tmp = coeffs1 + i * nm, 1);
2865 double epsilon = 1.0e-7;
2866 for (
int i = 0; i < coeffs1.size(); ++i)
2868 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2869 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2870 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2885 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2886 v2.get(), v3.get()};
2887 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
2888 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
2891 unsigned int numQuadPoints = 5;
2892 unsigned int numModes = 4;
2904 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2913 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
2923 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
2927 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2928 for (
int i = 0; i < nelmts; ++i)
2930 CollExp.push_back(Exp);
2949 const int nm = Exp->GetNcoeffs();
2954 for (
int i = 0; i < coeffsIn.size(); ++i)
2956 coeffsIn[i] = i + 1.0;
2962 for (
int i = 0; i < nelmts; ++i)
2965 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
2970 double epsilon = 1.0e-8;
2971 for (
int i = 0; i < coeffsRef.size(); ++i)
2973 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
2974 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
2975 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
2990 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2991 v2.get(), v3.get()};
2992 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
2993 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
2996 unsigned int numQuadPoints = 5;
2997 unsigned int numModes = 4;
3009 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3018 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3028 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
3032 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3033 for (
int i = 0; i < nelmts; ++i)
3035 CollExp.push_back(Exp);
3048 const int nm = Exp->GetNcoeffs();
3053 for (
int i = 0; i < coeffsIn.size(); ++i)
3055 coeffsIn[i] = i + 1.0;
3061 for (
int i = 0; i < nelmts; ++i)
3064 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3069 double epsilon = 1.0e-8;
3070 for (
int i = 0; i < coeffsRef.size(); ++i)
3072 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3073 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3074 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3089 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3090 v2.get(), v3.get()};
3091 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
3092 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
3095 unsigned int numQuadPoints = 8;
3096 unsigned int numModes = 4;
3108 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3117 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3127 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
3131 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3132 for (
int i = 0; i < nelmts; ++i)
3134 CollExp.push_back(Exp);
3147 const int nm = Exp->GetNcoeffs();
3152 for (
int i = 0; i < coeffsIn.size(); ++i)
3154 coeffsIn[i] = i + 1.0;
3160 for (
int i = 0; i < nelmts; ++i)
3163 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3168 double epsilon = 1.0e-8;
3169 for (
int i = 0; i < coeffsRef.size(); ++i)
3171 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3172 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3173 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3188 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3189 v2.get(), v3.get()};
3190 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
3191 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
3194 unsigned int numQuadPoints = 5;
3195 unsigned int numModes = 4;
3207 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3216 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3226 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
3228 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3229 CollExp.push_back(Exp);
3240 const int nq = Exp->GetTotPoints();
3241 const int nm = Exp->GetNcoeffs();
3250 Exp->GetCoords(xc, yc, zc);
3252 for (
int i = 0; i < nq; ++i)
3254 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
3255 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
3256 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
3260 Exp->IProductWRTDerivBase(0, phys1, coeffsRef);
3261 Exp->IProductWRTDerivBase(1, phys2, coeffs);
3262 Vmath::Vadd(nm, coeffsRef, 1, coeffs, 1, coeffsRef, 1);
3263 Exp->IProductWRTDerivBase(2, phys3, coeffs);
3264 Vmath::Vadd(nm, coeffsRef, 1, coeffs, 1, coeffsRef, 1);
3269 double epsilon = 1.0e-7;
3270 for (
int i = 0; i < coeffsRef.size(); ++i)
3272 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3273 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3274 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3289 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3290 v2.get(), v3.get()};
3291 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
3292 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
3295 unsigned int numQuadPoints = 5;
3296 unsigned int numModes = 4;
3308 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3317 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3327 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
3331 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3332 for (
int i = 0; i < nelmts; ++i)
3334 CollExp.push_back(Exp);
3353 const int nm = Exp->GetNcoeffs();
3358 for (
int i = 0; i < coeffsIn.size(); ++i)
3360 coeffsIn[i] = i + 1.0;
3366 for (
int i = 0; i < nelmts; ++i)
3369 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3374 double epsilon = 1.0e-8;
3375 for (
int i = 0; i < coeffsRef.size(); ++i)
3377 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3378 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3379 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3395 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3396 v2.get(), v3.get()};
3397 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
3398 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
3401 unsigned int numQuadPoints = 5;
3402 unsigned int numModes = 4;
3414 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3423 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3433 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
3435 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3436 CollExp.push_back(Exp);
3448 const int nq = Exp->GetTotPoints();
3453 Exp->GetCoords(xc, yc, zc);
3455 for (
int i = 0; i < nq; ++i)
3457 phys[i] = pow(xc[i], 3) + pow(yc[i], 3) + pow(zc[i], 3);
3471 double epsilon = 1.0e-8;
3473 for (
int i = 0; i < nq1; ++i)
3475 NekDouble exact = pow(xc1[i], 3) + pow(yc1[i], 3) + pow(zc1[i], 3);
3476 phys1[i] = (fabs(phys1[i]) < 1e-14) ? 0.0 : phys1[i];
3477 exact = (fabs(exact) < 1e-14) ? 0.0 : exact;
3478 BOOST_CHECK_CLOSE(phys1[i], exact, epsilon);
3494 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3495 v2.get(), v3.get()};
3496 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
3497 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
3500 unsigned int numQuadPoints = 5;
3501 unsigned int numModes = 4;
3513 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3522 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3532 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
3534 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3535 CollExp.push_back(Exp);
3547 const int nq = Exp->GetTotPoints();
3552 Exp->GetCoords(xc, yc, zc);
3554 for (
int i = 0; i < nq; ++i)
3556 phys[i] = pow(xc[i], 3) + pow(yc[i], 3) + pow(zc[i], 3);
3570 double epsilon = 1.0e-8;
3572 for (
int i = 0; i < nq1; ++i)
3574 NekDouble exact = pow(xc1[i], 3) + pow(yc1[i], 3) + pow(zc1[i], 3);
3575 phys1[i] = (fabs(phys1[i]) < 1e-14) ? 0.0 : phys1[i];
3576 exact = (fabs(exact) < 1e-14) ? 0.0 : exact;
3577 BOOST_CHECK_CLOSE(phys1[i], exact, epsilon);
3582 TestTetLinearAdvectionDiffusionReaction_IterPerExp_UniformP)
3593 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3594 v2.get(), v3.get()};
3595 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
3596 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
3599 unsigned int numQuadPoints = 5;
3600 unsigned int numModes = 4;
3612 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3621 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3631 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
3635 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3636 for (
int i = 0; i < nelmts; ++i)
3638 CollExp.push_back(Exp);
3652 int npoints = Exp->GetTotPoints() * nelmts;
3657 for (
int i = 0; i < Exp->GetShapeDimension(); i++)
3664 const int nm = Exp->GetNcoeffs();
3669 for (
int i = 0; i < coeffsIn.size(); ++i)
3671 coeffsIn[i] = i + 1.0;
3675 Exp->DetShapeType(), *Exp, factors,
3678 for (
int i = 0; i < nelmts; ++i)
3681 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3687 double epsilon = 1.0e-8;
3688 for (
int i = 0; i < coeffsRef.size(); ++i)
3690 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3691 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3692 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3697 TestTetLinearAdvectionDiffusionReaction_MatrixFree_UniformP)
3708 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3709 v2.get(), v3.get()};
3710 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
3711 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
3714 unsigned int numQuadPoints = 5;
3715 unsigned int numModes = 4;
3727 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3736 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3746 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
3750 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3751 for (
int i = 0; i < nelmts; ++i)
3753 CollExp.push_back(Exp);
3767 int npoints = Exp->GetTotPoints() * nelmts;
3772 for (
int i = 0; i < Exp->GetShapeDimension(); i++)
3779 const int nm = Exp->GetNcoeffs();
3784 for (
int i = 0; i < coeffsIn.size(); ++i)
3786 coeffsIn[i] = i + 1.0;
3790 Exp->DetShapeType(), *Exp, factors,
3793 for (
int i = 0; i < nelmts; ++i)
3796 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3802 double epsilon = 1.0e-8;
3803 for (
int i = 0; i < coeffsRef.size(); ++i)
3805 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3806 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3807 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3812 TestTetLinearAdvectionDiffusionReaction_MatrixFree_Deformed_OverInt)
3823 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3824 v2.get(), v3.get()};
3825 std::array<SpatialDomains::SegGeomUniquePtr, 6> segVec;
3826 std::array<SpatialDomains::TriGeomUniquePtr, 4> faceVec;
3829 unsigned int numQuadPoints = 8;
3830 unsigned int numModes = 4;
3842 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3851 Nektar::LibUtilities::eGaussRadauMAlpha2Beta0;
3861 basisKeyDir1, basisKeyDir2, basisKeyDir3, tetGeom.get());
3865 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3866 for (
int i = 0; i < nelmts; ++i)
3868 CollExp.push_back(Exp);
3882 int npoints = Exp->GetTotPoints() * nelmts;
3887 for (
int i = 0; i < Exp->GetShapeDimension(); i++)
3894 const int nm = Exp->GetNcoeffs();
3899 for (
int i = 0; i < coeffsIn.size(); ++i)
3901 coeffsIn[i] = i + 1.0;
3905 Exp->DetShapeType(), *Exp, factors,
3908 for (
int i = 0; i < nelmts; ++i)
3911 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3917 double epsilon = 1.0e-8;
3918 for (
int i = 0; i < coeffsRef.size(); ++i)
3920 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3921 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3922 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3923 std::cout <<
"i = " << i <<
"\tdiff = " << coeffsRef[i] - coeffs[i]