Nektar++
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
Public Member Functions | Protected Attributes | Private Member Functions | List of all members
Nektar::Collections::IProductWRTDerivBase_SumFac_Quad Class Reference

Inner product WRT deriv base operator using sum-factorisation (Quad) More...

Inheritance diagram for Nektar::Collections::IProductWRTDerivBase_SumFac_Quad:
Inheritance graph
[legend]
Collaboration diagram for Nektar::Collections::IProductWRTDerivBase_SumFac_Quad:
Collaboration graph
[legend]

Public Member Functions

virtual ~IProductWRTDerivBase_SumFac_Quad ()
 
virtual void operator() (const Array< OneD, const NekDouble > &entry0, Array< OneD, NekDouble > &entry1, Array< OneD, NekDouble > &entry2, Array< OneD, NekDouble > &entry3, Array< OneD, NekDouble > &wsp)
 Perform operation. More...
 
virtual void operator() (int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
 
- Public Member Functions inherited from Nektar::Collections::Operator
 Operator (std::vector< StdRegions::StdExpansionSharedPtr > pCollExp, boost::shared_ptr< CoalescedGeomData > GeomData)
 Constructor. More...
 
virtual COLLECTIONS_EXPORT ~Operator ()
 
int GetWspSize ()
 Get the size of the required workspace. More...
 

Protected Attributes

const int m_nquad0
 
const int m_nquad1
 
const int m_nmodes0
 
const int m_nmodes1
 
const bool m_colldir0
 
const bool m_colldir1
 
int m_coordim
 
Array< TwoD, const NekDoublem_derivFac
 
Array< OneD, const NekDoublem_jac
 
Array< OneD, const NekDoublem_base0
 
Array< OneD, const NekDoublem_base1
 
Array< OneD, const NekDoublem_derbase0
 
Array< OneD, const NekDoublem_derbase1
 
- Protected Attributes inherited from Nektar::Collections::Operator
StdRegions::StdExpansionSharedPtr m_stdExp
 
unsigned int m_numElmt
 
unsigned int m_wspSize
 

Private Member Functions

 IProductWRTDerivBase_SumFac_Quad (vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData)
 

Detailed Description

Inner product WRT deriv base operator using sum-factorisation (Quad)

Definition at line 570 of file IProductWRTDerivBase.cpp.

Constructor & Destructor Documentation

virtual Nektar::Collections::IProductWRTDerivBase_SumFac_Quad::~IProductWRTDerivBase_SumFac_Quad ( )
inlinevirtual

Definition at line 575 of file IProductWRTDerivBase.cpp.

576  {
577  }
Nektar::Collections::IProductWRTDerivBase_SumFac_Quad::IProductWRTDerivBase_SumFac_Quad ( vector< StdRegions::StdExpansionSharedPtr pCollExp,
CoalescedGeomDataSharedPtr  pGeomData 
)
inlineprivate

Definition at line 655 of file IProductWRTDerivBase.cpp.

658  : Operator(pCollExp, pGeomData),
659  m_nquad0 (m_stdExp->GetNumPoints(0)),
660  m_nquad1 (m_stdExp->GetNumPoints(1)),
661  m_nmodes0 (m_stdExp->GetBasisNumModes(0)),
662  m_nmodes1 (m_stdExp->GetBasisNumModes(1)),
663  m_colldir0(m_stdExp->GetBasis(0)->Collocation()),
664  m_colldir1(m_stdExp->GetBasis(1)->Collocation()),
665  m_base0 (m_stdExp->GetBasis(0)->GetBdata()),
666  m_base1 (m_stdExp->GetBasis(1)->GetBdata()),
667  m_derbase0(m_stdExp->GetBasis(0)->GetDbdata()),
668  m_derbase1(m_stdExp->GetBasis(1)->GetDbdata())
669  {
670  LibUtilities::PointsKeyVector PtsKey = m_stdExp->GetPointsKeys();
671  m_coordim = m_stdExp->GetCoordim();
672 
673  m_derivFac = pGeomData->GetDerivFactors(pCollExp);
674  m_jac = pGeomData->GetJacWithStdWeights(pCollExp);
675  m_wspSize = 4 * m_numElmt * (max(m_nquad0*m_nquad1,
677  }
Operator(std::vector< StdRegions::StdExpansionSharedPtr > pCollExp, boost::shared_ptr< CoalescedGeomData > GeomData)
Constructor.
Definition: Operator.h:112
std::vector< PointsKey > PointsKeyVector
Definition: Points.h:242
StdRegions::StdExpansionSharedPtr m_stdExp
Definition: Operator.h:146

Member Function Documentation

virtual void Nektar::Collections::IProductWRTDerivBase_SumFac_Quad::operator() ( const Array< OneD, const NekDouble > &  input,
Array< OneD, NekDouble > &  output0,
Array< OneD, NekDouble > &  output1,
Array< OneD, NekDouble > &  output2,
Array< OneD, NekDouble > &  wsp 
)
inlinevirtual

Perform operation.

Implements Nektar::Collections::Operator.

Definition at line 579 of file IProductWRTDerivBase.cpp.

References Nektar::Collections::QuadIProduct(), Vmath::Vadd(), Vmath::Vmul(), and Vmath::Vvtvp().

585  {
586  unsigned int nPhys = m_stdExp->GetTotPoints();
587  unsigned int ntot = m_numElmt*nPhys;
588  unsigned int nmodes = m_stdExp->GetNcoeffs();
589  unsigned int nmax = max(ntot,m_numElmt*nmodes);
590  Array<OneD, Array<OneD, const NekDouble> > in(3);
591  Array<OneD, NekDouble> output, wsp1;
592  Array<OneD, Array<OneD, NekDouble> > tmp(2);
593 
594  in[0] = entry0; in[1] = entry1; in[2] = entry2;
595 
596  output = (m_coordim == 2)? entry2: entry3;
597 
598  tmp[0] = wsp; tmp[1] = wsp + nmax;
599  wsp1 = wsp + 2*nmax;
600 
601  // calculate dx/dxi in[0] + dy/dxi in[1]
602  for(int i = 0; i < 2; ++i)
603  {
604  Vmath::Vmul (ntot,m_derivFac[i],1, in[0],1,
605  tmp[i],1);
606  for(int j = 1; j < m_coordim; ++j)
607  {
608  Vmath::Vvtvp (ntot,m_derivFac[i +j*2],1,
609  in[j],1, tmp[i], 1, tmp[i],1);
610  }
611  }
612 
613  // Iproduct wrt derivative of base 0
618  m_jac, tmp[0], output, wsp1);
619 
620  // Iproduct wrt derivative of base 1
625  m_jac, tmp[1], tmp[0], wsp1);
626 
627  Vmath::Vadd(m_numElmt*nmodes,tmp[0],1,output,1,output,1);
628  }
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
Definition: Vmath.cpp:442
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)
Definition: IProduct.cpp:49
StdRegions::StdExpansionSharedPtr m_stdExp
Definition: Operator.h:146
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.
Definition: Vmath.cpp:299
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.
Definition: Vmath.cpp:183
virtual void Nektar::Collections::IProductWRTDerivBase_SumFac_Quad::operator() ( int  dir,
const Array< OneD, const NekDouble > &  input,
Array< OneD, NekDouble > &  output,
Array< OneD, NekDouble > &  wsp 
)
inlinevirtual

