38#include <MatrixFreeOps/Operator.hpp>
90 int nPhys =
m_stdExp->GetTotPoints();
99 for (
int i = 0; i <
m_dim; ++i)
101 Diff[i] = wsp + i * ntot;
105 for (
int i = 0; i <
m_dim; ++i)
110 input.get(), nPhys, 0.0, &Diff[i][0], nPhys);
119 for (
int j = 0; j <
m_dim; ++j)
122 out[i], 1, out[i], 1);
134 for (
int j = 0; j <
m_dim; ++j)
138 1, t = out[i] + e *
m_nqe, 1);
149 int nPhys =
m_stdExp->GetTotPoints();
154 for (
int i = 0; i <
m_dim; ++i)
156 Diff[i] = wsp + i * ntot;
160 for (
int i = 0; i <
m_dim; ++i)
165 input.get(), nPhys, 0.0, &Diff[i][0], nPhys);
172 for (
int j = 0; j <
m_dim; ++j)
175 output, 1, output, 1);
183 for (
int j = 0; j <
m_dim; ++j)
186 Diff[j] + e *
m_nqe, 1, output + e *
m_nqe, 1,
187 t = output + e *
m_nqe, 1);
205 int nqtot = pCollExp[0]->GetTotPoints();
206 m_dim = pCollExp[0]->GetShapeDimension();
211 for (
int i = 0; i <
m_dim; ++i)
216 for (
int j = 0; j < nqtot; ++j)
222 &(
m_derivMat[i]->GetPtr())[0] + j * nqtot, 1);
225 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
234 PhysDeriv_StdMat::create,
"PhysDeriv_StdMat_Seg"),
237 PhysDeriv_StdMat::create,
"PhysDeriv_StdMat_Tri"),
240 PhysDeriv_StdMat::create,
"PhysDeriv_StdMat_NodalTri"),
243 PhysDeriv_StdMat::create,
"PhysDeriv_StdMat_Quad"),
246 PhysDeriv_StdMat::create,
"PhysDeriv_StdMat_Tet"),
249 PhysDeriv_StdMat::create,
"PhysDeriv_StdMat_NodalTet"),
252 PhysDeriv_StdMat::create,
"PhysDeriv_StdMat_Pyr"),
255 PhysDeriv_StdMat::create,
"PhysDeriv_StdMat_Prism"),
258 PhysDeriv_StdMat::create,
"PhysDeriv_StdMat_NodalPrism"),
261 PhysDeriv_StdMat::create,
"PhysDeriv_StdMat_Hex"),
264 PhysDeriv_StdMat::create,
"PhysDeriv_SumFac_Pyr")};
336 std::shared_ptr<MatrixFree::PhysDeriv>
m_oper;
343 pCollExp[0]->GetStdExp()->GetTotPoints(),
344 pCollExp[0]->GetStdExp()->GetTotPoints(),
348 bool deformed{pGeomData->IsDeformed(pCollExp)};
349 const auto dim = pCollExp[0]->GetStdExp()->GetShapeDimension();
353 int nOut = pCollExp[0]->GetStdExp()->GetTotPoints();
368 std::vector<LibUtilities::BasisSharedPtr> basis(dim);
369 for (
unsigned int i = 0; i < dim; ++i)
371 basis[i] = pCollExp[0]->GetBasis(i);
375 auto shapeType = pCollExp[0]->GetStdExp()->DetShapeType();
378 std::string op_string =
"PhysDeriv";
379 op_string += MatrixFree::GetOpstring(shapeType, deformed);
384 oper->SetDF(pGeomData->GetDerivFactorsInterLeave(pCollExp,
m_nElmtPad));
386 m_oper = std::dynamic_pointer_cast<MatrixFree::PhysDeriv>(oper);
395 PhysDeriv_MatrixFree::create,
"PhysDeriv_MatrixFree_Seg"),
398 PhysDeriv_MatrixFree::create,
"PhysDeriv_MatrixFree_Tri"),
401 PhysDeriv_MatrixFree::create,
"PhysDeriv_MatrixFree_Quad"),
404 PhysDeriv_MatrixFree::create,
"PhysDeriv_MatrixFree_Hex"),
407 PhysDeriv_MatrixFree::create,
"PhysDeriv_MatrixFree_Prism"),
410 PhysDeriv_MatrixFree::create,
"PhysDeriv_MatrixFree_Pyr"),
413 PhysDeriv_MatrixFree::create,
"PhysDeriv_MatrixFree_Tet")
434 int nPhys =
m_stdExp->GetTotPoints();
443 for (
int i = 0; i <
m_dim; ++i)
445 Diff[i] = wsp + i * ntot;
451 m_stdExp->PhysDeriv(input + i * nPhys, tmp0 = Diff[0] + i * nPhys,
452 tmp1 = Diff[1] + i * nPhys,
453 tmp2 = Diff[2] + i * nPhys);
463 for (
int j = 1; j <
m_dim; ++j)
466 out[i], 1, out[i], 1);
478 Diff[0] + e *
m_nqe, 1, t = out[i] + e *
m_nqe,
480 for (
int j = 1; j <
m_dim; ++j)
484 1, t = out[i] + e *
m_nqe, 1);
495 int nPhys =
m_stdExp->GetTotPoints();
500 for (
int i = 0; i <
m_dim; ++i)
502 Diff[i] = wsp + i * ntot;
508 m_stdExp->PhysDeriv(input + i * nPhys, tmp0 = Diff[0] + i * nPhys,
509 tmp1 = Diff[1] + i * nPhys,
510 tmp2 = Diff[2] + i * nPhys);
516 for (
int j = 0; j <
m_dim; ++j)
519 output, 1, output, 1);
527 for (
int j = 0; j <
m_dim; ++j)
530 Diff[j] + e *
m_nqe, 1, output + e *
m_nqe, 1,
531 t = output + e *
m_nqe, 1);
548 int nqtot = pCollExp[0]->GetTotPoints();
549 m_dim = pCollExp[0]->GetShapeDimension();
552 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
561 PhysDeriv_IterPerExp::create,
"PhysDeriv_IterPerExp_Seg"),
564 PhysDeriv_IterPerExp::create,
"PhysDeriv_IterPerExp_Tri"),
567 PhysDeriv_IterPerExp::create,
"PhysDeriv_IterPerExp_NodalTri"),
570 PhysDeriv_IterPerExp::create,
"PhysDeriv_IterPerExp_Quad"),
573 PhysDeriv_IterPerExp::create,
"PhysDeriv_IterPerExp_Tet"),
576 PhysDeriv_IterPerExp::create,
"PhysDeriv_IterPerExp_NodalTet"),
579 PhysDeriv_IterPerExp::create,
"PhysDeriv_IterPerExp_Pyr"),
582 PhysDeriv_IterPerExp::create,
"PhysDeriv_IterPerExp_Prism"),
585 PhysDeriv_IterPerExp::create,
"PhysDeriv_IterPerExp_NodalPrism"),
588 PhysDeriv_IterPerExp::create,
"PhysDeriv_IterPerExp_Hex")};
607 const int nPhys =
m_expList[0]->GetTotPoints();
611 switch (
m_expList[0]->GetShapeDimension())
617 m_expList[i]->PhysDeriv(input + i * nPhys,
618 tmp0 = output0 + i * nPhys);
626 m_expList[i]->PhysDeriv(input + i * nPhys,
627 tmp0 = output0 + i * nPhys,
628 tmp1 = output1 + i * nPhys);
637 input + i * nPhys, tmp0 = output0 + i * nPhys,
638 tmp1 = output1 + i * nPhys, tmp2 = output2 + i * nPhys);
643 ASSERTL0(
false,
"Unknown dimension.");
651 const int nPhys =
m_expList[0]->GetTotPoints();
657 m_expList[i]->PhysDeriv(dir, input + i * nPhys,
658 tmp = output + i * nPhys);
679 PhysDeriv_NoCollection::create,
"PhysDeriv_NoCollection_Seg"),
682 PhysDeriv_NoCollection::create,
"PhysDeriv_NoCollection_Tri"),
685 PhysDeriv_NoCollection::create,
"PhysDeriv_NoCollection_NodalTri"),
688 PhysDeriv_NoCollection::create,
"PhysDeriv_NoCollection_Quad"),
691 PhysDeriv_NoCollection::create,
"PhysDeriv_NoCollection_Tet"),
694 PhysDeriv_NoCollection::create,
"PhysDeriv_NoCollection_NodalTet"),
697 PhysDeriv_NoCollection::create,
"PhysDeriv_NoCollection_Pyr"),
700 PhysDeriv_NoCollection::create,
"PhysDeriv_NoCollection_Prism"),
703 PhysDeriv_NoCollection::create,
"PhysDeriv_NoCollection_NodalPrism"),
706 PhysDeriv_NoCollection::create,
"PhysDeriv_NoCollection_Hex")};
728 ASSERTL1(input.size() >= nqcol,
"Incorrect input size");
756 t = output0 + e *
m_nqe, 1);
764 t = output1 + e *
m_nqe, 1);
772 t = output1 + e *
m_nqe, 1);
774 t = output2 + e *
m_nqe, 1);
787 ASSERTL1(input.size() >= nqcol,
"Incorrect input size");
805 t = output + e *
m_nqe, 1);
825 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
836 PhysDeriv_SumFac_Seg::create,
"PhysDeriv_SumFac_Seg");
859 ASSERTL1(input.size() >= nqcol,
"Incorrect input size");
869 for (
int i = 0; i <
m_numElmt; ++i, cnt += nqtot)
898 t = output0 + e *
m_nqe, 1);
900 output0 + e *
m_nqe, 1, t = output0 + e *
m_nqe,
904 t = output1 + e *
m_nqe, 1);
906 output1 + e *
m_nqe, 1, t = output1 + e *
m_nqe,
915 t = output2 + e *
m_nqe, 1);
917 output2 + e *
m_nqe, 1,
918 t = output2 + e *
m_nqe, 1);
932 ASSERTL1(input.size() >= nqcol,
"Incorrect input size");
942 for (
int i = 0; i <
m_numElmt; ++i, cnt += nqtot)
961 t = output + e *
m_nqe, 1);
964 t = output + e *
m_nqe, 1);
987 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
999 PhysDeriv_SumFac_Quad::create,
"PhysDeriv_SumFac_Quad");
1022 ASSERTL1(input.size() >= nqcol,
"Incorrect input size");
1033 for (
int i = 0; i <
m_numElmt; ++i, cnt += nqtot)
1037 diff0.get() + cnt, 1);
1045 diff1.get() + cnt, 1, diff1.get() + cnt, 1);
1070 t = output0 + e *
m_nqe, 1);
1072 output0 + e *
m_nqe, 1, t = output0 + e *
m_nqe,
1076 t = output1 + e *
m_nqe, 1);
1078 output1 + e *
m_nqe, 1, t = output1 + e *
m_nqe,
1087 t = output2 + e *
m_nqe, 1);
1089 output2 + e *
m_nqe, 1,
1090 t = output2 + e *
m_nqe, 1);
1104 ASSERTL1(input.size() >= nqcol,
"Incorrect input size");
1115 for (
int i = 0; i <
m_numElmt; ++i, cnt += nqtot)
1119 diff0.get() + cnt, 1);
1127 diff1.get() + cnt, 1, diff1.get() + cnt, 1);
1142 t = output + e *
m_nqe, 1);
1145 t = output + e *
m_nqe, 1);
1170 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1204 PhysDeriv_SumFac_Tri::create,
"PhysDeriv_SumFac_Tri"),
1207 PhysDeriv_SumFac_Tri::create,
"PhysDeriv_SumFac_NodalTri")};
1226 int nPhys =
m_stdExp->GetTotPoints();
1235 for (
int i = 0; i < 3; ++i)
1237 Diff[i] = wsp + i * ntot;
1257 m_nquad2, 0.0, &Diff[2][i * nPhys],
1267 for (
int j = 1; j < 3; ++j)
1270 out[i], 1, out[i], 1);
1282 Diff[0] + e *
m_nqe, 1, t = out[i] + e *
m_nqe,
1285 for (
int j = 1; j < 3; ++j)
1289 1, t = out[i] + e *
m_nqe, 1);
1300 int nPhys =
m_stdExp->GetTotPoints();
1305 for (
int i = 0; i < 3; ++i)
1307 Diff[i] = wsp + i * ntot;
1327 m_nquad2, 0.0, &Diff[2][i * nPhys],
1336 for (
int j = 1; j < 3; ++j)
1339 output, 1, output, 1);
1348 1, t = output + e *
m_nqe, 1);
1350 for (
int j = 1; j < 3; ++j)
1353 Diff[j] + e *
m_nqe, 1, output + e *
m_nqe, 1,
1354 t = output + e *
m_nqe, 1);
1381 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1395 PhysDeriv_SumFac_Hex::create,
"PhysDeriv_SumFac_Hex")};
1414 int nPhys =
m_stdExp->GetTotPoints();
1423 for (
int i = 0; i < 3; ++i)
1425 Diff[i] = wsp + i * ntot;
1438 m_nquad2, 0.0, &Diff[2][i * nPhys],
1456 Diff[2].get() + i * nPhys, 1,
1457 Diff[2].get() + i * nPhys, 1);
1461 Diff[1].get() + i * nPhys, 1);
1465 Diff[1].get() + i * nPhys, 1,
1466 Diff[1].get() + i * nPhys, 1);
1470 Diff[2].get() + i * nPhys, 1,
1471 Diff[2].get() + i * nPhys, 1);
1475 Diff[0].get() + i * nPhys, 1);
1484 for (
int j = 1; j < 3; ++j)
1487 out[i], 1, out[i], 1);
1499 Diff[0] + e *
m_nqe, 1, t = out[i] + e *
m_nqe,
1501 for (
int j = 1; j < 3; ++j)
1505 1, t = out[i] + e *
m_nqe, 1);
1516 int nPhys =
m_stdExp->GetTotPoints();
1521 for (
int i = 0; i < 3; ++i)
1523 Diff[i] = wsp + i * ntot;
1536 m_nquad2, 0.0, &Diff[2][i * nPhys],
1554 Diff[2].get() + i * nPhys, 1,
1555 Diff[2].get() + i * nPhys, 1);
1559 Diff[1].get() + i * nPhys, 1);
1563 Diff[1].get() + i * nPhys, 1,
1564 Diff[1].get() + i * nPhys, 1);
1568 Diff[2].get() + i * nPhys, 1,
1569 Diff[2].get() + i * nPhys, 1);
1573 Diff[0].get() + i * nPhys, 1);
1581 for (
int j = 1; j < 3; ++j)
1584 output, 1, output, 1);
1593 1, t = output + e *
m_nqe, 1);
1594 for (
int j = 1; j < 3; ++j)
1597 Diff[j] + e *
m_nqe, 1, output + e *
m_nqe, 1,
1598 t = output + e *
m_nqe, 1);
1629 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1654 4.0 / ((1 - z1[j]) * (1 - z2[k]));
1656 2.0 * (1 + z0[i]) / ((1 - z1[j]) * (1 - z2[k]));
1660 (1 + z1[j]) / (1 - z2[k]);
1671 PhysDeriv_SumFac_Tet::create,
"PhysDeriv_SumFac_Tet")};
1690 int nPhys =
m_stdExp->GetTotPoints();
1699 for (
int i = 0; i < 3; ++i)
1701 Diff[i] = wsp + i * ntot;
1725 m_nquad2, 0.0, &Diff[2][i * nPhys],
1730 Diff[0].get() + cnt, 1);
1734 Diff[2].get() + cnt, 1, Diff[2].get() + cnt, 1);
1744 for (
int j = 1; j < 3; ++j)
1747 out[i], 1, out[i], 1);
1759 Diff[0] + e *
m_nqe, 1, t = out[i] + e *
m_nqe,
1762 for (
int j = 1; j < 3; ++j)
1766 1, t = out[i] + e *
m_nqe, 1);
1777 int nPhys =
m_stdExp->GetTotPoints();
1782 for (
int i = 0; i < 3; ++i)
1784 Diff[i] = wsp + i * ntot;
1808 m_nquad2, 0.0, &Diff[2][i * nPhys],
1813 Diff[0].get() + cnt, 1);
1817 Diff[2].get() + cnt, 1, Diff[2].get() + cnt, 1);
1826 for (
int j = 1; j < 3; ++j)
1829 output, 1, output, 1);
1838 1, t = output + e *
m_nqe, 1);
1840 for (
int j = 1; j < 3; ++j)
1843 Diff[j] + e *
m_nqe, 1, output + e *
m_nqe, 1,
1844 t = output + e *
m_nqe, 1);
1873 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1902OperatorKey PhysDeriv_SumFac_Prism::m_typeArr[] = {
1905 PhysDeriv_SumFac_Prism::create,
"PhysDeriv_SumFac_Prism")};
1924 int nPhys =
m_stdExp->GetTotPoints();
1933 for (
int i = 0; i < 3; ++i)
1935 Diff[i] = wsp + i * ntot;
1959 m_nquad2, 0.0, &Diff[2][i * nPhys],
1964 Diff[0].get() + cnt, 1);
1968 Diff[1].get() + cnt, 1);
1972 Diff[2].get() + cnt, 1, Diff[2].get() + cnt, 1);
1976 Diff[2].get() + cnt, 1, Diff[2].get() + cnt, 1);
1986 for (
int j = 1; j < 3; ++j)
1989 out[i], 1, out[i], 1);
2001 Diff[0] + e *
m_nqe, 1, t = out[i] + e *
m_nqe,
2004 for (
int j = 1; j < 3; ++j)
2008 1, t = out[i] + e *
m_nqe, 1);
2019 int nPhys =
m_stdExp->GetTotPoints();
2024 for (
int i = 0; i < 3; ++i)
2026 Diff[i] = wsp + i * ntot;
2050 m_nquad2, 0.0, &Diff[2][i * nPhys],
2055 Diff[0].get() + cnt, 1);
2059 Diff[1].get() + cnt, 1);
2063 Diff[2].get() + cnt, 1, Diff[2].get() + cnt, 1);
2067 Diff[2].get() + cnt, 1, Diff[2].get() + cnt, 1);
2076 for (
int j = 1; j < 3; ++j)
2079 output, 1, output, 1);
2088 1, t = output + e *
m_nqe, 1);
2090 for (
int j = 1; j < 3; ++j)
2093 Diff[j] + e *
m_nqe, 1, output + e *
m_nqe, 1,
2094 t = output + e *
m_nqe, 1);
2124 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
2141 m_fac0[ifac + k * nq0_nq1] = 2.0 / (1 - z2[k]);
2142 m_fac1[ifac + k * nq0_nq1] = 0.5 * (1 + z0[i]);
2143 m_fac2[ifac + k * nq0_nq1] = 0.5 * (1 + z1[j]);
2160 PhysDeriv_SumFac_Pyr::create,
"PhysDeriv_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 ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
#define OPERATOR_CREATE(cname)
bool m_isPadded
flag for padding
unsigned int m_nElmtPad
size after padding
Array< OneD, NekDouble > m_input
padded input/output vectors
unsigned short m_coordim
coordinates dimension
Array< OneD, Array< OneD, NekDouble > > m_output
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
Physical Derivative help class to calculate the size of the collection that is given as an input and ...
Phys deriv operator using element-wise operation.
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) final
PhysDeriv_IterPerExp(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
Array< TwoD, const NekDouble > m_derivFac
~PhysDeriv_IterPerExp() final=default
Phys deriv operator using matrix free operators.
PhysDeriv_MatrixFree(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
~PhysDeriv_MatrixFree() final=default
std::shared_ptr< MatrixFree::PhysDeriv > m_oper
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) final
Phys deriv operator using original LocalRegions implementation.
~PhysDeriv_NoCollection() final=default
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) final
PhysDeriv_NoCollection(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
vector< StdRegions::StdExpansionSharedPtr > m_expList
Phys deriv operator using standard matrix approach.
Array< TwoD, const NekDouble > m_derivFac
Array< OneD, DNekMatSharedPtr > m_derivMat
PhysDeriv_StdMat(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
~PhysDeriv_StdMat() final=default
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) final
Phys deriv operator using sum-factorisation (Hex)
PhysDeriv_SumFac_Hex(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
Array< TwoD, const NekDouble > m_derivFac
~PhysDeriv_SumFac_Hex() final=default
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) final
Phys deriv operator using sum-factorisation (Prism)
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
~PhysDeriv_SumFac_Prism() final=default
PhysDeriv_SumFac_Prism(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
Array< OneD, NekDouble > m_fac0
Phys deriv operator using sum-factorisation (Pyramid)
PhysDeriv_SumFac_Pyr(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
Array< OneD, NekDouble > m_fac1
Array< OneD, NekDouble > m_fac2
Array< TwoD, const NekDouble > m_derivFac
Array< OneD, NekDouble > m_fac0
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) final
~PhysDeriv_SumFac_Pyr() final=default
Phys deriv operator using sum-factorisation (Quad)
~PhysDeriv_SumFac_Quad() final=default
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) final
PhysDeriv_SumFac_Quad(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
Array< TwoD, const NekDouble > m_derivFac
Phys deriv operator using sum-factorisation (Segment)
PhysDeriv_SumFac_Seg(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
~PhysDeriv_SumFac_Seg() final=default
Array< TwoD, const NekDouble > m_derivFac
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) final
Phys deriv 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
PhysDeriv_SumFac_Tet(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
Array< OneD, NekDouble > m_fac0
Array< TwoD, const NekDouble > m_derivFac
Array< OneD, NekDouble > m_fac3
~PhysDeriv_SumFac_Tet() final=default
Phys deriv operator using sum-factorisation (Tri)
PhysDeriv_SumFac_Tri(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
~PhysDeriv_SumFac_Tri() final=default
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) final
Array< OneD, NekDouble > m_fac1
Array< TwoD, const NekDouble > m_derivFac
Array< OneD, NekDouble > m_fac0
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...
std::tuple< LibUtilities::ShapeType, OperatorType, ImplementationType, ExpansionIsNodal > OperatorKey
Key for describing an Operator.
std::shared_ptr< CoalescedGeomData > CoalescedGeomDataSharedPtr
OperatorFactory & GetOperatorFactory()
Returns the singleton Operator factory object.
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 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)