https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
PODFullSolveMultiApp Class Reference

#include <PODFullSolveMultiApp.h>

Inheritance diagram for PODFullSolveMultiApp:
[legend]

Public Types

typedef DataFileName DataFileParameterType
 

Public Member Functions

 PODFullSolveMultiApp (const InputParameters &parameters)
 
virtual bool solveStep (Real dt, Real target_time, bool auto_advance=true) override
 
virtual void preTransfer (Real dt, Real target_time) override
 Overriding preTransfer to reinit the subappliations if the object needs to be executed twice.
 
bool snapshotGeneration ()
 Returning the value of the snapshot generation flag.
 
virtual void backup () override
 This method is overridden so that we only store the initial state and not on any other timestep when doing batch-restore.
 
virtual void initialSetup () override
 
virtual void finalize () override
 
virtual void postExecute () override
 
virtual void restore (bool force=true) override
 
virtual void preExecute ()
 
void possiblyCreateChildApplications ()
 
void init (unsigned int num_apps, const LocalRankConfig &config)
 
virtual void createLocalApp (const unsigned int i)
 
virtual void incrementTStep (Real)
 
virtual void finishStep (bool=false)
 
bool needsRestoration ()
 
virtual Executioner * getExecutioner (unsigned int app)
 
virtual libMesh::BoundingBox getBoundingBox (unsigned int app, bool displaced_mesh, const MultiAppCoordTransform *coord_transform=nullptr)
 
FEProblemBase & problemBase ()
 
FEProblemBase & appProblemBase (unsigned int app)
 
FEProblem & appProblem (unsigned int app)
 
const UserObject & appUserObjectBase (unsigned int app, const std::string &name)
 
Real appPostprocessorValue (unsigned int app, const std::string &name)
 
virtual libMesh::NumericVector< libMesh::Number > & appTransferVector (unsigned int app, std::string var_name)
 
unsigned int numGlobalApps () const
 
unsigned int numLocalApps ()
 
unsigned int firstLocalApp ()
 
bool isFirstLocalRank () const
 
bool hasApp ()
 
bool hasLocalApp (unsigned int global_app) const
 
MooseApp * localApp (unsigned int local_app)
 
const Point & position (unsigned int app) const
 
virtual void resetApp (unsigned int global_app, Real time=0.0)
 
virtual void moveApp (unsigned int global_app, Point p)
 
virtual void parentOutputPositionChanged ()
 
MPI_Comm & comm ()
 
const Parallel::Communicator & comm () const
 
bool isRootProcessor ()
 
bool usingPositions () const
 
bool runningInPosition () const
 
void addAssociatedTransfer (MultiAppTransfer &transfer)
 
void setAppOutputFileBase ()
 
virtual bool enabled () const
 
std::shared_ptr< MooseObject > getSharedPtr ()
 
std::shared_ptr< const MooseObject > getSharedPtr () const
 
bool isKokkosObject () const
 
MooseApp & getMooseApp () const
 
const std::string & type () const
 
const std::string & name () const
 
std::string typeAndName () const
 
MooseObjectParameterName uniqueParameterName (const std::string &parameter_name) const
 
MooseObjectName uniqueName () const
 
const InputParameters & parameters () const
 
const hit::Node * getHitNode () const
 
bool hasBase () const
 
const std::string & getBase () const
 
const T & getParam (const std::string &name) const
 
std::vector< std::pair< T1, T2 > > getParam (const std::string &param1, const std::string &param2) const
 
const T * queryParam (const std::string &name) const
 
const T & getRenamedParam (const std::string &old_name, const std::string &new_name) const
 
T getCheckedPointerParam (const std::string &name, const std::string &error_string="") const
 
bool isParamValid (const std::string &name) const
 
bool isParamSetByUser (const std::string &name) const
 
void connectControllableParams (const std::string &parameter, const std::string &object_type, const std::string &object_name, const std::string &object_parameter) const
 
void paramError (const std::string &param, Args... args) const
 
void paramWarning (const std::string &param, Args... args) const
 
void paramWarning (const std::string &param, Args... args) const
 
void paramInfo (const std::string &param, Args... args) const
 
std::string messagePrefix (const bool hit_prefix=true) const
 
std::string errorPrefix (const std::string &) const
 
void mooseError (Args &&... args) const
 
void mooseDocumentedError (const std::string &repo_name, const unsigned int issue_num, Args &&... args) const
 
void mooseErrorNonPrefixed (Args &&... args) const
 
void mooseWarning (Args &&... args) const
 
void mooseWarning (Args &&... args) const
 
void mooseWarningNonPrefixed (Args &&... args) const
 
void mooseWarningNonPrefixed (Args &&... args) const
 
void mooseDeprecated (Args &&... args) const
 
void mooseDeprecated (Args &&... args) const
 
void mooseDeprecatedNoTrace (Args &&... args) const
 
void mooseInfo (Args &&... args) const
 
void callMooseError (std::string msg, const bool with_prefix, const hit::Node *node=nullptr, const bool show_trace=true) const
 
std::string getDataFileName (const std::string &param) const
 
std::string getDataFileNameByName (const std::string &relative_path) const
 
std::string getDataFilePath (const std::string &relative_path) const
 
virtual void timestepSetup ()
 
virtual void jacobianSetup ()
 
virtual void residualSetup ()
 
virtual void subdomainSetup ()
 
virtual void customSetup (const ExecFlagType &)
 
const ExecFlagEnum & getExecuteOnEnum () const
 
PerfGraph & perfGraph ()
 
processor_id_type n_processors () const
 
processor_id_type processor_id () const
 
T & getSampler (const std::string &name)
 
Sampler & getSampler (const std::string &name)
 
T & getSamplerByName (const SamplerName &name)
 
Sampler & getSamplerByName (const SamplerName &name)
 

Static Public Member Functions

static InputParameters validParams ()
 
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.
 
static void execBatchTransfers (const std::vector< std::shared_ptr< StochasticToolsTransfer > > &transfers, dof_id_type global_row_index, const std::vector< Real > &row_data, Transfer::DIRECTION direction, bool verbose, const ConsoleStream &console)
 Helper for executing transfers when doing batch stochastic simulations.
 
static void callMooseError (MooseApp *const app, const InputParameters &params, std::string msg, const bool with_prefix, const hit::Node *node, const bool show_trace=true)
 
