24 params.addClassDescription(
"Creates a sub-application for each row of each Sampler matrix.");
25 params.addParam<SamplerName>(
"sampler",
"The Sampler object to utilize for creating MultiApps.");
26 params.suppressParameter<std::vector<Point>>(
"positions");
27 params.suppressParameter<
bool>(
"output_in_position");
28 params.suppressParameter<std::vector<FileName>>(
"positions_file");
29 params.suppressParameter<Real>(
"move_time");
30 params.suppressParameter<std::vector<Point>>(
"move_positions");
31 params.suppressParameter<std::vector<unsigned int>>(
"move_apps");
32 params.set<
bool>(
"use_positions") =
false;
37 MooseEnum modes(
"normal=0 batch-reset=1 batch-restore=2",
"normal");
38 params.addParam<MooseEnum>(
41 "The operation mode, 'normal' creates one sub-application for each row in the Sampler and "
42 "'batch' creates on sub-application for each processor and re-executes for each row.");
48 : TransientMultiApp(parameters),
49 SamplerInterface(this),
50 _sampler(SamplerInterface::getSampler(
"sampler")),
59 "The supplied mode, '",
60 getParam<MooseEnum>(
"mode"),
61 "', currently is not implemented for the SamplerTransientMultiApp, the available "
62 "options are 'normal' or 'batch-restore'.");
68 TransientMultiApp::initialSetup();
73 dof_id_type n =
_sampler.getNumberOfLocalRows();
75 for (MooseIndex(n) i = 0; i < n; ++i)
76 for (MooseIndex(_my_num_apps) j = 0; j < _my_num_apps; j++)
84 bool last_solve_converged =
true;
86 last_solve_converged =
solveStepBatch(dt, target_time, auto_advance);
88 last_solve_converged = TransientMultiApp::solveStep(dt, target_time, auto_advance);
89 return last_solve_converged;
96 bool last_solve_converged =
true;
99 std::vector<std::shared_ptr<StochasticToolsTransfer>> to_transfers =
101 std::vector<std::shared_ptr<StochasticToolsTransfer>> from_transfers =
105 for (
auto transfer : to_transfers)
106 transfer->initializeToMultiapp();
107 for (
auto transfer : from_transfers)
108 transfer->initializeFromMultiapp();
111 dof_id_type num_items =
_sampler.getNumberOfLocalRows();
112 for (MooseIndex(num_items) i = 0; i < num_items; ++i)
115 for (MooseIndex(_my_num_apps) j = 0; j < _my_num_apps; j++)
118 for (
auto transfer : to_transfers)
119 transfer->executeToMultiapp();
121 last_solve_converged = TransientMultiApp::solveStep(dt, target_time, auto_advance);
123 for (
auto transfer : from_transfers)
124 transfer->executeFromMultiapp();
127 for (MooseIndex(_my_num_apps) j = 0; j < _my_num_apps; j++)
132 for (
auto transfer : to_transfers)
133 transfer->finalizeToMultiapp();
134 for (
auto transfer : from_transfers)
135 transfer->finalizeFromMultiapp();
137 return last_solve_converged;
140 std::vector<std::shared_ptr<StochasticToolsTransfer>>
143 std::vector<std::shared_ptr<StochasticToolsTransfer>> output;
144 const ExecuteMooseObjectWarehouse<Transfer> & warehouse =
145 _fe_problem.getMultiAppTransferWarehouse(direction);
146 for (std::shared_ptr<Transfer> transfer : warehouse.getActiveObjects())
148 std::shared_ptr<StochasticToolsTransfer> ptr =
149 std::dynamic_pointer_cast<StochasticToolsTransfer>(transfer);
151 output.push_back(ptr);