- inputThe mesh we want to modify
C++ Type:MeshGeneratorName
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
This class implement 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 element 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. is the number of adjacent block pairs. This is achieved by setting split_interface=true
. This is useful when modeling interfaces with different parameters.
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
.
Input Parameters
- interface_nameinterfacethe name of the new interface. Cannot be used whit `split_interface=true`
Default:interface
C++ Type:std::string
Options:
Description:the name of the new interface. Cannot be used whit `split_interface=true`
- split_interfaceFalseIf true, it create a different interface for each block pair.
Default:False
C++ Type:bool
Options:
Description:If true, it create a different interface for each block pair.
Optional Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector
Options:
Description:Adds user-defined labels for accessing object parameters via control logic.
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Options:
Description:Set the enabled status of the MooseObject.
Advanced Parameters
Input Files
- test/tests/meshgenerators/break_mesh_by_block_generator/break_mesh_2DJunction_polycrystal.i
- test/tests/materials/interface_material/interface_value_material_split_mesh.i
- test/tests/meshgenerators/break_mesh_by_block_generator/break_mesh_2DJunction_splittrue.i
- test/tests/meshgenerators/break_mesh_by_block_generator/break_mesh_3D_splittrue.i
- test/tests/meshgenerators/break_mesh_by_block_generator/break_mesh_2DJunction_auto.i
- test/tests/meshgenerators/break_mesh_by_block_generator/break_mesh_3D_auto.i
- test/tests/materials/interface_material/interface_value_material_split_mesh_stateful.i
- modules/tensor_mechanics/test/tests/czm/czm_3DC_3D_base_input.i
- test/tests/meshgenerators/break_mesh_by_block_generator/break_mesh_3D_polycrystal.i
test/tests/meshgenerators/break_mesh_by_block_generator/break_mesh_2DJunction_polycrystal.i
[Mesh]
[./fmg]
type = FileMeshGenerator
file = poly.msh
#parallel_type = replicated
[]
[./breakmesh]
type = BreakMeshByBlockGenerator
input = fmg
split_interface = true
[]
[]
[Outputs]
exodus = true
[]
test/tests/materials/interface_material/interface_value_material_split_mesh.i
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 2
nx = 2
xmax = 2
ny = 2
ymax = 2
elem_type = QUAD4
[]
[./subdomain_id]
input = gen
type = SubdomainBoundingBoxGenerator
bottom_left = '1 0 0'
top_right = '2 2 0'
block_id = 1
[../]
[./split]
type = BreakMeshByBlockGenerator
input = subdomain_id
[../]
[]
[Variables]
[./u]
block = 0
[../]
[./v]
block = 1
[../]
[]
[Kernels]
[./diff]
type = MatDiffusion
variable = u
diffusivity = 'diffusivity'
block = 0
[../]
[./diff_v]
type = MatDiffusion
variable = v
diffusivity = 'diffusivity'
block = 1
[../]
[]
[InterfaceKernels]
[tied]
type = PenaltyInterfaceDiffusion
variable = u
neighbor_var = v
jump_prop_name = "average_jump"
penalty = 1e6
boundary = 'interface'
[]
[]
[BCs]
[u_left]
type = DirichletBC
boundary = 'left'
variable = u
value = 1
[]
[v_right]
type = DirichletBC
boundary = 'right'
variable = v
value = 0
[]
[]
[Materials]
[./stateful1]
type = StatefulMaterial
block = 0
initial_diffusivity = 1
# outputs = all
[../]
[./stateful2]
type = StatefulMaterial
block = 1
initial_diffusivity = 2
# outputs = all
[../]
[./interface_material_avg]
type = InterfaceValueMaterial
mat_prop_master = diffusivity
mat_prop_slave = diffusivity
var_master = diffusivity_var
var_slave = diffusivity_var
mat_prop_out_basename = diff
boundary = interface
interface_value_type = average
mat_prop_var_out_basename = diff_var
nl_var_master = u
nl_var_slave = v
[../]
[./interface_material_jump_master_minus_slave]
type = InterfaceValueMaterial
mat_prop_master = diffusivity
mat_prop_slave = diffusivity
var_master = diffusivity_var
var_slave = diffusivity_var
mat_prop_out_basename = diff
boundary = interface
interface_value_type = jump_master_minus_slave
mat_prop_var_out_basename = diff_var
nl_var_master = u
nl_var_slave = v
[../]
[./interface_material_jump_slave_minus_master]
type = InterfaceValueMaterial
mat_prop_master = diffusivity
mat_prop_slave = diffusivity
var_master = diffusivity_var
var_slave = diffusivity_var
mat_prop_out_basename = diff
boundary = interface
interface_value_type = jump_slave_minus_master
mat_prop_var_out_basename = diff_var
nl_var_master = u
nl_var_slave = v
[../]
[./interface_material_jump_abs]
type = InterfaceValueMaterial
mat_prop_master = diffusivity
mat_prop_slave = diffusivity
var_master = diffusivity_var
var_slave = diffusivity_var
mat_prop_out_basename = diff
boundary = interface
interface_value_type = jump_abs
mat_prop_var_out_basename = diff_var
nl_var_master = u
nl_var_slave = v
[../]
[./interface_material_master]
type = InterfaceValueMaterial
mat_prop_master = diffusivity
mat_prop_slave = diffusivity
var_master = diffusivity_var
var_slave = diffusivity_var
mat_prop_out_basename = diff
boundary = interface
interface_value_type = master
mat_prop_var_out_basename = diff_var
nl_var_master = u
nl_var_slave = v
[../]
[./interface_material_slave]
type = InterfaceValueMaterial
mat_prop_master = diffusivity
mat_prop_slave = diffusivity
var_master = diffusivity_var
var_slave = diffusivity_var
mat_prop_out_basename = diff
mat_prop_var_out_basename = diff_var
boundary = interface
interface_value_type = slave
nl_var_master = u
nl_var_slave = v
[../]
[]
[AuxKernels]
[./interface_material_avg]
type = MaterialRealAux
property = diff_average
variable = diffusivity_average
boundary = interface
[]
[./interface_material_jump_master_minus_slave]
type = MaterialRealAux
property = diff_jump_master_minus_slave
variable = diffusivity_jump_master_minus_slave
boundary = interface
[]
[./interface_material_jump_slave_minus_master]
type = MaterialRealAux
property = diff_jump_slave_minus_master
variable = diffusivity_jump_slave_minus_master
boundary = interface
[]
[./interface_material_jump_abs]
type = MaterialRealAux
property = diff_jump_abs
variable = diffusivity_jump_abs
boundary = interface
[]
[./interface_material_master]
type = MaterialRealAux
property = diff_master
variable = diffusivity_master
boundary = interface
[]
[./interface_material_slave]
type = MaterialRealAux
property = diff_slave
variable = diffusivity_slave
boundary = interface
[]
[diffusivity_var]
type = MaterialRealAux
property = diffusivity
variable = diffusivity_var
[]
[]
[AuxVariables]
[diffusivity_var]
family = MONOMIAL
order = CONSTANT
[]
[./diffusivity_average]
family = MONOMIAL
order = CONSTANT
[]
[./diffusivity_jump_master_minus_slave]
family = MONOMIAL
order = CONSTANT
[]
[./diffusivity_jump_slave_minus_master]
family = MONOMIAL
order = CONSTANT
[]
[./diffusivity_jump_abs]
family = MONOMIAL
order = CONSTANT
[]
[./diffusivity_master]
family = MONOMIAL
order = CONSTANT
[]
[./diffusivity_slave]
family = MONOMIAL
order = CONSTANT
[]
[]
[Executioner]
type = Steady
solve_type = NEWTON
[]
[Outputs]
exodus = true
[]
test/tests/meshgenerators/break_mesh_by_block_generator/break_mesh_2DJunction_splittrue.i
[Mesh]
[./fmg]
type = FileMeshGenerator
file = 4ElementJunction.e
[]
[./breakmesh]
type = BreakMeshByBlockGenerator
input = fmg
split_interface = true
[]
[]
[Outputs]
exodus = true
[]
test/tests/meshgenerators/break_mesh_by_block_generator/break_mesh_3D_splittrue.i
[Mesh]
[./fmg]
type = FileMeshGenerator
file = coh3D_3Blocks.e
#parallel_type = replicated
[]
[./breakmesh]
type = BreakMeshByBlockGenerator
input = fmg
split_interface = true
[]
[]
[Outputs]
exodus = true
[]
test/tests/meshgenerators/break_mesh_by_block_generator/break_mesh_2DJunction_auto.i
[Mesh]
[./fmg]
type = FileMeshGenerator
file = 4ElementJunction.e
[]
[./breakmesh]
type = BreakMeshByBlockGenerator
input = fmg
[]
[]
[Outputs]
exodus = true
[]
test/tests/meshgenerators/break_mesh_by_block_generator/break_mesh_3D_auto.i
[Mesh]
[./fmg]
type = FileMeshGenerator
file = coh3D_3Blocks.e
parallel_type = replicated
[]
[./breakmesh]
type = BreakMeshByBlockGenerator
input = fmg
split_interface = true
[]
[]
[Outputs]
exodus = true
[]
test/tests/materials/interface_material/interface_value_material_split_mesh_stateful.i
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 2
nx = 2
xmax = 2
ny = 2
ymax = 2
elem_type = QUAD4
[]
[./subdomain_id]
input = gen
type = SubdomainBoundingBoxGenerator
bottom_left = '1 0 0'
top_right = '2 2 0'
block_id = 1
[../]
[./split]
type = BreakMeshByBlockGenerator
input = subdomain_id
[../]
[]
[Variables]
[./u]
block = 0
[../]
[./v]
block = 1
[../]
[]
[Kernels]
[./diff]
type = MatDiffusion
variable = u
diffusivity = 'diffusivity'
block = 0
[../]
[./diff_v]
type = MatDiffusion
variable = v
diffusivity = 'diffusivity'
block = 1
[../]
[]
[InterfaceKernels]
[tied]
type = PenaltyInterfaceDiffusion
variable = u
neighbor_var = v
penalty = 1e6
jump_prop_name = "average_jump"
boundary = 'interface'
[]
[]
[BCs]
[u_left]
type = DirichletBC
boundary = 'left'
variable = u
value = 1
[]
[v_right]
type = DirichletBC
boundary = 'right'
variable = v
value = 0
[]
[]
[Materials]
[./stateful1]
type = StatefulMaterial
block = 0
initial_diffusivity = 1
# outputs = all
[../]
[./stateful2]
type = StatefulMaterial
block = 1
initial_diffusivity = 2
# outputs = all
[../]
[./interface_material_avg]
type = InterfaceValueMaterial
mat_prop_master = diffusivity
mat_prop_slave = diffusivity
var_master = diffusivity_var
var_slave = diffusivity_var
mat_prop_out_basename = diff
boundary = interface
interface_value_type = average
mat_prop_var_out_basename = diff_var
nl_var_master = u
nl_var_slave = v
couple_old_values_and_properties = true
[../]
[./interface_material_jump_master_minus_slave]
type = InterfaceValueMaterial
mat_prop_master = diffusivity
mat_prop_slave = diffusivity
var_master = diffusivity_var
var_slave = diffusivity_var
mat_prop_out_basename = diff
boundary = interface
interface_value_type = jump_master_minus_slave
mat_prop_var_out_basename = diff_var
nl_var_master = u
nl_var_slave = v
couple_old_values_and_properties = true
[../]
[./interface_material_jump_slave_minus_master]
type = InterfaceValueMaterial
mat_prop_master = diffusivity
mat_prop_slave = diffusivity
var_master = diffusivity_var
var_slave = diffusivity_var
mat_prop_out_basename = diff
boundary = interface
interface_value_type = jump_slave_minus_master
mat_prop_var_out_basename = diff_var
nl_var_master = u
nl_var_slave = v
couple_old_values_and_properties = true
[../]
[./interface_material_jump_abs]
type = InterfaceValueMaterial
mat_prop_master = diffusivity
mat_prop_slave = diffusivity
var_master = diffusivity_var
var_slave = diffusivity_var
mat_prop_out_basename = diff
boundary = interface
interface_value_type = jump_abs
mat_prop_var_out_basename = diff_var
nl_var_master = u
nl_var_slave = v
couple_old_values_and_properties = true
[../]
[./interface_material_master]
type = InterfaceValueMaterial
mat_prop_master = diffusivity
mat_prop_slave = diffusivity
var_master = diffusivity_var
var_slave = diffusivity_var
mat_prop_out_basename = diff
boundary = interface
interface_value_type = master
mat_prop_var_out_basename = diff_var
nl_var_master = u
nl_var_slave = v
couple_old_values_and_properties = true
[../]
[./interface_material_slave]
type = InterfaceValueMaterial
mat_prop_master = diffusivity
mat_prop_slave = diffusivity
var_master = diffusivity_var
var_slave = diffusivity_var
mat_prop_out_basename = diff
mat_prop_var_out_basename = diff_var
boundary = interface
interface_value_type = slave
nl_var_master = u
nl_var_slave = v
couple_old_values_and_properties = true
[../]
[]
[AuxKernels]
[./interface_material_avg]
type = MaterialRealAux
property = diff_average
variable = diffusivity_average
boundary = interface
[]
[./interface_material_jump_master_minus_slave]
type = MaterialRealAux
property = diff_jump_master_minus_slave
variable = diffusivity_jump_master_minus_slave
boundary = interface
[]
[./interface_material_jump_slave_minus_master]
type = MaterialRealAux
property = diff_jump_slave_minus_master
variable = diffusivity_jump_slave_minus_master
boundary = interface
[]
[./interface_material_jump_abs]
type = MaterialRealAux
property = diff_jump_abs
variable = diffusivity_jump_abs
boundary = interface
[]
[./interface_material_master]
type = MaterialRealAux
property = diff_master
variable = diffusivity_master
boundary = interface
[]
[./interface_material_slave]
type = MaterialRealAux
property = diff_slave
variable = diffusivity_slave
boundary = interface
[]
[./interface_material_avg_prev]
type = MaterialRealAux
property = diff_average_prev
variable = diffusivity_average_prev
boundary = interface
[]
[./interface_material_jump_master_minus_slave_prev]
type = MaterialRealAux
property = diff_jump_master_minus_slave_prev
variable = diffusivity_jump_master_minus_slave_prev
boundary = interface
[]
[./interface_material_jump_slave_minus_master_prev]
type = MaterialRealAux
property = diff_jump_slave_minus_master_prev
variable = diffusivity_jump_slave_minus_master_prev
boundary = interface
[]
[./interface_material_jump_abs_prev]
type = MaterialRealAux
property = diff_jump_abs_prev
variable = diffusivity_jump_abs_prev
boundary = interface
[]
[./interface_material_master_prev]
type = MaterialRealAux
property = diff_master_prev
variable = diffusivity_master_prev
boundary = interface
[]
[./interface_material_slave_prev]
type = MaterialRealAux
property = diff_slave_prev
variable = diffusivity_slave_prev
boundary = interface
[]
[diffusivity_var]
type = MaterialRealAux
property = diffusivity
variable = diffusivity_var
[]
[]
[AuxVariables]
[diffusivity_var]
family = MONOMIAL
order = CONSTANT
[]
[./diffusivity_average]
family = MONOMIAL
order = CONSTANT
[]
[./diffusivity_jump_master_minus_slave]
family = MONOMIAL
order = CONSTANT
[]
[./diffusivity_jump_slave_minus_master]
family = MONOMIAL
order = CONSTANT
[]
[./diffusivity_jump_abs]
family = MONOMIAL
order = CONSTANT
[]
[./diffusivity_master]
family = MONOMIAL
order = CONSTANT
[]
[./diffusivity_slave]
family = MONOMIAL
order = CONSTANT
[]
[./diffusivity_average_prev]
family = MONOMIAL
order = CONSTANT
[]
[./diffusivity_jump_master_minus_slave_prev]
family = MONOMIAL
order = CONSTANT
[]
[./diffusivity_jump_slave_minus_master_prev]
family = MONOMIAL
order = CONSTANT
[]
[./diffusivity_jump_abs_prev]
family = MONOMIAL
order = CONSTANT
[]
[./diffusivity_master_prev]
family = MONOMIAL
order = CONSTANT
[]
[./diffusivity_slave_prev]
family = MONOMIAL
order = CONSTANT
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
num_steps = 3
dt = 0.5
[]
[Outputs]
exodus = true
[]
modules/tensor_mechanics/test/tests/czm/czm_3DC_3D_base_input.i
[Mesh]
[./msh]
type = GeneratedMeshGenerator
[]
[./subdomain_1]
type = SubdomainBoundingBoxGenerator
input = msh
bottom_left = '0 0 0'
block_id = 1
top_right = '0.5 1 1'
[]
[./subdomain_2]
type = SubdomainBoundingBoxGenerator
input = subdomain_1
bottom_left = '0.5 0 0'
block_id = 2
top_right = '1 1 1'
[]
[./breakmesh]
input = subdomain_2
type = BreakMeshByBlockGenerator
[../]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Modules/TensorMechanics/Master]
[./all]
strain = SMALL
add_variables = true
generate_output = 'stress_xx stress_yy stress_zz stress_yz stress_xz stress_xy'
[../]
[]
[Modules/TensorMechanics/CohesiveZoneMaster]
[./czm1]
boundary = 'interface'
displacements = 'disp_x disp_y disp_z'
[../]
[]
[BCs]
[./left_x]
type = DirichletBC
variable = disp_x
preset = false
boundary = left
value = 0.0
[../]
[./left_y]
type = DirichletBC
variable = disp_y
preset = false
boundary = left
value = 0.0
[../]
[./left_z]
type = DirichletBC
variable = disp_z
preset = false
boundary = left
value = 0.0
[../]
[./right_x]
type = FunctionDirichletBC
variable = disp_x
preset = false
boundary = right
[../]
[./right_y]
type = FunctionDirichletBC
variable = disp_y
preset = false
boundary = right
[../]
[./right_z]
type = FunctionDirichletBC
variable = disp_z
preset = false
boundary = right
[../]
[]
[Materials]
[./Elasticity_tensor]
type = ComputeElasticityTensor
block = '1 2'
fill_method = symmetric_isotropic
C_ijkl = '0.3 0.5e8'
[../]
[./stress]
type = ComputeLinearElasticStress
block = '1 2'
[../]
[./czm_3dc]
type = SalehaniIrani3DCTraction
boundary = 'interface'
normal_gap_at_maximum_normal_traction = 1
tangential_gap_at_maximum_shear_traction = 0.5
maximum_normal_traction = 100
maximum_shear_traction = 70
displacements = 'disp_x disp_y disp_z'
[../]
[]
[Preconditioning]
[./SMP]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
petsc_options_iname = '-pc_type'
petsc_options_value = 'lu'
solve_type = NEWTON
nl_abs_tol = 1e-8
nl_rel_tol = 1e-6
nl_max_its = 5
l_tol = 1e-10
l_max_its = 50
start_time = 0.0
dt = 0.2
end_time = 5
dtmin = 0.2
line_search = none
[]
[Outputs]
[./out]
type = Exodus
[../]
[]
[Postprocessors]
[./sxx]
type = SideAverageValue
variable = stress_xx
execute_on = 'INITIAL TIMESTEP_END'
boundary = 'interface'
[../]
[./syy]
type = SideAverageValue
variable = stress_yy
execute_on = 'INITIAL TIMESTEP_END'
boundary = 'interface'
[../]
[./szz]
type = SideAverageValue
variable = stress_zz
execute_on = 'INITIAL TIMESTEP_END'
boundary = 'interface'
[../]
[./syz]
type = SideAverageValue
variable = stress_yz
execute_on = 'INITIAL TIMESTEP_END'
boundary = 'interface'
[../]
[./sxz]
type = SideAverageValue
variable = stress_xz
execute_on = 'INITIAL TIMESTEP_END'
boundary = 'interface'
[../]
[./sxy]
type = SideAverageValue
variable = stress_xy
execute_on = 'INITIAL TIMESTEP_END'
boundary = 'interface'
[../]
[./disp_x]
type = SideAverageValue
variable = disp_x
execute_on = 'INITIAL TIMESTEP_END'
boundary = 'right'
[../]
[./disp_y]
type = SideAverageValue
variable = disp_y
execute_on = 'INITIAL TIMESTEP_END'
boundary = 'right'
[../]
[./disp_z]
type = SideAverageValue
variable = disp_z
execute_on = 'INITIAL TIMESTEP_END'
boundary = 'right'
[../]
[]
test/tests/meshgenerators/break_mesh_by_block_generator/break_mesh_3D_polycrystal.i
[Mesh]
[./fmg]
type = FileMeshGenerator
file = poly2.msh
#parallel_type = replicated
[]
[./breakmesh]
type = BreakMeshByBlockGenerator
input = fmg
split_interface = true
[]
[]
[Outputs]
exodus = true
[]
- 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]
@article{Nguyen2014, author = "Nguyen, Vinh Phu", abstract = "An open source program to generate zero-thickness cohesive interface elements in existing finite element discretizations is presented. This contribution fills the gap in the literature that, to the best of the author's knowledge, there is no such program exists. The program is useful in numerical modeling of material/structure failure using cohesive interface elements. The program is able to generate one/two dimensional, linear/quadratic cohesive elements (i) at all inter-element boundaries, (ii) at material interfaces and (iii) at grain boundaries in polycrystalline materials. Algorithms and utilization of the program is discussed. Several two dimensional and three dimensional fracture mechanics problems are given including debonding process of material interfaces, multiple delamination of composite structures, crack propagation in polycrystalline structures.", doi = "10.1016/j.advengsoft.2014.04.002", issn = "09659978", journal = "Advances in Engineering Software", mendeley-groups = "Moose", pages = "27--39", title = "{An open source program to generate zero-thickness cohesive interface elements}", volume = "74", year = "2014" }