35#include <boost/core/ignore_unused.hpp>
37#include <MatrixFreeOps/Operator.hpp>
78 int nPhys =
m_stdExp->GetTotPoints();
91 for (
int i = 0; i <
m_dim; ++i)
93 tmp[i] = wsp + i * ntot;
102 for (
int i = 0; i <
m_dim; ++i)
108 tmp[i], 1, tmp[i], 1);
120 for (
int i = 0; i <
m_dim; ++i)
123 t = tmp[i] + e *
m_nqe, 1);
128 1, t = tmp[i] + e *
m_nqe, 1);
133 t = tmp[0] + e *
m_nqe, 1);
141 output.get(), nmodes);
144 for (
int i = 1; i <
m_dim; ++i)
156 t = tmp[i] + e *
m_nqe, 1);
163 1.0, output.get(), nmodes);
171 boost::ignore_unused(dir, input, output, wsp);
176 int coll_phys_offset)
override
178 boost::ignore_unused(
factors, coll_phys_offset);
179 ASSERTL0(
false,
"Not valid for this operator.");
191 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
196 m_dim = PtsKey.size();
200 int nmodes =
m_stdExp->GetNcoeffs();
204 for (
int i = 0; i <
m_dim; ++i)
209 for (
int j = 0; j <
m_nqe; ++j)
213 m_stdExp->IProductWRTDerivBase(i, tmp, tmp1);
219 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
220 m_jac = pGeomData->GetJac(pCollExp);
226OperatorKey IProductWRTDerivBase_StdMat::m_typeArr[] = {
229 IProductWRTDerivBase_StdMat::create,
"IProductWRTDerivBase_StdMat_Seg"),
232 IProductWRTDerivBase_StdMat::create,
"IProductWRTDerivBase_StdMat_Tri"),
235 IProductWRTDerivBase_StdMat::create,
236 "IProductWRTDerivBase_StdMat_NodalTri"),
239 IProductWRTDerivBase_StdMat::create,
240 "IProductWRTDerivBase_StdMat_Quad"),
243 IProductWRTDerivBase_StdMat::create,
"IProductWRTDerivBase_StdMat_Tet"),
246 IProductWRTDerivBase_StdMat::create,
247 "IProductWRTDerivBase_StdMat_NodalTet"),
250 IProductWRTDerivBase_StdMat::create,
"IProductWRTDerivBase_StdMat_Pyr"),
253 IProductWRTDerivBase_StdMat::create,
254 "IProductWRTDerivBase_StdMat_Prism"),
257 IProductWRTDerivBase_StdMat::create,
258 "IProductWRTDerivBase_StdMat_NodalPrism"),
261 IProductWRTDerivBase_StdMat::create,
"IProductWRTDerivBase_StdMat_Hex"),
264 IProductWRTDerivBase_StdMat::create,
265 "IProductWRTDerivBase_SumFac_Pyr")};
286 boost::ignore_unused(wsp);
347 (*m_oper)(input, output);
355 boost::ignore_unused(dir, input, output, wsp);
360 int coll_phys_offset)
override
362 boost::ignore_unused(
factors, coll_phys_offset);
363 ASSERTL0(
false,
"Not valid for this operator.");
367 std::shared_ptr<MatrixFree::IProductWRTDerivBase>
m_oper;
370 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
374 pCollExp[0]->GetStdExp()->GetTotPoints(),
375 pCollExp[0]->GetStdExp()->GetNcoeffs(),
379 const auto dim = pCollExp[0]->GetStdExp()->GetShapeDimension();
382 std::vector<LibUtilities::BasisSharedPtr> basis(dim);
383 for (
unsigned int i = 0; i < dim; ++i)
385 basis[i] = pCollExp[0]->GetBasis(i);
389 auto shapeType = pCollExp[0]->GetStdExp()->DetShapeType();
392 std::string op_string =
"IProductWRTDerivBase";
393 op_string += MatrixFree::GetOpstring(shapeType,
m_isDeformed);
398 oper->SetJac(pGeomData->GetJacInterLeave(pCollExp,
m_nElmtPad));
401 oper->SetDF(pGeomData->GetDerivFactorsInterLeave(pCollExp,
m_nElmtPad));
404 std::dynamic_pointer_cast<MatrixFree::IProductWRTDerivBase>(oper);
410OperatorKey IProductWRTDerivBase_MatrixFree::m_typeArr[] = {
413 IProductWRTDerivBase_MatrixFree::create,
414 "IProductWRTDerivBase_MatrixFree_Seg"),
417 IProductWRTDerivBase_MatrixFree::create,
418 "IProductWRTDerivBase_MatrixFree_Quad"),
421 IProductWRTDerivBase_MatrixFree::create,
422 "IProductWRTDerivBase_MatrixFree_Tri"),
425 IProductWRTDerivBase_MatrixFree::create,
426 "IProductWRTDerivBase_MatrixFree_Hex"),
429 IProductWRTDerivBase_MatrixFree::create,
430 "IProductWRTDerivBase_MatrixFree_Prism"),
433 IProductWRTDerivBase_MatrixFree::create,
434 "IProductWRTDerivBase_MatrixFree_Pyr"),
437 IProductWRTDerivBase_MatrixFree::create,
438 "IProductWRTDerivBase_MatrixFree_Tet")};
459 unsigned int nPhys =
m_stdExp->GetTotPoints();
461 unsigned int nmodes =
m_stdExp->GetNcoeffs();
462 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
473 for (
int i = 0; i <
m_dim; ++i)
475 tmp[i] = wsp + i * nmax;
483 for (
int i = 0; i <
m_dim; ++i)
489 tmp[i], 1, tmp[i], 1);
501 for (
int i = 0; i <
m_dim; ++i)
504 t = tmp[i] + e *
m_nqe, 1);
509 1, t = tmp[i] + e *
m_nqe, 1);
514 t = tmp[0] + e *
m_nqe, 1);
520 m_stdExp->IProductWRTDerivBase(0, tmp[0] + n * nPhys,
521 tmp1 = output + n * nmodes);
525 for (
int i = 1; i <
m_dim; ++i)
538 t = tmp[i] + e *
m_nqe, 1);
544 m_stdExp->IProductWRTDerivBase(i, tmp[i] + n * nPhys, tmp[0]);
545 Vmath::Vadd(nmodes, tmp[0], 1, output + n * nmodes, 1,
546 tmp1 = output + n * nmodes, 1);
555 boost::ignore_unused(dir, input, output, wsp);
560 int coll_phys_offset)
override
562 boost::ignore_unused(
factors, coll_phys_offset);
563 ASSERTL0(
false,
"Not valid for this operator.");
574 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
579 m_dim = PtsKey.size();
584 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
585 m_jac = pGeomData->GetJac(pCollExp);
591OperatorKey IProductWRTDerivBase_IterPerExp::m_typeArr[] = {
594 IProductWRTDerivBase_IterPerExp::create,
595 "IProductWRTDerivBase_IterPerExp_Seg"),
598 IProductWRTDerivBase_IterPerExp::create,
599 "IProductWRTDerivBase_IterPerExp_Tri"),
602 IProductWRTDerivBase_IterPerExp::create,
603 "IProductWRTDerivBase_IterPerExp_NodalTri"),
606 IProductWRTDerivBase_IterPerExp::create,
607 "IProductWRTDerivBase_IterPerExp_Quad"),
610 IProductWRTDerivBase_IterPerExp::create,
611 "IProductWRTDerivBase_IterPerExp_Tet"),
614 IProductWRTDerivBase_IterPerExp::create,
615 "IProductWRTDerivBase_IterPerExp_NodalTet"),
618 IProductWRTDerivBase_IterPerExp::create,
619 "IProductWRTDerivBase_IterPerExp_Pyr"),
622 IProductWRTDerivBase_IterPerExp::create,
623 "IProductWRTDerivBase_IterPerExp_Prism"),
626 IProductWRTDerivBase_IterPerExp::create,
627 "IProductWRTDerivBase_IterPerExp_NodalPrism"),
630 IProductWRTDerivBase_IterPerExp::create,
631 "IProductWRTDerivBase_IterPerExp_Hex")};
652 boost::ignore_unused(wsp);
654 unsigned int nmodes =
m_expList[0]->GetNcoeffs();
655 unsigned int nPhys =
m_expList[0]->GetTotPoints();
668 m_expList[n]->IProductWRTDerivBase(0, in[0] + n * nPhys,
669 tmp1 = output + n * nmodes);
672 for (
int i = 1; i <
m_dim; ++i)
676 m_expList[n]->IProductWRTDerivBase(i, in[i] + n * nPhys, tmp);
678 Vmath::Vadd(nmodes, tmp, 1, output + n * nmodes, 1,
679 tmp1 = output + n * nmodes, 1);
688 boost::ignore_unused(dir, input, output, wsp);
693 int coll_phys_offset)
override
695 boost::ignore_unused(
factors, coll_phys_offset);
696 ASSERTL0(
false,
"Not valid for this operator.");
706 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
711 m_dim = pCollExp[0]->GetNumBases();
717OperatorKey IProductWRTDerivBase_NoCollection::m_typeArr[] = {
720 IProductWRTDerivBase_NoCollection::create,
721 "IProductWRTDerivBase_NoCollection_Seg"),
724 IProductWRTDerivBase_NoCollection::create,
725 "IProductWRTDerivBase_NoCollection_Tri"),
728 IProductWRTDerivBase_NoCollection::create,
729 "IProductWRTDerivBase_NoCollection_NodalTri"),
733 IProductWRTDerivBase_NoCollection::create,
734 "IProductWRTDerivBase_NoCollection_Quad"),
737 IProductWRTDerivBase_NoCollection::create,
738 "IProductWRTDerivBase_NoCollection_Tet"),
741 IProductWRTDerivBase_NoCollection::create,
742 "IProductWRTDerivBase_NoCollection_NodalTet"),
745 IProductWRTDerivBase_NoCollection::create,
746 "IProductWRTDerivBase_NoCollection_Pyr"),
749 IProductWRTDerivBase_NoCollection::create,
750 "IProductWRTDerivBase_NoCollection_Prism"),
753 IProductWRTDerivBase_NoCollection::create,
754 "IProductWRTDerivBase_NoCollection_NodalPrism"),
757 IProductWRTDerivBase_NoCollection::create,
758 "IProductWRTDerivBase_NoCollection_Hex")};
830 boost::ignore_unused(dir, input, output, wsp);
835 int coll_phys_offset)
override
837 boost::ignore_unused(
factors, coll_phys_offset);
838 ASSERTL0(
false,
"Not valid for this operator.");
851 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
860 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
861 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
866OperatorKey IProductWRTDerivBase_SumFac_Seg::m_type =
869 IProductWRTDerivBase_SumFac_Seg::create,
870 "IProductWRTDerivBase_SumFac_Seg");
891 unsigned int nPhys =
m_stdExp->GetTotPoints();
893 unsigned int nmodes =
m_stdExp->GetNcoeffs();
894 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
903 output = (
m_coordim == 2) ? entry2 : entry3;
907 wsp1 = wsp + 2 * nmax;
912 for (
int i = 0; i < 2; ++i)
918 tmp[i], 1, tmp[i], 1);
928 for (
int i = 0; i < 2; ++i)
931 t = tmp[i] + e *
m_nqe, 1);
936 1, t = tmp[i] + e *
m_nqe, 1);
944 tmp[0], output, wsp1);
949 tmp[1], tmp[0], wsp1);
958 boost::ignore_unused(dir, input, output, wsp);
963 int coll_phys_offset)
override
965 boost::ignore_unused(
factors, coll_phys_offset);
966 ASSERTL0(
false,
"Not valid for this operator.");
986 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
1003 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1004 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
1011OperatorKey IProductWRTDerivBase_SumFac_Quad::m_type =
1014 IProductWRTDerivBase_SumFac_Quad::create,
1015 "IProductWRTDerivBase_IterPerExp_Quad");
1067 unsigned int nPhys =
m_stdExp->GetTotPoints();
1069 unsigned int nmodes =
m_stdExp->GetNcoeffs();
1070 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
1079 output = (
m_coordim == 2) ? entry2 : entry3;
1082 tmp[1] = wsp + nmax;
1083 wsp1 = wsp + 2 * nmax;
1087 for (
int i = 0; i < 2; ++i)
1093 tmp[i], 1, tmp[i], 1);
1103 for (
int i = 0; i < 2; ++i)
1106 t = tmp[i] + e *
m_nqe, 1);
1111 1, t = tmp[i] + e *
m_nqe, 1);
1122 tmp[0].get() + i * nPhys, 1);
1126 tmp[0].get() + i * nPhys, 1, tmp[0].get() + i * nPhys,
1147 boost::ignore_unused(dir, input, output, wsp);
1152 int coll_phys_offset)
override
1154 boost::ignore_unused(
factors, coll_phys_offset);
1155 ASSERTL0(
false,
"Not valid for this operator.");
1178 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
1195 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1196 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
1235OperatorKey IProductWRTDerivBase_SumFac_Tri::m_type =
1238 IProductWRTDerivBase_SumFac_Tri::create,
1239 "IProductWRTDerivBase_IterPerExp_Tri");
1260 unsigned int nPhys =
m_stdExp->GetTotPoints();
1262 unsigned int nmodes =
m_stdExp->GetNcoeffs();
1263 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
1274 for (
int i = 0; i < 3; ++i)
1276 tmp[i] = wsp + i * nmax;
1282 for (
int i = 0; i < 3; ++i)
1285 for (
int j = 1; j < 3; ++j)
1288 tmp[i], 1, tmp[i], 1);
1298 for (
int i = 0; i < 3; ++i)
1301 t = tmp[i] + e *
m_nqe, 1);
1302 for (
int j = 1; j < 3; ++j)
1306 1, t = tmp[i] + e *
m_nqe, 1);
1312 wsp1 = wsp + 3 * nmax;
1337 boost::ignore_unused(dir, input, output, wsp);
1342 int coll_phys_offset)
override
1344 boost::ignore_unused(
factors, coll_phys_offset);
1345 ASSERTL0(
false,
"Not valid for this operator.");
1369 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
1389 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
1393 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1398OperatorKey IProductWRTDerivBase_SumFac_Hex::m_type =
1401 IProductWRTDerivBase_SumFac_Hex::create,
1402 "IProductWRTDerivBase_SumFac_Hex");
1472 unsigned int nPhys =
m_stdExp->GetTotPoints();
1474 unsigned int nmodes =
m_stdExp->GetNcoeffs();
1475 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
1486 for (
int i = 0; i < 3; ++i)
1488 tmp[i] = wsp + i * nmax;
1494 for (
int i = 0; i < 3; ++i)
1497 for (
int j = 1; j < 3; ++j)
1500 tmp[i], 1, tmp[i], 1);
1510 for (
int i = 0; i < 3; ++i)
1513 t = tmp[i] + e *
m_nqe, 1);
1514 for (
int j = 1; j < 3; ++j)
1518 1, t = tmp[i] + e *
m_nqe, 1);
1524 wsp1 = wsp + 3 * nmax;
1531 tmp[2].get() + i * nPhys, 1, wsp1.get(), 1);
1535 tmp[0].get() + i * nPhys, 1, tmp[0].get() + i * nPhys,
1540 tmp[0].get() + i * nPhys, 1);
1544 tmp[1].get() + i * nPhys, 1, tmp[1].get() + i * nPhys,
1549 tmp[1].get() + i * nPhys, 1);
1572 boost::ignore_unused(dir, input, output, wsp);
1577 int coll_phys_offset)
override
1579 boost::ignore_unused(
factors, coll_phys_offset);
1580 ASSERTL0(
false,
"Not valid for this operator.");
1606 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
1623 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
1627 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1646 4.0 / ((1 - z1[j]) * (1 - z2[k]));
1669OperatorKey IProductWRTDerivBase_SumFac_Tet::m_type =
1672 IProductWRTDerivBase_SumFac_Tet::create,
1673 "IProductWRTDerivBase_SumFac_Tet");
1740 unsigned int nPhys =
m_stdExp->GetTotPoints();
1742 unsigned int nmodes =
m_stdExp->GetNcoeffs();
1743 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
1754 for (
int i = 0; i < 3; ++i)
1756 tmp[i] = wsp + i * nmax;
1762 for (
int i = 0; i < 3; ++i)
1765 for (
int j = 1; j < 3; ++j)
1768 tmp[i], 1, tmp[i], 1);
1778 for (
int i = 0; i < 3; ++i)
1781 t = tmp[i] + e *
m_nqe, 1);
1782 for (
int j = 1; j < 3; ++j)
1786 1, t = tmp[i] + e *
m_nqe, 1);
1792 wsp1 = wsp + 3 * nmax;
1799 tmp[0].get() + i * nPhys, 1);
1803 tmp[0].get() + i * nPhys, 1, tmp[0].get() + i * nPhys,
1827 boost::ignore_unused(dir, input, output, wsp);
1832 int coll_phys_offset)
override
1834 boost::ignore_unused(
factors, coll_phys_offset);
1835 ASSERTL0(
false,
"Not valid for this operator.");
1859 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
1876 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
1880 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1908 (1 + z0[i]) / (1 - z2[k]);
1916OperatorKey IProductWRTDerivBase_SumFac_Prism::m_type =
1919 IProductWRTDerivBase_SumFac_Prism::create,
1920 "IProductWRTDerivBase_SumFac_Prism");
1993 unsigned int nPhys =
m_stdExp->GetTotPoints();
1995 unsigned int nmodes =
m_stdExp->GetNcoeffs();
1996 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
2007 for (
int i = 0; i < 3; ++i)
2009 tmp[i] = wsp + i * nmax;
2015 for (
int i = 0; i < 3; ++i)
2018 for (
int j = 1; j < 3; ++j)
2021 tmp[i], 1, tmp[i], 1);
2031 for (
int i = 0; i < 3; ++i)
2034 t = tmp[i] + e *
m_nqe, 1);
2035 for (
int j = 1; j < 3; ++j)
2039 1, t = tmp[i] + e *
m_nqe, 1);
2045 wsp1 = wsp + 3 * nmax;
2052 tmp[0].get() + i * nPhys, 1);
2056 tmp[0].get() + i * nPhys, 1, tmp[0].get() + i * nPhys,
2061 tmp[1].get() + i * nPhys, 1);
2065 tmp[1].get() + i * nPhys, 1, tmp[1].get() + i * nPhys,
2089 boost::ignore_unused(dir, input, output, wsp);
2094 int coll_phys_offset)
override
2096 boost::ignore_unused(
factors, coll_phys_offset);
2097 ASSERTL0(
false,
"Not valid for this operator.");
2122 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
2139 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
2143 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
2173 (1 + z0[i]) / (1 - z2[k]);
2176 (1 + z1[j]) / (1 - z2[k]);
2184OperatorKey IProductWRTDerivBase_SumFac_Pyr::m_type =
2187 IProductWRTDerivBase_SumFac_Pyr::create,
2188 "IProductWRTDerivBase_SumFac_Pyr");
#define ASSERTL0(condition, msg)
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mode...
#define OPERATOR_CREATE(cname)
Inner product WRT deriv base operator using element-wise operation.
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) override final
Array< TwoD, const NekDouble > m_derivFac
IProductWRTDerivBase_IterPerExp(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
Array< OneD, const NekDouble > m_jac
virtual void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
void operator()(const Array< OneD, const NekDouble > &entry0, Array< OneD, NekDouble > &entry1, Array< OneD, NekDouble > &entry2, Array< OneD, NekDouble > &entry3, Array< OneD, NekDouble > &wsp) override final
Perform operation.
~IProductWRTDerivBase_IterPerExp() final
Inner product operator using operator using matrix free operators.
~IProductWRTDerivBase_MatrixFree() final
IProductWRTDerivBase_MatrixFree(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) override final
void operator()(const Array< OneD, const NekDouble > &entry0, Array< OneD, NekDouble > &entry1, Array< OneD, NekDouble > &entry2, Array< OneD, NekDouble > &entry3, Array< OneD, NekDouble > &wsp) override final
Perform operation.
std::shared_ptr< MatrixFree::IProductWRTDerivBase > m_oper
virtual void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
Inner product WRT deriv base operator using LocalRegions implementation.
vector< StdRegions::StdExpansionSharedPtr > m_expList
IProductWRTDerivBase_NoCollection(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) override final
~IProductWRTDerivBase_NoCollection() final
virtual void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
void operator()(const Array< OneD, const NekDouble > &entry0, Array< OneD, NekDouble > &entry1, Array< OneD, NekDouble > &entry2, Array< OneD, NekDouble > &entry3, Array< OneD, NekDouble > &wsp) override final
Perform operation.
Inner product WRT deriv base operator using standard matrix approach.
Array< OneD, const NekDouble > m_jac
~IProductWRTDerivBase_StdMat() final
Array< TwoD, const NekDouble > m_derivFac
void operator()(const Array< OneD, const NekDouble > &entry0, Array< OneD, NekDouble > &entry1, Array< OneD, NekDouble > &entry2, Array< OneD, NekDouble > &entry3, Array< OneD, NekDouble > &wsp) override final
Perform operation.
Array< OneD, DNekMatSharedPtr > m_iProdWRTStdDBase
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) override final
virtual void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
IProductWRTDerivBase_StdMat(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
Inner product WRT deriv base operator using sum-factorisation (Hex)
Array< OneD, const NekDouble > m_derbase1
virtual void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
Array< OneD, const NekDouble > m_jacWStdW
Array< OneD, const NekDouble > m_base2
IProductWRTDerivBase_SumFac_Hex(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) override final
Array< TwoD, const NekDouble > m_derivFac
Array< OneD, const NekDouble > m_derbase2
Array< OneD, const NekDouble > m_derbase0
Array< OneD, const NekDouble > m_base1
Array< OneD, const NekDouble > m_base0
~IProductWRTDerivBase_SumFac_Hex() final
void operator()(const Array< OneD, const NekDouble > &entry0, Array< OneD, NekDouble > &entry1, Array< OneD, NekDouble > &entry2, Array< OneD, NekDouble > &entry3, Array< OneD, NekDouble > &wsp) override final
Perform operation.
Inner product WRT deriv base operator using sum-factorisation (Prism)
virtual void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
Array< OneD, const NekDouble > m_base2
Array< OneD, const NekDouble > m_derbase2
Array< OneD, const NekDouble > m_derbase0
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) override final
Array< OneD, const NekDouble > m_jacWStdW
void operator()(const Array< OneD, const NekDouble > &entry0, Array< OneD, NekDouble > &entry1, Array< OneD, NekDouble > &entry2, Array< OneD, NekDouble > &entry3, Array< OneD, NekDouble > &wsp) override final
~IProductWRTDerivBase_SumFac_Prism() final
IProductWRTDerivBase_SumFac_Prism(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
Array< OneD, const NekDouble > m_base1
Array< OneD, NekDouble > m_fac0
Array< OneD, const NekDouble > m_derbase1
Array< OneD, NekDouble > m_fac1
Array< OneD, const NekDouble > m_base0
Array< TwoD, const NekDouble > m_derivFac
Inner product WRT deriv base operator using sum-factorisation (Pyr)
Array< TwoD, const NekDouble > m_derivFac
Array< OneD, const NekDouble > m_base2
Array< OneD, const NekDouble > m_base1
void operator()(const Array< OneD, const NekDouble > &entry0, Array< OneD, NekDouble > &entry1, Array< OneD, NekDouble > &entry2, Array< OneD, NekDouble > &entry3, Array< OneD, NekDouble > &wsp) override final
Array< OneD, NekDouble > m_fac0
Array< OneD, const NekDouble > m_derbase1
~IProductWRTDerivBase_SumFac_Pyr() final
Array< OneD, NekDouble > m_fac1
Array< OneD, const NekDouble > m_jacWStdW
Array< OneD, const NekDouble > m_derbase0
virtual void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
Array< OneD, const NekDouble > m_base0
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) override final
IProductWRTDerivBase_SumFac_Pyr(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
Array< OneD, NekDouble > m_fac2
Array< OneD, const NekDouble > m_derbase2
Inner product WRT deriv base operator using sum-factorisation (Quad)
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) override final
Array< TwoD, const NekDouble > m_derivFac
Array< OneD, const NekDouble > m_base0
Array< OneD, const NekDouble > m_derbase1
Array< OneD, const NekDouble > m_derbase0
virtual void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
void operator()(const Array< OneD, const NekDouble > &entry0, Array< OneD, NekDouble > &entry1, Array< OneD, NekDouble > &entry2, Array< OneD, NekDouble > &entry3, Array< OneD, NekDouble > &wsp) override final
Perform operation.
Array< OneD, const NekDouble > m_jacWStdW
IProductWRTDerivBase_SumFac_Quad(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
Array< OneD, const NekDouble > m_base1
~IProductWRTDerivBase_SumFac_Quad() final
Inner product WRT deriv base operator using sum-factorisation (Segment)
~IProductWRTDerivBase_SumFac_Seg() final
void operator()(const Array< OneD, const NekDouble > &entry0, Array< OneD, NekDouble > &entry1, Array< OneD, NekDouble > &entry2, Array< OneD, NekDouble > &entry3, Array< OneD, NekDouble > &wsp) override final
Perform operation.
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) override final
Array< OneD, const NekDouble > m_jacWStdW
Array< OneD, const NekDouble > m_derbase0
virtual void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
IProductWRTDerivBase_SumFac_Seg(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
Array< TwoD, const NekDouble > m_derivFac
Inner product WRT deriv base operator using sum-factorisation (Tet)
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) override final
virtual void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
Array< OneD, NekDouble > m_fac2
Array< OneD, NekDouble > m_fac1
Array< OneD, const NekDouble > m_base2
IProductWRTDerivBase_SumFac_Tet(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
Array< OneD, const NekDouble > m_base0
Array< OneD, NekDouble > m_fac3
Array< OneD, NekDouble > m_fac0
Array< OneD, const NekDouble > m_jacWStdW
Array< TwoD, const NekDouble > m_derivFac
Array< OneD, const NekDouble > m_derbase1
Array< OneD, const NekDouble > m_base1
Array< OneD, const NekDouble > m_derbase0
Array< OneD, const NekDouble > m_derbase2
Inner product WRT deriv base operator using sum-factorisation (Tri)
Array< OneD, NekDouble > m_fac0
Array< OneD, const NekDouble > m_base0
Array< OneD, const NekDouble > m_base1
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) override final
~IProductWRTDerivBase_SumFac_Tri() final
void operator()(const Array< OneD, const NekDouble > &entry0, Array< OneD, NekDouble > &entry1, Array< OneD, NekDouble > &entry2, Array< OneD, NekDouble > &entry3, Array< OneD, NekDouble > &wsp) override final
Array< OneD, const NekDouble > m_jacWStdW
Array< OneD, NekDouble > m_fac1
Array< TwoD, const NekDouble > m_derivFac
Array< OneD, const NekDouble > m_derbase0
virtual void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
IProductWRTDerivBase_SumFac_Tri(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
Array< OneD, const NekDouble > m_derbase1
bool m_isPadded
flag for padding
unsigned int m_nElmtPad
size after padding
unsigned short m_coordim
coordinates dimension
Array< OneD, NekDouble > m_output
Array< OneD, Array< OneD, NekDouble > > m_input
padded input/output vectors
Base class for operators on a collection of elements.
StdRegions::StdExpansionSharedPtr m_stdExp
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
tBaseSharedPtr CreateInstance(tKey idKey, tParam... args)
Create an instance of the class referred to by idKey.
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
static void Dgemm(const char &transa, const char &transb, const int &m, const int &n, const int &k, const double &alpha, const double *a, const int &lda, const double *b, const int &ldb, const double &beta, double *c, const int &ldc)
BLAS level 3: Matrix-matrix multiply C = A x B where op(A)[m x k], op(B)[k x n], C[m x n] DGEMM perfo...
void TetIProduct(bool sortTopEdge, int numElmt, int nquad0, int nquad1, int nquad2, int nmodes0, int nmodes1, int nmodes2, const Array< OneD, const NekDouble > &base0, const Array< OneD, const NekDouble > &base1, const Array< OneD, const NekDouble > &base2, const Array< OneD, const NekDouble > &jac, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
void PyrIProduct(bool sortTopVert, int numElmt, int nquad0, int nquad1, int nquad2, int nmodes0, int nmodes1, int nmodes2, const Array< OneD, const NekDouble > &base0, const Array< OneD, const NekDouble > &base1, const Array< OneD, const NekDouble > &base2, const Array< OneD, const NekDouble > &jac, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
void TriIProduct(bool sortTopVertex, int numElmt, int nquad0, int nquad1, int nmodes0, int nmodes1, const Array< OneD, const NekDouble > &base0, const Array< OneD, const NekDouble > &base1, const Array< OneD, const NekDouble > &jac, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
std::tuple< LibUtilities::ShapeType, OperatorType, ImplementationType, ExpansionIsNodal > OperatorKey
Key for describing an Operator.
void QuadIProduct(bool colldir0, bool colldir1, int numElmt, int nquad0, int nquad1, int nmodes0, int nmodes1, const Array< OneD, const NekDouble > &base0, const Array< OneD, const NekDouble > &base1, const Array< OneD, const NekDouble > &jac, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
std::shared_ptr< CoalescedGeomData > CoalescedGeomDataSharedPtr
OperatorFactory & GetOperatorFactory()
Returns the singleton Operator factory object.
void PrismIProduct(bool sortTopVert, int numElmt, int nquad0, int nquad1, int nquad2, int nmodes0, int nmodes1, int nmodes2, const Array< OneD, const NekDouble > &base0, const Array< OneD, const NekDouble > &base1, const Array< OneD, const NekDouble > &base2, const Array< OneD, const NekDouble > &jac, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
void HexIProduct(bool colldir0, bool colldir1, bool colldir2, int numElmt, int nquad0, int nquad1, int nquad2, int nmodes0, int nmodes1, int nmodes2, const Array< OneD, const NekDouble > &base0, const Array< OneD, const NekDouble > &base1, const Array< OneD, const NekDouble > &base2, const Array< OneD, const NekDouble > &jac, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
std::vector< PointsKey > PointsKeyVector
@ eModified_A
Principle Modified Functions .
StdRegions::ConstFactorMap factors
The above copyright notice and this permission notice shall be included.
void Vmul(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Multiply vector z = x*y.
void Svtvp(int n, const T alpha, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
svtvp (scalar times vector plus vector): z = alpha*x + y
void Vvtvp(int n, const T *w, const int incw, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
vvtvp (vector times vector plus vector): z = w*x + y
void Vadd(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Add vector z = x+y.
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*x.
void Zero(int n, T *x, const int incx)
Zero vector.
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)