https://mooseframework.inl.gov
Public Member Functions | Private Member Functions | Private Attributes | List of all members
PolynomialQuadrature::SmolyakGrid Class Reference

Smolyak sparse grid. More...

#include <PolynomialQuadrature.h>

Inheritance diagram for PolynomialQuadrature::SmolyakGrid:
[legend]

Public Member Functions

 SmolyakGrid (const unsigned int max_order, std::vector< std::unique_ptr< const Polynomial >> &poly)
 
virtual unsigned int nPoints () const override
 Resulting number of quadrature points in grid. More...
 
virtual unsigned int nDim () const override
 Inputted number of dimensions. More...
 
virtual std::vector< RealquadraturePoint (const unsigned int n) const override
 Quadrature point n. More...
 
virtual Real quadraturePoint (const unsigned int n, const unsigned int dim) const override
 Quadrature point n for dimension dim. More...
 
virtual Real quadratureWeight (const unsigned int n) const override
 Weight for quadrature point n. More...
 

Private Member Functions

unsigned int gridIndex (const unsigned int n) const
 Helper function to find which quadrature product to use. More...
 

Private Attributes

const unsigned int _ndim
 
std::vector< std::size_t > _npoints
 Cumulative number of points for each quadrature product. More...
 
std::vector< int_coeff
 Modification of quadrature weight based on polynomial order. More...
 
std::vector< std::unique_ptr< const StochasticTools::WeightedCartesianProduct< Real, Real > > > _quad
 Container for all the combinations of quadrature products. More...
 

Detailed Description

Smolyak sparse grid.

Definition at line 181 of file PolynomialQuadrature.h.

Constructor & Destructor Documentation

◆ SmolyakGrid()

PolynomialQuadrature::SmolyakGrid::SmolyakGrid ( const unsigned int  max_order,
std::vector< std::unique_ptr< const Polynomial >> &  poly 
)

Definition at line 449 of file PolynomialQuadrature.C.

451  : _ndim(poly.size())
452 {
453 
454  // Compute full tensor tuple
455  std::vector<std::vector<unsigned int>> tuple_1d(_ndim);
456  for (unsigned int d = 0; d < _ndim; ++d)
457  {
458  tuple_1d[d].resize(max_order);
459  for (unsigned int i = 0; i < max_order; ++i)
460  tuple_1d[d][i] = i;
461  }
463 
464  _npoints.push_back(0);
465  unsigned int maxq = max_order - 1;
466  unsigned int minq = (max_order > _ndim ? max_order - _ndim : 0);
467  for (std::size_t p = 0; p < tensor_tuple.numRows(); ++p)
468  {
469  std::vector<unsigned int> dorder = tensor_tuple.computeRow(p);
470  unsigned int q = std::accumulate(dorder.begin(), dorder.end(), 0);
471  if (q <= maxq && q >= minq)
472  {
473  int sgn = ((max_order - q - 1) % 2 == 0 ? 1 : -1);
474  _coeff.push_back(sgn * Utility::binomial(_ndim - 1, _ndim + q - max_order));
475 
476  std::vector<std::vector<Real>> qpoints_1D(_ndim);
477  std::vector<std::vector<Real>> qweights_1D(_ndim);
478  for (unsigned int d = 0; d < poly.size(); ++d)
479  poly[d]->gaussQuadrature(dorder[d], qpoints_1D[d], qweights_1D[d]);
480 
481  _quad.push_back(std::make_unique<const StochasticTools::WeightedCartesianProduct<Real, Real>>(
482  qpoints_1D, qweights_1D));
483  _npoints.push_back(_npoints.back() + _quad.back()->numRows());
484  }
485  }
486 }
R poly(const C &c, const T x, const bool derivative=false)
int sgn(T val)
The sign function.
Definition: Numerics.h:41
std::vector< std::size_t > _npoints
Cumulative number of points for each quadrature product.
std::vector< std::unique_ptr< const StochasticTools::WeightedCartesianProduct< Real, Real > > > _quad
Container for all the combinations of quadrature products.
std::vector< int > _coeff
Modification of quadrature weight based on polynomial order.

Member Function Documentation

◆ gridIndex()

unsigned int PolynomialQuadrature::SmolyakGrid::gridIndex ( const unsigned int  n) const
private

Helper function to find which quadrature product to use.

Definition at line 510 of file PolynomialQuadrature.C.

Referenced by quadraturePoint(), and quadratureWeight().

511 {
512  for (unsigned int i = 0; i < _npoints.size() - 1; ++i)
513  if (_npoints[i + 1] > n)
514  return i;
515 
516  ::mooseError("Point index requested is greater than number of points.");
517 
518  return 0;
519 }
std::vector< std::size_t > _npoints
Cumulative number of points for each quadrature product.