Implements Nektar::Collections::Operator.

Definition at line 630 of file IProductWRTDerivBase.cpp.

References ASSERTL0.

635  {
636  ASSERTL0(false, "Not valid for this operator.");
637  }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:198

Member Data Documentation

Array<OneD, const NekDouble> Nektar::Collections::IProductWRTDerivBase_SumFac_Quad::m_base0
protected

Definition at line 649 of file IProductWRTDerivBase.cpp.

Array<OneD, const NekDouble> Nektar::Collections::IProductWRTDerivBase_SumFac_Quad::m_base1
protected

Definition at line 650 of file IProductWRTDerivBase.cpp.

const bool Nektar::Collections::IProductWRTDerivBase_SumFac_Quad::m_colldir0
protected

Definition at line 644 of file IProductWRTDerivBase.cpp.

const bool Nektar::Collections::IProductWRTDerivBase_SumFac_Quad::m_colldir1
protected

Definition at line 645 of file IProductWRTDerivBase.cpp.

int Nektar::Collections::IProductWRTDerivBase_SumFac_Quad::m_coordim
protected

Definition at line 646 of file IProductWRTDerivBase.cpp.

Array<OneD, const NekDouble> Nektar::Collections::IProductWRTDerivBase_SumFac_Quad::m_derbase0
protected

Definition at line 651 of file IProductWRTDerivBase.cpp.

Array<OneD, const NekDouble> Nektar::Collections::IProductWRTDerivBase_SumFac_Quad::m_derbase1
protected

Definition at line 652 of file IProductWRTDerivBase.cpp.

Array<TwoD, const NekDouble> Nektar::Collections::IProductWRTDerivBase_SumFac_Quad::m_derivFac
protected

Definition at line 647 of file IProductWRTDerivBase.cpp.

Array<OneD, const NekDouble> Nektar::Collections::IProductWRTDerivBase_SumFac_Quad::m_jac
protected

Definition at line 648 of file IProductWRTDerivBase.cpp.

const int Nektar::Collections::IProductWRTDerivBase_SumFac_Quad::m_nmodes0
protected

Definition at line 642 of file IProductWRTDerivBase.cpp.

const int Nektar::Collections::IProductWRTDerivBase_SumFac_Quad::m_nmodes1
protected

Definition at line 643 of file IProductWRTDerivBase.cpp.

const int Nektar::Collections::IProductWRTDerivBase_SumFac_Quad::m_nquad0
protected

Definition at line 640 of file IProductWRTDerivBase.cpp.

const int Nektar::Collections::IProductWRTDerivBase_SumFac_Quad::m_nquad1
protected

Definition at line 641 of file IProductWRTDerivBase.cpp.