When running simulations that contain MultiApps—simulations running other sub-simulations—it is often required to move data to and from the sub-applications. Transfer objects in MOOSE are designed for this purpose.
Assuming that the concept of MultiApps is understood, Transfers are best understood via an example problem. First, consider a "master" simulation that is solving the transient diffusion equation. This master simulation also includes two "sub" applications that rely on the average value of the unknown from the master application.
The "master" Simulation
Listing 1 is an input file snippet showing the MultiApps block that includes a TransientMultiApp, this sub-application will execute along with the master (at the end of each timestep) as time progresses.
[MultiApps] [./pp_sub] type = TransientMultiApp app_type = MooseTestApp positions = '0.5 0.5 0 0.7 0.7 0' execute_on = timestep_end input_files = sub.i [../] 
For this example, the sub-applications require that the average from the master in the form of a scalar AuxVariable, see the AuxVariables documentation for further information. Therefore the master will transfer the average value (computed via the ElementAverageValue Postprocessor) to a scalar AuxVariable on each sub-application. As shown in Listing 2, the MultiAppPostprocessorToAuxScalarTransfer is provided for this purpose.
[Transfers] [./pp_transfer] type = MultiAppPostprocessorToAuxScalarTransfer direction = to_multiapp multi_app = pp_sub from_postprocessor = average to_aux_scalar = from_master_app [../] 
The "sub" Simulations
For this simple example the sub-application must contain an appropriate AuxVariable to receiving the Postprocessor value from the master application.
[AuxVariables] [./from_master_app] order = FIRST family = SCALAR [../] 
The sub-applications do not have any "knowledge" of the master application, and simply perform calculations that utilize the scalar variable, regardless of how this scalar is computed. This approach allows the sub-application input file to run in union of independent from the master without modification, which is useful for development and testing.
Available Transfer Objects
The following is a complete list of the available Transfer objects, each links to a page with further details.
- Moose App
- MultiAppCopyTransferCopies variables (nonlinear and auxiliary) between multiapps that have identical meshes.
- MultiAppInterpolationTransferTransfers the value to the target domain from the nearest node in the source domain.
- MultiAppVectorPostprocessorTransferThis transfer distributes the N values of a VectorPostprocessor to Postprocessors located in N sub-apps or collects Postprocessor values from N sub-apps into a VectorPostprocessor
- Level Set App
- LevelSetMeshRefinementTransferTransfers the mesh from the master application to the sub application for the purposes of level set reinitialization problems with mesh adaptivity.
- Stochastic Tools App
- SamplerPostprocessorTransferTransfers data to and from Postprocessors on the sub-application.
- SamplerTransferCopies Sampler data to a SamplerReceiver object.
- Functional Expansion Tools App
- MultiAppFXTransferTransfers coefficient arrays between objects that are derived from MutableCoefficientsInterface; currently includes the following types: FunctionSeries, FXBoundaryUserObject, and FXVolumeUserObject
- Moose App