static void transformBoundingBox (libMesh::BoundingBox &box, const MultiAppCoordTransform &transform)
 

Public Attributes

 usingCombinedWarningSolutionWarnings
 
const ConsoleStream _console
 

Static Public Attributes

static const std::string type_param
 
static const std::string name_param
 
static const std::string unique_name_param
 
static const std::string app_param
 
static const std::string moose_base_param
 
static const std::string kokkos_object_param
 

Protected Member Functions

std::vector< std::shared_ptr< PODSamplerSolutionTransfer > > getActiveSolutionTransfers (Transfer::DIRECTION direction)
 Returning pointers to the solution transfers. Used in batch mode.
 
std::vector< std::shared_ptr< PODResidualTransfer > > getActiveResidualTransfers (Transfer::DIRECTION direction)
 Returning pointers to the solution transfers. Used in batch mode.
 
void computeResidual ()
 Evaluating the residuals for every tag in the trainer.
 
void computeResidualBatch (Real target_time)
 Evaluating the residuals for every tag in the trainer in batch mode.
 
virtual void showStatusMessage (unsigned int i) const override
 Override to avoid 'solve converged' message and print when processors are finished.
 
virtual std::vector< std::string > getCommandLineArgs (const unsigned int local_app) override
 Override to allow for batch mode to get correct cli_args.
 
void init (unsigned int num_apps, bool batch_mode=false)
 
void setAppOutputFileBase (unsigned int index)
 
bool propagateRecoverToSubApps () const override
 
virtual std::vector< std::string > cliArgs () const
 
virtual void fillPositions ()
 
void readCommandLineArguments ()
 
void createApp (unsigned int i, Real start_time)
 
void buildComm ()
 
unsigned int globalAppToLocal (unsigned int global_app)
 
virtual void preRunInputFile ()
 
void createApps ()
 
void keepSolutionDuringRestore (bool keep_solution_during_restore)
 
void flagInvalidSolutionInternal (const InvalidSolutionID invalid_solution_id) const
 
InvalidSolutionID registerInvalidSolutionInternal (const std::string &message, const bool warning) const
 
T & declareRestartableData (const std::string &data_name, Args &&... args)
 
ManagedValue< T > declareManagedRestartableDataWithContext (const std::string &data_name, void *context, Args &&... args)
 
const T & getRestartableData (const std::string &data_name) const
 
T & declareRestartableDataWithContext (const std::string &data_name, void *context, Args &&... args)
 
T & declareRecoverableData (const std::string &data_name, Args &&... args)
 
T & declareRestartableDataWithObjectName (const std::string &data_name, const std::string &object_name, Args &&... args)
 
T & declareRestartableDataWithObjectNameWithContext (const std::string &data_name, const std::string &object_name, void *context, Args &&... args)
 
std::string restartableName (const std::string &data_name) const
 
PerfID registerTimedSection (const std::string &section_name, const unsigned int level) const
 
PerfID registerTimedSection (const std::string &section_name, const unsigned int level, const std::string &live_message, const bool print_dots=true) const
 
std::string timedSectionName (const std::string &section_name) const
 
const ReporterContextBase & getReporterContextBaseByName (const ReporterName &reporter_name) const
 
const ReporterName & getReporterName (const std::string &param_name) const
 
virtual void addReporterDependencyHelper (const ReporterName &)
 
const T & getReporterValue (const std::string &param_name, const std::size_t time_index=0)
 
const T & getReporterValue (const std::string &param_name, ReporterMode mode, const std::size_t time_index=0)
 
const T & getReporterValue (const std::string &param_name, const std::size_t time_index=0)
 
const T & getReporterValue (const std::string &param_name, ReporterMode mode, const std::size_t time_index=0)
 
const T & getReporterValueByName (const ReporterName &reporter_name, const std::size_t time_index=0)
 
const T & getReporterValueByName (const ReporterName &reporter_name, ReporterMode mode, const std::size_t time_index=0)
 
const T & getReporterValueByName (const ReporterName &reporter_name, const std::size_t time_index=0)
 
const T & getReporterValueByName (const ReporterName &reporter_name, ReporterMode mode, const std::size_t time_index=0)
 
bool hasReporterValue (const std::string &param_name) const
 
bool hasReporterValue (const std::string &param_name) const
 
bool hasReporterValue (const std::string &param_name) const
 
bool hasReporterValue (const std::string &param_name) const
 
bool hasReporterValueByName (const ReporterName &reporter_name) const
 
bool hasReporterValueByName (const ReporterName &reporter_name) const
 
bool hasReporterValueByName (const ReporterName &reporter_name) const
 
bool hasReporterValueByName (const ReporterName &reporter_name) const
 

Static Protected Member Functions

static std::string getMultiAppName (const std::string &base_name, dof_id_type index, dof_id_type total)
 

Protected Attributes

PODReducedBasisTrainer & _trainer
 Pointer to the trainer object itself.
 
bool _snapshot_generation
 Switch used to differentiate between snapshot generation and residual computation.
 
Sampler & _sampler
 Sampler to utilize for creating MultiApps.
 
const StochasticTools::MultiAppMode _mode
 The Sup-application solve mode.
 
dof_id_type _local_batch_app_index
 Counter for extracting command line arguments in batch mode.
 
FEProblemBase & _fe_problem
 
std::string _app_type
 
std::vector< Point > _positions
 
std::vector< const Positions * > _positions_objs
 
std::vector< unsigned int > _positions_index_offsets
 
const bool _use_positions
 
const bool _create_child_apps_on_initial_setup
 
std::vector< FileName > _input_files
 
const bool & _wait_for_first_app_init
 
std::vector< unsigned int > _npositions_inputfile
 
std::string _output_base
 
unsigned int _total_num_apps
 
unsigned int _my_num_apps
 
unsigned int _first_local_app
 
const MPI_Comm & _orig_comm
 
libMesh::Parallel::Communicator _my_communicator
 
MPI_Comm & _my_comm
 
int _orig_num_procs
 
int _orig_rank
 
std::string _node_name
 
int _my_rank
 
std::vector< std::shared_ptr< MooseApp > > _apps
 
std::vector< bool > _has_bounding_box
 
std::vector< libMesh::BoundingBox > _bounding_box
 
Real _inflation
 
Point _bounding_box_padding
 
