84 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
85 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
93 unsigned int numQuadPoints = 6;
101 basisKeyDir1, basisKeyDir1, quadGeom.get());
103 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
104 CollExp.push_back(Exp);
114 for (
int i = 0; i < coeffs.size(); ++i)
121 Exp->BwdTrans(coeffs, phys1);
124 double epsilon = 1.0e-8;
125 for (
int i = 0; i < phys1.size(); ++i)
127 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
142 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
143 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
162 basisKeyDir1, basisKeyDir2, quadGeom.get());
164 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
165 CollExp.push_back(Exp);
175 for (
int i = 0; i < coeffs.size(); ++i)
182 Exp->BwdTrans(coeffs, phys1);
185 double epsilon = 1.0e-8;
186 for (
int i = 0; i < phys1.size(); ++i)
188 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
203 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
204 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
223 basisKeyDir1, basisKeyDir2, quadGeom.get());
225 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
227 for (
int i = 0; i < nelmts; ++i)
229 CollExp.push_back(Exp);
240 for (
int i = 0; i < coeffs.size(); ++i)
247 for (
int i = 0; i < nelmts; ++i)
249 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
250 tmp = phys1 + i * Exp->GetTotPoints());
254 double epsilon = 1.0e-8;
255 for (
int i = 0; i < phys1.size(); ++i)
257 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
272 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
273 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
281 unsigned int numQuadPoints = 6;
289 basisKeyDir1, basisKeyDir1, quadGeom.get());
291 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
292 CollExp.push_back(Exp);
302 for (
int i = 0; i < coeffs.size(); ++i)
309 Exp->BwdTrans(coeffs, phys1);
312 double epsilon = 1.0e-8;
313 for (
int i = 0; i < phys1.size(); ++i)
315 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
330 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
331 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
350 basisKeyDir1, basisKeyDir2, quadGeom.get());
352 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
353 CollExp.push_back(Exp);
363 for (
int i = 0; i < coeffs.size(); ++i)
370 Exp->BwdTrans(coeffs, phys1);
373 double epsilon = 1.0e-8;
374 for (
int i = 0; i < phys1.size(); ++i)
376 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
391 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
392 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
400 unsigned int numQuadPoints = 6;
401 unsigned int numModes = 4;
409 basisKeyDir1, basisKeyDir1, quadGeom.get());
411 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
412 CollExp.push_back(Exp);
423 for (
int i = 0; i < coeffs.size(); ++i)
430 Exp->BwdTrans(coeffs, physRef);
433 double epsilon = 1.0e-8;
434 for (
int i = 0; i < physRef.size(); ++i)
436 BOOST_CHECK_CLOSE(physRef[i], phys[i], epsilon);
451 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
452 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
460 unsigned int numQuadPoints = 6;
468 basisKeyDir1, basisKeyDir1, quadGeom.get());
470 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
473 for (
int i = 0; i < nelmts; ++i)
475 CollExp.push_back(Exp);
486 for (
int i = 0; i < coeffs.size(); ++i)
493 for (
int i = 0; i < nelmts; ++i)
495 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
496 tmp = phys1 + i * Exp->GetTotPoints());
500 double epsilon = 1.0e-8;
501 for (
int i = 0; i < phys1.size(); ++i)
503 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
518 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
519 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
527 unsigned int numQuadPoints = 6;
535 basisKeyDir1, basisKeyDir1, quadGeom.get());
537 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
540 for (
int i = 0; i < nelmts; ++i)
542 CollExp.push_back(Exp);
553 for (
int i = 0; i < coeffs.size(); ++i)
560 for (
int i = 0; i < nelmts; ++i)
562 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
563 tmp = phys1 + i * Exp->GetTotPoints());
567 double epsilon = 1.0e-8;
568 for (
int i = 0; i < phys1.size(); ++i)
570 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
585 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
586 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
605 basisKeyDir1, basisKeyDir2, quadGeom.get());
609 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
610 for (
int i = 0; i < nelmts; ++i)
612 CollExp.push_back(Exp);
623 for (
int i = 0; i < coeffs.size(); ++i)
630 for (
int i = 0; i < nelmts; ++i)
632 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
633 tmp = phys1 + i * Exp->GetTotPoints());
637 double epsilon = 1.0e-8;
638 for (
int i = 0; i < phys1.size(); ++i)
640 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
655 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
656 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
675 basisKeyDir1, basisKeyDir2, quadGeom.get());
679 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
680 for (
int i = 0; i < nelmts; ++i)
682 CollExp.push_back(Exp);
693 for (
int i = 0; i < coeffs.size(); ++i)
700 for (
int i = 0; i < nelmts; ++i)
702 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
703 tmp = phys1 + i * Exp->GetTotPoints());
707 double epsilon = 1.0e-8;
708 for (
int i = 0; i < phys1.size(); ++i)
710 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
725 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
726 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
734 unsigned int numQuadPoints = 6;
742 basisKeyDir1, basisKeyDir1, quadGeom.get());
744 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
745 CollExp.push_back(Exp);
754 const int nq = Exp->GetTotPoints();
761 Exp->GetCoords(xc, yc);
763 for (
int i = 0; i < nq; ++i)
765 phys[i] = sin(xc[i]) * cos(yc[i]);
768 Exp->IProductWRTBase(phys, coeffs1);
771 double epsilon = 1.0e-8;
772 for (
int i = 0; i < coeffs1.size(); ++i)
774 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
775 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
776 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
792 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
793 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
812 basisKeyDir1, basisKeyDir2, quadGeom.get());
814 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
815 CollExp.push_back(Exp);
824 const int nq = Exp->GetTotPoints();
831 Exp->GetCoords(xc, yc);
833 for (
int i = 0; i < nq; ++i)
835 phys[i] = sin(xc[i]) * cos(yc[i]);
838 Exp->IProductWRTBase(phys, coeffs1);
841 double epsilon = 1.0e-8;
842 for (
int i = 0; i < coeffs1.size(); ++i)
844 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
845 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
846 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
862 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
863 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
882 basisKeyDir1, basisKeyDir2, quadGeom.get());
886 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
887 for (
int i = 0; i < nelmts; ++i)
889 CollExp.push_back(Exp);
899 const int nq = Exp->GetTotPoints();
906 Exp->GetCoords(xc, yc);
908 for (
int i = 0; i < nq; ++i)
910 phys[i] = sin(xc[i]) * cos(yc[i]);
912 Exp->IProductWRTBase(phys, coeffs1);
914 for (
int i = 1; i < nelmts; ++i)
917 Exp->IProductWRTBase(phys + i * nq,
918 tmp = coeffs1 + i * Exp->GetNcoeffs());
922 double epsilon = 1.0e-8;
923 for (
int i = 0; i < coeffs1.size(); ++i)
925 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
926 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
927 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
942 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
943 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
951 unsigned int numQuadPoints = 6;
959 basisKeyDir1, basisKeyDir1, quadGeom.get());
961 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
962 CollExp.push_back(Exp);
971 const int nq = Exp->GetTotPoints();
978 Exp->GetCoords(xc, yc);
980 for (
int i = 0; i < nq; ++i)
982 phys[i] = sin(xc[i]) * cos(yc[i]);
985 Exp->IProductWRTBase(phys, coeffs1);
988 double epsilon = 1.0e-8;
989 for (
int i = 0; i < coeffs1.size(); ++i)
991 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
992 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
993 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1008 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
1009 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1010 v2.get(), v3.get()};
1017 unsigned int numQuadPoints = 6;
1019 quadPointsTypeDir1);
1025 basisKeyDir1, basisKeyDir1, quadGeom.get());
1027 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1028 CollExp.push_back(Exp);
1037 const int nq = Exp->GetTotPoints();
1044 Exp->GetCoords(xc, yc);
1046 for (
int i = 0; i < nq; ++i)
1048 phys[i] = sin(xc[i]) * cos(yc[i]);
1051 Exp->IProductWRTBase(phys, coeffs1);
1054 double epsilon = 1.0e-8;
1055 for (
int i = 0; i < coeffs1.size(); ++i)
1057 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1058 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1059 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1074 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
1075 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1076 v2.get(), v3.get()};
1084 quadPointsTypeDir1);
1086 quadPointsTypeDir1);
1094 basisKeyDir1, basisKeyDir2, quadGeom.get());
1096 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1097 CollExp.push_back(Exp);
1106 const int nq = Exp->GetTotPoints();
1113 Exp->GetCoords(xc, yc);
1115 for (
int i = 0; i < nq; ++i)
1117 phys[i] = sin(xc[i]) * cos(yc[i]);
1120 Exp->IProductWRTBase(phys, coeffs1);
1123 double epsilon = 1.0e-8;
1124 for (
int i = 0; i < coeffs1.size(); ++i)
1126 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1127 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1128 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1143 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
1144 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1145 v2.get(), v3.get()};
1152 unsigned int numQuadPoints = 6;
1153 unsigned int numModes = 5;
1155 quadPointsTypeDir1);
1161 basisKeyDir1, basisKeyDir1, quadGeom.get());
1163 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1164 CollExp.push_back(Exp);
1173 const int nq = Exp->GetTotPoints();
1180 Exp->GetCoords(xc, yc);
1182 for (
int i = 0; i < nq; ++i)
1184 phys[i] = sin(xc[i]) * cos(yc[i]);
1187 Exp->IProductWRTBase(phys, coeffsRef);
1190 double epsilon = 1.0e-8;
1191 for (
int i = 0; i < coeffs.size(); ++i)
1193 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
1194 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
1195 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
1210 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
1211 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1212 v2.get(), v3.get()};
1219 unsigned int numQuadPoints = 6;
1220 unsigned int numModes = 5;
1222 quadPointsTypeDir1);
1228 basisKeyDir1, basisKeyDir1, quadGeom.get());
1230 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1231 CollExp.push_back(Exp);
1240 const int nq = Exp->GetTotPoints();
1247 Exp->GetCoords(xc, yc);
1249 for (
int i = 0; i < nq; ++i)
1251 phys[i] = sin(xc[i]) * cos(yc[i]);
1254 Exp->IProductWRTBase(phys, coeffsRef);
1257 double epsilon = 1.0e-8;
1258 for (
int i = 0; i < coeffs.size(); ++i)
1260 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
1261 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
1262 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
1267 TestQuadIProductWRTBase_MatrixFree_UniformP_Deformed_OverInt)
1278 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
1279 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1280 v2.get(), v3.get()};
1287 unsigned int numQuadPoints = 10;
1288 unsigned int numModes = 5;
1290 quadPointsTypeDir1);
1296 basisKeyDir1, basisKeyDir1, quadGeom.get());
1298 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1299 CollExp.push_back(Exp);
1308 const int nq = Exp->GetTotPoints();
1315 Exp->GetCoords(xc, yc);
1317 for (
int i = 0; i < nq; ++i)
1319 phys[i] = sin(xc[i]) * cos(yc[i]);
1322 Exp->IProductWRTBase(phys, coeffsRef);
1325 double epsilon = 1.0e-8;
1326 for (
int i = 0; i < coeffs.size(); ++i)
1328 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
1329 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
1330 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
1345 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
1346 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1347 v2.get(), v3.get()};
1354 unsigned int numQuadPoints = 6;
1356 quadPointsTypeDir1);
1362 basisKeyDir1, basisKeyDir1, quadGeom.get());
1364 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1365 CollExp.push_back(Exp);
1374 const int nq = Exp->GetTotPoints();
1380 Exp->GetCoords(xc, yc);
1382 for (
int i = 0; i < nq; ++i)
1384 phys[i] = sin(xc[i]) * cos(yc[i]);
1387 Exp->PhysDeriv(phys, diff1, tmp = diff1 + nq);
1390 double epsilon = 1.0e-8;
1391 for (
int i = 0; i < diff1.size(); ++i)
1393 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1408 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
1409 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1410 v2.get(), v3.get()};
1418 quadPointsTypeDir1);
1420 quadPointsTypeDir1);
1428 basisKeyDir1, basisKeyDir2, quadGeom.get());
1432 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1433 for (
int i = 0; i < nelmts; ++i)
1435 CollExp.push_back(Exp);
1445 const int nq = Exp->GetTotPoints();
1451 Exp->GetCoords(xc, yc);
1453 for (
int i = 0; i < nq; ++i)
1455 phys[i] = sin(xc[i]) * cos(yc[i]);
1457 Exp->PhysDeriv(phys, diff1, tmp = diff1 + nelmts * nq);
1458 for (
int i = 1; i < nelmts; ++i)
1461 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
1462 tmp1 = diff1 + (nelmts + i) * nq);
1466 tmp = diff2 + nelmts * nq);
1468 double epsilon = 1.0e-8;
1469 for (
int i = 0; i < diff1.size(); ++i)
1471 diff1[i] = (std::abs(diff1[i]) < 1e-14) ? 0.0 : diff1[i];
1472 diff2[i] = (std::abs(diff2[i]) < 1e-14) ? 0.0 : diff2[i];
1473 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1488 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
1489 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1490 v2.get(), v3.get()};
1497 unsigned int numQuadPoints = 5;
1498 unsigned int numModes = 2;
1500 quadPointsTypeDir1);
1506 basisKeyDir1, basisKeyDir1, quadGeom.get());
1508 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1509 CollExp.push_back(Exp);
1518 const int nq = Exp->GetTotPoints();
1524 Exp->GetCoords(xc, yc);
1526 for (
int i = 0; i < nq; ++i)
1528 phys[i] = sin(xc[i]) * cos(yc[i]);
1531 Exp->PhysDeriv(phys, derivRef, tmp = derivRef + nq);
1534 double epsilon = 1.0e-8;
1535 for (
int i = 0; i < derivRef.size(); ++i)
1537 derivRef[i] = (std::abs(derivRef[i]) < 1e-14) ? 0.0 : derivRef[i];
1538 deriv[i] = (std::abs(deriv[i]) < 1e-14) ? 0.0 : deriv[i];
1539 BOOST_CHECK_CLOSE(derivRef[i], deriv[i], epsilon);
1554 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
1555 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1556 v2.get(), v3.get()};
1563 unsigned int numQuadPoints = 4;
1564 unsigned int numModes = 2;
1566 quadPointsTypeDir1);
1572 basisKeyDir1, basisKeyDir1, quadGeom.get());
1574 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1575 CollExp.push_back(Exp);
1584 const int nq = Exp->GetTotPoints();
1590 Exp->GetCoords(xc, yc);
1592 for (
int i = 0; i < nq; ++i)
1594 phys[i] = sin(xc[i]) * cos(yc[i]);
1597 Exp->PhysDeriv(phys, derivRef, tmp = derivRef + nq);
1600 double epsilon = 1.0e-8;
1601 for (
int i = 0; i < derivRef.size(); ++i)
1603 derivRef[i] = (std::abs(derivRef[i]) < 1e-14) ? 0.0 : derivRef[i];
1604 deriv[i] = (std::abs(deriv[i]) < 1e-14) ? 0.0 : deriv[i];
1605 BOOST_CHECK_CLOSE(derivRef[i], deriv[i], epsilon);
1620 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
1621 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1622 v2.get(), v3.get()};
1629 unsigned int numQuadPoints = 4;
1630 unsigned int numModes = 2;
1632 quadPointsTypeDir1);
1638 basisKeyDir1, basisKeyDir1, quadGeom.get());
1640 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1641 CollExp.push_back(Exp);
1650 const int nq = Exp->GetTotPoints();
1656 Exp->GetCoords(xc, yc, zc);
1658 for (
int i = 0; i < nq; ++i)
1660 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1663 Exp->PhysDeriv(phys, derivRef, tmp = derivRef + nq,
1664 tmp1 = derivRef + 2 * nq);
1666 tmp1 = deriv + 2 * nq);
1668 double epsilon = 1.0e-8;
1669 for (
int i = 0; i < derivRef.size(); ++i)
1671 derivRef[i] = (std::abs(derivRef[i]) < 1e-14) ? 0.0 : derivRef[i];
1672 deriv[i] = (std::abs(deriv[i]) < 1e-14) ? 0.0 : deriv[i];
1673 BOOST_CHECK_CLOSE(derivRef[i], deriv[i], epsilon);
1678 TestQuadPhysDeriv_Directional_MatrixFree_UniformP_Undeformed)
1689 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
1690 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1691 v2.get(), v3.get()};
1698 unsigned int numQuadPoints = 5;
1699 unsigned int numModes = 2;
1701 quadPointsTypeDir1);
1707 basisKeyDir1, basisKeyDir1, quadGeom.get());
1709 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1710 CollExp.push_back(Exp);
1719 const int nq = Exp->GetTotPoints();
1725 Exp->GetCoords(xc, yc);
1727 for (
int i = 0; i < nq; ++i)
1729 phys[i] = sin(xc[i]) * cos(yc[i]);
1732 Exp->PhysDeriv(0, phys, derivRef);
1733 Exp->PhysDeriv(1, phys, tmp = derivRef + nq);
1738 double epsilon = 1.0e-8;
1739 for (
int i = 0; i < derivRef.size(); ++i)
1741 derivRef[i] = (std::abs(derivRef[i]) < 1e-14) ? 0.0 : derivRef[i];
1742 deriv[i] = (std::abs(deriv[i]) < 1e-14) ? 0.0 : deriv[i];
1743 BOOST_CHECK_CLOSE(derivRef[i], deriv[i], epsilon);
1758 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
1759 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1760 v2.get(), v3.get()};
1767 unsigned int numQuadPoints = 6;
1769 quadPointsTypeDir1);
1775 basisKeyDir1, basisKeyDir1, quadGeom.get());
1777 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1778 CollExp.push_back(Exp);
1787 const int nq = Exp->GetTotPoints();
1793 Exp->GetCoords(xc, yc);
1795 for (
int i = 0; i < nq; ++i)
1797 phys[i] = sin(xc[i]) * cos(yc[i]);
1800 Exp->PhysDeriv(phys, diff1, tmp = diff1 + nq);
1803 double epsilon = 1.0e-8;
1804 for (
int i = 0; i < diff1.size(); ++i)
1806 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1821 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
1822 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1823 v2.get(), v3.get()};
1831 quadPointsTypeDir1);
1833 quadPointsTypeDir1);
1841 basisKeyDir1, basisKeyDir2, quadGeom.get());
1845 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1846 for (
int i = 0; i < nelmts; ++i)
1848 CollExp.push_back(Exp);
1858 const int nq = Exp->GetTotPoints();
1864 Exp->GetCoords(xc, yc);
1866 for (
int i = 0; i < nq; ++i)
1868 phys[i] = sin(xc[i]) * cos(yc[i]);
1870 Exp->PhysDeriv(phys, diff1, tmp1 = diff1 + nelmts * nq);
1871 for (
int i = 1; i < nelmts; ++i)
1874 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
1875 tmp1 = diff1 + (nelmts + i) * nq);
1879 tmp = diff2 + nelmts * nq);
1881 double epsilon = 1.0e-8;
1882 for (
int i = 0; i < diff1.size(); ++i)
1884 diff1[i] = (std::abs(diff1[i]) < 1e-14) ? 0.0 : diff1[i];
1885 diff2[i] = (std::abs(diff2[i]) < 1e-14) ? 0.0 : diff2[i];
1886 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1901 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
1902 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1903 v2.get(), v3.get()};
1910 unsigned int numQuadPoints = 6;
1912 quadPointsTypeDir1);
1918 basisKeyDir1, basisKeyDir1, quadGeom.get());
1920 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1921 CollExp.push_back(Exp);
1930 const int nq = Exp->GetTotPoints();
1936 Exp->GetCoords(xc, yc);
1938 for (
int i = 0; i < nq; ++i)
1940 phys[i] = sin(xc[i]) * cos(yc[i]);
1943 Exp->PhysDeriv(phys, diff1, tmp = diff1 + nq);
1946 double epsilon = 1.0e-8;
1947 for (
int i = 0; i < diff1.size(); ++i)
1949 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1964 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
1965 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1966 v2.get(), v3.get()};
1974 quadPointsTypeDir1);
1976 quadPointsTypeDir1);
1984 basisKeyDir1, basisKeyDir2, quadGeom.get());
1988 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
1989 for (
int i = 0; i < nelmts; ++i)
1991 CollExp.push_back(Exp);
2001 const int nq = Exp->GetTotPoints();
2007 Exp->GetCoords(xc, yc);
2009 for (
int i = 0; i < nq; ++i)
2011 phys[i] = sin(xc[i]) * cos(yc[i]);
2013 Exp->PhysDeriv(phys, diff1, tmp1 = diff1 + nelmts * nq);
2014 for (
int i = 1; i < nelmts; ++i)
2017 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
2018 tmp1 = diff1 + (nelmts + i) * nq);
2022 tmp = diff2 + nelmts * nq);
2024 double epsilon = 1.0e-8;
2025 for (
int i = 0; i < diff1.size(); ++i)
2027 diff1[i] = (std::abs(diff1[i]) < 1e-14) ? 0.0 : diff1[i];
2028 diff2[i] = (std::abs(diff2[i]) < 1e-14) ? 0.0 : diff2[i];
2029 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
2044 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
2045 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2046 v2.get(), v3.get()};
2053 unsigned int numQuadPoints = 5;
2055 quadPointsTypeDir1);
2061 basisKeyDir1, basisKeyDir1, quadGeom.get());
2063 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2064 CollExp.push_back(Exp);
2073 const int nq = Exp->GetTotPoints();
2074 const int nm = Exp->GetNcoeffs();
2082 Exp->GetCoords(xc, yc);
2084 for (
int i = 0; i < nq; ++i)
2086 phys1[i] = sin(xc[i]) * cos(yc[i]);
2087 phys2[i] = cos(xc[i]) * sin(yc[i]);
2091 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
2092 Exp->IProductWRTDerivBase(1, phys2, coeffs2);
2093 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
2097 double epsilon = 1.0e-8;
2098 for (
int i = 0; i < coeffs1.size(); ++i)
2100 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2101 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2102 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2107 TestQuadIProductWRTDerivBase_IterPerExp_VariableP_MultiElmt)
2118 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
2119 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2120 v2.get(), v3.get()};
2128 quadPointsTypeDir1);
2130 quadPointsTypeDir1);
2138 basisKeyDir1, basisKeyDir2, quadGeom.get());
2142 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2143 for (
int i = 0; i < nelmts; ++i)
2145 CollExp.push_back(Exp);
2155 const int nq = Exp->GetTotPoints();
2156 const int nm = Exp->GetNcoeffs();
2163 Exp->GetCoords(xc, yc);
2165 for (
int i = 0; i < nq; ++i)
2167 phys1[i] = sin(xc[i]) * cos(yc[i]);
2168 phys2[i] = cos(xc[i]) * sin(yc[i]);
2170 for (
int i = 1; i < nelmts; ++i)
2176 for (
int i = 0; i < nelmts; ++i)
2179 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
2180 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp1 = coeffs2 + i * nm);
2181 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2182 tmp = coeffs1 + i * nm, 1);
2187 double epsilon = 1.0e-8;
2188 for (
int i = 0; i < coeffs1.size(); ++i)
2190 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2191 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2192 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2197 TestQuadIProductWRTDerivBase_MatrixFree_UniformP_Undeformed)
2208 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
2209 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2210 v2.get(), v3.get()};
2217 unsigned int numQuadPoints = 6;
2218 unsigned int numModes = 5;
2220 quadPointsTypeDir1);
2226 basisKeyDir1, basisKeyDir1, quadGeom.get());
2228 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2229 CollExp.push_back(Exp);
2240 const int nq = Exp->GetTotPoints();
2241 const int nm = Exp->GetNcoeffs();
2249 Exp->GetCoords(xc, yc);
2251 for (
int i = 0; i < nq; ++i)
2253 phys1[i] = sin(xc[i]) * cos(yc[i]);
2254 phys2[i] = cos(xc[i]) * sin(yc[i]);
2258 Exp->IProductWRTDerivBase(0, phys1, coeffsRef);
2259 Exp->IProductWRTDerivBase(1, phys2, coeffs);
2260 Vmath::Vadd(nm, coeffsRef, 1, coeffs, 1, coeffsRef, 1);
2266 double epsilon = 1.0e-8;
2267 for (
int i = 0; i < coeffsRef.size(); ++i)
2269 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
2270 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
2271 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
2286 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
2287 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2288 v2.get(), v3.get()};
2295 unsigned int numQuadPoints = 6;
2296 unsigned int numModes = 5;
2298 quadPointsTypeDir1);
2304 basisKeyDir1, basisKeyDir1, quadGeom.get());
2306 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2307 CollExp.push_back(Exp);
2318 const int nq = Exp->GetTotPoints();
2319 const int nm = Exp->GetNcoeffs();
2327 Exp->GetCoords(xc, yc);
2329 for (
int i = 0; i < nq; ++i)
2331 phys1[i] = sin(xc[i]) * cos(yc[i]);
2332 phys2[i] = cos(xc[i]) * sin(yc[i]);
2336 Exp->IProductWRTDerivBase(0, phys1, coeffsRef);
2337 Exp->IProductWRTDerivBase(1, phys2, coeffs);
2338 Vmath::Vadd(nm, coeffsRef, 1, coeffs, 1, coeffsRef, 1);
2344 double epsilon = 1.0e-8;
2345 for (
int i = 0; i < coeffsRef.size(); ++i)
2347 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
2348 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
2349 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
2354 TestQuadIProductWRTDerivBase_MatrixFree_UniformP_Deformed_ThreeD)
2365 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
2366 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2367 v2.get(), v3.get()};
2374 unsigned int numQuadPoints = 6;
2375 unsigned int numModes = 5;
2377 quadPointsTypeDir1);
2383 basisKeyDir1, basisKeyDir1, quadGeom.get());
2387 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2388 for (
int i = 0; i < nelmts; ++i)
2390 CollExp.push_back(Exp);
2400 const int nq = Exp->GetTotPoints();
2401 const int nm = Exp->GetNcoeffs();
2410 Exp->GetCoords(xc, yc, zc);
2412 for (
int i = 0; i < nq; ++i)
2414 phys1[i] = sin(xc[i]) * cos(yc[i]);
2415 phys2[i] = cos(xc[i]) * sin(yc[i]);
2416 phys3[i] = cos(xc[i]) * sin(zc[i]);
2419 for (
int i = 1; i < nelmts; ++i)
2426 for (
int i = 0; i < nelmts; ++i)
2429 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffsRef + i * nm);
2430 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs + i * nm);
2431 Vmath::Vadd(nm, coeffsRef + i * nm, 1, coeffs + i * nm, 1,
2432 tmp = coeffsRef + i * nm, 1);
2433 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs + i * nm);
2434 Vmath::Vadd(nm, coeffsRef + i * nm, 1, coeffs + i * nm, 1,
2435 tmp = coeffsRef + i * nm, 1);
2441 double epsilon = 1.0e-8;
2442 for (
int i = 0; i < coeffsRef.size(); ++i)
2444 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
2445 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
2446 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
2451 TestQuadIProductWRTDerivBase_MatrixFree_UniformP_Deformed_OverInt)
2462 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
2463 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2464 v2.get(), v3.get()};
2471 unsigned int numQuadPoints = 10;
2472 unsigned int numModes = 5;
2474 quadPointsTypeDir1);
2480 basisKeyDir1, basisKeyDir1, quadGeom.get());
2482 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2483 CollExp.push_back(Exp);
2494 const int nq = Exp->GetTotPoints();
2495 const int nm = Exp->GetNcoeffs();
2503 Exp->GetCoords(xc, yc);
2505 for (
int i = 0; i < nq; ++i)
2507 phys1[i] = sin(xc[i]) * cos(yc[i]);
2508 phys2[i] = cos(xc[i]) * sin(yc[i]);
2512 Exp->IProductWRTDerivBase(0, phys1, coeffsRef);
2513 Exp->IProductWRTDerivBase(1, phys2, coeffs);
2514 Vmath::Vadd(nm, coeffsRef, 1, coeffs, 1, coeffsRef, 1);
2520 double epsilon = 1.0e-8;
2521 for (
int i = 0; i < coeffsRef.size(); ++i)
2523 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
2524 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
2525 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
2540 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
2541 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2542 v2.get(), v3.get()};
2549 unsigned int numQuadPoints = 6;
2551 quadPointsTypeDir1);
2557 basisKeyDir1, basisKeyDir1, quadGeom.get());
2559 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2560 CollExp.push_back(Exp);
2569 const int nq = Exp->GetTotPoints();
2570 const int nm = Exp->GetNcoeffs();
2578 Exp->GetCoords(xc, yc);
2580 for (
int i = 0; i < nq; ++i)
2582 phys1[i] = sin(xc[i]) * cos(yc[i]);
2583 phys2[i] = cos(xc[i]) * sin(yc[i]);
2587 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
2588 Exp->IProductWRTDerivBase(1, phys2, coeffs2);
2589 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
2593 double epsilon = 1.0e-8;
2594 for (
int i = 0; i < coeffs1.size(); ++i)
2596 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2597 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2598 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2613 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
2614 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2615 v2.get(), v3.get()};
2623 quadPointsTypeDir1);
2625 quadPointsTypeDir1);
2633 basisKeyDir1, basisKeyDir2, quadGeom.get());
2637 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2638 for (
int i = 0; i < nelmts; ++i)
2640 CollExp.push_back(Exp);
2650 const int nq = Exp->GetTotPoints();
2651 const int nm = Exp->GetNcoeffs();
2658 Exp->GetCoords(xc, yc);
2660 for (
int i = 0; i < nq; ++i)
2662 phys1[i] = sin(xc[i]) * cos(yc[i]);
2663 phys2[i] = cos(xc[i]) * sin(yc[i]);
2665 for (
int i = 1; i < nelmts; ++i)
2671 for (
int i = 0; i < nelmts; ++i)
2674 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
2675 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp1 = coeffs2 + i * nm);
2676 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2677 tmp = coeffs1 + i * nm, 1);
2682 double epsilon = 1.0e-8;
2683 for (
int i = 0; i < coeffs1.size(); ++i)
2685 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2686 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2687 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2702 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
2703 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2704 v2.get(), v3.get()};
2711 unsigned int numQuadPoints = 5;
2713 quadPointsTypeDir1);
2719 basisKeyDir1, basisKeyDir1, quadGeom.get());
2721 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2722 CollExp.push_back(Exp);
2731 const int nq = Exp->GetTotPoints();
2732 const int nm = Exp->GetNcoeffs();
2740 Exp->GetCoords(xc, yc);
2742 for (
int i = 0; i < nq; ++i)
2744 phys1[i] = sin(xc[i]) * cos(yc[i]);
2745 phys2[i] = cos(xc[i]) * sin(yc[i]);
2749 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
2750 Exp->IProductWRTDerivBase(1, phys2, coeffs2);
2751 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
2755 double epsilon = 1.0e-8;
2756 for (
int i = 0; i < coeffs1.size(); ++i)
2758 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2759 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2760 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2775 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
2776 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2777 v2.get(), v3.get()};
2785 quadPointsTypeDir1);
2787 quadPointsTypeDir1);
2795 basisKeyDir1, basisKeyDir2, quadGeom.get());
2799 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2800 for (
int i = 0; i < nelmts; ++i)
2802 CollExp.push_back(Exp);
2812 const int nq = Exp->GetTotPoints();
2813 const int nm = Exp->GetNcoeffs();
2820 Exp->GetCoords(xc, yc);
2822 for (
int i = 0; i < nq; ++i)
2824 phys1[i] = sin(xc[i]) * cos(yc[i]);
2825 phys2[i] = cos(xc[i]) * sin(yc[i]);
2827 for (
int i = 1; i < nelmts; ++i)
2833 for (
int i = 0; i < nelmts; ++i)
2836 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
2837 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp1 = coeffs2 + i * nm);
2838 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2839 tmp = coeffs1 + i * nm, 1);
2844 double epsilon = 1.0e-8;
2845 for (
int i = 0; i < coeffs1.size(); ++i)
2847 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2848 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2849 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2854 TestQuadIProductWRTDerivBase_SumFac_VariableP_MultiElmt_threedim)
2865 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
2866 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2867 v2.get(), v3.get()};
2875 quadPointsTypeDir1);
2877 quadPointsTypeDir1);
2885 basisKeyDir1, basisKeyDir2, quadGeom.get());
2889 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2890 for (
int i = 0; i < nelmts; ++i)
2892 CollExp.push_back(Exp);
2902 const int nq = Exp->GetTotPoints();
2903 const int nm = Exp->GetNcoeffs();
2911 Exp->GetCoords(xc, yc, zc);
2913 for (
int i = 0; i < nq; ++i)
2915 phys1[i] = sin(xc[i]) * cos(yc[i]);
2916 phys2[i] = cos(xc[i]) * sin(yc[i]);
2917 phys3[i] = cos(xc[i]) * sin(zc[i]);
2920 for (
int i = 1; i < nelmts; ++i)
2927 for (
int i = 0; i < nelmts; ++i)
2930 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
2931 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp1 = coeffs2 + i * nm);
2932 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2933 tmp = coeffs1 + i * nm, 1);
2934 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp1 = coeffs2 + i * nm);
2935 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2936 tmp = coeffs1 + i * nm, 1);
2942 double epsilon = 1.0e-8;
2943 for (
int i = 0; i < coeffs1.size(); ++i)
2945 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2946 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2947 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2962 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
2963 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2964 v2.get(), v3.get()};
2971 unsigned int numQuadPoints = 6;
2972 unsigned int numModes = 5;
2974 quadPointsTypeDir1);
2980 basisKeyDir1, basisKeyDir1, quadGeom.get());
2984 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
2985 for (
int i = 0; i < nelmts; ++i)
2987 CollExp.push_back(Exp);
3003 const int nm = Exp->GetNcoeffs();
3008 for (
int i = 0; i < coeffsIn.size(); ++i)
3010 coeffsIn[i] = i + 1.0;
3016 for (
int i = 0; i < nelmts; ++i)
3019 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3024 double epsilon = 1.0e-8;
3025 for (
int i = 0; i < coeffsRef.size(); ++i)
3027 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3028 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3029 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3044 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
3045 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3046 v2.get(), v3.get()};
3053 unsigned int numQuadPoints = 6;
3054 unsigned int numModes = 5;
3056 quadPointsTypeDir1);
3062 basisKeyDir1, basisKeyDir1, quadGeom.get());
3066 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3067 for (
int i = 0; i < nelmts; ++i)
3069 CollExp.push_back(Exp);
3082 const int nm = Exp->GetNcoeffs();
3087 for (
int i = 0; i < coeffsIn.size(); ++i)
3089 coeffsIn[i] = i + 1.0;
3095 for (
int i = 0; i < nelmts; ++i)
3098 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3103 double epsilon = 1.0e-8;
3104 for (
int i = 0; i < coeffsRef.size(); ++i)
3106 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3107 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3108 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3123 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
3124 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3125 v2.get(), v3.get()};
3132 unsigned int numQuadPoints = 6;
3133 unsigned int numModes = 5;
3135 quadPointsTypeDir1);
3141 basisKeyDir1, basisKeyDir1, quadGeom.get());
3145 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3146 for (
int i = 0; i < nelmts; ++i)
3148 CollExp.push_back(Exp);
3161 const int nm = Exp->GetNcoeffs();
3166 for (
int i = 0; i < coeffsIn.size(); ++i)
3168 coeffsIn[i] = i + 1.0;
3174 for (
int i = 0; i < nelmts; ++i)
3177 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3182 double epsilon = 1.0e-8;
3183 for (
int i = 0; i < coeffsRef.size(); ++i)
3185 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3186 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3187 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3202 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
3203 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3204 v2.get(), v3.get()};
3211 unsigned int numQuadPoints = 6;
3212 unsigned int numModes = 5;
3214 quadPointsTypeDir1);
3220 basisKeyDir1, basisKeyDir1, quadGeom.get());
3224 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3225 for (
int i = 0; i < nelmts; ++i)
3227 CollExp.push_back(Exp);
3243 const int nm = Exp->GetNcoeffs();
3248 for (
int i = 0; i < coeffsIn.size(); ++i)
3250 coeffsIn[i] = i + 1.0;
3256 for (
int i = 0; i < nelmts; ++i)
3259 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3264 double epsilon = 1.0e-8;
3265 for (
int i = 0; i < coeffsRef.size(); ++i)
3267 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3268 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3269 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3284 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
3285 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3286 v2.get(), v3.get()};
3293 unsigned int numQuadPoints = 6;
3295 quadPointsTypeDir1);
3301 basisKeyDir1, basisKeyDir1, quadGeom.get());
3303 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3304 CollExp.push_back(Exp);
3316 const int nq = Exp->GetTotPoints();
3321 Exp->GetCoords(xc, yc);
3323 for (
int i = 0; i < nq; ++i)
3325 phys[i] = pow(xc[i], 3) + pow(yc[i], 3);
3337 double epsilon = 1.0e-8;
3339 for (
int i = 0; i < nq1; ++i)
3341 NekDouble exact = pow(xc1[i], 3) + pow(yc1[i], 3);
3342 phys1[i] = (fabs(phys1[i]) < 1e-14) ? 0.0 : phys1[i];
3343 exact = (fabs(exact) < 1e-14) ? 0.0 : exact;
3344 BOOST_CHECK_CLOSE(phys1[i], exact, epsilon);
3359 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
3360 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3361 v2.get(), v3.get()};
3368 unsigned int numQuadPoints = 6;
3370 quadPointsTypeDir1);
3376 basisKeyDir1, basisKeyDir1, quadGeom.get());
3378 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3379 CollExp.push_back(Exp);
3391 const int nq = Exp->GetTotPoints();
3396 Exp->GetCoords(xc, yc);
3398 for (
int i = 0; i < nq; ++i)
3400 phys[i] = pow(xc[i], 3) + pow(yc[i], 3);
3412 double epsilon = 1.0e-8;
3414 for (
int i = 0; i < nq1; ++i)
3416 NekDouble exact = pow(xc1[i], 3) + pow(yc1[i], 3);
3417 phys1[i] = (fabs(phys1[i]) < 1e-14) ? 0.0 : phys1[i];
3418 exact = (fabs(exact) < 1e-14) ? 0.0 : exact;
3419 BOOST_CHECK_CLOSE(phys1[i], exact, epsilon);
3424 TestQuadLinearAdvectionDiffusionReaction_IterPerExp_UniformP)
3435 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
3436 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3437 v2.get(), v3.get()};
3444 unsigned int numQuadPoints = 6;
3445 unsigned int numModes = 5;
3447 quadPointsTypeDir1);
3453 basisKeyDir1, basisKeyDir1, quadGeom.get());
3457 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3458 for (
int i = 0; i < nelmts; ++i)
3460 CollExp.push_back(Exp);
3474 int npoints = Exp->GetTotPoints() * nelmts;
3478 for (
int i = 0; i < Exp->GetShapeDimension(); i++)
3485 const int nm = Exp->GetNcoeffs();
3490 for (
int i = 0; i < coeffsIn.size(); ++i)
3492 coeffsIn[i] = i + 1.0;
3496 Exp->DetShapeType(), *Exp, factors,
3499 for (
int i = 0; i < nelmts; ++i)
3502 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3508 double epsilon = 1.0e-8;
3509 for (
int i = 0; i < coeffsRef.size(); ++i)
3511 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3512 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3513 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3518 TestQuadLinearAdvectionDiffusionReaction_MatrixFree_UniformP)
3529 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
3530 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3531 v2.get(), v3.get()};
3538 unsigned int numQuadPoints = 6;
3539 unsigned int numModes = 5;
3541 quadPointsTypeDir1);
3547 basisKeyDir1, basisKeyDir1, quadGeom.get());
3551 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3552 for (
int i = 0; i < nelmts; ++i)
3554 CollExp.push_back(Exp);
3568 int npoints = Exp->GetTotPoints() * nelmts;
3572 for (
int i = 0; i < Exp->GetShapeDimension(); i++)
3579 const int nm = Exp->GetNcoeffs();
3584 for (
int i = 0; i < coeffsIn.size(); ++i)
3586 coeffsIn[i] = i + 1.0;
3590 Exp->DetShapeType(), *Exp, factors,
3593 for (
int i = 0; i < nelmts; ++i)
3596 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3602 double epsilon = 1.0e-8;
3603 for (
int i = 0; i < coeffsRef.size(); ++i)
3605 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3606 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3607 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3612 TestQuadLinearAdvectionDiffusionReaction_MatrixFree_UniformP_Deformed)
3623 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
3624 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3625 v2.get(), v3.get()};
3632 unsigned int numQuadPoints = 6;
3633 unsigned int numModes = 5;
3635 quadPointsTypeDir1);
3641 basisKeyDir1, basisKeyDir1, quadGeom.get());
3645 std::vector<LocalRegions::ExpansionSharedPtr> CollExp;
3646 for (
int i = 0; i < nelmts; ++i)
3648 CollExp.push_back(Exp);
3662 int npoints = Exp->GetTotPoints() * nelmts;
3666 for (
int i = 0; i < Exp->GetShapeDimension(); i++)
3673 const int nm = Exp->GetNcoeffs();
3678 for (
int i = 0; i < coeffsIn.size(); ++i)
3680 coeffsIn[i] = i + 1.0;
3684 Exp->DetShapeType(), *Exp, factors,
3687 for (
int i = 0; i < nelmts; ++i)
3690 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3696 double epsilon = 1.0e-8;
3697 for (
int i = 0; i < coeffsRef.size(); ++i)
3699 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3700 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3701 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);