Nektar++
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | List of all members
Nektar::LibUtilities::Points< DataT > Class Template Reference

Stores a set of points of datatype DataT, defined by a PointKey. More...

#include <Points.h>

Public Types

typedef DataT DataType
 
typedef std::shared_ptr< NekMatrix< DataType > > MatrixSharedPtrType
 

Public Member Functions

virtual ~Points ()
 
void Initialize (void)
 
unsigned int GetPointsDim () const
 
unsigned int GetNumPoints () const
 
unsigned int GetTotNumPoints () const
 
PointsType GetPointsType () const
 
const Array< OneD, const DataType > & GetZ () const
 
const Array< OneD, const DataType > & GetW () const
 
void GetZW (Array< OneD, const DataType > &z, Array< OneD, const DataType > &w) const
 
const Array< OneD, const NekDouble > & GetBaryWeights () const
 
void GetPoints (Array< OneD, const DataType > &x) const
 
void GetPoints (Array< OneD, const DataType > &x, Array< OneD, const DataType > &y) const
 
void GetPoints (Array< OneD, const DataType > &x, Array< OneD, const DataType > &y, Array< OneD, const DataType > &z) const
 
const MatrixSharedPtrTypeGetD (Direction dir=xDir) const
 
const MatrixSharedPtrType GetI (const PointsKey &key)
 
const MatrixSharedPtrType GetI (const Array< OneD, const DataType > &x)
 
const MatrixSharedPtrType GetI (unsigned int uint, const Array< OneD, const DataType > &x)
 
const MatrixSharedPtrType GetI (const Array< OneD, const DataType > &x, const Array< OneD, const DataType > &y)
 
const MatrixSharedPtrType GetI (const Array< OneD, const DataType > &x, const Array< OneD, const DataType > &y, const Array< OneD, const DataType > &z)
 
const MatrixSharedPtrType GetGalerkinProjection (const PointsKey &pkey)
 

Protected Member Functions

virtual void v_Initialize (void)
 
virtual void v_CalculatePoints ()
 
virtual void v_CalculateWeights ()
 
virtual void v_CalculateBaryWeights ()
 This function calculates the barycentric weights used for enhanced interpolation speed. More...
 
virtual void v_CalculateDerivMatrix ()
 
 Points (const PointsKey &key)
 
virtual const MatrixSharedPtrType v_GetI (const PointsKey &key)
 
virtual const MatrixSharedPtrType v_GetI (const Array< OneD, const DataType > &x)
 
virtual const MatrixSharedPtrType v_GetI (unsigned int, const Array< OneD, const DataType > &x)
 
virtual const MatrixSharedPtrType v_GetI (const Array< OneD, const DataType > &x, const Array< OneD, const DataType > &y)
 
virtual const MatrixSharedPtrType v_GetI (const Array< OneD, const DataType > &x, const Array< OneD, const DataType > &y, const Array< OneD, const DataType > &z)
 
virtual const MatrixSharedPtrType v_GetGalerkinProjection (const PointsKey &pkey)
 

Protected Attributes

PointsKey m_pointsKey
 Points type for this points distributions. More...
 
Array< OneD, DataTypem_points [3]
 Storage for the point locations, allowing for up to a 3D points storage. More...
 
Array< OneD, DataTypem_weights
 Quadrature weights for the weights. More...
 
Array< OneD, DataTypem_bcweights
 Barycentric weights. More...
 
MatrixSharedPtrType m_derivmatrix [3]
 Derivative matrices. More...
 
NekManager< PointsKey, NekMatrix< DataType >, PointsKey::opLessm_InterpManager
 
NekManager< PointsKey, NekMatrix< DataType >, PointsKey::opLessm_GalerkinProjectionManager
 

Private Member Functions

 Points (const Points &pts)
 
 Points ()
 

Detailed Description

template<typename DataT>
class Nektar::LibUtilities::Points< DataT >

Stores a set of points of datatype DataT, defined by a PointKey.

