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_StdMat Class Reference

Inner product WRT deriv base operator using standard matrix approach. More...

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

Public Member Functions

virtual ~IProductWRTDerivBase_StdMat ()
 
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

Array< OneD, DNekMatSharedPtrm_iProdWRTStdDBase
 
Array< TwoD, const NekDoublem_derivFac
 
Array< OneD, const NekDoublem_jac
 
int m_dim
 
int m_coordim
 
- Protected Attributes inherited from Nektar::Collections::Operator
StdRegions::StdExpansionSharedPtr m_stdExp
 
unsigned int m_numElmt
 
unsigned int m_wspSize
 

Private Member Functions

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

Detailed Description

Inner product WRT deriv base operator using standard matrix approach.

Definition at line 57 of file IProductWRTDerivBase.cpp.

Constructor & Destructor Documentation

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

Definition at line 62 of file IProductWRTDerivBase.cpp.

63  {
64  }
Nektar::Collections::IProductWRTDerivBase_StdMat::IProductWRTDerivBase_StdMat ( vector< StdRegions::StdExpansionSharedPtr pCollExp,
CoalescedGeomDataSharedPtr  pGeomData 
)
inlineprivate

Definition at line 144 of file IProductWRTDerivBase.cpp.

References Vmath::Vcopy(), and Vmath::Zero().

147  : Operator(pCollExp, pGeomData)
148  {
149  LibUtilities::PointsKeyVector PtsKey = m_stdExp->GetPointsKeys();
150  m_dim = PtsKey.size();
151  m_coordim = m_stdExp->GetCoordim();
152 
153  int nqtot = m_stdExp->GetTotPoints();
154  int nmodes = m_stdExp->GetNcoeffs();
155 
156  // set up a IProductWRTDerivBase StdMat.
157  m_iProdWRTStdDBase = Array<OneD, DNekMatSharedPtr>(m_dim);
158  for(int i = 0; i < m_dim; ++i)
159  {
160  Array<OneD, NekDouble> tmp(nqtot),tmp1(nmodes);
162  ::AllocateSharedPtr(nmodes,nqtot);
163  for(int j = 0; j < nqtot; ++j)
164  {
165  Vmath::Zero(nqtot,tmp,1);
166  tmp[j] = 1.0;
167  m_stdExp->IProductWRTDerivBase(i,tmp,tmp1);
168  Vmath::Vcopy(nmodes, &tmp1[0],1,
169  &(m_iProdWRTStdDBase[i]->GetPtr())[0]
170  + j*nmodes, 1);
171  }
172  }
173  m_derivFac = pGeomData->GetDerivFactors(pCollExp);
174  m_jac = pGeomData->GetJac(pCollExp);
175  m_wspSize = m_dim*nqtot*m_numElmt;
176  }
Operator(std::vector< StdRegions::StdExpansionSharedPtr > pCollExp, boost::shared_ptr< CoalescedGeomData > GeomData)
Constructor.
Definition: Operator.h:112
std::vector< PointsKey > PointsKeyVector
Definition: Points.h:242
static boost::shared_ptr< DataType > AllocateSharedPtr()
Allocate a shared pointer from the memory pool.
StdRegions::StdExpansionSharedPtr m_stdExp
Definition: Operator.h:146
void Zero(int n, T *x, const int incx)
Zero vector.
Definition: Vmath.cpp:373
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Definition: Vmath.cpp:1061

Member Function Documentation

virtual void Nektar::Collections::IProductWRTDerivBase_StdMat::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 66 of file IProductWRTDerivBase.cpp.

References Vmath::Vmul(), and Vmath::Vvtvp().

72  {
73  int nPhys = m_stdExp->GetTotPoints();
74  int ntot = m_numElmt*nPhys;
75  int nmodes = m_stdExp->GetNcoeffs();
76  Array<OneD, Array<OneD, const NekDouble> > in(3);
77  Array<OneD, NekDouble> output;
78  Array<OneD, Array<OneD, NekDouble> > tmp(3);
79 
80  in[0] = entry0; in[1] = entry1;
81  in[2] = entry2;
82 
83  output = (m_coordim == 3)? entry3: (m_coordim == 2)?
84  entry2: entry1;
85 
86  for(int i = 0; i < m_dim; ++i)
87  {
88  tmp[i] = wsp + i*ntot;
89  }
90 
91  // calculate dx/dxi in[0] + dy/dxi in[1] + dz/dxi in[2]
92  for(int i = 0; i < m_dim; ++i)
93  {
94  Vmath::Vmul (ntot,m_derivFac[i],1, in[0],1,
95  tmp[i],1);
96  for(int j = 1; j < m_coordim; ++j)
97  {
98  Vmath::Vvtvp (ntot,m_derivFac[i +j*m_dim],1,
99  in[j],1, tmp[i], 1, tmp[i],1);
100  }
101  }
102 
103  // calculate Iproduct WRT Std Deriv
104 
105  // First component
106  Vmath::Vmul(ntot,m_jac,1,tmp[0],1,tmp[0],1);
107  Blas::Dgemm('N', 'N', m_iProdWRTStdDBase[0]->GetRows(),
108  m_numElmt,m_iProdWRTStdDBase[0]->GetColumns(),
109  1.0, m_iProdWRTStdDBase[0]->GetRawPtr(),
110  m_iProdWRTStdDBase[0]->GetRows(),
111  tmp[0].get(), nPhys, 0.0,
112  output.get(), nmodes);
113 
114  // Other components
115  for(int i = 1; i < m_dim; ++i)
116  {
117  Vmath::Vmul(ntot,m_jac,1,tmp[i],1,tmp[i],1);
118  Blas::Dgemm('N', 'N', m_iProdWRTStdDBase[i]->GetRows(),
119  m_numElmt,m_iProdWRTStdDBase[i]->GetColumns(),
120  1.0, m_iProdWRTStdDBase[i]->GetRawPtr(),
121  m_iProdWRTStdDBase[i]->GetRows(),
122  tmp[i].get(), nPhys, 1.0,
123  output.get(), nmodes);
124  }
125  }
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
StdRegions::StdExpansionSharedPtr m_stdExp
Definition: Operator.h:146
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_StdMat::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 127 of file IProductWRTDerivBase.cpp.

References ASSERTL0.

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

Member Data Documentation

int Nektar::Collections::IProductWRTDerivBase_StdMat::m_coordim
protected

Definition at line 141 of file IProductWRTDerivBase.cpp.

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

Definition at line 138 of file IProductWRTDerivBase.cpp.

int Nektar::Collections::IProductWRTDerivBase_StdMat::m_dim
protected

Definition at line 140 of file IProductWRTDerivBase.cpp.

Array<OneD, DNekMatSharedPtr> Nektar::Collections::IProductWRTDerivBase_StdMat::m_iProdWRTStdDBase
protected

Definition at line 137 of file IProductWRTDerivBase.cpp.

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

Definition at line 139 of file IProductWRTDerivBase.cpp.