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());
105 basisKeyDir1, basisKeyDir1);
107 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
108 CollExp.push_back(Exp);
118 for (
int i = 0; i < coeffs.size(); ++i)
125 Exp->BwdTrans(coeffs, phys1);
128 double epsilon = 1.0e-8;
129 for (
int i = 0; i < phys1.size(); ++i)
131 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
146 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
147 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
166 basisKeyDir1, basisKeyDir2, quadGeom.get());
170 basisKeyDir1, basisKeyDir2);
172 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
173 CollExp.push_back(Exp);
183 for (
int i = 0; i < coeffs.size(); ++i)
190 Exp->BwdTrans(coeffs, phys1);
193 double epsilon = 1.0e-8;
194 for (
int i = 0; i < phys1.size(); ++i)
196 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
211 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
212 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
231 basisKeyDir1, basisKeyDir2, quadGeom.get());
235 basisKeyDir1, basisKeyDir2);
237 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
239 for (
int i = 0; i < nelmts; ++i)
241 CollExp.push_back(Exp);
252 for (
int i = 0; i < coeffs.size(); ++i)
259 for (
int i = 0; i < nelmts; ++i)
261 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
262 tmp = phys1 + i * Exp->GetTotPoints());
266 double epsilon = 1.0e-8;
267 for (
int i = 0; i < phys1.size(); ++i)
269 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
284 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
285 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
293 unsigned int numQuadPoints = 6;
301 basisKeyDir1, basisKeyDir1, quadGeom.get());
305 basisKeyDir1, basisKeyDir1);
307 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
308 CollExp.push_back(Exp);
318 for (
int i = 0; i < coeffs.size(); ++i)
325 Exp->BwdTrans(coeffs, phys1);
328 double epsilon = 1.0e-8;
329 for (
int i = 0; i < phys1.size(); ++i)
331 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
346 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
347 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
366 basisKeyDir1, basisKeyDir2, quadGeom.get());
370 basisKeyDir1, basisKeyDir2);
372 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
373 CollExp.push_back(Exp);
383 for (
int i = 0; i < coeffs.size(); ++i)
390 Exp->BwdTrans(coeffs, phys1);
393 double epsilon = 1.0e-8;
394 for (
int i = 0; i < phys1.size(); ++i)
396 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
411 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
412 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
420 unsigned int numQuadPoints = 6;
421 unsigned int numModes = 4;
429 basisKeyDir1, basisKeyDir1, quadGeom.get());
433 basisKeyDir1, basisKeyDir1);
435 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
436 CollExp.push_back(Exp);
447 for (
int i = 0; i < coeffs.size(); ++i)
454 Exp->BwdTrans(coeffs, physRef);
457 double epsilon = 1.0e-8;
458 for (
int i = 0; i < physRef.size(); ++i)
460 BOOST_CHECK_CLOSE(physRef[i], phys[i], epsilon);
475 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
476 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
484 unsigned int numQuadPoints = 6;
492 basisKeyDir1, basisKeyDir1, quadGeom.get());
496 basisKeyDir1, basisKeyDir1);
498 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
501 for (
int i = 0; i < nelmts; ++i)
503 CollExp.push_back(Exp);
514 for (
int i = 0; i < coeffs.size(); ++i)
521 for (
int i = 0; i < nelmts; ++i)
523 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
524 tmp = phys1 + i * Exp->GetTotPoints());
528 double epsilon = 1.0e-8;
529 for (
int i = 0; i < phys1.size(); ++i)
531 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
546 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
547 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
555 unsigned int numQuadPoints = 6;
563 basisKeyDir1, basisKeyDir1, quadGeom.get());
567 basisKeyDir1, basisKeyDir1);
569 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
572 for (
int i = 0; i < nelmts; ++i)
574 CollExp.push_back(Exp);
585 for (
int i = 0; i < coeffs.size(); ++i)
592 for (
int i = 0; i < nelmts; ++i)
594 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
595 tmp = phys1 + i * Exp->GetTotPoints());
599 double epsilon = 1.0e-8;
600 for (
int i = 0; i < phys1.size(); ++i)
602 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
617 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
618 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
637 basisKeyDir1, basisKeyDir2, quadGeom.get());
641 basisKeyDir1, basisKeyDir2);
645 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
646 for (
int i = 0; i < nelmts; ++i)
648 CollExp.push_back(Exp);
659 for (
int i = 0; i < coeffs.size(); ++i)
666 for (
int i = 0; i < nelmts; ++i)
668 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
669 tmp = phys1 + i * Exp->GetTotPoints());
673 double epsilon = 1.0e-8;
674 for (
int i = 0; i < phys1.size(); ++i)
676 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
691 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
692 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
711 basisKeyDir1, basisKeyDir2, quadGeom.get());
715 basisKeyDir1, basisKeyDir2);
719 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
720 for (
int i = 0; i < nelmts; ++i)
722 CollExp.push_back(Exp);
733 for (
int i = 0; i < coeffs.size(); ++i)
740 for (
int i = 0; i < nelmts; ++i)
742 Exp->BwdTrans(coeffs + i * Exp->GetNcoeffs(),
743 tmp = phys1 + i * Exp->GetTotPoints());
747 double epsilon = 1.0e-8;
748 for (
int i = 0; i < phys1.size(); ++i)
750 BOOST_CHECK_CLOSE(phys1[i], phys2[i], epsilon);
765 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
766 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
774 unsigned int numQuadPoints = 6;
782 basisKeyDir1, basisKeyDir1, quadGeom.get());
786 basisKeyDir1, basisKeyDir1);
788 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
789 CollExp.push_back(Exp);
798 const int nq = Exp->GetTotPoints();
805 Exp->GetCoords(xc, yc);
807 for (
int i = 0; i < nq; ++i)
809 phys[i] = sin(xc[i]) * cos(yc[i]);
812 Exp->IProductWRTBase(phys, coeffs1);
815 double epsilon = 1.0e-8;
816 for (
int i = 0; i < coeffs1.size(); ++i)
818 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
819 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
820 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
836 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
837 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
856 basisKeyDir1, basisKeyDir2, quadGeom.get());
860 basisKeyDir1, basisKeyDir2);
862 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
863 CollExp.push_back(Exp);
872 const int nq = Exp->GetTotPoints();
879 Exp->GetCoords(xc, yc);
881 for (
int i = 0; i < nq; ++i)
883 phys[i] = sin(xc[i]) * cos(yc[i]);
886 Exp->IProductWRTBase(phys, coeffs1);
889 double epsilon = 1.0e-8;
890 for (
int i = 0; i < coeffs1.size(); ++i)
892 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
893 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
894 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
910 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
911 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
930 basisKeyDir1, basisKeyDir2, quadGeom.get());
934 basisKeyDir1, basisKeyDir2);
938 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
939 for (
int i = 0; i < nelmts; ++i)
941 CollExp.push_back(Exp);
951 const int nq = Exp->GetTotPoints();
958 Exp->GetCoords(xc, yc);
960 for (
int i = 0; i < nq; ++i)
962 phys[i] = sin(xc[i]) * cos(yc[i]);
964 Exp->IProductWRTBase(phys, coeffs1);
966 for (
int i = 1; i < nelmts; ++i)
969 Exp->IProductWRTBase(phys + i * nq,
970 tmp = coeffs1 + i * Exp->GetNcoeffs());
974 double epsilon = 1.0e-8;
975 for (
int i = 0; i < coeffs1.size(); ++i)
977 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
978 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
979 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
994 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
995 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1003 unsigned int numQuadPoints = 6;
1005 quadPointsTypeDir1);
1011 basisKeyDir1, basisKeyDir1, quadGeom.get());
1015 basisKeyDir1, basisKeyDir1);
1017 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1018 CollExp.push_back(Exp);
1027 const int nq = Exp->GetTotPoints();
1034 Exp->GetCoords(xc, yc);
1036 for (
int i = 0; i < nq; ++i)
1038 phys[i] = sin(xc[i]) * cos(yc[i]);
1041 Exp->IProductWRTBase(phys, coeffs1);
1044 double epsilon = 1.0e-8;
1045 for (
int i = 0; i < coeffs1.size(); ++i)
1047 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1048 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1049 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1064 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
1065 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1066 v2.get(), v3.get()};
1073 unsigned int numQuadPoints = 6;
1075 quadPointsTypeDir1);
1081 basisKeyDir1, basisKeyDir1, quadGeom.get());
1085 basisKeyDir1, basisKeyDir1);
1087 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1088 CollExp.push_back(Exp);
1097 const int nq = Exp->GetTotPoints();
1104 Exp->GetCoords(xc, yc);
1106 for (
int i = 0; i < nq; ++i)
1108 phys[i] = sin(xc[i]) * cos(yc[i]);
1111 Exp->IProductWRTBase(phys, coeffs1);
1114 double epsilon = 1.0e-8;
1115 for (
int i = 0; i < coeffs1.size(); ++i)
1117 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1118 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1119 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1134 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
1135 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1136 v2.get(), v3.get()};
1144 quadPointsTypeDir1);
1146 quadPointsTypeDir1);
1154 basisKeyDir1, basisKeyDir2, quadGeom.get());
1158 basisKeyDir1, basisKeyDir2);
1160 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1161 CollExp.push_back(Exp);
1170 const int nq = Exp->GetTotPoints();
1177 Exp->GetCoords(xc, yc);
1179 for (
int i = 0; i < nq; ++i)
1181 phys[i] = sin(xc[i]) * cos(yc[i]);
1184 Exp->IProductWRTBase(phys, coeffs1);
1187 double epsilon = 1.0e-8;
1188 for (
int i = 0; i < coeffs1.size(); ++i)
1190 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
1191 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
1192 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
1207 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
1208 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1209 v2.get(), v3.get()};
1216 unsigned int numQuadPoints = 6;
1217 unsigned int numModes = 5;
1219 quadPointsTypeDir1);
1225 basisKeyDir1, basisKeyDir1, quadGeom.get());
1229 basisKeyDir1, basisKeyDir1);
1231 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1232 CollExp.push_back(Exp);
1241 const int nq = Exp->GetTotPoints();
1248 Exp->GetCoords(xc, yc);
1250 for (
int i = 0; i < nq; ++i)
1252 phys[i] = sin(xc[i]) * cos(yc[i]);
1255 Exp->IProductWRTBase(phys, coeffsRef);
1258 double epsilon = 1.0e-8;
1259 for (
int i = 0; i < coeffs.size(); ++i)
1261 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
1262 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
1263 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
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 = 6;
1288 unsigned int numModes = 5;
1290 quadPointsTypeDir1);
1296 basisKeyDir1, basisKeyDir1, quadGeom.get());
1300 basisKeyDir1, basisKeyDir1);
1302 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1303 CollExp.push_back(Exp);
1312 const int nq = Exp->GetTotPoints();
1319 Exp->GetCoords(xc, yc);
1321 for (
int i = 0; i < nq; ++i)
1323 phys[i] = sin(xc[i]) * cos(yc[i]);
1326 Exp->IProductWRTBase(phys, coeffsRef);
1329 double epsilon = 1.0e-8;
1330 for (
int i = 0; i < coeffs.size(); ++i)
1332 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
1333 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
1334 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
1339 TestQuadIProductWRTBase_MatrixFree_UniformP_Deformed_OverInt)
1350 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
1351 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1352 v2.get(), v3.get()};
1359 unsigned int numQuadPoints = 10;
1360 unsigned int numModes = 5;
1362 quadPointsTypeDir1);
1368 basisKeyDir1, basisKeyDir1, quadGeom.get());
1372 basisKeyDir1, basisKeyDir1);
1374 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1375 CollExp.push_back(Exp);
1384 const int nq = Exp->GetTotPoints();
1391 Exp->GetCoords(xc, yc);
1393 for (
int i = 0; i < nq; ++i)
1395 phys[i] = sin(xc[i]) * cos(yc[i]);
1398 Exp->IProductWRTBase(phys, coeffsRef);
1401 double epsilon = 1.0e-8;
1402 for (
int i = 0; i < coeffs.size(); ++i)
1404 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
1405 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
1406 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
1421 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
1422 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1423 v2.get(), v3.get()};
1430 unsigned int numQuadPoints = 6;
1432 quadPointsTypeDir1);
1438 basisKeyDir1, basisKeyDir1, quadGeom.get());
1442 basisKeyDir1, basisKeyDir1);
1444 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1445 CollExp.push_back(Exp);
1454 const int nq = Exp->GetTotPoints();
1460 Exp->GetCoords(xc, yc);
1462 for (
int i = 0; i < nq; ++i)
1464 phys[i] = sin(xc[i]) * cos(yc[i]);
1467 Exp->PhysDeriv(phys, diff1, tmp = diff1 + nq);
1470 double epsilon = 1.0e-8;
1471 for (
int i = 0; i < diff1.size(); ++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()};
1498 quadPointsTypeDir1);
1500 quadPointsTypeDir1);
1508 basisKeyDir1, basisKeyDir2, quadGeom.get());
1512 basisKeyDir1, basisKeyDir2);
1515 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1516 for (
int i = 0; i < nelmts; ++i)
1518 CollExp.push_back(Exp);
1528 const int nq = Exp->GetTotPoints();
1534 Exp->GetCoords(xc, yc);
1536 for (
int i = 0; i < nq; ++i)
1538 phys[i] = sin(xc[i]) * cos(yc[i]);
1540 Exp->PhysDeriv(phys, diff1, tmp = diff1 + nelmts * nq);
1541 for (
int i = 1; i < nelmts; ++i)
1544 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
1545 tmp1 = diff1 + (nelmts + i) * nq);
1549 tmp = diff2 + nelmts * nq);
1551 double epsilon = 1.0e-8;
1552 for (
int i = 0; i < diff1.size(); ++i)
1554 diff1[i] = (std::abs(diff1[i]) < 1e-14) ? 0.0 : diff1[i];
1555 diff2[i] = (std::abs(diff2[i]) < 1e-14) ? 0.0 : diff2[i];
1556 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1571 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
1572 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1573 v2.get(), v3.get()};
1580 unsigned int numQuadPoints = 5;
1581 unsigned int numModes = 2;
1583 quadPointsTypeDir1);
1589 basisKeyDir1, basisKeyDir1, quadGeom.get());
1593 basisKeyDir1, basisKeyDir1);
1595 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1596 CollExp.push_back(Exp);
1605 const int nq = Exp->GetTotPoints();
1611 Exp->GetCoords(xc, yc);
1613 for (
int i = 0; i < nq; ++i)
1615 phys[i] = sin(xc[i]) * cos(yc[i]);
1618 Exp->PhysDeriv(phys, derivRef, tmp = derivRef + nq);
1621 double epsilon = 1.0e-8;
1622 for (
int i = 0; i < derivRef.size(); ++i)
1624 derivRef[i] = (std::abs(derivRef[i]) < 1e-14) ? 0.0 : derivRef[i];
1625 deriv[i] = (std::abs(deriv[i]) < 1e-14) ? 0.0 : deriv[i];
1626 BOOST_CHECK_CLOSE(derivRef[i], deriv[i], epsilon);
1641 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
1642 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1643 v2.get(), v3.get()};
1650 unsigned int numQuadPoints = 4;
1651 unsigned int numModes = 2;
1653 quadPointsTypeDir1);
1659 basisKeyDir1, basisKeyDir1, quadGeom.get());
1663 basisKeyDir1, basisKeyDir1);
1665 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1666 CollExp.push_back(Exp);
1675 const int nq = Exp->GetTotPoints();
1681 Exp->GetCoords(xc, yc);
1683 for (
int i = 0; i < nq; ++i)
1685 phys[i] = sin(xc[i]) * cos(yc[i]);
1688 Exp->PhysDeriv(phys, derivRef, tmp = derivRef + nq);
1691 double epsilon = 1.0e-8;
1692 for (
int i = 0; i < derivRef.size(); ++i)
1694 derivRef[i] = (std::abs(derivRef[i]) < 1e-14) ? 0.0 : derivRef[i];
1695 deriv[i] = (std::abs(deriv[i]) < 1e-14) ? 0.0 : deriv[i];
1696 BOOST_CHECK_CLOSE(derivRef[i], deriv[i], epsilon);
1711 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
1712 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1713 v2.get(), v3.get()};
1720 unsigned int numQuadPoints = 4;
1721 unsigned int numModes = 2;
1723 quadPointsTypeDir1);
1729 basisKeyDir1, basisKeyDir1, quadGeom.get());
1731 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1732 CollExp.push_back(Exp);
1741 const int nq = Exp->GetTotPoints();
1747 Exp->GetCoords(xc, yc, zc);
1749 for (
int i = 0; i < nq; ++i)
1751 phys[i] = sin(xc[i]) * cos(yc[i]) * sin(zc[i]);
1754 Exp->PhysDeriv(phys, derivRef, tmp = derivRef + nq,
1755 tmp1 = derivRef + 2 * nq);
1757 tmp1 = deriv + 2 * nq);
1759 double epsilon = 1.0e-8;
1760 for (
int i = 0; i < derivRef.size(); ++i)
1762 derivRef[i] = (std::abs(derivRef[i]) < 1e-14) ? 0.0 : derivRef[i];
1763 deriv[i] = (std::abs(deriv[i]) < 1e-14) ? 0.0 : deriv[i];
1764 BOOST_CHECK_CLOSE(derivRef[i], deriv[i], epsilon);
1769 TestQuadPhysDeriv_Directional_MatrixFree_UniformP_Undeformed)
1780 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
1781 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1782 v2.get(), v3.get()};
1789 unsigned int numQuadPoints = 5;
1790 unsigned int numModes = 2;
1792 quadPointsTypeDir1);
1798 basisKeyDir1, basisKeyDir1, quadGeom.get());
1802 basisKeyDir1, basisKeyDir1);
1804 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1805 CollExp.push_back(Exp);
1814 const int nq = Exp->GetTotPoints();
1820 Exp->GetCoords(xc, yc);
1822 for (
int i = 0; i < nq; ++i)
1824 phys[i] = sin(xc[i]) * cos(yc[i]);
1827 Exp->PhysDeriv(0, phys, derivRef);
1828 Exp->PhysDeriv(1, phys, tmp = derivRef + nq);
1833 double epsilon = 1.0e-8;
1834 for (
int i = 0; i < derivRef.size(); ++i)
1836 derivRef[i] = (std::abs(derivRef[i]) < 1e-14) ? 0.0 : derivRef[i];
1837 deriv[i] = (std::abs(deriv[i]) < 1e-14) ? 0.0 : deriv[i];
1838 BOOST_CHECK_CLOSE(derivRef[i], deriv[i], epsilon);
1853 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
1854 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1855 v2.get(), v3.get()};
1862 unsigned int numQuadPoints = 6;
1864 quadPointsTypeDir1);
1870 basisKeyDir1, basisKeyDir1, quadGeom.get());
1874 basisKeyDir1, basisKeyDir1);
1876 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1877 CollExp.push_back(Exp);
1886 const int nq = Exp->GetTotPoints();
1892 Exp->GetCoords(xc, yc);
1894 for (
int i = 0; i < nq; ++i)
1896 phys[i] = sin(xc[i]) * cos(yc[i]);
1899 Exp->PhysDeriv(phys, diff1, tmp = diff1 + nq);
1902 double epsilon = 1.0e-8;
1903 for (
int i = 0; i < diff1.size(); ++i)
1905 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
1920 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
1921 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
1922 v2.get(), v3.get()};
1930 quadPointsTypeDir1);
1932 quadPointsTypeDir1);
1940 basisKeyDir1, basisKeyDir2, quadGeom.get());
1944 basisKeyDir1, basisKeyDir2);
1948 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
1949 for (
int i = 0; i < nelmts; ++i)
1951 CollExp.push_back(Exp);
1961 const int nq = Exp->GetTotPoints();
1967 Exp->GetCoords(xc, yc);
1969 for (
int i = 0; i < nq; ++i)
1971 phys[i] = sin(xc[i]) * cos(yc[i]);
1973 Exp->PhysDeriv(phys, diff1, tmp1 = diff1 + nelmts * nq);
1974 for (
int i = 1; i < nelmts; ++i)
1977 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
1978 tmp1 = diff1 + (nelmts + i) * nq);
1982 tmp = diff2 + nelmts * nq);
1984 double epsilon = 1.0e-8;
1985 for (
int i = 0; i < diff1.size(); ++i)
1987 diff1[i] = (std::abs(diff1[i]) < 1e-14) ? 0.0 : diff1[i];
1988 diff2[i] = (std::abs(diff2[i]) < 1e-14) ? 0.0 : diff2[i];
1989 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
2004 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
2005 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2006 v2.get(), v3.get()};
2013 unsigned int numQuadPoints = 6;
2015 quadPointsTypeDir1);
2021 basisKeyDir1, basisKeyDir1, quadGeom.get());
2025 basisKeyDir1, basisKeyDir1);
2027 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2028 CollExp.push_back(Exp);
2037 const int nq = Exp->GetTotPoints();
2043 Exp->GetCoords(xc, yc);
2045 for (
int i = 0; i < nq; ++i)
2047 phys[i] = sin(xc[i]) * cos(yc[i]);
2050 Exp->PhysDeriv(phys, diff1, tmp = diff1 + nq);
2053 double epsilon = 1.0e-8;
2054 for (
int i = 0; i < diff1.size(); ++i)
2056 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
2071 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
2072 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2073 v2.get(), v3.get()};
2081 quadPointsTypeDir1);
2083 quadPointsTypeDir1);
2091 basisKeyDir1, basisKeyDir2, quadGeom.get());
2095 basisKeyDir1, basisKeyDir2);
2099 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2100 for (
int i = 0; i < nelmts; ++i)
2102 CollExp.push_back(Exp);
2112 const int nq = Exp->GetTotPoints();
2118 Exp->GetCoords(xc, yc);
2120 for (
int i = 0; i < nq; ++i)
2122 phys[i] = sin(xc[i]) * cos(yc[i]);
2124 Exp->PhysDeriv(phys, diff1, tmp1 = diff1 + nelmts * nq);
2125 for (
int i = 1; i < nelmts; ++i)
2128 Exp->PhysDeriv(phys, tmp = diff1 + i * nq,
2129 tmp1 = diff1 + (nelmts + i) * nq);
2133 tmp = diff2 + nelmts * nq);
2135 double epsilon = 1.0e-8;
2136 for (
int i = 0; i < diff1.size(); ++i)
2138 diff1[i] = (std::abs(diff1[i]) < 1e-14) ? 0.0 : diff1[i];
2139 diff2[i] = (std::abs(diff2[i]) < 1e-14) ? 0.0 : diff2[i];
2140 BOOST_CHECK_CLOSE(diff1[i], diff2[i], epsilon);
2155 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
2156 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2157 v2.get(), v3.get()};
2164 unsigned int numQuadPoints = 5;
2166 quadPointsTypeDir1);
2172 basisKeyDir1, basisKeyDir1, quadGeom.get());
2176 basisKeyDir1, basisKeyDir1);
2178 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2179 CollExp.push_back(Exp);
2188 const int nq = Exp->GetTotPoints();
2189 const int nm = Exp->GetNcoeffs();
2197 Exp->GetCoords(xc, yc);
2199 for (
int i = 0; i < nq; ++i)
2201 phys1[i] = sin(xc[i]) * cos(yc[i]);
2202 phys2[i] = cos(xc[i]) * sin(yc[i]);
2206 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
2207 Exp->IProductWRTDerivBase(1, phys2, coeffs2);
2208 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
2212 double epsilon = 1.0e-8;
2213 for (
int i = 0; i < coeffs1.size(); ++i)
2215 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2216 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2217 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2222 TestQuadIProductWRTDerivBase_IterPerExp_VariableP_MultiElmt)
2233 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
2234 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2235 v2.get(), v3.get()};
2243 quadPointsTypeDir1);
2245 quadPointsTypeDir1);
2253 basisKeyDir1, basisKeyDir2, quadGeom.get());
2257 basisKeyDir1, basisKeyDir2);
2261 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2262 for (
int i = 0; i < nelmts; ++i)
2264 CollExp.push_back(Exp);
2274 const int nq = Exp->GetTotPoints();
2275 const int nm = Exp->GetNcoeffs();
2282 Exp->GetCoords(xc, yc);
2284 for (
int i = 0; i < nq; ++i)
2286 phys1[i] = sin(xc[i]) * cos(yc[i]);
2287 phys2[i] = cos(xc[i]) * sin(yc[i]);
2289 for (
int i = 1; i < nelmts; ++i)
2295 for (
int i = 0; i < nelmts; ++i)
2298 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
2299 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp1 = coeffs2 + i * nm);
2300 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2301 tmp = coeffs1 + i * nm, 1);
2306 double epsilon = 1.0e-8;
2307 for (
int i = 0; i < coeffs1.size(); ++i)
2309 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2310 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2311 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2316 TestQuadIProductWRTDerivBase_MatrixFree_UniformP_Undeformed)
2327 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
2328 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2329 v2.get(), v3.get()};
2336 unsigned int numQuadPoints = 6;
2337 unsigned int numModes = 5;
2339 quadPointsTypeDir1);
2345 basisKeyDir1, basisKeyDir1, quadGeom.get());
2349 basisKeyDir1, basisKeyDir1);
2351 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2352 CollExp.push_back(Exp);
2363 const int nq = Exp->GetTotPoints();
2364 const int nm = Exp->GetNcoeffs();
2372 Exp->GetCoords(xc, yc);
2374 for (
int i = 0; i < nq; ++i)
2376 phys1[i] = sin(xc[i]) * cos(yc[i]);
2377 phys2[i] = cos(xc[i]) * sin(yc[i]);
2381 Exp->IProductWRTDerivBase(0, phys1, coeffsRef);
2382 Exp->IProductWRTDerivBase(1, phys2, coeffs);
2383 Vmath::Vadd(nm, coeffsRef, 1, coeffs, 1, coeffsRef, 1);
2389 double epsilon = 1.0e-8;
2390 for (
int i = 0; i < coeffsRef.size(); ++i)
2392 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
2393 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
2394 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
2409 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
2410 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2411 v2.get(), v3.get()};
2418 unsigned int numQuadPoints = 6;
2419 unsigned int numModes = 5;
2421 quadPointsTypeDir1);
2427 basisKeyDir1, basisKeyDir1, quadGeom.get());
2431 basisKeyDir1, basisKeyDir1);
2433 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2434 CollExp.push_back(Exp);
2445 const int nq = Exp->GetTotPoints();
2446 const int nm = Exp->GetNcoeffs();
2454 Exp->GetCoords(xc, yc);
2456 for (
int i = 0; i < nq; ++i)
2458 phys1[i] = sin(xc[i]) * cos(yc[i]);
2459 phys2[i] = cos(xc[i]) * sin(yc[i]);
2463 Exp->IProductWRTDerivBase(0, phys1, coeffsRef);
2464 Exp->IProductWRTDerivBase(1, phys2, coeffs);
2465 Vmath::Vadd(nm, coeffsRef, 1, coeffs, 1, coeffsRef, 1);
2471 double epsilon = 1.0e-8;
2472 for (
int i = 0; i < coeffsRef.size(); ++i)
2474 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
2475 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
2476 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
2481 TestQuadIProductWRTDerivBase_MatrixFree_UniformP_Deformed_ThreeD)
2492 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
2493 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2494 v2.get(), v3.get()};
2501 unsigned int numQuadPoints = 6;
2502 unsigned int numModes = 5;
2504 quadPointsTypeDir1);
2510 basisKeyDir1, basisKeyDir1, quadGeom.get());
2514 basisKeyDir1, basisKeyDir1);
2517 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2518 for (
int i = 0; i < nelmts; ++i)
2520 CollExp.push_back(Exp);
2530 const int nq = Exp->GetTotPoints();
2531 const int nm = Exp->GetNcoeffs();
2540 Exp->GetCoords(xc, yc, zc);
2542 for (
int i = 0; i < nq; ++i)
2544 phys1[i] = sin(xc[i]) * cos(yc[i]);
2545 phys2[i] = cos(xc[i]) * sin(yc[i]);
2546 phys3[i] = cos(xc[i]) * sin(zc[i]);
2549 for (
int i = 1; i < nelmts; ++i)
2556 for (
int i = 0; i < nelmts; ++i)
2559 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffsRef + i * nm);
2560 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp = coeffs + i * nm);
2561 Vmath::Vadd(nm, coeffsRef + i * nm, 1, coeffs + i * nm, 1,
2562 tmp = coeffsRef + i * nm, 1);
2563 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp = coeffs + i * nm);
2564 Vmath::Vadd(nm, coeffsRef + i * nm, 1, coeffs + i * nm, 1,
2565 tmp = coeffsRef + i * nm, 1);
2571 double epsilon = 1.0e-8;
2572 for (
int i = 0; i < coeffsRef.size(); ++i)
2574 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
2575 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
2576 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
2581 TestQuadIProductWRTDerivBase_MatrixFree_UniformP_Deformed_OverInt)
2592 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
2593 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2594 v2.get(), v3.get()};
2601 unsigned int numQuadPoints = 10;
2602 unsigned int numModes = 5;
2604 quadPointsTypeDir1);
2610 basisKeyDir1, basisKeyDir1, quadGeom.get());
2614 basisKeyDir1, basisKeyDir1);
2616 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2617 CollExp.push_back(Exp);
2628 const int nq = Exp->GetTotPoints();
2629 const int nm = Exp->GetNcoeffs();
2637 Exp->GetCoords(xc, yc);
2639 for (
int i = 0; i < nq; ++i)
2641 phys1[i] = sin(xc[i]) * cos(yc[i]);
2642 phys2[i] = cos(xc[i]) * sin(yc[i]);
2646 Exp->IProductWRTDerivBase(0, phys1, coeffsRef);
2647 Exp->IProductWRTDerivBase(1, phys2, coeffs);
2648 Vmath::Vadd(nm, coeffsRef, 1, coeffs, 1, coeffsRef, 1);
2654 double epsilon = 1.0e-8;
2655 for (
int i = 0; i < coeffsRef.size(); ++i)
2657 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
2658 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
2659 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
2674 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
2675 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2676 v2.get(), v3.get()};
2683 unsigned int numQuadPoints = 6;
2685 quadPointsTypeDir1);
2691 basisKeyDir1, basisKeyDir1, quadGeom.get());
2695 basisKeyDir1, basisKeyDir1);
2697 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2698 CollExp.push_back(Exp);
2707 const int nq = Exp->GetTotPoints();
2708 const int nm = Exp->GetNcoeffs();
2716 Exp->GetCoords(xc, yc);
2718 for (
int i = 0; i < nq; ++i)
2720 phys1[i] = sin(xc[i]) * cos(yc[i]);
2721 phys2[i] = cos(xc[i]) * sin(yc[i]);
2725 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
2726 Exp->IProductWRTDerivBase(1, phys2, coeffs2);
2727 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
2731 double epsilon = 1.0e-8;
2732 for (
int i = 0; i < coeffs1.size(); ++i)
2734 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2735 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2736 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2751 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
2752 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2753 v2.get(), v3.get()};
2761 quadPointsTypeDir1);
2763 quadPointsTypeDir1);
2771 basisKeyDir1, basisKeyDir2, quadGeom.get());
2775 basisKeyDir1, basisKeyDir2);
2779 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2780 for (
int i = 0; i < nelmts; ++i)
2782 CollExp.push_back(Exp);
2792 const int nq = Exp->GetTotPoints();
2793 const int nm = Exp->GetNcoeffs();
2800 Exp->GetCoords(xc, yc);
2802 for (
int i = 0; i < nq; ++i)
2804 phys1[i] = sin(xc[i]) * cos(yc[i]);
2805 phys2[i] = cos(xc[i]) * sin(yc[i]);
2807 for (
int i = 1; i < nelmts; ++i)
2813 for (
int i = 0; i < nelmts; ++i)
2816 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
2817 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp1 = coeffs2 + i * nm);
2818 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2819 tmp = coeffs1 + i * nm, 1);
2824 double epsilon = 1.0e-8;
2825 for (
int i = 0; i < coeffs1.size(); ++i)
2827 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2828 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2829 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2844 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
2845 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2846 v2.get(), v3.get()};
2853 unsigned int numQuadPoints = 5;
2855 quadPointsTypeDir1);
2861 basisKeyDir1, basisKeyDir1, quadGeom.get());
2865 basisKeyDir1, basisKeyDir1);
2867 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2868 CollExp.push_back(Exp);
2877 const int nq = Exp->GetTotPoints();
2878 const int nm = Exp->GetNcoeffs();
2886 Exp->GetCoords(xc, yc);
2888 for (
int i = 0; i < nq; ++i)
2890 phys1[i] = sin(xc[i]) * cos(yc[i]);
2891 phys2[i] = cos(xc[i]) * sin(yc[i]);
2895 Exp->IProductWRTDerivBase(0, phys1, coeffs1);
2896 Exp->IProductWRTDerivBase(1, phys2, coeffs2);
2897 Vmath::Vadd(nm, coeffs1, 1, coeffs2, 1, coeffs1, 1);
2901 double epsilon = 1.0e-8;
2902 for (
int i = 0; i < coeffs1.size(); ++i)
2904 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2905 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2906 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
2921 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
2922 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
2923 v2.get(), v3.get()};
2931 quadPointsTypeDir1);
2933 quadPointsTypeDir1);
2941 basisKeyDir1, basisKeyDir2, quadGeom.get());
2945 basisKeyDir1, basisKeyDir2);
2949 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
2950 for (
int i = 0; i < nelmts; ++i)
2952 CollExp.push_back(Exp);
2962 const int nq = Exp->GetTotPoints();
2963 const int nm = Exp->GetNcoeffs();
2970 Exp->GetCoords(xc, yc);
2972 for (
int i = 0; i < nq; ++i)
2974 phys1[i] = sin(xc[i]) * cos(yc[i]);
2975 phys2[i] = cos(xc[i]) * sin(yc[i]);
2977 for (
int i = 1; i < nelmts; ++i)
2983 for (
int i = 0; i < nelmts; ++i)
2986 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
2987 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp1 = coeffs2 + i * nm);
2988 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
2989 tmp = coeffs1 + i * nm, 1);
2994 double epsilon = 1.0e-8;
2995 for (
int i = 0; i < coeffs1.size(); ++i)
2997 coeffs1[i] = (std::abs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
2998 coeffs2[i] = (std::abs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
2999 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
3004 TestQuadIProductWRTDerivBase_SumFac_VariableP_MultiElmt_threedim)
3015 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
3016 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3017 v2.get(), v3.get()};
3025 quadPointsTypeDir1);
3027 quadPointsTypeDir1);
3035 basisKeyDir1, basisKeyDir2, quadGeom.get());
3039 basisKeyDir1, basisKeyDir2);
3043 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3044 for (
int i = 0; i < nelmts; ++i)
3046 CollExp.push_back(Exp);
3056 const int nq = Exp->GetTotPoints();
3057 const int nm = Exp->GetNcoeffs();
3065 Exp->GetCoords(xc, yc, zc);
3067 for (
int i = 0; i < nq; ++i)
3069 phys1[i] = sin(xc[i]) * cos(yc[i]);
3070 phys2[i] = cos(xc[i]) * sin(yc[i]);
3071 phys3[i] = cos(xc[i]) * sin(zc[i]);
3074 for (
int i = 1; i < nelmts; ++i)
3081 for (
int i = 0; i < nelmts; ++i)
3084 Exp->IProductWRTDerivBase(0, phys1 + i * nq, tmp = coeffs1 + i * nm);
3085 Exp->IProductWRTDerivBase(1, phys2 + i * nq, tmp1 = coeffs2 + i * nm);
3086 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
3087 tmp = coeffs1 + i * nm, 1);
3088 Exp->IProductWRTDerivBase(2, phys3 + i * nq, tmp1 = coeffs2 + i * nm);
3089 Vmath::Vadd(nm, coeffs1 + i * nm, 1, coeffs2 + i * nm, 1,
3090 tmp = coeffs1 + i * nm, 1);
3096 double epsilon = 1.0e-8;
3097 for (
int i = 0; i < coeffs1.size(); ++i)
3099 coeffs1[i] = (fabs(coeffs1[i]) < 1e-14) ? 0.0 : coeffs1[i];
3100 coeffs2[i] = (fabs(coeffs2[i]) < 1e-14) ? 0.0 : coeffs2[i];
3101 BOOST_CHECK_CLOSE(coeffs1[i], coeffs2[i], epsilon);
3116 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
3117 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3118 v2.get(), v3.get()};
3125 unsigned int numQuadPoints = 6;
3126 unsigned int numModes = 5;
3128 quadPointsTypeDir1);
3134 basisKeyDir1, basisKeyDir1, quadGeom.get());
3138 basisKeyDir1, basisKeyDir1);
3142 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3143 for (
int i = 0; i < nelmts; ++i)
3145 CollExp.push_back(Exp);
3161 const int nm = Exp->GetNcoeffs();
3166 for (
int i = 0; i < nm; ++i)
3171 for (
int i = 1; i < nelmts; ++i)
3173 Vmath::Vcopy(nm, coeffsIn, 1, tmp = coeffsIn + i * nm, 1);
3179 for (
int i = 0; i < nelmts; ++i)
3182 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3187 double epsilon = 1.0e-8;
3188 for (
int i = 0; i < coeffsRef.size(); ++i)
3190 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3191 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3192 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3207 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
3208 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3209 v2.get(), v3.get()};
3216 unsigned int numQuadPoints = 6;
3217 unsigned int numModes = 5;
3219 quadPointsTypeDir1);
3225 basisKeyDir1, basisKeyDir1, quadGeom.get());
3229 basisKeyDir1, basisKeyDir1);
3233 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3234 for (
int i = 0; i < nelmts; ++i)
3236 CollExp.push_back(Exp);
3249 const int nm = Exp->GetNcoeffs();
3254 for (
int i = 0; i < nm; ++i)
3259 for (
int i = 1; i < nelmts; ++i)
3261 Vmath::Vcopy(nm, coeffsIn, 1, tmp = coeffsIn + i * nm, 1);
3267 for (
int i = 0; i < nelmts; ++i)
3270 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3275 double epsilon = 1.0e-8;
3276 for (
int i = 0; i < coeffsRef.size(); ++i)
3278 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3279 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3280 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3295 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
3296 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3297 v2.get(), v3.get()};
3304 unsigned int numQuadPoints = 6;
3305 unsigned int numModes = 5;
3307 quadPointsTypeDir1);
3313 basisKeyDir1, basisKeyDir1, quadGeom.get());
3317 basisKeyDir1, basisKeyDir1);
3321 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3322 for (
int i = 0; i < nelmts; ++i)
3324 CollExp.push_back(Exp);
3337 const int nm = Exp->GetNcoeffs();
3342 for (
int i = 0; i < nm; ++i)
3347 for (
int i = 1; i < nelmts; ++i)
3349 Vmath::Vcopy(nm, coeffsIn, 1, tmp = coeffsIn + i * nm, 1);
3355 for (
int i = 0; i < nelmts; ++i)
3358 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3363 double epsilon = 1.0e-8;
3364 for (
int i = 0; i < coeffsRef.size(); ++i)
3366 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3367 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3368 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3383 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
3384 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3385 v2.get(), v3.get()};
3392 unsigned int numQuadPoints = 6;
3393 unsigned int numModes = 5;
3395 quadPointsTypeDir1);
3401 basisKeyDir1, basisKeyDir1, quadGeom.get());
3405 basisKeyDir1, basisKeyDir1);
3409 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3410 for (
int i = 0; i < nelmts; ++i)
3412 CollExp.push_back(Exp);
3428 const int nm = Exp->GetNcoeffs();
3433 for (
int i = 0; i < nm; ++i)
3438 for (
int i = 1; i < nelmts; ++i)
3440 Vmath::Vcopy(nm, coeffsIn, 1, tmp = coeffsIn + i * nm, 1);
3446 for (
int i = 0; i < nelmts; ++i)
3449 Exp->GeneralMatrixOp(coeffsIn + i * nm, tmp = coeffsRef + i * nm, mkey);
3454 double epsilon = 1.0e-8;
3455 for (
int i = 0; i < coeffsRef.size(); ++i)
3457 coeffsRef[i] = (std::abs(coeffsRef[i]) < 1e-14) ? 0.0 : coeffsRef[i];
3458 coeffs[i] = (std::abs(coeffs[i]) < 1e-14) ? 0.0 : coeffs[i];
3459 BOOST_CHECK_CLOSE(coeffsRef[i], coeffs[i], epsilon);
3474 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
3475 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3476 v2.get(), v3.get()};
3483 unsigned int numQuadPoints = 6;
3485 quadPointsTypeDir1);
3491 basisKeyDir1, basisKeyDir1, quadGeom.get());
3495 basisKeyDir1, basisKeyDir1);
3497 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3498 CollExp.push_back(Exp);
3510 const int nq = Exp->GetTotPoints();
3515 Exp->GetCoords(xc, yc);
3517 for (
int i = 0; i < nq; ++i)
3519 phys[i] = pow(xc[i], 3) + pow(yc[i], 3);
3531 double epsilon = 1.0e-8;
3533 for (
int i = 0; i < nq1; ++i)
3535 NekDouble exact = pow(xc1[i], 3) + pow(yc1[i], 3);
3536 phys1[i] = (fabs(phys1[i]) < 1e-14) ? 0.0 : phys1[i];
3537 exact = (fabs(exact) < 1e-14) ? 0.0 : exact;
3538 BOOST_CHECK_CLOSE(phys1[i], exact, epsilon);
3553 std::array<SpatialDomains::SegGeomUniquePtr, 4> segVec;
3554 std::array<SpatialDomains::PointGeom *, 4> v = {v0.get(), v1.get(),
3555 v2.get(), v3.get()};
3562 unsigned int numQuadPoints = 6;
3564 quadPointsTypeDir1);
3570 basisKeyDir1, basisKeyDir1, quadGeom.get());
3574 basisKeyDir1, basisKeyDir1);
3576 std::vector<StdRegions::StdExpansionSharedPtr> CollExp;
3577 CollExp.push_back(Exp);
3589 const int nq = Exp->GetTotPoints();
3594 Exp->GetCoords(xc, yc);
3596 for (
int i = 0; i < nq; ++i)
3598 phys[i] = pow(xc[i], 3) + pow(yc[i], 3);
3610 double epsilon = 1.0e-8;
3612 for (
int i = 0; i < nq1; ++i)
3614 NekDouble exact = pow(xc1[i], 3) + pow(yc1[i], 3);
3615 phys1[i] = (fabs(phys1[i]) < 1e-14) ? 0.0 : phys1[i];
3616 exact = (fabs(exact) < 1e-14) ? 0.0 : exact;
3617 BOOST_CHECK_CLOSE(phys1[i], exact, epsilon);