- from_postprocessorThe name of the Postprocessor in the Master to transfer the value from.
C++ Type:PostprocessorName
Unit:(no unit assumed)
Controllable:No
Description:The name of the Postprocessor in the Master to transfer the value from.
 - to_postprocessorThe name of the Postprocessor in the MultiApp to transfer the value to. This should most likely be a Reporter Postprocessor.
C++ Type:PostprocessorName
Unit:(no unit assumed)
Controllable:No
Description:The name of the Postprocessor in the MultiApp to transfer the value to. This should most likely be a Reporter Postprocessor.
 
MultiAppPostprocessorTransfer
Transfers postprocessor data between the master application and sub-application(s).
Siblings transfer behavior
This transfer supports sending data from a multiapp to a multiapp. There are two supported configurations:
only one subapp in the source multiapp, the source postprocessor value is sent to all target multiapps.
the same number of subapps in the source and target multiapp, the source postprocessor is matched to a target postprocessor based on a matching subapp index.
Example Input File Syntax
The MultiAppPostprocessorTransfer allows for a Postprocessor value to be transfer between the parent application and sub-application(s). For example, the input file snippet below sets up a transfer of a Postprocessor value from the parent application to a Postprocessor on each of the sub-applications.
[Transfers<<<{"href": "../../syntax/Transfers/index.html"}>>>]
  [pp_transfer]
    type = MultiAppPostprocessorTransfer<<<{"description": "Transfers postprocessor data between the master application and sub-application(s).", "href": "MultiAppPostprocessorTransfer.html"}>>>
    to_multi_app<<<{"description": "The name of the MultiApp to transfer the data to"}>>> = pp_sub
    from_postprocessor<<<{"description": "The name of the Postprocessor in the Master to transfer the value from."}>>> = average
    to_postprocessor<<<{"description": "The name of the Postprocessor in the MultiApp to transfer the value to.  This should most likely be a Reporter Postprocessor."}>>> = from_parent
  []
[](test/tests/transfers/multiapp_postprocessor_transfer/parent.i)Input Parameters
- check_multiapp_execute_onTrueWhen false the check between the multiapp and transfer execute on flags is not performed.
Default:True
C++ Type:bool
Controllable:No
Description:When false the check between the multiapp and transfer execute on flags is not performed.
 - displaced_source_meshFalseWhether or not to use the displaced mesh for the source mesh.
Default:False
C++ Type:bool
Controllable:No
Description:Whether or not to use the displaced mesh for the source mesh.
 - displaced_target_meshFalseWhether or not to use the displaced mesh for the target mesh.
Default:False
C++ Type:bool
Controllable:No
Description:Whether or not to use the displaced mesh for the target mesh.
 - execute_onSAME_AS_MULTIAPPThe list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html.
Default:SAME_AS_MULTIAPP
C++ Type:ExecFlagEnum
Options:XFEM_MARK, FORWARD, ADJOINT, HOMOGENEOUS_FORWARD, ADJOINT_TIMESTEP_BEGIN, ADJOINT_TIMESTEP_END, NONE, INITIAL, LINEAR, LINEAR_CONVERGENCE, NONLINEAR, NONLINEAR_CONVERGENCE, POSTCHECK, TIMESTEP_END, TIMESTEP_BEGIN, MULTIAPP_FIXED_POINT_END, MULTIAPP_FIXED_POINT_BEGIN, MULTIAPP_FIXED_POINT_CONVERGENCE, FINAL, CUSTOM, SAME_AS_MULTIAPP, POST_ADAPTIVITY
Controllable:No
Description:The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html.
 - from_multi_appThe name of the MultiApp to receive data from
C++ Type:MultiAppName
Controllable:No
Description:The name of the MultiApp to receive data from
 - reduction_typeThe type of reduction to perform to reduce postprocessor values from multiple SubApps to a single value
C++ Type:MooseEnum
Options:average, sum, maximum, minimum
Controllable:No
Description:The type of reduction to perform to reduce postprocessor values from multiple SubApps to a single value
 - to_multi_appThe name of the MultiApp to transfer the data to
C++ Type:MultiAppName
Controllable:No
Description:The name of the MultiApp to transfer the data to
 - warn_source_object_execution_scheduleTrueEmit a warning when the transfer execution schedule is detected to lag information from the user object. Note that the check cannot detect all potential wrong combinations of user-object/transfer execution schedules
Default:True
C++ Type:bool
Controllable:No
Description:Emit a warning when the transfer execution schedule is detected to lag information from the user object. Note that the check cannot detect all potential wrong combinations of user-object/transfer execution schedules
 
Optional Parameters
- _called_legacy_paramsTrue
Default:True
C++ Type:bool
Controllable:No
 - control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
 - enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Controllable:Yes
Description:Set the enabled status of the MooseObject.
 - skip_coordinate_collapsingTrueWhether to skip coordinate collapsing (translation and rotation are still performed, only XYZ, RZ etc collapsing is skipped) when performing mapping and inverse mapping coordinate transformation operations. This parameter should only be set by users who really know what they're doing.
Default:True
C++ Type:bool
Controllable:No
Description:Whether to skip coordinate collapsing (translation and rotation are still performed, only XYZ, RZ etc collapsing is skipped) when performing mapping and inverse mapping coordinate transformation operations. This parameter should only be set by users who really know what they're doing.
 - use_displaced_meshFalseWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Default:False
C++ Type:bool
Controllable:No
Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
 
Advanced Parameters
Input Files
- (test/tests/transfers/transfer_once_per_fixed_point/parent.i)
 - (test/tests/multiapps/steffensen_postprocessor/transient_main.i)
 - (modules/combined/test/tests/subchannel_thm_coupling/THM_SCM_coupling.i)
 - (test/tests/transfers/multiapp_postprocessor_transfer/parent.i)
 - (modules/thermal_hydraulics/test/tests/components/hs_boundary_external_app_heat_flux/main.i)
 - (test/tests/multiapps/initial_transfer/parent.i)
 - (test/tests/multiapps/secant_postprocessor/steady_main.i)
 - (test/tests/multiapps/picard_postprocessor/transient_main.i)
 - (test/tests/multiapps/secant_postprocessor/transient_main.i)
 - (test/tests/multiapps/steffensen_postprocessor/steady_main.i)
 - (test/tests/transfers/multiapp_postprocessor_transfer/parent_from_multiapp.i)
 - (modules/thermal_hydraulics/test/tests/misc/coupling_mD_flow/parent_non_overlapping.i)
 - (test/tests/transfers/multiapp_postprocessor_transfer/between_multiapp/main.i)
 - (modules/combined/test/tests/subchannel_thm_coupling/THM_SCM_coupling_pump.i)
 - (test/tests/multiapps/picard_postprocessor/steady_main.i)
 - (test/tests/multiapps/picard_multilevel/multilevel_dt_rejection/parent.i)
 - (test/tests/transfers/multiapp_postprocessor_transfer/from_one_sub_parent.i)
 - (test/tests/multiapps/picard_multilevel/multilevel_dt_rejection/picard_sub.i)
 
(test/tests/transfers/multiapp_postprocessor_transfer/parent.i)
[Mesh]
  type = GeneratedMesh
  dim = 2
  nx = 10
  ny = 10
[]
[Variables]
  [u]
  []
[]
[Kernels]
  [diff]
    type = CoefDiffusion
    variable = u
    coef = 0.01
  []
  [td]
    type = TimeDerivative
    variable = u
  []
[]
[BCs]
  [left]
    type = DirichletBC
    variable = u
    boundary = left
    value = 0
  []
  [right]
    type = DirichletBC
    variable = u
    boundary = right
    value = 1
  []
[]
[Postprocessors]
  [average]
    type = ElementAverageValue
    variable = u
    execute_on = 'TRANSFER'
  []
[]
[Executioner]
  type = Transient
  num_steps = 5
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
  nl_rel_tol = 1e-12
[]
[Outputs]
  exodus = true
[]
[MultiApps]
  [pp_sub]
    app_type = MooseTestApp
    positions = '0.5 0.5 0 0.7 0.7 0'
    execute_on = timestep_end
    type = TransientMultiApp
    input_files = sub.i
  []
[]
[Transfers]
  [pp_transfer]
    type = MultiAppPostprocessorTransfer
    to_multi_app = pp_sub
    from_postprocessor = average
    to_postprocessor = from_parent
  []
[]
(test/tests/transfers/transfer_once_per_fixed_point/parent.i)
[Mesh]
  type = GeneratedMesh
  dim = 2
  nx = 10
  ny = 10
[]
[Problem]
  type = FEProblem
  solve = false
  verbose_multiapps = true
[]
[Executioner]
  type = Transient
  num_steps = 4
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
  fixed_point_min_its = 4
  fixed_point_max_its = 20
  verbose = true
[]
[MultiApps]
  # This app is used to trigger fixed point iteration when sub is executed on MULTIAPP_FIXED_POINT_BEGIN/END
  [side_app]
    type = TransientMultiApp
    input_files = sub.i
    cli_args = "MultiApps/active='';Outputs/active=''"
    execute_on = 'INITIAL TIMESTEP_END'
    # The input was originally created with effectively no restore
    # see the changes made for #5554 then reverted in #28115
    no_restore = true
  []
  # This app is used to test the fixed point begin/end execute_on for transfers and multiapps
  [sub]
    type = TransientMultiApp
    input_files = sub.i
    execute_on = 'INITIAL TIMESTEP_END'
    # The input was originally created with effectively no restore
    # see the changes made for #5554 then reverted in #28115
    no_restore = true
  []
