https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
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
32void
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_REPLICATED
const ReporterMode REPORTER_MODE_DISTRIBUTED
const ReporterMode REPORTER_MODE_ROOT
registerMooseObject("StochasticToolsTestApp", TestReporterPartitioning)
const ReporterData & getReporterData() const
static InputParameters validParams()
void addRequiredParam(const std::string &name, const std::string &doc_string)
void mooseError(Args &&... args) const
const ReporterProducerEnum & getReporterMode(const ReporterName &reporter_name) const
dof_id_type getNumberOfLocalRows() const
dof_id_type getNumberOfRows() const
virtual void execute() override
static InputParameters validParams()
TestReporterPartitioning(const InputParameters &parameters)
std::unordered_map< ReporterName, const std::vector< Real > * > _reporters
FEProblemBase & _fe_problem
processor_id_type processor_id() const