www.mooseframework.org
Public Member Functions | Static Public Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
SamplerTransientMultiApp Class Reference

#include <SamplerTransientMultiApp.h>

Inheritance diagram for SamplerTransientMultiApp:
[legend]

Public Member Functions

 SamplerTransientMultiApp (const InputParameters &parameters)
 
virtual bool solveStep (Real dt, Real target_time, bool auto_advance=true) override
 Override solveStep to allow for batch execution. More...
 
virtual void initialSetup () override
 Override to initialize batch backups. More...
 

Static Public Member Functions

static InputParameters validParams ()
 

Protected Attributes

Sampler & _sampler
 Sampler to utilize for creating MultiApps. More...
 
const StochasticTools::MultiAppMode _mode
 The Sup-application solve mode. More...
 

Private Member Functions

bool solveStepBatch (Real dt, Real target_time, bool auto_advance=true)
 Helper method for running in mode='batch'. More...
 
std::vector< std::shared_ptr< StochasticToolsTransfer > > getActiveStochasticToolsTransfers (Transfer::DIRECTION direction)
 Helper for getting StochasticToolsTransfer objects. More...
 

Private Attributes

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 vector is for the number of sub-apps. More...
 

Detailed Description

Definition at line 25 of file SamplerTransientMultiApp.h.

Constructor & Destructor Documentation

◆ SamplerTransientMultiApp()

SamplerTransientMultiApp::SamplerTransientMultiApp ( const InputParameters &  parameters)

Definition at line 47 of file SamplerTransientMultiApp.C.

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 }

Member Function Documentation

◆ getActiveStochasticToolsTransfers()

std::vector< std::shared_ptr< StochasticToolsTransfer > > SamplerTransientMultiApp::getActiveStochasticToolsTransfers ( Transfer::DIRECTION  direction)
private

Helper for getting StochasticToolsTransfer objects.

This is a copy from SamplerFullSolveMultiapp, but the alternative is to create an intermediate base. But, given the inheritance difference between these object that gets rather complex, so a few lines of copied code is better for now.

Definition at line 141 of file SamplerTransientMultiApp.C.

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 }

Referenced by solveStepBatch().

◆ initialSetup()

void SamplerTransientMultiApp::initialSetup ( )
overridevirtual

Override to initialize batch backups.

Definition at line 66 of file SamplerTransientMultiApp.C.

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 }

◆ solveStep()

bool SamplerTransientMultiApp::solveStep ( Real  dt,
Real  target_time,
bool  auto_advance = true 
)
overridevirtual

Override solveStep to allow for batch execution.

Definition at line 82 of file SamplerTransientMultiApp.C.

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 }

◆ solveStepBatch()

bool SamplerTransientMultiApp::solveStepBatch ( Real  dt,
Real  target_time,
bool  auto_advance = true 
)
private

Helper method for running in mode='batch'.

Definition at line 93 of file SamplerTransientMultiApp.C.

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 }

Referenced by solveStep().

◆ validParams()

InputParameters SamplerTransientMultiApp::validParams ( )
static

Definition at line 20 of file SamplerTransientMultiApp.C.

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 }

Member Data Documentation

◆ _batch_backup

std::vector<std::vector<std::shared_ptr<Backup> > > SamplerTransientMultiApp::_batch_backup
private

Storage for batch-restore mode; the outer vector if for the local stochastic data and the inner vector is for the number of sub-apps.

The later is 1 for this object, but it is included in case that changes in the future or in child classes

Definition at line 68 of file SamplerTransientMultiApp.h.

Referenced by initialSetup(), and solveStepBatch().

◆ _mode

const StochasticTools::MultiAppMode SamplerTransientMultiApp::_mode
protected

The Sup-application solve mode.

Definition at line 47 of file SamplerTransientMultiApp.h.

Referenced by initialSetup(), SamplerTransientMultiApp(), solveStep(), and solveStepBatch().

◆ _sampler

Sampler& SamplerTransientMultiApp::_sampler
protected

Sampler to utilize for creating MultiApps.

Definition at line 44 of file SamplerTransientMultiApp.h.

Referenced by initialSetup(), SamplerTransientMultiApp(), and solveStepBatch().


The documentation for this class was generated from the following files:
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::_sampler
Sampler & _sampler
Sampler to utilize for creating MultiApps.
Definition: SamplerTransientMultiApp.h:44
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::_mode
const StochasticTools::MultiAppMode _mode
The Sup-application solve mode.
Definition: SamplerTransientMultiApp.h:47
validParams
InputParameters validParams()
StochasticTools::MultiAppMode::NORMAL
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