[]
[Transfers]
  [to_sub]
    type = MultiAppPostprocessorTransfer
    from_postprocessor = num_fixed_point_total
    to_postprocessor = parent_fp_its
    to_multi_app = sub
    check_multiapp_execute_on = false
    execute_on = 'MULTIAPP_FIXED_POINT_BEGIN'
  []
  [from_sub]
    type = MultiAppPostprocessorTransfer
    from_postprocessor = num_fixed_point_its
    to_postprocessor = subapp_fp_its
    from_multi_app = sub
    check_multiapp_execute_on = false
    execute_on = 'MULTIAPP_FIXED_POINT_BEGIN'
    reduction_type = 'sum'
  []
[]
[Postprocessors]
  [num_fixed_point_total]
    type = TestPostprocessor
    test_type = 'grow'
    execute_on = 'INITIAL TIMESTEP_END'
  []
  [num_fixed_point_begin]
    type = TestPostprocessor
    test_type = 'grow'
    execute_on = 'MULTIAPP_FIXED_POINT_BEGIN'
  []
  [num_fixed_point_end]
    type = TestPostprocessor
    test_type = 'grow'
    execute_on = 'MULTIAPP_FIXED_POINT_END'
  []
  [subapp_fp_its]
    type = Receiver
  []
[]
[Outputs]
  [fp_begin]
    type = CSV
    execute_on = 'MULTIAPP_FIXED_POINT_BEGIN'
  []
  [fp_end]
    type = CSV
    file_base = 'fp_end'
    execute_on = 'MULTIAPP_FIXED_POINT_END'
  []
[]
(test/tests/multiapps/steffensen_postprocessor/transient_main.i)
[Mesh]
  type = GeneratedMesh
  dim = 2
  nx = 5
  ny = 5
  parallel_type = replicated
  uniform_refine = 1
[]
[Variables]
  [u]
  []
[]
[Kernels]
  [diff]
    type = Diffusion
    variable = u
  []
  [time]
    type = TimeDerivative
    variable = u
  []
  [source]
    type = BodyForce
    variable = u
    value = 1
  []
[]
[BCs]
  [left]
    type = PostprocessorDirichletBC
    variable = u
    boundary = left
    postprocessor = 'from_sub'
  []
[]
[Postprocessors]
  [coupling_its]
    type = NumFixedPointIterations
    execute_on = 'initial timestep_end'
  []
  [from_sub]
    type = Receiver
    default = 0
  []
  [to_sub]
    type = SideAverageValue
    variable = u
    boundary = right
    execute_on = 'transfer timestep_end'
  []
  [average]
    type = ElementAverageValue
    variable = u
  []
[]
[Executioner]
  type = Transient
  num_steps = 10
  dt = 0.1
  solve_type = PJFNK
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
  nl_abs_tol = 1e-14
  # App coupling parameters
  fixed_point_algorithm = 'steffensen'
  fixed_point_max_its = 30
  transformed_postprocessors = 'from_sub'
[]
[Outputs]
  csv = true
  exodus = false
[]
[MultiApps]
  [sub]
    type = TransientMultiApp
    app_type = MooseTestApp
    positions = '0 0 0'
    input_files = 'transient_sub.i'
    clone_parent_mesh = true
    execute_on = 'timestep_begin'
    # The input was originally created with effectively no restore
    # see the changes made for #5554 then reverted in #28115
    no_restore = true
  []
[]
[Transfers]
  [left_from_sub]
    type = MultiAppPostprocessorTransfer
    from_multi_app = sub
    from_postprocessor = 'to_main'
    to_postprocessor = 'from_sub'
    reduction_type = 'average'
  []
  [right_to_sub]
    type = MultiAppPostprocessorTransfer
    to_multi_app = sub
    from_postprocessor = 'to_sub'
    to_postprocessor = 'from_main'
  []
[]
(modules/combined/test/tests/subchannel_thm_coupling/THM_SCM_coupling.i)
# THM file based on https://mooseframework.inl.gov/modules/thermal_hydraulics/tutorials/single_phase_flow/step05.html
# Used to loosely couple THM with SCM
# This is a simple open loop with fixed massflow at the inlet and pressure at the outlet.
# THM sends massflux and temperature at the inlet of the core, and pressure at the outlet of the core
# to subchannel. Subchannel returns total pressure drop of the assembly and total power to THM and THM calculates an
# average friction factor for the core region.
T_in = 583.0 # K
m_dot_in = 1 # kg/s
press = 2e5 # Pa
SC_core = 0.0004980799633447909 #m2
# core parameters
core_length = 1. # m
core_n_elems = 1
A_core = 0.005 #dummy
# pipe parameters
pipe_dia = '${units 10. cm -> m}'
A_pipe = '${fparse 0.25 * pi * pipe_dia^2}'
# heat exchanger parameters
hx_dia_inner = '${units 12. cm -> m}'
hx_wall_thickness = '${units 5. mm -> m}'
hx_dia_outer = '${units 50. cm -> m}'
hx_radius_wall = '${fparse hx_dia_inner / 2. + hx_wall_thickness}'
hx_length = 1.5 # m
hx_n_elems = 25
m_dot_sec_in = 1. # kg/s
[GlobalParams]
  initial_p = ${press}
  initial_vel = 0.0001
  initial_T = ${T_in}
  initial_vel_x = 0
  initial_vel_y = 0
  initial_vel_z = 0
  gravity_vector = '0 0 0'
  rdg_slope_reconstruction = minmod
  scaling_factor_1phase = '1 1e-2 1e-4'
  scaling_factor_rhoV = 1
  scaling_factor_rhouV = 1e-2
  scaling_factor_rhovV = 1e-2
  scaling_factor_rhowV = 1e-2
  scaling_factor_rhoEV = 1e-4
  closures = thm_closures
  fp = sodium_eos
[]
[Functions]
  [q_wall_fn]
    type = ParsedFunction
    symbol_names = 'core_power length'
    symbol_values = 'core_power  ${core_length}'
    expression = 'core_power/length'
  []
[]
[FluidProperties]
  [water]
    type = StiffenedGasFluidProperties
    gamma = 2.35
    cv = 1816.0
    q = -1.167e6
    p_inf = 1.0e9
    q_prime = 0
  []
  [sodium_eos]
    type = StiffenedGasFluidProperties
    gamma = 1.24
    cv = 1052.8
    q = -2.6292e+05
    p_inf = 1.1564e+08
    q_prime = 0
    mu = 3.222e-04
    k = 73.82
  []
[]
[Closures]
  [thm_closures]
    type = Closures1PhaseTHM
  []
  [none_closures]
    type = Closures1PhaseNone
  []
[]
[Materials]
  [f_mat]
    type = ADParsedMaterial
    property_name = f_D
    postprocessor_names = 'core_f'
    expression = 'core_f'
    block = 'core_chan'
  []
[]
[HeatStructureMaterials]
  [steel]
    type = SolidMaterialProperties
    rho = 8050
    k = 45
    cp = 466
  []