processor_id_type _max_procs_per_app
 
processor_id_type _min_procs_per_app
 
bool _output_in_position
 
const Real _global_time_offset
 
std::vector< Real > _reset_times
 
std::vector< unsigned int > _reset_apps
 
std::vector< bool > _reset_happened
 
Real _move_time
 
std::vector< unsigned int > _move_apps
 
std::vector< Point > _move_positions
 
bool _move_happened
 
bool _has_an_app
 
const std::vector< CLIArgString > & _cli_args
 
std::vector< std::string > _cli_args_from_file
 
bool _keep_solution_during_restore
 
bool _keep_aux_solution_during_restore
 
const bool _no_restore
 
std::vector< std::vector< std::unique_ptr< libMesh::NumericVector< Real > > > > _end_solutions
 
std::vector< std::unique_ptr< NumericVector< Real > > > _end_aux_solutions
 
LocalRankConfig _rank_config
 
std::vector< MultiAppTransfer * > _associated_transfers
 
const bool _run_in_position
 
SubAppBackups & _sub_app_backups
 
const PerfID _solve_step_timer
 
const PerfID _init_timer
 
const PerfID _backup_timer
 
const PerfID _restore_timer
 
const PerfID _reset_timer
 
const bool & _enabled
 
MooseApp & _app
 
Factory & _factory
 
ActionFactory & _action_factory
 
const std::string & _type
 
const std::string & _name
 
const InputParameters & _pars
 
const ExecFlagEnum & _execute_enum
 
const ExecFlagType & _current_execute_flag
 
MooseApp & _restartable_app
 
const std::string _restartable_system_name
 
const THREAD_ID _restartable_tid
 
const bool _restartable_read_only
 
MooseApp & _pg_moose_app
 
const std::string _prefix
 
const Parallel::Communicator & _communicator
 

Private Member Functions

bool solveStepBatch (Real dt, Real target_time, bool auto_advance=true)
 Helper method for running in mode='batch'.
 
std::vector< std::shared_ptr< StochasticToolsTransfer > > getActiveStochasticToolsTransfers (Transfer::DIRECTION direction)
 Helper for getting StochasticToolsTransfer objects.
 
RestartableDataValue & registerRestartableDataOnApp (std::unique_ptr< RestartableDataValue > data, THREAD_ID tid) const
 
void registerRestartableNameWithFilterOnApp (const std::string &name, Moose::RESTARTABLE_FILTER filter)
 
RestartableData< T > & declareRestartableDataHelper (const std::string &data_name, void *context, Args &&... args) const
 
bool reportersAdded () const
 
void possiblyCheckHasReporter (const ReporterName &reporter_name, const std::string &param_name="") const
 
template<>
SurrogateModel & getSurrogateModel (const std::string &name) const
 
template<>
SurrogateTrainerBase & getSurrogateTrainer (const std::string &name) const
 
template<>
SurrogateModel & getSurrogateModelByName (const UserObjectName &name) const
 
template<>
SurrogateTrainerBase & getSurrogateTrainerByName (const UserObjectName &name) const
 
template<typename T = SurrogateModel>
T & getSurrogateModel (const std::string &name) const
 Get a SurrogateModel/Trainer with a given name.
 
template<typename T = SurrogateTrainerBase>
T & getSurrogateTrainer (const std::string &name) const
 
template<typename T = SurrogateModel>
T & getSurrogateModelByName (const UserObjectName &name) const
 Get a sampler with a given name.
 
template<typename T = SurrogateTrainerBase>
T & getSurrogateTrainerByName (const UserObjectName &name) const
 

Static Private Member Functions

static const hit::Node * getHitNode (const InputParameters &params)
 
static std::string messagePrefix (const InputParameters &params, const bool hit_prefix)
 

Private Attributes

bool _solved_once
 
dof_id_type _number_of_sampler_rows
 
const std::vector< bool > * _should_run = nullptr
 Reporter value determining whether the sub-app should be run for a certain sample.
 
const bool _ignore_diverge
 
const bool _update_old_state_when_keeping_solution_during_restore
 
std::vector< Executioner * > _executioners
 
std::optional< std::string > _cli_args_param
 
const ParallelParamObject & _parent
 
const MooseBase & _si_moose_base
 
const FEProblemBase * _si_problem
 
ExecFlagEnum _empty_execute_enum
 
const RestartableDataMapName _metaname
 
std::string _restartable_name
 
const InputParameters & _si_params
 
FEProblemBase & _si_feproblem
 
THREAD_ID _si_tid
 
const InputParameters & _ri_params
 
FEProblemBase & _ri_fe_problem_base
 
const ReporterData & _ri_reporter_data
 
const MooseObject & _ri_moose_object
 
const InputParameters & _smi_params
 Parameters of the object with this interface.
 
FEProblemBase & _smi_feproblem
 Reference to FEProblemBase instance.
 
const THREAD_ID _smi_tid
 Thread ID.
 

Detailed Description

Definition at line 23 of file PODFullSolveMultiApp.h.

Constructor & Destructor Documentation

◆ PODFullSolveMultiApp()

PODFullSolveMultiApp::PODFullSolveMultiApp ( const InputParameters &  parameters)

Definition at line 34 of file PODFullSolveMultiApp.C.

37 _trainer(getSurrogateTrainer<PODReducedBasisTrainer>("trainer_name")),
39{
40 if (getParam<unsigned int>("max_procs_per_app") != 1)
41 paramError("max_procs_per_app", " does not support more than one processors per subapp!");
42
45 " needs to be run with fewer processors (detected ",
47 ") than samples (detected ",
49 ")!");
50}
const InputParameters & parameters() const
const std::string & type() const
void paramError(const std::string &param, Args... args) const
void mooseError(Args &&... args) const
PODReducedBasisTrainer & _trainer
Pointer to the trainer object itself.
bool _snapshot_generation
Switch used to differentiate between snapshot generation and residual computation.
Sampler & _sampler
Sampler to utilize for creating MultiApps.
dof_id_type getNumberOfRows() const
Interface for objects that need to use samplers.
processor_id_type n_processors() const

Member Function Documentation

◆ backup()

void SamplerFullSolveMultiApp::backup ( )
overridevirtualinherited

This method is overridden so that we only store the initial state and not on any other timestep when doing batch-restore.

Reimplemented from FullSolveMultiApp.