This encapsulates a set of points, specified by a PointKey. The class stores not only the point coordinates, but also the integration weights and derivative matrix coefficients. Memory is allocated from the memory pool if in use.

Definition at line 253 of file Points.h.

Member Typedef Documentation

◆ DataType

template<typename DataT >
typedef DataT Nektar::LibUtilities::Points< DataT >::DataType

Definition at line 256 of file Points.h.

◆ MatrixSharedPtrType

template<typename DataT >
typedef std::shared_ptr<NekMatrix<DataType> > Nektar::LibUtilities::Points< DataT >::MatrixSharedPtrType

Definition at line 257 of file Points.h.

Constructor & Destructor Documentation

◆ ~Points()

template<typename DataT >
virtual Nektar::LibUtilities::Points< DataT >::~Points ( )
inlinevirtual

Definition at line 259 of file Points.h.

260  {
261  }

◆ Points() [1/3]

template<typename DataT >
Nektar::LibUtilities::Points< DataT >::Points ( const PointsKey key)
inlineprotected

Definition at line 456 of file Points.h.

456  : m_pointsKey(key)
457  {
458  }
PointsKey m_pointsKey
Points type for this points distributions.
Definition: Points.h:372

◆ Points() [2/3]

template<typename DataT >
Nektar::LibUtilities::Points< DataT >::Points ( const Points< DataT > &  pts)
inlineprivate

Definition at line 524 of file Points.h.

525  {
526  boost::ignore_unused(pts);
528  "Copy Constructor for Points should not be called");
529  }
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mode...
Definition: ErrorUtil.hpp:209

References Nektar::ErrorUtil::efatal, and NEKERROR.

◆ Points() [3/3]

template<typename DataT >
Nektar::LibUtilities::Points< DataT >::Points ( )
inlineprivate

Definition at line 530 of file Points.h.

531  {
533  "Default Constructor for Points should not be called");
534  }

References Nektar::ErrorUtil::efatal, and NEKERROR.

Member Function Documentation

◆ GetBaryWeights()

template<typename DataT >
const Array<OneD, const NekDouble>& Nektar::LibUtilities::Points< DataT >::GetBaryWeights ( ) const
inline

Definition at line 305 of file Points.h.

306  {
307  return m_bcweights;
308  }
Array< OneD, DataType > m_bcweights
Barycentric weights.
Definition: Points.h:379

References Nektar::LibUtilities::Points< DataT >::m_bcweights.

◆ GetD()

template<typename DataT >
const MatrixSharedPtrType& Nektar::LibUtilities::Points< DataT >::GetD ( Direction  dir = xDir) const
inline

Definition at line 331 of file Points.h.

332  {
333  return m_derivmatrix[(int)dir];
334  }
MatrixSharedPtrType m_derivmatrix[3]
Derivative matrices.
Definition: Points.h:381

References Nektar::LibUtilities::Points< DataT >::m_derivmatrix.

◆ GetGalerkinProjection()

template<typename DataT >
const MatrixSharedPtrType Nektar::LibUtilities::Points< DataT >::GetGalerkinProjection ( const PointsKey pkey)
inline

Definition at line 365 of file Points.h.

366  {
367  return v_GetGalerkinProjection(pkey);
368  }
virtual const MatrixSharedPtrType v_GetGalerkinProjection(const PointsKey &pkey)
Definition: Points.h:512

References Nektar::LibUtilities::Points< DataT >::v_GetGalerkinProjection().

◆ GetI() [1/5]

template<typename DataT >
const MatrixSharedPtrType Nektar::LibUtilities::Points< DataT >::GetI ( const Array< OneD, const DataType > &  x)
inline

Definition at line 341 of file Points.h.

342  {
343  return v_GetI(x);
344  }
virtual const MatrixSharedPtrType v_GetI(const PointsKey &key)
Definition: Points.h:460

References Nektar::LibUtilities::Points< DataT >::v_GetI().

◆ GetI() [2/5]

template<typename DataT >
const MatrixSharedPtrType Nektar::LibUtilities::Points< DataT >::GetI ( const Array< OneD, const DataType > &  x,
const Array< OneD, const DataType > &  y 
)
inline

