39#include <MatrixFreeOps/Operator.hpp>
92 int nPhys =
m_stdExp->GetTotPoints();
105 for (
int i = 0; i <
m_dim; ++i)
107 tmp[i] = wsp + i * ntot;
116 for (
int i = 0; i <
m_dim; ++i)
122 tmp[i], 1, tmp[i], 1);
134 for (
int i = 0; i <
m_dim; ++i)
137 t = tmp[i] + e *
m_nqe, 1);
142 1, t = tmp[i] + e *
m_nqe, 1);
147 t = tmp[0] + e *
m_nqe, 1);
155 output.data(), nmodes);
158 for (
int i = 1; i <
m_dim; ++i)
170 t = tmp[i] + e *
m_nqe, 1);
177 1.0, output.data(), nmodes);
198 vector<LocalRegions::ExpansionSharedPtr> pCollExp,
202 m_dim = pCollExp[0]->GetShapeDimension();
206 int nmodes =
m_stdExp->GetNcoeffs();
210 for (
int i = 0; i <
m_dim; ++i)
215 for (
int j = 0; j <
m_nqe; ++j)
219 m_stdExp->IProductWRTDerivBase(i, tmp, tmp1);
225 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
226 m_jac = pGeomData->GetJac(pCollExp);
232OperatorKey IProductWRTDerivBase_StdMat::m_typeArr[] = {
235 IProductWRTDerivBase_StdMat::create,
"IProductWRTDerivBase_StdMat_Seg"),
238 IProductWRTDerivBase_StdMat::create,
"IProductWRTDerivBase_StdMat_Tri"),
241 IProductWRTDerivBase_StdMat::create,
242 "IProductWRTDerivBase_StdMat_NodalTri"),
245 IProductWRTDerivBase_StdMat::create,
246 "IProductWRTDerivBase_StdMat_Quad"),
249 IProductWRTDerivBase_StdMat::create,
"IProductWRTDerivBase_StdMat_Tet"),
252 IProductWRTDerivBase_StdMat::create,
253 "IProductWRTDerivBase_StdMat_NodalTet"),
256 IProductWRTDerivBase_StdMat::create,
"IProductWRTDerivBase_StdMat_Pyr"),
259 IProductWRTDerivBase_StdMat::create,
260 "IProductWRTDerivBase_StdMat_Prism"),
263 IProductWRTDerivBase_StdMat::create,
264 "IProductWRTDerivBase_StdMat_NodalPrism"),
267 IProductWRTDerivBase_StdMat::create,
"IProductWRTDerivBase_StdMat_Hex"),
270 IProductWRTDerivBase_StdMat::create,
271 "IProductWRTDerivBase_SumFac_Pyr")};
317 (*m_oper)(input, output);
329 std::shared_ptr<MatrixFree::IProductWRTDerivBase>
m_oper;
333 vector<LocalRegions::ExpansionSharedPtr> pCollExp,
335 :
Operator(pCollExp, pGeomData, factors),
336 MatrixFreeBase(pCollExp[0]->GetTotPoints(), pCollExp[0]->GetNcoeffs(),
340 const auto dim = pCollExp[0]->GetShapeDimension();
344 std::vector<LibUtilities::BasisSharedPtr> basis(dim);
345 for (
unsigned int i = 0; i < dim; ++i)
347 basis[i] = pCollExp[0]->GetBasis(i);
351 auto shapeType = pCollExp[0]->DetShapeType();
354 std::string op_string =
"IProductWRTDerivBase";
355 op_string += MatrixFree::GetOpstring(shapeType,
m_isDeformed);
356 auto oper = MatrixFree::GetOperatorFactory().CreateInstance(
357 op_string, basis, pCollExp.size());
360 oper->SetUpBdata(basis);
361 oper->SetUpDBdata(basis);
362 oper->SetUpZW(basis);
365 oper->SetJac(pGeomData->GetJacInterLeave(pCollExp,
m_nElmtPad));
368 oper->SetDF(pGeomData->GetDerivFactorsInterLeave(pCollExp,
m_nElmtPad));
371 std::dynamic_pointer_cast<MatrixFree::IProductWRTDerivBase>(oper);
377OperatorKey IProductWRTDerivBase_MatrixFree::m_typeArr[] = {
380 IProductWRTDerivBase_MatrixFree::create,
381 "IProductWRTDerivBase_MatrixFree_Seg"),
384 IProductWRTDerivBase_MatrixFree::create,
385 "IProductWRTDerivBase_MatrixFree_Quad"),
388 IProductWRTDerivBase_MatrixFree::create,
389 "IProductWRTDerivBase_MatrixFree_Tri"),
392 IProductWRTDerivBase_MatrixFree::create,
393 "IProductWRTDerivBase_MatrixFree_Hex"),
396 IProductWRTDerivBase_MatrixFree::create,
397 "IProductWRTDerivBase_MatrixFree_Prism"),
400 IProductWRTDerivBase_MatrixFree::create,
401 "IProductWRTDerivBase_MatrixFree_Pyr"),
404 IProductWRTDerivBase_MatrixFree::create,
405 "IProductWRTDerivBase_MatrixFree_Tet")};
424 unsigned int nPhys =
m_stdExp->GetTotPoints();
426 unsigned int nmodes =
m_stdExp->GetNcoeffs();
438 for (
int i = 0; i <
m_dim; ++i)
440 tmp[i] = wsp + i * nmax;
448 for (
int i = 0; i <
m_dim; ++i)
454 tmp[i], 1, tmp[i], 1);
466 for (
int i = 0; i <
m_dim; ++i)
469 t = tmp[i] + e *
m_nqe, 1);
474 1, t = tmp[i] + e *
m_nqe, 1);
479 t = tmp[0] + e *
m_nqe, 1);
485 m_stdExp->IProductWRTDerivBase(0, tmp[0] + n * nPhys,
486 tmp1 = output + n * nmodes);
490 for (
int i = 1; i <
m_dim; ++i)
503 t = tmp[i] + e *
m_nqe, 1);
509 m_stdExp->IProductWRTDerivBase(i, tmp[i] + n * nPhys, tmp[0]);
510 Vmath::Vadd(nmodes, tmp[0], 1, output + n * nmodes, 1,
511 tmp1 = output + n * nmodes, 1);
532 vector<LocalRegions::ExpansionSharedPtr> pCollExp,
536 m_dim = pCollExp[0]->GetShapeDimension();
541 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
542 m_jac = pGeomData->GetJac(pCollExp);
548OperatorKey IProductWRTDerivBase_IterPerExp::m_typeArr[] = {
551 IProductWRTDerivBase_IterPerExp::create,
552 "IProductWRTDerivBase_IterPerExp_Seg"),
555 IProductWRTDerivBase_IterPerExp::create,
556 "IProductWRTDerivBase_IterPerExp_Tri"),
559 IProductWRTDerivBase_IterPerExp::create,
560 "IProductWRTDerivBase_IterPerExp_NodalTri"),
563 IProductWRTDerivBase_IterPerExp::create,
564 "IProductWRTDerivBase_IterPerExp_Quad"),
567 IProductWRTDerivBase_IterPerExp::create,
568 "IProductWRTDerivBase_IterPerExp_Tet"),
571 IProductWRTDerivBase_IterPerExp::create,
572 "IProductWRTDerivBase_IterPerExp_NodalTet"),
575 IProductWRTDerivBase_IterPerExp::create,
576 "IProductWRTDerivBase_IterPerExp_Pyr"),
579 IProductWRTDerivBase_IterPerExp::create,
580 "IProductWRTDerivBase_IterPerExp_Prism"),
583 IProductWRTDerivBase_IterPerExp::create,
584 "IProductWRTDerivBase_IterPerExp_NodalPrism"),
587 IProductWRTDerivBase_IterPerExp::create,
588 "IProductWRTDerivBase_IterPerExp_Hex")};
608 unsigned int nmodes =
m_expList[0]->GetNcoeffs();
609 unsigned int nPhys =
m_expList[0]->GetTotPoints();
622 m_expList[n]->IProductWRTDerivBase(0, in[0] + n * nPhys,
623 tmp1 = output + n * nmodes);
630 m_expList[n]->IProductWRTDerivBase(i, in[i] + n * nPhys, tmp);
632 Vmath::Vadd(nmodes, tmp, 1, output + n * nmodes, 1,
633 tmp1 = output + n * nmodes, 1);
653 vector<LocalRegions::ExpansionSharedPtr> pCollExp,
658 m_dim = pCollExp[0]->GetNumBases();
664OperatorKey IProductWRTDerivBase_NoCollection::m_typeArr[] = {
667 IProductWRTDerivBase_NoCollection::create,
668 "IProductWRTDerivBase_NoCollection_Seg"),
671 IProductWRTDerivBase_NoCollection::create,
672 "IProductWRTDerivBase_NoCollection_Tri"),
675 IProductWRTDerivBase_NoCollection::create,
676 "IProductWRTDerivBase_NoCollection_NodalTri"),
680 IProductWRTDerivBase_NoCollection::create,
681 "IProductWRTDerivBase_NoCollection_Quad"),
684 IProductWRTDerivBase_NoCollection::create,
685 "IProductWRTDerivBase_NoCollection_Tet"),
688 IProductWRTDerivBase_NoCollection::create,
689 "IProductWRTDerivBase_NoCollection_NodalTet"),
692 IProductWRTDerivBase_NoCollection::create,
693 "IProductWRTDerivBase_NoCollection_Pyr"),
696 IProductWRTDerivBase_NoCollection::create,
697 "IProductWRTDerivBase_NoCollection_Prism"),
700 IProductWRTDerivBase_NoCollection::create,
701 "IProductWRTDerivBase_NoCollection_NodalPrism"),
704 IProductWRTDerivBase_NoCollection::create,
705 "IProductWRTDerivBase_NoCollection_Hex")};
790 vector<LocalRegions::ExpansionSharedPtr> pCollExp,
799 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
800 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
805OperatorKey IProductWRTDerivBase_SumFac_Seg::m_type =
808 IProductWRTDerivBase_SumFac_Seg::create,
809 "IProductWRTDerivBase_SumFac_Seg");
828 unsigned int nPhys =
m_stdExp->GetTotPoints();
830 unsigned int nmodes =
m_stdExp->GetNcoeffs();
840 output = (
m_coordim == 2) ? entry2 : entry3;
844 wsp1 = wsp + 2 * nmax;
849 for (
int i = 0; i < 2; ++i)
855 tmp[i], 1, tmp[i], 1);
865 for (
int i = 0; i < 2; ++i)
868 t = tmp[i] + e *
m_nqe, 1);
873 1, t = tmp[i] + e *
m_nqe, 1);
881 tmp[0], output, wsp1);
886 tmp[1], tmp[0], wsp1);
916 vector<LocalRegions::ExpansionSharedPtr> pCollExp,
931 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
932 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
939OperatorKey IProductWRTDerivBase_SumFac_Quad::m_type =
942 IProductWRTDerivBase_SumFac_Quad::create,
943 "IProductWRTDerivBase_IterPerExp_Quad");
993 unsigned int nPhys =
m_stdExp->GetTotPoints();
995 unsigned int nmodes =
m_stdExp->GetNcoeffs();
1005 output = (
m_coordim == 2) ? entry2 : entry3;
1008 tmp[1] = wsp + nmax;
1009 wsp1 = wsp + 2 * nmax;
1013 for (
int i = 0; i < 2; ++i)
1019 tmp[i], 1, tmp[i], 1);
1029 for (
int i = 0; i < 2; ++i)
1032 t = tmp[i] + e *
m_nqe, 1);
1037 1, t = tmp[i] + e *
m_nqe, 1);
1048 tmp[0].data() + i * nPhys, 1);
1052 tmp[0].data() + i * nPhys, 1,
1053 tmp[0].data() + i * nPhys, 1);
1097 vector<LocalRegions::ExpansionSharedPtr> pCollExp,
1112 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1113 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
1152OperatorKey IProductWRTDerivBase_SumFac_Tri::m_type =
1155 IProductWRTDerivBase_SumFac_Tri::create,
1156 "IProductWRTDerivBase_IterPerExp_Tri");
1175 unsigned int nPhys =
m_stdExp->GetTotPoints();
1177 unsigned int nmodes =
m_stdExp->GetNcoeffs();
1189 for (
int i = 0; i < 3; ++i)
1191 tmp[i] = wsp + i * nmax;
1197 for (
int i = 0; i < 3; ++i)
1200 for (
int j = 1; j < 3; ++j)
1203 tmp[i], 1, tmp[i], 1);
1213 for (
int i = 0; i < 3; ++i)
1216 t = tmp[i] + e *
m_nqe, 1);
1217 for (
int j = 1; j < 3; ++j)
1221 1, t = tmp[i] + e *
m_nqe, 1);
1227 wsp1 = wsp + 3 * nmax;
1277 vector<LocalRegions::ExpansionSharedPtr> pCollExp,
1297 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
1301 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1306OperatorKey IProductWRTDerivBase_SumFac_Hex::m_type =
1309 IProductWRTDerivBase_SumFac_Hex::create,
1310 "IProductWRTDerivBase_SumFac_Hex");
1380 unsigned int nPhys =
m_stdExp->GetTotPoints();
1382 unsigned int nmodes =
m_stdExp->GetNcoeffs();
1394 for (
int i = 0; i < 3; ++i)
1396 tmp[i] = wsp + i * nmax;
1402 for (
int i = 0; i < 3; ++i)
1405 for (
int j = 1; j < 3; ++j)
1408 tmp[i], 1, tmp[i], 1);
1418 for (
int i = 0; i < 3; ++i)
1421 t = tmp[i] + e *
m_nqe, 1);
1422 for (
int j = 1; j < 3; ++j)
1426 1, t = tmp[i] + e *
m_nqe, 1);
1432 wsp1 = wsp + 3 * nmax;
1439 tmp[2].data() + i * nPhys, 1, wsp1.data(), 1);
1443 tmp[0].data() + i * nPhys, 1,
1444 tmp[0].data() + i * nPhys, 1);
1448 tmp[0].data() + i * nPhys, 1);
1452 tmp[1].data() + i * nPhys, 1,
1453 tmp[1].data() + i * nPhys, 1);
1457 tmp[1].data() + i * nPhys, 1);
1507 vector<LocalRegions::ExpansionSharedPtr> pCollExp,
1524 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
1528 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1546 4.0 / ((1 - z1[j]) * (1 - z2[k]));
1569OperatorKey IProductWRTDerivBase_SumFac_Tet::m_type =
1572 IProductWRTDerivBase_SumFac_Tet::create,
1573 "IProductWRTDerivBase_SumFac_Tet");
1638 unsigned int nPhys =
m_stdExp->GetTotPoints();
1640 unsigned int nmodes =
m_stdExp->GetNcoeffs();
1652 for (
int i = 0; i < 3; ++i)
1654 tmp[i] = wsp + i * nmax;
1660 for (
int i = 0; i < 3; ++i)
1663 for (
int j = 1; j < 3; ++j)
1666 tmp[i], 1, tmp[i], 1);
1676 for (
int i = 0; i < 3; ++i)
1679 t = tmp[i] + e *
m_nqe, 1);
1680 for (
int j = 1; j < 3; ++j)
1684 1, t = tmp[i] + e *
m_nqe, 1);
1690 wsp1 = wsp + 3 * nmax;
1697 tmp[0].data() + i * nPhys, 1);
1701 tmp[0].data() + i * nPhys, 1,
1702 tmp[0].data() + i * nPhys, 1);
1750 vector<LocalRegions::ExpansionSharedPtr> pCollExp,
1767 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
1771 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1799 (1 + z0[i]) / (1 - z2[k]);
1807OperatorKey IProductWRTDerivBase_SumFac_Prism::m_type =
1810 IProductWRTDerivBase_SumFac_Prism::create,
1811 "IProductWRTDerivBase_SumFac_Prism");
1883 unsigned int nPhys =
m_stdExp->GetTotPoints();
1885 unsigned int nmodes =
m_stdExp->GetNcoeffs();
1897 for (
int i = 0; i < 3; ++i)
1899 tmp[i] = wsp + i * nmax;
1905 for (
int i = 0; i < 3; ++i)
1908 for (
int j = 1; j < 3; ++j)
1911 tmp[i], 1, tmp[i], 1);
1921 for (
int i = 0; i < 3; ++i)
1924 t = tmp[i] + e *
m_nqe, 1);
1925 for (
int j = 1; j < 3; ++j)
1929 1, t = tmp[i] + e *
m_nqe, 1);
1935 wsp1 = wsp + 3 * nmax;
1942 tmp[0].data() + i * nPhys, 1);
1946 tmp[0].data() + i * nPhys, 1,
1947 tmp[0].data() + i * nPhys, 1);
1951 tmp[1].data() + i * nPhys, 1);
1955 tmp[1].data() + i * nPhys, 1,
1956 tmp[1].data() + i * nPhys, 1);
2005 vector<LocalRegions::ExpansionSharedPtr> pCollExp,
2022 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
2026 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
2056 (1 + z0[i]) / (1 - z2[k]);
2059 (1 + z1[j]) / (1 - z2[k]);
2067OperatorKey IProductWRTDerivBase_SumFac_Pyr::m_type =
2070 IProductWRTDerivBase_SumFac_Pyr::create,
2071 "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< LocalRegions::ExpansionSharedPtr > 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< LocalRegions::ExpansionSharedPtr > 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.
IProductWRTDerivBase_NoCollection(vector< LocalRegions::ExpansionSharedPtr > 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
vector< LocalRegions::ExpansionSharedPtr > m_expList
~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(vector< LocalRegions::ExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
~IProductWRTDerivBase_StdMat() final=default
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< LocalRegions::ExpansionSharedPtr > 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
IProductWRTDerivBase_SumFac_Prism(vector< LocalRegions::ExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
Array< OneD, const NekDouble > m_derbase2
Array< OneD, const NekDouble > m_derbase0
Array< OneD, const NekDouble > m_jacWStdW
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(vector< LocalRegions::ExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
~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
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(vector< LocalRegions::ExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
~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
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< LocalRegions::ExpansionSharedPtr > 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< LocalRegions::ExpansionSharedPtr > 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
IProductWRTDerivBase_SumFac_Tri(vector< LocalRegions::ExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
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() 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.
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 .
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)
scalarT< T > max(scalarT< T > lhs, scalarT< T > rhs)