Definition at line 89 of file SamplerFullSolveMultiApp.C.

90{
93}
virtual void backup()
const StochasticTools::MultiAppMode _mode
The Sup-application solve mode.

Referenced by computeResidualBatch().

◆ computeResidual()

void PODFullSolveMultiApp::computeResidual ( )
protected

Evaluating the residuals for every tag in the trainer.

Definition at line 101 of file PODFullSolveMultiApp.C.

102{
103 // Doing the regular computation but instead of solving the subapplication,
104 // the residuals for different tags are evaluated.
105 if (!_has_an_app)
106 return;
107
109
110 int rank;
111 int ierr;
112 ierr = MPI_Comm_rank(_communicator.get(), &rank);
113 mooseCheckMPIErr(ierr);
114
115 // Getting the necessary tag names.
116 const std::vector<std::string> & trainer_tags = _trainer.getTagNames();
117
118 // Looping over the subapplications and computing residuals.
119 for (unsigned int i = 0; i < _my_num_apps; i++)
120 {
121 // Getting the local problem
122 FEProblemBase & problem = _apps[i]->getExecutioner()->feProblem();
123
124 // Extracting the TagIDs based on tag names from the current subapp.
125 std::set<TagID> tags_to_compute;
126 for (auto & tag_name : trainer_tags)
127 tags_to_compute.insert(problem.getVectorTagID(tag_name));
128
129 problem.setCurrentNonlinearSystem(0);
130 problem.computeResidualTags(tags_to_compute);
131 }
132}
virtual void computeResidualTags(const std::set< TagID > &tags)
void setCurrentNonlinearSystem(const unsigned int nl_sys_num)
MPI_Comm & _my_comm
std::vector< std::shared_ptr< MooseApp > > _apps
unsigned int _my_num_apps
const std::vector< std::string > & getTagNames() const
const Parallel::Communicator & _communicator

Referenced by computeResidualBatch(), and solveStep().

◆ computeResidualBatch()

void PODFullSolveMultiApp::computeResidualBatch ( Real  target_time)
protected

Evaluating the residuals for every tag in the trainer in batch mode.

Definition at line 135 of file PODFullSolveMultiApp.C.

136{
137 // Getting the overall base size from the trainer.
138 dof_id_type base_size = _trainer.getSumBaseSize();
139
140 // Distributing the residual evaluation among processes.
141 dof_id_type local_base_begin;
142 dof_id_type local_base_end;
143 dof_id_type n_local_bases;
145 base_size, n_processors(), processor_id(), n_local_bases, local_base_begin, local_base_end);
146
147 // List of active relevant Transfer objects
148 std::vector<std::shared_ptr<PODSamplerSolutionTransfer>> to_transfers =
150 std::vector<std::shared_ptr<PODResidualTransfer>> from_transfers =
152
153 // Initialize to/from transfers
154 for (auto transfer : to_transfers)
155 transfer->initializeToMultiapp();
156
157 for (auto transfer : from_transfers)
158 transfer->initializeFromMultiapp();
159
161 backup();
162
163 // Perform batch MultiApp solves
165 for (dof_id_type i = local_base_begin; i < local_base_end; ++i)
166 {
167 for (auto & transfer : to_transfers)
168 {
169 transfer->setGlobalMultiAppIndex(i);
170 transfer->executeToMultiapp();
171 }
172
174
175 for (auto & transfer : from_transfers)
176 {
177 transfer->setGlobalMultiAppIndex(i);
178 transfer->executeFromMultiapp();
179 }
180
181 if (i < _sampler.getLocalRowEnd() - 1)
182 {
184 restore();
185 else
186 {
187 // The app is being reset for the next loop, thus the batch index must be indexed as such
189 resetApp(_local_batch_app_index + i, target_time);
190 initialSetup();
191 }
192 }
193 }
194
195 // Finalize to/from transfers
196 for (auto transfer : to_transfers)
197 transfer->finalizeToMultiapp();
198 for (auto transfer : from_transfers)
199 transfer->finalizeFromMultiapp();
200}
virtual void initialSetup() override
virtual void restore(bool force=true) override
virtual void resetApp(unsigned int global_app, Real time=0.0)
void computeResidual()
Evaluating the residuals for every tag in the trainer.
std::vector< std::shared_ptr< PODSamplerSolutionTransfer > > getActiveSolutionTransfers(Transfer::DIRECTION direction)
Returning pointers to the solution transfers. Used in batch mode.
std::vector< std::shared_ptr< PODResidualTransfer > > getActiveResidualTransfers(Transfer::DIRECTION direction)
Returning pointers to the solution transfers. Used in batch mode.
unsigned int getSumBaseSize() const
Getting the overall base size, which is the sum of the individual bases.
virtual void backup() override
This method is overridden so that we only store the initial state and not on any other timestep when ...
dof_id_type _local_batch_app_index
Counter for extracting command line arguments in batch mode.
dof_id_type getLocalRowEnd() const
processor_id_type processor_id() const
void linearPartitionItems(dof_id_type num_items, dof_id_type num_chunks, dof_id_type chunk_id, dof_id_type &num_local_items, dof_id_type &local_items_begin, dof_id_type &local_items_end)
uint8_t dof_id_type

Referenced by solveStep().

◆ execBatchTransfers()

void SamplerFullSolveMultiApp::execBatchTransfers ( const std::vector< std::shared_ptr< StochasticToolsTransfer > > &  transfers,
dof_id_type  global_row_index,
const std::vector< Real > &  row_data,
Transfer::DIRECTION  direction,
bool  verbose,
const ConsoleStream &  console 
)
staticinherited

Helper for executing transfers when doing batch stochastic simulations.

Parameters
transfersA vector of transfers to execute
global_row_indexThe global row index of the run
row_dataThe current sampler row of data for the transfer to utilize
typeThe current execution flag, used for info printing
directionThe direction of the transfer, used for info printing
verboseWhether or not print information about the transfer
consoleThe console stream to output to

Definition at line 269 of file SamplerFullSolveMultiApp.C.

