www.mooseframework.org
SamplerReceiver.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 // MOOSE includes
11 #include "SamplerReceiver.h"
12 #include "Function.h"
13 
14 registerMooseObject("StochasticToolsApp", SamplerReceiver);
15 
17 
18 InputParameters
20 {
21  InputParameters params = Control::validParams();
22  params.addClassDescription(
23  "Control for receiving data from a Sampler via SamplerParameterTransfer.");
24  params.set<ExecFlagEnum>("execute_on") = EXEC_TIMESTEP_BEGIN;
25  return params;
26 }
27 
28 SamplerReceiver::SamplerReceiver(const InputParameters & parameters) : Control(parameters) {}
29 
30 void
32 {
33  std::size_t value_position = 0;
34 
35  // Loop through all the parameters and set the controllable values for each parameter.
36  for (const std::string & param_name : _parameters)
37  {
38  ControllableParameter control_param = getControllableParameterByName(param_name);
39 
40  // Real
41  if (control_param.check<Real>())
42  {
43  // There must be enough data to populate the controlled parameter
44  if (value_position >= _values.size())
45  mooseError("The supplied vector of Real values is not sized correctly, the "
46  "Real parameter '",
47  param_name,
48  " requires a value but no more values are available in "
49  "the supplied values which have a size of ",
50  _values.size(),
51  ".");
52  control_param.set<Real>(_values[value_position++]);
53  }
54 
55  else if (control_param.check<std::vector<Real>>())
56  {
57  std::vector<std::vector<Real>> values = control_param.get<std::vector<Real>>();
58  mooseAssert(values.size() != 0,
59  "ControllableParameter must not be empty."); // should not be possible
60  std::size_t n = values[0].size(); // size of vector to changed
61 
62  // All vectors being controlled must be the same size
63  for (const std::vector<Real> & value : values)
64  if (value.size() != n)
65  mooseError(
66  "The std::vector<Real> parameters being controlled must all be the same size:\n",
67  control_param.dump());
68 
69  // There must be enough data to populate the controlled parameter
70  if (value_position + n > _values.size())
71  mooseError("The supplied vector of Real values is not sized correctly, the "
72  "std::vector<Real> parameter '",
73  param_name,
74  " requires ",
75  n,
76  " values but only ",
77  _values.size() - value_position,
78  " are available in the supplied vector.");
79 
80  // Set the value
81  std::vector<Real> value(_values.begin() + value_position,
82  _values.begin() + value_position + n);
83  value_position += n;
84  control_param.set<std::vector<Real>>(value);
85  }
86 
87  else
88 
89  // If the loop gets here it failed to find what it was looking for
90  mooseError("Unable to locate a Real or std::vector<Real> parameter with the name '",
91  param_name,
92  ".'");
93  }
94 
95  // Error if there is un-used values
96  if (value_position != _values.size())
97  mooseError("The number of values supplied (",
98  _values.size(),
99  ") does not match the number of values consumed by setting parameter values (",
100  value_position,
101  ").");
102 }
103 
104 void
105 SamplerReceiver::transfer(const std::vector<std::string> & names, const std::vector<Real> & values)
106 {
107  _parameters = names;
108  _values = values;
109 }
SamplerReceiver::execute
virtual void execute() override
Definition: SamplerReceiver.C:31
SamplerReceiver.h
SamplerReceiver::_values
std::vector< Real > _values
Values to use when modifying parameters.
Definition: SamplerReceiver.h:43
SamplerReceiver::transfer
void transfer(const std::vector< std::string > &names, const std::vector< Real > &values)
Update the parameter names and associated values.
Definition: SamplerReceiver.C:105
defineLegacyParams
defineLegacyParams(SamplerReceiver)
SamplerReceiver::SamplerReceiver
SamplerReceiver(const InputParameters &parameters)
Definition: SamplerReceiver.C:28
SamplerReceiver
A Control object for receiving data from a master application Sampler object.
Definition: SamplerReceiver.h:25
SamplerReceiver::_parameters
std::vector< std::string > _parameters
Parameter names to modify.
Definition: SamplerReceiver.h:40
validParams
InputParameters validParams()
registerMooseObject
registerMooseObject("StochasticToolsApp", SamplerReceiver)
SamplerReceiver::validParams
static InputParameters validParams()
Definition: SamplerReceiver.C:19