35 #include <boost/core/ignore_unused.hpp> 44 namespace Collections {
73 boost::ignore_unused(output1, output2);
75 ASSERTL1(wsp.num_elements() == m_wspSize,
76 "Incorrect workspace size");
78 Vmath::Vmul(m_jac.num_elements(),m_jac,1,input,1,wsp,1);
81 m_mat->GetColumns(), 1.0, m_mat->GetRawPtr(),
82 m_mat->GetRows(), wsp.get(), m_stdExp->GetTotPoints(),
83 0.0, output.get(), m_stdExp->GetNcoeffs());
92 boost::ignore_unused(dir, input, output, wsp);
93 NEKERROR(ErrorUtil::efatal,
"Not valid for this operator.");
102 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
106 m_jac = pGeomData->GetJac(pCollExp);
108 m_stdExp->DetShapeType(), *m_stdExp);
109 m_mat = m_stdExp->GetStdMatrix(key);
110 m_wspSize = m_stdExp->GetTotPoints()*m_numElmt;
115 OperatorKey IProductWRTBase_StdMat::m_typeArr[] = {
118 IProductWRTBase_StdMat::create,
"IProductWRTBase_StdMat_Seg"),
121 IProductWRTBase_StdMat::create,
"IProductWRTBase_StdMat_Tri"),
124 IProductWRTBase_StdMat::create,
"IProductWRTBase_StdMat_NodalTri"),
127 IProductWRTBase_StdMat::create,
"IProductWRTBase_StdMat_Quad"),
130 IProductWRTBase_StdMat::create,
"IProductWRTBase_StdMat_Tet"),
133 IProductWRTBase_StdMat::create,
"IProductWRTBase_StdMat_NodalTet"),
136 IProductWRTBase_StdMat::create,
"IProductWRTBase_StdMat_Pyr"),
139 IProductWRTBase_StdMat::create,
"IProductWRTBase_StdMat_Prism"),
142 IProductWRTBase_StdMat::create,
"IProductWRTBase_StdMat_NodalPrism"),
145 IProductWRTBase_StdMat::create,
"IProductWRTBase_StdMat_Hex"),
148 IProductWRTBase_StdMat::create,
"IProductWRTBase_SumFac_Pyr")
171 boost::ignore_unused(output1, output2);
173 ASSERTL1(wsp.num_elements() == m_wspSize,
174 "Incorrect workspace size");
176 const int nCoeffs = m_stdExp->GetNcoeffs();
177 const int nPhys = m_stdExp->GetTotPoints();
180 Vmath::Vmul(m_jac.num_elements(),m_jac,1,input,1,wsp,1);
182 for (
int i = 0; i < m_numElmt; ++i)
184 m_stdExp->IProductWRTBase_SumFac(wsp + i*nPhys,
185 tmp = output + i*nCoeffs,
196 boost::ignore_unused(dir, input, output, wsp);
197 NEKERROR(ErrorUtil::efatal,
"Not valid for this operator.");
205 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
211 for(
int i = 0; i < PtsKey.size(); ++i)
213 nqtot *= PtsKey[i].GetNumPoints();
216 m_jac = pGeomData->GetJacWithStdWeights(pCollExp);
218 m_wspSize = nqtot*m_numElmt;
224 OperatorKey IProductWRTBase_IterPerExp::m_typeArr[] = {
227 IProductWRTBase_IterPerExp::create,
228 "IProductWRTBase_IterPerExp_Seg"),
231 IProductWRTBase_IterPerExp::create,
232 "IProductWRTBase_IterPerExp_Tri"),
235 IProductWRTBase_IterPerExp::create,
236 "IProductWRTBase_IterPerExp_NodalTri"),
239 IProductWRTBase_IterPerExp::create,
240 "IProductWRTBase_IterPerExp_Quad"),
243 IProductWRTBase_IterPerExp::create,
244 "IProductWRTBase_IterPerExp_Tet"),
247 IProductWRTBase_IterPerExp::create,
248 "IProductWRTBase_IterPerExp_NodalTet"),
251 IProductWRTBase_IterPerExp::create,
252 "IProductWRTBase_IterPerExp_Pyr"),
255 IProductWRTBase_IterPerExp::create,
256 "IProductWRTBase_IterPerExp_Prism"),
259 IProductWRTBase_IterPerExp::create,
260 "IProductWRTBase_IterPerExp_NodalPrism"),
263 IProductWRTBase_IterPerExp::create,
264 "IProductWRTBase_IterPerExp_Hex"),
287 boost::ignore_unused(output1, output2, wsp);
289 const int nCoeffs = m_expList[0]->GetNcoeffs();
290 const int nPhys = m_expList[0]->GetTotPoints();
293 for (
int i = 0; i < m_numElmt; ++i)
295 m_expList[i]->IProductWRTBase(input + i*nPhys,
296 tmp = output + i*nCoeffs);
307 boost::ignore_unused(dir, input, output, wsp);
308 NEKERROR(ErrorUtil::efatal,
"Not valid for this operator.");
316 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
320 m_expList = pCollExp;
325 OperatorKey IProductWRTBase_NoCollection::m_typeArr[] = {
328 IProductWRTBase_NoCollection::create,
329 "IProductWRTBase_NoCollection_Seg"),
332 IProductWRTBase_NoCollection::create,
333 "IProductWRTBase_NoCollection_Tri"),
336 IProductWRTBase_NoCollection::create,
337 "IProductWRTBase_NoCollection_NodalTri"),
340 IProductWRTBase_NoCollection::create,
341 "IProductWRTBase_NoCollection_Quad"),
344 IProductWRTBase_NoCollection::create,
345 "IProductWRTBase_NoCollection_Tet"),
348 IProductWRTBase_NoCollection::create,
349 "IProductWRTBase_NoCollection_NodalTet"),
352 IProductWRTBase_NoCollection::create,
353 "IProductWRTBase_NoCollection_Pyr"),
356 IProductWRTBase_NoCollection::create,
357 "IProductWRTBase_NoCollection_Prism"),
360 IProductWRTBase_NoCollection::create,
361 "IProductWRTBase_NoCollection_NodalPrism"),
364 IProductWRTBase_NoCollection::create,
365 "IProductWRTBase_NoCollection_Hex"),
388 boost::ignore_unused(output1, output2);
392 Vmath::Vmul(m_numElmt*m_nquad0,m_jac,1,input,1,output,1);
396 Vmath::Vmul(m_numElmt*m_nquad0,m_jac,1,input,1,wsp,1);
399 Blas::Dgemm(
'T',
'N', m_nmodes0, m_numElmt, m_nquad0,
400 1.0, m_base0.get(), m_nquad0,
401 &wsp[0], m_nquad0, 0.0,
402 &output[0], m_nmodes0);
412 boost::ignore_unused(dir, input, output, wsp);
413 NEKERROR(ErrorUtil::efatal,
"Not valid for this operator.");
425 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
428 m_nquad0 (m_stdExp->GetNumPoints(0)),
429 m_nmodes0 (m_stdExp->GetBasisNumModes(0)),
430 m_colldir0(m_stdExp->GetBasis(0)->Collocation()),
431 m_base0 (m_stdExp->GetBasis(0)->GetBdata())
433 m_wspSize = m_numElmt*m_nquad0;
434 m_jac = pGeomData->GetJacWithStdWeights(pCollExp);
440 RegisterCreatorFunction(
442 IProductWRTBase_SumFac_Seg::create,
"IProductWRTBase_SumFac_Seg");
464 boost::ignore_unused(output1, output2);
466 ASSERTL1(wsp.num_elements() == m_wspSize,
467 "Incorrect workspace size");
471 m_nmodes0, m_nmodes1,
473 m_jac, input, output, wsp);
482 boost::ignore_unused(dir, input, output, wsp);
483 NEKERROR(ErrorUtil::efatal,
"Not valid for this operator.");
499 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
502 m_nquad0 (m_stdExp->GetNumPoints(0)),
503 m_nquad1 (m_stdExp->GetNumPoints(1)),
504 m_nmodes0 (m_stdExp->GetBasisNumModes(0)),
505 m_nmodes1 (m_stdExp->GetBasisNumModes(1)),
506 m_colldir0(m_stdExp->GetBasis(0)->Collocation()),
507 m_colldir1(m_stdExp->GetBasis(1)->Collocation()),
508 m_base0 (m_stdExp->GetBasis(0)->GetBdata()),
509 m_base1 (m_stdExp->GetBasis(1)->GetBdata())
511 m_jac = pGeomData->GetJacWithStdWeights(pCollExp);
512 m_wspSize = 2 * m_numElmt
513 * (max(m_nquad0*m_nquad1,m_nmodes0*m_nmodes1));
519 RegisterCreatorFunction(
521 IProductWRTBase_SumFac_Quad::create,
"IProductWRTBase_SumFac_Quad");
543 boost::ignore_unused(output1, output2);
545 ASSERTL1(wsp.num_elements() == m_wspSize,
546 "Incorrect workspace size");
548 TriIProduct(m_sortTopVertex, m_numElmt, m_nquad0, m_nquad1,
549 m_nmodes0, m_nmodes1,m_base0,m_base1,m_jac, input,
559 boost::ignore_unused(dir, input, output, wsp);
560 NEKERROR(ErrorUtil::efatal,
"Not valid for this operator.");
575 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
578 m_nquad0 (m_stdExp->GetNumPoints(0)),
579 m_nquad1 (m_stdExp->GetNumPoints(1)),
580 m_nmodes0 (m_stdExp->GetBasisNumModes(0)),
581 m_nmodes1 (m_stdExp->GetBasisNumModes(1)),
582 m_base0 (m_stdExp->GetBasis(0)->GetBdata()),
583 m_base1 (m_stdExp->GetBasis(1)->GetBdata())
585 m_jac = pGeomData->GetJacWithStdWeights(pCollExp);
586 m_wspSize = 2 * m_numElmt
587 * (max(m_nquad0*m_nquad1,m_nmodes0*m_nmodes1));
588 if(m_stdExp->GetBasis(0)->GetBasisType()
591 m_sortTopVertex =
true;
595 m_sortTopVertex =
false;
602 RegisterCreatorFunction(
604 IProductWRTBase_SumFac_Tri::create,
"IProductWRTBase_SumFac_Tri");
626 boost::ignore_unused(output1, output2);
628 ASSERTL1(wsp.num_elements() == m_wspSize,
629 "Incorrect workspace size");
631 HexIProduct(m_colldir0,m_colldir1,m_colldir2, m_numElmt,
632 m_nquad0, m_nquad1, m_nquad2,
633 m_nmodes0, m_nmodes1, m_nmodes2,
634 m_base0, m_base1, m_base2,
635 m_jac,input,output,wsp);
644 boost::ignore_unused(dir, input, output, wsp);
645 NEKERROR(ErrorUtil::efatal,
"Not valid for this operator.");
665 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
668 m_nquad0 (m_stdExp->GetNumPoints(0)),
669 m_nquad1 (m_stdExp->GetNumPoints(1)),
670 m_nquad2 (m_stdExp->GetNumPoints(2)),
671 m_nmodes0 (m_stdExp->GetBasisNumModes(0)),
672 m_nmodes1 (m_stdExp->GetBasisNumModes(1)),
673 m_nmodes2 (m_stdExp->GetBasisNumModes(2)),
674 m_colldir0(m_stdExp->GetBasis(0)->Collocation()),
675 m_colldir1(m_stdExp->GetBasis(1)->Collocation()),
676 m_colldir2(m_stdExp->GetBasis(2)->Collocation()),
677 m_base0 (m_stdExp->GetBasis(0)->GetBdata()),
678 m_base1 (m_stdExp->GetBasis(1)->GetBdata()),
679 m_base2 (m_stdExp->GetBasis(2)->GetBdata())
682 m_jac = pGeomData->GetJacWithStdWeights(pCollExp);
683 m_wspSize = 3 * m_numElmt * (max(m_nquad0*m_nquad1*m_nquad2,
684 m_nmodes0*m_nmodes1*m_nmodes2));
690 RegisterCreatorFunction(
692 IProductWRTBase_SumFac_Hex::create,
"IProductWRTBase_SumFac_Hex");
715 boost::ignore_unused(output1, output2);
717 ASSERTL1(wsp.num_elements() == m_wspSize,
718 "Incorrect workspace size");
721 m_nquad0, m_nquad1, m_nquad2,
722 m_nmodes0, m_nmodes1, m_nmodes2,
723 m_base0, m_base1, m_base2,
724 m_jac,input,output,wsp);
734 boost::ignore_unused(dir, input, output, wsp);
735 NEKERROR(ErrorUtil::efatal,
"Not valid for this operator.");
753 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
756 m_nquad0 (m_stdExp->GetNumPoints(0)),
757 m_nquad1 (m_stdExp->GetNumPoints(1)),
758 m_nquad2 (m_stdExp->GetNumPoints(2)),
759 m_nmodes0 (m_stdExp->GetBasisNumModes(0)),
760 m_nmodes1 (m_stdExp->GetBasisNumModes(1)),
761 m_nmodes2 (m_stdExp->GetBasisNumModes(2)),
762 m_base0 (m_stdExp->GetBasis(0)->GetBdata()),
763 m_base1 (m_stdExp->GetBasis(1)->GetBdata()),
764 m_base2 (m_stdExp->GetBasis(2)->GetBdata())
766 m_jac = pGeomData->GetJacWithStdWeights(pCollExp);
767 m_wspSize = m_numElmt*(max(m_nquad0*m_nquad1*m_nquad2,
768 m_nquad2*m_nmodes0*(2*m_nmodes1-m_nmodes0+1)/2)+
769 m_nquad2*m_nquad1*m_nmodes0);
771 if(m_stdExp->GetBasis(0)->GetBasisType()
774 m_sortTopEdge =
true;
778 m_sortTopEdge =
false;
785 RegisterCreatorFunction(
787 IProductWRTBase_SumFac_Tet::create,
"IProductWRTBase_SumFac_Tet");
810 boost::ignore_unused(output1, output2);
812 ASSERTL1(wsp.num_elements() == m_wspSize,
813 "Incorrect workspace size");
816 m_nquad0, m_nquad1, m_nquad2,
817 m_nmodes0, m_nmodes1, m_nmodes2,
818 m_base0, m_base1, m_base2,
819 m_jac,input,output,wsp);
828 boost::ignore_unused(dir, input, output, wsp);
829 NEKERROR(ErrorUtil::efatal,
"Not valid for this operator.");
847 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
850 m_nquad0 (m_stdExp->GetNumPoints(0)),
851 m_nquad1 (m_stdExp->GetNumPoints(1)),
852 m_nquad2 (m_stdExp->GetNumPoints(2)),
853 m_nmodes0 (m_stdExp->GetBasisNumModes(0)),
854 m_nmodes1 (m_stdExp->GetBasisNumModes(1)),
855 m_nmodes2 (m_stdExp->GetBasisNumModes(2)),
856 m_base0 (m_stdExp->GetBasis(0)->GetBdata()),
857 m_base1 (m_stdExp->GetBasis(1)->GetBdata()),
858 m_base2 (m_stdExp->GetBasis(2)->GetBdata())
861 m_jac = pGeomData->GetJacWithStdWeights(pCollExp);
863 m_wspSize = m_numElmt * m_nquad2
864 *(max(m_nquad0*m_nquad1,m_nmodes0*m_nmodes1))
865 + m_nquad1*m_nquad2*m_numElmt*m_nmodes0;
867 if(m_stdExp->GetBasis(0)->GetBasisType()
870 m_sortTopVertex =
true;
874 m_sortTopVertex =
false;
881 RegisterCreatorFunction(
883 IProductWRTBase_SumFac_Prism::create,
"IProductWRTBase_SumFac_Prism");
905 boost::ignore_unused(output1, output2);
907 ASSERTL1(wsp.num_elements() == m_wspSize,
908 "Incorrect workspace size");
911 m_nquad0, m_nquad1, m_nquad2,
912 m_nmodes0, m_nmodes1, m_nmodes2,
913 m_base0, m_base1, m_base2,
914 m_jac,input,output,wsp);
923 boost::ignore_unused(dir, input, output, wsp);
924 NEKERROR(ErrorUtil::efatal,
"Not valid for this operator.");
942 vector<StdRegions::StdExpansionSharedPtr> pCollExp,
945 m_nquad0 (m_stdExp->GetNumPoints(0)),
946 m_nquad1 (m_stdExp->GetNumPoints(1)),
947 m_nquad2 (m_stdExp->GetNumPoints(2)),
948 m_nmodes0 (m_stdExp->GetBasisNumModes(0)),
949 m_nmodes1 (m_stdExp->GetBasisNumModes(1)),
950 m_nmodes2 (m_stdExp->GetBasisNumModes(2)),
951 m_base0 (m_stdExp->GetBasis(0)->GetBdata()),
952 m_base1 (m_stdExp->GetBasis(1)->GetBdata()),
953 m_base2 (m_stdExp->GetBasis(2)->GetBdata())
956 m_jac = pGeomData->GetJacWithStdWeights(pCollExp);
958 m_wspSize = m_numElmt * m_nquad2
959 *(max(m_nquad0*m_nquad1,m_nmodes0*m_nmodes1))
960 + m_nquad1*m_nquad2*m_numElmt*m_nmodes0;
962 if(m_stdExp->GetBasis(0)->GetBasisType()
965 m_sortTopVertex =
true;
969 m_sortTopVertex =
false;
976 RegisterCreatorFunction(
978 IProductWRTBase_SumFac_Pyr::create,
"IProductWRTBase_SumFac_Pyr");
virtual void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
std::shared_ptr< CoalescedGeomData > CoalescedGeomDataSharedPtr
virtual void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
virtual void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
virtual void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
IProductWRTBase_StdMat(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData)
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)
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mod...
Array< OneD, const NekDouble > m_jac
Array< OneD, const NekDouble > m_jac
Inner Product operator using sum-factorisation (Prism)
std::vector< PointsKey > PointsKeyVector
virtual void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
Inner Product operator using sum-factorisation (Pyr)
virtual void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp)
Perform operation.
void PyrIProduct(bool sortTopVertex, 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)
Inner product operator using sum-factorisation (Tet)
virtual void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp)
Perform operation.
std::tuple< LibUtilities::ShapeType, OperatorType, ImplementationType, ExpansionIsNodal > OperatorKey
Key for describing an Operator.
Principle Modified Functions .
Array< OneD, const NekDouble > m_base1
Inner product operator using sum-factorisation (Quad)
Array< OneD, const NekDouble > m_base0
IProductWRTBase_SumFac_Pyr(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData)
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< DNekMat > DNekMatSharedPtr
vector< StdRegions::StdExpansionSharedPtr > m_expList
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 A[m x n], B[n x k], C[m x k].
virtual void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp)
Perform operation.
Base class for operators on a collection of elements.
virtual void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp)
Perform operation.
Array< OneD, const NekDouble > m_jac
Array< OneD, const NekDouble > m_base2
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)
IProductWRTBase_SumFac_Tri(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData)
Array< OneD, const NekDouble > m_base2
IProductWRTBase_NoCollection(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData)
Array< OneD, const NekDouble > m_base1
Inner product operator using element-wise operation.
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)
Inner product operator using sum-factorisation (Tri)
Inner product operator using standard matrix approach.
virtual void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp)
Perform operation.
Array< OneD, const NekDouble > m_jac
virtual void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
virtual void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
IProductWRTBase_IterPerExp(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData)
virtual void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
OperatorFactory & GetOperatorFactory()
Returns the singleton Operator factory object.
virtual void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp)
Perform operation.
virtual void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp)
Perform operation.
Array< OneD, const NekDouble > m_jac
IProductWRTBase_SumFac_Hex(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData)
Inner product operator using sum-factorisation (Segment)
virtual void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp)
Perform operation.
Array< OneD, const NekDouble > m_base0
virtual void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
IProductWRTBase_SumFac_Prism(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData)
void PrismIProduct(bool sortTopVertex, 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)
Array< OneD, const NekDouble > m_base1
Array< OneD, const NekDouble > m_jac
Array< OneD, const NekDouble > m_base0
Array< OneD, const NekDouble > m_base0
virtual void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp)
Perform operation.
#define OPERATOR_CREATE(cname)
Array< OneD, const NekDouble > m_jac
Array< OneD, const NekDouble > m_base2
Array< OneD, const NekDouble > m_base1
Array< OneD, const NekDouble > m_base0
Array< OneD, const NekDouble > m_base0
virtual void operator()(int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
Array< OneD, NekDouble > m_jac
Array< OneD, const NekDouble > m_base0
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
Array< OneD, const NekDouble > m_jac
Array< OneD, const NekDouble > m_base2
Array< OneD, const NekDouble > m_base1
virtual void operator()(const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp)
Perform operation.
Inner Product operator using sum-factorisation (Hex)
IProductWRTBase_SumFac_Quad(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData)
IProductWRTBase_SumFac_Seg(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData)
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
Inner product operator using original MultiRegions implementation.
IProductWRTBase_SumFac_Tet(vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData)
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.
Array< OneD, const NekDouble > m_base1