276{
277 if (verbose && transfers.size())
278 {
279 console << COLOR_CYAN << "\nBatch transfers for row " << global_row_index;
280 if (direction == MultiAppTransfer::TO_MULTIAPP)
281 console << " To ";
282 else if (direction == MultiAppTransfer::FROM_MULTIAPP)
283 console << " From ";
284 console << "MultiApps" << COLOR_DEFAULT << ":" << std::endl;
285
286 console << "Sampler row " << global_row_index << " data: [" << Moose::stringify(row_data) << "]"
287 << std::endl;
288
289 // Build Table of Transfer Info
291 {"Name", "Type", "From", "To"});
292 for (const auto & transfer : transfers)
293 table.addRow(
294 transfer->name(), transfer->type(), transfer->getFromName(), transfer->getToName());
295 table.print(console);
296 }
297
298 for (auto & transfer : transfers)
299 {
300 transfer->setGlobalRowIndex(global_row_index);
301 transfer->setCurrentRow(row_data);
302 if (direction == MultiAppTransfer::TO_MULTIAPP)
303 transfer->executeToMultiapp();
304 else if (direction == MultiAppTransfer::FROM_MULTIAPP)
305 transfer->executeFromMultiapp();
306 }
307
308 if (verbose && transfers.size())
309 console << COLOR_CYAN << "Batch transfers for row " << global_row_index << " Are Finished\n"
310 << COLOR_DEFAULT << std::endl;
311}
const std::string & name() const
void print(StreamType &stream)
std::string stringify(const T &t)

Referenced by SamplerFullSolveMultiApp::solveStepBatch(), and SamplerTransientMultiApp::solveStepBatch().

◆ getActiveResidualTransfers()

std::vector< std::shared_ptr< PODResidualTransfer > > PODFullSolveMultiApp::getActiveResidualTransfers ( Transfer::DIRECTION  direction)
protected

Returning pointers to the solution transfers. Used in batch mode.

Definition at line 218 of file PODFullSolveMultiApp.C.

219{
220 std::vector<std::shared_ptr<PODResidualTransfer>> output;
221 const ExecuteMooseObjectWarehouse<Transfer> & warehouse =
223 for (std::shared_ptr<Transfer> transfer : warehouse.getActiveObjects())
224 {
225 auto ptr = std::dynamic_pointer_cast<PODResidualTransfer>(transfer);
226 if (ptr)
227 output.push_back(ptr);
228 }
229 return output;
230}
const ExecuteMooseObjectWarehouse< Transfer > & getMultiAppTransferWarehouse(Transfer::DIRECTION direction) const
FEProblemBase & _fe_problem

Referenced by computeResidualBatch().

◆ getActiveSolutionTransfers()

std::vector< std::shared_ptr< PODSamplerSolutionTransfer > > PODFullSolveMultiApp::getActiveSolutionTransfers ( Transfer::DIRECTION  direction)
protected

Returning pointers to the solution transfers. Used in batch mode.

Definition at line 203 of file PODFullSolveMultiApp.C.

204{
205 std::vector<std::shared_ptr<PODSamplerSolutionTransfer>> output;
206 const ExecuteMooseObjectWarehouse<Transfer> & warehouse =
208 for (std::shared_ptr<Transfer> transfer : warehouse.getActiveObjects())
209 {
210 auto ptr = std::dynamic_pointer_cast<PODSamplerSolutionTransfer>(transfer);
211 if (ptr)
212 output.push_back(ptr);
213 }
214 return output;
215}

Referenced by computeResidualBatch().

◆ getActiveStochasticToolsTransfers()

std::vector< std::shared_ptr< StochasticToolsTransfer > > SamplerFullSolveMultiApp::getActiveStochasticToolsTransfers ( Transfer::DIRECTION  direction)
privateinherited

Helper for getting StochasticToolsTransfer objects.

Definition at line 349 of file SamplerFullSolveMultiApp.C.

350{
351 std::vector<std::shared_ptr<StochasticToolsTransfer>> output;
352 const ExecuteMooseObjectWarehouse<Transfer> & warehouse =
354 for (std::shared_ptr<Transfer> transfer : warehouse.getActiveObjects())
355 {
356 auto ptr = std::dynamic_pointer_cast<StochasticToolsTransfer>(transfer);
357 if (ptr && ptr->getMultiApp().get() == this)
358 output.push_back(ptr);
359 }
360 return output;
361}

Referenced by SamplerFullSolveMultiApp::solveStepBatch().

◆ getCommandLineArgs()

std::vector< std::string > SamplerFullSolveMultiApp::getCommandLineArgs ( const unsigned int  local_app)
overrideprotectedvirtualinherited

Override to allow for batch mode to get correct cli_args.

Reimplemented from FullSolveMultiApp.

Definition at line 364 of file SamplerFullSolveMultiApp.C.

365{
368
369 std::vector<std::string> args;
370
371 // With multiple processors per app, there are no local rows for non-root processors
372 if (isRootProcessor())
373 {
374 // Since we only store param_names in cli_args, we need to find the values for each param from
375 // sampler data and combine them to get full command line option strings.
376 dof_id_type row_index;
378 row_index = local_app + _first_local_app;
379 else
383 }
384
386 return args;
387}
libMesh::Parallel::Communicator _my_communicator
unsigned int _first_local_app
virtual std::vector< std::string > getCommandLineArgs(const unsigned int local_app)
LocalRankConfig _rank_config
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.
std::vector< Real > getSampleRow(dof_id_type row_index) const
void broadcast(T &data, const unsigned int root_id=0, const bool identical_sizes=false) const
dof_id_type first_local_sim_index

◆ getSurrogateModel() [1/2]

template<typename T >
T & SurrogateModelInterface::getSurrogateModel ( const std::string &  name) const
inherited

Get a SurrogateModel/Trainer with a given name.

Parameters
nameThe name of the parameter key of the sampler to retrieve
Returns
The sampler with name associated with the parameter 'name'

Definition at line 81 of file SurrogateModelInterface.h.

82{
83 return getSurrogateModelByName<T>(_smi_params.get<UserObjectName>(name));
84}
const std::string name
Definition Setup.h:21
std::vector< std::pair< R1, R2 > > get(const std::string &param1, const std::string &param2) const
const InputParameters & _smi_params
Parameters of the object with this interface.

Referenced by SurrogateTrainer::initialize().

◆ getSurrogateModel() [2/2]

template<>
SurrogateModel & SurrogateModelInterface::getSurrogateModel ( const std::string &  name) const
inherited

Definition at line 46 of file SurrogateModelInterface.C.

