39#include <MatrixFreeOps/Operator.hpp>
89 int nPhys =
m_stdExp->GetTotPoints();
102 for (
int i = 0; i <
m_dim; ++i)
104 tmp[i] = wsp + i * ntot;
113 for (
int i = 0; i <
m_dim; ++i)
119 tmp[i], 1, tmp[i], 1);
131 for (
int i = 0; i <
m_dim; ++i)
134 t = tmp[i] + e *
m_nqe, 1);
139 1, t = tmp[i] + e *
m_nqe, 1);
144 t = tmp[0] + e *
m_nqe, 1);
152 output.get(), nmodes);
155 for (
int i = 1; i <
m_dim; ++i)
167 t = tmp[i] + e *
m_nqe, 1);
174 1.0, output.get(), nmodes);
187 [[maybe_unused]]
int coll_phys_offset)
override
189 ASSERTL0(
false,
"Not valid for this operator.");
201 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
205 m_dim = pCollExp[0]->GetShapeDimension();
209 int nmodes =
m_stdExp->GetNcoeffs();
213 for (
int i = 0; i <
m_dim; ++i)
218 for (
int j = 0; j <
m_nqe; ++j)
222 m_stdExp->IProductWRTDerivBase(i, tmp, tmp1);
228 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
229 m_jac = pGeomData->GetJac(pCollExp);
235OperatorKey IProductWRTDerivBase_StdMat::m_typeArr[] = {
238 IProductWRTDerivBase_StdMat::create,
"IProductWRTDerivBase_StdMat_Seg"),
241 IProductWRTDerivBase_StdMat::create,
"IProductWRTDerivBase_StdMat_Tri"),
244 IProductWRTDerivBase_StdMat::create,
245 "IProductWRTDerivBase_StdMat_NodalTri"),
248 IProductWRTDerivBase_StdMat::create,
249 "IProductWRTDerivBase_StdMat_Quad"),
252 IProductWRTDerivBase_StdMat::create,
"IProductWRTDerivBase_StdMat_Tet"),
255 IProductWRTDerivBase_StdMat::create,
256 "IProductWRTDerivBase_StdMat_NodalTet"),
259 IProductWRTDerivBase_StdMat::create,
"IProductWRTDerivBase_StdMat_Pyr"),
262 IProductWRTDerivBase_StdMat::create,
263 "IProductWRTDerivBase_StdMat_Prism"),
266 IProductWRTDerivBase_StdMat::create,
267 "IProductWRTDerivBase_StdMat_NodalPrism"),
270 IProductWRTDerivBase_StdMat::create,
"IProductWRTDerivBase_StdMat_Hex"),
273 IProductWRTDerivBase_StdMat::create,
274 "IProductWRTDerivBase_SumFac_Pyr")};
353 (*m_oper)(input, output);
366 [[maybe_unused]]
int coll_phys_offset)
override
368 ASSERTL0(
false,
"Not valid for this operator.");
372 std::shared_ptr<MatrixFree::IProductWRTDerivBase>
m_oper;
375 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
379 pCollExp[0]->GetStdExp()->GetTotPoints(),
380 pCollExp[0]->GetStdExp()->GetNcoeffs(),
385 const auto dim = pCollExp[0]->GetStdExp()->GetShapeDimension();
388 std::vector<LibUtilities::BasisSharedPtr> basis(dim);
389 for (
unsigned int i = 0; i < dim; ++i)
391 basis[i] = pCollExp[0]->GetBasis(i);
395 auto shapeType = pCollExp[0]->GetStdExp()->DetShapeType();
398 std::string op_string =
"IProductWRTDerivBase";
399 op_string += MatrixFree::GetOpstring(shapeType,
m_isDeformed);
404 oper->SetJac(pGeomData->GetJacInterLeave(pCollExp,
m_nElmtPad));
407 oper->SetDF(pGeomData->GetDerivFactorsInterLeave(pCollExp,
m_nElmtPad));
410 std::dynamic_pointer_cast<MatrixFree::IProductWRTDerivBase>(oper);
416OperatorKey IProductWRTDerivBase_MatrixFree::m_typeArr[] = {
419 IProductWRTDerivBase_MatrixFree::create,
420 "IProductWRTDerivBase_MatrixFree_Seg"),
423 IProductWRTDerivBase_MatrixFree::create,
424 "IProductWRTDerivBase_MatrixFree_Quad"),
427 IProductWRTDerivBase_MatrixFree::create,
428 "IProductWRTDerivBase_MatrixFree_Tri"),
431 IProductWRTDerivBase_MatrixFree::create,
432 "IProductWRTDerivBase_MatrixFree_Hex"),
435 IProductWRTDerivBase_MatrixFree::create,
436 "IProductWRTDerivBase_MatrixFree_Prism"),
439 IProductWRTDerivBase_MatrixFree::create,
440 "IProductWRTDerivBase_MatrixFree_Pyr"),
443 IProductWRTDerivBase_MatrixFree::create,
444 "IProductWRTDerivBase_MatrixFree_Tet")};
463 unsigned int nPhys =
m_stdExp->GetTotPoints();
465 unsigned int nmodes =
m_stdExp->GetNcoeffs();
466 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
477 for (
int i = 0; i <
m_dim; ++i)
479 tmp[i] = wsp + i * nmax;
487 for (
int i = 0; i <
m_dim; ++i)
493 tmp[i], 1, tmp[i], 1);
505 for (
int i = 0; i <
m_dim; ++i)
508 t = tmp[i] + e *
m_nqe, 1);
513 1, t = tmp[i] + e *
m_nqe, 1);
518 t = tmp[0] + e *
m_nqe, 1);
524 m_stdExp->IProductWRTDerivBase(0, tmp[0] + n * nPhys,
525 tmp1 = output + n * nmodes);
529 for (
int i = 1; i <
m_dim; ++i)
542 t = tmp[i] + e *
m_nqe, 1);
548 m_stdExp->IProductWRTDerivBase(i, tmp[i] + n * nPhys, tmp[0]);
549 Vmath::Vadd(nmodes, tmp[0], 1, output + n * nmodes, 1,
550 tmp1 = output + n * nmodes, 1);
564 [[maybe_unused]]
int coll_phys_offset)
override
566 ASSERTL0(
false,
"Not valid for this operator.");
577 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
581 m_dim = pCollExp[0]->GetShapeDimension();
586 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
587 m_jac = pGeomData->GetJac(pCollExp);
593OperatorKey IProductWRTDerivBase_IterPerExp::m_typeArr[] = {
596 IProductWRTDerivBase_IterPerExp::create,
597 "IProductWRTDerivBase_IterPerExp_Seg"),
600 IProductWRTDerivBase_IterPerExp::create,
601 "IProductWRTDerivBase_IterPerExp_Tri"),
604 IProductWRTDerivBase_IterPerExp::create,
605 "IProductWRTDerivBase_IterPerExp_NodalTri"),
608 IProductWRTDerivBase_IterPerExp::create,
609 "IProductWRTDerivBase_IterPerExp_Quad"),
612 IProductWRTDerivBase_IterPerExp::create,
613 "IProductWRTDerivBase_IterPerExp_Tet"),
616 IProductWRTDerivBase_IterPerExp::create,
617 "IProductWRTDerivBase_IterPerExp_NodalTet"),
620 IProductWRTDerivBase_IterPerExp::create,
621 "IProductWRTDerivBase_IterPerExp_Pyr"),
624 IProductWRTDerivBase_IterPerExp::create,
625 "IProductWRTDerivBase_IterPerExp_Prism"),
628 IProductWRTDerivBase_IterPerExp::create,
629 "IProductWRTDerivBase_IterPerExp_NodalPrism"),
632 IProductWRTDerivBase_IterPerExp::create,
633 "IProductWRTDerivBase_IterPerExp_Hex")};
653 unsigned int nmodes =
m_expList[0]->GetNcoeffs();
654 unsigned int nPhys =
m_expList[0]->GetTotPoints();
667 m_expList[n]->IProductWRTDerivBase(0, in[0] + n * nPhys,
668 tmp1 = output + n * nmodes);
671 for (
int i = 1; i <
m_dim; ++i)
675 m_expList[n]->IProductWRTDerivBase(i, in[i] + n * nPhys, tmp);
677 Vmath::Vadd(nmodes, tmp, 1, output + n * nmodes, 1,
678 tmp1 = output + n * nmodes, 1);
692 [[maybe_unused]]
int coll_phys_offset)
override
694 ASSERTL0(
false,
"Not valid for this operator.");
704 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
709 m_dim = pCollExp[0]->GetNumBases();
715OperatorKey IProductWRTDerivBase_NoCollection::m_typeArr[] = {
718 IProductWRTDerivBase_NoCollection::create,
719 "IProductWRTDerivBase_NoCollection_Seg"),
722 IProductWRTDerivBase_NoCollection::create,
723 "IProductWRTDerivBase_NoCollection_Tri"),
726 IProductWRTDerivBase_NoCollection::create,
727 "IProductWRTDerivBase_NoCollection_NodalTri"),
731 IProductWRTDerivBase_NoCollection::create,
732 "IProductWRTDerivBase_NoCollection_Quad"),
735 IProductWRTDerivBase_NoCollection::create,
736 "IProductWRTDerivBase_NoCollection_Tet"),
739 IProductWRTDerivBase_NoCollection::create,
740 "IProductWRTDerivBase_NoCollection_NodalTet"),
743 IProductWRTDerivBase_NoCollection::create,
744 "IProductWRTDerivBase_NoCollection_Pyr"),
747 IProductWRTDerivBase_NoCollection::create,
748 "IProductWRTDerivBase_NoCollection_Prism"),
751 IProductWRTDerivBase_NoCollection::create,
752 "IProductWRTDerivBase_NoCollection_NodalPrism"),
755 IProductWRTDerivBase_NoCollection::create,
756 "IProductWRTDerivBase_NoCollection_Hex")};
832 [[maybe_unused]]
int coll_phys_offset)
override
834 ASSERTL0(
false,
"Not valid for this operator.");
847 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
856 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
857 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
862OperatorKey IProductWRTDerivBase_SumFac_Seg::m_type =
865 IProductWRTDerivBase_SumFac_Seg::create,
866 "IProductWRTDerivBase_SumFac_Seg");
885 unsigned int nPhys =
m_stdExp->GetTotPoints();
887 unsigned int nmodes =
m_stdExp->GetNcoeffs();
888 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
897 output = (
m_coordim == 2) ? entry2 : entry3;
901 wsp1 = wsp + 2 * nmax;
906 for (
int i = 0; i < 2; ++i)
912 tmp[i], 1, tmp[i], 1);
922 for (
int i = 0; i < 2; ++i)
925 t = tmp[i] + e *
m_nqe, 1);
930 1, t = tmp[i] + e *
m_nqe, 1);
938 tmp[0], output, wsp1);
943 tmp[1], tmp[0], wsp1);
957 [[maybe_unused]]
int coll_phys_offset)
override
959 ASSERTL0(
false,
"Not valid for this operator.");
979 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
994 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
995 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
1002OperatorKey IProductWRTDerivBase_SumFac_Quad::m_type =
1005 IProductWRTDerivBase_SumFac_Quad::create,
1006 "IProductWRTDerivBase_IterPerExp_Quad");
1056 unsigned int nPhys =
m_stdExp->GetTotPoints();
1058 unsigned int nmodes =
m_stdExp->GetNcoeffs();
1059 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
1068 output = (
m_coordim == 2) ? entry2 : entry3;
1071 tmp[1] = wsp + nmax;
1072 wsp1 = wsp + 2 * nmax;
1076 for (
int i = 0; i < 2; ++i)
1082 tmp[i], 1, tmp[i], 1);
1092 for (
int i = 0; i < 2; ++i)
1095 t = tmp[i] + e *
m_nqe, 1);
1100 1, t = tmp[i] + e *
m_nqe, 1);
1111 tmp[0].get() + i * nPhys, 1);
1115 tmp[0].get() + i * nPhys, 1, tmp[0].get() + i * nPhys,
1141 [[maybe_unused]]
int coll_phys_offset)
override
1143 ASSERTL0(
false,
"Not valid for this operator.");
1166 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
1181 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1182 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
1221OperatorKey IProductWRTDerivBase_SumFac_Tri::m_type =
1224 IProductWRTDerivBase_SumFac_Tri::create,
1225 "IProductWRTDerivBase_IterPerExp_Tri");
1244 unsigned int nPhys =
m_stdExp->GetTotPoints();
1246 unsigned int nmodes =
m_stdExp->GetNcoeffs();
1247 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
1258 for (
int i = 0; i < 3; ++i)
1260 tmp[i] = wsp + i * nmax;
1266 for (
int i = 0; i < 3; ++i)
1269 for (
int j = 1; j < 3; ++j)
1272 tmp[i], 1, tmp[i], 1);
1282 for (
int i = 0; i < 3; ++i)
1285 t = tmp[i] + e *
m_nqe, 1);
1286 for (
int j = 1; j < 3; ++j)
1290 1, t = tmp[i] + e *
m_nqe, 1);
1296 wsp1 = wsp + 3 * nmax;
1326 [[maybe_unused]]
int coll_phys_offset)
override
1328 ASSERTL0(
false,
"Not valid for this operator.");
1352 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
1372 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
1376 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1381OperatorKey IProductWRTDerivBase_SumFac_Hex::m_type =
1384 IProductWRTDerivBase_SumFac_Hex::create,
1385 "IProductWRTDerivBase_SumFac_Hex");
1455 unsigned int nPhys =
m_stdExp->GetTotPoints();
1457 unsigned int nmodes =
m_stdExp->GetNcoeffs();
1458 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
1469 for (
int i = 0; i < 3; ++i)
1471 tmp[i] = wsp + i * nmax;
1477 for (
int i = 0; i < 3; ++i)
1480 for (
int j = 1; j < 3; ++j)
1483 tmp[i], 1, tmp[i], 1);
1493 for (
int i = 0; i < 3; ++i)
1496 t = tmp[i] + e *
m_nqe, 1);
1497 for (
int j = 1; j < 3; ++j)
1501 1, t = tmp[i] + e *
m_nqe, 1);
1507 wsp1 = wsp + 3 * nmax;
1514 tmp[2].get() + i * nPhys, 1, wsp1.get(), 1);
1518 tmp[0].get() + i * nPhys, 1, tmp[0].get() + i * nPhys,
1523 tmp[0].get() + i * nPhys, 1);
1527 tmp[1].get() + i * nPhys, 1, tmp[1].get() + i * nPhys,
1532 tmp[1].get() + i * nPhys, 1);
1560 [[maybe_unused]]
int coll_phys_offset)
override
1562 ASSERTL0(
false,
"Not valid for this operator.");
1588 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
1605 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
1609 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1627 4.0 / ((1 - z1[j]) * (1 - z2[k]));
1650OperatorKey IProductWRTDerivBase_SumFac_Tet::m_type =
1653 IProductWRTDerivBase_SumFac_Tet::create,
1654 "IProductWRTDerivBase_SumFac_Tet");
1719 unsigned int nPhys =
m_stdExp->GetTotPoints();
1721 unsigned int nmodes =
m_stdExp->GetNcoeffs();
1722 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
1733 for (
int i = 0; i < 3; ++i)
1735 tmp[i] = wsp + i * nmax;
1741 for (
int i = 0; i < 3; ++i)
1744 for (
int j = 1; j < 3; ++j)
1747 tmp[i], 1, tmp[i], 1);
1757 for (
int i = 0; i < 3; ++i)
1760 t = tmp[i] + e *
m_nqe, 1);
1761 for (
int j = 1; j < 3; ++j)
1765 1, t = tmp[i] + e *
m_nqe, 1);
1771 wsp1 = wsp + 3 * nmax;
1778 tmp[0].get() + i * nPhys, 1);
1782 tmp[0].get() + i * nPhys, 1, tmp[0].get() + i * nPhys,
1811 [[maybe_unused]]
int coll_phys_offset)
override
1813 ASSERTL0(
false,
"Not valid for this operator.");
1837 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
1854 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
1858 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1886 (1 + z0[i]) / (1 - z2[k]);
1894OperatorKey IProductWRTDerivBase_SumFac_Prism::m_type =
1897 IProductWRTDerivBase_SumFac_Prism::create,
1898 "IProductWRTDerivBase_SumFac_Prism");
1970 unsigned int nPhys =
m_stdExp->GetTotPoints();
1972 unsigned int nmodes =
m_stdExp->GetNcoeffs();
1973 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
1984 for (
int i = 0; i < 3; ++i)
1986 tmp[i] = wsp + i * nmax;
1992 for (
int i = 0; i < 3; ++i)
1995 for (
int j = 1; j < 3; ++j)
1998 tmp[i], 1, tmp[i], 1);
2008 for (
int i = 0; i < 3; ++i)
2011 t = tmp[i] + e *
m_nqe, 1);
2012 for (
int j = 1; j < 3; ++j)
2016 1, t = tmp[i] + e *
m_nqe, 1);
2022 wsp1 = wsp + 3 * nmax;
2029 tmp[0].get() + i * nPhys, 1);
2033 tmp[0].get() + i * nPhys, 1, tmp[0].get() + i * nPhys,
2038 tmp[1].get() + i * nPhys, 1);
2042 tmp[1].get() + i * nPhys, 1, tmp[1].get() + i * nPhys,
2071 [[maybe_unused]]
int coll_phys_offset)
override
2073 ASSERTL0(
false,
"Not valid for this operator.");
2098 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
2115 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
2119 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
2149 (1 + z0[i]) / (1 - z2[k]);
2152 (1 + z1[j]) / (1 - z2[k]);
2160OperatorKey IProductWRTDerivBase_SumFac_Pyr::m_type =
2163 IProductWRTDerivBase_SumFac_Pyr::create,
2164 "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 deriv base help class to calculate the size of the collection that is given as an input...
IProductWRTDerivBase_Helper()
Inner product WRT deriv base operator using element-wise operation.
Array< TwoD, const NekDouble > m_derivFac
void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
IProductWRTDerivBase_IterPerExp(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) final
Array< OneD, const NekDouble > m_jac
~IProductWRTDerivBase_IterPerExp() final=default
Inner product operator using operator using matrix free operators.
IProductWRTDerivBase_MatrixFree(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
std::shared_ptr< MatrixFree::IProductWRTDerivBase > m_oper
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) final
~IProductWRTDerivBase_MatrixFree() final=default
Inner product WRT deriv base operator using LocalRegions implementation.
vector< StdRegions::StdExpansionSharedPtr > m_expList
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) final
IProductWRTDerivBase_NoCollection(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
~IProductWRTDerivBase_NoCollection() final=default
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 standard matrix approach.
Array< OneD, const NekDouble > m_jac
Array< TwoD, const NekDouble > m_derivFac
Array< OneD, DNekMatSharedPtr > m_iProdWRTStdDBase
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) final
void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
~IProductWRTDerivBase_StdMat() final=default
IProductWRTDerivBase_StdMat(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
Inner product WRT deriv base operator using sum-factorisation (Hex)
void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
Array< OneD, const NekDouble > m_derbase1
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) final
Array< OneD, const NekDouble > m_jacWStdW
Array< OneD, const NekDouble > m_base2
IProductWRTDerivBase_SumFac_Hex(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
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=default
Inner product WRT deriv base operator using sum-factorisation (Prism)
Array< OneD, const NekDouble > m_base2
Array< OneD, const NekDouble > m_derbase2
Array< OneD, const NekDouble > m_derbase0
void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
Array< OneD, const NekDouble > m_jacWStdW
IProductWRTDerivBase_SumFac_Prism(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
Array< OneD, const NekDouble > m_base1
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) final
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
~IProductWRTDerivBase_SumFac_Prism() final=default
Inner product WRT deriv base operator using sum-factorisation (Pyr)
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) final
Array< TwoD, const NekDouble > m_derivFac
Array< OneD, const NekDouble > m_base2
Array< OneD, const NekDouble > m_base1
Array< OneD, NekDouble > m_fac0
Array< OneD, const NekDouble > m_derbase1
~IProductWRTDerivBase_SumFac_Pyr() final=default
Array< OneD, NekDouble > m_fac1
Array< OneD, const NekDouble > m_jacWStdW
Array< OneD, const NekDouble > m_derbase0
Array< OneD, const NekDouble > m_base0
void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
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) final
~IProductWRTDerivBase_SumFac_Quad() final=default
Array< TwoD, const NekDouble > m_derivFac
Array< OneD, const NekDouble > m_base0
Array< OneD, const NekDouble > m_derbase1
void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
Array< OneD, const NekDouble > m_derbase0
Array< OneD, const NekDouble > m_jacWStdW
IProductWRTDerivBase_SumFac_Quad(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
Array< OneD, const NekDouble > m_base1
Inner product WRT deriv base operator using sum-factorisation (Segment)
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) final
Array< OneD, const NekDouble > m_jacWStdW
Array< OneD, const NekDouble > m_derbase0
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)
~IProductWRTDerivBase_SumFac_Seg() final=default
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) final
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
void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
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
Array< OneD, const NekDouble > m_jacWStdW
Array< OneD, NekDouble > m_fac1
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) final
void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
Array< TwoD, const NekDouble > m_derivFac
Array< OneD, const NekDouble > m_derbase0
IProductWRTDerivBase_SumFac_Tri(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
~IProductWRTDerivBase_SumFac_Tri() final=default
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
unsigned int m_numElmt
number of elements that the operator is applied on
unsigned int m_outputSize
number of modes or quadrature points that are taken as output from an operator
unsigned int m_inputSize
number of modes or quadrature points that are passed as input to an operator
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)
@ eModified_A
Principle Modified Functions .
StdRegions::ConstFactorMap factors
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)