- angle_unitsThe units of the angle of rotation. Choices are:degrees radians
C++ Type:MooseEnum
Controllable:No
Description:The units of the angle of rotation. Choices are:degrees radians
- axis_directionDirection of the axis of rotation
C++ Type:libMesh::VectorValue<double>
Controllable:No
Description:Direction of the axis of rotation
- axis_originOrigin of the axis of rotation
C++ Type:libMesh::VectorValue<double>
Controllable:No
Description:Origin of the axis of rotation
- boundaryThe list of boundary IDs from the mesh where this object applies
C++ Type:std::vector<BoundaryName>
Controllable:No
Description:The list of boundary IDs from the mesh where this object applies
- componentThe component for the rotational displacement
C++ Type:int
Controllable:No
Description:The component for the rotational displacement
- displacementsThe string of displacements suitable for the problem statement
C++ Type:std::vector<VariableName>
Controllable:No
Description:The string of displacements suitable for the problem statement
- functionThe function providing the total angle of rotation or the angular velocity.
C++ Type:FunctionName
Controllable:No
Description:The function providing the total angle of rotation or the angular velocity.
- 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
Displacement About Axis
Implements a boundary condition that enforces rotationaldisplacement around an axis on a boundary
Description
The boundary condition class DisplacementAboutAxis
applies a rotating displacement to the specified mesh surface according to the user defined rotation function. The boundary condition is always applied to the displaced mesh. The rotation function can be given in either radians or in angles, and an axis of rotation can be specified with the axis_origin
and axis_direction
parameters. By default, the function defines the rotation, but if the angular_velocity
parameter is set, it allows for the function to define an angular velocity instead of a total rotation angle.
The rotating displacement value at the current node is calculated according to Eq. (1): (1) where is the translation matrix for axes of rotation not centered at the coordinate system origin, and , , and are rotation matrices about the , , and coordinate system axes, respectively.
Example Input File Syntax
[./top_x]
type = DisplacementAboutAxis
boundary = 2
function = '0.1*t'
angle_units = degrees
axis_origin = '10. 10. 10.'
axis_direction = '0 -1.0 1.0'
component = 0
variable = disp_x
[../]
(modules/solid_mechanics/test/tests/torque_reaction/torque_reaction_cylinder.i)A Function is required to prescribe either the total rotation or angular velocity of the DisplacementAboutAxis
boundary condition applied to the mesh. Either the name of another function defined elsewhere or a parsed function is used as the argument for the function
input parameter in the DisplacementAboutAxis
block. In this example, a parsed function is used.
Input Parameters
- angular_velocityFalseIf true interprets the function value as an angular velocity
Default:False
C++ Type:bool
Controllable:No
Description:If true interprets the function value as an angular velocity
- diag_save_inThe name of auxiliary variables to save this BC'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 BC's diagonal jacobian contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
- presetTrueWhether or not to preset the BC (apply the value before the solve begins).
Default:True
C++ Type:bool
Controllable:No
Description:Whether or not to preset the BC (apply the value before the solve begins).
- save_inThe name of auxiliary variables to save this BC'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 BC's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
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_tagsresidualThe tag for the vectors this Kernel should fill
Default:residual
C++ Type:MultiMooseEnum
Options:nontime, time, residual
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.
- 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
- 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_meshFalseWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Default:False
C++ Type:bool
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/cohesive_zone_model/czm_patch_test_base.i)
- (modules/solid_mechanics/test/tests/torque_reaction/disp_about_axis_errors.i)
- (modules/solid_mechanics/test/tests/ad_anisotropic_creep/3d_bar_orthotropic_90deg_rotation_ad_creep_x_no_rotation.i)
- (modules/solid_mechanics/test/tests/ad_anisotropic_creep/3d_bar_orthotropic_90deg_rotation_ad_creep_z.i)
- (modules/solid_mechanics/test/tests/finite_strain_elastic_anisotropy/3d_bar_orthotropic_90deg_rotation_ad.i)
- (modules/solid_mechanics/test/tests/cohesive_zone_model/ad_czm.i)
- (modules/solid_mechanics/test/tests/ad_anisotropic_creep/3d_bar_orthotropic_90deg_rotation_ad_creep_z_no_rotation.i)
- (modules/solid_mechanics/test/tests/torque_reaction/disp_about_axis_axial_motion.i)
- (modules/solid_mechanics/test/tests/finite_strain_elastic_anisotropy/3d_bar_orthotropic_full_rotation.i)
- (modules/solid_mechanics/test/tests/cohesive_zone_model/stretch_rotate_large_deformation.i)
- (modules/solid_mechanics/test/tests/ad_anisotropic_creep/3d_bar_orthotropic_90deg_rotation_ad_creep_x.i)
- (modules/solid_mechanics/test/tests/torque_reaction/disp_about_axis_axial_motion_delayed.i)
- (modules/solid_mechanics/test/tests/finite_strain_elastic_anisotropy/3d_bar_orthotropic_full_rotation_ad.i)
- (modules/solid_mechanics/test/tests/finite_strain_elastic_anisotropy/3d_bar_orthotropic_90deg_rotation.i)
- (modules/solid_mechanics/test/tests/torque_reaction/torque_reaction_cylinder.i)
(modules/solid_mechanics/test/tests/torque_reaction/torque_reaction_cylinder.i)
# This test uses the DisplacementAboutAxis boundary condition to twist the top
# of a cylinder while the bottom face of the cylinder remains fixed. The
# TorqueReaction postprocessor is used to calculate the applied torque acting
# on the cylinder at the top face. This test can be extended, with a new mesh,
# to model a crack in the center of the cylinder face under type III loading.
[GlobalParams]
order = FIRST
family = LAGRANGE
displacements = 'disp_x disp_y disp_z'
[]
[Mesh]
file = cylinder.e
[]
[Problem]
extra_tag_vectors = 'ref'
[]
[GlobalParams]
volumetric_locking_correction=true
[]
[AuxVariables]
[./saved_x]
[../]
[./saved_y]
[../]
[./saved_z]
[../]
[]
[AuxKernels]
[saved_x]
type = TagVectorAux
vector_tag = 'ref'
v = 'disp_x'
variable = 'saved_x'
[]
[saved_y]
type = TagVectorAux
vector_tag = 'ref'
v = 'disp_y'
variable = 'saved_y'
[]
[saved_z]
type = TagVectorAux
vector_tag = 'ref'
v = 'disp_z'
variable = 'saved_z'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[master]
strain = FINITE
generate_output = 'stress_xx'
add_variables = true
extra_vector_tags = 'ref'
[]
[]
[BCs]
[./bottom_x]
type = DirichletBC
variable = disp_x
boundary = 1
value = 0.0
[../]
[./bottom_y]
type = DirichletBC
variable = disp_y
boundary = 1
value = 0.0
[../]
[./bottom_z]
type = DirichletBC
variable = disp_z
boundary = 1
value = 0.0
[../]
[./top_x]
type = DisplacementAboutAxis
boundary = 2
function = '0.1*t'
angle_units = degrees
axis_origin = '10. 10. 10.'
axis_direction = '0 -1.0 1.0'
component = 0
variable = disp_x
[../]
[./top_y]
type = DisplacementAboutAxis
boundary = 2
function = '0.1*t'
angle_units = degrees
axis_origin = '10. 10. 10.'
axis_direction = '0 -1.0 1.0'
component = 1
variable = disp_y
[../]
[./top_z]
type = DisplacementAboutAxis
boundary = 2
function = '0.1*t'
angle_units = degrees
axis_origin = '10. 10. 10.'
axis_direction = '0 -1.0 1.0'
component = 2
variable = disp_z
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 207000
poissons_ratio = 0.3
[../]
[./elastic_stress]
type = ComputeFiniteStrainElasticStress
[../]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart'
petsc_options_value = '101'
line_search = 'none'
l_max_its = 50
nl_max_its = 20
nl_abs_tol = 1e-12
nl_rel_tol = 1e-11
l_tol = 1e-10
start_time = 0.0
dt = 0.25
end_time = 0.5
[]
[Postprocessors]
[./torque]
type = TorqueReaction
boundary = 2
reaction_force_variables = 'saved_x saved_y saved_z'
axis_origin = '10. 10. 10.'
direction_vector = '0 -1.0 1.0'
[../]
[]
[Outputs]
exodus = true
[]
(modules/solid_mechanics/test/tests/cohesive_zone_model/czm_patch_test_base.i)
# Patch test for cohesive zone modeling to check the jacobian of cohesive kernels and materials.
# One test of this kind should be included when adding a new traction separation law.
# To preperly check the cohesive zone Jacobian, the cohesive stiffness should be low compared to the bulk stiffness.
# Quadratic convergence is always expected.
[Mesh]
[./msh]
type = FileMeshGenerator
file = patch_mesh.e
[]
[./split]
type = BreakMeshByBlockGenerator
input = msh
[]
[./add_surfaces]
type = SideSetsFromNormalsGenerator
input = split
normals = '0 0 1
0 1 0
1 0 0
0 0 -1
0 -1 0
-1 0 0'
fixed_normal = true
new_boundary = 'z1 y1 x1 z0 y0 x0'
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Physics]
[SolidMechanics]
[QuasiStatic]
[./all]
strain = FINITE
add_variables = true
use_finite_deform_jacobian = true
use_automatic_differentiation = true
[../]
[../]
[../]
[]
[Functions]
[./stretch]
type = PiecewiseLinear
x = '0 0.05'
y = '0 0.1'
[../]
[]
[Constraints]
[x1]
type = EqualValueBoundaryConstraint
variable = disp_x
secondary = 'x1' # boundary
penalty = 1e6
[]
[y1]
type = EqualValueBoundaryConstraint
variable = disp_y
secondary = 'y1' # boundary
penalty = 1e6
[]
[]
[BCs]
[./fix_x]
type = DirichletBC
preset = true
value = 0.0
boundary = 'x0'
variable = disp_x
[../]
[./fix_y]
type = DirichletBC
preset = true
value = 0.0
boundary = 'y0'
variable = disp_y
[../]
[./fix_z]
type = DirichletBC
preset = true
value = 0.0
boundary = 'z0'
variable = disp_z
[../]
[./back_z]
type = FunctionDirichletBC
boundary = 'z1'
variable = disp_z
use_displaced_mesh = true
function = stretch
[../]
[./rotate_x]
type = DisplacementAboutAxis
boundary = 'x0 y0 z0 x1 y1 z1'
function = '90.'
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 1. 0.'
component = 0
variable = disp_x
angular_velocity = true
[../]
[./rotate_y]
type = DisplacementAboutAxis
boundary = 'x0 y0 z0 x1 y1 z1'
function = '90.'
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 1. 0.'
component = 1
variable = disp_y
angular_velocity = true
[../]
[./rotate_z]
type = DisplacementAboutAxis
boundary = 'x0 y0 z0 x1 y1 z1'
function = '90.'
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 1. 0.'
component = 2
variable = disp_z
angular_velocity = true
[../]
[]
[Controls]
[./c1]
type = TimePeriod
enable_objects = 'BCs::fix_x BCs::fix_y BCs::fix_z BCs::back_z Constraints::x1 Constraints::y1'
disable_objects = 'BCs::rotate_x BCs::rotate_y BCs::rotate_z'
start_time = '0'
end_time = '0.05'
[../]
[]
[Physics/SolidMechanics/CohesiveZone]
[./czm_ik]
boundary = 'interface'
[../]
[]
[Materials]
[./stress]
type = ADComputeFiniteStrainElasticStress
[../]
[./elasticity_tensor]
type = ADComputeElasticityTensor
fill_method = symmetric9
C_ijkl = '1.684e5 0.176e5 0.176e5 1.684e5 0.176e5 1.684e5 0.754e5 0.754e5 0.754e5'
[../]
[./czm_mat]
boundary = 'interface'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = 'newton'
line_search = none
petsc_options_iname = '-pc_type'
petsc_options_value = 'lu'
l_max_its = 2
l_tol = 1e-14
nl_max_its = 15
nl_rel_tol = 1e-10
nl_abs_tol = 1e-10
start_time = 0.0
dt = 0.025
end_time = 0.075
[]
[Postprocessors]
[./nonlin]
type = NumNonlinearIterations
[../]
[]
[Outputs]
csv = true
exodus = true
[]
(modules/solid_mechanics/test/tests/torque_reaction/disp_about_axis_errors.i)
[GlobalParams]
order = FIRST
family = LAGRANGE
displacements = 'disp_x disp_y disp_z'
[]
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
[]
[Functions]
[./rampConstant]
type = PiecewiseLinear
x = '0. 1.'
y = '0. 1.'
scale_factor = 1.
[../]
[]
[Physics/SolidMechanics/QuasiStatic]
[master]
strain = FINITE
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress'
add_variables = true
[]
[]
[BCs]
[./bottom_x]
type = DirichletBC
variable = disp_x
boundary = bottom
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
[../]
[./top_x]
type = DisplacementAboutAxis
boundary = top
function = rampConstant
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 0
variable = disp_x
[../]
[./top_y]
type = DisplacementAboutAxis
boundary = top
function = rampConstant
angle_units = degrees
axis_origin = '0. 0. 0.'
variable = disp_y
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = 0
youngs_modulus = 207000
poissons_ratio = 0.3
[../]
[./elastic_stress]
type = ComputeFiniteStrainElasticStress
block = 0
[../]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart'
petsc_options_value = '101'
line_search = 'none'
l_max_its = 30
nl_max_its = 20
nl_rel_tol = 1e-10
nl_abs_tol = 1e-12
l_tol = 1e-8
start_time = 0.0
dt = 0.1
dtmin = 0.1 # die instead of cutting the timestep
end_time = 0.5
[]
[Outputs]
exodus = true
[]
(modules/solid_mechanics/test/tests/ad_anisotropic_creep/3d_bar_orthotropic_90deg_rotation_ad_creep_x_no_rotation.i)
[Mesh]
[generated_mesh]
type = GeneratedMeshGenerator
dim = 3
xmin = 0
xmax = 2
ymin = 0
ymax = 10
zmin = 0
zmax = 2
nx = 1
ny = 1
nz = 1
elem_type = HEX8
[]
[corner]
type = ExtraNodesetGenerator
new_boundary = 101
coord = '0 0 0'
input = generated_mesh
[]
[side]
type = ExtraNodesetGenerator
new_boundary = 102
coord = '2 0 0'
input = corner
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
add_variables = true
volumetric_locking_correction = true
use_automatic_differentiation = true
generate_output = 'elastic_strain_xx stress_xx creep_strain_xx creep_strain_yy creep_strain_zz'
[]
[]
[Materials]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "trial_creep"
max_iterations = 50
absolute_tolerance = 1e-18
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
hill_constants = "0.25 0.4 0.65 1.5 1.5 1.5"
[]
[trial_creep]
type = ADHillCreepStressUpdate
coefficient = 5e-14
n_exponent = 10
m_exponent = 0
activation_energy = 0
max_inelastic_increment = 0.00003
absolute_tolerance = 1e-18
relative_tolerance = 1e-18
# Force it to not use integration error
max_integration_error = 100.0
[]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 500
poissons_ratio = 0.0
[]
[]
[BCs]
[fix_x]
type = ADDirichletBC
variable = disp_x
boundary = bottom
value = 0
[]
[rot_z]
type = DisplacementAboutAxis
boundary = bottom
function = 0
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '1. 0. 1.0e-13'
component = 2
variable = disp_z
[]
#
[rot_y]
type = DisplacementAboutAxis
boundary = bottom
function = 0
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '1. 0. 1.0e-13'
component = 1
variable = disp_y
[]
[rot_z90]
type = DisplacementAboutAxis
boundary = bottom
function = 0
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '1. 0. 1.0e-13'
component = 2
variable = disp_z
[]
#
[rot_y90]
type = DisplacementAboutAxis
boundary = bottom
function = 0
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '1. 0. 1.0e-13'
component = 1
variable = disp_y
[]
[press]
type = Pressure
boundary = top
function = '-1.0*(t-90)*0.1'
use_displaced_mesh = true
displacements = 'disp_x disp_y disp_z'
variable = disp_y
[]
[]
[Postprocessors]
[creep_strain_yy]
type = ADElementAverageMaterialProperty
mat_prop = creep_strain_yy
[]
[]
[Controls]
[c1]
type = TimePeriod
enable_objects = 'BCs::rot_z BCs::rot_y'
disable_objects = 'BCs::rot_z90 BCs::rot_y90 BCs::press'
start_time = '0'
end_time = '90'
[]
[c190plus]
type = TimePeriod
enable_objects = 'BCs::rot_z90 BCs::rot_y90 BCs::press'
disable_objects = 'BCs::rot_z BCs::rot_y '
start_time = '90'
end_time = '390'
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart'
petsc_options_value = '101'
line_search = 'none'
nl_rel_tol = 1e-11
nl_abs_tol = 1e-11
nl_max_its = 50
l_tol = 1e-4
l_max_its = 50
start_time = 0.0
dt = 0.1
dtmin = 0.1
num_steps = 1200
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Outputs]
exodus = false
csv = true
[]
(modules/solid_mechanics/test/tests/ad_anisotropic_creep/3d_bar_orthotropic_90deg_rotation_ad_creep_z.i)
[Mesh]
[generated_mesh]
type = GeneratedMeshGenerator
dim = 3
xmin = 0
xmax = 2
ymin = 0
ymax = 10
zmin = 0
zmax = 2
nx = 1
ny = 1
nz = 1
elem_type = HEX8
[]
[corner]
type = ExtraNodesetGenerator
new_boundary = 101
coord = '0 0 0'
input = generated_mesh
[]
[side]
type = ExtraNodesetGenerator
new_boundary = 102
coord = '2 0 0'
input = corner
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
add_variables = true
volumetric_locking_correction = true
use_automatic_differentiation = true
generate_output = 'elastic_strain_xx stress_xx creep_strain_xx'
[]
[]
[Materials]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "trial_creep"
max_iterations = 50
absolute_tolerance = 1e-18
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
hill_constants = "0.5 1.0 0.5 1.5 1.5 1.5"
use_large_rotation = true
[]
[trial_creep]
type = ADHillCreepStressUpdate
coefficient = 5e-14
n_exponent = 10
m_exponent = 0
activation_energy = 0
max_inelastic_increment = 0.00003
absolute_tolerance = 1e-18
relative_tolerance = 1e-18
# Force it to not use integration error
max_integration_error = 100.0
use_transformation = true
[]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 500
poissons_ratio = 0.0
[]
[]
[BCs]
[fix_z]
type = ADDirichletBC
variable = disp_z
boundary = bottom
value = 0
[]
[rot_y]
type = DisplacementAboutAxis
boundary = bottom
function = t
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 1
variable = disp_y
[]
#
[rot_x]
type = DisplacementAboutAxis
boundary = bottom
function = t
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 0
variable = disp_x
[]
[rot_y90]
type = DisplacementAboutAxis
boundary = bottom
function = 90
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 1
variable = disp_y
[]
#
[rot_x90]
type = DisplacementAboutAxis
boundary = bottom
function = 90
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 0
variable = disp_x
[]
[press]
boundary = top
function = '-1.0*(t-90)*0.1'
use_displaced_mesh = true
displacements = 'disp_x disp_y disp_z'
type = Pressure
variable = disp_x
[]
[]
[Postprocessors]
[creep_strain_xx]
type = ADElementAverageMaterialProperty
mat_prop = creep_strain_xx
[]
[]
[Controls]
[c1]
type = TimePeriod
enable_objects = 'BCs::rot_x BCs::rot_y'
disable_objects = 'BCs::rot_x90 BCs::rot_y90 BCs::press'
start_time = '0'
end_time = '90'
[]
[c190plus]
type = TimePeriod
enable_objects = 'BCs::rot_x90 BCs::rot_y90 BCs::press'
disable_objects = 'BCs::rot_x BCs::rot_y '
start_time = '90'
end_time = '390'
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart'
petsc_options_value = '101'
line_search = 'none'
nl_rel_tol = 1e-12
nl_abs_tol = 1e-12
nl_max_its = 50
automatic_scaling = true
l_tol = 1e-4
l_max_its = 50
start_time = 0.0
dt = 0.1
dtmin = 0.1
num_steps = 1200
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Outputs]
exodus = false
csv = true
[]
(modules/solid_mechanics/test/tests/finite_strain_elastic_anisotropy/3d_bar_orthotropic_90deg_rotation_ad.i)
[Mesh]
[generated_mesh]
type = GeneratedMeshGenerator
dim = 3
xmin = 0
xmax = 2
ymin = 0
ymax = 10
zmin = 0
zmax = 2
nx = 1
ny = 1
nz = 1
elem_type = HEX8
[]
[corner]
type = ExtraNodesetGenerator
new_boundary = 101
coord = '0 0 0'
input = generated_mesh
[]
[side]
type = ExtraNodesetGenerator
new_boundary = 102
coord = '2 0 0'
input = corner
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
add_variables = true
use_finite_deform_jacobian = true
volumetric_locking_correction = false
use_automatic_differentiation = true
generate_output = 'stress_xx stress_yy stress_zz stress_xy stress_xz'
[]
[]
[Materials]
[stress]
type = ADComputeFiniteStrainElasticStress
[]
[elasticity_tensor]
type = ADComputeElasticityTensor
fill_method = orthotropic
C_ijkl = '2.0e3 2.0e5 2.0e3 0.71428571e3 0.71428571e3 0.71428571e3 0.4 0.2 0.004 0.004 0.2 0.4'
[]
[]
[BCs]
[fix_z]
type = ADDirichletBC
variable = disp_z
boundary = bottom
value = 0
[]
[rot_y]
type = DisplacementAboutAxis
boundary = bottom
function = t
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 1
variable = disp_y
[]
#
[rot_x]
type = DisplacementAboutAxis
boundary = bottom
function = t
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 0
variable = disp_x
[]
[rot_y90]
type = DisplacementAboutAxis
boundary = bottom
function = 90
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 1
variable = disp_y
[]
#
[rot_x90]
type = DisplacementAboutAxis
boundary = bottom
function = 90
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 0
variable = disp_x
[]
[press]
boundary = top
function = '-1.0*(t-90)*10.0'
use_displaced_mesh = true
displacements = 'disp_x disp_y disp_z'
type = Pressure
variable = disp_x
[]
[]
[Controls]
[c1]
type = TimePeriod
enable_objects = 'BCs::rot_x BCs::rot_y'
disable_objects = 'BCs::rot_x90 BCs::rot_y90 BCs::press'
start_time = '0'
end_time = '90'
[]
[c190plus]
type = TimePeriod
enable_objects = 'BCs::rot_x90 BCs::rot_y90 BCs::press'
disable_objects = 'BCs::rot_x BCs::rot_y '
start_time = '90'
end_time = '390'
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart'
petsc_options_value = '101'
line_search = 'none'
nl_rel_tol = 1e-10
nl_abs_tol = 1e-08
nl_max_its = 50
l_tol = 1e-4
l_max_its = 50
start_time = 0.0
dt = 5
dtmin = 5
num_steps = 78
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Outputs]
exodus = true
[]
(modules/solid_mechanics/test/tests/cohesive_zone_model/ad_czm.i)
[Mesh]
[msh]
type = FileMeshGenerator
file = patch_mesh.e
[]
[split]
type = BreakMeshByBlockGenerator
input = msh
[]
[add_surfaces]
type = SideSetsFromNormalsGenerator
input = split
normals = '0 0 1
0 1 0
1 0 0
0 0 -1
0 -1 0
-1 0 0'
fixed_normal = true
new_boundary = 'z1 y1 x1 z0 y0 x0'
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
large_kinematics = true
[]
[Physics]
[SolidMechanics]
[QuasiStatic]
[all]
strain = FINITE
add_variables = true
new_system = true
[]
[]
[CohesiveZone]
[interface]
boundary = 'interface'
strain = SMALL
use_automatic_differentiation = true
[]
[]
[]
[]
[Functions]
[stretch]
type = PiecewiseLinear
x = '0 0.05'
y = '0 0.1'
[]
[]
[Constraints]
[x1]
type = EqualValueBoundaryConstraint
variable = disp_x
secondary = 'x1' # boundary
penalty = 1e6
[]
[y1]
type = EqualValueBoundaryConstraint
variable = disp_y
secondary = 'y1' # boundary
penalty = 1e6
[]
[]
[BCs]
[fix_x]
type = DirichletBC
value = 0.0
boundary = 'x0'
variable = disp_x
[]
[fix_y]
type = DirichletBC
value = 0.0
boundary = 'y0'
variable = disp_y
[]
[fix_z]
type = DirichletBC
value = 0.0
boundary = 'z0'
variable = disp_z
[]
[back_z]
type = FunctionDirichletBC
boundary = 'z1'
variable = disp_z
use_displaced_mesh = true
function = stretch
preset = false
[]
[rotate_x]
type = DisplacementAboutAxis
boundary = 'x0 y0 z0 x1 y1 z1'
function = '90.'
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 1. 0.'
component = 0
variable = disp_x
angular_velocity = true
preset = false
[]
[rotate_y]
type = DisplacementAboutAxis
boundary = 'x0 y0 z0 x1 y1 z1'
function = '90.'
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 1. 0.'
component = 1
variable = disp_y
angular_velocity = true
preset = false
[]
[rotate_z]
type = DisplacementAboutAxis
boundary = 'x0 y0 z0 x1 y1 z1'
function = '90.'
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 1. 0.'
component = 2
variable = disp_z
angular_velocity = true
preset = false
[]
[]
[Controls]
[c1]
type = TimePeriod
enable_objects = 'BCs::fix_x BCs::fix_y BCs::fix_z BCs::back_z Constraints::x1 Constraints::y1'
disable_objects = 'BCs::rotate_x BCs::rotate_y BCs::rotate_z'
start_time = '0'
end_time = '0.05'
[]
[]
[Materials]
[stress]
type = ComputeLagrangianLinearElasticStress
[]
[elasticity_tensor]
type = ComputeElasticityTensor
fill_method = symmetric9
C_ijkl = '1.684e5 0.176e5 0.176e5 1.684e5 0.176e5 1.684e5 0.754e5 0.754e5 0.754e5'
[]
[czm_mat]
type = ADPureElasticTractionSeparation
normal_stiffness = 1e4
tangent_stiffness = 7e3
boundary = 'interface'
[]
[]
[Executioner]
type = Transient
solve_type = 'newton'
line_search = none
automatic_scaling = true
petsc_options_iname = '-pc_type'
petsc_options_value = 'lu'
nl_rel_tol = 1e-15
nl_abs_tol = 1e-15
start_time = 0.0
dt = 0.025
end_time = 0.075
[]
[Outputs]
exodus = true
print_linear_residuals = false
[]
(modules/solid_mechanics/test/tests/ad_anisotropic_creep/3d_bar_orthotropic_90deg_rotation_ad_creep_z_no_rotation.i)
[Mesh]
[generated_mesh]
type = GeneratedMeshGenerator
dim = 3
xmin = 0
xmax = 2
ymin = 0
ymax = 10
zmin = 0
zmax = 2
nx = 1
ny = 1
nz = 1
elem_type = HEX8
[]
[corner]
type = ExtraNodesetGenerator
new_boundary = 101
coord = '0 0 0'
input = generated_mesh
[]
[side]
type = ExtraNodesetGenerator
new_boundary = 102
coord = '2 0 0'
input = corner
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
add_variables = true
volumetric_locking_correction = true
use_automatic_differentiation = true
generate_output = 'elastic_strain_yy stress_yy creep_strain_yy'
[]
[]
[Materials]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "trial_creep"
max_iterations = 50
absolute_tolerance = 1e-18
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
hill_constants = "0.5 1.0 0.5 1.5 1.5 1.5"
use_large_rotation = true
[]
[trial_creep]
type = ADHillCreepStressUpdate
coefficient = 5e-14
n_exponent = 10
m_exponent = 0
activation_energy = 0
max_inelastic_increment = 0.00003
absolute_tolerance = 1e-18
relative_tolerance = 1e-18
# Force it to not use integration error
max_integration_error = 100.0
use_transformation = true
[]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 500
poissons_ratio = 0.0
[]
[]
[BCs]
[fix_z]
type = ADDirichletBC
variable = disp_z
boundary = bottom
value = 0
[]
[rot_y]
type = DisplacementAboutAxis
boundary = bottom
function = 0
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 1
variable = disp_y
[]
#
[rot_x]
type = DisplacementAboutAxis
boundary = bottom
function = 0
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 0
variable = disp_x
[]
[rot_y90]
type = DisplacementAboutAxis
boundary = bottom
function = 0
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 1
variable = disp_y
[]
#
[rot_x90]
type = DisplacementAboutAxis
boundary = bottom
function = 0
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 0
variable = disp_x
[]
[press]
boundary = top
function = '-1.0*(t-90)*0.1'
use_displaced_mesh = true
displacements = 'disp_x disp_y disp_z'
type = Pressure
variable = disp_y
[]
[]
[Controls]
[c1]
type = TimePeriod
enable_objects = 'BCs::rot_x BCs::rot_y'
disable_objects = 'BCs::rot_x90 BCs::rot_y90 BCs::press'
start_time = '0'
end_time = '90'
[]
[c190plus]
type = TimePeriod
enable_objects = 'BCs::rot_x90 BCs::rot_y90 BCs::press'
disable_objects = 'BCs::rot_x BCs::rot_y '
start_time = '90'
end_time = '390'
[]
[]
[Postprocessors]
[creep_strain_xx]
type = ADElementAverageMaterialProperty
mat_prop = creep_strain_yy
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart'
petsc_options_value = '101'
line_search = 'none'
nl_rel_tol = 1e-12
nl_abs_tol = 1e-12
nl_max_its = 50
automatic_scaling = true
l_tol = 1e-4
l_max_its = 50
start_time = 0.0
dt = 0.1
dtmin = 0.1
num_steps = 1200
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Outputs]
exodus = false
csv = true
[]
(modules/solid_mechanics/test/tests/torque_reaction/disp_about_axis_axial_motion.i)
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction=true
[]
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
[]
[Physics/SolidMechanics/QuasiStatic]
[master]
strain = FINITE
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress'
add_variables = true
decomposition_method = EigenSolution
use_finite_deform_jacobian = true
[]
[]
[BCs]
[./bottom_z]
type = DirichletBC
variable = disp_z
boundary = bottom
value = 0.0
[../]
# Because rotation is prescribed about the z axis, the
# DisplacementAboutAxis BC is only needed for the x and y
# displacements.
[./top_x]
type = DisplacementAboutAxis
boundary = top
function = 't'
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 0
variable = disp_x
[../]
[./top_y]
type = DisplacementAboutAxis
boundary = top
function = 't'
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 1
variable = disp_y
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 207000
poissons_ratio = 0.3
[../]
[./elastic_stress]
type = ComputeFiniteStrainElasticStress
[../]
[]
[Postprocessors]
[./disp_x_5]
type = NodalVariableValue
variable = disp_x
nodeid = 5
[../]
[./disp_y_5]
type = NodalVariableValue
variable = disp_y
nodeid = 5
[../]
[./disp_x_6]
type = NodalVariableValue
variable = disp_x
nodeid = 6
[../]
[./disp_y_6]
type = NodalVariableValue
variable = disp_y
nodeid = 6
[../]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart'
petsc_options_value = '101'
line_search = 'none'
l_max_its = 30
nl_max_its = 20
nl_rel_tol = 1e-10
nl_abs_tol = 1e-9
l_tol = 1e-8
start_time = 0.0
dt = 2
dtmin = 2 # die instead of cutting the timestep
end_time = 90
[]
[Outputs]
file_base = disp_about_axis_axial_motion_out
csv = true
[]
(modules/solid_mechanics/test/tests/finite_strain_elastic_anisotropy/3d_bar_orthotropic_full_rotation.i)
[Mesh]
[generated_mesh]
type = GeneratedMeshGenerator
dim = 3
xmin = 0
xmax = 2
ymin = 0
ymax = 10
zmin = 0
zmax = 2
nx = 1
ny = 1
nz = 1
elem_type = HEX8
[]
[corner]
type = ExtraNodesetGenerator
new_boundary = 101
coord = '0 0 0'
input = generated_mesh
[]
[side]
type = ExtraNodesetGenerator
new_boundary = 102
coord = '2 0 0'
input = corner
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
add_variables = true
use_finite_deform_jacobian = true
volumetric_locking_correction = false
generate_output = 'stress_xx stress_yy stress_zz stress_xy stress_xz'
[]
[]
[Materials]
[stress]
type = ComputeFiniteStrainElasticStress
[]
[elasticity_tensor]
type = ComputeElasticityTensor
fill_method = orthotropic
C_ijkl = '2.0e3 2.0e5 2.0e3 0.71428571e3 0.71428571e3 0.71428571e3 0.4 0.2 0.004 0.004 0.2 0.4'
[]
[]
[BCs]
[fix_z]
type = DirichletBC
variable = disp_z
boundary = bottom
value = 0
[]
[rot_y]
type = DisplacementAboutAxis
boundary = bottom
function = t
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 1
variable = disp_y
[]
#
[rot_x]
type = DisplacementAboutAxis
boundary = bottom
function = t
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 0
variable = disp_x
[]
[rot_y90]
type = DisplacementAboutAxis
boundary = bottom
function = 360
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 1
variable = disp_y
[]
#
[rot_x90]
type = DisplacementAboutAxis
boundary = bottom
function = 360
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 0
variable = disp_x
[]
[press]
boundary = top
function = '-1.0*(t-360)*10.0'
use_displaced_mesh = true
displacements = 'disp_x disp_y disp_z'
type = Pressure
variable = disp_y
[]
[]
[Controls]
[c1]
type = TimePeriod
enable_objects = 'BCs::rot_x BCs::rot_y'
disable_objects = 'BCs::rot_x90 BCs::rot_y90 BCs::press'
start_time = '0'
end_time = '360'
[]
[c190plus]
type = TimePeriod
enable_objects = 'BCs::rot_x90 BCs::rot_y90 BCs::press'
disable_objects = 'BCs::rot_x BCs::rot_y '
start_time = '360'
end_time = '660'
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart'
petsc_options_value = '101'
line_search = 'none'
nl_rel_tol = 1e-10
nl_abs_tol = 1e-08
nl_max_its = 50
l_tol = 1e-4
l_max_its = 50
start_time = 0.0
dt = 5
dtmin = 5
num_steps = 132
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Outputs]
exodus = true
[]
(modules/solid_mechanics/test/tests/cohesive_zone_model/stretch_rotate_large_deformation.i)
#
# Stretch + rotation test
#
# This test is designed to compute a uniaxial stress and then follow it as the mesh is rotated .
#
# The mesh is composed of two, single-elemnt blocks
[Mesh]
[./msh]
type = GeneratedMeshGenerator
dim = 3
nx = 1
ny = 1
nz = 2
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -1
zmax = 1
[]
[./new_block]
type = SubdomainBoundingBoxGenerator
input = msh
block_id = 1
bottom_left = '-0.5 -0.5 0'
top_right = '0.5 0.5 0.5'
[]
[./split]
type = BreakMeshByBlockGenerator
input = new_block
[]
[add_side_sets]
input = split
type = SideSetsFromNormalsGenerator
normals = '0 -1 0
0 1 0
-1 0 0
1 0 0
0 0 -1
0 0 1'
fixed_normal = true
new_boundary = 'y0 y1 x0 x1 z0 z1'
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Functions]
[./stretch]
type = PiecewiseLinear
x = '0 1'
y = '0 300'
[../]
[]
[BCs]
[./fix_x]
type = DirichletBC
preset = true
value = 0.0
boundary = x0
variable = disp_x
[../]
[./fix_y]
type = DirichletBC
preset = true
value = 0.0
boundary = y0
variable = disp_y
[../]
[./fix_z]
type = DirichletBC
preset = true
value = 0.0
boundary = z0
variable = disp_z
[../]
[./back_z]
type = FunctionNeumannBC
boundary = z1
variable = disp_z
use_displaced_mesh = false
function = stretch
[../]
[./rotate_x]
type = DisplacementAboutAxis
boundary = 'x0 y0 z0 z1'
function = '90.'
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 1. 0.'
component = 0
variable = disp_x
angular_velocity = true
[../]
[./rotate_y]
type = DisplacementAboutAxis
boundary = 'x0 y0 z0 z1'
function = '90.'
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 1. 0.'
component = 1
variable = disp_y
angular_velocity = true
[../]
[./rotate_z]
type = DisplacementAboutAxis
boundary = 'x0 y0 z0 z1'
function = '90.'
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 1. 0.'
component = 2
variable = disp_z
angular_velocity = true
[../]
[]
[Physics/SolidMechanics/CohesiveZone]
[./czm_ik]
boundary = 'interface'
strain = FINITE
generate_output='traction_x traction_y traction_z jump_x jump_y jump_z normal_traction tangent_traction normal_jump tangent_jump pk1_traction_x pk1_traction_y pk1_traction_z'
[../]
[]
[Controls]
[./c1]
type = TimePeriod
enable_objects = 'BCs::fix_x BCs::fix_y BCs::fix_z BCs::back_z'
disable_objects = 'BCs::rotate_x BCs::rotate_y BCs::rotate_z'
start_time = '0'
end_time = '1'
[../]
[]
[Physics]
[SolidMechanics]
[QuasiStatic]
[./all]
strain = FINITE
add_variables = true
use_finite_deform_jacobian = true
use_automatic_differentiation = true
generate_output = 'stress_xx stress_yy stress_zz stress_xy stress_yz stress_xz'
[../]
[../]
[../]
[]
[Materials]
[./stress]
type = ADComputeFiniteStrainElasticStress
[../]
[./elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 1e3
poissons_ratio = 0.3
[../]
[./czm_mat]
type = PureElasticTractionSeparation
boundary = 'interface'
normal_stiffness = 10000
tangent_stiffness = 7000
[../]
[]
[Preconditioning]
[./SMP]
type = SMP
full = true
[../]
[]
[Executioner]
# Executioner
type = Transient
solve_type = 'NEWTON'
line_search = none
petsc_options_iname = '-pc_type '
petsc_options_value = 'lu'
nl_rel_tol = 1e-30
nl_abs_tol = 1e-10
l_max_its = 20
start_time = 0.0
dt = 0.1
end_time = 2
[]
[Outputs]
exodus = true
csv =true
[]
(modules/solid_mechanics/test/tests/ad_anisotropic_creep/3d_bar_orthotropic_90deg_rotation_ad_creep_x.i)
[Mesh]
[generated_mesh]
type = GeneratedMeshGenerator
dim = 3
xmin = 0
xmax = 2
ymin = 0
ymax = 10
zmin = 0
zmax = 2
nx = 1
ny = 1
nz = 1
elem_type = HEX8
[]
[corner]
type = ExtraNodesetGenerator
new_boundary = 101
coord = '0 0 0'
input = generated_mesh
[]
[side]
type = ExtraNodesetGenerator
new_boundary = 102
coord = '2 0 0'
input = corner
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
add_variables = true
volumetric_locking_correction = true
use_automatic_differentiation = true
generate_output = 'elastic_strain_xx stress_xx creep_strain_xx creep_strain_yy creep_strain_zz'
[]
[]
[Materials]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "trial_creep"
max_iterations = 50
absolute_tolerance = 1e-18
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
hill_constants = "0.25 0.4 0.65 1.5 1.5 1.5"
use_large_rotation = true
[]
[trial_creep]
type = ADHillCreepStressUpdate
coefficient = 5e-14
n_exponent = 10
m_exponent = 0
activation_energy = 0
max_inelastic_increment = 0.00003
absolute_tolerance = 1e-18
relative_tolerance = 1e-18
# Force it to not use integration error
max_integration_error = 100.0
use_transformation = true
[]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 500
poissons_ratio = 0.0
[]
[]
[BCs]
[fix_x]
type = ADDirichletBC
variable = disp_x
boundary = bottom
value = 0
[]
[rot_z]
type = DisplacementAboutAxis
boundary = bottom
function = t
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '1. 0. 1.0e-13'
component = 2
variable = disp_z
[]
#
[rot_y]
type = DisplacementAboutAxis
boundary = bottom
function = t
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '1. 0. 1.0e-13'
component = 1
variable = disp_y
[]
[rot_z90]
type = DisplacementAboutAxis
boundary = bottom
function = 90
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '1. 0. 1.0e-13'
component = 2
variable = disp_z
[]
#
[rot_y90]
type = DisplacementAboutAxis
boundary = bottom
function = 90
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '1. 0. 1.0e-13'
component = 1
variable = disp_y
[]
[press]
type = Pressure
boundary = top
function = '-1.0*(t-90)*0.1'
use_displaced_mesh = true
displacements = 'disp_x disp_y disp_z'
variable = disp_z
[]
[]
[Postprocessors]
# The strain is along Z axis, naming it creep_strain_yy
# for better comparison.
[creep_strain_yy]
type = ADElementAverageMaterialProperty
mat_prop = creep_strain_zz
[]
[]
[Controls]
[c1]
type = TimePeriod
enable_objects = 'BCs::rot_z BCs::rot_y'
disable_objects = 'BCs::rot_z90 BCs::rot_y90 BCs::press'
start_time = '0'
end_time = '90'
[]
[c190plus]
type = TimePeriod
enable_objects = 'BCs::rot_z90 BCs::rot_y90 BCs::press'
disable_objects = 'BCs::rot_z BCs::rot_y '
start_time = '90'
end_time = '390'
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart'
petsc_options_value = '101'
line_search = 'none'
nl_rel_tol = 1e-11
nl_abs_tol = 1e-11
nl_max_its = 50
l_tol = 1e-4
l_max_its = 50
start_time = 0.0
dt = 0.1
dtmin = 0.1
num_steps = 1200
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Outputs]
exodus = false
csv = true
[]
(modules/solid_mechanics/test/tests/torque_reaction/disp_about_axis_axial_motion_delayed.i)
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction=true
[]
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
[]
[Physics/SolidMechanics/QuasiStatic]
[master]
strain = FINITE
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress'
add_variables = true
decomposition_method = EigenSolution
use_finite_deform_jacobian = true
[]
[]
[BCs]
[./bottom_z]
type = DirichletBC
variable = disp_z
boundary = bottom
value = 0.0
[../]
# Because rotation is prescribed about the z axis, the
# DisplacementAboutAxis BC is only needed for the x and y
# displacements.
[./top_x]
type = DisplacementAboutAxis
boundary = top
function = 't'
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 0
variable = disp_x
[../]
[./top_y]
type = DisplacementAboutAxis
boundary = top
function = 't'
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 1
variable = disp_y
[../]
# DisplacementAboutAxis incremental
[./top_x_rate]
type = DisplacementAboutAxis
boundary = top
function = 1
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 0
variable = disp_x
angular_velocity = true
[../]
[./top_y_rate]
type = DisplacementAboutAxis
boundary = top
function = 1
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 1
variable = disp_y
angular_velocity = true
[../]
[]
# Engage the incremental DisplacementAboutAxis after 30 seconds
[Controls]
[./c1]
type = TimePeriod
enable_objects = 'BCs::top_x BCs::top_y'
disable_objects = 'BCs::top_x_rate BCs::top_y_rate'
start_time = '0'
end_time = '30'
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 207000
poissons_ratio = 0.3
[../]
[./elastic_stress]
type = ComputeFiniteStrainElasticStress
[../]
[]
[Postprocessors]
[./disp_x_5]
type = NodalVariableValue
variable = disp_x
nodeid = 5
[../]
[./disp_y_5]
type = NodalVariableValue
variable = disp_y
nodeid = 5
[../]
[./disp_x_6]
type = NodalVariableValue
variable = disp_x
nodeid = 6
[../]
[./disp_y_6]
type = NodalVariableValue
variable = disp_y
nodeid = 6
[../]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart'
petsc_options_value = '101'
line_search = 'none'
l_max_its = 30
nl_max_its = 20
nl_rel_tol = 1e-10
nl_abs_tol = 1e-9
l_tol = 1e-8
start_time = 0.0
dt = 2
dtmin = 2 # die instead of cutting the timestep
end_time = 90
[]
[Outputs]
file_base = disp_about_axis_axial_motion_delayed_out
csv = true
[]
(modules/solid_mechanics/test/tests/finite_strain_elastic_anisotropy/3d_bar_orthotropic_full_rotation_ad.i)
[Mesh]
[generated_mesh]
type = GeneratedMeshGenerator
dim = 3
xmin = 0
xmax = 2
ymin = 0
ymax = 10
zmin = 0
zmax = 2
nx = 1
ny = 1
nz = 1
elem_type = HEX8
[]
[corner]
type = ExtraNodesetGenerator
new_boundary = 101
coord = '0 0 0'
input = generated_mesh
[]
[side]
type = ExtraNodesetGenerator
new_boundary = 102
coord = '2 0 0'
input = corner
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
add_variables = true
use_finite_deform_jacobian = true
volumetric_locking_correction = false
generate_output = 'stress_xx stress_yy stress_zz stress_xy stress_xz'
use_automatic_differentiation = true
[]
[]
[Materials]
[stress]
type = ADComputeFiniteStrainElasticStress
[]
[elasticity_tensor]
type = ADComputeElasticityTensor
fill_method = orthotropic
C_ijkl = '2.0e3 2.0e5 2.0e3 0.71428571e3 0.71428571e3 0.71428571e3 0.4 0.2 0.004 0.004 0.2 0.4'
[]
[]
[BCs]
[fix_z]
type = ADDirichletBC
variable = disp_z
boundary = bottom
value = 0
[]
[rot_y]
type = DisplacementAboutAxis
boundary = bottom
function = t
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 1
variable = disp_y
[]
#
[rot_x]
type = DisplacementAboutAxis
boundary = bottom
function = t
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 0
variable = disp_x
[]
[rot_y90]
type = DisplacementAboutAxis
boundary = bottom
function = 360
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 1
variable = disp_y
[]
#
[rot_x90]
type = DisplacementAboutAxis
boundary = bottom
function = 360
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 0
variable = disp_x
[]
[press]
boundary = top
function = '-1.0*(t-360)*10.0'
use_displaced_mesh = true
displacements = 'disp_x disp_y disp_z'
type = Pressure
variable = disp_y
[]
[]
[Controls]
[c1]
type = TimePeriod
enable_objects = 'BCs::rot_x BCs::rot_y'
disable_objects = 'BCs::rot_x90 BCs::rot_y90 BCs::press'
start_time = '0'
end_time = '360'
[]
[c190plus]
type = TimePeriod
enable_objects = 'BCs::rot_x90 BCs::rot_y90 BCs::press'
disable_objects = 'BCs::rot_x BCs::rot_y '
start_time = '360'
end_time = '660'
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart'
petsc_options_value = '101'
line_search = 'none'
nl_rel_tol = 1e-10
nl_abs_tol = 1e-08
nl_max_its = 50
l_tol = 1e-4
l_max_its = 50
start_time = 0.0
dt = 5
dtmin = 5
num_steps = 132
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Outputs]
exodus = true
[]
(modules/solid_mechanics/test/tests/finite_strain_elastic_anisotropy/3d_bar_orthotropic_90deg_rotation.i)
[Mesh]
[generated_mesh]
type = GeneratedMeshGenerator
dim = 3
xmin = 0
xmax = 2
ymin = 0
ymax = 10
zmin = 0
zmax = 2
nx = 1
ny = 1
nz = 1
elem_type = HEX8
[]
[corner]
type = ExtraNodesetGenerator
new_boundary = 101
coord = '0 0 0'
input = generated_mesh
[]
[side]
type = ExtraNodesetGenerator
new_boundary = 102
coord = '2 0 0'
input = corner
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
add_variables = true
use_finite_deform_jacobian = true
volumetric_locking_correction = false
generate_output = 'stress_xx stress_yy stress_zz stress_xy stress_xz'
[]
[]
[Materials]
[stress]
type = ComputeFiniteStrainElasticStress
[]
[elasticity_tensor]
type = ComputeElasticityTensor
fill_method = orthotropic
C_ijkl = '2.0e3 2.0e5 2.0e3 0.71428571e3 0.71428571e3 0.71428571e3 0.4 0.2 0.004 0.004 0.2 0.4'
[]
[]
[BCs]
[fix_z]
type = DirichletBC
variable = disp_z
boundary = bottom
value = 0
[]
[rot_y]
type = DisplacementAboutAxis
boundary = bottom
function = t
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 1
variable = disp_y
[]
#
[rot_x]
type = DisplacementAboutAxis
boundary = bottom
function = t
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 0
variable = disp_x
[]
[rot_y90]
type = DisplacementAboutAxis
boundary = bottom
function = 90
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 1
variable = disp_y
[]
#
[rot_x90]
type = DisplacementAboutAxis
boundary = bottom
function = 90
angle_units = degrees
axis_origin = '0. 0. 0.'
axis_direction = '0. 0. 1.'
component = 0
variable = disp_x
[]
[press]
boundary = top
function = '-1.0*(t-90)*10.0'
use_displaced_mesh = true
displacements = 'disp_x disp_y disp_z'
type = Pressure
variable = disp_x
[]
[]
[Controls]
[c1]
type = TimePeriod
enable_objects = 'BCs::rot_x BCs::rot_y'
disable_objects = 'BCs::rot_x90 BCs::rot_y90 BCs::press'
start_time = '0'
end_time = '90'
[]
[c190plus]
type = TimePeriod
enable_objects = 'BCs::rot_x90 BCs::rot_y90 BCs::press'
disable_objects = 'BCs::rot_x BCs::rot_y '
start_time = '90'
end_time = '390'
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart'
petsc_options_value = '101'
line_search = 'none'
nl_rel_tol = 1e-10
nl_abs_tol = 1e-08
nl_max_its = 50
l_tol = 1e-4
l_max_its = 50
start_time = 0.0
dt = 5
dtmin = 5
num_steps = 78
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Outputs]
exodus = true
[]
(modules/solid_mechanics/test/tests/torque_reaction/torque_reaction_cylinder.i)
# This test uses the DisplacementAboutAxis boundary condition to twist the top
# of a cylinder while the bottom face of the cylinder remains fixed. The
# TorqueReaction postprocessor is used to calculate the applied torque acting
# on the cylinder at the top face. This test can be extended, with a new mesh,
# to model a crack in the center of the cylinder face under type III loading.
[GlobalParams]
order = FIRST
family = LAGRANGE
displacements = 'disp_x disp_y disp_z'
[]
[Mesh]
file = cylinder.e
[]
[Problem]
extra_tag_vectors = 'ref'
[]
[GlobalParams]
volumetric_locking_correction=true
[]
[AuxVariables]
[./saved_x]
[../]
[./saved_y]
[../]
[./saved_z]
[../]
[]
[AuxKernels]
[saved_x]
type = TagVectorAux
vector_tag = 'ref'
v = 'disp_x'
variable = 'saved_x'
[]
[saved_y]
type = TagVectorAux
vector_tag = 'ref'
v = 'disp_y'
variable = 'saved_y'
[]
[saved_z]
type = TagVectorAux
vector_tag = 'ref'
v = 'disp_z'
variable = 'saved_z'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[master]
strain = FINITE
generate_output = 'stress_xx'
add_variables = true
extra_vector_tags = 'ref'
[]
[]
[BCs]
[./bottom_x]
type = DirichletBC
variable = disp_x
boundary = 1
value = 0.0
[../]
[./bottom_y]
type = DirichletBC
variable = disp_y
boundary = 1
value = 0.0
[../]
[./bottom_z]
type = DirichletBC
variable = disp_z
boundary = 1
value = 0.0
[../]
[./top_x]
type = DisplacementAboutAxis
boundary = 2
function = '0.1*t'
angle_units = degrees
axis_origin = '10. 10. 10.'
axis_direction = '0 -1.0 1.0'
component = 0
variable = disp_x
[../]
[./top_y]
type = DisplacementAboutAxis
boundary = 2
function = '0.1*t'
angle_units = degrees
axis_origin = '10. 10. 10.'
axis_direction = '0 -1.0 1.0'
component = 1
variable = disp_y
[../]
[./top_z]
type = DisplacementAboutAxis
boundary = 2
function = '0.1*t'
angle_units = degrees
axis_origin = '10. 10. 10.'
axis_direction = '0 -1.0 1.0'
component = 2
variable = disp_z
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 207000
poissons_ratio = 0.3
[../]
[./elastic_stress]
type = ComputeFiniteStrainElasticStress
[../]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart'
petsc_options_value = '101'
line_search = 'none'
l_max_its = 50
nl_max_its = 20
nl_abs_tol = 1e-12
nl_rel_tol = 1e-11
l_tol = 1e-10
start_time = 0.0
dt = 0.25
end_time = 0.5
[]
[Postprocessors]
[./torque]
type = TorqueReaction
boundary = 2
reaction_force_variables = 'saved_x saved_y saved_z'
axis_origin = '10. 10. 10.'
direction_vector = '0 -1.0 1.0'
[../]
[]
[Outputs]
exodus = true
[]