[]
[Components]
  [inlet]
    type = InletMassFlowRateTemperature1Phase
    input = 'bottom_2:in'
    m_dot = ${m_dot_in}
    T = ${T_in}
  []
  [outlet]
    type = Outlet1Phase
    input = 'bottom_1:out'
    p = ${press}
  []
  [up_pipe_1]
    type = FlowChannel1Phase
    position = '0 0 -0.5'
    orientation = '0 0 1'
    length = 0.5
    n_elems = 15
    A = ${A_pipe}
    D_h = ${pipe_dia}
  []
  [jct1]
    type = JunctionParallelChannels1Phase
    position = '0 0 0'
    connections = 'up_pipe_1:out core_chan:in'
    volume = 1e-5
  []
  [core_chan]
    type = FlowChannel1Phase
    position = '0 0 0'
    orientation = '0 0 1'
    length = ${core_length}
    n_elems = ${core_n_elems}
    A = ${A_core}
    closures = none_closures
  []
  [core_ht]
    type = HeatTransferFromHeatFlux1Phase
    flow_channel = core_chan
    q_wall = q_wall_fn
    P_hf = 1
  []
  [jct2]
    type = JunctionParallelChannels1Phase
    position = '0 0 1'
    connections = 'core_chan:out up_pipe_2:in'
    volume = 1e-5
  []
  [up_pipe_2]
    type = FlowChannel1Phase
    position = '0 0 1'
    orientation = '0 0 1'
    length = 0.5
    n_elems = 10
    A = ${A_pipe}
    D_h = ${pipe_dia}
  []
  [jct3]
    type = JunctionOneToOne1Phase
    connections = 'up_pipe_2:out top_pipe_1:in'
  []
  [top_pipe_1]
    type = FlowChannel1Phase
    position = '0 0 1.5'
    orientation = '1 0 0'
    length = 0.5
    n_elems = 10
    A = ${A_pipe}
    D_h = ${pipe_dia}
  []
  [top_pipe_2]
    type = FlowChannel1Phase
    position = '0.5 0 1.5'
    orientation = '1 0 0'
    length = 0.5
    n_elems = 10
    A = ${A_pipe}
    D_h = ${pipe_dia}
  []
  [jct4]
    type = VolumeJunction1Phase
    position = '0.5 0 1.5'
    volume = 1e-5
    connections = 'top_pipe_1:out top_pipe_2:in'
  []
  [jct5]
    type = JunctionOneToOne1Phase
    connections = 'top_pipe_2:out down_pipe_1:in'
  []
  [down_pipe_1]
    type = FlowChannel1Phase
    position = '1 0 1.5'
    orientation = '0 0 -1'
    length = 0.25
    A = ${A_pipe}
    n_elems = 5
  []
  [jct6]
    type = JunctionParallelChannels1Phase
    position = '1 0 1.25'
    connections = 'down_pipe_1:out hx/pri:in'
    volume = 1e-5
  []
  [hx]
    [pri]
      type = FlowChannel1Phase
      position = '1 0 1.25'
      orientation = '0 0 -1'
      length = ${hx_length}
      n_elems = ${hx_n_elems}
      roughness = 1e-5
      A = '${fparse pi * hx_dia_inner * hx_dia_inner / 4.}'
      D_h = ${hx_dia_inner}
    []
    [ht_pri]
      type = HeatTransferFromHeatStructure1Phase
      hs = hx/wall
      hs_side = inner
      flow_channel = hx/pri
      P_hf = '${fparse pi * hx_dia_inner}'
    []
    [wall]
      type = HeatStructureCylindrical
      position = '1 0 1.25'
      orientation = '0 0 -1'
      length = ${hx_length}
      n_elems = ${hx_n_elems}
      widths = '${hx_wall_thickness}'
      n_part_elems = '3'
      materials = 'steel'
      names = '0'
      inner_radius = '${fparse hx_dia_inner / 2.}'
    []
    [ht_sec]
      type = HeatTransferFromHeatStructure1Phase
      hs = hx/wall
      hs_side = outer
      flow_channel = hx/sec
      P_hf = '${fparse 2 * pi * hx_radius_wall}'
    []
    [sec]
      type = FlowChannel1Phase
      position = '${fparse 1 + hx_wall_thickness} 0 -0.25'
      orientation = '0 0 1'
      length = ${hx_length}
      n_elems = ${hx_n_elems}
      A = '${fparse pi * (hx_dia_outer * hx_dia_outer / 4. - hx_radius_wall * hx_radius_wall)}'
      D_h = '${fparse hx_dia_outer - (2 * hx_radius_wall)}'
      fp = water
      initial_T = 300
    []
  []
  [jct7]
    type = JunctionParallelChannels1Phase
    position = '1 0 -0.25'
    connections = 'hx/pri:out down_pipe_2:in'
    volume = 1e-5
  []
  [down_pipe_2]
    type = FlowChannel1Phase
    position = '1 0 -0.25'
    orientation = '0 0 -1'
    length = 0.25
    n_elems = 10
    A = ${A_pipe}
    D_h = ${pipe_dia}
  []
  [jct8]
    type = JunctionOneToOne1Phase
    connections = 'down_pipe_2:out bottom_1:in'
  []
  [bottom_1]
    type = FlowChannel1Phase
    position = '1 0 -0.5'
    orientation = '-1 0 0'
    length = 0.5
    n_elems = 5
    A = ${A_pipe}
    D_h = ${pipe_dia}
  []
  [bottom_2]
    type = FlowChannel1Phase
    position = '0.5 0 -0.5'
    orientation = '-1 0 0'
    length = 0.5
    n_elems = 5
    A = ${A_pipe}
    D_h = ${pipe_dia}
  []
  [jct9]
    type = JunctionOneToOne1Phase
    connections = 'bottom_2:out up_pipe_1:in'
  []
  [inlet_sec]
    type = InletMassFlowRateTemperature1Phase
    input = 'hx/sec:in'
    m_dot = ${m_dot_sec_in}
    T = 300
  []
  [outlet_sec]
    type = Outlet1Phase
    input = 'hx/sec:out'
    p = 1e5
  []
[]
[Postprocessors]
  [power_to_coolant]
    type = ADHeatRateDirectFlowChannel
    q_wall_prop = q_wall
    block = core_chan
    P_hf = 1
  []
  [core_T_out]
    type = SideAverageValue
    boundary = core_chan:out
    variable = T
  []
  [T_out]
    type = SideAverageValue
    boundary = bottom_1:out
    variable = T
  []
  [core_p_in]
    type = SideAverageValue
    boundary = up_pipe_1:out
    variable = p
  []
  [core_p_out]
    type = SideAverageValue
    boundary = up_pipe_2:in
    variable = p
  []
  [core_delta_p]
    type = ParsedPostprocessor
    pp_names = 'core_p_in core_p_out'
    expression = 'core_p_in - core_p_out'
  []
  [hx_pri_T_out]
    type = SideAverageValue
    boundary = hx/pri:out
    variable = T
  []
  [hx_sec_T_in]
    type = SideAverageValue
    boundary = inlet_sec
    variable = T
  []
  [hx_sec_T_out]
    type = SideAverageValue
    boundary = outlet_sec
    variable = T
  []
  [m_dot_sec]
    type = ADFlowBoundaryFlux1Phase
    boundary = inlet_sec
    equation = mass
  []
  ############## Friction Factor Calculation #############
  [av_rhouA]
    type = ElementAverageValue
    variable = 'rhouA'
    block = 'core_chan'
  []
  [av_rho]
    type = ElementAverageValue
    variable = 'rho'
    block = 'core_chan'
  []
  [Kloss]
    type = ParsedPostprocessor
    pp_names = 'core_delta_p_tgt av_rhouA av_rho'
    expression = '2.0 * core_delta_p_tgt * av_rho * ${A_core} * ${A_core} / (av_rhouA * av_rhouA)'
  []
  [Dh]
    type = ADElementAverageMaterialProperty
    mat_prop = D_h
    block = core_chan
  []
  [core_f]
    type = ParsedPostprocessor
    pp_names = 'Kloss Dh'
    expression = 'Kloss * Dh / ${core_length}'
  []
  ### INFO to send to SC
  [outlet_pressure]
    type = SideAverageValue
    boundary = up_pipe_2:in
    variable = p
  []
  [inlet_mass_flow_rate]
    type = ADFlowJunctionFlux1Phase
    boundary = up_pipe_1:out
    connection_index = 0
    equation = mass
    junction = jct1
  []
  [inlet_temperature]
    type = SideAverageValue
    boundary = up_pipe_1:out
    variable = T
  []
  [inlet_mass_flux]
    type = ParsedPostprocessor
    pp_names = 'inlet_mass_flow_rate'
    expression = 'abs(inlet_mass_flow_rate/${SC_core})'
  []
  #####
  ##### Info received from subchannel
  [core_delta_p_tgt]
    type = Receiver
    default = 100
  []
  [core_power]
    type = Receiver
    default = 100
  []
[]
[Preconditioning]
  [pc]
    type = SMP
    full = true
  []
[]
[Executioner]
  type = Transient
  start_time = 0
  [TimeStepper]
    type = IterationAdaptiveDT
    dt = 0.01
  []
  # dtmax = 5
  end_time = 5
  line_search = basic
  solve_type = NEWTON
  petsc_options_iname = '-pc_type'
  petsc_options_value = 'lu'
  nl_rel_tol = 1e-8
  nl_abs_tol = 1e-8
  nl_max_its = 25
[]
[Outputs]
  csv = true
  [console]
    type = Console
    max_rows = 1
    outlier_variable_norms = false
  []
  print_linear_residuals = false
[]
################################################################################
# A multiapp that couples THM to subchannel
################################################################################
[MultiApps]
  [subchannel]
    type = FullSolveMultiApp
    input_files = 'subchannel.i'
    execute_on = 'timestep_end'
    positions = '0 0 0'
    max_procs_per_app = 1
    output_in_position = true
    bounding_box_padding = '0 0 0.1'
  []
[]
[Transfers]
  [pressure_drop_transfer] # Get pressure drop to THM from subchannel
    type = MultiAppPostprocessorTransfer
    from_multi_app = subchannel
    from_postprocessor = total_pressure_drop_SC
    to_postprocessor = core_delta_p_tgt
    reduction_type = average
    execute_on = 'timestep_end'
  []
  [power_transfer] # Get Total power to THM from subchannel
    type = MultiAppPostprocessorTransfer
    from_multi_app = subchannel
    from_postprocessor = Total_power
    to_postprocessor = core_power
    reduction_type = average
    execute_on = 'timestep_end'
  []
  [mass_flux_tranfer] # Send mass_flux at the inlet of THM core to subchannel
    type = MultiAppPostprocessorTransfer
    to_multi_app = subchannel
    from_postprocessor = inlet_mass_flux
    to_postprocessor = report_mass_flux_inlet
    execute_on = 'timestep_end'
  []
  [outlet_pressure_tranfer] # Send pressure at the outlet of THM core to subchannel
    type = MultiAppPostprocessorTransfer
    to_multi_app = subchannel
    from_postprocessor = outlet_pressure
    to_postprocessor = report_pressure_outlet
    execute_on = 'timestep_end'
  []
  [inlet_temperature_transfer]
    type = MultiAppPostprocessorTransfer
    to_multi_app = subchannel
    from_postprocessor = inlet_temperature
    to_postprocessor = report_temperature_inlet
    execute_on = 'timestep_end'
  []
[]
(test/tests/transfers/multiapp_postprocessor_transfer/parent.i)
[Mesh]
  type = GeneratedMesh
  dim = 2
  nx = 10
  ny = 10
