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

Automatically generates Sub-App positions from centroids of elements in the master mesh. More...

#include <CentroidMultiApp.h>

Inheritance diagram for CentroidMultiApp:
[legend]

Public Member Functions

 CentroidMultiApp (const InputParameters &parameters)
 
virtual NumericVector< Number > & appTransferVector (unsigned int app, std::string var_name) override
 Get the vector to transfer to for this MultiApp. More...
 
virtual void initialSetup () override
 Gets called at the beginning of the simulation before this object is asked to do its job. More...
 
virtual void restore () override
 Restore the state of every Sub App. More...
 
virtual bool solveStep (Real dt, Real target_time, bool auto_advance=true) override
 Re-solve all of the Apps. More...
 
virtual void incrementTStep (Real target_time) override
 Advances the multi-apps time step which is important for dt selection. More...
 
virtual void finishStep () override
 Calls multi-apps executioners' endStep and postStep methods which creates output and advances time (not the time step; see incrementTStep()) among other things. More...
 
virtual bool needsRestoration () override
 Whether or not this MultiApp should be restored at the beginning of each Picard iteration. More...
 
virtual void resetApp (unsigned int global_app, Real time) override
 "Reset" the App corresponding to the global App number passed in. More...
 
Real computeDT ()
 Finds the smallest dt from among any of the apps. More...
 
virtual void preExecute ()
 
virtual void finalize ()
 Method called towards the end of the simulation to execute on final. More...
 
virtual void postExecute ()
 Method called at the end of the simulation (after finalize) More...
 
void setupPositions ()
 Called just after construction to allow derived classes to set _positions;. More...
 
virtual void preTransfer (Real dt, Real target_time)
 Gets called just before transfers are done to the MultiApp (Which is just before the MultiApp is solved) More...
 
virtual void backup ()
 Save off the state of every Sub App. More...
 
virtual ExecutionergetExecutioner (unsigned int app)
 
virtual BoundingBox getBoundingBox (unsigned int app, bool displaced_mesh)
 Get the BoundingBox for the mesh associated with app The bounding box will be shifted to be in the correct position within the master domain. More...
 
FEProblemBaseproblemBase ()
 Get the FEProblemBase this MultiApp is part of. More...
 
FEProblemBaseappProblemBase (unsigned int app)
 Get the FEProblemBase for the global app is part of. More...
 
FEProblemappProblem (unsigned int app)
 Get the FEProblem for the global app is part of. More...
 
const UserObjectappUserObjectBase (unsigned int app, const std::string &name)
 Get a UserObject base for a specific global app. More...
 
Real appPostprocessorValue (unsigned int app, const std::string &name)
 Get a Postprocessor value for a specified global app. More...
 
unsigned int numGlobalApps ()
 
unsigned int numLocalApps ()
 
unsigned int firstLocalApp ()
 
bool hasApp ()
 Whether or not this MultiApp has an app on this processor. More...
 
bool hasLocalApp (unsigned int global_app)
 Whether or not the given global app number is on this processor. More...
 
MooseApplocalApp (unsigned int local_app)
 Get the local MooseApp object. More...
 
Point position (unsigned int app)
 The physical position of a global App number. More...
 
virtual void moveApp (unsigned int global_app, Point p)
 Move the global_app to Point p. More...
 
virtual void parentOutputPositionChanged ()
 For apps outputting in position we need to change their output positions if their parent app moves. More...
 
MPI_Comm & comm ()
 Get the MPI communicator this MultiApp is operating on. More...
 
bool isRootProcessor ()
 Whether or not this processor is the "root" processor for the sub communicator. More...
 
const std::string & type () const
 Get the type of this object. More...
 
const std::string & name () const
 Get the name of the object. More...
 
const InputParametersparameters () const
 Get the parameters of the object. More...
 
template<typename T >
const T & getParam (const std::string &name) const
 Retrieve a parameter for the object. More...
 
template<typename T >
getCheckedPointerParam (const std::string &name, const std::string &error_string="") const
 Verifies that the requested parameter exists and is not NULL and returns it to the caller. More...
 
bool isParamValid (const std::string &name) const
 Test if the supplied parameter is valid. More...
 
MooseAppgetMooseApp () const
 Get the MooseApp this object is associated with. More...
 
virtual bool enabled () const
 Return the enabled status of the object. More...
 
template<typename... Args>
void paramError (const std::string &param, Args... args)
 Emits an error prefixed with the file and line number of the given param (from the input file) along with the full parameter path+name followed by the given args as the message. More...
 
template<typename... Args>
void paramWarning (const std::string &param, Args... args)
 Emits a warning prefixed with the file and line number of the given param (from the input file) along with the full parameter path+name followed by the given args as the message. More...
 
template<typename... Args>
void paramInfo (const std::string &param, Args... args)
 Emits an informational message prefixed with the file and line number of the given param (from the input file) along with the full parameter path+name followed by the given args as the message. More...
 
template<typename... Args>
void mooseError (Args &&... args) const
 
template<typename... Args>
void mooseWarning (Args &&... args) const
 
template<typename... Args>
void mooseDeprecated (Args &&... args) const
 
template<typename... Args>
void mooseInfo (Args &&... args) const
 
virtual void timestepSetup ()
 Gets called at the beginning of the timestep before this object is asked to do its job. More...
 
virtual void jacobianSetup ()
 Gets called just before the Jacobian is computed and before this object is asked to do its job. More...
 
virtual void residualSetup ()
 Gets called just before the residual is computed and before this object is asked to do its job. More...
 
virtual void subdomainSetup ()
 Gets called when the subdomain changes (i.e. More...
 
const ExecFlagEnumgetExecuteOnEnum () const
 Return the execute on MultiMooseEnum for this object. More...
 
virtual const std::vector< ExecFlagType > & execFlags () const
 (DEPRECATED) Get the execution flag for the object TODO: ExecFlagType More...
 
ExecFlagType execBitFlags () const
 (DEPRECATED) Build and return the execution flags as a bitfield TODO: ExecFlagType More...
 
const std::vector< SubdomainName > & blocks () const
 Return the block names for this object. More...
 
unsigned int numBlocks () const
 Return the number of blocks for this object. More...
 
virtual const std::set< SubdomainID > & blockIDs () const
 Return the block subdomain ids for this object. More...
 
bool hasBlocks (const SubdomainName &name) const
 Test if the supplied block name is valid for this object. More...
 
bool hasBlocks (const std::vector< SubdomainName > &names) const
 Test if the supplied vector of block names are valid for this object. More...
 
bool hasBlocks (const SubdomainID &id) const
 Test if the supplied block ids are valid for this object. More...
 
bool hasBlocks (const std::vector< SubdomainID > &ids) const
 Test if the supplied vector block ids are valid for this object. More...
 
bool hasBlocks (const std::set< SubdomainID > &ids) const
 Test if the supplied set of block ids are valid for this object. More...
 
bool isBlockSubset (const std::set< SubdomainID > &ids) const
 Test if the class block ids are a subset of the supplied objects. More...
 
bool isBlockSubset (const std::vector< SubdomainID > &ids) const
 Test if the class block ids are a subset of the supplied objects. More...
 
template<typename T >
bool hasBlockMaterialProperty (const std::string &prop_name)
 Check if a material property is valid for all blocks of this object. More...
 
const std::set< SubdomainID > & meshBlockIDs () const
 Return all of the SubdomainIDs for the mesh. More...
 
virtual bool blockRestricted () const
 Returns true if this object has been restricted to a boundary. More...
 
void checkVariable (const MooseVariableFEBase &variable) const
 Helper for checking that the ids for this object are in agreement with the variables on the supplied variable. More...
 

Static Public Member Functions

static ExecFlagEnum getExecuteOptions ()
 (DEPRECATED) Returns the available options for the 'execute_on' input parameters TODO: ExecFlagType More...
 

Public Attributes

const ConsoleStream _console
 An instance of helper class to write streams to the Console objects. More...
 

Protected Member Functions

virtual void fillPositions () override
 fill in _positions with the positions of the sub-aps More...
 
void createApp (unsigned int i, Real start_time)
 Helper function for creating an App instance. More...
 
void buildComm ()
 Create an MPI communicator suitable for each app. More...
 
unsigned int globalAppToLocal (unsigned int global_app)
 Map a global App number to the local number. More...
 
virtual void preRunInputFile ()
 call back executed right before app->runInputFile() More...
 
void init (unsigned int num)
 Initialize the MultiApp by creating the provided number of apps. More...
 
template<typename T >
T & declareRestartableData (std::string data_name)
 Declare a piece of data as "restartable". More...
 
template<typename T >
T & declareRestartableData (std::string data_name, const T &init_value)
 Declare a piece of data as "restartable" and initialize it. More...
 
template<typename T >
T & declareRestartableDataWithContext (std::string data_name, void *context)
 Declare a piece of data as "restartable". More...
 
template<typename T >
T & declareRestartableDataWithContext (std::string data_name, const T &init_value, void *context)
 Declare a piece of data as "restartable" and initialize it. More...
 
template<typename T >
T & declareRecoverableData (std::string data_name)
 Declare a piece of data as "recoverable". More...
 
template<typename T >
T & declareRecoverableData (std::string data_name, const T &init_value)
 Declare a piece of data as "restartable" and initialize it. More...
 
template<typename T >
T & declareRestartableDataWithObjectName (std::string data_name, std::string object_name)
 Declare a piece of data as "restartable". More...
 
template<typename T >
T & declareRestartableDataWithObjectNameWithContext (std::string data_name, std::string object_name, void *context)
 Declare a piece of data as "restartable". More...
 
virtual bool hasBlockMaterialPropertyHelper (const std::string &prop_name)
 A helper method to allow the Material object to specialize the behavior of hasBlockMaterialProperty. More...
 
void initializeBlockRestrictable (const MooseObject *moose_object)
 An initialization routine needed for dual constructors. More...
 
Moose::CoordinateSystemType getBlockCoordSystem ()
 Check if the blocks this object operates on all have the same coordinate system, and if so return it. More...
 

Protected Attributes

FEProblemBase_fe_problem
 The FEProblemBase this MultiApp is part of. More...
 
std::string _app_type
 The type of application to build. More...
 
std::vector< Point > _positions
 The positions of all of the apps. More...
 
const bool _use_positions
 Toggle use of "positions". More...
 
std::vector< FileName > _input_files
 The input file for each app's simulation. More...
 
std::string _output_base
 The output file basename for each multiapp. More...
 
unsigned int _total_num_apps
 The total number of apps to simulate. More...
 
unsigned int _my_num_apps
 The number of apps this object is involved in simulating. More...
 
unsigned int _first_local_app
 The number of the first app on this processor. More...
 
const MPI_Comm & _orig_comm
 The original comm handle. More...
 
libMesh::Parallel::Communicator _my_communicator
 The communicator object that holds the MPI_Comm that we're going to use. More...
 
MPI_Comm & _my_comm
 The MPI communicator this object is going to use. More...
 
int _orig_num_procs
 The number of processors in the original comm. More...
 
int _orig_rank
 The mpi "rank" of this processor in the original communicator. More...
 
std::string _node_name
 Node Name. More...
 
int _my_rank
 The mpi "rank" of this processor in the sub communicator. More...
 
std::vector< std::shared_ptr< MooseApp > > _apps
 Pointers to each of the Apps. More...
 
std::vector< bool > _has_bounding_box
 Flag if this multi-app computed its bounding box (valid only for non-displaced meshes) More...
 
std::vector< BoundingBox > _bounding_box
 This multi-app's bounding box. More...
 
Real _inflation
 Relative bounding box inflation. More...
 
Point _bounding_box_padding
 Additional padding added to the bounding box, useful for 1D meshes. More...
 
unsigned int _max_procs_per_app
 Maximum number of processors to give to each app. More...
 
bool _output_in_position
 Whether or not to move the output of the MultiApp into position. More...
 
const Real _global_time_offset
 The offset time so the MultiApp local time relative to the global time. More...
 
Real _reset_time
 The time at which to reset apps. More...
 
std::vector< unsigned int > _reset_apps
 The apps to be reset. More...
 
bool _reset_happened
 Whether or not apps have been reset. More...
 
Real _move_time
 The time at which to move apps. More...
 
std::vector< unsigned int > _move_apps
 The apps to be moved. More...
 
std::vector< Point > _move_positions
 The new positions for the apps to be moved. More...
 
bool _move_happened
 Whether or not the move has happened. More...
 
bool _has_an_app
 Whether or not this processor as an App at all More...
 
SubAppBackups_backups
 Backups for each local App. More...
 
const std::vector< std::string > & _cli_args
 Storage for command line arguments. More...
 
const InputParameters_pars
 Parameters of this object, references the InputParameters stored in the InputParametersWarehouse. More...
 
MooseApp_app
 The MooseApp this object is associated with. More...
 
const std::string & _type
 The type of this object (the Class name) More...
 
const std::string & _name
 The name of this object, reference to value stored in InputParameters. More...
 
const bool & _enabled
 Reference to the "enable" InputParaemters, used by Controls for toggling on/off MooseObjects. More...
 
const ExecFlagEnum_execute_enum
 Execute settings for this oejct. More...
 
const std::vector< ExecFlagType_exec_flags
 (DEPRECATED) execution flag (when is the object executed/evaluated) TODO: ExecFlagType More...
 
const ExecFlagType_current_execute_flag
 Reference to FEProblemBase. More...
 
std::shared_ptr< MaterialData_blk_material_data
 Pointer to the MaterialData class for this object. More...
 

Detailed Description

Automatically generates Sub-App positions from centroids of elements in the master mesh.

Definition at line 28 of file CentroidMultiApp.h.

Constructor & Destructor Documentation

◆ CentroidMultiApp()

CentroidMultiApp::CentroidMultiApp ( const InputParameters parameters)

Definition at line 39 of file CentroidMultiApp.C.

41 {
42 }
const InputParameters & parameters() const
Get the parameters of the object.
Definition: MooseObject.h:62
TransientMultiApp(const InputParameters &parameters)
BlockRestrictable(const MooseObject *moose_object)
Class constructor Populates the &#39;block&#39; input parameters, see the general class documentation for det...

Member Function Documentation

◆ appPostprocessorValue()

Real MultiApp::appPostprocessorValue ( unsigned int  app,
const std::string &  name 
)
inherited

Get a Postprocessor value for a specified global app.

Parameters
appThe global app number you want to get a Postprocessor from.
nameThe name of the Postprocessor.

Definition at line 516 of file MultiApp.C.

517 {
518  if (!_has_an_app)
519  mooseError("No app for ", MultiApp::name(), " on processor ", _orig_rank);
520 
522 }
int _orig_rank
The mpi "rank" of this processor in the original communicator.
Definition: MultiApp.h:358
void mooseError(Args &&... args) const
Definition: MooseObject.h:144
FEProblemBase & appProblemBase(unsigned int app)
Get the FEProblemBase for the global app is part of.
Definition: MultiApp.C:483
bool _has_an_app
Whether or not this processor as an App at all
Definition: MultiApp.h:412
const std::string & name() const
Get the name of the object.
Definition: MooseObject.h:56
PostprocessorValue & getPostprocessorValue(const PostprocessorName &name)
Get a reference to the value associated with the postprocessor.

◆ appProblem()

FEProblem & MultiApp::appProblem ( unsigned int  app)
inherited

Get the FEProblem for the global app is part of.

Parameters
appThe global app number

Definition at line 494 of file MultiApp.C.

495 {
497  "MultiApp::appProblem() is deprecated, call MultiApp::appProblemBase() instead.\n");
498  if (!_has_an_app)
499  mooseError("No app for ", name(), " on processor ", _orig_rank);
500 
501  unsigned int local_app = globalAppToLocal(app);
502 
503  return dynamic_cast<FEProblem &>(_apps[local_app]->getExecutioner()->feProblem());
504 }
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
Definition: FEProblem.h:25
int _orig_rank
The mpi "rank" of this processor in the original communicator.
Definition: MultiApp.h:358
std::vector< std::shared_ptr< MooseApp > > _apps
Pointers to each of the Apps.
Definition: MultiApp.h:367
void mooseError(Args &&... args) const
Definition: MooseObject.h:144
bool _has_an_app
Whether or not this processor as an App at all
Definition: MultiApp.h:412
void mooseDeprecated(Args &&... args) const
Definition: MooseObject.h:158
const std::string & name() const
Get the name of the object.
Definition: MooseObject.h:56
unsigned int globalAppToLocal(unsigned int global_app)
Map a global App number to the local number.
Definition: MultiApp.C:789

◆ appProblemBase()

FEProblemBase & MultiApp::appProblemBase ( unsigned int  app)
inherited

Get the FEProblemBase for the global app is part of.

Parameters
appThe global app number

Definition at line 483 of file MultiApp.C.

Referenced by MultiApp::appPostprocessorValue(), TransientMultiApp::appTransferVector(), MultiApp::appTransferVector(), MultiApp::appUserObjectBase(), TransientMultiApp::resetApp(), TransientMultiApp::setupApp(), and TransientMultiApp::solveStep().

484 {
485  if (!_has_an_app)
486  mooseError("No app for ", name(), " on processor ", _orig_rank);
487 
488  unsigned int local_app = globalAppToLocal(app);
489 
490  return _apps[local_app]->getExecutioner()->feProblem();
491 }
int _orig_rank
The mpi "rank" of this processor in the original communicator.
Definition: MultiApp.h:358
std::vector< std::shared_ptr< MooseApp > > _apps
Pointers to each of the Apps.
Definition: MultiApp.h:367
void mooseError(Args &&... args) const
Definition: MooseObject.h:144
bool _has_an_app
Whether or not this processor as an App at all
Definition: MultiApp.h:412
const std::string & name() const
Get the name of the object.
Definition: MooseObject.h:56
unsigned int globalAppToLocal(unsigned int global_app)
Map a global App number to the local number.
Definition: MultiApp.C:789

◆ appTransferVector()

NumericVector< Number > & TransientMultiApp::appTransferVector ( unsigned int  app,
std::string  var_name 
)
overridevirtualinherited

Get the vector to transfer to for this MultiApp.

In general this is the Auxiliary system solution vector.

Parameters
appThe global app number you want the transfer vector for.
var_nameThe name of the variable you are going to be transferring to.
Returns
The vector to fill.

Reimplemented from MultiApp.

Definition at line 148 of file TransientMultiApp.C.

149 {
150  if (std::find(_transferred_vars.begin(), _transferred_vars.end(), var_name) ==
151  _transferred_vars.end())
152  _transferred_vars.push_back(var_name);
153 
155  return appProblemBase(app).getAuxiliarySystem().system().get_vector("transfer");
156 
158 }
FEProblemBase & appProblemBase(unsigned int app)
Get the FEProblemBase for the global app is part of.
Definition: MultiApp.C:483
std::vector< std::string > _transferred_vars
The variables that have been transferred to. Used when doing transfer interpolation. This will be cleared after each solve.
AuxiliarySystem & getAuxiliarySystem()
virtual NumericVector< Number > & solution() override
virtual System & system() override
Get the reference to the libMesh system.

◆ appUserObjectBase()

const UserObject & MultiApp::appUserObjectBase ( unsigned int  app,
const std::string &  name 
)
inherited

Get a UserObject base for a specific global app.

Parameters
appThe global app number you want to get a UserObject from.
nameThe name of the UserObject.

Definition at line 507 of file MultiApp.C.

Referenced by MultiAppDTKUserObjectEvaluator::evaluate().

508 {
509  if (!_has_an_app)
510  mooseError("No app for ", MultiApp::name(), " on processor ", _orig_rank);
511 
513 }
const UserObject & getUserObjectBase(const std::string &name) const
Get the user object by its name.
int _orig_rank
The mpi "rank" of this processor in the original communicator.
Definition: MultiApp.h:358
void mooseError(Args &&... args) const
Definition: MooseObject.h:144
FEProblemBase & appProblemBase(unsigned int app)
Get the FEProblemBase for the global app is part of.
Definition: MultiApp.C:483
bool _has_an_app
Whether or not this processor as an App at all
Definition: MultiApp.h:412
const std::string & name() const
Get the name of the object.
Definition: MooseObject.h:56

◆ backup()

void MultiApp::backup ( )
virtualinherited

Save off the state of every Sub App.

This allows us to "Restore" this state later

Definition at line 400 of file MultiApp.C.

Referenced by dataStore().

401 {
402  for (unsigned int i = 0; i < _my_num_apps; i++)
403  _backups[i] = _apps[i]->backup();
404 }
virtual void backup()
Save off the state of every Sub App.
Definition: MultiApp.C:400
std::vector< std::shared_ptr< MooseApp > > _apps
Pointers to each of the Apps.
Definition: MultiApp.h:367
unsigned int _my_num_apps
The number of apps this object is involved in simulating.
Definition: MultiApp.h:340
SubAppBackups & _backups
Backups for each local App.
Definition: MultiApp.h:415

◆ blockIDs()

const std::set< SubdomainID > & BlockRestrictable::blockIDs ( ) const
virtualinherited

Return the block subdomain ids for this object.

Returns
a set of SudomainIDs that are valid for this object

Definition at line 167 of file BlockRestrictable.C.

Referenced by BlockRestrictable::getBlockCoordSystem(), Material::getZeroMaterialProperty(), BlockRestrictable::hasBlockMaterialPropertyHelper(), and Material::registerPropName().

168 {
169  return _blk_ids;
170 }
std::set< SubdomainID > _blk_ids
Set of block ids supplied by the user via the input file (for error reporting)

◆ blockRestricted()

bool BlockRestrictable::blockRestricted ( ) const
virtualinherited

Returns true if this object has been restricted to a boundary.

See also
MooseObject

Definition at line 155 of file BlockRestrictable.C.

Referenced by MooseObjectWarehouseBase< Indicator >::addObject(), BlockRestrictable::checkVariable(), BlockRestrictable::getBlockCoordSystem(), and BlockRestrictable::hasBlockMaterialPropertyHelper().

156 {
157  return _blk_ids.find(Moose::ANY_BLOCK_ID) == _blk_ids.end();
158 }
const SubdomainID ANY_BLOCK_ID
Definition: MooseTypes.C:15
std::set< SubdomainID > _blk_ids
Set of block ids supplied by the user via the input file (for error reporting)

