- inputThe mesh we want to modify
C++ Type:MeshGeneratorName
Controllable:No
Description:The mesh we want to modify
BreakMeshByBlockGenerator
Break boundaries based on the subdomains to which their sides are attached. Naming convention for the new boundaries will be the old boundary name plus "_to_" plus the subdomain name. At the momentthis only works on REPLICATED mesh
Description
This class implements a MeshGenerator to split a monolithic mesh by blocks similar to what is proposed by VP Nguyen Nguyen (2014).
To split the mesh, nodes shared by multiple blocks are duplicated N-1 times (where N is the number of blocks sharing a particular node). Each duplicated nodes is assigned to one block and all the elements sharing that node are updated. A new sideset identifying the new interface is added, and it is always linked to elements belonging to blocks with the lower ID.
As an option, the interface can be split into different sidesets, where is the number of adjacent block pairs. This is achieved by setting split_interface=true
and is useful when modeling interfaces with different parameters.
Two types of block restricted option are provided, namely surrounding_blocks
and block_pairs
. The surrounding_blocks
will create interfaces surrounding specified block. When surrounding_blocks
is provided, the additional boundary interface_transition
can be added by setting add_transition_interface=true
. The interface_transition
boundary identifies the interface between the provided blocks and the rest of the mesh. The block_pairs
option will create interfaces only \emph{between} the specified block pairs. Multiple block pairs can be provided, and they are separated by semicolon (;
). The block_pairs
option does not work with add_transition_interface
. By default when no block restricted option is used, interfaces will be generated between all blocks. In addition, the add_interface_on_two_sides
parameter allows to generate interface boundaries on both sides of the interface which can be used to enforce thermal and mechanical contact at the interface.
Example Input File Syntax
Single Interface
[Mesh]
[./fmg]
type = FileMeshGenerator
file = 4ElementJunction.e
[]
[./breakmesh]
type = BreakMeshByBlockGenerator
input = fmg
[]
[]
(../moose/test/tests/meshgenerators/break_mesh_by_block_generator/break_mesh_2DJunction_auto.i)Multiple Interfaces
When split_interface=true
, the new generated interface is split by block pairs and named by joining the block names. For instance if one has two neighboring blocks - one named wood
and named steel
with blockID
equal to 1
and 2
, respectively - the new interface will be named wood_steel
. The naming order follows the block ID order. For this simple example, the new sideset will be on the block named wood
. If one block is not named, its name will default to Block
plus the blockID
. For instance, if block 2 is not named the new interface will be named wood_Block2
.
[Mesh]
[./fmg]
type = FileMeshGenerator
file = 4ElementJunction.e
[]
[./breakmesh]
type = BreakMeshByBlockGenerator
input = fmg
split_interface = true
[]
[]
(../moose/test/tests/meshgenerators/break_mesh_by_block_generator/break_mesh_2DJunction_splittrue.i)block_pair option
For block_pair
option, only the nodes that are shared by specific block pairs will be newly created. In the example below, three different cases are shown, where one, two and three new nodes are created, respectively.
[Mesh]
[msh]
type = CartesianMeshGenerator
dim = 2
dx = '1 1 1 1'
dy = '1 1 1'
subdomain_id = '0 0 0 0 1 2 2 1 1 1 1 1'
[]
[split]
input = msh
type = BreakMeshByBlockGenerator
split_interface = true
[]
[]
(../moose/test/tests/meshgenerators/break_mesh_by_block_generator/break_mesh_block_pairs_restricted_3blocks.i)Input Parameters
- add_interface_on_two_sidesFalseWhether to add an additional interface boundary at the other side.
Default:False
C++ Type:bool
Controllable:No
Description:Whether to add an additional interface boundary at the other side.
- add_transition_interfaceFalseIf true and block is not empty, a special boundary named interface_transition is generate between listed blocks and other blocks.
Default:False
C++ Type:bool
Controllable:No
Description:If true and block is not empty, a special boundary named interface_transition is generate between listed blocks and other blocks.
- block_pairsThe list of subdomain pairs between which interfaces will be generated.
C++ Type:std::vector<std::vector<SubdomainName>>
Controllable:No
Description:The list of subdomain pairs between which interfaces will be generated.
- interface_nameinterfacethe name of the new interface. Cannot be used whit `split_interface=true`
Default:interface
C++ Type:std::string
Controllable:No
Description:the name of the new interface. Cannot be used whit `split_interface=true`
- interface_transition_nameinterface_transitionthe name of the interface transition boundary created when blocks are provided
Default:interface_transition
C++ Type:BoundaryName
Controllable:No
Description:the name of the interface transition boundary created when blocks are provided
- split_interfaceFalseIf true, it creates a different interface for each block pair.
Default:False
C++ Type:bool
Controllable:No
Description:If true, it creates a different interface for each block pair.
- split_transition_interfaceFalseWhether to split the transition interface by blocks.
Default:False
C++ Type:bool
Controllable:No
Description:Whether to split the transition interface by blocks.
- surrounding_blocksThe list of subdomain names surrounding which interfaces will be generated.
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:The list of subdomain names surrounding which interfaces will be generated.
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.
- save_with_nameKeep the mesh from this mesh generator in memory with the name specified
C++ Type:std::string
Controllable:No
Description:Keep the mesh from this mesh generator in memory with the name specified
Advanced Parameters
- nemesisFalseWhether or not to output the mesh file in the nemesisformat (only if output = true)
Default:False
C++ Type:bool
Controllable:No
Description:Whether or not to output the mesh file in the nemesisformat (only if output = true)
- outputFalseWhether or not to output the mesh file after generating the mesh
Default:False
C++ Type:bool
Controllable:No
Description:Whether or not to output the mesh file after generating the mesh
- show_infoFalseWhether or not to show mesh info after generating the mesh (bounding box, element types, sidesets, nodesets, subdomains, etc)
Default:False
C++ Type:bool
Controllable:No
Description:Whether or not to show mesh info after generating the mesh (bounding box, element types, sidesets, nodesets, subdomains, etc)
Debugging Parameters
References
- Vinh Phu Nguyen.
An open source program to generate zero-thickness cohesive interface elements.
Advances in Engineering Software, 74:27–39, 2014.
doi:10.1016/j.advengsoft.2014.04.002.[BibTeX]