Definition at line 352 of file Points.h.

354  {
355  return v_GetI(x, y);
356  }

References Nektar::LibUtilities::Points< DataT >::v_GetI().

◆ GetI() [3/5]

template<typename DataT >
const MatrixSharedPtrType Nektar::LibUtilities::Points< DataT >::GetI ( const Array< OneD, const DataType > &  x,
const Array< OneD, const DataType > &  y,
const Array< OneD, const DataType > &  z 
)
inline

Definition at line 358 of file Points.h.

361  {
362  return v_GetI(x, y, z);
363  }

References Nektar::LibUtilities::Points< DataT >::v_GetI().

◆ GetI() [4/5]

template<typename DataT >
const MatrixSharedPtrType Nektar::LibUtilities::Points< DataT >::GetI ( const PointsKey key)
inline

Definition at line 336 of file Points.h.

337  {
338  return v_GetI(key);
339  }

References Nektar::LibUtilities::Points< DataT >::v_GetI().

◆ GetI() [5/5]

template<typename DataT >
const MatrixSharedPtrType Nektar::LibUtilities::Points< DataT >::GetI ( unsigned int  uint,
const Array< OneD, const DataType > &  x 
)
inline

Definition at line 346 of file Points.h.

348  {
349  return v_GetI(uint, x);
350  }

References Nektar::LibUtilities::Points< DataT >::v_GetI().

◆ GetNumPoints()

template<typename DataT >
unsigned int Nektar::LibUtilities::Points< DataT >::GetNumPoints ( ) const
inline

Definition at line 273 of file Points.h.

274  {
275  return m_pointsKey.GetNumPoints();
276  }
unsigned int GetNumPoints() const
Definition: Points.h:104

References Nektar::LibUtilities::PointsKey::GetNumPoints(), and Nektar::LibUtilities::Points< DataT >::m_pointsKey.

◆ GetPoints() [1/3]

template<typename DataT >
void Nektar::LibUtilities::Points< DataT >::GetPoints ( Array< OneD, const DataType > &  x) const
inline

Definition at line 310 of file Points.h.

311  {
312  x = m_points[0];
313  }
Array< OneD, DataType > m_points[3]
Storage for the point locations, allowing for up to a 3D points storage.
Definition: Points.h:375

References Nektar::LibUtilities::Points< DataT >::m_points.

◆ GetPoints() [2/3]

template<typename DataT >
void Nektar::LibUtilities::Points< DataT >::GetPoints ( Array< OneD, const DataType > &  x,
Array< OneD, const DataType > &  y 
) const
inline

Definition at line 315 of file Points.h.

317  {
318  x = m_points[0];
319  y = m_points[1];
320  }

References Nektar::LibUtilities::Points< DataT >::m_points.

◆ GetPoints() [3/3]

template<typename DataT >
void Nektar::LibUtilities::Points< DataT >::GetPoints ( Array< OneD, const DataType > &  x,
Array< OneD, const DataType > &  y,
Array< OneD, const DataType > &  z 
) const
inline

Definition at line 322 of file Points.h.

325  {
326  x = m_points[0];
327  y = m_points[1];
328  z = m_points[2];
329  }

References Nektar::LibUtilities::Points< DataT >::m_points.

◆ GetPointsDim()

template<typename DataT >
unsigned int Nektar::LibUtilities::Points< DataT >::GetPointsDim ( ) const
inline

◆ GetPointsType()

template<typename DataT >
PointsType Nektar::LibUtilities::Points< DataT >::GetPointsType ( ) const
inline

Definition at line 283 of file Points.h.

284  {
285  return m_pointsKey.GetPointsType();
286  }
PointsType GetPointsType() const
Definition: Points.h:109

References Nektar::LibUtilities::PointsKey::GetPointsType(), and Nektar::LibUtilities::Points< DataT >::m_pointsKey.

◆ GetTotNumPoints()

