https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
13registerMooseObjectAliased("StochasticToolsApp", CartesianProductSampler, "CartesianProduct");
14registerMooseObjectReplaced("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
64Real
65CartesianProductSampler::computeSample(dof_id_type row_index, dof_id_type col_index)
66{
67 return _cp_ptr->computeValue(row_index, col_index);
68}
registerMooseObjectAliased("StochasticToolsApp", CartesianProductSampler, "CartesianProduct")
registerMooseObjectReplaced("StochasticToolsApp", CartesianProductSampler, "07/01/2020 00:00", CartesianProduct)
const ExecFlagType EXEC_INITIAL
Creates samples based on the Cartesian product, see CartesianProduct in utils.
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()
CartesianProductSampler(const InputParameters &parameters)
std::unique_ptr< const StochasticTools::CartesianProduct< Real > > _cp_ptr
Helper object for computing the CartesianProcduct values.
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
T & set(const std::string &name, bool quiet_mode=false)
void paramError(const std::string &param, Args... args) const
void setNumberOfCols(dof_id_type n_cols)
static InputParameters validParams()
void setNumberOfRows(dof_id_type n_rows)