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")};
314 (*m_oper)(input, output);
326 std::shared_ptr<MatrixFree::IProductWRTDerivBase>
m_oper;
330 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
334 pCollExp[0]->GetStdExp()->GetNcoeffs(),
338 const auto dim = pCollExp[0]->GetStdExp()->GetShapeDimension();
342 std::vector<LibUtilities::BasisSharedPtr> basis(dim);
343 for (
unsigned int i = 0; i < dim; ++i)
345 basis[i] = pCollExp[0]->GetBasis(i);
349 auto shapeType = pCollExp[0]->GetStdExp()->DetShapeType();
352 std::string op_string =
"IProductWRTDerivBase";
353 op_string += MatrixFree::GetOpstring(shapeType,
m_isDeformed);
355 op_string, basis, pCollExp.size());
358 oper->SetUpBdata(basis);
359 oper->SetUpDBdata(basis);
360 oper->SetUpZW(basis);
363 oper->SetJac(pGeomData->GetJacInterLeave(pCollExp,
m_nElmtPad));
366 oper->SetDF(pGeomData->GetDerivFactorsInterLeave(pCollExp,
m_nElmtPad));
369 std::dynamic_pointer_cast<MatrixFree::IProductWRTDerivBase>(oper);
375OperatorKey IProductWRTDerivBase_MatrixFree::m_typeArr[] = {
378 IProductWRTDerivBase_MatrixFree::create,
379 "IProductWRTDerivBase_MatrixFree_Seg"),
382 IProductWRTDerivBase_MatrixFree::create,
383 "IProductWRTDerivBase_MatrixFree_Quad"),
386 IProductWRTDerivBase_MatrixFree::create,
387 "IProductWRTDerivBase_MatrixFree_Tri"),
390 IProductWRTDerivBase_MatrixFree::create,
391 "IProductWRTDerivBase_MatrixFree_Hex"),
394 IProductWRTDerivBase_MatrixFree::create,
395 "IProductWRTDerivBase_MatrixFree_Prism"),
398 IProductWRTDerivBase_MatrixFree::create,
399 "IProductWRTDerivBase_MatrixFree_Pyr"),
402 IProductWRTDerivBase_MatrixFree::create,
403 "IProductWRTDerivBase_MatrixFree_Tet")};
422 unsigned int nPhys =
m_stdExp->GetTotPoints();
424 unsigned int nmodes =
m_stdExp->GetNcoeffs();
425 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
436 for (
int i = 0; i <
m_dim; ++i)
438 tmp[i] = wsp + i * nmax;
446 for (
int i = 0; i <
m_dim; ++i)
452 tmp[i], 1, tmp[i], 1);
464 for (
int i = 0; i <
m_dim; ++i)
467 t = tmp[i] + e *
m_nqe, 1);
472 1, t = tmp[i] + e *
m_nqe, 1);
477 t = tmp[0] + e *
m_nqe, 1);
483 m_stdExp->IProductWRTDerivBase(0, tmp[0] + n * nPhys,
484 tmp1 = output + n * nmodes);
488 for (
int i = 1; i <
m_dim; ++i)
501 t = tmp[i] + e *
m_nqe, 1);
507 m_stdExp->IProductWRTDerivBase(i, tmp[i] + n * nPhys, tmp[0]);
508 Vmath::Vadd(nmodes, tmp[0], 1, output + n * nmodes, 1,
509 tmp1 = output + n * nmodes, 1);
530 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
534 m_dim = pCollExp[0]->GetShapeDimension();
539 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
540 m_jac = pGeomData->GetJac(pCollExp);
546OperatorKey IProductWRTDerivBase_IterPerExp::m_typeArr[] = {
549 IProductWRTDerivBase_IterPerExp::create,
550 "IProductWRTDerivBase_IterPerExp_Seg"),
553 IProductWRTDerivBase_IterPerExp::create,
554 "IProductWRTDerivBase_IterPerExp_Tri"),
557 IProductWRTDerivBase_IterPerExp::create,
558 "IProductWRTDerivBase_IterPerExp_NodalTri"),
561 IProductWRTDerivBase_IterPerExp::create,
562 "IProductWRTDerivBase_IterPerExp_Quad"),
565 IProductWRTDerivBase_IterPerExp::create,
566 "IProductWRTDerivBase_IterPerExp_Tet"),
569 IProductWRTDerivBase_IterPerExp::create,
570 "IProductWRTDerivBase_IterPerExp_NodalTet"),
573 IProductWRTDerivBase_IterPerExp::create,
574 "IProductWRTDerivBase_IterPerExp_Pyr"),
577 IProductWRTDerivBase_IterPerExp::create,
578 "IProductWRTDerivBase_IterPerExp_Prism"),
581 IProductWRTDerivBase_IterPerExp::create,
582 "IProductWRTDerivBase_IterPerExp_NodalPrism"),
585 IProductWRTDerivBase_IterPerExp::create,
586 "IProductWRTDerivBase_IterPerExp_Hex")};
606 unsigned int nmodes =
m_expList[0]->GetNcoeffs();
607 unsigned int nPhys =
m_expList[0]->GetTotPoints();
620 m_expList[n]->IProductWRTDerivBase(0, in[0] + n * nPhys,
621 tmp1 = output + n * nmodes);
624 for (
int i = 1; i <
m_dim; ++i)
628 m_expList[n]->IProductWRTDerivBase(i, in[i] + n * nPhys, tmp);
630 Vmath::Vadd(nmodes, tmp, 1, output + n * nmodes, 1,
631 tmp1 = output + n * nmodes, 1);
651 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
656 m_dim = pCollExp[0]->GetNumBases();
662OperatorKey IProductWRTDerivBase_NoCollection::m_typeArr[] = {
665 IProductWRTDerivBase_NoCollection::create,
666 "IProductWRTDerivBase_NoCollection_Seg"),
669 IProductWRTDerivBase_NoCollection::create,
670 "IProductWRTDerivBase_NoCollection_Tri"),
673 IProductWRTDerivBase_NoCollection::create,
674 "IProductWRTDerivBase_NoCollection_NodalTri"),
678 IProductWRTDerivBase_NoCollection::create,
679 "IProductWRTDerivBase_NoCollection_Quad"),
682 IProductWRTDerivBase_NoCollection::create,
683 "IProductWRTDerivBase_NoCollection_Tet"),
686 IProductWRTDerivBase_NoCollection::create,
687 "IProductWRTDerivBase_NoCollection_NodalTet"),
690 IProductWRTDerivBase_NoCollection::create,
691 "IProductWRTDerivBase_NoCollection_Pyr"),
694 IProductWRTDerivBase_NoCollection::create,
695 "IProductWRTDerivBase_NoCollection_Prism"),
698 IProductWRTDerivBase_NoCollection::create,
699 "IProductWRTDerivBase_NoCollection_NodalPrism"),
702 IProductWRTDerivBase_NoCollection::create,
703 "IProductWRTDerivBase_NoCollection_Hex")};
788 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
797 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
798 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
803OperatorKey IProductWRTDerivBase_SumFac_Seg::m_type =
806 IProductWRTDerivBase_SumFac_Seg::create,
807 "IProductWRTDerivBase_SumFac_Seg");
826 unsigned int nPhys =
m_stdExp->GetTotPoints();
828 unsigned int nmodes =
m_stdExp->GetNcoeffs();
829 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
838 output = (
m_coordim == 2) ? entry2 : entry3;
842 wsp1 = wsp + 2 * nmax;
847 for (
int i = 0; i < 2; ++i)
853 tmp[i], 1, tmp[i], 1);
863 for (
int i = 0; i < 2; ++i)
866 t = tmp[i] + e *
m_nqe, 1);
871 1, t = tmp[i] + e *
m_nqe, 1);
879 tmp[0], output, wsp1);
884 tmp[1], tmp[0], wsp1);
914 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
929 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
930 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
937OperatorKey IProductWRTDerivBase_SumFac_Quad::m_type =
940 IProductWRTDerivBase_SumFac_Quad::create,
941 "IProductWRTDerivBase_IterPerExp_Quad");
991 unsigned int nPhys =
m_stdExp->GetTotPoints();
993 unsigned int nmodes =
m_stdExp->GetNcoeffs();
994 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
1003 output = (
m_coordim == 2) ? entry2 : entry3;
1006 tmp[1] = wsp + nmax;
1007 wsp1 = wsp + 2 * nmax;
1011 for (
int i = 0; i < 2; ++i)
1017 tmp[i], 1, tmp[i], 1);
1027 for (
int i = 0; i < 2; ++i)
1030 t = tmp[i] + e *
m_nqe, 1);
1035 1, t = tmp[i] + e *
m_nqe, 1);
1046 tmp[0].get() + i * nPhys, 1);
1050 tmp[0].get() + i * nPhys, 1, tmp[0].get() + i * nPhys,
1095 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
1110 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1111 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
1150OperatorKey IProductWRTDerivBase_SumFac_Tri::m_type =
1153 IProductWRTDerivBase_SumFac_Tri::create,
1154 "IProductWRTDerivBase_IterPerExp_Tri");
1173 unsigned int nPhys =
m_stdExp->GetTotPoints();
1175 unsigned int nmodes =
m_stdExp->GetNcoeffs();
1176 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
1187 for (
int i = 0; i < 3; ++i)
1189 tmp[i] = wsp + i * nmax;
1195 for (
int i = 0; i < 3; ++i)
1198 for (
int j = 1; j < 3; ++j)
1201 tmp[i], 1, tmp[i], 1);
1211 for (
int i = 0; i < 3; ++i)
1214 t = tmp[i] + e *
m_nqe, 1);
1215 for (
int j = 1; j < 3; ++j)
1219 1, t = tmp[i] + e *
m_nqe, 1);
1225 wsp1 = wsp + 3 * nmax;
1275 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
1295 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
1299 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1304OperatorKey IProductWRTDerivBase_SumFac_Hex::m_type =
1307 IProductWRTDerivBase_SumFac_Hex::create,
1308 "IProductWRTDerivBase_SumFac_Hex");
1378 unsigned int nPhys =
m_stdExp->GetTotPoints();
1380 unsigned int nmodes =
m_stdExp->GetNcoeffs();
1381 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
1392 for (
int i = 0; i < 3; ++i)
1394 tmp[i] = wsp + i * nmax;
1400 for (
int i = 0; i < 3; ++i)
1403 for (
int j = 1; j < 3; ++j)
1406 tmp[i], 1, tmp[i], 1);
1416 for (
int i = 0; i < 3; ++i)
1419 t = tmp[i] + e *
m_nqe, 1);
1420 for (
int j = 1; j < 3; ++j)
1424 1, t = tmp[i] + e *
m_nqe, 1);
1430 wsp1 = wsp + 3 * nmax;
1437 tmp[2].get() + i * nPhys, 1, wsp1.get(), 1);
1441 tmp[0].get() + i * nPhys, 1, tmp[0].get() + i * nPhys,
1446 tmp[0].get() + i * nPhys, 1);
1450 tmp[1].get() + i * nPhys, 1, tmp[1].get() + i * nPhys,
1455 tmp[1].get() + i * nPhys, 1);
1505 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
1522 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
1526 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1544 4.0 / ((1 - z1[j]) * (1 - z2[k]));
1567OperatorKey IProductWRTDerivBase_SumFac_Tet::m_type =
1570 IProductWRTDerivBase_SumFac_Tet::create,
1571 "IProductWRTDerivBase_SumFac_Tet");
1636 unsigned int nPhys =
m_stdExp->GetTotPoints();
1638 unsigned int nmodes =
m_stdExp->GetNcoeffs();
1639 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
1650 for (
int i = 0; i < 3; ++i)
1652 tmp[i] = wsp + i * nmax;
1658 for (
int i = 0; i < 3; ++i)
1661 for (
int j = 1; j < 3; ++j)
1664 tmp[i], 1, tmp[i], 1);
1674 for (
int i = 0; i < 3; ++i)
1677 t = tmp[i] + e *
m_nqe, 1);
1678 for (
int j = 1; j < 3; ++j)
1682 1, t = tmp[i] + e *
m_nqe, 1);
1688 wsp1 = wsp + 3 * nmax;
1695 tmp[0].get() + i * nPhys, 1);
1699 tmp[0].get() + i * nPhys, 1, tmp[0].get() + i * nPhys,
1748 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
1765 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
1769 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1797 (1 + z0[i]) / (1 - z2[k]);
1805OperatorKey IProductWRTDerivBase_SumFac_Prism::m_type =
1808 IProductWRTDerivBase_SumFac_Prism::create,
1809 "IProductWRTDerivBase_SumFac_Prism");
1881 unsigned int nPhys =
m_stdExp->GetTotPoints();
1883 unsigned int nmodes =
m_stdExp->GetNcoeffs();
1884 unsigned int nmax = max(ntot,
m_numElmt * nmodes);
1895 for (
int i = 0; i < 3; ++i)
1897 tmp[i] = wsp + i * nmax;
1903 for (
int i = 0; i < 3; ++i)
1906 for (
int j = 1; j < 3; ++j)
1909 tmp[i], 1, tmp[i], 1);
1919 for (
int i = 0; i < 3; ++i)
1922 t = tmp[i] + e *
m_nqe, 1);
1923 for (
int j = 1; j < 3; ++j)
1927 1, t = tmp[i] + e *
m_nqe, 1);
1933 wsp1 = wsp + 3 * nmax;
1940 tmp[0].get() + i * nPhys, 1);
1944 tmp[0].get() + i * nPhys, 1, tmp[0].get() + i * nPhys,
1949 tmp[1].get() + i * nPhys, 1);
1953 tmp[1].get() + i * nPhys, 1, tmp[1].get() + i * nPhys,
2003 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
2020 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
2024 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
2054 (1 + z0[i]) / (1 - z2[k]);
2057 (1 + z1[j]) / (1 - z2[k]);
2065OperatorKey IProductWRTDerivBase_SumFac_Pyr::m_type =
2068 IProductWRTDerivBase_SumFac_Pyr::create,
2069 "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
unsigned int m_nElmtPad
size after padding
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)