[]
[Variables]
  [u]
  []
[]
[Kernels]
  [diff]
    type = CoefDiffusion
    variable = u
    coef = 0.01
  []
  [td]
    type = TimeDerivative
    variable = u
  []
[]
[BCs]
  [left]
    type = DirichletBC
    variable = u
    boundary = left
    value = 0
  []
  [right]
    type = DirichletBC
    variable = u
    boundary = right
    value = 1
  []
[]
[Postprocessors]
  [average]
    type = ElementAverageValue
    variable = u
    execute_on = 'TRANSFER'
  []
[]
[Executioner]
  type = Transient
  num_steps = 5
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
  nl_rel_tol = 1e-12
[]
[Outputs]
  exodus = true
[]
[MultiApps]
  [pp_sub]
    app_type = MooseTestApp
    positions = '0.5 0.5 0 0.7 0.7 0'
    execute_on = timestep_end
    type = TransientMultiApp
    input_files = sub.i
  []
[]
[Transfers]
  [pp_transfer]
    type = MultiAppPostprocessorTransfer
    to_multi_app = pp_sub
    from_postprocessor = average
    to_postprocessor = from_parent
  []
[]
(modules/thermal_hydraulics/test/tests/components/hs_boundary_external_app_heat_flux/main.i)
# Main input file.
#
# Run mesh.i first to produce a mesh file that this input uses:
#
#   thermal_hydraulics-opt -i mesh.i --mesh-only mesh.e
length = 5.0
n_elems_axial = 10
rho_name = density
cp_name = specific_heat
k_name = thermal_conductivity
rho = 8000.0
cp = 500.0
k = 15.0
T_initial = 500.0
power = 1000.0
[Mesh]
  type = FileMesh
  file = mesh.e
[]
[Variables]
  [T_solid]
  []
[]
[ICs]
  [T_ic]
    type = ConstantIC
    variable = T_solid
    value = ${T_initial}
  []
[]
[Kernels]
  [time_derivative]
    type = ADHeatConductionTimeDerivative
    variable = T_solid
    density_name = ${rho_name}
    specific_heat = ${cp_name}
  []
  [heat_conduction]
    type = ADHeatConduction
    variable = T_solid
    thermal_conductivity = ${k_name}
  []
[]
[BCs]
  [bc]
    type = FunctorNeumannBC
    variable = T_solid
    boundary = 'inner'
    functor = heat_flux_fn
    flux_is_inward = false
  []
[]
[Materials]
  [ad_constant_mat]
    type = ADGenericConstantMaterial
    prop_names = '${rho_name} ${cp_name} ${k_name}'
    prop_values = '${rho} ${cp} ${k}'
  []
[]
[Functions]
  [heat_flux_fn]
    type = ParsedFunction
    symbol_names = 'S'
    symbol_values = 'inner_surface_area'
    expression = '${power} / S'
  []
[]
[Postprocessors]
  [inner_surface_area]
    type = AreaPostprocessor
    boundary = 'inner'
    execute_on = 'INITIAL'
  []
  [inner_perimeter]
    type = ParsedPostprocessor
    pp_names = 'inner_surface_area'
    expression = 'inner_surface_area / ${length}'
    execute_on = 'INITIAL'
  []
[]
[MultiApps]
  [sub]
    type = TransientMultiApp
    app_type = ThermalHydraulicsApp
    input_files = 'sub.i'
    positions = '0 0 0'
    max_procs_per_app = 1
    output_in_position = true
    execute_on = 'TIMESTEP_END'
  []
[]
[UserObjects]
  [layered_average_heat_flux]
    type = NearestPointLayeredSideAverageFunctor
    direction = z
    points='0 0 0'
    num_layers = ${n_elems_axial}
    functor = heat_flux_fn
    boundary = 'inner'
    execute_on = 'TIMESTEP_END'
  []
[]
[Transfers]
  [heat_flux_transfer]
    type = MultiAppGeneralFieldUserObjectTransfer
    to_multi_app = sub
    source_user_object = layered_average_heat_flux
    variable = q_ext
    error_on_miss = true
  []
  [perimeter_transfer]
    type = MultiAppPostprocessorTransfer
    to_multi_app = sub
    from_postprocessor = inner_perimeter
    to_postprocessor = P_ext
  []
[]
[Preconditioning]
  [pc]
    type = SMP
    full = true
  []
[]
[Executioner]
  type = Transient
  scheme = bdf2
  dt = 10.0
  num_steps = 1
  abort_on_solve_fail = true
  solve_type = NEWTON
  nl_abs_tol = 1e-10
  nl_rel_tol = 1e-8
  nl_max_its = 10
  l_tol = 1e-3
  l_max_its = 10
[]
(test/tests/multiapps/initial_transfer/parent.i)
[Mesh]
  type = GeneratedMesh
  dim = 2
  xmin = 0
  xmax = 1
  ymin = 0
  ymax = 1
  nx = 2
  ny = 2
[]
[Problem]
  kernel_coverage_check = false
[]
[Variables][dummy][][]
[Functions]
  [func]
    type = ConstantFunction
    value = 1
  []
[]
[Postprocessors]
  [c]
    type = FunctionValuePostprocessor
    function = func
    execute_on = initial
    # this will force this postprocessor to be evaluated before transfer on initial
    force_preic = true
  []
[]
[Executioner]
  type = Steady
[]
[MultiApps]
  [sub]
    type = FullSolveMultiApp
    input_files = sub.i
    execute_on = initial
  [../]
[]
[Transfers]
  [to_sub]
    type = MultiAppPostprocessorTransfer
    to_multi_app = sub
    from_postprocessor = c
    to_postprocessor = receiver
  []
[]
(test/tests/multiapps/secant_postprocessor/steady_main.i)
[Mesh]
  type = GeneratedMesh
  dim = 2
  nx = 5
  ny = 5
  parallel_type = replicated
  uniform_refine = 1
[]
[Variables]
  [u]
  []
[]
[Kernels]
  [diff]
    type = Diffusion
    variable = u
  []
  [source]
    type = BodyForce
    variable = u
    value = 1
  []
[]
[BCs]
  [left]
    type = PostprocessorDirichletBC
    variable = u
    boundary = left
    postprocessor = 'from_sub'
  []
[]
[Postprocessors]
  [from_sub]
    type = Receiver
    default = 0
  []
  [to_sub]
    type = SideAverageValue
    variable = u
    boundary = right
  []
  [average]
    type = ElementAverageValue
    variable = u
  []
[]
[Executioner]
  type = Steady
  # Solve parameters
  solve_type = PJFNK
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
  nl_abs_tol = 1e-14
  # App coupling parameters
  fixed_point_algorithm = 'secant'
  fixed_point_max_its = 100
  transformed_postprocessors = 'from_sub'
[]
[Outputs]
  csv = true
  exodus = false
[]
[MultiApps]
  [sub]
    type = FullSolveMultiApp
    app_type = MooseTestApp
    positions = '0 0 0'
    input_files = steady_sub.i
    clone_parent_mesh = true
    execute_on = 'timestep_begin'
    # we keep the full postprocessor output history of the subapp
    keep_full_output_history = true
    transformed_postprocessors = 'from_main'
  []
[]
[Transfers]
  [left_from_sub]
    type = MultiAppPostprocessorTransfer
    from_multi_app = sub
    from_postprocessor = 'to_main'
    to_postprocessor = 'from_sub'
    reduction_type = 'average'
  []
  [right_to_sub]
    type = MultiAppPostprocessorTransfer
    to_multi_app = sub
    from_postprocessor = 'to_sub'
    to_postprocessor = 'from_main'
  []
[]
(test/tests/multiapps/picard_postprocessor/transient_main.i)
[Mesh]
  type = GeneratedMesh
  dim = 2
  nx = 5
  ny = 5
  parallel_type = replicated
  uniform_refine = 1
[]
[Variables]
  [u]
  []
[]
[Kernels]
  [diff]
    type = Diffusion
    variable = u
  []
  [time]
    type = TimeDerivative
    variable = u
  []
  [source]
    type = BodyForce
    variable = u
    value = 1
  []
[]
[BCs]
  [left]
    type = PostprocessorDirichletBC
    variable = u
    boundary = left
    postprocessor = 'from_sub'
  []
[]
[Postprocessors]
  [coupling_its]
    type = NumFixedPointIterations
    execute_on = 'initial timestep_end'
  []
  [from_sub]
    type = Receiver
    default = 0
  []
  [to_sub]
    type = SideAverageValue
    variable = u
    boundary = right
    execute_on = 'transfer timestep_end'
  []
  [average]
    type = ElementAverageValue
    variable = u
  []
[]
[Executioner]
  type = Transient
  num_steps = 10
  dt = 0.1
  solve_type = PJFNK
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
  nl_abs_tol = 1e-14
  # App coupling parameters
  fixed_point_max_its = 30
  relaxation_factor = 0.8
  transformed_postprocessors = 'from_sub'
[]
[Outputs]
  csv = true
  exodus = false
[]
[MultiApps]
  [sub]
    type = TransientMultiApp
    app_type = MooseTestApp
    positions = '0 0 0'
    input_files = 'transient_sub.i'
    clone_parent_mesh = true
    execute_on = 'timestep_begin'
    # The input was originally created with effectively no restore
    # see the changes made for #5554 then reverted in #28115
    no_restore = true
  []
