55 std::array<SpatialDomains::PointGeom *, 6> v,
56 std::array<SpatialDomains::SegGeomUniquePtr, 9> &segVec,
57 std::array<SpatialDomains::TriGeomUniquePtr, 2> &triVec,
58 std::array<SpatialDomains::QuadGeomUniquePtr, 3> &quadVec)
60 std::array<std::array<int, 2>, 9> edgeVerts = {{{{0, 1}},
69 std::array<std::array<int, 4>, 5> faceEdges = {{{{0, 1, 2, 3}},
76 for (
int i = 0; i < 9; ++i)
78 segVec[i] =
CreateSegGeom(i, v[edgeVerts[i][0]], v[edgeVerts[i][1]]);
82 std::array<SpatialDomains::Geometry2D *, 5> faces;
83 for (
int i = 0; i < 5; ++i)
88 std::array<SpatialDomains::SegGeom *, 4> face;
89 for (
int j = 0; j < 4; ++j)
91 face[j] = segVec[faceEdges[i][j]].get();
95 faces[i] = quadVec[i / 2].get();
100 std::array<SpatialDomains::SegGeom *, 3> face;
101 for (
int j = 0; j < 3; ++j)
103 face[j] = segVec[faceEdges[i][j]].get();
107 faces[i] = triVec[(i - 1) / 2].get();
131 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
132 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
133 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
134 std::array<SpatialDomains::PointGeom *, 6> v = {
135 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
165 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
169 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
170 for (
int i = 0; i < nelmts; ++i)
172 CollExp.push_back(Exp);
183 for (
int i = 0; i < coeffs.size(); ++i)
190 for (
int i = 0; i < nelmts; ++i)
192 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
193 tmp = phys1 + i * Exp->GetTotPoints());
197 double epsilon = 1.0e-8;
198 for (
int i = 0; i < phys1.size(); ++i)
200 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
219 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
220 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
221 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
222 std::array<SpatialDomains::PointGeom *, 6> v = {
223 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
253 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
257 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
258 for (
int i = 0; i < nelmts; ++i)
260 CollExp.push_back(Exp);
271 for (
int i = 0; i < coeffs.size(); ++i)
279 for (
int i = 0; i < nelmts; ++i)
281 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
282 tmp = phys1 + i * Exp->GetTotPoints());
286 double epsilon = 1.0e-8;
287 for (
int i = 0; i < phys1.size(); ++i)
289 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
308 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
309 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
310 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
311 std::array<SpatialDomains::PointGeom *, 6> v = {
312 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
342 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
346 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
347 for (
int i = 0; i < nelmts; ++i)
349 CollExp.push_back(Exp);
360 for (
int i = 0; i < coeffs.size(); ++i)
368 for (
int i = 0; i < nelmts; ++i)
370 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
371 tmp = phys1 + i * Exp->GetTotPoints());
375 double epsilon = 1.0e-8;
376 for (
int i = 0; i < phys1.size(); ++i)
378 phys1[i] = (fabs(phys1[i]) < 1e-14) ? 0.0 : phys1[i];
379 phys2[i] = (fabs(phys1[i]) < 1e-14) ? 0.0 : phys2[i];
380 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
399 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
400 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
401 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
402 std::array<SpatialDomains::PointGeom *, 6> v = {
403 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
433 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
437 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
438 for (
int i = 0; i < nelmts; ++i)
440 CollExp.push_back(Exp);
451 for (
int i = 0; i < coeffs.size(); ++i)
459 for (
int i = 0; i < nelmts; ++i)
461 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
462 tmp = phys1 + i * Exp->GetTotPoints());
466 double epsilon = 1.0e-8;
467 for (
int i = 0; i < phys1.size(); ++i)
469 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
488 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
489 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
490 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
491 std::array<SpatialDomains::PointGeom *, 6> v = {
492 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
496 unsigned int numQuadPoints = 5;
497 unsigned int numModes = 4;
518 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
528 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
530 unsigned int nelmts = 2;
532 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
533 for (
unsigned int i = 0; i < nelmts; ++i)
535 CollExp.push_back(Exp);
549 for (
int i = 0; i < coeffs.size(); ++i)
557 for (
unsigned int i = 0; i < nelmts; ++i)
559 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
560 tmp = physRef + i * Exp->GetTotPoints());
564 double epsilon = 1.0e-8;
565 for (
unsigned int i = 0; i < physRef.size(); ++i)
567 BOOST_CHECK_CLOSE(physRef[i], phys[i], epsilon);
586 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
587 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
588 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
589 std::array<SpatialDomains::PointGeom *, 6> v = {
590 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
594 unsigned int numQuadPoints = 8;
595 unsigned int numModes = 4;
616 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
626 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
628 unsigned int nelmts = 2;
630 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
631 for (
unsigned int i = 0; i < nelmts; ++i)
633 CollExp.push_back(Exp);
647 for (
int i = 0; i < coeffs.size(); ++i)
655 for (
unsigned int i = 0; i < nelmts; ++i)
657 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
658 tmp = physRef + i * Exp->GetTotPoints());
662 double epsilon = 1.0e-8;
663 for (
unsigned int i = 0; i < physRef.size(); ++i)
665 BOOST_CHECK_CLOSE(physRef[i], phys[i], epsilon);
684 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
685 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
686 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
687 std::array<SpatialDomains::PointGeom *, 6> v = {
688 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
718 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
722 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
723 for (
int i = 0; i < nelmts; ++i)
725 CollExp.push_back(Exp);
736 for (
int i = 0; i < coeffs.size(); ++i)
744 for (
int i = 0; i < nelmts; ++i)
746 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
747 tmp = phys1 + i * Exp->GetTotPoints());
751 double epsilon = 1.0e-8;
752 for (
int i = 0; i < phys1.size(); ++i)
754 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
772 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
773 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
774 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
775 std::array<SpatialDomains::PointGeom *, 6> v = {
776 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
806 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
810 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
811 for (
int i = 0; i < nelmts; ++i)
813 CollExp.push_back(Exp);
824 for (
int i = 0; i < coeffs.size(); ++i)
832 for (
int i = 0; i < nelmts; ++i)
834 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
835 tmp = phys1 + i * Exp->GetTotPoints());
839 double epsilon = 1.0e-8;
840 for (
int i = 0; i < phys1.size(); ++i)
842 phys1[i] = (fabs(phys1[i]) < 1e-14) ? 0.0 : phys1[i];
843 phys2[i] = (fabs(phys1[i]) < 1e-14) ? 0.0 : phys2[i];
844 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
863 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
864 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
865 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
866 std::array<SpatialDomains::PointGeom *, 6> v = {
867 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
897 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
901 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
902 for (
int i = 0; i < nelmts; ++i)
904 CollExp.push_back(Exp);
914 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->IProductWRTBase(phys, coeffs1);
929 for (
int i = 1; i < nelmts; ++i)
932 Exp->IProductWRTBase(phys + i * nq,
933 tmp = coeffs1 + i * Exp->GetNcoeffs());
938 double epsilon = 1.0e-8;
939 for (
int i = 0; i < coeffs1.size(); ++i)
942 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
943 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
944 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
963 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
964 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
965 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
966 std::array<SpatialDomains::PointGeom *, 6> v = {
967 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
997 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
1001 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1002 for (
int i = 0; i < nelmts; ++i)
1004 CollExp.push_back(Exp);
1014 const int nq = Exp->GetTotPoints();
1021 Exp->GetCoords(xc, yc, zc);
1023 for (
int i = 0; i < nq; ++i)
1025 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1027 Exp->IProductWRTBase(phys, coeffs1);
1029 for (
int i = 1; i < nelmts; ++i)
1032 Exp->IProductWRTBase(phys + i * nq,
1033 tmp = coeffs1 + i * Exp->GetNcoeffs());
1038 double epsilon = 1.0e-8;
1039 for (
int i = 0; i < coeffs1.size(); ++i)
1042 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1043 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1044 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1063 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
1064 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
1065 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
1066 std::array<SpatialDomains::PointGeom *, 6> v = {
1067 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
1097 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
1101 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1102 for (
int i = 0; i < nelmts; ++i)
1104 CollExp.push_back(Exp);
1114 const int nq = Exp->GetTotPoints();
1121 Exp->GetCoords(xc, yc, zc);
1123 for (
int i = 0; i < nq; ++i)
1125 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1127 Exp->IProductWRTBase(phys, coeffs1);
1129 for (
int i = 1; i < nelmts; ++i)
1132 Exp->IProductWRTBase(phys + i * nq,
1133 tmp = coeffs1 + i * Exp->GetNcoeffs());
1138 double epsilon = 1.0e-8;
1139 for (
int i = 0; i < coeffs1.size(); ++i)
1142 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1143 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1144 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1149 TestPrismIProductWRTBase_MatrixFree_UniformP_Undeformed_MultiElmt)
1164 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
1165 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
1166 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
1167 std::array<SpatialDomains::PointGeom *, 6> v = {
1168 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
1172 unsigned int numQuadPoints = 5;
1173 unsigned int numModes = 4;
1194 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1204 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
1206 unsigned int nelmts = 2;
1208 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1209 for (
unsigned int i = 0; i < nelmts; ++i)
1211 CollExp.push_back(Exp);
1224 const int nq = Exp->GetTotPoints();
1231 Exp->GetCoords(xc, yc, zc);
1233 for (
int i = 0; i < nq; ++i)
1235 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1237 Exp->IProductWRTBase(phys, coeffsRef);
1239 for (
int i = 1; i < nelmts; ++i)
1242 Exp->IProductWRTBase(phys + i * nq,
1243 tmp = coeffsRef + i * Exp->GetNcoeffs());
1248 double epsilon = 1.0e-8;
1249 for (
int i = 0; i < coeffsRef.size(); ++i)
1252 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
1253 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
1254 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
1259 TestPrismIProductWRTBase_MatrixFree_UniformP_Deformed_MultiElmt)
1274 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
1275 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
1276 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
1277 std::array<SpatialDomains::PointGeom *, 6> v = {
1278 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
1282 unsigned int numQuadPoints = 5;
1283 unsigned int numModes = 4;
1304 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1314 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
1316 unsigned int nelmts = 2;
1318 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1319 for (
unsigned int i = 0; i < nelmts; ++i)
1321 CollExp.push_back(Exp);
1334 const int nq = Exp->GetTotPoints();
1341 Exp->GetCoords(xc, yc, zc);
1343 for (
int i = 0; i < nq; ++i)
1345 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1347 Exp->IProductWRTBase(phys, coeffsRef);
1349 for (
int i = 1; i < nelmts; ++i)
1352 Exp->IProductWRTBase(phys + i * nq,
1353 tmp = coeffsRef + i * Exp->GetNcoeffs());
1358 double epsilon = 1.0e-8;
1359 for (
int i = 0; i < coeffsRef.size(); ++i)
1362 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
1363 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
1364 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
1369 TestPrismIProductWRTBase_MatrixFree_UniformP_Deformed_OverInt_MultiElmt)
1384 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
1385 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
1386 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
1387 std::array<SpatialDomains::PointGeom *, 6> v = {
1388 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
1392 unsigned int numQuadPoints = 8;
1393 unsigned int numModes = 4;
1414 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1424 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
1426 unsigned int nelmts = 2;
1428 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1429 for (
unsigned int i = 0; i < nelmts; ++i)
1431 CollExp.push_back(Exp);
1444 const int nq = Exp->GetTotPoints();
1451 Exp->GetCoords(xc, yc, zc);
1453 for (
int i = 0; i < nq; ++i)
1455 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1457 Exp->IProductWRTBase(phys, coeffsRef);
1459 for (
int i = 1; i < nelmts; ++i)
1462 Exp->IProductWRTBase(phys + i * nq,
1463 tmp = coeffsRef + i * Exp->GetNcoeffs());
1468 double epsilon = 1.0e-8;
1469 for (
int i = 0; i < coeffsRef.size(); ++i)
1472 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
1473 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
1474 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
1493 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
1494 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
1495 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
1496 std::array<SpatialDomains::PointGeom *, 6> v = {
1497 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
1527 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
1531 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1532 for (
int i = 0; i < nelmts; ++i)
1534 CollExp.push_back(Exp);
1544 const int nq = Exp->GetTotPoints();
1551 Exp->GetCoords(xc, yc, zc);
1553 for (
int i = 0; i < nq; ++i)
1555 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1557 Exp->IProductWRTBase(phys, coeffs1);
1559 for (
int i = 1; i < nelmts; ++i)
1562 Exp->IProductWRTBase(phys + i * nq,
1563 tmp = coeffs1 + i * Exp->GetNcoeffs());
1568 double epsilon = 1.0e-8;
1569 for (
int i = 0; i < coeffs1.size(); ++i)
1572 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1573 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1574 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1593 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
1594 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
1595 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
1596 std::array<SpatialDomains::PointGeom *, 6> v = {
1597 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
1627 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
1631 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1632 for (
int i = 0; i < nelmts; ++i)
1634 CollExp.push_back(Exp);
1644 const int nq = Exp->GetTotPoints();
1651 Exp->GetCoords(xc, yc, zc);
1653 for (
int i = 0; i < nq; ++i)
1655 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1657 Exp->IProductWRTBase(phys, coeffs1);
1659 for (
int i = 1; i < nelmts; ++i)
1662 Exp->IProductWRTBase(phys + i * nq,
1663 tmp = coeffs1 + i * Exp->GetNcoeffs());
1668 double epsilon = 1.0e-8;
1669 for (
int i = 0; i < coeffs1.size(); ++i)
1672 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1673 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1674 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1693 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
1694 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
1695 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
1696 std::array<SpatialDomains::PointGeom *, 6> v = {
1697 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
1727 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
1731 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1732 for (
int i = 0; i < nelmts; ++i)
1734 CollExp.push_back(Exp);
1744 const int nq = Exp->GetTotPoints();
1751 Exp->GetCoords(xc, yc, zc);
1753 for (
int i = 0; i < nq; ++i)
1755 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1757 Exp->IProductWRTBase(phys, coeffs1);
1759 for (
int i = 1; i < nelmts; ++i)
1762 Exp->IProductWRTBase(phys + i * nq,
1763 tmp = coeffs1 + i * Exp->GetNcoeffs());
1768 double epsilon = 1.0e-8;
1769 for (
int i = 0; i < coeffs1.size(); ++i)
1772 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1773 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1774 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1793 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
1794 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
1795 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
1796 std::array<SpatialDomains::PointGeom *, 6> v = {
1797 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
1818 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1827 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
1831 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1832 for (
int i = 0; i < nelmts; ++i)
1834 CollExp.push_back(Exp);
1844 const int nq = Exp->GetTotPoints();
1850 Exp->GetCoords(xc, yc, zc);
1852 for (
int i = 0; i < nq; ++i)
1854 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1856 Exp->PhysDeriv(phys, diff1, tmp1 = diff1 + (nelmts)*nq,
1857 tmp2 = diff1 + (2 * nelmts) * nq);
1859 for (
int i = 1; i < nelmts; ++i)
1862 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
1863 tmp1 = diff1 + (nelmts + i) * nq,
1864 tmp2 = diff1 + (2 * nelmts + i) * nq);
1868 tmp = diff2 + nelmts * nq, tmp2 = diff2 + 2 * nelmts * nq);
1870 double epsilon = 1.0e-8;
1871 for (
int i = 0; i < diff1.size(); ++i)
1873 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1892 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
1893 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
1894 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
1895 std::array<SpatialDomains::PointGeom *, 6> v = {
1896 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
1917 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1926 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
1930 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1931 for (
int i = 0; i < nelmts; ++i)
1933 CollExp.push_back(Exp);
1943 const int nq = Exp->GetTotPoints();
1949 Exp->GetCoords(xc, yc, zc);
1951 for (
int i = 0; i < nq; ++i)
1953 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1955 Exp->PhysDeriv(phys, diff1, tmp1 = diff1 + (nelmts)*nq,
1956 tmp2 = diff1 + (2 * nelmts) * nq);
1958 for (
int i = 1; i < nelmts; ++i)
1961 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
1962 tmp1 = diff1 + (nelmts + i) * nq,
1963 tmp2 = diff1 + (2 * nelmts + i) * nq);
1967 tmp = diff2 + nelmts * nq, tmp2 = diff2 + 2 * nelmts * nq);
1969 double epsilon = 1.0e-8;
1970 for (
int i = 0; i < diff1.size(); ++i)
1973 diff1[i] = (fabs(diff1[i]) < 1e-14) ? 0.0 : diff1[i];
1974 diff2[i] = (fabs(diff2[i]) < 1e-14) ? 0.0 : diff2[i];
1975 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1994 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
1995 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
1996 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
1997 std::array<SpatialDomains::PointGeom *, 6> v = {
1998 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
2019 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2028 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
2032 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2033 for (
int i = 0; i < nelmts; ++i)
2035 CollExp.push_back(Exp);
2045 const int nq = Exp->GetTotPoints();
2051 Exp->GetCoords(xc, yc, zc);
2053 for (
int i = 0; i < nq; ++i)
2055 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2057 Exp->PhysDeriv(phys, diff1, tmp1 = diff1 + (nelmts)*nq,
2058 tmp2 = diff1 + (2 * nelmts) * nq);
2060 for (
int i = 1; i < nelmts; ++i)
2063 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
2064 tmp1 = diff1 + (nelmts + i) * nq,
2065 tmp2 = diff1 + (2 * nelmts + i) * nq);
2069 tmp = diff2 + nelmts * nq, tmp2 = diff2 + 2 * nelmts * nq);
2071 double epsilon = 1.0e-8;
2072 for (
int i = 0; i < diff1.size(); ++i)
2074 diff1[i] = (fabs(diff1[i]) < 1e-14) ? 0.0 : diff1[i];
2075 diff2[i] = (fabs(diff1[i]) < 1e-14) ? 0.0 : diff2[i];
2076 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
2095 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
2096 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
2097 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
2098 std::array<SpatialDomains::PointGeom *, 6> v = {
2099 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
2120 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2129 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
2133 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2134 for (
int i = 0; i < nelmts; ++i)
2136 CollExp.push_back(Exp);
2146 const int nq = Exp->GetTotPoints();
2152 Exp->GetCoords(xc, yc, zc);
2154 for (
int i = 0; i < nq; ++i)
2156 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2158 Exp->PhysDeriv(phys, diff1, tmp1 = diff1 + (nelmts)*nq,
2159 tmp2 = diff1 + (2 * nelmts) * nq);
2161 for (
int i = 1; i < nelmts; ++i)
2164 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
2165 tmp1 = diff1 + (nelmts + i) * nq,
2166 tmp2 = diff1 + (2 * nelmts + i) * nq);
2170 tmp = diff2 + nelmts * nq, tmp2 = diff2 + 2 * nelmts * nq);
2172 double epsilon = 1.0e-8;
2173 for (
int i = 0; i < diff1.size(); ++i)
2176 diff1[i] = (fabs(diff1[i]) < 1e-14) ? 0.0 : diff1[i];
2177 diff2[i] = (fabs(diff2[i]) < 1e-14) ? 0.0 : diff2[i];
2178 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
2197 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
2198 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
2199 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
2200 std::array<SpatialDomains::PointGeom *, 6> v = {
2201 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
2222 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2231 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
2235 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2236 for (
int i = 0; i < nelmts; ++i)
2238 CollExp.push_back(Exp);
2248 const int nq = Exp->GetTotPoints();
2254 Exp->GetCoords(xc, yc, zc);
2256 for (
int i = 0; i < nq; ++i)
2258 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2260 Exp->PhysDeriv(phys, tmp = diff1, tmp1 = diff1 + (nelmts)*nq,
2261 tmp2 = diff1 + (2 * nelmts) * nq);
2262 for (
int i = 1; i < nelmts; ++i)
2265 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
2266 tmp1 = diff1 + (nelmts + i) * nq,
2267 tmp2 = diff1 + (2 * nelmts + i) * nq);
2271 tmp = diff2 + nelmts * nq, tmp2 = diff2 + 2 * nelmts * nq);
2273 double epsilon = 1.0e-8;
2274 for (
int i = 0; i < diff1.size(); ++i)
2276 diff1[i] = (fabs(diff1[i]) < 1e-14) ? 0.0 : diff1[i];
2277 diff2[i] = (fabs(diff1[i]) < 1e-14) ? 0.0 : diff2[i];
2278 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
2297 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
2298 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
2299 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
2300 std::array<SpatialDomains::PointGeom *, 6> v = {
2301 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
2305 unsigned int numQuadPoints = 5;
2306 unsigned int numModes = 2;
2327 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2337 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
2341 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2342 for (
int i = 0; i < nelmts; ++i)
2344 CollExp.push_back(Exp);
2357 const int nq = Exp->GetTotPoints();
2363 Exp->GetCoords(xc, yc, zc);
2365 for (
int i = 0; i < nq; ++i)
2367 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2369 Exp->PhysDeriv(phys, diffRef, tmp1 = diffRef + (nelmts)*nq,
2370 tmp2 = diffRef + (2 * nelmts) * nq);
2372 for (
int i = 1; i < nelmts; ++i)
2375 Exp->PhysDeriv(phys, tmp = diffRef + i * nq,
2376 tmp1 = diffRef + (nelmts + i) * nq,
2377 tmp2 = diffRef + (2 * nelmts + i) * nq);
2381 tmp = diff + nelmts * nq, tmp2 = diff + 2 * nelmts * nq);
2383 double epsilon = 1.0e-8;
2384 for (
int i = 0; i < diffRef.size(); ++i)
2386 diffRef[i] = (std::abs(diffRef[i]) < 1e-14) ? 0.0 : diffRef[i];
2387 diff[i] = (std::abs(diff[i]) < 1e-14) ? 0.0 : diff[i];
2388 BOOST_CHECK_CLOSE(diffRef[i], diff[i], epsilon);
2393 TestPrismIProductWRTDerivBase_IterPerExp_UniformP_MultiElmt)
2408 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
2409 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
2410 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
2411 std::array<SpatialDomains::PointGeom *, 6> v = {
2412 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
2433 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2442 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
2446 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2447 for (
int i = 0; i < nelmts; ++i)
2449 CollExp.push_back(Exp);
2459 const int nq = Exp->GetTotPoints();
2460 const int nm = Exp->GetNcoeffs();
2469 Exp->GetCoords(xc, yc, zc);
2471 for (
int i = 0; i < nq; ++i)
2473 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2474 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
2475 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
2477 for (
int i = 1; i < nelmts; ++i)
2485 for (
int i = 0; i < nelmts; ++i)
2487 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
2488 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs2 + i * nm);
2489 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2490 tmp = coeffs1 + i * nm, 1);
2491 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs2 + i * nm);
2492 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2493 tmp = coeffs1 + i * nm, 1);
2499 double epsilon = 1.0e-8;
2500 for (
int i = 0; i < coeffs1.size(); ++i)
2502 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2503 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2504 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2523 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
2524 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
2525 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
2526 std::array<SpatialDomains::PointGeom *, 6> v = {
2527 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
2548 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2557 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
2561 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2562 for (
int i = 0; i < nelmts; ++i)
2564 CollExp.push_back(Exp);
2574 const int nq = Exp->GetTotPoints();
2575 const int nm = Exp->GetNcoeffs();
2584 Exp->GetCoords(xc, yc, zc);
2586 for (
int i = 0; i < nq; ++i)
2588 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2589 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
2590 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
2592 for (
int i = 1; i < nelmts; ++i)
2600 for (
int i = 0; i < nelmts; ++i)
2602 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
2603 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs2 + i * nm);
2604 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2605 tmp = coeffs1 + i * nm, 1);
2606 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs2 + i * nm);
2607 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2608 tmp = coeffs1 + i * nm, 1);
2614 double epsilon = 1.0e-8;
2615 for (
int i = 0; i < coeffs1.size(); ++i)
2617 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2618 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2619 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2638 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
2639 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
2640 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
2641 std::array<SpatialDomains::PointGeom *, 6> v = {
2642 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
2663 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2672 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
2676 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2677 for (
int i = 0; i < nelmts; ++i)
2679 CollExp.push_back(Exp);
2689 const int nq = Exp->GetTotPoints();
2690 const int nm = Exp->GetNcoeffs();
2699 Exp->GetCoords(xc, yc, zc);
2701 for (
int i = 0; i < nq; ++i)
2703 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2704 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
2705 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
2707 for (
int i = 1; i < nelmts; ++i)
2715 for (
int i = 0; i < nelmts; ++i)
2717 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
2718 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs2 + i * nm);
2719 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2720 tmp = coeffs1 + i * nm, 1);
2721 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs2 + i * nm);
2722 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2723 tmp = coeffs1 + i * nm, 1);
2729 double epsilon = 1.0e-8;
2730 for (
int i = 0; i < coeffs1.size(); ++i)
2732 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2733 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2734 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2739 TestPrismIProductWRTDerivBase_IterPerExp_VariableP_MultiElmt)
2754 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
2755 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
2756 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
2757 std::array<SpatialDomains::PointGeom *, 6> v = {
2758 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
2779 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2788 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
2792 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2793 for (
int i = 0; i < nelmts; ++i)
2795 CollExp.push_back(Exp);
2805 const int nq = Exp->GetTotPoints();
2806 const int nm = Exp->GetNcoeffs();
2815 Exp->GetCoords(xc, yc, zc);
2817 for (
int i = 0; i < nq; ++i)
2819 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2820 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
2821 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
2823 for (
int i = 1; i < nelmts; ++i)
2831 for (
int i = 0; i < nelmts; ++i)
2833 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
2834 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs2 + i * nm);
2835 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2836 tmp = coeffs1 + i * nm, 1);
2837 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs2 + i * nm);
2838 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2839 tmp = coeffs1 + i * nm, 1);
2845 double epsilon = 1.0e-8;
2846 for (
int i = 0; i < coeffs1.size(); ++i)
2848 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2849 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2850 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2869 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
2870 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
2871 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
2872 std::array<SpatialDomains::PointGeom *, 6> v = {
2873 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
2894 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2903 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
2907 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2908 for (
int i = 0; i < nelmts; ++i)
2910 CollExp.push_back(Exp);
2920 const int nq = Exp->GetTotPoints();
2921 const int nm = Exp->GetNcoeffs();
2930 Exp->GetCoords(xc, yc, zc);
2932 for (
int i = 0; i < nq; ++i)
2934 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2935 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
2936 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
2938 for (
int i = 1; i < nelmts; ++i)
2946 for (
int i = 0; i < nelmts; ++i)
2948 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
2949 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs2 + i * nm);
2950 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2951 tmp = coeffs1 + i * nm, 1);
2952 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs2 + i * nm);
2953 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2954 tmp = coeffs1 + i * nm, 1);
2960 double epsilon = 1.0e-8;
2961 for (
int i = 0; i < coeffs1.size(); ++i)
2963 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2964 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2965 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2984 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
2985 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
2986 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
2987 std::array<SpatialDomains::PointGeom *, 6> v = {
2988 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
3009 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3018 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
3022 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3023 for (
int i = 0; i < nelmts; ++i)
3025 CollExp.push_back(Exp);
3035 const int nq = Exp->GetTotPoints();
3036 const int nm = Exp->GetNcoeffs();
3045 Exp->GetCoords(xc, yc, zc);
3047 for (
int i = 0; i < nq; ++i)
3049 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
3050 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
3051 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
3053 for (
int i = 1; i < nelmts; ++i)
3061 for (
int i = 0; i < nelmts; ++i)
3063 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
3064 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs2 + i * nm);
3065 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
3066 tmp = coeffs1 + i * nm, 1);
3067 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs2 + i * nm);
3068 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
3069 tmp = coeffs1 + i * nm, 1);
3075 double epsilon = 1.0e-8;
3076 for (
int i = 0; i < coeffs1.size(); ++i)
3078 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
3079 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
3080 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
3085 TestPrismIProductWRTDerivBase_MatriFree_UniformP_Undeformed_MultiElmt)
3100 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
3101 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
3102 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
3103 std::array<SpatialDomains::PointGeom *, 6> v = {
3104 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
3108 unsigned int numQuadPoints = 7;
3109 unsigned int numModes = 6;
3130 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3140 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
3142 unsigned int nelmts = 1;
3144 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3145 for (
unsigned int i = 0; i < nelmts; ++i)
3147 CollExp.push_back(Exp);
3160 const int nq = Exp->GetTotPoints();
3161 const int nm = Exp->GetNcoeffs();
3170 Exp->GetCoords(xc, yc, zc);
3172 for (
int i = 0; i < nq; ++i)
3174 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
3175 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
3176 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
3178 for (
int i = 1; i < nelmts; ++i)
3186 for (
int i = 0; i < nelmts; ++i)
3188 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffsRef + i * nm);
3189 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs + i * nm);
3190 Vmath::Vadd(nm, coeffsRef + i * nm, 1, coeffs + i * nm, 1,
3191 tmp = coeffsRef + i * nm, 1);
3192 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs + i * nm);
3193 Vmath::Vadd(nm, coeffsRef + i * nm, 1, coeffs + i * nm, 1,
3194 tmp = coeffsRef + i * nm, 1);
3200 double epsilon = 1.0e-8;
3201 for (
int i = 0; i < coeffsRef.size(); ++i)
3203 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3204 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3205 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3210 TestPrismIProductWRTDerivBase_MatriFree_UniformP_Deformed_MultiElmt)
3225 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
3226 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
3227 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
3228 std::array<SpatialDomains::PointGeom *, 6> v = {
3229 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
3233 unsigned int numQuadPoints = 7;
3234 unsigned int numModes = 6;
3255 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3265 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
3267 unsigned int nelmts = 1;
3269 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3270 for (
unsigned int i = 0; i < nelmts; ++i)
3272 CollExp.push_back(Exp);
3285 const int nq = Exp->GetTotPoints();
3286 const int nm = Exp->GetNcoeffs();
3295 Exp->GetCoords(xc, yc, zc);
3297 for (
int i = 0; i < nq; ++i)
3299 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
3300 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
3301 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
3303 for (
int i = 1; i < nelmts; ++i)
3311 for (
int i = 0; i < nelmts; ++i)
3313 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffsRef + i * nm);
3314 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs + i * nm);
3315 Vmath::Vadd(nm, coeffsRef + i * nm, 1, coeffs + i * nm, 1,
3316 tmp = coeffsRef + i * nm, 1);
3317 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs + i * nm);
3318 Vmath::Vadd(nm, coeffsRef + i * nm, 1, coeffs + i * nm, 1,
3319 tmp = coeffsRef + i * nm, 1);
3325 double epsilon = 1.0e-8;
3326 for (
int i = 0; i < coeffsRef.size(); ++i)
3328 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3329 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3330 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3335 TestPrismIProductWRTDerivBase_MatriFree_UniformP_Deformed_OverInt_MultiElmt)
3350 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
3351 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
3352 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
3353 std::array<SpatialDomains::PointGeom *, 6> v = {
3354 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
3358 unsigned int numQuadPoints = 12;
3359 unsigned int numModes = 6;
3380 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3390 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
3392 unsigned int nelmts = 1;
3394 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3395 for (
unsigned int i = 0; i < nelmts; ++i)
3397 CollExp.push_back(Exp);
3410 const int nq = Exp->GetTotPoints();
3411 const int nm = Exp->GetNcoeffs();
3420 Exp->GetCoords(xc, yc, zc);
3422 for (
int i = 0; i < nq; ++i)
3424 phys1[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
3425 phys2[i] = cos(xc[i]) * sin(yc[i]) * cos(zc[i]);
3426 phys3[i] = cos(xc[i]) * sin(yc[i]) * sin(zc[i]);
3428 for (
int i = 1; i < nelmts; ++i)
3436 for (
int i = 0; i < nelmts; ++i)
3438 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffsRef + i * nm);
3439 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs + i * nm);
3440 Vmath::Vadd(nm, coeffsRef + i * nm, 1, coeffs + i * nm, 1,
3441 tmp = coeffsRef + i * nm, 1);
3442 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs + i * nm);
3443 Vmath::Vadd(nm, coeffsRef + i * nm, 1, coeffs + i * nm, 1,
3444 tmp = coeffsRef + i * nm, 1);
3450 double epsilon = 1.0e-8;
3451 for (
int i = 0; i < coeffsRef.size(); ++i)
3453 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3454 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3455 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3474 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
3475 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
3476 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
3477 std::array<SpatialDomains::PointGeom *, 6> v = {
3478 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
3482 unsigned int numQuadPoints = 7;
3483 unsigned int numModes = 6;
3504 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3514 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
3518 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3519 for (
int i = 0; i < nelmts; ++i)
3521 CollExp.push_back(Exp);
3540 const int nm = Exp->GetNcoeffs();
3545 for (
int i = 0; i < coeffsIn.size(); ++i)
3547 coeffsIn[i] = i + 1.0;
3553 for (
int i = 0; i < nelmts; ++i)
3556 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3561 double epsilon = 1.0e-8;
3562 for (
int i = 0; i < coeffsRef.size(); ++i)
3564 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3565 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3566 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3585 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
3586 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
3587 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
3588 std::array<SpatialDomains::PointGeom *, 6> v = {
3589 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
3593 unsigned int numQuadPoints = 7;
3594 unsigned int numModes = 6;
3615 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3625 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
3629 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3630 for (
int i = 0; i < nelmts; ++i)
3632 CollExp.push_back(Exp);
3645 const int nm = Exp->GetNcoeffs();
3650 for (
int i = 0; i < coeffsIn.size(); ++i)
3652 coeffsIn[i] = i + 1.0;
3658 for (
int i = 0; i < nelmts; ++i)
3661 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3666 double epsilon = 1.0e-8;
3667 for (
int i = 0; i < coeffsRef.size(); ++i)
3669 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3670 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3671 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3690 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
3691 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
3692 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
3693 std::array<SpatialDomains::PointGeom *, 6> v = {
3694 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
3698 unsigned int numQuadPoints = 10;
3699 unsigned int numModes = 6;
3720 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3730 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
3734 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3735 for (
int i = 0; i < nelmts; ++i)
3737 CollExp.push_back(Exp);
3750 const int nm = Exp->GetNcoeffs();
3755 for (
int i = 0; i < coeffsIn.size(); ++i)
3757 coeffsIn[i] = i + 1.0;
3763 for (
int i = 0; i < nelmts; ++i)
3766 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3771 double epsilon = 1.0e-8;
3772 for (
int i = 0; i < coeffsRef.size(); ++i)
3774 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3775 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3776 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3795 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
3796 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
3797 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
3798 std::array<SpatialDomains::PointGeom *, 6> v = {
3799 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
3803 unsigned int numQuadPoints = 7;
3804 unsigned int numModes = 6;
3825 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3835 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
3839 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3840 for (
int i = 0; i < nelmts; ++i)
3842 CollExp.push_back(Exp);
3861 const int nm = Exp->GetNcoeffs();
3866 for (
int i = 0; i < coeffsIn.size(); ++i)
3868 coeffsIn[i] = i + 1.0;
3874 for (
int i = 0; i < nelmts; ++i)
3877 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3882 double epsilon = 1.0e-8;
3883 for (
int i = 0; i < coeffsRef.size(); ++i)
3885 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3886 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3887 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3906 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
3907 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
3908 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
3909 std::array<SpatialDomains::PointGeom *, 6> v = {
3910 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
3914 unsigned int numQuadPoints = 7;
3915 unsigned int numModes = 6;
3936 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3946 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
3948 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3949 CollExp.push_back(Exp);
3960 const int nq = Exp->GetTotPoints();
3965 Exp->GetCoords(xc, yc, zc);
3967 for (
int i = 0; i < nq; ++i)
3969 phys[i] = pow(xc[i], 3) + pow(yc[i], 3) + pow(zc[i], 3);
3983 double epsilon = 2.0e-8;
3984 for (
int i = 0; i < nq1; ++i)
3986 NekDouble exact = pow(xc1[i], 3) + pow(yc1[i], 3) + pow(zc1[i], 3);
3987 phys1[i] = (fabs(phys1[i]) < 1e-14) ? 0.0 : phys1[i];
3988 exact = (fabs(exact) < 1e-14) ? 0.0 : exact;
3989 BOOST_CHECK_CLOSE(phys1[i], exact, epsilon);
4008 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
4009 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
4010 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
4011 std::array<SpatialDomains::PointGeom *, 6> v = {
4012 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
4016 unsigned int numQuadPoints = 7;
4017 unsigned int numModes = 6;
4038 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
4048 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
4050 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
4051 CollExp.push_back(Exp);
4062 const int nq = Exp->GetTotPoints();
4067 Exp->GetCoords(xc, yc, zc);
4069 for (
int i = 0; i < nq; ++i)
4071 phys[i] = pow(xc[i], 3) + pow(yc[i], 3) + pow(zc[i], 3);
4085 double epsilon = 1.0e-8;
4086 for (
int i = 0; i < nq1; ++i)
4088 NekDouble exact = pow(xc1[i], 3) + pow(yc1[i], 3) + pow(zc1[i], 3);
4089 phys1[i] = (fabs(phys1[i]) < 1e-14) ? 0.0 : phys1[i];
4090 exact = (fabs(exact) < 1e-14) ? 0.0 : exact;
4091 BOOST_CHECK_CLOSE(phys1[i], exact, epsilon);
4096 TestPrismLinearAdvectionDiffusionReaction_IterPerExp_UniformP)
4111 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
4112 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
4113 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
4114 std::array<SpatialDomains::PointGeom *, 6> v = {
4115 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
4119 unsigned int numQuadPoints = 7;
4120 unsigned int numModes = 6;
4141 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
4151 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
4155 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
4156 for (
int i = 0; i < nelmts; ++i)
4158 CollExp.push_back(Exp);
4172 int npoints = Exp->GetTotPoints() * nelmts;
4177 for (
int i = 0; i < Exp->GetShapeDimension(); i++)
4184 const int nm = Exp->GetNcoeffs();
4189 for (
int i = 0; i < coeffsIn.size(); ++i)
4191 coeffsIn[i] = i + 1.0;
4195 Exp->DetShapeType(), *Exp, factors,
4198 for (
int i = 0; i < nelmts; ++i)
4201 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
4207 double epsilon = 1.0e-8;
4208 for (
int i = 0; i < coeffsRef.size(); ++i)
4210 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
4211 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
4212 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
4217 TestPrismLinearAdvectionDiffusionReaction_MatrixFree_UniformP)
4232 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
4233 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
4234 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
4235 std::array<SpatialDomains::PointGeom *, 6> v = {
4236 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
4240 unsigned int numQuadPoints = 7;
4241 unsigned int numModes = 6;
4262 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
4272 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
4276 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
4277 for (
int i = 0; i < nelmts; ++i)
4279 CollExp.push_back(Exp);
4293 int npoints = Exp->GetTotPoints() * nelmts;
4298 for (
int i = 0; i < Exp->GetShapeDimension(); i++)
4305 const int nm = Exp->GetNcoeffs();
4310 for (
int i = 0; i < coeffsIn.size(); ++i)
4312 coeffsIn[i] = i + 1.0;
4316 Exp->DetShapeType(), *Exp, factors,
4319 for (
int i = 0; i < nelmts; ++i)
4322 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
4328 double epsilon = 1.0e-8;
4329 for (
int i = 0; i < coeffsRef.size(); ++i)
4331 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
4332 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
4333 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
4338 TestPrismLinearAdvectionDiffusionReaction_MatrixFree_Deformed_OverInt)
4353 std::array<SpatialDomains::SegGeomUniquePtr, 9> segVec;
4354 std::array<SpatialDomains::QuadGeomUniquePtr, 3> quadVec;
4355 std::array<SpatialDomains::TriGeomUniquePtr, 2> triVec;
4356 std::array<SpatialDomains::PointGeom *, 6> v = {
4357 v0.get(), v1.get(), v2.get(), v3.get(), v4.get(), v5.get()};
4361 unsigned int numQuadPoints = 10;
4362 unsigned int numModes = 6;
4383 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
4393 basisKeyDir1, basisKeyDir2, basisKeyDir3, prismGeom.get());
4397 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
4398 for (
int i = 0; i < nelmts; ++i)
4400 CollExp.push_back(Exp);
4414 int npoints = Exp->GetTotPoints() * nelmts;
4419 for (
int i = 0; i < Exp->GetShapeDimension(); i++)
4426 const int nm = Exp->GetNcoeffs();
4431 for (
int i = 0; i < coeffsIn.size(); ++i)
4433 coeffsIn[i] = i + 1.0;
4437 Exp->DetShapeType(), *Exp, factors,
4440 for (
int i = 0; i < nelmts; ++i)
4443 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
4449 double epsilon = 1.0e-8;
4450 for (
int i = 0; i < coeffsRef.size(); ++i)
4452 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
4453 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
4454 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);