template<typename DataT >
unsigned int Nektar::LibUtilities::Points< DataT >::GetTotNumPoints ( ) const
inline

◆ GetW()

template<typename DataT >
const Array<OneD, const DataType>& Nektar::LibUtilities::Points< DataT >::GetW ( ) const
inline

Definition at line 293 of file Points.h.

294  {
295  return m_weights;
296  }
Array< OneD, DataType > m_weights
Quadrature weights for the weights.
Definition: Points.h:377

References Nektar::LibUtilities::Points< DataT >::m_weights.

◆ GetZ()

template<typename DataT >
const Array<OneD, const DataType>& Nektar::LibUtilities::Points< DataT >::GetZ ( ) const
inline

Definition at line 288 of file Points.h.

289  {
290  return m_points[0];
291  }

References Nektar::LibUtilities::Points< DataT >::m_points.

◆ GetZW()

template<typename DataT >
void Nektar::LibUtilities::Points< DataT >::GetZW ( Array< OneD, const DataType > &  z,
Array< OneD, const DataType > &  w 
) const
inline

Definition at line 298 of file Points.h.

300  {
301  z = m_points[0];
302  w = m_weights;
303  }

References Nektar::LibUtilities::Points< DataT >::m_points, and Nektar::LibUtilities::Points< DataT >::m_weights.

◆ Initialize()

template<typename DataT >
void Nektar::LibUtilities::Points< DataT >::Initialize ( void  )
inline

Definition at line 263 of file Points.h.

264  {
265  v_Initialize();
266  }
virtual void v_Initialize(void)
Definition: Points.h:387

References Nektar::LibUtilities::Points< DataT >::v_Initialize().

◆ v_CalculateBaryWeights()

template<typename DataT >
virtual void Nektar::LibUtilities::Points< DataT >::v_CalculateBaryWeights ( )
inlineprotectedvirtual

This function calculates the barycentric weights used for enhanced interpolation speed.

For the points distribution \( z_i \) with \f% 1\leq z_i \leq N

Definition at line 422 of file Points.h.

423  {
424  const unsigned int totNumPoints = m_pointsKey.GetNumPoints();
425  m_bcweights = Array<OneD, DataType>(totNumPoints, 1.0);
426 
427  Array<OneD, DataType> z = m_points[0];
428 
429  for (unsigned int i = 0; i < totNumPoints; ++i)
430  {
431  for (unsigned int j = 0; j < totNumPoints; ++j)
432  {
433  if (i == j)
434  {
435  continue;
436  }
437 
438  m_bcweights[i] *= (z[i] - z[j]);
439  }
440 
441  m_bcweights[i] = 1.0 / m_bcweights[i];
442  }
443  }

References Nektar::LibUtilities::PointsKey::GetNumPoints(), Nektar::LibUtilities::Points< DataT >::m_bcweights, Nektar::LibUtilities::Points< DataT >::m_points, and Nektar::LibUtilities::Points< DataT >::m_pointsKey.

Referenced by Nektar::LibUtilities::Points< DataT >::v_Initialize().

◆ v_CalculateDerivMatrix()

template<typename DataT >
virtual void Nektar::LibUtilities::Points< DataT >::v_CalculateDerivMatrix ( )
inlineprotectedvirtual

Reimplemented in Nektar::LibUtilities::PolyEPoints, Nektar::LibUtilities::NodalTriSPI, Nektar::LibUtilities::NodalTriFekete, Nektar::LibUtilities::NodalTriEvenlySpaced, Nektar::LibUtilities::NodalTriElec, Nektar::LibUtilities::NodalTetSPI, Nektar::LibUtilities::NodalTetEvenlySpaced, Nektar::LibUtilities::NodalTetElec, Nektar::LibUtilities::NodalQuadElec, Nektar::LibUtilities::NodalPrismSPI, Nektar::LibUtilities::NodalPrismEvenlySpaced, Nektar::LibUtilities::NodalPrismElec, Nektar::LibUtilities::NodalHexElec, Nektar::LibUtilities::GaussPoints, Nektar::LibUtilities::FourierSingleModePoints, Nektar::LibUtilities::FourierPoints, and Nektar::LibUtilities::BLPoints.

