www.mooseframework.org
SamplerParameterTransfer.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
14 #include "SamplerReceiver.h"
15 #include "Sampler.h"
16 
17 registerMooseObjectRenamed("StochasticToolsApp",
18  SamplerTransfer,
19  "01/01/2020 00:00",
21 registerMooseObject("StochasticToolsApp", SamplerParameterTransfer);
22 
24 
25 InputParameters
27 {
28  InputParameters params = StochasticToolsTransfer::validParams();
29  params.addClassDescription("Copies Sampler data to a SamplerReceiver object.");
30  params.set<MultiMooseEnum>("direction") = "to_multiapp";
31  params.suppressParameter<MultiMooseEnum>("direction");
32  params.addParam<std::vector<std::string>>(
33  "parameters",
34  "A list of parameters (on the sub application) to control "
35  "with the Sampler data. The order of the parameters listed "
36  "here should match the order of the items in the Sampler.");
37  params.addRequiredParam<std::string>("to_control",
38  "The name of the 'SamplerReceiver' on the sub application "
39  "to which the Sampler data will be transferred.");
40  return params;
41 }
42 
43 SamplerParameterTransfer::SamplerParameterTransfer(const InputParameters & parameters)
44  : StochasticToolsTransfer(parameters),
45  _parameter_names(getParam<std::vector<std::string>>("parameters")),
46  _receiver_name(getParam<std::string>("to_control"))
47 {
48 }
49 
50 void
52 {
53  mooseAssert(_sampler_ptr->getNumberOfLocalRows() == _multi_app->numLocalApps(),
54  "The number of MultiApps and the number of sample rows must be the same.");
55 
56  // Loop over all sub-apps
57  for (dof_id_type row_index = _sampler_ptr->getLocalRowBegin();
58  row_index < _sampler_ptr->getLocalRowEnd();
59  row_index++)
60  {
61  mooseAssert(_multi_app->hasLocalApp(row_index),
62  "The current sample row index is not a valid global MultiApp index.");
63 
64  // Get the sub-app SamplerReceiver object and perform error checking
65  SamplerReceiver * ptr = getReceiver(row_index);
66 
67  // Populate the row of data to transfer
68  std::vector<Real> row = _sampler_ptr->getNextLocalRow();
69 
70  // Perform the transfer
71  ptr->transfer(_parameter_names, row);
72  }
73 }
74 
75 void
77 {
78  _global_index = _sampler_ptr->getLocalRowBegin();
79 }
80 
81 void
83 {
84  SamplerReceiver * ptr = getReceiver(processor_id());
85 
86  std::vector<Real> row = _sampler_ptr->getNextLocalRow();
87 
88  ptr->transfer(_parameter_names, row);
89 
90  _global_index++;
91 }
92 
93 void
95 {
96 }
97 
100 {
101  // Test that the sub-application has the given Control object
102  FEProblemBase & to_problem = _multi_app->appProblemBase(app_index);
103  ExecuteMooseObjectWarehouse<Control> & control_wh = to_problem.getControlWarehouse();
104  if (!control_wh.hasActiveObject(_receiver_name))
105  mooseError("The sub-application (",
106  _multi_app->name(),
107  ") does not contain a Control object with the name '",
109  "'.");
110 
111  SamplerReceiver * ptr =
112  dynamic_cast<SamplerReceiver *>(control_wh.getActiveObject(_receiver_name).get());
113 
114  if (!ptr)
115  mooseError(
116  "The sub-application (",
117  _multi_app->name(),
118  ") Control object for the 'to_control' parameter must be of type 'SamplerReceiver'.");
119 
120  return ptr;
121 }
StochasticToolsTransfer
The class creates an additional API to allow Transfers to work when running the StochasticTools<FullS...
Definition: StochasticToolsTransfer.h:24
SamplerParameterTransfer::executeToMultiapp
virtual void executeToMultiapp() override
Definition: SamplerParameterTransfer.C:82
SamplerFullSolveMultiApp.h
SamplerParameterTransfer::_receiver_name
const std::string & _receiver_name
The name of the SamplerReceiver Control object on the sub-application.
Definition: SamplerParameterTransfer.h:52
SamplerParameterTransfer::_global_index
dof_id_type _global_index
Current global index for batch execution.
Definition: SamplerParameterTransfer.h:55
SamplerReceiver.h
SamplerParameterTransfer::execute
virtual void execute() override
Traditional Transfer callback.
Definition: SamplerParameterTransfer.C:51
StochasticToolsTransfer::_sampler_ptr
Sampler * _sampler_ptr
Pointer to the Sampler object used by the SamplerTransientMultiApp or SamplerFullSolveMultiApp.
Definition: StochasticToolsTransfer.h:61
SamplerParameterTransfer
Copy each row from each DenseMatrix to the sub-applications SamplerReceiver object.
Definition: SamplerParameterTransfer.h:21
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
SamplerTransientMultiApp.h
registerMooseObjectRenamed
registerMooseObjectRenamed("StochasticToolsApp", SamplerTransfer, "01/01/2020 00:00", SamplerParameterTransfer)
registerMooseObject
registerMooseObject("StochasticToolsApp", SamplerParameterTransfer)
SamplerReceiver
A Control object for receiving data from a master application Sampler object.
Definition: SamplerReceiver.h:25
SamplerParameterTransfer::initializeToMultiapp
virtual void initializeToMultiapp() override
Methods used when running in batch mode (see SamplerFullSolveMultiApp)
Definition: SamplerParameterTransfer.C:76
SamplerParameterTransfer::SamplerParameterTransfer
SamplerParameterTransfer(const InputParameters &parameters)
Definition: SamplerParameterTransfer.C:43
StochasticToolsTransfer::validParams
static InputParameters validParams()
Definition: StochasticToolsTransfer.C:18
SamplerParameterTransfer::getReceiver
SamplerReceiver * getReceiver(unsigned int app_index)
Return the SamplerReceiver object and perform error checking.
Definition: SamplerParameterTransfer.C:99
SamplerParameterTransfer::finalizeToMultiapp
virtual void finalizeToMultiapp() override
Definition: SamplerParameterTransfer.C:94
SamplerParameterTransfer::validParams
static InputParameters validParams()
Definition: SamplerParameterTransfer.C:26
SamplerParameterTransfer::_parameter_names
const std::vector< std::string > & _parameter_names
Storage for the list of parameters to control.
Definition: SamplerParameterTransfer.h:49
defineLegacyParams
defineLegacyParams(SamplerParameterTransfer)
SamplerParameterTransfer.h