[]
[Transfers]
  [left_from_sub]
    type = MultiAppPostprocessorTransfer
    from_multi_app = sub
    from_postprocessor = 'to_main'
    to_postprocessor = 'from_sub'
    reduction_type = 'average'
  []
  [right_to_sub]
    type = MultiAppPostprocessorTransfer
    to_multi_app = sub
    from_postprocessor = 'to_sub'
    to_postprocessor = 'from_main'
  []
[]
(test/tests/multiapps/secant_postprocessor/transient_main.i)
[Mesh]
  type = GeneratedMesh
  dim = 2
  nx = 5
  ny = 5
  parallel_type = replicated
  uniform_refine = 1
[]
[Variables]
  [u]
  []
[]
[Kernels]
  [diff]
    type = Diffusion
    variable = u
  []
  [time]
    type = TimeDerivative
    variable = u
  []
  [source]
    type = BodyForce
    variable = u
    value = 1
  []
[]
[BCs]
  [left]
    type = PostprocessorDirichletBC
    variable = u
    boundary = left
    postprocessor = 'from_sub'
  []
[]
[Postprocessors]
  [coupling_its]
    type = NumFixedPointIterations
    execute_on = 'initial timestep_end'
  []
  [from_sub]
    type = Receiver
    default = 0
  []
  [to_sub]
    type = SideAverageValue
    variable = u
    boundary = right
    execute_on = 'transfer timestep_end'
  []
  [average]
    type = ElementAverageValue
    variable = u
  []
[]
[Executioner]
  type = Transient
  num_steps = 10
  dt = 0.1
  solve_type = PJFNK
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
  nl_abs_tol = 1e-14
  # App coupling parameters
  fixed_point_algorithm = 'secant'
  fixed_point_max_its = 30
  transformed_postprocessors = 'from_sub'
[]
[Outputs]
  csv = true
  exodus = false
[]
[MultiApps]
  [sub]
    type = TransientMultiApp
    app_type = MooseTestApp
    positions = '0 0 0'
    input_files = 'transient_sub.i'
    clone_parent_mesh = true
    execute_on = 'timestep_begin'
    # The input was originally created with effectively no restore
    # see the changes made for #5554 then reverted in #28115
    no_restore = true
  []
[]
[Transfers]
  [left_from_sub]
    type = MultiAppPostprocessorTransfer
    from_multi_app = sub
    from_postprocessor = 'to_main'
    to_postprocessor = 'from_sub'
    reduction_type = 'average'
  []
  [right_to_sub]
    type = MultiAppPostprocessorTransfer
    to_multi_app = sub
    from_postprocessor = 'to_sub'
    to_postprocessor = 'from_main'
  []
[]
(test/tests/multiapps/steffensen_postprocessor/steady_main.i)
[Mesh]
  type = GeneratedMesh
  dim = 2
  nx = 5
  ny = 5
  parallel_type = replicated
  uniform_refine = 1
[]
[Variables]
  [u]
  []
[]
[Kernels]
  [diff]
    type = Diffusion
    variable = u
  []
  [source]
    type = BodyForce
    variable = u
    value = 1
  []
[]
[BCs]
  [left]
    type = PostprocessorDirichletBC
    variable = u
    boundary = left
    postprocessor = 'from_sub'
  []
[]
[Postprocessors]
  [from_sub]
    type = Receiver
    default = 0
  []
  [to_sub]
    type = SideAverageValue
    variable = u
    boundary = right
  []
  [average]
    type = ElementAverageValue
    variable = u
  []
[]
[Executioner]
  type = Steady
  # Solve parameters
  solve_type = PJFNK
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
  nl_abs_tol = 1e-14
  # App coupling parameters
  fixed_point_algorithm = 'steffensen'
  fixed_point_max_its = 100
  transformed_postprocessors = 'from_sub'
[]
[Outputs]
  csv = true
  exodus = false
[]
[MultiApps]
  [sub]
    type = FullSolveMultiApp
    app_type = MooseTestApp
    positions = '0 0 0'
    input_files = steady_sub.i
    clone_parent_mesh = true
    execute_on = 'timestep_begin'
    # we keep the full postprocessor output history of the subapp
    keep_full_output_history = true
    transformed_postprocessors = 'from_main'
  []
[]
[Transfers]
  [left_from_sub]
    type = MultiAppPostprocessorTransfer
    from_multi_app = sub
    from_postprocessor = 'to_main'
    to_postprocessor = 'from_sub'
    reduction_type = 'average'
  []
  [right_to_sub]
    type = MultiAppPostprocessorTransfer
    to_multi_app = sub
    from_postprocessor = 'to_sub'
    to_postprocessor = 'from_main'
  []
[]
(test/tests/transfers/multiapp_postprocessor_transfer/parent_from_multiapp.i)
[Mesh]
  type = GeneratedMesh
  dim = 2
  nx = 10
  ny = 10
[]
[Variables]
  [./u]
  [../]
[]
[AuxVariables]
  [./from_sub]
  [../]
[]
[Kernels]
  [./diff]
    type = Diffusion
    variable = u
  [../]
[]
[BCs]
  [./left]
    type = DirichletBC
    variable = u
    boundary = left
    value = 0
  [../]
  [./right]
    type = DirichletBC
    variable = u
    boundary = right
    value = 1
  [../]
[]
[Postprocessors]
  [./sub_average]
    type = Receiver
  [../]
  [./sub_sum]
    type = Receiver
  [../]
  [./sub_maximum]
    type = Receiver
  [../]
  [./sub_minimum]
    type = Receiver
  [../]
[]
[Executioner]
  type = Transient
  num_steps = 1
  dt = 1
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
  exodus = true
[]
[MultiApps]
  [./sub]
    positions = '0.2 0.2 0 0.7 0.7 0'
    type = TransientMultiApp
    app_type = MooseTestApp
    input_files = 'sub0.i sub1.i'
  [../]
[]
[Transfers]
  [./pp_transfer_ave]
    type = MultiAppPostprocessorTransfer
    reduction_type = average
    from_multi_app = sub
    from_postprocessor = average
    to_postprocessor = sub_average
  [../]
  [./pp_transfer_sum]
    type = MultiAppPostprocessorTransfer
    reduction_type = sum
    from_multi_app = sub
    from_postprocessor = average
    to_postprocessor = sub_sum
  [../]
  [./pp_transfer_min]
    type = MultiAppPostprocessorTransfer
    reduction_type = minimum
    from_multi_app = sub
    from_postprocessor = average
    to_postprocessor = sub_minimum
  [../]
  [./pp_transfer_max]
    type = MultiAppPostprocessorTransfer
    reduction_type = maximum
    from_multi_app = sub
    from_postprocessor = average
    to_postprocessor = sub_maximum
  [../]
[]
(modules/thermal_hydraulics/test/tests/misc/coupling_mD_flow/parent_non_overlapping.i)
# inlet temperature
T_in = 523.0
mdot = 10
pout = 7e6
[Mesh]
  type = GeneratedMesh
  dim = 3
  xmin = -1.5
  xmax = 1.5
  ymin = -1.5
  ymax = 1.5
  zmin = 0
  zmax = 10
  nx = 3
  ny = 3
  nz = 10
[]
[Problem]
  kernel_coverage_check = false
[]
[Variables]
  [u]
  []
[]
[Postprocessors]
  [core_outlet_pressure]
    type = Receiver
    default = ${pout}
  []
  [core_inlet_mdot]
    type = Receiver
    default = ${mdot}
  []
  [core_inlet_temperature]
    type = Receiver
    default = ${T_in}
  []
  [core_inlet_pressure]
    type = FunctionValuePostprocessor
    function = compute_inlet_pressure_fn
    execute_on = 'INITIAL LINEAR TIMESTEP_END'
  []
  [core_outlet_mdot]
    type = ScalePostprocessor
    value = core_inlet_mdot
    execute_on = 'INITIAL LINEAR TIMESTEP_END'
  []
  [bypass_mdot]
    type = Receiver
  []
  [inlet_mdot]
    type = Receiver
  []
  [outlet_mdot]
    type = Receiver
  []
  [core_outlet_temperature]
    type = FunctionValuePostprocessor
    function = compute_outlet_temperature_fn
    execute_on = 'INITIAL LINEAR TIMESTEP_END'
  []
  [core_pressure_drop]
    type = DifferencePostprocessor
    value1 = core_inlet_pressure
    value2 = core_outlet_pressure
  []
[]
[Functions]
  [compute_outlet_temperature_fn]
    type = ParsedFunction
    symbol_values = 'core_inlet_mdot core_inlet_temperature  1000'
    symbol_names = 'mdot            Tin                     Q'
    expression = 'Tin + Q / mdot'
  []
  [compute_inlet_pressure_fn]
    type = ParsedFunction
    symbol_values = 'core_inlet_mdot core_outlet_pressure  5000'
    symbol_names = 'mdot            pout                     C'
    expression = 'pout + C * mdot'
  []
[]
[MultiApps]
  [thm]
    type = TransientMultiApp
    input_files = thm_non_overlapping.i
    sub_cycling = true
    max_procs_per_app = 1
    print_sub_cycles = false
  []
