MultiAppGeneralFieldShapeEvaluationTransfer

Transfers field data at the MultiApp position using the finite element shape functions from the origin application.

MultiAppGeneralFieldShapeEvaluationTransfer uses the most natural way to transfer fields from one application to another without extrapolation. It evaluates the shape function of the source variable at the desired transfer location the reconstructs the target variable with the desired finite element type using those values. This object derived from the MultiAppGeneralFieldTransfer family of transfers and inherits many of its features and characteristics.

commentnote

If the origin and target meshes are the same, if there is only a single child app involved on both sides, and if the variables involved are of the same type, the MultiAppCopyTransfer will provide better performance with the same results.

commentnote

This is a re-implementation of MultiAppShapeEvaluationTransfer using a more flexible algorithm.

commentnote:Origin mesh overlap detection

Indetermination due to overlapping origin mesh is only detected reliably if "greedy_search" is set to true.

Example Input File Syntax

In this example, a MultiAppGeneralFieldShapeEvaluationTransfer is used to transfer a variable to_sub from block '1' in the main app to block '1' in the child app sub, filling the variable from_main.

[Transfers]
  [to_sub]
    type = MultiAppGeneralFieldShapeEvaluationTransfer
    to_multi_app = sub
    source_variable = to_sub
    variable = from_main
    from_blocks = 1
    to_blocks = 1
    extrapolation_constant = -1
  []
[]
(moose/test/tests/transfers/general_field/shape_evaluation/subdomain/main.i)

Input Parameters

  • source_variableThe variable to transfer from.

    C++ Type:std::vector<VariableName>

    Controllable:No

    Description:The variable to transfer from.

  • variableThe auxiliary variable to store the transferred values in.

    C++ Type:std::vector<AuxVariableName>

    Controllable:No

    Description:The auxiliary variable to store the transferred values in.

Required 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, the available options include NONE, INITIAL, LINEAR, NONLINEAR, POSTCHECK, TIMESTEP_END, TIMESTEP_BEGIN, MULTIAPP_FIXED_POINT_END, MULTIAPP_FIXED_POINT_BEGIN, FINAL, CUSTOM, SAME_AS_MULTIAPP.

    Default:SAME_AS_MULTIAPP

    C++ Type:ExecFlagEnum

    Options:NONE, INITIAL, LINEAR, NONLINEAR, POSTCHECK, TIMESTEP_END, TIMESTEP_BEGIN, MULTIAPP_FIXED_POINT_END, MULTIAPP_FIXED_POINT_BEGIN, FINAL, CUSTOM, SAME_AS_MULTIAPP

    Controllable:No

    Description:The list of flag(s) indicating when this object should be executed, the available options include NONE, INITIAL, LINEAR, NONLINEAR, POSTCHECK, TIMESTEP_END, TIMESTEP_BEGIN, MULTIAPP_FIXED_POINT_END, MULTIAPP_FIXED_POINT_BEGIN, FINAL, CUSTOM, SAME_AS_MULTIAPP.

  • 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

  • source_variable_componentsThe source array or vector variable component(s).

    C++ Type:std::vector<unsigned int>

    Controllable:No

    Description:The source array or vector variable component(s).

  • target_variable_componentsThe target array or vector variable component(s).

    C++ Type:std::vector<unsigned int>

    Controllable:No

    Description:The target array or vector variable component(s).

  • 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

  • value_conflicts_output10Maximum number of conflicts to output if value-conflicts, from equidistant sources to a given transfer target location, search is turned on

    Default:10

    C++ Type:unsigned int

    Controllable:No

    Description:Maximum number of conflicts to output if value-conflicts, from equidistant sources to a given transfer target location, search is turned on

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

  • allow_skipped_adjustmentFalseIf set to true, the transfer skips adjustment when from or to postprocessor values are either zero or have different signs. If set to false, an error is thrown when encountering these conditions.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:If set to true, the transfer skips adjustment when from or to postprocessor values are either zero or have different signs. If set to false, an error is thrown when encountering these conditions.

  • from_postprocessors_to_be_preservedThe name of the Postprocessor in the from-app to evaluate an adjusting factor.

    C++ Type:std::vector<PostprocessorName>

    Controllable:No

    Description:The name of the Postprocessor in the from-app to evaluate an adjusting factor.

  • to_postprocessors_to_be_preservedThe name of the Postprocessor in the to-app to evaluate an adjusting factor.

    C++ Type:std::vector<PostprocessorName>

    Controllable:No

    Description:The name of the Postprocessor in the to-app to evaluate an adjusting factor.

