https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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.
 
virtual unsigned int nDim () const override
 Inputted number of dimensions.
 
virtual std::vector< Real > quadraturePoint (const unsigned int n) const override
 Quadrature point n.
 
virtual Real quadraturePoint (const unsigned int n, const unsigned int dim) const override
 Quadrature point n for dimension dim.
 
virtual Real quadratureWeight (const unsigned int n) const override
 Weight for quadrature point n.
 

Private Member Functions

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

Private Attributes

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

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}
const Real p
std::vector< int > _coeff
Modification of quadrature weight based on polynomial order.
std::vector< std::unique_ptr< const StochasticTools::WeightedCartesianProduct< Real, Real > > > _quad
Container for all the combinations of quadrature products.
std::vector< std::size_t > _npoints
Cumulative number of points for each quadrature product.
R poly(const C &c, const T x, const bool derivative=false)
int sgn(T val)
The sign function.
Definition Numerics.h:41

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.

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}

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

◆ 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(); }

◆ 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.

◆ 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}

◆ 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}
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

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(), 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(), quadraturePoint(), quadratureWeight(), and SmolyakGrid().


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