https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
13registerMooseObjectAliased("StochasticToolsApp", QuadratureSampler, "Quadrature");
14registerMooseObjectReplaced("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
71Real
72QuadratureSampler::computeSample(dof_id_type row_index, dof_id_type col_index)
73{
74 return _grid->quadraturePoint(row_index, col_index);
75}
76
77Real
78QuadratureSampler::getQuadratureWeight(dof_id_type row_index) const
79{
80 return _grid->quadratureWeight(row_index);
81}
registerMooseObjectAliased("StochasticToolsApp", QuadratureSampler, "Quadrature")
registerMooseObjectReplaced("StochasticToolsApp", QuadratureSampler, "07/01/2020 00:00", Quadrature)
const Distribution & getDistributionByName(const DistributionName &name) const
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
void paramError(const std::string &param, Args... args) const
A class used to produce samples based on quadrature for Polynomial Chaos.
static InputParameters validParams()
virtual Real computeSample(dof_id_type row_index, dof_id_type col_index) override
Return the sample for the given row and column.
Real getQuadratureWeight(dof_id_type row_index) const
std::unique_ptr< const PolynomialQuadrature::Quadrature > _grid
Quadrature weights and points.
QuadratureSampler(const InputParameters &parameters)
void setNumberOfCols(dof_id_type n_cols)
static InputParameters validParams()
void setNumberOfRows(dof_id_type n_rows)
std::unique_ptr< const Polynomial > makePolynomial(const Distribution *dist)