Transfers System
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.
Example Transfer
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
[../]
[]
(../moose/test/tests/transfers/multiapp_postprocessor_to_scalar/master.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
[../]
[]
(../moose/test/tests/transfers/multiapp_postprocessor_to_scalar/master.i)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
[../]
[]
(../moose/test/tests/transfers/multiapp_postprocessor_to_scalar/sub.i)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.
- 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.
- MultiAppMeshFunctionTransfer
- MultiAppNearestNodeTransfer
- MultiAppPostprocessorInterpolationTransfer
- MultiAppPostprocessorToAuxScalarTransfer
- MultiAppPostprocessorTransfer
- MultiAppProjectionTransfer
- MultiAppScalarToAuxScalarTransfer
- MultiAppUserObjectTransfer
- MultiAppVariableValueSamplePostprocessorTransfer
- MultiAppVariableValueSampleTransfer
- 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