- componentThe force component constraint that this object is supplying
C++ Type:MooseEnum
Description:The force component constraint that this object is supplying
- master_boundaryThe name of the master boundary sideset.
C++ Type:BoundaryName
Description:The name of the master boundary sideset.
- master_subdomainThe name of the master subdomain.
C++ Type:SubdomainName
Description:The name of the master subdomain.
- slave_boundaryThe name of the slave boundary sideset.
C++ Type:BoundaryName
Description:The name of the slave boundary sideset.
- slave_subdomainThe name of the slave subdomain.
C++ Type:SubdomainName
Description:The name of the slave subdomain.
NormalMortarMechanicalContact
The NormalMortarMechanicalContact
class is used to apply normal contact forces to the displacement residuals. The contact pressure variable (a Lagrange multipler) is specified using the variable
parameter. The displacement variable must be specified either using the slave_variable
or master_variable
parameter. You must create as many NormalMortarMechanicalContact
classes as dimensions in your simulation, e.g. for a two dimensional simulation there must be NormalMortarMechanicalContact
instances for both x and y displacement components.
This class is used to apply normal contact forces using lagrange multipliers
Input Parameters
- compute_lm_residualFalse
Default:False
C++ Type:bool
Options:
- compute_lm_residualsTrueWhether to compute Lagrange Multiplier residuals
Default:True
C++ Type:bool
Options:
Description:Whether to compute Lagrange Multiplier residuals
- compute_primal_residualsTrueWhether to compute residuals for the primal variable.
Default:True
C++ Type:bool
Options:
Description:Whether to compute residuals for the primal variable.
- execute_onLINEARThe list of flag(s) indicating when this object should be executed, the available options include NONE, INITIAL, LINEAR, NONLINEAR, TIMESTEP_END, TIMESTEP_BEGIN, FINAL, CUSTOM.
Default:LINEAR
C++ Type:ExecFlagEnum
Options:NONE INITIAL LINEAR NONLINEAR TIMESTEP_END TIMESTEP_BEGIN FINAL CUSTOM
Description:The list of flag(s) indicating when this object should be executed, the available options include NONE, INITIAL, LINEAR, NONLINEAR, TIMESTEP_END, TIMESTEP_BEGIN, FINAL, CUSTOM.
- master_variablePrimal variable on master surface. If this parameter is not provided then the master variable will be initialized to the slave variable
C++ Type:VariableName
Options:
Description:Primal variable on master surface. If this parameter is not provided then the master variable will be initialized to the slave variable
- periodicFalseWhether this constraint is going to be used to enforce a periodic condition. This has the effect of changing the normals vector for projection from outward to inward facing
Default:False
C++ Type:bool
Options:
Description:Whether this constraint is going to be used to enforce a periodic condition. This has the effect of changing the normals vector for projection from outward to inward facing
- slave_variablePrimal variable on slave surface.
C++ Type:VariableName
Options:
Description:Primal variable on slave surface.
- variableThe name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example
C++ Type:NonlinearVariableName
Options:
Description:The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example
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.
- 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
Options:
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
- extra_matrix_tagsThe extra tags for the matrices this Kernel should fill
C++ Type:std::vector
Options:
Description:The extra tags for the matrices this Kernel should fill
- extra_vector_tagsThe extra tags for the vectors this Kernel should fill
C++ Type:std::vector
Options:
Description:The extra tags for the vectors this Kernel should fill
- matrix_tagssystemThe tag for the matrices this Kernel should fill
Default:system
C++ Type:MultiMooseEnum
Options:nontime system
Description:The tag for the matrices this Kernel should fill
- vector_tagsnontimeThe tag for the vectors this Kernel should fill
Default:nontime
C++ Type:MultiMooseEnum
Options:nontime time
Description:The tag for the vectors this Kernel should fill
Tagging Parameters
Input Files
- modules/contact/test/tests/bouncing-block-contact/frictional-nodal-min-lm-mortar-disp.i
- modules/contact/test/tests/bouncing-block-contact/grid-sequencing/grid-sequencing.i
- modules/combined/test/tests/sliding_block/in_and_out/constraint/frictionless_lm.i
- modules/combined/test/tests/mortar_tm/2d/frictionless_first/finite_noaction.i
- modules/contact/test/tests/mechanical-small-problem/mortar-mech.i
- modules/combined/test/tests/sliding_block/in_and_out/constraint/sm/frictionless_lm_sm.i
- modules/combined/test/tests/mortar_tm/2drz/frictionless_first/finite_noaction.i
- modules/contact/test/tests/bouncing-block-contact/frictionless-mortar-fb-lm-mortar-disp.i
- modules/combined/test/tests/mortar_tm/2drz/frictionless_second/finite_noaction.i
- modules/contact/test/tests/bouncing-block-contact/frictional-mortar-fb-lm-mortar-disp.i
- modules/combined/test/tests/sliding_block/in_and_out/constraint/frictional_lm.i
- modules/contact/test/tests/mechanical-small-problem/frictionless-nodal-lm-mortar-disp.i
- modules/contact/test/tests/bouncing-block-contact/frictional-nodal-min-normal-lm-mortar-fb-tangential-lm-mortar-disp.i
- modules/contact/test/tests/bouncing-block-contact/frictional-mortar-min-lm-mortar-disp.i
- modules/combined/test/tests/mortar_tm/2d/frictionless_second/finite_noaction.i
- modules/contact/test/tests/bouncing-block-contact/frictionless-nodal-min-lm-mortar-disp.i
- modules/contact/test/tests/bouncing-block-contact/frictionless-nodal-fb-lm-mortar-disp.i
- modules/contact/test/tests/bouncing-block-contact/frictionless-mortar-min-lm-mortar-disp.i
modules/contact/test/tests/bouncing-block-contact/frictional-nodal-min-lm-mortar-disp.i
starting_point = 2e-1
offset = 1e-2
[GlobalParams]
displacements = 'disp_x disp_y'
diffusivity = 1e0
scaling = 1e0
[]
[Mesh]
file = long-bottom-block-1elem-blocks.e
[]
[Variables]
[./disp_x]
block = '1 2'
[../]
[./disp_y]
block = '1 2'
[../]
[./normal_lm]
block = 3
[../]
[./tangential_lm]
block = 3
[../]
[]
[ICs]
[./disp_y]
block = 2
variable = disp_y
value = ${fparse starting_point + offset}
type = ConstantIC
[../]
[]
[Kernels]
[./disp_x]
type = MatDiffusion
variable = disp_x
[../]
[./disp_y]
type = MatDiffusion
variable = disp_y
[../]
[]
[Constraints]
[normal_lm]
type = NormalNodalLMMechanicalContact
master = 20
slave = 10
variable = normal_lm
master_variable = disp_x
disp_y = disp_y
ncp_function_type = min
[]
[normal_x]
type = NormalMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = normal_lm
slave_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
[]
[normal_y]
type = NormalMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = normal_lm
slave_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
[]
[tangential_lm]
type = TangentialNodalLMMechanicalContact
master = 20
slave = 10
variable = tangential_lm
master_variable = disp_x
disp_y = disp_y
contact_pressure = normal_lm
ncp_function_type = min
mu = .1
[]
[tangential_x]
type = TangentialMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = tangential_lm
slave_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
[]
[tangential_y]
type = TangentialMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = tangential_lm
slave_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
[]
[]
[BCs]
[./botx]
type = DirichletBC
variable = disp_x
boundary = 40
value = 0.0
[../]
[./boty]
type = DirichletBC
variable = disp_y
boundary = 40
value = 0.0
[../]
[./topy]
type = FunctionDirichletBC
variable = disp_y
boundary = 30
function = '${starting_point} * cos(2 * pi / 40 * t) + ${offset}'
[../]
[./leftx]
type = FunctionDirichletBC
variable = disp_x
boundary = 50
function = '1e-2 * t'
[../]
[]
[Executioner]
type = Transient
end_time = 200
dt = 5
dtmin = .1
solve_type = 'PJFNK'
petsc_options = '-snes_converged_reason -ksp_converged_reason -pc_svd_monitor -snes_linesearch_monitor -snes_ksp_ew'
petsc_options_iname = '-pc_type -pc_factor_shift_type -pc_factor_shift_amount -mat_mffd_err'
petsc_options_value = 'lu NONZERO 1e-15 1e-5'
l_max_its = 30
nl_max_its = 20
line_search = 'none'
[]
[Debug]
show_var_residual_norms = true
[]
[Outputs]
[exodus]
type = Exodus
sync_times = '0 5 10 15 20 25 30 35 40 45 50'
file_base = frictional-nodal-min-lm-mortar-disp_out
[]
[dof]
type = DOFMap
execute_on = 'initial'
[]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Postprocessors]
[./num_nl]
type = NumNonlinearIterations
[../]
[./cumulative]
type = CumulativeValuePostprocessor
postprocessor = num_nl
[../]
[contact]
type = ContactDOFSetSize
variable = normal_lm
subdomain = '3'
execute_on = 'nonlinear timestep_end'
[]
[]
modules/contact/test/tests/bouncing-block-contact/grid-sequencing/grid-sequencing.i
starting_point = 2e-1
# We offset slightly so we avoid the case where the bottom of the slave block and the top of the
# master block are perfectly vertically aligned which can cause the backtracking line search some
# issues for a coarsest mesh (basic line search handles that fine)
offset = 1e-2
[GlobalParams]
displacements = 'disp_x disp_y'
diffusivity = 1e0
[]
[Mesh]
file = level0.e
[]
[Variables]
[./disp_x]
block = '1 2'
[../]
[./disp_y]
block = '1 2'
[../]
[./normal_lm]
block = 3
[../]
[./tangential_lm]
block = 3
family = MONOMIAL
order = CONSTANT
[../]
[]
[ICs]
[./disp_y]
block = 2
variable = disp_y
value = ${fparse starting_point + offset}
type = ConstantIC
[../]
[]
[Kernels]
[./disp_x]
type = MatDiffusion
variable = disp_x
[../]
[./disp_y]
type = MatDiffusion
variable = disp_y
[../]
[]
[Constraints]
[normal_lm]
type = NormalNodalLMMechanicalContact
slave = 10
master = 20
variable = normal_lm
master_variable = disp_x
disp_y = disp_y
ncp_function_type = min
[../]
[normal_x]
type = NormalMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = normal_lm
slave_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
[]
[normal_y]
type = NormalMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = normal_lm
slave_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
[]
[tangential_lm]
type = TangentialMortarLMMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = tangential_lm
slave_variable = disp_x
slave_disp_y = disp_y
use_displaced_mesh = true
compute_primal_residuals = false
contact_pressure = normal_lm
friction_coefficient = .1
ncp_function_type = fb
[]
[tangential_x]
type = TangentialMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = tangential_lm
slave_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
[]
[tangential_y]
type = TangentialMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = tangential_lm
slave_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
[]
[]
[BCs]
[./botx]
type = DirichletBC
variable = disp_x
boundary = 40
value = 0.0
[../]
[./boty]
type = DirichletBC
variable = disp_y
boundary = 40
value = 0.0
[../]
[./topy]
type = FunctionDirichletBC
variable = disp_y
boundary = 30
function = '${starting_point} * cos(2 * pi / 40 * t) + ${offset}'
[../]
[./leftx]
type = FunctionDirichletBC
variable = disp_x
boundary = 50
function = '1e-2 * t'
[../]
[]
[Executioner]
type = Transient
end_time = 200
num_steps = 3
dt = 5
dtmin = .1
solve_type = 'PJFNK'
petsc_options = '-snes_converged_reason -ksp_converged_reason -snes_linesearch_monitor'
petsc_options_iname = '-pc_type -pc_factor_shift_type -pc_factor_shift_amount -mat_mffd_err'
petsc_options_value = 'lu NONZERO 1e-15 1e-5'
l_max_its = 30
nl_max_its = 20
line_search = 'none'
nl_abs_tol = 1e-10
num_grids = 5
[]
[Debug]
show_var_residual_norms = true
[]
[Outputs]
[exo]
type = Exodus
sync_times = '15'
sync_only = true
[]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Postprocessors]
[./num_nl]
type = NumNonlinearIterations
[../]
[./cumulative]
type = CumulativeValuePostprocessor
postprocessor = num_nl
[../]
[contact]
type = ContactDOFSetSize
variable = normal_lm
subdomain = '3'
execute_on = 'nonlinear timestep_end'
[]
[]
modules/combined/test/tests/sliding_block/in_and_out/constraint/frictionless_lm.i
[Mesh]
patch_size = 80
[file]
type = FileMeshGenerator
file = sliding_elastic_blocks_2d.e
[]
[slave]
input = file
type = LowerDBlockFromSidesetGenerator
sidesets = '3'
new_block_id = '30'
[]
[master]
input = slave
type = LowerDBlockFromSidesetGenerator
sidesets = '2'
new_block_id = '20'
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y'
volumetric_locking_correction = false
[]
[Modules/TensorMechanics/Master]
[./all]
add_variables = true
strain = FINITE
block = '1 2'
[../]
[]
[Variables]
[normal_lm]
block = '30'
[]
[]
[BCs]
[./left_x]
type = DirichletBC
variable = disp_x
boundary = 1
value = 0.0
[../]
[./left_y]
type = DirichletBC
variable = disp_y
boundary = 1
value = 0.0
[../]
[./right_x]
type = FunctionDirichletBC
variable = disp_x
boundary = 4
function = horizontal_movement
[../]
[./right_y]
type = FunctionDirichletBC
variable = disp_y
boundary = 4
function = vertical_movement
[../]
[]
[Materials]
[./left]
type = ComputeIsotropicElasticityTensor
block = '1 2'
youngs_modulus = 1e6
poissons_ratio = 0.3
[../]
[./stress]
type = ComputeFiniteStrainElasticStress
block = '1 2'
[../]
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_converged_reason -ksp_converged_reason -snes_ksp_ew'
petsc_options_iname = '-pc_type -mat_mffd_err -pc_factor_shift_type -pc_factor_shift_amount'
petsc_options_value = 'lu 1e-5 NONZERO 1e-15'
end_time = 15
dt = 0.1
dtmin = 0.01
l_max_its = 30
nl_max_its = 20
line_search = 'none'
timestep_tolerance = 1e-6
[]
[Debug]
show_var_residual_norms = true
[]
[Outputs]
sync_times = '1 2 3 4 5 6 7 8 9 10 11 12 13 14 15'
[out]
type = Exodus
sync_only = true
[]
[dof]
execute_on = 'initial'
type = DOFMap
[]
[csv]
type = CSV
execute_on = 'nonlinear timestep_end'
[]
[]
[Functions]
[./vertical_movement]
type = ParsedFunction
value = -t
[../]
[./horizontal_movement]
type = ParsedFunction
value = -0.04*sin(4*t)+0.02
[../]
[]
[Constraints]
[./lm]
type = NormalNodalLMMechanicalContact
slave = 3
master = 2
variable = normal_lm
master_variable = disp_x
disp_y = disp_y
ncp_function_type = min
use_displaced_mesh = true
[../]
[normal_x]
type = NormalMortarMechanicalContact
master_boundary = '2'
slave_boundary = '3'
master_subdomain = '20'
slave_subdomain = '30'
variable = normal_lm
slave_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
[]
[normal_y]
type = NormalMortarMechanicalContact
master_boundary = '2'
slave_boundary = '3'
master_subdomain = '20'
slave_subdomain = '30'
variable = normal_lm
slave_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
[]
[]
[Postprocessors]
[./num_nl]
type = NumNonlinearIterations
[../]
[lin]
type = NumLinearIterations
[]
[contact]
type = ContactDOFSetSize
variable = normal_lm
subdomain = '30'
execute_on = 'nonlinear timestep_end'
[]
[]
modules/combined/test/tests/mortar_tm/2d/frictionless_first/finite_noaction.i
E_block = 1e7
E_plank = 1e7
elem = QUAD4
order = FIRST
name = 'finite_noaction'
[Mesh]
patch_size = 80
patch_update_strategy = auto
[./plank]
type = GeneratedMeshGenerator
dim = 2
xmin = -0.3
xmax = 0.3
ymin = -10
ymax = 10
nx = 2
ny = 67
elem_type = ${elem}
[../]
[./plank_sidesets]
type = RenameBoundaryGenerator
input = plank
old_boundary_id = '0 1 2 3'
new_boundary_name = 'plank_bottom plank_right plank_top plank_left'
[../]
[./plank_id]
type = SubdomainIDGenerator
input = plank_sidesets
subdomain_id = 1
[../]
[./block]
type = GeneratedMeshGenerator
dim = 2
xmin = 0.31
xmax = 0.91
ymin = 7.7
ymax = 8.5
nx = 3
ny = 4
elem_type = ${elem}
[../]
[./block_id]
type = SubdomainIDGenerator
input = block
subdomain_id = 2
[../]
[./combined]
type = MeshCollectionGenerator
inputs = 'plank_id block_id'
[../]
[./block_rename]
type = RenameBlockGenerator
input = combined
old_block_id = '1 2'
new_block_name = 'plank block'
[../]
[./block_sidesets]
type = SideSetsFromPointsGenerator
input = block_rename
points = '0.6 7.7 0
0.91 8.0 0
0.6 8.5 0
0.31 8.0 0'
new_boundary = 'block_bottom block_right block_top block_left'
[../]
[./slave]
input = block_sidesets
type = LowerDBlockFromSidesetGenerator
sidesets = 'block_left'
new_block_id = '30'
new_block_name = 'frictionless_slave_subdomain'
[../]
[./master]
input = slave
type = LowerDBlockFromSidesetGenerator
sidesets = 'plank_right'
new_block_id = '20'
new_block_name = 'frictionless_master_subdomain'
[../]
[]
[GlobalParams]
displacements = 'disp_x disp_y'
[]
[Variables]
[./disp_x]
order = ${order}
block = 'plank block'
scaling = ${fparse 2.0 / (E_plank + E_block)}
[../]
[./disp_y]
order = ${order}
block = 'plank block'
scaling = ${fparse 2.0 / (E_plank + E_block)}
[../]
[./frictionless_normal_lm]
order = ${order}
block = 'frictionless_slave_subdomain'
[../]
[]
[Modules/TensorMechanics/Master]
[./action]
strain = FINITE
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress hydrostatic_stress strain_xx strain_yy strain_zz'
block = 'plank block'
[../]
[]
[Constraints]
[./lm]
type = NormalNodalLMMechanicalContact
slave = block_left
master = plank_right
variable = frictionless_normal_lm
master_variable = disp_x
disp_y = disp_y
ncp_function_type = min
use_displaced_mesh = true
[../]
[./normal_x]
type = NormalMortarMechanicalContact
master_boundary = plank_right
slave_boundary = block_left
master_subdomain = frictionless_master_subdomain
slave_subdomain = frictionless_slave_subdomain
variable = frictionless_normal_lm
slave_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
[../]
[./normal_y]
type = NormalMortarMechanicalContact
master_boundary = plank_right
slave_boundary = block_left
master_subdomain = frictionless_master_subdomain
slave_subdomain = frictionless_slave_subdomain
variable = frictionless_normal_lm
slave_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
[../]
[]
[BCs]
[./left_x]
type = DirichletBC
variable = disp_x
boundary = plank_left
value = 0.0
[../]
[./left_y]
type = DirichletBC
variable = disp_y
boundary = plank_bottom
value = 0.0
[../]
[./right_x]
type = FunctionDirichletBC
variable = disp_x
boundary = block_right
function = '-0.04*sin(4*(t+1.5))+0.02'
[../]
[./right_y]
type = FunctionDirichletBC
variable = disp_y
boundary = block_right
function = '-t'
[../]
[]
[Materials]
[./plank]
type = ComputeIsotropicElasticityTensor
block = 'plank'
poissons_ratio = 0.3
youngs_modulus = ${E_plank}
[../]
[./block]
type = ComputeIsotropicElasticityTensor
block = 'block'
poissons_ratio = 0.3
youngs_modulus = ${E_block}
[../]
[./stress]
type = ComputeFiniteStrainElasticStress
block = 'plank block'
[../]
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_converged_reason -ksp_converged_reason'
petsc_options_iname = '-pc_type -mat_mffd_err -pc_factor_shift_type -pc_factor_shift_amount'
petsc_options_value = 'lu 1e-5 NONZERO 1e-15'
end_time = 13.5
dt = 0.1
dtmin = 0.1
timestep_tolerance = 1e-6
line_search = 'contact'
[]
[Postprocessors]
[./nl_its]
type = NumNonlinearIterations
[../]
[./total_nl_its]
type = CumulativeValuePostprocessor
postprocessor = nl_its
[../]
[./l_its]
type = NumLinearIterations
[../]
[./total_l_its]
type = CumulativeValuePostprocessor
postprocessor = l_its
[../]
[./contact]
type = ContactDOFSetSize
variable = frictionless_normal_lm
subdomain = frictionless_slave_subdomain
[../]
[./avg_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
block = 'block'
[../]
[./max_hydro]
type = ElementExtremeValue
variable = hydrostatic_stress
block = 'block'
[../]
[./min_hydro]
type = ElementExtremeValue
variable = hydrostatic_stress
block = 'block'
value_type = min
[../]
[./avg_vonmises]
type = ElementAverageValue
variable = vonmises_stress
block = 'block'
[../]
[./max_vonmises]
type = ElementExtremeValue
variable = vonmises_stress
block = 'block'
[../]
[./min_vonmises]
type = ElementExtremeValue
variable = vonmises_stress
block = 'block'
value_type = min
[../]
[]
[Outputs]
exodus = true
file_base = ${name}
[./comp]
type = CSV
show = 'contact'
[../]
[./out]
type = CSV
file_base = '${name}_out'
[../]
[]
[Debug]
show_var_residual_norms = true
[]
modules/contact/test/tests/mechanical-small-problem/mortar-mech.i
[Mesh]
displacements = 'disp_x disp_y'
[file]
type = FileMeshGenerator
file = mesh.e
[]
[./master]
type = LowerDBlockFromSidesetGenerator
sidesets = '2'
new_block_id = '20'
input = file
[../]
[./slave]
type = LowerDBlockFromSidesetGenerator
sidesets = '1'
new_block_id = '10'
input = master
[../]
[]
[Problem]
kernel_coverage_check = false
[]
[Variables]
[./disp_x]
block = '1 2'
[../]
[./disp_y]
block = '1 2'
[../]
[./lambda]
block = '10'
family = MONOMIAL
order = CONSTANT
[../]
[]
[BCs]
[./left_x]
type = DirichletBC
variable = disp_x
boundary = 'outside_left'
value = 0.0
[../]
[./left_y]
type = DirichletBC
variable = disp_y
boundary = 'outside_left'
value = 0.0
[../]
[./right_x]
type = FunctionDirichletBC
variable = disp_x
boundary = 'outside_right'
function = '-5e-3 * t'
[../]
[./right_y]
type = FunctionDirichletBC
variable = disp_y
boundary = 'outside_right'
function = 0
[../]
[]
[Kernels]
[disp_x]
type = Diffusion
variable = disp_x
block = '1 2'
[]
[disp_y]
type = Diffusion
variable = disp_y
block = '1 2'
[]
[]
[Debug]
show_var_residual_norms = 1
[]
[Constraints]
[lm]
type = NormalMortarLMMechanicalContact
master_boundary = '2'
slave_boundary = '1'
master_subdomain = '20'
slave_subdomain = '10'
variable = lambda
slave_variable = disp_x
slave_disp_y = disp_y
use_displaced_mesh = true
compute_primal_residuals = false
[]
[x]
type = NormalMortarMechanicalContact
master_boundary = '2'
slave_boundary = '1'
master_subdomain = '20'
slave_subdomain = '10'
variable = lambda
slave_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
[]
[y]
type = NormalMortarMechanicalContact
master_boundary = '2'
slave_boundary = '1'
master_subdomain = '20'
slave_subdomain = '10'
variable = lambda
slave_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
[]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
solve_type = PJFNK
type = Transient
num_steps = 10
dt = 1
dtmin = 1
petsc_options_iname = '-pc_type -snes_linesearch_type -pc_factor_shift_type -pc_factor_shift_amount'
petsc_options_value = 'lu basic NONZERO 1e-15'
[]
[Outputs]
exodus = true
[dofmap]
type = DOFMap
execute_on = 'initial'
[]
[]
modules/combined/test/tests/sliding_block/in_and_out/constraint/sm/frictionless_lm_sm.i
[Mesh]
patch_size = 80
[file]
type = FileMeshGenerator
file = sliding_elastic_blocks_2d.e
[]
[slave]
input = file
type = LowerDBlockFromSidesetGenerator
sidesets = '3'
new_block_id = '30'
[]
[master]
input = slave
type = LowerDBlockFromSidesetGenerator
sidesets = '2'
new_block_id = '20'
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y'
volumetric_locking_correction = false
[]
[Variables]
[./disp_x]
block = '1 2'
[../]
[./disp_y]
block = '1 2'
[../]
[normal_lm]
block = '30'
[]
[]
[BCs]
[./left_x]
type = DirichletBC
variable = disp_x
boundary = 1
value = 0.0
[../]
[./left_y]
type = DirichletBC
variable = disp_y
boundary = 1
value = 0.0
[../]
[./right_x]
type = FunctionDirichletBC
variable = disp_x
boundary = 4
function = horizontal_movement
[../]
[./right_y]
type = FunctionDirichletBC
variable = disp_y
boundary = 4
function = vertical_movement
[../]
[]
[SolidMechanics]
[./solid]
disp_x = disp_x
disp_y = disp_y
block = '1 2'
[../]
[]
[Materials]
[./left]
type = Elastic
formulation = NonlinearPlaneStrain
block = 1
disp_y = disp_y
disp_x = disp_x
poissons_ratio = 0.3
youngs_modulus = 1e6
[../]
[./right]
type = Elastic
formulation = NonlinearPlaneStrain
block = 2
disp_y = disp_y
disp_x = disp_x
poissons_ratio = 0.3
youngs_modulus = 1e6
[../]
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_converged_reason -ksp_converged_reason'
petsc_options_iname = '-pc_type -mat_mffd_err -pc_factor_shift_type -pc_factor_shift_amount'
petsc_options_value = 'lu 1e-5 NONZERO 1e-15'
end_time = 15
dt = 0.1
dtmin = 0.01
l_max_its = 30
nl_max_its = 20
line_search = 'none'
timestep_tolerance = 1e-6
[]
[Debug]
show_var_residual_norms = true
[]
[Outputs]
sync_times = '1 2 3 4 5 6 7 8 9 10 11 12 13 14 15'
[out]
type = Exodus
sync_only = true
[]
[dof]
execute_on = 'initial'
type = DOFMap
[]
[csv]
type = CSV
execute_on = 'nonlinear timestep_end'
[]
[]
[Functions]
[./vertical_movement]
type = ParsedFunction
value = -t
[../]
[./horizontal_movement]
type = ParsedFunction
value = -0.04*sin(4*t)+0.02
[../]
[]
[Constraints]
[./lm]
type = NormalNodalLMMechanicalContact
slave = 3
master = 2
variable = normal_lm
master_variable = disp_x
disp_y = disp_y
ncp_function_type = min
use_displaced_mesh = true
[../]
[normal_x]
type = NormalMortarMechanicalContact
master_boundary = '2'
slave_boundary = '3'
master_subdomain = '20'
slave_subdomain = '30'
variable = normal_lm
slave_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
[]
[normal_y]
type = NormalMortarMechanicalContact
master_boundary = '2'
slave_boundary = '3'
master_subdomain = '20'
slave_subdomain = '30'
variable = normal_lm
slave_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
[]
[]
[Postprocessors]
[./num_nl]
type = NumNonlinearIterations
[../]
[lin]
type = NumLinearIterations
[]
[contact]
type = ContactDOFSetSize
variable = normal_lm
subdomain = '30'
execute_on = 'nonlinear timestep_end'
[]
[]
modules/combined/test/tests/mortar_tm/2drz/frictionless_first/finite_noaction.i
E_block = 1e7
E_plank = 1e7
elem = QUAD4
order = FIRST
name = 'finite_noaction'
[Problem]
coord_type = RZ
[]
[Mesh]
patch_size = 80
patch_update_strategy = auto
[./plank]
type = GeneratedMeshGenerator
dim = 2
xmin = 0
xmax = 0.6
ymin = -10
ymax = 10
nx = 2
ny = 67
elem_type = ${elem}
[../]
[./plank_sidesets]
type = RenameBoundaryGenerator
input = plank
old_boundary_id = '0 1 2 3'
new_boundary_name = 'plank_bottom plank_right plank_top plank_left'
[../]
[./plank_id]
type = SubdomainIDGenerator
input = plank_sidesets
subdomain_id = 1
[../]
[./block]
type = GeneratedMeshGenerator
dim = 2
xmin = 0.61
xmax = 1.21
ymin = 9.2
ymax = 10.0
nx = 3
ny = 4
elem_type = ${elem}
[../]
[./block_id]
type = SubdomainIDGenerator
input = block
subdomain_id = 2
[../]
[./combined]
type = MeshCollectionGenerator
inputs = 'plank_id block_id'
[../]
[./block_rename]
type = RenameBlockGenerator
input = combined
old_block_id = '1 2'
new_block_name = 'plank block'
[../]
[./block_sidesets]
type = SideSetsFromPointsGenerator
input = block_rename
points = '0.9 9.2 0
1.21 9.5 0
0.9 10.0 0
0.61 9.5 0'
new_boundary = 'block_bottom block_right block_top block_left'
[../]
[./slave]
input = block_sidesets
type = LowerDBlockFromSidesetGenerator
sidesets = 'block_left'
new_block_id = '30'
new_block_name = 'frictionless_slave_subdomain'
[../]
[./master]
input = slave
type = LowerDBlockFromSidesetGenerator
sidesets = 'plank_right'
new_block_id = '20'
new_block_name = 'frictionless_master_subdomain'
[../]
[]
[GlobalParams]
displacements = 'disp_x disp_y'
[]
[Variables]
[./disp_x]
order = ${order}
block = 'plank block'
scaling = ${fparse 2.0 / (E_plank + E_block)}
[../]
[./disp_y]
order = ${order}
block = 'plank block'
scaling = ${fparse 2.0 / (E_plank + E_block)}
[../]
[./frictionless_normal_lm]
order = ${order}
block = 'frictionless_slave_subdomain'
[../]
[]
[Modules/TensorMechanics/Master]
[./block]
strain = FINITE
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress hydrostatic_stress strain_xx strain_yy strain_zz'
block = 'block'
[../]
[./plank]
strain = FINITE
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress hydrostatic_stress strain_xx strain_yy strain_zz'
block = 'plank'
eigenstrain_names = 'swell'
[../]
[]
[Constraints]
[./lm]
type = NormalNodalLMMechanicalContact
slave = block_left
master = plank_right
variable = frictionless_normal_lm
master_variable = disp_x
disp_y = disp_y
ncp_function_type = min
use_displaced_mesh = true
[../]
[./normal_x]
type = NormalMortarMechanicalContact
master_boundary = plank_right
slave_boundary = block_left
master_subdomain = frictionless_master_subdomain
slave_subdomain = frictionless_slave_subdomain
variable = frictionless_normal_lm
slave_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
[../]
[./normal_y]
type = NormalMortarMechanicalContact
master_boundary = plank_right
slave_boundary = block_left
master_subdomain = frictionless_master_subdomain
slave_subdomain = frictionless_slave_subdomain
variable = frictionless_normal_lm
slave_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
[../]
[]
[BCs]
[./left_x]
type = DirichletBC
variable = disp_x
boundary = plank_left
value = 0.0
[../]
[./left_y]
type = DirichletBC
variable = disp_y
boundary = plank_bottom
value = 0.0
[../]
[./right_x]
type = DirichletBC
variable = disp_x
boundary = block_right
value = 0
[../]
[./right_y]
type = FunctionDirichletBC
variable = disp_y
boundary = block_right
function = '-t'
[../]
[]
[Materials]
[./plank]
type = ComputeIsotropicElasticityTensor
block = 'plank'
poissons_ratio = 0.3
youngs_modulus = ${E_plank}
[../]
[./block]
type = ComputeIsotropicElasticityTensor
block = 'block'
poissons_ratio = 0.3
youngs_modulus = ${E_block}
[../]
[./stress]
type = ComputeFiniteStrainElasticStress
block = 'plank block'
[../]
[./swell]
type = ComputeEigenstrain
block = 'plank'
eigenstrain_name = swell
eigen_base = '1 0 0 0 0 0 0 0 0'
prefactor = swell_mat
[../]
[./swell_mat]
type = GenericFunctionMaterial
prop_names = 'swell_mat'
prop_values = '7e-2*(1-cos(4*t))'
block = 'plank'
[../]
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_converged_reason -ksp_converged_reason'
petsc_options_iname = '-pc_type -mat_mffd_err -pc_factor_shift_type -pc_factor_shift_amount'
petsc_options_value = 'lu 1e-5 NONZERO 1e-15'
end_time = 10
dt = 0.1
dtmin = 0.1
timestep_tolerance = 1e-6
line_search = 'contact'
[]
[Postprocessors]
[./nl_its]
type = NumNonlinearIterations
[../]
[./total_nl_its]
type = CumulativeValuePostprocessor
postprocessor = nl_its
[../]
[./l_its]
type = NumLinearIterations
[../]
[./total_l_its]
type = CumulativeValuePostprocessor
postprocessor = l_its
[../]
[./contact]
type = ContactDOFSetSize
variable = frictionless_normal_lm
subdomain = frictionless_slave_subdomain
[../]
[./avg_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
block = 'block'
[../]
[./max_hydro]
type = ElementExtremeValue
variable = hydrostatic_stress
block = 'block'
[../]
[./min_hydro]
type = ElementExtremeValue
variable = hydrostatic_stress
block = 'block'
value_type = min
[../]
[./avg_vonmises]
type = ElementAverageValue
variable = vonmises_stress
block = 'block'
[../]
[./max_vonmises]
type = ElementExtremeValue
variable = vonmises_stress
block = 'block'
[../]
[./min_vonmises]
type = ElementExtremeValue
variable = vonmises_stress
block = 'block'
value_type = min
[../]
[]
[Outputs]
exodus = true
file_base = ${name}
[./comp]
type = CSV
show = 'contact'
[../]
[./out]
type = CSV
file_base = '${name}_out'
[../]
[]
[Debug]
show_var_residual_norms = true
[]
modules/contact/test/tests/bouncing-block-contact/frictionless-mortar-fb-lm-mortar-disp.i
starting_point = 2e-1
offset = 1e-2
[GlobalParams]
displacements = 'disp_x disp_y'
diffusivity = 1e0
scaling = 1e0
[]
[Mesh]
file = long-bottom-block-1elem-blocks.e
[]
[Variables]
[./disp_x]
block = '1 2'
[../]
[./disp_y]
block = '1 2'
[../]
[./normal_lm]
block = 3
family = MONOMIAL
order = CONSTANT
[../]
[]
[ICs]
[./disp_y]
block = 2
variable = disp_y
value = ${fparse starting_point + offset}
type = ConstantIC
[../]
[]
[Kernels]
[./disp_x]
type = MatDiffusion
variable = disp_x
[../]
[./disp_y]
type = MatDiffusion
variable = disp_y
[../]
[]
[Constraints]
[normal_lm]
type = NormalMortarLMMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = normal_lm
slave_variable = disp_x
slave_disp_y = disp_y
use_displaced_mesh = true
compute_primal_residuals = false
ncp_function_type = 'fb'
[]
[normal_x]
type = NormalMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = normal_lm
slave_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
[]
[normal_y]
type = NormalMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = normal_lm
slave_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
[]
[]
[BCs]
[./botx]
type = DirichletBC
variable = disp_x
boundary = 40
value = 0.0
[../]
[./boty]
type = DirichletBC
variable = disp_y
boundary = 40
value = 0.0
[../]
[./topy]
type = FunctionDirichletBC
variable = disp_y
boundary = 30
function = '${starting_point} * cos(2 * pi / 40 * t) + ${offset}'
[../]
[./leftx]
type = FunctionDirichletBC
variable = disp_x
boundary = 50
function = '1e-2 * t'
[../]
[]
[Executioner]
type = Transient
end_time = 200
dt = 5
dtmin = .1
solve_type = 'PJFNK'
petsc_options = '-snes_converged_reason -ksp_converged_reason -pc_svd_monitor -snes_linesearch_monitor'
petsc_options_iname = '-pc_type -pc_factor_shift_type -pc_factor_shift_amount -mat_mffd_err'
petsc_options_value = 'lu NONZERO 1e-15 1e-5'
l_max_its = 30
nl_max_its = 20
line_search = 'none'
[]
[Debug]
show_var_residual_norms = true
[]
[Outputs]
exodus = true
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Postprocessors]
active = 'num_nl cumulative contact'
[./num_nl]
type = NumNonlinearIterations
[../]
[./cumulative]
type = CumulativeValuePostprocessor
postprocessor = num_nl
[../]
[contact]
type = ContactDOFSetSize
variable = normal_lm
subdomain = '3'
execute_on = 'nonlinear timestep_end'
[]
[]
modules/combined/test/tests/mortar_tm/2drz/frictionless_second/finite_noaction.i
E_block = 1e7
E_plank = 1e7
elem = QUAD9
order = SECOND
name = 'finite_noaction'
[Problem]
coord_type = RZ
[]
[Mesh]
patch_size = 80
patch_update_strategy = auto
[./plank]
type = GeneratedMeshGenerator
dim = 2
xmin = 0
xmax = 0.6
ymin = -10
ymax = 10
nx = 2
ny = 67
elem_type = ${elem}
[../]
[./plank_sidesets]
type = RenameBoundaryGenerator
input = plank
old_boundary_id = '0 1 2 3'
new_boundary_name = 'plank_bottom plank_right plank_top plank_left'
[../]
[./plank_id]
type = SubdomainIDGenerator
input = plank_sidesets
subdomain_id = 1
[../]
[./block]
type = GeneratedMeshGenerator
dim = 2
xmin = 0.61
xmax = 1.21
ymin = 9.2
ymax = 10.0
nx = 3
ny = 4
elem_type = ${elem}
[../]
[./block_id]
type = SubdomainIDGenerator
input = block
subdomain_id = 2
[../]
[./combined]
type = MeshCollectionGenerator
inputs = 'plank_id block_id'
[../]
[./block_rename]
type = RenameBlockGenerator
input = combined
old_block_id = '1 2'
new_block_name = 'plank block'
[../]
[./block_sidesets]
type = SideSetsFromPointsGenerator
input = block_rename
points = '0.9 9.2 0
1.21 9.5 0
0.9 10.0 0
0.61 9.5 0'
new_boundary = 'block_bottom block_right block_top block_left'
[../]
[./slave]
input = block_sidesets
type = LowerDBlockFromSidesetGenerator
sidesets = 'block_left'
new_block_id = '30'
new_block_name = 'frictionless_slave_subdomain'
[../]
[./master]
input = slave
type = LowerDBlockFromSidesetGenerator
sidesets = 'plank_right'
new_block_id = '20'
new_block_name = 'frictionless_master_subdomain'
[../]
[]
[GlobalParams]
displacements = 'disp_x disp_y'
[]
[Variables]
[./disp_x]
order = ${order}
block = 'plank block'
scaling = ${fparse 2.0 / (E_plank + E_block)}
[../]
[./disp_y]
order = ${order}
block = 'plank block'
scaling = ${fparse 2.0 / (E_plank + E_block)}
[../]
[./frictionless_normal_lm]
order = ${order}
block = 'frictionless_slave_subdomain'
[../]
[]
[Modules/TensorMechanics/Master]
[./block]
strain = FINITE
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress hydrostatic_stress strain_xx strain_yy strain_zz'
block = 'block'
[../]
[./plank]
strain = FINITE
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress hydrostatic_stress strain_xx strain_yy strain_zz'
block = 'plank'
eigenstrain_names = 'swell'
[../]
[]
[Constraints]
[./lm]
type = NormalNodalLMMechanicalContact
slave = block_left
master = plank_right
variable = frictionless_normal_lm
master_variable = disp_x
disp_y = disp_y
ncp_function_type = min
use_displaced_mesh = true
[../]
[./normal_x]
type = NormalMortarMechanicalContact
master_boundary = plank_right
slave_boundary = block_left
master_subdomain = frictionless_master_subdomain
slave_subdomain = frictionless_slave_subdomain
variable = frictionless_normal_lm
slave_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
[../]
[./normal_y]
type = NormalMortarMechanicalContact
master_boundary = plank_right
slave_boundary = block_left
master_subdomain = frictionless_master_subdomain
slave_subdomain = frictionless_slave_subdomain
variable = frictionless_normal_lm
slave_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
[../]
[]
[BCs]
[./left_x]
type = DirichletBC
variable = disp_x
preset = false
boundary = plank_left
value = 0.0
[../]
[./left_y]
type = DirichletBC
variable = disp_y
preset = false
boundary = plank_bottom
value = 0.0
[../]
[./right_x]
type = DirichletBC
variable = disp_x
preset = false
boundary = block_right
value = 0
[../]
[./right_y]
type = FunctionDirichletBC
variable = disp_y
preset = false
boundary = block_right
function = '-t'
[../]
[]
[Materials]
[./plank]
type = ComputeIsotropicElasticityTensor
block = 'plank'
poissons_ratio = 0.3
youngs_modulus = ${E_plank}
[../]
[./block]
type = ComputeIsotropicElasticityTensor
block = 'block'
poissons_ratio = 0.3
youngs_modulus = ${E_block}
[../]
[./stress]
type = ComputeFiniteStrainElasticStress
block = 'plank block'
[../]
[./swell]
type = ComputeEigenstrain
block = 'plank'
eigenstrain_name = swell
eigen_base = '1 0 0 0 0 0 0 0 0'
prefactor = swell_mat
[../]
[./swell_mat]
type = GenericFunctionMaterial
prop_names = 'swell_mat'
prop_values = '7e-2*(1-cos(4*t))'
block = 'plank'
[../]
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_converged_reason -ksp_converged_reason'
petsc_options_iname = '-pc_type -mat_mffd_err -pc_factor_shift_type -pc_factor_shift_amount'
petsc_options_value = 'lu 1e-5 NONZERO 1e-15'
end_time = 10
dt = 0.1
dtmin = 0.1
timestep_tolerance = 1e-6
line_search = 'contact'
[]
[Postprocessors]
[./nl_its]
type = NumNonlinearIterations
[../]
[./total_nl_its]
type = CumulativeValuePostprocessor
postprocessor = nl_its
[../]
[./l_its]
type = NumLinearIterations
[../]
[./total_l_its]
type = CumulativeValuePostprocessor
postprocessor = l_its
[../]
[./contact]
type = ContactDOFSetSize
variable = frictionless_normal_lm
subdomain = frictionless_slave_subdomain
[../]
[./avg_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
block = 'block'
[../]
[./max_hydro]
type = ElementExtremeValue
variable = hydrostatic_stress
block = 'block'
[../]
[./min_hydro]
type = ElementExtremeValue
variable = hydrostatic_stress
block = 'block'
value_type = min
[../]
[./avg_vonmises]
type = ElementAverageValue
variable = vonmises_stress
block = 'block'
[../]
[./max_vonmises]
type = ElementExtremeValue
variable = vonmises_stress
block = 'block'
[../]
[./min_vonmises]
type = ElementExtremeValue
variable = vonmises_stress
block = 'block'
value_type = min
[../]
[]
[Outputs]
exodus = true
file_base = ${name}
[./comp]
type = CSV
show = 'contact'
[../]
[./out]
type = CSV
file_base = '${name}_out'
[../]
[]
[Debug]
show_var_residual_norms = true
[]
modules/contact/test/tests/bouncing-block-contact/frictional-mortar-fb-lm-mortar-disp.i
starting_point = 2e-1
# We offset slightly so we avoid the case where the bottom of the slave block and the top of the
# master block are perfectly vertically aligned which can cause the backtracking line search some
# issues for a coarse mesh (basic line search handles that fine)
offset = 1e-2
[GlobalParams]
displacements = 'disp_x disp_y'
diffusivity = 1e0
scaling = 1e0
[]
[Mesh]
file = long-bottom-block-1elem-blocks.e
[]
[Variables]
[./disp_x]
block = '1 2'
# order = SECOND
[../]
[./disp_y]
block = '1 2'
# order = SECOND
[../]
[./normal_lm]
block = 3
family = MONOMIAL
order = CONSTANT
[../]
[./tangential_lm]
block = 3
family = MONOMIAL
order = CONSTANT
[../]
[]
[ICs]
[./disp_y]
block = 2
variable = disp_y
value = ${fparse starting_point + offset}
type = ConstantIC
[../]
[]
[Kernels]
[./disp_x]
type = MatDiffusion
variable = disp_x
[../]
[./disp_y]
type = MatDiffusion
variable = disp_y
[../]
[]
[Constraints]
[normal_lm]
type = NormalMortarLMMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = normal_lm
slave_variable = disp_x
slave_disp_y = disp_y
use_displaced_mesh = true
compute_primal_residuals = false
ncp_function_type = fb
[]
[normal_x]
type = NormalMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = normal_lm
slave_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
[]
[normal_y]
type = NormalMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = normal_lm
slave_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
[]
[tangential_lm]
type = TangentialMortarLMMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = tangential_lm
slave_variable = disp_x
slave_disp_y = disp_y
use_displaced_mesh = true
compute_primal_residuals = false
contact_pressure = normal_lm
friction_coefficient = .1
ncp_function_type = fb
[]
[tangential_x]
type = TangentialMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = tangential_lm
slave_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
[]
[tangential_y]
type = TangentialMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = tangential_lm
slave_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
[]
[]
[BCs]
[./botx]
type = DirichletBC
variable = disp_x
boundary = 40
value = 0.0
[../]
[./boty]
type = DirichletBC
variable = disp_y
boundary = 40
value = 0.0
[../]
[./topy]
type = FunctionDirichletBC
variable = disp_y
boundary = 30
function = '${starting_point} * cos(2 * pi / 40 * t) + ${offset}'
[../]
[./leftx]
type = FunctionDirichletBC
variable = disp_x
boundary = 50
function = '1e-2 * t'
[../]
[]
[Executioner]
type = Transient
end_time = 200
dt = 5
dtmin = .1
solve_type = 'PJFNK'
petsc_options = '-snes_converged_reason -ksp_converged_reason -pc_svd_monitor -snes_linesearch_monitor -snes_ksp_ew'
petsc_options_iname = '-pc_type -pc_factor_shift_type -pc_factor_shift_amount -mat_mffd_err'
petsc_options_value = 'lu NONZERO 1e-15 1e-5'
l_max_its = 30
nl_max_its = 20
line_search = 'none'
# [./Predictor]
# type = SimplePredictor
# scale = 1.0
# [../]
[]
[Debug]
show_var_residual_norms = true
[]
[Outputs]
exodus = true
# checkpoint = true
# [./dofmap]
# type = DOFMap
# execute_on = 'initial'
# [../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Postprocessors]
[./num_nl]
type = NumNonlinearIterations
[../]
[./cumulative]
type = CumulativeValuePostprocessor
postprocessor = num_nl
[../]
[contact]
type = ContactDOFSetSize
variable = normal_lm
subdomain = '3'
execute_on = 'nonlinear timestep_end'
[]
[]
modules/combined/test/tests/sliding_block/in_and_out/constraint/frictional_lm.i
[Mesh]
patch_size = 80
[file]
type = FileMeshGenerator
file = sliding_elastic_blocks_2d.e
[]
[slave]
input = file
type = LowerDBlockFromSidesetGenerator
sidesets = '3'
new_block_id = '30'
[]
[master]
input = slave
type = LowerDBlockFromSidesetGenerator
sidesets = '2'
new_block_id = '20'
[]
[]
[GlobalParams]
volumetric_locking_correction = false
displacements = 'disp_x disp_y'
[]
[Variables]
[normal_lm]
block = '30'
[]
[tangential_lm]
block = '30'
family = MONOMIAL
order = CONSTANT
[]
[]
[BCs]
[./left_x]
type = DirichletBC
variable = disp_x
boundary = 1
value = 0.0
[../]
[./left_y]
type = DirichletBC
variable = disp_y
boundary = 1
value = 0.0
[../]
[./right_x]
type = FunctionDirichletBC
variable = disp_x
boundary = 4
function = horizontal_movement
[../]
[./right_y]
type = FunctionDirichletBC
variable = disp_y
boundary = 4
function = vertical_movement
[../]
[]
[Modules/TensorMechanics/Master]
[./all]
add_variables = true
strain = FINITE
block = '1 2'
[../]
[]
[Materials]
[./tensor]
type = ComputeIsotropicElasticityTensor
block = '1 2'
youngs_modulus = 1e6
poissons_ratio = 0.3
[../]
[./stress]
type = ComputeFiniteStrainElasticStress
block = '1 2'
[../]
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_converged_reason -ksp_converged_reason -snes_ksp_ew'
petsc_options_iname = '-pc_type -mat_mffd_err -pc_factor_shift_type -pc_factor_shift_amount'
petsc_options_value = 'lu 1e-5 NONZERO 1e-15'
end_time = 15
dt = 0.1
dtmin = 0.01
l_max_its = 30
nl_max_its = 20
line_search = 'none'
timestep_tolerance = 1e-6
[./Predictor]
type = SimplePredictor
scale = 1.0
[../]
[]
[Debug]
show_var_residual_norms = true
[]
[Outputs]
sync_times = '1 2 3 4 5 6 7 8 9 10 11 12 13 14 15'
[out]
type = Exodus
sync_only = true
[]
[dof]
execute_on = 'initial'
type = DOFMap
[]
[csv]
type = CSV
execute_on = 'nonlinear timestep_end'
[]
[]
[Functions]
[./vertical_movement]
type = ParsedFunction
value = -t
[../]
[./horizontal_movement]
type = ParsedFunction
value = -0.04*sin(4*t)+0.02
[../]
[]
[Constraints]
[./lm]
type = NormalNodalLMMechanicalContact
slave = 3
master = 2
variable = normal_lm
master_variable = disp_x
disp_y = disp_y
ncp_function_type = min
use_displaced_mesh = true
c = 1e6 # relative scale difference between pressure and gap
[../]
[normal_x]
type = NormalMortarMechanicalContact
master_boundary = '2'
slave_boundary = '3'
master_subdomain = '20'
slave_subdomain = '30'
variable = normal_lm
slave_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
[]
[normal_y]
type = NormalMortarMechanicalContact
master_boundary = '2'
slave_boundary = '3'
master_subdomain = '20'
slave_subdomain = '30'
variable = normal_lm
slave_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
[]
[tangential_lm]
type = TangentialMortarLMMechanicalContact
master_boundary = '2'
slave_boundary = '3'
master_subdomain = '20'
slave_subdomain = '30'
variable = tangential_lm
slave_variable = disp_x
slave_disp_y = disp_y
use_displaced_mesh = true
compute_primal_residuals = false
contact_pressure = normal_lm
friction_coefficient = .4
ncp_function_type = fb
c = 1000 # relative scale difference between pressure and velocity
[]
[tangential_x]
type = TangentialMortarMechanicalContact
master_boundary = '2'
slave_boundary = '3'
master_subdomain = '20'
slave_subdomain = '30'
variable = tangential_lm
slave_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
[]
[tangential_y]
type = TangentialMortarMechanicalContact
master_boundary = '2'
slave_boundary = '3'
master_subdomain = '20'
slave_subdomain = '30'
variable = tangential_lm
slave_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
[]
[]
[Postprocessors]
[./num_nl]
type = NumNonlinearIterations
[../]
[./cumulative]
type = CumulativeValuePostprocessor
postprocessor = num_nl
[../]
[lin]
type = NumLinearIterations
[]
[cum_lin]
type = CumulativeValuePostprocessor
postprocessor = lin
[]
[contact]
type = ContactDOFSetSize
variable = normal_lm
subdomain = '30'
execute_on = 'nonlinear timestep_end'
[]
[]
modules/contact/test/tests/mechanical-small-problem/frictionless-nodal-lm-mortar-disp.i
[GlobalParams]
displacements = 'disp_x disp_y'
[]
[Mesh]
[./simple_mesh]
type = FileMeshGenerator
file = mesh.e
[../]
[./master]
type = LowerDBlockFromSidesetGenerator
input = simple_mesh
sidesets = '2'
new_block_id = '3'
[../]
[./slave]
type = LowerDBlockFromSidesetGenerator
input = master
sidesets = '1'
new_block_id = '4'
[../]
[]
[Constraints]
[./lm]
type = NormalNodalLMMechanicalContact
slave = 1
master = 2
variable = frictionless_normal_lm
master_variable = disp_x
disp_y = disp_y
[../]
[x]
type = NormalMortarMechanicalContact
master_boundary = '2'
slave_boundary = '1'
master_subdomain = '3'
slave_subdomain = '4'
variable = frictionless_normal_lm
slave_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
[]
[y]
type = NormalMortarMechanicalContact
master_boundary = '2'
slave_boundary = '1'
master_subdomain = '3'
slave_subdomain = '4'
variable = frictionless_normal_lm
slave_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
[]
[]
[Variables]
[./disp_x]
block = '1 2'
[../]
[./disp_y]
block = '1 2'
[../]
[./frictionless_normal_lm]
block = 4
[../]
[]
[BCs]
[./left_x]
type = DirichletBC
variable = disp_x
boundary = 'outside_left'
value = 0.0
[../]
[./left_y]
type = DirichletBC
variable = disp_y
boundary = 'outside_left'
value = 0.0
[../]
[./right_x]
type = FunctionDirichletBC
variable = disp_x
boundary = 'outside_right'
function = '-5e-3 * t'
[../]
[./right_y]
type = FunctionDirichletBC
variable = disp_y
boundary = 'outside_right'
function = 0
[../]
[]
[Kernels]
[disp_x]
type = Diffusion
variable = disp_x
block = '1 2'
[]
[disp_y]
type = Diffusion
variable = disp_y
block = '1 2'
[]
[]
[Debug]
show_var_residual_norms = 1
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
solve_type = PJFNK
type = Transient
num_steps = 10
dt = 1
dtmin = 1
petsc_options_iname = '-pc_type -snes_linesearch_type -pc_factor_shift_type -pc_factor_shift_amount'
petsc_options_value = 'lu basic NONZERO 1e-15'
[]
[Outputs]
exodus = true
[]
[Postprocessors]
[contact]
type = ContactDOFSetSize
variable = frictionless_normal_lm
subdomain = '4'
execute_on = 'nonlinear timestep_end'
[]
[]
modules/contact/test/tests/bouncing-block-contact/frictional-nodal-min-normal-lm-mortar-fb-tangential-lm-mortar-disp.i
starting_point = 2e-1
# We offset slightly so we avoid the case where the bottom of the slave block and the top of the
# master block are perfectly vertically aligned which can cause the backtracking line search some
# issues for a coarse mesh (basic line search handles that fine)
offset = 1e-2
[GlobalParams]
displacements = 'disp_x disp_y'
diffusivity = 1e0
scaling = 1e0
[]
[Mesh]
[./file_mesh]
type = FileMeshGenerator
file = long-bottom-block-1elem-blocks-coarse.e
[../]
[]
[Variables]
[./disp_x]
block = '1 2'
# order = SECOND
[../]
[./disp_y]
block = '1 2'
# order = SECOND
[../]
[./frictional_normal_lm]
block = 3
# family = MONOMIAL
# order = CONSTANT
[../]
[./frictional_tangential_lm]
block = 3
family = MONOMIAL
order = CONSTANT
[../]
[]
[ICs]
[./disp_y]
block = 2
variable = disp_y
value = ${fparse starting_point + offset}
type = ConstantIC
[../]
[]
[Kernels]
[./disp_x]
type = MatDiffusion
variable = disp_x
[../]
[./disp_y]
type = MatDiffusion
variable = disp_y
[../]
[]
[Constraints]
[frictional_normal_lm]
type = NormalNodalLMMechanicalContact
slave = 10
master = 20
variable = frictional_normal_lm
master_variable = disp_x
disp_y = disp_y
ncp_function_type = min
[../]
[normal_x]
type = NormalMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = frictional_normal_lm
slave_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
[]
[normal_y]
type = NormalMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = frictional_normal_lm
slave_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
[]
[frictional_tangential_lm]
type = TangentialMortarLMMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = frictional_tangential_lm
slave_variable = disp_x
slave_disp_y = disp_y
use_displaced_mesh = true
compute_primal_residuals = false
contact_pressure = frictional_normal_lm
friction_coefficient = .1
ncp_function_type = fb
[]
[tangential_x]
type = TangentialMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = frictional_tangential_lm
slave_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
[]
[tangential_y]
type = TangentialMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = frictional_tangential_lm
slave_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
[]
[]
[BCs]
[./botx]
type = DirichletBC
variable = disp_x
boundary = 40
value = 0.0
[../]
[./boty]
type = DirichletBC
variable = disp_y
boundary = 40
value = 0.0
[../]
[./topy]
type = FunctionDirichletBC
variable = disp_y
boundary = 30
function = '${starting_point} * cos(2 * pi / 40 * t) + ${offset}'
[../]
[./leftx]
type = FunctionDirichletBC
variable = disp_x
boundary = 50
function = '1e-2 * t'
[../]
[]
[Executioner]
type = Transient
end_time = 200
dt = 5
dtmin = .1
solve_type = 'PJFNK'
petsc_options = '-snes_converged_reason -ksp_converged_reason -pc_svd_monitor -snes_linesearch_monitor -snes_ksp_ew'
petsc_options_iname = '-pc_type -pc_factor_shift_type -pc_factor_shift_amount -mat_mffd_err'
petsc_options_value = 'lu NONZERO 1e-15 1e-5'
l_max_its = 30
nl_max_its = 20
line_search = 'none'
# [./Predictor]
# type = SimplePredictor
# scale = 1.0
# [../]
[]
[Debug]
show_var_residual_norms = true
[]
[Outputs]
exodus = true
# checkpoint = true
# [./dofmap]
# type = DOFMap
# execute_on = 'initial'
# [../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Postprocessors]
[./num_nl]
type = NumNonlinearIterations
[../]
[./cumulative]
type = CumulativeValuePostprocessor
postprocessor = num_nl
[../]
[contact]
type = ContactDOFSetSize
variable = frictional_normal_lm
subdomain = '3'
execute_on = 'nonlinear timestep_end'
[]
[]
modules/contact/test/tests/bouncing-block-contact/frictional-mortar-min-lm-mortar-disp.i
starting_point = 2e-1
# We offset slightly so we avoid the case where the bottom of the slave block and the top of the
# master block are perfectly vertically aligned which can cause the backtracking line search some
# issues for a coarse mesh (basic line search handles that fine)
offset = 1e-2
[GlobalParams]
displacements = 'disp_x disp_y'
diffusivity = 1e0
scaling = 1e0
[]
[Mesh]
file = long-bottom-block-1elem-blocks.e
[]
[Variables]
[./disp_x]
block = '1 2'
# order = SECOND
[../]
[./disp_y]
block = '1 2'
# order = SECOND
[../]
[./normal_lm]
block = 3
family = MONOMIAL
order = CONSTANT
[../]
[./tangential_lm]
block = 3
family = MONOMIAL
order = CONSTANT
[../]
[]
[ICs]
[./disp_y]
block = 2
variable = disp_y
value = ${fparse starting_point + offset}
type = ConstantIC
[../]
[]
[Kernels]
[./disp_x]
type = MatDiffusion
variable = disp_x
[../]
[./disp_y]
type = MatDiffusion
variable = disp_y
[../]
[]
[Constraints]
[normal_lm]
type = NormalMortarLMMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = normal_lm
slave_variable = disp_x
slave_disp_y = disp_y
use_displaced_mesh = true
compute_primal_residuals = false
ncp_function_type = min
[]
[normal_x]
type = NormalMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = normal_lm
slave_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
[]
[normal_y]
type = NormalMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = normal_lm
slave_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
[]
[tangential_lm]
type = TangentialMortarLMMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = tangential_lm
slave_variable = disp_x
slave_disp_y = disp_y
use_displaced_mesh = true
compute_primal_residuals = false
contact_pressure = normal_lm
friction_coefficient = .1
ncp_function_type = min
[]
[tangential_x]
type = TangentialMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = tangential_lm
slave_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
[]
[tangential_y]
type = TangentialMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = tangential_lm
slave_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
[]
[]
[BCs]
[./botx]
type = DirichletBC
variable = disp_x
preset = false
boundary = 40
value = 0.0
[../]
[./boty]
type = DirichletBC
variable = disp_y
preset = false
boundary = 40
value = 0.0
[../]
[./topy]
type = FunctionDirichletBC
variable = disp_y
preset = false
boundary = 30
function = '${starting_point} * cos(2 * pi / 40 * t) + ${offset}'
[../]
[./leftx]
type = FunctionDirichletBC
variable = disp_x
preset = false
boundary = 50
function = '1e-2 * t'
[../]
[]
[Executioner]
type = Transient
end_time = 200
dt = 5
dtmin = .1
solve_type = 'PJFNK'
petsc_options = '-snes_converged_reason -ksp_converged_reason -pc_svd_monitor -snes_linesearch_monitor -snes_ksp_ew'
petsc_options_iname = '-pc_type -pc_factor_shift_type -pc_factor_shift_amount -mat_mffd_err'
petsc_options_value = 'lu NONZERO 1e-15 1e-5'
l_max_its = 30
nl_max_its = 20
line_search = 'none'
[]
[Debug]
show_var_residual_norms = true
[]
[Outputs]
exodus = true
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Postprocessors]
[./num_nl]
type = NumNonlinearIterations
[../]
[./cumulative]
type = CumulativeValuePostprocessor
postprocessor = num_nl
[../]
[contact]
type = ContactDOFSetSize
variable = normal_lm
subdomain = '3'
execute_on = 'nonlinear timestep_end'
[]
[]
modules/combined/test/tests/mortar_tm/2d/frictionless_second/finite_noaction.i
E_block = 1e7
E_plank = 1e7
elem = QUAD9
order = SECOND
name = 'finite_noaction'
[Mesh]
patch_size = 80
patch_update_strategy = auto
[./plank]
type = GeneratedMeshGenerator
dim = 2
xmin = -0.3
xmax = 0.3
ymin = -10
ymax = 10
nx = 2
ny = 67
elem_type = ${elem}
[../]
[./plank_sidesets]
type = RenameBoundaryGenerator
input = plank
old_boundary_id = '0 1 2 3'
new_boundary_name = 'plank_bottom plank_right plank_top plank_left'
[../]
[./plank_id]
type = SubdomainIDGenerator
input = plank_sidesets
subdomain_id = 1
[../]
[./block]
type = GeneratedMeshGenerator
dim = 2
xmin = 0.31
xmax = 0.91
ymin = 7.7
ymax = 8.5
nx = 3
ny = 4
elem_type = ${elem}
[../]
[./block_id]
type = SubdomainIDGenerator
input = block
subdomain_id = 2
[../]
[./combined]
type = MeshCollectionGenerator
inputs = 'plank_id block_id'
[../]
[./block_rename]
type = RenameBlockGenerator
input = combined
old_block_id = '1 2'
new_block_name = 'plank block'
[../]
[./block_sidesets]
type = SideSetsFromPointsGenerator
input = block_rename
points = '0.6 7.7 0
0.91 8.0 0
0.6 8.5 0
0.31 8.0 0'
new_boundary = 'block_bottom block_right block_top block_left'
[../]
[./slave]
input = block_sidesets
type = LowerDBlockFromSidesetGenerator
sidesets = 'block_left'
new_block_id = '30'
new_block_name = 'frictionless_slave_subdomain'
[../]
[./master]
input = slave
type = LowerDBlockFromSidesetGenerator
sidesets = 'plank_right'
new_block_id = '20'
new_block_name = 'frictionless_master_subdomain'
[../]
[]
[GlobalParams]
displacements = 'disp_x disp_y'
[]
[Variables]
[./disp_x]
order = ${order}
block = 'plank block'
scaling = ${fparse 2.0 / (E_plank + E_block)}
[../]
[./disp_y]
order = ${order}
block = 'plank block'
scaling = ${fparse 2.0 / (E_plank + E_block)}
[../]
[./frictionless_normal_lm]
order = ${order}
block = 'frictionless_slave_subdomain'
[../]
[]
[Modules/TensorMechanics/Master]
[./action]
strain = FINITE
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress hydrostatic_stress strain_xx strain_yy strain_zz'
block = 'plank block'
[../]
[]
[Constraints]
[./lm]
type = NormalNodalLMMechanicalContact
slave = block_left
master = plank_right
variable = frictionless_normal_lm
master_variable = disp_x
disp_y = disp_y
ncp_function_type = min
use_displaced_mesh = true
[../]
[./normal_x]
type = NormalMortarMechanicalContact
master_boundary = plank_right
slave_boundary = block_left
master_subdomain = frictionless_master_subdomain
slave_subdomain = frictionless_slave_subdomain
variable = frictionless_normal_lm
slave_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
[../]
[./normal_y]
type = NormalMortarMechanicalContact
master_boundary = plank_right
slave_boundary = block_left
master_subdomain = frictionless_master_subdomain
slave_subdomain = frictionless_slave_subdomain
variable = frictionless_normal_lm
slave_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
[../]
[]
[BCs]
[./left_x]
type = DirichletBC
variable = disp_x
preset = false
boundary = plank_left
value = 0.0
[../]
[./left_y]
type = DirichletBC
variable = disp_y
preset = false
boundary = plank_bottom
value = 0.0
[../]
[./right_x]
type = FunctionDirichletBC
variable = disp_x
preset = false
boundary = block_right
function = '-0.04*sin(4*(t+1.5))+0.02'
[../]
[./right_y]
type = FunctionDirichletBC
variable = disp_y
preset = false
boundary = block_right
function = '-t'
[../]
[]
[Materials]
[./plank]
type = ComputeIsotropicElasticityTensor
block = 'plank'
poissons_ratio = 0.3
youngs_modulus = ${E_plank}
[../]
[./block]
type = ComputeIsotropicElasticityTensor
block = 'block'
poissons_ratio = 0.3
youngs_modulus = ${E_block}
[../]
[./stress]
type = ComputeFiniteStrainElasticStress
block = 'plank block'
[../]
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_converged_reason -ksp_converged_reason'
petsc_options_iname = '-pc_type -mat_mffd_err -pc_factor_shift_type -pc_factor_shift_amount'
petsc_options_value = 'lu 1e-5 NONZERO 1e-15'
end_time = 13.5
dt = 0.1
dtmin = 0.1
timestep_tolerance = 1e-6
line_search = 'contact'
[]
[Postprocessors]
[./nl_its]
type = NumNonlinearIterations
[../]
[./total_nl_its]
type = CumulativeValuePostprocessor
postprocessor = nl_its
[../]
[./l_its]
type = NumLinearIterations
[../]
[./total_l_its]
type = CumulativeValuePostprocessor
postprocessor = l_its
[../]
[./contact]
type = ContactDOFSetSize
variable = frictionless_normal_lm
subdomain = frictionless_slave_subdomain
[../]
[./avg_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
block = 'block'
[../]
[./max_hydro]
type = ElementExtremeValue
variable = hydrostatic_stress
block = 'block'
[../]
[./min_hydro]
type = ElementExtremeValue
variable = hydrostatic_stress
block = 'block'
value_type = min
[../]
[./avg_vonmises]
type = ElementAverageValue
variable = vonmises_stress
block = 'block'
[../]
[./max_vonmises]
type = ElementExtremeValue
variable = vonmises_stress
block = 'block'
[../]
[./min_vonmises]
type = ElementExtremeValue
variable = vonmises_stress
block = 'block'
value_type = min
[../]
[]
[Outputs]
exodus = true
file_base = ${name}
[./comp]
type = CSV
show = 'contact'
[../]
[./out]
type = CSV
file_base = '${name}_out'
[../]
[]
[Debug]
show_var_residual_norms = true
[]
modules/contact/test/tests/bouncing-block-contact/frictionless-nodal-min-lm-mortar-disp.i
starting_point = 2e-1
offset = 1e-2
[GlobalParams]
displacements = 'disp_x disp_y'
diffusivity = 1e0
scaling = 1e0
[]
[Mesh]
file = long-bottom-block-1elem-blocks.e
[]
[Variables]
[./disp_x]
block = '1 2'
[../]
[./disp_y]
block = '1 2'
[../]
[./normal_lm]
block = 3
[../]
[]
[ICs]
[./disp_y]
block = 2
variable = disp_y
value = ${fparse starting_point + offset}
type = ConstantIC
[../]
[]
[Kernels]
[./disp_x]
type = MatDiffusion
variable = disp_x
[../]
[./disp_y]
type = MatDiffusion
variable = disp_y
[../]
[]
[Constraints]
[./lm]
type = NormalNodalLMMechanicalContact
slave = 10
master = 20
variable = normal_lm
master_variable = disp_x
disp_y = disp_y
[../]
[normal_x]
type = NormalMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = normal_lm
slave_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
[]
[normal_y]
type = NormalMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = normal_lm
slave_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
[]
[]
[BCs]
[./botx]
type = DirichletBC
variable = disp_x
boundary = 40
value = 0.0
[../]
[./boty]
type = DirichletBC
variable = disp_y
boundary = 40
value = 0.0
[../]
[./topy]
type = FunctionDirichletBC
variable = disp_y
boundary = 30
function = '${starting_point} * cos(2 * pi / 40 * t) + ${offset}'
[../]
[./leftx]
type = FunctionDirichletBC
variable = disp_x
boundary = 50
function = '1e-2 * t'
[../]
[]
[Executioner]
type = Transient
end_time = 200
dt = 5
dtmin = .1
solve_type = 'PJFNK'
petsc_options = '-snes_converged_reason -ksp_converged_reason -pc_svd_monitor -snes_linesearch_monitor'
petsc_options_iname = '-pc_type -pc_factor_shift_type -pc_factor_shift_amount -mat_mffd_err'
petsc_options_value = 'lu NONZERO 1e-15 1e-5'
l_max_its = 30
nl_max_its = 20
line_search = 'none'
[]
[Debug]
show_var_residual_norms = true
[]
[Outputs]
exodus = true
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Postprocessors]
active = 'num_nl cumulative contact'
[./num_nl]
type = NumNonlinearIterations
[../]
[./cumulative]
type = CumulativeValuePostprocessor
postprocessor = num_nl
[../]
[contact]
type = ContactDOFSetSize
variable = normal_lm
subdomain = '3'
execute_on = 'nonlinear timestep_end'
[]
[]
modules/contact/test/tests/bouncing-block-contact/frictionless-nodal-fb-lm-mortar-disp.i
starting_point = 2e-1
offset = 1e-2
[GlobalParams]
displacements = 'disp_x disp_y'
diffusivity = 1e0
scaling = 1e0
[]
[Mesh]
file = long-bottom-block-1elem-blocks.e
[]
[Variables]
[./disp_x]
block = '1 2'
[../]
[./disp_y]
block = '1 2'
[../]
[./normal_lm]
block = 3
[../]
[]
[ICs]
[./disp_y]
block = 2
variable = disp_y
value = ${fparse starting_point + offset}
type = ConstantIC
[../]
[]
[Kernels]
[./disp_x]
type = MatDiffusion
variable = disp_x
[../]
[./disp_y]
type = MatDiffusion
variable = disp_y
[../]
[]
[Constraints]
[./lm]
type = NormalNodalLMMechanicalContact
slave = 10
master = 20
variable = normal_lm
master_variable = disp_x
disp_y = disp_y
ncp_function_type = 'fb'
[../]
[normal_x]
type = NormalMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = normal_lm
slave_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
[]
[normal_y]
type = NormalMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = normal_lm
slave_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
[]
[]
[BCs]
[./botx]
type = DirichletBC
variable = disp_x
boundary = 40
value = 0.0
[../]
[./boty]
type = DirichletBC
variable = disp_y
boundary = 40
value = 0.0
[../]
[./topy]
type = FunctionDirichletBC
variable = disp_y
boundary = 30
function = '${starting_point} * cos(2 * pi / 40 * t) + ${offset}'
[../]
[./leftx]
type = FunctionDirichletBC
variable = disp_x
boundary = 50
function = '1e-2 * t'
[../]
[]
[Executioner]
type = Transient
end_time = 200
dt = 5
dtmin = .1
solve_type = 'PJFNK'
petsc_options = '-snes_converged_reason -ksp_converged_reason -pc_svd_monitor -snes_linesearch_monitor'
petsc_options_iname = '-pc_type -pc_factor_shift_type -pc_factor_shift_amount -mat_mffd_err'
petsc_options_value = 'lu NONZERO 1e-15 1e-5'
l_max_its = 30
nl_max_its = 20
line_search = 'none'
[]
[Debug]
show_var_residual_norms = true
[]
[Outputs]
exodus = true
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Postprocessors]
active = 'num_nl cumulative contact'
[./num_nl]
type = NumNonlinearIterations
[../]
[./cumulative]
type = CumulativeValuePostprocessor
postprocessor = num_nl
[../]
[contact]
type = ContactDOFSetSize
variable = normal_lm
subdomain = '3'
execute_on = 'nonlinear timestep_end'
[]
[]
modules/contact/test/tests/bouncing-block-contact/frictionless-mortar-min-lm-mortar-disp.i
starting_point = 2e-1
offset = 1e-2
[GlobalParams]
displacements = 'disp_x disp_y'
diffusivity = 1e0
scaling = 1e0
[]
[Mesh]
file = long-bottom-block-1elem-blocks.e
[]
[Variables]
[./disp_x]
block = '1 2'
[../]
[./disp_y]
block = '1 2'
[../]
[./normal_lm]
block = 3
family = MONOMIAL
order = CONSTANT
[../]
[]
[ICs]
[./disp_y]
block = 2
variable = disp_y
value = ${fparse starting_point + offset}
type = ConstantIC
[../]
[]
[Kernels]
[./disp_x]
type = MatDiffusion
variable = disp_x
[../]
[./disp_y]
type = MatDiffusion
variable = disp_y
[../]
[]
[Constraints]
[normal_lm]
type = NormalMortarLMMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = normal_lm
slave_variable = disp_x
slave_disp_y = disp_y
use_displaced_mesh = true
compute_primal_residuals = false
ncp_function_type = 'min'
[]
[normal_x]
type = NormalMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = normal_lm
slave_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
[]
[normal_y]
type = NormalMortarMechanicalContact
master_boundary = 20
slave_boundary = 10
master_subdomain = 4
slave_subdomain = 3
variable = normal_lm
slave_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
[]
[]
[BCs]
[./botx]
type = DirichletBC
variable = disp_x
preset = false
boundary = 40
value = 0.0
[../]
[./boty]
type = DirichletBC
variable = disp_y
preset = false
boundary = 40
value = 0.0
[../]
[./topy]
type = FunctionDirichletBC
variable = disp_y
preset = false
boundary = 30
function = '${starting_point} * cos(2 * pi / 40 * t) + ${offset}'
[../]
[./leftx]
type = FunctionDirichletBC
variable = disp_x
preset = false
boundary = 50
function = '1e-2 * t'
[../]
[]
[Executioner]
type = Transient
end_time = 200
dt = 5
dtmin = .1
solve_type = 'PJFNK'
petsc_options = '-snes_converged_reason -ksp_converged_reason -pc_svd_monitor -snes_linesearch_monitor'
petsc_options_iname = '-pc_type -pc_factor_shift_type -pc_factor_shift_amount -mat_mffd_err'
petsc_options_value = 'lu NONZERO 1e-15 1e-5'
l_max_its = 30
nl_max_its = 20
line_search = 'none'
[]
[Debug]
show_var_residual_norms = true
[]
[Outputs]
exodus = true
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Postprocessors]
active = 'num_nl cumulative contact'
[./num_nl]
type = NumNonlinearIterations
[../]
[./cumulative]
type = CumulativeValuePostprocessor
postprocessor = num_nl
[../]
[contact]
type = ContactDOFSetSize
variable = normal_lm
subdomain = '3'
execute_on = 'nonlinear timestep_end'
[]
[]