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);
93 std::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;
163 std::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);
registerMooseObjectRenamed("StochasticToolsApp", SamplerTransfer, "01/01/2020 00:00", SamplerParameterTransfer)
bool hasLocalApp(unsigned int global_app) const
const std::vector< std::string > & _parameter_names
Storage for the list of parameters to control.
bool tokenizeAndConvert(const std::string &str, std::vector< T > &tokenized_vector, const std::string &delimiter=" \\
unsigned int numLocalApps()
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...
std::vector< Real > getNextLocalRow()
dof_id_type getLocalRowBegin() const
const std::shared_ptr< MultiApp > getToMultiApp() const
dof_id_type getNumberOfLocalRows() const
bool hasFromMultiApp() const
std::shared_ptr< MultiApp > getMultiApp(const std::string &multi_app_name) const
std::vector< std::string > split(const std::string &str, const std::string &delimiter, std::size_t max_count=std::numeric_limits< std::size_t >::max())
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.
Real value(unsigned n, unsigned alpha, unsigned beta, Real x)
SamplerParameterTransfer(const InputParameters ¶meters)
virtual void executeToMultiapp() override
Methods used when running in batch mode (see SamplerFullSolveMultiApp)
FEProblemBase & appProblemBase(unsigned int app)
void paramError(const std::string ¶m, Args... args) const
dof_id_type getLocalRowEnd() const
A Control object for receiving data from a master application Sampler object.
unsigned int firstLocalApp()
Copy each row from each DenseMatrix to the sub-applications SamplerReceiver object.
registerMooseObject("StochasticToolsApp", SamplerParameterTransfer)
void mooseError(Args &&... args) const
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.
virtual void execute() override
Traditional Transfer callback.
static InputParameters validParams()