◆ blocks()

const std::vector< SubdomainName > & BlockRestrictable::blocks ( ) const
inherited

Return the block names for this object.

Note, if the 'blocks' input parameter was not utilized this will return an empty vector.

Returns
vector of SubdomainNames that are valid for this object

Definition at line 161 of file BlockRestrictable.C.

Referenced by MaterialOutputAction::getParams().

162 {
163  return _blocks;
164 }
std::vector< SubdomainName > _blocks
Vector the block names supplied by the user via the input file.

◆ buildComm()

void MultiApp::buildComm ( )
protectedinherited

Create an MPI communicator suitable for each app.

Also find out which communicator we are using and what our first local app is.

Definition at line 693 of file MultiApp.C.

Referenced by MultiApp::init().

694 {
695  int ierr;
696 
697  ierr = MPI_Comm_size(_communicator.get(), &_orig_num_procs);
698  mooseCheckMPIErr(ierr);
699  ierr = MPI_Comm_rank(_communicator.get(), &_orig_rank);
700  mooseCheckMPIErr(ierr);
701 
702  struct utsname sysInfo;
703  uname(&sysInfo);
704 
705  _node_name = sysInfo.nodename;
706 
707  // If we have more apps than processors then we're just going to divide up the work
708  if (_total_num_apps >= (unsigned)_orig_num_procs)
709  {
710  _my_comm = MPI_COMM_SELF;
711  _my_rank = 0;
712 
714  unsigned int jobs_left = _total_num_apps - (_my_num_apps * _orig_num_procs);
715 
716  if (jobs_left != 0)
717  {
718  // Spread the remaining jobs out over the first set of processors
719  if ((unsigned)_orig_rank < jobs_left) // (these are the "jobs_left_pids" ie the pids that are
720  // snatching up extra jobs)
721  {
722  _my_num_apps += 1;
724  }
725  else
726  {
727  unsigned int num_apps_in_jobs_left_pids = (_my_num_apps + 1) * jobs_left;
728  unsigned int distance_to_jobs_left_pids = _orig_rank - jobs_left;
729 
730  _first_local_app = num_apps_in_jobs_left_pids + (_my_num_apps * distance_to_jobs_left_pids);
731  }
732  }
733  else
735 
736  return;
737  }
738 
739  // In this case we need to divide up the processors that are going to work on each app
740  int rank;
741  ierr = MPI_Comm_rank(_communicator.get(), &rank);
742  mooseCheckMPIErr(ierr);
743 
744  unsigned int procs_per_app = _orig_num_procs / _total_num_apps;
745 
746  if (_max_procs_per_app < procs_per_app)
747  procs_per_app = _max_procs_per_app;
748 
749  int my_app = rank / procs_per_app;
750  unsigned int procs_for_my_app = procs_per_app;
751 
752  if ((unsigned int)my_app > _total_num_apps - 1 && procs_for_my_app == _max_procs_per_app)
753  {
754  // If we've already hit the max number of procs per app then this processor
755  // won't have an app at all
756  _my_num_apps = 0;
757  _has_an_app = false;
758  }
759  else if ((unsigned int)my_app >=
760  _total_num_apps - 1) // The last app will gain any left-over procs
761  {
762  my_app = _total_num_apps - 1;
763  // procs_for_my_app += _orig_num_procs % _total_num_apps;
764  _first_local_app = my_app;
765  _my_num_apps = 1;
766  }
767  else
768  {
769  _first_local_app = my_app;
770  _my_num_apps = 1;
771  }
772 
773  if (_has_an_app)
774  {
775  _communicator.split(_first_local_app, rank, _my_communicator);
776 
777  ierr = MPI_Comm_rank(_my_comm, &_my_rank);
778  mooseCheckMPIErr(ierr);
779  }
780  else
781  {
782  _communicator.split(MPI_UNDEFINED, rank, _my_communicator);
783 
784  _my_rank = 0;
785  }
786 }
unsigned int _max_procs_per_app
Maximum number of processors to give to each app.
Definition: MultiApp.h:382
int _orig_rank
The mpi "rank" of this processor in the original communicator.
Definition: MultiApp.h:358
int _orig_num_procs
The number of processors in the original comm.
Definition: MultiApp.h:355
unsigned int _total_num_apps
The total number of apps to simulate.
Definition: MultiApp.h:337
unsigned int _my_num_apps
The number of apps this object is involved in simulating.
Definition: MultiApp.h:340
std::string _node_name
Node Name.
Definition: MultiApp.h:361
bool _has_an_app
Whether or not this processor as an App at all
Definition: MultiApp.h:412
libMesh::Parallel::Communicator _my_communicator
The communicator object that holds the MPI_Comm that we&#39;re going to use.
Definition: MultiApp.h:349
unsigned int _first_local_app
The number of the first app on this processor.
Definition: MultiApp.h:343
int _my_rank
The mpi "rank" of this processor in the sub communicator.
Definition: MultiApp.h:364
ierr
MPI_Comm & _my_comm
The MPI communicator this object is going to use.
Definition: MultiApp.h:352

◆ checkVariable()

void BlockRestrictable::checkVariable ( const MooseVariableFEBase variable) const
inherited

Helper for checking that the ids for this object are in agreement with the variables on the supplied variable.

Parameters
variableThe variable to check against.

Definition at line 307 of file BlockRestrictable.C.

308 {
309  if (!isBlockSubset(variable.activeSubdomains()))
310  {
311  std::string var_ids = Moose::stringify(variable.activeSubdomains(), ", ");
312  std::string obj_ids = Moose::stringify(blockRestricted() ? _blk_ids : meshBlockIDs(), ", ");
313  mooseError("The 'block' parameter of the object '",
314  _blk_name,
315  "' must be a subset of the 'block' parameter of the variable '",
316  variable.name(),
317  "':\n Object '",
318  _blk_name,
319  "': ",
320  obj_ids,
321  "\n Variable '",
322  variable.name(),
323  "': ",
324  var_ids);
325  }
326 }
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:208
virtual bool blockRestricted() const
Returns true if this object has been restricted to a boundary.
virtual const std::set< SubdomainID > & activeSubdomains() const =0
The subdomains the variable is active on.
bool isBlockSubset(const std::set< SubdomainID > &ids) const
Test if the class block ids are a subset of the supplied objects.
std::string stringify(const T &t)
conversion to string
Definition: Conversion.h:61
const std::string & name() const
Get the variable name.
const std::set< SubdomainID > & meshBlockIDs() const
Return all of the SubdomainIDs for the mesh.
std::set< SubdomainID > _blk_ids
Set of block ids supplied by the user via the input file (for error reporting)
const std::string & _blk_name
Name of the object.

◆ comm()

MPI_Comm& MultiApp::comm ( )
inlineinherited

Get the MPI communicator this MultiApp is operating on.

Returns
The MPI comm for this MultiApp

Definition at line 270 of file MultiApp.h.

Referenced by MultiAppDTKUserObjectEvaluator::evaluate().

270 { return _my_comm; }
MPI_Comm & _my_comm
The MPI communicator this object is going to use.
Definition: MultiApp.h:352

◆ computeDT()

Real TransientMultiApp::computeDT ( )
inherited

Finds the smallest dt from among any of the apps.

Definition at line 573 of file TransientMultiApp.C.

574 {
575  if (_sub_cycling) // Bow out of the timestep selection dance
576  return std::numeric_limits<Real>::max();
577 
578  Real smallest_dt = std::numeric_limits<Real>::max();
579 
580  if (_has_an_app)
581  {
583 
584  for (unsigned int i = 0; i < _my_num_apps; i++)
585  {
587  ex->computeDT();
588  Real dt = ex->getDT();
589 
590  smallest_dt = std::min(dt, smallest_dt);
591  }
592  }
593 
594  if (_tolerate_failure) // Bow out of the timestep selection dance, we do this down here because we
595  // need to call computeConstrainedDT at least once for these
596  // executioners...
597  return std::numeric_limits<Real>::max();
598 
599  _communicator.min(smallest_dt);
600  return smallest_dt;
601 }
virtual Real getDT()
Definition: Transient.C:541
Transient executioners usually loop through a number of timesteps...
Definition: Transient.h:31
virtual void computeDT()
Definition: Transient.C:336
std::vector< Transient * > _transient_executioners
unsigned int _my_num_apps
The number of apps this object is involved in simulating.
Definition: MultiApp.h:340
bool _has_an_app
Whether or not this processor as an App at all
Definition: MultiApp.h:412
MPI_Comm & _my_comm
The MPI communicator this object is going to use.
Definition: MultiApp.h:352

◆ createApp()

void MultiApp::createApp ( unsigned int  i,
Real  start_time 
)
protectedinherited

Helper function for creating an App instance.

Parameters
iThe local app number to create.
start_timeThe initial time for the App

Definition at line 592 of file MultiApp.C.

Referenced by MultiApp::initialSetup(), and MultiApp::resetApp().

593 {
594  // Define the app name
595  std::ostringstream multiapp_name;
596  std::string full_name;
597  multiapp_name << name() << std::setw(std::ceil(std::log10(_total_num_apps)))
598  << std::setprecision(0) << std::setfill('0') << std::right << _first_local_app + i;
599 
600  // Only add parent name if it the parent is not the main app
601  if (_app.multiAppLevel() > 0)
602  full_name = _app.name() + "_" + multiapp_name.str();
603  else
604  full_name = multiapp_name.str();
605 
607  app_params.set<FEProblemBase *>("_parent_fep") = &_fe_problem;
608  app_params.set<std::shared_ptr<CommandLine>>("_command_line") = _app.commandLine();
609 
610  // Single set of "cli_args" to be applied to all sub apps
611  if (_cli_args.size() == 1)
612  {
613  for (const std::string & str : MooseUtils::split(_cli_args[0], ";"))
614  {
615  std::ostringstream oss;
616  oss << full_name << ":" << str;
617  app_params.get<std::shared_ptr<CommandLine>>("_command_line")->addArgument(oss.str());
618  }
619  }
620 
621  // Unique set of "cli_args" to be applied to each sub apps
622  else if (_cli_args.size() > 1)
623  {
624  for (const std::string & str : MooseUtils::split(_cli_args[i + _first_local_app], ";"))
625  {
626  std::ostringstream oss;
627  oss << full_name << ":" << str;
628  app_params.get<std::shared_ptr<CommandLine>>("_command_line")->addArgument(oss.str());
629  }
630  }
631 
632  app_params.set<unsigned int>("_multiapp_level") = _app.multiAppLevel() + 1;
633  app_params.set<unsigned int>("_multiapp_number") = _first_local_app + i;
634  _apps[i] = AppFactory::instance().createShared(_app_type, full_name, app_params, _my_comm);
635  auto & app = _apps[i];
636 
637  std::string input_file = "";
638  if (_input_files.size() == 1) // If only one input file was provided, use it for all the solves
639  input_file = _input_files[0];
640  else
641  input_file = _input_files[_first_local_app + i];
642 
643  std::ostringstream output_base;
644 
645  // Create an output base by taking the output base of the master problem and appending
646  // the name of the multiapp + a number to it
647  if (!_app.getOutputFileBase().empty())
648  output_base << _app.getOutputFileBase() + "_";
649  else
650  {
651  std::string base = _app.getFileName();
652  size_t pos = base.find_last_of('.');
653  output_base << base.substr(0, pos) + "_out_";
654  }
655 
656  // Append the sub app name to the output file base
657  output_base << multiapp_name.str();
658  app->setGlobalTimeOffset(start_time);
659  app->setInputFileName(input_file);
660  app->setOutputFileBase(output_base.str());
661  app->setOutputFileNumbers(_app.getOutputWarehouse().getFileNumbers());
662  app->setRestart(_app.isRestarting());
663  app->setRecover(_app.isRecovering());
664 
665  // This means we have a backup of this app that we need to give to it
666  // Note: This won't do the restoration immediately. The Backup
667  // will be cached by the MooseApp object so that it can be used
668  // during FEProblemBase::initialSetup() during runInputFile()
669  if (_app.isRestarting() || _app.isRecovering())
670  app->setBackupObject(_backups[i]);
671 
672  if (_use_positions && getParam<bool>("output_in_position"))
673  app->setOutputPosition(_app.getOutputPosition() + _positions[_first_local_app + i]);
674 
675  // Update the MultiApp level for the app that was just created
676  app->setupOptions();
677  preRunInputFile();
678  app->runInputFile();
679 
680  auto & picard_solve = _apps[i]->getExecutioner()->picardSolve();
681  picard_solve.setMultiAppRelaxationFactor(getParam<Real>("relaxation_factor"));
682  picard_solve.setMultiAppRelaxationVariables(
683  getParam<std::vector<std::string>>("relaxed_variables"));
684  if (getParam<Real>("relaxation_factor") != 1.0)
685  {
686  // Store a copy of the previous solution here
687  FEProblemBase & fe_problem_base = _apps[i]->getExecutioner()->feProblem();
688  fe_problem_base.getNonlinearSystemBase().addVector("self_relax_previous", false, PARALLEL);
689  }
690 }
std::string getFileName(bool stripLeadingPath=true) const
Return the filename that was parsed.
Definition: MooseApp.C:1043
const std::string & name() const
Get the name of the object.
Definition: MooseApp.h:73
NonlinearSystemBase & getNonlinearSystemBase()
const bool _use_positions
Toggle use of "positions".
Definition: MultiApp.h:328
virtual NumericVector< Number > & addVector(const std::string &vector_name, const bool project, const ParallelType type)
Adds a solution length vector to the system.
Definition: SystemBase.C:526
std::shared_ptr< CommandLine > commandLine() const
Get the command line.
Definition: MooseApp.h:294
MooseAppPtr createShared(const std::string &app_type, const std::string &name, InputParameters parameters, MPI_Comm COMM_WORLD_IN)
Build an application object (must be registered)
Definition: AppFactory.C:51
std::vector< std::shared_ptr< MooseApp > > _apps
Pointers to each of the Apps.
Definition: MultiApp.h:367
T & set(const std::string &name, bool quiet_mode=false)
Returns a writable reference to the named parameters.
unsigned int multiAppLevel() const
The MultiApp Level.
Definition: MooseApp.h:511
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
std::string getOutputFileBase() const
Override the selection of the output file base name.
Definition: MooseApp.C:784
FEProblemBase & _fe_problem
The FEProblemBase this MultiApp is part of.
Definition: MultiApp.h:319
bool isRestarting() const
Whether or not this is a "restart" calculation.
Definition: MooseApp.C:859
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
const T & getParam(const std::string &name) const
Retrieve a parameter for the object.
Definition: MooseObject.h:188
std::vector< std::string > split(const std::string &str, const std::string &delimiter)
Python like split function for strings.
Definition: MooseUtils.C:782
std::map< std::string, unsigned int > getFileNumbers()
Extracts the file numbers from the output objects.
std::string _app_type
The type of application to build.
Definition: MultiApp.h:322
unsigned int _total_num_apps
The total number of apps to simulate.
Definition: MultiApp.h:337
Point getOutputPosition() const
Get the output position.
Definition: MooseApp.h:193
static AppFactory & instance()
Get the instance of the AppFactory.
Definition: AppFactory.C:17
SubAppBackups & _backups
Backups for each local App.
Definition: MultiApp.h:415
unsigned int _first_local_app
The number of the first app on this processor.
Definition: MultiApp.h:343
MooseApp & _app
The MooseApp this object is associated with.
Definition: MooseObject.h:174
const std::string & name() const
Get the name of the object.
Definition: MooseObject.h:56
std::vector< Point > _positions
The positions of all of the apps.
Definition: MultiApp.h:325
std::vector< FileName > _input_files
The input file for each app&#39;s simulation.
Definition: MultiApp.h:331
virtual void preRunInputFile()
call back executed right before app->runInputFile()
Definition: MultiApp.C:799
InputParameters getValidParams(const std::string &name)
Get valid parameters for the object.
Definition: AppFactory.C:25
bool isRecovering() const
Whether or not this is a "recover" calculation.
Definition: MooseApp.C:853
MPI_Comm & _my_comm
The MPI communicator this object is going to use.
Definition: MultiApp.h:352
const std::vector< std::string > & _cli_args
Storage for command line arguments.
Definition: MultiApp.h:418
OutputWarehouse & getOutputWarehouse()
Get the OutputWarehouse objects.
Definition: MooseApp.C:1049

◆ declareRecoverableData() [1/2]

template<typename T >
T & Restartable::declareRecoverableData ( std::string  data_name)
protectedinherited

Declare a piece of data as "recoverable".

This means that in the event of a recovery this piece of data will be restored back to its previous value.

Note - this data will NOT be restored on Restart!

NOTE: This returns a reference! Make sure you store it in a reference!

Parameters
data_nameThe name of the data (usually just use the same name as the member variable)

Definition at line 269 of file Restartable.h.

270 {
271  std::string full_name = _restartable_system_name + "/" + _restartable_name + "/" + data_name;
272 
273  registerRecoverableDataOnApp(full_name);
274 
275  return declareRestartableDataWithContext<T>(data_name, nullptr);
276 }
std::string _restartable_system_name
The system name this object is in.
Definition: Restartable.h:194
std::string _restartable_name
The name of the object.
Definition: Restartable.h:191
void registerRecoverableDataOnApp(std::string name)
Helper function for actually registering the restartable data.
Definition: Restartable.C:54

◆ declareRecoverableData() [2/2]

template<typename T >
T & Restartable::declareRecoverableData ( std::string  data_name,
const T &  init_value 
)
protectedinherited

Declare a piece of data as "restartable" and initialize it.

This means that in the event of a restart this piece of data will be restored back to its previous value.

Note - this data will NOT be restored on Restart!

NOTE: This returns a reference! Make sure you store it in a reference!

Parameters
data_nameThe name of the data (usually just use the same name as the member variable)
init_valueThe initial value of the data

Definition at line 280 of file Restartable.h.

281 {
282  std::string full_name = _restartable_system_name + "/" + _restartable_name + "/" + data_name;
283 
284  registerRecoverableDataOnApp(full_name);
285 
286  return declareRestartableDataWithContext<T>(data_name, init_value, nullptr);
287 }
std::string _restartable_system_name
The system name this object is in.
Definition: Restartable.h:194
std::string _restartable_name
The name of the object.
Definition: Restartable.h:191
void registerRecoverableDataOnApp(std::string name)
Helper function for actually registering the restartable data.
Definition: Restartable.C:54

◆ declareRestartableData() [1/2]

template<typename T >
T & Restartable::declareRestartableData ( std::string  data_name)
protectedinherited

Declare a piece of data as "restartable".

This means that in the event of a restart this piece of data will be restored back to its previous value.

NOTE: This returns a reference! Make sure you store it in a reference!

Parameters
data_nameThe name of the data (usually just use the same name as the member variable)

Definition at line 202 of file Restartable.h.

203 {
204  return declareRestartableDataWithContext<T>(data_name, nullptr);
205 }

◆ declareRestartableData() [2/2]

template<typename T >
T & Restartable::declareRestartableData ( std::string  data_name,
const T &  init_value 
)
protectedinherited

Declare a piece of data as "restartable" and initialize it.

This means that in the event of a restart this piece of data will be restored back to its previous value.

NOTE: This returns a reference! Make sure you store it in a reference!

Parameters
data_nameThe name of the data (usually just use the same name as the member variable)
init_valueThe initial value of the data

Definition at line 209 of file Restartable.h.

210 {
211  return declareRestartableDataWithContext<T>(data_name, init_value, nullptr);
212 }

◆ declareRestartableDataWithContext() [1/2]

template<typename T >
T & Restartable::declareRestartableDataWithContext ( std::string  data_name,
void *  context 
)
protectedinherited

Declare a piece of data as "restartable".

This means that in the event of a restart this piece of data will be restored back to its previous value.

NOTE: This returns a reference! Make sure you store it in a reference!

Parameters
data_nameThe name of the data (usually just use the same name as the member variable)
contextContext pointer that will be passed to the load and store functions

Definition at line 216 of file Restartable.h.

217 {
218  std::string full_name = _restartable_system_name + "/" + _restartable_name + "/" + data_name;
219  auto data_ptr = libmesh_make_unique<RestartableData<T>>(full_name, context);
220  T & restartable_data_ref = data_ptr->get();
221 
222  registerRestartableDataOnApp(full_name, std::move(data_ptr), _restartable_tid);
223 
224  return restartable_data_ref;
225 }
std::string _restartable_system_name
The system name this object is in.
Definition: Restartable.h:194
std::string _restartable_name
The name of the object.
Definition: Restartable.h:191
THREAD_ID _restartable_tid
The thread ID for this object.
Definition: Restartable.h:197
void registerRestartableDataOnApp(std::string name, std::unique_ptr< RestartableDataValue > data, THREAD_ID tid)
Helper function for actually registering the restartable data.
Definition: Restartable.C:46

◆ declareRestartableDataWithContext() [2/2]

template<typename T >
T & Restartable::declareRestartableDataWithContext ( std::string  data_name,
const T &  init_value,
void *  context 
)
protectedinherited

Declare a piece of data as "restartable" and initialize it.

This means that in the event of a restart this piece of data will be restored back to its previous value.

NOTE: This returns a reference! Make sure you store it in a reference!

Parameters
data_nameThe name of the data (usually just use the same name as the member variable)
init_valueThe initial value of the data
contextContext pointer that will be passed to the load and store functions

Definition at line 229 of file Restartable.h.

232 {
233  std::string full_name = _restartable_system_name + "/" + _restartable_name + "/" + data_name;
234  auto data_ptr = libmesh_make_unique<RestartableData<T>>(full_name, context);
235  data_ptr->set() = init_value;
236 
237  T & restartable_data_ref = data_ptr->get();
238  registerRestartableDataOnApp(full_name, std::move(data_ptr), _restartable_tid);
239 
240  return restartable_data_ref;
241 }
std::string _restartable_system_name
The system name this object is in.
Definition: Restartable.h:194
std::string _restartable_name
The name of the object.
Definition: Restartable.h:191
THREAD_ID _restartable_tid
The thread ID for this object.
Definition: Restartable.h:197
void registerRestartableDataOnApp(std::string name, std::unique_ptr< RestartableDataValue > data, THREAD_ID tid)
Helper function for actually registering the restartable data.
Definition: Restartable.C:46

