@lynnmunday , @cbolisetti , @rpodgorney , KT and I are working on simulating flow through fractured porous media using a MultiApp approach. In this work, the "fracture" is a 2D mesh living within the "matrix", which is a 3D mesh. The fracture nodes/elements don't usually conform with the matrix nodes/elements. We want to transfer information (heat flows) from the fracture to the matrix.
Design
For each node in the source domain, transfer information to the element in the target domain that contains the source node. The source variable must be a nodal (not elemental) variable. The target variable can be a nodal variable or an elemental variable.
This transfer contains the following flags:
use_test_functions (default True): use the target-domain test functions to prescribe the target-variable values. If true, then the source variable will be proportioned to the target mesh, with more of the source variable being prescribed to the target node that is close to a source node. Specifically, target_value[target_node] = source_value[source_node] * target_test_function, where target_test_function is evaluated at the source_node position. If false, then the source variable's value gets copied to all the nodes of the containing element.
sum_results (default True): if multiple source nodes exist within a single element, then the target values are a sum of contributions from each of these source nodes. If false, then the target value will be from a single (unspecified) source node.
divide_by_target_element_volume (default True): divide the target result by the volume of the containing element. This is useful when the source variable is a energy or mass rate, and the target variable will be used in a Kernel to add this energy or mass to the target domain.
Edge cases:
the source node lives outside all the target elements. In this case, it does not transfer any information to the target domain (these source nodes are ignored).
the source node coincides with a target-element boundary or target-element node. In this case, care must be taken with elemental target variables, or when sum_results=True to avoid multiple-counting. I think it would make most sense (from a modelling perspective) to choose just one target element as the "containing element".
Note the crucial aspect of this Transfer: no information gets transferred to target elements that contain zero source nodes.
Impact
Ability to transfer information from source meshes that are contained within target meshes, where the information gets transferred only to the target elements that contain source nodes.
Reason
@lynnmunday , @cbolisetti , @rpodgorney , KT and I are working on simulating flow through fractured porous media using a MultiApp approach. In this work, the "fracture" is a 2D mesh living within the "matrix", which is a 3D mesh. The fracture nodes/elements don't usually conform with the matrix nodes/elements. We want to transfer information (heat flows) from the fracture to the matrix.
Design
For each node in the source domain, transfer information to the element in the target domain that contains the source node. The source variable must be a nodal (not elemental) variable. The target variable can be a nodal variable or an elemental variable.
This transfer contains the following flags:
use_test_functions
(default True): use the target-domain test functions to prescribe the target-variable values. If true, then the source variable will be proportioned to the target mesh, with more of the source variable being prescribed to the target node that is close to a source node. Specifically, target_value[target_node] = source_value[source_node] * target_test_function, where target_test_function is evaluated at the source_node position. If false, then the source variable's value gets copied to all the nodes of the containing element.sum_results
(default True): if multiple source nodes exist within a single element, then the target values are a sum of contributions from each of these source nodes. If false, then the target value will be from a single (unspecified) source node.divide_by_target_element_volume
(default True): divide the target result by the volume of the containing element. This is useful when the source variable is a energy or mass rate, and the target variable will be used in a Kernel to add this energy or mass to the target domain.Edge cases:
sum_results=True
to avoid multiple-counting. I think it would make most sense (from a modelling perspective) to choose just one target element as the "containing element".Note the crucial aspect of this Transfer: no information gets transferred to target elements that contain zero source nodes.
Impact
Ability to transfer information from source meshes that are contained within target meshes, where the information gets transferred only to the target elements that contain source nodes.