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);
195 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
199 m_dim = pCollExp[0]->GetShapeDimension();
203 int nmodes =
m_stdExp->GetNcoeffs();
207 for (
int i = 0; i <
m_dim; ++i)
212 for (
int j = 0; j <
m_nqe; ++j)
216 m_stdExp->IProductWRTDerivBase(i, tmp, tmp1);
222 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
223 m_jac = pGeomData->GetJac(pCollExp);
229OperatorKey IProductWRTDerivBase_StdMat::m_typeArr[] = {
232 IProductWRTDerivBase_StdMat::create,
"IProductWRTDerivBase_StdMat_Seg"),
235 IProductWRTDerivBase_StdMat::create,
"IProductWRTDerivBase_StdMat_Tri"),
238 IProductWRTDerivBase_StdMat::create,
239 "IProductWRTDerivBase_StdMat_NodalTri"),
242 IProductWRTDerivBase_StdMat::create,
243 "IProductWRTDerivBase_StdMat_Quad"),
246 IProductWRTDerivBase_StdMat::create,
"IProductWRTDerivBase_StdMat_Tet"),
249 IProductWRTDerivBase_StdMat::create,
250 "IProductWRTDerivBase_StdMat_NodalTet"),
253 IProductWRTDerivBase_StdMat::create,
"IProductWRTDerivBase_StdMat_Pyr"),
256 IProductWRTDerivBase_StdMat::create,
257 "IProductWRTDerivBase_StdMat_Prism"),
260 IProductWRTDerivBase_StdMat::create,
261 "IProductWRTDerivBase_StdMat_NodalPrism"),
264 IProductWRTDerivBase_StdMat::create,
"IProductWRTDerivBase_StdMat_Hex"),
267 IProductWRTDerivBase_StdMat::create,
268 "IProductWRTDerivBase_SumFac_Pyr")};
347 (*m_oper)(input, output);
360 std::shared_ptr<MatrixFree::IProductWRTDerivBase>
m_oper;
363 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
367 pCollExp[0]->GetStdExp()->GetTotPoints(),
368 pCollExp[0]->GetStdExp()->GetNcoeffs(),
373 const auto dim = pCollExp[0]->GetStdExp()->GetShapeDimension();
376 std::vector<LibUtilities::BasisSharedPtr> basis(dim);
377 for (
unsigned int i = 0; i < dim; ++i)
379 basis[i] = pCollExp[0]->GetBasis(i);
383 auto shapeType = pCollExp[0]->GetStdExp()->DetShapeType();
386 std::string op_string =
"IProductWRTDerivBase";
387 op_string += MatrixFree::GetOpstring(shapeType,
m_isDeformed);
392 oper->SetJac(pGeomData->GetJacInterLeave(pCollExp,
m_nElmtPad));
395 oper->SetDF(pGeomData->GetDerivFactorsInterLeave(pCollExp,
m_nElmtPad));
398 std::dynamic_pointer_cast<MatrixFree::IProductWRTDerivBase>(oper);
404OperatorKey IProductWRTDerivBase_MatrixFree::m_typeArr[] = {
407 IProductWRTDerivBase_MatrixFree::create,
408 "IProductWRTDerivBase_MatrixFree_Seg"),
411 IProductWRTDerivBase_MatrixFree::create,
412 "IProductWRTDerivBase_MatrixFree_Quad"),
415 IProductWRTDerivBase_MatrixFree::create,
416 "IProductWRTDerivBase_MatrixFree_Tri"),
419 IProductWRTDerivBase_MatrixFree::create,
420 "IProductWRTDerivBase_MatrixFree_Hex"),
423 IProductWRTDerivBase_MatrixFree::create,
424 "IProductWRTDerivBase_MatrixFree_Prism"),
427 IProductWRTDerivBase_MatrixFree::create,
428 "IProductWRTDerivBase_MatrixFree_Pyr"),
431 IProductWRTDerivBase_MatrixFree::create,
432 "IProductWRTDerivBase_MatrixFree_Tet")};
451 unsigned int nPhys =
m_stdExp->GetTotPoints();
453 unsigned int nmodes =
m_stdExp->GetNcoeffs();
454 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
465 for (
int i = 0; i <
m_dim; ++i)
467 tmp[i] = wsp + i * nmax;
475 for (
int i = 0; i <
m_dim; ++i)
481 tmp[i], 1, tmp[i], 1);
493 for (
int i = 0; i <
m_dim; ++i)
496 t = tmp[i] + e *
m_nqe, 1);
501 1, t = tmp[i] + e *
m_nqe, 1);
506 t = tmp[0] + e *
m_nqe, 1);
512 m_stdExp->IProductWRTDerivBase(0, tmp[0] + n * nPhys,
513 tmp1 = output + n * nmodes);
517 for (
int i = 1; i <
m_dim; ++i)
530 t = tmp[i] + e *
m_nqe, 1);
536 m_stdExp->IProductWRTDerivBase(i, tmp[i] + n * nPhys, tmp[0]);
537 Vmath::Vadd(nmodes, tmp[0], 1, output + n * nmodes, 1,
538 tmp1 = output + n * nmodes, 1);
559 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
563 m_dim = pCollExp[0]->GetShapeDimension();
568 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
569 m_jac = pGeomData->GetJac(pCollExp);
575OperatorKey IProductWRTDerivBase_IterPerExp::m_typeArr[] = {
578 IProductWRTDerivBase_IterPerExp::create,
579 "IProductWRTDerivBase_IterPerExp_Seg"),
582 IProductWRTDerivBase_IterPerExp::create,
583 "IProductWRTDerivBase_IterPerExp_Tri"),
586 IProductWRTDerivBase_IterPerExp::create,
587 "IProductWRTDerivBase_IterPerExp_NodalTri"),
590 IProductWRTDerivBase_IterPerExp::create,
591 "IProductWRTDerivBase_IterPerExp_Quad"),
594 IProductWRTDerivBase_IterPerExp::create,
595 "IProductWRTDerivBase_IterPerExp_Tet"),
598 IProductWRTDerivBase_IterPerExp::create,
599 "IProductWRTDerivBase_IterPerExp_NodalTet"),
602 IProductWRTDerivBase_IterPerExp::create,
603 "IProductWRTDerivBase_IterPerExp_Pyr"),
606 IProductWRTDerivBase_IterPerExp::create,
607 "IProductWRTDerivBase_IterPerExp_Prism"),
610 IProductWRTDerivBase_IterPerExp::create,
611 "IProductWRTDerivBase_IterPerExp_NodalPrism"),
614 IProductWRTDerivBase_IterPerExp::create,
615 "IProductWRTDerivBase_IterPerExp_Hex")};
635 unsigned int nmodes =
m_expList[0]->GetNcoeffs();
636 unsigned int nPhys =
m_expList[0]->GetTotPoints();
649 m_expList[n]->IProductWRTDerivBase(0, in[0] + n * nPhys,
650 tmp1 = output + n * nmodes);
653 for (
int i = 1; i <
m_dim; ++i)
657 m_expList[n]->IProductWRTDerivBase(i, in[i] + n * nPhys, tmp);
659 Vmath::Vadd(nmodes, tmp, 1, output + n * nmodes, 1,
660 tmp1 = output + n * nmodes, 1);
680 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
685 m_dim = pCollExp[0]->GetNumBases();
691OperatorKey IProductWRTDerivBase_NoCollection::m_typeArr[] = {
694 IProductWRTDerivBase_NoCollection::create,
695 "IProductWRTDerivBase_NoCollection_Seg"),
698 IProductWRTDerivBase_NoCollection::create,
699 "IProductWRTDerivBase_NoCollection_Tri"),
702 IProductWRTDerivBase_NoCollection::create,
703 "IProductWRTDerivBase_NoCollection_NodalTri"),
707 IProductWRTDerivBase_NoCollection::create,
708 "IProductWRTDerivBase_NoCollection_Quad"),
711 IProductWRTDerivBase_NoCollection::create,
712 "IProductWRTDerivBase_NoCollection_Tet"),
715 IProductWRTDerivBase_NoCollection::create,
716 "IProductWRTDerivBase_NoCollection_NodalTet"),
719 IProductWRTDerivBase_NoCollection::create,
720 "IProductWRTDerivBase_NoCollection_Pyr"),
723 IProductWRTDerivBase_NoCollection::create,
724 "IProductWRTDerivBase_NoCollection_Prism"),
727 IProductWRTDerivBase_NoCollection::create,
728 "IProductWRTDerivBase_NoCollection_NodalPrism"),
731 IProductWRTDerivBase_NoCollection::create,
732 "IProductWRTDerivBase_NoCollection_Hex")};
817 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
826 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
827 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
832OperatorKey IProductWRTDerivBase_SumFac_Seg::m_type =
835 IProductWRTDerivBase_SumFac_Seg::create,
836 "IProductWRTDerivBase_SumFac_Seg");
855 unsigned int nPhys =
m_stdExp->GetTotPoints();
857 unsigned int nmodes =
m_stdExp->GetNcoeffs();
858 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
867 output = (
m_coordim == 2) ? entry2 : entry3;
871 wsp1 = wsp + 2 * nmax;
876 for (
int i = 0; i < 2; ++i)
882 tmp[i], 1, tmp[i], 1);
892 for (
int i = 0; i < 2; ++i)
895 t = tmp[i] + e *
m_nqe, 1);
900 1, t = tmp[i] + e *
m_nqe, 1);
908 tmp[0], output, wsp1);
913 tmp[1], tmp[0], wsp1);
943 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
958 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
959 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
966OperatorKey IProductWRTDerivBase_SumFac_Quad::m_type =
969 IProductWRTDerivBase_SumFac_Quad::create,
970 "IProductWRTDerivBase_IterPerExp_Quad");
1020 unsigned int nPhys =
m_stdExp->GetTotPoints();
1022 unsigned int nmodes =
m_stdExp->GetNcoeffs();
1023 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
1032 output = (
m_coordim == 2) ? entry2 : entry3;
1035 tmp[1] = wsp + nmax;
1036 wsp1 = wsp + 2 * nmax;
1040 for (
int i = 0; i < 2; ++i)
1046 tmp[i], 1, tmp[i], 1);
1056 for (
int i = 0; i < 2; ++i)
1059 t = tmp[i] + e *
m_nqe, 1);
1064 1, t = tmp[i] + e *
m_nqe, 1);
1075 tmp[0].get() + i * nPhys, 1);
1079 tmp[0].get() + i * nPhys, 1, tmp[0].get() + i * nPhys,
1124 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
1139 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1140 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
1179OperatorKey IProductWRTDerivBase_SumFac_Tri::m_type =
1182 IProductWRTDerivBase_SumFac_Tri::create,
1183 "IProductWRTDerivBase_IterPerExp_Tri");
1202 unsigned int nPhys =
m_stdExp->GetTotPoints();
1204 unsigned int nmodes =
m_stdExp->GetNcoeffs();
1205 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
1216 for (
int i = 0; i < 3; ++i)
1218 tmp[i] = wsp + i * nmax;
1224 for (
int i = 0; i < 3; ++i)
1227 for (
int j = 1; j < 3; ++j)
1230 tmp[i], 1, tmp[i], 1);
1240 for (
int i = 0; i < 3; ++i)
1243 t = tmp[i] + e *
m_nqe, 1);
1244 for (
int j = 1; j < 3; ++j)
1248 1, t = tmp[i] + e *
m_nqe, 1);
1254 wsp1 = wsp + 3 * nmax;
1304 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
1324 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
1328 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1333OperatorKey IProductWRTDerivBase_SumFac_Hex::m_type =
1336 IProductWRTDerivBase_SumFac_Hex::create,
1337 "IProductWRTDerivBase_SumFac_Hex");
1407 unsigned int nPhys =
m_stdExp->GetTotPoints();
1409 unsigned int nmodes =
m_stdExp->GetNcoeffs();
1410 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
1421 for (
int i = 0; i < 3; ++i)
1423 tmp[i] = wsp + i * nmax;
1429 for (
int i = 0; i < 3; ++i)
1432 for (
int j = 1; j < 3; ++j)
1435 tmp[i], 1, tmp[i], 1);
1445 for (
int i = 0; i < 3; ++i)
1448 t = tmp[i] + e *
m_nqe, 1);
1449 for (
int j = 1; j < 3; ++j)
1453 1, t = tmp[i] + e *
m_nqe, 1);
1459 wsp1 = wsp + 3 * nmax;
1466 tmp[2].get() + i * nPhys, 1, wsp1.get(), 1);
1470 tmp[0].get() + i * nPhys, 1, tmp[0].get() + i * nPhys,
1475 tmp[0].get() + i * nPhys, 1);
1479 tmp[1].get() + i * nPhys, 1, tmp[1].get() + i * nPhys,
1484 tmp[1].get() + i * nPhys, 1);
1534 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
1551 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
1555 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1573 4.0 / ((1 - z1[j]) * (1 - z2[k]));
1596OperatorKey IProductWRTDerivBase_SumFac_Tet::m_type =
1599 IProductWRTDerivBase_SumFac_Tet::create,
1600 "IProductWRTDerivBase_SumFac_Tet");
1665 unsigned int nPhys =
m_stdExp->GetTotPoints();
1667 unsigned int nmodes =
m_stdExp->GetNcoeffs();
1668 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
1679 for (
int i = 0; i < 3; ++i)
1681 tmp[i] = wsp + i * nmax;
1687 for (
int i = 0; i < 3; ++i)
1690 for (
int j = 1; j < 3; ++j)
1693 tmp[i], 1, tmp[i], 1);
1703 for (
int i = 0; i < 3; ++i)
1706 t = tmp[i] + e *
m_nqe, 1);
1707 for (
int j = 1; j < 3; ++j)
1711 1, t = tmp[i] + e *
m_nqe, 1);
1717 wsp1 = wsp + 3 * nmax;
1724 tmp[0].get() + i * nPhys, 1);
1728 tmp[0].get() + i * nPhys, 1, tmp[0].get() + i * nPhys,
1777 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
1794 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
1798 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1826 (1 + z0[i]) / (1 - z2[k]);
1834OperatorKey IProductWRTDerivBase_SumFac_Prism::m_type =
1837 IProductWRTDerivBase_SumFac_Prism::create,
1838 "IProductWRTDerivBase_SumFac_Prism");
1910 unsigned int nPhys =
m_stdExp->GetTotPoints();
1912 unsigned int nmodes =
m_stdExp->GetNcoeffs();
1913 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
1924 for (
int i = 0; i < 3; ++i)
1926 tmp[i] = wsp + i * nmax;
1932 for (
int i = 0; i < 3; ++i)
1935 for (
int j = 1; j < 3; ++j)
1938 tmp[i], 1, tmp[i], 1);
1948 for (
int i = 0; i < 3; ++i)
1951 t = tmp[i] + e *
m_nqe, 1);
1952 for (
int j = 1; j < 3; ++j)
1956 1, t = tmp[i] + e *
m_nqe, 1);
1962 wsp1 = wsp + 3 * nmax;
1969 tmp[0].get() + i * nPhys, 1);
1973 tmp[0].get() + i * nPhys, 1, tmp[0].get() + i * nPhys,
1978 tmp[1].get() + i * nPhys, 1);
1982 tmp[1].get() + i * nPhys, 1, tmp[1].get() + i * nPhys,
2032 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
2049 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
2053 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
2083 (1 + z0[i]) / (1 - z2[k]);
2086 (1 + z1[j]) / (1 - z2[k]);
2094OperatorKey IProductWRTDerivBase_SumFac_Pyr::m_type =
2097 IProductWRTDerivBase_SumFac_Pyr::create,
2098 "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
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)
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
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
~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)
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
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
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
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
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
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
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)