◆ declareRestartableDataWithObjectName()

template<typename T >
T & Restartable::declareRestartableDataWithObjectName ( std::string  data_name,
std::string  object_name 
)
protectedinherited

Declare a piece of data as "restartable".

This means that in the event of a restart this piece of data will be restored back to its previous value.

NOTE: This returns a reference! Make sure you store it in a reference!

Parameters
data_nameThe name of the data (usually just use the same name as the member variable)
object_nameA supplied name for the object that is declaring this data.

Definition at line 245 of file Restartable.h.

246 {
247  return declareRestartableDataWithObjectNameWithContext<T>(data_name, object_name, nullptr);
248 }

◆ declareRestartableDataWithObjectNameWithContext()

template<typename T >
T & Restartable::declareRestartableDataWithObjectNameWithContext ( std::string  data_name,
std::string  object_name,
void *  context 
)
protectedinherited

Declare a piece of data as "restartable".

This means that in the event of a restart this piece of data will be restored back to its previous value.

NOTE: This returns a reference! Make sure you store it in a reference!

Parameters
data_nameThe name of the data (usually just use the same name as the member variable)
object_nameA supplied name for the object that is declaring this data.
contextContext pointer that will be passed to the load and store functions

Definition at line 252 of file Restartable.h.

255 {
256  std::string old_name = _restartable_name;
257 
258  _restartable_name = object_name;
259 
260  T & value = declareRestartableDataWithContext<T>(data_name, context);
261 
262  _restartable_name = old_name;
263 
264  return value;
265 }
std::string _restartable_name
The name of the object.
Definition: Restartable.h:191

◆ enabled()

virtual bool MooseObject::enabled ( ) const
inlinevirtualinherited

Return the enabled status of the object.

Reimplemented in EigenKernel.

Definition at line 96 of file MooseObject.h.

Referenced by EigenKernel::enabled().

96 { return _enabled; }
const bool & _enabled
Reference to the "enable" InputParaemters, used by Controls for toggling on/off MooseObjects.
Definition: MooseObject.h:183

◆ execBitFlags()

ExecFlagType SetupInterface::execBitFlags ( ) const
inherited

(DEPRECATED) Build and return the execution flags as a bitfield TODO: ExecFlagType

Definition at line 85 of file SetupInterface.C.

86 {
87  // TODO: ExecFlagType
88  mooseDeprecated("The execBitFlags method is being removed because MOOSE was updated to use a "
89  "ExecFlagEnum for execute flags. This method maintains the behavior of the "
90  "original method but the use of this method should be removed from your "
91  "application. The ExecFlagEnum should be inspected directly via the "
92  "getExecuteOnEnum() method.");
93 
94  unsigned int exec_bit_field = EXEC_NONE;
95  for (const auto & flag : _exec_flags)
96  exec_bit_field |= flag.id();
97  return ExecFlagType("deprecated", exec_bit_field);
98 }
MooseEnumItem ExecFlagType
Definition: Moose.h:85
const ExecFlagType EXEC_NONE
void mooseDeprecated(Args &&... args)
Emit a deprecated code/feature message with the given stringified, concatenated args.
Definition: MooseError.h:237
const int & id() const
Return the numeric, name, or raw name.
Definition: MooseEnumItem.h:37
const std::vector< ExecFlagType > _exec_flags
(DEPRECATED) execution flag (when is the object executed/evaluated) TODO: ExecFlagType ...

◆ execFlags()

const std::vector< ExecFlagType > & SetupInterface::execFlags ( ) const
virtualinherited

(DEPRECATED) Get the execution flag for the object TODO: ExecFlagType

Reimplemented in MultiAppTransfer.

Definition at line 73 of file SetupInterface.C.

74 {
75  // TODO: ExecFlagType
76  mooseDeprecated("The execFlags() method is being removed because MOOSE has been updated to use a "
77  "ExecFlagEnum for execute flags. The current flags should be retrieved from "
78  "the \"exeucte_on\" parameters of your object or by using the \"_execute_enum\" "
79  "reference to the parameter or the getExecuteOnEnum() method.");
80 
81  return _exec_flags;
82 }
void mooseDeprecated(Args &&... args)
Emit a deprecated code/feature message with the given stringified, concatenated args.
Definition: MooseError.h:237
const std::vector< ExecFlagType > _exec_flags
(DEPRECATED) execution flag (when is the object executed/evaluated) TODO: ExecFlagType ...

◆ fillPositions()

void CentroidMultiApp::fillPositions ( )
overrideprotectedvirtual

fill in _positions with the positions of the sub-aps

Reimplemented from MultiApp.

Definition at line 45 of file CentroidMultiApp.C.

46 {
47  MooseMesh & master_mesh = _fe_problem.mesh();
48 
49  for (const auto & elem_ptr : master_mesh.getMesh().active_local_element_ptr_range())
50  if (hasBlocks(elem_ptr->subdomain_id()))
51  _positions.push_back(elem_ptr->centroid());
52 
53  // Use the comm from the problem this MultiApp is part of
55 
56  if (_positions.empty())
57  mooseError("No positions found for CentroidMultiapp ", _name);
58 
59  // An attempt to try to make this parallel stable
60  std::sort(_positions.begin(), _positions.end());
61 }
void mooseError(Args &&... args) const
Definition: MooseObject.h:144
FEProblemBase & _fe_problem
The FEProblemBase this MultiApp is part of.
Definition: MultiApp.h:319
MeshBase & getMesh()
Accessor for the underlying libMesh Mesh object.
Definition: MooseMesh.C:2562
MooseMesh wraps a libMesh::Mesh object and enhances its capabilities by caching additional data and s...
Definition: MooseMesh.h:73
const std::string & _name
The name of this object, reference to value stored in InputParameters.
Definition: MooseObject.h:180
MPI_Comm comm
virtual MooseMesh & mesh() override
std::vector< Point > _positions
The positions of all of the apps.
Definition: MultiApp.h:325
bool hasBlocks(const SubdomainName &name) const
Test if the supplied block name is valid for this object.

◆ finalize()

void MultiApp::finalize ( )
virtualinherited

Method called towards the end of the simulation to execute on final.

Definition at line 375 of file MultiApp.C.

376 {
377  for (const auto & app_ptr : _apps)
378  {
379  auto * executioner = app_ptr->getExecutioner();
380  mooseAssert(executioner, "Executioner is nullptr");
381 
382  executioner->feProblem().execute(EXEC_FINAL);
383  executioner->feProblem().outputStep(EXEC_FINAL);
384  }
385 }
std::vector< std::shared_ptr< MooseApp > > _apps
Pointers to each of the Apps.
Definition: MultiApp.h:367
const ExecFlagType EXEC_FINAL

◆ finishStep()

void TransientMultiApp::finishStep ( )
overridevirtualinherited

Calls multi-apps executioners' endStep and postStep methods which creates output and advances time (not the time step; see incrementTStep()) among other things.

This method is only called for Picard calculations because for loosely coupled calculations the executioners' endStep and postStep methods are called from solveStep().

Reimplemented from MultiApp.

Definition at line 553 of file TransientMultiApp.C.

554 {
555  if (!_sub_cycling)
556  {
557  for (unsigned int i = 0; i < _my_num_apps; i++)
558  {
560  ex->endStep();
561  ex->postStep();
562  }
563  }
564 }
Transient executioners usually loop through a number of timesteps...
Definition: Transient.h:31
virtual void endStep(Real input_time=-1.0)
Definition: Transient.C:433
std::vector< Transient * > _transient_executioners
unsigned int _my_num_apps
The number of apps this object is involved in simulating.
Definition: MultiApp.h:340
virtual void postStep()
Definition: Transient.C:282

◆ firstLocalApp()

unsigned int MultiApp::firstLocalApp ( )
inlineinherited
Returns
The global number of the first app on the local processor.

Definition at line 211 of file MultiApp.h.

Referenced by MultiAppDTKUserObjectEvaluator::createSourceGeometry().

211 { return _first_local_app; }
unsigned int _first_local_app
The number of the first app on this processor.
Definition: MultiApp.h:343

◆ getBlockCoordSystem()

Moose::CoordinateSystemType BlockRestrictable::getBlockCoordSystem ( )
protectedinherited

Check if the blocks this object operates on all have the same coordinate system, and if so return it.

Definition at line 285 of file BlockRestrictable.C.

286 {
287  if (!_blk_mesh)
288  mooseError("No mesh available in BlockRestrictable::checkCoordSystem()");
289  if (!_blk_feproblem)
290  mooseError("No problem available in BlockRestrictable::checkCoordSystem()");
291 
292  const auto & subdomains = blockRestricted() ? blockIDs() : meshBlockIDs();
293 
294  if (subdomains.empty())
295  mooseError("No subdomains found in the problem.");
296 
297  // make sure all subdomains are using the same coordinate system
298  auto coord_system = _blk_feproblem->getCoordSystem(*subdomains.begin());
299  for (auto subdomain : subdomains)
300  if (_blk_feproblem->getCoordSystem(subdomain) != coord_system)
301  mooseError("This object requires all subdomains to have the same coordinate system.");
302 
303  return coord_system;
304 }
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:208
FEProblemBase * _blk_feproblem
Pointer to FEProblemBase.
virtual const std::set< SubdomainID > & blockIDs() const
Return the block subdomain ids for this object.
virtual bool blockRestricted() const
Returns true if this object has been restricted to a boundary.
virtual Moose::CoordinateSystemType getCoordSystem(SubdomainID sid) override
const std::set< SubdomainID > & meshBlockIDs() const
Return all of the SubdomainIDs for the mesh.
MooseMesh * _blk_mesh
Pointer to Mesh.

◆ getBoundingBox()

BoundingBox MultiApp::getBoundingBox ( unsigned int  app,
bool  displaced_mesh 
)
virtualinherited

Get the BoundingBox for the mesh associated with app The bounding box will be shifted to be in the correct position within the master domain.

If the MultiApp is in an RZ coordinate system the box will be the size it would be if the geometry were 3D (ie if you were to revolve the geometry around the axis to create the 3D geometry).

Parameters
appThe global app number you want to get the bounding box for
displaced_meshTrue if the bounding box is retrieved for the displaced mesh, other false

Definition at line 420 of file MultiApp.C.

Referenced by MultiAppDTKUserObjectEvaluator::createSourceGeometry().

421 {
422  if (!_has_an_app)
423  mooseError("No app for ", name(), " on processor ", _orig_rank);
424 
425  unsigned int local_app = globalAppToLocal(app);
426  FEProblemBase & fe_problem_base = _apps[local_app]->getExecutioner()->feProblem();
427  MooseMesh & mesh = (displaced_mesh && fe_problem_base.getDisplacedProblem().get() != NULL)
428  ? fe_problem_base.getDisplacedProblem()->mesh()
429  : fe_problem_base.mesh();
430 
431  {
433  if (displaced_mesh)
434  _bounding_box[local_app] = MeshTools::create_bounding_box(mesh);
435  else
436  {
437  if (!_has_bounding_box[local_app])
438  {
439  _bounding_box[local_app] = MeshTools::create_bounding_box(mesh);
440  _has_bounding_box[local_app] = true;
441  }
442  }
443  }
444  BoundingBox bbox = _bounding_box[local_app];
445 
446  Point min = bbox.min();
447  min -= _bounding_box_padding;
448  Point max = bbox.max();
449  max += _bounding_box_padding;
450 
451  Point inflation_amount = (max - min) * _inflation;
452 
453  Point inflated_min = min - inflation_amount;
454  Point inflated_max = max + inflation_amount;
455 
456  // This is where the app is located. We need to shift by this amount.
457  Point p = position(app);
458 
459  Point shifted_min = inflated_min;
460  Point shifted_max = inflated_max;
461 
462  // If the problem is RZ then we're going to invent a box that would cover the whole "3D" app
463  // FIXME: Assuming all subdomains are the same coordinate system type!
464  if (fe_problem_base.getCoordSystem(*(mesh.meshSubdomains().begin())) == Moose::COORD_RZ)
465  {
466  shifted_min(0) = -inflated_max(0);
467  shifted_min(1) = inflated_min(1);
468  shifted_min(2) = -inflated_max(0);
469 
470  shifted_max(0) = inflated_max(0);
471  shifted_max(1) = inflated_max(1);
472  shifted_max(2) = inflated_max(0);
473  }
474 
475  // Shift them to the position they're supposed to be
476  shifted_min += p;
477  shifted_max += p;
478 
479  return BoundingBox(shifted_min, shifted_max);
480 }
Point position(unsigned int app)
The physical position of a global App number.
Definition: MultiApp.h:236
int _orig_rank
The mpi "rank" of this processor in the original communicator.
Definition: MultiApp.h:358
std::vector< std::shared_ptr< MooseApp > > _apps
Pointers to each of the Apps.
Definition: MultiApp.h:367
void mooseError(Args &&... args) const
Definition: MooseObject.h:144
Real _inflation
Relative bounding box inflation.
Definition: MultiApp.h:376
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
virtual std::shared_ptr< DisplacedProblem > getDisplacedProblem()
MooseMesh wraps a libMesh::Mesh object and enhances its capabilities by caching additional data and s...
Definition: MooseMesh.h:73
std::vector< BoundingBox > _bounding_box
This multi-app&#39;s bounding box.
Definition: MultiApp.h:373
bool _has_an_app
Whether or not this processor as an App at all
Definition: MultiApp.h:412
virtual Moose::CoordinateSystemType getCoordSystem(SubdomainID sid) override
virtual MooseMesh & mesh() override
const std::string & name() const
Get the name of the object.
Definition: MooseObject.h:56
Point _bounding_box_padding
Additional padding added to the bounding box, useful for 1D meshes.
Definition: MultiApp.h:379
MPI_Comm & _my_comm
The MPI communicator this object is going to use.
Definition: MultiApp.h:352
unsigned int globalAppToLocal(unsigned int global_app)
Map a global App number to the local number.
Definition: MultiApp.C:789
const std::set< SubdomainID > & meshSubdomains() const
Returns a read-only reference to the set of subdomains currently present in the Mesh.
Definition: MooseMesh.C:2311
std::vector< bool > _has_bounding_box
Flag if this multi-app computed its bounding box (valid only for non-displaced meshes) ...
Definition: MultiApp.h:370

◆ getCheckedPointerParam()

template<typename T >
T MooseObject::getCheckedPointerParam ( const std::string &  name,
const std::string &  error_string = "" 
) const
inlineinherited

Verifies that the requested parameter exists and is not NULL and returns it to the caller.

The template parameter must be a pointer or an error will be thrown.

Definition at line 77 of file MooseObject.h.

78  {
79  return parameters().getCheckedPointerParam<T>(name, error_string);
80  }
T getCheckedPointerParam(const std::string &name, const std::string &error_string="") const
Verifies that the requested parameter exists and is not NULL and returns it to the caller...
const InputParameters & parameters() const
Get the parameters of the object.
Definition: MooseObject.h:62
const std::string & name() const
Get the name of the object.
Definition: MooseObject.h:56

◆ getExecuteOnEnum()

const ExecFlagEnum & SetupInterface::getExecuteOnEnum ( ) const
inherited

Return the execute on MultiMooseEnum for this object.

Definition at line 67 of file SetupInterface.C.

Referenced by ExecuteMooseObjectWarehouse< Transfer >::addObjectMask(), EigenExecutionerBase::init(), AttribExecOns::initFrom(), and MultiAppTransfer::MultiAppTransfer().

68 {
69  return _execute_enum;
70 }
const ExecFlagEnum & _execute_enum
Execute settings for this oejct.

◆ getExecuteOptions()

ExecFlagEnum SetupInterface::getExecuteOptions ( )
staticinherited

(DEPRECATED) Returns the available options for the 'execute_on' input parameters TODO: ExecFlagType

Returns
A MooseEnum with the available 'execute_on' options, the default is 'residual'

Definition at line 101 of file SetupInterface.C.

102 {
103  // TODO: ExecFlagType
104  ::mooseDeprecated("The 'getExecuteOptions' was replaced by the ExecFlagEnum class because MOOSE "
105  "was updated to use this for the execute flags and the new function provides "
106  "additional arguments for modification of the enum.");
108 }
ExecFlagEnum getDefaultExecFlagEnum()
Return the default ExecFlagEnum for MOOSE.
Definition: MooseUtils.C:713
void mooseDeprecated(Args &&... args)
Emit a deprecated code/feature message with the given stringified, concatenated args.
Definition: MooseError.h:237

◆ getExecutioner()

Executioner * MultiApp::getExecutioner ( unsigned int  app)
virtualinherited
Parameters
appThe global app number to get the Executioner for
Returns
The Executioner associated with that App.

Definition at line 366 of file MultiApp.C.

Referenced by TransientMultiApp::restore().

367 {
368  if (!_has_an_app)
369  mooseError("No app for ", name(), " on processor ", _orig_rank);
370 
371  return _apps[globalAppToLocal(app)]->getExecutioner();
372 }
int _orig_rank
The mpi "rank" of this processor in the original communicator.
Definition: MultiApp.h:358
std::vector< std::shared_ptr< MooseApp > > _apps
Pointers to each of the Apps.
Definition: MultiApp.h:367
void mooseError(Args &&... args) const
Definition: MooseObject.h:144
bool _has_an_app
Whether or not this processor as an App at all
Definition: MultiApp.h:412
const std::string & name() const
Get the name of the object.
Definition: MooseObject.h:56
unsigned int globalAppToLocal(unsigned int global_app)
Map a global App number to the local number.
Definition: MultiApp.C:789

◆ getMooseApp()

MooseApp& MooseObject::getMooseApp ( ) const
inlineinherited

Get the MooseApp this object is associated with.

Definition at line 91 of file MooseObject.h.

Referenced by RestartableDataIO::createBackup(), RestartableDataIO::deserializeRestartableData(), ConsoleUtils::outputMeshInformation(), Resurrector::restartRestartableData(), and RestartableDataIO::restoreBackup().

91 { return _app; }
MooseApp & _app
The MooseApp this object is associated with.
Definition: MooseObject.h:174

◆ getParam()

template<typename T >
const T & MooseObject::getParam ( const std::string &  name) const
inherited

Retrieve a parameter for the object.

Parameters
nameThe name of the parameter
Returns
The value of the parameter

Definition at line 188 of file MooseObject.h.

Referenced by FEProblemBase::addMaterialHelper(), ConstraintWarehouse::addObject(), BicubicSplineFunction::BicubicSplineFunction(), Piecewise::buildFromXandY(), MultiApp::createApp(), DerivativeParsedMaterial::DerivativeParsedMaterial(), EigenKernel::EigenKernel(), FEProblemBase::FEProblemBase(), FieldSplitPreconditioner::FieldSplitPreconditioner(), FiniteDifferencePreconditioner::FiniteDifferencePreconditioner(), SideSetsBetweenSubdomainsGenerator::generate(), ExtraNodesetGenerator::generate(), MeshExtruderGenerator::generate(), SideSetsAroundSubdomainGenerator::generate(), GenericConstantRankTwoTensor::GenericConstantRankTwoTensor(), TimeSequenceStepper::init(), AttribThread::initFrom(), BlockRestrictable::initializeBlockRestrictable(), BoundaryRestrictable::initializeBoundaryRestrictable(), Console::initialSetup(), AdvancedOutput::initialSetup(), SideSetsBetweenSubdomains::modify(), AddExtraNodeset::modify(), MeshExtruder::modify(), SideSetsAroundSubdomain::modify(), ParsedAddSideset::ParsedAddSideset(), ParsedAux::ParsedAux(), ParsedGenerateSideset::ParsedGenerateSideset(), ParsedMaterial::ParsedMaterial(), ParsedODEKernel::ParsedODEKernel(), ParsedSubdomainMeshGenerator::ParsedSubdomainMeshGenerator(), ParsedSubdomainMeshModifier::ParsedSubdomainMeshModifier(), PhysicsBasedPreconditioner::PhysicsBasedPreconditioner(), SingleMatrixPreconditioner::SingleMatrixPreconditioner(), TimePeriod::TimePeriod(), and VectorOfPostprocessors::VectorOfPostprocessors().

189 {
190  return InputParameters::getParamHelper(name, _pars, static_cast<T *>(0));
191 }
static const T & getParamHelper(const std::string &name, const InputParameters &pars, const T *the_type)
const InputParameters & _pars
Parameters of this object, references the InputParameters stored in the InputParametersWarehouse.
Definition: MooseObject.h:171
const std::string & name() const
Get the name of the object.
Definition: MooseObject.h:56

◆ globalAppToLocal()

unsigned int MultiApp::globalAppToLocal ( unsigned int  global_app)
protectedinherited

Map a global App number to the local number.

Note: This will error if given a global number that doesn't map to a local number.

Parameters
global_appThe global app number.
Returns
The local app number.

Definition at line 789 of file MultiApp.C.

Referenced by MultiApp::appProblem(), MultiApp::appProblemBase(), MultiApp::getBoundingBox(), MultiApp::getExecutioner(), MultiApp::moveApp(), TransientMultiApp::resetApp(), and MultiApp::resetApp().

790 {
791  if (global_app >= _first_local_app && global_app <= _first_local_app + (_my_num_apps - 1))
792  return global_app - _first_local_app;
793 
794  _console << _first_local_app << " " << global_app << '\n';
795  mooseError("Invalid global_app!");
796 }
void mooseError(Args &&... args) const
Definition: MooseObject.h:144
unsigned int _my_num_apps
The number of apps this object is involved in simulating.
Definition: MultiApp.h:340
unsigned int _first_local_app
The number of the first app on this processor.
Definition: MultiApp.h:343
const ConsoleStream _console
An instance of helper class to write streams to the Console objects.

◆ hasApp()

bool MultiApp::hasApp ( )
inlineinherited

Whether or not this MultiApp has an app on this processor.

Definition at line 216 of file MultiApp.h.

216 { return _has_an_app; }
bool _has_an_app
Whether or not this processor as an App at all
Definition: MultiApp.h:412

◆ hasBlockMaterialProperty()

template<typename T >
bool BlockRestrictable::hasBlockMaterialProperty ( const std::string &  prop_name)
inherited

