85 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
86 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
100 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
110 basisKeyDir1, basisKeyDir2, triGeom.get());
112 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
113 CollExp.push_back(Exp);
123 for (
int i = 0; i < coeffs.size(); ++i)
130 Exp->BwdTrans(coeffs, phys1);
133 double epsilon = 1.0e-8;
134 for (
int i = 0; i < phys1.size(); ++i)
136 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
149 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
150 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
164 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
174 basisKeyDir1, basisKeyDir2, triGeom.get());
176 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
177 CollExp.push_back(Exp);
187 for (
int i = 0; i < coeffs.size(); ++i)
194 Exp->BwdTrans(coeffs, phys1);
197 double epsilon = 1.0e-8;
198 for (
int i = 0; i < phys1.size(); ++i)
200 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
213 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
214 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
228 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
238 basisKeyDir1, basisKeyDir2, triGeom.get());
242 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
243 for (
int i = 0; i < nelmts; ++i)
245 CollExp.push_back(Exp);
256 for (
int i = 0; i < coeffs.size(); ++i)
263 for (
int i = 0; i < nelmts; ++i)
265 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
266 tmp = phys1 + i * Exp->GetTotPoints());
271 double epsilon = 1.0e-8;
272 for (
int i = 0; i < phys1.size(); ++i)
274 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
287 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
288 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
302 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
312 basisKeyDir1, basisKeyDir2, triGeom.get());
314 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
315 CollExp.push_back(Exp);
325 for (
int i = 0; i < coeffs.size(); ++i)
332 Exp->BwdTrans(coeffs, phys1);
335 double epsilon = 1.0e-8;
336 for (
int i = 0; i < phys1.size(); ++i)
338 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
351 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
352 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
366 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
376 basisKeyDir1, basisKeyDir2, triGeom.get());
378 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
379 CollExp.push_back(Exp);
389 for (
int i = 0; i < coeffs.size(); ++i)
396 Exp->BwdTrans(coeffs, phys1);
399 double epsilon = 1.0e-8;
400 for (
int i = 0; i < phys1.size(); ++i)
402 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
415 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
416 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
420 unsigned int numQuadPoints = 5;
421 unsigned int numModes = 4;
432 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
442 basisKeyDir1, basisKeyDir2, triGeom.get());
444 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
445 CollExp.push_back(Exp);
457 for (
int i = 0; i < coeffs.size(); ++i)
464 Exp->BwdTrans(coeffs, physRef);
467 double epsilon = 1.0e-8;
468 for (
int i = 0; i < physRef.size(); ++i)
470 BOOST_CHECK_CLOSE(physRef[i], phys[i], epsilon);
483 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
484 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
488 unsigned int numQuadPoints = 8;
489 unsigned int numModes = 4;
500 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
510 basisKeyDir1, basisKeyDir2, triGeom.get());
512 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
513 CollExp.push_back(Exp);
525 for (
int i = 0; i < coeffs.size(); ++i)
532 Exp->BwdTrans(coeffs, physRef);
535 double epsilon = 1.0e-8;
536 for (
int i = 0; i < physRef.size(); ++i)
538 BOOST_CHECK_CLOSE(physRef[i], phys[i], epsilon);
551 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
552 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
566 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
576 basisKeyDir1, basisKeyDir2, triGeom.get());
578 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
581 for (
int i = 0; i < nelmts; ++i)
583 CollExp.push_back(Exp);
594 for (
int i = 0; i < coeffs.size(); ++i)
601 for (
int i = 0; i < nelmts; ++i)
603 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
604 tmp = phys1 + i * Exp->GetTotPoints());
608 double epsilon = 1.0e-8;
609 for (
int i = 0; i < phys1.size(); ++i)
611 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
624 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
625 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
639 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
649 basisKeyDir1, basisKeyDir2, triGeom.get());
651 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
654 for (
int i = 0; i < nelmts; ++i)
656 CollExp.push_back(Exp);
667 for (
int i = 0; i < coeffs.size(); ++i)
674 for (
int i = 0; i < nelmts; ++i)
676 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
677 tmp = phys1 + i * Exp->GetTotPoints());
681 double epsilon = 1.0e-8;
682 for (
int i = 0; i < phys1.size(); ++i)
684 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
697 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
698 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
712 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
722 basisKeyDir1, basisKeyDir2, triGeom.get());
726 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
727 for (
int i = 0; i < nelmts; ++i)
729 CollExp.push_back(Exp);
740 for (
int i = 0; i < coeffs.size(); ++i)
747 for (
int i = 0; i < nelmts; ++i)
749 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
750 tmp = phys1 + i * Exp->GetTotPoints());
754 double epsilon = 1.0e-8;
755 for (
int i = 0; i < phys1.size(); ++i)
757 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
770 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
771 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
785 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
795 basisKeyDir1, basisKeyDir2, triGeom.get());
799 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
800 for (
int i = 0; i < nelmts; ++i)
802 CollExp.push_back(Exp);
813 for (
int i = 0; i < coeffs.size(); ++i)
820 for (
int i = 0; i < nelmts; ++i)
822 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
823 tmp = phys1 + i * Exp->GetTotPoints());
827 double epsilon = 1.0e-8;
828 for (
int i = 0; i < phys1.size(); ++i)
830 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
843 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
844 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
858 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
868 basisKeyDir1, basisKeyDir2, triGeom.get());
870 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
871 CollExp.push_back(Exp);
880 const int nq = Exp->GetTotPoints();
887 Exp->GetCoords(xc, yc);
889 for (
int i = 0; i < nq; ++i)
891 phys[i] = sin(xc[i]) * cos(yc[i]);
894 Exp->IProductWRTBase(phys, coeffs1);
897 double epsilon = 1.0e-8;
898 for (
int i = 0; i < coeffs1.size(); ++i)
900 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
913 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
914 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
928 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
938 basisKeyDir1, basisKeyDir2, triGeom.get());
940 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
941 CollExp.push_back(Exp);
950 const int nq = Exp->GetTotPoints();
957 Exp->GetCoords(xc, yc);
959 for (
int i = 0; i < nq; ++i)
961 phys[i] = sin(xc[i]) * cos(yc[i]);
964 Exp->IProductWRTBase(phys, coeffs1);
967 double epsilon = 1.0e-8;
968 for (
int i = 0; i < coeffs1.size(); ++i)
970 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
983 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
984 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
998 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1008 basisKeyDir1, basisKeyDir2, triGeom.get());
1012 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1013 for (
int i = 0; i < nelmts; ++i)
1015 CollExp.push_back(Exp);
1025 const int nq = Exp->GetTotPoints();
1032 Exp->GetCoords(xc, yc);
1034 for (
int i = 0; i < nq; ++i)
1036 phys[i] = sin(xc[i]) * cos(yc[i]);
1038 Exp->IProductWRTBase(phys, coeffs1);
1040 for (
int i = 1; i < nelmts; ++i)
1043 Exp->IProductWRTBase(phys + i * nq,
1044 tmp = coeffs1 + i * Exp->GetNcoeffs());
1049 double epsilon = 1.0e-8;
1050 for (
int i = 0; i < coeffs1.size(); ++i)
1052 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1065 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
1066 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
1080 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1090 basisKeyDir1, basisKeyDir2, triGeom.get());
1092 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1093 CollExp.push_back(Exp);
1102 const int nq = Exp->GetTotPoints();
1109 Exp->GetCoords(xc, yc);
1111 for (
int i = 0; i < nq; ++i)
1113 phys[i] = sin(xc[i]) * cos(yc[i]);
1116 Exp->IProductWRTBase(phys, coeffs1);
1119 double epsilon = 1.0e-8;
1120 for (
int i = 0; i < coeffs1.size(); ++i)
1122 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1135 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
1136 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
1150 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1160 basisKeyDir1, basisKeyDir2, triGeom.get());
1162 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1163 CollExp.push_back(Exp);
1172 const int nq = Exp->GetTotPoints();
1179 Exp->GetCoords(xc, yc);
1181 for (
int i = 0; i < nq; ++i)
1183 phys[i] = sin(xc[i]) * cos(yc[i]);
1186 Exp->IProductWRTBase(phys, coeffs1);
1189 double epsilon = 1.0e-8;
1190 for (
int i = 0; i < coeffs1.size(); ++i)
1192 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1205 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
1206 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
1210 unsigned int numQuadPoints = 5;
1211 unsigned int numModes = 4;
1222 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1231 basisKeyDir1, basisKeyDir2, triGeom.get());
1233 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1234 CollExp.push_back(Exp);
1245 const int nq = Exp->GetTotPoints();
1252 Exp->GetCoords(xc, yc);
1254 for (
int i = 0; i < nq; ++i)
1256 phys[i] = sin(xc[i]) * cos(yc[i]);
1259 Exp->IProductWRTBase(phys, coeffsRef);
1262 double epsilon = 1.0e-8;
1263 for (
int i = 0; i < coeffsRef.size(); ++i)
1265 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
1278 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
1279 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
1283 unsigned int numQuadPoints = 5;
1284 unsigned int numModes = 4;
1295 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1304 basisKeyDir1, basisKeyDir2, triGeom.get());
1306 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1307 CollExp.push_back(Exp);
1318 const int nq = Exp->GetTotPoints();
1325 Exp->GetCoords(xc, yc);
1327 for (
int i = 0; i < nq; ++i)
1329 phys[i] = sin(xc[i]) * cos(yc[i]);
1332 Exp->IProductWRTBase(phys, coeffsRef);
1335 double epsilon = 1.0e-8;
1336 for (
int i = 0; i < coeffsRef.size(); ++i)
1338 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
1343 TestTriIProductWRTBase_MatrixFree_UniformP_Deformed_OverInt)
1352 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
1353 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
1357 unsigned int numQuadPoints = 8;
1358 unsigned int numModes = 4;
1369 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1378 basisKeyDir1, basisKeyDir2, triGeom.get());
1380 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1381 CollExp.push_back(Exp);
1392 const int nq = Exp->GetTotPoints();
1399 Exp->GetCoords(xc, yc);
1401 for (
int i = 0; i < nq; ++i)
1403 phys[i] = sin(xc[i]) * cos(yc[i]);
1406 Exp->IProductWRTBase(phys, coeffsRef);
1409 double epsilon = 1.0e-8;
1410 for (
int i = 0; i < coeffsRef.size(); ++i)
1412 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
1425 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
1426 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
1440 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1450 basisKeyDir1, basisKeyDir2, triGeom.get());
1454 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1455 for (
int i = 0; i < nelmts; ++i)
1457 CollExp.push_back(Exp);
1467 const int nq = Exp->GetTotPoints();
1474 Exp->GetCoords(xc, yc);
1476 for (
int i = 0; i < nq; ++i)
1478 phys[i] = sin(xc[i]) * cos(yc[i]);
1480 Exp->IProductWRTBase(phys, coeffs1);
1482 for (
int i = 1; i < nelmts; ++i)
1485 Exp->IProductWRTBase(phys + i * nq,
1486 tmp = coeffs1 + i * Exp->GetNcoeffs());
1491 double epsilon = 1.0e-8;
1492 for (
int i = 0; i < coeffs1.size(); ++i)
1494 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1507 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
1508 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
1522 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1532 basisKeyDir1, basisKeyDir2, triGeom.get());
1534 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1535 CollExp.push_back(Exp);
1544 const int nq = Exp->GetTotPoints();
1550 Exp->GetCoords(xc, yc);
1552 for (
int i = 0; i < nq; ++i)
1554 phys[i] = sin(xc[i]) * cos(yc[i]);
1557 Exp->PhysDeriv(phys, diff1, tmp = diff1 + nq);
1560 double epsilon = 1.0e-8;
1561 for (
int i = 0; i < diff1.size(); ++i)
1563 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1576 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
1577 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
1591 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1601 basisKeyDir1, basisKeyDir2, triGeom.get());
1603 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1604 CollExp.push_back(Exp);
1613 const int nq = Exp->GetTotPoints();
1619 Exp->GetCoords(xc, yc);
1621 for (
int i = 0; i < nq; ++i)
1623 phys[i] = sin(xc[i]) * cos(yc[i]);
1626 Exp->PhysDeriv(phys, diff1, tmp = diff1 + nq);
1629 double epsilon = 1.0e-8;
1630 for (
int i = 0; i < diff1.size(); ++i)
1632 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1645 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
1646 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
1660 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1670 basisKeyDir1, basisKeyDir2, triGeom.get());
1674 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1675 for (
int i = 0; i < nelmts; ++i)
1677 CollExp.push_back(Exp);
1687 const int nq = Exp->GetTotPoints();
1693 Exp->GetCoords(xc, yc);
1695 for (
int i = 0; i < nq; ++i)
1697 phys[i] = sin(xc[i]) * cos(yc[i]);
1699 Exp->PhysDeriv(phys, diff1, tmp1 = diff1 + (nelmts)*nq);
1701 for (
int i = 1; i < nelmts; ++i)
1704 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
1705 tmp1 = diff1 + (nelmts + i) * nq);
1709 tmp = diff2 + nelmts * nq);
1711 double epsilon = 1.0e-8;
1712 for (
int i = 0; i < diff1.size(); ++i)
1714 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1727 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
1728 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
1742 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1752 basisKeyDir1, basisKeyDir2, triGeom.get());
1754 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1755 CollExp.push_back(Exp);
1764 const int nq = Exp->GetTotPoints();
1770 Exp->GetCoords(xc, yc);
1772 for (
int i = 0; i < nq; ++i)
1774 phys[i] = sin(xc[i]) * cos(yc[i]);
1777 Exp->PhysDeriv(phys, diff1, tmp = diff1 + nq);
1780 double epsilon = 1.0e-8;
1781 for (
int i = 0; i < diff1.size(); ++i)
1783 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1796 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
1797 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
1811 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1821 basisKeyDir1, basisKeyDir2, triGeom.get());
1825 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1826 for (
int i = 0; i < nelmts; ++i)
1828 CollExp.push_back(Exp);
1838 const int nq = Exp->GetTotPoints();
1844 Exp->GetCoords(xc, yc);
1846 for (
int i = 0; i < nq; ++i)
1848 phys[i] = sin(xc[i]) * cos(yc[i]);
1850 Exp->PhysDeriv(phys, tmp = diff1, tmp1 = diff1 + (nelmts)*nq);
1852 for (
int i = 1; i < nelmts; ++i)
1855 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
1856 tmp1 = diff1 + (nelmts + i) * nq);
1860 tmp = diff2 + nelmts * nq);
1862 double epsilon = 1.0e-8;
1863 for (
int i = 0; i < diff1.size(); ++i)
1865 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1878 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
1879 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
1893 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1903 basisKeyDir1, basisKeyDir2, triGeom.get());
1905 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1906 CollExp.push_back(Exp);
1915 const int nq = Exp->GetTotPoints();
1921 Exp->GetCoords(xc, yc);
1923 for (
int i = 0; i < nq; ++i)
1925 phys[i] = sin(xc[i]) * cos(yc[i]);
1928 Exp->PhysDeriv(phys, diff1, tmp = diff1 + nq);
1931 double epsilon = 1.0e-8;
1932 for (
int i = 0; i < diff1.size(); ++i)
1934 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1947 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
1948 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
1962 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
1972 basisKeyDir1, basisKeyDir2, triGeom.get());
1976 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1977 for (
int i = 0; i < nelmts; ++i)
1979 CollExp.push_back(Exp);
1989 const int nq = Exp->GetTotPoints();
1995 Exp->GetCoords(xc, yc);
1997 for (
int i = 0; i < nq; ++i)
1999 phys[i] = sin(xc[i]) * cos(yc[i]);
2001 Exp->PhysDeriv(phys, tmp = diff1, tmp1 = diff1 + (nelmts)*nq);
2002 for (
int i = 1; i < nelmts; ++i)
2005 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
2006 tmp1 = diff1 + (nelmts + i) * nq);
2010 tmp = diff2 + nelmts * nq);
2012 double epsilon = 1.0e-8;
2013 for (
int i = 0; i < diff1.size(); ++i)
2015 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
2028 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
2029 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
2033 unsigned int numQuadPoints = 5;
2034 unsigned int numModes = 2;
2045 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2054 basisKeyDir1, basisKeyDir2, triGeom.get());
2056 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2057 CollExp.push_back(Exp);
2069 const int nq = Exp->GetTotPoints();
2075 Exp->GetCoords(xc, yc);
2077 for (
int i = 0; i < nq; ++i)
2079 phys[i] = sin(xc[i]) * cos(yc[i]);
2082 Exp->PhysDeriv(phys, diffRef, tmp = diffRef + nq);
2085 double epsilon = 1.0e-8;
2086 for (
int i = 0; i < diffRef.size(); ++i)
2088 BOOST_CHECK_CLOSE(diffRef[i], diff[i], epsilon);
2101 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
2102 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
2106 unsigned int numQuadPoints = 5;
2107 unsigned int numModes = 2;
2118 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2127 basisKeyDir1, basisKeyDir2, triGeom.get());
2129 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2130 CollExp.push_back(Exp);
2142 const int nq = Exp->GetTotPoints();
2148 Exp->GetCoords(xc, yc);
2150 for (
int i = 0; i < nq; ++i)
2152 phys[i] = sin(xc[i]) * cos(yc[i]);
2155 Exp->PhysDeriv(phys, diffRef, tmp = diffRef + nq);
2158 double epsilon = 1.0e-8;
2159 for (
int i = 0; i < diffRef.size(); ++i)
2161 BOOST_CHECK_CLOSE(diffRef[i], diff[i], epsilon);
2174 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
2175 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
2179 unsigned int numQuadPoints = 5;
2180 unsigned int numModes = 2;
2191 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2200 basisKeyDir1, basisKeyDir2, triGeom.get());
2202 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2203 CollExp.push_back(Exp);
2215 const int nq = Exp->GetTotPoints();
2221 Exp->GetCoords(xc, yc, zc);
2223 for (
int i = 0; i < nq; ++i)
2225 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
2228 Exp->PhysDeriv(phys, diffRef, tmp = diffRef + nq, tmp1 = diffRef + 2 * nq);
2230 tmp1 = diff + 2 * nq);
2232 double epsilon = 1.0e-8;
2233 for (
int i = 0; i < diffRef.size(); ++i)
2235 BOOST_CHECK_CLOSE(diffRef[i], diff[i], epsilon);
2248 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
2249 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
2263 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2273 basisKeyDir1, basisKeyDir2, triGeom.get());
2275 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2276 CollExp.push_back(Exp);
2285 const int nq = Exp->GetTotPoints();
2286 const int nm = Exp->GetNcoeffs();
2294 Exp->GetCoords(xc, yc);
2296 for (
int i = 0; i < nq; ++i)
2298 phys1[i] = sin(xc[i]) * cos(yc[i]);
2299 phys2[i] = cos(xc[i]) * sin(yc[i]);
2303 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
2304 Exp->IProductWRTDerivBase(1, phys2, coeffs2);
2305 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
2309 double epsilon = 1.0e-8;
2310 for (
int i = 0; i < coeffs1.size(); ++i)
2312 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2313 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2314 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2327 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
2328 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
2342 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2352 basisKeyDir1, basisKeyDir2, triGeom.get());
2356 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2357 for (
int i = 0; i < nelmts; ++i)
2359 CollExp.push_back(Exp);
2369 const int nq = Exp->GetTotPoints();
2370 const int nm = Exp->GetNcoeffs();
2377 Exp->GetCoords(xc, yc);
2379 for (
int i = 0; i < nq; ++i)
2381 phys1[i] = sin(xc[i]) * cos(yc[i]);
2382 phys2[i] = cos(xc[i]) * sin(yc[i]);
2384 for (
int i = 1; i < nelmts; ++i)
2390 for (
int i = 0; i < nelmts; ++i)
2393 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
2394 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp1 = coeffs2 + i * nm);
2395 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2396 tmp = coeffs1 + i * nm, 1);
2401 double epsilon = 1.0e-8;
2402 for (
int i = 0; i < coeffs1.size(); ++i)
2404 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2405 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2406 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2419 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
2420 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
2424 unsigned int numQuadPoints = 5;
2425 unsigned int numModes = 4;
2436 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2445 basisKeyDir1, basisKeyDir2, triGeom.get());
2446 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2447 CollExp.push_back(Exp);
2459 const int nq = Exp->GetTotPoints();
2460 const int nm = Exp->GetNcoeffs();
2468 Exp->GetCoords(xc, yc);
2470 for (
int i = 0; i < nq; ++i)
2472 phys1[i] = sin(xc[i]) * cos(yc[i]);
2473 phys2[i] = cos(xc[i]) * sin(yc[i]);
2477 Exp->IProductWRTDerivBase(0, phys1, coeffsRef);
2478 Exp->IProductWRTDerivBase(1, phys2, coeffs);
2479 Vmath::Vadd(nm, coeffsRef, 1, coeffs, 1, coeffsRef, 1);
2483 double epsilon = 1.0e-8;
2484 for (
int i = 0; i < coeffsRef.size(); ++i)
2486 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
2487 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
2488 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
2493 TestTriIProductWRTDerivBase_MatrixFree_UniformP_Undeformed_MultiElmt)
2502 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
2503 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
2507 unsigned int numQuadPoints = 5;
2508 unsigned int numModes = 4;
2519 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2528 basisKeyDir1, basisKeyDir2, triGeom.get());
2532 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2533 for (
int i = 0; i < nelmts; ++i)
2535 CollExp.push_back(Exp);
2548 const int nq = Exp->GetTotPoints();
2549 const int nm = Exp->GetNcoeffs();
2557 Exp->GetCoords(xc, yc);
2559 for (
int i = 0; i < nq; ++i)
2561 phys1[i] = sin(xc[i]) * cos(yc[i]);
2562 phys2[i] = cos(xc[i]) * sin(yc[i]);
2565 for (
int i = 1; i < nelmts; ++i)
2571 for (
int i = 0; i < nelmts; ++i)
2574 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffsRef + i * nm);
2575 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs + i * nm);
2576 Vmath::Vadd(nm, coeffsRef + i * nm, 1, coeffs + i * nm, 1,
2577 tmp = coeffsRef + i * nm, 1);
2582 double epsilon = 1.0e-8;
2583 for (
int i = 0; i < coeffsRef.size(); ++i)
2585 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
2586 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
2587 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
2600 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
2601 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
2605 unsigned int numQuadPoints = 5;
2606 unsigned int numModes = 4;
2617 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2626 basisKeyDir1, basisKeyDir2, triGeom.get());
2629 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2630 for (
int i = 0; i < nelmts; ++i)
2632 CollExp.push_back(Exp);
2645 const int nq = Exp->GetTotPoints();
2646 const int nm = Exp->GetNcoeffs();
2653 Exp->GetCoords(xc, yc);
2655 for (
int i = 0; i < nq; ++i)
2657 phys1[i] = sin(xc[i]) * cos(yc[i]);
2658 phys2[i] = cos(xc[i]) * sin(yc[i]);
2661 for (
int i = 1; i < nelmts; ++i)
2667 for (
int i = 0; i < nelmts; ++i)
2670 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffsRef + i * nm);
2671 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs + i * nm);
2672 Vmath::Vadd(nm, coeffsRef + i * nm, 1, coeffs + i * nm, 1,
2673 tmp = coeffsRef + i * nm, 1);
2682 double epsilon = 1.0e-8;
2683 for (
int i = 0; i < coeffsRef.size(); ++i)
2685 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
2686 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
2687 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
2692 TestTriIProductWRTDerivBase_MatrixFree_UniformP_Deformed_MultiElmt_ThreeD)
2701 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
2702 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
2706 unsigned int numQuadPoints = 5;
2707 unsigned int numModes = 4;
2718 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2727 basisKeyDir1, basisKeyDir2, triGeom.get());
2730 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2731 for (
int i = 0; i < nelmts; ++i)
2733 CollExp.push_back(Exp);
2746 const int nq = Exp->GetTotPoints();
2747 const int nm = Exp->GetNcoeffs();
2756 Exp->GetCoords(xc, yc, zc);
2758 for (
int i = 0; i < nq; ++i)
2760 phys1[i] = sin(xc[i]) * cos(yc[i]);
2761 phys2[i] = cos(xc[i]) * sin(yc[i]);
2762 phys3[i] = cos(xc[i]) * sin(zc[i]);
2765 for (
int i = 1; i < nelmts; ++i)
2772 for (
int i = 0; i < nelmts; ++i)
2775 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffsRef + i * nm);
2776 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs + i * nm);
2777 Vmath::Vadd(nm, coeffsRef + i * nm, 1, coeffs + i * nm, 1,
2778 tmp = coeffsRef + i * nm, 1);
2779 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs + i * nm);
2780 Vmath::Vadd(nm, coeffsRef + i * nm, 1, coeffs + i * nm, 1,
2781 tmp = coeffsRef + i * nm, 1);
2792 double epsilon = 1.0e-8;
2793 for (
int i = 0; i < coeffsRef.size(); ++i)
2795 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
2796 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
2797 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
2802 TestTriIProductWRTDerivBase_MatrixFree_UniformP_Deformed_OverInt)
2811 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
2812 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
2816 unsigned int numQuadPoints = 8;
2817 unsigned int numModes = 4;
2828 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2837 basisKeyDir1, basisKeyDir2, triGeom.get());
2838 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2839 CollExp.push_back(Exp);
2851 const int nq = Exp->GetTotPoints();
2852 const int nm = Exp->GetNcoeffs();
2860 Exp->GetCoords(xc, yc);
2862 for (
int i = 0; i < nq; ++i)
2864 phys1[i] = sin(xc[i]) * cos(yc[i]);
2865 phys2[i] = cos(xc[i]) * sin(yc[i]);
2869 Exp->IProductWRTDerivBase(0, phys1, coeffsRef);
2870 Exp->IProductWRTDerivBase(1, phys2, coeffs);
2871 Vmath::Vadd(nm, coeffsRef, 1, coeffs, 1, coeffsRef, 1);
2875 double epsilon = 1.0e-8;
2876 for (
int i = 0; i < coeffsRef.size(); ++i)
2878 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
2879 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
2880 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
2893 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
2894 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
2908 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2918 basisKeyDir1, basisKeyDir2, triGeom.get());
2920 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2921 CollExp.push_back(Exp);
2930 const int nq = Exp->GetTotPoints();
2931 const int nm = Exp->GetNcoeffs();
2939 Exp->GetCoords(xc, yc);
2941 for (
int i = 0; i < nq; ++i)
2943 phys1[i] = sin(xc[i]) * cos(yc[i]);
2944 phys2[i] = cos(xc[i]) * sin(yc[i]);
2948 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
2949 Exp->IProductWRTDerivBase(1, phys2, coeffs2);
2950 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
2954 double epsilon = 1.0e-8;
2955 for (
int i = 0; i < coeffs1.size(); ++i)
2957 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2958 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2959 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2972 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
2973 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
2987 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
2997 basisKeyDir1, basisKeyDir2, triGeom.get());
3001 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3002 for (
int i = 0; i < nelmts; ++i)
3004 CollExp.push_back(Exp);
3014 const int nq = Exp->GetTotPoints();
3015 const int nm = Exp->GetNcoeffs();
3022 Exp->GetCoords(xc, yc);
3024 for (
int i = 0; i < nq; ++i)
3026 phys1[i] = sin(xc[i]) * cos(yc[i]);
3027 phys2[i] = cos(xc[i]) * sin(yc[i]);
3029 for (
int i = 1; i < nelmts; ++i)
3035 for (
int i = 0; i < nelmts; ++i)
3038 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
3039 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp1 = coeffs2 + i * nm);
3040 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
3041 tmp = coeffs1 + i * nm, 1);
3046 double epsilon = 1.0e-8;
3047 for (
int i = 0; i < coeffs1.size(); ++i)
3049 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
3050 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
3051 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
3064 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
3065 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
3079 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3089 basisKeyDir1, basisKeyDir2, triGeom.get());
3091 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3092 CollExp.push_back(Exp);
3101 const int nq = Exp->GetTotPoints();
3102 const int nm = Exp->GetNcoeffs();
3110 Exp->GetCoords(xc, yc);
3112 for (
int i = 0; i < nq; ++i)
3114 phys1[i] = sin(xc[i]) * cos(yc[i]);
3115 phys2[i] = cos(xc[i]) * sin(yc[i]);
3119 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
3120 Exp->IProductWRTDerivBase(1, phys2, coeffs2);
3121 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
3125 double epsilon = 1.0e-8;
3126 for (
int i = 0; i < coeffs1.size(); ++i)
3128 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
3129 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
3130 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
3143 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
3144 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
3158 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3168 basisKeyDir1, basisKeyDir2, triGeom.get());
3172 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3173 for (
int i = 0; i < nelmts; ++i)
3175 CollExp.push_back(Exp);
3185 const int nq = Exp->GetTotPoints();
3186 const int nm = Exp->GetNcoeffs();
3193 Exp->GetCoords(xc, yc);
3195 for (
int i = 0; i < nq; ++i)
3197 phys1[i] = sin(xc[i]) * cos(yc[i]);
3198 phys2[i] = cos(xc[i]) * sin(yc[i]);
3200 for (
int i = 1; i < nelmts; ++i)
3206 for (
int i = 0; i < nelmts; ++i)
3209 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
3210 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp1 = coeffs2 + i * nm);
3211 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
3212 tmp = coeffs1 + i * nm, 1);
3217 double epsilon = 1.0e-8;
3218 for (
int i = 0; i < coeffs1.size(); ++i)
3220 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
3221 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
3222 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
3227 TestTriIProductWRTDerivBase_SumFac_VariableP_MultiElmt_threedim)
3236 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
3237 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
3251 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3261 basisKeyDir1, basisKeyDir2, triGeom.get());
3265 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3266 for (
int i = 0; i < nelmts; ++i)
3268 CollExp.push_back(Exp);
3278 const int nq = Exp->GetTotPoints();
3279 const int nm = Exp->GetNcoeffs();
3287 Exp->GetCoords(xc, yc, zc);
3289 for (
int i = 0; i < nq; ++i)
3291 phys1[i] = sin(xc[i]) * cos(yc[i]);
3292 phys2[i] = cos(xc[i]) * sin(yc[i]);
3293 phys3[i] = cos(xc[i]) * sin(zc[i]);
3295 for (
int i = 1; i < nelmts; ++i)
3302 for (
int i = 0; i < nelmts; ++i)
3305 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
3306 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp1 = coeffs2 + i * nm);
3307 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
3308 tmp = coeffs1 + i * nm, 1);
3309 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp1 = coeffs2 + i * nm);
3310 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
3311 tmp = coeffs1 + i * nm, 1);
3317 double epsilon = 1.0e-8;
3318 for (
int i = 0; i < coeffs1.size(); ++i)
3320 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
3321 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
3322 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
3335 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
3336 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
3340 unsigned int numQuadPoints = 5;
3341 unsigned int numModes = 4;
3353 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3363 basisKeyDir1, basisKeyDir2, triGeom.get());
3367 basisKeyDir1, basisKeyDir2);
3371 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3373 for (
int i = 0; i < nelmts; ++i)
3375 CollExp.push_back(Exp);
3391 const int nm = Exp->GetNcoeffs();
3396 for (
int i = 0; i < nm; ++i)
3401 for (
int i = 1; i < nelmts; ++i)
3403 Vmath::Vcopy(nm, coeffsIn, 1, tmp = coeffsIn + i * nm, 1);
3409 for (
int i = 0; i < nelmts; ++i)
3412 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3417 double epsilon = 1.0e-8;
3418 for (
int i = 0; i < coeffsRef.size(); ++i)
3420 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3421 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3422 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3435 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
3436 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
3440 unsigned int numQuadPoints = 5;
3441 unsigned int numModes = 4;
3453 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3463 basisKeyDir1, basisKeyDir2, triGeom.get());
3467 basisKeyDir1, basisKeyDir2);
3471 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3473 for (
int i = 0; i < nelmts; ++i)
3475 CollExp.push_back(Exp);
3488 const int nm = Exp->GetNcoeffs();
3493 for (
int i = 0; i < nm; ++i)
3498 for (
int i = 1; i < nelmts; ++i)
3500 Vmath::Vcopy(nm, coeffsIn, 1, tmp = coeffsIn + i * nm, 1);
3506 for (
int i = 0; i < nelmts; ++i)
3509 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3514 double epsilon = 1.0e-8;
3515 for (
int i = 0; i < coeffsRef.size(); ++i)
3517 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3518 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3519 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3532 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
3533 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
3537 unsigned int numQuadPoints = 8;
3538 unsigned int numModes = 4;
3550 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3560 basisKeyDir1, basisKeyDir2, triGeom.get());
3564 basisKeyDir1, basisKeyDir2);
3568 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3570 for (
int i = 0; i < nelmts; ++i)
3572 CollExp.push_back(Exp);
3585 const int nm = Exp->GetNcoeffs();
3590 for (
int i = 0; i < nm; ++i)
3595 for (
int i = 1; i < nelmts; ++i)
3597 Vmath::Vcopy(nm, coeffsIn, 1, tmp = coeffsIn + i * nm, 1);
3603 for (
int i = 0; i < nelmts; ++i)
3606 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3611 double epsilon = 1.0e-8;
3612 for (
int i = 0; i < coeffsRef.size(); ++i)
3614 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3615 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3616 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3629 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
3630 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
3634 unsigned int numQuadPoints = 5;
3635 unsigned int numModes = 4;
3647 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3657 basisKeyDir1, basisKeyDir2, triGeom.get());
3661 basisKeyDir1, basisKeyDir2);
3665 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3667 for (
int i = 0; i < nelmts; ++i)
3669 CollExp.push_back(Exp);
3685 const int nm = Exp->GetNcoeffs();
3690 for (
int i = 0; i < nm; ++i)
3695 for (
int i = 1; i < nelmts; ++i)
3697 Vmath::Vcopy(nm, coeffsIn, 1, tmp = coeffsIn + i * nm, 1);
3703 for (
int i = 0; i < nelmts; ++i)
3706 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3711 double epsilon = 1.0e-8;
3712 for (
int i = 0; i < coeffsRef.size(); ++i)
3714 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3715 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3716 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3729 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
3730 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
3734 unsigned int numQuadPoints = 5;
3735 unsigned int numModes = 4;
3747 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3757 basisKeyDir1, basisKeyDir2, triGeom.get());
3759 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3760 CollExp.push_back(Exp);
3772 const int nq = Exp->GetTotPoints();
3777 Exp->GetCoords(xc, yc);
3779 for (
int i = 0; i < nq; ++i)
3781 phys[i] = pow(xc[i], 3) + pow(yc[i], 3);
3793 double epsilon = 1.0e-8;
3795 for (
int i = 0; i < nq1; ++i)
3797 NekDouble exact = pow(xc1[i], 3) + pow(yc1[i], 3);
3798 phys1[i] = (fabs(phys1[i]) < 1e-14) ? 0.0 : phys1[i];
3799 exact = (fabs(exact) < 1e-14) ? 0.0 : exact;
3800 BOOST_CHECK_CLOSE(phys1[i], exact, epsilon);
3813 std::array<SpatialDomains::SegGeomUniquePtr, 3> segVec;
3814 std::array<SpatialDomains::PointGeom *, 3> v = {v0.get(), v1.get(),
3818 unsigned int numQuadPoints = 5;
3819 unsigned int numModes = 4;
3831 Nektar::LibUtilities::eGaussRadauMAlpha1Beta0;
3841 basisKeyDir1, basisKeyDir2, triGeom.get());
3843 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3844 CollExp.push_back(Exp);
3856 const int nq = Exp->GetTotPoints();
3861 Exp->GetCoords(xc, yc);
3863 for (
int i = 0; i < nq; ++i)
3865 phys[i] = pow(xc[i], 3) + pow(yc[i], 3);
3877 double epsilon = 1.0e-8;
3879 for (
int i = 0; i < nq1; ++i)
3881 NekDouble exact = pow(xc1[i], 3) + pow(yc1[i], 3);
3882 phys1[i] = (fabs(phys1[i]) < 1e-14) ? 0.0 : phys1[i];
3883 exact = (fabs(exact) < 1e-14) ? 0.0 : exact;
3884 BOOST_CHECK_CLOSE(phys1[i], exact, epsilon);