47{
48 return getSurrogateModelByName<SurrogateModel>(_smi_params.get<UserObjectName>(name));
49}

◆ getSurrogateModelByName() [1/2]

template<typename T >
T & SurrogateModelInterface::getSurrogateModelByName ( const UserObjectName &  name) const
inherited

Get a sampler with a given name.

Parameters
nameThe name of the sampler to retrieve
Returns
The sampler with name 'name'

Definition at line 88 of file SurrogateModelInterface.h.

89{
90 std::vector<T *> models;
92 .query()
93 .condition<AttribName>(name)
94 .condition<AttribSystem>("SurrogateModel")
95 .queryInto(models);
96 if (models.empty())
97 mooseError("Unable to find a SurrogateModel object of type " + std::string(typeid(T).name()) +
98 " with the name '" + name + "'");
99 return *(models[0]);
100}
const double T
void mooseError(Args &&... args)
TheWarehouse & theWarehouse() const
FEProblemBase & _smi_feproblem
Reference to FEProblemBase instance.
Query query()

Referenced by CrossValidationScores::CrossValidationScores(), EvaluateSurrogate::EvaluateSurrogate(), and InverseMapping::initialSetup().

◆ getSurrogateModelByName() [2/2]

template<>
SurrogateModel & SurrogateModelInterface::getSurrogateModelByName ( const UserObjectName &  name) const
inherited

Definition at line 31 of file SurrogateModelInterface.C.

32{
33 std::vector<SurrogateModel *> models;
35 .query()
36 .condition<AttribName>(name)
37 .condition<AttribSystem>("SurrogateModel")
38 .queryInto(models);
39 if (models.empty())
40 mooseError("Unable to find a SurrogateModel object with the name '" + name + "'");
41 return *(models[0]);
42}

◆ getSurrogateTrainer() [1/2]

template<typename T >
T & SurrogateModelInterface::getSurrogateTrainer ( const std::string &  name) const
inherited

Definition at line 104 of file SurrogateModelInterface.h.

105{
106 return getSurrogateTrainerByName<T>(_smi_params.get<UserObjectName>(name));
107}

◆ getSurrogateTrainer() [2/2]

template<>
SurrogateTrainerBase & SurrogateModelInterface::getSurrogateTrainer ( const std::string &  name) const
inherited

Definition at line 60 of file SurrogateModelInterface.C.

61{
62 return getSurrogateTrainerByName<SurrogateTrainerBase>(_smi_params.get<UserObjectName>(name));
63}

◆ getSurrogateTrainerByName() [1/2]

template<typename T >
T & SurrogateModelInterface::getSurrogateTrainerByName ( const UserObjectName &  name) const
inherited

Definition at line 111 of file SurrogateModelInterface.h.

112{
113 SurrogateTrainerBase * base_ptr =
115 T * obj_ptr = dynamic_cast<T *>(base_ptr);
116 if (!obj_ptr)
117 mooseError("Failed to find a SurrogateTrainer object of type " + std::string(typeid(T).name()) +
118 " with the name '",
119 name,
120 "' for the desired type.");
121 return *obj_ptr;
122}
T & getUserObject(const std::string &name, unsigned int tid=0) const
const THREAD_ID _smi_tid
Thread ID.
This is the base trainer class whose main functionality is the API for declaring model data.

Referenced by SurrogateTrainerOutput::output().

◆ getSurrogateTrainerByName() [2/2]

template<>
SurrogateTrainerBase & SurrogateModelInterface::getSurrogateTrainerByName ( const UserObjectName &  name) const
inherited

Definition at line 53 of file SurrogateModelInterface.C.

◆ preTransfer()

void PODFullSolveMultiApp::preTransfer ( Real  dt,
Real  target_time 
)
overridevirtual

Overriding preTransfer to reinit the subappliations if the object needs to be executed twice.

Reimplemented from SamplerFullSolveMultiApp.

Definition at line 53 of file PODFullSolveMultiApp.C.

54{
55 // Reinitialize the problem only if the snapshot generation part is done.
57 {
59 if (base_size < 1)
61 "There are no basis vectors available for residual generation."
62 " This indicates that the bases have not been created yet."
63 " The most common cause of this error is the wrong setting"
64 " of the 'execute_on' flags in the PODFullSolveMultiApp and/or PODReducedBasisTrainer.");
65
66 init(base_size,
69
71 }
73}
void init(unsigned int num_apps, const LocalRankConfig &config)
virtual void preTransfer(Real dt, Real target_time) override
const LocalRankConfig & getRankConfig(bool batch_mode) const

◆ sampledCommandLineArgs()

std::vector< std::string > SamplerFullSolveMultiApp::sampledCommandLineArgs ( const std::vector< Real > &  row,
const std::vector< std::string > &  full_args_name 
)
staticinherited

Helper for inserting row data into commandline arguments Used here and in SamplerTransientMultiApp.

How it works:

  • Scalar parameters are done in order of row data: param1;param2;param3 -> param1=row[0] param2=row[1] param3=row[2]
  • Vector parameters are assigned with brackets: vec_param1[0,1];vec_param2[1,2] -> vec_param1='row[0] row[1]' vec_param2='row[1] row[2]'
  • Any parameter already with an equal sign is not modified: param1=3.14;param2[0,1,2] -> param1=3.14 param2='row[0] row[1] row[2]'

Definition at line 390 of file SamplerFullSolveMultiApp.C.

