BreakMeshByBlockGenerator

Break the mesh at interfaces between blocks. New nodes will be generated so elements on each side of the break are no longer connected. At the moment, this only works on a 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

  • inputThe mesh we want to modify

    C++ Type:MeshGeneratorName

    Unit:(no unit assumed)

    Controllable:No

    Description:The mesh we want to modify

Required Parameters

  • add_interface_on_two_sidesFalseWhether to add an additional interface boundary at the other side.

    Default:False

    C++ Type:bool

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    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>>

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    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>

    Unit:(no unit assumed)

    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>

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    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

  1. 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]