https://mooseframework.inl.gov
Loading...
Searching...
No Matches
SamplerData.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// Stocastic Tools Includes
11#include "SamplerData.h"
12
13// MOOSE includes
14#include "Sampler.h"
15
16registerMooseObject("StochasticToolsApp", SamplerData);
17
20{
23 "Tool for extracting Sampler object data and storing in VectorPostprocessor vectors.");
24 params.addRequiredParam<SamplerName>("sampler",
25 "The sample from which to extract distribution data.");
26
27 // Do not broadcast, this tools is mainly for testing of sampler data so the data is only needed
28 // on the root process, which is handled in finalize
29 params.set<bool>("_auto_broadcast") = false;
30
31 MooseEnum method("get_global_samples get_local_samples get_next_local_row", "get_next_local_row");
32 params.addParam<MooseEnum>(
33 "sampler_method",
34 method,
35 "Control the method of data retrieval from the Sampler object; this is mainly for testing.");
36
37 return params;
38}
39
41 : GeneralVectorPostprocessor(parameters),
42 _sampler(getSampler("sampler")),
43 _sampler_method(getParam<MooseEnum>("sampler_method"))
44{
45 const int padding = MooseUtils::numDigits(_sampler.getNumberOfCols());
46 for (dof_id_type j = 0; j < _sampler.getNumberOfCols(); ++j)
47 {
48 std::stringstream nm;
49 nm << getParam<SamplerName>("sampler") << "_" << std::setw(padding) << std::setfill('0') << j;
50 _sample_vectors.push_back(&declareVector(nm.str()));
51 }
52}
53
54void
56{
57 dof_id_type n = (_sampler_method == "get_global_samples") ? _sampler.getNumberOfRows()
59 for (auto & ppv_ptr : _sample_vectors)
60 ppv_ptr->resize(n, 0);
61}
62
63void
65{
66 if (_sampler_method == "get_global_samples")
67 {
68 if (processor_id() == 0)
69 {
70 DenseMatrix<Real> data = _sampler.getGlobalSamples();
71 for (unsigned int j = 0; j < data.n(); ++j)
72 for (unsigned int i = 0; i < data.m(); ++i)
73 (*_sample_vectors[j])[i] = data(i, j);
74 }
75 }
76
77 else if (_sampler_method == "get_local_samples")
78 {
79 DenseMatrix<Real> data = _sampler.getLocalSamples();
80 for (unsigned int j = 0; j < data.n(); ++j)
81 for (unsigned int i = 0; i < data.m(); ++i)
82 (*_sample_vectors[j])[i] = data(i, j);
83 }
84
85 else if (_sampler_method == "get_next_local_row")
86 {
87 for (dof_id_type i = _sampler.getLocalRowBegin(); i < _sampler.getLocalRowEnd(); ++i)
88 {
89 std::vector<Real> data = _sampler.getNextLocalRow();
90 for (std::size_t j = 0; j < data.size(); ++j)
91 (*_sample_vectors[j])[i - _sampler.getLocalRowBegin()] = data[j];
92 }
93 }
94}
95
96void
98{
99 if (!isDistributed() && _sampler_method != "get_global_samples")
100 {
101 for (auto & ppv_ptr : _sample_vectors)
102 _communicator.gather(0, *ppv_ptr);
103 }
104}
105
106void
108{
110 /*
111 if (_use_local_samples)
112 {
113 const SamplerData & obj = static_cast<const SamplerData &>(uo);
114 for (std::size_t i = 0; i < _sample_vectors.size(); ++i)
115 (*_sample_vectors[i]).insert(_sample_vectors[i]->end(), obj._sample_vectors[i]->begin(),
116 obj._sample_vectors[i]->end());
117 }
118 */
119}
registerMooseObject("StochasticToolsApp", SamplerData)
static InputParameters validParams()
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)
T & set(const std::string &name, bool quiet_mode=false)
A tool for output Sampler data.
Definition SamplerData.h:19
virtual void finalize() override
Definition SamplerData.C:97
static InputParameters validParams()
Definition SamplerData.C:19
std::vector< VectorPostprocessorValue * > _sample_vectors
Storage for declared vectors, one for each column.
Definition SamplerData.h:31
Sampler & _sampler
The sampler to extract data.
Definition SamplerData.h:34
SamplerData(const InputParameters &parameters)
Definition SamplerData.C:40
virtual void threadJoin(const UserObject &uo) override
const MooseEnum & _sampler_method
The method of data retrival from the Sample.
Definition SamplerData.h:37
virtual void initialize() override
Definition SamplerData.C:55
virtual void execute() override
Definition SamplerData.C:64
std::vector< Real > getNextLocalRow()
DenseMatrix< Real > getLocalSamples()
dof_id_type getNumberOfLocalRows() const
dof_id_type getLocalRowEnd() const
dof_id_type getLocalRowBegin() const
dof_id_type getNumberOfRows() const
dof_id_type getNumberOfCols() const
DenseMatrix< Real > getGlobalSamples()
void gather(const unsigned int root_id, const T &send_data, std::vector< T, A > &recv) const
VectorPostprocessorValue & declareVector(const std::string &vector_name)
const Parallel::Communicator & _communicator
processor_id_type processor_id() const