- variableThe name of the variable that this residual object operates on
C++ Type:NonlinearVariableName
Controllable:No
Description:The name of the variable that this residual object operates on
InertialForce
Calculates the residual for the inertial force () and the contribution of mass dependent Rayleigh damping and HHT time integration scheme ($\eta \cdot M \cdot ((1+\alpha)velq2-\alpha \cdot vel-old) $)
Description
This class computes the inertial force using a consistent mass matrix and also computes the mass proportional Rayleigh damping. More information about the residual calculation and usage can be found at Dynamics. Each InertialForce kernel calculates the force only along one coordinate direction. So, a separate InertialForce input block should be set up for each coordinate direction.
Input Parameters
- accelerationacceleration variable
C++ Type:std::vector<VariableName>
Controllable:No
Description:acceleration variable
- alpha0alpha parameter for mass dependent numerical damping induced by HHT time integration scheme
Default:0
C++ Type:double
Controllable:No
Description:alpha parameter for mass dependent numerical damping induced by HHT time integration scheme
- betabeta parameter for Newmark Time integration
C++ Type:double
Controllable:No
Description:beta parameter for Newmark Time integration
- blockThe list of blocks (ids or names) that this object will be applied
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:The list of blocks (ids or names) that this object will be applied
- densitydensityName of Material Property that provides the density
Default:density
C++ Type:MaterialPropertyName
Controllable:No
Description:Name of Material Property that provides the density
- density_scaling0Name of material property to add mass scaling in explicit simulations.
Default:0
C++ Type:MaterialPropertyName
Controllable:No
Description:Name of material property to add mass scaling in explicit simulations.
- displacementsThe displacements
C++ Type:std::vector<VariableName>
Controllable:No
Description:The displacements
- eta0Name of material property or a constant real number defining the eta parameter for the Rayleigh damping.
Default:0
C++ Type:MaterialPropertyName
Controllable:No
Description:Name of material property or a constant real number defining the eta parameter for the Rayleigh damping.
- gammagamma parameter for Newmark Time integration
C++ Type:double
Controllable:No
Description:gamma parameter for Newmark Time integration
- prop_getter_suffixAn optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
C++ Type:MaterialPropertyName
Controllable:No
Description:An optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
- use_interpolated_stateFalseFor the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Default:False
C++ Type:bool
Controllable:No
Description:For the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
- velocityvelocity variable
C++ Type:std::vector<VariableName>
Controllable:No
Description:velocity variable
Optional Parameters
- absolute_value_vector_tagsThe tags for the vectors this residual object should fill with the absolute value of the residual contribution
C++ Type:std::vector<TagName>
Controllable:No
Description:The tags for the vectors this residual object should fill with the absolute value of the residual contribution
- extra_matrix_tagsThe extra tags for the matrices this Kernel should fill
C++ Type:std::vector<TagName>
Controllable:No
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<TagName>
Controllable:No
Description:The extra tags for the vectors this Kernel should fill
- matrix_tagssystem timeThe tag for the matrices this Kernel should fill
Default:system time
C++ Type:MultiMooseEnum
Options:nontime, system, time
Controllable:No
Description:The tag for the matrices this Kernel should fill
- vector_tagstimeThe tag for the vectors this Kernel should fill
Default:time
C++ Type:MultiMooseEnum
Options:nontime, time
Controllable:No
Description:The tag for the vectors this Kernel should fill
Tagging Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
- diag_save_inThe name of auxiliary variables to save this Kernel's diagonal Jacobian contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
C++ Type:std::vector<AuxVariableName>
Controllable:No
Description:The name of auxiliary variables to save this Kernel's diagonal Jacobian contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Controllable:Yes
Description:Set the enabled status of the MooseObject.
- implicitTrueDetermines whether this object is calculated using an implicit or explicit form
Default:True
C++ Type:bool
Controllable:No
Description:Determines whether this object is calculated using an implicit or explicit form
- save_inThe name of auxiliary variables to save this Kernel's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
C++ Type:std::vector<AuxVariableName>
Controllable:No
Description:The name of auxiliary variables to save this Kernel's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
- seed0The seed for the master random number generator
Default:0
C++ Type:unsigned int
Controllable:No
Description:The seed for the master random number generator
- use_displaced_meshTrueWhether 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:True
C++ Type:bool
Controllable:No
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
Input Files
- (modules/solid_mechanics/test/tests/central_difference/lumped/3D/3d_lumped_explicit.i)
- (modules/solid_mechanics/test/tests/central_difference/consistent/1D/1d_consistent_explicit.i)
- (modules/solid_mechanics/test/tests/dynamics/wave_1D/wave_rayleigh_newmark.i)
- (modules/solid_mechanics/test/tests/central_difference/consistent/3D/3d_consistent_explicit_mass_scaling.i)
- (modules/solid_mechanics/test/tests/dynamics/rayleigh_damping/rayleigh_newmark.i)
- (modules/solid_mechanics/test/tests/dynamics/wave_1D/wave_rayleigh_hht_AD.i)
- (modules/fsi/test/tests/fsi_acoustics/3D_struc_acoustic/3D_struc_acoustic.i)
- (modules/solid_mechanics/test/tests/central_difference/consistent/1D/1d_consistent_implicit.i)
- (modules/solid_mechanics/test/tests/dynamics/time_integration/hht_test_ti.i)
- (modules/solid_mechanics/test/tests/central_difference/consistent/2D/2d_consistent_implicit.i)
- (modules/contact/test/tests/explicit_dynamics/test_balance.i)
- (modules/fsi/test/tests/fsi_acoustics/1D_struc_acoustic/1D_struc_acoustic.i)
- (modules/solid_mechanics/test/tests/central_difference/consistent/3D/3d_consistent_explicit.i)
- (modules/solid_mechanics/test/tests/dynamics/time_integration/newmark.i)
- (modules/solid_mechanics/test/tests/dynamics/acceleration_bc/AccelerationBC_test_ti.i)
- (modules/solid_mechanics/test/tests/dynamics/time_integration/hht_test.i)
- (modules/contact/test/tests/mortar_aux_kernels/block-dynamics-aux-wear-vel.i)
- (modules/solid_mechanics/test/tests/capped_weak_plane/pull_and_shear.i)
- (modules/contact/test/tests/mortar_dynamics/block-dynamics.i)
- (modules/contact/test/tests/explicit_dynamics/first_test.i)
- (modules/solid_mechanics/test/tests/central_difference/lumped/1D/1d_lumped_explicit.i)
- (modules/contact/test/tests/mortar_dynamics/block-dynamics-reference.i)
- (modules/contact/test/tests/mortar_aux_kernels/block-dynamics-aux-fretting-wear-test.i)
- (modules/contact/test/tests/mortar_aux_kernels/block-dynamics-aux-wear.i)
- (modules/solid_mechanics/test/tests/dynamics/prescribed_displacement/3D_QStatic_1_Ramped_Displacement_ti.i)
- (modules/solid_mechanics/test/tests/dynamics/wave_1D/wave_rayleigh_hht.i)
- (modules/contact/test/tests/mortar_aux_kernels/block-dynamics-aux-fretting-wear-test-projection_angle.i)
- (modules/contact/test/tests/mortar_dynamics/block-dynamics-friction.i)
- (modules/solid_mechanics/test/tests/dynamics/wave_1D/wave_newmark.i)
- (modules/solid_mechanics/test/tests/dynamics/rayleigh_damping/rayleigh_hht_ti.i)
- (modules/solid_mechanics/test/tests/dynamics/rayleigh_damping/rayleigh_newmark_material_dependent.i)
- (modules/solid_mechanics/test/tests/central_difference/consistent/2D/2d_consistent_explicit.i)
- (modules/contact/test/tests/mortar_dynamics/block-dynamics-friction-action.i)
- (modules/solid_mechanics/test/tests/central_difference/consistent/3D/3d_consistent_implicit.i)
- (modules/solid_mechanics/test/tests/central_difference/lumped/2D/2d_lumped_explicit.i)
- (modules/contact/test/tests/explicit_dynamics/settlement.i)
- (modules/solid_mechanics/test/tests/dynamics/acceleration_bc/AccelerationBC_test.i)
- (modules/solid_mechanics/test/tests/capped_weak_plane/push_and_shear.i)
- (modules/contact/test/tests/mortar_aux_kernels/block-dynamics-aux-vel.i)
- (modules/contact/test/tests/mortar_dynamics/block-dynamics-action.i)
- (modules/solid_mechanics/test/tests/dynamics/prescribed_displacement/3D_QStatic_1_Ramped_Displacement.i)
- (modules/solid_mechanics/test/tests/dynamics/prescribed_displacement/3D_QStatic_1_Ramped_Displacement_with_gravity.i)
- (modules/solid_mechanics/test/tests/dynamics/wave_1D/wave_rayleigh_hht_ti.i)
(modules/solid_mechanics/test/tests/central_difference/lumped/3D/3d_lumped_explicit.i)
# Test for the central difference time integrator in 3D.
[Mesh]
[./generated_mesh]
type = GeneratedMeshGenerator
dim = 3
nx = 1
ny = 1
nz = 2
xmin = 0.0
xmax = 1
ymin = 0.0
ymax = 1
zmin = 0.0
zmax = 2
[../]
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[AuxVariables]
[./vel_x]
[../]
[./accel_x]
[../]
[./vel_y]
[../]
[./accel_y]
[../]
[./vel_z]
[../]
[./accel_z]
[../]
[]
[AuxKernels]
[./accel_x]
type = TestNewmarkTI
variable = accel_x
displacement = disp_x
first = false
[../]
[./vel_x]
type = TestNewmarkTI
variable = vel_x
displacement = disp_x
[../]
[./accel_y]
type = TestNewmarkTI
variable = accel_y
displacement = disp_y
first = false
[../]
[./vel_y]
type = TestNewmarkTI
variable = vel_y
displacement = disp_x
[../]
[./accel_z]
type = TestNewmarkTI
variable = accel_z
displacement = disp_z
first = false
[../]
[./vel_z]
type = TestNewmarkTI
variable = vel_z
displacement = disp_z
[../]
[]
[Kernels]
[./DynamicSolidMechanics]
displacements = 'disp_x disp_y disp_z'
[../]
[./inertia_x]
type = InertialForce
variable = disp_x
[../]
[./inertia_y]
type = InertialForce
variable = disp_y
[../]
[./inertia_z]
type = InertialForce
variable = disp_z
[../]
[]
[BCs]
[./x_bot]
type = FunctionDirichletBC
variable = disp_x
boundary = 'back'
function = dispx
preset = false
[../]
[./y_bot]
type = FunctionDirichletBC
variable = disp_y
boundary = 'back'
function = dispy
preset = false
[../]
[./z_bot]
type = FunctionDirichletBC
variable = disp_z
boundary = 'back'
function = dispz
preset = false
[../]
[]
[Functions]
[./dispx]
type = PiecewiseLinear
x = '0.0 1.0 2.0 3.0 4.0' # time
y = '0.0 1.0 0.0 -1.0 0.0' # displacement
[../]
[./dispy]
type = ParsedFunction
expression = 0.1*t*t*sin(10*t)
[../]
[./dispz]
type = ParsedFunction
expression = 0.1*t*t*sin(20*t)
[../]
[]
[Materials]
[./elasticity_tensor_block]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1e6
poissons_ratio = 0.25
block = 0
[../]
[./strain_block]
type = ComputeIncrementalSmallStrain
block = 0
displacements = 'disp_x disp_y disp_z'
implicit = false
[../]
[./stress_block]
type = ComputeFiniteStrainElasticStress
block = 0
[../]
[./density]
type = GenericConstantMaterial
block = 0
prop_names = density
prop_values = 1e4
[../]
[wave_speed]
type = WaveSpeed
[]
[]
[Executioner]
type = Transient
start_time = -0.01
end_time = 0.1
dt = 0.005
timestep_tolerance = 1e-6
[./TimeIntegrator]
type = CentralDifference
solve_type = lumped
[../]
[]
[Postprocessors]
[./accel_10x]
type = NodalVariableValue
nodeid = 10
variable = accel_x
[../]
[]
[Outputs]
exodus = false
csv = true
[]
(modules/solid_mechanics/test/tests/central_difference/consistent/1D/1d_consistent_explicit.i)
# Test for central difference integration for a 1D element
# Consistent mass matrix
[Mesh]
type = GeneratedMesh
xmin = 0
xmax = 10
nx = 5
dim = 1
[]
[Variables]
[./disp_x]
order = FIRST
family = LAGRANGE
[../]
[]
[AuxVariables]
[./accel_x]
[../]
[./vel_x]
[../]
[]
[AuxKernels]
[./accel_x]
type = TestNewmarkTI
variable = accel_x
displacement = disp_x
first = false
[../]
[./vel_x]
type = TestNewmarkTI
variable = vel_x
displacement = disp_x
[../]
[]
[Kernels]
[./DynamicSolidMechanics]
displacements = 'disp_x'
[../]
[./inertia_x]
type = InertialForce
variable = disp_x
[../]
[]
[NodalKernels]
[./force_x]
type = UserForcingFunctionNodalKernel
variable = disp_x
boundary = right
function = force_x
[../]
[]
[Functions]
[./force_x]
type = PiecewiseLinear
x = '0.0 1.0 2.0 3.0 4.0' # time
y = '0.0 1.0 0.0 -1.0 0.0' # force
scale_factor = 1e3
[../]
[]
[BCs]
[./fixx1]
type = DirichletBC
variable = disp_x
boundary = left
value = 0.0
[../]
[]
[Materials]
[./elasticity_tensor_block]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1e6
poissons_ratio = 0.25
block = 0
[../]
[./strain_block]
type = ComputeIncrementalSmallStrain
block = 0
displacements = 'disp_x'
implicit = false
[../]
[./stress_block]
type = ComputeFiniteStrainElasticStress
block = 0
[../]
[./density]
type = GenericConstantMaterial
block = 0
prop_names = density
prop_values = 2500
[../]
[]
[Executioner]
type = Transient
start_time = -0.005
end_time = 0.1
dt = 0.005
timestep_tolerance = 1e-6
l_tol = 1e-10
[./TimeIntegrator]
type = CentralDifference
[../]
[]
[Postprocessors]
[./disp_x]
type = NodalVariableValue
nodeid = 1
variable = disp_x
[../]
[./vel_x]
type = NodalVariableValue
nodeid = 1
variable = vel_x
[../]
[./accel_x]
type = NodalVariableValue
nodeid = 1
variable = accel_x
[../]
[]
[Outputs]
exodus = false
csv = true
perf_graph = false
[]
(modules/solid_mechanics/test/tests/dynamics/wave_1D/wave_rayleigh_newmark.i)
# Wave propogation in 1D using Newmark time integration in the presence of Rayleigh damping
#
# The test is for an 1D bar element of length 4m fixed on one end
# with a sinusoidal pulse dirichlet boundary condition applied to the other end.
# beta and gamma are Newmark time integration parameters
# eta and zeta are mass dependent and stiffness dependent Rayleigh damping
# coefficients, respectively.
# The equation of motion in terms of matrices is:
#
# M*accel + (eta*M+zeta*K)*vel +K*disp = 0
#
# Here M is the mass matrix, K is the stiffness matrix
#
# The displacement at the second, third and fourth node at t = 0.1 are
# -7.776268399030435152e-02, 1.949967184623528985e-02 and -4.615737877580032046e-03, respectively
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 4
nz = 1
xmin = 0.0
xmax = 0.1
ymin = 0.0
ymax = 4.0
zmin = 0.0
zmax = 0.1
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[AuxVariables]
[./vel_x]
[../]
[./accel_x]
[../]
[./vel_y]
[../]
[./accel_y]
[../]
[./vel_z]
[../]
[./accel_z]
[../]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_yy]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Kernels]
[./DynamicSolidMechanics]
displacements = 'disp_x disp_y disp_z'
stiffness_damping_coefficient = 0.1
[../]
[./inertia_x]
type = InertialForce
variable = disp_x
velocity = vel_x
acceleration = accel_x
beta = 0.3025
gamma = 0.6
eta=0.1
[../]
[./inertia_y]
type = InertialForce
variable = disp_y
velocity = vel_y
acceleration = accel_y
beta = 0.3025
gamma = 0.6
eta=0.1
[../]
[./inertia_z]
type = InertialForce
variable = disp_z
velocity = vel_z
acceleration = accel_z
beta = 0.3025
gamma = 0.6
eta = 0.1
[../]
[]
[AuxKernels]
[./accel_x]
type = NewmarkAccelAux
variable = accel_x
displacement = disp_x
velocity = vel_x
beta = 0.3025
execute_on = timestep_end
[../]
[./vel_x]
type = NewmarkVelAux
variable = vel_x
acceleration = accel_x
gamma = 0.6
execute_on = timestep_end
[../]
[./accel_y]
type = NewmarkAccelAux
variable = accel_y
displacement = disp_y
velocity = vel_y
beta = 0.3025
execute_on = timestep_end
[../]
[./vel_y]
type = NewmarkVelAux
variable = vel_y
acceleration = accel_y
gamma = 0.6
execute_on = timestep_end
[../]
[./accel_z]
type = NewmarkAccelAux
variable = accel_z
displacement = disp_z
velocity = vel_z
beta = 0.3025
execute_on = timestep_end
[../]
[./vel_z]
type = NewmarkVelAux
variable = vel_z
acceleration = accel_z
gamma = 0.6
execute_on = timestep_end
[../]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 0
index_j = 1
[../]
[./strain_yy]
type = RankTwoAux
rank_two_tensor = total_strain
variable = strain_yy
index_i = 0
index_j = 1
[../]
[]
[BCs]
[./top_y]
type = DirichletBC
variable = disp_y
boundary = top
value=0.0
[../]
[./top_x]
type = DirichletBC
variable = disp_x
boundary = top
value=0.0
[../]
[./top_z]
type = DirichletBC
variable = disp_z
boundary = top
value=0.0
[../]
[./right_x]
type = DirichletBC
variable = disp_x
boundary = right
value=0.0
[../]
[./right_z]
type = DirichletBC
variable = disp_z
boundary = right
value=0.0
[../]
[./left_x]
type = DirichletBC
variable = disp_x
boundary = left
value=0.0
[../]
[./left_z]
type = DirichletBC
variable = disp_z
boundary = left
value=0.0
[../]
[./front_x]
type = DirichletBC
variable = disp_x
boundary = front
value=0.0
[../]
[./front_z]
type = DirichletBC
variable = disp_z
boundary = front
value=0.0
[../]
[./back_x]
type = DirichletBC
variable = disp_x
boundary = back
value=0.0
[../]
[./back_z]
type = DirichletBC
variable = disp_z
boundary = back
value=0.0
[../]
[./bottom_x]
type = DirichletBC
variable = disp_x
boundary = bottom
value=0.0
[../]
[./bottom_z]
type = DirichletBC
variable = disp_z
boundary = bottom
value=0.0
[../]
[./bottom_y]
type = FunctionDirichletBC
variable = disp_y
boundary = bottom
function = displacement_bc
[../]
[]
[Materials]
[./Elasticity_tensor]
type = ComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
C_ijkl = '1 0'
[../]
[./strain]
type = ComputeSmallStrain
block = 0
displacements = 'disp_x disp_y disp_z'
[../]
[./stress]
type = ComputeLinearElasticStress
block = 0
[../]
[./density]
type = GenericConstantMaterial
block = 0
prop_names = 'density'
prop_values = '1'
[../]
[]
[Executioner]
type = Transient
start_time = 0
end_time = 6.0
l_tol = 1e-12
nl_rel_tol = 1e-12
dt = 0.1
[]
[Functions]
[./displacement_bc]
type = PiecewiseLinear
data_file = 'sine_wave.csv'
format = columns
[../]
[]
[Postprocessors]
[./_dt]
type = TimestepSize
[../]
[./disp_1]
type = NodalVariableValue
nodeid = 1
variable = disp_y
[../]
[./disp_2]
type = NodalVariableValue
nodeid = 3
variable = disp_y
[../]
[./disp_3]
type = NodalVariableValue
nodeid = 10
variable = disp_y
[../]
[./disp_4]
type = NodalVariableValue
nodeid = 14
variable = disp_y
[../]
[]
[Outputs]
exodus = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/central_difference/consistent/3D/3d_consistent_explicit_mass_scaling.i)
# One element test to test the central difference time integrator in 3D.
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 2
xmin = 0.0
xmax = 1
ymin = 0.0
ymax = 1
zmin = 0.0
zmax = 2
[]
[Variables]
[disp_x]
[]
[disp_y]
[]
[disp_z]
[]
[]
[AuxVariables]
[vel_x]
[]
[accel_x]
[]
[vel_y]
[]
[accel_y]
[]
[vel_z]
[]
[accel_z]
[]
[]
[AuxKernels]
[accel_x]
type = TestNewmarkTI
variable = accel_x
displacement = disp_x
first = false
[]
[vel_x]
type = TestNewmarkTI
variable = vel_x
displacement = disp_x
[]
[accel_y]
type = TestNewmarkTI
variable = accel_y
displacement = disp_y
first = false
[]
[vel_y]
type = TestNewmarkTI
variable = vel_y
displacement = disp_x
[]
[accel_z]
type = TestNewmarkTI
variable = accel_z
displacement = disp_z
first = false
[]
[vel_z]
type = TestNewmarkTI
variable = vel_z
displacement = disp_z
[]
[]
[Kernels]
[DynamicSolidMechanics]
displacements = 'disp_x disp_y disp_z'
[]
[inertia_x]
type = InertialForce
variable = disp_x
[]
[inertia_y]
type = InertialForce
variable = disp_y
[]
[inertia_z]
type = InertialForce
variable = disp_z
[]
[]
[BCs]
[x_bot]
type = FunctionDirichletBC
variable = disp_x
boundary = 'back'
function = dispx
preset = false
[]
[y_bot]
type = FunctionDirichletBC
variable = disp_y
boundary = 'back'
function = dispy
preset = false
[]
[z_bot]
type = FunctionDirichletBC
variable = disp_z
boundary = 'back'
function = dispz
preset = false
[]
[Periodic]
[x_dir]
variable = 'disp_x disp_y disp_z'
primary = 'left'
secondary = 'right'
translation = '1.0 0.0 0.0'
[]
[y_dir]
variable = 'disp_x disp_y disp_z'
primary = 'bottom'
secondary = 'top'
translation = '0.0 1.0 0.0'
[]
[]
[]
[Functions]
[dispx]
type = PiecewiseLinear
x = '0.0 1.0 2.0 3.0 4.0' # time
y = '0.0 1.0 0.0 -1.0 0.0' # displacement
[]
[dispy]
type = ParsedFunction
value = 0.1*t*t*sin(10*t)
[]
[dispz]
type = ParsedFunction
value = 0.1*t*t*sin(20*t)
[]
[]
[Materials]
[elasticity_tensor_block]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1e6
poissons_ratio = 0.25
block = 0
[]
[strain_block]
type = ComputeIncrementalSmallStrain
block = 0
displacements = 'disp_x disp_y disp_z'
implicit = false
[]
[stress_block]
type = ComputeFiniteStrainElasticStress
block = 0
[]
[density]
type = GenericConstantMaterial
block = 0
prop_names = density
prop_values = 1e4
[]
[density_scaling]
type = DensityScaling
block = 0
density = density
desired_time_step = 0.06
output_properties = density_scaling
outputs = 'exodus'
factor = 0.5
[]
[]
[Executioner]
type = Transient
start_time = -0.01
end_time = 0.1
dt = 0.005
timestep_tolerance = 1e-6
[TimeIntegrator]
type = CentralDifference
use_constant_mass = false
solve_type = lumped
[]
[TimeStepper]
type = PostprocessorDT
postprocessor = time_step
[]
[]
[Postprocessors]
[accel_6x]
type = NodalVariableValue
nodeid = 6
variable = accel_x
[]
[time_step]
type = CriticalTimeStep
factor = 0.5
density = density
density_scaling = density_scaling
execute_on = 'INITIAL TIMESTEP_END'
[]
[]
[Outputs]
exodus = true
csv = true
[]
(modules/solid_mechanics/test/tests/dynamics/rayleigh_damping/rayleigh_newmark.i)
# Test for rayleigh damping implemented using Newmark time integration
# The test is for an 1D bar element of unit length fixed on one end
# with a ramped pressure boundary condition applied to the other end.
# zeta and eta correspond to the stiffness and mass proportional rayleigh damping
# beta and gamma are Newmark time integration parameters
# The equation of motion in terms of matrices is:
#
# M*accel + eta*M*vel + zeta*K*vel + K*disp = P*Area
#
# Here M is the mass matrix, K is the stiffness matrix, P is the applied pressure
#
# This equation is equivalent to:
#
# density*accel + eta*density*vel + zeta*d/dt(Div stress) + Div stress = P
#
# The first two terms on the left are evaluated using the Inertial force kernel
# The next two terms on the left involving zeta are evaluated using the
# DynamicStressDivergenceTensors Kernel
# The residual due to Pressure is evaluated using Pressure boundary condition
#
# The system will come to steady state slowly after the pressure becomes constant.
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = 0.0
xmax = 0.1
ymin = 0.0
ymax = 1.0
zmin = 0.0
zmax = 0.1
[]
[Variables]
[disp_x]
[]
[disp_y]
[]
[disp_z]
[]
[]
[AuxVariables]
[vel_x]
[]
[accel_x]
[]
[vel_y]
[]
[accel_y]
[]
[vel_z]
[]
[accel_z]
[]
[stress_yy]
order = CONSTANT
family = MONOMIAL
[]
[strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[]
[Kernels]
[DynamicSolidMechanics]
displacements = 'disp_x disp_y disp_z'
stiffness_damping_coefficient = 0.1
[]
[inertia_x]
type = InertialForce
variable = disp_x
velocity = vel_x
acceleration = accel_x
beta = 0.25
gamma = 0.5
eta = 0.1
[]
[inertia_y]
type = InertialForce
variable = disp_y
velocity = vel_y
acceleration = accel_y
beta = 0.25
gamma = 0.5
eta = 0.1
[]
[inertia_z]
type = InertialForce
variable = disp_z
velocity = vel_z
acceleration = accel_z
beta = 0.25
gamma = 0.5
eta = 0.1
[]
[]
[AuxKernels]
[accel_x]
type = NewmarkAccelAux
variable = accel_x
displacement = disp_x
velocity = vel_x
beta = 0.25
execute_on = timestep_end
[]
[vel_x]
type = NewmarkVelAux
variable = vel_x
acceleration = accel_x
gamma = 0.5
execute_on = timestep_end
[]
[accel_y]
type = NewmarkAccelAux
variable = accel_y
displacement = disp_y
velocity = vel_y
beta = 0.25
execute_on = timestep_end
[]
[vel_y]
type = NewmarkVelAux
variable = vel_y
acceleration = accel_y
gamma = 0.5
execute_on = timestep_end
[]
[accel_z]
type = NewmarkAccelAux
variable = accel_z
displacement = disp_z
velocity = vel_z
beta = 0.25
execute_on = timestep_end
[]
[vel_z]
type = NewmarkVelAux
variable = vel_z
acceleration = accel_z
gamma = 0.5
execute_on = timestep_end
[]
[stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[]
[strain_yy]
type = RankTwoAux
rank_two_tensor = total_strain
variable = strain_yy
index_i = 1
index_j = 1
[]
[]
[BCs]
[top_y]
type = DirichletBC
variable = disp_y
boundary = top
value = 0.0
[]
[top_x]
type = DirichletBC
variable = disp_x
boundary = top
value = 0.0
[]
[top_z]
type = DirichletBC
variable = disp_z
boundary = top
value = 0.0
[]
[bottom_x]
type = DirichletBC
variable = disp_x
boundary = bottom
value = 0.0
[]
[bottom_z]
type = DirichletBC
variable = disp_z
boundary = bottom
value = 0.0
[]
[Pressure]
[Side1]
boundary = bottom
function = pressure
factor = 1
displacements = 'disp_x disp_y disp_z'
[]
[]
[]
[Materials]
[Elasticity_tensor]
type = ComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
C_ijkl = '210e9 0'
[]
[strain]
type = ComputeSmallStrain
block = 0
displacements = 'disp_x disp_y disp_z'
[]
[stress]
type = ComputeLinearElasticStress
block = 0
[]
[density]
type = GenericConstantMaterial
block = 0
prop_names = 'density'
prop_values = '7750'
[]
[]
[Executioner]
type = Transient
start_time = 0
end_time = 2
dt = 0.1
[]
[Functions]
[pressure]
type = PiecewiseLinear
x = '0.0 0.1 0.2 1.0 2.0 5.0'
y = '0.0 0.1 0.2 1.0 1.0 1.0'
scale_factor = 1e9
[]
[]
[Postprocessors]
[_dt]
type = TimestepSize
[]
[disp]
type = NodalExtremeValue
variable = disp_y
boundary = bottom
[]
[vel]
type = NodalExtremeValue
variable = vel_y
boundary = bottom
[]
[accel]
type = NodalExtremeValue
variable = accel_y
boundary = bottom
[]
[stress_yy]
type = ElementAverageValue
variable = stress_yy
[]
[strain_yy]
type = ElementAverageValue
variable = strain_yy
[]
[]
[Outputs]
exodus = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/dynamics/wave_1D/wave_rayleigh_hht_AD.i)
# Wave propogation in 1D using HHT time integration in the presence of Rayleigh damping
#
# The test is for an 1D bar element of length 4m fixed on one end
# with a sinusoidal pulse dirichlet boundary condition applied to the other end.
# alpha, beta and gamma are HHT time integration parameters
# eta and zeta are mass dependent and stiffness dependent Rayleigh damping
# coefficients, respectively.
# The equation of motion in terms of matrices is:
#
# M*accel + (eta*M+zeta*K)*((1+alpha)*vel-alpha*vel_old)
# +(1+alpha)*K*disp-alpha*K*disp_old = 0
#
# Here M is the mass matrix, K is the stiffness matrix
#
# The displacement at the first, second, third and fourth node at t = 0.1 are
# -7.787499960311491942e-02, 1.955566679096475483e-02 and -4.634888180231294501e-03, respectively.
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 4
nz = 1
xmin = 0.0
xmax = 0.1
ymin = 0.0
ymax = 4.0
zmin = 0.0
zmax = 0.1
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[AuxVariables]
[./vel_x]
[../]
[./accel_x]
[../]
[./vel_y]
[../]
[./accel_y]
[../]
[./vel_z]
[../]
[./accel_z]
[../]
[]
[Kernels]
[./DynamicSolidMechanics]
displacements = 'disp_x disp_y disp_z'
hht_alpha = -0.3
stiffness_damping_coefficient = 0.1
use_automatic_differentiation = true
[../]
[./inertia_x]
type = InertialForce
variable = disp_x
velocity = vel_x
acceleration = accel_x
beta = 0.422
gamma = 0.8
eta=0.1
alpha = -0.3
[../]
[./inertia_y]
type = InertialForce
variable = disp_y
velocity = vel_y
acceleration = accel_y
beta = 0.422
gamma = 0.8
eta=0.1
alpha = -0.3
[../]
[./inertia_z]
type = InertialForce
variable = disp_z
velocity = vel_z
acceleration = accel_z
beta = 0.422
gamma = 0.8
eta = 0.1
alpha = -0.3
[../]
[]
[AuxKernels]
[./accel_x]
type = NewmarkAccelAux
variable = accel_x
displacement = disp_x
velocity = vel_x
beta = 0.422
execute_on = timestep_end
[../]
[./vel_x]
type = NewmarkVelAux
variable = vel_x
acceleration = accel_x
gamma = 0.8
execute_on = timestep_end
[../]
[./accel_y]
type = NewmarkAccelAux
variable = accel_y
displacement = disp_y
velocity = vel_y
beta = 0.422
execute_on = timestep_end
[../]
[./vel_y]
type = NewmarkVelAux
variable = vel_y
acceleration = accel_y
gamma = 0.8
execute_on = timestep_end
[../]
[./accel_z]
type = NewmarkAccelAux
variable = accel_z
displacement = disp_z
velocity = vel_z
beta = 0.422
execute_on = timestep_end
[../]
[./vel_z]
type = NewmarkVelAux
variable = vel_z
acceleration = accel_z
gamma = 0.8
execute_on = timestep_end
[../]
[]
[BCs]
[./top_y]
type = DirichletBC
variable = disp_y
boundary = top
value=0.0
[../]
[./top_x]
type = DirichletBC
variable = disp_x
boundary = top
value=0.0
[../]
[./top_z]
type = DirichletBC
variable = disp_z
boundary = top
value=0.0
[../]
[./right_x]
type = DirichletBC
variable = disp_x
boundary = right
value=0.0
[../]
[./right_z]
type = DirichletBC
variable = disp_z
boundary = right
value=0.0
[../]
[./left_x]
type = DirichletBC
variable = disp_x
boundary = left
value=0.0
[../]
[./left_z]
type = DirichletBC
variable = disp_z
boundary = left
value=0.0
[../]
[./front_x]
type = DirichletBC
variable = disp_x
boundary = front
value=0.0
[../]
[./front_z]
type = DirichletBC
variable = disp_z
boundary = front
value=0.0
[../]
[./back_x]
type = DirichletBC
variable = disp_x
boundary = back
value=0.0
[../]
[./back_z]
type = DirichletBC
variable = disp_z
boundary = back
value=0.0
[../]
[./bottom_x]
type = DirichletBC
variable = disp_x
boundary = bottom
value=0.0
[../]
[./bottom_z]
type = DirichletBC
variable = disp_z
boundary = bottom
value=0.0
[../]
[./bottom_y]
type = FunctionDirichletBC
variable = disp_y
boundary = bottom
function = displacement_bc
[../]
[]
[Materials]
[./Elasticity_tensor]
type = ADComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
C_ijkl = '1 0'
[../]
[./strain]
type = ADComputeSmallStrain
block = 0
displacements = 'disp_x disp_y disp_z'
[../]
[./stress]
type = ADComputeLinearElasticStress
block = 0
[../]
[./density]
type = GenericConstantMaterial
block = 0
prop_names = 'density'
prop_values = '1'
[../]
[]
[Preconditioning]
[./SMP]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = 'NEWTON'
start_time = 0
end_time = 6.0
l_tol = 1e-12
nl_rel_tol = 1e-12
dt = 0.1
[]
[Functions]
[./displacement_bc]
type = PiecewiseLinear
data_file = 'sine_wave.csv'
format = columns
[../]
[]
[Postprocessors]
[./_dt]
type = TimestepSize
[../]
[./disp_1]
type = NodalVariableValue
nodeid = 1
variable = disp_y
[../]
[./disp_2]
type = NodalVariableValue
nodeid = 3
variable = disp_y
[../]
[./disp_3]
type = NodalVariableValue
nodeid = 10
variable = disp_y
[../]
[./disp_4]
type = NodalVariableValue
nodeid = 14
variable = disp_y
[../]
[]
[Outputs]
file_base = 'wave_rayleigh_hht_out'
exodus = true
perf_graph = true
[]
(modules/fsi/test/tests/fsi_acoustics/3D_struc_acoustic/3D_struc_acoustic.i)
# Test for `StructureAcousticInterface` interface kernel. The domain is 3D with lengths
# 10 X 0.1 X 0.1 meters. The fluid domain is on the right and the structural domain
# is on the left. Fluid end is subjected to a 250Hz sine wave with a single peak.
# Structural domain has the same material properties as the fluid. Interface between
# structure and fluid is located at 5.0m in the x-direction. Fluid pressure is recorded
# at (5, 0.05, 0.05). Structural stress is also recorded at the same location. Fluid
# pressure and structural stress should be almost equal and opposite to each other.
#
# Input parameters:
# Dimensions = 3
# Lengths = 10 X 0.1 X 0.1 meters
# Fluid speed of sound = 1500 m/s
# Fluid density = 1e-6 Giga kg/m^3
# Structural bulk modulus = 2.25 GPa
# Structural shear modulus = 0 GPa
# Structural density = 1e-6 Giga kg/m^3
# Fluid domain = true
# Fluid BC = single peak sine wave applied as a pressure on the fluid end
# Structural domain = true
# Structural BC = Neumann BC with value zero applied on the structural end.
# Fluid-structure interface location = 5.0m along the x-direction
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 100
ny = 1
nz = 1
xmax = 10
ymax = 0.1
zmax = 0.1
[]
[./subdomain1]
input = gen
type = SubdomainBoundingBoxGenerator
bottom_left = '5.0 0.0 0.0'
block_id = 1
top_right = '10.0 0.1 0.1'
[../]
[./interface1]
type = SideSetsBetweenSubdomainsGenerator
input = subdomain1
primary_block = 1
paired_block = 0
new_boundary = 'interface1'
[../]
[]
[GlobalParams]
[]
[Variables]
[./p]
block = 1
[../]
[./disp_x]
block = 0
[../]
[./disp_y]
block = 0
[../]
[./disp_z]
block = 0
[../]
[]
[AuxVariables]
[./vel_x]
order = FIRST
family = LAGRANGE
block = 0
[../]
[./accel_x]
order = FIRST
family = LAGRANGE
block = 0
[../]
[./vel_y]
order = FIRST
family = LAGRANGE
block = 0
[../]
[./accel_y]
order = FIRST
family = LAGRANGE
block = 0
[../]
[./vel_z]
order = FIRST
family = LAGRANGE
block = 0
[../]
[./accel_z]
order = FIRST
family = LAGRANGE
block = 0
[../]
[./stress_xx]
order = CONSTANT
family = MONOMIAL
block = 0
[../]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
block = 0
[../]
[./stress_zz]
order = CONSTANT
family = MONOMIAL
block = 0
[../]
[./stress_xy]
order = CONSTANT
family = MONOMIAL
block = 0
[../]
[./stress_xz]
order = CONSTANT
family = MONOMIAL
block = 0
[../]
[./stress_yz]
order = CONSTANT
family = MONOMIAL
block = 0
[../]
[]
[Kernels]
[./diffusion]
type = Diffusion
variable = 'p'
block = 1
[../]
[./inertia]
type = AcousticInertia
variable = p
block = 1
[../]
[./DynamicTensorMechanics]
displacements = 'disp_x disp_y disp_z'
block = 0
[../]
[./inertia_x]
type = InertialForce
variable = disp_x
block = 0
[../]
[./inertia_y]
type = InertialForce
variable = disp_y
block = 0
[../]
[./inertia_z]
type = InertialForce
variable = disp_z
block = 0
[../]
[]
[AuxKernels]
[./accel_x]
type = TestNewmarkTI
displacement = disp_x
variable = accel_x
first = false
block = 0
[../]
[./vel_x]
type = TestNewmarkTI
displacement = disp_x
variable = vel_x
block = 0
[../]
[./accel_y]
type = TestNewmarkTI
displacement = disp_y
variable = accel_y
first = false
block = 0
[../]
[./vel_y]
type = TestNewmarkTI
displacement = disp_y
variable = vel_y
block = 0
[../]
[./accel_z]
type = TestNewmarkTI
displacement = disp_z
variable = accel_z
first = false
block = 0
[../]
[./vel_z]
type = TestNewmarkTI
displacement = disp_z
variable = vel_z
block = 0
[../]
[./stress_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
block = 0
[../]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
block = 0
[../]
[./stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
block = 0
[../]
[./stress_xy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xy
index_i = 0
index_j = 1
block = 0
[../]
[./stress_xz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xz
index_i = 0
index_j = 2
block = 0
[../]
[./stress_yz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yz
index_i = 1
index_j = 2
block = 0
[../]
[]
[InterfaceKernels]
[./interface1]
type = StructureAcousticInterface
variable = p
neighbor_var = disp_x
boundary = 'interface1'
D = 1e-6
component = 0
[../]
[./interface2]
type = StructureAcousticInterface
variable = p
neighbor_var = disp_y
boundary = 'interface1'
D = 1e-6
component = 1
[../]
[./interface3]
type = StructureAcousticInterface
variable = p
neighbor_var = disp_z
boundary = 'interface1'
D = 1e-6
component = 2
[../]
[]
[BCs]
[./bottom_accel]
type = FunctionDirichletBC
variable = p
boundary = 'right'
function = accel_bottom
[../]
[./disp_x1]
type = NeumannBC
boundary = 'left'
variable = disp_x
value = 0.0
[../]
[./disp_y1]
type = NeumannBC
boundary = 'left'
variable = disp_y
value = 0.0
[../]
[./disp_z1]
type = NeumannBC
boundary = 'left'
variable = disp_z
value = 0.0
[../]
[]
[Functions]
[./accel_bottom]
type = PiecewiseLinear
data_file = ../1D_struc_acoustic/Input_1Peak_highF.csv
scale_factor = 1e-2
format = 'columns'
[../]
[]
[Materials]
[./co_sq]
type = GenericConstantMaterial
prop_names = inv_co_sq
prop_values = 4.44e-7
block = '1'
[../]
[./density0]
type = GenericConstantMaterial
block = 0
prop_names = density
prop_values = 1e-6
[../]
[./elasticity_base]
type = ComputeIsotropicElasticityTensor
bulk_modulus = 2.25
shear_modulus = 0.0
block = 0
[../]
[./strain]
type = ComputeFiniteStrain
block = 0
displacements = 'disp_x disp_y disp_z'
[../]
[./stress]
type = ComputeFiniteStrainElasticStress
block = 0
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
start_time = 0.0
end_time = 0.005
dt = 0.0001
dtmin = 0.00001
nl_abs_tol = 1e-8
nl_rel_tol = 1e-8
l_tol = 1e-8
l_max_its = 25
timestep_tolerance = 1e-8
automatic_scaling = true
[TimeIntegrator]
type = NewmarkBeta
[]
[]
[Postprocessors]
[./p1]
type = PointValue
point = '5.0 0.05 0.05'
variable = p
[../]
[./stress_xx]
type = PointValue
point = '5.0 0.05 0.05'
variable = stress_xx
[../]
[]
[Outputs]
csv = true
perf_graph = true
print_linear_residuals = true
[]
(modules/solid_mechanics/test/tests/central_difference/consistent/1D/1d_consistent_implicit.i)
# Test for Newmark Beta integration for a 1D element
# Consistent mass matrix
[Mesh]
type = GeneratedMesh
xmin = 0
xmax = 10
nx = 5
dim = 1
[]
[Variables]
[./disp_x]
order = FIRST
family = LAGRANGE
[../]
[]
[AuxVariables]
[./accel_x]
[../]
[./vel_x]
[../]
[]
[AuxKernels]
[./accel_x]
type = TestNewmarkTI
variable = accel_x
displacement = disp_x
first = false
[../]
[./vel_x]
type = TestNewmarkTI
variable = vel_x
displacement = disp_x
[../]
[]
[Kernels]
[./DynamicSolidMechanics]
displacements = 'disp_x'
[../]
[./inertia_x]
type = InertialForce
variable = disp_x
[../]
[]
[NodalKernels]
[./force_x]
type = UserForcingFunctionNodalKernel
variable = disp_x
boundary = right
function = force_x
[../]
[]
[Functions]
[./force_x]
type = PiecewiseLinear
x = '0.0 1.0 2.0 3.0 4.0' # time
y = '0.0 1.0 0.0 -1.0 0.0' # force
scale_factor = 1e3
[../]
[]
[BCs]
[./fixx1]
type = DirichletBC
variable = disp_x
boundary = left
value = 0.0
[../]
[]
[Materials]
[./elasticity_tensor_block]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1e6
poissons_ratio = 0.25
block = 0
[../]
[./strain_block]
type = ComputeIncrementalSmallStrain
block = 0
displacements = 'disp_x'
[../]
[./stress_block]
type = ComputeFiniteStrainElasticStress
block = 0
[../]
[./density]
type = GenericConstantMaterial
block = 0
prop_names = density
prop_values = 2500
[../]
[]
[Executioner]
type = Transient
solve_type = NEWTON
nl_rel_tol = 1e-8
nl_abs_tol = 1e-8
dtmin = 1e-4
timestep_tolerance = 1e-6
start_time = -0.005
end_time = 0.1
dt = 0.005
[./TimeIntegrator]
type = NewmarkBeta
beta = 0.25
gamma = 0.5
[../]
[]
[Postprocessors]
[./disp_x]
type = NodalVariableValue
nodeid = 1
variable = disp_x
[../]
[./vel_x]
type = NodalVariableValue
nodeid = 1
variable = vel_x
[../]
[./accel_x]
type = NodalVariableValue
nodeid = 1
variable = accel_x
[../]
[]
[Outputs]
exodus = false
csv = true
perf_graph = false
[]
(modules/solid_mechanics/test/tests/dynamics/time_integration/hht_test_ti.i)
# Test for HHT time integration
# The test is for an 1D bar element of unit length fixed on one end
# with a ramped pressure boundary condition applied to the other end.
# alpha, beta and gamma are HHT time integration parameters
# The equation of motion in terms of matrices is:
#
# M*accel + alpha*(K*disp - K*disp_old) + K*disp = P(t+alpha dt)*Area
#
# Here M is the mass matrix, K is the stiffness matrix, P is the applied pressure
#
# This equation is equivalent to:
#
# density*accel + alpha*(Div stress - Div stress_old) +Div Stress= P(t+alpha dt)
#
# The first term on the left is evaluated using the Inertial force kernel
# The next two terms on the left involving alpha are evaluated using the
# DynamicStressDivergenceTensors Kernel
# The residual due to Pressure is evaluated using Pressure boundary condition
#
# The system will come to steady state slowly after the pressure becomes constant.
# Alpha equal to zero will result in Newmark integration.
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = 0.0
xmax = 0.1
ymin = 0.0
ymax = 1.0
zmin = 0.0
zmax = 0.1
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[AuxVariables]
[./vel_x]
[../]
[./accel_x]
[../]
[./vel_y]
[../]
[./accel_y]
[../]
[./vel_z]
[../]
[./accel_z]
[../]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_yy]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Kernels]
[./DynamicSolidMechanics]
displacements = 'disp_x disp_y disp_z'
hht_alpha = 0.11
[../]
[./inertia_x]
type = InertialForce
variable = disp_x
[../]
[./inertia_y]
type = InertialForce
variable = disp_y
[../]
[./inertia_z]
type = InertialForce
variable = disp_z
[../]
[]
[AuxKernels]
[./accel_x] # These auxkernls are only for checking output
type = TestNewmarkTI
displacement = disp_x
variable = accel_x
first = false
[../]
[./accel_y]
type = TestNewmarkTI
displacement = disp_y
variable = accel_y
first = false
[../]
[./accel_z]
type = TestNewmarkTI
displacement = disp_z
variable = accel_z
first = false
[../]
[./vel_x]
type = TestNewmarkTI
displacement = disp_x
variable = vel_x
[../]
[./vel_y]
type = TestNewmarkTI
displacement = disp_y
variable = vel_y
[../]
[./vel_z]
type = TestNewmarkTI
displacement = disp_z
variable = vel_z
[../]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 0
index_j = 1
[../]
[./strain_yy]
type = RankTwoAux
rank_two_tensor = total_strain
variable = strain_yy
index_i = 0
index_j = 1
[../]
[]
[BCs]
[./top_y]
type = DirichletBC
variable = disp_y
boundary = top
value=0.0
[../]
[./top_x]
type = DirichletBC
variable = disp_x
boundary = top
value=0.0
[../]
[./top_z]
type = DirichletBC
variable = disp_z
boundary = top
value=0.0
[../]
[./bottom_x]
type = DirichletBC
variable = disp_x
boundary = bottom
value=0.0
[../]
[./bottom_z]
type = DirichletBC
variable = disp_z
boundary = bottom
value=0.0
[../]
[./Pressure]
[./Side1]
boundary = bottom
function = pressure
displacements = 'disp_x disp_y disp_z'
factor = 1
alpha = 0.11
[../]
[../]
[]
[Materials]
[./Elasticity_tensor]
type = ComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
C_ijkl = '210e9 0'
[../]
[./strain]
type = ComputeSmallStrain
block = 0
displacements = 'disp_x disp_y disp_z'
[../]
[./stress]
type = ComputeLinearElasticStress
block = 0
[../]
[./density]
type = GenericConstantMaterial
block = 0
prop_names = 'density'
prop_values = '7750'
[../]
[]
[Executioner]
type = Transient
start_time = 0
end_time = 2
dt = 0.1
# Time integration scheme
scheme = 'newmark-beta'
[]
[Functions]
[./pressure]
type = PiecewiseLinear
x = '0.0 0.1 0.2 1.0 2.0 5.0'
y = '0.0 0.1 0.2 1.0 1.0 1.0'
scale_factor = 1e9
[../]
[]
[Postprocessors]
[./_dt]
type = TimestepSize
[../]
[./disp]
type = NodalExtremeValue
variable = disp_y
boundary = bottom
[../]
[./vel]
type = NodalExtremeValue
variable = vel_y
boundary = bottom
[../]
[./accel]
type = NodalExtremeValue
variable = accel_y
boundary = bottom
[../]
[./stress_yy]
type = ElementAverageValue
variable = stress_yy
[../]
[./strain_yy]
type = ElementAverageValue
variable = strain_yy
[../]
[]
[Outputs]
file_base = 'hht_test_out'
exodus = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/central_difference/consistent/2D/2d_consistent_implicit.i)
# Test for the central difference time integrator for a 2D mesh
[Mesh]
type = GeneratedMesh
dim = 2
nx = 1
ny = 2
xmin = 0.0
xmax = 1.0
ymin = 0.0
ymax = 2.0
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[]
[AuxVariables]
[./vel_x]
[../]
[./accel_x]
[../]
[./vel_y]
[../]
[./accel_y]
[../]
[]
[Kernels]
[./DynamicSolidMechanics]
displacements = 'disp_x disp_y'
[../]
[./inertia_x]
type = InertialForce
variable = disp_x
[../]
[./inertia_y]
type = InertialForce
variable = disp_y
[../]
[]
[AuxKernels]
[./accel_x]
type = TestNewmarkTI
variable = accel_x
displacement = disp_x
first = false
[../]
[./vel_x]
type = TestNewmarkTI
variable = vel_x
displacement = disp_x
[../]
[./accel_y]
type = TestNewmarkTI
variable = accel_y
displacement = disp_y
first = false
[../]
[./vel_y]
type = TestNewmarkTI
variable = vel_y
displacement = disp_y
[../]
[]
[BCs]
[./y_bot]
type = DirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[../]
[./x_bot]
type = PresetDisplacement
boundary = bottom
variable = disp_x
beta = 0.25
velocity = vel_x
acceleration = accel_x
function = disp
[../]
[]
[Functions]
[./disp]
type = PiecewiseLinear
x = '0.0 1.0 2.0 3.0 4.0' # time
y = '0.0 1.0 0.0 -1.0 0.0' # displacement
[../]
[]
[Materials]
[./elasticity_tensor_block]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1e6
poissons_ratio = 0.25
block = 0
[../]
[./strain_block]
type = ComputeIncrementalSmallStrain
block = 0
displacements = 'disp_x disp_y'
[../]
[./stress_block]
type = ComputeFiniteStrainElasticStress
block = 0
[../]
[./density]
type = GenericConstantMaterial
block = 0
prop_names = density
prop_values = 1e4
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = NEWTON
nl_abs_tol = 1e-11
nl_rel_tol = 1e-11
start_time = -0.01
end_time = 0.1
dt = 0.005
timestep_tolerance = 1e-6
[./TimeIntegrator]
type = NewmarkBeta
beta = 0.25
gamma = 0.5
[../]
[]
[Postprocessors]
[./_dt]
type = TimestepSize
[../]
[./accel_2x]
type = PointValue
point = '1.0 2.0 0.0'
variable = accel_x
[../]
[./accel_2y]
type = PointValue
point = '1.0 2.0 0.0'
variable = accel_y
[../]
[]
[Outputs]
exodus = false
csv = true
[]
(modules/contact/test/tests/explicit_dynamics/test_balance.i)
# One element test to test the central difference time integrator in 3D.
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[Mesh]
[block_one]
type = GeneratedMeshGenerator
dim = 3
nx = 3
ny = 3
nz = 3
xmin = 4.5
xmax = 5.5
ymin = 4.5
ymax = 5.5
zmin = 0.0001
zmax = 1.0001
boundary_name_prefix = 'ball'
[]
[block_two]
type = GeneratedMeshGenerator
dim = 3
nx = 2
ny = 2
nz = 2
xmin = 0.0
xmax = 10
ymin = 0.0
ymax = 10
zmin = -2
zmax = 0
boundary_name_prefix = 'base'
boundary_id_offset = 10
[]
[block_one_id]
type = SubdomainIDGenerator
input = block_one
subdomain_id = 1
[]
[block_two_id]
type = SubdomainIDGenerator
input = block_two
subdomain_id = 2
[]
[combine]
type = MeshCollectionGenerator
inputs = ' block_one_id block_two_id'
[]
allow_renumbering = false
[]
[Variables]
[disp_x]
[]
[disp_y]
[]
[disp_z]
[]
[]
[AuxVariables]
[gap_rate]
[]
[vel_x]
[]
[accel_x]
[]
[vel_y]
[]
[accel_y]
[]
[vel_z]
[]
[accel_z]
[]
[stress_zz]
family = MONOMIAL
order = CONSTANT
[]
[strain_zz]
family = MONOMIAL
order = CONSTANT
[]
[]
[AuxKernels]
[stress_zz]
type = RankTwoAux
rank_two_tensor = stress
index_i = 2
index_j = 2
variable = stress_zz
execute_on = 'TIMESTEP_END'
[]
[strain_zz]
type = RankTwoAux
rank_two_tensor = mechanical_strain
index_i = 2
index_j = 2
variable = strain_zz
[]
[accel_x]
type = TestNewmarkTI
variable = accel_x
displacement = disp_x
first = false
execute_on = 'LINEAR TIMESTEP_BEGIN TIMESTEP_END'
[]
[vel_x]
type = TestNewmarkTI
variable = vel_x
displacement = disp_x
execute_on = 'LINEAR TIMESTEP_BEGIN TIMESTEP_END'
[]
[accel_y]
type = TestNewmarkTI
variable = accel_y
displacement = disp_y
first = false
execute_on = 'LINEAR TIMESTEP_BEGIN TIMESTEP_END'
[]
[vel_y]
type = TestNewmarkTI
variable = vel_y
displacement = disp_x
execute_on = 'LINEAR TIMESTEP_BEGIN TIMESTEP_END'
[]
[accel_z]
type = TestNewmarkTI
variable = accel_z
displacement = disp_z
first = false
execute_on = 'LINEAR TIMESTEP_BEGIN TIMESTEP_END'
[]
[vel_z]
type = TestNewmarkTI
variable = vel_z
displacement = disp_z
execute_on = 'LINEAR TIMESTEP_BEGIN TIMESTEP_END'
[]
[]
[Kernels]
[DynamicTensorMechanics]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
stiffness_damping_coefficient = 0.001
generate_output = 'stress_zz strain_zz'
[]
[inertia_x]
type = InertialForce
variable = disp_x
[]
[inertia_y]
type = InertialForce
variable = disp_y
[]
[inertia_z]
type = InertialForce
variable = disp_z
[]
[]
[Kernels]
[gravity]
type = Gravity
variable = disp_z
value = -981.0
[]
[]
[BCs]
[x_front]
type = DirichletBC
variable = disp_x
boundary = 'ball_front'
preset = false
value = 0.0
[]
[y_front]
type = DirichletBC
variable = disp_y
boundary = 'ball_front'
preset = false
value = 0.0
[]
[x_fixed]
type = DirichletBC
variable = disp_x
boundary = 'base_back'
preset = false
value = 0.0
[]
[y_fixed]
type = DirichletBC
variable = disp_y
boundary = 'base_back'
preset = false
value = 0.0
[]
[z_fixed]
type = DirichletBC
variable = disp_z
boundary = 'base_back'
preset = false
value = 0.0
[]
[z_fixed_front]
type = DirichletBC
variable = disp_z
boundary = 'base_front'
preset = false
value = 0.0
[]
[]
[ExplicitDynamicsContact]
[my_contact]
model = frictionless_balance
primary = base_front
secondary = ball_back
vel_x = 'vel_x'
vel_y = 'vel_y'
vel_z = 'vel_z'
[]
[]
[Materials]
[elasticity_tensor_block_one]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1e6
poissons_ratio = 0.0
block = 1
outputs = 'exodus'
output_properties = __all__
[]
[elasticity_tensor_block_two]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1e10
poissons_ratio = 0.0
block = 2
outputs = 'exodus'
output_properties = __all__
[]
[strain_block]
type = ComputeFiniteStrain
displacements = 'disp_x disp_y disp_z'
implicit = false
[]
[stress_block]
type = ComputeFiniteStrainElasticStress
[]
[density_one]
type = GenericConstantMaterial
prop_names = density
prop_values = 1e1
outputs = 'exodus'
output_properties = 'density'
block = '1'
[]
[density_two]
type = GenericConstantMaterial
prop_names = density
prop_values = 1e6
outputs = 'exodus'
output_properties = 'density'
block = '2'
[]
[wave_speed]
type = WaveSpeed
outputs = 'exodus'
output_properties = 'wave_speed'
[]
[]
[Executioner]
type = Transient
start_time = -0.01
end_time = -0.0075 # 10
dt = 0.00001
timestep_tolerance = 1e-6
[TimeIntegrator]
type = CentralDifference
solve_type = lumped
[]
[]
[Outputs]
interval = 50
exodus = true
csv = true
[]
[Postprocessors]
[accel_58z]
type = NodalVariableValue
nodeid = 1
variable = accel_z
[]
[vel_58z]
type = NodalVariableValue
nodeid = 1
variable = vel_z
[]
[disp_58z]
type = NodalVariableValue
nodeid = 1
variable = disp_z
[]
[critical_time_step]
type = CriticalTimeStep
[]
[contact_pressure_max]
type = NodalExtremeValue
variable = contact_pressure
block = '1 2'
value_type = max
[]
[]
(modules/fsi/test/tests/fsi_acoustics/1D_struc_acoustic/1D_struc_acoustic.i)
# Test for `StructureAcousticInterface` interface kernel. The domain is 1D with 20m
# length. The fluid domain is on the right and the structural domain is on the left.
# Fluid end is subjected to a 250Hz sine wave with a single peak of amplitude unity.
# Structural domain is 4 times as dense as the fluid domain with all other material
# properties being the same. Fluid pressure is recorded at the midpoint in the fluid
# domain (i.e., at 15m). Structural stress is recorded at the midpoint in the structural
# domain (i.e., at 5m). The recorded pressure and stress amplitudes should match
# with theoretical values.
#
# Input parameters:
# Dimensions = 1
# Length = 20 meters
# Fluid speed of sound = 1500 m/s
# Fluid density = 1e-6 Giga kg/m^3
# Structural bulk modulus = 2.25 GPa
# Structural shear modulus = 0 GPa
# Structural density = 4e-6 Giga kg/m^3
# Fluid domain = true
# Fluid BC = single peak sine wave applied as a pressure on the fluid end
# Structural domain = true
# Structural BC = Neumann BC with value zero applied on the structural end.
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 1
nx = 50
xmax = 20
[]
[./subdomain1]
input = gen
type = SubdomainBoundingBoxGenerator
bottom_left = '10.0 0 0'
block_id = 1
top_right = '20.0 0.0 0'
[../]
[./interface1]
type = SideSetsBetweenSubdomainsGenerator
input = subdomain1
primary_block = '1'
paired_block = 0
new_boundary = 'interface1'
[../]
[]
[GlobalParams]
[]
[Variables]
[./p]
block = 1
[../]
[./disp_x]
block = 0
[../]
[]
[AuxVariables]
[./vel_x]
order = FIRST
family = LAGRANGE
block = 0
[../]
[./accel_x]
order = FIRST
family = LAGRANGE
block = 0
[../]
[./stress_xx]
order = CONSTANT
family = MONOMIAL
block = 0
[../]
[]
[Kernels]
[./diffusion]
type = Diffusion
variable = 'p'
block = 1
[../]
[./inertia]
type = AcousticInertia
variable = p
block = 1
[../]
[./DynamicTensorMechanics]
displacements = 'disp_x'
block = 0
[../]
[./inertia_x1]
type = InertialForce
variable = disp_x
block = 0
[../]
[]
[AuxKernels]
[./accel_x]
type = TestNewmarkTI
displacement = disp_x
variable = accel_x
first = false
block = 0
[../]
[./vel_x]
type = TestNewmarkTI
displacement = disp_x
variable = vel_x
block = 0
[../]
[./stress_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
block = 0
[../]
[]
[InterfaceKernels]
[./interface1]
type = StructureAcousticInterface
variable = p
neighbor_var = disp_x
boundary = 'interface1'
D = 1e-6
component = 0
[../]
[]
[BCs]
[./bottom_accel]
type = FunctionDirichletBC
variable = p
boundary = 'right'
function = accel_bottom
[../]
[./disp_x1]
type = NeumannBC
boundary = 'left'
variable = disp_x
value = 0.0
[../]
[]
[Functions]
[./accel_bottom]
type = PiecewiseLinear
data_file = Input_1Peak_highF.csv
scale_factor = 1e-2
format = 'columns'
[../]
[]
[Materials]
[./co_sq]
type = GenericConstantMaterial
prop_names = inv_co_sq
prop_values = 4.44e-7
block = '1'
[../]
[./density0]
type = GenericConstantMaterial
block = 0
prop_names = density
prop_values = 4e-6
[../]
[./elasticity_base]
type = ComputeIsotropicElasticityTensor
bulk_modulus = 2.25
shear_modulus = 0.0
block = 0
[../]
[./strain]
type = ComputeFiniteStrain
block = 0
displacements = 'disp_x'
[../]
[./stress]
type = ComputeFiniteStrainElasticStress
block = 0
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
start_time = 0.0
end_time = 0.01
dt = 0.0001
dtmin = 0.00001
nl_abs_tol = 1e-12
nl_rel_tol = 1e-12
l_tol = 1e-12
l_max_its = 25
timestep_tolerance = 1e-8
automatic_scaling = true
[TimeIntegrator]
type = NewmarkBeta
[]
[]
[Postprocessors]
[./p1]
type = PointValue
point = '10.0 0.0 0.0'
variable = p
[../]
[./stress1]
type = PointValue
point = '10.0 0.0 0.0'
variable = stress_xx
[../]
[]
[Outputs]
csv = true
perf_graph = true
print_linear_residuals = true
[]
(modules/solid_mechanics/test/tests/central_difference/consistent/3D/3d_consistent_explicit.i)
# One element test to test the central difference time integrator in 3D.
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 2
xmin = 0.0
xmax = 1
ymin = 0.0
ymax = 1
zmin = 0.0
zmax = 2
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[AuxVariables]
[./vel_x]
[../]
[./accel_x]
[../]
[./vel_y]
[../]
[./accel_y]
[../]
[./vel_z]
[../]
[./accel_z]
[../]
[]
[AuxKernels]
[./accel_x]
type = TestNewmarkTI
variable = accel_x
displacement = disp_x
first = false
[../]
[./vel_x]
type = TestNewmarkTI
variable = vel_x
displacement = disp_x
[../]
[./accel_y]
type = TestNewmarkTI
variable = accel_y
displacement = disp_y
first = false
[../]
[./vel_y]
type = TestNewmarkTI
variable = vel_y
displacement = disp_x
[../]
[./accel_z]
type = TestNewmarkTI
variable = accel_z
displacement = disp_z
first = false
[../]
[./vel_z]
type = TestNewmarkTI
variable = vel_z
displacement = disp_z
[../]
[]
[Kernels]
[./DynamicSolidMechanics]
displacements = 'disp_x disp_y disp_z'
[../]
[./inertia_x]
type = InertialForce
variable = disp_x
[../]
[./inertia_y]
type = InertialForce
variable = disp_y
[../]
[./inertia_z]
type = InertialForce
variable = disp_z
[../]
[]
[BCs]
[./x_bot]
type = FunctionDirichletBC
variable = disp_x
boundary = 'back'
function = dispx
preset = false
[../]
[./y_bot]
type = FunctionDirichletBC
variable = disp_y
boundary = 'back'
function = dispy
preset = false
[../]
[./z_bot]
type = FunctionDirichletBC
variable = disp_z
boundary = 'back'
function = dispz
preset = false
[../]
[./Periodic]
[./x_dir]
variable = 'disp_x disp_y disp_z'
primary = 'left'
secondary = 'right'
translation = '1.0 0.0 0.0'
[../]
[./y_dir]
variable = 'disp_x disp_y disp_z'
primary = 'bottom'
secondary = 'top'
translation = '0.0 1.0 0.0'
[../]
[../]
[]
[Functions]
[./dispx]
type = PiecewiseLinear
x = '0.0 1.0 2.0 3.0 4.0' # time
y = '0.0 1.0 0.0 -1.0 0.0' # displacement
[../]
[./dispy]
type = ParsedFunction
expression = 0.1*t*t*sin(10*t)
[../]
[./dispz]
type = ParsedFunction
expression = 0.1*t*t*sin(20*t)
[../]
[]
[Materials]
[./elasticity_tensor_block]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1e6
poissons_ratio = 0.25
block = 0
[../]
[./strain_block]
type = ComputeIncrementalSmallStrain
block = 0
displacements = 'disp_x disp_y disp_z'
implicit = false
[../]
[./stress_block]
type = ComputeFiniteStrainElasticStress
block = 0
[../]
[./density]
type = GenericConstantMaterial
block = 0
prop_names = density
prop_values = 1e4
[../]
[]
[Executioner]
type = Transient
start_time = -0.01
end_time = 0.1
dt = 0.005
timestep_tolerance = 1e-6
[./TimeIntegrator]
type = CentralDifference
[../]
[]
[Postprocessors]
[./accel_6x]
type = NodalVariableValue
nodeid = 6
variable = accel_x
[../]
[]
[Outputs]
exodus = false
csv = true
[]
(modules/solid_mechanics/test/tests/dynamics/time_integration/newmark.i)
# Test for Newmark time integration
# The test is for an 1D bar element of unit length fixed on one end
# with a ramped pressure boundary condition applied to the other end.
# beta and gamma are Newmark time integration parameters
# The equation of motion in terms of matrices is:
#
# M*accel + K*disp = P*Area
#
# Here M is the mass matrix, K is the stiffness matrix, P is the applied pressure
#
# This equation is equivalent to:
#
# density*accel + Div Stress = P
#
# The first term on the left is evaluated using the Inertial force kernel
# The last term on the left is evaluated using StressDivergenceTensors
# The residual due to Pressure is evaluated using Pressure boundary condition
[Mesh]
type = GeneratedMesh
dim = 3
xmax = 0.1
ymax = 1.0
zmax = 0.1
[]
[Variables]
[disp_x]
[]
[disp_y]
[]
[disp_z]
[]
[]
[AuxVariables]
[vel_x]
[]
[accel_x]
[]
[vel_y]
[]
[accel_y]
[]
[vel_z]
[]
[accel_z]
[]
[stress_yy]
order = CONSTANT
family = MONOMIAL
[]
[strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[]
[Kernels]
[SolidMechanics]
displacements = 'disp_x disp_y disp_z'
[]
[inertia_x]
type = InertialForce
variable = disp_x
velocity = vel_x
acceleration = accel_x
beta = 0.25
gamma = 0.5
[]
[inertia_y]
type = InertialForce
variable = disp_y
velocity = vel_y
acceleration = accel_y
beta = 0.25
gamma = 0.5
[]
[inertia_z]
type = InertialForce
variable = disp_z
velocity = vel_z
acceleration = accel_z
beta = 0.25
gamma = 0.5
[]
[]
[AuxKernels]
[accel_x]
type = NewmarkAccelAux
variable = accel_x
displacement = disp_x
velocity = vel_x
beta = 0.25
execute_on = timestep_end
[]
[vel_x]
type = NewmarkVelAux
variable = vel_x
acceleration = accel_x
gamma = 0.5
execute_on = timestep_end
[]
[accel_y]
type = NewmarkAccelAux
variable = accel_y
displacement = disp_y
velocity = vel_y
beta = 0.25
execute_on = timestep_end
[]
[vel_y]
type = NewmarkVelAux
variable = vel_y
acceleration = accel_y
gamma = 0.5
execute_on = timestep_end
[]
[accel_z]
type = NewmarkAccelAux
variable = accel_z
displacement = disp_z
velocity = vel_z
beta = 0.25
execute_on = timestep_end
[]
[vel_z]
type = NewmarkVelAux
variable = vel_z
acceleration = accel_z
gamma = 0.5
execute_on = timestep_end
[]
[stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[]
[strain_yy]
type = RankTwoAux
rank_two_tensor = total_strain
variable = strain_yy
index_i = 1
index_j = 1
[]
[]
[BCs]
[top_x]
type = DirichletBC
variable = disp_x
boundary = top
value = 0.0
[]
[top_y]
type = DirichletBC
variable = disp_y
boundary = top
value = 0.0
[]
[top_z]
type = DirichletBC
variable = disp_z
boundary = top
value = 0.0
[]
[Pressure]
[Side1]
boundary = bottom
function = pressure
factor = 1
displacements = 'disp_x disp_y disp_z'
[]
[]
[]
[Materials]
[Elasticity_tensor]
type = ComputeElasticityTensor
fill_method = symmetric_isotropic
C_ijkl = '210 0'
[]
[strain]
type = ComputeSmallStrain
displacements = 'disp_x disp_y disp_z'
[]
[stress]
type = ComputeLinearElasticStress
[]
[density]
type = GenericConstantMaterial
prop_names = 'density'
prop_values = '7750'
[]
[]
[Executioner]
type = Transient
start_time = 0
end_time = 2
dt = 0.1
[]
[Functions]
[pressure]
type = PiecewiseLinear
x = '0.0 0.2 1.0 5.0'
y = '0.0 0.2 1.0 1.0'
scale_factor = 1e3
[]
[]
[Postprocessors]
[dt]
type = TimestepSize
[]
[disp]
type = NodalExtremeValue
variable = disp_y
boundary = bottom
[]
[vel]
type = NodalExtremeValue
variable = vel_y
boundary = bottom
[]
[accel]
type = NodalExtremeValue
variable = accel_y
boundary = bottom
[]
[stress_yy]
type = ElementAverageValue
variable = stress_yy
[]
[strain_yy]
type = ElementAverageValue
variable = strain_yy
[]
[]
[Outputs]
exodus = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/dynamics/acceleration_bc/AccelerationBC_test_ti.i)
# Test for Acceleration boundary condition
# This test contains one brick element which is fixed in the y and z direction.
# Base acceleration is applied in the x direction to all nodes on the bottom surface (y=0).
# The PresetAcceleration converts the given acceleration to a displacement
# using Newmark time integration. This displacement is then prescribed on the boundary.
#
# Result: The acceleration at the bottom node should be same as the input acceleration
# which is a triangular function with peak at t = 0.2 in this case. Width of the triangular function
# is 0.2 s.
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = 0.0
xmax = 0.1
ymin = 0.0
ymax = 1.0
zmin = 0.0
zmax = 0.1
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[AuxVariables]
[./vel_x]
[../]
[./accel_x]
[../]
[./vel_y]
[../]
[./accel_y]
[../]
[./vel_z]
[../]
[./accel_z]
[../]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_yy]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Kernels]
[SolidMechanics]
[../]
[./inertia_x]
type = InertialForce
variable = disp_x
[../]
[./inertia_y]
type = InertialForce
variable = disp_y
[../]
[./inertia_z]
type = InertialForce
variable = disp_z
[../]
[]
[AuxKernels]
[./accel_x] # These auxkernels are only to check output
type = TestNewmarkTI
displacement = disp_x
variable = accel_x
first = false
[../]
[./accel_y]
type = TestNewmarkTI
displacement = disp_y
variable = accel_y
first = false
[../]
[./accel_z]
type = TestNewmarkTI
displacement = disp_z
variable = accel_z
first = false
[../]
[./vel_x]
type = TestNewmarkTI
displacement = disp_x
variable = vel_x
[../]
[./vel_y]
type = TestNewmarkTI
displacement = disp_y
variable = vel_y
[../]
[./vel_z]
type = TestNewmarkTI
displacement = disp_z
variable = vel_z
[../]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 0
index_j = 1
[../]
[./strain_yy]
type = RankTwoAux
rank_two_tensor = total_strain
variable = strain_yy
index_i = 0
index_j = 1
[../]
[]
[Functions]
[./acceleration_bottom]
type = PiecewiseLinear
data_file = acceleration.csv
format = columns
[../]
[]
[BCs]
[./top_y]
type = DirichletBC
variable = disp_y
boundary = top
value=0.0
[../]
[./top_z]
type = DirichletBC
variable = disp_z
boundary = top
value=0.0
[../]
[./bottom_y]
type = DirichletBC
variable = disp_y
boundary = bottom
value=0.0
[../]
[./bottom_z]
type = DirichletBC
variable = disp_z
boundary = bottom
value=0.0
[../]
[./preset_accelertion]
type = PresetAcceleration
boundary = bottom
function = acceleration_bottom
variable = disp_x
beta = 0.25
acceleration = accel_x
velocity = vel_x
[../]
[]
[Materials]
[./Elasticity_tensor]
type = ComputeElasticityTensor
fill_method = symmetric_isotropic
C_ijkl = '210e9 0'
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./density]
type = GenericConstantMaterial
prop_names = 'density'
prop_values = '7750'
[../]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_hypre_type -ksp_gmres_restart'
petsc_options_value = 'hypre boomeramg 101'
start_time = 0
end_time = 2.0
dt = 0.01
dtmin = 0.01
nl_abs_tol = 1e-8
nl_rel_tol = 1e-8
l_tol = 1e-8
timestep_tolerance = 1e-8
# Time integrator scheme
schem = "newmark-beta"
[]
[Postprocessors]
[./_dt]
type = TimestepSize
[../]
[./disp]
type = NodalVariableValue
variable = disp_x
nodeid = 1
[../]
[./vel]
type = NodalVariableValue
variable = vel_x
nodeid = 1
[../]
[./accel]
type = NodalVariableValue
variable = accel_x
nodeid = 1
[../]
[]
[Outputs]
file_base = "AccelerationBC_test_out"
exodus = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/dynamics/time_integration/hht_test.i)
# Test for HHT time integration
# The test is for an 1D bar element of unit length fixed on one end
# with a ramped pressure boundary condition applied to the other end.
# alpha, beta and gamma are HHT time integration parameters
# The equation of motion in terms of matrices is:
#
# M*accel + alpha*(K*disp - K*disp_old) + K*disp = P(t+alpha dt)*Area
#
# Here M is the mass matrix, K is the stiffness matrix, P is the applied pressure
#
# This equation is equivalent to:
#
# density*accel + alpha*(Div stress - Div stress_old) +Div Stress= P(t+alpha dt)
#
# The first term on the left is evaluated using the Inertial force kernel
# The next two terms on the left involving alpha are evaluated using the
# DynamicStressDivergenceTensors Kernel
# The residual due to Pressure is evaluated using Pressure boundary condition
#
# The system will come to steady state slowly after the pressure becomes constant.
# Alpha equal to zero will result in Newmark integration.
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = 0.0
xmax = 0.1
ymin = 0.0
ymax = 1.0
zmin = 0.0
zmax = 0.1
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[AuxVariables]
[./vel_x]
[../]
[./accel_x]
[../]
[./vel_y]
[../]
[./accel_y]
[../]
[./vel_z]
[../]
[./accel_z]
[../]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_yy]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Kernels]
[./DynamicSolidMechanics]
displacements = 'disp_x disp_y disp_z'
hht_alpha = 0.11
[../]
[./inertia_x]
type = InertialForce
variable = disp_x
velocity = vel_x
acceleration = accel_x
beta = 0.25
gamma = 0.5
[../]
[./inertia_y]
type = InertialForce
variable = disp_y
velocity = vel_y
acceleration = accel_y
beta = 0.25
gamma = 0.5
[../]
[./inertia_z]
type = InertialForce
variable = disp_z
velocity = vel_z
acceleration = accel_z
beta = 0.25
gamma = 0.5
[../]
[]
[AuxKernels]
[./accel_x]
type = NewmarkAccelAux
variable = accel_x
displacement = disp_x
velocity = vel_x
beta = 0.25
execute_on = timestep_end
[../]
[./vel_x]
type = NewmarkVelAux
variable = vel_x
acceleration = accel_x
gamma = 0.5
execute_on = timestep_end
[../]
[./accel_y]
type = NewmarkAccelAux
variable = accel_y
displacement = disp_y
velocity = vel_y
beta = 0.25
execute_on = timestep_end
[../]
[./vel_y]
type = NewmarkVelAux
variable = vel_y
acceleration = accel_y
gamma = 0.5
execute_on = timestep_end
[../]
[./accel_z]
type = NewmarkAccelAux
variable = accel_z
displacement = disp_z
velocity = vel_z
beta = 0.25
execute_on = timestep_end
[../]
[./vel_z]
type = NewmarkVelAux
variable = vel_z
acceleration = accel_z
gamma = 0.5
execute_on = timestep_end
[../]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 0
index_j = 1
[../]
[./strain_yy]
type = RankTwoAux
rank_two_tensor = total_strain
variable = strain_yy
index_i = 0
index_j = 1
[../]
[]
[BCs]
[./top_y]
type = DirichletBC
variable = disp_y
boundary = top
value=0.0
[../]
[./top_x]
type = DirichletBC
variable = disp_x
boundary = top
value=0.0
[../]
[./top_z]
type = DirichletBC
variable = disp_z
boundary = top
value=0.0
[../]
[./bottom_x]
type = DirichletBC
variable = disp_x
boundary = bottom
value=0.0
[../]
[./bottom_z]
type = DirichletBC
variable = disp_z
boundary = bottom
value=0.0
[../]
[./Pressure]
[./Side1]
boundary = bottom
function = pressure
factor = 1
hht_alpha = 0.11
displacements = 'disp_x disp_y disp_z'
[../]
[../]
[]
[Materials]
[./Elasticity_tensor]
type = ComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
C_ijkl = '210e9 0'
[../]
[./strain]
type = ComputeSmallStrain
block = 0
displacements = 'disp_x disp_y disp_z'
[../]
[./stress]
type = ComputeLinearElasticStress
block = 0
[../]
[./density]
type = GenericConstantMaterial
block = 0
prop_names = 'density'
prop_values = '7750'
[../]
[]
[Executioner]
type = Transient
start_time = 0
end_time = 2
dt = 0.1
[]
[Functions]
[./pressure]
type = PiecewiseLinear
x = '0.0 0.1 0.2 1.0 2.0 5.0'
y = '0.0 0.1 0.2 1.0 1.0 1.0'
scale_factor = 1e9
[../]
[]
[Postprocessors]
[./_dt]
type = TimestepSize
[../]
[./disp]
type = NodalExtremeValue
variable = disp_y
boundary = bottom
[../]
[./vel]
type = NodalExtremeValue
variable = vel_y
boundary = bottom
[../]
[./accel]
type = NodalExtremeValue
variable = accel_y
boundary = bottom
[../]
[./stress_yy]
type = ElementAverageValue
variable = stress_yy
[../]
[./strain_yy]
type = ElementAverageValue
variable = strain_yy
[../]
[]
[Outputs]
exodus = true
perf_graph = true
[]
(modules/contact/test/tests/mortar_aux_kernels/block-dynamics-aux-wear-vel.i)
starting_point = 0.5e-1
offset = -0.05
[GlobalParams]
displacements = 'disp_x disp_y'
[]
[Mesh]
file = long-bottom-block-1elem-blocks.e
[]
[Variables]
[disp_x]
block = '1 2'
[]
[disp_y]
block = '1 2'
[]
[normal_lm]
block = 3
use_dual = true
scaling = 1.0e3
[]
[frictional_lm]
block = 3
use_dual = true
[]
[]
[ICs]
[disp_y]
block = 2
variable = disp_y
value = '${fparse starting_point + offset}'
type = ConstantIC
[]
[]
[Kernels]
[DynamicTensorMechanics]
displacements = 'disp_x disp_y'
generate_output = 'stress_xx stress_yy'
strain = FINITE
block = '1 2'
zeta = 1.0
hht_alpha = 0.0
[]
[inertia_x]
type = InertialForce
variable = disp_x
velocity = vel_x
acceleration = accel_x
beta = 0.25
gamma = 0.5
alpha = 0
eta = 0.0
block = '1 2'
[]
[inertia_y]
type = InertialForce
variable = disp_y
velocity = vel_y
acceleration = accel_y
beta = 0.25
gamma = 0.5
alpha = 0
eta = 0.0
block = '1 2'
[]
[]
[Materials]
[elasticity_2]
type = ComputeIsotropicElasticityTensor
block = '2'
youngs_modulus = 1e6
poissons_ratio = 0.3
[]
[elasticity_1]
type = ComputeIsotropicElasticityTensor
block = '1'
youngs_modulus = 1e8
poissons_ratio = 0.3
[]
[stress]
type = ComputeFiniteStrainElasticStress
block = '1 2'
[]
[strain]
type = ComputeFiniteStrain
block = '1 2'
[]
[density]
type = GenericConstantMaterial
block = '1 2'
prop_names = 'density'
prop_values = '7750'
[]
[]
[AuxVariables]
[worn_depth]
block = '3'
[]
[gap_vel]
block = '3'
[]
[vel_x]
block = '1 2'
[]
[accel_x]
block = '1 2'
[]
[vel_y]
block = '1 2'
[]
[accel_y]
block = '1 2'
[]
[vel_z]
block = '1 2'
[]
[accel_z]
block = '1 2'
[]
[]
[AuxKernels]
[gap_vel]
type = WeightedGapVelAux
variable = gap_vel
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
disp_x = disp_x
disp_y = disp_y
[]
[worn_depth]
type = MortarArchardsLawAux
variable = worn_depth
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
displacements = 'disp_x disp_y'
friction_coefficient = 0.5
energy_wear_coefficient = 1.0
normal_pressure = normal_lm
[]
[accel_x]
type = NewmarkAccelAux
variable = accel_x
displacement = disp_x
velocity = vel_x
beta = 0.25
execute_on = 'linear timestep_end'
[]
[vel_x]
type = NewmarkVelAux
variable = vel_x
acceleration = accel_x
gamma = 0.5
execute_on = 'linear timestep_end'
[]
[accel_y]
type = NewmarkAccelAux
variable = accel_y
displacement = disp_y
velocity = vel_y
beta = 0.25
execute_on = 'linear timestep_end'
[]
[vel_y]
type = NewmarkVelAux
variable = vel_y
acceleration = accel_y
gamma = 0.5
execute_on = 'linear timestep_end'
[]
[]
[UserObjects]
[weighted_vel_uo]
type = LMWeightedVelocitiesUserObject
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
secondary_variable = disp_x
lm_variable_normal = normal_lm
lm_variable_tangential_one = frictional_lm
disp_x = disp_x
disp_y = disp_y
[]
[]
[Constraints]
[weighted_gap_lm]
type = ComputeDynamicFrictionalForceLMMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = normal_lm
disp_x = disp_x
disp_y = disp_y
use_displaced_mesh = true
c = 1e4
c_t = 1e6
mu = 0.15
friction_lm = frictional_lm
capture_tolerance = 1.0e-5
newmark_beta = 0.25
newmark_gamma = 0.5
[]
[normal_x]
type = NormalMortarMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = normal_lm
secondary_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
weighted_gap_uo = weighted_vel_uo
[]
[normal_y]
type = NormalMortarMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = normal_lm
secondary_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
weighted_gap_uo = weighted_vel_uo
[]
[tangential_x]
type = TangentialMortarMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = frictional_lm
secondary_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
weighted_velocities_uo = weighted_vel_uo
[]
[tangential_y]
type = TangentialMortarMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = frictional_lm
secondary_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
weighted_velocities_uo = weighted_vel_uo
[]
[]
[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(16.0 * pi / 4 * t) + ${offset}'
[]
[leftx]
type = FunctionDirichletBC
variable = disp_x
boundary = 50
function = '1e-2 * t'
[]
[]
[Executioner]
type = Transient
end_time = 0.3
dt = 0.03
dtmin = .002
solve_type = 'NEWTON'
petsc_options = '-snes_converged_reason -ksp_converged_reason -pc_svd_monitor '
'-snes_linesearch_monitor -snes_ksp_ew'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_type -pc_factor_shift_type -pc_factor_shift_amount'
petsc_options_value = 'lu superlu_dist NONZERO 1e-15'
nl_max_its = 40
nl_abs_tol = 1.0e-11
nl_rel_tol = 1.0e-11
line_search = 'none'
snesmf_reuse_base = true
[TimeIntegrator]
type = NewmarkBeta
beta = 0.25
gamma = 0.5
[]
[]
[Debug]
show_var_residual_norms = true
[]
[Outputs]
exodus = true
checkpoint = true
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Postprocessors]
active = '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/solid_mechanics/test/tests/capped_weak_plane/pull_and_shear.i)
# Dynamic problem with plasticity.
# A column of material (not subject to gravity) has the z-displacement
# of its sides fixed, but the centre of its bottom side is pulled
# downwards. This causes failure in the bottom elements.
#
# The problem utilises damping in the following way.
# The DynamicStressDivergenceTensors forms the residual
# integral grad(stress) + zeta*grad(stress-dot)
# = V/L * elasticity * (du/dx + zeta * dv/dx)
# where V is the elemental volume, and L is the length-scale,
# and u is the displacement, and v is the velocity.
# The InertialForce forms the residual
# integral density * (accel + eta * velocity)
# = V * density * (a + eta * v)
# where a is the acceleration.
# So, a damped oscillator description with both these
# kernels looks like
# 0 = V * (density * a + density * eta * v + elasticity * zeta * v / L^2 + elasticity / L^2 * u)
# Critical damping is when the coefficient of v is
# 2 * sqrt(density * elasticity / L^2)
# In the case at hand, density=1E4, elasticity~1E10 (Young is 16GPa),
# L~1 to 10 (in the horizontal or vertical direction), so this coefficient ~ 1E7 to 1E6.
# Choosing eta = 1E3 and zeta = 1E-2 gives approximate critical damping.
# If zeta is high then steady-state is achieved very quickly.
#
# In the case of plasticity, the effective stiffness of the elements
# is significantly less. Therefore, the above parameters give
# overdamping.
#
# This simulation is a nice example of the irreversable and non-uniqueness
# of simulations involving plasticity. The result depends on the damping
# parameters and the time stepping.
[Mesh]
[generated_mesh]
type = GeneratedMeshGenerator
dim = 3
nx = 10
ny = 1
nz = 5
bias_z = 1.5
xmin = -10
xmax = 10
ymin = -10
ymax = 10
zmin = -100
zmax = 0
[]
[bottomz_middle]
type = BoundingBoxNodeSetGenerator
new_boundary = bottomz_middle
bottom_left = '-1 -1500 -105'
top_right = '1 1500 -95'
input = generated_mesh
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
beta = 0.25 # Newmark time integration
gamma = 0.5 # Newmark time integration
eta = 1E3 #0.3E4 # higher values mean more damping via density
[]
[Variables]
[disp_x]
[]
[disp_y]
[]
[disp_z]
[]
[]
[Kernels]
[DynamicSolidMechanics] # zeta*K*vel + K * disp
stiffness_damping_coefficient = 1E-2 # higher values mean more damping via stiffness
hht_alpha = 0 # better nonlinear convergence than for alpha>0
[]
[inertia_x] # M*accel + eta*M*vel
type = InertialForce
use_displaced_mesh = false
variable = disp_x
velocity = vel_x
acceleration = accel_x
[]
[inertia_y]
type = InertialForce
use_displaced_mesh = false
variable = disp_y
velocity = vel_y
acceleration = accel_y
[]
[inertia_z]
type = InertialForce
use_displaced_mesh = false
variable = disp_z
velocity = vel_z
acceleration = accel_z
[]
[]
[BCs]
[no_x2]
type = DirichletBC
variable = disp_x
boundary = right
value = 0.0
[]
[no_x1]
type = DirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[no_y1]
type = DirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[]
[no_y2]
type = DirichletBC
variable = disp_y
boundary = top
value = 0.0
[]
[z_fixed_sides_xmin]
type = DirichletBC
variable = disp_z
boundary = left
value = 0
[]
[z_fixed_sides_xmax]
type = DirichletBC
variable = disp_z
boundary = right
value = 0
[]
[bottomz]
type = FunctionDirichletBC
variable = disp_z
boundary = bottomz_middle
function = max(-10*t,-10)
[]
[]
[AuxVariables]
[accel_x]
[]
[vel_x]
[]
[accel_y]
[]
[vel_y]
[]
[accel_z]
[]
[vel_z]
[]
[stress_xx]
order = CONSTANT
family = MONOMIAL
[]
[stress_xy]
order = CONSTANT
family = MONOMIAL
[]
[stress_xz]
order = CONSTANT
family = MONOMIAL
[]
[stress_yy]
order = CONSTANT
family = MONOMIAL
[]
[stress_yz]
order = CONSTANT
family = MONOMIAL
[]
[stress_zz]
order = CONSTANT
family = MONOMIAL
[]
[strainp_xx]
order = CONSTANT
family = MONOMIAL
[]
[strainp_xy]
order = CONSTANT
family = MONOMIAL
[]
[strainp_xz]
order = CONSTANT
family = MONOMIAL
[]
[strainp_yy]
order = CONSTANT
family = MONOMIAL
[]
[strainp_yz]
order = CONSTANT
family = MONOMIAL
[]
[strainp_zz]
order = CONSTANT
family = MONOMIAL
[]
[straint_xx]
order = CONSTANT
family = MONOMIAL
[]
[straint_xy]
order = CONSTANT
family = MONOMIAL
[]
[straint_xz]
order = CONSTANT
family = MONOMIAL
[]
[straint_yy]
order = CONSTANT
family = MONOMIAL
[]
[straint_yz]
order = CONSTANT
family = MONOMIAL
[]
[straint_zz]
order = CONSTANT
family = MONOMIAL
[]
[f_shear]
order = CONSTANT
family = MONOMIAL
[]
[f_tensile]
order = CONSTANT
family = MONOMIAL
[]
[f_compressive]
order = CONSTANT
family = MONOMIAL
[]
[intnl_shear]
order = CONSTANT
family = MONOMIAL
[]
[intnl_tensile]
order = CONSTANT
family = MONOMIAL
[]
[iter]
order = CONSTANT
family = MONOMIAL
[]
[ls]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[accel_x] # Calculates and stores acceleration at the end of time step
type = NewmarkAccelAux
variable = accel_x
displacement = disp_x
velocity = vel_x
execute_on = timestep_end
[]
[vel_x] # Calculates and stores velocity at the end of the time step
type = NewmarkVelAux
variable = vel_x
acceleration = accel_x
execute_on = timestep_end
[]
[accel_y]
type = NewmarkAccelAux
variable = accel_y
displacement = disp_y
velocity = vel_y
execute_on = timestep_end
[]
[vel_y]
type = NewmarkVelAux
variable = vel_y
acceleration = accel_y
execute_on = timestep_end
[]
[accel_z]
type = NewmarkAccelAux
variable = accel_z
displacement = disp_z
velocity = vel_z
execute_on = timestep_end
[]
[vel_z]
type = NewmarkVelAux
variable = vel_z
acceleration = accel_z
execute_on = timestep_end
[]
[stress_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
[]
[stress_xy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xy
index_i = 0
index_j = 1
[]
[stress_xz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xz
index_i = 0
index_j = 2
[]
[stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[]
[stress_yz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yz
index_i = 1
index_j = 2
[]
[stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
[]
[strainp_xx]
type = RankTwoAux
rank_two_tensor = plastic_strain
variable = strainp_xx
index_i = 0
index_j = 0
[]
[strainp_xy]
type = RankTwoAux
rank_two_tensor = plastic_strain
variable = strainp_xy
index_i = 0
index_j = 1
[]
[strainp_xz]
type = RankTwoAux
rank_two_tensor = plastic_strain
variable = strainp_xz
index_i = 0
index_j = 2
[]
[strainp_yy]
type = RankTwoAux
rank_two_tensor = plastic_strain
variable = strainp_yy
index_i = 1
index_j = 1
[]
[strainp_yz]
type = RankTwoAux
rank_two_tensor = plastic_strain
variable = strainp_yz
index_i = 1
index_j = 2
[]
[strainp_zz]
type = RankTwoAux
rank_two_tensor = plastic_strain
variable = strainp_zz
index_i = 2
index_j = 2
[]
[straint_xx]
type = RankTwoAux
rank_two_tensor = total_strain
variable = straint_xx
index_i = 0
index_j = 0
[]
[straint_xy]
type = RankTwoAux
rank_two_tensor = total_strain
variable = straint_xy
index_i = 0
index_j = 1
[]
[straint_xz]
type = RankTwoAux
rank_two_tensor = total_strain
variable = straint_xz
index_i = 0
index_j = 2
[]
[straint_yy]
type = RankTwoAux
rank_two_tensor = total_strain
variable = straint_yy
index_i = 1
index_j = 1
[]
[straint_yz]
type = RankTwoAux
rank_two_tensor = total_strain
variable = straint_yz
index_i = 1
index_j = 2
[]
[straint_zz]
type = RankTwoAux
rank_two_tensor = total_strain
variable = straint_zz
index_i = 2
index_j = 2
[]
[f_shear]
type = MaterialStdVectorAux
property = plastic_yield_function
index = 0
variable = f_shear
[]
[f_tensile]
type = MaterialStdVectorAux
property = plastic_yield_function
index = 1
variable = f_tensile
[]
[f_compressive]
type = MaterialStdVectorAux
property = plastic_yield_function
index = 2
variable = f_compressive
[]
[intnl_shear]
type = MaterialStdVectorAux
property = plastic_internal_parameter
index = 0
variable = intnl_shear
[]
[intnl_tensile]
type = MaterialStdVectorAux
property = plastic_internal_parameter
index = 1
variable = intnl_tensile
[]
[iter]
type = MaterialRealAux
property = plastic_NR_iterations
variable = iter
[]
[ls]
type = MaterialRealAux
property = plastic_linesearch_needed
variable = ls
[]
[]
[UserObjects]
[coh]
type = SolidMechanicsHardeningConstant
value = 1E6
[]
[tanphi]
type = SolidMechanicsHardeningConstant
value = 0.5
[]
[tanpsi]
type = SolidMechanicsHardeningConstant
value = 0.166666666667
[]
[t_strength]
type = SolidMechanicsHardeningConstant
value = 0
[]
[c_strength]
type = SolidMechanicsHardeningConstant
value = 1E80
[]
[]
[Materials]
[elasticity_tensor]
type = ComputeElasticityTensor
fill_method = symmetric_isotropic
C_ijkl = '6.4E9 6.4E9' # young 16MPa, Poisson 0.25
[]
[strain]
type = ComputeIncrementalSmallStrain
[]
[admissible]
type = ComputeMultipleInelasticStress
inelastic_models = stress
perform_finite_strain_rotations = false
[]
[stress]
type = CappedWeakPlaneStressUpdate
cohesion = coh
tan_friction_angle = tanphi
tan_dilation_angle = tanpsi
tensile_strength = t_strength
compressive_strength = c_strength
tip_smoother = 1E6
smoothing_tol = 0.5E6
yield_function_tol = 1E-2
[]
[density]
type = GenericConstantMaterial
block = 0
prop_names = density
prop_values = 1E4
[]
[]
[Preconditioning]
[andy]
type = SMP
full = true
petsc_options = '-snes_converged_reason -snes_linesearch_monitor'
petsc_options_iname = '-pc_type -pc_asm_overlap -sub_pc_type -ksp_type -ksp_gmres_restart'
petsc_options_value = ' asm 2 lu gmres 200'
[]
[]
[Executioner]
solve_type = 'NEWTON'
petsc_options = '-snes_converged_reason'
line_search = bt
nl_abs_tol = 1E1
nl_rel_tol = 1e-5
l_tol = 1E-10
l_max_its = 100
nl_max_its = 100
num_steps = 8
dt = 0.1
type = Transient
[]
[Outputs]
file_base = pull_and_shear
exodus = true
csv = true
[]
(modules/contact/test/tests/mortar_dynamics/block-dynamics.i)
starting_point = 2e-1
offset = -0.19
[GlobalParams]
displacements = 'disp_x disp_y'
[]
[Mesh]
file = long-bottom-block-1elem-blocks.e
[]
[Variables]
[disp_x]
block = '1 2'
[]
[disp_y]
block = '1 2'
[]
[normal_lm]
block = 3
use_dual = true
[]
[]
[ICs]
[disp_y]
block = 2
variable = disp_y
value = '${fparse starting_point + offset}'
type = ConstantIC
[]
[]
[Kernels]
[DynamicTensorMechanics]
displacements = 'disp_x disp_y'
generate_output = 'stress_xx stress_yy'
strain = FINITE
block = '1 2'
zeta = 1.0
alpha = 0.0
[]
[inertia_x]
type = InertialForce
variable = disp_x
velocity = vel_x
acceleration = accel_x
beta = 0.25
gamma = 0.5
alpha = 0
eta = 0.0
block = '1 2'
[]
[inertia_y]
type = InertialForce
variable = disp_y
velocity = vel_y
acceleration = accel_y
beta = 0.25
gamma = 0.5
alpha = 0
eta = 0.0
block = '1 2'
[]
[]
[Materials]
[elasticity_2]
type = ComputeIsotropicElasticityTensor
block = '2'
youngs_modulus = 1e6
poissons_ratio = 0.3
[]
[elasticity_1]
type = ComputeIsotropicElasticityTensor
block = '1'
youngs_modulus = 1e8
poissons_ratio = 0.3
[]
[stress]
type = ComputeFiniteStrainElasticStress
block = '1 2'
[]
[strain]
type = ComputeFiniteStrain
block = '1 2'
[]
[density]
type = GenericConstantMaterial
block = '1 2'
prop_names = 'density'
prop_values = '7750'
[]
[]
[AuxVariables]
[vel_x]
block = '1 2'
[]
[accel_x]
block = '1 2'
[]
[vel_y]
block = '1 2'
[]
[accel_y]
block = '1 2'
[]
[vel_z]
block = '1 2'
[]
[accel_z]
block = '1 2'
[]
[]
[AuxKernels]
[accel_x]
type = NewmarkAccelAux
variable = accel_x
displacement = disp_x
velocity = vel_x
beta = 0.25
execute_on = 'LINEAR timestep_end'
[]
[vel_x]
type = NewmarkVelAux
variable = vel_x
acceleration = accel_x
gamma = 0.5
execute_on = 'LINEAR timestep_end'
[]
[accel_y]
type = NewmarkAccelAux
variable = accel_y
displacement = disp_y
velocity = vel_y
beta = 0.25
execute_on = 'LINEAR timestep_end'
[]
[vel_y]
type = NewmarkVelAux
variable = vel_y
acceleration = accel_y
gamma = 0.5
execute_on = 'LINEAR timestep_end'
[]
[]
# User object provides the contact force (e.g. LM)
# for the application of the generalized force
[UserObjects]
[weighted_gap_uo]
type = LMWeightedGapUserObject
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
lm_variable = normal_lm
disp_x = disp_x
disp_y = disp_y
[]
[]
[Constraints]
[weighted_gap_lm]
type = ComputeDynamicWeightedGapLMMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = normal_lm
disp_x = disp_x
disp_y = disp_y
use_displaced_mesh = true
c = 1e4
capture_tolerance = 1.0e-5
newmark_beta = 0.25
newmark_gamma = 0.5
[]
[normal_x]
type = NormalMortarMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = normal_lm
secondary_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
weighted_gap_uo = weighted_gap_uo
[]
[normal_y]
type = NormalMortarMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = normal_lm
secondary_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
weighted_gap_uo = weighted_gap_uo
[]
[]
[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 / 4 * t) + ${offset}'
[]
[leftx]
type = FunctionDirichletBC
variable = disp_x
boundary = 50
function = '1e-2 * t'
[]
[]
[Executioner]
type = Transient
end_time = 75
dt = 0.05
dtmin = .05
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'
nl_max_its = 20
line_search = 'none'
snesmf_reuse_base = false
[TimeIntegrator]
type = NewmarkBeta
beta = 0.25
gamma = 0.5
[]
[]
[Debug]
show_var_residual_norms = true
[]
[Outputs]
exodus = true
checkpoint = 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/explicit_dynamics/first_test.i)
# One element test to test the central difference time integrator in 3D.
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Mesh]
[block_one]
type = GeneratedMeshGenerator
dim = 3
nx = 2
ny = 2
nz = 2
xmin = 4.5
xmax = 5.5
ymin = 4.5
ymax = 5.5
zmin = 0.0001
zmax = 1.0001
boundary_name_prefix = 'ball'
[]
[block_two]
type = GeneratedMeshGenerator
dim = 3
nx = 2
ny = 2
nz = 2
xmin = 0.0
xmax = 10
ymin = 0.0
ymax = 10
zmin = -2
zmax = 0
boundary_name_prefix = 'base'
boundary_id_offset = 10
[]
[block_one_id]
type = SubdomainIDGenerator
input = block_one
subdomain_id = 1
[]
[block_two_id]
type = SubdomainIDGenerator
input = block_two
subdomain_id = 2
[]
[combine]
type = MeshCollectionGenerator
inputs = ' block_one_id block_two_id'
[]
allow_renumbering = false
[]
[Variables]
[disp_x]
[]
[disp_y]
[]
[disp_z]
[]
[]
[AuxVariables]
[vel_x]
[]
[accel_x]
[]
[vel_y]
[]
[accel_y]
[]
[vel_z]
[]
[accel_z]
[]
[]
[AuxKernels]
[accel_x]
type = TestNewmarkTI
variable = accel_x
displacement = disp_x
first = false
[]
[vel_x]
type = TestNewmarkTI
variable = vel_x
displacement = disp_x
[]
[accel_y]
type = TestNewmarkTI
variable = accel_y
displacement = disp_y
first = false
[]
[vel_y]
type = TestNewmarkTI
variable = vel_y
displacement = disp_x
[]
[accel_z]
type = TestNewmarkTI
variable = accel_z
displacement = disp_z
first = false
[]
[vel_z]
type = TestNewmarkTI
variable = vel_z
displacement = disp_z
[]
[]
[Kernels]
[DynamicTensorMechanics]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
stiffness_damping_coefficient = 0.04
#generate_output = 'stress_zz strain_zz'
[]
[inertia_x]
type = InertialForce
variable = disp_x
[]
[inertia_y]
type = InertialForce
variable = disp_y
[]
[inertia_z]
type = InertialForce
variable = disp_z
[]
[]
[Functions]
[dispz]
type = ParsedFunction
expression = if(t<1.0e3,-0.01*t,0)
[]
[push]
type = ParsedFunction
expression = if(t<10.0,0.01*t,0.1)
[]
[]
[BCs]
[z_front]
type = FunctionDirichletBC
variable = disp_z
boundary = 'ball_front'
function = dispz
preset = false
[]
[x_front]
type = DirichletBC
variable = disp_x
boundary = 'ball_front'
preset = false
value = 0.0
[]
[y_front]
type = DirichletBC
variable = disp_y
boundary = 'ball_front'
preset = false
value = 0.0
[]
[x_fixed]
type = DirichletBC
variable = disp_x
boundary = 'base_back'
preset = false
value = 0.0
[]
[y_fixed]
type = DirichletBC
variable = disp_y
boundary = 'base_back'
preset = false
value = 0.0
[]
[z_fixed]
type = DirichletBC
variable = disp_z
boundary = 'base_back'
preset = false
value = 0.0
[]
[]
[ExplicitDynamicsContact]
[my_contact]
model = frictionless
primary = base_front
secondary = ball_back
penalty = 1.0e3
[]
[]
[Materials]
[elasticity_tensor_block_one]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1e3
poissons_ratio = 0.0
block = 1
[]
[elasticity_tensor_block_two]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1e6
poissons_ratio = 0.0
block = 2
[]
[strain_block]
type = ComputeIncrementalSmallStrain
displacements = 'disp_x disp_y disp_z'
implicit = false
[]
[stress_block]
type = ComputeFiniteStrainElasticStress
[]
[density]
type = GenericConstantMaterial
prop_names = density
prop_values = 1e4
[]
[wave_speed]
type = WaveSpeed
[]
[]
[Executioner]
type = Transient
start_time = -0.01
end_time = 0.25
dt = 0.005
timestep_tolerance = 1e-6
[TimeIntegrator]
type = CentralDifference
[]
[]
[Postprocessors]
[disp_58z]
type = NodalVariableValue
nodeid = 1
variable = disp_z
[]
[critical_time_step]
type = CriticalTimeStep
[]
[contact_pressure_max]
type = NodalExtremeValue
variable = contact_pressure
block = '1 2'
value_type = max
[]
[]
[Outputs]
exodus = true
csv = true
[]
(modules/solid_mechanics/test/tests/central_difference/lumped/1D/1d_lumped_explicit.i)
# Test for central difference integration for a 1D element
[Mesh]
[./generated_mesh]
type = GeneratedMeshGenerator
xmin = 0
xmax = 10
nx = 5
dim = 1
[../]
[]
[Variables]
[./disp_x]
[../]
[]
[AuxVariables]
[./accel_x]
[../]
[./vel_x]
[../]
[]
[AuxKernels]
[./accel_x]
type = TestNewmarkTI
variable = accel_x
displacement = disp_x
first = false
[../]
[./vel_x]
type = TestNewmarkTI
variable = vel_x
displacement = disp_x
[../]
[]
[Kernels]
[./DynamicSolidMechanics]
displacements = 'disp_x'
[../]
[./inertia_x]
type = InertialForce
variable = disp_x
[../]
[]
[NodalKernels]
[./force_x]
type = UserForcingFunctionNodalKernel
variable = disp_x
boundary = right
function = force_x
[../]
[]
[Functions]
[./force_x]
type = PiecewiseLinear
x = '0.0 1.0 2.0 3.0 4.0' # time
y = '0.0 1.0 0.0 -1.0 0.0' # force
scale_factor = 1e3
[../]
[]
[BCs]
[./fixx1]
type = DirichletBC
variable = disp_x
boundary = left
value = 0.0
[../]
[]
[Materials]
[./elasticity_tensor_block]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1e6
poissons_ratio = 0.25
block = 0
[../]
[./strain_block]
type = ComputeIncrementalSmallStrain
block = 0
displacements = 'disp_x'
implicit = false
[../]
[./stress_block]
type = ComputeFiniteStrainElasticStress
block = 0
[../]
[./density]
type = GenericConstantMaterial
block = 0
prop_names = density
prop_values = 2500
[../]
[]
[Executioner]
type = Transient
start_time = -0.01
end_time = 0.1
timestep_tolerance = 2e-10
dt = 0.005
[./TimeIntegrator]
type = CentralDifference
solve_type = lumped
[../]
[]
[Postprocessors]
[./accel_x]
type = PointValue
point = '10.0 0.0 0.0'
variable = accel_x
[../]
[]
[Outputs]
exodus = false
csv = true
[]
(modules/contact/test/tests/mortar_dynamics/block-dynamics-reference.i)
starting_point = 2e-1
offset = -0.19
[GlobalParams]
displacements = 'disp_x disp_y'
[]
[Mesh]
file = long-bottom-block-1elem-blocks.e
[]
[Variables]
[disp_x]
block = '1 2'
[]
[disp_y]
block = '1 2'
[]
[normal_lm]
block = 3
use_dual = true
[]
[]
[ICs]
[disp_y]
block = 2
variable = disp_y
value = '${fparse starting_point + offset}'
type = ConstantIC
[]
[]
[Kernels]
[DynamicTensorMechanics]
displacements = 'disp_x disp_y'
generate_output = 'stress_xx stress_yy'
strain = FINITE
block = '1 2'
zeta = 1.0
alpha = 0.0
[]
[inertia_x]
type = InertialForce
variable = disp_x
velocity = vel_x
acceleration = accel_x
beta = 0.25
gamma = 0.5
alpha = 0
eta = 0.0
block = '1 2'
[]
[inertia_y]
type = InertialForce
variable = disp_y
velocity = vel_y
acceleration = accel_y
beta = 0.25
gamma = 0.5
alpha = 0
eta = 0.0
block = '1 2'
[]
[]
[Materials]
[elasticity_2]
type = ComputeIsotropicElasticityTensor
block = '2'
youngs_modulus = 1e6
poissons_ratio = 0.3
[]
[elasticity_1]
type = ComputeIsotropicElasticityTensor
block = '1'
youngs_modulus = 1e8
poissons_ratio = 0.3
[]
[stress]
type = ComputeFiniteStrainElasticStress
block = '1 2'
[]
[strain]
type = ComputeFiniteStrain
block = '1 2'
[]
[density]
type = GenericConstantMaterial
block = '1 2'
prop_names = 'density'
prop_values = '7750'
[]
[]
[AuxVariables]
[vel_x]
block = '1 2'
[]
[accel_x]
block = '1 2'
[]
[vel_y]
block = '1 2'
[]
[accel_y]
block = '1 2'
[]
[vel_z]
block = '1 2'
[]
[accel_z]
block = '1 2'
[]
[kinetic_energy]
order = CONSTANT
family = MONOMIAL
[]
[elastic_energy]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[accel_x]
type = NewmarkAccelAux
variable = accel_x
displacement = disp_x
velocity = vel_x
beta = 0.25
execute_on = 'timestep_end'
[]
[vel_x]
type = NewmarkVelAux
variable = vel_x
acceleration = accel_x
gamma = 0.5
execute_on = 'timestep_end'
[]
[accel_y]
type = NewmarkAccelAux
variable = accel_y
displacement = disp_y
velocity = vel_y
beta = 0.25
execute_on = 'timestep_end'
[]
[vel_y]
type = NewmarkVelAux
variable = vel_y
acceleration = accel_y
gamma = 0.5
execute_on = 'timestep_end'
[]
[kinetic_energy]
type = KineticEnergyAux
block = '1 2'
variable = kinetic_energy
newmark_velocity_x = vel_x
newmark_velocity_y = vel_y
newmark_velocity_z = 0.0
density = density
[]
[elastic_energy]
type = ElasticEnergyAux
variable = elastic_energy
block = '1 2'
[]
[]
# User object provides the contact force (e.g. LM)
# for the application of the generalized force
[UserObjects]
[weighted_gap_uo]
type = LMWeightedGapUserObject
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
lm_variable = normal_lm
disp_x = disp_x
disp_y = disp_y
[]
[]
[Constraints]
# Not using 'dynamic' constraints results in poor enforcement of contact
# constraints and lack of kinetic and elastic energy conservation.
[weighted_gap_lm]
type = ComputeDynamicWeightedGapLMMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = normal_lm
disp_x = disp_x
disp_y = disp_y
newmark_beta = 0.25
newmark_gamma = 0.5
use_displaced_mesh = true
# Capture tolerance is important. If too small, stabilization takes longer
capture_tolerance = 1.0e-5
c = 1.0e6
[]
[normal_x]
type = NormalMortarMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = normal_lm
secondary_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
weighted_gap_uo = weighted_gap_uo
[]
[normal_y]
type = NormalMortarMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = normal_lm
secondary_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
weighted_gap_uo = weighted_gap_uo
[]
[]
[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 / 4 * t) + ${offset}'
[]
[leftx]
type = FunctionDirichletBC
variable = disp_x
boundary = 30 # 50
function = '0' # '1e-2*t'
[]
[]
[Executioner]
type = Transient
end_time = 0.275 # 8.0
dt = 0.025
dtmin = .025
solve_type = 'NEWTON'
petsc_options = '-snes_converged_reason -ksp_converged_reason -snes_linesearch_monitor'
petsc_options_iname = '-pc_type -pc_factor_shift_type -pc_factor_shift_amount'
petsc_options_value = 'lu NONZERO 1e-15'
nl_max_its = 50
line_search = 'none'
[TimeIntegrator]
type = NewmarkBeta
beta = 0.25
gamma = 0.5
[]
[]
[Debug]
show_var_residual_norms = true
[]
[Outputs]
exodus = true
checkpoint = true
csv = true
[]
[Postprocessors]
active = 'contact total_kinetic_energy total_elastic_energy'
[num_nl]
type = NumNonlinearIterations
[]
[cumulative]
type = CumulativeValuePostprocessor
postprocessor = num_nl
[]
[contact]
type = ContactDOFSetSize
variable = normal_lm
subdomain = '3'
execute_on = 'nonlinear timestep_end'
[]
[total_kinetic_energy]
type = ElementIntegralVariablePostprocessor
variable = kinetic_energy
block = '1 2'
[]
[total_elastic_energy]
type = ElementIntegralVariablePostprocessor
variable = elastic_energy
block = '1 2'
[]
[]
(modules/contact/test/tests/mortar_aux_kernels/block-dynamics-aux-fretting-wear-test.i)
starting_point = 0.5e-1
offset = -0.045
[GlobalParams]
displacements = 'disp_x disp_y'
[]
[Mesh]
file = long-bottom-block-1elem-blocks.e
[]
[Variables]
[disp_x]
block = '1 2'
[]
[disp_y]
block = '1 2'
[]
[normal_lm]
block = 3
use_dual = true
# scaling = 1.0e-5
[]
[frictional_lm]
block = 3
use_dual = true
scaling = 1.0e-5
[]
[]
[ICs]
[disp_y]
block = 2
variable = disp_y
value = '${fparse starting_point + offset}'
type = ConstantIC
[]
[]
[Kernels]
[DynamicTensorMechanics]
displacements = 'disp_x disp_y'
generate_output = 'stress_xx stress_yy'
strain = FINITE
block = '1 2'
zeta = 0.04
hht_alpha = 0.0
[]
[inertia_x]
type = InertialForce
variable = disp_x
velocity = vel_x
acceleration = accel_x
beta = 0.25
gamma = 0.5
alpha = 0
eta = 0.0
block = '1 2'
[]
[inertia_y]
type = InertialForce
variable = disp_y
velocity = vel_y
acceleration = accel_y
beta = 0.25
gamma = 0.5
alpha = 0
eta = 0.0
block = '1 2'
[]
[]
[Materials]
[elasticity_2]
type = ComputeIsotropicElasticityTensor
block = '2'
youngs_modulus = 1e6
poissons_ratio = 0.3
[]
[elasticity_1]
type = ComputeIsotropicElasticityTensor
block = '1'
youngs_modulus = 1e8
poissons_ratio = 0.3
[]
[stress]
type = ComputeFiniteStrainElasticStress
block = '1 2'
[]
[strain]
type = ComputeFiniteStrain
block = '1 2'
[]
[density]
type = GenericConstantMaterial
block = '1 2'
prop_names = 'density'
prop_values = '7750'
[]
[]
[AuxVariables]
[worn_depth]
block = '3'
[]
[gap_vel]
block = '3'
[]
[vel_x]
block = '1 2'
[]
[accel_x]
block = '1 2'
[]
[vel_y]
block = '1 2'
[]
[accel_y]
block = '1 2'
[]
[vel_z]
block = '1 2'
[]
[accel_z]
block = '1 2'
[]
[]
[AuxKernels]
[gap_vel]
type = WeightedGapVelAux
variable = gap_vel
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
disp_x = disp_x
disp_y = disp_y
[]
[worn_depth]
type = MortarArchardsLawAux
variable = worn_depth
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
displacements = 'disp_x disp_y'
friction_coefficient = 0.5
energy_wear_coefficient = 1.0e-6
normal_pressure = normal_lm
execute_on = 'TIMESTEP_END'
[]
[accel_x]
type = NewmarkAccelAux
variable = accel_x
displacement = disp_x
velocity = vel_x
beta = 0.25
execute_on = 'linear timestep_end'
[]
[vel_x]
type = NewmarkVelAux
variable = vel_x
acceleration = accel_x
gamma = 0.5
execute_on = 'linear timestep_end'
[]
[accel_y]
type = NewmarkAccelAux
variable = accel_y
displacement = disp_y
velocity = vel_y
beta = 0.25
execute_on = 'linear timestep_end'
[]
[vel_y]
type = NewmarkVelAux
variable = vel_y
acceleration = accel_y
gamma = 0.5
execute_on = 'linear timestep_end'
[]
[]
[UserObjects]
[weighted_vel_uo]
type = LMWeightedVelocitiesUserObject
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
secondary_variable = disp_x
lm_variable_normal = normal_lm
lm_variable_tangential_one = frictional_lm
disp_x = disp_x
disp_y = disp_y
[]
[]
[Constraints]
[weighted_gap_lm]
type = ComputeDynamicFrictionalForceLMMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = normal_lm
disp_x = disp_x
disp_y = disp_y
use_displaced_mesh = true
wear_depth = worn_depth
c = 1e6
c_t = 1e6
normalize_c = true
mu = 0.5
friction_lm = frictional_lm
capture_tolerance = 1.0e-5
newmark_beta = 0.25
newmark_gamma = 0.5
[]
[normal_x]
type = NormalMortarMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = normal_lm
secondary_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
weighted_gap_uo = weighted_vel_uo
[]
[normal_y]
type = NormalMortarMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = normal_lm
secondary_variable = disp_y
component = y
use_displaced_mesh = true
weighted_gap_uo = weighted_vel_uo
[]
[tangential_x]
type = TangentialMortarMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = frictional_lm
secondary_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
weighted_velocities_uo = weighted_vel_uo
[]
[tangential_y]
type = TangentialMortarMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = frictional_lm
secondary_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
weighted_velocities_uo = weighted_vel_uo
[]
[]
[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(4.0 * pi / 4 * t) + ${offset}'
[]
[leftx]
type = FunctionDirichletBC
variable = disp_x
boundary = 50
function = '1e-5 * (cos(32.0 * pi / 4 * t) - 1.0)'
[]
[]
[Executioner]
type = Transient
end_time = 0.5
dt = 0.05
dtmin = .002
solve_type = 'NEWTON'
petsc_options = '-snes_converged_reason -ksp_converged_reason -pc_svd_monitor '
'-snes_linesearch_monitor -snes_ksp_ew'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_type -pc_factor_shift_type -pc_factor_shift_amount'
petsc_options_value = 'lu superlu_dist NONZERO 1e-15'
nl_max_its = 40
l_max_its = 15
line_search = none
snesmf_reuse_base = true
[TimeIntegrator]
type = NewmarkBeta
beta = 0.25
gamma = 0.5
[]
[]
[Debug]
show_var_residual_norms = true
[]
[Outputs]
exodus = true
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Postprocessors]
active = 'contact'
[contact]
type = ContactDOFSetSize
variable = normal_lm
subdomain = '3'
execute_on = 'nonlinear timestep_end'
[]
[]
(modules/contact/test/tests/mortar_aux_kernels/block-dynamics-aux-wear.i)
starting_point = 0.5e-1
offset = -0.05
[GlobalParams]
displacements = 'disp_x disp_y'
[]
[Mesh]
file = long-bottom-block-1elem-blocks.e
[]
[Variables]
[disp_x]
block = '1 2'
[]
[disp_y]
block = '1 2'
[]
[normal_lm]
block = 3
use_dual = true
[]
[]
[ICs]
[disp_y]
block = 2
variable = disp_y
value = '${fparse starting_point + offset}'
type = ConstantIC
[]
[]
[Kernels]
[DynamicTensorMechanics]
displacements = 'disp_x disp_y'
generate_output = 'stress_xx stress_yy'
strain = FINITE
block = '1 2'
zeta = 1.0
hht_alpha = 0.0
[]
[inertia_x]
type = InertialForce
variable = disp_x
velocity = vel_x
acceleration = accel_x
beta = 0.25
gamma = 0.5
alpha = 0
eta = 0.0
block = '1 2'
[]
[inertia_y]
type = InertialForce
variable = disp_y
velocity = vel_y
acceleration = accel_y
beta = 0.25
gamma = 0.5
alpha = 0
eta = 0.0
block = '1 2'
[]
[]
[Materials]
[elasticity_2]
type = ComputeIsotropicElasticityTensor
block = '2'
youngs_modulus = 1e6
poissons_ratio = 0.3
[]
[elasticity_1]
type = ComputeIsotropicElasticityTensor
block = '1'
youngs_modulus = 1e8
poissons_ratio = 0.3
[]
[stress]
type = ComputeFiniteStrainElasticStress
block = '1 2'
[]
[strain]
type = ComputeFiniteStrain
block = '1 2'
[]
[density]
type = GenericConstantMaterial
block = '1 2'
prop_names = 'density'
prop_values = '7750'
[]
[]
[AuxVariables]
[worn_depth]
block = '3'
[]
[vel_x]
block = '1 2'
[]
[accel_x]
block = '1 2'
[]
[vel_y]
block = '1 2'
[]
[accel_y]
block = '1 2'
[]
[vel_z]
block = '1 2'
[]
[accel_z]
block = '1 2'
[]
[]
[AuxKernels]
[worn_depth]
type = MortarArchardsLawAux
variable = worn_depth
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
displacements = 'disp_x disp_y'
friction_coefficient = 0.5
energy_wear_coefficient = 1.0
normal_pressure = normal_lm
[]
[accel_x]
type = NewmarkAccelAux
variable = accel_x
displacement = disp_x
velocity = vel_x
beta = 0.25
execute_on = 'linear timestep_end'
[]
[vel_x]
type = NewmarkVelAux
variable = vel_x
acceleration = accel_x
gamma = 0.5
execute_on = 'linear timestep_end'
[]
[accel_y]
type = NewmarkAccelAux
variable = accel_y
displacement = disp_y
velocity = vel_y
beta = 0.25
execute_on = 'linear timestep_end'
[]
[vel_y]
type = NewmarkVelAux
variable = vel_y
acceleration = accel_y
gamma = 0.5
execute_on = 'linear timestep_end'
[]
[]
[UserObjects]
[weighted_gap_uo]
type = LMWeightedGapUserObject
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
lm_variable = normal_lm
disp_x = disp_x
disp_y = disp_y
[]
[]
[Constraints]
[weighted_gap_lm]
type = ComputeDynamicWeightedGapLMMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = normal_lm
disp_x = disp_x
disp_y = disp_y
use_displaced_mesh = true
c = 1e4
capture_tolerance = 1.0e-5
newmark_beta = 0.25
newmark_gamma = 0.5
[]
[normal_x]
type = NormalMortarMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = normal_lm
secondary_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
weighted_gap_uo = weighted_gap_uo
[]
[normal_y]
type = NormalMortarMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = normal_lm
secondary_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
weighted_gap_uo = weighted_gap_uo
[]
[]
[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(8.0 * pi / 4 * t) + ${offset}'
[]
[leftx]
type = FunctionDirichletBC
variable = disp_x
boundary = 50
function = '1e-2 * t'
[]
[]
[Executioner]
type = Transient
end_time = 0.675
dt = 0.075
dtmin = .075
solve_type = 'NEWTON'
petsc_options = '-snes_converged_reason -ksp_converged_reason -pc_svd_monitor '
'-snes_linesearch_monitor -snes_ksp_ew'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_type -pc_factor_shift_type -pc_factor_shift_amount '
petsc_options_value = 'lu superlu_dist NONZERO 1e-15'
nl_max_its = 30
line_search = 'l2'
snesmf_reuse_base = false
[TimeIntegrator]
type = NewmarkBeta
beta = 0.25
gamma = 0.5
[]
[]
[Debug]
show_var_residual_norms = true
[]
[Outputs]
exodus = true
checkpoint = 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/solid_mechanics/test/tests/dynamics/prescribed_displacement/3D_QStatic_1_Ramped_Displacement_ti.i)
# One 3D element under ramped displacement loading.
#
# loading:
# time : 0.0 0.1 0.2 0.3
# disp : 0.0 0.0 -0.01 -0.01
# This displacement loading is applied using the PresetDisplacement boundary condition.
# Here, the given displacement time history is converted to an acceleration
# time history using Backward Euler time differentiation. Then, the resulting
# acceleration is integrated using Newmark time integration to obtain a
# displacement time history which is then applied to the boundary.
# This is done because if the displacement is applied using Dirichlet BC, the
# resulting acceleration is very noisy.
# Boundaries:
# x = 0 left
# x = 1 right
# y = 0 bottom
# y = 1 top
# z = 0 back
# z = 1 front
# Result: The displacement at the top node in the z direction should match
# the prescribed displacement. Also, the z acceleration should
# be two triangular pulses, one peaking at 0.1 and another peaking at
# 0.2.
[Mesh]
type = GeneratedMesh
dim = 3 # Dimension of the mesh
nx = 1 # Number of elements in the x direction
ny = 1 # Number of elements in the y direction
nz = 1 # Number of elements in the z direction
xmin = 0.0
xmax = 1
ymin = 0.0
ymax = 1
zmin = 0.0
zmax = 1
allow_renumbering = false # So NodalVariableValue can index by id
[]
[Variables] # variables that are solved
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[AuxVariables] # variables that are calculated for output
[./accel_x]
[../]
[./vel_x]
[../]
[./accel_y]
[../]
[./vel_y]
[../]
[./accel_z]
[../]
[./vel_z]
[../]
[./stress_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zz]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_zz]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Kernels]
[./DynamicSolidMechanics] # zeta*K*vel + K * disp
displacements = 'disp_x disp_y disp_z'
stiffness_damping_coefficient = 0.000025
[../]
[./inertia_x] # M*accel + eta*M*vel
type = InertialForce
variable = disp_x
eta = 19.63
[../]
[./inertia_y]
type = InertialForce
variable = disp_y
eta = 19.63
[../]
[./inertia_z]
type = InertialForce
variable = disp_z
eta = 19.63
[../]
[]
[AuxKernels]
[./accel_x] # These auxkernels are only to check output
type = TestNewmarkTI
displacement = disp_x
variable = accel_x
first = false
[../]
[./accel_y]
type = TestNewmarkTI
displacement = disp_y
variable = accel_y
first = false
[../]
[./accel_z]
type = TestNewmarkTI
displacement = disp_z
variable = accel_z
first = false
[../]
[./vel_x]
type = TestNewmarkTI
displacement = disp_x
variable = vel_x
[../]
[./vel_y]
type = TestNewmarkTI
displacement = disp_y
variable = vel_y
[../]
[./vel_z]
type = TestNewmarkTI
displacement = disp_z
variable = vel_z
[../]
[./stress_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
[../]
[./strain_xx]
type = RankTwoAux
rank_two_tensor = total_strain
variable = strain_xx
index_i = 0
index_j = 0
[../]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[../]
[./strain_yy]
type = RankTwoAux
rank_two_tensor = total_strain
variable = strain_yy
index_i = 1
index_j = 1
[../]
[./stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
[../]
[./strain_zz]
type = RankTwoAux
rank_two_tensor = total_strain
variable = strain_zz
index_i = 2
index_j = 2
[../]
[]
[Functions]
[./displacement_front]
type = PiecewiseLinear
data_file = 'displacement.csv'
format = columns
[../]
[]
[BCs]
[./Preset_displacement]
type = PresetDisplacement
variable = disp_z
function = displacement_front
boundary = front
beta = 0.25
velocity = vel_z
acceleration = accel_z
[../]
[./anchor_x]
type = DirichletBC
variable = disp_x
boundary = left
value = 0.0
[../]
[./anchor_y]
type = DirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[../]
[./anchor_z]
type = DirichletBC
variable = disp_z
boundary = back
value = 0.0
[../]
[]
[Materials]
[./elasticity_tensor]
youngs_modulus = 325e6 #Pa
poissons_ratio = 0.3
type = ComputeIsotropicElasticityTensor
block = 0
[../]
[./strain]
#Computes the strain, assuming small strains
type = ComputeSmallStrain
block = 0
displacements = 'disp_x disp_y disp_z'
[../]
[./stress]
#Computes the stress, using linear elasticity
type = ComputeLinearElasticStress
block = 0
[../]
[./density]
type = GenericConstantMaterial
block = 0
prop_names = density
prop_values = 2000 #kg/m3
[../]
[]
[Executioner]
type = Transient
start_time = 0
end_time = 3.0
l_tol = 1e-6
nl_rel_tol = 1e-6
nl_abs_tol = 1e-6
dt = 0.1
timestep_tolerance = 1e-6
# Time integrator scheme
scheme = "newmark-beta"
[]
[Postprocessors] # These quantites are printed to a csv file at every time step
[./_dt]
type = TimestepSize
[../]
[./accel_6x]
type = NodalVariableValue
nodeid = 6
variable = accel_x
[../]
[./accel_6y]
type = NodalVariableValue
nodeid = 6
variable = accel_y
[../]
[./accel_6z]
type = NodalVariableValue
nodeid = 6
variable = accel_z
[../]
[./vel_6x]
type = NodalVariableValue
nodeid = 6
variable = vel_x
[../]
[./vel_6y]
type = NodalVariableValue
nodeid = 6
variable = vel_y
[../]
[./vel_6z]
type = NodalVariableValue
nodeid = 6
variable = vel_z
[../]
[./disp_6x]
type = NodalVariableValue
nodeid = 6
variable = disp_x
[../]
[./disp_6y]
type = NodalVariableValue
nodeid = 6
variable = disp_y
[../]
[./disp_6z]
type = NodalVariableValue
nodeid = 6
variable = disp_z
[../]
[]
[Outputs]
file_base = "3D_QStatic_1_Ramped_Displacement_out"
exodus = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/dynamics/wave_1D/wave_rayleigh_hht.i)
# Wave propogation in 1D using HHT time integration in the presence of Rayleigh damping
#
# The test is for an 1D bar element of length 4m fixed on one end
# with a sinusoidal pulse dirichlet boundary condition applied to the other end.
# alpha, beta and gamma are HHT time integration parameters
# eta and zeta are mass dependent and stiffness dependent Rayleigh damping
# coefficients, respectively.
# The equation of motion in terms of matrices is:
#
# M*accel + (eta*M+zeta*K)*((1+alpha)*vel-alpha*vel_old)
# +(1+alpha)*K*disp-alpha*K*disp_old = 0
#
# Here M is the mass matrix, K is the stiffness matrix
#
# The displacement at the first, second, third and fourth node at t = 0.1 are
# -7.787499960311491942e-02, 1.955566679096475483e-02 and -4.634888180231294501e-03, respectively.
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 4
nz = 1
xmin = 0.0
xmax = 0.1
ymin = 0.0
ymax = 4.0
zmin = 0.0
zmax = 0.1
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[AuxVariables]
[./vel_x]
[../]
[./accel_x]
[../]
[./vel_y]
[../]
[./accel_y]
[../]
[./vel_z]
[../]
[./accel_z]
[../]
[]
[Kernels]
[./DynamicSolidMechanics]
displacements = 'disp_x disp_y disp_z'
hht_alpha = -0.3
stiffness_damping_coefficient = 0.1
[../]
[./inertia_x]
type = InertialForce
variable = disp_x
velocity = vel_x
acceleration = accel_x
beta = 0.422
gamma = 0.8
eta=0.1
alpha = -0.3
[../]
[./inertia_y]
type = InertialForce
variable = disp_y
velocity = vel_y
acceleration = accel_y
beta = 0.422
gamma = 0.8
eta=0.1
alpha = -0.3
[../]
[./inertia_z]
type = InertialForce
variable = disp_z
velocity = vel_z
acceleration = accel_z
beta = 0.422
gamma = 0.8
eta = 0.1
alpha = -0.3
[../]
[]
[AuxKernels]
[./accel_x]
type = NewmarkAccelAux
variable = accel_x
displacement = disp_x
velocity = vel_x
beta = 0.422
execute_on = timestep_end
[../]
[./vel_x]
type = NewmarkVelAux
variable = vel_x
acceleration = accel_x
gamma = 0.8
execute_on = timestep_end
[../]
[./accel_y]
type = NewmarkAccelAux
variable = accel_y
displacement = disp_y
velocity = vel_y
beta = 0.422
execute_on = timestep_end
[../]
[./vel_y]
type = NewmarkVelAux
variable = vel_y
acceleration = accel_y
gamma = 0.8
execute_on = timestep_end
[../]
[./accel_z]
type = NewmarkAccelAux
variable = accel_z
displacement = disp_z
velocity = vel_z
beta = 0.422
execute_on = timestep_end
[../]
[./vel_z]
type = NewmarkVelAux
variable = vel_z
acceleration = accel_z
gamma = 0.8
execute_on = timestep_end
[../]
[]
[BCs]
[./top_y]
type = DirichletBC
variable = disp_y
boundary = top
value=0.0
[../]
[./top_x]
type = DirichletBC
variable = disp_x
boundary = top
value=0.0
[../]
[./top_z]
type = DirichletBC
variable = disp_z
boundary = top
value=0.0
[../]
[./right_x]
type = DirichletBC
variable = disp_x
boundary = right
value=0.0
[../]
[./right_z]
type = DirichletBC
variable = disp_z
boundary = right
value=0.0
[../]
[./left_x]
type = DirichletBC
variable = disp_x
boundary = left
value=0.0
[../]
[./left_z]
type = DirichletBC
variable = disp_z
boundary = left
value=0.0
[../]
[./front_x]
type = DirichletBC
variable = disp_x
boundary = front
value=0.0
[../]
[./front_z]
type = DirichletBC
variable = disp_z
boundary = front
value=0.0
[../]
[./back_x]
type = DirichletBC
variable = disp_x
boundary = back
value=0.0
[../]
[./back_z]
type = DirichletBC
variable = disp_z
boundary = back
value=0.0
[../]
[./bottom_x]
type = DirichletBC
variable = disp_x
boundary = bottom
value=0.0
[../]
[./bottom_z]
type = DirichletBC
variable = disp_z
boundary = bottom
value=0.0
[../]
[./bottom_y]
type = FunctionDirichletBC
variable = disp_y
boundary = bottom
function = displacement_bc
[../]
[]
[Materials]
[./Elasticity_tensor]
type = ComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
C_ijkl = '1 0'
[../]
[./strain]
type = ComputeSmallStrain
block = 0
displacements = 'disp_x disp_y disp_z'
[../]
[./stress]
type = ComputeLinearElasticStress
block = 0
[../]
[./density]
type = GenericConstantMaterial
block = 0
prop_names = 'density'
prop_values = '1'
[../]
[]
[Executioner]
type = Transient
start_time = 0
end_time = 6.0
l_tol = 1e-12
nl_rel_tol = 1e-12
dt = 0.1
[]
[Functions]
[./displacement_bc]
type = PiecewiseLinear
data_file = 'sine_wave.csv'
format = columns
[../]
[]
[Postprocessors]
[./_dt]
type = TimestepSize
[../]
[./disp_1]
type = NodalVariableValue
nodeid = 1
variable = disp_y
[../]
[./disp_2]
type = NodalVariableValue
nodeid = 3
variable = disp_y
[../]
[./disp_3]
type = NodalVariableValue
nodeid = 10
variable = disp_y
[../]
[./disp_4]
type = NodalVariableValue
nodeid = 14
variable = disp_y
[../]
[]
[Outputs]
exodus = true
perf_graph = true
[]
(modules/contact/test/tests/mortar_aux_kernels/block-dynamics-aux-fretting-wear-test-projection_angle.i)
starting_point = 0.5e-1
offset = -0.045
[GlobalParams]
displacements = 'disp_x disp_y'
[]
[Mesh]
file = long-bottom-block-1elem-blocks-multiple-projections-lowerd.e
[]
[Variables]
[disp_x]
block = '1 2'
[]
[disp_y]
block = '1 2'
[]
[normal_lm]
block = 3
use_dual = true
# scaling = 1.0e-5
[]
[frictional_lm]
block = 3
use_dual = true
# scaling = 1.0e-5
[]
[]
[ICs]
[disp_y]
block = 2
variable = disp_y
value = '${fparse starting_point + offset}'
type = ConstantIC
[]
[]
[Kernels]
[DynamicTensorMechanics]
displacements = 'disp_x disp_y'
generate_output = 'stress_xx stress_yy'
strain = FINITE
block = '1 2'
zeta = 1.0
hht_alpha = 0.0
[]
[inertia_x]
type = InertialForce
variable = disp_x
velocity = vel_x
acceleration = accel_x
beta = 0.25
gamma = 0.5
alpha = 0
eta = 0.0
block = '1 2'
[]
[inertia_y]
type = InertialForce
variable = disp_y
velocity = vel_y
acceleration = accel_y
beta = 0.25
gamma = 0.5
alpha = 0
eta = 0.0
block = '1 2'
[]
[]
[Materials]
[elasticity_2]
type = ComputeIsotropicElasticityTensor
block = '2'
youngs_modulus = 1e6
poissons_ratio = 0.3
[]
[elasticity_1]
type = ComputeIsotropicElasticityTensor
block = '1'
youngs_modulus = 1e8
poissons_ratio = 0.3
[]
[stress]
type = ComputeFiniteStrainElasticStress
block = '1 2'
[]
[strain]
type = ComputeFiniteStrain
block = '1 2'
[]
[density]
type = GenericConstantMaterial
block = '1 2'
prop_names = 'density'
prop_values = '7750'
[]
[]
[AuxVariables]
[worn_depth]
block = '3'
[]
[gap_vel]
block = '3'
[]
[vel_x]
block = '1 2'
[]
[accel_x]
block = '1 2'
[]
[vel_y]
block = '1 2'
[]
[accel_y]
block = '1 2'
[]
[vel_z]
block = '1 2'
[]
[accel_z]
block = '1 2'
[]
[]
[AuxKernels]
[gap_vel]
type = WeightedGapVelAux
variable = gap_vel
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
disp_x = disp_x
disp_y = disp_y
debug_mesh = true
minimum_projection_angle = 0.0
[]
[worn_depth]
type = MortarArchardsLawAux
variable = worn_depth
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
displacements = 'disp_x disp_y'
friction_coefficient = 0.5
energy_wear_coefficient = 1.0e-6
normal_pressure = normal_lm
execute_on = 'TIMESTEP_END'
debug_mesh = true
minimum_projection_angle = 0.0
[]
[accel_x]
type = NewmarkAccelAux
variable = accel_x
displacement = disp_x
velocity = vel_x
beta = 0.25
execute_on = 'linear timestep_end'
[]
[vel_x]
type = NewmarkVelAux
variable = vel_x
acceleration = accel_x
gamma = 0.5
execute_on = 'linear timestep_end'
[]
[accel_y]
type = NewmarkAccelAux
variable = accel_y
displacement = disp_y
velocity = vel_y
beta = 0.25
execute_on = 'linear timestep_end'
[]
[vel_y]
type = NewmarkVelAux
variable = vel_y
acceleration = accel_y
gamma = 0.5
execute_on = 'linear timestep_end'
[]
[]
[UserObjects]
[weighted_vel_uo]
type = LMWeightedVelocitiesUserObject
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
secondary_variable = disp_x
lm_variable_normal = normal_lm
lm_variable_tangential_one = frictional_lm
disp_x = disp_x
disp_y = disp_y
debug_mesh = true
[]
[]
[Constraints]
[weighted_gap_lm]
type = ComputeDynamicFrictionalForceLMMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = normal_lm
disp_x = disp_x
disp_y = disp_y
use_displaced_mesh = true
wear_depth = worn_depth
c = 1e6
c_t = 1e6
normalize_c = true
mu = 0.5
friction_lm = frictional_lm
capture_tolerance = 1.0e-5
newmark_beta = 0.25
newmark_gamma = 0.5
debug_mesh = true
minimum_projection_angle = 0.0
[]
[normal_x]
type = NormalMortarMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = normal_lm
secondary_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
debug_mesh = true
minimum_projection_angle = 0.0
weighted_gap_uo = weighted_vel_uo
[]
[normal_y]
type = NormalMortarMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = normal_lm
secondary_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
debug_mesh = true
minimum_projection_angle = 0.0
weighted_gap_uo = weighted_vel_uo
[]
[tangential_x]
type = TangentialMortarMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = frictional_lm
secondary_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
debug_mesh = true
minimum_projection_angle = 0.0
weighted_velocities_uo = weighted_vel_uo
[]
[tangential_y]
type = TangentialMortarMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = frictional_lm
secondary_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
debug_mesh = true
minimum_projection_angle = 0.0
weighted_velocities_uo = weighted_vel_uo
[]
[]
[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(4.0 * pi / 4 * t) + ${offset}'
[]
[leftx]
type = FunctionDirichletBC
variable = disp_x
boundary = 50
function = '1e-2 * (cos(32.0 * pi / 4 * t) - 1.0)'
[]
[]
[Executioner]
type = Transient
end_time = 0.0
dt = 0.05
dtmin = .002
solve_type = 'NEWTON'
petsc_options = '-snes_converged_reason -ksp_converged_reason -pc_svd_monitor '
'-snes_linesearch_monitor -snes_ksp_ew'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_type -pc_factor_shift_type -pc_factor_shift_amount'
petsc_options_value = 'lu superlu_dist NONZERO 1e-15'
nl_max_its = 40
l_max_its = 15
line_search = 'l2'
snesmf_reuse_base = true
[TimeIntegrator]
type = NewmarkBeta
beta = 0.25
gamma = 0.5
[]
[]
[Debug]
show_var_residual_norms = true
[]
[Outputs]
exodus = true
checkpoint = 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/mortar_dynamics/block-dynamics-friction.i)
starting_point = 2e-1
offset = -0.19
[GlobalParams]
displacements = 'disp_x disp_y'
[]
[Mesh]
file = long-bottom-block-1elem-blocks.e
allow_renumbering = false
[]
[Variables]
[disp_x]
block = '1 2'
[]
[disp_y]
block = '1 2'
[]
[mechanical_normal_lm]
block = 3
use_dual = true
[]
[mechanical_tangential_lm]
block = 3
use_dual = true
[]
[]
[ICs]
[disp_y]
block = 2
variable = disp_y
value = '${fparse starting_point + offset}'
type = ConstantIC
[]
[]
[Kernels]
[DynamicTensorMechanics]
displacements = 'disp_x disp_y'
generate_output = 'stress_xx stress_yy'
strain = FINITE
block = '1 2'
stiffness_damping_coefficient = 0.05
hht_alpha = 0.0
[]
[inertia_x]
type = InertialForce
variable = disp_x
velocity = vel_x
acceleration = accel_x
beta = 0.25
gamma = 0.5
alpha = 0
eta = 0.0
block = '1 2'
[]
[inertia_y]
type = InertialForce
variable = disp_y
velocity = vel_y
acceleration = accel_y
beta = 0.25
gamma = 0.5
alpha = 0
eta = 0.0
block = '1 2'
[]
[]
[Materials]
[elasticity_2]
type = ComputeIsotropicElasticityTensor
block = '2'
youngs_modulus = 1e6
poissons_ratio = 0.3
[]
[elasticity_1]
type = ComputeIsotropicElasticityTensor
block = '1'
youngs_modulus = 1e8
poissons_ratio = 0.3
[]
[stress]
type = ComputeFiniteStrainElasticStress
block = '1 2'
[]
[strain]
type = ComputeFiniteStrain
block = '1 2'
[]
[density]
type = GenericConstantMaterial
block = '1 2'
prop_names = 'density'
prop_values = '7750'
[]
[]
[AuxVariables]
[vel_x]
block = '1 2'
[]
[accel_x]
block = '1 2'
[]
[vel_y]
block = '1 2'
[]
[accel_y]
block = '1 2'
[]
[vel_z]
block = '1 2'
[]
[accel_z]
block = '1 2'
[]
[gap]
block = 3
[]
[]
[AuxKernels]
[gap]
type = WeightedGapAux
variable = gap
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
use_displaced_mesh = true
[]
[accel_x]
type = NewmarkAccelAux
variable = accel_x
displacement = disp_x
velocity = vel_x
beta = 0.25
execute_on = 'LINEAR timestep_end'
[]
[vel_x]
type = NewmarkVelAux
variable = vel_x
acceleration = accel_x
gamma = 0.5
execute_on = 'LINEAR timestep_end'
[]
[accel_y]
type = NewmarkAccelAux
variable = accel_y
displacement = disp_y
velocity = vel_y
beta = 0.25
execute_on = 'LINEAR timestep_end'
[]
[vel_y]
type = NewmarkVelAux
variable = vel_y
acceleration = accel_y
gamma = 0.5
execute_on = 'LINEAR timestep_end'
[]
[]
# User object provides the contact force (e.g. LM)
# for the application of the generalized force
[UserObjects]
[weighted_vel_uo]
type = LMWeightedVelocitiesUserObject
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
lm_variable_normal = mechanical_normal_lm
lm_variable_tangential_one = mechanical_tangential_lm
secondary_variable = disp_x
disp_x = disp_x
disp_y = disp_y
[]
[]
[Constraints]
[weighted_gap_lm]
type = ComputeDynamicFrictionalForceLMMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = mechanical_normal_lm
friction_lm = mechanical_tangential_lm
disp_x = disp_x
disp_y = disp_y
use_displaced_mesh = true
c = 1e4
c_t = 1e4
mu = 0.5
newmark_beta = 0.25
newmark_gamma = 0.5
capture_tolerance = 1.0e-5
[]
[normal_x]
type = NormalMortarMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = mechanical_normal_lm
secondary_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
weighted_gap_uo = weighted_vel_uo
[]
[normal_y]
type = NormalMortarMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = mechanical_normal_lm
secondary_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
weighted_gap_uo = weighted_vel_uo
[]
[tangential_x]
type = TangentialMortarMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = mechanical_tangential_lm
secondary_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
weighted_velocities_uo = weighted_vel_uo
[]
[tangential_y]
type = TangentialMortarMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = mechanical_tangential_lm
secondary_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
weighted_velocities_uo = weighted_vel_uo
[]
[]
[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 / 4 * t) + ${offset}'
[]
[leftx]
type = FunctionDirichletBC
variable = disp_x
boundary = 30 # 50
function = '0' # '1e-2*t'
[]
[]
[Executioner]
type = Transient
end_time = 75
dt = 0.05
dtmin = .005
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'
nl_max_its = 50
line_search = 'none'
snesmf_reuse_base = false
[TimeIntegrator]
type = NewmarkBeta
beta = 0.25
gamma = 0.5
[]
[]
[Debug]
show_var_residual_norms = true
[]
[Outputs]
exodus = true
csv = true
checkpoint = true
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[VectorPostprocessors]
[mechanical_tangential_lm]
type = NodalValueSampler
block = '3'
variable = mechanical_tangential_lm
sort_by = 'x'
execute_on = TIMESTEP_END
[]
[]
(modules/solid_mechanics/test/tests/dynamics/wave_1D/wave_newmark.i)
# Wave propogation in 1D using Newmark time integration
#
# The test is for an 1D bar element of length 4m fixed on one end
# with a sinusoidal pulse dirichlet boundary condition applied to the other end.
# beta and gamma are Newmark time integration parameters
# The equation of motion in terms of matrices is:
#
# M*accel + K*disp = 0
#
# Here M is the mass matrix, K is the stiffness matrix
#
# This equation is equivalent to:
#
# density*accel + Div Stress= 0
#
# The first term on the left is evaluated using the Inertial force kernel
# The last term on the left is evaluated using StressDivergenceTensors
#
# The displacement at the second, third and fourth node at t = 0.1 are
# -8.021501116638234119e-02, 2.073994362053969628e-02 and -5.045094181261772920e-03, respectively
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 4
nz = 1
xmin = 0.0
xmax = 0.1
ymin = 0.0
ymax = 4.0
zmin = 0.0
zmax = 0.1
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[AuxVariables]
[./vel_x]
[../]
[./accel_x]
[../]
[./vel_y]
[../]
[./accel_y]
[../]
[./vel_z]
[../]
[./accel_z]
[../]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_yy]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Kernels]
[SolidMechanics]
displacements = 'disp_x disp_y disp_z'
[../]
[./inertia_x]
type = InertialForce
variable = disp_x
velocity = vel_x
acceleration = accel_x
beta = 0.3025
gamma = 0.6
eta=0.0
[../]
[./inertia_y]
type = InertialForce
variable = disp_y
velocity = vel_y
acceleration = accel_y
beta = 0.3025
gamma = 0.6
eta=0.0
[../]
[./inertia_z]
type = InertialForce
variable = disp_z
velocity = vel_z
acceleration = accel_z
beta = 0.3025
gamma = 0.6
eta = 0.0
[../]
[]
[AuxKernels]
[./accel_x]
type = NewmarkAccelAux
variable = accel_x
displacement = disp_x
velocity = vel_x
beta = 0.3025
execute_on = timestep_end
[../]
[./vel_x]
type = NewmarkVelAux
variable = vel_x
acceleration = accel_x
gamma = 0.6
execute_on = timestep_end
[../]
[./accel_y]
type = NewmarkAccelAux
variable = accel_y
displacement = disp_y
velocity = vel_y
beta = 0.3025
execute_on = timestep_end
[../]
[./vel_y]
type = NewmarkVelAux
variable = vel_y
acceleration = accel_y
gamma = 0.6
execute_on = timestep_end
[../]
[./accel_z]
type = NewmarkAccelAux
variable = accel_z
displacement = disp_z
velocity = vel_z
beta = 0.3025
execute_on = timestep_end
[../]
[./vel_z]
type = NewmarkVelAux
variable = vel_z
acceleration = accel_z
gamma = 0.6
execute_on = timestep_end
[../]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 0
index_j = 1
[../]
[./strain_yy]
type = RankTwoAux
rank_two_tensor = total_strain
variable = strain_yy
index_i = 0
index_j = 1
[../]
[]
[BCs]
[./top_y]
type = DirichletBC
variable = disp_y
boundary = top
value=0.0
[../]
[./top_x]
type = DirichletBC
variable = disp_x
boundary = top
value=0.0
[../]
[./top_z]
type = DirichletBC
variable = disp_z
boundary = top
value=0.0
[../]
[./right_x]
type = DirichletBC
variable = disp_x
boundary = right
value=0.0
[../]
[./right_z]
type = DirichletBC
variable = disp_z
boundary = right
value=0.0
[../]
[./left_x]
type = DirichletBC
variable = disp_x
boundary = left
value=0.0
[../]
[./left_z]
type = DirichletBC
variable = disp_z
boundary = left
value=0.0
[../]
[./front_x]
type = DirichletBC
variable = disp_x
boundary = front
value=0.0
[../]
[./front_z]
type = DirichletBC
variable = disp_z
boundary = front
value=0.0
[../]
[./back_x]
type = DirichletBC
variable = disp_x
boundary = back
value=0.0
[../]
[./back_z]
type = DirichletBC
variable = disp_z
boundary = back
value=0.0
[../]
[./bottom_x]
type = DirichletBC
variable = disp_x
boundary = bottom
value=0.0
[../]
[./bottom_z]
type = DirichletBC
variable = disp_z
boundary = bottom
value=0.0
[../]
[./bottom_y]
type = FunctionDirichletBC
variable = disp_y
boundary = bottom
function = displacement_bc
[../]
[]
[Materials]
[./Elasticity_tensor]
type = ComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
C_ijkl = '1 0'
[../]
[./strain]
type = ComputeSmallStrain
block = 0
displacements = 'disp_x disp_y disp_z'
[../]
[./stress]
type = ComputeLinearElasticStress
block = 0
[../]
[./density]
type = GenericConstantMaterial
block = 0
prop_names = 'density'
prop_values = '1'
[../]
[]
[Executioner]
type = Transient
start_time = 0
end_time = 6.0
l_tol = 1e-12
nl_rel_tol = 1e-12
dt = 0.1
[]
[Functions]
[./displacement_bc]
type = PiecewiseLinear
data_file = 'sine_wave.csv'
format = columns
[../]
[]
[Postprocessors]
[./_dt]
type = TimestepSize
[../]
[./disp_1]
type = NodalVariableValue
nodeid = 1
variable = disp_y
[../]
[./disp_2]
type = NodalVariableValue
nodeid = 3
variable = disp_y
[../]
[./disp_3]
type = NodalVariableValue
nodeid = 10
variable = disp_y
[../]
[./disp_4]
type = NodalVariableValue
nodeid = 14
variable = disp_y
[../]
[]
[Outputs]
exodus = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/dynamics/rayleigh_damping/rayleigh_hht_ti.i)
# Test for rayleigh damping implemented using HHT time integration
#
# The test is for an 1D bar element of unit length fixed on one end
# with a ramped pressure boundary condition applied to the other end.
# zeta and eta correspond to the stiffness and mass proportional rayleigh damping
# alpha, beta and gamma are HHT time integration parameters
# The equation of motion in terms of matrices is:
#
# M*accel + (eta*M+zeta*K)*[(1+alpha)vel-alpha vel_old]
# + alpha*(K*disp - K*disp_old) + K*disp = P(t+alpha dt)*Area
#
# Here M is the mass matrix, K is the stiffness matrix, P is the applied pressure
#
# This equation is equivalent to:
#
# density*accel + eta*density*[(1+alpha)vel-alpha vel_old]
# + zeta*[(1+alpha)*d/dt(Div stress)- alpha*d/dt(Div stress_old)]
# + alpha *(Div stress - Div stress_old) +Div Stress= P(t+alpha dt)
#
# The first two terms on the left are evaluated using the Inertial force kernel
# The next three terms on the left involving zeta and alpha are evaluated using
# the DynamicStressDivergenceTensors Kernel
# The residual due to Pressure is evaluated using Pressure boundary condition
#
# The system will come to steady state slowly after the pressure becomes constant.
# Alpha equal to zero will result in Newmark integration.
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = 0.0
xmax = 0.1
ymin = 0.0
ymax = 1.0
zmin = 0.0
zmax = 0.1
[]
[Variables]
[disp_x]
[]
[disp_y]
[]
[disp_z]
[]
[]
[AuxVariables]
[vel_x]
[]
[accel_x]
[]
[vel_y]
[]
[accel_y]
[]
[vel_z]
[]
[accel_z]
[]
[stress_yy]
order = CONSTANT
family = MONOMIAL
[]
[strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[]
[Kernels]
[DynamicSolidMechanics]
displacements = 'disp_x disp_y disp_z'
stiffness_damping_coefficient = 0.1
hht_alpha = 0.11
[]
[inertia_x]
type = InertialForce
variable = disp_x
eta = 0.1
alpha = 0.11
[]
[inertia_y]
type = InertialForce
variable = disp_y
eta = 0.1
alpha = 0.11
[]
[inertia_z]
type = InertialForce
variable = disp_z
eta = 0.1
alpha = 0.11
[]
[]
[AuxKernels]
[accel_x] # These auxkernels are only to check output
type = TestNewmarkTI
displacement = disp_x
variable = accel_x
first = false
[]
[accel_y]
type = TestNewmarkTI
displacement = disp_y
variable = accel_y
first = false
[]
[accel_z]
type = TestNewmarkTI
displacement = disp_z
variable = accel_z
first = false
[]
[vel_x]
type = TestNewmarkTI
displacement = disp_x
variable = vel_x
[]
[vel_y]
type = TestNewmarkTI
displacement = disp_y
variable = vel_y
[]
[vel_z]
type = TestNewmarkTI
displacement = disp_z
variable = vel_z
[]
[stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[]
[strain_yy]
type = RankTwoAux
rank_two_tensor = total_strain
variable = strain_yy
index_i = 1
index_j = 1
[]
[]
[BCs]
[top_y]
type = DirichletBC
variable = disp_y
boundary = top
value = 0.0
[]
[top_x]
type = DirichletBC
variable = disp_x
boundary = top
value = 0.0
[]
[top_z]
type = DirichletBC
variable = disp_z
boundary = top
value = 0.0
[]
[bottom_x]
type = DirichletBC
variable = disp_x
boundary = bottom
value = 0.0
[]
[bottom_z]
type = DirichletBC
variable = disp_z
boundary = bottom
value = 0.0
[]
[Pressure]
[Side1]
boundary = bottom
function = pressure
displacements = 'disp_x disp_y disp_z'
factor = 1
hht_alpha = 0.11
[]
[]
[]
[Materials]
[Elasticity_tensor]
type = ComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
C_ijkl = '210e9 0'
[]
[strain]
type = ComputeSmallStrain
block = 0
displacements = 'disp_x disp_y disp_z'
[]
[stress]
type = ComputeLinearElasticStress
block = 0
[]
[density]
type = GenericConstantMaterial
block = 0
prop_names = 'density'
prop_values = '7750'
[]
[]
[Executioner]
type = Transient
start_time = 0
end_time = 2
dt = 0.1
# Time integrator scheme
scheme = "newmark-beta"
[]
[Functions]
[pressure]
type = PiecewiseLinear
x = '0.0 0.1 0.2 1.0 2.0 5.0'
y = '0.0 0.1 0.2 1.0 1.0 1.0'
scale_factor = 1e9
[]
[]
[Postprocessors]
[_dt]
type = TimestepSize
[]
[disp]
type = NodalExtremeValue
variable = disp_y
boundary = bottom
[]
[vel]
type = NodalExtremeValue
variable = vel_y
boundary = bottom
[]
[accel]
type = NodalExtremeValue
variable = accel_y
boundary = bottom
[]
[stress_yy]
type = ElementAverageValue
variable = stress_yy
[]
[strain_yy]
type = ElementAverageValue
variable = strain_yy
[]
[]
[Outputs]
file_base = 'rayleigh_hht_out'
exodus = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/dynamics/rayleigh_damping/rayleigh_newmark_material_dependent.i)
# Test for rayleigh damping implemented using Newmark time integration
# The test is for an 1D bar element of unit length fixed on one end
# with a ramped pressure boundary condition applied to the other end.
# zeta and eta correspond to the stiffness and mass proportional rayleigh damping
# beta and gamma are Newmark time integration parameters
# The equation of motion in terms of matrices is:
#
# M*accel + eta*M*vel + zeta*K*vel + K*disp = P*Area
#
# Here M is the mass matrix, K is the stiffness matrix, P is the applied pressure
#
# This equation is equivalent to:
#
# density*accel + eta*density*vel + zeta*d/dt(Div stress) + Div stress = P
#
# The first two terms on the left are evaluated using the Inertial force kernel
# The next two terms on the left involving zeta are evaluated using the
# DynamicStressDivergenceTensors Kernel
# The residual due to Pressure is evaluated using Pressure boundary condition
#
# The system will come to steady state slowly after the pressure becomes constant.
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = 0.0
xmax = 0.1
ymin = 0.0
ymax = 1.0
zmin = 0.0
zmax = 0.1
[]
[Variables]
[disp_x]
[]
[disp_y]
[]
[disp_z]
[]
[]
[AuxVariables]
[vel_x]
[]
[accel_x]
[]
[vel_y]
[]
[accel_y]
[]
[vel_z]
[]
[accel_z]
[]
[stress_yy]
order = CONSTANT
family = MONOMIAL
[]
[strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[]
[Kernels]
[DynamicSolidMechanics]
displacements = 'disp_x disp_y disp_z'
stiffness_damping_coefficient = 'zeta_rayleigh'
[]
[inertia_x]
type = InertialForce
variable = disp_x
velocity = vel_x
acceleration = accel_x
beta = 0.25
gamma = 0.5
eta = 'eta_rayleigh'
[]
[inertia_y]
type = InertialForce
variable = disp_y
velocity = vel_y
acceleration = accel_y
beta = 0.25
gamma = 0.5
eta = 'eta_rayleigh'
[]
[inertia_z]
type = InertialForce
variable = disp_z
velocity = vel_z
acceleration = accel_z
beta = 0.25
gamma = 0.5
eta = 'eta_rayleigh'
[]
[]
[AuxKernels]
[accel_x]
type = NewmarkAccelAux
variable = accel_x
displacement = disp_x
velocity = vel_x
beta = 0.25
execute_on = timestep_end
[]
[vel_x]
type = NewmarkVelAux
variable = vel_x
acceleration = accel_x
gamma = 0.5
execute_on = timestep_end
[]
[accel_y]
type = NewmarkAccelAux
variable = accel_y
displacement = disp_y
velocity = vel_y
beta = 0.25
execute_on = timestep_end
[]
[vel_y]
type = NewmarkVelAux
variable = vel_y
acceleration = accel_y
gamma = 0.5
execute_on = timestep_end
[]
[accel_z]
type = NewmarkAccelAux
variable = accel_z
displacement = disp_z
velocity = vel_z
beta = 0.25
execute_on = timestep_end
[]
[vel_z]
type = NewmarkVelAux
variable = vel_z
acceleration = accel_z
gamma = 0.5
execute_on = timestep_end
[]
[stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[]
[strain_yy]
type = RankTwoAux
rank_two_tensor = total_strain
variable = strain_yy
index_i = 1
index_j = 1
[]
[]
[BCs]
[top_y]
type = DirichletBC
variable = disp_y
boundary = top
value = 0.0
[]
[top_x]
type = DirichletBC
variable = disp_x
boundary = top
value = 0.0
[]
[top_z]
type = DirichletBC
variable = disp_z
boundary = top
value = 0.0
[]
[bottom_x]
type = DirichletBC
variable = disp_x
boundary = bottom
value = 0.0
[]
[bottom_z]
type = DirichletBC
variable = disp_z
boundary = bottom
value = 0.0
[]
[Pressure]
[Side1]
boundary = bottom
function = pressure
displacements = 'disp_x disp_y disp_z'
factor = 1
[]
[]
[]
[Materials]
[Elasticity_tensor]
type = ComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
C_ijkl = '210e9 0'
[]
[strain]
type = ComputeSmallStrain
block = 0
displacements = 'disp_x disp_y disp_z'
[]
[stress]
type = ComputeLinearElasticStress
block = 0
[]
[density]
type = GenericConstantMaterial
block = 0
prop_names = 'density'
prop_values = '7750'
[]
[material_zeta]
type = GenericConstantMaterial
block = 0
prop_names = 'zeta_rayleigh'
prop_values = '0.1'
[]
[material_eta]
type = GenericConstantMaterial
block = 0
prop_names = 'eta_rayleigh'
prop_values = '0.1'
[]
[]
[Executioner]
type = Transient
start_time = 0
end_time = 2
dt = 0.1
[]
[Functions]
[pressure]
type = PiecewiseLinear
x = '0.0 0.1 0.2 1.0 2.0 5.0'
y = '0.0 0.1 0.2 1.0 1.0 1.0'
scale_factor = 1e9
[]
[]
[Postprocessors]
[_dt]
type = TimestepSize
[]
[disp]
type = NodalExtremeValue
variable = disp_y
boundary = bottom
[]
[vel]
type = NodalExtremeValue
variable = vel_y
boundary = bottom
[]
[accel]
type = NodalExtremeValue
variable = accel_y
boundary = bottom
[]
[stress_yy]
type = ElementAverageValue
variable = stress_yy
[]
[strain_yy]
type = ElementAverageValue
variable = strain_yy
[]
[]
[Outputs]
file_base = 'rayleigh_newmark_out'
exodus = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/central_difference/consistent/2D/2d_consistent_explicit.i)
# Test for the central difference time integrator for a 2D mesh
[Mesh]
type = GeneratedMesh
dim = 2
nx = 1
ny = 2
xmin = 0.0
xmax = 1.0
ymin = 0.0
ymax = 2.0
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[]
[AuxVariables]
[./vel_x]
[../]
[./accel_x]
[../]
[./vel_y]
[../]
[./accel_y]
[../]
[]
[Kernels]
[./DynamicSolidMechanics]
displacements = 'disp_x disp_y'
[../]
[./inertia_x]
type = InertialForce
variable = disp_x
[../]
[./inertia_y]
type = InertialForce
variable = disp_y
[../]
[]
[AuxKernels]
[./accel_x]
type = TestNewmarkTI
variable = accel_x
displacement = disp_x
first = false
[../]
[./vel_x]
type = TestNewmarkTI
variable = vel_x
displacement = disp_x
[../]
[./accel_y]
type = TestNewmarkTI
variable = accel_y
displacement = disp_y
first = false
[../]
[./vel_y]
type = TestNewmarkTI
variable = vel_y
displacement = disp_y
[../]
[]
[BCs]
[./y_bot]
type = DirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[../]
[./x_bot]
type = FunctionDirichletBC
boundary = bottom
variable = disp_x
function = disp
preset = false
[../]
[]
[Functions]
[./disp]
type = PiecewiseLinear
x = '0.0 1.0 2.0 3.0 4.0' # time
y = '0.0 1.0 0.0 -1.0 0.0' # displacement
[../]
[]
[Materials]
[./elasticity_tensor_block]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1e6
poissons_ratio = 0.25
block = 0
[../]
[./strain_block]
type = ComputeIncrementalSmallStrain
block = 0
displacements = 'disp_x disp_y'
implicit = false
[../]
[./stress_block]
type = ComputeFiniteStrainElasticStress
block = 0
[../]
[./density]
type = GenericConstantMaterial
block = 0
prop_names = density
prop_values = 1e4
[../]
[]
[Executioner]
type = Transient
start_time = 0
end_time = 0.1
dt = 0.005
timestep_tolerance = 1e-6
[./TimeIntegrator]
type = CentralDifference
[../]
[]
[Postprocessors]
[./_dt]
type = TimestepSize
[../]
[./accel_2x]
type = PointValue
point = '1.0 2.0 0.0'
variable = accel_x
[../]
[./accel_2y]
type = PointValue
point = '1.0 2.0 0.0'
variable = accel_y
[../]
[]
[Outputs]
exodus = false
csv = true
[]
(modules/contact/test/tests/mortar_dynamics/block-dynamics-friction-action.i)
starting_point = 2e-1
offset = -0.19
[GlobalParams]
displacements = 'disp_x disp_y'
[]
[Mesh]
[file]
type = FileMeshGenerator
file = long-bottom-block-no-lower-d.e
[]
[]
[Variables]
[disp_x]
block = '1 2'
[]
[disp_y]
block = '1 2'
[]
[]
[ICs]
[disp_y]
block = 2
variable = disp_y
value = '${fparse starting_point + offset}'
type = ConstantIC
[]
[]
[Kernels]
[DynamicTensorMechanics]
displacements = 'disp_x disp_y'
generate_output = 'stress_xx stress_yy'
strain = FINITE
block = '1 2'
zeta = 0.05
alpha = 0.0
[]
[inertia_x]
type = InertialForce
variable = disp_x
velocity = vel_x
acceleration = accel_x
beta = 0.25
gamma = 0.5
alpha = 0
eta = 0.0
block = '1 2'
[]
[inertia_y]
type = InertialForce
variable = disp_y
velocity = vel_y
acceleration = accel_y
beta = 0.25
gamma = 0.5
alpha = 0
eta = 0.0
block = '1 2'
[]
[]
[Materials]
[elasticity_2]
type = ComputeIsotropicElasticityTensor
block = '2'
youngs_modulus = 1e6
poissons_ratio = 0.3
[]
[elasticity_1]
type = ComputeIsotropicElasticityTensor
block = '1'
youngs_modulus = 1e8
poissons_ratio = 0.3
[]
[stress]
type = ComputeFiniteStrainElasticStress
block = '1 2'
[]
[strain]
type = ComputeFiniteStrain
block = '1 2'
[]
[density]
type = GenericConstantMaterial
block = '1 2'
prop_names = 'density'
prop_values = '7750'
[]
[]
[AuxVariables]
[vel_x]
block = '1 2'
[]
[accel_x]
block = '1 2'
[]
[vel_y]
block = '1 2'
[]
[accel_y]
block = '1 2'
[]
[vel_z]
block = '1 2'
[]
[accel_z]
block = '1 2'
[]
[]
[AuxKernels]
[accel_x]
type = NewmarkAccelAux
variable = accel_x
displacement = disp_x
velocity = vel_x
beta = 0.25
execute_on = 'LINEAR timestep_end'
[]
[vel_x]
type = NewmarkVelAux
variable = vel_x
acceleration = accel_x
gamma = 0.5
execute_on = 'LINEAR timestep_end'
[]
[accel_y]
type = NewmarkAccelAux
variable = accel_y
displacement = disp_y
velocity = vel_y
beta = 0.25
execute_on = 'LINEAR timestep_end'
[]
[vel_y]
type = NewmarkVelAux
variable = vel_y
acceleration = accel_y
gamma = 0.5
execute_on = 'LINEAR timestep_end'
[]
[]
[Contact]
[mechanical]
formulation = mortar
model = coulomb
primary = 20
secondary = 10
friction_coefficient = 0.5
c_normal = 1.0e4
c_tangential = 1.0e4
mortar_dynamics = true
newmark_beta = 0.25
newmark_gamma = 0.5
capture_tolerance = 1.0e-5
[]
[]
[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 / 4 * t) + ${offset}'
[]
[leftx]
type = FunctionDirichletBC
variable = disp_x
boundary = 30 # 50
function = '0' # '1e-2*t'
[]
[]
[Executioner]
type = Transient
end_time = 75
dt = 0.05
dtmin = .005
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'
nl_max_its = 50
line_search = 'none'
snesmf_reuse_base = false
[TimeIntegrator]
type = NewmarkBeta
beta = 0.25
gamma = 0.5
[]
[]
[Debug]
show_var_residual_norms = true
[]
[Outputs]
exodus = true
[]
[VectorPostprocessors]
[mechanical_tangential_lm]
type = NodalValueSampler
block = 'mechanical_secondary_subdomain'
variable = mechanical_tangential_lm
sort_by = 'x'
execute_on = TIMESTEP_END
[]
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
(modules/solid_mechanics/test/tests/central_difference/consistent/3D/3d_consistent_implicit.i)
# One element test for the Newmark-Beta time integrator.
[Mesh]
type = GeneratedMesh # Can generate simple lines, rectangles and rectangular prisms
dim = 3 # Dimension of the mesh
nx = 1 # Number of elements in the x direction
ny = 1 # Number of elements in the y direction
nz = 2 # Number of elements in the z direction
xmin = 0.0
xmax = 1
ymin = 0.0
ymax = 1
zmin = 0.0
zmax = 2
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[AuxVariables]
[./vel_x]
[../]
[./accel_x]
[../]
[./vel_y]
[../]
[./accel_y]
[../]
[./vel_z]
[../]
[./accel_z]
[../]
[]
[Kernels]
[./DynamicSolidMechanics]
displacements = 'disp_x disp_y disp_z'
[../]
[./inertia_x]
type = InertialForce
variable = disp_x
[../]
[./inertia_y]
type = InertialForce
variable = disp_y
[../]
[./inertia_z]
type = InertialForce
variable = disp_z
[../]
[]
[AuxKernels]
[./accel_x]
type = TestNewmarkTI
variable = accel_x
displacement = disp_x
first = false
[../]
[./vel_x]
type = TestNewmarkTI
variable = vel_x
displacement = disp_x
[../]
[./accel_y]
type = TestNewmarkTI
variable = accel_y
displacement = disp_y
first = false
[../]
[./vel_y]
type = TestNewmarkTI
variable = vel_y
displacement = disp_y
[../]
[./accel_z]
type = TestNewmarkTI
variable = accel_z
displacement = disp_z
first = false
[../]
[./vel_z]
type = TestNewmarkTI
variable = vel_z
displacement = disp_z
[../]
[]
[BCs]
[./x_bot]
type = PresetDisplacement
boundary = 'back'
variable = disp_x
beta = 0.25
velocity = vel_x
acceleration = accel_x
function = dispx
[../]
[./y_bot]
type = PresetDisplacement
boundary = 'back'
variable = disp_y
beta = 0.25
velocity = vel_y
acceleration = accel_y
function = dispy
[../]
[./z_bot]
type = PresetDisplacement
boundary = 'back'
variable = disp_z
beta = 0.25
velocity = vel_z
acceleration = accel_z
function = dispz
[../]
[./Periodic]
[./x_dir]
variable = 'disp_x disp_y disp_z'
primary = 'left'
secondary = 'right'
translation = '1.0 0.0 0.0'
[../]
[./y_dir]
variable = 'disp_x disp_y disp_z'
primary = 'bottom'
secondary = 'top'
translation = '0.0 1.0 0.0'
[../]
[../]
[]
[Functions]
[./dispx]
type = PiecewiseLinear
x = '0.0 1.0 2.0 3.0 4.0' # time
y = '0.0 1.0 0.0 -1.0 0.0' # displacement
[../]
[./dispy]
type = ParsedFunction
expression = 0.1*t*t*sin(10*t)
[../]
[./dispz]
type = ParsedFunction
expression = 0.1*t*t*sin(20*t)
[../]
[]
[Materials]
[./elasticity_tensor_block]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1e6
poissons_ratio = 0.25
block = 0
[../]
[./strain_block]
type = ComputeIncrementalSmallStrain
block = 0
displacements = 'disp_x disp_y disp_z'
[../]
[./stress_block]
type = ComputeFiniteStrainElasticStress
block = 0
[../]
[./density]
type = GenericConstantMaterial
block = 0
prop_names = density
prop_values = 1e4
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = NEWTON
nl_abs_tol = 1e-08
nl_rel_tol = 1e-08
timestep_tolerance = 1e-6
start_time = -0.01
end_time = 0.1
dt = 0.005
[./TimeIntegrator]
type = NewmarkBeta
beta = 0.25
gamma = 0.5
[../]
[]
[Postprocessors]
[./accel_6x]
type = NodalVariableValue
nodeid = 6
variable = accel_x
[../]
[]
[Outputs]
exodus = false
csv = true
[]
(modules/solid_mechanics/test/tests/central_difference/lumped/2D/2d_lumped_explicit.i)
# Tests for the central difference time integrator for 2D elements
[Mesh]
[./generated_mesh]
type = GeneratedMeshGenerator
dim = 2
xmin = 0
xmax = 1
ymin = 0
ymax = 2
nx = 1
ny = 2
[../]
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[]
[AuxVariables]
[./accel_x]
[../]
[./vel_x]
[../]
[./accel_y]
[../]
[./vel_y]
[../]
[]
[AuxKernels]
[./accel_x]
type = TestNewmarkTI
variable = accel_x
displacement = disp_x
first = false
[../]
[./vel_x]
type = TestNewmarkTI
variable = vel_x
displacement = disp_x
[../]
[./accel_y]
type = TestNewmarkTI
variable = accel_y
displacement = disp_y
first = false
[../]
[./vel_y]
type = TestNewmarkTI
variable = vel_y
displacement = disp_y
[../]
[]
[Kernels]
[./DynamicSolidMechanics]
displacements = 'disp_x disp_y'
[../]
[./inertia_x]
type = InertialForce
variable = disp_x
[../]
[./inertia_y]
type = InertialForce
variable = disp_y
[../]
[]
[BCs]
[./y_bot]
type = DirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[../]
[./x_bot]
type = FunctionDirichletBC
boundary = bottom
variable = disp_x
function = disp
preset = false
[../]
[]
[Functions]
[./disp]
type = PiecewiseLinear
x = '0.0 1.0 2.0 3.0 4.0' # time
y = '0.0 1.0 0.0 -1.0 0.0' # displacement
[../]
[]
[Materials]
[./elasticity_tensor_block]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1e6
poissons_ratio = 0.25
block = 0
[../]
[./strain_block]
type = ComputeIncrementalSmallStrain
block = 0
displacements = 'disp_x disp_y'
implicit = false
[../]
[./stress_block]
type = ComputeFiniteStrainElasticStress
block = 0
[../]
[./density]
type = GenericConstantMaterial
block = 0
prop_names = density
prop_values = 1e4
[../]
[]
[Executioner]
type = Transient
start_time = 0
end_time = 0.1
dt = 0.005
timestep_tolerance = 1e-6
[./TimeIntegrator]
type = CentralDifference
solve_type = lumped
[../]
[]
[Postprocessors]
[./accel_2x]
type = PointValue
point = '1.0 2.0 0.0'
variable = accel_x
[../]
[]
[Outputs]
exodus = false
csv = true
[]
(modules/contact/test/tests/explicit_dynamics/settlement.i)
# One element test to test the central difference time integrator in 3D.
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[Mesh]
[block_one]
type = GeneratedMeshGenerator
dim = 3
nx = 3
ny = 3
nz = 3
xmin = 4.5
xmax = 5.5
ymin = 4.5
ymax = 5.5
zmin = 0.0001
zmax = 1.0001
boundary_name_prefix = 'ball'
[]
[block_two]
type = GeneratedMeshGenerator
dim = 3
nx = 2
ny = 2
nz = 2
xmin = 0.0
xmax = 10
ymin = 0.0
ymax = 10
zmin = -2
zmax = 0
boundary_name_prefix = 'base'
boundary_id_offset = 10
[]
[block_one_id]
type = SubdomainIDGenerator
input = block_one
subdomain_id = 1
[]
[block_two_id]
type = SubdomainIDGenerator
input = block_two
subdomain_id = 2
[]
[combine]
type = MeshCollectionGenerator
inputs = ' block_one_id block_two_id'
[]
[]
[AuxVariables]
[penetration]
[]
[]
[AuxKernels]
[penetration]
type = PenetrationAux
variable = penetration
boundary = ball_back
paired_boundary = base_front
quantity = distance
[]
[]
[Variables]
[disp_x]
[]
[disp_y]
[]
[disp_z]
[]
[]
[AuxVariables]
[gap_rate]
[]
[vel_x]
[]
[accel_x]
[]
[vel_y]
[]
[accel_y]
[]
[vel_z]
[]
[accel_z]
[]
[stress_zz]
family = MONOMIAL
order = CONSTANT
[]
[strain_zz]
family = MONOMIAL
order = CONSTANT
[]
[kinetic_energy_one]
order = CONSTANT
family = MONOMIAL
[]
[elastic_energy_one]
order = CONSTANT
family = MONOMIAL
[]
[kinetic_energy_two]
order = CONSTANT
family = MONOMIAL
[]
[elastic_energy_two]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[stress_zz]
type = RankTwoAux
rank_two_tensor = stress
index_i = 2
index_j = 2
variable = stress_zz
execute_on = 'TIMESTEP_END'
[]
[strain_zz]
type = RankTwoAux
rank_two_tensor = mechanical_strain
index_i = 2
index_j = 2
variable = strain_zz
[]
[accel_x]
type = TestNewmarkTI
variable = accel_x
displacement = disp_x
first = false
execute_on = 'LINEAR TIMESTEP_BEGIN TIMESTEP_END'
[]
[vel_x]
type = TestNewmarkTI
variable = vel_x
displacement = disp_x
execute_on = 'LINEAR TIMESTEP_BEGIN TIMESTEP_END'
[]
[accel_y]
type = TestNewmarkTI
variable = accel_y
displacement = disp_y
first = false
execute_on = 'LINEAR TIMESTEP_BEGIN TIMESTEP_END'
[]
[vel_y]
type = TestNewmarkTI
variable = vel_y
displacement = disp_x
execute_on = 'LINEAR TIMESTEP_BEGIN TIMESTEP_END'
[]
[accel_z]
type = TestNewmarkTI
variable = accel_z
displacement = disp_z
first = false
execute_on = 'LINEAR TIMESTEP_BEGIN TIMESTEP_END'
[]
[vel_z]
type = TestNewmarkTI
variable = vel_z
displacement = disp_z
execute_on = 'LINEAR TIMESTEP_BEGIN TIMESTEP_END'
[]
[kinetic_energy_one]
type = KineticEnergyAux
block = '1'
variable = kinetic_energy_one
newmark_velocity_x = vel_x
newmark_velocity_y = vel_y
newmark_velocity_z = vel_z
density = density
[]
[elastic_energy_one]
type = ElasticEnergyAux
variable = elastic_energy_one
block = '1'
[]
[kinetic_energy_two]
type = KineticEnergyAux
block = '2'
variable = kinetic_energy_two
newmark_velocity_x = vel_x
newmark_velocity_y = vel_y
newmark_velocity_z = vel_z
density = density
[]
[elastic_energy_two]
type = ElasticEnergyAux
variable = elastic_energy_two
block = '2'
[]
[]
[Kernels]
[DynamicTensorMechanics]
displacements = 'disp_x disp_y disp_z'
stiffness_damping_coefficient = 1.0e-3
generate_output = 'stress_zz strain_zz'
[]
[inertia_x]
type = InertialForce
variable = disp_x
[]
[inertia_y]
type = InertialForce
variable = disp_y
[]
[inertia_z]
type = InertialForce
variable = disp_z
[]
[gravity]
type = Gravity
variable = disp_z
value = -98.10
[]
[]
[BCs]
[x_front]
type = DirichletBC
variable = disp_x
boundary = 'ball_front'
preset = false
value = 0.0
[]
[y_front]
type = DirichletBC
variable = disp_y
boundary = 'ball_front'
preset = false
value = 0.0
[]
[x_fixed]
type = DirichletBC
variable = disp_x
boundary = 'base_back'
preset = false
value = 0.0
[]
[y_fixed]
type = DirichletBC
variable = disp_y
boundary = 'base_back'
preset = false
value = 0.0
[]
[z_fixed]
type = DirichletBC
variable = disp_z
boundary = 'base_back'
preset = false
value = 0.0
[]
[z_fixed_front]
type = DirichletBC
variable = disp_z
boundary = 'base_front'
preset = false
value = 0.0
[]
[]
[ExplicitDynamicsContact]
[my_contact]
model = frictionless_balance
primary = base_front
secondary = ball_back
vel_x = 'vel_x'
vel_y = 'vel_y'
vel_z = 'vel_z'
[]
[]
[Materials]
[elasticity_tensor_block_one]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1e6
poissons_ratio = 0.0
block = 1
outputs = 'exodus'
output_properties = __all__
[]
[elasticity_tensor_block_two]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1e10
poissons_ratio = 0.0
block = 2
outputs = 'exodus'
output_properties = __all__
[]
[strain_block]
type = ComputeFiniteStrain # ComputeIncrementalSmallStrain
displacements = 'disp_x disp_y disp_z'
implicit = false
[]
[stress_block]
type = ComputeFiniteStrainElasticStress
[]
[density_one]
type = GenericConstantMaterial
prop_names = density
prop_values = 1e1
outputs = 'exodus'
output_properties = 'density'
block = '1'
[]
[density_two]
type = GenericConstantMaterial
prop_names = density
prop_values = 1e6
outputs = 'exodus'
output_properties = 'density'
block = '2'
[]
[wave_speed]
type = WaveSpeed
outputs = 'exodus'
output_properties = 'wave_speed'
[]
[]
[Executioner]
type = Transient
start_time = -0.01
end_time = 0.04
dt = 1.0e-4
timestep_tolerance = 1e-6
[TimeIntegrator]
type = CentralDifference
solve_type = lumped
[]
[]
[Outputs]
interval = 1
exodus = true
csv = true
execute_on = 'TIMESTEP_END'
[]
[Postprocessors]
[accel_58z]
type = NodalVariableValue
nodeid = 1
variable = accel_z
[]
[vel_58z]
type = NodalVariableValue
nodeid = 1
variable = vel_z
[]
[critical_time_step]
type = CriticalTimeStep
[]
[contact_pressure_max]
type = NodalExtremeValue
variable = contact_pressure
block = '1 2'
value_type = max
[]
[penetration_max]
type = NodalExtremeValue
variable = penetration
block = '1 2'
value_type = max
[]
[total_kinetic_energy_one]
type = ElementIntegralVariablePostprocessor
variable = kinetic_energy_one
block = '1'
[]
[total_elastic_energy_one]
type = ElementIntegralVariablePostprocessor
variable = elastic_energy_one
block = '1'
[]
[total_kinetic_energy_two]
type = ElementIntegralVariablePostprocessor
variable = kinetic_energy_two
block = '2'
[]
[total_elastic_energy_two]
type = ElementIntegralVariablePostprocessor
variable = elastic_energy_two
block = '2'
[]
[]
(modules/solid_mechanics/test/tests/dynamics/acceleration_bc/AccelerationBC_test.i)
# Test for Acceleration boundary condition
# This test contains one brick element which is fixed in the y and z direction.
# Base acceleration is applied in the x direction to all nodes on the bottom surface (y=0).
# The PresetAcceleration converts the given acceleration to a displacement
# using Newmark time integration. This displacement is then prescribed on the boundary.
#
# Result: The acceleration at the bottom node should be same as the input acceleration
# which is a triangular function with peak at t = 0.2 in this case. Width of the triangular function
# is 0.2 s.
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = 0.0
xmax = 0.1
ymin = 0.0
ymax = 1.0
zmin = 0.0
zmax = 0.1
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[AuxVariables]
[./vel_x]
[../]
[./accel_x]
[../]
[./vel_y]
[../]
[./accel_y]
[../]
[./vel_z]
[../]
[./accel_z]
[../]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_yy]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Kernels]
[SolidMechanics]
[../]
[./inertia_x]
type = InertialForce
variable = disp_x
velocity = vel_x
acceleration = accel_x
beta = 0.25
gamma = 0.5
[../]
[./inertia_y]
type = InertialForce
variable = disp_y
velocity = vel_y
acceleration = accel_y
beta = 0.25
gamma = 0.5
[../]
[./inertia_z]
type = InertialForce
variable = disp_z
velocity = vel_z
acceleration = accel_z
beta = 0.25
gamma = 0.5
[../]
[]
[AuxKernels]
[./accel_x]
type = NewmarkAccelAux
variable = accel_x
displacement = disp_x
velocity = vel_x
beta = 0.25
execute_on = timestep_end
[../]
[./vel_x]
type = NewmarkVelAux
variable = vel_x
acceleration = accel_x
gamma = 0.5
execute_on = timestep_end
[../]
[./accel_y]
type = NewmarkAccelAux
variable = accel_y
displacement = disp_y
velocity = vel_y
beta = 0.25
execute_on = timestep_end
[../]
[./vel_y]
type = NewmarkVelAux
variable = vel_y
acceleration = accel_y
gamma = 0.5
execute_on = timestep_end
[../]
[./accel_z]
type = NewmarkAccelAux
variable = accel_z
displacement = disp_z
velocity = vel_z
beta = 0.25
execute_on = timestep_end
[../]
[./vel_z]
type = NewmarkVelAux
variable = vel_z
acceleration = accel_z
gamma = 0.5
execute_on = timestep_end
[../]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 0
index_j = 1
[../]
[./strain_yy]
type = RankTwoAux
rank_two_tensor = total_strain
variable = strain_yy
index_i = 0
index_j = 1
[../]
[]
[Functions]
[./acceleration_bottom]
type = PiecewiseLinear
data_file = acceleration.csv
format = columns
[../]
[]
[BCs]
[./top_y]
type = DirichletBC
variable = disp_y
boundary = top
value=0.0
[../]
[./top_z]
type = DirichletBC
variable = disp_z
boundary = top
value=0.0
[../]
[./bottom_y]
type = DirichletBC
variable = disp_y
boundary = bottom
value=0.0
[../]
[./bottom_z]
type = DirichletBC
variable = disp_z
boundary = bottom
value=0.0
[../]
[./preset_accelertion]
type = PresetAcceleration
boundary = bottom
function = acceleration_bottom
variable = disp_x
beta = 0.25
acceleration = accel_x
velocity = vel_x
[../]
[]
[Materials]
[./Elasticity_tensor]
type = ComputeElasticityTensor
fill_method = symmetric_isotropic
C_ijkl = '210e9 0'
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./density]
type = GenericConstantMaterial
prop_names = 'density'
prop_values = '7750'
[../]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_hypre_type -ksp_gmres_restart'
petsc_options_value = 'hypre boomeramg 101'
start_time = 0
end_time = 2.0
dt = 0.01
dtmin = 0.01
nl_abs_tol = 1e-8
nl_rel_tol = 1e-8
l_tol = 1e-8
timestep_tolerance = 1e-8
[]
[Postprocessors]
[./_dt]
type = TimestepSize
[../]
[./disp]
type = NodalVariableValue
variable = disp_x
nodeid = 1
[../]
[./vel]
type = NodalVariableValue
variable = vel_x
nodeid = 1
[../]
[./accel]
type = NodalVariableValue
variable = accel_x
nodeid = 1
[../]
[]
[Outputs]
exodus = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/capped_weak_plane/push_and_shear.i)
# Dynamic problem with plasticity.
# A column of material (not subject to gravity) has the z-displacement
# of its sides fixed, but the centre of its bottom side is pushed
# upwards. This causes failure in the bottom elements.
#
# The problem utilises damping in the following way.
# The DynamicStressDivergenceTensors forms the residual
# integral grad(stress) + zeta*grad(stress-dot)
# = V/L * elasticity * (du/dx + zeta * dv/dx)
# where V is the elemental volume, and L is the length-scale,
# and u is the displacement, and v is the velocity.
# The InertialForce forms the residual
# integral density * (accel + eta * velocity)
# = V * density * (a + eta * v)
# where a is the acceleration.
# So, a damped oscillator description with both these
# kernels looks like
# 0 = V * (density * a + density * eta * v + elasticity * zeta * v / L^2 + elasticity / L^2 * u)
# Critical damping is when the coefficient of v is
# 2 * sqrt(density * elasticity / L^2)
# In the case at hand, density=1E4, elasticity~1E10 (Young is 16GPa),
# L~1 to 10 (in the horizontal or vertical direction), so this coefficient ~ 1E7 to 1E6.
# Choosing eta = 1E3 and zeta = 1E-2 gives approximate critical damping.
# If zeta is high then steady-state is achieved very quickly.
#
# In the case of plasticity, the effective stiffness of the elements
# is significantly less. Therefore, the above parameters give
# overdamping.
#
# This simulation is a nice example of the irreversable and non-uniqueness
# of simulations involving plasticity. The result depends on the damping
# parameters and the time stepping.
[Mesh]
[generated_mesh]
type = GeneratedMeshGenerator
dim = 3
nx = 10
ny = 1
nz = 5
bias_z = 1.5
xmin = -10
xmax = 10
ymin = -10
ymax = 10
zmin = -100
zmax = 0
[]
[bottomz_middle]
type = BoundingBoxNodeSetGenerator
new_boundary = bottomz_middle
bottom_left = '-1 -1500 -105'
top_right = '1 1500 -95'
input = generated_mesh
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
beta = 0.25 # Newmark time integration
gamma = 0.5 # Newmark time integration
eta = 1E3 #0.3E4 # higher values mean more damping via density
[]
[Variables]
[disp_x]
[]
[disp_y]
[]
[disp_z]
[]
[]
[Kernels]
[DynamicSolidMechanics] # zeta*K*vel + K * disp
displacements = 'disp_x disp_y disp_z'
stiffness_damping_coefficient = 1E-2 # higher values mean more damping via stiffness
hht_alpha = 0 # better nonlinear convergence than for alpha>0
[]
[inertia_x] # M*accel + eta*M*vel
type = InertialForce
use_displaced_mesh = false
variable = disp_x
velocity = vel_x
acceleration = accel_x
[]
[inertia_y]
type = InertialForce
use_displaced_mesh = false
variable = disp_y
velocity = vel_y
acceleration = accel_y
[]
[inertia_z]
type = InertialForce
use_displaced_mesh = false
variable = disp_z
velocity = vel_z
acceleration = accel_z
[]
[]
[BCs]
[no_x2]
type = DirichletBC
variable = disp_x
boundary = right
value = 0.0
[]
[no_x1]
type = DirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[no_y1]
type = DirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[]
[no_y2]
type = DirichletBC
variable = disp_y
boundary = top
value = 0.0
[]
[z_fixed_sides_xmin]
type = DirichletBC
variable = disp_z
boundary = left
value = 0
[]
[z_fixed_sides_xmax]
type = DirichletBC
variable = disp_z
boundary = right
value = 0
[]
[bottomz]
type = FunctionDirichletBC
variable = disp_z
boundary = bottomz_middle
function = min(10*t,1)
[]
[]
[AuxVariables]
[accel_x]
[]
[vel_x]
[]
[accel_y]
[]
[vel_y]
[]
[accel_z]
[]
[vel_z]
[]
[stress_xx]
order = CONSTANT
family = MONOMIAL
[]
[stress_xy]
order = CONSTANT
family = MONOMIAL
[]
[stress_xz]
order = CONSTANT
family = MONOMIAL
[]
[stress_yy]
order = CONSTANT
family = MONOMIAL
[]
[stress_yz]
order = CONSTANT
family = MONOMIAL
[]
[stress_zz]
order = CONSTANT
family = MONOMIAL
[]
[strainp_xx]
order = CONSTANT
family = MONOMIAL
[]
[strainp_xy]
order = CONSTANT
family = MONOMIAL
[]
[strainp_xz]
order = CONSTANT
family = MONOMIAL
[]
[strainp_yy]
order = CONSTANT
family = MONOMIAL
[]
[strainp_yz]
order = CONSTANT
family = MONOMIAL
[]
[strainp_zz]
order = CONSTANT
family = MONOMIAL
[]
[straint_xx]
order = CONSTANT
family = MONOMIAL
[]
[straint_xy]
order = CONSTANT
family = MONOMIAL
[]
[straint_xz]
order = CONSTANT
family = MONOMIAL
[]
[straint_yy]
order = CONSTANT
family = MONOMIAL
[]
[straint_yz]
order = CONSTANT
family = MONOMIAL
[]
[straint_zz]
order = CONSTANT
family = MONOMIAL
[]
[f_shear]
order = CONSTANT
family = MONOMIAL
[]
[f_tensile]
order = CONSTANT
family = MONOMIAL
[]
[f_compressive]
order = CONSTANT
family = MONOMIAL
[]
[intnl_shear]
order = CONSTANT
family = MONOMIAL
[]
[intnl_tensile]
order = CONSTANT
family = MONOMIAL
[]
[iter]
order = CONSTANT
family = MONOMIAL
[]
[ls]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[accel_x] # Calculates and stores acceleration at the end of time step
type = NewmarkAccelAux
variable = accel_x
displacement = disp_x
velocity = vel_x
execute_on = timestep_end
[]
[vel_x] # Calculates and stores velocity at the end of the time step
type = NewmarkVelAux
variable = vel_x
acceleration = accel_x
execute_on = timestep_end
[]
[accel_y]
type = NewmarkAccelAux
variable = accel_y
displacement = disp_y
velocity = vel_y
execute_on = timestep_end
[]
[vel_y]
type = NewmarkVelAux
variable = vel_y
acceleration = accel_y
execute_on = timestep_end
[]
[accel_z]
type = NewmarkAccelAux
variable = accel_z
displacement = disp_z
velocity = vel_z
execute_on = timestep_end
[]
[vel_z]
type = NewmarkVelAux
variable = vel_z
acceleration = accel_z
execute_on = timestep_end
[]
[stress_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
[]
[stress_xy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xy
index_i = 0
index_j = 1
[]
[stress_xz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xz
index_i = 0
index_j = 2
[]
[stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[]
[stress_yz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yz
index_i = 1
index_j = 2
[]
[stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
[]
[strainp_xx]
type = RankTwoAux
rank_two_tensor = plastic_strain
variable = strainp_xx
index_i = 0
index_j = 0
[]
[strainp_xy]
type = RankTwoAux
rank_two_tensor = plastic_strain
variable = strainp_xy
index_i = 0
index_j = 1
[]
[strainp_xz]
type = RankTwoAux
rank_two_tensor = plastic_strain
variable = strainp_xz
index_i = 0
index_j = 2
[]
[strainp_yy]
type = RankTwoAux
rank_two_tensor = plastic_strain
variable = strainp_yy
index_i = 1
index_j = 1
[]
[strainp_yz]
type = RankTwoAux
rank_two_tensor = plastic_strain
variable = strainp_yz
index_i = 1
index_j = 2
[]
[strainp_zz]
type = RankTwoAux
rank_two_tensor = plastic_strain
variable = strainp_zz
index_i = 2
index_j = 2
[]
[straint_xx]
type = RankTwoAux
rank_two_tensor = total_strain
variable = straint_xx
index_i = 0
index_j = 0
[]
[straint_xy]
type = RankTwoAux
rank_two_tensor = total_strain
variable = straint_xy
index_i = 0
index_j = 1
[]
[straint_xz]
type = RankTwoAux
rank_two_tensor = total_strain
variable = straint_xz
index_i = 0
index_j = 2
[]
[straint_yy]
type = RankTwoAux
rank_two_tensor = total_strain
variable = straint_yy
index_i = 1
index_j = 1
[]
[straint_yz]
type = RankTwoAux
rank_two_tensor = total_strain
variable = straint_yz
index_i = 1
index_j = 2
[]
[straint_zz]
type = RankTwoAux
rank_two_tensor = total_strain
variable = straint_zz
index_i = 2
index_j = 2
[]
[f_shear]
type = MaterialStdVectorAux
property = plastic_yield_function
index = 0
variable = f_shear
[]
[f_tensile]
type = MaterialStdVectorAux
property = plastic_yield_function
index = 1
variable = f_tensile
[]
[f_compressive]
type = MaterialStdVectorAux
property = plastic_yield_function
index = 2
variable = f_compressive
[]
[intnl_shear]
type = MaterialStdVectorAux
property = plastic_internal_parameter
index = 0
variable = intnl_shear
[]
[intnl_tensile]
type = MaterialStdVectorAux
property = plastic_internal_parameter
index = 1
variable = intnl_tensile
[]
[iter]
type = MaterialRealAux
property = plastic_NR_iterations
variable = iter
[]
[ls]
type = MaterialRealAux
property = plastic_linesearch_needed
variable = ls
[]
[]
[UserObjects]
[coh]
type = SolidMechanicsHardeningConstant
value = 1E6
[]
[tanphi]
type = SolidMechanicsHardeningConstant
value = 0.5
[]
[tanpsi]
type = SolidMechanicsHardeningConstant
value = 0.166666666667
[]
[t_strength]
type = SolidMechanicsHardeningConstant
value = 1E80
[]
[c_strength]
type = SolidMechanicsHardeningConstant
value = 0
[]
[]
[Materials]
[elasticity_tensor]
type = ComputeElasticityTensor
fill_method = symmetric_isotropic
C_ijkl = '6.4E9 6.4E9' # young 16MPa, Poisson 0.25
[]
[strain]
type = ComputeIncrementalSmallStrain
[]
[admissible]
type = ComputeMultipleInelasticStress
inelastic_models = stress
perform_finite_strain_rotations = false
[]
[stress]
type = CappedWeakPlaneStressUpdate
cohesion = coh
tan_friction_angle = tanphi
tan_dilation_angle = tanpsi
tensile_strength = t_strength
compressive_strength = c_strength
tip_smoother = 0.5E6
smoothing_tol = 0.5E6
yield_function_tol = 1E-2
[]
[density]
type = GenericConstantMaterial
block = 0
prop_names = density
prop_values = 1E4
[]
[]
[Preconditioning]
[andy]
type = SMP
full = true
petsc_options = '-snes_converged_reason -snes_linesearch_monitor'
petsc_options_iname = '-pc_type -pc_asm_overlap -sub_pc_type -ksp_type -ksp_gmres_restart'
petsc_options_value = ' asm 2 lu gmres 200'
[]
[]
[Executioner]
solve_type = 'NEWTON'
petsc_options = '-snes_converged_reason'
line_search = bt
nl_abs_tol = 1E1
nl_rel_tol = 1e-5
l_tol = 1E-10
l_max_its = 100
nl_max_its = 100
end_time = 0.5
dt = 0.1
type = Transient
[]
[Outputs]
file_base = push_and_shear
exodus = true
csv = true
[]
(modules/contact/test/tests/mortar_aux_kernels/block-dynamics-aux-vel.i)
starting_point = 2e-1
offset = -0.19
[GlobalParams]
displacements = 'disp_x disp_y'
[]
[Mesh]
file = long-bottom-block-1elem-blocks.e
[]
[Variables]
[disp_x]
block = '1 2'
[]
[disp_y]
block = '1 2'
[]
[normal_lm]
block = 3
use_dual = true
[]
[]
[ICs]
[disp_y]
block = 2
variable = disp_y
value = '${fparse starting_point + offset}'
type = ConstantIC
[]
[]
[Kernels]
[DynamicTensorMechanics]
displacements = 'disp_x disp_y'
generate_output = 'stress_xx stress_yy'
strain = FINITE
block = '1 2'
zeta = 1.0
alpha = 0.0
[]
[inertia_x]
type = InertialForce
variable = disp_x
velocity = vel_x
acceleration = accel_x
beta = 0.25
gamma = 0.5
alpha = 0
eta = 0.0
block = '1 2'
[]
[inertia_y]
type = InertialForce
variable = disp_y
velocity = vel_y
acceleration = accel_y
beta = 0.25
gamma = 0.5
alpha = 0
eta = 0.0
block = '1 2'
[]
[]
[Materials]
[elasticity_2]
type = ComputeIsotropicElasticityTensor
block = '2'
youngs_modulus = 1e6
poissons_ratio = 0.3
[]
[elasticity_1]
type = ComputeIsotropicElasticityTensor
block = '1'
youngs_modulus = 1e8
poissons_ratio = 0.3
[]
[stress]
type = ComputeFiniteStrainElasticStress
block = '1 2'
[]
[strain]
type = ComputeFiniteStrain
block = '1 2'
[]
[density]
type = GenericConstantMaterial
block = '1 2'
prop_names = 'density'
prop_values = '7750'
[]
[]
[AuxVariables]
[gap_vel]
block = '3'
[]
[vel_x]
block = '1 2'
[]
[accel_x]
block = '1 2'
[]
[vel_y]
block = '1 2'
[]
[accel_y]
block = '1 2'
[]
[vel_z]
block = '1 2'
[]
[accel_z]
block = '1 2'
[]
[]
[AuxKernels]
[gap_vel]
type = WeightedGapVelAux
variable = gap_vel
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
disp_x = disp_x
disp_y = disp_y
correct_edge_dropping = true
execute_on = 'TIMESTEP_END'
[]
[accel_x]
type = NewmarkAccelAux
variable = accel_x
displacement = disp_x
velocity = vel_x
beta = 0.25
execute_on = 'linear timestep_end'
[]
[vel_x]
type = NewmarkVelAux
variable = vel_x
acceleration = accel_x
gamma = 0.5
execute_on = 'linear timestep_end'
[]
[accel_y]
type = NewmarkAccelAux
variable = accel_y
displacement = disp_y
velocity = vel_y
beta = 0.25
execute_on = 'linear timestep_end'
[]
[vel_y]
type = NewmarkVelAux
variable = vel_y
acceleration = accel_y
gamma = 0.5
execute_on = 'linear timestep_end'
[]
[]
[UserObjects]
[weighted_gap_uo]
type = LMWeightedGapUserObject
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
lm_variable = normal_lm
disp_x = disp_x
disp_y = disp_y
[]
[]
[Constraints]
[weighted_gap_lm]
type = ComputeDynamicWeightedGapLMMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = normal_lm
disp_x = disp_x
disp_y = disp_y
use_displaced_mesh = true
c = 1e4
capture_tolerance = 1.0e-5
newmark_beta = 0.25
newmark_gamma = 0.5
[]
[normal_x]
type = NormalMortarMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = normal_lm
secondary_variable = disp_x
component = x
use_displaced_mesh = true
compute_lm_residuals = false
weighted_gap_uo = weighted_gap_uo
[]
[normal_y]
type = NormalMortarMechanicalContact
primary_boundary = 20
secondary_boundary = 10
primary_subdomain = 4
secondary_subdomain = 3
variable = normal_lm
secondary_variable = disp_y
component = y
use_displaced_mesh = true
compute_lm_residuals = false
weighted_gap_uo = weighted_gap_uo
[]
[]
[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 / 4 * t) + ${offset}'
[]
[leftx]
type = FunctionDirichletBC
variable = disp_x
boundary = 50
function = '1e-2 * t'
[]
[]
[Executioner]
type = Transient
end_time = 0.1
dt = 0.05
dtmin = 0.05
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_mat_solver_type -pc_factor_shift_type -pc_factor_shift_amount -mat_mffd_err '
petsc_options_value = 'lu superlu_dist NONZERO 1e-15 1e-5'
nl_max_its = 20
line_search = 'none'
snesmf_reuse_base = false
[TimeIntegrator]
type = NewmarkBeta
beta = 0.25
gamma = 0.5
[]
[]
[Debug]
show_var_residual_norms = true
[]
[Outputs]
exodus = true
checkpoint = 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/mortar_dynamics/block-dynamics-action.i)
starting_point = 2e-1
offset = -0.19
[GlobalParams]
displacements = 'disp_x disp_y'
[]
[Mesh]
[file]
type = FileMeshGenerator
file = long-bottom-block-no-lower-d.e
[]
[]
[Variables]
[disp_x]
block = '1 2'
[]
[disp_y]
block = '1 2'
[]
[]
[ICs]
[disp_y]
block = 2
variable = disp_y
value = '${fparse starting_point + offset}'
type = ConstantIC
[]
[]
[Kernels]
[DynamicTensorMechanics]
displacements = 'disp_x disp_y'
generate_output = 'stress_xx stress_yy'
strain = FINITE
block = '1 2'
stiffness_damping_coefficient = 1.0
hht_alpha = 0.0
[]
[inertia_x]
type = InertialForce
variable = disp_x
velocity = vel_x
acceleration = accel_x
beta = 0.25
gamma = 0.5
alpha = 0
eta = 0.0
block = '1 2'
[]
[inertia_y]
type = InertialForce
variable = disp_y
velocity = vel_y
acceleration = accel_y
beta = 0.25
gamma = 0.5
alpha = 0
eta = 0.0
block = '1 2'
[]
[]
[Materials]
[elasticity_2]
type = ComputeIsotropicElasticityTensor
block = '2'
youngs_modulus = 1e6
poissons_ratio = 0.3
[]
[elasticity_1]
type = ComputeIsotropicElasticityTensor
block = '1'
youngs_modulus = 1e8
poissons_ratio = 0.3
[]
[stress]
type = ComputeFiniteStrainElasticStress
block = '1 2'
[]
[strain]
type = ComputeFiniteStrain
block = '1 2'
[]
[density]
type = GenericConstantMaterial
block = '1 2'
prop_names = 'density'
prop_values = '7750'
[]
[]
[AuxVariables]
[vel_x]
block = '1 2'
[]
[accel_x]
block = '1 2'
[]
[vel_y]
block = '1 2'
[]
[accel_y]
block = '1 2'
[]
[vel_z]
block = '1 2'
[]
[accel_z]
block = '1 2'
[]
[]
[AuxKernels]
[accel_x]
type = NewmarkAccelAux
variable = accel_x
displacement = disp_x
velocity = vel_x
beta = 0.25
execute_on = 'LINEAR timestep_end'
[]
[vel_x]
type = NewmarkVelAux
variable = vel_x
acceleration = accel_x
gamma = 0.5
execute_on = 'LINEAR timestep_end'
[]
[accel_y]
type = NewmarkAccelAux
variable = accel_y
displacement = disp_y
velocity = vel_y
beta = 0.25
execute_on = 'LINEAR timestep_end'
[]
[vel_y]
type = NewmarkVelAux
variable = vel_y
acceleration = accel_y
gamma = 0.5
execute_on = 'LINEAR timestep_end'
[]
[]
[Contact]
[mechanical]
primary = 20
secondary = 10
formulation = mortar
model = frictionless
c_normal = 1e4
capture_tolerance = 1.0e-5
[]
[]
[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 / 4 * t) + ${offset}'
[]
[leftx]
type = FunctionDirichletBC
variable = disp_x
boundary = 50
function = '1e-2 * t'
[]
[]
[Executioner]
type = Transient
end_time = 75
dt = 0.05
dtmin = .05
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'
nl_max_its = 20
line_search = 'none'
snesmf_reuse_base = false
[TimeIntegrator]
type = NewmarkBeta
beta = 0.25
gamma = 0.5
[]
[]
[Debug]
show_var_residual_norms = true
[]
[Outputs]
exodus = true
checkpoint = true
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Postprocessors]
active = ''
[num_nl]
type = NumNonlinearIterations
[]
[cumulative]
type = CumulativeValuePostprocessor
postprocessor = num_nl
[]
[]
(modules/solid_mechanics/test/tests/dynamics/prescribed_displacement/3D_QStatic_1_Ramped_Displacement.i)
# One 3D element under ramped displacement loading.
#
# loading:
# time : 0.0 0.1 0.2 0.3
# disp : 0.0 0.0 -0.01 -0.01
# This displacement loading is applied using the PresetDisplacement boundary condition.
# Here, the given displacement time history is converted to an acceleration
# time history using Backward Euler time differentiation. Then, the resulting
# acceleration is integrated using Newmark time integration to obtain a
# displacement time history which is then applied to the boundary.
# This is done because if the displacement is applied using Dirichlet BC, the
# resulting acceleration is very noisy.
# Boundaries:
# x = 0 left
# x = 1 right
# y = 0 bottom
# y = 1 top
# z = 0 back
# z = 1 front
# Result: The displacement at the top node in the z direction should match
# the prescribed displacement. Also, the z acceleration should
# be two triangular pulses, one peaking at 0.1 and another peaking at
# 0.2.
[Mesh]
type = GeneratedMesh
dim = 3 # Dimension of the mesh
nx = 1 # Number of elements in the x direction
ny = 1 # Number of elements in the y direction
nz = 1 # Number of elements in the z direction
xmin = 0.0
xmax = 1
ymin = 0.0
ymax = 1
zmin = 0.0
zmax = 1
allow_renumbering = false # So NodalVariableValue can index by id
[]
[Variables] # variables that are solved
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[AuxVariables] # variables that are calculated for output
[./accel_x]
[../]
[./vel_x]
[../]
[./accel_y]
[../]
[./vel_y]
[../]
[./accel_z]
[../]
[./vel_z]
[../]
[./stress_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zz]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_zz]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Kernels]
[./DynamicSolidMechanics] # zeta*K*vel + K * disp
displacements = 'disp_x disp_y disp_z'
stiffness_damping_coefficient = 0.000025
[../]
[./inertia_x] # M*accel + eta*M*vel
type = InertialForce
variable = disp_x
velocity = vel_x
acceleration = accel_x
beta = 0.25 # Newmark time integration
gamma = 0.5 # Newmark time integration
eta = 19.63
[../]
[./inertia_y]
type = InertialForce
variable = disp_y
velocity = vel_y
acceleration = accel_y
beta = 0.25
gamma = 0.5
eta = 19.63
[../]
[./inertia_z]
type = InertialForce
variable = disp_z
velocity = vel_z
acceleration = accel_z
beta = 0.25
gamma = 0.5
eta = 19.63
[../]
[]
[AuxKernels]
[./accel_x] # Calculates and stores acceleration at the end of time step
type = NewmarkAccelAux
variable = accel_x
displacement = disp_x
velocity = vel_x
beta = 0.25
execute_on = timestep_end
[../]
[./vel_x] # Calculates and stores velocity at the end of the time step
type = NewmarkVelAux
variable = vel_x
acceleration = accel_x
gamma = 0.5
execute_on = timestep_end
[../]
[./accel_y]
type = NewmarkAccelAux
variable = accel_y
displacement = disp_y
velocity = vel_y
beta = 0.25
execute_on = timestep_end
[../]
[./vel_y]
type = NewmarkVelAux
variable = vel_y
acceleration = accel_y
gamma = 0.5
execute_on = timestep_end
[../]
[./accel_z]
type = NewmarkAccelAux
variable = accel_z
displacement = disp_z
velocity = vel_z
beta = 0.25
execute_on = timestep_end
[../]
[./vel_z]
type = NewmarkVelAux
variable = vel_z
acceleration = accel_z
gamma = 0.5
execute_on = timestep_end
[../]
[./stress_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
[../]
[./strain_xx]
type = RankTwoAux
rank_two_tensor = total_strain
variable = strain_xx
index_i = 0
index_j = 0
[../]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[../]
[./strain_yy]
type = RankTwoAux
rank_two_tensor = total_strain
variable = strain_yy
index_i = 1
index_j = 1
[../]
[./stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
[../]
[./strain_zz]
type = RankTwoAux
rank_two_tensor = total_strain
variable = strain_zz
index_i = 2
index_j = 2
[../]
[]
[Functions]
[./displacement_front]
type = PiecewiseLinear
data_file = 'displacement.csv'
format = columns
[../]
[]
[BCs]
[./Preset_displacement]
type = PresetDisplacement
variable = disp_z
function = displacement_front
boundary = front
beta = 0.25
velocity = vel_z
acceleration = accel_z
[../]
[./anchor_x]
type = DirichletBC
variable = disp_x
boundary = left
value = 0.0
[../]
[./anchor_y]
type = DirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[../]
[./anchor_z]
type = DirichletBC
variable = disp_z
boundary = back
value = 0.0
[../]
[]
[Materials]
[./elasticity_tensor]
youngs_modulus = 325e6 #Pa
poissons_ratio = 0.3
type = ComputeIsotropicElasticityTensor
block = 0
[../]
[./strain]
#Computes the strain, assuming small strains
type = ComputeSmallStrain
block = 0
displacements = 'disp_x disp_y disp_z'
[../]
[./stress]
#Computes the stress, using linear elasticity
type = ComputeLinearElasticStress
block = 0
[../]
[./density]
type = GenericConstantMaterial
block = 0
prop_names = density
prop_values = 2000 #kg/m3
[../]
[]
[Executioner]
type = Transient
start_time = 0
end_time = 3.0
l_tol = 1e-6
nl_rel_tol = 1e-6
nl_abs_tol = 1e-6
dt = 0.1
timestep_tolerance = 1e-6
[]
[Postprocessors] # These quantites are printed to a csv file at every time step
[./_dt]
type = TimestepSize
[../]
[./accel_6x]
type = NodalVariableValue
nodeid = 6
variable = accel_x
[../]
[./accel_6y]
type = NodalVariableValue
nodeid = 6
variable = accel_y
[../]
[./accel_6z]
type = NodalVariableValue
nodeid = 6
variable = accel_z
[../]
[./vel_6x]
type = NodalVariableValue
nodeid = 6
variable = vel_x
[../]
[./vel_6y]
type = NodalVariableValue
nodeid = 6
variable = vel_y
[../]
[./vel_6z]
type = NodalVariableValue
nodeid = 6
variable = vel_z
[../]
[./disp_6x]
type = NodalVariableValue
nodeid = 6
variable = disp_x
[../]
[./disp_6y]
type = NodalVariableValue
nodeid = 6
variable = disp_y
[../]
[./disp_6z]
type = NodalVariableValue
nodeid = 6
variable = disp_z
[../]
[]
[Outputs]
exodus = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/dynamics/prescribed_displacement/3D_QStatic_1_Ramped_Displacement_with_gravity.i)
# One 3D element under ramped displacement loading.
#
# loading in z direction:
# time : 0.0 0.1 0.2 0.3
# disp : 0.0 0.0 -0.01 -0.01
# Gravity is applied in y direction. To equilibrate the system
# under gravity, a static analysis is run in the first time step
# by turning off the inertial terms. (see controls block and
# DynamicSolidMechanics block).
# Result: The displacement at the top node in the z direction should match
# the prescribed displacement. Also, the z acceleration should
# be two triangular pulses, one peaking at 0.1 and another peaking at
# 0.2.
# The y displacement would be offset by the gravity displacement.
# Also the y acceleration and velocity should be zero until the loading in
# the z direction starts (i.e, until 0.1s)
# Note: The time step used in the displacement data file should match
# the simulation time step (dt and dtmin in the Executioner block).
[Mesh]
type = GeneratedMesh
dim = 3 # Dimension of the mesh
nx = 1 # Number of elements in the x direction
ny = 1 # Number of elements in the y direction
nz = 1 # Number of elements in the z direction
xmin = 0.0
xmax = 1
ymin = 0.0
ymax = 1
zmin = 0.0
zmax = 1
allow_renumbering = false # So NodalVariableValue can index by id
[]
[Variables] # variables that are solved
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[AuxVariables] # variables that are calculated for output
[./accel_x]
[../]
[./vel_x]
[../]
[./accel_y]
[../]
[./vel_y]
[../]
[./accel_z]
[../]
[./vel_z]
[../]
[./stress_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zz]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_zz]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Kernels]
[./DynamicSolidMechanics] # zeta*K*vel + K * disp
displacements = 'disp_x disp_y disp_z'
stiffness_damping_coefficient = 0.000025
static_initialization = true #turns off rayliegh damping for the first time step to stabilize system under gravity
[../]
[./inertia_x] # M*accel + eta*M*vel
type = InertialForce
variable = disp_x
velocity = vel_x
acceleration = accel_x
beta = 0.25 # Newmark time integration
gamma = 0.5 # Newmark time integration
eta = 19.63
[../]
[./inertia_y]
type = InertialForce
variable = disp_y
velocity = vel_y
acceleration = accel_y
beta = 0.25
gamma = 0.5
eta = 19.63
[../]
[./inertia_z]
type = InertialForce
variable = disp_z
velocity = vel_z
acceleration = accel_z
beta = 0.25
gamma = 0.5
eta = 19.63
[../]
[./gravity]
type = Gravity
variable = disp_y
value = -9.81
[../]
[]
[AuxKernels]
[./accel_x] # Calculates and stores acceleration at the end of time step
type = NewmarkAccelAux
variable = accel_x
displacement = disp_x
velocity = vel_x
beta = 0.25
execute_on = timestep_end
[../]
[./vel_x] # Calculates and stores velocity at the end of the time step
type = NewmarkVelAux
variable = vel_x
acceleration = accel_x
gamma = 0.5
execute_on = timestep_end
[../]
[./accel_y]
type = NewmarkAccelAux
variable = accel_y
displacement = disp_y
velocity = vel_y
beta = 0.25
execute_on = timestep_end
[../]
[./vel_y]
type = NewmarkVelAux
variable = vel_y
acceleration = accel_y
gamma = 0.5
execute_on = timestep_end
[../]
[./accel_z]
type = NewmarkAccelAux
variable = accel_z
displacement = disp_z
velocity = vel_z
beta = 0.25
execute_on = timestep_end
[../]
[./vel_z]
type = NewmarkVelAux
variable = vel_z
acceleration = accel_z
gamma = 0.5
execute_on = timestep_end
[../]
[./stress_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
[../]
[./strain_xx]
type = RankTwoAux
rank_two_tensor = total_strain
variable = strain_xx
index_i = 0
index_j = 0
[../]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[../]
[./strain_yy]
type = RankTwoAux
rank_two_tensor = total_strain
variable = strain_yy
index_i = 1
index_j = 1
[../]
[./stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
[../]
[./strain_zz]
type = RankTwoAux
rank_two_tensor = total_strain
variable = strain_zz
index_i = 2
index_j = 2
[../]
[]
[Functions]
[./displacement_front]
type = PiecewiseLinear
data_file = 'displacement.csv'
format = columns
[../]
[]
[BCs]
[./prescribed_displacement]
type = PresetDisplacement
variable = disp_z
velocity = vel_z
acceleration = accel_z
beta = 0.25
boundary = front
function = displacement_front
[../]
[./anchor_x]
type = DirichletBC
variable = disp_x
boundary = left
value = 0.0
[../]
[./anchor_y]
type = DirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[../]
[./anchor_z]
type = DirichletBC
variable = disp_z
boundary = back
value = 0.0
[../]
[]
[Materials]
[./elasticity_tensor]
youngs_modulus = 325e6 #Pa
poissons_ratio = 0.3
type = ComputeIsotropicElasticityTensor
block = 0
[../]
[./strain]
#Computes the strain, assuming small strains
type = ComputeSmallStrain
block = 0
displacements = 'disp_x disp_y disp_z'
[../]
[./stress]
#Computes the stress, using linear elasticity
type = ComputeLinearElasticStress
block = 0
[../]
[./density]
type = GenericConstantMaterial
block = 0
prop_names = density
prop_values = 2000 #kg/m3
[../]
[]
[Controls] # turns off inertial terms for the first time step
[./period0]
type = TimePeriod
disable_objects = '*/vel_x */vel_y */vel_z */accel_x */accel_y */accel_z */inertia_x */inertia_y */inertia_z'
start_time = 0.0
end_time = 0.1 # dt used in the simulation
[../]
[../]
[Executioner]
type = Transient
start_time = 0
end_time = 3.0
l_tol = 1e-6
nl_rel_tol = 1e-6
nl_abs_tol = 1e-6
dt = 0.1
timestep_tolerance = 1e-6
[]
[Postprocessors] # These quantites are printed to a csv file at every time step
[./_dt]
type = TimestepSize
[../]
[./accel_6x]
type = NodalVariableValue
nodeid = 6
variable = accel_x
[../]
[./accel_6y]
type = NodalVariableValue
nodeid = 6
variable = accel_y
[../]
[./accel_6z]
type = NodalVariableValue
nodeid = 6
variable = accel_z
[../]
[./vel_6x]
type = NodalVariableValue
nodeid = 6
variable = vel_x
[../]
[./vel_6y]
type = NodalVariableValue
nodeid = 6
variable = vel_y
[../]
[./vel_6z]
type = NodalVariableValue
nodeid = 6
variable = vel_z
[../]
[./disp_6x]
type = NodalVariableValue
nodeid = 6
variable = disp_x
[../]
[./disp_6y]
type = NodalVariableValue
nodeid = 6
variable = disp_y
[../]
[./disp_6z]
type = NodalVariableValue
nodeid = 6
variable = disp_z
[../]
[]
[Outputs]
exodus = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/dynamics/wave_1D/wave_rayleigh_hht_ti.i)
# Wave propogation in 1D using HHT time integration in the presence of Rayleigh damping
#
# The test is for an 1D bar element of length 4m fixed on one end
# with a sinusoidal pulse dirichlet boundary condition applied to the other end.
# alpha, beta and gamma are HHT time integration parameters
# eta and zeta are mass dependent and stiffness dependent Rayleigh damping
# coefficients, respectively.
# The equation of motion in terms of matrices is:
#
# M*accel + (eta*M+zeta*K)*((1+alpha)*vel-alpha*vel_old)
# +(1+alpha)*K*disp-alpha*K*disp_old = 0
#
# Here M is the mass matrix, K is the stiffness matrix
#
# The displacement at the first, second, third and fourth node at t = 0.1 are
# -7.787499960311491942e-02, 1.955566679096475483e-02 and -4.634888180231294501e-03, respectively.
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 4
nz = 1
xmin = 0.0
xmax = 0.1
ymin = 0.0
ymax = 4.0
zmin = 0.0
zmax = 0.1
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[AuxVariables]
[./vel_x]
[../]
[./accel_x]
[../]
[./vel_y]
[../]
[./accel_y]
[../]
[./vel_z]
[../]
[./accel_z]
[../]
[]
[Kernels]
[./DynamicSolidMechanics]
displacements = 'disp_x disp_y disp_z'
hht_alpha = -0.3
stiffness_damping_coefficient = 0.1
[../]
[./inertia_x]
type = InertialForce
variable = disp_x
eta=0.1
alpha = -0.3
[../]
[./inertia_y]
type = InertialForce
variable = disp_y
eta=0.1
alpha = -0.3
[../]
[./inertia_z]
type = InertialForce
variable = disp_z
eta = 0.1
alpha = -0.3
[../]
[]
[AuxKernels]
[./accel_x] # These auxkernels are only to check output
type = TestNewmarkTI
displacement = disp_x
variable = accel_x
first = false
[../]
[./accel_y]
type = TestNewmarkTI
displacement = disp_y
variable = accel_y
first = false
[../]
[./accel_z]
type = TestNewmarkTI
displacement = disp_z
variable = accel_z
first = false
[../]
[./vel_x]
type = TestNewmarkTI
displacement = disp_x
variable = vel_x
[../]
[./vel_y]
type = TestNewmarkTI
displacement = disp_y
variable = vel_y
[../]
[./vel_z]
type = TestNewmarkTI
displacement = disp_z
variable = vel_z
[../]
[]
[BCs]
[./top_y]
type = DirichletBC
variable = disp_y
boundary = top
value=0.0
[../]
[./top_x]
type = DirichletBC
variable = disp_x
boundary = top
value=0.0
[../]
[./top_z]
type = DirichletBC
variable = disp_z
boundary = top
value=0.0
[../]
[./right_x]
type = DirichletBC
variable = disp_x
boundary = right
value=0.0
[../]
[./right_z]
type = DirichletBC
variable = disp_z
boundary = right
value=0.0
[../]
[./left_x]
type = DirichletBC
variable = disp_x
boundary = left
value=0.0
[../]
[./left_z]
type = DirichletBC
variable = disp_z
boundary = left
value=0.0
[../]
[./front_x]
type = DirichletBC
variable = disp_x
boundary = front
value=0.0
[../]
[./front_z]
type = DirichletBC
variable = disp_z
boundary = front
value=0.0
[../]
[./back_x]
type = DirichletBC
variable = disp_x
boundary = back
value=0.0
[../]
[./back_z]
type = DirichletBC
variable = disp_z
boundary = back
value=0.0
[../]
[./bottom_x]
type = DirichletBC
variable = disp_x
boundary = bottom
value=0.0
[../]
[./bottom_z]
type = DirichletBC
variable = disp_z
boundary = bottom
value=0.0
[../]
[./bottom_y]
type = FunctionDirichletBC
variable = disp_y
boundary = bottom
function = displacement_bc
[../]
[]
[Materials]
[./Elasticity_tensor]
type = ComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
C_ijkl = '1 0'
[../]
[./strain]
type = ComputeSmallStrain
block = 0
displacements = 'disp_x disp_y disp_z'
[../]
[./stress]
type = ComputeLinearElasticStress
block = 0
[../]
[./density]
type = GenericConstantMaterial
block = 0
prop_names = 'density'
prop_values = '1'
[../]
[]
[Executioner]
type = Transient
start_time = 0
end_time = 6.0
l_tol = 1e-12
nl_rel_tol = 1e-12
dt = 0.1
[./TimeIntegrator]
type = NewmarkBeta
beta = 0.422
gamma = 0.8
[../]
[]
[Functions]
[./displacement_bc]
type = PiecewiseLinear
data_file = 'sine_wave.csv'
format = columns
[../]
[]
[Postprocessors]
[./_dt]
type = TimestepSize
[../]
[./disp_1]
type = NodalVariableValue
nodeid = 1
variable = disp_y
[../]
[./disp_2]
type = NodalVariableValue
nodeid = 3
variable = disp_y
[../]
[./disp_3]
type = NodalVariableValue
nodeid = 10
variable = disp_y
[../]
[./disp_4]
type = NodalVariableValue
nodeid = 14
variable = disp_y
[../]
[]
[Outputs]
file_base = 'wave_rayleigh_hht_out'
exodus = true
perf_graph = true
[]