32 params.
addParam<std::vector<std::string>>(
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.");
40 "This parameter is no longer used as the SamplerReceiver will automatically be detected.");
46 _parameter_names(getParam<
std::vector<
std::string>>(
"parameters"))
49 paramError(
"from_multi_app",
"From and between multiapp directions are not implemented");
57 "The number of MultiApps and the number of sample rows must be the same.");
66 const dof_id_type end = first +
getToMultiApp()->numLocalApps();
67 for (dof_id_type row_index = first; row_index < end; ++row_index)
70 std::vector<Real> row;
74 row_index < _sampler_ptr->getLocalRowEnd(),
75 "The current sample row index is not a valid local sampler row.");
85 ptr.first->transfer(ptr.second);
105 ptr.first->transfer(ptr.second);
108std::map<SamplerReceiver *, std::map<std::string, std::vector<Real>>>
110 const std::vector<std::string> & args)
113 std::map<SamplerReceiver *, std::map<std::string, std::vector<Real>>> ptrs;
117 std::unordered_map<std::string, std::vector<SamplerReceiver *>> multiapp_receivers;
118 for (
const auto & param : args)
122 const auto pos = param.rfind(
":");
123 if (pos != std::string::npos)
124 multiapp_name +=
":" + param.substr(0, pos);
126 const auto pos2 = param.rfind(
"=");
127 if (pos2 == std::string::npos)
128 mooseError(
"Internal error: Improper command-line format\n ", param,
".");
129 const std::string param_name = param.substr(pos + 1, pos2 - pos - 1);
132 const std::string vstr = param.substr(pos2 + 1);
133 const auto vpos1 = vstr.find(
"'");
134 const auto vpos2 = vstr.rfind(
"'");
135 std::vector<Real> value;
137 mooseError(
"Internal error: Improper command-line format\n ", param,
".");
140 if (multiapp_receivers.find(multiapp_name) == multiapp_receivers.end())
142 auto & recvs = multiapp_receivers[multiapp_name];
144 const std::vector<std::string> nested_names =
MooseUtils::split(multiapp_name,
":");
149 std::vector<std::string>(nested_names.begin() + 1, nested_names.end())))
153 for (
const auto & control_ptr : problem->getControlWarehouse().getActiveObjects())
161 "The sub-application (",
163 ") does not contain a SamplerReceiver control object.");
166 recvs.push_back(recv_ptr);
171 for (
const auto & recv_ptr : multiapp_receivers[multiapp_name])
172 ptrs[recv_ptr][param_name] = value;
178std::vector<FEProblemBase *>
180 const std::vector<std::string> & multiapp_names)
183 std::vector<FEProblemBase *> problems;
185 if (multiapp_names.empty())
186 problems.push_back(&base_problem);
190 std::string sub_name;
192 pcrecpp::RE(
"(\\S*?)(\\d*)").FullMatch(multiapp_names[0], &sub_name, &sub_num);
196 std::pair<unsigned int, unsigned int> app_ind;
201 app_ind = std::make_pair(sub_num, sub_num + 1);
206 std::vector<std::string> nested_names(multiapp_names.begin() + 1, multiapp_names.end());
207 for (
unsigned int i = app_ind.first; i < app_ind.second; ++i)
209 problems.push_back(prob);
registerMooseObject("StochasticToolsApp", SamplerParameterTransfer)
registerMooseObjectRenamed("StochasticToolsApp", SamplerTransfer, "01/01/2020 00:00", SamplerParameterTransfer)
std::shared_ptr< MultiApp > getMultiApp(const std::string &multi_app_name) const
void paramError(const std::string ¶m, Args... args) const
void mooseError(Args &&... args) const
const std::shared_ptr< MultiApp > getToMultiApp() const
bool hasFromMultiApp() const
unsigned int numLocalApps()
FEProblemBase & appProblemBase(unsigned int app)
bool hasLocalApp(unsigned int global_app) const
unsigned int firstLocalApp()
static std::vector< std::string > sampledCommandLineArgs(const std::vector< Real > &row, const std::vector< std::string > &full_args_name)
Helper for inserting row data into commandline arguments Used here and in SamplerTransientMultiApp.
Copy each row from each DenseMatrix to the sub-applications SamplerReceiver object.
static InputParameters validParams()
virtual void executeToMultiapp() override
Methods used when running in batch mode (see SamplerFullSolveMultiApp)
const std::vector< std::string > & _parameter_names
Storage for the list of parameters to control.
SamplerParameterTransfer(const InputParameters ¶meters)
std::map< SamplerReceiver *, std::map< std::string, std::vector< Real > > > getReceivers(unsigned int app_index, const std::vector< std::string > &args)
Based on command line args, return a map between SamplerReceiver objects and the parameter-value pair...
virtual void execute() override
Traditional Transfer callback.
static std::vector< FEProblemBase * > getMultiAppProblemsHelper(FEProblemBase &base_problem, const std::vector< std::string > &multiapp_names)
Helper function that recursively finds feproblem pointers from nested multiapps.
A Control object for receiving data from a master application Sampler object.
dof_id_type getNumberOfLocalRows() const
dof_id_type getLocalRowBegin() const
std::vector< Real > getSampleRow(dof_id_type row_index) const
void broadcast(T &data, const unsigned int root_id=0, const bool identical_sizes=false) const
const Parallel::Communicator & comm() const
std::vector< std::string > split(const std::string &str, const std::string &delimiter, std::size_t max_count)
bool tokenizeAndConvert(const std::string &str, std::vector< T > &tokenized_vector, const std::string &delimiter=" \t\n\v\f\r", bool throw_on_unreadable=false)