24 params.addClassDescription(
25 "Creates a full-solve type sub-application for each row of each Sampler matrix.");
26 params.addParam<SamplerName>(
"sampler",
"The Sampler object to utilize for creating MultiApps.");
27 params.suppressParameter<std::vector<Point>>(
"positions");
28 params.suppressParameter<
bool>(
"output_in_position");
29 params.suppressParameter<std::vector<FileName>>(
"positions_file");
30 params.suppressParameter<Real>(
"move_time");
31 params.suppressParameter<std::vector<Point>>(
"move_positions");
32 params.suppressParameter<std::vector<unsigned int>>(
"move_apps");
33 params.set<
bool>(
"use_positions") =
false;
35 MooseEnum modes(
"normal=0 batch-reset=1 batch-restore=2",
"normal");
36 params.addParam<MooseEnum>(
39 "The operation mode, 'normal' creates one sub-application for each row in the Sampler and "
40 "'batch' creates on sub-application for each processor and re-executes for each row.");
46 : FullSolveMultiApp(parameters),
47 SamplerInterface(this),
48 _sampler(SamplerInterface::getSampler(
"sampler")),
50 _local_batch_app_index(0)
63 mooseAssert(_my_num_apps,
_sampler.getNumberOfLocalRows());
65 bool last_solve_converged =
true;
68 last_solve_converged =
solveStepBatch(dt, target_time, auto_advance);
70 last_solve_converged = FullSolveMultiApp::solveStep(dt, target_time, auto_advance);
71 return last_solve_converged;
78 bool last_solve_converged =
true;
81 std::vector<std::shared_ptr<StochasticToolsTransfer>> to_transfers =
83 std::vector<std::shared_ptr<StochasticToolsTransfer>> from_transfers =
87 for (
auto transfer : to_transfers)
88 transfer->initializeToMultiapp();
90 for (
auto transfer : from_transfers)
91 transfer->initializeFromMultiapp();
98 for (dof_id_type i =
_sampler.getLocalRowBegin(); i <
_sampler.getLocalRowEnd(); ++i)
100 for (
auto & transfer : to_transfers)
102 transfer->setGlobalMultiAppIndex(i);
103 transfer->executeToMultiapp();
106 last_solve_converged = FullSolveMultiApp::solveStep(dt, target_time, auto_advance);
108 for (
auto & transfer : from_transfers)
110 transfer->setGlobalMultiAppIndex(i);
111 transfer->executeFromMultiapp();
114 if (i <
_sampler.getLocalRowEnd() - 1)
129 for (
auto transfer : to_transfers)
130 transfer->finalizeToMultiapp();
131 for (
auto transfer : from_transfers)
132 transfer->finalizeFromMultiapp();
134 return last_solve_converged;
137 std::vector<std::shared_ptr<StochasticToolsTransfer>>
140 std::vector<std::shared_ptr<StochasticToolsTransfer>> output;
141 const ExecuteMooseObjectWarehouse<Transfer> & warehouse =
142 _fe_problem.getMultiAppTransferWarehouse(direction);
143 for (std::shared_ptr<Transfer> transfer : warehouse.getActiveObjects())
145 auto ptr = std::dynamic_pointer_cast<StochasticToolsTransfer>(transfer);
147 output.push_back(ptr);
157 std::vector<Real> row =
_sampler.getNextLocalRow();
159 std::ostringstream oss;
160 const std::vector<std::string> & cli_args_name =
161 MooseUtils::split(FullSolveMultiApp::getCommandLineArgsParamHelper(local_app),
";");
163 for (dof_id_type col = 0; col <
_sampler.getNumberOfCols(); ++col)
167 oss << cli_args_name[col] <<
"=" << Moose::stringify(row[col]);