https://mooseframework.inl.gov
QuadratureSampler.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #include "QuadratureSampler.h"
11 #include "Distribution.h"
12 
13 registerMooseObjectAliased("StochasticToolsApp", QuadratureSampler, "Quadrature");
14 registerMooseObjectReplaced("StochasticToolsApp",
16  "07/01/2020 00:00",
17  Quadrature);
18 
21 {
23  params.addClassDescription("Quadrature sampler for Polynomial Chaos.");
24  params.addRequiredParam<unsigned int>(
25  "order", "Specify the maximum order of the polynomials in the expansion.");
26  MooseEnum grid("none smolyak clenshaw-curtis", "none");
27  params.addParam<MooseEnum>(
28  "sparse_grid", grid, "Type of sparse grid to use, if none, full tensor product is used.");
29  params.addRequiredParam<std::vector<DistributionName>>(
30  "distributions",
31  "The distribution names to be sampled, the number of distributions provided defines the "
32  "number of columns per matrix and their type defines the quadrature.");
33  return params;
34 }
35 
37 {
38  // For each distribution, get the 1-D quadrature
39  std::vector<std::unique_ptr<const PolynomialQuadrature::Polynomial>> poly_1d;
40  for (auto dname : getParam<std::vector<DistributionName>>("distributions"))
42 
43  // Here, we take the 1-D quadratures and perform a tensor product for multi-D integration
44  switch (getParam<MooseEnum>("sparse_grid"))
45  {
46  case 0:
47  {
48  _grid = std::make_unique<const PolynomialQuadrature::TensorGrid>(
49  getParam<unsigned int>("order") + 1, poly_1d);
50  break;
51  }
52  case 1:
53  {
54  _grid = std::make_unique<const PolynomialQuadrature::SmolyakGrid>(
55  getParam<unsigned int>("order"), poly_1d);
56  break;
57  }
58  case 2:
59  {
60  _grid = std::make_unique<const PolynomialQuadrature::ClenshawCurtisGrid>(
61  getParam<unsigned int>("order"), poly_1d);
62  break;
63  }
64  paramError("sparse_grid", "Unknown or unimplemented sparse grid type.");
65  }
66 
67  setNumberOfRows(_grid->nPoints());
68  setNumberOfCols(_grid->nDim());
69 }
70 
71 Real
73 {
74  return _grid->quadraturePoint(row_index, col_index);
75 }
76 
77 Real
79 {
80  return _grid->quadratureWeight(row_index);
81 }
A class used to produce samples based on quadrature for Polynomial Chaos.
void setNumberOfRows(dof_id_type n_rows)
registerMooseObjectAliased("StochasticToolsApp", QuadratureSampler, "Quadrature")
static InputParameters validParams()
std::unique_ptr< const Polynomial > makePolynomial(const Distribution *dist)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
static InputParameters validParams()
void addRequiredParam(const std::string &name, const std::string &doc_string)
QuadratureSampler(const InputParameters &parameters)
registerMooseObjectReplaced("StochasticToolsApp", QuadratureSampler, "07/01/2020 00:00", Quadrature)
const T & getParam(const std::string &name) const
Real getQuadratureWeight(dof_id_type row_index) const
void paramError(const std::string &param, Args... args) const
const Distribution & getDistributionByName(const DistributionName &name) const
std::unique_ptr< const PolynomialQuadrature::Quadrature > _grid
Quadrature weights and points.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void setNumberOfCols(dof_id_type n_cols)
virtual Real computeSample(dof_id_type row_index, dof_id_type col_index) override
Return the sample for the given row and column.
void addClassDescription(const std::string &doc_string)
uint8_t dof_id_type