35#include <boost/core/ignore_unused.hpp>
37#include <MatrixFreeOps/Operator.hpp>
77 int nPhys =
m_stdExp->GetTotPoints();
86 for (
int i = 0; i <
m_dim; ++i)
88 Diff[i] = wsp + i * ntot;
92 for (
int i = 0; i <
m_dim; ++i)
97 input.get(), nPhys, 0.0, &Diff[i][0], nPhys);
106 for (
int j = 0; j <
m_dim; ++j)
109 out[i], 1, out[i], 1);
121 for (
int j = 0; j <
m_dim; ++j)
125 1, t = out[i] + e *
m_nqe, 1);
136 int nPhys =
m_stdExp->GetTotPoints();
141 for (
int i = 0; i <
m_dim; ++i)
143 Diff[i] = wsp + i * ntot;
147 for (
int i = 0; i <
m_dim; ++i)
152 input.get(), nPhys, 0.0, &Diff[i][0], nPhys);
159 for (
int j = 0; j <
m_dim; ++j)
162 output, 1, output, 1);
170 for (
int j = 0; j <
m_dim; ++j)
173 Diff[j] + e *
m_nqe, 1, output + e *
m_nqe, 1,
174 t = output + e *
m_nqe, 1);
181 int coll_phys_offset)
override
183 boost::ignore_unused(
factors, coll_phys_offset);
184 ASSERTL0(
false,
"Not valid for this operator.");
201 m_dim = PtsKey.size();
204 for (
int i = 0; i <
m_dim; ++i)
206 nqtot *= PtsKey[i].GetNumPoints();
210 for (
int i = 0; i <
m_dim; ++i)
215 for (
int j = 0; j < nqtot; ++j)
221 &(
m_derivMat[i]->GetPtr())[0] + j * nqtot, 1);
224 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
233 PhysDeriv_StdMat::create,
"PhysDeriv_StdMat_Seg"),
236 PhysDeriv_StdMat::create,
"PhysDeriv_StdMat_Tri"),
239 PhysDeriv_StdMat::create,
"PhysDeriv_StdMat_NodalTri"),
242 PhysDeriv_StdMat::create,
"PhysDeriv_StdMat_Quad"),
245 PhysDeriv_StdMat::create,
"PhysDeriv_StdMat_Tet"),
248 PhysDeriv_StdMat::create,
"PhysDeriv_StdMat_NodalTet"),
251 PhysDeriv_StdMat::create,
"PhysDeriv_StdMat_Pyr"),
254 PhysDeriv_StdMat::create,
"PhysDeriv_StdMat_Prism"),
257 PhysDeriv_StdMat::create,
"PhysDeriv_StdMat_NodalPrism"),
260 PhysDeriv_StdMat::create,
"PhysDeriv_StdMat_Hex"),
263 PhysDeriv_StdMat::create,
"PhysDeriv_SumFac_Pyr")};
283 boost::ignore_unused(wsp);
323 boost::ignore_unused(wsp);
338 int coll_phys_offset)
override
340 boost::ignore_unused(
factors, coll_phys_offset);
341 ASSERTL0(
false,
"Not valid for this operator.");
345 std::shared_ptr<MatrixFree::PhysDeriv>
m_oper;
352 pCollExp[0]->GetStdExp()->GetTotPoints(),
353 pCollExp[0]->GetStdExp()->GetTotPoints(),
357 bool deformed{pGeomData->IsDeformed(pCollExp)};
358 const auto dim = pCollExp[0]->GetStdExp()->GetShapeDimension();
362 int nOut = pCollExp[0]->GetStdExp()->GetTotPoints();
377 std::vector<LibUtilities::BasisSharedPtr> basis(dim);
378 for (
unsigned int i = 0; i < dim; ++i)
380 basis[i] = pCollExp[0]->GetBasis(i);
384 auto shapeType = pCollExp[0]->GetStdExp()->DetShapeType();
387 std::string op_string =
"PhysDeriv";
388 op_string += MatrixFree::GetOpstring(shapeType, deformed);
393 oper->SetDF(pGeomData->GetDerivFactorsInterLeave(pCollExp,
m_nElmtPad));
395 m_oper = std::dynamic_pointer_cast<MatrixFree::PhysDeriv>(oper);
404 PhysDeriv_MatrixFree::create,
"PhysDeriv_MatrixFree_Seg"),
407 PhysDeriv_MatrixFree::create,
"PhysDeriv_MatrixFree_Tri"),
410 PhysDeriv_MatrixFree::create,
"PhysDeriv_MatrixFree_Quad"),
413 PhysDeriv_MatrixFree::create,
"PhysDeriv_MatrixFree_Hex"),
416 PhysDeriv_MatrixFree::create,
"PhysDeriv_MatrixFree_Prism"),
419 PhysDeriv_MatrixFree::create,
"PhysDeriv_MatrixFree_Pyr"),
422 PhysDeriv_MatrixFree::create,
"PhysDeriv_MatrixFree_Tet")
445 int nPhys =
m_stdExp->GetTotPoints();
454 for (
int i = 0; i <
m_dim; ++i)
456 Diff[i] = wsp + i * ntot;
462 m_stdExp->PhysDeriv(input + i * nPhys, tmp0 = Diff[0] + i * nPhys,
463 tmp1 = Diff[1] + i * nPhys,
464 tmp2 = Diff[2] + i * nPhys);
474 for (
int j = 1; j <
m_dim; ++j)
477 out[i], 1, out[i], 1);
489 Diff[0] + e *
m_nqe, 1, t = out[i] + e *
m_nqe,
491 for (
int j = 1; j <
m_dim; ++j)
495 1, t = out[i] + e *
m_nqe, 1);
506 int nPhys =
m_stdExp->GetTotPoints();
511 for (
int i = 0; i <
m_dim; ++i)
513 Diff[i] = wsp + i * ntot;
519 m_stdExp->PhysDeriv(input + i * nPhys, tmp0 = Diff[0] + i * nPhys,
520 tmp1 = Diff[1] + i * nPhys,
521 tmp2 = Diff[2] + i * nPhys);
527 for (
int j = 0; j <
m_dim; ++j)
530 output, 1, output, 1);
538 for (
int j = 0; j <
m_dim; ++j)
541 Diff[j] + e *
m_nqe, 1, output + e *
m_nqe, 1,
542 t = output + e *
m_nqe, 1);
549 int coll_phys_offset)
override
551 boost::ignore_unused(
factors, coll_phys_offset);
552 ASSERTL0(
false,
"Not valid for this operator.");
568 m_dim = PtsKey.size();
571 for (
int i = 0; i <
m_dim; ++i)
573 nqtot *= PtsKey[i].GetNumPoints();
575 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
584 PhysDeriv_IterPerExp::create,
"PhysDeriv_IterPerExp_Seg"),
587 PhysDeriv_IterPerExp::create,
"PhysDeriv_IterPerExp_Tri"),
590 PhysDeriv_IterPerExp::create,
"PhysDeriv_IterPerExp_NodalTri"),
593 PhysDeriv_IterPerExp::create,
"PhysDeriv_IterPerExp_Quad"),
596 PhysDeriv_IterPerExp::create,
"PhysDeriv_IterPerExp_Tet"),
599 PhysDeriv_IterPerExp::create,
"PhysDeriv_IterPerExp_NodalTet"),
602 PhysDeriv_IterPerExp::create,
"PhysDeriv_IterPerExp_Pyr"),
605 PhysDeriv_IterPerExp::create,
"PhysDeriv_IterPerExp_Prism"),
608 PhysDeriv_IterPerExp::create,
"PhysDeriv_IterPerExp_NodalPrism"),
611 PhysDeriv_IterPerExp::create,
"PhysDeriv_IterPerExp_Hex")};
631 boost::ignore_unused(wsp);
633 const int nPhys =
m_expList[0]->GetTotPoints();
637 switch (
m_expList[0]->GetShapeDimension())
643 m_expList[i]->PhysDeriv(input + i * nPhys,
644 tmp0 = output0 + i * nPhys);
652 m_expList[i]->PhysDeriv(input + i * nPhys,
653 tmp0 = output0 + i * nPhys,
654 tmp1 = output1 + i * nPhys);
663 input + i * nPhys, tmp0 = output0 + i * nPhys,
664 tmp1 = output1 + i * nPhys, tmp2 = output2 + i * nPhys);
669 ASSERTL0(
false,
"Unknown dimension.");
677 boost::ignore_unused(wsp);
679 const int nPhys =
m_expList[0]->GetTotPoints();
685 m_expList[i]->PhysDeriv(dir, input + i * nPhys,
686 tmp = output + i * nPhys);
691 int coll_phys_offset)
override
693 boost::ignore_unused(
factors, coll_phys_offset);
694 ASSERTL0(
false,
"Not valid for this operator.");
714 PhysDeriv_NoCollection::create,
"PhysDeriv_NoCollection_Seg"),
717 PhysDeriv_NoCollection::create,
"PhysDeriv_NoCollection_Tri"),
720 PhysDeriv_NoCollection::create,
"PhysDeriv_NoCollection_NodalTri"),
723 PhysDeriv_NoCollection::create,
"PhysDeriv_NoCollection_Quad"),
726 PhysDeriv_NoCollection::create,
"PhysDeriv_NoCollection_Tet"),
729 PhysDeriv_NoCollection::create,
"PhysDeriv_NoCollection_NodalTet"),
732 PhysDeriv_NoCollection::create,
"PhysDeriv_NoCollection_Pyr"),
735 PhysDeriv_NoCollection::create,
"PhysDeriv_NoCollection_Prism"),
738 PhysDeriv_NoCollection::create,
"PhysDeriv_NoCollection_NodalPrism"),
741 PhysDeriv_NoCollection::create,
"PhysDeriv_NoCollection_Hex")};
765 ASSERTL1(input.size() >= nqcol,
"Incorrect input size");
793 t = output0 + e *
m_nqe, 1);
801 t = output1 + e *
m_nqe, 1);
809 t = output1 + e *
m_nqe, 1);
811 t = output2 + e *
m_nqe, 1);
824 ASSERTL1(input.size() >= nqcol,
"Incorrect input size");
842 t = output + e *
m_nqe, 1);
848 int coll_phys_offset)
override
850 boost::ignore_unused(
factors, coll_phys_offset);
851 ASSERTL0(
false,
"Not valid for this operator.");
870 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
881 PhysDeriv_SumFac_Seg::create,
"PhysDeriv_SumFac_Seg");
906 ASSERTL1(input.size() >= nqcol,
"Incorrect input size");
916 for (
int i = 0; i <
m_numElmt; ++i, cnt += nqtot)
945 t = output0 + e *
m_nqe, 1);
947 output0 + e *
m_nqe, 1, t = output0 + e *
m_nqe,
951 t = output1 + e *
m_nqe, 1);
953 output1 + e *
m_nqe, 1, t = output1 + e *
m_nqe,
962 t = output2 + e *
m_nqe, 1);
964 output2 + e *
m_nqe, 1,
965 t = output2 + e *
m_nqe, 1);
979 ASSERTL1(input.size() >= nqcol,
"Incorrect input size");
989 for (
int i = 0; i <
m_numElmt; ++i, cnt += nqtot)
1008 t = output + e *
m_nqe, 1);
1011 t = output + e *
m_nqe, 1);
1017 int coll_phys_offset)
override
1019 boost::ignore_unused(
factors, coll_phys_offset);
1020 ASSERTL0(
false,
"Not valid for this operator.");
1042 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1054 PhysDeriv_SumFac_Quad::create,
"PhysDeriv_SumFac_Quad");
1079 ASSERTL1(input.size() >= nqcol,
"Incorrect input size");
1090 for (
int i = 0; i <
m_numElmt; ++i, cnt += nqtot)
1094 diff0.get() + cnt, 1);
1102 diff1.get() + cnt, 1, diff1.get() + cnt, 1);
1127 t = output0 + e *
m_nqe, 1);
1129 output0 + e *
m_nqe, 1, t = output0 + e *
m_nqe,
1133 t = output1 + e *
m_nqe, 1);
1135 output1 + e *
m_nqe, 1, t = output1 + e *
m_nqe,
1144 t = output2 + e *
m_nqe, 1);
1146 output2 + e *
m_nqe, 1,
1147 t = output2 + e *
m_nqe, 1);
1161 ASSERTL1(input.size() >= nqcol,
"Incorrect input size");
1172 for (
int i = 0; i <
m_numElmt; ++i, cnt += nqtot)
1176 diff0.get() + cnt, 1);
1184 diff1.get() + cnt, 1, diff1.get() + cnt, 1);
1199 t = output + e *
m_nqe, 1);
1202 t = output + e *
m_nqe, 1);
1208 int coll_phys_offset)
override
1210 boost::ignore_unused(
factors, coll_phys_offset);
1211 ASSERTL0(
false,
"Not valid for this operator.");
1235 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1269 PhysDeriv_SumFac_Tri::create,
"PhysDeriv_SumFac_Tri"),
1272 PhysDeriv_SumFac_Tri::create,
"PhysDeriv_SumFac_NodalTri")};
1293 int nPhys =
m_stdExp->GetTotPoints();
1302 for (
int i = 0; i < 3; ++i)
1304 Diff[i] = wsp + i * ntot;
1324 m_nquad2, 0.0, &Diff[2][i * nPhys],
1334 for (
int j = 1; j < 3; ++j)
1337 out[i], 1, out[i], 1);
1350 Diff[0] + e *
m_nqe, 1, t = out[i] + e *
m_nqe,
1353 for (
int j = 1; j < 3; ++j)
1357 1, t = out[i] + e *
m_nqe, 1);
1368 int nPhys =
m_stdExp->GetTotPoints();
1373 for (
int i = 0; i < 3; ++i)
1375 Diff[i] = wsp + i * ntot;
1395 m_nquad2, 0.0, &Diff[2][i * nPhys],
1404 for (
int j = 1; j < 3; ++j)
1407 output, 1, output, 1);
1416 1, t = output + e *
m_nqe, 1);
1418 for (
int j = 1; j < 3; ++j)
1421 Diff[j] + e *
m_nqe, 1, output + e *
m_nqe, 1,
1422 t = output + e *
m_nqe, 1);
1429 int coll_phys_offset)
override
1431 boost::ignore_unused(
factors, coll_phys_offset);
1432 ASSERTL0(
false,
"Not valid for this operator.");
1458 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1472 PhysDeriv_SumFac_Hex::create,
"PhysDeriv_SumFac_Hex")};
1493 int nPhys =
m_stdExp->GetTotPoints();
1502 for (
int i = 0; i < 3; ++i)
1504 Diff[i] = wsp + i * ntot;
1517 m_nquad2, 0.0, &Diff[2][i * nPhys],
1536 Diff[2].get() + i * nPhys, 1,
1537 Diff[2].get() + i * nPhys, 1);
1541 Diff[1].get() + i * nPhys, 1);
1545 Diff[1].get() + i * nPhys, 1,
1546 Diff[1].get() + i * nPhys, 1);
1550 Diff[2].get() + i * nPhys, 1,
1551 Diff[2].get() + i * nPhys, 1);
1555 Diff[0].get() + i * nPhys, 1);
1564 for (
int j = 1; j < 3; ++j)
1567 out[i], 1, out[i], 1);
1579 Diff[0] + e *
m_nqe, 1, t = out[i] + e *
m_nqe,
1582 for (
int j = 1; j < 3; ++j)
1586 1, t = out[i] + e *
m_nqe, 1);
1597 int nPhys =
m_stdExp->GetTotPoints();
1602 for (
int i = 0; i < 3; ++i)
1604 Diff[i] = wsp + i * ntot;
1617 m_nquad2, 0.0, &Diff[2][i * nPhys],
1636 Diff[2].get() + i * nPhys, 1,
1637 Diff[2].get() + i * nPhys, 1);
1641 Diff[1].get() + i * nPhys, 1);
1645 Diff[1].get() + i * nPhys, 1,
1646 Diff[1].get() + i * nPhys, 1);
1650 Diff[2].get() + i * nPhys, 1,
1651 Diff[2].get() + i * nPhys, 1);
1655 Diff[0].get() + i * nPhys, 1);
1663 for (
int j = 1; j < 3; ++j)
1666 output, 1, output, 1);
1675 1, t = output + e *
m_nqe, 1);
1677 for (
int j = 1; j < 3; ++j)
1680 Diff[j] + e *
m_nqe, 1, output + e *
m_nqe, 1,
1681 t = output + e *
m_nqe, 1);
1688 int coll_phys_offset)
override
1690 boost::ignore_unused(
factors, coll_phys_offset);
1691 ASSERTL0(
false,
"Not valid for this operator.");
1721 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1746 4.0 / ((1 - z1[j]) * (1 - z2[k]));
1748 2.0 * (1 + z0[i]) / ((1 - z1[j]) * (1 - z2[k]));
1752 (1 + z1[j]) / (1 - z2[k]);
1763 PhysDeriv_SumFac_Tet::create,
"PhysDeriv_SumFac_Tet")};
1784 int nPhys =
m_stdExp->GetTotPoints();
1793 for (
int i = 0; i < 3; ++i)
1795 Diff[i] = wsp + i * ntot;
1820 m_nquad2, 0.0, &Diff[2][i * nPhys],
1825 Diff[0].get() + cnt, 1);
1829 Diff[2].get() + cnt, 1, Diff[2].get() + cnt, 1);
1839 for (
int j = 1; j < 3; ++j)
1842 out[i], 1, out[i], 1);
1854 Diff[0] + e *
m_nqe, 1, t = out[i] + e *
m_nqe,
1857 for (
int j = 1; j < 3; ++j)
1861 1, t = out[i] + e *
m_nqe, 1);
1872 int nPhys =
m_stdExp->GetTotPoints();
1877 for (
int i = 0; i < 3; ++i)
1879 Diff[i] = wsp + i * ntot;
1904 m_nquad2, 0.0, &Diff[2][i * nPhys],
1909 Diff[0].get() + cnt, 1);
1913 Diff[2].get() + cnt, 1, Diff[2].get() + cnt, 1);
1922 for (
int j = 1; j < 3; ++j)
1925 output, 1, output, 1);
1934 1, t = output + e *
m_nqe, 1);
1936 for (
int j = 1; j < 3; ++j)
1939 Diff[j] + e *
m_nqe, 1, output + e *
m_nqe, 1,
1940 t = output + e *
m_nqe, 1);
1947 int coll_phys_offset)
override
1949 boost::ignore_unused(
factors, coll_phys_offset);
1950 ASSERTL0(
false,
"Not valid for this operator.");
1978 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
2007OperatorKey PhysDeriv_SumFac_Prism::m_typeArr[] = {
2010 PhysDeriv_SumFac_Prism::create,
"PhysDeriv_SumFac_Prism")};
2031 int nPhys =
m_stdExp->GetTotPoints();
2040 for (
int i = 0; i < 3; ++i)
2042 Diff[i] = wsp + i * ntot;
2067 m_nquad2, 0.0, &Diff[2][i * nPhys],
2072 Diff[0].get() + cnt, 1);
2076 Diff[1].get() + cnt, 1);
2080 Diff[2].get() + cnt, 1, Diff[2].get() + cnt, 1);
2084 Diff[2].get() + cnt, 1, Diff[2].get() + cnt, 1);
2094 for (
int j = 1; j < 3; ++j)
2097 out[i], 1, out[i], 1);
2109 Diff[0] + e *
m_nqe, 1, t = out[i] + e *
m_nqe,
2112 for (
int j = 1; j < 3; ++j)
2116 1, t = out[i] + e *
m_nqe, 1);
2127 int nPhys =
m_stdExp->GetTotPoints();
2132 for (
int i = 0; i < 3; ++i)
2134 Diff[i] = wsp + i * ntot;
2158 m_nquad2, 0.0, &Diff[2][i * nPhys],
2163 Diff[0].get() + cnt, 1);
2167 Diff[1].get() + cnt, 1);
2171 Diff[2].get() + cnt, 1, Diff[2].get() + cnt, 1);
2174 Diff[2].get() + cnt, 1, Diff[2].get() + cnt, 1);
2183 for (
int j = 1; j < 3; ++j)
2186 output, 1, output, 1);
2195 1, t = output + e *
m_nqe, 1);
2197 for (
int j = 1; j < 3; ++j)
2200 Diff[j] + e *
m_nqe, 1, output + e *
m_nqe, 1,
2201 t = output + e *
m_nqe, 1);
2208 int coll_phys_offset)
override
2210 boost::ignore_unused(
factors, coll_phys_offset);
2211 ASSERTL0(
false,
"Not valid for this operator.");
2240 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
2257 m_fac0[ifac + k * nq0_nq1] = 2.0 / (1 - z2[k]);
2258 m_fac1[ifac + k * nq0_nq1] = 0.5 * (1 + z0[i]);
2259 m_fac2[ifac + k * nq0_nq1] = 0.5 * (1 + z1[j]);
2276 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
Phys deriv operator using element-wise operation.
PhysDeriv_IterPerExp(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
Array< TwoD, const NekDouble > m_derivFac
virtual void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
~PhysDeriv_IterPerExp() final
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) override final
void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output0, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp) override final
Perform operation.
Phys deriv operator using matrix free operators.
~PhysDeriv_MatrixFree() final
virtual void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output0, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp) override final
Perform operation.
PhysDeriv_MatrixFree(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
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) override final
Phys deriv operator using original LocalRegions implementation.
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) override final
void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output0, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp) override final
Perform operation.
virtual void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
PhysDeriv_NoCollection(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
vector< StdRegions::StdExpansionSharedPtr > m_expList
~PhysDeriv_NoCollection() final
Phys deriv operator using standard matrix approach.
Array< TwoD, const NekDouble > m_derivFac
void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output0, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp) override final
Perform operation.
Array< OneD, DNekMatSharedPtr > m_derivMat
PhysDeriv_StdMat(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
~PhysDeriv_StdMat() final
virtual void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) override final
Phys deriv operator using sum-factorisation (Hex)
PhysDeriv_SumFac_Hex(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
~PhysDeriv_SumFac_Hex() final
Array< TwoD, const NekDouble > m_derivFac
void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output0, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp) override final
Perform operation.
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) override final
virtual void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
Phys deriv operator using sum-factorisation (Prism)
Array< OneD, NekDouble > m_fac1
Array< TwoD, const NekDouble > m_derivFac
PhysDeriv_SumFac_Prism(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
virtual void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
~PhysDeriv_SumFac_Prism() final
Array< OneD, NekDouble > m_fac0
void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output0, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp) override final
Perform operation.
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) override final
Phys deriv operator using sum-factorisation (Pyramid)
virtual void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
PhysDeriv_SumFac_Pyr(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
~PhysDeriv_SumFac_Pyr() final
Array< OneD, NekDouble > m_fac1
Array< OneD, NekDouble > m_fac2
Array< TwoD, const NekDouble > m_derivFac
Array< OneD, NekDouble > m_fac0
void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output0, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp) override final
Perform operation.
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) override final
Phys deriv operator using sum-factorisation (Quad)
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) override final
virtual void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
PhysDeriv_SumFac_Quad(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
~PhysDeriv_SumFac_Quad() final
void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output0, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp) override final
Perform operation.
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)
Array< TwoD, const NekDouble > m_derivFac
~PhysDeriv_SumFac_Seg() final
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) override final
void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output0, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp) override final
Perform operation.
virtual void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
Phys deriv operator using sum-factorisation (Tet)
void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output0, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp) override final
Perform operation.
~PhysDeriv_SumFac_Tet() final
Array< OneD, NekDouble > m_fac2
Array< OneD, NekDouble > m_fac1
PhysDeriv_SumFac_Tet(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) override final
Array< OneD, NekDouble > m_fac0
Array< TwoD, const NekDouble > m_derivFac
Array< OneD, NekDouble > m_fac3
virtual void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
Phys deriv operator using sum-factorisation (Tri)
virtual void CheckFactors(StdRegions::FactorMap factors, int coll_phys_offset) override
Check the validity of the supplied factor map.
void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output0, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp) override final
Perform operation.
PhysDeriv_SumFac_Tri(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
~PhysDeriv_SumFac_Tri() final
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) override 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.
std::vector< PointsKey > PointsKeyVector
StdRegions::ConstFactorMap factors
The above copyright notice and this permission notice shall be included.
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)