Check if a material property is valid for all blocks of this object.

This method returns true if the supplied property name has been declared in a Material object on the block ids for this object.

Template Parameters
TThe type of material property
Parameters
prop_namethe name of the property to query
Returns
true if the property exists for all block ids of the object, otherwise false
See also
Material::hasBlockMaterialProperty

Definition at line 249 of file BlockRestrictable.h.

250 {
251  mooseAssert(_blk_material_data != NULL, "MaterialData pointer is not defined");
252  return hasBlockMaterialPropertyHelper(prop_name) &&
253  _blk_material_data->haveProperty<T>(prop_name);
254 }
std::shared_ptr< MaterialData > _blk_material_data
Pointer to the MaterialData class for this object.
virtual bool hasBlockMaterialPropertyHelper(const std::string &prop_name)
A helper method to allow the Material object to specialize the behavior of hasBlockMaterialProperty.

◆ hasBlockMaterialPropertyHelper()

bool BlockRestrictable::hasBlockMaterialPropertyHelper ( const std::string &  prop_name)
protectedvirtualinherited

A helper method to allow the Material object to specialize the behavior of hasBlockMaterialProperty.

It also avoid circular #include problems.

See also
hasBlockMaterialProperty

Definition at line 249 of file BlockRestrictable.C.

Referenced by BlockRestrictable::hasBlockMaterialProperty().

