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.");
65 "The current sample row index is not a valid global MultiApp index.");
75 ptr.first->transfer(ptr.second);
89 ptr.first->transfer(ptr.second);
93std::map<SamplerReceiver *, std::map<std::string, std::vector<Real>>>
95 const std::vector<std::string> & args)
98 std::map<SamplerReceiver *, std::map<std::string, std::vector<Real>>> ptrs;
102 std::unordered_map<std::string, std::vector<SamplerReceiver *>> multiapp_receivers;
103 for (
const auto & param : args)
107 const auto pos = param.rfind(
":");
108 if (pos != std::string::npos)
109 multiapp_name +=
":" + param.substr(0, pos);
111 const auto pos2 = param.rfind(
"=");
112 if (pos2 == std::string::npos)
113 mooseError(
"Internal error: Improper command-line format\n ", param,
".");
114 const std::string param_name = param.substr(pos + 1, pos2 - pos - 1);
117 const std::string vstr = param.substr(pos2 + 1);
118 const auto vpos1 = vstr.find(
"'");
119 const auto vpos2 = vstr.rfind(
"'");
120 std::vector<Real> value;
122 mooseError(
"Internal error: Improper command-line format\n ", param,
".");
125 if (multiapp_receivers.find(multiapp_name) == multiapp_receivers.end())
127 auto & recvs = multiapp_receivers[multiapp_name];
129 const std::vector<std::string> nested_names =
MooseUtils::split(multiapp_name,
":");
134 std::vector<std::string>(nested_names.begin() + 1, nested_names.end())))
138 for (
const auto & control_ptr : problem->getControlWarehouse().getActiveObjects())
146 "The sub-application (",
148 ") does not contain a SamplerReceiver control object.");
151 recvs.push_back(recv_ptr);
156 for (
const auto & recv_ptr : multiapp_receivers[multiapp_name])
157 ptrs[recv_ptr][param_name] = value;
163std::vector<FEProblemBase *>
165 const std::vector<std::string> & multiapp_names)
168 std::vector<FEProblemBase *> problems;
170 if (multiapp_names.empty())
171 problems.push_back(&base_problem);
175 std::string sub_name;
177 pcrecpp::RE(
"(\\S*?)(\\d*)").FullMatch(multiapp_names[0], &sub_name, &sub_num);
181 std::pair<unsigned int, unsigned int> app_ind;
186 app_ind = std::make_pair(sub_num, sub_num + 1);
191 std::vector<std::string> nested_names(multiapp_names.begin() + 1, multiapp_names.end());
192 for (
unsigned int i = app_ind.first; i < app_ind.second; ++i)
194 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.
std::vector< Real > getNextLocalRow()
dof_id_type getNumberOfLocalRows() const
dof_id_type getLocalRowEnd() const
dof_id_type getLocalRowBegin() const
bool tokenizeAndConvert(const std::string &str, std::vector< T > &tokenized_vector, const std::string &delimiter=" \t\n\v\f\r")
std::vector< std::string > split(const std::string &str, const std::string &delimiter, std::size_t max_count)