Loading [MathJax]/extensions/tex2jax.js
https://mooseframework.inl.gov
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends
CartesianProductSampler.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 
11 #include "Distribution.h"
12 
13 registerMooseObjectAliased("StochasticToolsApp", CartesianProductSampler, "CartesianProduct");
14 registerMooseObjectReplaced("StochasticToolsApp",
16  "07/01/2020 00:00",
17  CartesianProduct);
18 
21 {
23  params.addClassDescription("Provides complete Cartesian product for the supplied variables.");
24  params.addRequiredParam<std::vector<Real>>(
25  "linear_space_items",
26  "A list of triplets, each item should include the min, step size, and number of steps.");
27  params.set<ExecFlagEnum>("execute_on") = EXEC_INITIAL;
28  return params;
29 }
30 
32  : Sampler(parameters)
33 {
34  const std::vector<Real> & items = getParam<std::vector<Real>>("linear_space_items");
35  if (items.size() % 3 != 0)
36  paramError("linear_space_items",
37  "The number of numeric items must be divisible by 3; min, max, divisions for each "
38  "item are required.");
39 
40  std::vector<std::vector<Real>> grid_items;
41  for (std::size_t i = 0; i < items.size(); i += 3)
42  {
43  if (items[i + 2] != std::floor(items[i + 2]))
44  paramError("linear_space_items",
45  "The third entry for each item must be an integer; it provides the number of "
46  "entries in the resulting item vector.");
47 
48  if (items[i + 2] < 0)
49  paramError("linear_space_items",
50  "The third entry for each item must be positive; it provides the number of "
51  "entries in the resulting item vector.");
52 
53  unsigned int div = static_cast<unsigned int>(items[i + 2]);
54  grid_items.emplace_back(std::vector<Real>(div));
55  for (std::size_t j = 0; j < grid_items.back().size(); ++j)
56  grid_items.back()[j] = items[i] + j * items[i + 1];
57  }
58 
59  _cp_ptr = std::make_unique<const StochasticTools::CartesianProduct<Real>>(grid_items);
60  setNumberOfRows(_cp_ptr->numRows());
61  setNumberOfCols(_cp_ptr->numCols());
62 }
63 
64 Real
66 {
67  return _cp_ptr->computeValue(row_index, col_index);
68 }
void setNumberOfRows(dof_id_type n_rows)
virtual Real computeSample(dof_id_type row_index, dof_id_type col_index) override
Return the sample for the given row and column.
static InputParameters validParams()
Creates samples based on the Cartesian product, see CartesianProduct in utils.
T & set(const std::string &name, bool quiet_mode=false)
registerMooseObjectReplaced("StochasticToolsApp", CartesianProductSampler, "07/01/2020 00:00", CartesianProduct)
void addRequiredParam(const std::string &name, const std::string &doc_string)
registerMooseObjectAliased("StochasticToolsApp", CartesianProductSampler, "CartesianProduct")
static InputParameters validParams()
void paramError(const std::string &param, Args... args) const
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void setNumberOfCols(dof_id_type n_cols)
CartesianProductSampler(const InputParameters &parameters)
void addClassDescription(const std::string &doc_string)
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
std::unique_ptr< const StochasticTools::CartesianProduct< Real > > _cp_ptr
Helper object for computing the CartesianProcduct values.
uint8_t dof_id_type
const ExecFlagType EXEC_INITIAL