www.mooseframework.org
SamplerTransientMultiApp.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 // StochasticTools includes
12 #include "Sampler.h"
14 
15 registerMooseObject("StochasticToolsApp", SamplerTransientMultiApp);
16 
18 
19 InputParameters
21 {
22  InputParameters params = TransientMultiApp::validParams();
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;
33 
34  // use "batch-restore=2" to be consistent with SamplerFullSolveMultiApp and use the
35  // allow_out_of_range flag to allow the StochasticToolsTransfer object to inspect the MultiApp
36  // object parameters without triggering an assert.
37  MooseEnum modes("normal=0 batch-reset=1 batch-restore=2", "normal");
38  params.addParam<MooseEnum>(
39  "mode",
40  modes,
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.");
43 
44  return params;
45 }
46 
47 SamplerTransientMultiApp::SamplerTransientMultiApp(const InputParameters & parameters)
48  : TransientMultiApp(parameters),
49  SamplerInterface(this),
50  _sampler(SamplerInterface::getSampler("sampler")),
51  _mode(getParam<MooseEnum>("mode").getEnum<StochasticTools::MultiAppMode>())
52 {
54  init(n_processors());
56  init(_sampler.getNumberOfRows());
57  else
58  paramError("mode",
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'.");
63 }
64 
65 void
67 {
68  TransientMultiApp::initialSetup();
69 
70  // Perform initial backup for the batch sub-applications
72  {
73  dof_id_type n = _sampler.getNumberOfLocalRows();
74  _batch_backup.resize(n);
75  for (MooseIndex(n) i = 0; i < n; ++i)
76  for (MooseIndex(_my_num_apps) j = 0; j < _my_num_apps; j++)
77  _batch_backup[i].emplace_back(_apps[j]->backup());
78  }
79 }
80 
81 bool
82 SamplerTransientMultiApp::solveStep(Real dt, Real target_time, bool auto_advance)
83 {
84  bool last_solve_converged = true;
86  last_solve_converged = solveStepBatch(dt, target_time, auto_advance);
87  else
88  last_solve_converged = TransientMultiApp::solveStep(dt, target_time, auto_advance);
89  return last_solve_converged;
90 }
91 
92 bool
93 SamplerTransientMultiApp::solveStepBatch(Real dt, Real target_time, bool auto_advance)
94 {
95  // Value to return
96  bool last_solve_converged = true;
97 
98  // List of active relevant Transfer objects
99  std::vector<std::shared_ptr<StochasticToolsTransfer>> to_transfers =
100  getActiveStochasticToolsTransfers(MultiAppTransfer::TO_MULTIAPP);
101  std::vector<std::shared_ptr<StochasticToolsTransfer>> from_transfers =
102  getActiveStochasticToolsTransfers(MultiAppTransfer::FROM_MULTIAPP);
103 
104  // Initialize to/from transfers
105  for (auto transfer : to_transfers)
106  transfer->initializeToMultiapp();
107  for (auto transfer : from_transfers)
108  transfer->initializeFromMultiapp();
109 
110  // Perform batch MultiApp solves
111  dof_id_type num_items = _sampler.getNumberOfLocalRows();
112  for (MooseIndex(num_items) i = 0; i < num_items; ++i)
113  {
115  for (MooseIndex(_my_num_apps) j = 0; j < _my_num_apps; j++)
116  _apps[j]->restore(_batch_backup[i][j]);
117 
118  for (auto transfer : to_transfers)
119  transfer->executeToMultiapp();
120 
121  last_solve_converged = TransientMultiApp::solveStep(dt, target_time, auto_advance);
122 
123  for (auto transfer : from_transfers)
124  transfer->executeFromMultiapp();
125 
127  for (MooseIndex(_my_num_apps) j = 0; j < _my_num_apps; j++)
128  _batch_backup[i][j] = _apps[j]->backup();
129  }
130 
131  // Finalize to/from transfers
132  for (auto transfer : to_transfers)
133  transfer->finalizeToMultiapp();
134  for (auto transfer : from_transfers)
135  transfer->finalizeFromMultiapp();
136 
137  return last_solve_converged;
138 }
139 
140 std::vector<std::shared_ptr<StochasticToolsTransfer>>
142 {
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())
147  {
148  std::shared_ptr<StochasticToolsTransfer> ptr =
149  std::dynamic_pointer_cast<StochasticToolsTransfer>(transfer);
150  if (ptr)
151  output.push_back(ptr);
152  }
153  return output;
154 }
SamplerTransientMultiApp
Definition: SamplerTransientMultiApp.h:25
registerMooseObject
registerMooseObject("StochasticToolsApp", SamplerTransientMultiApp)
SamplerTransientMultiApp::_batch_backup
std::vector< std::vector< std::shared_ptr< Backup > > > _batch_backup
Storage for batch-restore mode; the outer vector if for the local stochastic data and the inner vecto...
Definition: SamplerTransientMultiApp.h:68
SamplerTransientMultiApp::SamplerTransientMultiApp
SamplerTransientMultiApp(const InputParameters &parameters)
Definition: SamplerTransientMultiApp.C:47
SamplerTransientMultiApp::solveStep
virtual bool solveStep(Real dt, Real target_time, bool auto_advance=true) override
Override solveStep to allow for batch execution.
Definition: SamplerTransientMultiApp.C:82
SamplerTransientMultiApp::_sampler
Sampler & _sampler
Sampler to utilize for creating MultiApps.
Definition: SamplerTransientMultiApp.h:44
SamplerTransientMultiApp::initialSetup
virtual void initialSetup() override
Override to initialize batch backups.
Definition: SamplerTransientMultiApp.C:66
SamplerTransientMultiApp::solveStepBatch
bool solveStepBatch(Real dt, Real target_time, bool auto_advance=true)
Helper method for running in mode='batch'.
Definition: SamplerTransientMultiApp.C:93
SamplerTransientMultiApp.h
defineLegacyParams
defineLegacyParams(SamplerTransientMultiApp)
SamplerTransientMultiApp::_mode
const StochasticTools::MultiAppMode _mode
The Sup-application solve mode.
Definition: SamplerTransientMultiApp.h:47
StochasticToolsTransfer.h
validParams
InputParameters validParams()
StochasticTools::MultiAppMode::NORMAL
StochasticTools::MultiAppMode
MultiAppMode
Definition: StochasticToolsApp.h:37
SamplerTransientMultiApp::validParams
static InputParameters validParams()
Definition: SamplerTransientMultiApp.C:20
StochasticTools
Enum for batch type in stochastic tools MultiApp.
Definition: StochasticToolsApp.h:35
SamplerTransientMultiApp::getActiveStochasticToolsTransfers
std::vector< std::shared_ptr< StochasticToolsTransfer > > getActiveStochasticToolsTransfers(Transfer::DIRECTION direction)
Helper for getting StochasticToolsTransfer objects.
Definition: SamplerTransientMultiApp.C:141
StochasticTools::MultiAppMode::BATCH_RESTORE