Definition at line 445 of file Points.h.

446  {
447  int totNumPoints = GetTotNumPoints();
448  for (unsigned int i = 0; i < m_pointsKey.GetPointsDim(); ++i)
449  {
450  m_derivmatrix[i] =
451  MemoryManager<NekMatrix<DataType>>::AllocateSharedPtr(
452  totNumPoints, totNumPoints);
453  }
454  }
unsigned int GetTotNumPoints() const
Definition: Points.h:278

References Nektar::LibUtilities::PointsKey::GetPointsDim(), Nektar::LibUtilities::Points< DataT >::GetTotNumPoints(), Nektar::LibUtilities::Points< DataT >::m_derivmatrix, and Nektar::LibUtilities::Points< DataT >::m_pointsKey.

Referenced by Nektar::LibUtilities::BLPoints::v_CalculateDerivMatrix(), Nektar::LibUtilities::FourierPoints::v_CalculateDerivMatrix(), Nektar::LibUtilities::FourierSingleModePoints::v_CalculateDerivMatrix(), and Nektar::LibUtilities::Points< DataT >::v_Initialize().

◆ v_CalculatePoints()

template<typename DataT >
virtual void Nektar::LibUtilities::Points< DataT >::v_CalculatePoints ( )
inlineprotectedvirtual

◆ v_CalculateWeights()

template<typename DataT >
virtual void Nektar::LibUtilities::Points< DataT >::v_CalculateWeights ( )
inlineprotectedvirtual

◆ v_GetGalerkinProjection()

template<typename DataT >
virtual const MatrixSharedPtrType Nektar::LibUtilities::Points< DataT >::v_GetGalerkinProjection ( const PointsKey pkey)
inlineprotectedvirtual

Reimplemented in Nektar::LibUtilities::GaussPoints.

Definition at line 512 of file Points.h.

514  {
515  boost::ignore_unused(pkey);
516  NEKERROR(ErrorUtil::efatal, "Method not implemented ");
517  std::shared_ptr<NekMatrix<NekDouble>> returnval(
518  MemoryManager<NekMatrix<NekDouble>>::AllocateSharedPtr());
519  return returnval;
520  }

References Nektar::ErrorUtil::efatal, and NEKERROR.

Referenced by Nektar::LibUtilities::Points< DataT >::GetGalerkinProjection().

◆ v_GetI() [1/5]

template<typename DataT >
virtual const MatrixSharedPtrType Nektar::LibUtilities::Points< DataT >::v_GetI ( const Array< OneD, const DataType > &  x)
inlineprotectedvirtual

Reimplemented in Nektar::LibUtilities::PolyEPoints, Nektar::LibUtilities::GaussPoints, Nektar::LibUtilities::FourierSingleModePoints, Nektar::LibUtilities::FourierPoints, and Nektar::LibUtilities::BLPoints.

Definition at line 469 of file Points.h.

471  {
472  boost::ignore_unused(x);
473  NEKERROR(ErrorUtil::efatal, "Method not implemented");
474  std::shared_ptr<NekMatrix<NekDouble>> returnval(
475  MemoryManager<NekMatrix<NekDouble>>::AllocateSharedPtr());
476  return returnval;
477  }

References Nektar::ErrorUtil::efatal, and NEKERROR.

◆ v_GetI() [2/5]

template<typename DataT >
virtual const MatrixSharedPtrType Nektar::LibUtilities::Points< DataT >::v_GetI ( const Array< OneD, const DataType > &  x,
const Array< OneD, const DataType > &  y 
)
inlineprotectedvirtual

Reimplemented in Nektar::LibUtilities::NodalTriFekete, Nektar::LibUtilities::NodalTriEvenlySpaced, and Nektar::LibUtilities::NodalTriElec.

Definition at line 489 of file Points.h.