250 {
251 
252  // Reference to MaterialWarehouse for testing and retrieving block ids
254 
255  // Complete set of ids that this object is active
256  const std::set<SubdomainID> & ids = blockRestricted() ? blockIDs() : meshBlockIDs();
257 
258  // Loop over each id for this object
259  for (const auto & id : ids)
260  {
261  // Storage of material properties that have been DECLARED on this id
262  std::set<std::string> declared_props;
263 
264  // If block materials exist, populated the set of properties that were declared
265  if (warehouse.hasActiveBlockObjects(id))
266  {
267  const std::vector<std::shared_ptr<Material>> & mats = warehouse.getActiveBlockObjects(id);
268  for (const auto & mat : mats)
269  {
270  const std::set<std::string> & mat_props = mat->getSuppliedItems();
271  declared_props.insert(mat_props.begin(), mat_props.end());
272  }
273  }
274 
275  // If the supplied property is not in the list of properties on the current id, return false
276  if (declared_props.find(prop_name) == declared_props.end())
277  return false;
278  }
279 
280  // If you get here the supplied property is defined on all blocks
281  return true;
282 }
bool hasActiveBlockObjects(THREAD_ID tid=0) const
const std::map< SubdomainID, std::vector< std::shared_ptr< T > > > & getActiveBlockObjects(THREAD_ID tid=0) const
FEProblemBase * _blk_feproblem
Pointer to FEProblemBase.
virtual const std::set< SubdomainID > & blockIDs() const
Return the block subdomain ids for this object.
virtual bool blockRestricted() const
Returns true if this object has been restricted to a boundary.
Material objects are special in that they have additional objects created automatically (see FEProble...
const MaterialWarehouse & getMaterialWarehouse() const
const std::set< SubdomainID > & meshBlockIDs() const
Return all of the SubdomainIDs for the mesh.

◆ hasBlocks() [1/5]

bool BlockRestrictable::hasBlocks ( const SubdomainName &  name) const
inherited

Test if the supplied block name is valid for this object.

Parameters
nameA SubdomainName to check
Returns
True if the given id is valid for this object

Definition at line 179 of file BlockRestrictable.C.

Referenced by fillPositions(), and BlockRestrictable::hasBlocks().

180 {
181  // Create a vector and utilize the getSubdomainIDs function, which
182  // handles the ANY_BLOCK_ID (getSubdomainID does not)
183  std::vector<SubdomainName> names(1);
184  names[0] = name;
185  return hasBlocks(_blk_mesh->getSubdomainIDs(names));
186 }
std::vector< SubdomainID > getSubdomainIDs(const std::vector< SubdomainName > &subdomain_name) const
Get the associated subdomainIDs for the subdomain names that are passed in.
Definition: MooseMesh.C:1085
bool hasBlocks(const SubdomainName &name) const
Test if the supplied block name is valid for this object.
MooseMesh * _blk_mesh
Pointer to Mesh.

◆ hasBlocks() [2/5]

bool BlockRestrictable::hasBlocks ( const std::vector< SubdomainName > &  names) const
inherited

Test if the supplied vector of block names are valid for this object.

Parameters
namesA vector of SubdomainNames to check
Returns
True if the given ids are valid for this object

Definition at line 189 of file BlockRestrictable.C.

190 {
191  return hasBlocks(_blk_mesh->getSubdomainIDs(names));
192 }
std::vector< SubdomainID > getSubdomainIDs(const std::vector< SubdomainName > &subdomain_name) const
Get the associated subdomainIDs for the subdomain names that are passed in.
Definition: MooseMesh.C:1085
bool hasBlocks(const SubdomainName &name) const
Test if the supplied block name is valid for this object.
MooseMesh * _blk_mesh
Pointer to Mesh.

◆ hasBlocks() [3/5]

bool BlockRestrictable::hasBlocks ( const SubdomainID id) const
inherited

Test if the supplied block ids are valid for this object.

Parameters
idA SubdomainID to check
Returns
True if the given id is valid for this object

Definition at line 195 of file BlockRestrictable.C.

196 {
197  if (_blk_ids.empty() || _blk_ids.find(Moose::ANY_BLOCK_ID) != _blk_ids.end())
198  return true;
199  else
200  return _blk_ids.find(id) != _blk_ids.end();
201 }
const SubdomainID ANY_BLOCK_ID
Definition: MooseTypes.C:15
std::set< SubdomainID > _blk_ids
Set of block ids supplied by the user via the input file (for error reporting)

◆ hasBlocks() [4/5]

bool BlockRestrictable::hasBlocks ( const std::vector< SubdomainID > &  ids) const
inherited

Test if the supplied vector block ids are valid for this object.

Parameters
idsA vector of SubdomainIDs ids to check
Returns
True if the all of the given ids are found within the ids for this object

Definition at line 204 of file BlockRestrictable.C.

205 {
206  std::set<SubdomainID> ids_set(ids.begin(), ids.end());
207  return hasBlocks(ids_set);
208 }
bool hasBlocks(const SubdomainName &name) const
Test if the supplied block name is valid for this object.

◆ hasBlocks() [5/5]

bool BlockRestrictable::hasBlocks ( const std::set< SubdomainID > &  ids) const
inherited

Test if the supplied set of block ids are valid for this object.

Parameters
idsA std::set of SubdomainIDs to check
Returns
True if the all of the given ids are found within the ids for this object
See also
isSubset

Definition at line 211 of file BlockRestrictable.C.

212 {
213  if (_blk_ids.empty() || _blk_ids.find(Moose::ANY_BLOCK_ID) != _blk_ids.end())
214  return true;
215  else
216  return std::includes(_blk_ids.begin(), _blk_ids.end(), ids.begin(), ids.end());
217 }
const SubdomainID ANY_BLOCK_ID
Definition: MooseTypes.C:15
std::set< SubdomainID > _blk_ids
Set of block ids supplied by the user via the input file (for error reporting)

◆ hasLocalApp()

bool MultiApp::hasLocalApp ( unsigned int  global_app)
inherited

Whether or not the given global app number is on this processor.

Parameters
global_appThe global app number in question
Returns
True if the global app is on this processor

Definition at line 531 of file MultiApp.C.

Referenced by MultiApp::moveApp(), TransientMultiApp::resetApp(), and MultiApp::resetApp().

532 {
533  if (_has_an_app && global_app >= _first_local_app &&
534  global_app <= _first_local_app + (_my_num_apps - 1))
535  return true;
536 
537  return false;
538 }
unsigned int _my_num_apps
The number of apps this object is involved in simulating.
Definition: MultiApp.h:340
bool _has_an_app
Whether or not this processor as an App at all
Definition: MultiApp.h:412
unsigned int _first_local_app
The number of the first app on this processor.
Definition: MultiApp.h:343

◆ incrementTStep()

void TransientMultiApp::incrementTStep ( Real  )
overridevirtualinherited

Advances the multi-apps time step which is important for dt selection.

(Note this does not advance the time. That is done in Transient::endStep, which is called either directly from solveStep() for loose coupling cases or through finishStep() for Picard coupling cases)

Reimplemented from MultiApp.

Definition at line 533 of file TransientMultiApp.C.

534 {
535  if (!_sub_cycling)
536  {
537  for (unsigned int i = 0; i < _my_num_apps; i++)
538  {
540 
541  // The App might have a different local time from the rest of the problem
542  Real app_time_offset = _apps[i]->getGlobalTimeOffset();
543 
544  // Only increment the step if we are after (target_time) the
545  // start_time (app_time_offset) of this sub_app.
546  if (app_time_offset < target_time)
547  ex->incrementStepOrReject();
548  }
549  }
550 }
Transient executioners usually loop through a number of timesteps...
Definition: Transient.h:31
std::vector< std::shared_ptr< MooseApp > > _apps
Pointers to each of the Apps.
Definition: MultiApp.h:367
virtual void incrementStepOrReject()
This is where the solve step is actually incremented.
Definition: Transient.C:342
std::vector< Transient * > _transient_executioners
unsigned int _my_num_apps
The number of apps this object is involved in simulating.
Definition: MultiApp.h:340

◆ init()

void MultiApp::init ( unsigned int  num)
protectedinherited

Initialize the MultiApp by creating the provided number of apps.

This is called in the constructor, by default it utilizes the 'positions' input parameters.

Definition at line 206 of file MultiApp.C.

Referenced by MultiApp::setupPositions().

207 {
208  _total_num_apps = num;
209  buildComm();
210  _backups.reserve(_my_num_apps);
211  for (unsigned int i = 0; i < _my_num_apps; i++)
212  _backups.emplace_back(std::make_shared<Backup>());
213 
214  _has_bounding_box.resize(_my_num_apps, false);
215  _bounding_box.resize(_my_num_apps);
216 
217  if ((_cli_args.size() > 1) && (_total_num_apps != _cli_args.size()))
218  paramError("cli_args",
219  "The number of items supplied must be 1 or equal to the number of sub apps.");
220 }
void buildComm()
Create an MPI communicator suitable for each app.
Definition: MultiApp.C:693
unsigned int _total_num_apps
The total number of apps to simulate.
Definition: MultiApp.h:337
std::vector< BoundingBox > _bounding_box
This multi-app&#39;s bounding box.
Definition: MultiApp.h:373
unsigned int _my_num_apps
The number of apps this object is involved in simulating.
Definition: MultiApp.h:340
void paramError(const std::string &param, Args... args)
Emits an error prefixed with the file and line number of the given param (from the input file) along ...
Definition: MooseObject.h:105
SubAppBackups & _backups
Backups for each local App.
Definition: MultiApp.h:415
const std::vector< std::string > & _cli_args
Storage for command line arguments.
Definition: MultiApp.h:418
std::vector< bool > _has_bounding_box
Flag if this multi-app computed its bounding box (valid only for non-displaced meshes) ...
Definition: MultiApp.h:370

◆ initializeBlockRestrictable()

void BlockRestrictable::initializeBlockRestrictable ( const MooseObject moose_object)
protectedinherited

An initialization routine needed for dual constructors.

Definition at line 72 of file BlockRestrictable.C.

Referenced by BlockRestrictable::BlockRestrictable().

73 {
74  // If the mesh pointer is not defined, but FEProblemBase is, get it from there
75  if (_blk_feproblem != NULL && _blk_mesh == NULL)
77 
78  // Check that the mesh pointer was defined, it is required for this class to operate
79  if (_blk_mesh == NULL)
80  mooseError("The input parameters must contain a pointer to FEProblem via '_fe_problem' or a "
81  "pointer to the MooseMesh via '_mesh'");
82 
83  // Populate the MaterialData pointer
84  if (_blk_feproblem != NULL)
86 
87  // The 'block' input is defined
88  if (moose_object->isParamValid("block"))
89  {
90  // Extract the blocks from the input
91  _blocks = moose_object->getParam<std::vector<SubdomainName>>("block");
92 
93  // Get the IDs from the supplied names
94  std::vector<SubdomainID> vec_ids = _blk_mesh->getSubdomainIDs(_blocks);
95 
96  // Store the IDs, handling ANY_BLOCK_ID if supplied
97  if (std::find(_blocks.begin(), _blocks.end(), "ANY_BLOCK_ID") != _blocks.end())
99  else
100  _blk_ids.insert(vec_ids.begin(), vec_ids.end());
101  }
102 
103  // When 'blocks' is not set and there is a "variable", use the blocks from the variable
104  else if (moose_object->isParamValid("variable"))
105  {
106  std::string variable_name = moose_object->parameters().getMooseType("variable");
107  if (!variable_name.empty())
109  ->getVariable(_blk_tid,
110  variable_name,
113  .activeSubdomains();
114  }
115 
116  // Produce error if the object is not allowed to be both block and boundary restricted
117  if (!_blk_dual_restrictable && !_boundary_ids.empty() && !_boundary_ids.empty())
118  if (!_boundary_ids.empty() && _boundary_ids.find(Moose::ANY_BOUNDARY_ID) == _boundary_ids.end())
119  mooseError("Attempted to restrict the object '",
120  _blk_name,
121  "' to a block, but the object is already restricted by boundary");
122 
123  // If no blocks were defined above, specify that it is valid on all blocks
124  if (_blk_ids.empty() && !moose_object->isParamValid("boundary"))
125  {
127  _blocks = {"ANY_BLOCK_ID"};
128  }
129 
130  // If this object is block restricted, check that defined blocks exist on the mesh
131  if (_blk_ids.find(Moose::ANY_BLOCK_ID) == _blk_ids.end())
132  {
133  const std::set<SubdomainID> & valid_ids = _blk_mesh->meshSubdomains();
134  std::vector<SubdomainID> diff;
135 
136  std::set_difference(_blk_ids.begin(),
137  _blk_ids.end(),
138  valid_ids.begin(),
139  valid_ids.end(),
140  std::back_inserter(diff));
141 
142  if (!diff.empty())
143  {
144  std::ostringstream msg;
145  msg << "The object '" << _blk_name
146  << "' contains the following block ids that do not exist on the mesh:";
147  for (const auto & id : diff)
148  msg << " " << id;
149  mooseError(msg.str());
150  }
151  }
152 }
std::string getMooseType(const std::string &name) const
Utility functions for retrieving one of the MooseTypes variables into the common "string" base class...
const bool _blk_dual_restrictable
Flag for allowing dual restriction.
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:208
FEProblemBase * _blk_feproblem
Pointer to FEProblemBase.
const T & getParam(const std::string &name) const
Retrieve a parameter for the object.
Definition: MooseObject.h:188
std::shared_ptr< MaterialData > _blk_material_data
Pointer to the MaterialData class for this object.
const InputParameters & parameters() const
Get the parameters of the object.
Definition: MooseObject.h:62
THREAD_ID _blk_tid
Thread id for this object.
std::vector< SubdomainName > _blocks
Vector the block names supplied by the user via the input file.
std::shared_ptr< MaterialData > getMaterialData(Moose::MaterialDataType type, THREAD_ID tid=0)
const SubdomainID ANY_BLOCK_ID
Definition: MooseTypes.C:15
virtual MooseMesh & mesh() override
const std::set< BoundaryID > & _boundary_ids
Reference to the boundary_ids, defaults to an empty set if not provided.
std::vector< SubdomainID > getSubdomainIDs(const std::vector< SubdomainName > &subdomain_name) const
Get the associated subdomainIDs for the subdomain names that are passed in.
Definition: MooseMesh.C:1085
std::set< SubdomainID > _blk_ids
Set of block ids supplied by the user via the input file (for error reporting)
bool isParamValid(const std::string &name) const
Test if the supplied parameter is valid.
Definition: MooseObject.h:86
const std::string & _blk_name
Name of the object.
MooseMesh * _blk_mesh
Pointer to Mesh.
const BoundaryID ANY_BOUNDARY_ID
Definition: MooseTypes.C:17
const std::set< SubdomainID > & meshSubdomains() const
Returns a read-only reference to the set of subdomains currently present in the Mesh.
Definition: MooseMesh.C:2311

◆ initialSetup()

void TransientMultiApp::initialSetup ( )
overridevirtualinherited

Gets called at the beginning of the simulation before this object is asked to do its job.

Reimplemented from MultiApp.

Definition at line 161 of file TransientMultiApp.C.

162 {
164 
165  if (!_has_an_app)
166  return;
167 
169 
170  if (_has_an_app)
171  {
173  // Grab Transient Executioners from each app
174  for (unsigned int i = 0; i < _my_num_apps; i++)
175  setupApp(i);
176  }
177 }
void setupApp(unsigned int i, Real time=0.0)
Setup the executioner for the local app.
std::vector< Transient * > _transient_executioners
unsigned int _my_num_apps
The number of apps this object is involved in simulating.
Definition: MultiApp.h:340
bool _has_an_app
Whether or not this processor as an App at all
Definition: MultiApp.h:412
virtual void initialSetup() override
Gets called at the beginning of the simulation before this object is asked to do its job...
Definition: MultiApp.C:233
MPI_Comm & _my_comm
The MPI communicator this object is going to use.
Definition: MultiApp.h:352

◆ isBlockSubset() [1/2]

bool BlockRestrictable::isBlockSubset ( const std::set< SubdomainID > &  ids) const
inherited

Test if the class block ids are a subset of the supplied objects.

Parameters
idsA std::set of Subdomains to check
Returns
True if all of the block ids for this class are found within the given ids (opposite of hasBlocks)
See also
hasBlocks

Definition at line 220 of file BlockRestrictable.C.

Referenced by BlockRestrictable::checkVariable(), and BlockRestrictable::isBlockSubset().

221 {
222  // An empty input is assumed to be ANY_BLOCK_ID
223  if (ids.empty() || ids.find(Moose::ANY_BLOCK_ID) != ids.end())
224  return true;
225 
226  if (_blk_ids.find(Moose::ANY_BLOCK_ID) != _blk_ids.end())
227  return std::includes(ids.begin(),
228  ids.end(),
229  _blk_mesh->meshSubdomains().begin(),
230  _blk_mesh->meshSubdomains().end());
231  else
232  return std::includes(ids.begin(), ids.end(), _blk_ids.begin(), _blk_ids.end());
233 }
const SubdomainID ANY_BLOCK_ID
Definition: MooseTypes.C:15
std::set< SubdomainID > _blk_ids
Set of block ids supplied by the user via the input file (for error reporting)
MooseMesh * _blk_mesh
Pointer to Mesh.
const std::set< SubdomainID > & meshSubdomains() const
Returns a read-only reference to the set of subdomains currently present in the Mesh.
Definition: MooseMesh.C:2311

◆ isBlockSubset() [2/2]

bool BlockRestrictable::isBlockSubset ( const std::vector< SubdomainID > &  ids) const
inherited

Test if the class block ids are a subset of the supplied objects.

Parameters
idsA std::vector of Subdomains to check
Returns
True if all of the block ids for this class are found within the given ids (opposite of hasBlocks)
See also
hasBlocks

Definition at line 236 of file BlockRestrictable.C.

237 {
238  std::set<SubdomainID> ids_set(ids.begin(), ids.end());
239  return isBlockSubset(ids_set);
240 }
bool isBlockSubset(const std::set< SubdomainID > &ids) const
Test if the class block ids are a subset of the supplied objects.

◆ isParamValid()

bool MooseObject::isParamValid ( const std::string &  name) const
inlineinherited

Test if the supplied parameter is valid.

Parameters
nameThe name of the parameter to test

Definition at line 86 of file MooseObject.h.

Referenced by AdvancedOutput::AdvancedOutput(), BicubicSplineFunction::BicubicSplineFunction(), Piecewise::buildFromFile(), Piecewise::buildFromXandY(), DistributedGeneratedMesh::buildMesh(), GeneratedMesh::buildMesh(), CartesianMeshGenerator::CartesianMeshGenerator(), LibmeshPartitioner::clone(), OversampleOutput::cloneMesh(), CSVReader::CSVReader(), MultiAppNearestNodeTransfer::execute(), Exodus::Exodus(), FEProblemBase::FEProblemBase(), FileOutput::FileOutput(), MultiApp::fillPositions(), FunctionDT::FunctionDT(), RenameBoundaryGenerator::generate(), BreakBoundaryOnSubdomainGenerator::generate(), ElementSubdomainIDGenerator::generate(), ExtraNodesetGenerator::generate(), LowerDBlockFromSidesetGenerator::generate(), MeshSideSetGenerator::generate(), RenameBlockGenerator::generate(), GeneratedMeshGenerator::generate(), ParsedSubdomainMeshGenerator::generate(), MeshExtruderGenerator::generate(), SubdomainBoundingBoxGenerator::generate(), MultiAppNearestNodeTransfer::getLocalEntities(), MeshGenerator::getMesh(), MultiAppNearestNodeTransfer::getNearestNode(), IterationAdaptiveDT::init(), EigenExecutionerBase::init(), MooseMesh::init(), AdvancedOutput::initExecutionTypes(), BlockRestrictable::initializeBlockRestrictable(), BoundaryRestrictable::initializeBoundaryRestrictable(), SolutionAux::initialSetup(), MooseParsedVectorFunction::initialSetup(), Console::initialSetup(), Receiver::initialSetup(), SolutionFunction::initialSetup(), MooseParsedGradFunction::initialSetup(), MooseParsedFunction::initialSetup(), AdvancedOutput::initialSetup(), AdvancedOutput::initPostprocessorOrVectorPostprocessorLists(), IterationAdaptiveDT::IterationAdaptiveDT(), LeastSquaresFit::LeastSquaresFit(), LibmeshPartitioner::LibmeshPartitioner(), BreakBoundaryOnSubdomain::modify(), MeshExtruder::modify(), MeshSideSet::modify(), LowerDBlockFromSideset::modify(), AssignElementSubdomainID::modify(), ParsedSubdomainMeshModifier::modify(), RenameBlock::modify(), SubdomainBoundingBox::modify(), MooseMesh::MooseMesh(), EigenExecutionerBase::normalizeSolution(), Output::Output(), PetscOutput::PetscOutput(), Piecewise::Piecewise(), SolutionUserObject::readExodusII(), RenameBlock::RenameBlock(), RenameBlockGenerator::RenameBlockGenerator(), RenameBoundaryGenerator::RenameBoundaryGenerator(), SolutionUserObject::SolutionUserObject(), and TimePeriod::TimePeriod().

86 { return _pars.isParamValid(name); }
const InputParameters & _pars
Parameters of this object, references the InputParameters stored in the InputParametersWarehouse.
Definition: MooseObject.h:171
const std::string & name() const
Get the name of the object.
Definition: MooseObject.h:56
bool isParamValid(const std::string &name) const
This method returns parameters that have been initialized in one fashion or another, i.e.

◆ isRootProcessor()

bool MultiApp::isRootProcessor ( )
inlineinherited

Whether or not this processor is the "root" processor for the sub communicator.

The "root" processor has rank 0 in the sub communicator

Definition at line 276 of file MultiApp.h.

276 { return _my_rank == 0; }
int _my_rank
The mpi "rank" of this processor in the sub communicator.
Definition: MultiApp.h:364

◆ jacobianSetup()

void SetupInterface::jacobianSetup ( )
virtualinherited

Gets called just before the Jacobian is computed and before this object is asked to do its job.

Reimplemented in EqualValueEmbeddedConstraint.

Definition at line 52 of file SetupInterface.C.

53 {
54 }

◆ localApp()

MooseApp * MultiApp::localApp ( unsigned int  local_app)
inherited

Get the local MooseApp object.

Parameters
local_appThe local app number

Definition at line 541 of file MultiApp.C.

542 {
543  mooseAssert(local_app < _apps.size(), "Index out of range: " + Moose::stringify(local_app));
544  return _apps[local_app].get();
545 }
std::vector< std::shared_ptr< MooseApp > > _apps
Pointers to each of the Apps.
Definition: MultiApp.h:367
std::string stringify(const T &t)
conversion to string
Definition: Conversion.h:61

◆ meshBlockIDs()

const std::set< SubdomainID > & BlockRestrictable::meshBlockIDs ( ) const
inherited

Return all of the SubdomainIDs for the mesh.

Returns
A set of all subdomians for the entire mesh

Definition at line 243 of file BlockRestrictable.C.

Referenced by BlockRestrictable::checkVariable(), BlockRestrictable::getBlockCoordSystem(), and BlockRestrictable::hasBlockMaterialPropertyHelper().

244 {
245  return _blk_mesh->meshSubdomains();
246 }
MooseMesh * _blk_mesh
Pointer to Mesh.
const std::set< SubdomainID > & meshSubdomains() const
Returns a read-only reference to the set of subdomains currently present in the Mesh.
Definition: MooseMesh.C:2311

◆ mooseDeprecated()

template<typename... Args>
void MooseObject::mooseDeprecated ( Args &&...  args) const
inlineinherited

◆ mooseError()

template<typename... Args>
void MooseObject::mooseError ( Args &&...  args) const
inlineinherited

Definition at line 144 of file MooseObject.h.

Referenced by PetscExternalPartitioner::_do_partition(), GridPartitioner::_do_partition(), FEProblemBase::addConstraint(), FEProblemBase::addInitialCondition(), FEProblem::addLineSearch(), FEProblemBase::addLineSearch(), FEProblemBase::addOutput(), DiracKernel::addPointWithValidId(), FEProblemBase::addPostprocessor(), MooseMesh::addQuadratureNode(), FEProblemBase::addVectorPostprocessor(), Output::advancedExecuteOn(), AnnularMesh::AnnularMesh(), AnnularMeshGenerator::AnnularMeshGenerator(), MultiApp::appPostprocessorValue(), MultiApp::appProblem(), MultiApp::appProblemBase(), MultiApp::appUserObjectBase(), DerivativeParsedMaterialHelper::assembleDerivatives(), Function::average(), Axisymmetric2D3DSolutionFunction::Axisymmetric2D3DSolutionFunction(), BicubicSplineFunction::BicubicSplineFunction(), BoundingValueElementDamper::BoundingValueElementDamper(), BoundingValueNodalDamper::BoundingValueNodalDamper(), BoundsAux::BoundsAux(), BreakMeshByBlockGenerator::BreakMeshByBlockGenerator(), BreakMeshByBlockGeneratorBase::BreakMeshByBlockGeneratorBase(), MooseMesh::buildCoarseningMap(), Piecewise::buildFromFile(), Piecewise::buildFromXandY(), Piecewise::buildFromXY(), TiledMesh::buildMesh(), FileMesh::buildMesh(), SpiralAnnularMesh::buildMesh(), DistributedGeneratedMesh::buildMesh(), GeneratedMesh::buildMesh(), ImageMeshGenerator::buildMesh3D(), ImageMesh::buildMesh3D(), MooseMesh::buildMeshBaseObject(), MooseMesh::buildRefinementMap(), MooseMesh::buildSideList(), CartesianMeshGenerator::CartesianMeshGenerator(), ChangeOverTimePostprocessor::ChangeOverTimePostprocessor(), EigenExecutionerBase::chebyshev(), SubProblem::checkBlockMatProps(), SubProblem::checkBoundaryMatProps(), FEProblemBase::checkCoordinateSystems(), FEProblemBase::checkDependMaterialsHelper(), FEProblemBase::checkDisplacementOrders(), Material::checkExecutionStage(), BreakMeshByBlockBase::checkInputParameter(), Steady::checkIntegrity(), EigenExecutionerBase::checkIntegrity(), ActuallyExplicitEuler::checkLinearConvergence(), FEProblemBase::checkProblemIntegrity(), Material::checkStatefulSanity(), FEProblemBase::checkUserObjects(), LibmeshPartitioner::clone(), MooseMesh::clone(), ComparisonPostprocessor::comparisonIsTrue(), CompositeFunction::CompositeFunction(), ElementLpNormAux::compute(), ElementH1ErrorFunctionAux::compute(), NodalPatchRecovery::compute(), KernelBase::computeADOffDiagJacobian(), InterfaceKernel::computeElemNeighJacobian(), TimeSequenceStepperBase::computeFailedDT(), IterationAdaptiveDT::computeFailedDT(), TimeStepper::computeFailedDT(), HistogramVectorPostprocessor::computeHistogram(), EqualValueEmbeddedConstraint::computeQpJacobian(), EqualValueEmbeddedConstraint::computeQpOffDiagJacobian(), KernelValue::computeQpResidual(), FEProblemBase::computeResidualInternal(), FEProblemBase::computeResidualTag(), FEProblemBase::computeResidualType(), StatisticsVectorPostprocessor::computeStatValue(), Material::computeSubdomainProperties(), ExplicitEuler::computeTimeDerivatives(), ImplicitEuler::computeTimeDerivatives(), BDF2::computeTimeDerivatives(), NewmarkBeta::computeTimeDerivatives(), CrankNicolson::computeTimeDerivatives(), ActuallyExplicitEuler::computeTimeDerivatives(), LStableDirk2::computeTimeDerivatives(), LStableDirk3::computeTimeDerivatives(), ImplicitMidpoint::computeTimeDerivatives(), ExplicitTVDRK2::computeTimeDerivatives(), AStableDirk4::computeTimeDerivatives(), LStableDirk4::computeTimeDerivatives(), ExplicitRK2::computeTimeDerivatives(), PenetrationAux::computeValue(), ConcentricCircleMesh::ConcentricCircleMesh(), ConcentricCircleMeshGenerator::ConcentricCircleMeshGenerator(), TimeStepper::constrainStep(), AuxKernel::coupledDot(), AuxKernel::coupledDotDu(), CoupledForce::CoupledForce(), DebugResidualAux::DebugResidualAux(), BicubicSplineFunction::derivative(), DerivativeSumMaterial::DerivativeSumMaterial(), DGKernel::DGKernel(), FEProblemBase::duplicateVariableCheck(), EigenProblem::EigenProblem(), Eigenvalues::Eigenvalues(), ElementalVariableValue::ElementalVariableValue(), ElementQualityAux::ElementQualityAux(), MooseMesh::errorIfDistributedMesh(), SolutionUserObject::evalMeshFunction(), SolutionUserObject::evalMeshFunctionGradient(), SolutionUserObject::evalMultiValuedMeshFunction(), SolutionUserObject::evalMultiValuedMeshFunctionGradient(), MultiAppPostprocessorTransfer::execute(), DiscreteElementUserObject::execute(), MultiAppPostprocessorInterpolationTransfer::execute(), MultiAppVariableValueSamplePostprocessorTransfer::execute(), ElementQualityChecker::execute(), NodalValueSampler::execute(), PointValue::execute(), MultiAppPostprocessorToAuxScalarTransfer::execute(), MultiAppScalarToAuxScalarTransfer::execute(), MultiAppVariableValueSampleTransfer::execute(), MultiAppInterpolationTransfer::execute(), MultiAppUserObjectTransfer::execute(), FindValueOnLine::execute(), MultiAppNearestNodeTransfer::execute(), TimeExtremeValue::execute(), VectorPostprocessorComparison::execute(), LeastSquaresFit::execute(), LeastSquaresFitHistory::execute(), FEProblemBase::executeControls(), MultiAppVectorPostprocessorTransfer::executeFromMultiapp(), MultiAppVectorPostprocessorTransfer::executeToMultiapp(), Exodus::Exodus(), FileOutput::FileOutput(), fillPositions(), MultiApp::fillPositions(), VerifyElementUniqueID::finalize(), VerifyNodalUniqueID::finalize(), DiscreteElementUserObject::finalize(), ElementQualityChecker::finalize(), MemoryUsage::finalize(), PointSamplerBase::finalize(), Transfer::find_sys(), BreakMeshByBlockBase::findFreeBoundaryId(), BreakMeshByBlockGeneratorBase::findFreeBoundaryId(), FunctionDT::FunctionDT(), FunctionMaterialBase::FunctionMaterialBase(), ParsedMaterialHelper::functionParse(), FunctionScalarAux::FunctionScalarAux(), FunctionScalarIC::FunctionScalarIC(), GapValueAux::GapValueAux(), ElementSubdomainIDGenerator::generate(), ExtraNodesetGenerator::generate(), RenameBlockGenerator::generate(), RenameBoundaryGenerator::generate(), GeneratedMeshGenerator::generate(), MeshExtruderGenerator::generate(), SideSetsFromBoundingBoxGenerator::generate(), StackGenerator::generate(), SpiralAnnularMeshGenerator::generate(), PatternedMeshGenerator::generate(), BoundingBoxNodeSetGenerator::generate(), GeneratedMesh::GeneratedMesh(), GeneratedMeshGenerator::GeneratedMeshGenerator(), RandomICBase::generateRandom(), GenericConstantMaterial::GenericConstantMaterial(), GenericFunctionMaterial::GenericFunctionMaterial(), MooseMesh::getBoundaryID(), MultiApp::getBoundingBox(), MooseMesh::getCoarseningMap(), Control::getControllableParameterByName(), FEProblemBase::getCoordSystem(), PiecewiseConstant::getDirection(), FEProblemBase::getDistribution(), ElementGenerator::getElemType(), MultiApp::getExecutioner(), FEProblemBase::getFunction(), SolutionUserObject::getLocalVarIndex(), AuxKernel::getMaterialProperty(), AuxKernel::getMaterialPropertyOld(), AuxKernel::getMaterialPropertyOlder(), SubProblem::getMatrixTagID(), AnnularMesh::getMaxInDimension(), DistributedGeneratedMesh::getMaxInDimension(), GeneratedMesh::getMaxInDimension(), FEProblemBase::getMaxQps(), FEProblemBase::getMaxShapeFunctions(), AnnularMesh::getMinInDimension(), DistributedGeneratedMesh::getMinInDimension(), GeneratedMesh::getMinInDimension(), MooseMesh::getMortarInterface(), MooseMesh::getMortarInterfaceByName(), MooseMesh::getNodeBlockIds(), MooseMesh::getNodeList(), FEProblemBase::getNonlinearSystem(), MooseMesh::getPairedBoundaryMapping(), ImageMeshGenerator::GetPixelInfo(), ImageMesh::GetPixelInfo(), MaterialStdVectorAux::getRealValue(), MooseMesh::getRefinementMap(), FEProblemBase::getSampler(), DisplacedProblem::getScalarVariable(), FEProblemBase::getScalarVariable(), DisplacedProblem::getStandardVariable(), FEProblemBase::getStandardVariable(), MooseMesh::getSubdomainBoundaryIds(), MooseMesh::getSubdomainID(), DisplacedProblem::getSystem(), FEProblemBase::getSystem(), FEProblemBase::getUserObject(), FEProblemBase::getUserObjectBase(), Residual::getValue(), PerformanceData::getValue(), PerfGraphData::getValue(), LineValueSampler::getValue(), FindValueOnLine::getValueAtPoint(), SubProblem::getVariableHelper(), SubProblem::getVectorTagID(), DisplacedProblem::getVectorVariable(), FEProblemBase::getVectorVariable(), MultiApp::globalAppToLocal(), MooseParsedVectorFunction::gradient(), AdvancedOutput::hasOutputHelper(), CrankNicolson::init(), CSVTimeSequenceStepper::init(), IterationAdaptiveDT::init(), EigenExecutionerBase::init(), Transient::init(), MooseMesh::init(), FEProblemBase::init(), NumPicardIterations::initialize(), FullSolveMultiApp::initialSetup(), PiecewiseBase::initialSetup(), SolutionAux::initialSetup(), Axisymmetric2D3DSolutionFunction::initialSetup(), SolutionFunction::initialSetup(), Exodus::initialSetup(), SolutionUserObject::initialSetup(), FEProblemBase::initialSetup(), AdvancedOutput::initOutputList(), AdvancedOutput::initShowHideLists(), Material::initStatefulProperties(), Function::integral(), InterfaceKernel::InterfaceKernel(), InterfaceTimeKernel::InterfaceTimeKernel(), EigenExecutionerBase::inversePowerIteration(), InversePowerMethod::InversePowerMethod(), IterationAdaptiveDT::IterationAdaptiveDT(), LayeredSideIntegral::LayeredSideIntegral(), LeastSquaresFit::LeastSquaresFit(), LibmeshPartitioner::LibmeshPartitioner(), LinearCombinationFunction::LinearCombinationFunction(), LinearCombinationPostprocessor::LinearCombinationPostprocessor(), LinearNodalConstraint::LinearNodalConstraint(), LineMaterialSamplerBase< Real >::LineMaterialSamplerBase(), LineSearch::lineSearch(), LineValueSampler::LineValueSampler(), MaterialRealTensorValueAux::MaterialRealTensorValueAux(), MaterialRealVectorValueAux::MaterialRealVectorValueAux(), MaterialStdVectorRealGradientAux::MaterialStdVectorRealGradientAux(), MaterialVectorPostprocessor::MaterialVectorPostprocessor(), Distribution::median(), SubProblem::meshChanged(), MeshExtruder::MeshExtruder(), MeshExtruderGenerator::MeshExtruderGenerator(), MeshSideSetGenerator::MeshSideSetGenerator(), SideSetsFromNormals::modify(), SideSetsFromPoints::modify(), BreakMeshByBlockBase::modify(), AddExtraNodeset::modify(), MeshExtruder::modify(), SmoothMesh::modify(), AssignElementSubdomainID::modify(), AddAllSideSetsByNormals::modify(), ElementDeleterBase::modify(), ParsedSubdomainMeshModifier::modify(), RenameBlock::modify(), ImageSubdomain::modify(), OrientedSubdomainBoundingBox::modify(), BoundingBoxNodeSet::modify(), AddSideSetsFromBoundingBox::modify(), SubdomainBoundingBox::modify(), MooseMesh::MooseMesh(), MultiAppMeshFunctionTransfer::MultiAppMeshFunctionTransfer(), MultiAppPostprocessorTransfer::MultiAppPostprocessorTransfer(), NearestNodeDistanceAux::NearestNodeDistanceAux(), NearestNodeValueAux::NearestNodeValueAux(), RenameBlockGenerator::newBlockID(), RenameBlock::newBlockID(), RenameBlockGenerator::newBlockName(), RenameBlock::newBlockName(), NewmarkBeta::NewmarkBeta(), NodalConstraint::NodalConstraint(), NodalScalarKernel::NodalScalarKernel(), NodalVariableValue::NodalVariableValue(), NumDOFs::NumDOFs(), NumNonlinearIterations::NumNonlinearIterations(), NumVars::NumVars(), ElementSideNeighborLayers::operator()(), ElementPointNeighbors::operator()(), RelationshipManager::operator==(), XDA::output(), SolutionHistory::output(), Exodus::output(), AdvancedOutput::outputElementalVariables(), AdvancedOutput::outputInput(), AdvancedOutput::outputNodalVariables(), AdvancedOutput::outputPostprocessors(), AdvancedOutput::outputScalarVariables(), AdvancedOutput::outputSystemInformation(), Console::outputVectorPostprocessors(), AdvancedOutput::outputVectorPostprocessors(), MooseObject::paramError(), PiecewiseBilinear::parse(), ParsedAddSideset::ParsedAddSideset(), ParsedAux::ParsedAux(), ParsedGenerateSideset::ParsedGenerateSideset(), ParsedODEKernel::ParsedODEKernel(), ParsedSubdomainMeshGenerator::ParsedSubdomainMeshGenerator(), ParsedSubdomainMeshModifier::ParsedSubdomainMeshModifier(), PetscExternalPartitioner::PetscExternalPartitioner(), PhysicsBasedPreconditioner::PhysicsBasedPreconditioner(), Piecewise::Piecewise(), PiecewiseBilinear::PiecewiseBilinear(), PiecewiseLinearInterpolationMaterial::PiecewiseLinearInterpolationMaterial(), PiecewiseMulticonstant::PiecewiseMulticonstant(), PiecewiseMultiInterpolation::PiecewiseMultiInterpolation(), SolutionUserObject::pointValueGradientWrapper(), SolutionUserObject::pointValueWrapper(), LStableDirk2::postResidual(), LStableDirk3::postResidual(), ImplicitMidpoint::postResidual(), ExplicitTVDRK2::postResidual(), LStableDirk4::postResidual(), AStableDirk4::postResidual(), ExplicitRK2::postResidual(), Predictor::Predictor(), SolutionUserObject::readExodusII(), SolutionUserObject::readXda(), EqualValueEmbeddedConstraint::reinitConstraint(), RelativeSolutionDifferenceNorm::RelativeSolutionDifferenceNorm(), RenameBlock::RenameBlock(), RenameBlockGenerator::RenameBlockGenerator(), RenameBoundaryGenerator::RenameBoundaryGenerator(), RinglebMesh::RinglebMesh(), RinglebMeshGenerator::RinglebMeshGenerator(), ScalarComponentIC::ScalarComponentIC(), BicubicSplineFunction::secondDerivative(), FEProblemBase::setCoordSystem(), PiecewiseBase::setData(), EigenProblem::setEigenproblemType(), Sampler::setNumberOfRequiedRandomSeeds(), Exodus::setOutputDimensionInExodusWriter(), Split::setup(), TransientMultiApp::setupApp(), TimeSequenceStepperBase::setupSequence(), Transient::setupTimeIntegrator(), SideSetsFromBoundingBoxGenerator::SideSetsFromBoundingBoxGenerator(), SideSetsFromNormals::SideSetsFromNormals(), SideSetsFromNormalsGenerator::SideSetsFromNormalsGenerator(), SideSetsFromPoints::SideSetsFromPoints(), SideSetsFromPointsGenerator::SideSetsFromPointsGenerator(), SolutionTimeAdaptiveDT::SolutionTimeAdaptiveDT(), SolutionUserObject::SolutionUserObject(), PicardSolve::solve(), ActuallyExplicitEuler::solve(), FullSolveMultiApp::solveStep(), UserObject::spatialValue(), SphericalAverage::SphericalAverage(), SpiralAnnularMesh::SpiralAnnularMesh(), SpiralAnnularMeshGenerator::SpiralAnnularMeshGenerator(), StitchedMesh::StitchedMesh(), NodalUserObject::subdomainSetup(), GeneralUserObject::subdomainSetup(), Constraint::subdomainSetup(), Console::systemInfoFlags(), Terminator::Terminator(), TestSetupPostprocessorDataActionFunction::TestSetupPostprocessorDataActionFunction(), ThreadedGeneralUserObject::ThreadedGeneralUserObject(), ThreadedGeneralUserObject::threadJoin(), DiscreteElementUserObject::threadJoin(), GeneralUserObject::threadJoin(), TiledMeshGenerator::TiledMeshGenerator(), Function::timeDerivative(), TimeExtremeValue::TimeExtremeValue(), TimePeriod::TimePeriod(), VectorPostprocessorVisualizationAux::timestepSetup(), MultiAppCopyTransfer::transfer(), MultiAppMeshFunctionTransfer::transferVariable(), FEProblemBase::uDotDotOldRequested(), FEProblemBase::uDotOldRequested(), EqualValueBoundaryConstraint::updateConstrainedNodes(), SolutionUserObject::updateExodusBracketingTimeIndices(), Axisymmetric2D3DSolutionFunction::value(), ValueRangeMarker::ValueRangeMarker(), ValueThresholdMarker::ValueThresholdMarker(), MultiAppTransfer::variableIntegrityCheck(), VariableTimeIntegrationAux::VariableTimeIntegrationAux(), VectorNodalBC::VectorNodalBC(), VectorOfPostprocessors::VectorOfPostprocessors(), VectorPostprocessorFunction::VectorPostprocessorFunction(), MooseParsedGradFunction::vectorValue(), MooseParsedFunction::vectorValue(), VolumeHistogram::VolumeHistogram(), VTKOutput::VTKOutput(), DOFMapOutput::writeStreamToFile(), and Console::writeStreamToFile().

144  {
145  std::ostringstream oss;
146  moose::internal::mooseStreamAll(oss, std::forward<Args>(args)...);
147  std::string msg = oss.str();
148  callMooseErrorRaw(msg, &_app);
149  }
void mooseStreamAll(std::ostringstream &ss)
All of the following are not meant to be called directly - they are called by the normal macros (moos...
Definition: MooseError.C:87
void callMooseErrorRaw(std::string &msg, MooseApp *app)
Definition: MooseObject.C:57
MooseApp & _app
The MooseApp this object is associated with.
Definition: MooseObject.h:174

◆ mooseInfo()

template<typename... Args>
void MooseObject::mooseInfo ( Args &&...  args) const
inlineinherited

◆ mooseWarning()

template<typename... Args>
void MooseObject::mooseWarning ( Args &&...  args) const
inlineinherited

◆ moveApp()

void MultiApp::moveApp ( unsigned int  global_app,
Point  p 
)
virtualinherited

Move the global_app to Point p.

Parameters
global_appThe global app number in question
pThe new position of the App.

Definition at line 567 of file MultiApp.C.

Referenced by MultiApp::preTransfer().

568 {
569  if (_use_positions)
570  {
571  _positions[global_app] = p;
572 
573  if (hasLocalApp(global_app))
574  {
575  unsigned int local_app = globalAppToLocal(global_app);
576 
578  _apps[local_app]->setOutputPosition(p);
579  }
580  }
581 }
bool hasLocalApp(unsigned int global_app)
Whether or not the given global app number is on this processor.
Definition: MultiApp.C:531
const bool _use_positions
Toggle use of "positions".
Definition: MultiApp.h:328
std::vector< std::shared_ptr< MooseApp > > _apps
Pointers to each of the Apps.
Definition: MultiApp.h:367
bool _output_in_position
Whether or not to move the output of the MultiApp into position.
Definition: MultiApp.h:385
std::vector< Point > _positions
The positions of all of the apps.
Definition: MultiApp.h:325
unsigned int globalAppToLocal(unsigned int global_app)
Map a global App number to the local number.
Definition: MultiApp.C:789

◆ name()

const std::string& MooseObject::name ( ) const
inlineinherited

Get the name of the object.

Returns
The name of the object

Definition at line 56 of file MooseObject.h.

Referenced by GridPartitioner::_do_partition(), FEProblemBase::addADJacobianMaterial(), FEProblemBase::addADResidualMaterial(), Executioner::addAttributeReporter(), DumpObjectsProblem::addAuxKernel(), FEProblemBase::addAuxKernel(), DumpObjectsProblem::addAuxScalarKernel(), FEProblemBase::addAuxScalarKernel(), DumpObjectsProblem::addBoundaryCondition(), FEProblemBase::addBoundaryCondition(), DumpObjectsProblem::addConstraint(), FEProblemBase::addConstraint(), FEProblemBase::addDamper(), DumpObjectsProblem::addDGKernel(), FEProblemBase::addDGKernel(), DumpObjectsProblem::addDiracKernel(), FEProblemBase::addDiracKernel(), FEProblemBase::addDistribution(), DumpObjectsProblem::addFunction(), FEProblemBase::addFunction(), FEProblemBase::addIndicator(), DumpObjectsProblem::addInitialCondition(), FEProblemBase::addInitialCondition(), DumpObjectsProblem::addInterfaceKernel(), FEProblemBase::addInterfaceKernel(), DumpObjectsProblem::addKernel(), FEProblemBase::addKernel(), FEProblemBase::addMarker(), DumpObjectsProblem::addMaterial(), FEProblemBase::addMaterial(), FEProblemBase::addMaterialHelper(), MooseMesh::addMortarInterface(), FEProblemBase::addMultiApp(), DumpObjectsProblem::addNodalKernel(), FEProblemBase::addNodalKernel(), FEProblemBase::addPostprocessor(), FEProblemBase::addPredictor(), FEProblemBase::addSampler(), DumpObjectsProblem::addScalarKernel(), FEProblemBase::addScalarKernel(), FEProblemBase::addTimeIntegrator(), FEProblemBase::addTransfer(), FEProblemBase::addUserObject(), FEProblemBase::addVectorPostprocessor(), Output::advancedExecuteOn(), MultiApp::appPostprocessorValue(), MultiApp::appProblem(), MultiApp::appProblemBase(), MultiApp::appUserObjectBase(), DerivativeParsedMaterialHelper::assembleDerivatives(), AStableDirk4::AStableDirk4(), Function::average(), BreakMeshByBlockGenerator::BreakMeshByBlockGenerator(), ChangeOverTimePostprocessor::ChangeOverTimePostprocessor(), FEProblemBase::checkDependMaterialsHelper(), Damper::checkMinDamping(), Material::checkStatefulSanity(), CompositeFunction::CompositeFunction(), Material::computeSubdomainProperties(), VectorPostprocessorVisualizationAux::computeValue(), AuxKernel::coupledCallback(), AuxKernel::coupledDot(), AuxKernel::coupledDotDu(), MultiApp::createApp(), FEProblemBase::declareVectorPostprocessorVector(), DOFMapOutput::demangle(), DerivativeSumMaterial::DerivativeSumMaterial(), DGKernel::DGKernel(), DumpObjectsProblem::dumpObjectHelper(), ElementValueSampler::ElementValueSampler(), MooseMesh::errorIfDistributedMesh(), AB2PredictorCorrector::estimateTimeError(), SolutionUserObject::evalMeshFunction(), SolutionUserObject::evalMeshFunctionGradient(), SolutionUserObject::evalMultiValuedMeshFunction(), SolutionUserObject::evalMultiValuedMeshFunctionGradient(), MultiAppPostprocessorTransfer::execute(), MultiAppPostprocessorInterpolationTransfer::execute(), MultiAppVariableValueSamplePostprocessorTransfer::execute(), StatisticsVectorPostprocessor::execute(), MultiAppPostprocessorToAuxScalarTransfer::execute(), MultiAppScalarToAuxScalarTransfer::execute(), MultiAppVariableValueSampleTransfer::execute(), PointValue::execute(), MultiAppInterpolationTransfer::execute(), MultiAppMeshFunctionTransfer::execute(), MultiAppUserObjectTransfer::execute(), MultiAppVectorPostprocessorTransfer::execute(), MultiAppNearestNodeTransfer::execute(), MultiAppProjectionTransfer::execute(), HistogramVectorPostprocessor::execute(), MultiAppCopyTransfer::execute(), Exodus::Exodus(), FileOutput::FileOutput(), MultiApp::fillPositions(), PointSamplerBase::finalize(), DerivativeParsedMaterialHelper::findMatPropDerivative(), FunctionDT::FunctionDT(), GeneralUserObject::GeneralUserObject(), LowerDBlockFromSidesetGenerator::generate(), StitchedMeshGenerator::generate(), Material::getADMaterialProperty(), MultiApp::getBoundingBox(), MooseObject::getCheckedPointerParam(), Control::getControllableParameterByName(), Control::getControllableValue(), Control::getControllableValueByName(), DistributionInterface::getDistribution(), FEProblemBase::getDistribution(), DistributionInterface::getDistributionByName(), MultiApp::getExecutioner(), OutputWarehouse::getFileNumbers(), FEProblemBase::getFunction(), SolutionUserObject::getLocalVarIndex(), Marker::getMarkerValue(), FEProblemBase::getMaterial(), NodalPatchRecovery::getMaterialProperty(), AuxKernel::getMaterialProperty(), Material::getMaterialProperty(), SubProblem::getMaterialPropertyBlockNames(), SubProblem::getMaterialPropertyBoundaryNames(), NodalPatchRecovery::getMaterialPropertyOld(), AuxKernel::getMaterialPropertyOld(), Material::getMaterialPropertyOld(), NodalPatchRecovery::getMaterialPropertyOlder(), AuxKernel::getMaterialPropertyOlder(), Material::getMaterialPropertyOlder(), MeshGenerator::getMesh(), MooseMesh::getMortarInterfaceByName(), OutputWarehouse::getOutput(), MooseObject::getParam(), GeneralUserObject::getPostprocessorValue(), AuxKernel::getPostprocessorValue(), FEProblemBase::getPostprocessorValue(), GeneralUserObject::getPostprocessorValueByName(), AuxKernel::getPostprocessorValueByName(), FEProblemBase::getPostprocessorValueOld(), FEProblemBase::getPostprocessorValueOlder(), FEProblemBase::getSampler(), AuxKernel::getScatterVectorPostprocessorValue(), FEProblemBase::getScatterVectorPostprocessorValue(), AuxKernel::getScatterVectorPostprocessorValueByName(), FEProblemBase::getScatterVectorPostprocessorValueOld(), Transient::getTimeStepperName(), AuxKernel::getUserObject(), InitialConditionBase::getUserObject(), FEProblemBase::getUserObject(), InitialConditionBase::getUserObjectBase(), AuxKernel::getUserObjectBase(), FEProblemBase::getUserObjectBase(), AuxKernel::getUserObjectByName(), InitialConditionBase::getUserObjectByName(), GeneralUserObject::getVectorPostprocessorValue(), AuxKernel::getVectorPostprocessorValue(), FEProblemBase::getVectorPostprocessorValue(), GeneralUserObject::getVectorPostprocessorValueByName(), AuxKernel::getVectorPostprocessorValueByName(), FEProblemBase::getVectorPostprocessorValueOld(), FEProblemBase::hasFunction(), AdvancedOutput::hasOutputHelper(), FEProblemBase::hasPostprocessor(), FEProblemBase::hasUserObject(), FEProblemBase::hasVectorPostprocessor(), FEProblemBase::init(), AdvancedOutput::initExecutionTypes(), AttribName::initFrom(), CSVReader::initialize(), StatisticsVectorPostprocessor::initialize(), HistogramVectorPostprocessor::initialize(), MultiAppProjectionTransfer::initialSetup(), DerivativeFunctionMaterialBase::initialSetup(), SolutionUserObject::initialSetup(), AdvancedOutput::initOutputList(), FEProblemBase::initPostprocessorData(), AdvancedOutput::initPostprocessorOrVectorPostprocessorLists(), Material::initStatefulProperties(), FEProblemBase::initVectorPostprocessorData(), Function::integral(), InterfaceKernel::InterfaceKernel(), MooseObject::isParamValid(), LinearCombinationFunction::LinearCombinationFunction(), Marker::Marker(), MatDiffusionBase< Real >::MatDiffusionBase(), MaterialDerivativeTestKernelBase< Real >::MaterialDerivativeTestKernelBase(), MaterialVectorPostprocessor::MaterialVectorPostprocessor(), Distribution::median(), MemoryUsageReporter::MemoryUsageReporter(), MeshSideSetGenerator::MeshSideSetGenerator(), ElementDeleterBase::modify(), MooseVariableInterface< Real >::MooseVariableInterface(), NearestPointBase< LayeredAverage >::NearestPointBase(), NodalValueSampler::NodalValueSampler(), NodalVariableValue::NodalVariableValue(), DOFMapOutput::output(), Output::Output(), AdvancedOutput::outputElementalVariables(), AdvancedOutput::outputInput(), AdvancedOutput::outputNodalVariables(), ConsoleUtils::outputOutputInformation(), Nemesis::outputPostprocessors(), Exodus::outputPostprocessors(), AdvancedOutput::outputPostprocessors(), AdvancedOutput::outputScalarVariables(), AdvancedOutput::outputSystemInformation(), AdvancedOutput::outputVectorPostprocessors(), ParsedAddSideset::ParsedAddSideset(), ParsedAux::ParsedAux(), ParsedGenerateSideset::ParsedGenerateSideset(), ParsedODEKernel::ParsedODEKernel(), ParsedSubdomainMeshGenerator::ParsedSubdomainMeshGenerator(), ParsedSubdomainMeshModifier::ParsedSubdomainMeshModifier(), PointSamplerBase::PointSamplerBase(), Registry::registerObjectsTo(), FEProblemBase::registerRandomInterface(), Material::resetQpProperties(), Sampler::Sampler(), ScalarComponentIC::ScalarComponentIC(), MooseMesh::setBoundaryName(), Control::setControllableValue(), Control::setControllableValueByName(), OutputWarehouse::setFileNumbers(), MooseMesh::setSubdomainName(), Split::setup(), TransientMultiApp::setupApp(), SideSetsFromNormalsGenerator::SideSetsFromNormalsGenerator(), SideSetsFromPointsGenerator::SideSetsFromPointsGenerator(), SideValueSampler::SideValueSampler(), TransientMultiApp::solveStep(), UserObject::spatialValue(), SphericalAverage::SphericalAverage(), StitchedMesh::StitchedMesh(), SubProblem::storeBoundaryDelayedCheckMatProp(), SubProblem::storeBoundaryMatPropName(), SubProblem::storeBoundaryZeroMatProp(), SubProblem::storeSubdomainDelayedCheckMatProp(), SubProblem::storeSubdomainMatPropName(), SubProblem::storeSubdomainZeroMatProp(), TaggingInterface::TaggingInterface(), ThreadedGeneralUserObject::ThreadedGeneralUserObject(), Function::timeDerivative(), VectorPostprocessorVisualizationAux::timestepSetup(), TransientMultiApp::TransientMultiApp(), MultiAppTransfer::variableIntegrityCheck(), and AdvancedOutput::wantOutput().

56 { return _name; }
const std::string & _name
The name of this object, reference to value stored in InputParameters.
Definition: MooseObject.h:180

◆ needsRestoration()

bool TransientMultiApp::needsRestoration ( )
overridevirtualinherited

Whether or not this MultiApp should be restored at the beginning of each Picard iteration.

Reimplemented from MultiApp.

Definition at line 567 of file TransientMultiApp.C.

◆ numBlocks()

unsigned int BlockRestrictable::numBlocks ( ) const
inherited

Return the number of blocks for this object.

Returns
The number of subdomains

Definition at line 173 of file BlockRestrictable.C.

174 {
175  return (unsigned int)_blk_ids.size();
176 }
std::set< SubdomainID > _blk_ids
Set of block ids supplied by the user via the input file (for error reporting)

◆ numGlobalApps()

unsigned int MultiApp::numGlobalApps ( )
inlineinherited
Returns
Number of Global Apps in this MultiApp

Definition at line 201 of file MultiApp.h.

201 { return _total_num_apps; }
unsigned int _total_num_apps
The total number of apps to simulate.
Definition: MultiApp.h:337

◆ numLocalApps()

unsigned int MultiApp::numLocalApps ( )
inlineinherited
Returns
Number of Apps on local processor.

Definition at line 206 of file MultiApp.h.

Referenced by MultiAppDTKUserObjectEvaluator::createSourceGeometry().

206 { return _apps.size(); }
std::vector< std::shared_ptr< MooseApp > > _apps
Pointers to each of the Apps.
Definition: MultiApp.h:367

◆ paramError()

template<typename... Args>
void MooseObject::paramError ( const std::string &  param,
Args...  args 
)
inlineinherited

Emits an error prefixed with the file and line number of the given param (from the input file) along with the full parameter path+name followed by the given args as the message.

If this object's parameters were not created directly by the Parser, then this function falls back to the normal behavior of mooseError - only printing a message using the given args.

Definition at line 105 of file MooseObject.h.

Referenced by ADIntegratedBCTempl< T, compute_stage >::ADIntegratedBCTempl(), ADKernelTempl< T, compute_stage >::ADKernelTempl(), DGKernel::DGKernel(), ElementValueSampler::ElementValueSampler(), StackGenerator::generate(), StitchedMeshGenerator::generate(), MultiApp::init(), IntegratedBC::IntegratedBC(), Kernel::Kernel(), NodalBC::NodalBC(), NodalEqualValueConstraint::NodalEqualValueConstraint(), NodalKernel::NodalKernel(), NodalValueSampler::NodalValueSampler(), RandomIC::RandomIC(), MultiAppCopyTransfer::transfer(), and TransientMultiApp::TransientMultiApp().

105  {
106  auto prefix = param + ": ";
107  if (!_pars.inputLocation(param).empty())
108  prefix = _pars.inputLocation(param) + ": (" + _pars.paramFullpath(param) + "):\n";
109  mooseError(prefix, args...);
110  }
void mooseError(Args &&... args) const
Definition: MooseObject.h:144
const std::string & inputLocation(const std::string &param) const
Get/set a string representing the location in the input text the parameter originated from (i...
const InputParameters & _pars
Parameters of this object, references the InputParameters stored in the InputParametersWarehouse.
Definition: MooseObject.h:171
const std::string & paramFullpath(const std::string &param) const
Get/set a string representing the full HIT parameter path from the input file (e.g.

◆ parameters()

const InputParameters& MooseObject::parameters ( ) const
inlineinherited

Get the parameters of the object.

Returns
The parameters of the object

Definition at line 62 of file MooseObject.h.

Referenced by FEProblemBase::addADJacobianMaterial(), FEProblemBase::addADResidualMaterial(), DumpObjectsProblem::addAuxKernel(), FEProblemBase::addAuxKernel(), DumpObjectsProblem::addAuxScalarKernel(), FEProblemBase::addAuxScalarKernel(), DumpObjectsProblem::addBoundaryCondition(), FEProblemBase::addBoundaryCondition(), DumpObjectsProblem::addConstraint(), FEProblemBase::addConstraint(), FEProblemBase::addDamper(), DumpObjectsProblem::addDGKernel(), FEProblemBase::addDGKernel(), DumpObjectsProblem::addDiracKernel(), FEProblemBase::addDiracKernel(), FEProblemBase::addDistribution(), DumpObjectsProblem::addFunction(), FEProblemBase::addFunction(), FEProblemBase::addIndicator(), DumpObjectsProblem::addInitialCondition(), FEProblemBase::addInitialCondition(), DumpObjectsProblem::addInterfaceKernel(), FEProblemBase::addInterfaceKernel(), DumpObjectsProblem::addKernel(), FEProblemBase::addKernel(), FEProblem::addLineSearch(), FEProblemBase::addMarker(), DumpObjectsProblem::addMaterial(), FEProblemBase::addMaterial(), FEProblemBase::addMaterialHelper(), FEProblemBase::addMultiApp(), DumpObjectsProblem::addNodalKernel(), FEProblemBase::addNodalKernel(), FEProblemBase::addOutput(), FEProblemBase::addPostprocessor(), FEProblemBase::addPredictor(), FEProblemBase::addSampler(), DumpObjectsProblem::addScalarKernel(), FEProblemBase::addScalarKernel(), FEProblemBase::addTimeIntegrator(), FEProblemBase::addTransfer(), FEProblemBase::addUserObject(), FEProblemBase::addVectorPostprocessor(), AdvancedOutput::AdvancedOutput(), assemble_l2(), Moose::assemble_matrix(), AuxKernel::AuxKernel(), AuxScalarKernel::AuxScalarKernel(), BoundsAux::BoundsAux(), LibmeshPartitioner::clone(), OversampleOutput::cloneMesh(), Moose::compute_bounds(), Moose::compute_jacobian(), Moose::compute_nearnullspace(), Moose::compute_nullspace(), Moose::compute_postcheck(), Moose::compute_transpose_nullspace(), Console::Console(), DumpObjectsProblem::deduceNecessaryParameters(), DumpObjectsProblem::dumpObjectHelper(), EigenProblem::EigenProblem(), Eigenvalue::Eigenvalue(), Executioner::Executioner(), Exodus::Exodus(), FEProblem::FEProblem(), GapValueAux::GapValueAux(), MooseObject::getCheckedPointerParam(), MooseMesh::init(), BlockRestrictable::initializeBlockRestrictable(), FEProblemBase::initNullSpaceVectors(), InterfaceKernel::InterfaceKernel(), isValid(), LayeredSideIntegral::LayeredSideIntegral(), MooseVariableInterface< Real >::MooseVariableInterface(), NearestPointBase< LayeredAverage >::NearestPointBase(), NodeFaceConstraint::NodeFaceConstraint(), PenetrationAux::PenetrationAux(), PiecewiseBilinear::PiecewiseBilinear(), PiecewiseLinearInterpolationMaterial::PiecewiseLinearInterpolationMaterial(), MultiAppProjectionTransfer::projectSolution(), RandomIC::RandomIC(), InputParameterWarehouse::removeInputParameters(), FEProblem::setInputParametersFEProblem(), FEProblemBase::setInputParametersFEProblem(), DumpObjectsProblem::stringifyParameters(), and Transient::Transient().

62 { return _pars; }
const InputParameters & _pars
Parameters of this object, references the InputParameters stored in the InputParametersWarehouse.
Definition: MooseObject.h:171

◆ paramInfo()

template<typename... Args>
void MooseObject::paramInfo ( const std::string &  param,
Args...  args 
)
inlineinherited

Emits an informational message prefixed with the file and line number of the given param (from the input file) along with the full parameter path+name followed by the given args as the message.

If this object's parameters were not created directly by the Parser, then this function falls back to the normal behavior of mooseInfo - only printing a message using the given args.

Definition at line 135 of file MooseObject.h.

Referenced by TransientMultiApp::TransientMultiApp().

136  {
137  auto prefix = param + ": ";
138  if (!_pars.inputLocation(param).empty())
139  prefix = _pars.inputLocation(param) + ": (" + _pars.paramFullpath(param) + "):\n";
140  mooseInfo(prefix, args...);
141  }
const std::string & inputLocation(const std::string &param) const
Get/set a string representing the location in the input text the parameter originated from (i...
const InputParameters & _pars
Parameters of this object, references the InputParameters stored in the InputParametersWarehouse.
Definition: MooseObject.h:171
void mooseInfo(Args &&... args) const
Definition: MooseObject.h:164
const std::string & paramFullpath(const std::string &param) const
Get/set a string representing the full HIT parameter path from the input file (e.g.

◆ paramWarning()

template<typename... Args>
void MooseObject::paramWarning ( const std::string &  param,
Args...  args 
)
inlineinherited

Emits a warning prefixed with the file and line number of the given param (from the input file) along with the full parameter path+name followed by the given args as the message.

If this object's parameters were not created directly by the Parser, then this function falls back to the normal behavior of mooseWarning - only printing a message using the given args.

Definition at line 119 of file MooseObject.h.

120  {
121  auto prefix = param + ": ";
122  if (!_pars.inputLocation(param).empty())
123  prefix = _pars.inputLocation(param) + ": (" + _pars.paramFullpath(param) + "):\n";
124  mooseWarning(prefix, args...);
125  }
void mooseWarning(Args &&... args) const
Definition: MooseObject.h:152
const std::string & inputLocation(const std::string &param) const
Get/set a string representing the location in the input text the parameter originated from (i...
const InputParameters & _pars
Parameters of this object, references the InputParameters stored in the InputParametersWarehouse.
Definition: MooseObject.h:171
const std::string & paramFullpath(const std::string &param) const
Get/set a string representing the full HIT parameter path from the input file (e.g.

◆ parentOutputPositionChanged()

void MultiApp::parentOutputPositionChanged ( )
virtualinherited

For apps outputting in position we need to change their output positions if their parent app moves.

Definition at line 584 of file MultiApp.C.

585 {
587  for (unsigned int i = 0; i < _apps.size(); i++)
588  _apps[i]->setOutputPosition(_app.getOutputPosition() + _positions[_first_local_app + i]);
589 }
const bool _use_positions
Toggle use of "positions".
Definition: MultiApp.h:328
std::vector< std::shared_ptr< MooseApp > > _apps
Pointers to each of the Apps.
Definition: MultiApp.h:367
Point getOutputPosition() const
Get the output position.
Definition: MooseApp.h:193
unsigned int _first_local_app
The number of the first app on this processor.
Definition: MultiApp.h:343
MooseApp & _app
The MooseApp this object is associated with.
Definition: MooseObject.h:174
bool _output_in_position
Whether or not to move the output of the MultiApp into position.
Definition: MultiApp.h:385
std::vector< Point > _positions
The positions of all of the apps.
Definition: MultiApp.h:325

◆ position()

Point MultiApp::position ( unsigned int  app)
inlineinherited

The physical position of a global App number.

Parameters
appThe global app number you want the position for.
Returns
the position

Definition at line 236 of file MultiApp.h.

Referenced by MultiAppDTKUserObjectEvaluator::evaluate(), MultiApp::fillPositions(), and MultiApp::getBoundingBox().

236 { return _positions[app]; }
std::vector< Point > _positions
The positions of all of the apps.
Definition: MultiApp.h:325

◆ postExecute()

void MultiApp::postExecute ( )
virtualinherited

Method called at the end of the simulation (after finalize)

Reimplemented in FullSolveMultiApp.

Definition at line 388 of file MultiApp.C.

389 {
390  for (const auto & app_ptr : _apps)
391  {
392  auto * executioner = app_ptr->getExecutioner();
393  mooseAssert(executioner, "Executioner is nullptr");
394 
395  executioner->postExecute();
396  }
397 }
std::vector< std::shared_ptr< MooseApp > > _apps
Pointers to each of the Apps.
Definition: MultiApp.h:367

◆ preExecute()

virtual void MultiApp::preExecute ( )
inlinevirtualinherited

Definition at line 63 of file MultiApp.h.

63 {}

◆ preRunInputFile()

void MultiApp::preRunInputFile ( )
protectedvirtualinherited

call back executed right before app->runInputFile()

Definition at line 799 of file MultiApp.C.

Referenced by MultiApp::createApp().

800 {
801 }

◆ preTransfer()

void MultiApp::preTransfer ( Real  dt,
Real  target_time 
)
virtualinherited

Gets called just before transfers are done to the MultiApp (Which is just before the MultiApp is solved)

Definition at line 346 of file MultiApp.C.

347 {
348  // First, see if any Apps need to be Reset
349  if (!_reset_happened && target_time + 1e-14 >= _reset_time)
350  {
351  _reset_happened = true;
352  for (auto & app : _reset_apps)
353  resetApp(app);
354  }
355 
356  // Now move any apps that should be moved
357  if (_use_positions && !_move_happened && target_time + 1e-14 >= _move_time)
358  {
359  _move_happened = true;
360  for (unsigned int i = 0; i < _move_apps.size(); i++)
362  }
363 }
std::vector< unsigned int > _reset_apps
The apps to be reset.
Definition: MultiApp.h:394
const bool _use_positions
Toggle use of "positions".
Definition: MultiApp.h:328
Real _move_time
The time at which to move apps.
Definition: MultiApp.h:400
std::vector< Point > _move_positions
The new positions for the apps to be moved.
Definition: MultiApp.h:406
bool _reset_happened
Whether or not apps have been reset.
Definition: MultiApp.h:397
bool _move_happened
Whether or not the move has happened.
Definition: MultiApp.h:409
Real _reset_time
The time at which to reset apps.
Definition: MultiApp.h:391
std::vector< unsigned int > _move_apps
The apps to be moved.
Definition: MultiApp.h:403
virtual void resetApp(unsigned int global_app, Real time=0.0)
"Reset" the App corresponding to the global App number passed in.
Definition: MultiApp.C:548
virtual void moveApp(unsigned int global_app, Point p)
Move the global_app to Point p.
Definition: MultiApp.C:567

◆ problemBase()

FEProblemBase& MultiApp::problemBase ( )
inlineinherited

Get the FEProblemBase this MultiApp is part of.

Definition at line 160 of file MultiApp.h.

160 { return _fe_problem; }
FEProblemBase & _fe_problem
The FEProblemBase this MultiApp is part of.
Definition: MultiApp.h:319

◆ resetApp()

void TransientMultiApp::resetApp ( unsigned int  global_app,
Real  time 
)
overridevirtualinherited

"Reset" the App corresponding to the global App number passed in.

"Reset" means that the App will be deleted and recreated. The time for the new App will be set to the current simulation time. This might be handy if some sub-app in your simulation needs to get replaced by a "new" piece of material.

Parameters
global_appThe global app number to reset.
timeThe time to set as the the time for the new app, this should really be the time the old app was at.

Reimplemented from MultiApp.

Definition at line 603 of file TransientMultiApp.C.

606 {
607  if (hasLocalApp(global_app))
608  {
609  unsigned int local_app = globalAppToLocal(global_app);
610 
611  // Grab the current time the App is at so we can start the new one at the same place
612  Real time =
613  _transient_executioners[local_app]->getTime() + _apps[local_app]->getGlobalTimeOffset();
614 
615  // Reset the Multiapp
616  MultiApp::resetApp(global_app, time);
617 
619 
620  // Setup the app, disable the output so that the initial condition does not output
621  // When an app is reset the initial condition was effectively already output before reset
622  FEProblemBase & problem = appProblemBase(local_app);
623  problem.allowOutput(false);
624  setupApp(local_app, time);
625  problem.allowOutput(true);
626  }
627 }
bool hasLocalApp(unsigned int global_app)
Whether or not the given global app number is on this processor.
Definition: MultiApp.C:531
std::vector< std::shared_ptr< MooseApp > > _apps
Pointers to each of the Apps.
Definition: MultiApp.h:367
void setupApp(unsigned int i, Real time=0.0)
Setup the executioner for the local app.
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
FEProblemBase & appProblemBase(unsigned int app)
Get the FEProblemBase for the global app is part of.
Definition: MultiApp.C:483
virtual void resetApp(unsigned int global_app, Real time=0.0)
"Reset" the App corresponding to the global App number passed in.
Definition: MultiApp.C:548
std::vector< Transient * > _transient_executioners
MPI_Comm & _my_comm
The MPI communicator this object is going to use.
Definition: MultiApp.h:352
void allowOutput(bool state)
Ability to enable/disable all output calls.
unsigned int globalAppToLocal(unsigned int global_app)
Map a global App number to the local number.
Definition: MultiApp.C:789

◆ residualSetup()

void SetupInterface::residualSetup ( )
virtualinherited

Gets called just before the residual is computed and before this object is asked to do its job.

Definition at line 57 of file SetupInterface.C.

58 {
59 }

◆ restore()

void TransientMultiApp::restore ( )
overridevirtualinherited

Restore the state of every Sub App.

This allows us to "Restore" this state later

Reimplemented from MultiApp.

Definition at line 180 of file TransientMultiApp.C.

181 {
182  // Must be restarting / recovering so hold off on restoring
183  // Instead - the restore will happen in createApp()
184  // Note that _backups was already populated by dataLoad()
185  if (_apps.empty())
186  return;
187 
189  {
191 
192  for (unsigned int i = 0; i < _my_num_apps; i++)
193  _end_solutions[i] =
195  }
196 
198 
200  {
201  for (unsigned int i = 0; i < _my_num_apps; i++)
203 
204  _end_solutions.clear();
205  }
206 }
virtual void restore()
Restore the state of every Sub App.
Definition: MultiApp.C:407
std::vector< std::shared_ptr< MooseApp > > _apps
Pointers to each of the Apps.
Definition: MultiApp.h:367
FEProblemBase & feProblem()
Return a reference to this Executioner&#39;s FEProblemBase instance.
Definition: Executioner.C:243
std::vector< std::unique_ptr< NumericVector< Real > > > _end_solutions
The solution from the end of the previous solve, this is cloned from the Nonlinear solution during re...
virtual NumericVector< Number > & solution() override
unsigned int _my_num_apps
The number of apps this object is involved in simulating.
Definition: MultiApp.h:340
virtual NonlinearSystem & getNonlinearSystem()
virtual Executioner * getExecutioner(unsigned int app)
Definition: MultiApp.C:366

◆ setupPositions()

void MultiApp::setupPositions ( )
inherited

Called just after construction to allow derived classes to set _positions;.

Definition at line 223 of file MultiApp.C.

Referenced by FEProblemBase::addMultiApp().

224 {
225  if (_use_positions)
226  {
227  fillPositions();
228  init(_positions.size());
229  }
230 }
const bool _use_positions
Toggle use of "positions".
Definition: MultiApp.h:328
virtual void fillPositions()
must fill in _positions with the positions of the sub-aps
Definition: MultiApp.C:252
void init(unsigned int num)
Initialize the MultiApp by creating the provided number of apps.
Definition: MultiApp.C:206
std::vector< Point > _positions
The positions of all of the apps.
Definition: MultiApp.h:325

◆ solveStep()

bool TransientMultiApp::solveStep ( Real  dt,
Real  target_time,
bool  auto_advance = true 
)
overridevirtualinherited

Re-solve all of the Apps.

Can be called multiple times to resolve the same timestep if auto_advance=false. Time is not actually advanced until advanceStep() is called.

Note that auto_advance=false might not be compatible with the options for the MultiApp

Returns
Whether or not all of the solves were successful (i.e. all solves made it to the target_time)

Implements MultiApp.

Definition at line 209 of file TransientMultiApp.C.

210 {
211  if (!_has_an_app)
212  return true;
213 
214  _auto_advance = auto_advance;
215 
216  _console << "Solving MultiApp " << name() << std::endl;
217 
218  // "target_time" must always be in global time
219  target_time += _app.getGlobalTimeOffset();
220 
222  bool return_value = true;
223 
224  // Make sure we swap back the communicator regardless of how this routine is exited
225  try
226  {
227  int rank;
228  int ierr;
229  ierr = MPI_Comm_rank(_communicator.get(), &rank);
230  mooseCheckMPIErr(ierr);
231 
232  for (unsigned int i = 0; i < _my_num_apps; i++)
233  {
235 
237 
238  // The App might have a different local time from the rest of the problem
239  Real app_time_offset = _apps[i]->getGlobalTimeOffset();
240 
241  // Maybe this MultiApp was already solved
242  if ((ex->getTime() + app_time_offset + 2e-14 >= target_time) ||
243  (ex->getTime() >= ex->endTime()))
244  continue;
245 
246  if (_sub_cycling)
247  {
248  Real time_old = ex->getTime() + app_time_offset;
249 
251  {
252  AuxiliarySystem & aux_system = problem.getAuxiliarySystem();
253  System & libmesh_aux_system = aux_system.system();
254 
255  NumericVector<Number> & solution = *libmesh_aux_system.solution;
256  NumericVector<Number> & transfer_old = libmesh_aux_system.get_vector("transfer_old");
257 
258  solution.close();
259 
260  // Save off the current auxiliary solution
261  transfer_old = solution;
262 
263  transfer_old.close();
264 
265  // Snag all of the local dof indices for all of these variables
266  AllLocalDofIndicesThread aldit(libmesh_aux_system, _transferred_vars);
267  ConstElemRange & elem_range = *problem.mesh().getActiveLocalElementRange();
268  Threads::parallel_reduce(elem_range, aldit);
269 
270  _transferred_dofs = aldit._all_dof_indices;
271  }
272 
273  // Disable/enable output for sub cycling
274  problem.allowOutput(_output_sub_cycles); // disables all outputs, including console
275  problem.allowOutput<Console>(_print_sub_cycles); // re-enables Console to print, if desired
276 
277  ex->setTargetTime(target_time - app_time_offset);
278 
279  // unsigned int failures = 0;
280 
281  bool at_steady = false;
282 
283  if (_first && !_app.isRecovering())
284  problem.advanceState();
285 
286  bool local_first = _first;
287 
288  // Now do all of the solves we need
289  while ((!at_steady && ex->getTime() + app_time_offset + 2e-14 < target_time) ||
290  !ex->lastSolveConverged())
291  {
292  if (local_first != true)
293  ex->incrementStepOrReject();
294 
295  local_first = false;
296 
297  ex->preStep();
298  ex->computeDT();
299 
301  {
302  // See what time this executioner is going to go to.
303  Real future_time = ex->getTime() + app_time_offset + ex->getDT();
304 
305  // How far along we are towards the target time:
306  Real step_percent = (future_time - time_old) / (target_time - time_old);
307 
308  Real one_minus_step_percent = 1.0 - step_percent;
309 
310  // Do the interpolation for each variable that was transferred to
312  AuxiliarySystem & aux_system = problem.getAuxiliarySystem();
313  System & libmesh_aux_system = aux_system.system();
314 
315  NumericVector<Number> & solution = *libmesh_aux_system.solution;
316  NumericVector<Number> & transfer = libmesh_aux_system.get_vector("transfer");
317  NumericVector<Number> & transfer_old = libmesh_aux_system.get_vector("transfer_old");
318 
319  solution.close(); // Just to be sure
320  transfer.close();
321  transfer_old.close();
322 
323  for (const auto & dof : _transferred_dofs)
324  {
325  solution.set(dof,
326  (transfer_old(dof) * one_minus_step_percent) +
327  (transfer(dof) * step_percent));
328  // solution.set(dof, transfer_old(dof));
329  // solution.set(dof, transfer(dof));
330  // solution.set(dof, 1);
331  }
332 
333  solution.close();
334  }
335 
336  ex->takeStep();
337 
338  bool converged = ex->lastSolveConverged();
339 
340  if (!converged)
341  {
342  mooseWarning(
343  "While sub_cycling ", name(), _first_local_app + i, " failed to converge!\n");
344 
345  _failures++;
346 
347  if (_failures > _max_failures)
348  {
349  std::stringstream oss;
350  oss << "While sub_cycling " << name() << _first_local_app << i << " REALLY failed!";
351  throw MultiAppSolveFailure(oss.str());
352  }
353  }
354 
355  Real solution_change_norm = ex->getSolutionChangeNorm();
356 
358  _console << "Solution change norm: " << solution_change_norm << std::endl;
359 
360  if (converged && _detect_steady_state && solution_change_norm < _steady_state_tol)
361  {
362  _console << "Detected Steady State! Fast-forwarding to " << target_time << std::endl;
363 
364  at_steady = true;
365 
366  // Indicate that the next output call (occurs in ex->endStep()) should output,
367  // regardless of intervals etc...
368  problem.forceOutput();
369 
370  // Clean up the end
371  ex->endStep(target_time - app_time_offset);
372  ex->postStep();
373  }
374  else
375  {
376  ex->endStep();
377  ex->postStep();
378  }
379  }
380 
381  // If we were looking for a steady state, but didn't reach one, we still need to output one
382  // more time, regardless of interval
383  if (!at_steady)
384  problem.outputStep(EXEC_FORCED);
385 
386  } // sub_cycling
387  else if (_tolerate_failure)
388  {
389  ex->takeStep(dt);
390  ex->endStep(target_time - app_time_offset);
391  ex->postStep();
392  }
393  else
394  {
395  if (_first && !_app.isRecovering())
396  problem.advanceState();
397 
398  if (auto_advance)
399  problem.allowOutput(true);
400 
401  ex->takeStep(dt);
402 
403  if (auto_advance)
404  {
405  ex->endStep();
406  ex->postStep();
407 
408  if (!ex->lastSolveConverged())
409  {
410  mooseWarning(name(), _first_local_app + i, " failed to converge!\n");
411 
412  if (_catch_up)
413  {
414  _console << "Starting Catch Up!" << std::endl;
415 
416  bool caught_up = false;
417 
418  unsigned int catch_up_step = 0;
419 
420  Real catch_up_dt = dt / 2;
421 
422  while (!caught_up && catch_up_step < _max_catch_up_steps)
423  {
424  _console << "Solving " << name() << " catch up step " << catch_up_step << std::endl;
425  ex->incrementStepOrReject();
426 
427  ex->computeDT();
428  ex->takeStep(catch_up_dt); // Cut the timestep in half to try two half-step solves
429  ex->endStep();
430 
431  if (ex->lastSolveConverged())
432  {
433  if (ex->getTime() + app_time_offset +
434  (ex->timestepTol() * std::abs(ex->getTime())) >=
435  target_time)
436  {
437  problem.outputStep(EXEC_FORCED);
438  caught_up = true;
439  }
440  }
441  else
442  catch_up_dt /= 2.0;
443 
444  ex->postStep();
445 
446  catch_up_step++;
447  }
448 
449  if (!caught_up)
450  throw MultiAppSolveFailure(name() + " Failed to catch up!\n");
451  }
452  }
453  }
454  else // auto_advance == false
455  {
456  if (!ex->lastSolveConverged())
457  {
458  // Even if we don't allow auto_advance - we can still catch up to the current time if
459  // possible
460  if (_catch_up)
461  {
462  _console << "Starting Catch Up!" << std::endl;
463 
464  bool caught_up = false;
465 
466  unsigned int catch_up_step = 0;
467 
468  Real catch_up_dt = dt / 2;
469 
470  // Note: this loop will _break_ if target_time is satisfied
471  while (catch_up_step < _max_catch_up_steps)
472  {
473  _console << "Solving " << name() << " catch up step " << catch_up_step << std::endl;
474  ex->incrementStepOrReject();
475 
476  ex->computeDT();
477  ex->takeStep(catch_up_dt); // Cut the timestep in half to try two half-step solves
478 
479  // This is required because we can't call endStep() yet
480  // (which normally increments time)
481  Real current_time = ex->getTime() + ex->getDT();
482 
483  if (ex->lastSolveConverged())
484  {
485  if (current_time + app_time_offset +
486  (ex->timestepTol() * std::abs(current_time)) >=
487  target_time)
488  {
489  caught_up = true;
490  break; // break here so that we don't run endStep() or postStep() since this
491  // MultiApp should NOT be auto_advanced
492  }
493  }
494  else
495  catch_up_dt /= 2.0;
496 
497  ex->endStep();
498  ex->postStep();
499 
500  catch_up_step++;
501  }
502 
503  if (!caught_up)
504  throw MultiAppSolveFailure(name() + " Failed to catch up!\n");
505  }
506  else
507  throw MultiAppSolveFailure(name() + " failed to converge");
508  }
509  }
510  }
511 
512  // Re-enable all output (it may of been disabled by sub-cycling)
513  problem.allowOutput(true);
514  }
515 
516  _first = false;
517 
518  _console << "Successfully Solved MultiApp " << name() << "." << std::endl;
519  }
520  catch (MultiAppSolveFailure & e)
521  {
522  mooseWarning(e.what());
523  _console << "Failed to Solve MultiApp " << name() << ", attempting to recover." << std::endl;
524  return_value = false;
525  }
526 
527  _transferred_vars.clear();
528 
529  return return_value;
530 }
Utility class for catching solve failure errors so that MOOSE can recover state before continuing...
virtual Real getDT()
Definition: Transient.C:541
ConstElemRange * getActiveLocalElementRange()
Return pointers to range objects for various types of ranges (local nodes, boundary elems...
Definition: MooseMesh.C:738
Transient executioners usually loop through a number of timesteps...
Definition: Transient.h:31
MetaPhysicL::DualNumber< T, D > abs(const MetaPhysicL::DualNumber< T, D > &in)
bool _print_sub_cycles
Flag for toggling console output on sub cycles.
const ExecFlagType EXEC_FORCED
virtual void setTargetTime(Real target_time)
Can be used to set the next "target time" which is a time to nail perfectly.
Definition: Transient.C:611
void mooseWarning(Args &&... args) const
Definition: MooseObject.h:152
virtual void computeDT()
Definition: Transient.C:336
An output object for writing to the console (screen)
Definition: Console.h:25
unsigned int _max_failures
std::vector< std::shared_ptr< MooseApp > > _apps
Pointers to each of the Apps.
Definition: MultiApp.h:367
virtual void endStep(Real input_time=-1.0)
Definition: Transient.C:433
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
virtual Real getTime()
Get the current time.
Definition: Transient.h:98
Grab all the local dof indices for the variables passed in, in the system passed in.
virtual void advanceState()
Advance all of the state holding vectors / datastructures so that we can move to the next timestep...
virtual void takeStep(Real input_dt=-1.0)
Do whatever is necessary to advance one step.
Definition: Transient.C:391
virtual bool lastSolveConverged() const override
Whether or not the last solve converged.
Definition: Transient.C:593
std::set< dof_id_type > _transferred_dofs
The DoFs associated with all of the currently transferred variables.
FEProblemBase & appProblemBase(unsigned int app)
Get the FEProblemBase for the global app is part of.
Definition: MultiApp.C:483
void forceOutput()
Indicates that the next call to outputStep should be forced.
bool & _first
Is it our first time through the execution loop?
virtual void incrementStepOrReject()
This is where the solve step is actually incremented.
Definition: Transient.C:342
std::vector< std::string > _transferred_vars
The variables that have been transferred to. Used when doing transfer interpolation. This will be cleared after each solve.
AuxiliarySystem & getAuxiliarySystem()
std::vector< Transient * > _transient_executioners
unsigned int _my_num_apps
The number of apps this object is involved in simulating.
Definition: MultiApp.h:340
bool _has_an_app
Whether or not this processor as an App at all
Definition: MultiApp.h:412
unsigned int _first_local_app
The number of the first app on this processor.
Definition: MultiApp.h:343
Real & endTime()
Get the end time.
Definition: Transient.h:167
Real & timestepTol()
Get the timestep tolerance.
Definition: Transient.h:173
unsigned int _failures
virtual System & system() override
Get the reference to the libMesh system.
MooseApp & _app
The MooseApp this object is associated with.
Definition: MooseObject.h:174
virtual MooseMesh & mesh() override
const std::string & name() const
Get the name of the object.
Definition: MooseObject.h:56
virtual void preStep()
Definition: Transient.C:276
ierr
const ConsoleStream _console
An instance of helper class to write streams to the Console objects.
virtual void postStep()
Definition: Transient.C:282
bool isRecovering() const
Whether or not this is a "recover" calculation.
Definition: MooseApp.C:853
Real getGlobalTimeOffset() const
Each App has it&#39;s own local time.
Definition: MooseApp.h:223
MPI_Comm & _my_comm
The MPI communicator this object is going to use.
Definition: MultiApp.h:352
A system that holds auxiliary variables.
void allowOutput(bool state)
Ability to enable/disable all output calls.
virtual void outputStep(ExecFlagType type)
Output the current step.
Real getSolutionChangeNorm()
Get the Relative L2 norm of the change in the solution.
Definition: Transient.C:617

◆ subdomainSetup()

void SetupInterface::subdomainSetup ( )
virtualinherited

Gets called when the subdomain changes (i.e.

in a Jacobian or residual loop) and before this object is asked to do its job

Reimplemented in Material, Constraint, GeneralUserObject, NodalUserObject, and ThreadedGeneralUserObject.

Definition at line 62 of file SetupInterface.C.

63 {
64 }

◆ timestepSetup()

void SetupInterface::timestepSetup ( )
virtualinherited

Gets called at the beginning of the timestep before this object is asked to do its job.

Reimplemented in SolutionUserObject, Console, VectorPostprocessorVisualizationAux, NumNonlinearIterations, EqualValueEmbeddedConstraint, VectorMemoryUsage, and MemoryUsage.

Definition at line 47 of file SetupInterface.C.

48 {
49 }

◆ type()

const std::string& MooseObject::type ( ) const
inlineinherited

Get the type of this object.

Returns
the name of the type of this object

Definition at line 50 of file MooseObject.h.

Referenced by DumpObjectsProblem::addAuxKernel(), DumpObjectsProblem::addAuxScalarKernel(), FEProblemBase::addAuxScalarVariable(), DumpObjectsProblem::addAuxVariable(), DisplacedProblem::addAuxVariable(), FEProblemBase::addAuxVariable(), DumpObjectsProblem::addBoundaryCondition(), DumpObjectsProblem::addConstraint(), DumpObjectsProblem::addDGKernel(), DumpObjectsProblem::addDiracKernel(), FEProblemBase::addDistribution(), DumpObjectsProblem::addFunction(), FEProblemBase::addFunction(), DumpObjectsProblem::addInitialCondition(), DumpObjectsProblem::addInterfaceKernel(), DumpObjectsProblem::addKernel(), DumpObjectsProblem::addMaterial(), DumpObjectsProblem::addNodalKernel(), FEProblemBase::addPredictor(), FEProblemBase::addSampler(), DumpObjectsProblem::addScalarKernel(), FEProblemBase::addScalarVariable(), PhysicsBasedPreconditioner::addSystem(), FEProblemBase::addTimeIntegrator(), DumpObjectsProblem::addVariable(), DisplacedProblem::addVariable(), FEProblemBase::addVariable(), FEProblemBase::advanceMultiApps(), FEProblemBase::backupMultiApps(), MooseMesh::buildRefinementAndCoarseningMaps(), FEProblemBase::computeAuxiliaryKernels(), ElemElemConstraint::computeElemNeighJacobian(), InterfaceKernel::computeElemNeighJacobian(), DGKernel::computeElemNeighJacobian(), ElemElemConstraint::computeElemNeighResidual(), InterfaceKernel::computeElemNeighResidual(), DGKernel::computeElemNeighResidual(), FEProblemBase::computeMultiAppsDT(), InterfaceKernel::computeOffDiagElemNeighJacobian(), DGKernel::computeOffDiagElemNeighJacobian(), DGConvection::computeQpJacobian(), CoupledTiedValueConstraint::computeQpJacobian(), TiedValueConstraint::computeQpJacobian(), DGDiffusion::computeQpJacobian(), LinearNodalConstraint::computeQpJacobian(), EqualValueBoundaryConstraint::computeQpJacobian(), EqualValueEmbeddedConstraint::computeQpJacobian(), CoupledTiedValueConstraint::computeQpOffDiagJacobian(), EqualValueEmbeddedConstraint::computeQpOffDiagJacobian(), DGConvection::computeQpResidual(), CoupledTiedValueConstraint::computeQpResidual(), TiedValueConstraint::computeQpResidual(), LinearNodalConstraint::computeQpResidual(), DGDiffusion::computeQpResidual(), EqualValueBoundaryConstraint::computeQpResidual(), EqualValueEmbeddedConstraint::computeQpResidual(), FEProblemBase::computeUserObjects(), DisplacedProblem::createQRules(), FEProblemBase::createQRules(), DumpObjectsProblem::deduceNecessaryParameters(), DumpObjectsProblem::dumpObjectHelper(), FEProblemBase::duplicateVariableCheck(), FEProblemBase::execMultiApps(), FEProblemBase::execMultiAppTransfers(), FEProblemBase::execTransfers(), FEProblemBase::finishMultiAppStep(), ElementSubdomainIDGenerator::generate(), ElementGenerator::getElemType(), FEProblemBase::getMaterial(), FEProblemBase::getMaterialData(), FEProblemBase::getTransfers(), FEProblemBase::hasMultiApps(), AdvancedOutput::hasOutput(), FEProblemBase::incrementMultiAppTStep(), AdvancedOutput::initAvailableLists(), SolutionUserObject::initialSetup(), AdvancedOutput::initShowHideLists(), AssignElementSubdomainID::modify(), ControlOutput::output(), Gnuplot::output(), CSV::output(), Exodus::output(), Console::output(), Nemesis::output(), AdvancedOutput::output(), OversampleOutput::outputStep(), Output::outputStep(), FEProblemBase::outputStep(), FEProblemBase::restoreMultiApps(), FEProblemBase::setCoupling(), PerfGraphOutput::shouldOutput(), FileOutput::shouldOutput(), Output::shouldOutput(), AdvancedOutput::shouldOutput(), DisplacedProblem::updateGeomSearch(), FEProblemBase::updateGeomSearch(), and AdvancedOutput::wantOutput().

50 { return _type; }
const std::string & _type
The type of this object (the Class name)
Definition: MooseObject.h:177

Member Data Documentation

◆ _app

MooseApp& MooseObject::_app
protectedinherited

The MooseApp this object is associated with.

Definition at line 174 of file MooseObject.h.

Referenced by GridPartitioner::_do_partition(), AB2PredictorCorrector::AB2PredictorCorrector(), Executioner::addAttributeReporter(), FEProblemBase::addMaterialHelper(), FEProblemBase::addMultiApp(), FEProblemBase::addOutput(), FEProblemBase::allowOutput(), AStableDirk4::AStableDirk4(), AlgebraicRelationshipManager::attachAlgebraicFunctorHelper(), RelationshipManager::attachRelationshipManagers(), ElementSideNeighborLayers::attachRelationshipManagersInternal(), ElementPointNeighbors::attachRelationshipManagersInternal(), FileMesh::buildMesh(), MeshGeneratorMesh::buildMesh(), MooseMesh::buildMeshBaseObject(), FEProblemBase::checkNonlinearConvergence(), OversampleOutput::cloneMesh(), FEProblemBase::computeJacobianTags(), FEProblemBase::computeResidualTags(), Console::Console(), TimeStepper::constrainStep(), MultiApp::createApp(), DumpObjectsProblem::dumpObjectHelper(), DumpObjectsProblem::dumpVariableHelper(), EigenExecutionerBase::EigenExecutionerBase(), EigenKernel::EigenKernel(), NonlinearEigen::execute(), InversePowerMethod::execute(), Transient::execute(), Steady::execute(), FileOutput::FileOutput(), FEProblemBase::forceOutput(), MeshGenerator::getMesh(), MeshGenerator::getMeshByName(), MooseObject::getMooseApp(), InversePowerMethod::init(), NonlinearEigen::init(), Transient::init(), Steady::init(), MooseMesh::init(), NumPicardIterations::initialize(), TimePeriod::initialSetup(), Console::initialSetup(), MultiApp::initialSetup(), FEProblemBase::initialSetup(), AdvancedOutput::initOutputList(), FEProblemBase::initPetscOutput(), AdvancedOutput::initPostprocessorOrVectorPostprocessorLists(), InversePowerMethod::InversePowerMethod(), MooseObject::mooseError(), NonlinearEigen::NonlinearEigen(), EigenExecutionerBase::normalizeSolution(), PerfGraphOutput::output(), Tecplot::output(), Exodus::output(), Nemesis::output(), ControlOutput::outputActiveObjects(), ControlOutput::outputChangedControls(), ControlOutput::outputControls(), Exodus::outputEmptyTimestep(), Console::outputInput(), Exodus::outputInput(), Exodus::outputNodalVariables(), OversampleOutput::outputStep(), Output::outputStep(), FEProblemBase::outputStep(), Console::outputSystemInformation(), MultiApp::parentOutputPositionChanged(), PerformanceData::PerformanceData(), PetscOutput::petscLinearOutput(), PetscOutput::petscNonlinearOutput(), FEProblemBase::projectSolution(), FEProblemBase::setRestartFile(), TransientMultiApp::setupApp(), TimeSequenceStepperBase::setupSequence(), Transient::setupTimeIntegrator(), TransientMultiApp::solveStep(), FEProblemBase::subdomainSetup(), FEProblemBase::theWarehouse(), TimeExtremeValue::TimeExtremeValue(), TimePeriod::TimePeriod(), FEProblemBase::timestepSetup(), Transient::Transient(), and Console::write().

◆ _app_type

std::string MultiApp::_app_type
protectedinherited

The type of application to build.

Definition at line 322 of file MultiApp.h.

Referenced by MultiApp::createApp(), and MultiApp::initialSetup().

◆ _apps

std::vector<std::shared_ptr<MooseApp> > MultiApp::_apps
protectedinherited

◆ _backups

SubAppBackups& MultiApp::_backups
protectedinherited

Backups for each local App.

Definition at line 415 of file MultiApp.h.

Referenced by MultiApp::backup(), MultiApp::createApp(), MultiApp::init(), and MultiApp::restore().

◆ _blk_material_data

std::shared_ptr<MaterialData> BlockRestrictable::_blk_material_data
protectedinherited

Pointer to the MaterialData class for this object.

Definition at line 198 of file BlockRestrictable.h.

Referenced by BlockRestrictable::hasBlockMaterialProperty(), and BlockRestrictable::initializeBlockRestrictable().

◆ _bounding_box

std::vector<BoundingBox> MultiApp::_bounding_box
protectedinherited

This multi-app's bounding box.

Definition at line 373 of file MultiApp.h.

Referenced by MultiApp::getBoundingBox(), and MultiApp::init().

◆ _bounding_box_padding

Point MultiApp::_bounding_box_padding
protectedinherited

Additional padding added to the bounding box, useful for 1D meshes.

Definition at line 379 of file MultiApp.h.

Referenced by MultiApp::getBoundingBox().

◆ _cli_args

const std::vector<std::string>& MultiApp::_cli_args
protectedinherited

Storage for command line arguments.

Definition at line 418 of file MultiApp.h.

Referenced by MultiApp::createApp(), and MultiApp::init().

◆ _console

const ConsoleStream ConsoleStreamInterface::_console
inherited

An instance of helper class to write streams to the Console objects.

Definition at line 32 of file ConsoleStreamInterface.h.

Referenced by IterationAdaptiveDT::acceptStep(), SetupRecoverFileBaseAction::act(), Adaptivity::adaptMesh(), FEProblemBase::adaptMesh(), SimplePredictor::apply(), FEProblemBase::backupMultiApps(), FEProblemBase::checkProblemIntegrity(), IterationAdaptiveDT::computeAdaptiveDT(), Transient::computeConstrainedDT(), NonlinearSystemBase::computeDamping(), IterationAdaptiveDT::computeDT(), IterationAdaptiveDT::computeFailedDT(), IterationAdaptiveDT::computeInterpolationDT(), FEProblemBase::computeResidualTags(), IterationAdaptiveDT::constrainStep(), TimeStepper::constrainStep(), FEProblemBase::execMultiApps(), FEProblemBase::execMultiAppTransfers(), MultiAppPostprocessorTransfer::execute(), MultiAppPostprocessorInterpolationTransfer::execute(), MultiAppVariableValueSamplePostprocessorTransfer::execute(), MultiAppPostprocessorToAuxScalarTransfer::execute(), MultiAppScalarToAuxScalarTransfer::execute(), MultiAppVariableValueSampleTransfer::execute(), MultiAppInterpolationTransfer::execute(), MultiAppUserObjectTransfer::execute(), MultiAppMeshFunctionTransfer::execute(), MultiAppNearestNodeTransfer::execute(), MultiAppProjectionTransfer::execute(), MultiAppVectorPostprocessorTransfer::execute(), MultiAppCopyTransfer::execute(), Steady::execute(), MultiAppDTKUserObjectTransfer::execute(), ActionWarehouse::executeActionsWithAction(), ActionWarehouse::executeAllActions(), FEProblemBase::FEProblemBase(), ElementQualityChecker::finalize(), FEProblemBase::finishMultiAppStep(), MultiApp::globalAppToLocal(), InversePowerMethod::init(), NonlinearEigen::init(), Steady::init(), FEProblemBase::initialAdaptMesh(), FEProblemBase::initialSetup(), EigenExecutionerBase::inversePowerIteration(), Transient::keepGoing(), IterationAdaptiveDT::limitDTByFunction(), IterationAdaptiveDT::limitDTToPostprocessorValue(), EigenExecutionerBase::makeBXConsistent(), Console::meshChanged(), MooseObject::mooseDeprecated(), MooseObject::mooseInfo(), MooseObject::mooseWarning(), PerfGraphOutput::output(), DOFMapOutput::output(), VariableResidualNormsDebugOutput::output(), Console::output(), ControlOutput::outputActiveObjects(), ControlOutput::outputChangedControls(), ControlOutput::outputControls(), Console::outputInput(), Console::outputPostprocessors(), Console::outputScalarVariables(), Console::outputSystemInformation(), FEProblemBase::possiblyRebuildGeomSearchPatches(), EigenExecutionerBase::postExecute(), AB2PredictorCorrector::postSolve(), ActionWarehouse::printActionDependencySets(), EigenExecutionerBase::printEigenvalue(), MaterialPropertyDebugOutput::printMaterialMap(), SolutionTimeAdaptiveDT::rejectStep(), DT2::rejectStep(), FEProblemBase::restoreMultiApps(), SimplePredictor::shouldApply(), NonlinearSystem::solve(), PicardSolve::solve(), LStableDirk2::solve(), LStableDirk3::solve(), ImplicitMidpoint::solve(), ExplicitTVDRK2::solve(), AStableDirk4::solve(), LStableDirk4::solve(), ExplicitRK2::solve(), TransientMultiApp::solveStep(), PicardSolve::solveStep(), DT2::step(), AB2PredictorCorrector::step(), NonlinearEigen::takeStep(), Console::writeTimestepInformation(), Console::writeVariableNorms(), and FEProblemBase::~FEProblemBase().

◆ _current_execute_flag

const ExecFlagType& SetupInterface::_current_execute_flag
protectedinherited

Reference to FEProblemBase.

Definition at line 98 of file SetupInterface.h.

◆ _enabled

const bool& MooseObject::_enabled
protectedinherited

Reference to the "enable" InputParaemters, used by Controls for toggling on/off MooseObjects.

Definition at line 183 of file MooseObject.h.

Referenced by MooseObject::enabled().

◆ _exec_flags

const std::vector<ExecFlagType> SetupInterface::_exec_flags
protectedinherited

(DEPRECATED) execution flag (when is the object executed/evaluated) TODO: ExecFlagType

Definition at line 95 of file SetupInterface.h.

Referenced by SetupInterface::execBitFlags(), MultiAppTransfer::execFlags(), and SetupInterface::execFlags().

◆ _execute_enum

const ExecFlagEnum& SetupInterface::_execute_enum
protectedinherited

Execute settings for this oejct.

Definition at line 92 of file SetupInterface.h.

Referenced by ChangeOverTimePostprocessor::ChangeOverTimePostprocessor(), and SetupInterface::getExecuteOnEnum().

◆ _fe_problem

FEProblemBase& MultiApp::_fe_problem
protectedinherited

The FEProblemBase this MultiApp is part of.

Definition at line 319 of file MultiApp.h.

Referenced by MultiApp::createApp(), fillPositions(), and MultiApp::problemBase().

◆ _first_local_app

unsigned int MultiApp::_first_local_app
protectedinherited

◆ _global_time_offset

const Real MultiApp::_global_time_offset
protectedinherited

The offset time so the MultiApp local time relative to the global time.

Definition at line 388 of file MultiApp.h.

Referenced by MultiApp::initialSetup().

◆ _has_an_app

bool MultiApp::_has_an_app
protectedinherited

◆ _has_bounding_box

std::vector<bool> MultiApp::_has_bounding_box
protectedinherited

Flag if this multi-app computed its bounding box (valid only for non-displaced meshes)

Definition at line 370 of file MultiApp.h.

Referenced by MultiApp::getBoundingBox(), and MultiApp::init().

◆ _inflation

Real MultiApp::_inflation
protectedinherited

Relative bounding box inflation.

Definition at line 376 of file MultiApp.h.

Referenced by MultiApp::getBoundingBox().

◆ _input_files

std::vector<FileName> MultiApp::_input_files
protectedinherited

The input file for each app's simulation.

Definition at line 331 of file MultiApp.h.

Referenced by MultiApp::createApp(), and MultiApp::fillPositions().

◆ _max_procs_per_app

unsigned int MultiApp::_max_procs_per_app
protectedinherited

Maximum number of processors to give to each app.

Definition at line 382 of file MultiApp.h.

Referenced by MultiApp::buildComm().

◆ _move_apps

std::vector<unsigned int> MultiApp::_move_apps
protectedinherited

The apps to be moved.

Definition at line 403 of file MultiApp.h.

Referenced by MultiApp::fillPositions(), and MultiApp::preTransfer().

◆ _move_happened

bool MultiApp::_move_happened
protectedinherited

Whether or not the move has happened.

Definition at line 409 of file MultiApp.h.

Referenced by MultiApp::preTransfer().

◆ _move_positions

std::vector<Point> MultiApp::_move_positions
protectedinherited

The new positions for the apps to be moved.

Definition at line 406 of file MultiApp.h.

Referenced by MultiApp::fillPositions(), and MultiApp::preTransfer().

◆ _move_time

Real MultiApp::_move_time
protectedinherited

The time at which to move apps.

Definition at line 400 of file MultiApp.h.

Referenced by MultiApp::preTransfer().

◆ _my_comm

MPI_Comm& MultiApp::_my_comm
protectedinherited

◆ _my_communicator

libMesh::Parallel::Communicator MultiApp::_my_communicator
protectedinherited

The communicator object that holds the MPI_Comm that we're going to use.

Definition at line 349 of file MultiApp.h.

Referenced by MultiApp::buildComm().

◆ _my_num_apps

unsigned int MultiApp::_my_num_apps
protectedinherited

◆ _my_rank

int MultiApp::_my_rank
protectedinherited

The mpi "rank" of this processor in the sub communicator.

Definition at line 364 of file MultiApp.h.

Referenced by MultiApp::buildComm(), and MultiApp::isRootProcessor().

◆ _name

const std::string& MooseObject::_name
protectedinherited

◆ _node_name

std::string MultiApp::_node_name
protectedinherited

Node Name.

Definition at line 361 of file MultiApp.h.

Referenced by MultiApp::buildComm().

◆ _orig_comm

const MPI_Comm& MultiApp::_orig_comm
protectedinherited

The original comm handle.

Definition at line 346 of file MultiApp.h.

◆ _orig_num_procs

int MultiApp::_orig_num_procs
protectedinherited

The number of processors in the original comm.

Definition at line 355 of file MultiApp.h.

Referenced by MultiApp::buildComm().

◆ _orig_rank

int MultiApp::_orig_rank
protectedinherited

◆ _output_base

std::string MultiApp::_output_base
protectedinherited

The output file basename for each multiapp.

Definition at line 334 of file MultiApp.h.

◆ _output_in_position

bool MultiApp::_output_in_position
protectedinherited

Whether or not to move the output of the MultiApp into position.

Definition at line 385 of file MultiApp.h.

Referenced by MultiApp::moveApp(), and MultiApp::parentOutputPositionChanged().

◆ _pars

const InputParameters& MooseObject::_pars
protectedinherited

◆ _positions

std::vector<Point> MultiApp::_positions
protectedinherited

◆ _reset_apps

std::vector<unsigned int> MultiApp::_reset_apps
protectedinherited

The apps to be reset.

Definition at line 394 of file MultiApp.h.

Referenced by MultiApp::preTransfer().

◆ _reset_happened

bool MultiApp::_reset_happened
protectedinherited

Whether or not apps have been reset.

Definition at line 397 of file MultiApp.h.

Referenced by MultiApp::preTransfer().

◆ _reset_time

Real MultiApp::_reset_time
protectedinherited

The time at which to reset apps.

Definition at line 391 of file MultiApp.h.

Referenced by MultiApp::preTransfer().

◆ _total_num_apps

unsigned int MultiApp::_total_num_apps
protectedinherited

The total number of apps to simulate.

Definition at line 337 of file MultiApp.h.

Referenced by MultiApp::buildComm(), MultiApp::createApp(), MultiApp::init(), and MultiApp::numGlobalApps().

◆ _type

const std::string& MooseObject::_type
protectedinherited

The type of this object (the Class name)

Definition at line 177 of file MooseObject.h.

Referenced by FEProblemBase::init(), and MooseObject::type().

◆ _use_positions

const bool MultiApp::_use_positions
protectedinherited

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