Conservative Transfer Parameters

  • bbox_factor1Factor to inflate or deflate the source app bounding boxes

    Default:1

    C++ Type:double

    Controllable:No

    Description:Factor to inflate or deflate the source app bounding boxes

  • fixed_bounding_box_sizeOverride source app bounding box size(s) for searches. App bounding boxes will still be centered on the same coordinates. Only non-zero components passed will override.

    C++ Type:std::vector<double>

    Controllable:No

    Description:Override source app bounding box size(s) for searches. App bounding boxes will still be centered on the same coordinates. Only non-zero components passed will override.

Source App Bounding Box Parameters

  • elemental_boundary_restrictionsidesWhether elemental variable boundary restriction is considered by element side or element nodes

    Default:sides

    C++ Type:MooseEnum

    Options:nodes, sides

    Controllable:No

    Description:Whether elemental variable boundary restriction is considered by element side or element nodes

  • from_blocksSubdomain restriction to transfer from (defaults to all the origin app domain)

    C++ Type:std::vector<SubdomainName>

    Controllable:No

    Description:Subdomain restriction to transfer from (defaults to all the origin app domain)

  • from_mesh_divisionMesh division object on the origin application

    C++ Type:MeshDivisionName

    Controllable:No

    Description:Mesh division object on the origin application

  • from_mesh_division_usagenoneHow to use the source mesh division in the transfer. See object documentation for description of each option

    Default:none

    C++ Type:MooseEnum

    Options:spatial_restriction, matching_division, matching_subapp_index, none

    Controllable:No

    Description:How to use the source mesh division in the transfer. See object documentation for description of each option

  • to_blocksSubdomain restriction to transfer to, (defaults to all the target app domain)

    C++ Type:std::vector<SubdomainName>

    Controllable:No

    Description:Subdomain restriction to transfer to, (defaults to all the target app domain)

  • to_boundariesThe boundary we are transferring to (if not specified, whole domain is used).

    C++ Type:std::vector<BoundaryName>

    Controllable:No

    Description:The boundary we are transferring to (if not specified, whole domain is used).

  • to_mesh_divisionMesh division object on the target application

    C++ Type:MeshDivisionName

    Controllable:No

    Description:Mesh division object on the target application

  • to_mesh_division_usagenoneHow to use the target mesh division in the transfer. See object documentation for description of each option

    Default:none

    C++ Type:MooseEnum

    Options:spatial_restriction, matching_division, matching_subapp_index, none

    Controllable:No

    Description:How to use the target mesh division in the transfer. See object documentation for description of each option

Transfer Spatial Restriction Parameters

  • error_on_missFalseWhether or not to error in the case that a target point is not found in the source domain.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether or not to error in the case that a target point is not found in the source domain.

  • extrapolation_constant0Constant to use when no source app can provide a valid value for a target location.

    Default:0

    C++ Type:double

    Controllable:No

    Description:Constant to use when no source app can provide a valid value for a target location.

Extrapolation Behavior Parameters

  • greedy_searchFalseWhether or not to send a point to all the domains. If true, all the processors will be checked for a given point.The code will be slow if this flag is on but it will give a better solution.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether or not to send a point to all the domains. If true, all the processors will be checked for a given point.The code will be slow if this flag is on but it will give a better solution.

  • search_value_conflictsTrueWhether to look for potential conflicts between two valid and different source values for any target point

    Default:True

    C++ Type:bool

    Controllable:No

    Description:Whether to look for potential conflicts between two valid and different source values for any target point

  • use_bounding_boxesTrueWhen set to false, bounding boxes will not be used to restrict the source of the transfer. Either source applications must be set using the from_mesh_division parameter, or a greedy search must be used.

    Default:True

    C++ Type:bool

    Controllable:No

    Description:When set to false, bounding boxes will not be used to restrict the source of the transfer. Either source applications must be set using the from_mesh_division parameter, or a greedy search must be used.

  • use_nearest_appFalseWhen True, transfers from a child application will work by finding the nearest (using the `position` + mesh centroid) sub-app and query that app for the value to transfer.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:When True, transfers from a child application will work by finding the nearest (using the `position` + mesh centroid) sub-app and query that app for the value to transfer.

  • use_nearest_positionName of the the Positions object (in main app) such that transfers to/from a child application will work by finding the nearest position to a target and query only the app / points closer to this position than any other position for the value to transfer.

    C++ Type:PositionsName

    Controllable:No

    Description:Name of the the Positions object (in main app) such that transfers to/from a child application will work by finding the nearest position to a target and query only the app / points closer to this position than any other position for the value to transfer.

Search Algorithm Parameters