492  {
493  boost::ignore_unused(x, y);
494  NEKERROR(ErrorUtil::efatal, "Method not implemented");
495  std::shared_ptr<NekMatrix<NekDouble>> returnval(
496  MemoryManager<NekMatrix<NekDouble>>::AllocateSharedPtr());
497  return returnval;
498  }

References Nektar::ErrorUtil::efatal, and NEKERROR.

◆ v_GetI() [3/5]

template<typename DataT >
virtual const MatrixSharedPtrType Nektar::LibUtilities::Points< DataT >::v_GetI ( const Array< OneD, const DataType > &  x,
const Array< OneD, const DataType > &  y,
const Array< OneD, const DataType > &  z 
)
inlineprotectedvirtual

Reimplemented in Nektar::LibUtilities::NodalTetEvenlySpaced, Nektar::LibUtilities::NodalTetElec, Nektar::LibUtilities::NodalPrismEvenlySpaced, and Nektar::LibUtilities::NodalPrismElec.

Definition at line 500 of file Points.h.

504  {
505  boost::ignore_unused(x, y, z);
506  NEKERROR(ErrorUtil::efatal, "Method not implemented");
507  std::shared_ptr<NekMatrix<NekDouble>> returnval(
508  MemoryManager<NekMatrix<NekDouble>>::AllocateSharedPtr());
509  return returnval;
510  }

References Nektar::ErrorUtil::efatal, and NEKERROR.

◆ v_GetI() [4/5]

template<typename DataT >
virtual const MatrixSharedPtrType Nektar::LibUtilities::Points< DataT >::v_GetI ( const PointsKey key)
inlineprotectedvirtual

◆ v_GetI() [5/5]

template<typename DataT >
virtual const MatrixSharedPtrType Nektar::LibUtilities::Points< DataT >::v_GetI ( unsigned int  ,
const Array< OneD, const DataType > &  x 
)
inlineprotectedvirtual

Reimplemented in Nektar::LibUtilities::PolyEPoints, Nektar::LibUtilities::GaussPoints, Nektar::LibUtilities::FourierSingleModePoints, Nektar::LibUtilities::FourierPoints, and Nektar::LibUtilities::BLPoints.

Definition at line 479 of file Points.h.

481  {
482  boost::ignore_unused(x);
483  NEKERROR(ErrorUtil::efatal, "Method not implemented");
484  std::shared_ptr<NekMatrix<NekDouble>> returnval(
485  MemoryManager<NekMatrix<NekDouble>>::AllocateSharedPtr());
486  return returnval;
487  }

References Nektar::ErrorUtil::efatal, and NEKERROR.

◆ v_Initialize()

template<typename DataT >
virtual void Nektar::LibUtilities::Points< DataT >::v_Initialize ( void  )
inlineprotectedvirtual

Member Data Documentation

◆ m_bcweights

template<typename DataT >
Array<OneD, DataType> Nektar::LibUtilities::Points< DataT >::m_bcweights
protected

◆ m_derivmatrix

template<typename DataT >
MatrixSharedPtrType Nektar::LibUtilities::Points< DataT >::m_derivmatrix[3]
protected

◆ m_GalerkinProjectionManager

template<typename DataT >
NekManager<PointsKey, NekMatrix<DataType>, PointsKey::opLess> Nektar::LibUtilities::Points< DataT >::m_GalerkinProjectionManager
protected

Definition at line 385 of file Points.h.

◆ m_InterpManager

template<typename DataT >
NekManager<PointsKey, NekMatrix<DataType>, PointsKey::opLess> Nektar::LibUtilities::Points< DataT >::m_InterpManager
protected

Definition at line 383 of file Points.h.

◆ m_points

template<typename DataT >
Array<OneD, DataType> Nektar::LibUtilities::Points< DataT >::m_points[3]
protected

◆ m_pointsKey

template<typename DataT >
PointsKey Nektar::LibUtilities::Points< DataT >::m_pointsKey
protected

◆ m_weights

template<typename DataT >
Array<OneD, DataType> Nektar::LibUtilities::Points< DataT >::m_weights
protected