◆ nDim()

virtual unsigned int PolynomialQuadrature::SmolyakGrid::nDim ( ) const
inlineoverridevirtual

Inputted number of dimensions.

Implements PolynomialQuadrature::Quadrature.

Definition at line 187 of file PolynomialQuadrature.h.

187 { return _ndim; }

◆ nPoints()

virtual unsigned int PolynomialQuadrature::SmolyakGrid::nPoints ( ) const
inlineoverridevirtual

Resulting number of quadrature points in grid.

Implements PolynomialQuadrature::Quadrature.

Definition at line 186 of file PolynomialQuadrature.h.

186 { return _npoints.back(); }
std::vector< std::size_t > _npoints
Cumulative number of points for each quadrature product.

◆ quadraturePoint() [1/2]

std::vector< Real > PolynomialQuadrature::SmolyakGrid::quadraturePoint ( const unsigned int  n) const
overridevirtual

Quadrature point n.

Implements PolynomialQuadrature::Quadrature.

Definition at line 489 of file PolynomialQuadrature.C.

490 {
491  unsigned int ind = gridIndex(n);
492  return _quad[ind]->computeRow(n - _npoints[ind]);
493 }
unsigned int gridIndex(const unsigned int n) const
Helper function to find which quadrature product to use.
std::vector< std::size_t > _npoints
Cumulative number of points for each quadrature product.
std::vector< std::unique_ptr< const StochasticTools::WeightedCartesianProduct< Real, Real > > > _quad
Container for all the combinations of quadrature products.

◆ quadraturePoint() [2/2]

Real PolynomialQuadrature::SmolyakGrid::quadraturePoint ( const unsigned int  n,
const unsigned int  dim 
) const
overridevirtual

Quadrature point n for dimension dim.

Implements PolynomialQuadrature::Quadrature.

Definition at line 496 of file PolynomialQuadrature.C.

497 {
498  unsigned int ind = gridIndex(n);
499  return _quad[ind]->computeValue(n - _npoints[ind], dim);
500 }
unsigned int gridIndex(const unsigned int n) const
Helper function to find which quadrature product to use.
std::vector< std::size_t > _npoints
Cumulative number of points for each quadrature product.
std::vector< std::unique_ptr< const StochasticTools::WeightedCartesianProduct< Real, Real > > > _quad
Container for all the combinations of quadrature products.

◆ quadratureWeight()

Real PolynomialQuadrature::SmolyakGrid::quadratureWeight ( const unsigned int  n) const
overridevirtual

Weight for quadrature point n.

Implements PolynomialQuadrature::Quadrature.

Definition at line 503 of file PolynomialQuadrature.C.

504 {
505  unsigned int ind = gridIndex(n);
506  return static_cast<Real>(_coeff[ind]) * _quad[ind]->computeWeight(n - _npoints[ind]);
507 }
unsigned int gridIndex(const unsigned int n) const
Helper function to find which quadrature product to use.
std::vector< std::size_t > _npoints
Cumulative number of points for each quadrature product.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
std::vector< std::unique_ptr< const StochasticTools::WeightedCartesianProduct< Real, Real > > > _quad
Container for all the combinations of quadrature products.
std::vector< int > _coeff
Modification of quadrature weight based on polynomial order.

Member Data Documentation

◆ _coeff

std::vector<int> PolynomialQuadrature::SmolyakGrid::_coeff
private

Modification of quadrature weight based on polynomial order.

Definition at line 200 of file PolynomialQuadrature.h.

Referenced by quadratureWeight(), and SmolyakGrid().

◆ _ndim

const unsigned int PolynomialQuadrature::SmolyakGrid::_ndim
private

Definition at line 196 of file PolynomialQuadrature.h.

Referenced by nDim(), and SmolyakGrid().

◆ _npoints

std::vector<std::size_t> PolynomialQuadrature::SmolyakGrid::_npoints
private

Cumulative number of points for each quadrature product.

Definition at line 198 of file PolynomialQuadrature.h.

Referenced by gridIndex(), nPoints(), quadraturePoint(), quadratureWeight(), and SmolyakGrid().

◆ _quad

std::vector<std::unique_ptr<const StochasticTools::WeightedCartesianProduct<Real, Real> > > PolynomialQuadrature::SmolyakGrid::_quad
private

Container for all the combinations of quadrature products.

Definition at line 202 of file PolynomialQuadrature.h.

Referenced by quadraturePoint(), quadratureWeight(), and SmolyakGrid().


The documentation for this class was generated from the following files: