www.mooseframework.org
SamplerData.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
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 
16 registerMooseObject("StochasticToolsApp", SamplerData);
17 
20 {
22  params.addClassDescription(
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 
54 void
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 
63 void
65 {
66  if (_sampler_method == "get_global_samples")
67  {
68  if (processor_id() == 0)
69  {
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  {
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  {
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 
96 void
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 
106 void
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 }
DenseMatrix< Real > getLocalSamples()
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void gather(const unsigned int root_id, const T &send_data, std::vector< T, A > &recv) const
T & set(const std::string &name, bool quiet_mode=false)
DenseMatrix< Real > getGlobalSamples()
std::vector< Real > getNextLocalRow()
dof_id_type getLocalRowBegin() const
unsigned int m() const
const Parallel::Communicator & _communicator
static InputParameters validParams()
Definition: SamplerData.C:19
dof_id_type getNumberOfLocalRows() const
virtual void finalize() override
Definition: SamplerData.C:97
void addRequiredParam(const std::string &name, const std::string &doc_string)
std::vector< VectorPostprocessorValue * > _sample_vectors
Storage for declared vectors, one for each column.
Definition: SamplerData.h:31
static InputParameters validParams()
SamplerData(const InputParameters &parameters)
Definition: SamplerData.C:40
virtual void initialize() override
Definition: SamplerData.C:55
VectorPostprocessorValue & declareVector(const std::string &vector_name)
dof_id_type getLocalRowEnd() const
const MooseEnum & _sampler_method
The method of data retrival from the Sample.
Definition: SamplerData.h:37
dof_id_type getNumberOfRows() const
int numDigits(const T &num)
Sampler & _sampler
The sampler to extract data.
Definition: SamplerData.h:34
virtual void threadJoin(const UserObject &uo) override
Definition: SamplerData.C:107
virtual void execute() override
Definition: SamplerData.C:64
void addClassDescription(const std::string &doc_string)
registerMooseObject("StochasticToolsApp", SamplerData)
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
unsigned int n() const
processor_id_type processor_id() const
A tool for output Sampler data.
Definition: SamplerData.h:18
dof_id_type getNumberOfCols() const
uint8_t dof_id_type