392{
393 std::vector<std::string> args;
394
395 // Find parameters that are meant to be assigned by sampler values
396 std::vector<std::string> cli_args_name;
397 for (const auto & fan : full_args_name)
398 {
399 // If it has an '=', then it is not meant to be modified
400 if (fan.find("=") == std::string::npos)
401 cli_args_name.push_back(fan);
402 else
403 args.push_back(fan);
404 }
405
406 // Make sure the parameters either all have brackets, or none of them do
407 bool has_brackets = false;
408 if (cli_args_name.size())
409 {
410 has_brackets = cli_args_name[0].find("[") != std::string::npos;
411 for (unsigned int i = 1; i < cli_args_name.size(); ++i)
412 if (has_brackets != (cli_args_name[i].find("[") != std::string::npos))
413 ::mooseError("If the bracket is used, it must be provided to every parameter.");
414 }
415 if (!has_brackets && cli_args_name.size() && cli_args_name.size() != row.size())
416 ::mooseError("Number of command line arguments does not match number of sampler columns.");
417
418 for (unsigned int i = 0; i < cli_args_name.size(); ++i)
419 {
420 // Assign bracketed parameters
421 if (has_brackets)
422 {
423 // Split param name and vector assignment: "param[0,(3.14),1]" -> {"param", "0,(3.14),1]"}
424 const std::vector<std::string> & vector_param = MooseUtils::split(cli_args_name[i], "[");
425 // Get indices of vector: "0,(3.14),1]" -> {"0", "(3.14)", "1"}
426 const std::vector<std::string> & index_string =
427 MooseUtils::split(vector_param[1].substr(0, vector_param[1].find("]")), ",");
428
429 // Loop through indices and assign parameter: param='row[0] 3.14 row[1]'
430 std::vector<std::string> values;
431 for (const auto & istr : index_string)
432 {
433 Real value;
434
435 // If the value is enclosed in parentheses, then it isn't an index, it's a value
436 if (istr.find("(") != std::string::npos)
437 value = std::stod(istr.substr(istr.find("(") + 1));
438 // Assign the value from row if it is an index
439 else
440 {
441 unsigned int index = MooseUtils::stringToInteger(istr);
442 if (index >= row.size())
443 ::mooseError("The provided global column index (",
444 index,
445 ") for ",
446 vector_param[0],
447 " is out of bound.");
448 value = row[index];
449 }
450
451 values.push_back(Moose::stringifyExact(value));
452 }
453
454 // If there is only one value, do not put quotes around it
455 if (values.size() == 1)
456 args.push_back(vector_param[0] + "=" + values[0]);
457 else
458 args.push_back(vector_param[0] + "='" + MooseUtils::stringJoin(values) + "'");
459 }
460 // Assign scalar parameters
461 else
462 args.push_back(cli_args_name[i] + "=" + Moose::stringifyExact(row[i]));
463 }
464
465 return args;
466}
std::array< Real, 2 > values
int stringToInteger(const std::string &input, bool throw_on_failure)
std::vector< std::string > split(const std::string &str, const std::string &delimiter, std::size_t max_count)
std::string stringJoin(const std::vector< std::string > &values, const std::string &separator=" ")
KOKKOS_INLINE_FUNCTION const T * find(const T &target, const T *const begin, const T *const end)
std::string stringifyExact(Real)
Real value(unsigned n, unsigned alpha, unsigned beta, Real x)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

Referenced by SamplerParameterTransfer::execute(), SamplerParameterTransfer::executeToMultiapp(), SamplerFullSolveMultiApp::getCommandLineArgs(), and SamplerTransientMultiApp::getCommandLineArgs().

◆ showStatusMessage()

void SamplerFullSolveMultiApp::showStatusMessage ( unsigned int  i) const
overrideprotectedvirtualinherited

Override to avoid 'solve converged' message and print when processors are finished.

Reimplemented from FullSolveMultiApp.

Definition at line 314 of file SamplerFullSolveMultiApp.C.

315{
316 // Local row is the app index if in normal mode, otherwise it's _local_batch_app_index
317 const dof_id_type local_row =
319 // If the local row is less than the number of local sims, we aren't finished yet
320 if (local_row < _rank_config.num_local_sims - 1)
321 return;
322
323 // Loop through processors to communicate completeness
324 for (const auto & pid : make_range(n_processors()))
325 {
326 // This is what is being sent to trigger completeness
329 : 0;
330 // Cannot send/receive to the same processor, so avoid if root
331 if (pid > 0)
332 {
333 // Send data to root
334 if (pid == processor_id())
335 _communicator.send(0, last_row);
336 // Receive data from source
337 else if (processor_id() == 0)
338 _communicator.receive(pid, last_row);
339 }
340
341 // Output the samples that are complete if it's the main processor for the batch
342 if (last_row)
343 _console << COLOR_CYAN << type() << " [" << name() << "] " << last_row << "/"
344 << _number_of_sampler_rows << " samples complete!" << std::endl;
345 }
346}
const ConsoleStream _console
Status receive(const unsigned int dest_processor_id, T &buf, const MessageTag &tag=any_tag) const
void send(const unsigned int dest_processor_id, const T &buf, const MessageTag &tag=no_tag) const
IntRange< T > make_range(T beg, T end)
dof_id_type num_local_sims
bool is_first_local_rank

◆ snapshotGeneration()

bool PODFullSolveMultiApp::snapshotGeneration ( )
inline

Returning the value of the snapshot generation flag.

Definition at line 37 of file PODFullSolveMultiApp.h.

37{ return _snapshot_generation; }

◆ solveStep()

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

Reimplemented from SamplerFullSolveMultiApp.

Definition at line 76 of file PODFullSolveMultiApp.C.

77{
78
79 bool last_solve_converged = true;
80
81 // If snapshot generation phase, solve the subapplications in a regular manner.
82 // Otherwise, compute the residuals only.
84 {
85 last_solve_converged = SamplerFullSolveMultiApp::solveStep(dt, target_time, auto_advance);
87 }
88 else
89 {
92 computeResidualBatch(target_time);
93 else
95 }
96
97 return last_solve_converged;
98}
void computeResidualBatch(Real target_time)
Evaluating the residuals for every tag in the trainer in batch mode.
virtual bool solveStep(Real dt, Real target_time, bool auto_advance=true) override

◆ solveStepBatch()

bool SamplerFullSolveMultiApp::solveStepBatch ( Real  dt,
Real  target_time,
bool  auto_advance = true 
)
privateinherited

Helper method for running in mode='batch'.

Definition at line 152 of file SamplerFullSolveMultiApp.C.

