https://mooseframework.inl.gov
TestReporterPartitioning.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 "Sampler.h"
12 
13 registerMooseObject("StochasticToolsTestApp", TestReporterPartitioning);
14 
17 {
19  params.addRequiredParam<SamplerName>("sampler", "Sampler defining the partitioning.");
20  params.addRequiredParam<std::vector<ReporterName>>(
21  "reporters", "Vector reporters to compare with sampler partioning.");
22  return params;
23 }
24 
26  : GeneralReporter(parameters), _sampler(getSampler("sampler"))
27 {
28  for (const auto & rname : getParam<std::vector<ReporterName>>("reporters"))
29  _reporters[rname] = &getReporterValueByName<std::vector<Real>>(rname);
30 }
31 
32 void
34 {
35  std::stringstream ss;
36  for (const auto & it : _reporters)
37  {
38  const ReporterName & rname = it.first;
39  const dof_id_type rsize = it.second->size();
40 
41  dof_id_type expect_size;
42  const auto & mode = _fe_problem.getReporterData().getReporterMode(rname);
43  if (mode == REPORTER_MODE_DISTRIBUTED || (mode == REPORTER_MODE_ROOT && processor_id() != 0))
44  expect_size = _sampler.getNumberOfLocalRows();
45  else if (mode == REPORTER_MODE_REPLICATED ||
46  (mode == REPORTER_MODE_ROOT && processor_id() == 0))
47  expect_size = _sampler.getNumberOfRows();
48  else
49  mooseError("Reporter decalred with unsupported mode.");
50 
51  if (rsize != expect_size)
52  ss << std::endl
53  << " " << rname << ": expected size = " << expect_size << ", actual size = " << rsize;
54  }
55 
56  if (!ss.str().empty())
57  mooseError("The following reporter values are not partitioning the same as ",
58  getParam<SamplerName>("sampler"),
59  ":",
60  ss.str());
61 }
const ReporterMode REPORTER_MODE_ROOT
static InputParameters validParams()
dof_id_type getNumberOfLocalRows() const
void addRequiredParam(const std::string &name, const std::string &doc_string)
const ReporterData & getReporterData() const
virtual void execute() override
registerMooseObject("StochasticToolsTestApp", TestReporterPartitioning)
const T & getParam(const std::string &name) const
const ReporterMode REPORTER_MODE_DISTRIBUTED
std::unordered_map< ReporterName, const std::vector< Real > * > _reporters
static InputParameters validParams()
dof_id_type getNumberOfRows() const
const ReporterProducerEnum & getReporterMode(const ReporterName &reporter_name) const
FEProblemBase & _fe_problem
void mooseError(Args &&... args) const
TestReporterPartitioning(const InputParameters &parameters)
const ReporterMode REPORTER_MODE_REPLICATED
processor_id_type processor_id() const
uint8_t dof_id_type