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

Inner product WRT deriv base operator using element-wise operation. More...

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

Public Member Functions

virtual ~IProductWRTDerivBase_IterPerExp ()
 
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< 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_IterPerExp (vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData)
 

Detailed Description

Inner product WRT deriv base operator using element-wise operation.

Definition at line 227 of file IProductWRTDerivBase.cpp.

Constructor & Destructor Documentation

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

Definition at line 232 of file IProductWRTDerivBase.cpp.

233  {
234  }
Nektar::Collections::IProductWRTDerivBase_IterPerExp::IProductWRTDerivBase_IterPerExp ( vector< StdRegions::StdExpansionSharedPtr pCollExp,
CoalescedGeomDataSharedPtr  pGeomData 
)
inlineprivate

Definition at line 312 of file IProductWRTDerivBase.cpp.

315  : Operator(pCollExp, pGeomData)
316  {
317  LibUtilities::PointsKeyVector PtsKey = m_stdExp->GetPointsKeys();
318  m_dim = PtsKey.size();
319  m_coordim = m_stdExp->GetCoordim();
320 
321  int nqtot = m_stdExp->GetTotPoints();
322 
323  m_derivFac = pGeomData->GetDerivFactors(pCollExp);
324  m_jac = pGeomData->GetJac(pCollExp);
325  m_wspSize = m_dim*nqtot*m_numElmt;
326  }
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_IterPerExp::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 236 of file IProductWRTDerivBase.cpp.

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

242  {
243  unsigned int nPhys = m_stdExp->GetTotPoints();
244  unsigned int ntot = m_numElmt*nPhys;
245  unsigned int nmodes = m_stdExp->GetNcoeffs();
246  unsigned int nmax = max(ntot,m_numElmt*nmodes);
247  Array<OneD, Array<OneD, const NekDouble> > in(3);
248  Array<OneD, NekDouble> output, tmp1;
249  Array<OneD, Array<OneD, NekDouble> > tmp(3);
250 
251  in[0] = entry0; in[1] = entry1; in[2] = entry2;
252 
253  output = (m_coordim == 3)? entry3: (m_coordim == 2)?
254  entry2: entry1;
255 
256  for(int i = 0; i < m_dim; ++i)
257  {
258  tmp[i] = wsp + i*nmax;
259  }
260 
261  // calculate dx/dxi in[0] + dy/dxi in[2] + dz/dxi in[3]
262  for(int i = 0; i < m_dim; ++i)
263  {
264  Vmath::Vmul (ntot,m_derivFac[i],1, in[0],1,
265  tmp[i],1);
266  for(int j = 1; j < m_coordim; ++j)
267  {
268  Vmath::Vvtvp (ntot,m_derivFac[i +j*m_dim],1,
269  in[j],1, tmp[i], 1, tmp[i],1);
270  }
271  }
272 
273  // calculate Iproduct WRT Std Deriv
274  // first component
275  Vmath::Vmul(ntot,m_jac,1,tmp[0],1,tmp[0],1);
276  for(int n = 0; n < m_numElmt; ++n)
277  {
278  m_stdExp->IProductWRTDerivBase(0,tmp[0]+n*nPhys,
279  tmp1 = output + n*nmodes);
280  }
281 
282  // other components
283  for(int i = 1; i < m_dim; ++i)
284  {
285  // multiply by Jacobian
286  Vmath::Vmul(ntot,m_jac,1,tmp[i],1,tmp[i],1);
287  for(int n = 0; n < m_numElmt; ++n)
288  {
289  m_stdExp->IProductWRTDerivBase(i,tmp[i]+n*nPhys,tmp[0]);
290  Vmath::Vadd(nmodes,tmp[0],1,output+n*nmodes,1,
291  tmp1 = output+n*nmodes,1);
292  }
293  }
294  }
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 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_IterPerExp::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 296 of file IProductWRTDerivBase.cpp.

References ASSERTL0.

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

Member Data Documentation

int Nektar::Collections::IProductWRTDerivBase_IterPerExp::m_coordim
protected

Definition at line 309 of file IProductWRTDerivBase.cpp.

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

Definition at line 306 of file IProductWRTDerivBase.cpp.

int Nektar::Collections::IProductWRTDerivBase_IterPerExp::m_dim
protected

Definition at line 308 of file IProductWRTDerivBase.cpp.

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

Definition at line 307 of file IProductWRTDerivBase.cpp.