[]
[Transfers]
  #### thm Transfers ####
  ## transfers from thm
  [core_inlet_mdot]
    type = MultiAppPostprocessorTransfer
    from_postprocessor = core_inlet_mdot
    to_postprocessor = core_inlet_mdot
    reduction_type = maximum
    from_multi_app = thm
  []
  [core_inlet_temperature]
    type = MultiAppPostprocessorTransfer
    to_postprocessor = core_inlet_temperature
    from_postprocessor = core_inlet_temperature
    reduction_type = maximum
    from_multi_app = thm
  []
  [core_outlet_pressure]
    type = MultiAppPostprocessorTransfer
    to_postprocessor = core_outlet_pressure
    from_postprocessor = core_outlet_pressure
    reduction_type = maximum
    from_multi_app = thm
  []
  [bypass_mdot]
    type = MultiAppPostprocessorTransfer
    to_postprocessor = bypass_mdot
    from_postprocessor = bypass_mdot
    reduction_type = maximum
    from_multi_app = thm
  []
  [inlet_mdot]
    type = MultiAppPostprocessorTransfer
    to_postprocessor = inlet_mdot
    from_postprocessor = inlet_mdot
    reduction_type = maximum
    from_multi_app = thm
  []
  [outlet_mdot]
    type = MultiAppPostprocessorTransfer
    to_postprocessor = outlet_mdot
    from_postprocessor = outlet_mdot
    reduction_type = maximum
    from_multi_app = thm
  []
  ## transfers to thm
  [core_outlet_mdot]
    type = MultiAppPostprocessorTransfer
    from_postprocessor = core_outlet_mdot
    to_postprocessor = core_outlet_mdot
    to_multi_app = thm
  []
  [core_outlet_temperature]
    type = MultiAppPostprocessorTransfer
    from_postprocessor = core_outlet_temperature
    to_postprocessor = core_outlet_temperature
    to_multi_app = thm
  []
  [core_inlet_pressure]
    type = MultiAppPostprocessorTransfer
    from_postprocessor = core_inlet_pressure
    to_postprocessor = core_inlet_pressure
    to_multi_app = thm
  []
[]
[Executioner]
  type = Transient
  dt = 0.1
  num_steps = 1
  abort_on_solve_fail = true
[]
[Outputs]
  exodus = true
[]
(test/tests/transfers/multiapp_postprocessor_transfer/between_multiapp/main.i)
[Mesh]
  type = GeneratedMesh
  dim = 2
  nx = 10
  ny = 10
[]
[Variables]
  [u]
  []
[]
[Kernels]
  [diff]
    type = CoefDiffusion
    variable = u
    coef = 0.01
  []
  [td]
    type = TimeDerivative
    variable = u
  []
[]
[BCs]
  [left]
    type = DirichletBC
    variable = u
    boundary = left
    value = 0
  []
  [right]
    type = DirichletBC
    variable = u
    boundary = right
    value = 1
  []
[]
[Executioner]
  type = Transient
  num_steps = 5
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
  nl_rel_tol = 1e-12
[]
[MultiApps]
  [pp_sub_0]
    app_type = MooseTestApp
    positions = '0.5 0.5 0 0.7 0.7 0'
    execute_on = timestep_end
    type = TransientMultiApp
    input_files = sub0.i
  []
  [pp_sub_1]
    app_type = MooseTestApp
    positions = '0.5 0.5 0 0.7 0.7 0'
    execute_on = timestep_end
    type = TransientMultiApp
    input_files = sub1.i
  []
[]
[Transfers]
  [pp_transfer_1]
    type = MultiAppPostprocessorTransfer
    from_multi_app = pp_sub_0
    to_multi_app = pp_sub_1
    from_postprocessor = average_0
    to_postprocessor = from_0
  []
  [pp_transfer_2]
    type = MultiAppPostprocessorTransfer
    from_multi_app = pp_sub_1
    to_multi_app = pp_sub_0
    from_postprocessor = average_1
    to_postprocessor = from_1
  []
[]
(modules/combined/test/tests/subchannel_thm_coupling/THM_SCM_coupling_pump.i)
# THM file based on https://mooseframework.inl.gov/modules/thermal_hydraulics/tutorials/single_phase_flow/step05.html
# Used to loosely couple THM with SCM
# This is a simple closed loop with a pump providing pressure head, core, pressurizer and HX.
# THM sends massflux and temperature at the inlet of the core, and pressure at the outlet of the core
# to subchannel. Subchannel returns total pressure drop of the assembly and total power to THM and THM calculates an
# average friction factor for the core region.
T_in = 583.0 # K
press = 2e5 # Pa
SC_core = 0.0004980799633447909 #m2
# core parameters
core_length = 1. # m
core_n_elems = 1
A_core = 0.005 #dummy
# pipe parameters
pipe_dia = '${units 10. cm -> m}'
A_pipe = '${fparse 0.25 * pi * pipe_dia^2}'
# heat exchanger parameters
hx_dia_inner = '${units 12. cm -> m}'
hx_wall_thickness = '${units 5. mm -> m}'
hx_dia_outer = '${units 50. cm -> m}'
hx_radius_wall = '${fparse hx_dia_inner / 2. + hx_wall_thickness}'
hx_length = 1.5 # m
hx_n_elems = 25
m_dot_sec_in = 1. # kg/s
[GlobalParams]
  initial_p = ${press}
  initial_vel = 0.0001
  initial_T = ${T_in}
  initial_vel_x = 0
  initial_vel_y = 0
  initial_vel_z = 0
  gravity_vector = '0 0 0'
  rdg_slope_reconstruction = minmod
  scaling_factor_1phase = '1 1e-2 1e-4'
  scaling_factor_rhoV = 1
  scaling_factor_rhouV = 1e-2
  scaling_factor_rhovV = 1e-2
  scaling_factor_rhowV = 1e-2
  scaling_factor_rhoEV = 1e-4
  closures = thm_closures
  fp = sodium_eos
[]
[Functions]
  [q_wall_fn]
    type = ParsedFunction
    symbol_names = 'core_power length'
    symbol_values = 'core_power  ${core_length}'
    expression = 'core_power/length'
  []
[]
[FluidProperties]
  [water]
    type = StiffenedGasFluidProperties
    gamma = 2.35
    cv = 1816.0
    q = -1.167e6
    p_inf = 1.0e9
    q_prime = 0
  []
  [sodium_eos]
    type = StiffenedGasFluidProperties
    gamma = 1.24
    cv = 1052.8
    q = -2.6292e+05
    p_inf = 1.1564e+08
    q_prime = 0
    mu = 3.222e-04
    k = 73.82
  []
[]
[Closures]
  [thm_closures]
    type = Closures1PhaseTHM
  []
  [none_closures]
    type = Closures1PhaseNone
  []
[]
[Materials]
  [f_mat]
    type = ADParsedMaterial
    property_name = f_D
    postprocessor_names = 'core_f'
    expression = 'core_f'
    block = 'core_chan'
  []
[]
[HeatStructureMaterials]
  [steel]
    type = SolidMaterialProperties
    rho = 8050
    k = 45
    cp = 466
  []
[]
[Components]
  [up_pipe_1]
    type = FlowChannel1Phase
    position = '0 0 -0.5'
    orientation = '0 0 1'
    length = 0.5
    n_elems = 15
    A = ${A_pipe}
    D_h = ${pipe_dia}
  []
  [jct1]
    type = JunctionParallelChannels1Phase
    position = '0 0 0'
    connections = 'up_pipe_1:out core_chan:in'
    volume = 1e-5
  []
  [core_chan]
    type = FlowChannel1Phase
    position = '0 0 0'
    orientation = '0 0 1'
    length = ${core_length}
    n_elems = ${core_n_elems}
    A = ${A_core}
    closures = none_closures
  []
  [core_ht]
    type = HeatTransferFromHeatFlux1Phase
    flow_channel = core_chan
    q_wall = q_wall_fn
    P_hf = 1
  []
  [jct2]
    type = JunctionParallelChannels1Phase
    position = '0 0 1'
    connections = 'core_chan:out up_pipe_2:in'
    volume = 1e-5
  []
  [up_pipe_2]
    type = FlowChannel1Phase
    position = '0 0 1'
    orientation = '0 0 1'
    length = 0.5
    n_elems = 10
    A = ${A_pipe}
    D_h = ${pipe_dia}
  []
  [jct3]
    type = JunctionOneToOne1Phase
    connections = 'up_pipe_2:out top_pipe_1:in'
  []
  [top_pipe_1]
    type = FlowChannel1Phase
    position = '0 0 1.5'
    orientation = '1 0 0'
    length = 0.5
    n_elems = 10
    A = ${A_pipe}
    D_h = ${pipe_dia}
  []
  [top_pipe_2]
    type = FlowChannel1Phase
    position = '0.5 0 1.5'
    orientation = '1 0 0'
    length = 0.5
    n_elems = 10
    A = ${A_pipe}
    D_h = ${pipe_dia}
  []
  [jct4]
    type = VolumeJunction1Phase
    position = '0.5 0 1.5'
    volume = 1e-5
    connections = 'top_pipe_1:out top_pipe_2:in press_pipe:in'
  []
  [press_pipe]
    type = FlowChannel1Phase
    position = '0.5 0 1.5'
    orientation = '0 1 0'
    length = 0.2
    n_elems = 5
    A = ${A_pipe}
    D_h = ${pipe_dia}
  []
  [pressurizer]
    type = InletStagnationPressureTemperature1Phase
    p0 = ${press}
    T0 = 580
    input = press_pipe:out
  []
  [jct5]
    type = JunctionOneToOne1Phase
    connections = 'top_pipe_2:out down_pipe_1:in'
  []
  [down_pipe_1]
    type = FlowChannel1Phase
    position = '1 0 1.5'
    orientation = '0 0 -1'
    length = 0.25
    A = ${A_pipe}
    n_elems = 5
  []
  [jct6]
    type = JunctionParallelChannels1Phase
    position = '1 0 1.25'
    connections = 'down_pipe_1:out hx/pri:in'
    volume = 1e-5
  []
  [hx]
    [pri]
      type = FlowChannel1Phase
      position = '1 0 1.25'
      orientation = '0 0 -1'
      length = ${hx_length}
      n_elems = ${hx_n_elems}
      roughness = 1e-5
      A = '${fparse pi * hx_dia_inner * hx_dia_inner / 4.}'
      D_h = ${hx_dia_inner}
    []
    [ht_pri]
      type = HeatTransferFromHeatStructure1Phase
      hs = hx/wall
      hs_side = inner
      flow_channel = hx/pri
      P_hf = '${fparse pi * hx_dia_inner}'
    []
    [wall]
      type = HeatStructureCylindrical
      position = '1 0 1.25'
      orientation = '0 0 -1'
      length = ${hx_length}
      n_elems = ${hx_n_elems}
      widths = '${hx_wall_thickness}'
      n_part_elems = '3'
      materials = 'steel'
      names = '0'
      inner_radius = '${fparse hx_dia_inner / 2.}'
    []
    [ht_sec]
      type = HeatTransferFromHeatStructure1Phase
      hs = hx/wall
      hs_side = outer
      flow_channel = hx/sec
      P_hf = '${fparse 2 * pi * hx_radius_wall}'
    []
    [sec]
      type = FlowChannel1Phase
      position = '${fparse 1 + hx_wall_thickness} 0 -0.25'
      orientation = '0 0 1'
      length = ${hx_length}
      n_elems = ${hx_n_elems}
      A = '${fparse pi * (hx_dia_outer * hx_dia_outer / 4. - hx_radius_wall * hx_radius_wall)}'
      D_h = '${fparse hx_dia_outer - (2 * hx_radius_wall)}'
      fp = water
      initial_T = 300
    []
  []
  [jct7]
    type = JunctionParallelChannels1Phase
    position = '1 0 -0.25'
    connections = 'hx/pri:out down_pipe_2:in'
    volume = 1e-5
  []
  [down_pipe_2]
    type = FlowChannel1Phase
    position = '1 0 -0.25'
    orientation = '0 0 -1'
    length = 0.25
    n_elems = 10
    A = ${A_pipe}
    D_h = ${pipe_dia}
  []
  [jct8]
    type = JunctionOneToOne1Phase
    connections = 'down_pipe_2:out bottom_1:in'
  []
  [bottom_1]
    type = FlowChannel1Phase
    position = '1 0 -0.5'
    orientation = '-1 0 0'
    length = 0.5
    n_elems = 5
    A = ${A_pipe}
    D_h = ${pipe_dia}
  []
  [pump]
    type = Pump1Phase
    position = '0.5 0 -0.5'
    connections = 'bottom_1:out bottom_2:in'
    volume = 1e-4
    A_ref = ${A_pipe}
    head = 3.56
  []
  [bottom_2]
    type = FlowChannel1Phase
    position = '0.5 0 -0.5'
    orientation = '-1 0 0'
    length = 0.5
    n_elems = 5
    A = ${A_pipe}
    D_h = ${pipe_dia}
  []
  [jct9]
    type = JunctionOneToOne1Phase
    connections = 'bottom_2:out up_pipe_1:in'
  []
  [inlet_sec]
    type = InletMassFlowRateTemperature1Phase
    input = 'hx/sec:in'
    m_dot = ${m_dot_sec_in}
    T = 300
  []
  [outlet_sec]
    type = Outlet1Phase
    input = 'hx/sec:out'
    p = 1e5
  []
[]
[Postprocessors]
  [power_to_coolant]
    type = ADHeatRateDirectFlowChannel
    q_wall_prop = q_wall
    block = core_chan
    P_hf = 1
  []
  [core_T_out]
    type = SideAverageValue
    boundary = core_chan:out
    variable = T
  []
  [T_out]
    type = SideAverageValue
    boundary = bottom_1:out
    variable = T
  []
  [core_p_in]
    type = SideAverageValue
    boundary = up_pipe_1:out
    variable = p
  []
  [core_p_out]
    type = SideAverageValue
    boundary = up_pipe_2:in
    variable = p
  []
  [core_delta_p]
    type = ParsedPostprocessor
    pp_names = 'core_p_in core_p_out'
    expression = 'core_p_in - core_p_out'
  []
  [hx_pri_T_out]
    type = SideAverageValue
    boundary = hx/pri:out
    variable = T
  []
  [hx_sec_T_in]
    type = SideAverageValue
    boundary = inlet_sec
    variable = T
  []
  [hx_sec_T_out]
    type = SideAverageValue
    boundary = outlet_sec
    variable = T
  []
  [m_dot_sec]
    type = ADFlowBoundaryFlux1Phase
    boundary = inlet_sec
    equation = mass
  []
  ############## Friction Factor Calculation #############
  [av_rhouA]
    type = ElementAverageValue
    variable = 'rhouA'
    block = 'core_chan'
  []
  [av_rho]
    type = ElementAverageValue
    variable = 'rho'
    block = 'core_chan'
  []
  [Kloss]
    type = ParsedPostprocessor
    pp_names = 'core_delta_p_tgt av_rhouA av_rho'
    expression = '2.0 * core_delta_p_tgt * av_rho * ${A_core} * ${A_core} / (av_rhouA * av_rhouA)'
  []
  [Dh]
    type = ADElementAverageMaterialProperty
    mat_prop = D_h
    block = core_chan
  []
  [core_f]
    type = ParsedPostprocessor
    pp_names = 'Kloss Dh'
    expression = 'Kloss * Dh / ${core_length}'
  []
  ### INFO to send to SC
  [outlet_pressure]
    type = SideAverageValue
    boundary = up_pipe_2:in
    variable = p
  []
  [inlet_mass_flow_rate]
    type = ADFlowJunctionFlux1Phase
    boundary = up_pipe_1:out
    connection_index = 0
    equation = mass
    junction = jct1
  []
  [inlet_temperature]
    type = SideAverageValue
    boundary = up_pipe_1:out
    variable = T
  []
  [inlet_mass_flux]
    type = ParsedPostprocessor
    pp_names = 'inlet_mass_flow_rate'
    expression = 'abs(inlet_mass_flow_rate/${SC_core})'
  []
  #####
  ##### Info received from subchannel
  [core_delta_p_tgt]
    type = Receiver
    default = 100
  []
  [core_power]
    type = Receiver
    default = 100
  []
[]
[Preconditioning]
  [pc]
    type = SMP
    full = true
  []
[]
[Executioner]
  type = Transient
  start_time = 0
  [TimeStepper]
    type = IterationAdaptiveDT
    dt = 2
  []
  dtmax = 50
  end_time = 10
  line_search = basic
  solve_type = NEWTON
  petsc_options_iname = '-pc_type'
  petsc_options_value = 'lu'
  nl_rel_tol = 1e-7
  nl_abs_tol = 1e-7
  nl_max_its = 25
  fixed_point_min_its = 1
  fixed_point_max_its = 5
  accept_on_max_fixed_point_iteration = true
  auto_advance = true
  relaxation_factor = 0.5
[]
[Outputs]
  csv = true
  [console]
    type = Console
    max_rows = 1
    outlier_variable_norms = false
  []
  print_linear_residuals = false
[]
################################################################################
# A multiapp that couples THM to subchannel
################################################################################
[MultiApps]
  # active = ''
  [subchannel]
    type = FullSolveMultiApp
    input_files = 'subchannel.i'
    execute_on = 'timestep_end'
    positions = '0 0 0'
    max_procs_per_app = 1
    output_in_position = true
    bounding_box_padding = '0 0 0.1'
  []
[]
[Transfers]
  # active = ''
  [pressure_drop_transfer] # Get pressure drop to THM from subchannel
    type = MultiAppPostprocessorTransfer
    from_multi_app = subchannel
    from_postprocessor = total_pressure_drop_SC
    to_postprocessor = core_delta_p_tgt
    reduction_type = average
    execute_on = 'timestep_end'
  []
  [power_transfer] # Get Total power to THM from subchannel
    type = MultiAppPostprocessorTransfer
    from_multi_app = subchannel
    from_postprocessor = Total_power
    to_postprocessor = core_power
    reduction_type = average
    execute_on = 'timestep_end'
  []
  [mass_flux_tranfer] # Send mass_flux at the inlet of THM core to subchannel
    type = MultiAppPostprocessorTransfer
    to_multi_app = subchannel
    from_postprocessor = inlet_mass_flux
    to_postprocessor = report_mass_flux_inlet
    execute_on = 'timestep_end'
  []
  [outlet_pressure_tranfer] # Send pressure at the outlet of THM core to subchannel
    type = MultiAppPostprocessorTransfer
    to_multi_app = subchannel
    from_postprocessor = outlet_pressure
    to_postprocessor = report_pressure_outlet
    execute_on = 'timestep_end'
  []
  [inlet_temperature_transfer]
    type = MultiAppPostprocessorTransfer
    to_multi_app = subchannel
    from_postprocessor = inlet_temperature
    to_postprocessor = report_temperature_inlet
    execute_on = 'timestep_end'
  []
[]
(test/tests/multiapps/picard_postprocessor/steady_main.i)
[Mesh]
  type = GeneratedMesh
  dim = 2
  nx = 5
  ny = 5
  parallel_type = replicated
  uniform_refine = 1
[]
[Variables]
  [u]
  []
[]
[Kernels]
  [diff]
    type = Diffusion
    variable = u
  []
  [source]
    type = BodyForce
    variable = u
    value = 1
  []
[]
[BCs]
  [left]
    type = PostprocessorDirichletBC
    variable = u
    boundary = left
    postprocessor = 'from_sub'
  []
[]
[Postprocessors]
  [from_sub]
    type = Receiver
    default = 0
  []
  [to_sub]
    type = SideAverageValue
    variable = u
    boundary = right
  []
  [average]
    type = ElementAverageValue
    variable = u
  []
[]
[Executioner]
  type = Steady
  # Solve parameters
  solve_type = PJFNK
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
  nl_abs_tol = 1e-14
  # App coupling parameters
  fixed_point_max_its = 100
  fixed_point_rel_tol = 0.5  # pseudo transient is slow to converge
  relaxation_factor = 0.8
  transformed_postprocessors = 'from_sub'
[]
[Outputs]
  csv = true
  exodus = false
[]
[MultiApps]
  [sub]
    type = FullSolveMultiApp
    app_type = MooseTestApp
    positions = '0 0 0'
    input_files = steady_sub.i
    clone_parent_mesh = true
    execute_on = 'timestep_begin'
    # we keep the full postprocessor output history of the subapp
    keep_full_output_history = true
    relaxation_factor = 0.8
    transformed_postprocessors = 'from_main'
  []
[]
[Transfers]
  [left_from_sub]
    type = MultiAppPostprocessorTransfer
    from_multi_app = sub
    from_postprocessor = 'to_main'
    to_postprocessor = 'from_sub'
    reduction_type = 'average'
  []
  [right_to_sub]
    type = MultiAppPostprocessorTransfer
    to_multi_app = sub
    from_postprocessor = 'to_sub'
    to_postprocessor = 'from_main'
  []
[]
(test/tests/multiapps/picard_multilevel/multilevel_dt_rejection/parent.i)
[Mesh]
  type = GeneratedMesh
  dim = 2
  nx = 10
  ny = 10
  parallel_type = replicated
[]
[Variables]
  [u]
  []
[]
[AuxVariables]
  [v]
  []
[]
[AuxKernels]
  [set_v]
    type = FunctionAux
    variable = v
    function = 't'
  []
[]
[Kernels]
  [diff]
    type = CoefDiffusion
    variable = u
    coef = 0.1
  []
  [coupled_force]
    type = CoupledForce
    variable = u
    v = v
  []
  [time]
    type = TimeDerivative
    variable = u
  []
[]
[BCs]
  [left]
    type = DirichletBC
    variable = u
    boundary = left
    value = 0
  []
  [right]
    type = DirichletBC
    variable = u
    boundary = right
    value = 1
  []
[]
[Executioner]
  type = Transient
  solve_type = PJFNK
  num_steps = 2
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
  fixed_point_max_its = 1
  auto_advance = false
[]
[MultiApps]
  [sub1]
    type = TransientMultiApp
    positions = '0 0 0'
    input_files = picard_sub.i
    execute_on = 'timestep_end'
  []
[]
[Transfers]
  [u_to_v2]
    type = MultiAppGeneralFieldNearestLocationTransfer
    to_multi_app = sub1
    source_variable = u
    variable = v2
  []
  [time_to_sub]
    type = MultiAppPostprocessorTransfer
    from_postprocessor = time
    to_postprocessor = parent_time
    to_multi_app = sub1
  []
  [dt_to_sub]
    type = MultiAppPostprocessorTransfer
    from_postprocessor = dt
    to_postprocessor = parent_dt
    to_multi_app = sub1
  []
[]
[Postprocessors]
  [time]
    type = TimePostprocessor
    execute_on = 'timestep_end'
  []
  [dt]
    type = TimestepSize
    execute_on = 'timestep_end'
  []
[]
(test/tests/transfers/multiapp_postprocessor_transfer/from_one_sub_parent.i)
[Mesh]
  type = GeneratedMesh
  dim = 2
  nx = 10
  ny = 10
[]
[Variables]
  [./u]
  [../]
[]
[AuxVariables]
  [./from_sub]
  [../]
[]
[Kernels]
  [./diff]
    type = Diffusion
    variable = u
  [../]
[]
[BCs]
  [./left]
    type = DirichletBC
    variable = u
    boundary = left
    value = 0
  [../]
  [./right]
    type = DirichletBC
    variable = u
    boundary = right
    value = 1
  [../]
[]
[Postprocessors]
  [./sub_average]
    type = Receiver
  [../]
  [./sub_sum]
    type = Receiver
  [../]
  [./sub_maximum]
    type = Receiver
  [../]
  [./sub_minimum]
    type = Receiver
  [../]
[]
[Executioner]
  type = Transient
  num_steps = 1
  dt = 1
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
  exodus = true
[]
[MultiApps]
  [./sub]
    positions = '0.2 0.2 0'
    type = TransientMultiApp
    app_type = MooseTestApp
    input_files = 'sub0.i'
  [../]
[]
[Transfers]
  [./pp_transfer_ave]
    type = MultiAppPostprocessorTransfer
    reduction_type = average
    from_multi_app = sub
    from_postprocessor = average
    to_postprocessor = sub_average
  [../]
  [./pp_transfer_sum]
    type = MultiAppPostprocessorTransfer
    reduction_type = sum
    from_multi_app = sub
    from_postprocessor = average
    to_postprocessor = sub_sum
  [../]
  [./pp_transfer_min]
    type = MultiAppPostprocessorTransfer
    reduction_type = minimum
    from_multi_app = sub
    from_postprocessor = average
    to_postprocessor = sub_minimum
  [../]
  [./pp_transfer_max]
    type = MultiAppPostprocessorTransfer
    reduction_type = maximum
    from_multi_app = sub
    from_postprocessor = average
    to_postprocessor = sub_maximum
  [../]
[]
(test/tests/multiapps/picard_multilevel/multilevel_dt_rejection/picard_sub.i)
[Mesh]
  type = GeneratedMesh
  dim = 2
  nx = 10
  ny = 10
[]
[Variables]
  [v]
  []
[]
[AuxVariables]
  [v2]
  []
  [v3]
  []
  [w]
  []
[]
[AuxKernels]
  [set_w]
    type = NormalizationAux
    variable = w
    source_variable = v
    normal_factor = 0.1
  []
[]
[Kernels]
  [diff_v]
    type = Diffusion
    variable = v
  []
  [coupled_force]
    type = CoupledForce
    variable = v
    v = v2
  []
  [coupled_force2]
    type = CoupledForce
    variable = v
    v = v3
  []
  [td_v]
    type = TimeDerivative
    variable = v
  []
[]
[BCs]
  [left_v]
    type = FunctionDirichletBC
    variable = v
    boundary = left
    function = func
  []
  [right_v]
    type = DirichletBC
    variable = v
    boundary = right
    value = 0
  []
[]
[Functions]
  [func]
    type = ParsedFunction
    expression = 'if(t < 2.5, 1, 1 / t)'
  []
[]
[Postprocessors]
  [picard_its]
    type = NumFixedPointIterations
    execute_on = 'initial timestep_end'
  []
  [parent_time]
    type = Receiver
    execute_on = 'timestep_end'
  []
  [parent_dt]
    type = Receiver
    execute_on = 'timestep_end'
  []
  [time]
    type = TimePostprocessor
    execute_on = 'timestep_end'
  []
  [dt]
    type = TimestepSize
    execute_on = 'timestep_end'
  []
[]
[Executioner]
  type = Transient
  solve_type = PJFNK
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
  fixed_point_max_its = 2 # deliberately make it fail at 2 to test the time step rejection behavior
  nl_rel_tol = 1e-5 # loose enough to force multiple Picard iterations on this example
  l_tol = 1e-5 # loose enough to force multiple Picard iterations on this example
  fixed_point_rel_tol = 1e-8
  num_steps = 2
[]
[MultiApps]
  [sub2]
    type = TransientMultiApp
    positions = '0 0 0'
    input_files = picard_sub2.i
    execute_on = timestep_end
  []
[]
[Transfers]
  [v_to_v3]
    type = MultiAppGeneralFieldNearestLocationTransfer
    from_multi_app = sub2
    source_variable = v
    variable = v3
  []
  [w]
    type = MultiAppGeneralFieldNearestLocationTransfer
    to_multi_app = sub2
    source_variable = w
    variable = w
  []
  [time_to_sub]
    type = MultiAppPostprocessorTransfer
    from_postprocessor = time
    to_postprocessor = sub_time
    to_multi_app = sub2
  []
  [dt_to_sub]
    type = MultiAppPostprocessorTransfer
    from_postprocessor = dt
    to_postprocessor = sub_dt
    to_multi_app = sub2
  []
  [matser_time_to_sub]
    type = MultiAppPostprocessorTransfer
    from_postprocessor = time
    to_postprocessor = parent_time
    to_multi_app = sub2
  []
  [parent_dt_to_sub]
    type = MultiAppPostprocessorTransfer
    from_postprocessor = dt
    to_postprocessor = parent_dt
    to_multi_app = sub2
  []
[]