39#include <MatrixFreeOps/Operator.hpp>
90 1.0,
m_mat->GetRawPtr(),
m_mat->GetRows(), input.get(),
91 m_stdExp->GetNcoeffs(), 0.0, output0.get(),
100 ASSERTL0(
false,
"Not valid for this operator.");
122 BwdTrans_StdMat::create,
"BwdTrans_StdMat_Seg"),
125 BwdTrans_StdMat::create,
"BwdTrans_StdMat_Tri"),
128 BwdTrans_StdMat::create,
"BwdTrans_StdMat_NodalTri"),
131 BwdTrans_StdMat::create,
"BwdTrans_StdMat_Quad"),
134 BwdTrans_StdMat::create,
"BwdTrans_StdMat_Tet"),
137 BwdTrans_StdMat::create,
"BwdTrans_StdMat_NodalTet"),
140 BwdTrans_StdMat::create,
"BwdTrans_StdMat_Pyr"),
143 "BwdTrans_StdMat_Prism"),
146 "BwdTrans_StdMat_NodalPrism"),
149 BwdTrans_StdMat::create,
"BwdTrans_StdMat_Hex"),
152 BwdTrans_StdMat::create,
"BwdTrans_SumFac_Pyr")};
183 (*m_oper)(input, output0);
193 "BwdTrans_MatrixFree: Not valid for this operator.");
197 std::shared_ptr<MatrixFree::BwdTrans>
m_oper;
204 pCollExp[0]->GetStdExp()->GetTotPoints(),
208 const auto dim = pCollExp[0]->GetStdExp()->GetShapeDimension();
209 std::vector<LibUtilities::BasisSharedPtr> basis(dim);
210 for (
auto i = 0; i < dim; ++i)
212 basis[i] = pCollExp[0]->GetBasis(i);
216 auto shapeType = pCollExp[0]->GetStdExp()->DetShapeType();
219 std::string op_string =
"BwdTrans";
220 op_string += MatrixFree::GetOpstring(shapeType,
false);
224 m_oper = std::dynamic_pointer_cast<MatrixFree::BwdTrans>(oper);
233 BwdTrans_MatrixFree::create,
"BwdTrans_MatrixFree_Seg"),
236 BwdTrans_MatrixFree::create,
"BwdTrans_MatrixFree_Quad"),
239 BwdTrans_MatrixFree::create,
"BwdTrans_MatrixFree_Tri"),
242 BwdTrans_MatrixFree::create,
"BwdTrans_MatrixFree_Hex"),
245 BwdTrans_MatrixFree::create,
"BwdTrans_MatrixFree_Prism"),
248 BwdTrans_MatrixFree::create,
"BwdTrans_MatrixFree_Tet"),
251 BwdTrans_MatrixFree::create,
"BwdTrans_MatrixFree_Pyr")};
270 const int nCoeffs =
m_stdExp->GetNcoeffs();
271 const int nPhys =
m_stdExp->GetTotPoints();
276 m_stdExp->BwdTrans(input + i * nCoeffs, tmp = output0 + i * nPhys);
285 ASSERTL0(
false,
"Not valid for this operator.");
301 BwdTrans_IterPerExp::create,
"BwdTrans_IterPerExp_Seg"),
304 BwdTrans_IterPerExp::create,
"BwdTrans_IterPerExp_Tri"),
307 BwdTrans_IterPerExp::create,
"BwdTrans_IterPerExp_NodalTri"),
310 BwdTrans_IterPerExp::create,
"BwdTrans_IterPerExp_Quad"),
313 BwdTrans_IterPerExp::create,
"BwdTrans_IterPerExp_Tet"),
316 BwdTrans_IterPerExp::create,
"BwdTrans_IterPerExp_NodalTet"),
319 BwdTrans_IterPerExp::create,
"BwdTrans_IterPerExp_Pyr"),
322 BwdTrans_IterPerExp::create,
"BwdTrans_IterPerExp_Prism"),
325 BwdTrans_IterPerExp::create,
"BwdTrans_IterPerExp_NodalPrism"),
328 BwdTrans_IterPerExp::create,
"BwdTrans_IterPerExp_Hex"),
348 const int nCoeffs =
m_expList[0]->GetNcoeffs();
349 const int nPhys =
m_expList[0]->GetTotPoints();
354 m_expList[i]->BwdTrans(input + i * nCoeffs,
355 tmp = output0 + i * nPhys);
364 ASSERTL0(
false,
"Not valid for this operator.");
384 BwdTrans_NoCollection::create,
"BwdTrans_NoCollection_Seg"),
387 BwdTrans_NoCollection::create,
"BwdTrans_NoCollection_Tri"),
390 BwdTrans_NoCollection::create,
"BwdTrans_NoCollection_NodalTri"),
393 BwdTrans_NoCollection::create,
"BwdTrans_NoCollection_Quad"),
396 BwdTrans_NoCollection::create,
"BwdTrans_NoCollection_Tet"),
399 BwdTrans_NoCollection::create,
"BwdTrans_NoCollection_NodalTet"),
402 BwdTrans_NoCollection::create,
"BwdTrans_NoCollection_Pyr"),
405 BwdTrans_NoCollection::create,
"BwdTrans_NoCollection_Prism"),
408 BwdTrans_NoCollection::create,
"BwdTrans_NoCollection_NodalPrism"),
411 BwdTrans_NoCollection::create,
"BwdTrans_NoCollection_Hex"),
450 ASSERTL0(
false,
"Not valid for this operator.");
477 BwdTrans_SumFac_Seg::create,
"BwdTrans_SumFac_Seg");
543 ASSERTL0(
false,
"Not valid for this operator.");
578 BwdTrans_SumFac_Quad::create,
"BwdTrans_SumFac_Quad");
599 int ncoeffs =
m_stdExp->GetNcoeffs();
607 &input[0] + mode, ncoeffs, 0.0,
633 ASSERTL0(
false,
"Not valid for this operator.");
673 BwdTrans_SumFac_Tri::create,
"BwdTrans_SumFac_Tri");
693 input.get(), 1, output0.get(), 1);
733 ASSERTL0(
false,
"Not valid for this operator.");
755 m_nquad0(pCollExp[0]->GetNumPoints(0)),
756 m_nquad1(pCollExp[0]->GetNumPoints(1)),
757 m_nquad2(pCollExp[0]->GetNumPoints(2)),
758 m_nmodes0(pCollExp[0]->GetBasisNumModes(0)),
759 m_nmodes1(pCollExp[0]->GetBasisNumModes(1)),
760 m_nmodes2(pCollExp[0]->GetBasisNumModes(2)),
761 m_base0(pCollExp[0]->GetBasis(0)->GetBdata()),
762 m_base1(pCollExp[0]->GetBasis(1)->GetBdata()),
763 m_base2(pCollExp[0]->GetBasis(2)->GetBdata()),
764 m_colldir0(pCollExp[0]->GetBasis(0)->Collocation()),
765 m_colldir1(pCollExp[0]->GetBasis(1)->Collocation()),
766 m_colldir2(pCollExp[0]->GetBasis(2)->Collocation())
777 BwdTrans_SumFac_Hex::create,
"BwdTrans_SumFac_Hex");
806 int ncoeffs =
m_stdExp->GetNcoeffs();
811 for (
int j = 0; j <
m_nmodes1 - i; ++j, ++cnt)
815 input.get() + mode1, ncoeffs, 0.0,
895 ASSERTL0(
false,
"Not valid for this operator.");
944 BwdTrans_SumFac_Tet::create,
"BwdTrans_SumFac_Tet");
966 int totmodes =
m_stdExp->GetNcoeffs();
977 for (i = mode = mode1 = 0; i <
m_nmodes0; ++i)
984 input.get() + mode1, totmodes, 0.0,
1000 input[1 + i * totmodes + j *
m_nmodes2],
1032 ASSERTL0(
false,
"Not valid for this operator.");
1080 BwdTrans_SumFac_Prism::create,
"BwdTrans_SumFac_Prism");
1102 int totmodes =
m_stdExp->GetNcoeffs();
1117 int ijmax = max(i, j);
1120 input.get() + mode1, totmodes, 0.0,
1129 int ijmax = max(i, j);
1188 ASSERTL0(
false,
"Not valid for this operator.");
1235 BwdTrans_SumFac_Pyr::create,
"BwdTrans_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)
Backward transform help class to calculate the size of the collection that is given as an input and a...
Backward transform operator using default StdRegions operator.
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) final
BwdTrans_IterPerExp(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
~BwdTrans_IterPerExp() final=default
Backward transform operator using matrix free operators.
std::shared_ptr< MatrixFree::BwdTrans > m_oper
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) final
~BwdTrans_MatrixFree() final=default
BwdTrans_MatrixFree(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
Backward transform operator using LocalRegions implementation.
BwdTrans_NoCollection(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
~BwdTrans_NoCollection() final=default
vector< StdRegions::StdExpansionSharedPtr > m_expList
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) final
Backward transform operator using standard matrix approach.
~BwdTrans_StdMat() final=default
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) final
BwdTrans_StdMat(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
Backward transform operator using sum-factorisation (Hex)
Array< OneD, const NekDouble > m_base1
~BwdTrans_SumFac_Hex() final=default
Array< OneD, const NekDouble > m_base2
Array< OneD, const NekDouble > m_base0
BwdTrans_SumFac_Hex(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
Backward transform operator using sum-factorisation (Prism)
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) final
BwdTrans_SumFac_Prism(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
~BwdTrans_SumFac_Prism() final=default
Array< OneD, const NekDouble > m_base0
Array< OneD, const NekDouble > m_base1
Array< OneD, const NekDouble > m_base2
Backward transform operator using sum-factorisation (Pyr)
Array< OneD, const NekDouble > m_base2
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) final
~BwdTrans_SumFac_Pyr() final=default
BwdTrans_SumFac_Pyr(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
Array< OneD, const NekDouble > m_base1
Array< OneD, const NekDouble > m_base0
Backward transform operator using sum-factorisation (Quad)
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, const NekDouble > m_base0
~BwdTrans_SumFac_Quad() final=default
BwdTrans_SumFac_Quad(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
Backward transform operator using sum-factorisation (Segment)
~BwdTrans_SumFac_Seg() final=default
BwdTrans_SumFac_Seg(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
Array< OneD, const NekDouble > m_base0
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) final
Backward transform operator using sum-factorisation (Tet)
BwdTrans_SumFac_Tet(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
Array< OneD, const NekDouble > m_base1
~BwdTrans_SumFac_Tet() final=default
Array< OneD, const NekDouble > m_base0
void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) final
Array< OneD, const NekDouble > m_base2
Backward transform operator using sum-factorisation (Tri)
~BwdTrans_SumFac_Tri() final=default
BwdTrans_SumFac_Tri(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
Array< OneD, const NekDouble > m_base0
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
bool m_isPadded
flag for padding
unsigned int m_nElmtPad
size after padding
Array< OneD, NekDouble > m_output
Array< OneD, NekDouble > m_input
padded input/output vectors
Base class for operators on a collection of elements.
StdRegions::StdExpansionSharedPtr m_stdExp
unsigned int m_numElmt
number of elements that the operator is applied on
unsigned int m_outputSize
number of modes or quadrature points that are taken as output from an operator
unsigned int m_inputSize
number of modes or quadrature points that are passed as input to an operator
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
tBaseSharedPtr CreateInstance(tKey idKey, tParam... args)
Create an instance of the class referred to by idKey.
static 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...
static void Daxpy(const int &n, const double &alpha, const double *x, const int &incx, const double *y, const int &incy)
BLAS level 1: y = alpha x plus y.
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.
@ eModified_A
Principle Modified Functions .
StdRegions::ConstFactorMap factors
std::shared_ptr< DNekMat > DNekMatSharedPtr
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)