153{
154 TIME_SECTION("solveStepBatch", 3, "Solving Step Batch For SamplerFullSolveMultiApp");
155
157 paramError("should_run_reporter",
158 "Reporter deteriming multiapp run must be of size greater than or equal to the "
159 "number of local rows in the sampler, ",
160 _should_run->size(),
161 " < ",
163 ".");
164
165 // Value to return
166 bool last_solve_converged = true;
167
168 // List of active relevant Transfer objects
169 std::vector<std::shared_ptr<StochasticToolsTransfer>> to_transfers =
171 std::vector<std::shared_ptr<StochasticToolsTransfer>> from_transfers =
173
174 // Initialize to/from transfers
175 for (auto transfer : to_transfers)
176 {
177 transfer->setGlobalMultiAppIndex(_rank_config.first_local_app_index);
178 transfer->initializeToMultiapp();
179 }
180 for (auto transfer : from_transfers)
181 {
182 transfer->setGlobalMultiAppIndex(_rank_config.first_local_app_index);
183 transfer->initializeFromMultiapp();
184 }
185
188
189 // Perform batch MultiApp solves
191 for (dof_id_type i = _rank_config.first_local_sim_index;
193 ++i)
194 {
195 bool run = true;
196 if (_should_run)
197 {
198 if (isRootProcessor())
201 }
202 if (!run)
203 {
205 continue;
206 }
207
208 // Given that we don't initialize in preTransfer for batch-reset mode, we need
209 // a different logic for resetting the apps for every sample:
210 // - batch-restore: after (re-)initializing the problem, we only need to restore
211 // starting from the second sample
213 {
215 restore();
216 }
217 // - batch-reset: we don't need to initialize for the first sample in the first
218 // solve. After that, we initialize every time. This is mainly to avoid unnecessary
219 // initializations for cases when the multiapp does not need to be executed (conditional runs)
220 else
221 {
223 initialSetup();
224 }
225
226 // With multiple processors per app, there are no local rows for non-root processors
227 std::vector<Real> row_data;
228 if (isRootProcessor())
229 row_data = _sampler.getSampleRow(i);
230 execBatchTransfers(to_transfers,
231 i,
232 row_data,
235 _console);
236
237 // Set the file base based on the current row
238 for (unsigned int ai = 0; ai < _my_num_apps; ++ai)
239 {
240 const std::string mname = getMultiAppName(name(), i, _number_of_sampler_rows);
241 _apps[ai]->setOutputFileBase(_app.getOutputFileBase() + "_" + mname);
242 }
243
244 const bool curr_last_solve_converged =
245 FullSolveMultiApp::solveStep(dt, target_time, auto_advance);
246 last_solve_converged = last_solve_converged && curr_last_solve_converged;
247
248 execBatchTransfers(from_transfers,
249 i,
250 row_data,
253 _console);
254
256 }
258
259 // Finalize to/from transfers
260 for (auto transfer : to_transfers)
261 transfer->finalizeToMultiapp();
262 for (auto transfer : from_transfers)
263 transfer->finalizeFromMultiapp();
264
265 return last_solve_converged;
266}
bool verboseMultiApps() const
virtual bool solveStep(Real dt, Real target_time, bool auto_advance=true) override
std::string getOutputFileBase(bool for_non_moose_build_output=false) const
static std::string getMultiAppName(const std::string &base_name, dof_id_type index, dof_id_type total)
const std::vector< bool > * _should_run
Reporter value determining whether the sub-app should be run for a certain sample.
std::vector< std::shared_ptr< StochasticToolsTransfer > > getActiveStochasticToolsTransfers(Transfer::DIRECTION direction)
Helper for getting StochasticToolsTransfer objects.
static void execBatchTransfers(const std::vector< std::shared_ptr< StochasticToolsTransfer > > &transfers, dof_id_type global_row_index, const std::vector< Real > &row_data, Transfer::DIRECTION direction, bool verbose, const ConsoleStream &console)
Helper for executing transfers when doing batch stochastic simulations.
dof_id_type getNumberOfLocalRows() const
dof_id_type first_local_app_index

Referenced by SamplerFullSolveMultiApp::solveStep().

◆ validParams()

InputParameters PODFullSolveMultiApp::validParams ( )
static

Definition at line 21 of file PODFullSolveMultiApp.C.

22{
25 "Creates a full-solve type sub-application for each row of a Sampler matrix. "
26 "On second call, this object creates residuals for a PODReducedBasisTrainer with given basis "
27 "functions.");
28 params.addRequiredParam<UserObjectName>(
29 "trainer_name", "Trainer object that contains the solutions for different samples.");
30
31 return params;
32}
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
static InputParameters validParams()

Member Data Documentation

◆ _local_batch_app_index

dof_id_type SamplerFullSolveMultiApp::_local_batch_app_index
protectedinherited

◆ _mode

const StochasticTools::MultiAppMode SamplerFullSolveMultiApp::_mode
protectedinherited

◆ _number_of_sampler_rows

dof_id_type SamplerFullSolveMultiApp::_number_of_sampler_rows
privateinherited

◆ _sampler

Sampler& SamplerFullSolveMultiApp::_sampler
protectedinherited

◆ _should_run

const std::vector<bool>* SamplerFullSolveMultiApp::_should_run = nullptr
privateinherited

Reporter value determining whether the sub-app should be run for a certain sample.

Definition at line 107 of file SamplerFullSolveMultiApp.h.

Referenced by SamplerFullSolveMultiApp::preTransfer(), and SamplerFullSolveMultiApp::solveStepBatch().

◆ _smi_feproblem

FEProblemBase& SurrogateModelInterface::_smi_feproblem
privateinherited

◆ _smi_params

const InputParameters& SurrogateModelInterface::_smi_params
privateinherited

Parameters of the object with this interface.

Definition at line 70 of file SurrogateModelInterface.h.

Referenced by SurrogateModelInterface::getSurrogateModel(), and SurrogateModelInterface::getSurrogateTrainer().

◆ _smi_tid

const THREAD_ID SurrogateModelInterface::_smi_tid
privateinherited

Thread ID.

Definition at line 76 of file SurrogateModelInterface.h.

Referenced by SurrogateModelInterface::getSurrogateTrainerByName().

◆ _snapshot_generation

bool PODFullSolveMultiApp::_snapshot_generation
protected

Switch used to differentiate between snapshot generation and residual computation.

Residual generation is only possible after the snapshot generation part is complete.

Definition at line 60 of file PODFullSolveMultiApp.h.

Referenced by preTransfer(), snapshotGeneration(), and solveStep().

◆ _solved_once

bool SamplerFullSolveMultiApp::_solved_once
privateinherited

◆ _trainer

PODReducedBasisTrainer& PODFullSolveMultiApp::_trainer
protected

Pointer to the trainer object itself.

Definition at line 55 of file PODFullSolveMultiApp.h.

Referenced by computeResidual(), computeResidualBatch(), and preTransfer().


The documentation for this class was generated from the following files: