- nxNumber of divisions in X
C++ Type:unsigned int
Controllable:No
Description:Number of divisions in X
 - nyNumber of divisions in Y
C++ Type:unsigned int
Controllable:No
Description:Number of divisions in Y
 - nzNumber of divisions in Z
C++ Type:unsigned int
Controllable:No
Description:Number of divisions in Z
 
CartesianGridDivision
Divide the mesh along a Cartesian grid. Numbering increases from bottom to top and from left to right and from back to front. The inner ordering is X, then Y, then Z
The number of mesh divisions/regions is the product of the number of bins in each direction.
Points that lie outside the Cartesian grid may be assigned to the grid outer bins using the "assign_domain_outside_grid_to_border" parameter.
Using a Positions object as the "center_positions" parameter, multiple Cartesian grids can be created around each position computed by that object. The division index of a point is then:
with  the index in the Positions object of the position nearest from the point and  the number of divisions for a single Cartesian grid, based on the X/Y/Z discretization specified.
For points lying within the standard tolerance of an internal boundary of the Cartesian grid, this object will output a warning. If you do not mind the indetermination on which bins they belong to but do mind that a warning is output, please reach out to a MOOSE (or any MOOSE app) developer.
Input Parameters
- assign_domain_outside_grid_to_borderFalseWhether to map the domain outside the grid back to the border of the grid
Default:False
C++ Type:bool
Controllable:No
Description:Whether to map the domain outside the grid back to the border of the grid
 - bottom_leftBottom-back-left corner of the grid
C++ Type:libMesh::Point
Controllable:No
Description:Bottom-back-left corner of the grid
 - centerCenter of the Cartesian grid
C++ Type:libMesh::Point
Controllable:No
Description:Center of the Cartesian grid
 - center_positionsPositions of the centers of divided Cartesian grids
C++ Type:PositionsName
Controllable:No
Description:Positions of the centers of divided Cartesian grids
 - top_rightTop-front-right corner of the grid
C++ Type:libMesh::Point
Controllable:No
Description:Top-front-right corner of the grid
 - widthsWidths in the X, Y and Z directions
C++ Type:libMesh::Point
Controllable:No
Description:Widths in the X, Y and Z directions
 
Optional Parameters
- 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:No
Description:Set the enabled status of the MooseObject.
 
Advanced Parameters
Input Files
- (test/tests/transfers/general_field/shape_evaluation/mesh_division/sub.i)
 - (test/tests/transfers/general_field/nearest_node/mesh_division/sub.i)
 - (test/tests/transfers/general_field/shape_evaluation/mesh_division/main_match_subapps.i)
 - (test/tests/transfers/general_field/nearest_node/mesh_division/main_match_division.i)
 - (test/tests/meshdivisions/cartesian_division.i)
 - (test/tests/transfers/general_field/nearest_node/mesh_division/main.i)
 - (test/tests/transfers/general_field/nearest_node/mesh_division/main_match_subapps.i)
 - (test/tests/transfers/general_field/shape_evaluation/mesh_division/main.i)
 
assign_domain_outside_grid_to_border
Default:False
C++ Type:bool
Controllable:No
Description:Whether to map the domain outside the grid back to the border of the grid
center_positions
C++ Type:PositionsName
Controllable:No
Description:Positions of the centers of divided Cartesian grids
(test/tests/transfers/general_field/shape_evaluation/mesh_division/sub.i)
base_value = 3
[Mesh]
  type = GeneratedMesh
  dim = 2
  nx = 5
  ny = 5
[]
[MeshDivisions]
  [middle_sub]
    type = CartesianGridDivision
    # excludes the nodes on the left boundary
    bottom_left = '0.0008 0.20001 0'
    top_right = '0.6001 1 0'
    nx = 4
    ny = 4
    nz = 1
  []
[]
[AuxVariables]
  [from_main]
    initial_condition = -1
  []
  [from_main_elem]
    order = CONSTANT
    family = MONOMIAL
    initial_condition = -1
  []
  [to_main]
    [InitialCondition]
      type = FunctionIC
      function = '${base_value} + 2*x*x + 3*y*y*y'
    []
  []
  [to_main_elem]
    order = CONSTANT
    family = MONOMIAL
    [InitialCondition]
      type = FunctionIC
      function = '${base_value} + 1 + 2*x*x + 3*y*y*y'
    []
  []
[]
[UserObjects]
  [to_main]
    type = LayeredAverage
    direction = x
    num_layers = 10
    variable = to_main
  []
  [to_main_elem]
    type = LayeredAverage
    direction = x
    num_layers = 10
    variable = to_main_elem
  []
[]
[Executioner]
  type = Transient
  num_steps = 1
[]
[Problem]
  solve = false
[]
[Outputs]
  [out]
    type = Exodus
    hide = 'to_main to_main_elem div'
    overwrite = true
  []
[]
# For debugging purposes
[AuxVariables]
  [div]
    family = MONOMIAL
    order = CONSTANT
  []
[]
[AuxKernels]
  [mesh_div]
    type = MeshDivisionAux
    variable = div
    mesh_division = 'middle_sub'
  []
[]
(test/tests/transfers/general_field/nearest_node/mesh_division/sub.i)
base_value = 3
[Mesh]
  type = GeneratedMesh
  dim = 2
  nx = 5
  ny = 5
  xmin = -0.1
  ymin = -0.1
  xmax = 0.1
  ymax = 0.1
[]
[MeshDivisions]
  [middle_sub]
    type = CartesianGridDivision
    # this division excludes the boundary nodes. The
    # peaks in to_main on the boundaries should not be transferred
    bottom_left = '-0.021 -0.021 0'
    top_right = '0.081 0.081 0'
    nx = 2
    ny = 2
    nz = 1
  []
[]
[AuxVariables]
  [from_main]
    initial_condition = -1
  []
  [from_main_elem]
    order = CONSTANT
    family = MONOMIAL
    initial_condition = -1
  []
  [to_main]
    [InitialCondition]
      type = FunctionIC
      function = '${base_value} + 20*x + 300*y*y*y'
    []
  []
  [to_main_elem]
    order = CONSTANT
    family = MONOMIAL
    [InitialCondition]
      type = FunctionIC
      function = '${base_value} + 1 + 20*x + 300*y*y*y'
    []
  []
[]
[UserObjects]
  [to_main]
    type = LayeredAverage
    direction = x
    num_layers = 10
    variable = to_main
  []
  [to_main_elem]
    type = LayeredAverage
    direction = x
    num_layers = 10
    variable = to_main_elem
  []
[]
[Executioner]
  type = Transient
  num_steps = 1
[]
[Problem]
  solve = false
[]
[Outputs]
  [out]
    type = Exodus
    hide = 'to_main to_main_elem div'
    overwrite = true
  []
[]
# For debugging purposes
[AuxVariables]
  [div]
    family = MONOMIAL
    order = CONSTANT
  []
[]
[AuxKernels]
  [mesh_div]
    type = MeshDivisionAux
    variable = div
    mesh_division = 'middle_sub'
  []
[]
(test/tests/transfers/general_field/shape_evaluation/mesh_division/main_match_subapps.i)
# Base input for testing transfers with mesh divisions restrictions. The mesh divisions
# in the parent app will be matched with a subapp index.
# In the to_multiapp direction, the main app data at the mesh division bins of index 1-4 will
# be transferred to subapps of index 1-4 respectively
# In the from_multiapp direction, the main app fields at the mesh divisions bins of index 1-4
# will receive data (be transferred) from subapps of index 1-4 respectively
# It has the following complexities:
# - several sub-applications
# - transfers both from and to the subapps
# - both nodal and elemental variables
# Tests derived from this input may add complexities through command line arguments
[Mesh]
  type = GeneratedMesh
  dim = 2
  nx = 4
  ny = 4
[]
[MeshDivisions]
  [middle]
    type = CartesianGridDivision
    bottom_left = '0.21 0.21 0'
    # cover more and sample more bins
    top_right = '1.001 1.001 0'
    nx = 2
    ny = 2
    nz = 1
  []
[]
[AuxVariables]
  [from_sub]
    initial_condition = -1
  []
  [from_sub_elem]
    order = CONSTANT
    family = MONOMIAL
    initial_condition = -1
  []
  [to_sub]
    [InitialCondition]
      type = FunctionIC
      function = '1 + 2*x*x + 3*y*y*y'
    []
  []
  [to_sub_elem]
    order = CONSTANT
    family = MONOMIAL
    [InitialCondition]
      type = FunctionIC
      function = '2 + 2*x*x + 3*y*y*y'
    []
  []
[]
[Executioner]
  type = Steady
[]
[Problem]
  solve = false
[]
[Outputs]
  [out]
    type = Exodus
    hide = 'to_sub to_sub_elem div'
    overwrite = true
  []
[]
[MultiApps]
  [sub]
    type = FullSolveMultiApp
    app_type = MooseTestApp
    input_files = sub.i
    output_in_position = true
    # The positions are randomly offset to prevent equi-distant nearest-locations
    # They are offset so they overlap with the division they are being matched to
    positions = '-0.5001 -0.3000013 0
                 0.30054 -0.300001985 0
                 -0.30021 0.2000022 0
                 0.200212 0.4100022 0'
    # To differentiate the values received from each subapp
    cli_args = 'base_value=10 base_value=20 base_value=30 base_value=40'
  []
[]
[Transfers]
  [to_sub]
    type = MultiAppGeneralFieldShapeEvaluationTransfer
    to_multi_app = sub
    source_variable = to_sub
    variable = from_main
    from_mesh_division = middle
    from_mesh_division_usage = 'matching_subapp_index'
    # Test features non-overlapping meshes
    error_on_miss = false
  []
  [to_sub_elem]
    type = MultiAppGeneralFieldShapeEvaluationTransfer
    to_multi_app = sub
    source_variable = to_sub_elem
    variable = from_main_elem
    from_mesh_division = middle
    from_mesh_division_usage = 'matching_subapp_index'
    # Test features non-overlapping meshes
    error_on_miss = false
  []
  [from_sub]
    type = MultiAppGeneralFieldShapeEvaluationTransfer
    from_multi_app = sub
    source_variable = to_main
    variable = from_sub
    to_mesh_division = middle
    to_mesh_division_usage = 'matching_subapp_index'
    # Test features non-overlapping meshes
    error_on_miss = false
  []
  [from_sub_elem]
    type = MultiAppGeneralFieldShapeEvaluationTransfer
    from_multi_app = sub
    source_variable = to_main_elem
    variable = from_sub_elem
    to_mesh_division = middle
    to_mesh_division_usage = 'matching_subapp_index'
  []
[]
# For debugging purposes
[AuxVariables]
  [div]
    family = MONOMIAL
    order = CONSTANT
  []
[]
[AuxKernels]
  [mesh_div]
    type = MeshDivisionAux
    variable = div
    mesh_division = 'middle'
  []
[]
(test/tests/transfers/general_field/nearest_node/mesh_division/main_match_division.i)
# Base input for testing transfers with mesh divisions restrictions with a mapping from
# source mesh divisions to target mesh divisions. It has the following complexities:
# - multiple sub-applications
# - transfers both from and to the subapps
# - both nodal and elemental variables
# Tests derived from this input may add complexities through command line arguments
# Explaining results on the main app:
# Each value on the main app comes from a region with the same division index on a subapp
# Because the subapp is not very discretized in Y, some source mesh division indices
# are not represented in the subapps. Therefore these mesh divisions are not present in the
# main app.
# Explaining results on the sub apps:
# Each subapp receives results for all its target mesh divisions. They are naturally all the
# same because they are all matched with the same source app (parent app) source division
# and the division on the parent app is too small to have more than 1 valid point + value
[Mesh]
  type = GeneratedMesh
  dim = 2
  nx = 10
  ny = 10
[]
[MeshDivisions]
  [middle]
    type = CartesianGridDivision
    bottom_left = '0.21 0.21 0'
    # cover more and sample more bins
    top_right = '1.001 1.001 0'
    nx = 5
    ny = 5
    nz = 1
  []
[]
[AuxVariables]
  [from_sub]
    initial_condition = -1
  []
  [from_sub_elem]
    order = CONSTANT
    family = MONOMIAL
    initial_condition = -1
  []
  [to_sub]
    [InitialCondition]
      type = FunctionIC
      function = '1 + 2*x*x + 3*y*y*y'
    []
  []
  [to_sub_elem]
    order = CONSTANT
    family = MONOMIAL
    [InitialCondition]
      type = FunctionIC
      function = '2 + 2*x*x + 3*y*y*y'
    []
  []
[]
[Executioner]
  type = Steady
[]
[Problem]
  solve = false
[]
[Outputs]
  [out]
    type = Exodus
    hide = 'to_sub to_sub_elem div'
    overwrite = true
  []
[]
[MultiApps]
  [sub]
    type = FullSolveMultiApp
    app_type = MooseTestApp
    input_files = sub.i
    output_in_position = true
    # The positions are randomly offset to prevent equi-distant nearest-locations
    positions = '0.1001 0.0000013 0
                 0.30054 0.600001985 0
                 0.70021 0.0000022 0
                 0.800212 0.5500022 0'
    cli_args = "base_value=1;MeshDivisions/middle_sub/nx=5;MeshDivisions/middle_sub/ny=5;Mesh/nx=10 "
               "base_value=2;MeshDivisions/middle_sub/nx=5;MeshDivisions/middle_sub/ny=5;Mesh/nx=10 "
               "base_value=3;MeshDivisions/middle_sub/nx=5;MeshDivisions/middle_sub/ny=5;Mesh/nx=10 "
               "base_value=4;MeshDivisions/middle_sub/nx=5;MeshDivisions/middle_sub/ny=5;Mesh/nx=10"
  []
[]
[Transfers]
  [to_sub]
    type = MultiAppGeneralFieldNearestLocationTransfer
    to_multi_app = sub
    source_variable = to_sub
    variable = from_main
    from_mesh_division = middle
    from_mesh_division_usage = 'matching_division'
    to_mesh_division = middle_sub
    to_mesh_division_usage = 'matching_division'
    # we avoid bounding boxes because the parent and children apps do
    # not overlap so unless we grow the boxes to cover the entire source,
    # the transfer will not pick up all the source mesh divisions
    greedy_search = true
    use_bounding_boxes = false
  []
  [to_sub_elem]
    type = MultiAppGeneralFieldNearestLocationTransfer
    to_multi_app = sub
    source_variable = to_sub_elem
    variable = from_main_elem
    from_mesh_division = middle
    from_mesh_division_usage = 'matching_division'
    to_mesh_division = middle_sub
    to_mesh_division_usage = 'matching_division'
    greedy_search = true
    use_bounding_boxes = false
  []
  [from_sub]
    type = MultiAppGeneralFieldNearestLocationTransfer
    from_multi_app = sub
    source_variable = to_main
    variable = from_sub
    from_mesh_division = middle_sub
    from_mesh_division_usage = 'matching_division'
    to_mesh_division = middle
    to_mesh_division_usage = 'matching_division'
    greedy_search = true
    use_bounding_boxes = false
    # Test features non-overlapping meshes
    error_on_miss = false
  []
  [from_sub_elem]
    type = MultiAppGeneralFieldNearestLocationTransfer
    from_multi_app = sub
    source_variable = to_main_elem
    variable = from_sub_elem
    from_mesh_division = middle_sub
    from_mesh_division_usage = 'matching_division'
    to_mesh_division = middle
    to_mesh_division_usage = 'matching_division'
    greedy_search = true
    use_bounding_boxes = false
    # Test features non-overlapping meshes
    error_on_miss = false
  []
[]
# For debugging purposes
[AuxVariables]
  [div]
    family = MONOMIAL
    order = CONSTANT
  []
[]
[AuxKernels]
  [mesh_div]
    type = MeshDivisionAux
    variable = div
    mesh_division = 'middle'
  []
[]
(test/tests/meshdivisions/cartesian_division.i)
[Mesh]
  [cmg]
    type = CartesianMeshGenerator
    dim = 3
    dx = '1.5 2.4 0.1'
    dy = '1.3 0.9'
    dz = '0.4 0.5 0.6 0.7'
    ix = '2 1 1'
    iy = '2 3'
    iz = '1 1 1 1'
  []
  # To keep VPP output consistently ordered
  allow_renumbering = false
[]
[MeshDivisions]
  active = 'cartesian_div'
  [cartesian_div]
    type = CartesianGridDivision
    bottom_left = '0.1 0.5 0.5'
    top_right = '5 2 1'
    nx = '3'
    ny = '4'
    nz = '1'
  []
  [cartesian_div_center]
    type = CartesianGridDivision
    center = '2.55 1.25 0.75'
    widths = '4.9 1.5 0.5'
    nx = '3'
    ny = '4'
    nz = '1'
  []
  [cartesian_div_center_pos]
    type = CartesianGridDivision
    center_positions = 'center'
    widths = '4.9 1.5 0.5'
    nx = '3'
    ny = '4'
    nz = '1'
  []
[]
[Positions]
  [center]
    type = InputPositions
    positions = '2.55 1.25 0.75'
  []
[]
[AuxVariables]
  [div]
    family = MONOMIAL
    order = CONSTANT
  []
[]
[AuxKernels]
  [mesh_div]
    type = MeshDivisionAux
    variable = div
    mesh_division = 'cartesian_div'
  []
[]
[VectorPostprocessors]
  [div_out]
    type = ElementValueSampler
    variable = 'div'
    sort_by = 'id'
    outputs = csv
  []
[]
[Problem]
  solve = false
[]
[Executioner]
  type = Steady
[]
[Outputs]
  csv = true
[]
(test/tests/transfers/general_field/nearest_node/mesh_division/main.i)
# Base input for testing transfers. It has the following complexities:
# - transfers both from and to the subapps
# - both nodal and elemental variables
# Tests derived from this input may add complexities through command line arguments
[Mesh]
  type = GeneratedMesh
  dim = 2
  nx = 10
  ny = 10
[]
[MeshDivisions]
  [middle]
    type = CartesianGridDivision
    bottom_left = '0.21 0.21 0'
    top_right = '0.81 0.81 0'
    nx = 2
    ny = 2
    nz = 1
  []
[]
[AuxVariables]
  [from_sub]
    initial_condition = -1
  []
  [from_sub_elem]
    order = CONSTANT
    family = MONOMIAL
    initial_condition = -1
  []
  [to_sub]
    [InitialCondition]
      type = FunctionIC
      function = '1 + 2*x*x + 3*y*y*y'
    []
  []
  [to_sub_elem]
    order = CONSTANT
    family = MONOMIAL
    [InitialCondition]
      type = FunctionIC
      function = '2 + 2*x*x + 3*y*y*y'
    []
  []
[]
[Executioner]
  type = Steady
[]
[Problem]
  solve = false
[]
[Outputs]
  [out]
    type = Exodus
    hide = 'to_sub to_sub_elem div'
    overwrite = true
  []
[]
[MultiApps]
  [sub]
    type = FullSolveMultiApp
    app_type = MooseTestApp
    input_files = sub.i
    output_in_position = true
    # The positions are randomly offset to prevent equi-distant nearest-locations
    positions = '0.1001 0.0000013 0
                 0.30054 0.600001985 0
                 0.70021 0.0000022 0
                 0.800212 0.5500022 0'
    cli_args = 'base_value=1 base_value=2 base_value=3 base_value=4'
  []
[]
[Transfers]
  [to_sub]
    type = MultiAppGeneralFieldNearestLocationTransfer
    to_multi_app = sub
    source_variable = to_sub
    variable = from_main
  []
  [to_sub_elem]
    type = MultiAppGeneralFieldNearestLocationTransfer
    to_multi_app = sub
    source_variable = to_sub_elem
    variable = from_main_elem
  []
  [from_sub]
    type = MultiAppGeneralFieldNearestLocationTransfer
    from_multi_app = sub
    source_variable = to_main
    variable = from_sub
  []
  [from_sub_elem]
    type = MultiAppGeneralFieldNearestLocationTransfer
    from_multi_app = sub
    source_variable = to_main_elem
    variable = from_sub_elem
  []
[]
# For debugging purposes
[AuxVariables]
  [div]
    family = MONOMIAL
    order = CONSTANT
  []
[]
[AuxKernels]
  [mesh_div]
    type = MeshDivisionAux
    variable = div
    mesh_division = 'middle'
  []
[]
(test/tests/transfers/general_field/nearest_node/mesh_division/main_match_subapps.i)
# Base input for testing transfers with mesh divisions restrictions. The mesh divisions
# in the parent app will be matched with a subapp index.
# In the to_multiapp direction, the main app data at the mesh division bins of index 1-4 will
# be transferred to subapps of index 1-4 respectively
# In the from_multiapp direction, the main app fields at the mesh divisions bins of index 1-4
# will receive data (be transferred) from subapps of index 1-4 respectively
# It has the following complexities:
# - several sub-applications
# - transfers both from and to the subapps
# - both nodal and elemental variables
# Tests derived from this input may add complexities through command line arguments
[Mesh]
  type = GeneratedMesh
  dim = 2
  nx = 4
  ny = 4
[]
[MeshDivisions]
  [middle]
    type = CartesianGridDivision
    bottom_left = '0.21 0.21 0'
    # cover more and sample more bins
    top_right = '1.001 1.001 0'
    nx = 2
    ny = 2
    nz = 1
  []
[]
[AuxVariables]
  [from_sub]
    initial_condition = -1
  []
  [from_sub_elem]
    order = CONSTANT
    family = MONOMIAL
    initial_condition = -1
  []
  [to_sub]
    [InitialCondition]
      type = FunctionIC
      function = '1 + 2*x*x + 3*y*y*y'
    []
  []
  [to_sub_elem]
    order = CONSTANT
    family = MONOMIAL
    [InitialCondition]
      type = FunctionIC
      function = '2 + 2*x*x + 3*y*y*y'
    []
  []
[]
[Executioner]
  type = Steady
[]
[Problem]
  solve = false
[]
[Outputs]
  [out]
    type = Exodus
    hide = 'to_sub to_sub_elem div'
    overwrite = true
  []
[]
[MultiApps]
  [sub]
    type = FullSolveMultiApp
    app_type = MooseTestApp
    input_files = sub.i
    output_in_position = true
    # The positions are randomly offset to prevent equi-distant nearest-locations
    positions = '0.1001 0.0000013 0
                 0.30054 0.600001985 0
                 0.70021 0.4000022 0
                 0.800212 0.8500022 0'
    # To differentiate the values received from each subapp
    cli_args = 'base_value=1 base_value=2 base_value=3 base_value=4'
  []
[]
[Transfers]
  [to_sub]
    type = MultiAppGeneralFieldNearestLocationTransfer
    to_multi_app = sub
    source_variable = to_sub
    variable = from_main
    from_mesh_division = middle
    from_mesh_division_usage = 'matching_subapp_index'
  []
  [to_sub_elem]
    type = MultiAppGeneralFieldNearestLocationTransfer
    to_multi_app = sub
    source_variable = to_sub_elem
    variable = from_main_elem
    from_mesh_division = middle
    from_mesh_division_usage = 'matching_subapp_index'
  []
  [from_sub]
    type = MultiAppGeneralFieldNearestLocationTransfer
    from_multi_app = sub
    source_variable = to_main
    variable = from_sub
    to_mesh_division = middle
    to_mesh_division_usage = 'matching_subapp_index'
  []
  [from_sub_elem]
    type = MultiAppGeneralFieldNearestLocationTransfer
    from_multi_app = sub
    source_variable = to_main_elem
    variable = from_sub_elem
    to_mesh_division = middle
    to_mesh_division_usage = 'matching_subapp_index'
  []
[]
# For debugging purposes
[AuxVariables]
  [div]
    family = MONOMIAL
    order = CONSTANT
  []
[]
[AuxKernels]
  [mesh_div]
    type = MeshDivisionAux
    variable = div
    mesh_division = 'middle'
  []
[]
(test/tests/transfers/general_field/shape_evaluation/mesh_division/main.i)
# Base input for testing transfers. It has the following complexities:
# - transfers both from and to the subapps
# - both nodal and elemental variables
# Tests derived from this input may add complexities through command line arguments
[Mesh]
  type = GeneratedMesh
  dim = 2
  nx = 10
  ny = 10
[]
[MeshDivisions]
  [middle]
    type = CartesianGridDivision
    bottom_left = '0.01 0.01 0'
    top_right = '0.81 0.81 0'
    nx = 4
    ny = 4
    nz = 1
  []
[]
[AuxVariables]
  [from_sub]
    initial_condition = -1
  []
  [from_sub_elem]
    order = CONSTANT
    family = MONOMIAL
    initial_condition = -1
  []
  [to_sub]
    [InitialCondition]
      type = FunctionIC
      function = '1 + 2*x*x + 3*y*y*y'
    []
  []
  [to_sub_elem]
    order = CONSTANT
    family = MONOMIAL
    [InitialCondition]
      type = FunctionIC
      function = '2 + 2*x*x + 3*y*y*y'
    []
  []
[]
[Executioner]
  type = Steady
[]
[Problem]
  solve = false
[]
[Outputs]
  [out]
    type = Exodus
    hide = 'to_sub to_sub_elem div'
    overwrite = true
  []
[]
[MultiApps]
  [sub]
    type = FullSolveMultiApp
    app_type = MooseTestApp
    input_files = sub.i
    output_in_position = true
    # we want to avoid sampling on a boundary
    positions = '0.00001 0.0001 0'
    cli_args = 'base_value=1'
  []
[]
[Transfers]
  [to_sub]
    type = MultiAppGeneralFieldShapeEvaluationTransfer
    to_multi_app = sub
    source_variable = to_sub
    variable = from_main
    # Test features non-overlapping meshes
    error_on_miss = false
  []
  [to_sub_elem]
    type = MultiAppGeneralFieldShapeEvaluationTransfer
    to_multi_app = sub
    source_variable = to_sub_elem
    variable = from_main_elem
    # Test features non-overlapping meshes
    error_on_miss = false
  []
  [from_sub]
    type = MultiAppGeneralFieldShapeEvaluationTransfer
    from_multi_app = sub
    source_variable = to_main
    variable = from_sub
    # Test features non-overlapping meshes
    error_on_miss = false
  []
  [from_sub_elem]
    type = MultiAppGeneralFieldShapeEvaluationTransfer
    from_multi_app = sub
    source_variable = to_main_elem
    variable = from_sub_elem
    # Test features non-overlapping meshes
    error_on_miss = false
  []
[]
# For debugging purposes
[AuxVariables]
  [div]
    family = MONOMIAL
    order = CONSTANT
  []
[]
[AuxKernels]
  [mesh_div]
    type = MeshDivisionAux
    variable = div
    mesh_division = 'middle'
  []
[]